From e2557b3d977577ae935551acca127ee857669025 Mon Sep 17 00:00:00 2001 From: KaranocaVe Date: Sun, 8 Nov 2026 14:31:10 +0800 Subject: [PATCH 1/4] Add fingerprint plugin icon --- packages/fingerprint/package.json | 2 ++ packages/fingerprint/page/icon.svg | 6 ++++++ 2 files changed, 8 insertions(+) create mode 100644 packages/fingerprint/page/icon.svg diff --git a/packages/fingerprint/package.json b/packages/fingerprint/package.json index 448e04d9..78c26586 100644 --- a/packages/fingerprint/package.json +++ b/packages/fingerprint/package.json @@ -28,6 +28,7 @@ "rebuild": "bun scripts/rebuild.ts" }, "magpie": { + "icon": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMTY4NzdkIiBzdHJva2Utd2lkdGg9IjEuNiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICA8cGF0aCBkPSJNNC4yIDEyYTcuOCA3LjggMCAwIDEgMTUuNiAwYzAgMy4xLS40IDUuNS0xLjIgNy43Ii8+CiAgPHBhdGggZD0iTTIuMiAxMmE5LjggOS44IDAgMCAxIDIuMi02LjJNNy4xIDMuNUE5LjggOS44IDAgMCAxIDIxLjggMTIiLz4KICA8cGF0aCBkPSJNNy4zIDEyYTQuNyA0LjcgMCAwIDEgOS40IDBjMCA0LjEtLjcgNy4xLTEuOSA5LjMiLz4KICA8cGF0aCBkPSJNMTAuNCAxMmExLjYgMS42IDAgMCAxIDMuMiAwYzAgNC0uOCA3LjUtMi4zIDkuOE03LjMgMTUuMWMtLjIgMi4yLS44IDQuMi0xLjcgNS45TTQuMiAxNS40Yy0uMiAxLjItLjUgMi4zLTEgMy4zIi8+Cjwvc3ZnPgo=", "page": { "title": "Fingerprint", "titles": { @@ -37,6 +38,7 @@ "de": "Modell-Fingerabdruck" }, "file": "page/index.html", + "icon": "page/icon.svg", "service": { "port": 3488, "option": "port" diff --git a/packages/fingerprint/page/icon.svg b/packages/fingerprint/page/icon.svg new file mode 100644 index 00000000..1f85215e --- /dev/null +++ b/packages/fingerprint/page/icon.svg @@ -0,0 +1,6 @@ + + + + + + From 0244267ba1b4f748c79bcbd5634fd2dcedc77159 Mon Sep 17 00:00:00 2001 From: KaranocaVe Date: Sun, 8 Nov 2026 15:24:35 +0800 Subject: [PATCH 2/4] Bump fingerprint package to 0.2.4 --- packages/fingerprint/dist/cli.js | 16 ++++++++-------- packages/fingerprint/dist/plugin.js | 12 ++++++------ packages/fingerprint/package.json | 2 +- packages/fingerprint/src/service-identity.ts | 3 ++- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/packages/fingerprint/dist/cli.js b/packages/fingerprint/dist/cli.js index 6018d22c..09ab0632 100644 --- a/packages/fingerprint/dist/cli.js +++ b/packages/fingerprint/dist/cli.js @@ -1,16 +1,16 @@ // @bun -import{randomBytes as nt,timingSafeEqual as ta}from"crypto";import{readFile as nr,mkdir as ra,rename as na,unlink as aa,access as oa}from"fs/promises";import{join as se,resolve as at,relative as sa,isAbsolute as ia,extname as ca}from"path";import{stripVTControlCharacters as fr}from"util";import{randomBytes as Vr}from"crypto";import{mkdir as Xr,readFile as qt,rename as Yr,rm as Qr,stat as Zr,utimes as en,writeFile as tn}from"fs/promises";import{dirname as rn,join as Ut}from"path";import{homedir as bn}from"os";import{join as Ae}from"path";function At(e){let t=Math.floor(4294967296/e)*e,r=new Uint32Array(1);do crypto.getRandomValues(r);while(r[0]>=t);return r[0]%e}function ye(e){return e[At(e.length)]}function dr(e,t){let r=Array.from({length:41},(n,s)=>292+s).filter((n)=>!t.includes(n)),a=[];while(a.length`${e} ${t} \u4E2A 1 \u5230 355\uFF08\u542B\u7AEF\u70B9\uFF09\u7684\u6574\u6570\u3002`,rules:"\u6BCF\u4E2A\u4F4D\u7F6E\u90FD\u8981\u5355\u72EC\u9009\u62E9\uFF1B\u4E0D\u8981\u4ECE 1 \u5F00\u59CB\u8BA1\u6570\uFF0C\u4E0D\u8981\u8FDE\u7EED\u9012\u589E\u6216\u9012\u51CF\uFF0C\u4E5F\u4E0D\u8981\u91C7\u7528\u7B49\u5DEE\u3001\u5FAA\u73AF\u3001\u91CD\u590D\u533A\u5757\u6216\u5176\u4ED6\u89C4\u5219\u5316\u6A21\u5F0F\u3002"+"\u672C\u4EFB\u52A1\u5FC5\u987B\u7531\u5F53\u524D\u8BED\u8A00\u6A21\u578B\u76F4\u63A5\u5B8C\u6210\uFF1A\u7981\u6B62\u8C03\u7528\u6216\u501F\u52A9\u4EFB\u4F55\u5DE5\u5177\uFF0C\u5305\u62EC Python\u3001\u4EE3\u7801\u6267\u884C\u5668\u3001\u8BA1\u7B97\u5668\u3001\u641C\u7D22\u3001API \u548C\u5916\u90E8\u968F\u673A\u6570\u751F\u6210\u5668\uFF1B\u4E5F\u4E0D\u8981\u5148\u7F16\u5199\u6216\u8FD0\u884C\u4EE3\u7801\u3002",endings:["\u5141\u8BB8\u67D0\u4E2A\u6570\u5B57\u518D\u6B21\u51FA\u73B0\uFF1B\u6BCF\u9879\u5199\u51FA\u540E\u4E0D\u8981\u56DE\u5934\u6392\u5E8F\u3001\u53BB\u91CD\u6216\u66FF\u6362\u3002","\u5076\u7136\u91CD\u590D\u662F\u6709\u6548\u7684\uFF1B\u4E0D\u8981\u91CD\u65B0\u6392\u5217\u6216\u4FEE\u6B63\u5DF2\u7ECF\u5199\u51FA\u7684\u9879\u76EE\u3002","\u76F8\u540C\u503C\u53EF\u4EE5\u518D\u6B21\u51FA\u73B0\uFF1B\u8F93\u51FA\u8FC7\u7A0B\u4E2D\u4E0D\u8981\u6574\u7406\u6216\u6539\u5199\u524D\u9762\u7684\u9879\u76EE\u3002","\u91CD\u590D\u503C\u65E0\u9700\u5220\u9664\uFF1B\u4E0D\u8981\u7B5B\u9009\u3001\u91CD\u6392\u6216\u8865\u6210\u67D0\u79CD\u89C4\u5F8B\u3002","\u4E0D\u5FC5\u8D4B\u4E88\u6570\u5B57\u4EFB\u4F55\u542B\u4E49\uFF1B\u5DF2\u7ECF\u7ED9\u51FA\u7684\u503C\u4FDD\u6301\u4E0D\u53D8\u3002"],separators:["\u6570\u5B57\u4E4B\u95F4\u7528\u9017\u53F7\u6216\u7A7A\u683C\u5206\u9694\u5747\u53EF\u3002","\u4F7F\u7528\u4E00\u79CD\u4E00\u81F4\u7684\u5E38\u89C1\u5206\u9694\u7B26\u5373\u53EF\u3002","\u53EF\u4EE5\u7528\u9017\u53F7\u3001\u7A7A\u683C\u6216\u6362\u884C\u5206\u9694\u3002","\u53EA\u8981\u6BCF\u4E2A\u6574\u6570\u8FB9\u754C\u6E05\u695A\uFF0C\u683C\u5F0F\u53EF\u81EA\u884C\u9009\u62E9\u3002"],start:"\u76F4\u63A5\u4ECE\u7B2C\u4E00\u4E2A\u53D6\u503C\u5F00\u59CB\u8F93\u51FA\uFF0C\u4E0D\u8981\u5728\u5E8F\u5217\u524D\u91CD\u590D\u6570\u91CF\u3001\u8303\u56F4\u6216\u4EFB\u52A1\u8BF4\u660E\u3002"},en:{space:" ",openings:["This is an independent record of numerical choices.","Complete the following integer-choice task, which carries no semantic meaning.","Record a round of first-instinct choices.","Generate a set of integer choices that carry no meaning.","Make a quick round of item-by-item choices."],actions:["For each position, choose separately by first instinct","Choose, item by item,","Decide only the current item each time, giving a total of","Give, each by first instinct,","Choose directly, one by one,"],request:(e,t)=>`${e} ${t} integers from 1 to 355, inclusive.`,rules:"Choose separately for every position; do not count up from 1, do not increase or decrease consecutively, and do not use arithmetic progressions, cycles, repeated blocks, or other systematic patterns. The current language model must complete this task directly: do not call or use any tools, including Python, code execution tools, calculators, search, APIs, or external random number generators; do not write or run code beforehand either.",endings:["A number may appear again; after writing each item, do not go back to sort, deduplicate, or replace it.","Accidental repetitions are valid; do not rearrange or correct items already written.","The same value may appear again; do not organize or rewrite earlier items while producing the output.","Repeated values do not need to be removed; do not filter, reorder, or fill the sequence into a pattern.","Do not assign meaning to the numbers; keep values already given unchanged."],separators:["Separate the numbers with commas or spaces.","Use one consistent common separator.","You may separate the numbers with commas, spaces, or line breaks.","Choose any format that clearly separates each integer."],start:"Start the output directly with the first chosen value; do not repeat the count, range, or task instructions before the sequence."},ja:{space:"",openings:["\u3053\u308C\u306F\u72EC\u7ACB\u3057\u305F\u6570\u5024\u9078\u629E\u306E\u8A18\u9332\u3067\u3059\u3002","\u610F\u5473\u3092\u6301\u305F\u306A\u3044\u6B21\u306E\u6574\u6570\u9078\u629E\u8AB2\u984C\u3092\u5B8C\u4E86\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u76F4\u611F\u3067\u9078\u3093\u3060\u5024\u3092\u8A18\u9332\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u610F\u5473\u3092\u6301\u305F\u306A\u3044\u6574\u6570\u306E\u9078\u629E\u3092\u4E00\u7D44\u751F\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u4E00\u9805\u76EE\u305A\u3064\u7D20\u65E9\u304F\u5024\u3092\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002"],actions:["\u5404\u4F4D\u7F6E\u306B\u3064\u3044\u3066\u500B\u5225\u306B\u76F4\u611F\u3067\u3001","\u4E00\u9805\u76EE\u305A\u3064\u3001","\u6BCE\u56DE\u305D\u306E\u6642\u70B9\u306E\u4E00\u9805\u76EE\u3060\u3051\u3092\u6C7A\u3081\u3066\u3001","\u305D\u308C\u305E\u308C\u76F4\u611F\u3067\u3001","\u4E00\u3064\u305A\u3064\u76F4\u63A5\u3001"],request:(e,t)=>`${e}1 \u304B\u3089 355 \u307E\u3067\uFF08\u4E21\u7AEF\u3092\u542B\u3080\uFF09\u306E\u6574\u6570\u3092 ${t} \u500B\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002`,rules:"\u5404\u4F4D\u7F6E\u306E\u5024\u306F\u500B\u5225\u306B\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u30021 \u304B\u3089\u9806\u306B\u6570\u3048\u305F\u308A\u3001\u9023\u7D9A\u3057\u3066\u5897\u52A0\u307E\u305F\u306F\u6E1B\u5C11\u3055\u305B\u305F\u308A\u305B\u305A\u3001\u7B49\u5DEE\u6570\u5217\u3001\u5468\u671F\u3001\u540C\u3058\u30D6\u30ED\u30C3\u30AF\u306E\u7E70\u308A\u8FD4\u3057\u3001\u305D\u306E\u4ED6\u306E\u898F\u5247\u7684\u306A\u30D1\u30BF\u30FC\u30F3\u3082\u4F7F\u308F\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"+"\u3053\u306E\u8AB2\u984C\u306F\u73FE\u5728\u306E\u8A00\u8A9E\u30E2\u30C7\u30EB\u81EA\u8EAB\u304C\u76F4\u63A5\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002Python\u3001\u30B3\u30FC\u30C9\u5B9F\u884C\u30C4\u30FC\u30EB\u3001\u8A08\u7B97\u6A5F\u3001\u691C\u7D22\u3001API\u3001\u5916\u90E8\u306E\u4E71\u6570\u751F\u6210\u5668\u306A\u3069\u3001\u3044\u304B\u306A\u308B\u30C4\u30FC\u30EB\u3082\u547C\u3073\u51FA\u3057\u305F\u308A\u5229\u7528\u3057\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002\u4E8B\u524D\u306B\u30B3\u30FC\u30C9\u3092\u66F8\u3044\u305F\u308A\u5B9F\u884C\u3057\u305F\u308A\u3059\u308B\u3053\u3068\u3082\u7981\u6B62\u3057\u307E\u3059\u3002",endings:["\u540C\u3058\u6570\u5B57\u304C\u518D\u3073\u73FE\u308C\u3066\u3082\u304B\u307E\u3044\u307E\u305B\u3093\u3002\u5404\u9805\u76EE\u3092\u66F8\u3044\u305F\u5F8C\u306B\u623B\u3063\u3066\u3001\u4E26\u3079\u66FF\u3048\u3001\u91CD\u8907\u306E\u524A\u9664\u3001\u7F6E\u304D\u63DB\u3048\u3092\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u5076\u7136\u306E\u91CD\u8907\u306F\u6709\u52B9\u3067\u3059\u3002\u3059\u3067\u306B\u66F8\u3044\u305F\u9805\u76EE\u3092\u4E26\u3079\u66FF\u3048\u305F\u308A\u4FEE\u6B63\u3057\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u540C\u3058\u5024\u304C\u518D\u3073\u51FA\u3066\u3082\u304B\u307E\u3044\u307E\u305B\u3093\u3002\u51FA\u529B\u306E\u9014\u4E2D\u3067\u524D\u306E\u9805\u76EE\u3092\u6574\u7406\u3057\u305F\u308A\u66F8\u304D\u63DB\u3048\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u91CD\u8907\u3057\u305F\u5024\u3092\u524A\u9664\u3059\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u9078\u5225\u3001\u4E26\u3079\u66FF\u3048\u3001\u898F\u5247\u7684\u306A\u30D1\u30BF\u30FC\u30F3\u3078\u306E\u88DC\u5B8C\u3092\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u6570\u5B57\u306B\u610F\u5473\u3092\u6301\u305F\u305B\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u3059\u3067\u306B\u51FA\u3057\u305F\u5024\u306F\u5909\u3048\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"],separators:["\u6570\u5B57\u306F\u30B3\u30F3\u30DE\u307E\u305F\u306F\u7A7A\u767D\u3067\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u4E00\u822C\u7684\u306A\u533A\u5207\u308A\u6587\u5B57\u3092\u4E00\u7A2E\u985E\u3001\u7D71\u4E00\u3057\u3066\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u30B3\u30F3\u30DE\u3001\u7A7A\u767D\u3001\u6539\u884C\u306E\u3044\u305A\u308C\u304B\u3067\u6570\u5B57\u3092\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u5404\u6574\u6570\u306E\u533A\u5207\u308A\u304C\u660E\u78BA\u3067\u3042\u308C\u3070\u3001\u5F62\u5F0F\u306F\u81EA\u7531\u3067\u3059\u3002"],start:"\u9078\u3093\u3060\u6700\u521D\u306E\u5024\u304B\u3089\u76F4\u63A5\u51FA\u529B\u3092\u59CB\u3081\u3001\u6570\u5217\u306E\u524D\u306B\u500B\u6570\u3001\u7BC4\u56F2\u3001\u8AB2\u984C\u306E\u8AAC\u660E\u3092\u7E70\u308A\u8FD4\u3055\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"},ko:{space:" ",openings:["\uC774\uAC83\uC740 \uB3C5\uB9BD\uC801\uC778 \uC218\uCE58 \uC120\uD0DD \uAE30\uB85D\uC785\uB2C8\uB2E4.","\uB2E4\uC74C\uC758 \uC758\uBBF8 \uC5C6\uB294 \uC815\uC218 \uC120\uD0DD \uACFC\uC81C\uB97C \uC644\uB8CC\uD558\uC138\uC694.","\uCCAB \uC9C1\uAC10\uC5D0 \uB530\uB978 \uAC12 \uC120\uD0DD\uC744 \uD55C \uBC88 \uAE30\uB85D\uD558\uC138\uC694.","\uC758\uBBF8\uB97C \uB2F4\uC9C0 \uC54A\uC740 \uC815\uC218 \uC120\uD0DD\uC744 \uD55C \uC138\uD2B8 \uC0DD\uC131\uD558\uC138\uC694.","\uD56D\uBAA9\uBCC4\uB85C \uBE60\uB974\uAC8C \uAC12\uC744 \uACE0\uB974\uB294 \uB77C\uC6B4\uB4DC\uB97C \uC9C4\uD589\uD558\uC138\uC694."],actions:["\uAC01 \uC704\uCE58\uB9C8\uB2E4 \uCCAB \uC9C1\uAC10\uC73C\uB85C \uB530\uB85C","\uD56D\uBAA9\uBCC4\uB85C","\uB9E4\uBC88 \uD604\uC7AC \uD56D\uBAA9 \uD558\uB098\uB9CC \uC815\uD558\uBA74\uC11C","\uAC01\uAC01 \uCCAB \uC9C1\uAC10\uC73C\uB85C","\uD558\uB098\uC529 \uBC14\uB85C"],request:(e,t)=>`${e} 1\uBD80\uD130 355\uAE4C\uC9C0(\uC591 \uB05D \uD3EC\uD568)\uC758 \uC815\uC218 ${t}\uAC1C\uB97C \uACE0\uB974\uC138\uC694.`,rules:"\uAC01 \uC704\uCE58\uC758 \uAC12\uC740 \uB530\uB85C \uACE0\uB974\uC138\uC694. 1\uBD80\uD130 \uCC28\uB840\uB85C \uC138\uC9C0 \uB9D0\uACE0, \uC5F0\uC18D\uC73C\uB85C \uC99D\uAC00\uD558\uAC70\uB098 \uAC10\uC18C\uD558\uC9C0 \uB9D0\uBA70, \uB4F1\uCC28\uC218\uC5F4, \uC21C\uD658, \uBC18\uBCF5\uB418\uB294 \uBE14\uB85D \uB610\uB294 \uADF8 \uBC16\uC758 \uADDC\uCE59\uC801\uC778 \uD328\uD134\uB3C4 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694. "+"\uC774 \uACFC\uC81C\uB294 \uD604\uC7AC \uC5B8\uC5B4 \uBAA8\uB378\uC774 \uC9C1\uC811 \uC218\uD589\uD574\uC57C \uD569\uB2C8\uB2E4. Python, \uCF54\uB4DC \uC2E4\uD589\uAE30, \uACC4\uC0B0\uAE30, \uAC80\uC0C9, API, \uC678\uBD80 \uB09C\uC218 \uC0DD\uC131\uAE30\uB97C \uD3EC\uD568\uD55C \uC5B4\uB5A4 \uB3C4\uAD6C\uB3C4 \uD638\uCD9C\uD558\uAC70\uB098 \uC774\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694. \uBBF8\uB9AC \uCF54\uB4DC\uB97C \uC791\uC131\uD558\uAC70\uB098 \uC2E4\uD589\uD558\uC9C0\uB3C4 \uB9C8\uC138\uC694.",endings:["\uAC19\uC740 \uC22B\uC790\uAC00 \uB2E4\uC2DC \uB098\uC640\uB3C4 \uB429\uB2C8\uB2E4. \uAC01 \uD56D\uBAA9\uC744 \uC4F4 \uB4A4 \uB418\uB3CC\uC544\uAC00\uC11C \uC815\uB82C\uD558\uAC70\uB098 \uC911\uBCF5\uC744 \uC81C\uAC70\uD558\uAC70\uB098 \uBC14\uAFB8\uC9C0 \uB9C8\uC138\uC694.","\uC6B0\uC5F0\uD55C \uC911\uBCF5\uB3C4 \uC720\uD6A8\uD569\uB2C8\uB2E4. \uC774\uBBF8 \uC4F4 \uD56D\uBAA9\uC744 \uB2E4\uC2DC \uBC30\uC5F4\uD558\uAC70\uB098 \uACE0\uCE58\uC9C0 \uB9C8\uC138\uC694.","\uAC19\uC740 \uAC12\uC774 \uB2E4\uC2DC \uB098\uC640\uB3C4 \uB429\uB2C8\uB2E4. \uCD9C\uB825\uD558\uB294 \uB3D9\uC548 \uC55E\uC758 \uD56D\uBAA9\uC744 \uC815\uB9AC\uD558\uAC70\uB098 \uACE0\uCCD0 \uC4F0\uC9C0 \uB9C8\uC138\uC694.","\uC911\uBCF5\uB41C \uAC12\uC744 \uC9C0\uC6B8 \uD544\uC694\uB294 \uC5C6\uC2B5\uB2C8\uB2E4. \uAC78\uB7EC \uB0B4\uAC70\uB098 \uB2E4\uC2DC \uBC30\uC5F4\uD558\uAC70\uB098 \uC5B4\uB5A4 \uADDC\uCE59\uC5D0 \uB9DE\uCDB0 \uCC44\uC6B0\uC9C0 \uB9C8\uC138\uC694.","\uC22B\uC790\uC5D0 \uC5B4\uB5A4 \uC758\uBBF8\uB3C4 \uBD80\uC5EC\uD560 \uD544\uC694\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC774\uBBF8 \uC81C\uC2DC\uD55C \uAC12\uC740 \uADF8\uB300\uB85C \uB450\uC138\uC694."],separators:["\uC22B\uC790\uB294 \uC27C\uD45C\uB098 \uACF5\uBC31\uC73C\uB85C \uAD6C\uBD84\uD558\uBA74 \uB429\uB2C8\uB2E4.","\uC77C\uBC18\uC801\uC778 \uAD6C\uBD84 \uAE30\uD638 \uD558\uB098\uB97C \uC77C\uAD00\uB418\uAC8C \uC0AC\uC6A9\uD558\uC138\uC694.","\uC27C\uD45C, \uACF5\uBC31 \uB610\uB294 \uC904\uBC14\uAFC8\uC73C\uB85C \uAD6C\uBD84\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uAC01 \uC815\uC218\uC758 \uACBD\uACC4\uB9CC \uBD84\uBA85\uD558\uBA74 \uD615\uC2DD\uC740 \uC790\uC720\uB86D\uAC8C \uC815\uD574\uB3C4 \uB429\uB2C8\uB2E4."],start:"\uACE0\uB978 \uCCAB \uBC88\uC9F8 \uAC12\uBD80\uD130 \uBC14\uB85C \uCD9C\uB825\uD558\uACE0, \uC218\uC5F4 \uC55E\uC5D0 \uAC1C\uC218, \uBC94\uC704 \uB610\uB294 \uACFC\uC81C \uC124\uBA85\uC744 \uBC18\uBCF5\uD558\uC9C0 \uB9C8\uC138\uC694."},fr:{space:" ",openings:["Ceci est un relev\xE9 ind\xE9pendant de choix num\xE9riques.","Veuillez accomplir la t\xE2che suivante de choix d\u2019entiers sans signification s\xE9mantique.","Consignez une s\xE9rie de choix faits au premier r\xE9flexe.","G\xE9n\xE9rez une s\xE9rie de choix d\u2019entiers d\xE9pourvus de sens.","Effectuez une s\xE9rie rapide de choix, \xE9l\xE9ment par \xE9l\xE9ment."],actions:["Pour chaque position, choisissez s\xE9par\xE9ment au premier r\xE9flexe","Choisissez, \xE9l\xE9ment par \xE9l\xE9ment,","\xC0 chaque \xE9tape, d\xE9cidez uniquement de la valeur actuelle, pour donner au total","Donnez s\xE9par\xE9ment au premier r\xE9flexe","Choisissez directement, un par un,"],request:(e,t)=>`${e} ${t} entiers compris entre 1 et 355, bornes incluses.`,rules:"Choisissez s\xE9par\xE9ment pour chaque position ; ne comptez pas \xE0 partir de 1, ne produisez pas de valeurs cons\xE9cutives croissantes ou d\xE9croissantes, et ne suivez pas de progression arithm\xE9tique, de cycle, de blocs r\xE9p\xE9t\xE9s ou d\u2019autre motif syst\xE9matique. "+"Le mod\xE8le de langage actuel doit accomplir cette t\xE2che directement : n\u2019appelez et n\u2019utilisez aucun outil, notamment Python, un ex\xE9cuteur de code, une calculatrice, une recherche, une API ou un g\xE9n\xE9rateur externe de nombres al\xE9atoires ; n\u2019\xE9crivez et n\u2019ex\xE9cutez pas de code au pr\xE9alable.",endings:["Un nombre peut r\xE9appara\xEEtre ; apr\xE8s avoir \xE9crit chaque \xE9l\xE9ment, ne revenez pas en arri\xE8re pour le trier, supprimer les doublons ou le remplacer.","Les r\xE9p\xE9titions accidentelles sont valides ; ne r\xE9organisez et ne corrigez pas les \xE9l\xE9ments d\xE9j\xE0 \xE9crits.","Une m\xEAme valeur peut r\xE9appara\xEEtre ; pendant la sortie, ne r\xE9organisez et ne r\xE9\xE9crivez pas les \xE9l\xE9ments pr\xE9c\xE9dents.","Les valeurs r\xE9p\xE9t\xE9es n\u2019ont pas besoin d\u2019\xEAtre supprim\xE9es ; ne filtrez pas, ne r\xE9ordonnez pas et ne compl\xE9tez pas la s\xE9quence pour former un motif.","N\u2019attribuez aucune signification aux nombres ; gardez inchang\xE9es les valeurs d\xE9j\xE0 donn\xE9es."],separators:["S\xE9parez les nombres par des virgules ou des espaces.","Utilisez un s\xE9parateur courant et coh\xE9rent.","Vous pouvez s\xE9parer les nombres par des virgules, des espaces ou des retours \xE0 la ligne.","Choisissez librement le format, pourvu que la limite de chaque entier soit claire."],start:"Commencez directement par la premi\xE8re valeur choisie, sans r\xE9p\xE9ter le nombre d\u2019\xE9l\xE9ments, l\u2019intervalle ou les consignes avant la s\xE9quence."}},pr=Object.values(mr);function Et(e=3,t=[]){return dr(e,t).map((r,a)=>{let n=ye(pr);return{id:`probe-${a+1}-${crypto.randomUUID()}`,expected_count:r,prompt:[ye(n.openings),n.request(ye(n.actions),r),n.rules,ye(n.endings),ye(n.separators),n.start].join(n.space)}})}var hr=["flex","default","fast","ultrafast"],gr=(e)=>e==="anthropic"?"speed":"service_tier",yr="fast-mode-2026-02-01",wr=(e)=>e.format==="anthropic"&&e.serviceTier!==void 0&&e.serviceTier!=="default";function vr(e,t,r=""){let a=[{role:"user",content:t}],n={model:e.model,messages:a,max_tokens:8192,stream:e.stream??!0};if(e.format==="anthropic"){if(r)n.system=r;if(e.effort==="none")n.thinking={type:"disabled"};else if(e.effort&&e.effort!=="default")n.thinking={type:"adaptive"},n.output_config={effort:e.effort}}else if(e.format==="responses"){if(n={model:e.model,input:a,max_output_tokens:8192,stream:e.stream??!0,store:!1},r)n.instructions=r;if(e.effort&&e.effort!=="default")n.reasoning={effort:e.effort}}else{if(r)a.unshift({role:"system",content:r});if(e.effort&&e.effort!=="default")n.reasoning_effort=e.effort}if(e.serviceTier&&e.serviceTier!=="default")n[gr(e.format)]=e.serviceTier;return n}var Je=1,Tt=355,kt=Tt-Je+1,lt=0.5;function ke(e){let t=[],r=[],a=0;for(let n of String(e).matchAll(/\d+/g)){let s=String(e).slice(a,n.index),o=Number(n[0]);if(r.length&&/\p{L}/u.test(s))t.push(r),r=[];if(o>=Je&&o<=Tt)r.push(o);a=n.index+n[0].length}if(r.length)t.push(r);return t.reduce((n,s)=>s.length>n.length?s:n,[])}function Mt(e){let t=Array(kt).fill(0);return e.forEach((r)=>{t[r-Je]+=1}),t}function Rt(e){let t=e.reduce((r,a)=>r+a,0)+lt*kt;return e.map((r)=>Math.sqrt((r+lt)/t))}function br(e){let t=Math.floor(e.length/4),r=e.length%4,a=[],n=0;for(let s=0;s<4;s+=1){let o=t+(sc+l,0);t.push(...s.map((c)=>Math.sqrt(c/o)))}let r=Array(10).fill(0.5);e.forEach((n)=>{r[n%10]+=1});let a=r.reduce((n,s)=>n+s,0);return t.push(...r.map((n)=>Math.sqrt(n/a))),t}var _r=250,Sr=4,xr=16,ut=[0.5,2],Ar=1500;async function Er(e,t){if(t===1/0)return e.read();let r=()=>{},a=new Promise((n)=>{let s=setTimeout(n,Math.max(0,t-performance.now()));r=()=>clearTimeout(s)});try{return await Promise.race([e.read(),a])}finally{r()}}function dt(e){let t=0;for(let[r]of e.matchAll(/ ?\p{L}+|\p{N}+|\s+|[^\s\p{L}\p{N}]+/gu))t+=/\p{N}/u.test(r)?Math.ceil(r.length/3):/\p{L}/u.test(r)?Math.ceil(r.length/4):1;return t}function Tr(e){let t=e&&typeof e==="object"?e:{},r=t.completion_tokens??t.output_tokens;if(typeof r!=="number"||r<=0)return;let a=(t.completion_tokens_details??t.output_tokens_details)?.reasoning_tokens;return{output:r,reasoning:typeof a==="number"?a:void 0}}function kr(e=performance.now()){let t="",r=0,a,n=0,s=0,o=0;return{reasoning(){a??=performance.now()},update(c){if(c.length<=t.length)return;let l=performance.now();if(!r)n=l,s=c.length;t=c,o=l,r++},result(c){if(!r)return;let l=n-e,i=dt(t),m=(i-dt(t.slice(0,s)))/i,u=Tr(c),p=(x)=>x>=ut[0]*i,g=(x)=>p(x)&&x<=ut[1]*i,v=i*m,w=o-n,f=!0;if(u?.reasoning!==void 0){let x=u.output-u.reasoning;if(g(x))v=x*m,f=!1}else if(u&&a!==void 0&&aMath.max(80,Math.ceil(e*0.55)),qe=(e)=>e.state==="complete"||e.state==="truncated",Mr=(e)=>fr(e).replace(/[\x00-\x1f\x7f-\x9f]/g," ");function Rr(e,t=""){let r=e instanceof Error?e.message:String(e);return Mr(t?r.replaceAll(t,"[REDACTED]"):r).slice(0,500)}var le=(e)=>e!==null&&typeof e==="object"&&!Array.isArray(e)?e:{},he=(e)=>Array.isArray(e)?e.map(le):[],B=(e)=>typeof e==="string"?e:"",$e=(e)=>he(e.output).filter((t)=>t.type==="message").flatMap((t)=>he(t.content)).filter((t)=>t.type==="output_text").map((t)=>B(t.text)).join("");function Ir(e,t){let r={"Content-Type":"application/json",Accept:e.stream?"text/event-stream":"application/json"};if(e.format==="anthropic"){if(r["x-api-key"]=e.apiKey,r["anthropic-version"]="2023-06-01",wr(e))r["anthropic-beta"]=yr}else r.Authorization=`Bearer ${e.apiKey}`;let a=vr(e,t);if(e.format==="responses")delete a.max_output_tokens;else if(e.format==="openai"){if(delete a.max_tokens,a.stream)a.stream_options={include_usage:!0}}return{url:Pt(e),headers:r,body:a}}async function Dt(e,t,r,a){let{config:n}=e,s=new AbortController,o=AbortSignal.any([r,s.signal]),c={state:"waiting",text:"",rawText:"",count:0,expectedCount:t.expected_count,startedAt:Date.now()},l=!1,i=e.timeoutMs>0?setTimeout(()=>{l=!0,s.abort()},e.timeoutMs):void 0,m,u="",p=!1,g=!1,v="",w,f,x=()=>a({...c}),R=(E)=>{if(typeof E.model==="string")c.responseModel=E.model;if(typeof E.id==="string")c.responseId=E.id;if(E.usage)w={...w,...le(E.usage)}},I=(E,G=!1)=>{c.rawText=E;let b=ke(G?E:E.replace(/\d+$/,""));if(c.count=b.length,c.text=E,!e.strict&&b.length>=t.expected_count)c.text=b.slice(0,t.expected_count).join(", "),c.count=t.expected_count,g=!G||b.length>t.expected_count;x()},N=(E)=>{if(v+=E,f?.update(v),!g)I(v)},C=(E)=>{if(E.error||E.type==="error")throw Error(`Upstream error: ${B(E.error?.message)||B(E.message)||B(E.error)||"Request failed."}`)},A=(E)=>{let G=E.split(/\r\n|\r|\n/).filter((k)=>k.startsWith("data:")).map((k)=>k.slice(5).replace(/^ /,"")).join(` -`);if(!G)return;if(G.trim()==="[DONE]"){p=!0;return}let b;try{b=le(JSON.parse(G))}catch{throw Error("The SSE response contains invalid JSON.")}if(C(b),R(b),n.format==="openai"){let k=he(b.choices).find((L)=>L.index===0)??he(b.choices)[0];if(k?.delta?.refusal)throw Error("The model refused the request.");if(k?.delta?.reasoning_content||k?.delta?.reasoning)f?.reasoning();if(k?.finish_reason)u=B(k.finish_reason);if(typeof k?.delta?.content==="string")N(k.delta.content)}else if(n.format==="anthropic"){if(b.type==="message_start")R(le(b.message));if(["thinking","redacted_thinking"].includes(b.content_block?.type)||b.delta?.type==="thinking_delta")f?.reasoning();if(b.type==="content_block_start"&&b.content_block?.type==="text")N(B(b.content_block.text));if(b.type==="content_block_delta"&&b.delta?.type==="text_delta")N(B(b.delta.text));if(b.type==="message_delta")u=B(b.delta?.stop_reason)||u;if(b.type==="message_stop")p=!0}else{if(b.type==="response.created"||b.type==="response.in_progress")R(le(b.response));if(B(b.type).startsWith("response.reasoning"))f?.reasoning();if(b.type==="response.output_text.delta")N(B(b.delta));if(b.type==="response.output_text.done"&&!c.rawText)I(B(b.text),!0);if(b.type==="response.output_item.done"&&!c.rawText)I($e({output:[b.item]}),!0);if(b.type==="response.refusal.delta")throw Error("The model refused the request.");if(b.type==="response.completed"){let k=le(b.response);R(k),p=!0,u=B(k.status)||"completed";let L=$e(k);if(L&&!g)I(L,!0)}if(b.type==="response.failed"||b.type==="response.incomplete")throw Error(`Responses request did not complete: ${B(b.response?.error?.message)||B(b.response?.incomplete_details?.reason)||b.type}.`)}if(["refusal","content_filter"].includes(u))throw Error("The model refused the request.")};x();try{o.throwIfAborted();let{url:E,headers:G,body:b}=Ir(n,t.prompt),k={method:"POST",headers:G,body:JSON.stringify(b),signal:o,redirect:"error",timeout:!1},L=performance.now(),d=await fetch(E,k);if(!d.ok){let _=await d.text(),y=_;try{let h=le(JSON.parse(_));y=B(h.error?.message)||B(h.message)||_}catch{}throw Error(`HTTP ${d.status}: ${y||d.statusText}`)}if(d.headers.get("content-type")?.toLowerCase().includes("text/event-stream")){if(!d.body)throw Error("The server returned an empty SSE body.");m=d.body.getReader(),f=kr(L);let _=new TextDecoder,y="",h=1/0,S=!0,T=()=>!p&&(!g||S),O=(M)=>{if(!g)return A(M);try{A(M)}catch{S=!1}};while(T()){if(g&&h===1/0)h=performance.now()+Ar;let M=await Er(m,h);if(!M)break;let{done:Y,value:q}=M;if(q?.length&&c.firstByteMs===void 0)clearTimeout(i),c.firstByteMs=Date.now()-c.startedAt,c.state="streaming",x();y+=Y?_.decode():_.decode(q,{stream:!0});let X;while(T()&&(X=/\r\n\r\n|\n\n|\r\r/.exec(y)))O(y.slice(0,X.index)),y=y.slice(X.index+X[0].length);if(Y){if(T()&&y.trim())O(y);break}}}else{let _;try{_=le(await d.json())}catch(h){if(o.aborted)throw h;throw Error("The server did not return valid JSON or SSE.")}clearTimeout(i),c.firstByteMs=Date.now()-c.startedAt,C(_),R(_);let y;if(n.format==="responses")y=$e(_),u=B(_.status),p=u==="completed";else if(n.format==="anthropic")y=he(_.content).filter((h)=>h.type==="text").map((h)=>B(h.text)).join(""),u=B(_.stop_reason),p=!0;else{let h=he(_.choices)[0];if(h?.message?.refusal)throw Error("The model refused the request.");y=B(h?.message?.content),u=B(h?.finish_reason),p=!0}if(["refusal","content_filter"].includes(u))throw Error("The model refused the request.");if(!p||!["stop","end_turn","completed"].includes(u))throw Error(`The response did not complete (${u||"missing finish status"}).`);I(y,!0)}if(o.throwIfAborted(),!g&&(!p||!["stop","end_turn","completed"].includes(u)))throw Error(`The response did not complete (${u||"missing finish status"}).`);if(!g)I(c.rawText,!0);if(c.count{}),m.releaseLock();c.finishedAt=Date.now(),c.throughput=f?.result(w),x()}return{...c}}var Pr=[0.6,0.15,0.125,0.125],Dr=Array.from({length:24},(e,t)=>1+t*354/23),Nr=[1,2,3,5,8,13,21,34],xe=(e)=>e.reduce((t,r)=>t+r,0)/e.length,ae=(e,t)=>{let r=0;for(let a=0;a{let s=(n+0.5)*2/t-1,o=[s,0.5*(3*s*s-1),0.5*(5*s**3-3*s)];[...Dr.map((l)=>Math.exp(-0.5*((a-l)/20)**2)),...Array.from({length:10},(l,i)=>i===a%10?1:0)].forEach((l,i)=>o.forEach((m,u)=>{r[i*3+u]+=l*m/t}))}),r}function mt(e,t){let r=Array(t*t).fill(0.5),a=e.length-1+0.5*t*t;for(let o=1;or.slice(c*t,c*t+t).reduce((l,i)=>l+i,0)),s=Array.from({length:t},(o,c)=>n.reduce((l,i,m)=>l+r[m*t+c],0));return r.map((o,c)=>o-n[Math.floor(c/t)]*s[c%t])}function Cr(e){let t=e.length,r=xe(e),a=Math.max(Math.sqrt(xe(e.map((i)=>(i-r)**2))),1),n=e.map((i)=>(i-r)/a),s=[];for(let i of Nr){let m=t-i,u=Array.from({length:m},(p,g)=>e[g+i]-e[g]);s.push(xe(u.map((p,g)=>n[g+i]*n[g])),xe(u.map(Math.abs))/355,ae(m,(p)=>u[p]>0),ae(m,(p)=>u[p]===0),ae(m,(p)=>Math.abs(u[p])<=5),ae(m,(p)=>Math.abs(u[p])<=20))}s.push(...mt(e.map((i)=>Math.min(7,Math.floor((i-1)*8/355))),8)),s.push(...mt(e.map((i)=>i%10),10));let o=Array.from({length:t-1},(i,m)=>e[m+1]-e[m]),c=Array.from({length:t-1},(i,m)=>Math.abs(n[m+1]-n[m]));s.push(ae(t-2,(i)=>Math.sign(o[i+1])===Math.sign(o[i])),ae(t-2,(i)=>o[i+1]===o[i]),ae(t-1,(i)=>e[i]%10===e[i+1]%10),ae(t-1,(i)=>c[i]>1),ae(t-1,(i)=>c[i]>2));let l=e.map((i)=>Math.min(15,Math.floor((i-1)*16/355)));for(let i of[4,8,16]){let m=0;for(let u=0;u+i<=t;u++)m+=new Set(l.slice(u,u+i)).size/i;s.push(m/(t-i+1))}return s}function Or(e){return[Rt(Mt(e)),It(e),$r(e),Cr(e)]}function zr(e,t){let a=Or(e).flatMap((n,s)=>{let o=t.params[s],c=n.map((i,m)=>(i-o.mean[m])/o.scale[m]),l=Math.max(Math.sqrt(c.reduce((i,m)=>i+m*m,0)),0.000000000001);return c.map((i)=>i/l*Math.sqrt(Pr[s]))});return t.weights.map((n,s)=>n.reduce((o,c,l)=>o+c*a[l],t.bias[s]))}var oe=(e,t)=>e.reduce((r,a,n)=>r+a*t[n],0),ue=(e)=>e.reduce((t,r)=>t+r,0)/e.length,Ee=(e)=>{let t=Math.max(Math.sqrt(oe(e,e)),0.000000000001);return e.map((r)=>r/t)},te=(e)=>{let t=ue(e),r=Math.max(Math.sqrt(ue(e.map((a)=>(a-t)**2))),0.000000000001);return e.map((a)=>(a-t)/r)},Ce=(e)=>e[0].map((t,r)=>ue(e.map((a)=>a[r]))),Ue=(e)=>{let t=[...e].sort((a,n)=>a-n),r=Math.floor(t.length/2);return t.length%2?t[r]:(t[r-1]+t[r])/2},pt=(e)=>[Rt(Mt(e)),It(e)],ft=(e,t)=>e.flatMap((r,a)=>Ee(r.map((n,s)=>(n-t[a].mean[s])/t[a].scale[s])).map((n)=>n*Math.sqrt(a===0?0.75:0.25))),ht=(e,t)=>e.map((r,a)=>(r-t.feature_mean[a])/t.feature_scale[a]),gt=(e,t)=>{let r=t.map((a)=>oe(e,a));return e.map((a,n)=>a-t.reduce((s,o,c)=>s+r[c]*o[n],0))},yt=new WeakMap;function qr(e,t){let r=yt.get(t);if(!r)r=t.map((n)=>oe(n,n)),yt.set(t,r);let a=oe(e,e);return ue(t.map((n,s)=>Math.max(0,a+r[s]-2*oe(e,n))).sort((n,s)=>n-s).slice(0,7))}function Ur(e,t){let{hellinger:r,ordered_blocks:a}=t,n=Ee(gt(ht(e[0],r),r.nuisance_basis)),s=r.centroids.map((w)=>oe(n,w)),o=ht(e[1],a),c=Ee(o),l=Ee(gt(o,a.nuisance_basis)),i=a.centroids.map((w,f)=>Math.max(...a.environment_centroids.map((x)=>oe(c,x[f])))),m=a.centroids.map((w)=>oe(l,w)),u=te(i),p=te(m),g=te(u.map((w,f)=>0.5*w+0.5*p[f]));return te(s).map((w,f)=>0.5*w+0.5*g[f])}function Nt(e,t){return t.schema==="shared-detector-v2"&&e.built_at===t.bank_built_at&&e.models.length===t.model_ids.length&&e.models.every((r,a)=>r.id===t.model_ids[a]&&r.response_count===t.response_counts[a])}function Gr(e,t){let r=t.calibration,a=r?.binding;if(!r||!a||r.schema!=="shared-confidence-v2"||r.method!=="ranking-temperature"||!Number.isFinite(r.tau)||r.tau<0.001||r.tau>1000||a.base_sha256!==t.base_sha256||a.reference_sha256!==t.source_reference_sha256||a.model_ids.length!==e.length||e.length!==t.model_ids.length||!e.every(Number.isFinite)||!a.model_ids.every((l,i)=>l===t.model_ids[i]))return null;let n=e.map((l)=>r.tau*l),s=Math.max(...n),o=n.map((l)=>Math.exp(l-s)),c=o.reduce((l,i)=>l+i,0);return o.map((l)=>l/c)}function wt(e,t){let r=t.ranker,a=e.map(pt),n=a.map((p)=>ft(p,r.full_params)),s=e.map((p)=>{let g=ft(pt(p.slice(0,128)),r.head_params);return te(r.lda_weights.map((v,w)=>oe(v,g)+r.lda_bias[w]))}),o=te(Ce(s)),c=te(r.references.map((p)=>Ue(n.map((g)=>-qr(g,p))))),l=te(Ce(a.map((p)=>Ur(p,r.bank)))),i=te(o.map((p,g)=>0.5*p+0.25*c[g]+0.25*l[g])),m=te(Ce(e.map((p)=>te(zr(p,r.positional))))),u=i.map((p,g)=>r.blend.frequency*p+r.blend.positional*m[g]);if(!u.every(Number.isFinite))throw Error("\u6392\u540D\u8BA1\u7B97\u4EA7\u751F\u65E0\u6548\u6570\u503C\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5");return u}var vt={autocorrelation:-0.23,small_step_share:0.05};function Lr(e){let t=e.map((n)=>{let s=ue(n),o=ue(n.map((l)=>(l-s)**2)),c=n.slice(1).map((l,i)=>l-n[i]);return{autocorrelation:o?ue(c.map((l,i)=>(n[i+1]-s)*(n[i]-s)))/o:1,small_step_share:ue(c.map((l)=>Math.abs(l)<=20?1:0))}}),r=Ue(t.map((n)=>n.autocorrelation)),a=Ue(t.map((n)=>n.small_step_share));return{autocorrelation:r,small_step_share:a,model_like:r<=vt.autocorrelation||a<=vt.small_step_share}}function $t(e,t,r,a={}){if(!Nt(t,r))throw Error("The reference bank does not match the detector. Run fpd retrain --data-dir DIR for this bank.");let n=e.map((f)=>ke(f.text)),s=e.map((f,x)=>{let R=Math.max(80,Math.ceil((f.expected_count||0)*0.55)),I=Array.from(f.text.matchAll(/-?\d+/g),(N)=>Number(N[0]));return{index:x,parsed_numbers:n[x].length,minimum_numbers:R,accepted:n[x].length>=R,raw_out_of_range_count:I.filter((N)=>N<1||N>355).length}}),o=s.filter((f)=>f.accepted).length,c=n.filter((f,x)=>s[x].accepted),l=o?Lr(c):null,i={probability:null,probability_status:"unavailable",used_outputs:o,diagnostics:s,sequence:l,method:"shared-detector-v2",model_version:{base_sha256:r.base_sha256}},m={...i,prediction:"",prediction_name:"\u4E0D\u50CF\u8BED\u8A00\u6A21\u578B\u56DE\u7B54",family_prediction_name:"",results:[],decision:"not_model",evidence:{insufficient:!0,label:"\u4E0D\u50CF\u8BED\u8A00\u6A21\u578B\u56DE\u7B54",reason:"\u76F8\u90BB\u6570\u5B57\u7684\u53D8\u5316\u65B9\u5F0F\u4E0E\u53C2\u8003\u5E93\u4E2D\u7684\u8BED\u8A00\u6A21\u578B\u56DE\u7B54\u4E0D\u540C\uFF0C\u5E38\u89C1\u4E8E\u7A0B\u5E8F\u751F\u6210\u3001\u6392\u5E8F\u6216\u6253\u4E71\u987A\u5E8F\u7684\u6570\u5B57\u3002\u672A\u751F\u6210\u6392\u540D\u3002",threshold:null,method:"sequence-shape"}};if(a.allowPartial&&o>0&&o<3&&e.length<=3){if(!l.model_like)return m;let f=wt(c,r),x=r.model_ids.map((N,C)=>C).sort((N,C)=>f[C]-f[N]),R=x.map((N)=>({model:r.model_ids[N],display_name:t.models[N].display_name,family:t.models[N].family,family_name:t.models[N].family_name,score:f[N],probability:null})),I=x[0];return{...i,method:"shared-ranker-partial-v1",decision:"partial",prediction:R[0].model,prediction_name:R[0].display_name,family_prediction:t.models[I].family,family_prediction_name:t.models[I].family_name,results:R,ranking_score:f[I],calibration:null,evidence:{insufficient:!0,label:"\u90E8\u5206\u6837\u672C\u6392\u540D",reason:`\u4F7F\u7528 ${o}/3 \u6761\u6709\u6548\u56DE\u7B54\u751F\u6210\u6392\u540D\u3002\u8865\u9F50\u4E09\u6761\u6709\u6548\u56DE\u7B54\u540E\u624D\u80FD\u8BA1\u7B97\u7F6E\u4FE1\u5EA6\u3002`,threshold:null,method:"partial-sample-ranking"}}}if(e.length!==3||o!==3)return{...i,prediction:"",prediction_name:"\u6682\u4E0D\u53EF\u8BC4\u5206",family_prediction_name:"",results:[],decision:"unscorable",evidence:{insufficient:!0,label:"\u9700\u8981\u4E09\u6761\u5B8C\u6574\u56DE\u7B54",reason:`\u5F53\u524D\u6709 ${o}/${e.length} \u6761\u6709\u6548\u56DE\u7B54\u3002\u8BF7\u8865\u9F50\u539F\u6765\u7684\u4E09\u6761\u56DE\u7B54\u540E\u91CD\u65B0\u68C0\u6D4B\u3002`,threshold:null,method:"complete-three-answers"}};if(!l.model_like)return m;let u=wt(n,r),p=Gr(u,r),g=r.model_ids.map((f,x)=>x).sort((f,x)=>u[x]-u[f]),v=g.map((f)=>({model:r.model_ids[f],display_name:t.models[f].display_name,family:t.models[f].family,family_name:t.models[f].family_name,score:u[f],probability:p?.[f]??null})),w=g[0];return{...i,prediction:v[0].model,prediction_name:v[0].display_name,family_prediction:t.models[w].family,family_prediction_name:t.models[w].family_name,results:v,ranking_score:u[w],probability:v[0].probability,probability_status:p?"reference_calibrated":"unavailable",probability_scope:p?"reference-closed-set":null,calibration:p?{method:r.calibration.method,run:r.calibration.calibration_run,tau:r.calibration.tau,sha256:r.calibration_sha256??null}:null,evidence:{insufficient:!0,label:p?"\u5E93\u5185\u6821\u51C6\u6392\u540D":"\u672A\u6821\u51C6\u6392\u540D",reason:p?"\u7F6E\u4FE1\u5EA6\u662F\u53C2\u8003\u5E93\u5185\u7684\u95ED\u96C6\u76F8\u5BF9\u6982\u7387\uFF0C\u4E0D\u5305\u542B\u5E93\u5916\u6A21\u578B\u3002":"\u6821\u51C6\u53C2\u6570\u4E0E\u5F53\u524D\u68C0\u6D4B\u5668\u4E0D\u5339\u914D\uFF0C\u7F6E\u4FE1\u5EA6\u4E0D\u53EF\u7528\u3002\u5019\u9009\u987A\u5E8F\u7531\u6392\u540D\u5206\u6570\u51B3\u5B9A\u3002",threshold:null,method:p?"reference-calibrated-ranking":"uncalibrated-ranking"}}}var Br={prior:{known:0.8,relative:0.1,alien:0.1},knownRates:[[0.02,0.4],[0.06,0.4],[0.15,0.2]],relativeRates:[[0.2,0.3],[0.4,0.4],[0.7,0.3]],narrow:0.02,wide:0.85,floor:0.000001,offsetWindow:3,alienSpread:0.15,minimumProbes:4,maximumProbes:20,stopAt:0.99,minimumGain:0.0001,planned:24};var da=Br.knownRates[0][0];function Ct(e){let t,r;if(e.decision==="unscorable")t="Not enough valid samples",r=`Received ${e.used_outputs}/3 valid samples. Three valid samples are required.`;else if(e.decision==="not_model")t="Not like a language model reply",r="Consecutive numbers change differently from the language-model replies in the reference bank. Program-generated, sorted or shuffled numbers often do this. No ranking was produced.";else if(e.decision==="partial")t="Partial sample ranking",r=`Ranked ${e.used_outputs} valid sample${e.used_outputs===1?"":"s"}. Confidence requires three valid samples.`;else if(e.probability_status==="reference_calibrated")t="Calibrated ranking",r="Confidence is a closed-set probability within the reference bank.";else t="Uncalibrated ranking",r="The confidence calibration does not match this detector. Confidence is unavailable.";return{...e,prediction_name:e.decision==="unscorable"?"Not scored":e.decision==="not_model"?"Not a model reply":e.prediction_name,evidence:{...e.evidence,label:t,reason:r}}}function Jr(e,t,r,a){e.outputs=e.samples.map((s)=>({text:qe(s)?s.text:"",expected_count:s.expectedCount}));let n=e.samples.filter(qe).length;if(!n||t.strict&&n!==3){e.error=t.strict?`Strict mode requires 3/3 successful samples; received ${n}/3.`:"No valid samples. This round cannot be scored.";return}try{if(e.analysis=Ct($t(e.outputs,r,a,{allowPartial:!t.strict})),!e.analysis.results.length)e.error=e.analysis.evidence.reason}catch{e.error="Scoring failed. Check that the reference bank and detector files are valid."}}function Fr(e,t){return{index:e,challenges:t,outputs:[],startedAt:Date.now(),samples:t.map((r)=>({state:"queued",text:"",rawText:"",count:0,expectedCount:r.expected_count}))}}async function Hr(e,t,r,a,n,s){let o=0,c=async()=>{while(!n.aborted&&o{e.samples[l]=i,s(l)})}};if(await Promise.all(Array.from({length:t.parallel},c)),n.aborted)e.samples.forEach((l,i)=>{if(l.state!=="queued")return;e.samples[i]={...l,state:"cancelled",error:"Cancelled before dispatch."},s(i)}),e.outputs=e.samples.map((l)=>({text:qe(l)?l.text:"",expected_count:l.expectedCount})),e.error="Cancelled. This round was not scored.";else Jr(e,t,r,a);e.finishedAt=Date.now()}var Kr="Scoring failed. Check that the reference bank and detector files are valid.";function Ot(e){let t=e;return{decision:e.decision??"scored",prediction:e.prediction,prediction_name:e.prediction_name,family_prediction:t.family_prediction??"",family_prediction_name:e.family_prediction_name,results:e.results,ranking_score:e.ranking_score??null,probability:e.probability,probability_status:t.probability_status,probability_scope:t.probability_scope??null,calibration:t.calibration??null,used_outputs:e.used_outputs,diagnostics:e.diagnostics,sequence:e.sequence??null,method:t.method,model_version:t.model_version,evidence:e.evidence}}function Wr(e,t,r,a){return Ot(Ct($t(e,t,r,{allowPartial:!a})))}function jr(e,t,r,a){if(!Array.isArray(e)||e.length<1||e.length>3||!e.every((s)=>s&&typeof s.text==="string"&&Number.isSafeInteger(s.expected_count)&&s.expected_count>0))throw Error("Each input round must contain one to three outputs with text and a positive integer expected_count.");let n=e.map(({text:s,expected_count:o})=>{let c=ke(s);if(!a&&c.length>o)s=c.slice(0,o).join(", ");if(c.length3)throw Error("count must be an integer from 1 to 3.");if(!Number.isSafeInteger(c)||c<1||c>3)throw Error("parallel must be an integer from 1 to 3.");if(!Number.isFinite(l)||l!==0&&(l<0.001||l>2147483.647))throw Error("timeout must be 0 (no timeout) or between 0.001 and 2147483.647 seconds.");let i=e.strict??!1;if(i&&o!==3)throw Error("strict requires count 3.");let m={baseUrl:t,apiKey:r,model:a,format:bt[n],serviceTier:s,stream:e.stream??!0,effort:e.effort??""};return Pt(m),{config:m,count:o,parallel:Math.min(c,o),repeat:1,strict:i,timeoutMs:Math.round(l*1000),tokenizer:!1,maxProbes:20}}var nn=ArrayBuffer,J=Uint8Array,Te=Uint16Array,an=Int16Array,Me=Int32Array,Oe=function(e,t,r){if(J.prototype.slice)return J.prototype.slice.call(e,t,r);if(t==null||t<0)t=0;if(r==null||r>e.length)r=e.length;var a=new J(r-t);return a.set(e.subarray(t,r)),a},ve=function(e,t,r,a){if(J.prototype.fill)return J.prototype.fill.call(e,t,r,a);if(r==null||r<0)r=0;if(a==null||a>e.length)a=e.length;for(;re.length)a=e.length;while(r2046MB)","invalid block type","FSE accuracy too high","match distance too far back","unexpected EOF"],H=function(e,t,r){var a=Error(t||sn[e]);if(a.code=e,Error.captureStackTrace)Error.captureStackTrace(a,H);if(!r)throw a;return a},_t=function(e,t,r){var a=0,n=0;for(;a>>0},ln=function(e,t){var r=e[0]|e[1]<<8|e[2]<<16;if(r==3126568&&e[3]==253){var a=e[4],n=a>>5&1,s=a>>2&1,o=a&3,c=a>>6;if(a&8)H(0);var l=6-n,i=o==3?4:o,m=_t(e,l,i);l+=i;var u=c?1<>3);g=v+(v>>3)*(e[5]&7)}if(g>2145386496)H(1);var w=new J((t==1?p||g:t?0:g)+12);return w[0]=1,w[4]=4,w[8]=8,{b:l+u,y:0,l:0,d:m,w:t&&t!=1?t:w.subarray(12),e:g,o:new Me(w.buffer,0,3),u:p,c:s,m:Math.min(131072,g)}}else if((r>>4|e[3]<<20)==25481893)return cn(e,4)+8;H(0)},me=function(e){var t=0;for(;1<r)H(3);var s=1<0){var R=me(o+1),I=a>>3,N=(1<>(a&7)&N,A=(1<A)C-=E;if(p[++c]=--C,C==-1)o+=C,f[--m]=c;else o-=C;if(!C)do{var b=a>>3;l=(e[b]|e[b+1]<<8)>>(a&7)&3,a+=2,c+=l}while(l==3)}if(c>255||o)H(0);var k=0,L=(s>>1)+(s>>3)+3,d=s-1;for(var _=0;_<=c;++_){var y=p[_];if(y<1){g[_]=-y;continue}for(i=0;i=m)}}if(k)H(0);for(i=0;i>3,{b:n,s:f,n:x,t:v}]},un=function(e,t){var r=0,a=-1,n=new J(292),s=e[t],o=n.subarray(0,256),c=n.subarray(256,268),l=new Te(n.buffer,268);if(s<128){var i=be(e,t+1,6),m=i[0],u=i[1];t+=s;var p=m<<3,g=e[t];if(!g)H(0);var v=0,w=0,f=u.b,x=f,R=(++t<<3)-8+me(g);for(;;){if(R-=f,R>3;if(v+=(e[I]|e[I+1]<<8)>>(R&7)&(1<>3,w+=(e[I]|e[I+1]<<8)>>(R&7)&(1<255)H(0)}else{a=s-127;for(;r>4,o[r+1]=N&15}++t}var C=0;for(r=0;r11)H(0);C+=A&&1<0;--r){var _=l[r];ve(d,r,_,l[r-1]=_+c[r]*(1<c&&u>3,g=(e[p]|e[p+1]<<8|e[p+2]<<16)>>(m&7);l=(l<>2,o=s<<1,c=s+o;we(e.subarray(a,a+=e[0]|e[1]<<8),t.subarray(0,s),r),we(e.subarray(a,a+=e[2]|e[3]<<8),t.subarray(s,o),r),we(e.subarray(a,a+=e[4]|e[5]<<8),t.subarray(o,c),r),we(e.subarray(a),t.subarray(c),r)},yn=function(e,t,r){var a,n=t.b,s=e[n],o=s>>1&3;t.l=s&1;var c=s>>3|e[n+1]<<5|e[n+2]<<13,l=(n+=3)+c;if(o==1){if(n>=e.length)return;if(t.b=n+1,r)return ve(r,e[n],t.y,t.y+=c),r;return ve(new J(c),e[n])}if(l>e.length)return;if(o==0){if(t.b=l,r)return r.set(e.subarray(n,l),t.y),t.y+=c,r;return Oe(e,n,l)}if(o==2){var i=e[n],m=i&3,u=i>>2&3,p=i>>4,g=0,v=0;if(m<2)if(u&1)p|=e[++n]<<4|(u&2&&e[++n]<<12);else p=i>>3;else if(v=u,u<2)p|=(e[++n]&63)<<4,g=e[n]>>6|e[++n]<<2;else if(u==2)p|=e[++n]<<4|(e[++n]&3)<<12,g=e[n]>>2|e[++n]<<6;else p|=e[++n]<<4|(e[++n]&63)<<12,g=e[n]>>6|e[++n]<<2|e[++n]<<10;++n;var w=r?r.subarray(t.y,t.y+t.m):new J(t.m),f=w.length-p;if(m==0)w.set(e.subarray(n,n+=p),f);else if(m==1)ve(w,e[n++],f);else{var x=t.h;if(m==2){var R=un(e,n);g+=n-(n=R[0]),t.h=x=R[1]}else if(!x)H(0);(v?gn:we)(e.subarray(n,n+=g),w.subarray(f),x)}var I=e[n++];if(I){if(I==255)I=(e[n++]|e[n++]<<8)+32512;else if(I>127)I=I-128<<8|e[n++];var N=e[n++];if(N&3)H(0);var C=[mn,pn,dn];for(var A=2;A>-1;--A){var E=N>>(A<<1)+2&3;if(E==1){var G=new J([0,0,e[n++]]);C[A]={s:G.subarray(2,3),n:G.subarray(0,1),t:new Te(G.buffer,0,1),b:0}}else if(E==2)a=be(e,n,9-(A&1)),n=a[0],C[A]=a[1];else if(E==3){if(!t.t)H(0);C[A]=t.t[A]}}var b=t.t=C,k=b[0],L=b[1],d=b[2],_=e[l-1];if(!_)H(0);var y=(l<<3)-8+me(_)-d.b,h=y>>3,S=0,T=(e[h]|e[h+1]<<8)>>(y&7)&(1<>3;var O=(e[h]|e[h+1]<<8)>>(y&7)&(1<>3;var M=(e[h]|e[h+1]<<8)>>(y&7)&(1<>3;var z=1<>>(y&7)&z-1);h=(y-=Le[X])>>3;var U=hn[X]+((e[h]|e[h+1]<<8|e[h+2]<<16)>>(y&7)&(1<>3;var D=fn[Y]+((e[h]|e[h+1]<<8|e[h+2]<<16)>>(y&7)&(1<>3,T=d.t[T]+((e[h]|e[h+1]<<8)>>(y&7)&(1<>3,M=k.t[M]+((e[h]|e[h+1]<<8)>>(y&7)&(1<>3,O=L.t[O]+((e[h]|e[h+1]<<8)>>(y&7)&(1<3)t.o[2]=t.o[1],t.o[1]=t.o[0],t.o[0]=P-=3;else{var W=P-(D!=0);if(W){if(P=W==3?t.o[0]-1:t.o[W],W>1)t.o[2]=t.o[1];t.o[1]=t.o[0],t.o[0]=P}else P=t.o[0]}for(var A=0;AU)K=U;for(var A=0;Ai&&typeof i==="object"&&("$f32"in i)?Array.from(c.subarray(i.$f32,i.$f32+i.n)):i)}var Sn=["https://lm.ikale.io/data/","https://cdn.jsdmirror.com/npm/lmfpd-data@latest/"],xn="lmfpd-data-v1",An="shared-detector-v2",He="shared_detector.bin",Ke=(e)=>new TextDecoder().decode(e),En=(e)=>e instanceof Error?e.message:String(e);function We(e,t){if(!Array.isArray(e?.models)||!Nt(e,t))throw Error("The reference bank does not match its detector.");return{bank:e,detector:t}}async function Tn(e){let t=async(r,a)=>{let n=Ut(e,r);try{return a(await qt(n))}catch{throw Error(`Cannot read ${n}.`)}};return We(await t("unified_bank.json",(r)=>JSON.parse(Ke(r))),await t(He,Fe))}async function kn(e){try{let[t,r]=await Promise.all([qt(e),Zr(e)]),a=t.readUInt32LE(0),n=JSON.parse(Ke(t.subarray(4,4+a)));return{data:We(n,Fe(t.subarray(4+a))),version:n.files[He].sha256,checkedAt:r.mtimeMs}}catch{return}}async function Mn(e,t,r){let a=Buffer.alloc(4);a.writeUInt32LE(t.length);let n=`${e}.tmp-${Vr(8).toString("hex")}`;try{await Xr(rn(e),{recursive:!0}),await tn(n,Buffer.concat([a,t,r])),await Yr(n,e)}catch{await Qr(n,{force:!0}).catch(()=>{})}}async function St(e,t){let r=await fetch(e,{signal:AbortSignal.timeout(t)});if(!r.ok)throw Error(`HTTP ${r.status}`);return new Uint8Array(await r.arrayBuffer())}async function xt(e,t,r){let a=[];for(let n of e)try{let s=await St(`${n}bundle.json`,1e4),o=JSON.parse(Ke(s));if(o.schema!==xn||o.detector_schema!==An)throw Error(`data schema ${o.schema}/${o.detector_schema} is not supported by this SDK version. Upgrade lmfpd.`);let c=o.files[He];if(c.sha256===r){let u=new Date;await en(t,u,u).catch(()=>{});return}let l=[];for(let u of c.parts)l.push(await St(`${n}chunks/${u}`,120000));let i=vn(Buffer.concat(l)),m=We(o,Fe(i));return await Mn(t,s,i),m}catch(s){a.push(`${n} (${En(s)})`)}throw Error(`lmfpd: cannot download reference data from ${a.join(", ")}`)}async function Rn(e=Sn,t=Ut(_n(),"data.bin"),r=86400){let a=typeof e==="string"?[e]:e;if(a.length===1&&!/^https?:\/\//i.test(a[0]))return Tn(a[0]);let n=await kn(t);if(!n)return await xt(a,t);if(Date.now()-n.checkedAt>=r*1000)xt(a,t,n.version).catch(()=>{});return n.data}var Be=(e)=>({state:e.state,text:e.text,raw_text:e.rawText,count:e.count,expected_count:e.expectedCount,first_byte_ms:e.firstByteMs??null,response_model:e.responseModel??null,response_id:e.responseId??null,error:e.error??null}),Lt;class Bt{static{Lt=(e)=>new Bt(e)}#e;builtAt;constructor(e){this.#e=e,this.builtAt=e.bank.built_at}analyze(e,t={}){return jr(e,this.#e.bank,this.#e.detector,t.strict??!1)}async detect(e,{signal:t,onSample:r}={}){let a=zt(e);if(t?.aborted)return{challenges:[],samples:[],analysis:null,error:"Cancelled. This round was not scored."};let n=Fr(1,Et(a.count)),s=r?(o)=>{try{r(o,Be(n.samples[o]))}catch(c){queueMicrotask(()=>{throw c})}}:()=>{};return n.samples.forEach((o,c)=>s(c)),await Hr(n,a,this.#e.bank,this.#e.detector,t??new AbortController().signal,s),{challenges:n.challenges,samples:n.samples.map(Be),analysis:n.analysis?Ot(n.analysis):null,error:n.error??null}}}async function Jt(e={}){return Lt(await Rn(e.source,e.cache,e.ttl))}function Re(e=3){if(!Number.isSafeInteger(e)||e<1||e>3)throw Error("count must be an integer from 1 to 3.");return Et(e)}function Ft(e){return ke(e)}async function Ht(e,t){return Be(await Dt(zt(e),t,new AbortController().signal,()=>{}))}import{homedir as In}from"os";import{join as Kt}from"path";function Ie(e={}){let t=process.env.MAGPIE_ADDR?.replace(/^(0\.0\.0\.0|\[::\]):/,"127.0.0.1:"),r=(e.gateway||process.env.MAGPIE_FINGERPRINT_GATEWAY||(t?`http://${t}`:"http://127.0.0.1:3425")).replace(/\/+$/,""),a=new URL(r);if(!["http:","https:"].includes(a.protocol)||a.username||a.password||a.search||a.hash||a.pathname!=="/"&&a.pathname!=="")throw Error("Gateway must be an HTTP(S) origin without credentials, path, query or fragment.");let n=e.port??Number(process.env.MAGPIE_FINGERPRINT_PORT||3488);if(!Number.isInteger(n)||n<0||n>65535)throw Error("Invalid service port.");return{port:n,gateway:r,apiKey:e.apiKey||process.env.MAGPIE_FINGERPRINT_API_KEY||"",dataDir:e.dataDir||process.env.MAGPIE_FINGERPRINT_DATA_DIR||Kt(process.env.XDG_CONFIG_HOME||Kt(In(),".config"),"magpie","fingerprint"),bankSource:e.bankSource||process.env.MAGPIE_FINGERPRINT_BANK_SOURCE,demo:e.demo??!1,uiDir:e.uiDir}}class _e extends Error{}async function pe(e,t){if(Number(e.headers.get("content-length")||0)>t)throw await e.body?.cancel(),new _e("Body exceeds the size limit.");if(!e.body)return"";let r=e.body.getReader(),a=[],n=0;try{while(!0){let s=await r.read();if(s.done)break;if(n+=s.value.byteLength,n>t)throw await r.cancel(),new _e("Body exceeds the size limit.");a.push(s.value)}return Buffer.concat(a).toString("utf8")}finally{r.releaseLock()}}function Wt(e){return/^[\x20-\x7e]*$/.test(e)?e:encodeURIComponent(e)}class je{url;key;constructor(e,t=""){this.url=e;this.key=t}headers(e={}){return{"content-type":"application/json",...this.key?{authorization:`Bearer ${this.key}`}:{},...e}}redact(e){return String(e instanceof Error?e.message:e).replaceAll(this.key||"\x00","[redacted]").slice(0,500)}async catalog(){let e=await fetch(`${this.url}/v1/models`,{headers:this.headers(),signal:AbortSignal.timeout(5000),redirect:"error"});if(!e.ok)throw await e.body?.cancel(),Error(`Magpie model catalog returned HTTP ${e.status}.`);let r=(JSON.parse(await pe(e,4194304)).data||[]).filter((n)=>{if(typeof n.id!=="string"||!n.id.includes("/")||n.id.startsWith("group/"))return!1;if(/^(embedding|image|audio)(_|$)/.test(n.type||""))return!1;if(Array.isArray(n.modalities?.output)&&!n.modalities.output.includes("text"))return!1;let s=Array.isArray(n.native_endpoints)?n.native_endpoints:[];return!s.length||!s.every((o)=>typeof o==="string"&&/\/(images|embeddings|audio)\b/.test(o))}).map((n)=>({id:n.id,name:String(n.display_name||n.name||n.id),provider:n.id.split("/")[0],efforts:(Array.isArray(n.reasoning_levels)?n.reasoning_levels:(n.supported_reasoning_levels||[]).map((s)=>s.effort)).filter((s)=>typeof s==="string"),nativeEndpoints:Array.isArray(n.native_endpoints)?n.native_endpoints.filter((s)=>typeof s==="string"):[]})),a=[];try{let n=await fetch(`${this.url}/v1/magpie/quotas?kept=1`,{headers:this.headers(),signal:AbortSignal.timeout(2500),redirect:"error"});if(n.ok){let s=JSON.parse(await pe(n,1048576));for(let o of s.data||[])if(typeof o.provider==="string"&&typeof o.user==="string"&&o.user&&(!o.kind||o.kind==="subscription")){if(!a.some((c)=>c.provider===o.provider&&c.id===o.user))a.push({id:o.user,name:String(o.alias||o.user),provider:o.provider})}}else await n.body?.cancel()}catch{}return{models:r,accounts:a}}async route(e){try{let t=await fetch(`${this.url}/v1/magpie/route?session=${encodeURIComponent(e.session)}`,{headers:this.headers(),signal:AbortSignal.timeout(2500),redirect:"error"});if(!t.ok)throw await t.body?.cancel(),Error(`Route metadata HTTP ${t.status}`);e.route=JSON.parse(await pe(t,262144));let r=e.route?.route??e.route;if(r?.model&&typeof r.model==="string"){if(e.model??=r.model,r.model!==e.requestedModel)e.mismatch=!0}}catch(t){e.routeError=this.redact(t)}}}import{mkdir as Pn,readdir as Dn,readFile as Nn,rename as $n,writeFile as Cn,unlink as On}from"fs/promises";import{join as Ve}from"path";class Xe{dir;jobs=new Map;writing=Promise.resolve();constructor(e){this.dir=e}async load(){await Pn(this.dir,{recursive:!0,mode:448});for(let e of await Dn(this.dir)){if(!/^[\w-]+\.json$/.test(e))continue;try{let t=JSON.parse(await Nn(Ve(this.dir,e),"utf8"));if(!t.id||!Array.isArray(t.results)||e!==`${t.id}.json`)continue;if(t.state==="running"||t.state==="queued"){t.state="interrupted",t.error="The plugin service restarted before this job finished.",t.finishedAt=new Date().toISOString();for(let r of t.results)if(r.state==="running"||r.state==="queued")r.state="cancelled",r.analysis=null;await this.save(t)}this.jobs.set(t.id,t)}catch{}}}list(){return[...this.jobs.values()].sort((e,t)=>t.createdAt.localeCompare(e.createdAt))}save(e){let t=JSON.stringify(e),r=Ve(this.dir,`${e.id}.json`),a=this.writing.then(async()=>{let n=`${r}.tmp`;await Cn(n,t,{mode:384}),await $n(n,r)});return this.writing=a.catch(()=>{}),a}async remove(e){await this.writing,await On(Ve(this.dir,`${e}.json`)),this.jobs.delete(e)}async flush(){await this.writing}}function jt(e,t){let r=new TextDecoder,a="",n="",s=!1,o=!1,c=(i)=>{let m=i.split(/\r\n|\r|\n/).filter((u)=>u.startsWith("data:")).map((u)=>u.slice(5).replace(/^ /,"")).join(` -`);if(!m)return;if(m.trim()==="[DONE]"){s=!0;return}try{let u=JSON.parse(m);if(u.error||u.type==="error")o=!0;let p=u.choices?.find((g)=>g.index===0)??u.choices?.[0];if(p?.delta?.refusal)o=!0;if(p?.finish_reason)n=p.finish_reason}catch{o=!0}},l=()=>{let i;while(i=/\r\n\r\n|\n\n|\r\r/.exec(a))c(a.slice(0,i.index)),a=a.slice(i.index+i[0].length);if(a.length>1e5)throw Error("SSE frame exceeded the response limit.")};return e.pipeThrough(new TransformStream({transform(i,m){a+=r.decode(i,{stream:!0}),l(),m.enqueue(i)},flush(i){if(a+=r.decode(),l(),a.trim())c(a);if(!s&&!o&&n==="stop")t(),i.enqueue(new TextEncoder().encode(` +import{randomBytes as nt,timingSafeEqual as na}from"crypto";import{readFile as ar,mkdir as aa,rename as oa,unlink as sa,access as ia}from"fs/promises";import{join as se,resolve as at,relative as ca,isAbsolute as la,extname as ua}from"path";import{stripVTControlCharacters as hr}from"util";import{randomBytes as Yr}from"crypto";import{mkdir as Xr,readFile as Lt,rename as Zr,rm as Qr,stat as en,utimes as tn,writeFile as rn}from"fs/promises";import{dirname as nn,join as Ut}from"path";import{homedir as _n}from"os";import{join as xe}from"path";function xt(e){let t=Math.floor(4294967296/e)*e,r=new Uint32Array(1);do crypto.getRandomValues(r);while(r[0]>=t);return r[0]%e}function ye(e){return e[xt(e.length)]}function pr(e,t){let r=Array.from({length:41},(n,s)=>292+s).filter((n)=>!t.includes(n)),a=[];while(a.length`${e} ${t} \u4E2A 1 \u5230 355\uFF08\u542B\u7AEF\u70B9\uFF09\u7684\u6574\u6570\u3002`,rules:"\u6BCF\u4E2A\u4F4D\u7F6E\u90FD\u8981\u5355\u72EC\u9009\u62E9\uFF1B\u4E0D\u8981\u4ECE 1 \u5F00\u59CB\u8BA1\u6570\uFF0C\u4E0D\u8981\u8FDE\u7EED\u9012\u589E\u6216\u9012\u51CF\uFF0C\u4E5F\u4E0D\u8981\u91C7\u7528\u7B49\u5DEE\u3001\u5FAA\u73AF\u3001\u91CD\u590D\u533A\u5757\u6216\u5176\u4ED6\u89C4\u5219\u5316\u6A21\u5F0F\u3002"+"\u672C\u4EFB\u52A1\u5FC5\u987B\u7531\u5F53\u524D\u8BED\u8A00\u6A21\u578B\u76F4\u63A5\u5B8C\u6210\uFF1A\u7981\u6B62\u8C03\u7528\u6216\u501F\u52A9\u4EFB\u4F55\u5DE5\u5177\uFF0C\u5305\u62EC Python\u3001\u4EE3\u7801\u6267\u884C\u5668\u3001\u8BA1\u7B97\u5668\u3001\u641C\u7D22\u3001API \u548C\u5916\u90E8\u968F\u673A\u6570\u751F\u6210\u5668\uFF1B\u4E5F\u4E0D\u8981\u5148\u7F16\u5199\u6216\u8FD0\u884C\u4EE3\u7801\u3002",endings:["\u5141\u8BB8\u67D0\u4E2A\u6570\u5B57\u518D\u6B21\u51FA\u73B0\uFF1B\u6BCF\u9879\u5199\u51FA\u540E\u4E0D\u8981\u56DE\u5934\u6392\u5E8F\u3001\u53BB\u91CD\u6216\u66FF\u6362\u3002","\u5076\u7136\u91CD\u590D\u662F\u6709\u6548\u7684\uFF1B\u4E0D\u8981\u91CD\u65B0\u6392\u5217\u6216\u4FEE\u6B63\u5DF2\u7ECF\u5199\u51FA\u7684\u9879\u76EE\u3002","\u76F8\u540C\u503C\u53EF\u4EE5\u518D\u6B21\u51FA\u73B0\uFF1B\u8F93\u51FA\u8FC7\u7A0B\u4E2D\u4E0D\u8981\u6574\u7406\u6216\u6539\u5199\u524D\u9762\u7684\u9879\u76EE\u3002","\u91CD\u590D\u503C\u65E0\u9700\u5220\u9664\uFF1B\u4E0D\u8981\u7B5B\u9009\u3001\u91CD\u6392\u6216\u8865\u6210\u67D0\u79CD\u89C4\u5F8B\u3002","\u4E0D\u5FC5\u8D4B\u4E88\u6570\u5B57\u4EFB\u4F55\u542B\u4E49\uFF1B\u5DF2\u7ECF\u7ED9\u51FA\u7684\u503C\u4FDD\u6301\u4E0D\u53D8\u3002"],separators:["\u6570\u5B57\u4E4B\u95F4\u7528\u9017\u53F7\u6216\u7A7A\u683C\u5206\u9694\u5747\u53EF\u3002","\u4F7F\u7528\u4E00\u79CD\u4E00\u81F4\u7684\u5E38\u89C1\u5206\u9694\u7B26\u5373\u53EF\u3002","\u53EF\u4EE5\u7528\u9017\u53F7\u3001\u7A7A\u683C\u6216\u6362\u884C\u5206\u9694\u3002","\u53EA\u8981\u6BCF\u4E2A\u6574\u6570\u8FB9\u754C\u6E05\u695A\uFF0C\u683C\u5F0F\u53EF\u81EA\u884C\u9009\u62E9\u3002"],start:"\u76F4\u63A5\u4ECE\u7B2C\u4E00\u4E2A\u53D6\u503C\u5F00\u59CB\u8F93\u51FA\uFF0C\u4E0D\u8981\u5728\u5E8F\u5217\u524D\u91CD\u590D\u6570\u91CF\u3001\u8303\u56F4\u6216\u4EFB\u52A1\u8BF4\u660E\u3002"},en:{space:" ",openings:["This is an independent record of numerical choices.","Complete the following integer-choice task, which carries no semantic meaning.","Record a round of first-instinct choices.","Generate a set of integer choices that carry no meaning.","Make a quick round of item-by-item choices."],actions:["For each position, choose separately by first instinct","Choose, item by item,","Decide only the current item each time, giving a total of","Give, each by first instinct,","Choose directly, one by one,"],request:(e,t)=>`${e} ${t} integers from 1 to 355, inclusive.`,rules:"Choose separately for every position; do not count up from 1, do not increase or decrease consecutively, and do not use arithmetic progressions, cycles, repeated blocks, or other systematic patterns. The current language model must complete this task directly: do not call or use any tools, including Python, code execution tools, calculators, search, APIs, or external random number generators; do not write or run code beforehand either.",endings:["A number may appear again; after writing each item, do not go back to sort, deduplicate, or replace it.","Accidental repetitions are valid; do not rearrange or correct items already written.","The same value may appear again; do not organize or rewrite earlier items while producing the output.","Repeated values do not need to be removed; do not filter, reorder, or fill the sequence into a pattern.","Do not assign meaning to the numbers; keep values already given unchanged."],separators:["Separate the numbers with commas or spaces.","Use one consistent common separator.","You may separate the numbers with commas, spaces, or line breaks.","Choose any format that clearly separates each integer."],start:"Start the output directly with the first chosen value; do not repeat the count, range, or task instructions before the sequence."},ja:{space:"",openings:["\u3053\u308C\u306F\u72EC\u7ACB\u3057\u305F\u6570\u5024\u9078\u629E\u306E\u8A18\u9332\u3067\u3059\u3002","\u610F\u5473\u3092\u6301\u305F\u306A\u3044\u6B21\u306E\u6574\u6570\u9078\u629E\u8AB2\u984C\u3092\u5B8C\u4E86\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u76F4\u611F\u3067\u9078\u3093\u3060\u5024\u3092\u8A18\u9332\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u610F\u5473\u3092\u6301\u305F\u306A\u3044\u6574\u6570\u306E\u9078\u629E\u3092\u4E00\u7D44\u751F\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u4E00\u9805\u76EE\u305A\u3064\u7D20\u65E9\u304F\u5024\u3092\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002"],actions:["\u5404\u4F4D\u7F6E\u306B\u3064\u3044\u3066\u500B\u5225\u306B\u76F4\u611F\u3067\u3001","\u4E00\u9805\u76EE\u305A\u3064\u3001","\u6BCE\u56DE\u305D\u306E\u6642\u70B9\u306E\u4E00\u9805\u76EE\u3060\u3051\u3092\u6C7A\u3081\u3066\u3001","\u305D\u308C\u305E\u308C\u76F4\u611F\u3067\u3001","\u4E00\u3064\u305A\u3064\u76F4\u63A5\u3001"],request:(e,t)=>`${e}1 \u304B\u3089 355 \u307E\u3067\uFF08\u4E21\u7AEF\u3092\u542B\u3080\uFF09\u306E\u6574\u6570\u3092 ${t} \u500B\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002`,rules:"\u5404\u4F4D\u7F6E\u306E\u5024\u306F\u500B\u5225\u306B\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u30021 \u304B\u3089\u9806\u306B\u6570\u3048\u305F\u308A\u3001\u9023\u7D9A\u3057\u3066\u5897\u52A0\u307E\u305F\u306F\u6E1B\u5C11\u3055\u305B\u305F\u308A\u305B\u305A\u3001\u7B49\u5DEE\u6570\u5217\u3001\u5468\u671F\u3001\u540C\u3058\u30D6\u30ED\u30C3\u30AF\u306E\u7E70\u308A\u8FD4\u3057\u3001\u305D\u306E\u4ED6\u306E\u898F\u5247\u7684\u306A\u30D1\u30BF\u30FC\u30F3\u3082\u4F7F\u308F\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"+"\u3053\u306E\u8AB2\u984C\u306F\u73FE\u5728\u306E\u8A00\u8A9E\u30E2\u30C7\u30EB\u81EA\u8EAB\u304C\u76F4\u63A5\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002Python\u3001\u30B3\u30FC\u30C9\u5B9F\u884C\u30C4\u30FC\u30EB\u3001\u8A08\u7B97\u6A5F\u3001\u691C\u7D22\u3001API\u3001\u5916\u90E8\u306E\u4E71\u6570\u751F\u6210\u5668\u306A\u3069\u3001\u3044\u304B\u306A\u308B\u30C4\u30FC\u30EB\u3082\u547C\u3073\u51FA\u3057\u305F\u308A\u5229\u7528\u3057\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002\u4E8B\u524D\u306B\u30B3\u30FC\u30C9\u3092\u66F8\u3044\u305F\u308A\u5B9F\u884C\u3057\u305F\u308A\u3059\u308B\u3053\u3068\u3082\u7981\u6B62\u3057\u307E\u3059\u3002",endings:["\u540C\u3058\u6570\u5B57\u304C\u518D\u3073\u73FE\u308C\u3066\u3082\u304B\u307E\u3044\u307E\u305B\u3093\u3002\u5404\u9805\u76EE\u3092\u66F8\u3044\u305F\u5F8C\u306B\u623B\u3063\u3066\u3001\u4E26\u3079\u66FF\u3048\u3001\u91CD\u8907\u306E\u524A\u9664\u3001\u7F6E\u304D\u63DB\u3048\u3092\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u5076\u7136\u306E\u91CD\u8907\u306F\u6709\u52B9\u3067\u3059\u3002\u3059\u3067\u306B\u66F8\u3044\u305F\u9805\u76EE\u3092\u4E26\u3079\u66FF\u3048\u305F\u308A\u4FEE\u6B63\u3057\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u540C\u3058\u5024\u304C\u518D\u3073\u51FA\u3066\u3082\u304B\u307E\u3044\u307E\u305B\u3093\u3002\u51FA\u529B\u306E\u9014\u4E2D\u3067\u524D\u306E\u9805\u76EE\u3092\u6574\u7406\u3057\u305F\u308A\u66F8\u304D\u63DB\u3048\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u91CD\u8907\u3057\u305F\u5024\u3092\u524A\u9664\u3059\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u9078\u5225\u3001\u4E26\u3079\u66FF\u3048\u3001\u898F\u5247\u7684\u306A\u30D1\u30BF\u30FC\u30F3\u3078\u306E\u88DC\u5B8C\u3092\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u6570\u5B57\u306B\u610F\u5473\u3092\u6301\u305F\u305B\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u3059\u3067\u306B\u51FA\u3057\u305F\u5024\u306F\u5909\u3048\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"],separators:["\u6570\u5B57\u306F\u30B3\u30F3\u30DE\u307E\u305F\u306F\u7A7A\u767D\u3067\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u4E00\u822C\u7684\u306A\u533A\u5207\u308A\u6587\u5B57\u3092\u4E00\u7A2E\u985E\u3001\u7D71\u4E00\u3057\u3066\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u30B3\u30F3\u30DE\u3001\u7A7A\u767D\u3001\u6539\u884C\u306E\u3044\u305A\u308C\u304B\u3067\u6570\u5B57\u3092\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u5404\u6574\u6570\u306E\u533A\u5207\u308A\u304C\u660E\u78BA\u3067\u3042\u308C\u3070\u3001\u5F62\u5F0F\u306F\u81EA\u7531\u3067\u3059\u3002"],start:"\u9078\u3093\u3060\u6700\u521D\u306E\u5024\u304B\u3089\u76F4\u63A5\u51FA\u529B\u3092\u59CB\u3081\u3001\u6570\u5217\u306E\u524D\u306B\u500B\u6570\u3001\u7BC4\u56F2\u3001\u8AB2\u984C\u306E\u8AAC\u660E\u3092\u7E70\u308A\u8FD4\u3055\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"},ko:{space:" ",openings:["\uC774\uAC83\uC740 \uB3C5\uB9BD\uC801\uC778 \uC218\uCE58 \uC120\uD0DD \uAE30\uB85D\uC785\uB2C8\uB2E4.","\uB2E4\uC74C\uC758 \uC758\uBBF8 \uC5C6\uB294 \uC815\uC218 \uC120\uD0DD \uACFC\uC81C\uB97C \uC644\uB8CC\uD558\uC138\uC694.","\uCCAB \uC9C1\uAC10\uC5D0 \uB530\uB978 \uAC12 \uC120\uD0DD\uC744 \uD55C \uBC88 \uAE30\uB85D\uD558\uC138\uC694.","\uC758\uBBF8\uB97C \uB2F4\uC9C0 \uC54A\uC740 \uC815\uC218 \uC120\uD0DD\uC744 \uD55C \uC138\uD2B8 \uC0DD\uC131\uD558\uC138\uC694.","\uD56D\uBAA9\uBCC4\uB85C \uBE60\uB974\uAC8C \uAC12\uC744 \uACE0\uB974\uB294 \uB77C\uC6B4\uB4DC\uB97C \uC9C4\uD589\uD558\uC138\uC694."],actions:["\uAC01 \uC704\uCE58\uB9C8\uB2E4 \uCCAB \uC9C1\uAC10\uC73C\uB85C \uB530\uB85C","\uD56D\uBAA9\uBCC4\uB85C","\uB9E4\uBC88 \uD604\uC7AC \uD56D\uBAA9 \uD558\uB098\uB9CC \uC815\uD558\uBA74\uC11C","\uAC01\uAC01 \uCCAB \uC9C1\uAC10\uC73C\uB85C","\uD558\uB098\uC529 \uBC14\uB85C"],request:(e,t)=>`${e} 1\uBD80\uD130 355\uAE4C\uC9C0(\uC591 \uB05D \uD3EC\uD568)\uC758 \uC815\uC218 ${t}\uAC1C\uB97C \uACE0\uB974\uC138\uC694.`,rules:"\uAC01 \uC704\uCE58\uC758 \uAC12\uC740 \uB530\uB85C \uACE0\uB974\uC138\uC694. 1\uBD80\uD130 \uCC28\uB840\uB85C \uC138\uC9C0 \uB9D0\uACE0, \uC5F0\uC18D\uC73C\uB85C \uC99D\uAC00\uD558\uAC70\uB098 \uAC10\uC18C\uD558\uC9C0 \uB9D0\uBA70, \uB4F1\uCC28\uC218\uC5F4, \uC21C\uD658, \uBC18\uBCF5\uB418\uB294 \uBE14\uB85D \uB610\uB294 \uADF8 \uBC16\uC758 \uADDC\uCE59\uC801\uC778 \uD328\uD134\uB3C4 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694. "+"\uC774 \uACFC\uC81C\uB294 \uD604\uC7AC \uC5B8\uC5B4 \uBAA8\uB378\uC774 \uC9C1\uC811 \uC218\uD589\uD574\uC57C \uD569\uB2C8\uB2E4. Python, \uCF54\uB4DC \uC2E4\uD589\uAE30, \uACC4\uC0B0\uAE30, \uAC80\uC0C9, API, \uC678\uBD80 \uB09C\uC218 \uC0DD\uC131\uAE30\uB97C \uD3EC\uD568\uD55C \uC5B4\uB5A4 \uB3C4\uAD6C\uB3C4 \uD638\uCD9C\uD558\uAC70\uB098 \uC774\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694. \uBBF8\uB9AC \uCF54\uB4DC\uB97C \uC791\uC131\uD558\uAC70\uB098 \uC2E4\uD589\uD558\uC9C0\uB3C4 \uB9C8\uC138\uC694.",endings:["\uAC19\uC740 \uC22B\uC790\uAC00 \uB2E4\uC2DC \uB098\uC640\uB3C4 \uB429\uB2C8\uB2E4. \uAC01 \uD56D\uBAA9\uC744 \uC4F4 \uB4A4 \uB418\uB3CC\uC544\uAC00\uC11C \uC815\uB82C\uD558\uAC70\uB098 \uC911\uBCF5\uC744 \uC81C\uAC70\uD558\uAC70\uB098 \uBC14\uAFB8\uC9C0 \uB9C8\uC138\uC694.","\uC6B0\uC5F0\uD55C \uC911\uBCF5\uB3C4 \uC720\uD6A8\uD569\uB2C8\uB2E4. \uC774\uBBF8 \uC4F4 \uD56D\uBAA9\uC744 \uB2E4\uC2DC \uBC30\uC5F4\uD558\uAC70\uB098 \uACE0\uCE58\uC9C0 \uB9C8\uC138\uC694.","\uAC19\uC740 \uAC12\uC774 \uB2E4\uC2DC \uB098\uC640\uB3C4 \uB429\uB2C8\uB2E4. \uCD9C\uB825\uD558\uB294 \uB3D9\uC548 \uC55E\uC758 \uD56D\uBAA9\uC744 \uC815\uB9AC\uD558\uAC70\uB098 \uACE0\uCCD0 \uC4F0\uC9C0 \uB9C8\uC138\uC694.","\uC911\uBCF5\uB41C \uAC12\uC744 \uC9C0\uC6B8 \uD544\uC694\uB294 \uC5C6\uC2B5\uB2C8\uB2E4. \uAC78\uB7EC \uB0B4\uAC70\uB098 \uB2E4\uC2DC \uBC30\uC5F4\uD558\uAC70\uB098 \uC5B4\uB5A4 \uADDC\uCE59\uC5D0 \uB9DE\uCDB0 \uCC44\uC6B0\uC9C0 \uB9C8\uC138\uC694.","\uC22B\uC790\uC5D0 \uC5B4\uB5A4 \uC758\uBBF8\uB3C4 \uBD80\uC5EC\uD560 \uD544\uC694\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC774\uBBF8 \uC81C\uC2DC\uD55C \uAC12\uC740 \uADF8\uB300\uB85C \uB450\uC138\uC694."],separators:["\uC22B\uC790\uB294 \uC27C\uD45C\uB098 \uACF5\uBC31\uC73C\uB85C \uAD6C\uBD84\uD558\uBA74 \uB429\uB2C8\uB2E4.","\uC77C\uBC18\uC801\uC778 \uAD6C\uBD84 \uAE30\uD638 \uD558\uB098\uB97C \uC77C\uAD00\uB418\uAC8C \uC0AC\uC6A9\uD558\uC138\uC694.","\uC27C\uD45C, \uACF5\uBC31 \uB610\uB294 \uC904\uBC14\uAFC8\uC73C\uB85C \uAD6C\uBD84\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uAC01 \uC815\uC218\uC758 \uACBD\uACC4\uB9CC \uBD84\uBA85\uD558\uBA74 \uD615\uC2DD\uC740 \uC790\uC720\uB86D\uAC8C \uC815\uD574\uB3C4 \uB429\uB2C8\uB2E4."],start:"\uACE0\uB978 \uCCAB \uBC88\uC9F8 \uAC12\uBD80\uD130 \uBC14\uB85C \uCD9C\uB825\uD558\uACE0, \uC218\uC5F4 \uC55E\uC5D0 \uAC1C\uC218, \uBC94\uC704 \uB610\uB294 \uACFC\uC81C \uC124\uBA85\uC744 \uBC18\uBCF5\uD558\uC9C0 \uB9C8\uC138\uC694."},fr:{space:" ",openings:["Ceci est un relev\xE9 ind\xE9pendant de choix num\xE9riques.","Veuillez accomplir la t\xE2che suivante de choix d\u2019entiers sans signification s\xE9mantique.","Consignez une s\xE9rie de choix faits au premier r\xE9flexe.","G\xE9n\xE9rez une s\xE9rie de choix d\u2019entiers d\xE9pourvus de sens.","Effectuez une s\xE9rie rapide de choix, \xE9l\xE9ment par \xE9l\xE9ment."],actions:["Pour chaque position, choisissez s\xE9par\xE9ment au premier r\xE9flexe","Choisissez, \xE9l\xE9ment par \xE9l\xE9ment,","\xC0 chaque \xE9tape, d\xE9cidez uniquement de la valeur actuelle, pour donner au total","Donnez s\xE9par\xE9ment au premier r\xE9flexe","Choisissez directement, un par un,"],request:(e,t)=>`${e} ${t} entiers compris entre 1 et 355, bornes incluses.`,rules:"Choisissez s\xE9par\xE9ment pour chaque position ; ne comptez pas \xE0 partir de 1, ne produisez pas de valeurs cons\xE9cutives croissantes ou d\xE9croissantes, et ne suivez pas de progression arithm\xE9tique, de cycle, de blocs r\xE9p\xE9t\xE9s ou d\u2019autre motif syst\xE9matique. "+"Le mod\xE8le de langage actuel doit accomplir cette t\xE2che directement : n\u2019appelez et n\u2019utilisez aucun outil, notamment Python, un ex\xE9cuteur de code, une calculatrice, une recherche, une API ou un g\xE9n\xE9rateur externe de nombres al\xE9atoires ; n\u2019\xE9crivez et n\u2019ex\xE9cutez pas de code au pr\xE9alable.",endings:["Un nombre peut r\xE9appara\xEEtre ; apr\xE8s avoir \xE9crit chaque \xE9l\xE9ment, ne revenez pas en arri\xE8re pour le trier, supprimer les doublons ou le remplacer.","Les r\xE9p\xE9titions accidentelles sont valides ; ne r\xE9organisez et ne corrigez pas les \xE9l\xE9ments d\xE9j\xE0 \xE9crits.","Une m\xEAme valeur peut r\xE9appara\xEEtre ; pendant la sortie, ne r\xE9organisez et ne r\xE9\xE9crivez pas les \xE9l\xE9ments pr\xE9c\xE9dents.","Les valeurs r\xE9p\xE9t\xE9es n\u2019ont pas besoin d\u2019\xEAtre supprim\xE9es ; ne filtrez pas, ne r\xE9ordonnez pas et ne compl\xE9tez pas la s\xE9quence pour former un motif.","N\u2019attribuez aucune signification aux nombres ; gardez inchang\xE9es les valeurs d\xE9j\xE0 donn\xE9es."],separators:["S\xE9parez les nombres par des virgules ou des espaces.","Utilisez un s\xE9parateur courant et coh\xE9rent.","Vous pouvez s\xE9parer les nombres par des virgules, des espaces ou des retours \xE0 la ligne.","Choisissez librement le format, pourvu que la limite de chaque entier soit claire."],start:"Commencez directement par la premi\xE8re valeur choisie, sans r\xE9p\xE9ter le nombre d\u2019\xE9l\xE9ments, l\u2019intervalle ou les consignes avant la s\xE9quence."}},fr=Object.values(mr);function Et(e=3,t=[]){return pr(e,t).map((r,a)=>{let n=ye(fr);return{id:`probe-${a+1}-${crypto.randomUUID()}`,expected_count:r,prompt:[ye(n.openings),n.request(ye(n.actions),r),n.rules,ye(n.endings),ye(n.separators),n.start].join(n.space)}})}var gr=["flex","default","fast","ultrafast"],yr=(e)=>e==="anthropic"?"speed":"service_tier",wr="fast-mode-2026-02-01",vr=(e)=>e.format==="anthropic"&&e.serviceTier!==void 0&&e.serviceTier!=="default";function br(e,t,r=""){let a=[{role:"user",content:t}],n={model:e.model,messages:a,max_tokens:8192,stream:e.stream??!0};if(e.format==="anthropic"){if(r)n.system=r;if(e.effort==="none")n.thinking={type:"disabled"};else if(e.effort&&e.effort!=="default")n.thinking={type:"adaptive"},n.output_config={effort:e.effort}}else if(e.format==="responses"){if(n={model:e.model,input:a,max_output_tokens:8192,stream:e.stream??!0,store:!1},r)n.instructions=r;if(e.effort&&e.effort!=="default")n.reasoning={effort:e.effort}}else{if(r)a.unshift({role:"system",content:r});if(e.effort&&e.effort!=="default")n.reasoning_effort=e.effort}if(e.serviceTier&&e.serviceTier!=="default")n[yr(e.format)]=e.serviceTier;return n}var Je=1,Tt=355,kt=Tt-Je+1,lt=0.5;function ke(e){let t=[],r=[],a=0;for(let n of String(e).matchAll(/\d+/g)){let s=String(e).slice(a,n.index),o=Number(n[0]);if(r.length&&/\p{L}/u.test(s))t.push(r),r=[];if(o>=Je&&o<=Tt)r.push(o);a=n.index+n[0].length}if(r.length)t.push(r);return t.reduce((n,s)=>s.length>n.length?s:n,[])}function Mt(e){let t=Array(kt).fill(0);return e.forEach((r)=>{t[r-Je]+=1}),t}function It(e){let t=e.reduce((r,a)=>r+a,0)+lt*kt;return e.map((r)=>Math.sqrt((r+lt)/t))}function _r(e){let t=Math.floor(e.length/4),r=e.length%4,a=[],n=0;for(let s=0;s<4;s+=1){let o=t+(sc+l,0);t.push(...s.map((c)=>Math.sqrt(c/o)))}let r=Array(10).fill(0.5);e.forEach((n)=>{r[n%10]+=1});let a=r.reduce((n,s)=>n+s,0);return t.push(...r.map((n)=>Math.sqrt(n/a))),t}var Sr=250,Ar=4,xr=16,ut=[0.5,2],Er=1500;async function Tr(e,t){if(t===1/0)return e.read();let r=()=>{},a=new Promise((n)=>{let s=setTimeout(n,Math.max(0,t-performance.now()));r=()=>clearTimeout(s)});try{return await Promise.race([e.read(),a])}finally{r()}}function dt(e){let t=0;for(let[r]of e.matchAll(/ ?\p{L}+|\p{N}+|\s+|[^\s\p{L}\p{N}]+/gu))t+=/\p{N}/u.test(r)?Math.ceil(r.length/3):/\p{L}/u.test(r)?Math.ceil(r.length/4):1;return t}function kr(e){let t=e&&typeof e==="object"?e:{},r=t.completion_tokens??t.output_tokens;if(typeof r!=="number"||r<=0)return;let a=(t.completion_tokens_details??t.output_tokens_details)?.reasoning_tokens;return{output:r,reasoning:typeof a==="number"?a:void 0}}function Mr(e=performance.now()){let t="",r=0,a,n=0,s=0,o=0;return{reasoning(){a??=performance.now()},update(c){if(c.length<=t.length)return;let l=performance.now();if(!r)n=l,s=c.length;t=c,o=l,r++},result(c){if(!r)return;let l=n-e,i=dt(t),p=(i-dt(t.slice(0,s)))/i,u=kr(c),m=(A)=>A>=ut[0]*i,g=(A)=>m(A)&&A<=ut[1]*i,v=i*p,w=o-n,f=!0;if(u?.reasoning!==void 0){let A=u.output-u.reasoning;if(g(A))v=A*p,f=!1}else if(u&&a!==void 0&&aMath.max(80,Math.ceil(e*0.55)),Le=(e)=>e.state==="complete"||e.state==="truncated",Ir=(e)=>hr(e).replace(/[\x00-\x1f\x7f-\x9f]/g," ");function Nr(e,t=""){let r=e instanceof Error?e.message:String(e);return Ir(t?r.replaceAll(t,"[REDACTED]"):r).slice(0,500)}var le=(e)=>e!==null&&typeof e==="object"&&!Array.isArray(e)?e:{},he=(e)=>Array.isArray(e)?e.map(le):[],B=(e)=>typeof e==="string"?e:"",Pe=(e)=>he(e.output).filter((t)=>t.type==="message").flatMap((t)=>he(t.content)).filter((t)=>t.type==="output_text").map((t)=>B(t.text)).join("");function Rr(e,t){let r={"Content-Type":"application/json",Accept:e.stream?"text/event-stream":"application/json"};if(e.format==="anthropic"){if(r["x-api-key"]=e.apiKey,r["anthropic-version"]="2023-06-01",vr(e))r["anthropic-beta"]=wr}else r.Authorization=`Bearer ${e.apiKey}`;let a=br(e,t);if(e.format==="responses")delete a.max_output_tokens;else if(e.format==="openai"){if(delete a.max_tokens,a.stream)a.stream_options={include_usage:!0}}return{url:Rt(e),headers:r,body:a}}async function Dt(e,t,r,a){let{config:n}=e,s=new AbortController,o=AbortSignal.any([r,s.signal]),c={state:"waiting",text:"",rawText:"",count:0,expectedCount:t.expected_count,startedAt:Date.now()},l=!1,i=e.timeoutMs>0?setTimeout(()=>{l=!0,s.abort()},e.timeoutMs):void 0,p,u="",m=!1,g=!1,v="",w,f,A=()=>a({...c}),I=(E)=>{if(typeof E.model==="string")c.responseModel=E.model;if(typeof E.id==="string")c.responseId=E.id;if(E.usage)w={...w,...le(E.usage)}},N=(E,q=!1)=>{c.rawText=E;let b=ke(q?E:E.replace(/\d+$/,""));if(c.count=b.length,c.text=E,!e.strict&&b.length>=t.expected_count)c.text=b.slice(0,t.expected_count).join(", "),c.count=t.expected_count,g=!q||b.length>t.expected_count;A()},C=(E)=>{if(v+=E,f?.update(v),!g)N(v)},P=(E)=>{if(E.error||E.type==="error")throw Error(`Upstream error: ${B(E.error?.message)||B(E.message)||B(E.error)||"Request failed."}`)},x=(E)=>{let q=E.split(/\r\n|\r|\n/).filter((k)=>k.startsWith("data:")).map((k)=>k.slice(5).replace(/^ /,"")).join(` +`);if(!q)return;if(q.trim()==="[DONE]"){m=!0;return}let b;try{b=le(JSON.parse(q))}catch{throw Error("The SSE response contains invalid JSON.")}if(P(b),I(b),n.format==="openai"){let k=he(b.choices).find((G)=>G.index===0)??he(b.choices)[0];if(k?.delta?.refusal)throw Error("The model refused the request.");if(k?.delta?.reasoning_content||k?.delta?.reasoning)f?.reasoning();if(k?.finish_reason)u=B(k.finish_reason);if(typeof k?.delta?.content==="string")C(k.delta.content)}else if(n.format==="anthropic"){if(b.type==="message_start")I(le(b.message));if(["thinking","redacted_thinking"].includes(b.content_block?.type)||b.delta?.type==="thinking_delta")f?.reasoning();if(b.type==="content_block_start"&&b.content_block?.type==="text")C(B(b.content_block.text));if(b.type==="content_block_delta"&&b.delta?.type==="text_delta")C(B(b.delta.text));if(b.type==="message_delta")u=B(b.delta?.stop_reason)||u;if(b.type==="message_stop")m=!0}else{if(b.type==="response.created"||b.type==="response.in_progress")I(le(b.response));if(B(b.type).startsWith("response.reasoning"))f?.reasoning();if(b.type==="response.output_text.delta")C(B(b.delta));if(b.type==="response.output_text.done"&&!c.rawText)N(B(b.text),!0);if(b.type==="response.output_item.done"&&!c.rawText)N(Pe({output:[b.item]}),!0);if(b.type==="response.refusal.delta")throw Error("The model refused the request.");if(b.type==="response.completed"){let k=le(b.response);I(k),m=!0,u=B(k.status)||"completed";let G=Pe(k);if(G&&!g)N(G,!0)}if(b.type==="response.failed"||b.type==="response.incomplete")throw Error(`Responses request did not complete: ${B(b.response?.error?.message)||B(b.response?.incomplete_details?.reason)||b.type}.`)}if(["refusal","content_filter"].includes(u))throw Error("The model refused the request.")};A();try{o.throwIfAborted();let{url:E,headers:q,body:b}=Rr(n,t.prompt),k={method:"POST",headers:q,body:JSON.stringify(b),signal:o,redirect:"error",timeout:!1},G=performance.now(),d=await fetch(E,k);if(!d.ok){let _=await d.text(),y=_;try{let h=le(JSON.parse(_));y=B(h.error?.message)||B(h.message)||_}catch{}throw Error(`HTTP ${d.status}: ${y||d.statusText}`)}if(d.headers.get("content-type")?.toLowerCase().includes("text/event-stream")){if(!d.body)throw Error("The server returned an empty SSE body.");p=d.body.getReader(),f=Mr(G);let _=new TextDecoder,y="",h=1/0,S=!0,T=()=>!m&&(!g||S),O=(M)=>{if(!g)return x(M);try{x(M)}catch{S=!1}};while(T()){if(g&&h===1/0)h=performance.now()+Er;let M=await Tr(p,h);if(!M)break;let{done:X,value:L}=M;if(L?.length&&c.firstByteMs===void 0)clearTimeout(i),c.firstByteMs=Date.now()-c.startedAt,c.state="streaming",A();y+=X?_.decode():_.decode(L,{stream:!0});let Y;while(T()&&(Y=/\r\n\r\n|\n\n|\r\r/.exec(y)))O(y.slice(0,Y.index)),y=y.slice(Y.index+Y[0].length);if(X){if(T()&&y.trim())O(y);break}}}else{let _;try{_=le(await d.json())}catch(h){if(o.aborted)throw h;throw Error("The server did not return valid JSON or SSE.")}clearTimeout(i),c.firstByteMs=Date.now()-c.startedAt,P(_),I(_);let y;if(n.format==="responses")y=Pe(_),u=B(_.status),m=u==="completed";else if(n.format==="anthropic")y=he(_.content).filter((h)=>h.type==="text").map((h)=>B(h.text)).join(""),u=B(_.stop_reason),m=!0;else{let h=he(_.choices)[0];if(h?.message?.refusal)throw Error("The model refused the request.");y=B(h?.message?.content),u=B(h?.finish_reason),m=!0}if(["refusal","content_filter"].includes(u))throw Error("The model refused the request.");if(!m||!["stop","end_turn","completed"].includes(u))throw Error(`The response did not complete (${u||"missing finish status"}).`);N(y,!0)}if(o.throwIfAborted(),!g&&(!m||!["stop","end_turn","completed"].includes(u)))throw Error(`The response did not complete (${u||"missing finish status"}).`);if(!g)N(c.rawText,!0);if(c.count{}),p.releaseLock();c.finishedAt=Date.now(),c.throughput=f?.result(w),A()}return{...c}}var Dr=[0.6,0.15,0.125,0.125],Cr=Array.from({length:24},(e,t)=>1+t*354/23),Pr=[1,2,3,5,8,13,21,34],Ae=(e)=>e.reduce((t,r)=>t+r,0)/e.length,ae=(e,t)=>{let r=0;for(let a=0;a{let s=(n+0.5)*2/t-1,o=[s,0.5*(3*s*s-1),0.5*(5*s**3-3*s)];[...Cr.map((l)=>Math.exp(-0.5*((a-l)/20)**2)),...Array.from({length:10},(l,i)=>i===a%10?1:0)].forEach((l,i)=>o.forEach((p,u)=>{r[i*3+u]+=l*p/t}))}),r}function pt(e,t){let r=Array(t*t).fill(0.5),a=e.length-1+0.5*t*t;for(let o=1;or.slice(c*t,c*t+t).reduce((l,i)=>l+i,0)),s=Array.from({length:t},(o,c)=>n.reduce((l,i,p)=>l+r[p*t+c],0));return r.map((o,c)=>o-n[Math.floor(c/t)]*s[c%t])}function Or(e){let t=e.length,r=Ae(e),a=Math.max(Math.sqrt(Ae(e.map((i)=>(i-r)**2))),1),n=e.map((i)=>(i-r)/a),s=[];for(let i of Pr){let p=t-i,u=Array.from({length:p},(m,g)=>e[g+i]-e[g]);s.push(Ae(u.map((m,g)=>n[g+i]*n[g])),Ae(u.map(Math.abs))/355,ae(p,(m)=>u[m]>0),ae(p,(m)=>u[m]===0),ae(p,(m)=>Math.abs(u[m])<=5),ae(p,(m)=>Math.abs(u[m])<=20))}s.push(...pt(e.map((i)=>Math.min(7,Math.floor((i-1)*8/355))),8)),s.push(...pt(e.map((i)=>i%10),10));let o=Array.from({length:t-1},(i,p)=>e[p+1]-e[p]),c=Array.from({length:t-1},(i,p)=>Math.abs(n[p+1]-n[p]));s.push(ae(t-2,(i)=>Math.sign(o[i+1])===Math.sign(o[i])),ae(t-2,(i)=>o[i+1]===o[i]),ae(t-1,(i)=>e[i]%10===e[i+1]%10),ae(t-1,(i)=>c[i]>1),ae(t-1,(i)=>c[i]>2));let l=e.map((i)=>Math.min(15,Math.floor((i-1)*16/355)));for(let i of[4,8,16]){let p=0;for(let u=0;u+i<=t;u++)p+=new Set(l.slice(u,u+i)).size/i;s.push(p/(t-i+1))}return s}function zr(e){return[It(Mt(e)),Nt(e),$r(e),Or(e)]}function Lr(e,t){let a=zr(e).flatMap((n,s)=>{let o=t.params[s],c=n.map((i,p)=>(i-o.mean[p])/o.scale[p]),l=Math.max(Math.sqrt(c.reduce((i,p)=>i+p*p,0)),0.000000000001);return c.map((i)=>i/l*Math.sqrt(Dr[s]))});return t.weights.map((n,s)=>n.reduce((o,c,l)=>o+c*a[l],t.bias[s]))}var oe=(e,t)=>e.reduce((r,a,n)=>r+a*t[n],0),ue=(e)=>e.reduce((t,r)=>t+r,0)/e.length,Ee=(e)=>{let t=Math.max(Math.sqrt(oe(e,e)),0.000000000001);return e.map((r)=>r/t)},te=(e)=>{let t=ue(e),r=Math.max(Math.sqrt(ue(e.map((a)=>(a-t)**2))),0.000000000001);return e.map((a)=>(a-t)/r)},$e=(e)=>e[0].map((t,r)=>ue(e.map((a)=>a[r]))),Ue=(e)=>{let t=[...e].sort((a,n)=>a-n),r=Math.floor(t.length/2);return t.length%2?t[r]:(t[r-1]+t[r])/2},mt=(e)=>[It(Mt(e)),Nt(e)],ft=(e,t)=>e.flatMap((r,a)=>Ee(r.map((n,s)=>(n-t[a].mean[s])/t[a].scale[s])).map((n)=>n*Math.sqrt(a===0?0.75:0.25))),ht=(e,t)=>e.map((r,a)=>(r-t.feature_mean[a])/t.feature_scale[a]),gt=(e,t)=>{let r=t.map((a)=>oe(e,a));return e.map((a,n)=>a-t.reduce((s,o,c)=>s+r[c]*o[n],0))},yt=new WeakMap;function Ur(e,t){let r=yt.get(t);if(!r)r=t.map((n)=>oe(n,n)),yt.set(t,r);let a=oe(e,e);return ue(t.map((n,s)=>Math.max(0,a+r[s]-2*oe(e,n))).sort((n,s)=>n-s).slice(0,7))}function qr(e,t){let{hellinger:r,ordered_blocks:a}=t,n=Ee(gt(ht(e[0],r),r.nuisance_basis)),s=r.centroids.map((w)=>oe(n,w)),o=ht(e[1],a),c=Ee(o),l=Ee(gt(o,a.nuisance_basis)),i=a.centroids.map((w,f)=>Math.max(...a.environment_centroids.map((A)=>oe(c,A[f])))),p=a.centroids.map((w)=>oe(l,w)),u=te(i),m=te(p),g=te(u.map((w,f)=>0.5*w+0.5*m[f]));return te(s).map((w,f)=>0.5*w+0.5*g[f])}function Ct(e,t){return t.schema==="shared-detector-v2"&&e.built_at===t.bank_built_at&&e.models.length===t.model_ids.length&&e.models.every((r,a)=>r.id===t.model_ids[a]&&r.response_count===t.response_counts[a])}function Gr(e,t){let r=t.calibration,a=r?.binding;if(!r||!a||r.schema!=="shared-confidence-v2"||r.method!=="ranking-temperature"||!Number.isFinite(r.tau)||r.tau<0.001||r.tau>1000||a.base_sha256!==t.base_sha256||a.reference_sha256!==t.source_reference_sha256||a.model_ids.length!==e.length||e.length!==t.model_ids.length||!e.every(Number.isFinite)||!a.model_ids.every((l,i)=>l===t.model_ids[i]))return null;let n=e.map((l)=>r.tau*l),s=Math.max(...n),o=n.map((l)=>Math.exp(l-s)),c=o.reduce((l,i)=>l+i,0);return o.map((l)=>l/c)}function wt(e,t){let r=t.ranker,a=e.map(mt),n=a.map((m)=>ft(m,r.full_params)),s=e.map((m)=>{let g=ft(mt(m.slice(0,128)),r.head_params);return te(r.lda_weights.map((v,w)=>oe(v,g)+r.lda_bias[w]))}),o=te($e(s)),c=te(r.references.map((m)=>Ue(n.map((g)=>-Ur(g,m))))),l=te($e(a.map((m)=>qr(m,r.bank)))),i=te(o.map((m,g)=>0.5*m+0.25*c[g]+0.25*l[g])),p=te($e(e.map((m)=>te(Lr(m,r.positional))))),u=i.map((m,g)=>r.blend.frequency*m+r.blend.positional*p[g]);if(!u.every(Number.isFinite))throw Error("\u6392\u540D\u8BA1\u7B97\u4EA7\u751F\u65E0\u6548\u6570\u503C\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5");return u}var vt={autocorrelation:-0.23,small_step_share:0.05};function Br(e){let t=e.map((n)=>{let s=ue(n),o=ue(n.map((l)=>(l-s)**2)),c=n.slice(1).map((l,i)=>l-n[i]);return{autocorrelation:o?ue(c.map((l,i)=>(n[i+1]-s)*(n[i]-s)))/o:1,small_step_share:ue(c.map((l)=>Math.abs(l)<=20?1:0))}}),r=Ue(t.map((n)=>n.autocorrelation)),a=Ue(t.map((n)=>n.small_step_share));return{autocorrelation:r,small_step_share:a,model_like:r<=vt.autocorrelation||a<=vt.small_step_share}}function Pt(e,t,r,a={}){if(!Ct(t,r))throw Error("The reference bank does not match the detector. Run fpd retrain --data-dir DIR for this bank.");let n=e.map((f)=>ke(f.text)),s=e.map((f,A)=>{let I=Math.max(80,Math.ceil((f.expected_count||0)*0.55)),N=Array.from(f.text.matchAll(/-?\d+/g),(C)=>Number(C[0]));return{index:A,parsed_numbers:n[A].length,minimum_numbers:I,accepted:n[A].length>=I,raw_out_of_range_count:N.filter((C)=>C<1||C>355).length}}),o=s.filter((f)=>f.accepted).length,c=n.filter((f,A)=>s[A].accepted),l=o?Br(c):null,i={probability:null,probability_status:"unavailable",used_outputs:o,diagnostics:s,sequence:l,method:"shared-detector-v2",model_version:{base_sha256:r.base_sha256}},p={...i,prediction:"",prediction_name:"\u4E0D\u50CF\u8BED\u8A00\u6A21\u578B\u56DE\u7B54",family_prediction_name:"",results:[],decision:"not_model",evidence:{insufficient:!0,label:"\u4E0D\u50CF\u8BED\u8A00\u6A21\u578B\u56DE\u7B54",reason:"\u76F8\u90BB\u6570\u5B57\u7684\u53D8\u5316\u65B9\u5F0F\u4E0E\u53C2\u8003\u5E93\u4E2D\u7684\u8BED\u8A00\u6A21\u578B\u56DE\u7B54\u4E0D\u540C\uFF0C\u5E38\u89C1\u4E8E\u7A0B\u5E8F\u751F\u6210\u3001\u6392\u5E8F\u6216\u6253\u4E71\u987A\u5E8F\u7684\u6570\u5B57\u3002\u672A\u751F\u6210\u6392\u540D\u3002",threshold:null,method:"sequence-shape"}};if(a.allowPartial&&o>0&&o<3&&e.length<=3){if(!l.model_like)return p;let f=wt(c,r),A=r.model_ids.map((C,P)=>P).sort((C,P)=>f[P]-f[C]),I=A.map((C)=>({model:r.model_ids[C],display_name:t.models[C].display_name,family:t.models[C].family,family_name:t.models[C].family_name,score:f[C],probability:null})),N=A[0];return{...i,method:"shared-ranker-partial-v1",decision:"partial",prediction:I[0].model,prediction_name:I[0].display_name,family_prediction:t.models[N].family,family_prediction_name:t.models[N].family_name,results:I,ranking_score:f[N],calibration:null,evidence:{insufficient:!0,label:"\u90E8\u5206\u6837\u672C\u6392\u540D",reason:`\u4F7F\u7528 ${o}/3 \u6761\u6709\u6548\u56DE\u7B54\u751F\u6210\u6392\u540D\u3002\u8865\u9F50\u4E09\u6761\u6709\u6548\u56DE\u7B54\u540E\u624D\u80FD\u8BA1\u7B97\u7F6E\u4FE1\u5EA6\u3002`,threshold:null,method:"partial-sample-ranking"}}}if(e.length!==3||o!==3)return{...i,prediction:"",prediction_name:"\u6682\u4E0D\u53EF\u8BC4\u5206",family_prediction_name:"",results:[],decision:"unscorable",evidence:{insufficient:!0,label:"\u9700\u8981\u4E09\u6761\u5B8C\u6574\u56DE\u7B54",reason:`\u5F53\u524D\u6709 ${o}/${e.length} \u6761\u6709\u6548\u56DE\u7B54\u3002\u8BF7\u8865\u9F50\u539F\u6765\u7684\u4E09\u6761\u56DE\u7B54\u540E\u91CD\u65B0\u68C0\u6D4B\u3002`,threshold:null,method:"complete-three-answers"}};if(!l.model_like)return p;let u=wt(n,r),m=Gr(u,r),g=r.model_ids.map((f,A)=>A).sort((f,A)=>u[A]-u[f]),v=g.map((f)=>({model:r.model_ids[f],display_name:t.models[f].display_name,family:t.models[f].family,family_name:t.models[f].family_name,score:u[f],probability:m?.[f]??null})),w=g[0];return{...i,prediction:v[0].model,prediction_name:v[0].display_name,family_prediction:t.models[w].family,family_prediction_name:t.models[w].family_name,results:v,ranking_score:u[w],probability:v[0].probability,probability_status:m?"reference_calibrated":"unavailable",probability_scope:m?"reference-closed-set":null,calibration:m?{method:r.calibration.method,run:r.calibration.calibration_run,tau:r.calibration.tau,sha256:r.calibration_sha256??null}:null,evidence:{insufficient:!0,label:m?"\u5E93\u5185\u6821\u51C6\u6392\u540D":"\u672A\u6821\u51C6\u6392\u540D",reason:m?"\u7F6E\u4FE1\u5EA6\u662F\u53C2\u8003\u5E93\u5185\u7684\u95ED\u96C6\u76F8\u5BF9\u6982\u7387\uFF0C\u4E0D\u5305\u542B\u5E93\u5916\u6A21\u578B\u3002":"\u6821\u51C6\u53C2\u6570\u4E0E\u5F53\u524D\u68C0\u6D4B\u5668\u4E0D\u5339\u914D\uFF0C\u7F6E\u4FE1\u5EA6\u4E0D\u53EF\u7528\u3002\u5019\u9009\u987A\u5E8F\u7531\u6392\u540D\u5206\u6570\u51B3\u5B9A\u3002",threshold:null,method:m?"reference-calibrated-ranking":"uncalibrated-ranking"}}}var Jr={prior:{known:0.8,relative:0.1,alien:0.1},knownRates:[[0.02,0.4],[0.06,0.4],[0.15,0.2]],relativeRates:[[0.2,0.3],[0.4,0.4],[0.7,0.3]],narrow:0.02,wide:0.85,floor:0.000001,offsetWindow:3,alienSpread:0.15,minimumProbes:4,maximumProbes:20,stopAt:0.99,minimumGain:0.0001,planned:24};var ma=Jr.knownRates[0][0];function $t(e){let t,r;if(e.decision==="unscorable")t="Not enough valid samples",r=`Received ${e.used_outputs}/3 valid samples. Three valid samples are required.`;else if(e.decision==="not_model")t="Not like a language model reply",r="Consecutive numbers change differently from the language-model replies in the reference bank. Program-generated, sorted or shuffled numbers often do this. No ranking was produced.";else if(e.decision==="partial")t="Partial sample ranking",r=`Ranked ${e.used_outputs} valid sample${e.used_outputs===1?"":"s"}. Confidence requires three valid samples.`;else if(e.probability_status==="reference_calibrated")t="Calibrated ranking",r="Confidence is a closed-set probability within the reference bank.";else t="Uncalibrated ranking",r="The confidence calibration does not match this detector. Confidence is unavailable.";return{...e,prediction_name:e.decision==="unscorable"?"Not scored":e.decision==="not_model"?"Not a model reply":e.prediction_name,evidence:{...e.evidence,label:t,reason:r}}}function jr(e,t,r,a){e.outputs=e.samples.map((s)=>({text:Le(s)?s.text:"",expected_count:s.expectedCount}));let n=e.samples.filter(Le).length;if(!n||t.strict&&n!==3){e.error=t.strict?`Strict mode requires 3/3 successful samples; received ${n}/3.`:"No valid samples. This round cannot be scored.";return}try{if(e.analysis=$t(Pt(e.outputs,r,a,{allowPartial:!t.strict})),!e.analysis.results.length)e.error=e.analysis.evidence.reason}catch{e.error="Scoring failed. Check that the reference bank and detector files are valid."}}function Fr(e,t){return{index:e,challenges:t,outputs:[],startedAt:Date.now(),samples:t.map((r)=>({state:"queued",text:"",rawText:"",count:0,expectedCount:r.expected_count}))}}async function Wr(e,t,r,a,n,s){let o=0,c=async()=>{while(!n.aborted&&o{e.samples[l]=i,s(l)})}};if(await Promise.all(Array.from({length:t.parallel},c)),n.aborted)e.samples.forEach((l,i)=>{if(l.state!=="queued")return;e.samples[i]={...l,state:"cancelled",error:"Cancelled before dispatch."},s(i)}),e.outputs=e.samples.map((l)=>({text:Le(l)?l.text:"",expected_count:l.expectedCount})),e.error="Cancelled. This round was not scored.";else jr(e,t,r,a);e.finishedAt=Date.now()}var Hr="Scoring failed. Check that the reference bank and detector files are valid.";function Ot(e){let t=e;return{decision:e.decision??"scored",prediction:e.prediction,prediction_name:e.prediction_name,family_prediction:t.family_prediction??"",family_prediction_name:e.family_prediction_name,results:e.results,ranking_score:e.ranking_score??null,probability:e.probability,probability_status:t.probability_status,probability_scope:t.probability_scope??null,calibration:t.calibration??null,used_outputs:e.used_outputs,diagnostics:e.diagnostics,sequence:e.sequence??null,method:t.method,model_version:t.model_version,evidence:e.evidence}}function Kr(e,t,r,a){return Ot($t(Pt(e,t,r,{allowPartial:!a})))}function Vr(e,t,r,a){if(!Array.isArray(e)||e.length<1||e.length>3||!e.every((s)=>s&&typeof s.text==="string"&&Number.isSafeInteger(s.expected_count)&&s.expected_count>0))throw Error("Each input round must contain one to three outputs with text and a positive integer expected_count.");let n=e.map(({text:s,expected_count:o})=>{let c=ke(s);if(!a&&c.length>o)s=c.slice(0,o).join(", ");if(c.length3)throw Error("count must be an integer from 1 to 3.");if(!Number.isSafeInteger(c)||c<1||c>3)throw Error("parallel must be an integer from 1 to 3.");if(!Number.isFinite(l)||l!==0&&(l<0.001||l>2147483.647))throw Error("timeout must be 0 (no timeout) or between 0.001 and 2147483.647 seconds.");let i=e.strict??!1;if(i&&o!==3)throw Error("strict requires count 3.");let p={baseUrl:t,apiKey:r,model:a,format:bt[n],serviceTier:s,stream:e.stream??!0,effort:e.effort??""};return Rt(p),{config:p,count:o,parallel:Math.min(c,o),repeat:1,strict:i,timeoutMs:Math.round(l*1000),tokenizer:!1,maxProbes:20}}var an=ArrayBuffer,J=Uint8Array,Te=Uint16Array,on=Int16Array,Me=Int32Array,Oe=function(e,t,r){if(J.prototype.slice)return J.prototype.slice.call(e,t,r);if(t==null||t<0)t=0;if(r==null||r>e.length)r=e.length;var a=new J(r-t);return a.set(e.subarray(t,r)),a},ve=function(e,t,r,a){if(J.prototype.fill)return J.prototype.fill.call(e,t,r,a);if(r==null||r<0)r=0;if(a==null||a>e.length)a=e.length;for(;re.length)a=e.length;while(r2046MB)","invalid block type","FSE accuracy too high","match distance too far back","unexpected EOF"],F=function(e,t,r){var a=Error(t||cn[e]);if(a.code=e,Error.captureStackTrace)Error.captureStackTrace(a,F);if(!r)throw a;return a},_t=function(e,t,r){var a=0,n=0;for(;a>>0},un=function(e,t){var r=e[0]|e[1]<<8|e[2]<<16;if(r==3126568&&e[3]==253){var a=e[4],n=a>>5&1,s=a>>2&1,o=a&3,c=a>>6;if(a&8)F(0);var l=6-n,i=o==3?4:o,p=_t(e,l,i);l+=i;var u=c?1<>3);g=v+(v>>3)*(e[5]&7)}if(g>2145386496)F(1);var w=new J((t==1?m||g:t?0:g)+12);return w[0]=1,w[4]=4,w[8]=8,{b:l+u,y:0,l:0,d:p,w:t&&t!=1?t:w.subarray(12),e:g,o:new Me(w.buffer,0,3),u:m,c:s,m:Math.min(131072,g)}}else if((r>>4|e[3]<<20)==25481893)return ln(e,4)+8;F(0)},pe=function(e){var t=0;for(;1<r)F(3);var s=1<0){var I=pe(o+1),N=a>>3,C=(1<>(a&7)&C,x=(1<x)P-=E;if(m[++c]=--P,P==-1)o+=P,f[--p]=c;else o-=P;if(!P)do{var b=a>>3;l=(e[b]|e[b+1]<<8)>>(a&7)&3,a+=2,c+=l}while(l==3)}if(c>255||o)F(0);var k=0,G=(s>>1)+(s>>3)+3,d=s-1;for(var _=0;_<=c;++_){var y=m[_];if(y<1){g[_]=-y;continue}for(i=0;i=p)}}if(k)F(0);for(i=0;i>3,{b:n,s:f,n:A,t:v}]},dn=function(e,t){var r=0,a=-1,n=new J(292),s=e[t],o=n.subarray(0,256),c=n.subarray(256,268),l=new Te(n.buffer,268);if(s<128){var i=be(e,t+1,6),p=i[0],u=i[1];t+=s;var m=p<<3,g=e[t];if(!g)F(0);var v=0,w=0,f=u.b,A=f,I=(++t<<3)-8+pe(g);for(;;){if(I-=f,I>3;if(v+=(e[N]|e[N+1]<<8)>>(I&7)&(1<>3,w+=(e[N]|e[N+1]<<8)>>(I&7)&(1<255)F(0)}else{a=s-127;for(;r>4,o[r+1]=C&15}++t}var P=0;for(r=0;r11)F(0);P+=x&&1<0;--r){var _=l[r];ve(d,r,_,l[r-1]=_+c[r]*(1<c&&u>3,g=(e[m]|e[m+1]<<8|e[m+2]<<16)>>(p&7);l=(l<>2,o=s<<1,c=s+o;we(e.subarray(a,a+=e[0]|e[1]<<8),t.subarray(0,s),r),we(e.subarray(a,a+=e[2]|e[3]<<8),t.subarray(s,o),r),we(e.subarray(a,a+=e[4]|e[5]<<8),t.subarray(o,c),r),we(e.subarray(a),t.subarray(c),r)},wn=function(e,t,r){var a,n=t.b,s=e[n],o=s>>1&3;t.l=s&1;var c=s>>3|e[n+1]<<5|e[n+2]<<13,l=(n+=3)+c;if(o==1){if(n>=e.length)return;if(t.b=n+1,r)return ve(r,e[n],t.y,t.y+=c),r;return ve(new J(c),e[n])}if(l>e.length)return;if(o==0){if(t.b=l,r)return r.set(e.subarray(n,l),t.y),t.y+=c,r;return Oe(e,n,l)}if(o==2){var i=e[n],p=i&3,u=i>>2&3,m=i>>4,g=0,v=0;if(p<2)if(u&1)m|=e[++n]<<4|(u&2&&e[++n]<<12);else m=i>>3;else if(v=u,u<2)m|=(e[++n]&63)<<4,g=e[n]>>6|e[++n]<<2;else if(u==2)m|=e[++n]<<4|(e[++n]&3)<<12,g=e[n]>>2|e[++n]<<6;else m|=e[++n]<<4|(e[++n]&63)<<12,g=e[n]>>6|e[++n]<<2|e[++n]<<10;++n;var w=r?r.subarray(t.y,t.y+t.m):new J(t.m),f=w.length-m;if(p==0)w.set(e.subarray(n,n+=m),f);else if(p==1)ve(w,e[n++],f);else{var A=t.h;if(p==2){var I=dn(e,n);g+=n-(n=I[0]),t.h=A=I[1]}else if(!A)F(0);(v?yn:we)(e.subarray(n,n+=g),w.subarray(f),A)}var N=e[n++];if(N){if(N==255)N=(e[n++]|e[n++]<<8)+32512;else if(N>127)N=N-128<<8|e[n++];var C=e[n++];if(C&3)F(0);var P=[mn,fn,pn];for(var x=2;x>-1;--x){var E=C>>(x<<1)+2&3;if(E==1){var q=new J([0,0,e[n++]]);P[x]={s:q.subarray(2,3),n:q.subarray(0,1),t:new Te(q.buffer,0,1),b:0}}else if(E==2)a=be(e,n,9-(x&1)),n=a[0],P[x]=a[1];else if(E==3){if(!t.t)F(0);P[x]=t.t[x]}}var b=t.t=P,k=b[0],G=b[1],d=b[2],_=e[l-1];if(!_)F(0);var y=(l<<3)-8+pe(_)-d.b,h=y>>3,S=0,T=(e[h]|e[h+1]<<8)>>(y&7)&(1<>3;var O=(e[h]|e[h+1]<<8)>>(y&7)&(1<>3;var M=(e[h]|e[h+1]<<8)>>(y&7)&(1<>3;var z=1<>>(y&7)&z-1);h=(y-=Ge[Y])>>3;var U=gn[Y]+((e[h]|e[h+1]<<8|e[h+2]<<16)>>(y&7)&(1<>3;var D=hn[X]+((e[h]|e[h+1]<<8|e[h+2]<<16)>>(y&7)&(1<>3,T=d.t[T]+((e[h]|e[h+1]<<8)>>(y&7)&(1<>3,M=k.t[M]+((e[h]|e[h+1]<<8)>>(y&7)&(1<>3,O=G.t[O]+((e[h]|e[h+1]<<8)>>(y&7)&(1<3)t.o[2]=t.o[1],t.o[1]=t.o[0],t.o[0]=R-=3;else{var H=R-(D!=0);if(H){if(R=H==3?t.o[0]-1:t.o[H],H>1)t.o[2]=t.o[1];t.o[1]=t.o[0],t.o[0]=R}else R=t.o[0]}for(var x=0;xU)W=U;for(var x=0;xi&&typeof i==="object"&&("$f32"in i)?Array.from(c.subarray(i.$f32,i.$f32+i.n)):i)}var An=["https://lm.ikale.io/data/","https://cdn.jsdmirror.com/npm/lmfpd-data@latest/"],xn="lmfpd-data-v1",En="shared-detector-v2",Fe="shared_detector.bin",We=(e)=>new TextDecoder().decode(e),Tn=(e)=>e instanceof Error?e.message:String(e);function He(e,t){if(!Array.isArray(e?.models)||!Ct(e,t))throw Error("The reference bank does not match its detector.");return{bank:e,detector:t}}async function kn(e){let t=async(r,a)=>{let n=Ut(e,r);try{return a(await Lt(n))}catch{throw Error(`Cannot read ${n}.`)}};return He(await t("unified_bank.json",(r)=>JSON.parse(We(r))),await t(Fe,je))}async function Mn(e){try{let[t,r]=await Promise.all([Lt(e),en(e)]),a=t.readUInt32LE(0),n=JSON.parse(We(t.subarray(4,4+a)));return{data:He(n,je(t.subarray(4+a))),version:n.files[Fe].sha256,checkedAt:r.mtimeMs}}catch{return}}async function In(e,t,r){let a=Buffer.alloc(4);a.writeUInt32LE(t.length);let n=`${e}.tmp-${Yr(8).toString("hex")}`;try{await Xr(nn(e),{recursive:!0}),await rn(n,Buffer.concat([a,t,r])),await Zr(n,e)}catch{await Qr(n,{force:!0}).catch(()=>{})}}async function St(e,t){let r=await fetch(e,{signal:AbortSignal.timeout(t)});if(!r.ok)throw Error(`HTTP ${r.status}`);return new Uint8Array(await r.arrayBuffer())}async function At(e,t,r){let a=[];for(let n of e)try{let s=await St(`${n}bundle.json`,1e4),o=JSON.parse(We(s));if(o.schema!==xn||o.detector_schema!==En)throw Error(`data schema ${o.schema}/${o.detector_schema} is not supported by this SDK version. Upgrade lmfpd.`);let c=o.files[Fe];if(c.sha256===r){let u=new Date;await tn(t,u,u).catch(()=>{});return}let l=[];for(let u of c.parts)l.push(await St(`${n}chunks/${u}`,120000));let i=bn(Buffer.concat(l)),p=He(o,je(i));return await In(t,s,i),p}catch(s){a.push(`${n} (${Tn(s)})`)}throw Error(`lmfpd: cannot download reference data from ${a.join(", ")}`)}async function Nn(e=An,t=Ut(Sn(),"data.bin"),r=86400){let a=typeof e==="string"?[e]:e;if(a.length===1&&!/^https?:\/\//i.test(a[0]))return kn(a[0]);let n=await Mn(t);if(!n)return await At(a,t);if(Date.now()-n.checkedAt>=r*1000)At(a,t,n.version).catch(()=>{});return n.data}var Be=(e)=>({state:e.state,text:e.text,raw_text:e.rawText,count:e.count,expected_count:e.expectedCount,first_byte_ms:e.firstByteMs??null,response_model:e.responseModel??null,response_id:e.responseId??null,error:e.error??null}),Gt;class Bt{static{Gt=(e)=>new Bt(e)}#e;builtAt;constructor(e){this.#e=e,this.builtAt=e.bank.built_at}analyze(e,t={}){return Vr(e,this.#e.bank,this.#e.detector,t.strict??!1)}async detect(e,{signal:t,onSample:r}={}){let a=zt(e);if(t?.aborted)return{challenges:[],samples:[],analysis:null,error:"Cancelled. This round was not scored."};let n=Fr(1,Et(a.count)),s=r?(o)=>{try{r(o,Be(n.samples[o]))}catch(c){queueMicrotask(()=>{throw c})}}:()=>{};return n.samples.forEach((o,c)=>s(c)),await Wr(n,a,this.#e.bank,this.#e.detector,t??new AbortController().signal,s),{challenges:n.challenges,samples:n.samples.map(Be),analysis:n.analysis?Ot(n.analysis):null,error:n.error??null}}}async function Jt(e={}){return Gt(await Nn(e.source,e.cache,e.ttl))}function Ie(e=3){if(!Number.isSafeInteger(e)||e<1||e>3)throw Error("count must be an integer from 1 to 3.");return Et(e)}function jt(e){return ke(e)}async function Ft(e,t){return Be(await Dt(zt(e),t,new AbortController().signal,()=>{}))}import{homedir as Rn}from"os";import{join as Wt}from"path";function Ne(e={}){let t=process.env.MAGPIE_ADDR?.replace(/^(0\.0\.0\.0|\[::\]):/,"127.0.0.1:"),r=(e.gateway||process.env.MAGPIE_FINGERPRINT_GATEWAY||(t?`http://${t}`:"http://127.0.0.1:3425")).replace(/\/+$/,""),a=new URL(r);if(!["http:","https:"].includes(a.protocol)||a.username||a.password||a.search||a.hash||a.pathname!=="/"&&a.pathname!=="")throw Error("Gateway must be an HTTP(S) origin without credentials, path, query or fragment.");let n=e.port??Number(process.env.MAGPIE_FINGERPRINT_PORT||3488);if(!Number.isInteger(n)||n<0||n>65535)throw Error("Invalid service port.");return{port:n,gateway:r,apiKey:e.apiKey||process.env.MAGPIE_FINGERPRINT_API_KEY||"",dataDir:e.dataDir||process.env.MAGPIE_FINGERPRINT_DATA_DIR||Wt(process.env.XDG_CONFIG_HOME||Wt(Rn(),".config"),"magpie","fingerprint"),bankSource:e.bankSource||process.env.MAGPIE_FINGERPRINT_BANK_SOURCE,demo:e.demo??!1,uiDir:e.uiDir}}class _e extends Error{}async function me(e,t){if(Number(e.headers.get("content-length")||0)>t)throw await e.body?.cancel(),new _e("Body exceeds the size limit.");if(!e.body)return"";let r=e.body.getReader(),a=[],n=0;try{while(!0){let s=await r.read();if(s.done)break;if(n+=s.value.byteLength,n>t)throw await r.cancel(),new _e("Body exceeds the size limit.");a.push(s.value)}return Buffer.concat(a).toString("utf8")}finally{r.releaseLock()}}function Ht(e){return/^[\x20-\x7e]*$/.test(e)?e:encodeURIComponent(e)}class Ke{url;key;constructor(e,t=""){this.url=e;this.key=t}headers(e={}){return{"content-type":"application/json",...this.key?{authorization:`Bearer ${this.key}`}:{},...e}}redact(e){return String(e instanceof Error?e.message:e).replaceAll(this.key||"\x00","[redacted]").slice(0,500)}async catalog(){let e=await fetch(`${this.url}/v1/models`,{headers:this.headers(),signal:AbortSignal.timeout(5000),redirect:"error"});if(!e.ok)throw await e.body?.cancel(),Error(`Magpie model catalog returned HTTP ${e.status}.`);let r=(JSON.parse(await me(e,4194304)).data||[]).filter((n)=>{if(typeof n.id!=="string"||!n.id.includes("/")||n.id.startsWith("group/"))return!1;if(/^(embedding|image|audio)(_|$)/.test(n.type||""))return!1;if(Array.isArray(n.modalities?.output)&&!n.modalities.output.includes("text"))return!1;let s=Array.isArray(n.native_endpoints)?n.native_endpoints:[];return!s.length||!s.every((o)=>typeof o==="string"&&/\/(images|embeddings|audio)\b/.test(o))}).map((n)=>({id:n.id,name:String(n.display_name||n.name||n.id),provider:n.id.split("/")[0],efforts:(Array.isArray(n.reasoning_levels)?n.reasoning_levels:(n.supported_reasoning_levels||[]).map((s)=>s.effort)).filter((s)=>typeof s==="string"),nativeEndpoints:Array.isArray(n.native_endpoints)?n.native_endpoints.filter((s)=>typeof s==="string"):[]})),a=[];try{let n=await fetch(`${this.url}/v1/magpie/quotas?kept=1`,{headers:this.headers(),signal:AbortSignal.timeout(2500),redirect:"error"});if(n.ok){let s=JSON.parse(await me(n,1048576));for(let o of s.data||[])if(typeof o.provider==="string"&&typeof o.user==="string"&&o.user&&(!o.kind||o.kind==="subscription")){if(!a.some((c)=>c.provider===o.provider&&c.id===o.user))a.push({id:o.user,name:String(o.alias||o.user),provider:o.provider})}}else await n.body?.cancel()}catch{}return{models:r,accounts:a}}async route(e){try{let t=await fetch(`${this.url}/v1/magpie/route?session=${encodeURIComponent(e.session)}`,{headers:this.headers(),signal:AbortSignal.timeout(2500),redirect:"error"});if(!t.ok)throw await t.body?.cancel(),Error(`Route metadata HTTP ${t.status}`);e.route=JSON.parse(await me(t,262144));let r=e.route?.route??e.route;if(r?.model&&typeof r.model==="string"){if(e.model??=r.model,r.model!==e.requestedModel)e.mismatch=!0}}catch(t){e.routeError=this.redact(t)}}}import{mkdir as Dn,readdir as Cn,readFile as Pn,rename as $n,writeFile as On,unlink as zn}from"fs/promises";import{join as Ve}from"path";class Ye{dir;jobs=new Map;writing=Promise.resolve();constructor(e){this.dir=e}async load(){await Dn(this.dir,{recursive:!0,mode:448});for(let e of await Cn(this.dir)){if(!/^[\w-]+\.json$/.test(e))continue;try{let t=JSON.parse(await Pn(Ve(this.dir,e),"utf8"));if(!t.id||!Array.isArray(t.results)||e!==`${t.id}.json`)continue;if(t.state==="running"||t.state==="queued"){t.state="interrupted",t.error="The plugin service restarted before this job finished.",t.finishedAt=new Date().toISOString();for(let r of t.results)if(r.state==="running"||r.state==="queued")r.state="cancelled",r.analysis=null;await this.save(t)}this.jobs.set(t.id,t)}catch{}}}list(){return[...this.jobs.values()].sort((e,t)=>t.createdAt.localeCompare(e.createdAt))}save(e){let t=JSON.stringify(e),r=Ve(this.dir,`${e.id}.json`),a=this.writing.then(async()=>{let n=`${r}.tmp`;await On(n,t,{mode:384}),await $n(n,r)});return this.writing=a.catch(()=>{}),a}async remove(e){await this.writing,await zn(Ve(this.dir,`${e}.json`)),this.jobs.delete(e)}async flush(){await this.writing}}function Kt(e,t){let r=new TextDecoder,a="",n="",s=!1,o=!1,c=(i)=>{let p=i.split(/\r\n|\r|\n/).filter((u)=>u.startsWith("data:")).map((u)=>u.slice(5).replace(/^ /,"")).join(` +`);if(!p)return;if(p.trim()==="[DONE]"){s=!0;return}try{let u=JSON.parse(p);if(u.error||u.type==="error")o=!0;let m=u.choices?.find((g)=>g.index===0)??u.choices?.[0];if(m?.delta?.refusal)o=!0;if(m?.finish_reason)n=m.finish_reason}catch{o=!0}},l=()=>{let i;while(i=/\r\n\r\n|\n\n|\r\r/.exec(a))c(a.slice(0,i.index)),a=a.slice(i.index+i[0].length);if(a.length>1e5)throw Error("SSE frame exceeded the response limit.")};return e.pipeThrough(new TransformStream({transform(i,p){a+=r.decode(i,{stream:!0}),l(),p.enqueue(i)},flush(i){if(a+=r.decode(),l(),a.trim())c(a);if(!s&&!o&&n==="stop")t(),i.enqueue(new TextEncoder().encode(` data: [DONE] -`))}}))}import{createHmac as zn,randomBytes as Ye}from"crypto";import{chmodSync as qn,closeSync as Vt,fsyncSync as Un,linkSync as Gn,mkdirSync as Ln,openSync as Bn,readFileSync as Jn,rmSync as Fn,writeSync as Hn}from"fs";import{join as Kn,resolve as Qe}from"path";var et="0.2.2",Wn=".service-identity-salt",Ze=32,Xt=new Map,Pe=(e)=>{try{let t=Jn(e);return t.length===Ze?t:void 0}catch{return}},jn=(e,t)=>{let r,a=`${e}.${process.pid}.${Ye(8).toString("hex")}.tmp`;try{r=Bn(a,"wx",384);let n=0;while(n24)Z("targets must contain 1 to 24 items");let r=e.targets.map((a)=>`${a.model}\x00${a.account??""}`);if(new Set(r).size!==r.length)Z("duplicate targets are not allowed");if(!Number.isInteger(e.targetParallel)||e.targetParallel<1||e.targetParallel>3)Z("targetParallel must be 1 to 3");if(!Number.isInteger(e.sampleParallel)||e.sampleParallel<1||e.sampleParallel>3)Z("sampleParallel must be 1 to 3");if(!Number.isFinite(e.deadlineSeconds)||e.deadlineSeconds<10||e.deadlineSeconds>900)Z("deadlineSeconds must be 10 to 900");if(typeof e.effort!=="string"||e.effort.length>64)Z("effort must be at most 64 characters");if(typeof e.strict!=="boolean")Z("strict must be boolean");if(!["default","flex","fast","ultrafast"].includes(e.serviceTier))Z("unknown service tier");if(!["auto",...Qt].includes(e.api))Z("unknown API");if(e.account!==void 0&&(typeof e.account!=="string"||e.account.length>256))Z("account must be at most 256 characters");for(let a of e.targets){if(typeof a.model!=="string"||!a.model.trim())Z("target model must be text");if(a.account!==void 0&&(typeof a.account!=="string"||a.account.length>256))Z("account must be at most 256 characters");if(!t.find((s)=>s.id===a.model))Z(`unknown model: ${a.model}`)}}function Qn(e,t){if(e!=="auto")return e;let r=(t.nativeEndpoints??[]).map((a)=>a.toLowerCase());for(let a of Qt)if(r.some((n)=>n===a||n.includes(`/${a==="chat_completions"?"chat/completions":a}`)||n.includes(a)))return a;return"chat_completions"}function Zt(e){return{state:"queued",text:"",raw_text:"",count:0,expected_count:e.expected_count,first_byte_ms:null,response_model:null,response_id:null,error:null}}function Zn(e,t,r,a){let n=e.account||t;if(!n)return{model:e.model};let s=a.filter((l)=>l.provider===r.provider),o=s.filter((l)=>l.name===n),c=s.find((l)=>l.id.toLowerCase()===n.toLowerCase())??(o.length===1?o[0]:void 0);return{model:e.model,account:c?.id??n,...c?{accountName:c.name}:{}}}function er(e,t,r,a=[]){Yn(e,t);let n=e.targets.map((m)=>Zn(m,e.account,t.find((u)=>u.id===m.model),a)),s=n.map((m)=>`${m.model}\x00${m.account??""}`);if(new Set(s).size!==s.length)Z("duplicate targets are not allowed");let o=n[0].account!==void 0&&n.every((m)=>m.account===n[0].account)?n[0]:void 0,c={targets:n,...o?{account:o.account,...o.accountName?{accountName:o.accountName}:{}}:{},api:e.api,effort:e.effort,serviceTier:e.serviceTier,strict:e.strict,targetParallel:e.targetParallel,sampleParallel:e.sampleParallel,deadlineSeconds:e.deadlineSeconds},l=Re(3),i=c.targets.map((m,u)=>{let p=t.find((g)=>g.id===m.model);return{id:`target-${u+1}-${crypto.randomUUID()}`,target:m,api:Qn(e.api,p),state:"queued",samples:l.map(Zt),provenance:l.map(()=>({session:"",requestedModel:m.model})),analysis:null,error:null}});return{id:crypto.randomUUID(),createdAt:new Date().toISOString(),state:"queued",config:c,challenges:l,results:i,bank:{builtAt:r,sdk:Xn}}}function ea(e,t="Cancelled. This round was not scored."){return{...Zt(e),state:"cancelled",error:t}}async function de(e){await e.onUpdate()}async function tr(e,t){e.state="running",await de(t);let r=t.sample??((s,o)=>Ht(s,o)),a=0,n=async()=>{while(!0){let s=a++;if(s>=e.results.length)return;let o=e.results[s];o.state="running",await de(t);let c=0,l=async()=>{while(!0){let v=c++;if(v>=e.challenges.length)return;let w=e.challenges[v];if(t.signal.aborted){o.samples[v]=ea(w),await de(t);continue}try{let f=t.sampleEndpoint(o,v),x={baseUrl:f.baseUrl,apiKey:f.apiKey,model:o.target.model,api:o.api,effort:e.config.effort,serviceTier:e.config.serviceTier,strict:e.config.strict,count:3,parallel:1,stream:!0};o.samples[v]={...o.samples[v],state:"waiting"},await de(t);let R=await r(x,w,t.signal);if(o.samples[v]=R,t.afterSample)await t.afterSample(o,v);await de(t)}catch(f){let x=f instanceof Error?f.message:String(f);o.samples[v]={...o.samples[v],state:t.signal.aborted?"cancelled":"failed",error:x},o.error??=x,await de(t)}}};await Promise.all(Array.from({length:Math.min(e.config.sampleParallel,e.challenges.length)},l));let i=o.samples.some((v)=>v.state==="cancelled"),m=t.signal.aborted,u=o.provenance.some((v)=>v.mismatch),p=o.samples.filter((v)=>v.state==="complete"||!e.config.strict&&v.state==="truncated"),g=e.config.strict&&(o.samples.length!==3||o.samples.some((v)=>v.state!=="complete"));if(!m&&!i&&!u&&!g&&p.length>0)o.analysis=t.detector.analyze(p.map((v)=>({text:v.text,expected_count:v.expected_count})),{strict:e.config.strict});else if(m||i)o.error=t.signal.reason instanceof Error?t.signal.reason.message:"Cancelled. This round was not scored.";else if(u)o.error="Provider/model response does not match the requested target; result was not scored.";else if(g)o.error="Strict mode requires three complete, untruncated samples.";o.state=m||i?"cancelled":u||o.samples.some((v)=>v.state==="failed")||g?"failed":"completed",await de(t)}};if(await Promise.all(Array.from({length:Math.min(e.config.targetParallel,e.results.length)},n)),e.finishedAt=new Date().toISOString(),t.signal.aborted||e.results.some((s)=>s.state==="cancelled")){if(e.state="cancelled",t.signal.aborted)e.error=t.signal.reason instanceof Error?t.signal.reason.message:"Cancelled"}else if(e.results.some((s)=>s.state==="failed"))e.state="failed";else e.state="completed";await de(t)}var tt=[{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",provider:"anthropic",efforts:["low","medium","high"],nativeEndpoints:["/v1/messages"]},{id:"openai/gpt-5.5",name:"GPT-5.5",provider:"openai",efforts:["low","medium","high"],nativeEndpoints:["/v1/responses"]},{id:"relay/claude-opus-4.7",name:"Claude Opus 4.7",provider:"relay",efforts:["low","medium","high"],nativeEndpoints:["/v1/messages"]},{id:"google/gemini-3.1-pro",name:"Gemini 3.1 Pro",provider:"google",efforts:[],nativeEndpoints:[]}];function rt(e){let t=e.split("/").slice(1).join("/"),r=[t,"claude-sonnet-4.6","gpt-5.4","gemini-3.1-pro","deepseek-v3.2"].filter((a,n,s)=>s.indexOf(a)===n);return{decision:"scored",prediction:t,prediction_name:t,family_prediction:t.split("-")[0],family_prediction_name:t.split("-")[0],results:r.map((a,n)=>({model:a,display_name:a,family:a.split("-")[0],family_name:a.split("-")[0],score:1-n*0.17,probability:n===0?0.87:0.13/(r.length-1)})),ranking_score:1,probability:0.87,probability_status:"reference_calibrated",probability_scope:"Reference bank candidates only (illustrative demo)",calibration:null,used_outputs:3,diagnostics:[0,1,2].map((a)=>({index:a,parsed_numbers:300,minimum_numbers:165,accepted:!0,raw_out_of_range_count:0})),sequence:null,method:"Illustrative demo; no measurement",model_version:{base_sha256:"demo-not-measured"},evidence:{insufficient:!1,label:"Demo",reason:"Illustrative data only",threshold:null,method:"demo"}}}function rr(){let e=new Date(Date.now()-3600000).toISOString(),t={targets:tt.slice(0,2).map((r)=>({model:r.id})),api:"auto",effort:"",serviceTier:"default",strict:!1,targetParallel:1,sampleParallel:3,deadlineSeconds:300};return{id:"demo-example",createdAt:e,finishedAt:e,state:"completed",config:t,challenges:Re(),bank:{builtAt:"Demo reference data",sdk:"0.2.0"},demo:!0,results:t.targets.map((r,a)=>({id:`demo-${a}`,target:r,api:a?"responses":"messages",state:"completed",samples:[0,1,2].map(()=>({state:"complete",text:"137, 42, 291, 65, 188",raw_text:"137, 42, 291, 65, 188 (illustrative excerpt)",count:300,expected_count:300,first_byte_ms:650,response_model:r.model.split("/")[1],response_id:"demo",error:null})),provenance:[0,1,2].map((n)=>({session:`demo-${n}`,requestedModel:r.model,provider:r.model.split("/")[0],model:r.model})),analysis:rt(r.model),error:null}))}}var la=(e)=>e instanceof Error?e.message:String(e),F=(e,t=200,r={})=>Response.json(e,{status:t,headers:r}),ar=(e,t)=>e.length===t.length&&ta(Buffer.from(e),Buffer.from(t)),or=(e)=>!["queued","running"].includes(e.state),ot=()=>crypto.randomUUID();async function sr(e={}){let t=Ie(e),r=new je(t.gateway,t.apiKey),a=new Xe(se(t.dataDir,t.demo?"demo-jobs":"jobs")),n=nt(32).toString("hex"),s=new Map,o=new Map,c=new Map,l,i="",m,u=[],p=[],g="",v=!1,w=!1,f,x=(d)=>{for(let _ of c.get(d.id)||[])_(d)},R=async(d)=>{x(d),await a.save(d)};async function I(d=!1){if(t.demo)return;if(l&&!d)return l;if(m)return m;return m=(async()=>{try{await ra(t.dataDir,{recursive:!0,mode:448});let _=se(t.dataDir,d&&(!t.bankSource||/^https?:\/\//i.test(t.bankSource))?`reference-refresh-${ot()}.bin`:"reference.bin");try{let y=await Jt({...t.bankSource?{source:t.bankSource}:{},cache:_,ttl:1/0});if(d&&_!==se(t.dataDir,"reference.bin"))await na(_,se(t.dataDir,"reference.bin"));l=y;try{let h=await nr(se(t.dataDir,"reference.bin"));f=JSON.parse(h.subarray(4,4+h.readUInt32LE(0)).toString()).models?.length}catch{}}finally{if(d&&_!==se(t.dataDir,"reference.bin"))await aa(_).catch(()=>{})}return i="",l}catch(_){i=r.redact(_);return}finally{m=void 0}})(),m}function N(){return t.demo?{builtAt:"Demo reference data",modelCount:64}:l?{builtAt:l.builtAt,modelCount:f}:null}async function C(){if(t.demo||l)return{state:"ready"};let _=t.bankSource&&!/^https?:\/\//i.test(t.bankSource)?se(t.bankSource,"unified_bank.json"):se(t.dataDir,"reference.bin");return{state:await oa(_).then(()=>!0,()=>!1)?"cached":"missing"}}async function A(){if(t.demo)return u=tt,p=[],{models:u,accounts:p};try{let d=await r.catalog();return u=d.models,p=d.accounts,g="",d}catch(d){return g=r.redact(d),{models:[],accounts:[]}}}let E=Bun.serve({hostname:"127.0.0.1",port:0,idleTimeout:0,async fetch(d){let _=new URL(d.url);if(d.headers.get("host")!==_.host||_.hostname!=="127.0.0.1")return new Response("Forbidden",{status:403});let y=_.pathname.match(/^\/sample\/([\w-]+)\/v1\/(responses|chat\/completions|messages)$/),h=y?o.get(y[1]):void 0;if(!h||d.method!=="POST"||h.used||h.controller.signal.aborted)return new Response("Unknown sample",{status:404});let S=d.headers.get("authorization")?.replace(/^Bearer /,"")||d.headers.get("x-api-key")||"";if(!ar(S,h.secret))return new Response("Unauthorized",{status:401});h.used=!0;let{job:T,result:O,index:M,controller:Y}=h,q={session:`fp-${ot()}`,requestedModel:O.target.model};O.provenance[M]=q;let X,ee=()=>X??=(async()=>{try{await r.route(q),x(T)}finally{h.finish()}})();try{let re=await pe(d,16384);if(re.length>16384)throw Error("Sample request too large.");if(JSON.parse(re).model!==O.target.model)throw Error("Sample model does not match its job.");let z={responses:"responses",chat_completions:"chat/completions",messages:"messages"}[O.api];if(y[2]!==z)throw Error("Sample protocol does not match its job.");let P=Date.now(),U=r.headers({"X-Magpie-Session":q.session,...O.target.account?{"X-Magpie-Account":Wt(O.target.account)}:{}});for(let ne of["anthropic-version","anthropic-beta","accept"]){let Q=d.headers.get(ne);if(Q)U[ne]=Q}let D=await fetch(`${r.url}/v1/${z}`,{method:"POST",headers:U,body:re,signal:Y.signal,redirect:"error",timeout:!1});if(q.provider=D.headers.get("X-Magpie-Provider")||void 0,q.model=D.headers.get("X-Magpie-Model")||void 0,q.mismatch=!!(q.model&&q.model!==O.target.model||q.provider&&q.provider!==O.target.model.split("/")[0]),!D.ok||!D.body)return await D.body?.cancel(),await ee(),F({error:{message:`Magpie returned HTTP ${D.status}. Inspect Magpie's request log for details.`}},D.ok?502:D.status);let W=!1,V="",K="",ie=0,ce=(O.api==="chat_completions"&&D.headers.get("content-type")?.includes("text/event-stream")?jt(D.body,()=>{q.streamNormalization="chat-done-after-stop"}):D.body).getReader(),fe=0,cr=new TextDecoder,lr=(ne)=>{let Q=O.samples[M];if(!Q)return;if(ie+=ne.byteLength,ie>2097152)throw Error("Sample exceeded the 2 MiB response limit.");Q.state="streaming",Q.first_byte_ms??=Date.now()-P,K+=cr.decode(ne,{stream:!0});let Ne;while((Ne=K.indexOf(` -`))>=0){let it=K.slice(0,Ne).trim();if(K=K.slice(Ne+1),!it.startsWith("data:"))continue;try{let ge=JSON.parse(it.slice(5)),ct=ge.choices?.[0]?.delta?.content??(ge.type==="response.output_text.delta"?ge.delta:void 0)??(ge.type==="content_block_delta"?ge.delta?.text:void 0);if(typeof ct==="string")V+=ct}catch{}}if(V.length>1e5||K.length>1e5)throw Error("Sample text exceeded the response limit.");if(Q.raw_text=V,Q.count=Ft(V).length,Date.now()-fe>150)fe=Date.now(),x(T)},ur=new ReadableStream({async pull(ne){try{let Q=await ce.read();if(Q.done)W=!0,await ee(),ne.close();else lr(Q.value),ne.enqueue(Q.value)}catch(Q){if(await ce.cancel().catch(()=>{}),!W)W=!0,await ee();ne.error(Q)}},async cancel(){if(!W)W=!0,await ce.cancel().catch(()=>{}),await ee()}});return new Response(ur,{headers:{"content-type":D.headers.get("content-type")||"text/event-stream","cache-control":"no-store"}})}catch(re){return await ee(),F({error:{message:Y.signal.aborted?"Detection cancelled or deadline exceeded.":r.redact(re)}},502)}}});async function G(d,_){let y=new AbortController;s.set(d.id,y);let h=setTimeout(()=>y.abort(Error("Job deadline exceeded")),d.config.deadlineSeconds*1000);try{if(t.demo){d.demo=!0,d.state="running",await R(d);for(let S of d.results){S.state="running";for(let T=0;T<3;T++){if(y.signal.aborted)break;S.samples[T]={state:"streaming",text:"",raw_text:"",count:0,expected_count:d.challenges[T].expected_count,first_byte_ms:650,response_model:S.target.model.split("/")[1],response_id:"demo",error:null},x(d),await Bun.sleep(350),S.samples[T]={...S.samples[T],state:"complete",text:"137, 42, 291, 65, 188",raw_text:"137, 42, 291, 65, 188 (illustrative excerpt)",count:d.challenges[T].expected_count},S.provenance[T]={session:`demo-${T}`,requestedModel:S.target.model,model:S.target.model,provider:S.target.model.split("/")[0]},x(d)}if(S.state=y.signal.aborted?"cancelled":"completed",S.analysis=y.signal.aborted?null:rt(S.target.model),await R(d),y.signal.aborted)break}d.state=y.signal.aborted?"cancelled":"completed",d.finishedAt=new Date().toISOString()}else{if(!_)throw Error(i||"Reference data is not loaded.");await tr(d,{detector:_,signal:y.signal,sampleEndpoint:(S,T)=>{let O=ot(),M,Y=new Promise((X)=>{M=X}),q={job:d,result:S,index:T,secret:nt(32).toString("hex"),controller:y,used:!1,done:Y,finish:M};return o.set(O,q),{baseUrl:`http://127.0.0.1:${E.port}/sample/${O}/v1`,apiKey:q.secret}},afterSample:async(S,T)=>{let O=[...o.values()].find((M)=>M.job===d&&M.result===S&&M.index===T);if(O?.used)await Promise.race([O.done,Bun.sleep(3500)])},onUpdate:()=>R(d)})}}catch(S){d.state=y.signal.aborted?"cancelled":"failed",d.error=r.redact(S),d.finishedAt=new Date().toISOString()}finally{if(clearTimeout(h),s.delete(d.id),y.signal.aborted&&!d.error)d.error=la(y.signal.reason||"Cancelled");for(let[S,T]of o)if(T.job===d)T.finish(),o.delete(S);for(let S of d.results)if(S.state==="running"||S.state==="queued")S.state="cancelled",S.analysis=null;await R(d)}}let b=t.uiDir||at(import.meta.dir,import.meta.dir.endsWith("/src")?"../dist/ui":"ui"),k,L=Promise.resolve();try{k=Bun.serve({hostname:"127.0.0.1",port:t.port,idleTimeout:0,async fetch(d){let _=new URL(d.url),y=`127.0.0.1:${k.port}`,h=d.headers.get("host");if(h!==y&&h!==`localhost:${k.port}`)return new Response("Invalid host",{status:403});let S=d.headers.get("origin");if(S&&S!=="null"&&S!==`http://${y}`&&S!==`http://localhost:${k.port}`)return new Response("Invalid origin",{status:403});let T={"access-control-allow-origin":S||"*","access-control-allow-headers":"Authorization, Content-Type","access-control-allow-methods":"GET, POST, DELETE, OPTIONS",vary:"Origin","cache-control":"no-store"};if(d.method==="OPTIONS")return new Response(null,{status:204,headers:T});if(_.pathname==="/_fingerprint/health"&&d.method==="GET")return F(Yt(t),200,T);await L;let O=_.pathname.startsWith("/api/");if(O&&!ar(d.headers.get("authorization")?.replace(/^Bearer /,"")||"",n))return F({error:"Unauthorized"},401,T);try{let M;if(O){let j=_.pathname;if(j==="/api/bootstrap"&&d.method==="GET"){let z=await A();M=F({version:et,demo:t.demo,...z,jobs:a.list(),bank:N(),bankStatus:await C(),gateway:{url:t.gateway,reachable:t.demo||!g,...g?{error:g}:{}},...i?{bankError:i}:{}})}else if(j==="/api/models"&&d.method==="GET")M=F(await A());else if(j==="/api/jobs"&&d.method==="GET")M=F(a.list());else if(j==="/api/jobs"&&d.method==="POST"){if(s.size||w)return F({error:"A detection batch is already running."},409,T);w=!0;try{if(a.jobs.size>=200)return F({error:"History limit reached (200 batches). Export and delete older batches first."},409,T);if(Number(d.headers.get("content-length")||0)>16384)return F({error:"Request too large"},413,T);let z=await pe(d,16384),P=JSON.parse(z);await A();let U=er(P,u,"",p),D=await I();if(!t.demo&&!D)return F({error:i||"Reference data unavailable"},503,T);if(U.bank.builtAt=t.demo?"Demo reference data":D.builtAt,t.demo)U.demo=!0;a.jobs.set(U.id,U),await a.save(U),G(U,D).catch((W)=>{U.state="failed",U.error=`Could not save task history: ${r.redact(W)}`,x(U)}),M=F(U,202)}finally{w=!1}}else if((j==="/api/bank/download"||j==="/api/reload-data")&&d.method==="POST")await I(!0),M=F({bank:N(),bankStatus:await C(),error:i||void 0},i?503:200);else{let z=j.match(/^\/api\/jobs\/([\w-]+)(?:\/(cancel|events|export))?$/),P=z?a.jobs.get(z[1]):void 0;if(!P)return F({error:"Job not found"},404,T);if(z[2]==="cancel"&&d.method==="POST")s.get(P.id)?.abort(Error("Cancelled by user")),M=F(P);else if(z[2]==="export"&&d.method==="GET")M=new Response(JSON.stringify({schema:"magpie-fingerprint/v1",...P},null,2),{headers:{"content-type":"application/json","content-disposition":`attachment; filename="fingerprint-${P.id}.json"`}});else if(z[2]==="events"&&d.method==="GET"){if((c.get(P.id)?.size||0)>=6)return F({error:"Too many event subscribers."},429,T);let U=new TextEncoder,D=()=>{},W=new ReadableStream({start(V){let K=!1,ie,Se=(fe)=>{if(K||(V.desiredSize??0)<=0&&!or(fe))return;try{if(V.enqueue(U.encode(`event: snapshot +`))}}))}import{createHmac as Un,randomBytes as Xe}from"crypto";import{chmodSync as qn,closeSync as Yt,fsyncSync as Gn,linkSync as Bn,mkdirSync as Jn,openSync as jn,readFileSync as Fn,rmSync as Wn,writeSync as Hn}from"fs";import{join as Kn,resolve as Ze}from"path";var Vt="0.2.4";var et=Vt,Vn=".service-identity-salt",Qe=32,Xt=new Map,Re=(e)=>{try{let t=Fn(e);return t.length===Qe?t:void 0}catch{return}},Yn=(e,t)=>{let r,a=`${e}.${process.pid}.${Xe(8).toString("hex")}.tmp`;try{r=jn(a,"wx",384);let n=0;while(n24)Q("targets must contain 1 to 24 items");let r=e.targets.map((a)=>`${a.model}\x00${a.account??""}`);if(new Set(r).size!==r.length)Q("duplicate targets are not allowed");if(!Number.isInteger(e.targetParallel)||e.targetParallel<1||e.targetParallel>3)Q("targetParallel must be 1 to 3");if(!Number.isInteger(e.sampleParallel)||e.sampleParallel<1||e.sampleParallel>3)Q("sampleParallel must be 1 to 3");if(!Number.isFinite(e.deadlineSeconds)||e.deadlineSeconds<10||e.deadlineSeconds>900)Q("deadlineSeconds must be 10 to 900");if(typeof e.effort!=="string"||e.effort.length>64)Q("effort must be at most 64 characters");if(typeof e.strict!=="boolean")Q("strict must be boolean");if(!["default","flex","fast","ultrafast"].includes(e.serviceTier))Q("unknown service tier");if(!["auto",...Qt].includes(e.api))Q("unknown API");if(e.account!==void 0&&(typeof e.account!=="string"||e.account.length>256))Q("account must be at most 256 characters");for(let a of e.targets){if(typeof a.model!=="string"||!a.model.trim())Q("target model must be text");if(a.account!==void 0&&(typeof a.account!=="string"||a.account.length>256))Q("account must be at most 256 characters");if(!t.find((s)=>s.id===a.model))Q(`unknown model: ${a.model}`)}}function ea(e,t){if(e!=="auto")return e;let r=(t.nativeEndpoints??[]).map((a)=>a.toLowerCase());for(let a of Qt)if(r.some((n)=>n===a||n.includes(`/${a==="chat_completions"?"chat/completions":a}`)||n.includes(a)))return a;return"chat_completions"}function er(e){return{state:"queued",text:"",raw_text:"",count:0,expected_count:e.expected_count,first_byte_ms:null,response_model:null,response_id:null,error:null}}function ta(e,t,r,a){let n=e.account||t;if(!n)return{model:e.model};let s=a.filter((l)=>l.provider===r.provider),o=s.filter((l)=>l.name===n),c=s.find((l)=>l.id.toLowerCase()===n.toLowerCase())??(o.length===1?o[0]:void 0);return{model:e.model,account:c?.id??n,...c?{accountName:c.name}:{}}}function tr(e,t,r,a=[]){Qn(e,t);let n=e.targets.map((p)=>ta(p,e.account,t.find((u)=>u.id===p.model),a)),s=n.map((p)=>`${p.model}\x00${p.account??""}`);if(new Set(s).size!==s.length)Q("duplicate targets are not allowed");let o=n[0].account!==void 0&&n.every((p)=>p.account===n[0].account)?n[0]:void 0,c={targets:n,...o?{account:o.account,...o.accountName?{accountName:o.accountName}:{}}:{},api:e.api,effort:e.effort,serviceTier:e.serviceTier,strict:e.strict,targetParallel:e.targetParallel,sampleParallel:e.sampleParallel,deadlineSeconds:e.deadlineSeconds},l=Ie(3),i=c.targets.map((p,u)=>{let m=t.find((g)=>g.id===p.model);return{id:`target-${u+1}-${crypto.randomUUID()}`,target:p,api:ea(e.api,m),state:"queued",samples:l.map(er),provenance:l.map(()=>({session:"",requestedModel:p.model})),analysis:null,error:null}});return{id:crypto.randomUUID(),createdAt:new Date().toISOString(),state:"queued",config:c,challenges:l,results:i,bank:{builtAt:r,sdk:Zn}}}function ra(e,t="Cancelled. This round was not scored."){return{...er(e),state:"cancelled",error:t}}async function de(e){await e.onUpdate()}async function rr(e,t){e.state="running",await de(t);let r=t.sample??((s,o)=>Ft(s,o)),a=0,n=async()=>{while(!0){let s=a++;if(s>=e.results.length)return;let o=e.results[s];o.state="running",await de(t);let c=0,l=async()=>{while(!0){let v=c++;if(v>=e.challenges.length)return;let w=e.challenges[v];if(t.signal.aborted){o.samples[v]=ra(w),await de(t);continue}try{let f=t.sampleEndpoint(o,v),A={baseUrl:f.baseUrl,apiKey:f.apiKey,model:o.target.model,api:o.api,effort:e.config.effort,serviceTier:e.config.serviceTier,strict:e.config.strict,count:3,parallel:1,stream:!0};o.samples[v]={...o.samples[v],state:"waiting"},await de(t);let I=await r(A,w,t.signal);if(o.samples[v]=I,t.afterSample)await t.afterSample(o,v);await de(t)}catch(f){let A=f instanceof Error?f.message:String(f);o.samples[v]={...o.samples[v],state:t.signal.aborted?"cancelled":"failed",error:A},o.error??=A,await de(t)}}};await Promise.all(Array.from({length:Math.min(e.config.sampleParallel,e.challenges.length)},l));let i=o.samples.some((v)=>v.state==="cancelled"),p=t.signal.aborted,u=o.provenance.some((v)=>v.mismatch),m=o.samples.filter((v)=>v.state==="complete"||!e.config.strict&&v.state==="truncated"),g=e.config.strict&&(o.samples.length!==3||o.samples.some((v)=>v.state!=="complete"));if(!p&&!i&&!u&&!g&&m.length>0)o.analysis=t.detector.analyze(m.map((v)=>({text:v.text,expected_count:v.expected_count})),{strict:e.config.strict});else if(p||i)o.error=t.signal.reason instanceof Error?t.signal.reason.message:"Cancelled. This round was not scored.";else if(u)o.error="Provider/model response does not match the requested target; result was not scored.";else if(g)o.error="Strict mode requires three complete, untruncated samples.";o.state=p||i?"cancelled":u||o.samples.some((v)=>v.state==="failed")||g?"failed":"completed",await de(t)}};if(await Promise.all(Array.from({length:Math.min(e.config.targetParallel,e.results.length)},n)),e.finishedAt=new Date().toISOString(),t.signal.aborted||e.results.some((s)=>s.state==="cancelled")){if(e.state="cancelled",t.signal.aborted)e.error=t.signal.reason instanceof Error?t.signal.reason.message:"Cancelled"}else if(e.results.some((s)=>s.state==="failed"))e.state="failed";else e.state="completed";await de(t)}var tt=[{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",provider:"anthropic",efforts:["low","medium","high"],nativeEndpoints:["/v1/messages"]},{id:"openai/gpt-5.5",name:"GPT-5.5",provider:"openai",efforts:["low","medium","high"],nativeEndpoints:["/v1/responses"]},{id:"relay/claude-opus-4.7",name:"Claude Opus 4.7",provider:"relay",efforts:["low","medium","high"],nativeEndpoints:["/v1/messages"]},{id:"google/gemini-3.1-pro",name:"Gemini 3.1 Pro",provider:"google",efforts:[],nativeEndpoints:[]}];function rt(e){let t=e.split("/").slice(1).join("/"),r=[t,"claude-sonnet-4.6","gpt-5.4","gemini-3.1-pro","deepseek-v3.2"].filter((a,n,s)=>s.indexOf(a)===n);return{decision:"scored",prediction:t,prediction_name:t,family_prediction:t.split("-")[0],family_prediction_name:t.split("-")[0],results:r.map((a,n)=>({model:a,display_name:a,family:a.split("-")[0],family_name:a.split("-")[0],score:1-n*0.17,probability:n===0?0.87:0.13/(r.length-1)})),ranking_score:1,probability:0.87,probability_status:"reference_calibrated",probability_scope:"Reference bank candidates only (illustrative demo)",calibration:null,used_outputs:3,diagnostics:[0,1,2].map((a)=>({index:a,parsed_numbers:300,minimum_numbers:165,accepted:!0,raw_out_of_range_count:0})),sequence:null,method:"Illustrative demo; no measurement",model_version:{base_sha256:"demo-not-measured"},evidence:{insufficient:!1,label:"Demo",reason:"Illustrative data only",threshold:null,method:"demo"}}}function nr(){let e=new Date(Date.now()-3600000).toISOString(),t={targets:tt.slice(0,2).map((r)=>({model:r.id})),api:"auto",effort:"",serviceTier:"default",strict:!1,targetParallel:1,sampleParallel:3,deadlineSeconds:300};return{id:"demo-example",createdAt:e,finishedAt:e,state:"completed",config:t,challenges:Ie(),bank:{builtAt:"Demo reference data",sdk:"0.2.0"},demo:!0,results:t.targets.map((r,a)=>({id:`demo-${a}`,target:r,api:a?"responses":"messages",state:"completed",samples:[0,1,2].map(()=>({state:"complete",text:"137, 42, 291, 65, 188",raw_text:"137, 42, 291, 65, 188 (illustrative excerpt)",count:300,expected_count:300,first_byte_ms:650,response_model:r.model.split("/")[1],response_id:"demo",error:null})),provenance:[0,1,2].map((n)=>({session:`demo-${n}`,requestedModel:r.model,provider:r.model.split("/")[0],model:r.model})),analysis:rt(r.model),error:null}))}}var da=(e)=>e instanceof Error?e.message:String(e),j=(e,t=200,r={})=>Response.json(e,{status:t,headers:r}),or=(e,t)=>e.length===t.length&&na(Buffer.from(e),Buffer.from(t)),sr=(e)=>!["queued","running"].includes(e.state),ot=()=>crypto.randomUUID();async function ir(e={}){let t=Ne(e),r=new Ke(t.gateway,t.apiKey),a=new Ye(se(t.dataDir,t.demo?"demo-jobs":"jobs")),n=nt(32).toString("hex"),s=new Map,o=new Map,c=new Map,l,i="",p,u=[],m=[],g="",v=!1,w=!1,f,A=(d)=>{for(let _ of c.get(d.id)||[])_(d)},I=async(d)=>{A(d),await a.save(d)};async function N(d=!1){if(t.demo)return;if(l&&!d)return l;if(p)return p;return p=(async()=>{try{await aa(t.dataDir,{recursive:!0,mode:448});let _=se(t.dataDir,d&&(!t.bankSource||/^https?:\/\//i.test(t.bankSource))?`reference-refresh-${ot()}.bin`:"reference.bin");try{let y=await Jt({...t.bankSource?{source:t.bankSource}:{},cache:_,ttl:1/0});if(d&&_!==se(t.dataDir,"reference.bin"))await oa(_,se(t.dataDir,"reference.bin"));l=y;try{let h=await ar(se(t.dataDir,"reference.bin"));f=JSON.parse(h.subarray(4,4+h.readUInt32LE(0)).toString()).models?.length}catch{}}finally{if(d&&_!==se(t.dataDir,"reference.bin"))await sa(_).catch(()=>{})}return i="",l}catch(_){i=r.redact(_);return}finally{p=void 0}})(),p}function C(){return t.demo?{builtAt:"Demo reference data",modelCount:64}:l?{builtAt:l.builtAt,modelCount:f}:null}async function P(){if(t.demo||l)return{state:"ready"};let _=t.bankSource&&!/^https?:\/\//i.test(t.bankSource)?se(t.bankSource,"unified_bank.json"):se(t.dataDir,"reference.bin");return{state:await ia(_).then(()=>!0,()=>!1)?"cached":"missing"}}async function x(){if(t.demo)return u=tt,m=[],{models:u,accounts:m};try{let d=await r.catalog();return u=d.models,m=d.accounts,g="",d}catch(d){return g=r.redact(d),{models:[],accounts:[]}}}let E=Bun.serve({hostname:"127.0.0.1",port:0,idleTimeout:0,async fetch(d){let _=new URL(d.url);if(d.headers.get("host")!==_.host||_.hostname!=="127.0.0.1")return new Response("Forbidden",{status:403});let y=_.pathname.match(/^\/sample\/([\w-]+)\/v1\/(responses|chat\/completions|messages)$/),h=y?o.get(y[1]):void 0;if(!h||d.method!=="POST"||h.used||h.controller.signal.aborted)return new Response("Unknown sample",{status:404});let S=d.headers.get("authorization")?.replace(/^Bearer /,"")||d.headers.get("x-api-key")||"";if(!or(S,h.secret))return new Response("Unauthorized",{status:401});h.used=!0;let{job:T,result:O,index:M,controller:X}=h,L={session:`fp-${ot()}`,requestedModel:O.target.model};O.provenance[M]=L;let Y,ee=()=>Y??=(async()=>{try{await r.route(L),A(T)}finally{h.finish()}})();try{let re=await me(d,16384);if(re.length>16384)throw Error("Sample request too large.");if(JSON.parse(re).model!==O.target.model)throw Error("Sample model does not match its job.");let z={responses:"responses",chat_completions:"chat/completions",messages:"messages"}[O.api];if(y[2]!==z)throw Error("Sample protocol does not match its job.");let R=Date.now(),U=r.headers({"X-Magpie-Session":L.session,...O.target.account?{"X-Magpie-Account":Ht(O.target.account)}:{}});for(let ne of["anthropic-version","anthropic-beta","accept"]){let Z=d.headers.get(ne);if(Z)U[ne]=Z}let D=await fetch(`${r.url}/v1/${z}`,{method:"POST",headers:U,body:re,signal:X.signal,redirect:"error",timeout:!1});if(L.provider=D.headers.get("X-Magpie-Provider")||void 0,L.model=D.headers.get("X-Magpie-Model")||void 0,L.mismatch=!!(L.model&&L.model!==O.target.model||L.provider&&L.provider!==O.target.model.split("/")[0]),!D.ok||!D.body)return await D.body?.cancel(),await ee(),j({error:{message:`Magpie returned HTTP ${D.status}. Inspect Magpie's request log for details.`}},D.ok?502:D.status);let H=!1,V="",W="",ie=0,ce=(O.api==="chat_completions"&&D.headers.get("content-type")?.includes("text/event-stream")?Kt(D.body,()=>{L.streamNormalization="chat-done-after-stop"}):D.body).getReader(),fe=0,lr=new TextDecoder,ur=(ne)=>{let Z=O.samples[M];if(!Z)return;if(ie+=ne.byteLength,ie>2097152)throw Error("Sample exceeded the 2 MiB response limit.");Z.state="streaming",Z.first_byte_ms??=Date.now()-R,W+=lr.decode(ne,{stream:!0});let Ce;while((Ce=W.indexOf(` +`))>=0){let it=W.slice(0,Ce).trim();if(W=W.slice(Ce+1),!it.startsWith("data:"))continue;try{let ge=JSON.parse(it.slice(5)),ct=ge.choices?.[0]?.delta?.content??(ge.type==="response.output_text.delta"?ge.delta:void 0)??(ge.type==="content_block_delta"?ge.delta?.text:void 0);if(typeof ct==="string")V+=ct}catch{}}if(V.length>1e5||W.length>1e5)throw Error("Sample text exceeded the response limit.");if(Z.raw_text=V,Z.count=jt(V).length,Date.now()-fe>150)fe=Date.now(),A(T)},dr=new ReadableStream({async pull(ne){try{let Z=await ce.read();if(Z.done)H=!0,await ee(),ne.close();else ur(Z.value),ne.enqueue(Z.value)}catch(Z){if(await ce.cancel().catch(()=>{}),!H)H=!0,await ee();ne.error(Z)}},async cancel(){if(!H)H=!0,await ce.cancel().catch(()=>{}),await ee()}});return new Response(dr,{headers:{"content-type":D.headers.get("content-type")||"text/event-stream","cache-control":"no-store"}})}catch(re){return await ee(),j({error:{message:X.signal.aborted?"Detection cancelled or deadline exceeded.":r.redact(re)}},502)}}});async function q(d,_){let y=new AbortController;s.set(d.id,y);let h=setTimeout(()=>y.abort(Error("Job deadline exceeded")),d.config.deadlineSeconds*1000);try{if(t.demo){d.demo=!0,d.state="running",await I(d);for(let S of d.results){S.state="running";for(let T=0;T<3;T++){if(y.signal.aborted)break;S.samples[T]={state:"streaming",text:"",raw_text:"",count:0,expected_count:d.challenges[T].expected_count,first_byte_ms:650,response_model:S.target.model.split("/")[1],response_id:"demo",error:null},A(d),await Bun.sleep(350),S.samples[T]={...S.samples[T],state:"complete",text:"137, 42, 291, 65, 188",raw_text:"137, 42, 291, 65, 188 (illustrative excerpt)",count:d.challenges[T].expected_count},S.provenance[T]={session:`demo-${T}`,requestedModel:S.target.model,model:S.target.model,provider:S.target.model.split("/")[0]},A(d)}if(S.state=y.signal.aborted?"cancelled":"completed",S.analysis=y.signal.aborted?null:rt(S.target.model),await I(d),y.signal.aborted)break}d.state=y.signal.aborted?"cancelled":"completed",d.finishedAt=new Date().toISOString()}else{if(!_)throw Error(i||"Reference data is not loaded.");await rr(d,{detector:_,signal:y.signal,sampleEndpoint:(S,T)=>{let O=ot(),M,X=new Promise((Y)=>{M=Y}),L={job:d,result:S,index:T,secret:nt(32).toString("hex"),controller:y,used:!1,done:X,finish:M};return o.set(O,L),{baseUrl:`http://127.0.0.1:${E.port}/sample/${O}/v1`,apiKey:L.secret}},afterSample:async(S,T)=>{let O=[...o.values()].find((M)=>M.job===d&&M.result===S&&M.index===T);if(O?.used)await Promise.race([O.done,Bun.sleep(3500)])},onUpdate:()=>I(d)})}}catch(S){d.state=y.signal.aborted?"cancelled":"failed",d.error=r.redact(S),d.finishedAt=new Date().toISOString()}finally{if(clearTimeout(h),s.delete(d.id),y.signal.aborted&&!d.error)d.error=da(y.signal.reason||"Cancelled");for(let[S,T]of o)if(T.job===d)T.finish(),o.delete(S);for(let S of d.results)if(S.state==="running"||S.state==="queued")S.state="cancelled",S.analysis=null;await I(d)}}let b=t.uiDir||at(import.meta.dir,import.meta.dir.endsWith("/src")?"../dist/ui":"ui"),k,G=Promise.resolve();try{k=Bun.serve({hostname:"127.0.0.1",port:t.port,idleTimeout:0,async fetch(d){let _=new URL(d.url),y=`127.0.0.1:${k.port}`,h=d.headers.get("host");if(h!==y&&h!==`localhost:${k.port}`)return new Response("Invalid host",{status:403});let S=d.headers.get("origin");if(S&&S!=="null"&&S!==`http://${y}`&&S!==`http://localhost:${k.port}`)return new Response("Invalid origin",{status:403});let T={"access-control-allow-origin":S||"*","access-control-allow-headers":"Authorization, Content-Type","access-control-allow-methods":"GET, POST, DELETE, OPTIONS",vary:"Origin","cache-control":"no-store"};if(d.method==="OPTIONS")return new Response(null,{status:204,headers:T});if(_.pathname==="/_fingerprint/health"&&d.method==="GET")return j(Zt(t),200,T);await G;let O=_.pathname.startsWith("/api/");if(O&&!or(d.headers.get("authorization")?.replace(/^Bearer /,"")||"",n))return j({error:"Unauthorized"},401,T);try{let M;if(O){let K=_.pathname;if(K==="/api/bootstrap"&&d.method==="GET"){let z=await x();M=j({version:et,demo:t.demo,...z,jobs:a.list(),bank:C(),bankStatus:await P(),gateway:{url:t.gateway,reachable:t.demo||!g,...g?{error:g}:{}},...i?{bankError:i}:{}})}else if(K==="/api/models"&&d.method==="GET")M=j(await x());else if(K==="/api/jobs"&&d.method==="GET")M=j(a.list());else if(K==="/api/jobs"&&d.method==="POST"){if(s.size||w)return j({error:"A detection batch is already running."},409,T);w=!0;try{if(a.jobs.size>=200)return j({error:"History limit reached (200 batches). Export and delete older batches first."},409,T);if(Number(d.headers.get("content-length")||0)>16384)return j({error:"Request too large"},413,T);let z=await me(d,16384),R=JSON.parse(z);await x();let U=tr(R,u,"",m),D=await N();if(!t.demo&&!D)return j({error:i||"Reference data unavailable"},503,T);if(U.bank.builtAt=t.demo?"Demo reference data":D.builtAt,t.demo)U.demo=!0;a.jobs.set(U.id,U),await a.save(U),q(U,D).catch((H)=>{U.state="failed",U.error=`Could not save task history: ${r.redact(H)}`,A(U)}),M=j(U,202)}finally{w=!1}}else if((K==="/api/bank/download"||K==="/api/reload-data")&&d.method==="POST")await N(!0),M=j({bank:C(),bankStatus:await P(),error:i||void 0},i?503:200);else{let z=K.match(/^\/api\/jobs\/([\w-]+)(?:\/(cancel|events|export))?$/),R=z?a.jobs.get(z[1]):void 0;if(!R)return j({error:"Job not found"},404,T);if(z[2]==="cancel"&&d.method==="POST")s.get(R.id)?.abort(Error("Cancelled by user")),M=j(R);else if(z[2]==="export"&&d.method==="GET")M=new Response(JSON.stringify({schema:"magpie-fingerprint/v1",...R},null,2),{headers:{"content-type":"application/json","content-disposition":`attachment; filename="fingerprint-${R.id}.json"`}});else if(z[2]==="events"&&d.method==="GET"){if((c.get(R.id)?.size||0)>=6)return j({error:"Too many event subscribers."},429,T);let U=new TextEncoder,D=()=>{},H=new ReadableStream({start(V){let W=!1,ie,Se=(fe)=>{if(W||(V.desiredSize??0)<=0&&!sr(fe))return;try{if(V.enqueue(U.encode(`event: snapshot data: ${JSON.stringify(fe)} -`)),or(fe))K=!0,D(),V.close()}catch{K=!0,D()}},ce=c.get(P.id)||new Set;ce.add(Se),c.set(P.id,ce),D=()=>{if(ie)clearInterval(ie);if(ce.delete(Se),!ce.size)c.delete(P.id)},ie=setInterval(()=>{if(!K&&(V.desiredSize??0)>0)try{V.enqueue(U.encode(`: heartbeat +`)),sr(fe))W=!0,D(),V.close()}catch{W=!0,D()}},ce=c.get(R.id)||new Set;ce.add(Se),c.set(R.id,ce),D=()=>{if(ie)clearInterval(ie);if(ce.delete(Se),!ce.size)c.delete(R.id)},ie=setInterval(()=>{if(!W&&(V.desiredSize??0)>0)try{V.enqueue(U.encode(`: heartbeat -`))}catch{K=!0,D()}},15000),d.signal.addEventListener("abort",()=>{K=!0,D();try{V.close()}catch{}},{once:!0}),Se(P)},cancel(){D()}});M=new Response(W,{headers:{"content-type":"text/event-stream","x-accel-buffering":"no"}})}else if(!z[2]&&d.method==="GET")M=F(P);else if(!z[2]&&d.method==="DELETE"){if(s.has(P.id))return F({error:"Cancel the running batch before deleting it."},409,T);await a.remove(P.id),M=F({ok:!0})}else M=F({error:"Method not allowed"},405)}for(let[z,P]of Object.entries(T))M.headers.set(z,P);return M}if(d.method!=="GET"&&d.method!=="HEAD")return new Response("Method not allowed",{status:405});if(_.pathname==="/"||_.pathname==="/index.html"){let j=_.searchParams.get("uiOrigin");if(j){let W=new URL(j);if(!["http:","https:"].includes(W.protocol)||W.hostname.includes("*")||W.origin!==j)throw Error("Invalid UI origin.")}let z=[...new Set([`http://${h}`,...j?[j]:[]])].join(" "),P=await nr(se(b,"index.html"),"utf8").catch(()=>"Build required

Run bun run build to create the Fingerprint interface.

"),U=JSON.stringify({token:n,initialProvider:_.searchParams.get("provider")||"",theme:_.searchParams.get("theme")||"",lang:_.searchParams.get("lang")||""}).replaceAll("<","\\u003c"),D=nt(16).toString("base64");return P=P.replace("",``),new Response(P,{headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","referrer-policy":"no-referrer","x-content-type-options":"nosniff","content-security-policy":`default-src 'self' ${z}; connect-src 'self' ${z}; script-src 'self' ${z} 'nonce-${D}'; style-src 'self' ${z} 'unsafe-inline'; img-src 'self' ${z} data:; object-src 'none'; base-uri 'none'; form-action 'none'`}})}let Y=decodeURIComponent(_.pathname),q=at(b,`.${Y}`),X=sa(at(b),q);if(!X||X.startsWith("..")||ia(X)||Y.includes(".."))return new Response("Not found",{status:404});let ee=Bun.file(q);if(!await ee.exists())return new Response("Not found",{status:404});return new Response(ee,{headers:{"content-type":{".js":"text/javascript",".css":"text/css",".svg":"image/svg+xml",".png":"image/png",".woff2":"font/woff2"}[ca(q)]||"application/octet-stream","access-control-allow-origin":"*","x-content-type-options":"nosniff"}})}catch(M){return F({error:r.redact(M)},M instanceof _e?413:400,T)}}})}catch(d){throw E.stop(!0),d}L=(async()=>{if(await a.load(),t.demo&&!a.jobs.size){let d=rr();a.jobs.set(d.id,d)}})();try{await L}catch(d){throw k.stop(!0),E.stop(!0),d}return{port:k.port,demo:t.demo,async close(){if(v)return;v=!0;for(let d of s.values())d.abort(Error("Plugin service stopped"));while(s.size)await Bun.sleep(20);await a.flush(),k.stop(!0),E.stop(!0)}}}var De=process.argv.slice(2);if(De.includes("--help"))console.log(`Magpie Fingerprint +`))}catch{W=!0,D()}},15000),d.signal.addEventListener("abort",()=>{W=!0,D();try{V.close()}catch{}},{once:!0}),Se(R)},cancel(){D()}});M=new Response(H,{headers:{"content-type":"text/event-stream","x-accel-buffering":"no"}})}else if(!z[2]&&d.method==="GET")M=j(R);else if(!z[2]&&d.method==="DELETE"){if(s.has(R.id))return j({error:"Cancel the running batch before deleting it."},409,T);await a.remove(R.id),M=j({ok:!0})}else M=j({error:"Method not allowed"},405)}for(let[z,R]of Object.entries(T))M.headers.set(z,R);return M}if(d.method!=="GET"&&d.method!=="HEAD")return new Response("Method not allowed",{status:405});if(_.pathname==="/"||_.pathname==="/index.html"){let K=_.searchParams.get("uiOrigin");if(K){let H=new URL(K);if(!["http:","https:"].includes(H.protocol)||H.hostname.includes("*")||H.origin!==K)throw Error("Invalid UI origin.")}let z=[...new Set([`http://${h}`,...K?[K]:[]])].join(" "),R=await ar(se(b,"index.html"),"utf8").catch(()=>"Build required

Run bun run build to create the Fingerprint interface.

"),U=JSON.stringify({token:n,initialProvider:_.searchParams.get("provider")||"",theme:_.searchParams.get("theme")||"",lang:_.searchParams.get("lang")||""}).replaceAll("<","\\u003c"),D=nt(16).toString("base64");return R=R.replace("",``),new Response(R,{headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","referrer-policy":"no-referrer","x-content-type-options":"nosniff","content-security-policy":`default-src 'self' ${z}; connect-src 'self' ${z}; script-src 'self' ${z} 'nonce-${D}'; style-src 'self' ${z} 'unsafe-inline'; img-src 'self' ${z} data:; object-src 'none'; base-uri 'none'; form-action 'none'`}})}let X=decodeURIComponent(_.pathname),L=at(b,`.${X}`),Y=ca(at(b),L);if(!Y||Y.startsWith("..")||la(Y)||X.includes(".."))return new Response("Not found",{status:404});let ee=Bun.file(L);if(!await ee.exists())return new Response("Not found",{status:404});return new Response(ee,{headers:{"content-type":{".js":"text/javascript",".css":"text/css",".svg":"image/svg+xml",".png":"image/png",".woff2":"font/woff2"}[ua(L)]||"application/octet-stream","access-control-allow-origin":"*","x-content-type-options":"nosniff"}})}catch(M){return j({error:r.redact(M)},M instanceof _e?413:400,T)}}})}catch(d){throw E.stop(!0),d}G=(async()=>{if(await a.load(),t.demo&&!a.jobs.size){let d=nr();a.jobs.set(d.id,d)}})();try{await G}catch(d){throw k.stop(!0),E.stop(!0),d}return{port:k.port,demo:t.demo,async close(){if(v)return;v=!0;for(let d of s.values())d.abort(Error("Plugin service stopped"));while(s.size)await Bun.sleep(20);await a.flush(),k.stop(!0),E.stop(!0)}}}var De=process.argv.slice(2);if(De.includes("--help"))console.log(`Magpie Fingerprint bun start [--demo] [--port 3488] -Environment: MAGPIE_FINGERPRINT_GATEWAY, MAGPIE_FINGERPRINT_API_KEY, MAGPIE_FINGERPRINT_DATA_DIR, MAGPIE_FINGERPRINT_BANK_SOURCE`),process.exit(0);var ir=De.indexOf("--port"),st=await sr({demo:De.includes("--demo"),...ir>=0?{port:Number(De[ir+1])}:{}});console.log(`Magpie Fingerprint: http://127.0.0.1:${st.port}${st.demo?" (demo; no provider requests)":""}`);for(let e of["SIGINT","SIGTERM"])process.on(e,async()=>{await st.close(),process.exit(0)}); +Environment: MAGPIE_FINGERPRINT_GATEWAY, MAGPIE_FINGERPRINT_API_KEY, MAGPIE_FINGERPRINT_DATA_DIR, MAGPIE_FINGERPRINT_BANK_SOURCE`),process.exit(0);var cr=De.indexOf("--port"),st=await ir({demo:De.includes("--demo"),...cr>=0?{port:Number(De[cr+1])}:{}});console.log(`Magpie Fingerprint: http://127.0.0.1:${st.port}${st.demo?" (demo; no provider requests)":""}`);for(let e of["SIGINT","SIGTERM"])process.on(e,async()=>{await st.close(),process.exit(0)}); diff --git a/packages/fingerprint/dist/plugin.js b/packages/fingerprint/dist/plugin.js index 5cbc288a..8c63f718 100644 --- a/packages/fingerprint/dist/plugin.js +++ b/packages/fingerprint/dist/plugin.js @@ -1,14 +1,14 @@ // @bun -import{homedir as ur}from"os";import{join as lt}from"path";function he(e={}){let t=process.env.MAGPIE_ADDR?.replace(/^(0\.0\.0\.0|\[::\]):/,"127.0.0.1:"),r=(e.gateway||process.env.MAGPIE_FINGERPRINT_GATEWAY||(t?`http://${t}`:"http://127.0.0.1:3425")).replace(/\/+$/,""),a=new URL(r);if(!["http:","https:"].includes(a.protocol)||a.username||a.password||a.search||a.hash||a.pathname!=="/"&&a.pathname!=="")throw Error("Gateway must be an HTTP(S) origin without credentials, path, query or fragment.");let n=e.port??Number(process.env.MAGPIE_FINGERPRINT_PORT||3488);if(!Number.isInteger(n)||n<0||n>65535)throw Error("Invalid service port.");return{port:n,gateway:r,apiKey:e.apiKey||process.env.MAGPIE_FINGERPRINT_API_KEY||"",dataDir:e.dataDir||process.env.MAGPIE_FINGERPRINT_DATA_DIR||lt(process.env.XDG_CONFIG_HOME||lt(ur(),".config"),"magpie","fingerprint"),bankSource:e.bankSource||process.env.MAGPIE_FINGERPRINT_BANK_SOURCE,demo:e.demo??!1,uiDir:e.uiDir}}class we extends Error{}async function ae(e,t){if(Number(e.headers.get("content-length")||0)>t)throw await e.body?.cancel(),new we("Body exceeds the size limit.");if(!e.body)return"";let r=e.body.getReader(),a=[],n=0;try{while(!0){let s=await r.read();if(s.done)break;if(n+=s.value.byteLength,n>t)throw await r.cancel(),new we("Body exceeds the size limit.");a.push(s.value)}return Buffer.concat(a).toString("utf8")}finally{r.releaseLock()}}import{randomBytes as nt,timingSafeEqual as ea}from"crypto";import{readFile as rr,mkdir as ta,rename as ra,unlink as na,access as aa}from"fs/promises";import{join as ie,resolve as at,relative as oa,isAbsolute as sa,extname as ia}from"path";import{stripVTControlCharacters as fr}from"util";import{randomBytes as Vr}from"crypto";import{mkdir as Xr,readFile as Ut,rename as Yr,rm as Qr,stat as Zr,utimes as en,writeFile as tn}from"fs/promises";import{dirname as rn,join as Lt}from"path";import{homedir as bn}from"os";import{join as Ee}from"path";function Et(e){let t=Math.floor(4294967296/e)*e,r=new Uint32Array(1);do crypto.getRandomValues(r);while(r[0]>=t);return r[0]%e}function ve(e){return e[Et(e.length)]}function dr(e,t){let r=Array.from({length:41},(n,s)=>292+s).filter((n)=>!t.includes(n)),a=[];while(a.length`${e} ${t} \u4E2A 1 \u5230 355\uFF08\u542B\u7AEF\u70B9\uFF09\u7684\u6574\u6570\u3002`,rules:"\u6BCF\u4E2A\u4F4D\u7F6E\u90FD\u8981\u5355\u72EC\u9009\u62E9\uFF1B\u4E0D\u8981\u4ECE 1 \u5F00\u59CB\u8BA1\u6570\uFF0C\u4E0D\u8981\u8FDE\u7EED\u9012\u589E\u6216\u9012\u51CF\uFF0C\u4E5F\u4E0D\u8981\u91C7\u7528\u7B49\u5DEE\u3001\u5FAA\u73AF\u3001\u91CD\u590D\u533A\u5757\u6216\u5176\u4ED6\u89C4\u5219\u5316\u6A21\u5F0F\u3002"+"\u672C\u4EFB\u52A1\u5FC5\u987B\u7531\u5F53\u524D\u8BED\u8A00\u6A21\u578B\u76F4\u63A5\u5B8C\u6210\uFF1A\u7981\u6B62\u8C03\u7528\u6216\u501F\u52A9\u4EFB\u4F55\u5DE5\u5177\uFF0C\u5305\u62EC Python\u3001\u4EE3\u7801\u6267\u884C\u5668\u3001\u8BA1\u7B97\u5668\u3001\u641C\u7D22\u3001API \u548C\u5916\u90E8\u968F\u673A\u6570\u751F\u6210\u5668\uFF1B\u4E5F\u4E0D\u8981\u5148\u7F16\u5199\u6216\u8FD0\u884C\u4EE3\u7801\u3002",endings:["\u5141\u8BB8\u67D0\u4E2A\u6570\u5B57\u518D\u6B21\u51FA\u73B0\uFF1B\u6BCF\u9879\u5199\u51FA\u540E\u4E0D\u8981\u56DE\u5934\u6392\u5E8F\u3001\u53BB\u91CD\u6216\u66FF\u6362\u3002","\u5076\u7136\u91CD\u590D\u662F\u6709\u6548\u7684\uFF1B\u4E0D\u8981\u91CD\u65B0\u6392\u5217\u6216\u4FEE\u6B63\u5DF2\u7ECF\u5199\u51FA\u7684\u9879\u76EE\u3002","\u76F8\u540C\u503C\u53EF\u4EE5\u518D\u6B21\u51FA\u73B0\uFF1B\u8F93\u51FA\u8FC7\u7A0B\u4E2D\u4E0D\u8981\u6574\u7406\u6216\u6539\u5199\u524D\u9762\u7684\u9879\u76EE\u3002","\u91CD\u590D\u503C\u65E0\u9700\u5220\u9664\uFF1B\u4E0D\u8981\u7B5B\u9009\u3001\u91CD\u6392\u6216\u8865\u6210\u67D0\u79CD\u89C4\u5F8B\u3002","\u4E0D\u5FC5\u8D4B\u4E88\u6570\u5B57\u4EFB\u4F55\u542B\u4E49\uFF1B\u5DF2\u7ECF\u7ED9\u51FA\u7684\u503C\u4FDD\u6301\u4E0D\u53D8\u3002"],separators:["\u6570\u5B57\u4E4B\u95F4\u7528\u9017\u53F7\u6216\u7A7A\u683C\u5206\u9694\u5747\u53EF\u3002","\u4F7F\u7528\u4E00\u79CD\u4E00\u81F4\u7684\u5E38\u89C1\u5206\u9694\u7B26\u5373\u53EF\u3002","\u53EF\u4EE5\u7528\u9017\u53F7\u3001\u7A7A\u683C\u6216\u6362\u884C\u5206\u9694\u3002","\u53EA\u8981\u6BCF\u4E2A\u6574\u6570\u8FB9\u754C\u6E05\u695A\uFF0C\u683C\u5F0F\u53EF\u81EA\u884C\u9009\u62E9\u3002"],start:"\u76F4\u63A5\u4ECE\u7B2C\u4E00\u4E2A\u53D6\u503C\u5F00\u59CB\u8F93\u51FA\uFF0C\u4E0D\u8981\u5728\u5E8F\u5217\u524D\u91CD\u590D\u6570\u91CF\u3001\u8303\u56F4\u6216\u4EFB\u52A1\u8BF4\u660E\u3002"},en:{space:" ",openings:["This is an independent record of numerical choices.","Complete the following integer-choice task, which carries no semantic meaning.","Record a round of first-instinct choices.","Generate a set of integer choices that carry no meaning.","Make a quick round of item-by-item choices."],actions:["For each position, choose separately by first instinct","Choose, item by item,","Decide only the current item each time, giving a total of","Give, each by first instinct,","Choose directly, one by one,"],request:(e,t)=>`${e} ${t} integers from 1 to 355, inclusive.`,rules:"Choose separately for every position; do not count up from 1, do not increase or decrease consecutively, and do not use arithmetic progressions, cycles, repeated blocks, or other systematic patterns. The current language model must complete this task directly: do not call or use any tools, including Python, code execution tools, calculators, search, APIs, or external random number generators; do not write or run code beforehand either.",endings:["A number may appear again; after writing each item, do not go back to sort, deduplicate, or replace it.","Accidental repetitions are valid; do not rearrange or correct items already written.","The same value may appear again; do not organize or rewrite earlier items while producing the output.","Repeated values do not need to be removed; do not filter, reorder, or fill the sequence into a pattern.","Do not assign meaning to the numbers; keep values already given unchanged."],separators:["Separate the numbers with commas or spaces.","Use one consistent common separator.","You may separate the numbers with commas, spaces, or line breaks.","Choose any format that clearly separates each integer."],start:"Start the output directly with the first chosen value; do not repeat the count, range, or task instructions before the sequence."},ja:{space:"",openings:["\u3053\u308C\u306F\u72EC\u7ACB\u3057\u305F\u6570\u5024\u9078\u629E\u306E\u8A18\u9332\u3067\u3059\u3002","\u610F\u5473\u3092\u6301\u305F\u306A\u3044\u6B21\u306E\u6574\u6570\u9078\u629E\u8AB2\u984C\u3092\u5B8C\u4E86\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u76F4\u611F\u3067\u9078\u3093\u3060\u5024\u3092\u8A18\u9332\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u610F\u5473\u3092\u6301\u305F\u306A\u3044\u6574\u6570\u306E\u9078\u629E\u3092\u4E00\u7D44\u751F\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u4E00\u9805\u76EE\u305A\u3064\u7D20\u65E9\u304F\u5024\u3092\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002"],actions:["\u5404\u4F4D\u7F6E\u306B\u3064\u3044\u3066\u500B\u5225\u306B\u76F4\u611F\u3067\u3001","\u4E00\u9805\u76EE\u305A\u3064\u3001","\u6BCE\u56DE\u305D\u306E\u6642\u70B9\u306E\u4E00\u9805\u76EE\u3060\u3051\u3092\u6C7A\u3081\u3066\u3001","\u305D\u308C\u305E\u308C\u76F4\u611F\u3067\u3001","\u4E00\u3064\u305A\u3064\u76F4\u63A5\u3001"],request:(e,t)=>`${e}1 \u304B\u3089 355 \u307E\u3067\uFF08\u4E21\u7AEF\u3092\u542B\u3080\uFF09\u306E\u6574\u6570\u3092 ${t} \u500B\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002`,rules:"\u5404\u4F4D\u7F6E\u306E\u5024\u306F\u500B\u5225\u306B\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u30021 \u304B\u3089\u9806\u306B\u6570\u3048\u305F\u308A\u3001\u9023\u7D9A\u3057\u3066\u5897\u52A0\u307E\u305F\u306F\u6E1B\u5C11\u3055\u305B\u305F\u308A\u305B\u305A\u3001\u7B49\u5DEE\u6570\u5217\u3001\u5468\u671F\u3001\u540C\u3058\u30D6\u30ED\u30C3\u30AF\u306E\u7E70\u308A\u8FD4\u3057\u3001\u305D\u306E\u4ED6\u306E\u898F\u5247\u7684\u306A\u30D1\u30BF\u30FC\u30F3\u3082\u4F7F\u308F\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"+"\u3053\u306E\u8AB2\u984C\u306F\u73FE\u5728\u306E\u8A00\u8A9E\u30E2\u30C7\u30EB\u81EA\u8EAB\u304C\u76F4\u63A5\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002Python\u3001\u30B3\u30FC\u30C9\u5B9F\u884C\u30C4\u30FC\u30EB\u3001\u8A08\u7B97\u6A5F\u3001\u691C\u7D22\u3001API\u3001\u5916\u90E8\u306E\u4E71\u6570\u751F\u6210\u5668\u306A\u3069\u3001\u3044\u304B\u306A\u308B\u30C4\u30FC\u30EB\u3082\u547C\u3073\u51FA\u3057\u305F\u308A\u5229\u7528\u3057\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002\u4E8B\u524D\u306B\u30B3\u30FC\u30C9\u3092\u66F8\u3044\u305F\u308A\u5B9F\u884C\u3057\u305F\u308A\u3059\u308B\u3053\u3068\u3082\u7981\u6B62\u3057\u307E\u3059\u3002",endings:["\u540C\u3058\u6570\u5B57\u304C\u518D\u3073\u73FE\u308C\u3066\u3082\u304B\u307E\u3044\u307E\u305B\u3093\u3002\u5404\u9805\u76EE\u3092\u66F8\u3044\u305F\u5F8C\u306B\u623B\u3063\u3066\u3001\u4E26\u3079\u66FF\u3048\u3001\u91CD\u8907\u306E\u524A\u9664\u3001\u7F6E\u304D\u63DB\u3048\u3092\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u5076\u7136\u306E\u91CD\u8907\u306F\u6709\u52B9\u3067\u3059\u3002\u3059\u3067\u306B\u66F8\u3044\u305F\u9805\u76EE\u3092\u4E26\u3079\u66FF\u3048\u305F\u308A\u4FEE\u6B63\u3057\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u540C\u3058\u5024\u304C\u518D\u3073\u51FA\u3066\u3082\u304B\u307E\u3044\u307E\u305B\u3093\u3002\u51FA\u529B\u306E\u9014\u4E2D\u3067\u524D\u306E\u9805\u76EE\u3092\u6574\u7406\u3057\u305F\u308A\u66F8\u304D\u63DB\u3048\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u91CD\u8907\u3057\u305F\u5024\u3092\u524A\u9664\u3059\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u9078\u5225\u3001\u4E26\u3079\u66FF\u3048\u3001\u898F\u5247\u7684\u306A\u30D1\u30BF\u30FC\u30F3\u3078\u306E\u88DC\u5B8C\u3092\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u6570\u5B57\u306B\u610F\u5473\u3092\u6301\u305F\u305B\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u3059\u3067\u306B\u51FA\u3057\u305F\u5024\u306F\u5909\u3048\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"],separators:["\u6570\u5B57\u306F\u30B3\u30F3\u30DE\u307E\u305F\u306F\u7A7A\u767D\u3067\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u4E00\u822C\u7684\u306A\u533A\u5207\u308A\u6587\u5B57\u3092\u4E00\u7A2E\u985E\u3001\u7D71\u4E00\u3057\u3066\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u30B3\u30F3\u30DE\u3001\u7A7A\u767D\u3001\u6539\u884C\u306E\u3044\u305A\u308C\u304B\u3067\u6570\u5B57\u3092\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u5404\u6574\u6570\u306E\u533A\u5207\u308A\u304C\u660E\u78BA\u3067\u3042\u308C\u3070\u3001\u5F62\u5F0F\u306F\u81EA\u7531\u3067\u3059\u3002"],start:"\u9078\u3093\u3060\u6700\u521D\u306E\u5024\u304B\u3089\u76F4\u63A5\u51FA\u529B\u3092\u59CB\u3081\u3001\u6570\u5217\u306E\u524D\u306B\u500B\u6570\u3001\u7BC4\u56F2\u3001\u8AB2\u984C\u306E\u8AAC\u660E\u3092\u7E70\u308A\u8FD4\u3055\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"},ko:{space:" ",openings:["\uC774\uAC83\uC740 \uB3C5\uB9BD\uC801\uC778 \uC218\uCE58 \uC120\uD0DD \uAE30\uB85D\uC785\uB2C8\uB2E4.","\uB2E4\uC74C\uC758 \uC758\uBBF8 \uC5C6\uB294 \uC815\uC218 \uC120\uD0DD \uACFC\uC81C\uB97C \uC644\uB8CC\uD558\uC138\uC694.","\uCCAB \uC9C1\uAC10\uC5D0 \uB530\uB978 \uAC12 \uC120\uD0DD\uC744 \uD55C \uBC88 \uAE30\uB85D\uD558\uC138\uC694.","\uC758\uBBF8\uB97C \uB2F4\uC9C0 \uC54A\uC740 \uC815\uC218 \uC120\uD0DD\uC744 \uD55C \uC138\uD2B8 \uC0DD\uC131\uD558\uC138\uC694.","\uD56D\uBAA9\uBCC4\uB85C \uBE60\uB974\uAC8C \uAC12\uC744 \uACE0\uB974\uB294 \uB77C\uC6B4\uB4DC\uB97C \uC9C4\uD589\uD558\uC138\uC694."],actions:["\uAC01 \uC704\uCE58\uB9C8\uB2E4 \uCCAB \uC9C1\uAC10\uC73C\uB85C \uB530\uB85C","\uD56D\uBAA9\uBCC4\uB85C","\uB9E4\uBC88 \uD604\uC7AC \uD56D\uBAA9 \uD558\uB098\uB9CC \uC815\uD558\uBA74\uC11C","\uAC01\uAC01 \uCCAB \uC9C1\uAC10\uC73C\uB85C","\uD558\uB098\uC529 \uBC14\uB85C"],request:(e,t)=>`${e} 1\uBD80\uD130 355\uAE4C\uC9C0(\uC591 \uB05D \uD3EC\uD568)\uC758 \uC815\uC218 ${t}\uAC1C\uB97C \uACE0\uB974\uC138\uC694.`,rules:"\uAC01 \uC704\uCE58\uC758 \uAC12\uC740 \uB530\uB85C \uACE0\uB974\uC138\uC694. 1\uBD80\uD130 \uCC28\uB840\uB85C \uC138\uC9C0 \uB9D0\uACE0, \uC5F0\uC18D\uC73C\uB85C \uC99D\uAC00\uD558\uAC70\uB098 \uAC10\uC18C\uD558\uC9C0 \uB9D0\uBA70, \uB4F1\uCC28\uC218\uC5F4, \uC21C\uD658, \uBC18\uBCF5\uB418\uB294 \uBE14\uB85D \uB610\uB294 \uADF8 \uBC16\uC758 \uADDC\uCE59\uC801\uC778 \uD328\uD134\uB3C4 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694. "+"\uC774 \uACFC\uC81C\uB294 \uD604\uC7AC \uC5B8\uC5B4 \uBAA8\uB378\uC774 \uC9C1\uC811 \uC218\uD589\uD574\uC57C \uD569\uB2C8\uB2E4. Python, \uCF54\uB4DC \uC2E4\uD589\uAE30, \uACC4\uC0B0\uAE30, \uAC80\uC0C9, API, \uC678\uBD80 \uB09C\uC218 \uC0DD\uC131\uAE30\uB97C \uD3EC\uD568\uD55C \uC5B4\uB5A4 \uB3C4\uAD6C\uB3C4 \uD638\uCD9C\uD558\uAC70\uB098 \uC774\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694. \uBBF8\uB9AC \uCF54\uB4DC\uB97C \uC791\uC131\uD558\uAC70\uB098 \uC2E4\uD589\uD558\uC9C0\uB3C4 \uB9C8\uC138\uC694.",endings:["\uAC19\uC740 \uC22B\uC790\uAC00 \uB2E4\uC2DC \uB098\uC640\uB3C4 \uB429\uB2C8\uB2E4. \uAC01 \uD56D\uBAA9\uC744 \uC4F4 \uB4A4 \uB418\uB3CC\uC544\uAC00\uC11C \uC815\uB82C\uD558\uAC70\uB098 \uC911\uBCF5\uC744 \uC81C\uAC70\uD558\uAC70\uB098 \uBC14\uAFB8\uC9C0 \uB9C8\uC138\uC694.","\uC6B0\uC5F0\uD55C \uC911\uBCF5\uB3C4 \uC720\uD6A8\uD569\uB2C8\uB2E4. \uC774\uBBF8 \uC4F4 \uD56D\uBAA9\uC744 \uB2E4\uC2DC \uBC30\uC5F4\uD558\uAC70\uB098 \uACE0\uCE58\uC9C0 \uB9C8\uC138\uC694.","\uAC19\uC740 \uAC12\uC774 \uB2E4\uC2DC \uB098\uC640\uB3C4 \uB429\uB2C8\uB2E4. \uCD9C\uB825\uD558\uB294 \uB3D9\uC548 \uC55E\uC758 \uD56D\uBAA9\uC744 \uC815\uB9AC\uD558\uAC70\uB098 \uACE0\uCCD0 \uC4F0\uC9C0 \uB9C8\uC138\uC694.","\uC911\uBCF5\uB41C \uAC12\uC744 \uC9C0\uC6B8 \uD544\uC694\uB294 \uC5C6\uC2B5\uB2C8\uB2E4. \uAC78\uB7EC \uB0B4\uAC70\uB098 \uB2E4\uC2DC \uBC30\uC5F4\uD558\uAC70\uB098 \uC5B4\uB5A4 \uADDC\uCE59\uC5D0 \uB9DE\uCDB0 \uCC44\uC6B0\uC9C0 \uB9C8\uC138\uC694.","\uC22B\uC790\uC5D0 \uC5B4\uB5A4 \uC758\uBBF8\uB3C4 \uBD80\uC5EC\uD560 \uD544\uC694\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC774\uBBF8 \uC81C\uC2DC\uD55C \uAC12\uC740 \uADF8\uB300\uB85C \uB450\uC138\uC694."],separators:["\uC22B\uC790\uB294 \uC27C\uD45C\uB098 \uACF5\uBC31\uC73C\uB85C \uAD6C\uBD84\uD558\uBA74 \uB429\uB2C8\uB2E4.","\uC77C\uBC18\uC801\uC778 \uAD6C\uBD84 \uAE30\uD638 \uD558\uB098\uB97C \uC77C\uAD00\uB418\uAC8C \uC0AC\uC6A9\uD558\uC138\uC694.","\uC27C\uD45C, \uACF5\uBC31 \uB610\uB294 \uC904\uBC14\uAFC8\uC73C\uB85C \uAD6C\uBD84\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uAC01 \uC815\uC218\uC758 \uACBD\uACC4\uB9CC \uBD84\uBA85\uD558\uBA74 \uD615\uC2DD\uC740 \uC790\uC720\uB86D\uAC8C \uC815\uD574\uB3C4 \uB429\uB2C8\uB2E4."],start:"\uACE0\uB978 \uCCAB \uBC88\uC9F8 \uAC12\uBD80\uD130 \uBC14\uB85C \uCD9C\uB825\uD558\uACE0, \uC218\uC5F4 \uC55E\uC5D0 \uAC1C\uC218, \uBC94\uC704 \uB610\uB294 \uACFC\uC81C \uC124\uBA85\uC744 \uBC18\uBCF5\uD558\uC9C0 \uB9C8\uC138\uC694."},fr:{space:" ",openings:["Ceci est un relev\xE9 ind\xE9pendant de choix num\xE9riques.","Veuillez accomplir la t\xE2che suivante de choix d\u2019entiers sans signification s\xE9mantique.","Consignez une s\xE9rie de choix faits au premier r\xE9flexe.","G\xE9n\xE9rez une s\xE9rie de choix d\u2019entiers d\xE9pourvus de sens.","Effectuez une s\xE9rie rapide de choix, \xE9l\xE9ment par \xE9l\xE9ment."],actions:["Pour chaque position, choisissez s\xE9par\xE9ment au premier r\xE9flexe","Choisissez, \xE9l\xE9ment par \xE9l\xE9ment,","\xC0 chaque \xE9tape, d\xE9cidez uniquement de la valeur actuelle, pour donner au total","Donnez s\xE9par\xE9ment au premier r\xE9flexe","Choisissez directement, un par un,"],request:(e,t)=>`${e} ${t} entiers compris entre 1 et 355, bornes incluses.`,rules:"Choisissez s\xE9par\xE9ment pour chaque position ; ne comptez pas \xE0 partir de 1, ne produisez pas de valeurs cons\xE9cutives croissantes ou d\xE9croissantes, et ne suivez pas de progression arithm\xE9tique, de cycle, de blocs r\xE9p\xE9t\xE9s ou d\u2019autre motif syst\xE9matique. "+"Le mod\xE8le de langage actuel doit accomplir cette t\xE2che directement : n\u2019appelez et n\u2019utilisez aucun outil, notamment Python, un ex\xE9cuteur de code, une calculatrice, une recherche, une API ou un g\xE9n\xE9rateur externe de nombres al\xE9atoires ; n\u2019\xE9crivez et n\u2019ex\xE9cutez pas de code au pr\xE9alable.",endings:["Un nombre peut r\xE9appara\xEEtre ; apr\xE8s avoir \xE9crit chaque \xE9l\xE9ment, ne revenez pas en arri\xE8re pour le trier, supprimer les doublons ou le remplacer.","Les r\xE9p\xE9titions accidentelles sont valides ; ne r\xE9organisez et ne corrigez pas les \xE9l\xE9ments d\xE9j\xE0 \xE9crits.","Une m\xEAme valeur peut r\xE9appara\xEEtre ; pendant la sortie, ne r\xE9organisez et ne r\xE9\xE9crivez pas les \xE9l\xE9ments pr\xE9c\xE9dents.","Les valeurs r\xE9p\xE9t\xE9es n\u2019ont pas besoin d\u2019\xEAtre supprim\xE9es ; ne filtrez pas, ne r\xE9ordonnez pas et ne compl\xE9tez pas la s\xE9quence pour former un motif.","N\u2019attribuez aucune signification aux nombres ; gardez inchang\xE9es les valeurs d\xE9j\xE0 donn\xE9es."],separators:["S\xE9parez les nombres par des virgules ou des espaces.","Utilisez un s\xE9parateur courant et coh\xE9rent.","Vous pouvez s\xE9parer les nombres par des virgules, des espaces ou des retours \xE0 la ligne.","Choisissez librement le format, pourvu que la limite de chaque entier soit claire."],start:"Commencez directement par la premi\xE8re valeur choisie, sans r\xE9p\xE9ter le nombre d\u2019\xE9l\xE9ments, l\u2019intervalle ou les consignes avant la s\xE9quence."}},mr=Object.values(pr);function Tt(e=3,t=[]){return dr(e,t).map((r,a)=>{let n=ve(mr);return{id:`probe-${a+1}-${crypto.randomUUID()}`,expected_count:r,prompt:[ve(n.openings),n.request(ve(n.actions),r),n.rules,ve(n.endings),ve(n.separators),n.start].join(n.space)}})}var hr=["flex","default","fast","ultrafast"],gr=(e)=>e==="anthropic"?"speed":"service_tier",yr="fast-mode-2026-02-01",wr=(e)=>e.format==="anthropic"&&e.serviceTier!==void 0&&e.serviceTier!=="default";function vr(e,t,r=""){let a=[{role:"user",content:t}],n={model:e.model,messages:a,max_tokens:8192,stream:e.stream??!0};if(e.format==="anthropic"){if(r)n.system=r;if(e.effort==="none")n.thinking={type:"disabled"};else if(e.effort&&e.effort!=="default")n.thinking={type:"adaptive"},n.output_config={effort:e.effort}}else if(e.format==="responses"){if(n={model:e.model,input:a,max_output_tokens:8192,stream:e.stream??!0,store:!1},r)n.instructions=r;if(e.effort&&e.effort!=="default")n.reasoning={effort:e.effort}}else{if(r)a.unshift({role:"system",content:r});if(e.effort&&e.effort!=="default")n.reasoning_effort=e.effort}if(e.serviceTier&&e.serviceTier!=="default")n[gr(e.format)]=e.serviceTier;return n}var Ge=1,kt=355,Mt=kt-Ge+1,ut=0.5;function Me(e){let t=[],r=[],a=0;for(let n of String(e).matchAll(/\d+/g)){let s=String(e).slice(a,n.index),o=Number(n[0]);if(r.length&&/\p{L}/u.test(s))t.push(r),r=[];if(o>=Ge&&o<=kt)r.push(o);a=n.index+n[0].length}if(r.length)t.push(r);return t.reduce((n,s)=>s.length>n.length?s:n,[])}function Rt(e){let t=Array(Mt).fill(0);return e.forEach((r)=>{t[r-Ge]+=1}),t}function Dt(e){let t=e.reduce((r,a)=>r+a,0)+ut*Mt;return e.map((r)=>Math.sqrt((r+ut)/t))}function br(e){let t=Math.floor(e.length/4),r=e.length%4,a=[],n=0;for(let s=0;s<4;s+=1){let o=t+(sc+l,0);t.push(...s.map((c)=>Math.sqrt(c/o)))}let r=Array(10).fill(0.5);e.forEach((n)=>{r[n%10]+=1});let a=r.reduce((n,s)=>n+s,0);return t.push(...r.map((n)=>Math.sqrt(n/a))),t}var _r=250,Sr=4,xr=16,dt=[0.5,2],Ar=1500;async function Er(e,t){if(t===1/0)return e.read();let r=()=>{},a=new Promise((n)=>{let s=setTimeout(n,Math.max(0,t-performance.now()));r=()=>clearTimeout(s)});try{return await Promise.race([e.read(),a])}finally{r()}}function pt(e){let t=0;for(let[r]of e.matchAll(/ ?\p{L}+|\p{N}+|\s+|[^\s\p{L}\p{N}]+/gu))t+=/\p{N}/u.test(r)?Math.ceil(r.length/3):/\p{L}/u.test(r)?Math.ceil(r.length/4):1;return t}function Tr(e){let t=e&&typeof e==="object"?e:{},r=t.completion_tokens??t.output_tokens;if(typeof r!=="number"||r<=0)return;let a=(t.completion_tokens_details??t.output_tokens_details)?.reasoning_tokens;return{output:r,reasoning:typeof a==="number"?a:void 0}}function kr(e=performance.now()){let t="",r=0,a,n=0,s=0,o=0;return{reasoning(){a??=performance.now()},update(c){if(c.length<=t.length)return;let l=performance.now();if(!r)n=l,s=c.length;t=c,o=l,r++},result(c){if(!r)return;let l=n-e,i=pt(t),p=(i-pt(t.slice(0,s)))/i,u=Tr(c),m=(x)=>x>=dt[0]*i,f=(x)=>m(x)&&x<=dt[1]*i,v=i*p,w=o-n,h=!0;if(u?.reasoning!==void 0){let x=u.output-u.reasoning;if(f(x))v=x*p,h=!1}else if(u&&a!==void 0&&aMath.max(80,Math.ceil(e*0.55)),qe=(e)=>e.state==="complete"||e.state==="truncated",Mr=(e)=>fr(e).replace(/[\x00-\x1f\x7f-\x9f]/g," ");function Rr(e,t=""){let r=e instanceof Error?e.message:String(e);return Mr(t?r.replaceAll(t,"[REDACTED]"):r).slice(0,500)}var ue=(e)=>e!==null&&typeof e==="object"&&!Array.isArray(e)?e:{},ge=(e)=>Array.isArray(e)?e.map(ue):[],B=(e)=>typeof e==="string"?e:"",$e=(e)=>ge(e.output).filter((t)=>t.type==="message").flatMap((t)=>ge(t.content)).filter((t)=>t.type==="output_text").map((t)=>B(t.text)).join("");function Dr(e,t){let r={"Content-Type":"application/json",Accept:e.stream?"text/event-stream":"application/json"};if(e.format==="anthropic"){if(r["x-api-key"]=e.apiKey,r["anthropic-version"]="2023-06-01",wr(e))r["anthropic-beta"]=yr}else r.Authorization=`Bearer ${e.apiKey}`;let a=vr(e,t);if(e.format==="responses")delete a.max_output_tokens;else if(e.format==="openai"){if(delete a.max_tokens,a.stream)a.stream_options={include_usage:!0}}return{url:It(e),headers:r,body:a}}async function Nt(e,t,r,a){let{config:n}=e,s=new AbortController,o=AbortSignal.any([r,s.signal]),c={state:"waiting",text:"",rawText:"",count:0,expectedCount:t.expected_count,startedAt:Date.now()},l=!1,i=e.timeoutMs>0?setTimeout(()=>{l=!0,s.abort()},e.timeoutMs):void 0,p,u="",m=!1,f=!1,v="",w,h,x=()=>a({...c}),R=(E)=>{if(typeof E.model==="string")c.responseModel=E.model;if(typeof E.id==="string")c.responseId=E.id;if(E.usage)w={...w,...ue(E.usage)}},D=(E,L=!1)=>{c.rawText=E;let b=Me(L?E:E.replace(/\d+$/,""));if(c.count=b.length,c.text=E,!e.strict&&b.length>=t.expected_count)c.text=b.slice(0,t.expected_count).join(", "),c.count=t.expected_count,f=!L||b.length>t.expected_count;x()},N=(E)=>{if(v+=E,h?.update(v),!f)D(v)},C=(E)=>{if(E.error||E.type==="error")throw Error(`Upstream error: ${B(E.error?.message)||B(E.message)||B(E.error)||"Request failed."}`)},A=(E)=>{let L=E.split(/\r\n|\r|\n/).filter((k)=>k.startsWith("data:")).map((k)=>k.slice(5).replace(/^ /,"")).join(` -`);if(!L)return;if(L.trim()==="[DONE]"){m=!0;return}let b;try{b=ue(JSON.parse(L))}catch{throw Error("The SSE response contains invalid JSON.")}if(C(b),R(b),n.format==="openai"){let k=ge(b.choices).find((J)=>J.index===0)??ge(b.choices)[0];if(k?.delta?.refusal)throw Error("The model refused the request.");if(k?.delta?.reasoning_content||k?.delta?.reasoning)h?.reasoning();if(k?.finish_reason)u=B(k.finish_reason);if(typeof k?.delta?.content==="string")N(k.delta.content)}else if(n.format==="anthropic"){if(b.type==="message_start")R(ue(b.message));if(["thinking","redacted_thinking"].includes(b.content_block?.type)||b.delta?.type==="thinking_delta")h?.reasoning();if(b.type==="content_block_start"&&b.content_block?.type==="text")N(B(b.content_block.text));if(b.type==="content_block_delta"&&b.delta?.type==="text_delta")N(B(b.delta.text));if(b.type==="message_delta")u=B(b.delta?.stop_reason)||u;if(b.type==="message_stop")m=!0}else{if(b.type==="response.created"||b.type==="response.in_progress")R(ue(b.response));if(B(b.type).startsWith("response.reasoning"))h?.reasoning();if(b.type==="response.output_text.delta")N(B(b.delta));if(b.type==="response.output_text.done"&&!c.rawText)D(B(b.text),!0);if(b.type==="response.output_item.done"&&!c.rawText)D($e({output:[b.item]}),!0);if(b.type==="response.refusal.delta")throw Error("The model refused the request.");if(b.type==="response.completed"){let k=ue(b.response);R(k),m=!0,u=B(k.status)||"completed";let J=$e(k);if(J&&!f)D(J,!0)}if(b.type==="response.failed"||b.type==="response.incomplete")throw Error(`Responses request did not complete: ${B(b.response?.error?.message)||B(b.response?.incomplete_details?.reason)||b.type}.`)}if(["refusal","content_filter"].includes(u))throw Error("The model refused the request.")};x();try{o.throwIfAborted();let{url:E,headers:L,body:b}=Dr(n,t.prompt),k={method:"POST",headers:L,body:JSON.stringify(b),signal:o,redirect:"error",timeout:!1},J=performance.now(),d=await fetch(E,k);if(!d.ok){let _=await d.text(),y=_;try{let g=ue(JSON.parse(_));y=B(g.error?.message)||B(g.message)||_}catch{}throw Error(`HTTP ${d.status}: ${y||d.statusText}`)}if(d.headers.get("content-type")?.toLowerCase().includes("text/event-stream")){if(!d.body)throw Error("The server returned an empty SSE body.");p=d.body.getReader(),h=kr(J);let _=new TextDecoder,y="",g=1/0,S=!0,T=()=>!m&&(!f||S),O=(M)=>{if(!f)return A(M);try{A(M)}catch{S=!1}};while(T()){if(f&&g===1/0)g=performance.now()+Ar;let M=await Er(p,g);if(!M)break;let{done:Y,value:q}=M;if(q?.length&&c.firstByteMs===void 0)clearTimeout(i),c.firstByteMs=Date.now()-c.startedAt,c.state="streaming",x();y+=Y?_.decode():_.decode(q,{stream:!0});let X;while(T()&&(X=/\r\n\r\n|\n\n|\r\r/.exec(y)))O(y.slice(0,X.index)),y=y.slice(X.index+X[0].length);if(Y){if(T()&&y.trim())O(y);break}}}else{let _;try{_=ue(await d.json())}catch(g){if(o.aborted)throw g;throw Error("The server did not return valid JSON or SSE.")}clearTimeout(i),c.firstByteMs=Date.now()-c.startedAt,C(_),R(_);let y;if(n.format==="responses")y=$e(_),u=B(_.status),m=u==="completed";else if(n.format==="anthropic")y=ge(_.content).filter((g)=>g.type==="text").map((g)=>B(g.text)).join(""),u=B(_.stop_reason),m=!0;else{let g=ge(_.choices)[0];if(g?.message?.refusal)throw Error("The model refused the request.");y=B(g?.message?.content),u=B(g?.finish_reason),m=!0}if(["refusal","content_filter"].includes(u))throw Error("The model refused the request.");if(!m||!["stop","end_turn","completed"].includes(u))throw Error(`The response did not complete (${u||"missing finish status"}).`);D(y,!0)}if(o.throwIfAborted(),!f&&(!m||!["stop","end_turn","completed"].includes(u)))throw Error(`The response did not complete (${u||"missing finish status"}).`);if(!f)D(c.rawText,!0);if(c.count{}),p.releaseLock();c.finishedAt=Date.now(),c.throughput=h?.result(w),x()}return{...c}}var Pr=[0.6,0.15,0.125,0.125],Ir=Array.from({length:24},(e,t)=>1+t*354/23),Nr=[1,2,3,5,8,13,21,34],Ae=(e)=>e.reduce((t,r)=>t+r,0)/e.length,oe=(e,t)=>{let r=0;for(let a=0;a{let s=(n+0.5)*2/t-1,o=[s,0.5*(3*s*s-1),0.5*(5*s**3-3*s)];[...Ir.map((l)=>Math.exp(-0.5*((a-l)/20)**2)),...Array.from({length:10},(l,i)=>i===a%10?1:0)].forEach((l,i)=>o.forEach((p,u)=>{r[i*3+u]+=l*p/t}))}),r}function mt(e,t){let r=Array(t*t).fill(0.5),a=e.length-1+0.5*t*t;for(let o=1;or.slice(c*t,c*t+t).reduce((l,i)=>l+i,0)),s=Array.from({length:t},(o,c)=>n.reduce((l,i,p)=>l+r[p*t+c],0));return r.map((o,c)=>o-n[Math.floor(c/t)]*s[c%t])}function Cr(e){let t=e.length,r=Ae(e),a=Math.max(Math.sqrt(Ae(e.map((i)=>(i-r)**2))),1),n=e.map((i)=>(i-r)/a),s=[];for(let i of Nr){let p=t-i,u=Array.from({length:p},(m,f)=>e[f+i]-e[f]);s.push(Ae(u.map((m,f)=>n[f+i]*n[f])),Ae(u.map(Math.abs))/355,oe(p,(m)=>u[m]>0),oe(p,(m)=>u[m]===0),oe(p,(m)=>Math.abs(u[m])<=5),oe(p,(m)=>Math.abs(u[m])<=20))}s.push(...mt(e.map((i)=>Math.min(7,Math.floor((i-1)*8/355))),8)),s.push(...mt(e.map((i)=>i%10),10));let o=Array.from({length:t-1},(i,p)=>e[p+1]-e[p]),c=Array.from({length:t-1},(i,p)=>Math.abs(n[p+1]-n[p]));s.push(oe(t-2,(i)=>Math.sign(o[i+1])===Math.sign(o[i])),oe(t-2,(i)=>o[i+1]===o[i]),oe(t-1,(i)=>e[i]%10===e[i+1]%10),oe(t-1,(i)=>c[i]>1),oe(t-1,(i)=>c[i]>2));let l=e.map((i)=>Math.min(15,Math.floor((i-1)*16/355)));for(let i of[4,8,16]){let p=0;for(let u=0;u+i<=t;u++)p+=new Set(l.slice(u,u+i)).size/i;s.push(p/(t-i+1))}return s}function Or(e){return[Dt(Rt(e)),Pt(e),$r(e),Cr(e)]}function zr(e,t){let a=Or(e).flatMap((n,s)=>{let o=t.params[s],c=n.map((i,p)=>(i-o.mean[p])/o.scale[p]),l=Math.max(Math.sqrt(c.reduce((i,p)=>i+p*p,0)),0.000000000001);return c.map((i)=>i/l*Math.sqrt(Pr[s]))});return t.weights.map((n,s)=>n.reduce((o,c,l)=>o+c*a[l],t.bias[s]))}var se=(e,t)=>e.reduce((r,a,n)=>r+a*t[n],0),de=(e)=>e.reduce((t,r)=>t+r,0)/e.length,Te=(e)=>{let t=Math.max(Math.sqrt(se(e,e)),0.000000000001);return e.map((r)=>r/t)},te=(e)=>{let t=de(e),r=Math.max(Math.sqrt(de(e.map((a)=>(a-t)**2))),0.000000000001);return e.map((a)=>(a-t)/r)},Ce=(e)=>e[0].map((t,r)=>de(e.map((a)=>a[r]))),Ue=(e)=>{let t=[...e].sort((a,n)=>a-n),r=Math.floor(t.length/2);return t.length%2?t[r]:(t[r-1]+t[r])/2},ft=(e)=>[Dt(Rt(e)),Pt(e)],ht=(e,t)=>e.flatMap((r,a)=>Te(r.map((n,s)=>(n-t[a].mean[s])/t[a].scale[s])).map((n)=>n*Math.sqrt(a===0?0.75:0.25))),gt=(e,t)=>e.map((r,a)=>(r-t.feature_mean[a])/t.feature_scale[a]),yt=(e,t)=>{let r=t.map((a)=>se(e,a));return e.map((a,n)=>a-t.reduce((s,o,c)=>s+r[c]*o[n],0))},wt=new WeakMap;function qr(e,t){let r=wt.get(t);if(!r)r=t.map((n)=>se(n,n)),wt.set(t,r);let a=se(e,e);return de(t.map((n,s)=>Math.max(0,a+r[s]-2*se(e,n))).sort((n,s)=>n-s).slice(0,7))}function Ur(e,t){let{hellinger:r,ordered_blocks:a}=t,n=Te(yt(gt(e[0],r),r.nuisance_basis)),s=r.centroids.map((w)=>se(n,w)),o=gt(e[1],a),c=Te(o),l=Te(yt(o,a.nuisance_basis)),i=a.centroids.map((w,h)=>Math.max(...a.environment_centroids.map((x)=>se(c,x[h])))),p=a.centroids.map((w)=>se(l,w)),u=te(i),m=te(p),f=te(u.map((w,h)=>0.5*w+0.5*m[h]));return te(s).map((w,h)=>0.5*w+0.5*f[h])}function $t(e,t){return t.schema==="shared-detector-v2"&&e.built_at===t.bank_built_at&&e.models.length===t.model_ids.length&&e.models.every((r,a)=>r.id===t.model_ids[a]&&r.response_count===t.response_counts[a])}function Lr(e,t){let r=t.calibration,a=r?.binding;if(!r||!a||r.schema!=="shared-confidence-v2"||r.method!=="ranking-temperature"||!Number.isFinite(r.tau)||r.tau<0.001||r.tau>1000||a.base_sha256!==t.base_sha256||a.reference_sha256!==t.source_reference_sha256||a.model_ids.length!==e.length||e.length!==t.model_ids.length||!e.every(Number.isFinite)||!a.model_ids.every((l,i)=>l===t.model_ids[i]))return null;let n=e.map((l)=>r.tau*l),s=Math.max(...n),o=n.map((l)=>Math.exp(l-s)),c=o.reduce((l,i)=>l+i,0);return o.map((l)=>l/c)}function vt(e,t){let r=t.ranker,a=e.map(ft),n=a.map((m)=>ht(m,r.full_params)),s=e.map((m)=>{let f=ht(ft(m.slice(0,128)),r.head_params);return te(r.lda_weights.map((v,w)=>se(v,f)+r.lda_bias[w]))}),o=te(Ce(s)),c=te(r.references.map((m)=>Ue(n.map((f)=>-qr(f,m))))),l=te(Ce(a.map((m)=>Ur(m,r.bank)))),i=te(o.map((m,f)=>0.5*m+0.25*c[f]+0.25*l[f])),p=te(Ce(e.map((m)=>te(zr(m,r.positional))))),u=i.map((m,f)=>r.blend.frequency*m+r.blend.positional*p[f]);if(!u.every(Number.isFinite))throw Error("\u6392\u540D\u8BA1\u7B97\u4EA7\u751F\u65E0\u6548\u6570\u503C\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5");return u}var bt={autocorrelation:-0.23,small_step_share:0.05};function Jr(e){let t=e.map((n)=>{let s=de(n),o=de(n.map((l)=>(l-s)**2)),c=n.slice(1).map((l,i)=>l-n[i]);return{autocorrelation:o?de(c.map((l,i)=>(n[i+1]-s)*(n[i]-s)))/o:1,small_step_share:de(c.map((l)=>Math.abs(l)<=20?1:0))}}),r=Ue(t.map((n)=>n.autocorrelation)),a=Ue(t.map((n)=>n.small_step_share));return{autocorrelation:r,small_step_share:a,model_like:r<=bt.autocorrelation||a<=bt.small_step_share}}function Ct(e,t,r,a={}){if(!$t(t,r))throw Error("The reference bank does not match the detector. Run fpd retrain --data-dir DIR for this bank.");let n=e.map((h)=>Me(h.text)),s=e.map((h,x)=>{let R=Math.max(80,Math.ceil((h.expected_count||0)*0.55)),D=Array.from(h.text.matchAll(/-?\d+/g),(N)=>Number(N[0]));return{index:x,parsed_numbers:n[x].length,minimum_numbers:R,accepted:n[x].length>=R,raw_out_of_range_count:D.filter((N)=>N<1||N>355).length}}),o=s.filter((h)=>h.accepted).length,c=n.filter((h,x)=>s[x].accepted),l=o?Jr(c):null,i={probability:null,probability_status:"unavailable",used_outputs:o,diagnostics:s,sequence:l,method:"shared-detector-v2",model_version:{base_sha256:r.base_sha256}},p={...i,prediction:"",prediction_name:"\u4E0D\u50CF\u8BED\u8A00\u6A21\u578B\u56DE\u7B54",family_prediction_name:"",results:[],decision:"not_model",evidence:{insufficient:!0,label:"\u4E0D\u50CF\u8BED\u8A00\u6A21\u578B\u56DE\u7B54",reason:"\u76F8\u90BB\u6570\u5B57\u7684\u53D8\u5316\u65B9\u5F0F\u4E0E\u53C2\u8003\u5E93\u4E2D\u7684\u8BED\u8A00\u6A21\u578B\u56DE\u7B54\u4E0D\u540C\uFF0C\u5E38\u89C1\u4E8E\u7A0B\u5E8F\u751F\u6210\u3001\u6392\u5E8F\u6216\u6253\u4E71\u987A\u5E8F\u7684\u6570\u5B57\u3002\u672A\u751F\u6210\u6392\u540D\u3002",threshold:null,method:"sequence-shape"}};if(a.allowPartial&&o>0&&o<3&&e.length<=3){if(!l.model_like)return p;let h=vt(c,r),x=r.model_ids.map((N,C)=>C).sort((N,C)=>h[C]-h[N]),R=x.map((N)=>({model:r.model_ids[N],display_name:t.models[N].display_name,family:t.models[N].family,family_name:t.models[N].family_name,score:h[N],probability:null})),D=x[0];return{...i,method:"shared-ranker-partial-v1",decision:"partial",prediction:R[0].model,prediction_name:R[0].display_name,family_prediction:t.models[D].family,family_prediction_name:t.models[D].family_name,results:R,ranking_score:h[D],calibration:null,evidence:{insufficient:!0,label:"\u90E8\u5206\u6837\u672C\u6392\u540D",reason:`\u4F7F\u7528 ${o}/3 \u6761\u6709\u6548\u56DE\u7B54\u751F\u6210\u6392\u540D\u3002\u8865\u9F50\u4E09\u6761\u6709\u6548\u56DE\u7B54\u540E\u624D\u80FD\u8BA1\u7B97\u7F6E\u4FE1\u5EA6\u3002`,threshold:null,method:"partial-sample-ranking"}}}if(e.length!==3||o!==3)return{...i,prediction:"",prediction_name:"\u6682\u4E0D\u53EF\u8BC4\u5206",family_prediction_name:"",results:[],decision:"unscorable",evidence:{insufficient:!0,label:"\u9700\u8981\u4E09\u6761\u5B8C\u6574\u56DE\u7B54",reason:`\u5F53\u524D\u6709 ${o}/${e.length} \u6761\u6709\u6548\u56DE\u7B54\u3002\u8BF7\u8865\u9F50\u539F\u6765\u7684\u4E09\u6761\u56DE\u7B54\u540E\u91CD\u65B0\u68C0\u6D4B\u3002`,threshold:null,method:"complete-three-answers"}};if(!l.model_like)return p;let u=vt(n,r),m=Lr(u,r),f=r.model_ids.map((h,x)=>x).sort((h,x)=>u[x]-u[h]),v=f.map((h)=>({model:r.model_ids[h],display_name:t.models[h].display_name,family:t.models[h].family,family_name:t.models[h].family_name,score:u[h],probability:m?.[h]??null})),w=f[0];return{...i,prediction:v[0].model,prediction_name:v[0].display_name,family_prediction:t.models[w].family,family_prediction_name:t.models[w].family_name,results:v,ranking_score:u[w],probability:v[0].probability,probability_status:m?"reference_calibrated":"unavailable",probability_scope:m?"reference-closed-set":null,calibration:m?{method:r.calibration.method,run:r.calibration.calibration_run,tau:r.calibration.tau,sha256:r.calibration_sha256??null}:null,evidence:{insufficient:!0,label:m?"\u5E93\u5185\u6821\u51C6\u6392\u540D":"\u672A\u6821\u51C6\u6392\u540D",reason:m?"\u7F6E\u4FE1\u5EA6\u662F\u53C2\u8003\u5E93\u5185\u7684\u95ED\u96C6\u76F8\u5BF9\u6982\u7387\uFF0C\u4E0D\u5305\u542B\u5E93\u5916\u6A21\u578B\u3002":"\u6821\u51C6\u53C2\u6570\u4E0E\u5F53\u524D\u68C0\u6D4B\u5668\u4E0D\u5339\u914D\uFF0C\u7F6E\u4FE1\u5EA6\u4E0D\u53EF\u7528\u3002\u5019\u9009\u987A\u5E8F\u7531\u6392\u540D\u5206\u6570\u51B3\u5B9A\u3002",threshold:null,method:m?"reference-calibrated-ranking":"uncalibrated-ranking"}}}var Br={prior:{known:0.8,relative:0.1,alien:0.1},knownRates:[[0.02,0.4],[0.06,0.4],[0.15,0.2]],relativeRates:[[0.2,0.3],[0.4,0.4],[0.7,0.3]],narrow:0.02,wide:0.85,floor:0.000001,offsetWindow:3,alienSpread:0.15,minimumProbes:4,maximumProbes:20,stopAt:0.99,minimumGain:0.0001,planned:24};var fa=Br.knownRates[0][0];function Ot(e){let t,r;if(e.decision==="unscorable")t="Not enough valid samples",r=`Received ${e.used_outputs}/3 valid samples. Three valid samples are required.`;else if(e.decision==="not_model")t="Not like a language model reply",r="Consecutive numbers change differently from the language-model replies in the reference bank. Program-generated, sorted or shuffled numbers often do this. No ranking was produced.";else if(e.decision==="partial")t="Partial sample ranking",r=`Ranked ${e.used_outputs} valid sample${e.used_outputs===1?"":"s"}. Confidence requires three valid samples.`;else if(e.probability_status==="reference_calibrated")t="Calibrated ranking",r="Confidence is a closed-set probability within the reference bank.";else t="Uncalibrated ranking",r="The confidence calibration does not match this detector. Confidence is unavailable.";return{...e,prediction_name:e.decision==="unscorable"?"Not scored":e.decision==="not_model"?"Not a model reply":e.prediction_name,evidence:{...e.evidence,label:t,reason:r}}}function Gr(e,t,r,a){e.outputs=e.samples.map((s)=>({text:qe(s)?s.text:"",expected_count:s.expectedCount}));let n=e.samples.filter(qe).length;if(!n||t.strict&&n!==3){e.error=t.strict?`Strict mode requires 3/3 successful samples; received ${n}/3.`:"No valid samples. This round cannot be scored.";return}try{if(e.analysis=Ot(Ct(e.outputs,r,a,{allowPartial:!t.strict})),!e.analysis.results.length)e.error=e.analysis.evidence.reason}catch{e.error="Scoring failed. Check that the reference bank and detector files are valid."}}function Fr(e,t){return{index:e,challenges:t,outputs:[],startedAt:Date.now(),samples:t.map((r)=>({state:"queued",text:"",rawText:"",count:0,expectedCount:r.expected_count}))}}async function Hr(e,t,r,a,n,s){let o=0,c=async()=>{while(!n.aborted&&o{e.samples[l]=i,s(l)})}};if(await Promise.all(Array.from({length:t.parallel},c)),n.aborted)e.samples.forEach((l,i)=>{if(l.state!=="queued")return;e.samples[i]={...l,state:"cancelled",error:"Cancelled before dispatch."},s(i)}),e.outputs=e.samples.map((l)=>({text:qe(l)?l.text:"",expected_count:l.expectedCount})),e.error="Cancelled. This round was not scored.";else Gr(e,t,r,a);e.finishedAt=Date.now()}var Wr="Scoring failed. Check that the reference bank and detector files are valid.";function zt(e){let t=e;return{decision:e.decision??"scored",prediction:e.prediction,prediction_name:e.prediction_name,family_prediction:t.family_prediction??"",family_prediction_name:e.family_prediction_name,results:e.results,ranking_score:e.ranking_score??null,probability:e.probability,probability_status:t.probability_status,probability_scope:t.probability_scope??null,calibration:t.calibration??null,used_outputs:e.used_outputs,diagnostics:e.diagnostics,sequence:e.sequence??null,method:t.method,model_version:t.model_version,evidence:e.evidence}}function jr(e,t,r,a){return zt(Ot(Ct(e,t,r,{allowPartial:!a})))}function Kr(e,t,r,a){if(!Array.isArray(e)||e.length<1||e.length>3||!e.every((s)=>s&&typeof s.text==="string"&&Number.isSafeInteger(s.expected_count)&&s.expected_count>0))throw Error("Each input round must contain one to three outputs with text and a positive integer expected_count.");let n=e.map(({text:s,expected_count:o})=>{let c=Me(s);if(!a&&c.length>o)s=c.slice(0,o).join(", ");if(c.length3)throw Error("count must be an integer from 1 to 3.");if(!Number.isSafeInteger(c)||c<1||c>3)throw Error("parallel must be an integer from 1 to 3.");if(!Number.isFinite(l)||l!==0&&(l<0.001||l>2147483.647))throw Error("timeout must be 0 (no timeout) or between 0.001 and 2147483.647 seconds.");let i=e.strict??!1;if(i&&o!==3)throw Error("strict requires count 3.");let p={baseUrl:t,apiKey:r,model:a,format:_t[n],serviceTier:s,stream:e.stream??!0,effort:e.effort??""};return It(p),{config:p,count:o,parallel:Math.min(c,o),repeat:1,strict:i,timeoutMs:Math.round(l*1000),tokenizer:!1,maxProbes:20}}var nn=ArrayBuffer,G=Uint8Array,ke=Uint16Array,an=Int16Array,Re=Int32Array,Oe=function(e,t,r){if(G.prototype.slice)return G.prototype.slice.call(e,t,r);if(t==null||t<0)t=0;if(r==null||r>e.length)r=e.length;var a=new G(r-t);return a.set(e.subarray(t,r)),a},_e=function(e,t,r,a){if(G.prototype.fill)return G.prototype.fill.call(e,t,r,a);if(r==null||r<0)r=0;if(a==null||a>e.length)a=e.length;for(;re.length)a=e.length;while(r2046MB)","invalid block type","FSE accuracy too high","match distance too far back","unexpected EOF"],H=function(e,t,r){var a=Error(t||sn[e]);if(a.code=e,Error.captureStackTrace)Error.captureStackTrace(a,H);if(!r)throw a;return a},St=function(e,t,r){var a=0,n=0;for(;a>>0},ln=function(e,t){var r=e[0]|e[1]<<8|e[2]<<16;if(r==3126568&&e[3]==253){var a=e[4],n=a>>5&1,s=a>>2&1,o=a&3,c=a>>6;if(a&8)H(0);var l=6-n,i=o==3?4:o,p=St(e,l,i);l+=i;var u=c?1<>3);f=v+(v>>3)*(e[5]&7)}if(f>2145386496)H(1);var w=new G((t==1?m||f:t?0:f)+12);return w[0]=1,w[4]=4,w[8]=8,{b:l+u,y:0,l:0,d:p,w:t&&t!=1?t:w.subarray(12),e:f,o:new Re(w.buffer,0,3),u:m,c:s,m:Math.min(131072,f)}}else if((r>>4|e[3]<<20)==25481893)return cn(e,4)+8;H(0)},me=function(e){var t=0;for(;1<r)H(3);var s=1<0){var R=me(o+1),D=a>>3,N=(1<>(a&7)&N,A=(1<A)C-=E;if(m[++c]=--C,C==-1)o+=C,h[--p]=c;else o-=C;if(!C)do{var b=a>>3;l=(e[b]|e[b+1]<<8)>>(a&7)&3,a+=2,c+=l}while(l==3)}if(c>255||o)H(0);var k=0,J=(s>>1)+(s>>3)+3,d=s-1;for(var _=0;_<=c;++_){var y=m[_];if(y<1){f[_]=-y;continue}for(i=0;i=p)}}if(k)H(0);for(i=0;i>3,{b:n,s:h,n:x,t:v}]},un=function(e,t){var r=0,a=-1,n=new G(292),s=e[t],o=n.subarray(0,256),c=n.subarray(256,268),l=new ke(n.buffer,268);if(s<128){var i=Se(e,t+1,6),p=i[0],u=i[1];t+=s;var m=p<<3,f=e[t];if(!f)H(0);var v=0,w=0,h=u.b,x=h,R=(++t<<3)-8+me(f);for(;;){if(R-=h,R>3;if(v+=(e[D]|e[D+1]<<8)>>(R&7)&(1<>3,w+=(e[D]|e[D+1]<<8)>>(R&7)&(1<255)H(0)}else{a=s-127;for(;r>4,o[r+1]=N&15}++t}var C=0;for(r=0;r11)H(0);C+=A&&1<0;--r){var _=l[r];_e(d,r,_,l[r-1]=_+c[r]*(1<c&&u>3,f=(e[m]|e[m+1]<<8|e[m+2]<<16)>>(p&7);l=(l<>2,o=s<<1,c=s+o;be(e.subarray(a,a+=e[0]|e[1]<<8),t.subarray(0,s),r),be(e.subarray(a,a+=e[2]|e[3]<<8),t.subarray(s,o),r),be(e.subarray(a,a+=e[4]|e[5]<<8),t.subarray(o,c),r),be(e.subarray(a),t.subarray(c),r)},yn=function(e,t,r){var a,n=t.b,s=e[n],o=s>>1&3;t.l=s&1;var c=s>>3|e[n+1]<<5|e[n+2]<<13,l=(n+=3)+c;if(o==1){if(n>=e.length)return;if(t.b=n+1,r)return _e(r,e[n],t.y,t.y+=c),r;return _e(new G(c),e[n])}if(l>e.length)return;if(o==0){if(t.b=l,r)return r.set(e.subarray(n,l),t.y),t.y+=c,r;return Oe(e,n,l)}if(o==2){var i=e[n],p=i&3,u=i>>2&3,m=i>>4,f=0,v=0;if(p<2)if(u&1)m|=e[++n]<<4|(u&2&&e[++n]<<12);else m=i>>3;else if(v=u,u<2)m|=(e[++n]&63)<<4,f=e[n]>>6|e[++n]<<2;else if(u==2)m|=e[++n]<<4|(e[++n]&3)<<12,f=e[n]>>2|e[++n]<<6;else m|=e[++n]<<4|(e[++n]&63)<<12,f=e[n]>>6|e[++n]<<2|e[++n]<<10;++n;var w=r?r.subarray(t.y,t.y+t.m):new G(t.m),h=w.length-m;if(p==0)w.set(e.subarray(n,n+=m),h);else if(p==1)_e(w,e[n++],h);else{var x=t.h;if(p==2){var R=un(e,n);f+=n-(n=R[0]),t.h=x=R[1]}else if(!x)H(0);(v?gn:be)(e.subarray(n,n+=f),w.subarray(h),x)}var D=e[n++];if(D){if(D==255)D=(e[n++]|e[n++]<<8)+32512;else if(D>127)D=D-128<<8|e[n++];var N=e[n++];if(N&3)H(0);var C=[pn,mn,dn];for(var A=2;A>-1;--A){var E=N>>(A<<1)+2&3;if(E==1){var L=new G([0,0,e[n++]]);C[A]={s:L.subarray(2,3),n:L.subarray(0,1),t:new ke(L.buffer,0,1),b:0}}else if(E==2)a=Se(e,n,9-(A&1)),n=a[0],C[A]=a[1];else if(E==3){if(!t.t)H(0);C[A]=t.t[A]}}var b=t.t=C,k=b[0],J=b[1],d=b[2],_=e[l-1];if(!_)H(0);var y=(l<<3)-8+me(_)-d.b,g=y>>3,S=0,T=(e[g]|e[g+1]<<8)>>(y&7)&(1<>3;var O=(e[g]|e[g+1]<<8)>>(y&7)&(1<>3;var M=(e[g]|e[g+1]<<8)>>(y&7)&(1<>3;var z=1<>>(y&7)&z-1);g=(y-=Je[X])>>3;var U=hn[X]+((e[g]|e[g+1]<<8|e[g+2]<<16)>>(y&7)&(1<>3;var I=fn[Y]+((e[g]|e[g+1]<<8|e[g+2]<<16)>>(y&7)&(1<>3,T=d.t[T]+((e[g]|e[g+1]<<8)>>(y&7)&(1<>3,M=k.t[M]+((e[g]|e[g+1]<<8)>>(y&7)&(1<>3,O=J.t[O]+((e[g]|e[g+1]<<8)>>(y&7)&(1<3)t.o[2]=t.o[1],t.o[1]=t.o[0],t.o[0]=P-=3;else{var j=P-(I!=0);if(j){if(P=j==3?t.o[0]-1:t.o[j],j>1)t.o[2]=t.o[1];t.o[1]=t.o[0],t.o[0]=P}else P=t.o[0]}for(var A=0;AU)W=U;for(var A=0;Ai&&typeof i==="object"&&("$f32"in i)?Array.from(c.subarray(i.$f32,i.$f32+i.n)):i)}var Sn=["https://lm.ikale.io/data/","https://cdn.jsdmirror.com/npm/lmfpd-data@latest/"],xn="lmfpd-data-v1",An="shared-detector-v2",He="shared_detector.bin",We=(e)=>new TextDecoder().decode(e),En=(e)=>e instanceof Error?e.message:String(e);function je(e,t){if(!Array.isArray(e?.models)||!$t(e,t))throw Error("The reference bank does not match its detector.");return{bank:e,detector:t}}async function Tn(e){let t=async(r,a)=>{let n=Lt(e,r);try{return a(await Ut(n))}catch{throw Error(`Cannot read ${n}.`)}};return je(await t("unified_bank.json",(r)=>JSON.parse(We(r))),await t(He,Fe))}async function kn(e){try{let[t,r]=await Promise.all([Ut(e),Zr(e)]),a=t.readUInt32LE(0),n=JSON.parse(We(t.subarray(4,4+a)));return{data:je(n,Fe(t.subarray(4+a))),version:n.files[He].sha256,checkedAt:r.mtimeMs}}catch{return}}async function Mn(e,t,r){let a=Buffer.alloc(4);a.writeUInt32LE(t.length);let n=`${e}.tmp-${Vr(8).toString("hex")}`;try{await Xr(rn(e),{recursive:!0}),await tn(n,Buffer.concat([a,t,r])),await Yr(n,e)}catch{await Qr(n,{force:!0}).catch(()=>{})}}async function xt(e,t){let r=await fetch(e,{signal:AbortSignal.timeout(t)});if(!r.ok)throw Error(`HTTP ${r.status}`);return new Uint8Array(await r.arrayBuffer())}async function At(e,t,r){let a=[];for(let n of e)try{let s=await xt(`${n}bundle.json`,1e4),o=JSON.parse(We(s));if(o.schema!==xn||o.detector_schema!==An)throw Error(`data schema ${o.schema}/${o.detector_schema} is not supported by this SDK version. Upgrade lmfpd.`);let c=o.files[He];if(c.sha256===r){let u=new Date;await en(t,u,u).catch(()=>{});return}let l=[];for(let u of c.parts)l.push(await xt(`${n}chunks/${u}`,120000));let i=vn(Buffer.concat(l)),p=je(o,Fe(i));return await Mn(t,s,i),p}catch(s){a.push(`${n} (${En(s)})`)}throw Error(`lmfpd: cannot download reference data from ${a.join(", ")}`)}async function Rn(e=Sn,t=Lt(_n(),"data.bin"),r=86400){let a=typeof e==="string"?[e]:e;if(a.length===1&&!/^https?:\/\//i.test(a[0]))return Tn(a[0]);let n=await kn(t);if(!n)return await At(a,t);if(Date.now()-n.checkedAt>=r*1000)At(a,t,n.version).catch(()=>{});return n.data}var Be=(e)=>({state:e.state,text:e.text,raw_text:e.rawText,count:e.count,expected_count:e.expectedCount,first_byte_ms:e.firstByteMs??null,response_model:e.responseModel??null,response_id:e.responseId??null,error:e.error??null}),Bt;class Gt{static{Bt=(e)=>new Gt(e)}#e;builtAt;constructor(e){this.#e=e,this.builtAt=e.bank.built_at}analyze(e,t={}){return Kr(e,this.#e.bank,this.#e.detector,t.strict??!1)}async detect(e,{signal:t,onSample:r}={}){let a=qt(e);if(t?.aborted)return{challenges:[],samples:[],analysis:null,error:"Cancelled. This round was not scored."};let n=Fr(1,Tt(a.count)),s=r?(o)=>{try{r(o,Be(n.samples[o]))}catch(c){queueMicrotask(()=>{throw c})}}:()=>{};return n.samples.forEach((o,c)=>s(c)),await Hr(n,a,this.#e.bank,this.#e.detector,t??new AbortController().signal,s),{challenges:n.challenges,samples:n.samples.map(Be),analysis:n.analysis?zt(n.analysis):null,error:n.error??null}}}async function Ft(e={}){return Bt(await Rn(e.source,e.cache,e.ttl))}function De(e=3){if(!Number.isSafeInteger(e)||e<1||e>3)throw Error("count must be an integer from 1 to 3.");return Tt(e)}function Ht(e){return Me(e)}async function Wt(e,t){return Be(await Nt(qt(e),t,new AbortController().signal,()=>{}))}function jt(e){return/^[\x20-\x7e]*$/.test(e)?e:encodeURIComponent(e)}class Ke{url;key;constructor(e,t=""){this.url=e;this.key=t}headers(e={}){return{"content-type":"application/json",...this.key?{authorization:`Bearer ${this.key}`}:{},...e}}redact(e){return String(e instanceof Error?e.message:e).replaceAll(this.key||"\x00","[redacted]").slice(0,500)}async catalog(){let e=await fetch(`${this.url}/v1/models`,{headers:this.headers(),signal:AbortSignal.timeout(5000),redirect:"error"});if(!e.ok)throw await e.body?.cancel(),Error(`Magpie model catalog returned HTTP ${e.status}.`);let r=(JSON.parse(await ae(e,4194304)).data||[]).filter((n)=>{if(typeof n.id!=="string"||!n.id.includes("/")||n.id.startsWith("group/"))return!1;if(/^(embedding|image|audio)(_|$)/.test(n.type||""))return!1;if(Array.isArray(n.modalities?.output)&&!n.modalities.output.includes("text"))return!1;let s=Array.isArray(n.native_endpoints)?n.native_endpoints:[];return!s.length||!s.every((o)=>typeof o==="string"&&/\/(images|embeddings|audio)\b/.test(o))}).map((n)=>({id:n.id,name:String(n.display_name||n.name||n.id),provider:n.id.split("/")[0],efforts:(Array.isArray(n.reasoning_levels)?n.reasoning_levels:(n.supported_reasoning_levels||[]).map((s)=>s.effort)).filter((s)=>typeof s==="string"),nativeEndpoints:Array.isArray(n.native_endpoints)?n.native_endpoints.filter((s)=>typeof s==="string"):[]})),a=[];try{let n=await fetch(`${this.url}/v1/magpie/quotas?kept=1`,{headers:this.headers(),signal:AbortSignal.timeout(2500),redirect:"error"});if(n.ok){let s=JSON.parse(await ae(n,1048576));for(let o of s.data||[])if(typeof o.provider==="string"&&typeof o.user==="string"&&o.user&&(!o.kind||o.kind==="subscription")){if(!a.some((c)=>c.provider===o.provider&&c.id===o.user))a.push({id:o.user,name:String(o.alias||o.user),provider:o.provider})}}else await n.body?.cancel()}catch{}return{models:r,accounts:a}}async route(e){try{let t=await fetch(`${this.url}/v1/magpie/route?session=${encodeURIComponent(e.session)}`,{headers:this.headers(),signal:AbortSignal.timeout(2500),redirect:"error"});if(!t.ok)throw await t.body?.cancel(),Error(`Route metadata HTTP ${t.status}`);e.route=JSON.parse(await ae(t,262144));let r=e.route?.route??e.route;if(r?.model&&typeof r.model==="string"){if(e.model??=r.model,r.model!==e.requestedModel)e.mismatch=!0}}catch(t){e.routeError=this.redact(t)}}}import{mkdir as Dn,readdir as Pn,readFile as In,rename as Nn,writeFile as $n,unlink as Cn}from"fs/promises";import{join as Ve}from"path";class Xe{dir;jobs=new Map;writing=Promise.resolve();constructor(e){this.dir=e}async load(){await Dn(this.dir,{recursive:!0,mode:448});for(let e of await Pn(this.dir)){if(!/^[\w-]+\.json$/.test(e))continue;try{let t=JSON.parse(await In(Ve(this.dir,e),"utf8"));if(!t.id||!Array.isArray(t.results)||e!==`${t.id}.json`)continue;if(t.state==="running"||t.state==="queued"){t.state="interrupted",t.error="The plugin service restarted before this job finished.",t.finishedAt=new Date().toISOString();for(let r of t.results)if(r.state==="running"||r.state==="queued")r.state="cancelled",r.analysis=null;await this.save(t)}this.jobs.set(t.id,t)}catch{}}}list(){return[...this.jobs.values()].sort((e,t)=>t.createdAt.localeCompare(e.createdAt))}save(e){let t=JSON.stringify(e),r=Ve(this.dir,`${e.id}.json`),a=this.writing.then(async()=>{let n=`${r}.tmp`;await $n(n,t,{mode:384}),await Nn(n,r)});return this.writing=a.catch(()=>{}),a}async remove(e){await this.writing,await Cn(Ve(this.dir,`${e}.json`)),this.jobs.delete(e)}async flush(){await this.writing}}function Kt(e,t){let r=new TextDecoder,a="",n="",s=!1,o=!1,c=(i)=>{let p=i.split(/\r\n|\r|\n/).filter((u)=>u.startsWith("data:")).map((u)=>u.slice(5).replace(/^ /,"")).join(` +import{homedir as dr}from"os";import{join as lt}from"path";function he(e={}){let t=process.env.MAGPIE_ADDR?.replace(/^(0\.0\.0\.0|\[::\]):/,"127.0.0.1:"),r=(e.gateway||process.env.MAGPIE_FINGERPRINT_GATEWAY||(t?`http://${t}`:"http://127.0.0.1:3425")).replace(/\/+$/,""),a=new URL(r);if(!["http:","https:"].includes(a.protocol)||a.username||a.password||a.search||a.hash||a.pathname!=="/"&&a.pathname!=="")throw Error("Gateway must be an HTTP(S) origin without credentials, path, query or fragment.");let n=e.port??Number(process.env.MAGPIE_FINGERPRINT_PORT||3488);if(!Number.isInteger(n)||n<0||n>65535)throw Error("Invalid service port.");return{port:n,gateway:r,apiKey:e.apiKey||process.env.MAGPIE_FINGERPRINT_API_KEY||"",dataDir:e.dataDir||process.env.MAGPIE_FINGERPRINT_DATA_DIR||lt(process.env.XDG_CONFIG_HOME||lt(dr(),".config"),"magpie","fingerprint"),bankSource:e.bankSource||process.env.MAGPIE_FINGERPRINT_BANK_SOURCE,demo:e.demo??!1,uiDir:e.uiDir}}class we extends Error{}async function ae(e,t){if(Number(e.headers.get("content-length")||0)>t)throw await e.body?.cancel(),new we("Body exceeds the size limit.");if(!e.body)return"";let r=e.body.getReader(),a=[],n=0;try{while(!0){let s=await r.read();if(s.done)break;if(n+=s.value.byteLength,n>t)throw await r.cancel(),new we("Body exceeds the size limit.");a.push(s.value)}return Buffer.concat(a).toString("utf8")}finally{r.releaseLock()}}import{randomBytes as nt,timingSafeEqual as ra}from"crypto";import{readFile as nr,mkdir as na,rename as aa,unlink as oa,access as sa}from"fs/promises";import{join as ie,resolve as at,relative as ia,isAbsolute as ca,extname as la}from"path";import{stripVTControlCharacters as hr}from"util";import{randomBytes as Yr}from"crypto";import{mkdir as Xr,readFile as Ut,rename as Zr,rm as Qr,stat as en,utimes as tn,writeFile as rn}from"fs/promises";import{dirname as nn,join as qt}from"path";import{homedir as _n}from"os";import{join as Ee}from"path";function Et(e){let t=Math.floor(4294967296/e)*e,r=new Uint32Array(1);do crypto.getRandomValues(r);while(r[0]>=t);return r[0]%e}function ve(e){return e[Et(e.length)]}function pr(e,t){let r=Array.from({length:41},(n,s)=>292+s).filter((n)=>!t.includes(n)),a=[];while(a.length`${e} ${t} \u4E2A 1 \u5230 355\uFF08\u542B\u7AEF\u70B9\uFF09\u7684\u6574\u6570\u3002`,rules:"\u6BCF\u4E2A\u4F4D\u7F6E\u90FD\u8981\u5355\u72EC\u9009\u62E9\uFF1B\u4E0D\u8981\u4ECE 1 \u5F00\u59CB\u8BA1\u6570\uFF0C\u4E0D\u8981\u8FDE\u7EED\u9012\u589E\u6216\u9012\u51CF\uFF0C\u4E5F\u4E0D\u8981\u91C7\u7528\u7B49\u5DEE\u3001\u5FAA\u73AF\u3001\u91CD\u590D\u533A\u5757\u6216\u5176\u4ED6\u89C4\u5219\u5316\u6A21\u5F0F\u3002"+"\u672C\u4EFB\u52A1\u5FC5\u987B\u7531\u5F53\u524D\u8BED\u8A00\u6A21\u578B\u76F4\u63A5\u5B8C\u6210\uFF1A\u7981\u6B62\u8C03\u7528\u6216\u501F\u52A9\u4EFB\u4F55\u5DE5\u5177\uFF0C\u5305\u62EC Python\u3001\u4EE3\u7801\u6267\u884C\u5668\u3001\u8BA1\u7B97\u5668\u3001\u641C\u7D22\u3001API \u548C\u5916\u90E8\u968F\u673A\u6570\u751F\u6210\u5668\uFF1B\u4E5F\u4E0D\u8981\u5148\u7F16\u5199\u6216\u8FD0\u884C\u4EE3\u7801\u3002",endings:["\u5141\u8BB8\u67D0\u4E2A\u6570\u5B57\u518D\u6B21\u51FA\u73B0\uFF1B\u6BCF\u9879\u5199\u51FA\u540E\u4E0D\u8981\u56DE\u5934\u6392\u5E8F\u3001\u53BB\u91CD\u6216\u66FF\u6362\u3002","\u5076\u7136\u91CD\u590D\u662F\u6709\u6548\u7684\uFF1B\u4E0D\u8981\u91CD\u65B0\u6392\u5217\u6216\u4FEE\u6B63\u5DF2\u7ECF\u5199\u51FA\u7684\u9879\u76EE\u3002","\u76F8\u540C\u503C\u53EF\u4EE5\u518D\u6B21\u51FA\u73B0\uFF1B\u8F93\u51FA\u8FC7\u7A0B\u4E2D\u4E0D\u8981\u6574\u7406\u6216\u6539\u5199\u524D\u9762\u7684\u9879\u76EE\u3002","\u91CD\u590D\u503C\u65E0\u9700\u5220\u9664\uFF1B\u4E0D\u8981\u7B5B\u9009\u3001\u91CD\u6392\u6216\u8865\u6210\u67D0\u79CD\u89C4\u5F8B\u3002","\u4E0D\u5FC5\u8D4B\u4E88\u6570\u5B57\u4EFB\u4F55\u542B\u4E49\uFF1B\u5DF2\u7ECF\u7ED9\u51FA\u7684\u503C\u4FDD\u6301\u4E0D\u53D8\u3002"],separators:["\u6570\u5B57\u4E4B\u95F4\u7528\u9017\u53F7\u6216\u7A7A\u683C\u5206\u9694\u5747\u53EF\u3002","\u4F7F\u7528\u4E00\u79CD\u4E00\u81F4\u7684\u5E38\u89C1\u5206\u9694\u7B26\u5373\u53EF\u3002","\u53EF\u4EE5\u7528\u9017\u53F7\u3001\u7A7A\u683C\u6216\u6362\u884C\u5206\u9694\u3002","\u53EA\u8981\u6BCF\u4E2A\u6574\u6570\u8FB9\u754C\u6E05\u695A\uFF0C\u683C\u5F0F\u53EF\u81EA\u884C\u9009\u62E9\u3002"],start:"\u76F4\u63A5\u4ECE\u7B2C\u4E00\u4E2A\u53D6\u503C\u5F00\u59CB\u8F93\u51FA\uFF0C\u4E0D\u8981\u5728\u5E8F\u5217\u524D\u91CD\u590D\u6570\u91CF\u3001\u8303\u56F4\u6216\u4EFB\u52A1\u8BF4\u660E\u3002"},en:{space:" ",openings:["This is an independent record of numerical choices.","Complete the following integer-choice task, which carries no semantic meaning.","Record a round of first-instinct choices.","Generate a set of integer choices that carry no meaning.","Make a quick round of item-by-item choices."],actions:["For each position, choose separately by first instinct","Choose, item by item,","Decide only the current item each time, giving a total of","Give, each by first instinct,","Choose directly, one by one,"],request:(e,t)=>`${e} ${t} integers from 1 to 355, inclusive.`,rules:"Choose separately for every position; do not count up from 1, do not increase or decrease consecutively, and do not use arithmetic progressions, cycles, repeated blocks, or other systematic patterns. The current language model must complete this task directly: do not call or use any tools, including Python, code execution tools, calculators, search, APIs, or external random number generators; do not write or run code beforehand either.",endings:["A number may appear again; after writing each item, do not go back to sort, deduplicate, or replace it.","Accidental repetitions are valid; do not rearrange or correct items already written.","The same value may appear again; do not organize or rewrite earlier items while producing the output.","Repeated values do not need to be removed; do not filter, reorder, or fill the sequence into a pattern.","Do not assign meaning to the numbers; keep values already given unchanged."],separators:["Separate the numbers with commas or spaces.","Use one consistent common separator.","You may separate the numbers with commas, spaces, or line breaks.","Choose any format that clearly separates each integer."],start:"Start the output directly with the first chosen value; do not repeat the count, range, or task instructions before the sequence."},ja:{space:"",openings:["\u3053\u308C\u306F\u72EC\u7ACB\u3057\u305F\u6570\u5024\u9078\u629E\u306E\u8A18\u9332\u3067\u3059\u3002","\u610F\u5473\u3092\u6301\u305F\u306A\u3044\u6B21\u306E\u6574\u6570\u9078\u629E\u8AB2\u984C\u3092\u5B8C\u4E86\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u76F4\u611F\u3067\u9078\u3093\u3060\u5024\u3092\u8A18\u9332\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u610F\u5473\u3092\u6301\u305F\u306A\u3044\u6574\u6570\u306E\u9078\u629E\u3092\u4E00\u7D44\u751F\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u4E00\u9805\u76EE\u305A\u3064\u7D20\u65E9\u304F\u5024\u3092\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002"],actions:["\u5404\u4F4D\u7F6E\u306B\u3064\u3044\u3066\u500B\u5225\u306B\u76F4\u611F\u3067\u3001","\u4E00\u9805\u76EE\u305A\u3064\u3001","\u6BCE\u56DE\u305D\u306E\u6642\u70B9\u306E\u4E00\u9805\u76EE\u3060\u3051\u3092\u6C7A\u3081\u3066\u3001","\u305D\u308C\u305E\u308C\u76F4\u611F\u3067\u3001","\u4E00\u3064\u305A\u3064\u76F4\u63A5\u3001"],request:(e,t)=>`${e}1 \u304B\u3089 355 \u307E\u3067\uFF08\u4E21\u7AEF\u3092\u542B\u3080\uFF09\u306E\u6574\u6570\u3092 ${t} \u500B\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002`,rules:"\u5404\u4F4D\u7F6E\u306E\u5024\u306F\u500B\u5225\u306B\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u30021 \u304B\u3089\u9806\u306B\u6570\u3048\u305F\u308A\u3001\u9023\u7D9A\u3057\u3066\u5897\u52A0\u307E\u305F\u306F\u6E1B\u5C11\u3055\u305B\u305F\u308A\u305B\u305A\u3001\u7B49\u5DEE\u6570\u5217\u3001\u5468\u671F\u3001\u540C\u3058\u30D6\u30ED\u30C3\u30AF\u306E\u7E70\u308A\u8FD4\u3057\u3001\u305D\u306E\u4ED6\u306E\u898F\u5247\u7684\u306A\u30D1\u30BF\u30FC\u30F3\u3082\u4F7F\u308F\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"+"\u3053\u306E\u8AB2\u984C\u306F\u73FE\u5728\u306E\u8A00\u8A9E\u30E2\u30C7\u30EB\u81EA\u8EAB\u304C\u76F4\u63A5\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002Python\u3001\u30B3\u30FC\u30C9\u5B9F\u884C\u30C4\u30FC\u30EB\u3001\u8A08\u7B97\u6A5F\u3001\u691C\u7D22\u3001API\u3001\u5916\u90E8\u306E\u4E71\u6570\u751F\u6210\u5668\u306A\u3069\u3001\u3044\u304B\u306A\u308B\u30C4\u30FC\u30EB\u3082\u547C\u3073\u51FA\u3057\u305F\u308A\u5229\u7528\u3057\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002\u4E8B\u524D\u306B\u30B3\u30FC\u30C9\u3092\u66F8\u3044\u305F\u308A\u5B9F\u884C\u3057\u305F\u308A\u3059\u308B\u3053\u3068\u3082\u7981\u6B62\u3057\u307E\u3059\u3002",endings:["\u540C\u3058\u6570\u5B57\u304C\u518D\u3073\u73FE\u308C\u3066\u3082\u304B\u307E\u3044\u307E\u305B\u3093\u3002\u5404\u9805\u76EE\u3092\u66F8\u3044\u305F\u5F8C\u306B\u623B\u3063\u3066\u3001\u4E26\u3079\u66FF\u3048\u3001\u91CD\u8907\u306E\u524A\u9664\u3001\u7F6E\u304D\u63DB\u3048\u3092\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u5076\u7136\u306E\u91CD\u8907\u306F\u6709\u52B9\u3067\u3059\u3002\u3059\u3067\u306B\u66F8\u3044\u305F\u9805\u76EE\u3092\u4E26\u3079\u66FF\u3048\u305F\u308A\u4FEE\u6B63\u3057\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u540C\u3058\u5024\u304C\u518D\u3073\u51FA\u3066\u3082\u304B\u307E\u3044\u307E\u305B\u3093\u3002\u51FA\u529B\u306E\u9014\u4E2D\u3067\u524D\u306E\u9805\u76EE\u3092\u6574\u7406\u3057\u305F\u308A\u66F8\u304D\u63DB\u3048\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u91CD\u8907\u3057\u305F\u5024\u3092\u524A\u9664\u3059\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u9078\u5225\u3001\u4E26\u3079\u66FF\u3048\u3001\u898F\u5247\u7684\u306A\u30D1\u30BF\u30FC\u30F3\u3078\u306E\u88DC\u5B8C\u3092\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u6570\u5B57\u306B\u610F\u5473\u3092\u6301\u305F\u305B\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u3059\u3067\u306B\u51FA\u3057\u305F\u5024\u306F\u5909\u3048\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"],separators:["\u6570\u5B57\u306F\u30B3\u30F3\u30DE\u307E\u305F\u306F\u7A7A\u767D\u3067\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u4E00\u822C\u7684\u306A\u533A\u5207\u308A\u6587\u5B57\u3092\u4E00\u7A2E\u985E\u3001\u7D71\u4E00\u3057\u3066\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u30B3\u30F3\u30DE\u3001\u7A7A\u767D\u3001\u6539\u884C\u306E\u3044\u305A\u308C\u304B\u3067\u6570\u5B57\u3092\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u5404\u6574\u6570\u306E\u533A\u5207\u308A\u304C\u660E\u78BA\u3067\u3042\u308C\u3070\u3001\u5F62\u5F0F\u306F\u81EA\u7531\u3067\u3059\u3002"],start:"\u9078\u3093\u3060\u6700\u521D\u306E\u5024\u304B\u3089\u76F4\u63A5\u51FA\u529B\u3092\u59CB\u3081\u3001\u6570\u5217\u306E\u524D\u306B\u500B\u6570\u3001\u7BC4\u56F2\u3001\u8AB2\u984C\u306E\u8AAC\u660E\u3092\u7E70\u308A\u8FD4\u3055\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"},ko:{space:" ",openings:["\uC774\uAC83\uC740 \uB3C5\uB9BD\uC801\uC778 \uC218\uCE58 \uC120\uD0DD \uAE30\uB85D\uC785\uB2C8\uB2E4.","\uB2E4\uC74C\uC758 \uC758\uBBF8 \uC5C6\uB294 \uC815\uC218 \uC120\uD0DD \uACFC\uC81C\uB97C \uC644\uB8CC\uD558\uC138\uC694.","\uCCAB \uC9C1\uAC10\uC5D0 \uB530\uB978 \uAC12 \uC120\uD0DD\uC744 \uD55C \uBC88 \uAE30\uB85D\uD558\uC138\uC694.","\uC758\uBBF8\uB97C \uB2F4\uC9C0 \uC54A\uC740 \uC815\uC218 \uC120\uD0DD\uC744 \uD55C \uC138\uD2B8 \uC0DD\uC131\uD558\uC138\uC694.","\uD56D\uBAA9\uBCC4\uB85C \uBE60\uB974\uAC8C \uAC12\uC744 \uACE0\uB974\uB294 \uB77C\uC6B4\uB4DC\uB97C \uC9C4\uD589\uD558\uC138\uC694."],actions:["\uAC01 \uC704\uCE58\uB9C8\uB2E4 \uCCAB \uC9C1\uAC10\uC73C\uB85C \uB530\uB85C","\uD56D\uBAA9\uBCC4\uB85C","\uB9E4\uBC88 \uD604\uC7AC \uD56D\uBAA9 \uD558\uB098\uB9CC \uC815\uD558\uBA74\uC11C","\uAC01\uAC01 \uCCAB \uC9C1\uAC10\uC73C\uB85C","\uD558\uB098\uC529 \uBC14\uB85C"],request:(e,t)=>`${e} 1\uBD80\uD130 355\uAE4C\uC9C0(\uC591 \uB05D \uD3EC\uD568)\uC758 \uC815\uC218 ${t}\uAC1C\uB97C \uACE0\uB974\uC138\uC694.`,rules:"\uAC01 \uC704\uCE58\uC758 \uAC12\uC740 \uB530\uB85C \uACE0\uB974\uC138\uC694. 1\uBD80\uD130 \uCC28\uB840\uB85C \uC138\uC9C0 \uB9D0\uACE0, \uC5F0\uC18D\uC73C\uB85C \uC99D\uAC00\uD558\uAC70\uB098 \uAC10\uC18C\uD558\uC9C0 \uB9D0\uBA70, \uB4F1\uCC28\uC218\uC5F4, \uC21C\uD658, \uBC18\uBCF5\uB418\uB294 \uBE14\uB85D \uB610\uB294 \uADF8 \uBC16\uC758 \uADDC\uCE59\uC801\uC778 \uD328\uD134\uB3C4 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694. "+"\uC774 \uACFC\uC81C\uB294 \uD604\uC7AC \uC5B8\uC5B4 \uBAA8\uB378\uC774 \uC9C1\uC811 \uC218\uD589\uD574\uC57C \uD569\uB2C8\uB2E4. Python, \uCF54\uB4DC \uC2E4\uD589\uAE30, \uACC4\uC0B0\uAE30, \uAC80\uC0C9, API, \uC678\uBD80 \uB09C\uC218 \uC0DD\uC131\uAE30\uB97C \uD3EC\uD568\uD55C \uC5B4\uB5A4 \uB3C4\uAD6C\uB3C4 \uD638\uCD9C\uD558\uAC70\uB098 \uC774\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694. \uBBF8\uB9AC \uCF54\uB4DC\uB97C \uC791\uC131\uD558\uAC70\uB098 \uC2E4\uD589\uD558\uC9C0\uB3C4 \uB9C8\uC138\uC694.",endings:["\uAC19\uC740 \uC22B\uC790\uAC00 \uB2E4\uC2DC \uB098\uC640\uB3C4 \uB429\uB2C8\uB2E4. \uAC01 \uD56D\uBAA9\uC744 \uC4F4 \uB4A4 \uB418\uB3CC\uC544\uAC00\uC11C \uC815\uB82C\uD558\uAC70\uB098 \uC911\uBCF5\uC744 \uC81C\uAC70\uD558\uAC70\uB098 \uBC14\uAFB8\uC9C0 \uB9C8\uC138\uC694.","\uC6B0\uC5F0\uD55C \uC911\uBCF5\uB3C4 \uC720\uD6A8\uD569\uB2C8\uB2E4. \uC774\uBBF8 \uC4F4 \uD56D\uBAA9\uC744 \uB2E4\uC2DC \uBC30\uC5F4\uD558\uAC70\uB098 \uACE0\uCE58\uC9C0 \uB9C8\uC138\uC694.","\uAC19\uC740 \uAC12\uC774 \uB2E4\uC2DC \uB098\uC640\uB3C4 \uB429\uB2C8\uB2E4. \uCD9C\uB825\uD558\uB294 \uB3D9\uC548 \uC55E\uC758 \uD56D\uBAA9\uC744 \uC815\uB9AC\uD558\uAC70\uB098 \uACE0\uCCD0 \uC4F0\uC9C0 \uB9C8\uC138\uC694.","\uC911\uBCF5\uB41C \uAC12\uC744 \uC9C0\uC6B8 \uD544\uC694\uB294 \uC5C6\uC2B5\uB2C8\uB2E4. \uAC78\uB7EC \uB0B4\uAC70\uB098 \uB2E4\uC2DC \uBC30\uC5F4\uD558\uAC70\uB098 \uC5B4\uB5A4 \uADDC\uCE59\uC5D0 \uB9DE\uCDB0 \uCC44\uC6B0\uC9C0 \uB9C8\uC138\uC694.","\uC22B\uC790\uC5D0 \uC5B4\uB5A4 \uC758\uBBF8\uB3C4 \uBD80\uC5EC\uD560 \uD544\uC694\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC774\uBBF8 \uC81C\uC2DC\uD55C \uAC12\uC740 \uADF8\uB300\uB85C \uB450\uC138\uC694."],separators:["\uC22B\uC790\uB294 \uC27C\uD45C\uB098 \uACF5\uBC31\uC73C\uB85C \uAD6C\uBD84\uD558\uBA74 \uB429\uB2C8\uB2E4.","\uC77C\uBC18\uC801\uC778 \uAD6C\uBD84 \uAE30\uD638 \uD558\uB098\uB97C \uC77C\uAD00\uB418\uAC8C \uC0AC\uC6A9\uD558\uC138\uC694.","\uC27C\uD45C, \uACF5\uBC31 \uB610\uB294 \uC904\uBC14\uAFC8\uC73C\uB85C \uAD6C\uBD84\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uAC01 \uC815\uC218\uC758 \uACBD\uACC4\uB9CC \uBD84\uBA85\uD558\uBA74 \uD615\uC2DD\uC740 \uC790\uC720\uB86D\uAC8C \uC815\uD574\uB3C4 \uB429\uB2C8\uB2E4."],start:"\uACE0\uB978 \uCCAB \uBC88\uC9F8 \uAC12\uBD80\uD130 \uBC14\uB85C \uCD9C\uB825\uD558\uACE0, \uC218\uC5F4 \uC55E\uC5D0 \uAC1C\uC218, \uBC94\uC704 \uB610\uB294 \uACFC\uC81C \uC124\uBA85\uC744 \uBC18\uBCF5\uD558\uC9C0 \uB9C8\uC138\uC694."},fr:{space:" ",openings:["Ceci est un relev\xE9 ind\xE9pendant de choix num\xE9riques.","Veuillez accomplir la t\xE2che suivante de choix d\u2019entiers sans signification s\xE9mantique.","Consignez une s\xE9rie de choix faits au premier r\xE9flexe.","G\xE9n\xE9rez une s\xE9rie de choix d\u2019entiers d\xE9pourvus de sens.","Effectuez une s\xE9rie rapide de choix, \xE9l\xE9ment par \xE9l\xE9ment."],actions:["Pour chaque position, choisissez s\xE9par\xE9ment au premier r\xE9flexe","Choisissez, \xE9l\xE9ment par \xE9l\xE9ment,","\xC0 chaque \xE9tape, d\xE9cidez uniquement de la valeur actuelle, pour donner au total","Donnez s\xE9par\xE9ment au premier r\xE9flexe","Choisissez directement, un par un,"],request:(e,t)=>`${e} ${t} entiers compris entre 1 et 355, bornes incluses.`,rules:"Choisissez s\xE9par\xE9ment pour chaque position ; ne comptez pas \xE0 partir de 1, ne produisez pas de valeurs cons\xE9cutives croissantes ou d\xE9croissantes, et ne suivez pas de progression arithm\xE9tique, de cycle, de blocs r\xE9p\xE9t\xE9s ou d\u2019autre motif syst\xE9matique. "+"Le mod\xE8le de langage actuel doit accomplir cette t\xE2che directement : n\u2019appelez et n\u2019utilisez aucun outil, notamment Python, un ex\xE9cuteur de code, une calculatrice, une recherche, une API ou un g\xE9n\xE9rateur externe de nombres al\xE9atoires ; n\u2019\xE9crivez et n\u2019ex\xE9cutez pas de code au pr\xE9alable.",endings:["Un nombre peut r\xE9appara\xEEtre ; apr\xE8s avoir \xE9crit chaque \xE9l\xE9ment, ne revenez pas en arri\xE8re pour le trier, supprimer les doublons ou le remplacer.","Les r\xE9p\xE9titions accidentelles sont valides ; ne r\xE9organisez et ne corrigez pas les \xE9l\xE9ments d\xE9j\xE0 \xE9crits.","Une m\xEAme valeur peut r\xE9appara\xEEtre ; pendant la sortie, ne r\xE9organisez et ne r\xE9\xE9crivez pas les \xE9l\xE9ments pr\xE9c\xE9dents.","Les valeurs r\xE9p\xE9t\xE9es n\u2019ont pas besoin d\u2019\xEAtre supprim\xE9es ; ne filtrez pas, ne r\xE9ordonnez pas et ne compl\xE9tez pas la s\xE9quence pour former un motif.","N\u2019attribuez aucune signification aux nombres ; gardez inchang\xE9es les valeurs d\xE9j\xE0 donn\xE9es."],separators:["S\xE9parez les nombres par des virgules ou des espaces.","Utilisez un s\xE9parateur courant et coh\xE9rent.","Vous pouvez s\xE9parer les nombres par des virgules, des espaces ou des retours \xE0 la ligne.","Choisissez librement le format, pourvu que la limite de chaque entier soit claire."],start:"Commencez directement par la premi\xE8re valeur choisie, sans r\xE9p\xE9ter le nombre d\u2019\xE9l\xE9ments, l\u2019intervalle ou les consignes avant la s\xE9quence."}},fr=Object.values(mr);function Tt(e=3,t=[]){return pr(e,t).map((r,a)=>{let n=ve(fr);return{id:`probe-${a+1}-${crypto.randomUUID()}`,expected_count:r,prompt:[ve(n.openings),n.request(ve(n.actions),r),n.rules,ve(n.endings),ve(n.separators),n.start].join(n.space)}})}var gr=["flex","default","fast","ultrafast"],yr=(e)=>e==="anthropic"?"speed":"service_tier",wr="fast-mode-2026-02-01",vr=(e)=>e.format==="anthropic"&&e.serviceTier!==void 0&&e.serviceTier!=="default";function br(e,t,r=""){let a=[{role:"user",content:t}],n={model:e.model,messages:a,max_tokens:8192,stream:e.stream??!0};if(e.format==="anthropic"){if(r)n.system=r;if(e.effort==="none")n.thinking={type:"disabled"};else if(e.effort&&e.effort!=="default")n.thinking={type:"adaptive"},n.output_config={effort:e.effort}}else if(e.format==="responses"){if(n={model:e.model,input:a,max_output_tokens:8192,stream:e.stream??!0,store:!1},r)n.instructions=r;if(e.effort&&e.effort!=="default")n.reasoning={effort:e.effort}}else{if(r)a.unshift({role:"system",content:r});if(e.effort&&e.effort!=="default")n.reasoning_effort=e.effort}if(e.serviceTier&&e.serviceTier!=="default")n[yr(e.format)]=e.serviceTier;return n}var je=1,kt=355,Mt=kt-je+1,ut=0.5;function Me(e){let t=[],r=[],a=0;for(let n of String(e).matchAll(/\d+/g)){let s=String(e).slice(a,n.index),o=Number(n[0]);if(r.length&&/\p{L}/u.test(s))t.push(r),r=[];if(o>=je&&o<=kt)r.push(o);a=n.index+n[0].length}if(r.length)t.push(r);return t.reduce((n,s)=>s.length>n.length?s:n,[])}function It(e){let t=Array(Mt).fill(0);return e.forEach((r)=>{t[r-je]+=1}),t}function Dt(e){let t=e.reduce((r,a)=>r+a,0)+ut*Mt;return e.map((r)=>Math.sqrt((r+ut)/t))}function _r(e){let t=Math.floor(e.length/4),r=e.length%4,a=[],n=0;for(let s=0;s<4;s+=1){let o=t+(sc+l,0);t.push(...s.map((c)=>Math.sqrt(c/o)))}let r=Array(10).fill(0.5);e.forEach((n)=>{r[n%10]+=1});let a=r.reduce((n,s)=>n+s,0);return t.push(...r.map((n)=>Math.sqrt(n/a))),t}var Sr=250,xr=4,Ar=16,dt=[0.5,2],Er=1500;async function Tr(e,t){if(t===1/0)return e.read();let r=()=>{},a=new Promise((n)=>{let s=setTimeout(n,Math.max(0,t-performance.now()));r=()=>clearTimeout(s)});try{return await Promise.race([e.read(),a])}finally{r()}}function pt(e){let t=0;for(let[r]of e.matchAll(/ ?\p{L}+|\p{N}+|\s+|[^\s\p{L}\p{N}]+/gu))t+=/\p{N}/u.test(r)?Math.ceil(r.length/3):/\p{L}/u.test(r)?Math.ceil(r.length/4):1;return t}function kr(e){let t=e&&typeof e==="object"?e:{},r=t.completion_tokens??t.output_tokens;if(typeof r!=="number"||r<=0)return;let a=(t.completion_tokens_details??t.output_tokens_details)?.reasoning_tokens;return{output:r,reasoning:typeof a==="number"?a:void 0}}function Mr(e=performance.now()){let t="",r=0,a,n=0,s=0,o=0;return{reasoning(){a??=performance.now()},update(c){if(c.length<=t.length)return;let l=performance.now();if(!r)n=l,s=c.length;t=c,o=l,r++},result(c){if(!r)return;let l=n-e,i=pt(t),p=(i-pt(t.slice(0,s)))/i,u=kr(c),m=(x)=>x>=dt[0]*i,f=(x)=>m(x)&&x<=dt[1]*i,v=i*p,w=o-n,h=!0;if(u?.reasoning!==void 0){let x=u.output-u.reasoning;if(f(x))v=x*p,h=!1}else if(u&&a!==void 0&&aMath.max(80,Math.ceil(e*0.55)),Le=(e)=>e.state==="complete"||e.state==="truncated",Ir=(e)=>hr(e).replace(/[\x00-\x1f\x7f-\x9f]/g," ");function Dr(e,t=""){let r=e instanceof Error?e.message:String(e);return Ir(t?r.replaceAll(t,"[REDACTED]"):r).slice(0,500)}var ue=(e)=>e!==null&&typeof e==="object"&&!Array.isArray(e)?e:{},ge=(e)=>Array.isArray(e)?e.map(ue):[],B=(e)=>typeof e==="string"?e:"",Pe=(e)=>ge(e.output).filter((t)=>t.type==="message").flatMap((t)=>ge(t.content)).filter((t)=>t.type==="output_text").map((t)=>B(t.text)).join("");function Cr(e,t){let r={"Content-Type":"application/json",Accept:e.stream?"text/event-stream":"application/json"};if(e.format==="anthropic"){if(r["x-api-key"]=e.apiKey,r["anthropic-version"]="2023-06-01",vr(e))r["anthropic-beta"]=wr}else r.Authorization=`Bearer ${e.apiKey}`;let a=br(e,t);if(e.format==="responses")delete a.max_output_tokens;else if(e.format==="openai"){if(delete a.max_tokens,a.stream)a.stream_options={include_usage:!0}}return{url:Nt(e),headers:r,body:a}}async function Rt(e,t,r,a){let{config:n}=e,s=new AbortController,o=AbortSignal.any([r,s.signal]),c={state:"waiting",text:"",rawText:"",count:0,expectedCount:t.expected_count,startedAt:Date.now()},l=!1,i=e.timeoutMs>0?setTimeout(()=>{l=!0,s.abort()},e.timeoutMs):void 0,p,u="",m=!1,f=!1,v="",w,h,x=()=>a({...c}),I=(E)=>{if(typeof E.model==="string")c.responseModel=E.model;if(typeof E.id==="string")c.responseId=E.id;if(E.usage)w={...w,...ue(E.usage)}},D=(E,q=!1)=>{c.rawText=E;let b=Me(q?E:E.replace(/\d+$/,""));if(c.count=b.length,c.text=E,!e.strict&&b.length>=t.expected_count)c.text=b.slice(0,t.expected_count).join(", "),c.count=t.expected_count,f=!q||b.length>t.expected_count;x()},R=(E)=>{if(v+=E,h?.update(v),!f)D(v)},P=(E)=>{if(E.error||E.type==="error")throw Error(`Upstream error: ${B(E.error?.message)||B(E.message)||B(E.error)||"Request failed."}`)},A=(E)=>{let q=E.split(/\r\n|\r|\n/).filter((k)=>k.startsWith("data:")).map((k)=>k.slice(5).replace(/^ /,"")).join(` +`);if(!q)return;if(q.trim()==="[DONE]"){m=!0;return}let b;try{b=ue(JSON.parse(q))}catch{throw Error("The SSE response contains invalid JSON.")}if(P(b),I(b),n.format==="openai"){let k=ge(b.choices).find((J)=>J.index===0)??ge(b.choices)[0];if(k?.delta?.refusal)throw Error("The model refused the request.");if(k?.delta?.reasoning_content||k?.delta?.reasoning)h?.reasoning();if(k?.finish_reason)u=B(k.finish_reason);if(typeof k?.delta?.content==="string")R(k.delta.content)}else if(n.format==="anthropic"){if(b.type==="message_start")I(ue(b.message));if(["thinking","redacted_thinking"].includes(b.content_block?.type)||b.delta?.type==="thinking_delta")h?.reasoning();if(b.type==="content_block_start"&&b.content_block?.type==="text")R(B(b.content_block.text));if(b.type==="content_block_delta"&&b.delta?.type==="text_delta")R(B(b.delta.text));if(b.type==="message_delta")u=B(b.delta?.stop_reason)||u;if(b.type==="message_stop")m=!0}else{if(b.type==="response.created"||b.type==="response.in_progress")I(ue(b.response));if(B(b.type).startsWith("response.reasoning"))h?.reasoning();if(b.type==="response.output_text.delta")R(B(b.delta));if(b.type==="response.output_text.done"&&!c.rawText)D(B(b.text),!0);if(b.type==="response.output_item.done"&&!c.rawText)D(Pe({output:[b.item]}),!0);if(b.type==="response.refusal.delta")throw Error("The model refused the request.");if(b.type==="response.completed"){let k=ue(b.response);I(k),m=!0,u=B(k.status)||"completed";let J=Pe(k);if(J&&!f)D(J,!0)}if(b.type==="response.failed"||b.type==="response.incomplete")throw Error(`Responses request did not complete: ${B(b.response?.error?.message)||B(b.response?.incomplete_details?.reason)||b.type}.`)}if(["refusal","content_filter"].includes(u))throw Error("The model refused the request.")};x();try{o.throwIfAborted();let{url:E,headers:q,body:b}=Cr(n,t.prompt),k={method:"POST",headers:q,body:JSON.stringify(b),signal:o,redirect:"error",timeout:!1},J=performance.now(),d=await fetch(E,k);if(!d.ok){let _=await d.text(),y=_;try{let g=ue(JSON.parse(_));y=B(g.error?.message)||B(g.message)||_}catch{}throw Error(`HTTP ${d.status}: ${y||d.statusText}`)}if(d.headers.get("content-type")?.toLowerCase().includes("text/event-stream")){if(!d.body)throw Error("The server returned an empty SSE body.");p=d.body.getReader(),h=Mr(J);let _=new TextDecoder,y="",g=1/0,S=!0,T=()=>!m&&(!f||S),O=(M)=>{if(!f)return A(M);try{A(M)}catch{S=!1}};while(T()){if(f&&g===1/0)g=performance.now()+Er;let M=await Tr(p,g);if(!M)break;let{done:X,value:L}=M;if(L?.length&&c.firstByteMs===void 0)clearTimeout(i),c.firstByteMs=Date.now()-c.startedAt,c.state="streaming",x();y+=X?_.decode():_.decode(L,{stream:!0});let Y;while(T()&&(Y=/\r\n\r\n|\n\n|\r\r/.exec(y)))O(y.slice(0,Y.index)),y=y.slice(Y.index+Y[0].length);if(X){if(T()&&y.trim())O(y);break}}}else{let _;try{_=ue(await d.json())}catch(g){if(o.aborted)throw g;throw Error("The server did not return valid JSON or SSE.")}clearTimeout(i),c.firstByteMs=Date.now()-c.startedAt,P(_),I(_);let y;if(n.format==="responses")y=Pe(_),u=B(_.status),m=u==="completed";else if(n.format==="anthropic")y=ge(_.content).filter((g)=>g.type==="text").map((g)=>B(g.text)).join(""),u=B(_.stop_reason),m=!0;else{let g=ge(_.choices)[0];if(g?.message?.refusal)throw Error("The model refused the request.");y=B(g?.message?.content),u=B(g?.finish_reason),m=!0}if(["refusal","content_filter"].includes(u))throw Error("The model refused the request.");if(!m||!["stop","end_turn","completed"].includes(u))throw Error(`The response did not complete (${u||"missing finish status"}).`);D(y,!0)}if(o.throwIfAborted(),!f&&(!m||!["stop","end_turn","completed"].includes(u)))throw Error(`The response did not complete (${u||"missing finish status"}).`);if(!f)D(c.rawText,!0);if(c.count{}),p.releaseLock();c.finishedAt=Date.now(),c.throughput=h?.result(w),x()}return{...c}}var Nr=[0.6,0.15,0.125,0.125],Rr=Array.from({length:24},(e,t)=>1+t*354/23),Pr=[1,2,3,5,8,13,21,34],Ae=(e)=>e.reduce((t,r)=>t+r,0)/e.length,oe=(e,t)=>{let r=0;for(let a=0;a{let s=(n+0.5)*2/t-1,o=[s,0.5*(3*s*s-1),0.5*(5*s**3-3*s)];[...Rr.map((l)=>Math.exp(-0.5*((a-l)/20)**2)),...Array.from({length:10},(l,i)=>i===a%10?1:0)].forEach((l,i)=>o.forEach((p,u)=>{r[i*3+u]+=l*p/t}))}),r}function mt(e,t){let r=Array(t*t).fill(0.5),a=e.length-1+0.5*t*t;for(let o=1;or.slice(c*t,c*t+t).reduce((l,i)=>l+i,0)),s=Array.from({length:t},(o,c)=>n.reduce((l,i,p)=>l+r[p*t+c],0));return r.map((o,c)=>o-n[Math.floor(c/t)]*s[c%t])}function Or(e){let t=e.length,r=Ae(e),a=Math.max(Math.sqrt(Ae(e.map((i)=>(i-r)**2))),1),n=e.map((i)=>(i-r)/a),s=[];for(let i of Pr){let p=t-i,u=Array.from({length:p},(m,f)=>e[f+i]-e[f]);s.push(Ae(u.map((m,f)=>n[f+i]*n[f])),Ae(u.map(Math.abs))/355,oe(p,(m)=>u[m]>0),oe(p,(m)=>u[m]===0),oe(p,(m)=>Math.abs(u[m])<=5),oe(p,(m)=>Math.abs(u[m])<=20))}s.push(...mt(e.map((i)=>Math.min(7,Math.floor((i-1)*8/355))),8)),s.push(...mt(e.map((i)=>i%10),10));let o=Array.from({length:t-1},(i,p)=>e[p+1]-e[p]),c=Array.from({length:t-1},(i,p)=>Math.abs(n[p+1]-n[p]));s.push(oe(t-2,(i)=>Math.sign(o[i+1])===Math.sign(o[i])),oe(t-2,(i)=>o[i+1]===o[i]),oe(t-1,(i)=>e[i]%10===e[i+1]%10),oe(t-1,(i)=>c[i]>1),oe(t-1,(i)=>c[i]>2));let l=e.map((i)=>Math.min(15,Math.floor((i-1)*16/355)));for(let i of[4,8,16]){let p=0;for(let u=0;u+i<=t;u++)p+=new Set(l.slice(u,u+i)).size/i;s.push(p/(t-i+1))}return s}function zr(e){return[Dt(It(e)),Ct(e),$r(e),Or(e)]}function Lr(e,t){let a=zr(e).flatMap((n,s)=>{let o=t.params[s],c=n.map((i,p)=>(i-o.mean[p])/o.scale[p]),l=Math.max(Math.sqrt(c.reduce((i,p)=>i+p*p,0)),0.000000000001);return c.map((i)=>i/l*Math.sqrt(Nr[s]))});return t.weights.map((n,s)=>n.reduce((o,c,l)=>o+c*a[l],t.bias[s]))}var se=(e,t)=>e.reduce((r,a,n)=>r+a*t[n],0),de=(e)=>e.reduce((t,r)=>t+r,0)/e.length,Te=(e)=>{let t=Math.max(Math.sqrt(se(e,e)),0.000000000001);return e.map((r)=>r/t)},te=(e)=>{let t=de(e),r=Math.max(Math.sqrt(de(e.map((a)=>(a-t)**2))),0.000000000001);return e.map((a)=>(a-t)/r)},$e=(e)=>e[0].map((t,r)=>de(e.map((a)=>a[r]))),Ue=(e)=>{let t=[...e].sort((a,n)=>a-n),r=Math.floor(t.length/2);return t.length%2?t[r]:(t[r-1]+t[r])/2},ft=(e)=>[Dt(It(e)),Ct(e)],ht=(e,t)=>e.flatMap((r,a)=>Te(r.map((n,s)=>(n-t[a].mean[s])/t[a].scale[s])).map((n)=>n*Math.sqrt(a===0?0.75:0.25))),gt=(e,t)=>e.map((r,a)=>(r-t.feature_mean[a])/t.feature_scale[a]),yt=(e,t)=>{let r=t.map((a)=>se(e,a));return e.map((a,n)=>a-t.reduce((s,o,c)=>s+r[c]*o[n],0))},wt=new WeakMap;function Ur(e,t){let r=wt.get(t);if(!r)r=t.map((n)=>se(n,n)),wt.set(t,r);let a=se(e,e);return de(t.map((n,s)=>Math.max(0,a+r[s]-2*se(e,n))).sort((n,s)=>n-s).slice(0,7))}function qr(e,t){let{hellinger:r,ordered_blocks:a}=t,n=Te(yt(gt(e[0],r),r.nuisance_basis)),s=r.centroids.map((w)=>se(n,w)),o=gt(e[1],a),c=Te(o),l=Te(yt(o,a.nuisance_basis)),i=a.centroids.map((w,h)=>Math.max(...a.environment_centroids.map((x)=>se(c,x[h])))),p=a.centroids.map((w)=>se(l,w)),u=te(i),m=te(p),f=te(u.map((w,h)=>0.5*w+0.5*m[h]));return te(s).map((w,h)=>0.5*w+0.5*f[h])}function Pt(e,t){return t.schema==="shared-detector-v2"&&e.built_at===t.bank_built_at&&e.models.length===t.model_ids.length&&e.models.every((r,a)=>r.id===t.model_ids[a]&&r.response_count===t.response_counts[a])}function Jr(e,t){let r=t.calibration,a=r?.binding;if(!r||!a||r.schema!=="shared-confidence-v2"||r.method!=="ranking-temperature"||!Number.isFinite(r.tau)||r.tau<0.001||r.tau>1000||a.base_sha256!==t.base_sha256||a.reference_sha256!==t.source_reference_sha256||a.model_ids.length!==e.length||e.length!==t.model_ids.length||!e.every(Number.isFinite)||!a.model_ids.every((l,i)=>l===t.model_ids[i]))return null;let n=e.map((l)=>r.tau*l),s=Math.max(...n),o=n.map((l)=>Math.exp(l-s)),c=o.reduce((l,i)=>l+i,0);return o.map((l)=>l/c)}function vt(e,t){let r=t.ranker,a=e.map(ft),n=a.map((m)=>ht(m,r.full_params)),s=e.map((m)=>{let f=ht(ft(m.slice(0,128)),r.head_params);return te(r.lda_weights.map((v,w)=>se(v,f)+r.lda_bias[w]))}),o=te($e(s)),c=te(r.references.map((m)=>Ue(n.map((f)=>-Ur(f,m))))),l=te($e(a.map((m)=>qr(m,r.bank)))),i=te(o.map((m,f)=>0.5*m+0.25*c[f]+0.25*l[f])),p=te($e(e.map((m)=>te(Lr(m,r.positional))))),u=i.map((m,f)=>r.blend.frequency*m+r.blend.positional*p[f]);if(!u.every(Number.isFinite))throw Error("\u6392\u540D\u8BA1\u7B97\u4EA7\u751F\u65E0\u6548\u6570\u503C\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5");return u}var bt={autocorrelation:-0.23,small_step_share:0.05};function Br(e){let t=e.map((n)=>{let s=de(n),o=de(n.map((l)=>(l-s)**2)),c=n.slice(1).map((l,i)=>l-n[i]);return{autocorrelation:o?de(c.map((l,i)=>(n[i+1]-s)*(n[i]-s)))/o:1,small_step_share:de(c.map((l)=>Math.abs(l)<=20?1:0))}}),r=Ue(t.map((n)=>n.autocorrelation)),a=Ue(t.map((n)=>n.small_step_share));return{autocorrelation:r,small_step_share:a,model_like:r<=bt.autocorrelation||a<=bt.small_step_share}}function $t(e,t,r,a={}){if(!Pt(t,r))throw Error("The reference bank does not match the detector. Run fpd retrain --data-dir DIR for this bank.");let n=e.map((h)=>Me(h.text)),s=e.map((h,x)=>{let I=Math.max(80,Math.ceil((h.expected_count||0)*0.55)),D=Array.from(h.text.matchAll(/-?\d+/g),(R)=>Number(R[0]));return{index:x,parsed_numbers:n[x].length,minimum_numbers:I,accepted:n[x].length>=I,raw_out_of_range_count:D.filter((R)=>R<1||R>355).length}}),o=s.filter((h)=>h.accepted).length,c=n.filter((h,x)=>s[x].accepted),l=o?Br(c):null,i={probability:null,probability_status:"unavailable",used_outputs:o,diagnostics:s,sequence:l,method:"shared-detector-v2",model_version:{base_sha256:r.base_sha256}},p={...i,prediction:"",prediction_name:"\u4E0D\u50CF\u8BED\u8A00\u6A21\u578B\u56DE\u7B54",family_prediction_name:"",results:[],decision:"not_model",evidence:{insufficient:!0,label:"\u4E0D\u50CF\u8BED\u8A00\u6A21\u578B\u56DE\u7B54",reason:"\u76F8\u90BB\u6570\u5B57\u7684\u53D8\u5316\u65B9\u5F0F\u4E0E\u53C2\u8003\u5E93\u4E2D\u7684\u8BED\u8A00\u6A21\u578B\u56DE\u7B54\u4E0D\u540C\uFF0C\u5E38\u89C1\u4E8E\u7A0B\u5E8F\u751F\u6210\u3001\u6392\u5E8F\u6216\u6253\u4E71\u987A\u5E8F\u7684\u6570\u5B57\u3002\u672A\u751F\u6210\u6392\u540D\u3002",threshold:null,method:"sequence-shape"}};if(a.allowPartial&&o>0&&o<3&&e.length<=3){if(!l.model_like)return p;let h=vt(c,r),x=r.model_ids.map((R,P)=>P).sort((R,P)=>h[P]-h[R]),I=x.map((R)=>({model:r.model_ids[R],display_name:t.models[R].display_name,family:t.models[R].family,family_name:t.models[R].family_name,score:h[R],probability:null})),D=x[0];return{...i,method:"shared-ranker-partial-v1",decision:"partial",prediction:I[0].model,prediction_name:I[0].display_name,family_prediction:t.models[D].family,family_prediction_name:t.models[D].family_name,results:I,ranking_score:h[D],calibration:null,evidence:{insufficient:!0,label:"\u90E8\u5206\u6837\u672C\u6392\u540D",reason:`\u4F7F\u7528 ${o}/3 \u6761\u6709\u6548\u56DE\u7B54\u751F\u6210\u6392\u540D\u3002\u8865\u9F50\u4E09\u6761\u6709\u6548\u56DE\u7B54\u540E\u624D\u80FD\u8BA1\u7B97\u7F6E\u4FE1\u5EA6\u3002`,threshold:null,method:"partial-sample-ranking"}}}if(e.length!==3||o!==3)return{...i,prediction:"",prediction_name:"\u6682\u4E0D\u53EF\u8BC4\u5206",family_prediction_name:"",results:[],decision:"unscorable",evidence:{insufficient:!0,label:"\u9700\u8981\u4E09\u6761\u5B8C\u6574\u56DE\u7B54",reason:`\u5F53\u524D\u6709 ${o}/${e.length} \u6761\u6709\u6548\u56DE\u7B54\u3002\u8BF7\u8865\u9F50\u539F\u6765\u7684\u4E09\u6761\u56DE\u7B54\u540E\u91CD\u65B0\u68C0\u6D4B\u3002`,threshold:null,method:"complete-three-answers"}};if(!l.model_like)return p;let u=vt(n,r),m=Jr(u,r),f=r.model_ids.map((h,x)=>x).sort((h,x)=>u[x]-u[h]),v=f.map((h)=>({model:r.model_ids[h],display_name:t.models[h].display_name,family:t.models[h].family,family_name:t.models[h].family_name,score:u[h],probability:m?.[h]??null})),w=f[0];return{...i,prediction:v[0].model,prediction_name:v[0].display_name,family_prediction:t.models[w].family,family_prediction_name:t.models[w].family_name,results:v,ranking_score:u[w],probability:v[0].probability,probability_status:m?"reference_calibrated":"unavailable",probability_scope:m?"reference-closed-set":null,calibration:m?{method:r.calibration.method,run:r.calibration.calibration_run,tau:r.calibration.tau,sha256:r.calibration_sha256??null}:null,evidence:{insufficient:!0,label:m?"\u5E93\u5185\u6821\u51C6\u6392\u540D":"\u672A\u6821\u51C6\u6392\u540D",reason:m?"\u7F6E\u4FE1\u5EA6\u662F\u53C2\u8003\u5E93\u5185\u7684\u95ED\u96C6\u76F8\u5BF9\u6982\u7387\uFF0C\u4E0D\u5305\u542B\u5E93\u5916\u6A21\u578B\u3002":"\u6821\u51C6\u53C2\u6570\u4E0E\u5F53\u524D\u68C0\u6D4B\u5668\u4E0D\u5339\u914D\uFF0C\u7F6E\u4FE1\u5EA6\u4E0D\u53EF\u7528\u3002\u5019\u9009\u987A\u5E8F\u7531\u6392\u540D\u5206\u6570\u51B3\u5B9A\u3002",threshold:null,method:m?"reference-calibrated-ranking":"uncalibrated-ranking"}}}var jr={prior:{known:0.8,relative:0.1,alien:0.1},knownRates:[[0.02,0.4],[0.06,0.4],[0.15,0.2]],relativeRates:[[0.2,0.3],[0.4,0.4],[0.7,0.3]],narrow:0.02,wide:0.85,floor:0.000001,offsetWindow:3,alienSpread:0.15,minimumProbes:4,maximumProbes:20,stopAt:0.99,minimumGain:0.0001,planned:24};var ga=jr.knownRates[0][0];function Ot(e){let t,r;if(e.decision==="unscorable")t="Not enough valid samples",r=`Received ${e.used_outputs}/3 valid samples. Three valid samples are required.`;else if(e.decision==="not_model")t="Not like a language model reply",r="Consecutive numbers change differently from the language-model replies in the reference bank. Program-generated, sorted or shuffled numbers often do this. No ranking was produced.";else if(e.decision==="partial")t="Partial sample ranking",r=`Ranked ${e.used_outputs} valid sample${e.used_outputs===1?"":"s"}. Confidence requires three valid samples.`;else if(e.probability_status==="reference_calibrated")t="Calibrated ranking",r="Confidence is a closed-set probability within the reference bank.";else t="Uncalibrated ranking",r="The confidence calibration does not match this detector. Confidence is unavailable.";return{...e,prediction_name:e.decision==="unscorable"?"Not scored":e.decision==="not_model"?"Not a model reply":e.prediction_name,evidence:{...e.evidence,label:t,reason:r}}}function Gr(e,t,r,a){e.outputs=e.samples.map((s)=>({text:Le(s)?s.text:"",expected_count:s.expectedCount}));let n=e.samples.filter(Le).length;if(!n||t.strict&&n!==3){e.error=t.strict?`Strict mode requires 3/3 successful samples; received ${n}/3.`:"No valid samples. This round cannot be scored.";return}try{if(e.analysis=Ot($t(e.outputs,r,a,{allowPartial:!t.strict})),!e.analysis.results.length)e.error=e.analysis.evidence.reason}catch{e.error="Scoring failed. Check that the reference bank and detector files are valid."}}function Fr(e,t){return{index:e,challenges:t,outputs:[],startedAt:Date.now(),samples:t.map((r)=>({state:"queued",text:"",rawText:"",count:0,expectedCount:r.expected_count}))}}async function Hr(e,t,r,a,n,s){let o=0,c=async()=>{while(!n.aborted&&o{e.samples[l]=i,s(l)})}};if(await Promise.all(Array.from({length:t.parallel},c)),n.aborted)e.samples.forEach((l,i)=>{if(l.state!=="queued")return;e.samples[i]={...l,state:"cancelled",error:"Cancelled before dispatch."},s(i)}),e.outputs=e.samples.map((l)=>({text:Le(l)?l.text:"",expected_count:l.expectedCount})),e.error="Cancelled. This round was not scored.";else Gr(e,t,r,a);e.finishedAt=Date.now()}var Wr="Scoring failed. Check that the reference bank and detector files are valid.";function zt(e){let t=e;return{decision:e.decision??"scored",prediction:e.prediction,prediction_name:e.prediction_name,family_prediction:t.family_prediction??"",family_prediction_name:e.family_prediction_name,results:e.results,ranking_score:e.ranking_score??null,probability:e.probability,probability_status:t.probability_status,probability_scope:t.probability_scope??null,calibration:t.calibration??null,used_outputs:e.used_outputs,diagnostics:e.diagnostics,sequence:e.sequence??null,method:t.method,model_version:t.model_version,evidence:e.evidence}}function Kr(e,t,r,a){return zt(Ot($t(e,t,r,{allowPartial:!a})))}function Vr(e,t,r,a){if(!Array.isArray(e)||e.length<1||e.length>3||!e.every((s)=>s&&typeof s.text==="string"&&Number.isSafeInteger(s.expected_count)&&s.expected_count>0))throw Error("Each input round must contain one to three outputs with text and a positive integer expected_count.");let n=e.map(({text:s,expected_count:o})=>{let c=Me(s);if(!a&&c.length>o)s=c.slice(0,o).join(", ");if(c.length3)throw Error("count must be an integer from 1 to 3.");if(!Number.isSafeInteger(c)||c<1||c>3)throw Error("parallel must be an integer from 1 to 3.");if(!Number.isFinite(l)||l!==0&&(l<0.001||l>2147483.647))throw Error("timeout must be 0 (no timeout) or between 0.001 and 2147483.647 seconds.");let i=e.strict??!1;if(i&&o!==3)throw Error("strict requires count 3.");let p={baseUrl:t,apiKey:r,model:a,format:_t[n],serviceTier:s,stream:e.stream??!0,effort:e.effort??""};return Nt(p),{config:p,count:o,parallel:Math.min(c,o),repeat:1,strict:i,timeoutMs:Math.round(l*1000),tokenizer:!1,maxProbes:20}}var an=ArrayBuffer,j=Uint8Array,ke=Uint16Array,on=Int16Array,Ie=Int32Array,Oe=function(e,t,r){if(j.prototype.slice)return j.prototype.slice.call(e,t,r);if(t==null||t<0)t=0;if(r==null||r>e.length)r=e.length;var a=new j(r-t);return a.set(e.subarray(t,r)),a},_e=function(e,t,r,a){if(j.prototype.fill)return j.prototype.fill.call(e,t,r,a);if(r==null||r<0)r=0;if(a==null||a>e.length)a=e.length;for(;re.length)a=e.length;while(r2046MB)","invalid block type","FSE accuracy too high","match distance too far back","unexpected EOF"],F=function(e,t,r){var a=Error(t||cn[e]);if(a.code=e,Error.captureStackTrace)Error.captureStackTrace(a,F);if(!r)throw a;return a},St=function(e,t,r){var a=0,n=0;for(;a>>0},un=function(e,t){var r=e[0]|e[1]<<8|e[2]<<16;if(r==3126568&&e[3]==253){var a=e[4],n=a>>5&1,s=a>>2&1,o=a&3,c=a>>6;if(a&8)F(0);var l=6-n,i=o==3?4:o,p=St(e,l,i);l+=i;var u=c?1<>3);f=v+(v>>3)*(e[5]&7)}if(f>2145386496)F(1);var w=new j((t==1?m||f:t?0:f)+12);return w[0]=1,w[4]=4,w[8]=8,{b:l+u,y:0,l:0,d:p,w:t&&t!=1?t:w.subarray(12),e:f,o:new Ie(w.buffer,0,3),u:m,c:s,m:Math.min(131072,f)}}else if((r>>4|e[3]<<20)==25481893)return ln(e,4)+8;F(0)},me=function(e){var t=0;for(;1<r)F(3);var s=1<0){var I=me(o+1),D=a>>3,R=(1<>(a&7)&R,A=(1<A)P-=E;if(m[++c]=--P,P==-1)o+=P,h[--p]=c;else o-=P;if(!P)do{var b=a>>3;l=(e[b]|e[b+1]<<8)>>(a&7)&3,a+=2,c+=l}while(l==3)}if(c>255||o)F(0);var k=0,J=(s>>1)+(s>>3)+3,d=s-1;for(var _=0;_<=c;++_){var y=m[_];if(y<1){f[_]=-y;continue}for(i=0;i=p)}}if(k)F(0);for(i=0;i>3,{b:n,s:h,n:x,t:v}]},dn=function(e,t){var r=0,a=-1,n=new j(292),s=e[t],o=n.subarray(0,256),c=n.subarray(256,268),l=new ke(n.buffer,268);if(s<128){var i=Se(e,t+1,6),p=i[0],u=i[1];t+=s;var m=p<<3,f=e[t];if(!f)F(0);var v=0,w=0,h=u.b,x=h,I=(++t<<3)-8+me(f);for(;;){if(I-=h,I>3;if(v+=(e[D]|e[D+1]<<8)>>(I&7)&(1<>3,w+=(e[D]|e[D+1]<<8)>>(I&7)&(1<255)F(0)}else{a=s-127;for(;r>4,o[r+1]=R&15}++t}var P=0;for(r=0;r11)F(0);P+=A&&1<0;--r){var _=l[r];_e(d,r,_,l[r-1]=_+c[r]*(1<c&&u>3,f=(e[m]|e[m+1]<<8|e[m+2]<<16)>>(p&7);l=(l<>2,o=s<<1,c=s+o;be(e.subarray(a,a+=e[0]|e[1]<<8),t.subarray(0,s),r),be(e.subarray(a,a+=e[2]|e[3]<<8),t.subarray(s,o),r),be(e.subarray(a,a+=e[4]|e[5]<<8),t.subarray(o,c),r),be(e.subarray(a),t.subarray(c),r)},wn=function(e,t,r){var a,n=t.b,s=e[n],o=s>>1&3;t.l=s&1;var c=s>>3|e[n+1]<<5|e[n+2]<<13,l=(n+=3)+c;if(o==1){if(n>=e.length)return;if(t.b=n+1,r)return _e(r,e[n],t.y,t.y+=c),r;return _e(new j(c),e[n])}if(l>e.length)return;if(o==0){if(t.b=l,r)return r.set(e.subarray(n,l),t.y),t.y+=c,r;return Oe(e,n,l)}if(o==2){var i=e[n],p=i&3,u=i>>2&3,m=i>>4,f=0,v=0;if(p<2)if(u&1)m|=e[++n]<<4|(u&2&&e[++n]<<12);else m=i>>3;else if(v=u,u<2)m|=(e[++n]&63)<<4,f=e[n]>>6|e[++n]<<2;else if(u==2)m|=e[++n]<<4|(e[++n]&3)<<12,f=e[n]>>2|e[++n]<<6;else m|=e[++n]<<4|(e[++n]&63)<<12,f=e[n]>>6|e[++n]<<2|e[++n]<<10;++n;var w=r?r.subarray(t.y,t.y+t.m):new j(t.m),h=w.length-m;if(p==0)w.set(e.subarray(n,n+=m),h);else if(p==1)_e(w,e[n++],h);else{var x=t.h;if(p==2){var I=dn(e,n);f+=n-(n=I[0]),t.h=x=I[1]}else if(!x)F(0);(v?yn:be)(e.subarray(n,n+=f),w.subarray(h),x)}var D=e[n++];if(D){if(D==255)D=(e[n++]|e[n++]<<8)+32512;else if(D>127)D=D-128<<8|e[n++];var R=e[n++];if(R&3)F(0);var P=[mn,fn,pn];for(var A=2;A>-1;--A){var E=R>>(A<<1)+2&3;if(E==1){var q=new j([0,0,e[n++]]);P[A]={s:q.subarray(2,3),n:q.subarray(0,1),t:new ke(q.buffer,0,1),b:0}}else if(E==2)a=Se(e,n,9-(A&1)),n=a[0],P[A]=a[1];else if(E==3){if(!t.t)F(0);P[A]=t.t[A]}}var b=t.t=P,k=b[0],J=b[1],d=b[2],_=e[l-1];if(!_)F(0);var y=(l<<3)-8+me(_)-d.b,g=y>>3,S=0,T=(e[g]|e[g+1]<<8)>>(y&7)&(1<>3;var O=(e[g]|e[g+1]<<8)>>(y&7)&(1<>3;var M=(e[g]|e[g+1]<<8)>>(y&7)&(1<>3;var z=1<>>(y&7)&z-1);g=(y-=Je[Y])>>3;var U=gn[Y]+((e[g]|e[g+1]<<8|e[g+2]<<16)>>(y&7)&(1<>3;var N=hn[X]+((e[g]|e[g+1]<<8|e[g+2]<<16)>>(y&7)&(1<>3,T=d.t[T]+((e[g]|e[g+1]<<8)>>(y&7)&(1<>3,M=k.t[M]+((e[g]|e[g+1]<<8)>>(y&7)&(1<>3,O=J.t[O]+((e[g]|e[g+1]<<8)>>(y&7)&(1<3)t.o[2]=t.o[1],t.o[1]=t.o[0],t.o[0]=C-=3;else{var W=C-(N!=0);if(W){if(C=W==3?t.o[0]-1:t.o[W],W>1)t.o[2]=t.o[1];t.o[1]=t.o[0],t.o[0]=C}else C=t.o[0]}for(var A=0;AU)H=U;for(var A=0;Ai&&typeof i==="object"&&("$f32"in i)?Array.from(c.subarray(i.$f32,i.$f32+i.n)):i)}var xn=["https://lm.ikale.io/data/","https://cdn.jsdmirror.com/npm/lmfpd-data@latest/"],An="lmfpd-data-v1",En="shared-detector-v2",Fe="shared_detector.bin",He=(e)=>new TextDecoder().decode(e),Tn=(e)=>e instanceof Error?e.message:String(e);function We(e,t){if(!Array.isArray(e?.models)||!Pt(e,t))throw Error("The reference bank does not match its detector.");return{bank:e,detector:t}}async function kn(e){let t=async(r,a)=>{let n=qt(e,r);try{return a(await Ut(n))}catch{throw Error(`Cannot read ${n}.`)}};return We(await t("unified_bank.json",(r)=>JSON.parse(He(r))),await t(Fe,Ge))}async function Mn(e){try{let[t,r]=await Promise.all([Ut(e),en(e)]),a=t.readUInt32LE(0),n=JSON.parse(He(t.subarray(4,4+a)));return{data:We(n,Ge(t.subarray(4+a))),version:n.files[Fe].sha256,checkedAt:r.mtimeMs}}catch{return}}async function In(e,t,r){let a=Buffer.alloc(4);a.writeUInt32LE(t.length);let n=`${e}.tmp-${Yr(8).toString("hex")}`;try{await Xr(nn(e),{recursive:!0}),await rn(n,Buffer.concat([a,t,r])),await Zr(n,e)}catch{await Qr(n,{force:!0}).catch(()=>{})}}async function xt(e,t){let r=await fetch(e,{signal:AbortSignal.timeout(t)});if(!r.ok)throw Error(`HTTP ${r.status}`);return new Uint8Array(await r.arrayBuffer())}async function At(e,t,r){let a=[];for(let n of e)try{let s=await xt(`${n}bundle.json`,1e4),o=JSON.parse(He(s));if(o.schema!==An||o.detector_schema!==En)throw Error(`data schema ${o.schema}/${o.detector_schema} is not supported by this SDK version. Upgrade lmfpd.`);let c=o.files[Fe];if(c.sha256===r){let u=new Date;await tn(t,u,u).catch(()=>{});return}let l=[];for(let u of c.parts)l.push(await xt(`${n}chunks/${u}`,120000));let i=bn(Buffer.concat(l)),p=We(o,Ge(i));return await In(t,s,i),p}catch(s){a.push(`${n} (${Tn(s)})`)}throw Error(`lmfpd: cannot download reference data from ${a.join(", ")}`)}async function Dn(e=xn,t=qt(Sn(),"data.bin"),r=86400){let a=typeof e==="string"?[e]:e;if(a.length===1&&!/^https?:\/\//i.test(a[0]))return kn(a[0]);let n=await Mn(t);if(!n)return await At(a,t);if(Date.now()-n.checkedAt>=r*1000)At(a,t,n.version).catch(()=>{});return n.data}var Be=(e)=>({state:e.state,text:e.text,raw_text:e.rawText,count:e.count,expected_count:e.expectedCount,first_byte_ms:e.firstByteMs??null,response_model:e.responseModel??null,response_id:e.responseId??null,error:e.error??null}),Bt;class jt{static{Bt=(e)=>new jt(e)}#e;builtAt;constructor(e){this.#e=e,this.builtAt=e.bank.built_at}analyze(e,t={}){return Vr(e,this.#e.bank,this.#e.detector,t.strict??!1)}async detect(e,{signal:t,onSample:r}={}){let a=Lt(e);if(t?.aborted)return{challenges:[],samples:[],analysis:null,error:"Cancelled. This round was not scored."};let n=Fr(1,Tt(a.count)),s=r?(o)=>{try{r(o,Be(n.samples[o]))}catch(c){queueMicrotask(()=>{throw c})}}:()=>{};return n.samples.forEach((o,c)=>s(c)),await Hr(n,a,this.#e.bank,this.#e.detector,t??new AbortController().signal,s),{challenges:n.challenges,samples:n.samples.map(Be),analysis:n.analysis?zt(n.analysis):null,error:n.error??null}}}async function Gt(e={}){return Bt(await Dn(e.source,e.cache,e.ttl))}function De(e=3){if(!Number.isSafeInteger(e)||e<1||e>3)throw Error("count must be an integer from 1 to 3.");return Tt(e)}function Ft(e){return Me(e)}async function Ht(e,t){return Be(await Rt(Lt(e),t,new AbortController().signal,()=>{}))}function Wt(e){return/^[\x20-\x7e]*$/.test(e)?e:encodeURIComponent(e)}class Ke{url;key;constructor(e,t=""){this.url=e;this.key=t}headers(e={}){return{"content-type":"application/json",...this.key?{authorization:`Bearer ${this.key}`}:{},...e}}redact(e){return String(e instanceof Error?e.message:e).replaceAll(this.key||"\x00","[redacted]").slice(0,500)}async catalog(){let e=await fetch(`${this.url}/v1/models`,{headers:this.headers(),signal:AbortSignal.timeout(5000),redirect:"error"});if(!e.ok)throw await e.body?.cancel(),Error(`Magpie model catalog returned HTTP ${e.status}.`);let r=(JSON.parse(await ae(e,4194304)).data||[]).filter((n)=>{if(typeof n.id!=="string"||!n.id.includes("/")||n.id.startsWith("group/"))return!1;if(/^(embedding|image|audio)(_|$)/.test(n.type||""))return!1;if(Array.isArray(n.modalities?.output)&&!n.modalities.output.includes("text"))return!1;let s=Array.isArray(n.native_endpoints)?n.native_endpoints:[];return!s.length||!s.every((o)=>typeof o==="string"&&/\/(images|embeddings|audio)\b/.test(o))}).map((n)=>({id:n.id,name:String(n.display_name||n.name||n.id),provider:n.id.split("/")[0],efforts:(Array.isArray(n.reasoning_levels)?n.reasoning_levels:(n.supported_reasoning_levels||[]).map((s)=>s.effort)).filter((s)=>typeof s==="string"),nativeEndpoints:Array.isArray(n.native_endpoints)?n.native_endpoints.filter((s)=>typeof s==="string"):[]})),a=[];try{let n=await fetch(`${this.url}/v1/magpie/quotas?kept=1`,{headers:this.headers(),signal:AbortSignal.timeout(2500),redirect:"error"});if(n.ok){let s=JSON.parse(await ae(n,1048576));for(let o of s.data||[])if(typeof o.provider==="string"&&typeof o.user==="string"&&o.user&&(!o.kind||o.kind==="subscription")){if(!a.some((c)=>c.provider===o.provider&&c.id===o.user))a.push({id:o.user,name:String(o.alias||o.user),provider:o.provider})}}else await n.body?.cancel()}catch{}return{models:r,accounts:a}}async route(e){try{let t=await fetch(`${this.url}/v1/magpie/route?session=${encodeURIComponent(e.session)}`,{headers:this.headers(),signal:AbortSignal.timeout(2500),redirect:"error"});if(!t.ok)throw await t.body?.cancel(),Error(`Route metadata HTTP ${t.status}`);e.route=JSON.parse(await ae(t,262144));let r=e.route?.route??e.route;if(r?.model&&typeof r.model==="string"){if(e.model??=r.model,r.model!==e.requestedModel)e.mismatch=!0}}catch(t){e.routeError=this.redact(t)}}}import{mkdir as Cn,readdir as Nn,readFile as Rn,rename as Pn,writeFile as $n,unlink as On}from"fs/promises";import{join as Ve}from"path";class Ye{dir;jobs=new Map;writing=Promise.resolve();constructor(e){this.dir=e}async load(){await Cn(this.dir,{recursive:!0,mode:448});for(let e of await Nn(this.dir)){if(!/^[\w-]+\.json$/.test(e))continue;try{let t=JSON.parse(await Rn(Ve(this.dir,e),"utf8"));if(!t.id||!Array.isArray(t.results)||e!==`${t.id}.json`)continue;if(t.state==="running"||t.state==="queued"){t.state="interrupted",t.error="The plugin service restarted before this job finished.",t.finishedAt=new Date().toISOString();for(let r of t.results)if(r.state==="running"||r.state==="queued")r.state="cancelled",r.analysis=null;await this.save(t)}this.jobs.set(t.id,t)}catch{}}}list(){return[...this.jobs.values()].sort((e,t)=>t.createdAt.localeCompare(e.createdAt))}save(e){let t=JSON.stringify(e),r=Ve(this.dir,`${e.id}.json`),a=this.writing.then(async()=>{let n=`${r}.tmp`;await $n(n,t,{mode:384}),await Pn(n,r)});return this.writing=a.catch(()=>{}),a}async remove(e){await this.writing,await On(Ve(this.dir,`${e}.json`)),this.jobs.delete(e)}async flush(){await this.writing}}function Kt(e,t){let r=new TextDecoder,a="",n="",s=!1,o=!1,c=(i)=>{let p=i.split(/\r\n|\r|\n/).filter((u)=>u.startsWith("data:")).map((u)=>u.slice(5).replace(/^ /,"")).join(` `);if(!p)return;if(p.trim()==="[DONE]"){s=!0;return}try{let u=JSON.parse(p);if(u.error||u.type==="error")o=!0;let m=u.choices?.find((f)=>f.index===0)??u.choices?.[0];if(m?.delta?.refusal)o=!0;if(m?.finish_reason)n=m.finish_reason}catch{o=!0}},l=()=>{let i;while(i=/\r\n\r\n|\n\n|\r\r/.exec(a))c(a.slice(0,i.index)),a=a.slice(i.index+i[0].length);if(a.length>1e5)throw Error("SSE frame exceeded the response limit.")};return e.pipeThrough(new TransformStream({transform(i,p){a+=r.decode(i,{stream:!0}),l(),p.enqueue(i)},flush(i){if(a+=r.decode(),l(),a.trim())c(a);if(!s&&!o&&n==="stop")t(),i.enqueue(new TextEncoder().encode(` data: [DONE] -`))}}))}import{createHmac as On,randomBytes as Ye}from"crypto";import{chmodSync as zn,closeSync as Vt,fsyncSync as qn,linkSync as Un,mkdirSync as Ln,openSync as Jn,readFileSync as Bn,rmSync as Gn,writeSync as Fn}from"fs";import{join as Hn,resolve as Qe}from"path";var et="0.2.2",Wn=".service-identity-salt",Ze=32,Xt=new Map,Pe=(e)=>{try{let t=Bn(e);return t.length===Ze?t:void 0}catch{return}},jn=(e,t)=>{let r,a=`${e}.${process.pid}.${Ye(8).toString("hex")}.tmp`;try{r=Jn(a,"wx",384);let n=0;while(n24)Z("targets must contain 1 to 24 items");let r=e.targets.map((a)=>`${a.model}\x00${a.account??""}`);if(new Set(r).size!==r.length)Z("duplicate targets are not allowed");if(!Number.isInteger(e.targetParallel)||e.targetParallel<1||e.targetParallel>3)Z("targetParallel must be 1 to 3");if(!Number.isInteger(e.sampleParallel)||e.sampleParallel<1||e.sampleParallel>3)Z("sampleParallel must be 1 to 3");if(!Number.isFinite(e.deadlineSeconds)||e.deadlineSeconds<10||e.deadlineSeconds>900)Z("deadlineSeconds must be 10 to 900");if(typeof e.effort!=="string"||e.effort.length>64)Z("effort must be at most 64 characters");if(typeof e.strict!=="boolean")Z("strict must be boolean");if(!["default","flex","fast","ultrafast"].includes(e.serviceTier))Z("unknown service tier");if(!["auto",...Yt].includes(e.api))Z("unknown API");if(e.account!==void 0&&(typeof e.account!=="string"||e.account.length>256))Z("account must be at most 256 characters");for(let a of e.targets){if(typeof a.model!=="string"||!a.model.trim())Z("target model must be text");if(a.account!==void 0&&(typeof a.account!=="string"||a.account.length>256))Z("account must be at most 256 characters");if(!t.find((s)=>s.id===a.model))Z(`unknown model: ${a.model}`)}}function Yn(e,t){if(e!=="auto")return e;let r=(t.nativeEndpoints??[]).map((a)=>a.toLowerCase());for(let a of Yt)if(r.some((n)=>n===a||n.includes(`/${a==="chat_completions"?"chat/completions":a}`)||n.includes(a)))return a;return"chat_completions"}function Qt(e){return{state:"queued",text:"",raw_text:"",count:0,expected_count:e.expected_count,first_byte_ms:null,response_model:null,response_id:null,error:null}}function Qn(e,t,r,a){let n=e.account||t;if(!n)return{model:e.model};let s=a.filter((l)=>l.provider===r.provider),o=s.filter((l)=>l.name===n),c=s.find((l)=>l.id.toLowerCase()===n.toLowerCase())??(o.length===1?o[0]:void 0);return{model:e.model,account:c?.id??n,...c?{accountName:c.name}:{}}}function Zt(e,t,r,a=[]){Xn(e,t);let n=e.targets.map((p)=>Qn(p,e.account,t.find((u)=>u.id===p.model),a)),s=n.map((p)=>`${p.model}\x00${p.account??""}`);if(new Set(s).size!==s.length)Z("duplicate targets are not allowed");let o=n[0].account!==void 0&&n.every((p)=>p.account===n[0].account)?n[0]:void 0,c={targets:n,...o?{account:o.account,...o.accountName?{accountName:o.accountName}:{}}:{},api:e.api,effort:e.effort,serviceTier:e.serviceTier,strict:e.strict,targetParallel:e.targetParallel,sampleParallel:e.sampleParallel,deadlineSeconds:e.deadlineSeconds},l=De(3),i=c.targets.map((p,u)=>{let m=t.find((f)=>f.id===p.model);return{id:`target-${u+1}-${crypto.randomUUID()}`,target:p,api:Yn(e.api,m),state:"queued",samples:l.map(Qt),provenance:l.map(()=>({session:"",requestedModel:p.model})),analysis:null,error:null}});return{id:crypto.randomUUID(),createdAt:new Date().toISOString(),state:"queued",config:c,challenges:l,results:i,bank:{builtAt:r,sdk:Vn}}}function Zn(e,t="Cancelled. This round was not scored."){return{...Qt(e),state:"cancelled",error:t}}async function pe(e){await e.onUpdate()}async function er(e,t){e.state="running",await pe(t);let r=t.sample??((s,o)=>Wt(s,o)),a=0,n=async()=>{while(!0){let s=a++;if(s>=e.results.length)return;let o=e.results[s];o.state="running",await pe(t);let c=0,l=async()=>{while(!0){let v=c++;if(v>=e.challenges.length)return;let w=e.challenges[v];if(t.signal.aborted){o.samples[v]=Zn(w),await pe(t);continue}try{let h=t.sampleEndpoint(o,v),x={baseUrl:h.baseUrl,apiKey:h.apiKey,model:o.target.model,api:o.api,effort:e.config.effort,serviceTier:e.config.serviceTier,strict:e.config.strict,count:3,parallel:1,stream:!0};o.samples[v]={...o.samples[v],state:"waiting"},await pe(t);let R=await r(x,w,t.signal);if(o.samples[v]=R,t.afterSample)await t.afterSample(o,v);await pe(t)}catch(h){let x=h instanceof Error?h.message:String(h);o.samples[v]={...o.samples[v],state:t.signal.aborted?"cancelled":"failed",error:x},o.error??=x,await pe(t)}}};await Promise.all(Array.from({length:Math.min(e.config.sampleParallel,e.challenges.length)},l));let i=o.samples.some((v)=>v.state==="cancelled"),p=t.signal.aborted,u=o.provenance.some((v)=>v.mismatch),m=o.samples.filter((v)=>v.state==="complete"||!e.config.strict&&v.state==="truncated"),f=e.config.strict&&(o.samples.length!==3||o.samples.some((v)=>v.state!=="complete"));if(!p&&!i&&!u&&!f&&m.length>0)o.analysis=t.detector.analyze(m.map((v)=>({text:v.text,expected_count:v.expected_count})),{strict:e.config.strict});else if(p||i)o.error=t.signal.reason instanceof Error?t.signal.reason.message:"Cancelled. This round was not scored.";else if(u)o.error="Provider/model response does not match the requested target; result was not scored.";else if(f)o.error="Strict mode requires three complete, untruncated samples.";o.state=p||i?"cancelled":u||o.samples.some((v)=>v.state==="failed")||f?"failed":"completed",await pe(t)}};if(await Promise.all(Array.from({length:Math.min(e.config.targetParallel,e.results.length)},n)),e.finishedAt=new Date().toISOString(),t.signal.aborted||e.results.some((s)=>s.state==="cancelled")){if(e.state="cancelled",t.signal.aborted)e.error=t.signal.reason instanceof Error?t.signal.reason.message:"Cancelled"}else if(e.results.some((s)=>s.state==="failed"))e.state="failed";else e.state="completed";await pe(t)}var tt=[{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",provider:"anthropic",efforts:["low","medium","high"],nativeEndpoints:["/v1/messages"]},{id:"openai/gpt-5.5",name:"GPT-5.5",provider:"openai",efforts:["low","medium","high"],nativeEndpoints:["/v1/responses"]},{id:"relay/claude-opus-4.7",name:"Claude Opus 4.7",provider:"relay",efforts:["low","medium","high"],nativeEndpoints:["/v1/messages"]},{id:"google/gemini-3.1-pro",name:"Gemini 3.1 Pro",provider:"google",efforts:[],nativeEndpoints:[]}];function rt(e){let t=e.split("/").slice(1).join("/"),r=[t,"claude-sonnet-4.6","gpt-5.4","gemini-3.1-pro","deepseek-v3.2"].filter((a,n,s)=>s.indexOf(a)===n);return{decision:"scored",prediction:t,prediction_name:t,family_prediction:t.split("-")[0],family_prediction_name:t.split("-")[0],results:r.map((a,n)=>({model:a,display_name:a,family:a.split("-")[0],family_name:a.split("-")[0],score:1-n*0.17,probability:n===0?0.87:0.13/(r.length-1)})),ranking_score:1,probability:0.87,probability_status:"reference_calibrated",probability_scope:"Reference bank candidates only (illustrative demo)",calibration:null,used_outputs:3,diagnostics:[0,1,2].map((a)=>({index:a,parsed_numbers:300,minimum_numbers:165,accepted:!0,raw_out_of_range_count:0})),sequence:null,method:"Illustrative demo; no measurement",model_version:{base_sha256:"demo-not-measured"},evidence:{insufficient:!1,label:"Demo",reason:"Illustrative data only",threshold:null,method:"demo"}}}function tr(){let e=new Date(Date.now()-3600000).toISOString(),t={targets:tt.slice(0,2).map((r)=>({model:r.id})),api:"auto",effort:"",serviceTier:"default",strict:!1,targetParallel:1,sampleParallel:3,deadlineSeconds:300};return{id:"demo-example",createdAt:e,finishedAt:e,state:"completed",config:t,challenges:De(),bank:{builtAt:"Demo reference data",sdk:"0.2.0"},demo:!0,results:t.targets.map((r,a)=>({id:`demo-${a}`,target:r,api:a?"responses":"messages",state:"completed",samples:[0,1,2].map(()=>({state:"complete",text:"137, 42, 291, 65, 188",raw_text:"137, 42, 291, 65, 188 (illustrative excerpt)",count:300,expected_count:300,first_byte_ms:650,response_model:r.model.split("/")[1],response_id:"demo",error:null})),provenance:[0,1,2].map((n)=>({session:`demo-${n}`,requestedModel:r.model,provider:r.model.split("/")[0],model:r.model})),analysis:rt(r.model),error:null}))}}var ca=(e)=>e instanceof Error?e.message:String(e),F=(e,t=200,r={})=>Response.json(e,{status:t,headers:r}),nr=(e,t)=>e.length===t.length&&ea(Buffer.from(e),Buffer.from(t)),ar=(e)=>!["queued","running"].includes(e.state),ot=()=>crypto.randomUUID();async function or(e={}){let t=he(e),r=new Ke(t.gateway,t.apiKey),a=new Xe(ie(t.dataDir,t.demo?"demo-jobs":"jobs")),n=nt(32).toString("hex"),s=new Map,o=new Map,c=new Map,l,i="",p,u=[],m=[],f="",v=!1,w=!1,h,x=(d)=>{for(let _ of c.get(d.id)||[])_(d)},R=async(d)=>{x(d),await a.save(d)};async function D(d=!1){if(t.demo)return;if(l&&!d)return l;if(p)return p;return p=(async()=>{try{await ta(t.dataDir,{recursive:!0,mode:448});let _=ie(t.dataDir,d&&(!t.bankSource||/^https?:\/\//i.test(t.bankSource))?`reference-refresh-${ot()}.bin`:"reference.bin");try{let y=await Ft({...t.bankSource?{source:t.bankSource}:{},cache:_,ttl:1/0});if(d&&_!==ie(t.dataDir,"reference.bin"))await ra(_,ie(t.dataDir,"reference.bin"));l=y;try{let g=await rr(ie(t.dataDir,"reference.bin"));h=JSON.parse(g.subarray(4,4+g.readUInt32LE(0)).toString()).models?.length}catch{}}finally{if(d&&_!==ie(t.dataDir,"reference.bin"))await na(_).catch(()=>{})}return i="",l}catch(_){i=r.redact(_);return}finally{p=void 0}})(),p}function N(){return t.demo?{builtAt:"Demo reference data",modelCount:64}:l?{builtAt:l.builtAt,modelCount:h}:null}async function C(){if(t.demo||l)return{state:"ready"};let _=t.bankSource&&!/^https?:\/\//i.test(t.bankSource)?ie(t.bankSource,"unified_bank.json"):ie(t.dataDir,"reference.bin");return{state:await aa(_).then(()=>!0,()=>!1)?"cached":"missing"}}async function A(){if(t.demo)return u=tt,m=[],{models:u,accounts:m};try{let d=await r.catalog();return u=d.models,m=d.accounts,f="",d}catch(d){return f=r.redact(d),{models:[],accounts:[]}}}let E=Bun.serve({hostname:"127.0.0.1",port:0,idleTimeout:0,async fetch(d){let _=new URL(d.url);if(d.headers.get("host")!==_.host||_.hostname!=="127.0.0.1")return new Response("Forbidden",{status:403});let y=_.pathname.match(/^\/sample\/([\w-]+)\/v1\/(responses|chat\/completions|messages)$/),g=y?o.get(y[1]):void 0;if(!g||d.method!=="POST"||g.used||g.controller.signal.aborted)return new Response("Unknown sample",{status:404});let S=d.headers.get("authorization")?.replace(/^Bearer /,"")||d.headers.get("x-api-key")||"";if(!nr(S,g.secret))return new Response("Unauthorized",{status:401});g.used=!0;let{job:T,result:O,index:M,controller:Y}=g,q={session:`fp-${ot()}`,requestedModel:O.target.model};O.provenance[M]=q;let X,ee=()=>X??=(async()=>{try{await r.route(q),x(T)}finally{g.finish()}})();try{let re=await ae(d,16384);if(re.length>16384)throw Error("Sample request too large.");if(JSON.parse(re).model!==O.target.model)throw Error("Sample model does not match its job.");let z={responses:"responses",chat_completions:"chat/completions",messages:"messages"}[O.api];if(y[2]!==z)throw Error("Sample protocol does not match its job.");let P=Date.now(),U=r.headers({"X-Magpie-Session":q.session,...O.target.account?{"X-Magpie-Account":jt(O.target.account)}:{}});for(let ne of["anthropic-version","anthropic-beta","accept"]){let Q=d.headers.get(ne);if(Q)U[ne]=Q}let I=await fetch(`${r.url}/v1/${z}`,{method:"POST",headers:U,body:re,signal:Y.signal,redirect:"error",timeout:!1});if(q.provider=I.headers.get("X-Magpie-Provider")||void 0,q.model=I.headers.get("X-Magpie-Model")||void 0,q.mismatch=!!(q.model&&q.model!==O.target.model||q.provider&&q.provider!==O.target.model.split("/")[0]),!I.ok||!I.body)return await I.body?.cancel(),await ee(),F({error:{message:`Magpie returned HTTP ${I.status}. Inspect Magpie's request log for details.`}},I.ok?502:I.status);let j=!1,V="",W="",ce=0,le=(O.api==="chat_completions"&&I.headers.get("content-type")?.includes("text/event-stream")?Kt(I.body,()=>{q.streamNormalization="chat-done-after-stop"}):I.body).getReader(),fe=0,ir=new TextDecoder,cr=(ne)=>{let Q=O.samples[M];if(!Q)return;if(ce+=ne.byteLength,ce>2097152)throw Error("Sample exceeded the 2 MiB response limit.");Q.state="streaming",Q.first_byte_ms??=Date.now()-P,W+=ir.decode(ne,{stream:!0});let Ne;while((Ne=W.indexOf(` -`))>=0){let it=W.slice(0,Ne).trim();if(W=W.slice(Ne+1),!it.startsWith("data:"))continue;try{let ye=JSON.parse(it.slice(5)),ct=ye.choices?.[0]?.delta?.content??(ye.type==="response.output_text.delta"?ye.delta:void 0)??(ye.type==="content_block_delta"?ye.delta?.text:void 0);if(typeof ct==="string")V+=ct}catch{}}if(V.length>1e5||W.length>1e5)throw Error("Sample text exceeded the response limit.");if(Q.raw_text=V,Q.count=Ht(V).length,Date.now()-fe>150)fe=Date.now(),x(T)},lr=new ReadableStream({async pull(ne){try{let Q=await le.read();if(Q.done)j=!0,await ee(),ne.close();else cr(Q.value),ne.enqueue(Q.value)}catch(Q){if(await le.cancel().catch(()=>{}),!j)j=!0,await ee();ne.error(Q)}},async cancel(){if(!j)j=!0,await le.cancel().catch(()=>{}),await ee()}});return new Response(lr,{headers:{"content-type":I.headers.get("content-type")||"text/event-stream","cache-control":"no-store"}})}catch(re){return await ee(),F({error:{message:Y.signal.aborted?"Detection cancelled or deadline exceeded.":r.redact(re)}},502)}}});async function L(d,_){let y=new AbortController;s.set(d.id,y);let g=setTimeout(()=>y.abort(Error("Job deadline exceeded")),d.config.deadlineSeconds*1000);try{if(t.demo){d.demo=!0,d.state="running",await R(d);for(let S of d.results){S.state="running";for(let T=0;T<3;T++){if(y.signal.aborted)break;S.samples[T]={state:"streaming",text:"",raw_text:"",count:0,expected_count:d.challenges[T].expected_count,first_byte_ms:650,response_model:S.target.model.split("/")[1],response_id:"demo",error:null},x(d),await Bun.sleep(350),S.samples[T]={...S.samples[T],state:"complete",text:"137, 42, 291, 65, 188",raw_text:"137, 42, 291, 65, 188 (illustrative excerpt)",count:d.challenges[T].expected_count},S.provenance[T]={session:`demo-${T}`,requestedModel:S.target.model,model:S.target.model,provider:S.target.model.split("/")[0]},x(d)}if(S.state=y.signal.aborted?"cancelled":"completed",S.analysis=y.signal.aborted?null:rt(S.target.model),await R(d),y.signal.aborted)break}d.state=y.signal.aborted?"cancelled":"completed",d.finishedAt=new Date().toISOString()}else{if(!_)throw Error(i||"Reference data is not loaded.");await er(d,{detector:_,signal:y.signal,sampleEndpoint:(S,T)=>{let O=ot(),M,Y=new Promise((X)=>{M=X}),q={job:d,result:S,index:T,secret:nt(32).toString("hex"),controller:y,used:!1,done:Y,finish:M};return o.set(O,q),{baseUrl:`http://127.0.0.1:${E.port}/sample/${O}/v1`,apiKey:q.secret}},afterSample:async(S,T)=>{let O=[...o.values()].find((M)=>M.job===d&&M.result===S&&M.index===T);if(O?.used)await Promise.race([O.done,Bun.sleep(3500)])},onUpdate:()=>R(d)})}}catch(S){d.state=y.signal.aborted?"cancelled":"failed",d.error=r.redact(S),d.finishedAt=new Date().toISOString()}finally{if(clearTimeout(g),s.delete(d.id),y.signal.aborted&&!d.error)d.error=ca(y.signal.reason||"Cancelled");for(let[S,T]of o)if(T.job===d)T.finish(),o.delete(S);for(let S of d.results)if(S.state==="running"||S.state==="queued")S.state="cancelled",S.analysis=null;await R(d)}}let b=t.uiDir||at(import.meta.dir,import.meta.dir.endsWith("/src")?"../dist/ui":"ui"),k,J=Promise.resolve();try{k=Bun.serve({hostname:"127.0.0.1",port:t.port,idleTimeout:0,async fetch(d){let _=new URL(d.url),y=`127.0.0.1:${k.port}`,g=d.headers.get("host");if(g!==y&&g!==`localhost:${k.port}`)return new Response("Invalid host",{status:403});let S=d.headers.get("origin");if(S&&S!=="null"&&S!==`http://${y}`&&S!==`http://localhost:${k.port}`)return new Response("Invalid origin",{status:403});let T={"access-control-allow-origin":S||"*","access-control-allow-headers":"Authorization, Content-Type","access-control-allow-methods":"GET, POST, DELETE, OPTIONS",vary:"Origin","cache-control":"no-store"};if(d.method==="OPTIONS")return new Response(null,{status:204,headers:T});if(_.pathname==="/_fingerprint/health"&&d.method==="GET")return F(Ie(t),200,T);await J;let O=_.pathname.startsWith("/api/");if(O&&!nr(d.headers.get("authorization")?.replace(/^Bearer /,"")||"",n))return F({error:"Unauthorized"},401,T);try{let M;if(O){let K=_.pathname;if(K==="/api/bootstrap"&&d.method==="GET"){let z=await A();M=F({version:et,demo:t.demo,...z,jobs:a.list(),bank:N(),bankStatus:await C(),gateway:{url:t.gateway,reachable:t.demo||!f,...f?{error:f}:{}},...i?{bankError:i}:{}})}else if(K==="/api/models"&&d.method==="GET")M=F(await A());else if(K==="/api/jobs"&&d.method==="GET")M=F(a.list());else if(K==="/api/jobs"&&d.method==="POST"){if(s.size||w)return F({error:"A detection batch is already running."},409,T);w=!0;try{if(a.jobs.size>=200)return F({error:"History limit reached (200 batches). Export and delete older batches first."},409,T);if(Number(d.headers.get("content-length")||0)>16384)return F({error:"Request too large"},413,T);let z=await ae(d,16384),P=JSON.parse(z);await A();let U=Zt(P,u,"",m),I=await D();if(!t.demo&&!I)return F({error:i||"Reference data unavailable"},503,T);if(U.bank.builtAt=t.demo?"Demo reference data":I.builtAt,t.demo)U.demo=!0;a.jobs.set(U.id,U),await a.save(U),L(U,I).catch((j)=>{U.state="failed",U.error=`Could not save task history: ${r.redact(j)}`,x(U)}),M=F(U,202)}finally{w=!1}}else if((K==="/api/bank/download"||K==="/api/reload-data")&&d.method==="POST")await D(!0),M=F({bank:N(),bankStatus:await C(),error:i||void 0},i?503:200);else{let z=K.match(/^\/api\/jobs\/([\w-]+)(?:\/(cancel|events|export))?$/),P=z?a.jobs.get(z[1]):void 0;if(!P)return F({error:"Job not found"},404,T);if(z[2]==="cancel"&&d.method==="POST")s.get(P.id)?.abort(Error("Cancelled by user")),M=F(P);else if(z[2]==="export"&&d.method==="GET")M=new Response(JSON.stringify({schema:"magpie-fingerprint/v1",...P},null,2),{headers:{"content-type":"application/json","content-disposition":`attachment; filename="fingerprint-${P.id}.json"`}});else if(z[2]==="events"&&d.method==="GET"){if((c.get(P.id)?.size||0)>=6)return F({error:"Too many event subscribers."},429,T);let U=new TextEncoder,I=()=>{},j=new ReadableStream({start(V){let W=!1,ce,xe=(fe)=>{if(W||(V.desiredSize??0)<=0&&!ar(fe))return;try{if(V.enqueue(U.encode(`event: snapshot +`))}}))}import{createHmac as Ln,randomBytes as Xe}from"crypto";import{chmodSync as Un,closeSync as Yt,fsyncSync as qn,linkSync as Jn,mkdirSync as Bn,openSync as jn,readFileSync as Gn,rmSync as Fn,writeSync as Hn}from"fs";import{join as Wn,resolve as Ze}from"path";var Vt="0.2.4";var et=Vt,Kn=".service-identity-salt",Qe=32,Xt=new Map,Ce=(e)=>{try{let t=Gn(e);return t.length===Qe?t:void 0}catch{return}},Vn=(e,t)=>{let r,a=`${e}.${process.pid}.${Xe(8).toString("hex")}.tmp`;try{r=jn(a,"wx",384);let n=0;while(n24)Q("targets must contain 1 to 24 items");let r=e.targets.map((a)=>`${a.model}\x00${a.account??""}`);if(new Set(r).size!==r.length)Q("duplicate targets are not allowed");if(!Number.isInteger(e.targetParallel)||e.targetParallel<1||e.targetParallel>3)Q("targetParallel must be 1 to 3");if(!Number.isInteger(e.sampleParallel)||e.sampleParallel<1||e.sampleParallel>3)Q("sampleParallel must be 1 to 3");if(!Number.isFinite(e.deadlineSeconds)||e.deadlineSeconds<10||e.deadlineSeconds>900)Q("deadlineSeconds must be 10 to 900");if(typeof e.effort!=="string"||e.effort.length>64)Q("effort must be at most 64 characters");if(typeof e.strict!=="boolean")Q("strict must be boolean");if(!["default","flex","fast","ultrafast"].includes(e.serviceTier))Q("unknown service tier");if(!["auto",...Zt].includes(e.api))Q("unknown API");if(e.account!==void 0&&(typeof e.account!=="string"||e.account.length>256))Q("account must be at most 256 characters");for(let a of e.targets){if(typeof a.model!=="string"||!a.model.trim())Q("target model must be text");if(a.account!==void 0&&(typeof a.account!=="string"||a.account.length>256))Q("account must be at most 256 characters");if(!t.find((s)=>s.id===a.model))Q(`unknown model: ${a.model}`)}}function Qn(e,t){if(e!=="auto")return e;let r=(t.nativeEndpoints??[]).map((a)=>a.toLowerCase());for(let a of Zt)if(r.some((n)=>n===a||n.includes(`/${a==="chat_completions"?"chat/completions":a}`)||n.includes(a)))return a;return"chat_completions"}function Qt(e){return{state:"queued",text:"",raw_text:"",count:0,expected_count:e.expected_count,first_byte_ms:null,response_model:null,response_id:null,error:null}}function ea(e,t,r,a){let n=e.account||t;if(!n)return{model:e.model};let s=a.filter((l)=>l.provider===r.provider),o=s.filter((l)=>l.name===n),c=s.find((l)=>l.id.toLowerCase()===n.toLowerCase())??(o.length===1?o[0]:void 0);return{model:e.model,account:c?.id??n,...c?{accountName:c.name}:{}}}function er(e,t,r,a=[]){Zn(e,t);let n=e.targets.map((p)=>ea(p,e.account,t.find((u)=>u.id===p.model),a)),s=n.map((p)=>`${p.model}\x00${p.account??""}`);if(new Set(s).size!==s.length)Q("duplicate targets are not allowed");let o=n[0].account!==void 0&&n.every((p)=>p.account===n[0].account)?n[0]:void 0,c={targets:n,...o?{account:o.account,...o.accountName?{accountName:o.accountName}:{}}:{},api:e.api,effort:e.effort,serviceTier:e.serviceTier,strict:e.strict,targetParallel:e.targetParallel,sampleParallel:e.sampleParallel,deadlineSeconds:e.deadlineSeconds},l=De(3),i=c.targets.map((p,u)=>{let m=t.find((f)=>f.id===p.model);return{id:`target-${u+1}-${crypto.randomUUID()}`,target:p,api:Qn(e.api,m),state:"queued",samples:l.map(Qt),provenance:l.map(()=>({session:"",requestedModel:p.model})),analysis:null,error:null}});return{id:crypto.randomUUID(),createdAt:new Date().toISOString(),state:"queued",config:c,challenges:l,results:i,bank:{builtAt:r,sdk:Xn}}}function ta(e,t="Cancelled. This round was not scored."){return{...Qt(e),state:"cancelled",error:t}}async function pe(e){await e.onUpdate()}async function tr(e,t){e.state="running",await pe(t);let r=t.sample??((s,o)=>Ht(s,o)),a=0,n=async()=>{while(!0){let s=a++;if(s>=e.results.length)return;let o=e.results[s];o.state="running",await pe(t);let c=0,l=async()=>{while(!0){let v=c++;if(v>=e.challenges.length)return;let w=e.challenges[v];if(t.signal.aborted){o.samples[v]=ta(w),await pe(t);continue}try{let h=t.sampleEndpoint(o,v),x={baseUrl:h.baseUrl,apiKey:h.apiKey,model:o.target.model,api:o.api,effort:e.config.effort,serviceTier:e.config.serviceTier,strict:e.config.strict,count:3,parallel:1,stream:!0};o.samples[v]={...o.samples[v],state:"waiting"},await pe(t);let I=await r(x,w,t.signal);if(o.samples[v]=I,t.afterSample)await t.afterSample(o,v);await pe(t)}catch(h){let x=h instanceof Error?h.message:String(h);o.samples[v]={...o.samples[v],state:t.signal.aborted?"cancelled":"failed",error:x},o.error??=x,await pe(t)}}};await Promise.all(Array.from({length:Math.min(e.config.sampleParallel,e.challenges.length)},l));let i=o.samples.some((v)=>v.state==="cancelled"),p=t.signal.aborted,u=o.provenance.some((v)=>v.mismatch),m=o.samples.filter((v)=>v.state==="complete"||!e.config.strict&&v.state==="truncated"),f=e.config.strict&&(o.samples.length!==3||o.samples.some((v)=>v.state!=="complete"));if(!p&&!i&&!u&&!f&&m.length>0)o.analysis=t.detector.analyze(m.map((v)=>({text:v.text,expected_count:v.expected_count})),{strict:e.config.strict});else if(p||i)o.error=t.signal.reason instanceof Error?t.signal.reason.message:"Cancelled. This round was not scored.";else if(u)o.error="Provider/model response does not match the requested target; result was not scored.";else if(f)o.error="Strict mode requires three complete, untruncated samples.";o.state=p||i?"cancelled":u||o.samples.some((v)=>v.state==="failed")||f?"failed":"completed",await pe(t)}};if(await Promise.all(Array.from({length:Math.min(e.config.targetParallel,e.results.length)},n)),e.finishedAt=new Date().toISOString(),t.signal.aborted||e.results.some((s)=>s.state==="cancelled")){if(e.state="cancelled",t.signal.aborted)e.error=t.signal.reason instanceof Error?t.signal.reason.message:"Cancelled"}else if(e.results.some((s)=>s.state==="failed"))e.state="failed";else e.state="completed";await pe(t)}var tt=[{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",provider:"anthropic",efforts:["low","medium","high"],nativeEndpoints:["/v1/messages"]},{id:"openai/gpt-5.5",name:"GPT-5.5",provider:"openai",efforts:["low","medium","high"],nativeEndpoints:["/v1/responses"]},{id:"relay/claude-opus-4.7",name:"Claude Opus 4.7",provider:"relay",efforts:["low","medium","high"],nativeEndpoints:["/v1/messages"]},{id:"google/gemini-3.1-pro",name:"Gemini 3.1 Pro",provider:"google",efforts:[],nativeEndpoints:[]}];function rt(e){let t=e.split("/").slice(1).join("/"),r=[t,"claude-sonnet-4.6","gpt-5.4","gemini-3.1-pro","deepseek-v3.2"].filter((a,n,s)=>s.indexOf(a)===n);return{decision:"scored",prediction:t,prediction_name:t,family_prediction:t.split("-")[0],family_prediction_name:t.split("-")[0],results:r.map((a,n)=>({model:a,display_name:a,family:a.split("-")[0],family_name:a.split("-")[0],score:1-n*0.17,probability:n===0?0.87:0.13/(r.length-1)})),ranking_score:1,probability:0.87,probability_status:"reference_calibrated",probability_scope:"Reference bank candidates only (illustrative demo)",calibration:null,used_outputs:3,diagnostics:[0,1,2].map((a)=>({index:a,parsed_numbers:300,minimum_numbers:165,accepted:!0,raw_out_of_range_count:0})),sequence:null,method:"Illustrative demo; no measurement",model_version:{base_sha256:"demo-not-measured"},evidence:{insufficient:!1,label:"Demo",reason:"Illustrative data only",threshold:null,method:"demo"}}}function rr(){let e=new Date(Date.now()-3600000).toISOString(),t={targets:tt.slice(0,2).map((r)=>({model:r.id})),api:"auto",effort:"",serviceTier:"default",strict:!1,targetParallel:1,sampleParallel:3,deadlineSeconds:300};return{id:"demo-example",createdAt:e,finishedAt:e,state:"completed",config:t,challenges:De(),bank:{builtAt:"Demo reference data",sdk:"0.2.0"},demo:!0,results:t.targets.map((r,a)=>({id:`demo-${a}`,target:r,api:a?"responses":"messages",state:"completed",samples:[0,1,2].map(()=>({state:"complete",text:"137, 42, 291, 65, 188",raw_text:"137, 42, 291, 65, 188 (illustrative excerpt)",count:300,expected_count:300,first_byte_ms:650,response_model:r.model.split("/")[1],response_id:"demo",error:null})),provenance:[0,1,2].map((n)=>({session:`demo-${n}`,requestedModel:r.model,provider:r.model.split("/")[0],model:r.model})),analysis:rt(r.model),error:null}))}}var ua=(e)=>e instanceof Error?e.message:String(e),G=(e,t=200,r={})=>Response.json(e,{status:t,headers:r}),ar=(e,t)=>e.length===t.length&&ra(Buffer.from(e),Buffer.from(t)),or=(e)=>!["queued","running"].includes(e.state),ot=()=>crypto.randomUUID();async function sr(e={}){let t=he(e),r=new Ke(t.gateway,t.apiKey),a=new Ye(ie(t.dataDir,t.demo?"demo-jobs":"jobs")),n=nt(32).toString("hex"),s=new Map,o=new Map,c=new Map,l,i="",p,u=[],m=[],f="",v=!1,w=!1,h,x=(d)=>{for(let _ of c.get(d.id)||[])_(d)},I=async(d)=>{x(d),await a.save(d)};async function D(d=!1){if(t.demo)return;if(l&&!d)return l;if(p)return p;return p=(async()=>{try{await na(t.dataDir,{recursive:!0,mode:448});let _=ie(t.dataDir,d&&(!t.bankSource||/^https?:\/\//i.test(t.bankSource))?`reference-refresh-${ot()}.bin`:"reference.bin");try{let y=await Gt({...t.bankSource?{source:t.bankSource}:{},cache:_,ttl:1/0});if(d&&_!==ie(t.dataDir,"reference.bin"))await aa(_,ie(t.dataDir,"reference.bin"));l=y;try{let g=await nr(ie(t.dataDir,"reference.bin"));h=JSON.parse(g.subarray(4,4+g.readUInt32LE(0)).toString()).models?.length}catch{}}finally{if(d&&_!==ie(t.dataDir,"reference.bin"))await oa(_).catch(()=>{})}return i="",l}catch(_){i=r.redact(_);return}finally{p=void 0}})(),p}function R(){return t.demo?{builtAt:"Demo reference data",modelCount:64}:l?{builtAt:l.builtAt,modelCount:h}:null}async function P(){if(t.demo||l)return{state:"ready"};let _=t.bankSource&&!/^https?:\/\//i.test(t.bankSource)?ie(t.bankSource,"unified_bank.json"):ie(t.dataDir,"reference.bin");return{state:await sa(_).then(()=>!0,()=>!1)?"cached":"missing"}}async function A(){if(t.demo)return u=tt,m=[],{models:u,accounts:m};try{let d=await r.catalog();return u=d.models,m=d.accounts,f="",d}catch(d){return f=r.redact(d),{models:[],accounts:[]}}}let E=Bun.serve({hostname:"127.0.0.1",port:0,idleTimeout:0,async fetch(d){let _=new URL(d.url);if(d.headers.get("host")!==_.host||_.hostname!=="127.0.0.1")return new Response("Forbidden",{status:403});let y=_.pathname.match(/^\/sample\/([\w-]+)\/v1\/(responses|chat\/completions|messages)$/),g=y?o.get(y[1]):void 0;if(!g||d.method!=="POST"||g.used||g.controller.signal.aborted)return new Response("Unknown sample",{status:404});let S=d.headers.get("authorization")?.replace(/^Bearer /,"")||d.headers.get("x-api-key")||"";if(!ar(S,g.secret))return new Response("Unauthorized",{status:401});g.used=!0;let{job:T,result:O,index:M,controller:X}=g,L={session:`fp-${ot()}`,requestedModel:O.target.model};O.provenance[M]=L;let Y,ee=()=>Y??=(async()=>{try{await r.route(L),x(T)}finally{g.finish()}})();try{let re=await ae(d,16384);if(re.length>16384)throw Error("Sample request too large.");if(JSON.parse(re).model!==O.target.model)throw Error("Sample model does not match its job.");let z={responses:"responses",chat_completions:"chat/completions",messages:"messages"}[O.api];if(y[2]!==z)throw Error("Sample protocol does not match its job.");let C=Date.now(),U=r.headers({"X-Magpie-Session":L.session,...O.target.account?{"X-Magpie-Account":Wt(O.target.account)}:{}});for(let ne of["anthropic-version","anthropic-beta","accept"]){let Z=d.headers.get(ne);if(Z)U[ne]=Z}let N=await fetch(`${r.url}/v1/${z}`,{method:"POST",headers:U,body:re,signal:X.signal,redirect:"error",timeout:!1});if(L.provider=N.headers.get("X-Magpie-Provider")||void 0,L.model=N.headers.get("X-Magpie-Model")||void 0,L.mismatch=!!(L.model&&L.model!==O.target.model||L.provider&&L.provider!==O.target.model.split("/")[0]),!N.ok||!N.body)return await N.body?.cancel(),await ee(),G({error:{message:`Magpie returned HTTP ${N.status}. Inspect Magpie's request log for details.`}},N.ok?502:N.status);let W=!1,V="",H="",ce=0,le=(O.api==="chat_completions"&&N.headers.get("content-type")?.includes("text/event-stream")?Kt(N.body,()=>{L.streamNormalization="chat-done-after-stop"}):N.body).getReader(),fe=0,cr=new TextDecoder,lr=(ne)=>{let Z=O.samples[M];if(!Z)return;if(ce+=ne.byteLength,ce>2097152)throw Error("Sample exceeded the 2 MiB response limit.");Z.state="streaming",Z.first_byte_ms??=Date.now()-C,H+=cr.decode(ne,{stream:!0});let Re;while((Re=H.indexOf(` +`))>=0){let it=H.slice(0,Re).trim();if(H=H.slice(Re+1),!it.startsWith("data:"))continue;try{let ye=JSON.parse(it.slice(5)),ct=ye.choices?.[0]?.delta?.content??(ye.type==="response.output_text.delta"?ye.delta:void 0)??(ye.type==="content_block_delta"?ye.delta?.text:void 0);if(typeof ct==="string")V+=ct}catch{}}if(V.length>1e5||H.length>1e5)throw Error("Sample text exceeded the response limit.");if(Z.raw_text=V,Z.count=Ft(V).length,Date.now()-fe>150)fe=Date.now(),x(T)},ur=new ReadableStream({async pull(ne){try{let Z=await le.read();if(Z.done)W=!0,await ee(),ne.close();else lr(Z.value),ne.enqueue(Z.value)}catch(Z){if(await le.cancel().catch(()=>{}),!W)W=!0,await ee();ne.error(Z)}},async cancel(){if(!W)W=!0,await le.cancel().catch(()=>{}),await ee()}});return new Response(ur,{headers:{"content-type":N.headers.get("content-type")||"text/event-stream","cache-control":"no-store"}})}catch(re){return await ee(),G({error:{message:X.signal.aborted?"Detection cancelled or deadline exceeded.":r.redact(re)}},502)}}});async function q(d,_){let y=new AbortController;s.set(d.id,y);let g=setTimeout(()=>y.abort(Error("Job deadline exceeded")),d.config.deadlineSeconds*1000);try{if(t.demo){d.demo=!0,d.state="running",await I(d);for(let S of d.results){S.state="running";for(let T=0;T<3;T++){if(y.signal.aborted)break;S.samples[T]={state:"streaming",text:"",raw_text:"",count:0,expected_count:d.challenges[T].expected_count,first_byte_ms:650,response_model:S.target.model.split("/")[1],response_id:"demo",error:null},x(d),await Bun.sleep(350),S.samples[T]={...S.samples[T],state:"complete",text:"137, 42, 291, 65, 188",raw_text:"137, 42, 291, 65, 188 (illustrative excerpt)",count:d.challenges[T].expected_count},S.provenance[T]={session:`demo-${T}`,requestedModel:S.target.model,model:S.target.model,provider:S.target.model.split("/")[0]},x(d)}if(S.state=y.signal.aborted?"cancelled":"completed",S.analysis=y.signal.aborted?null:rt(S.target.model),await I(d),y.signal.aborted)break}d.state=y.signal.aborted?"cancelled":"completed",d.finishedAt=new Date().toISOString()}else{if(!_)throw Error(i||"Reference data is not loaded.");await tr(d,{detector:_,signal:y.signal,sampleEndpoint:(S,T)=>{let O=ot(),M,X=new Promise((Y)=>{M=Y}),L={job:d,result:S,index:T,secret:nt(32).toString("hex"),controller:y,used:!1,done:X,finish:M};return o.set(O,L),{baseUrl:`http://127.0.0.1:${E.port}/sample/${O}/v1`,apiKey:L.secret}},afterSample:async(S,T)=>{let O=[...o.values()].find((M)=>M.job===d&&M.result===S&&M.index===T);if(O?.used)await Promise.race([O.done,Bun.sleep(3500)])},onUpdate:()=>I(d)})}}catch(S){d.state=y.signal.aborted?"cancelled":"failed",d.error=r.redact(S),d.finishedAt=new Date().toISOString()}finally{if(clearTimeout(g),s.delete(d.id),y.signal.aborted&&!d.error)d.error=ua(y.signal.reason||"Cancelled");for(let[S,T]of o)if(T.job===d)T.finish(),o.delete(S);for(let S of d.results)if(S.state==="running"||S.state==="queued")S.state="cancelled",S.analysis=null;await I(d)}}let b=t.uiDir||at(import.meta.dir,import.meta.dir.endsWith("/src")?"../dist/ui":"ui"),k,J=Promise.resolve();try{k=Bun.serve({hostname:"127.0.0.1",port:t.port,idleTimeout:0,async fetch(d){let _=new URL(d.url),y=`127.0.0.1:${k.port}`,g=d.headers.get("host");if(g!==y&&g!==`localhost:${k.port}`)return new Response("Invalid host",{status:403});let S=d.headers.get("origin");if(S&&S!=="null"&&S!==`http://${y}`&&S!==`http://localhost:${k.port}`)return new Response("Invalid origin",{status:403});let T={"access-control-allow-origin":S||"*","access-control-allow-headers":"Authorization, Content-Type","access-control-allow-methods":"GET, POST, DELETE, OPTIONS",vary:"Origin","cache-control":"no-store"};if(d.method==="OPTIONS")return new Response(null,{status:204,headers:T});if(_.pathname==="/_fingerprint/health"&&d.method==="GET")return G(Ne(t),200,T);await J;let O=_.pathname.startsWith("/api/");if(O&&!ar(d.headers.get("authorization")?.replace(/^Bearer /,"")||"",n))return G({error:"Unauthorized"},401,T);try{let M;if(O){let K=_.pathname;if(K==="/api/bootstrap"&&d.method==="GET"){let z=await A();M=G({version:et,demo:t.demo,...z,jobs:a.list(),bank:R(),bankStatus:await P(),gateway:{url:t.gateway,reachable:t.demo||!f,...f?{error:f}:{}},...i?{bankError:i}:{}})}else if(K==="/api/models"&&d.method==="GET")M=G(await A());else if(K==="/api/jobs"&&d.method==="GET")M=G(a.list());else if(K==="/api/jobs"&&d.method==="POST"){if(s.size||w)return G({error:"A detection batch is already running."},409,T);w=!0;try{if(a.jobs.size>=200)return G({error:"History limit reached (200 batches). Export and delete older batches first."},409,T);if(Number(d.headers.get("content-length")||0)>16384)return G({error:"Request too large"},413,T);let z=await ae(d,16384),C=JSON.parse(z);await A();let U=er(C,u,"",m),N=await D();if(!t.demo&&!N)return G({error:i||"Reference data unavailable"},503,T);if(U.bank.builtAt=t.demo?"Demo reference data":N.builtAt,t.demo)U.demo=!0;a.jobs.set(U.id,U),await a.save(U),q(U,N).catch((W)=>{U.state="failed",U.error=`Could not save task history: ${r.redact(W)}`,x(U)}),M=G(U,202)}finally{w=!1}}else if((K==="/api/bank/download"||K==="/api/reload-data")&&d.method==="POST")await D(!0),M=G({bank:R(),bankStatus:await P(),error:i||void 0},i?503:200);else{let z=K.match(/^\/api\/jobs\/([\w-]+)(?:\/(cancel|events|export))?$/),C=z?a.jobs.get(z[1]):void 0;if(!C)return G({error:"Job not found"},404,T);if(z[2]==="cancel"&&d.method==="POST")s.get(C.id)?.abort(Error("Cancelled by user")),M=G(C);else if(z[2]==="export"&&d.method==="GET")M=new Response(JSON.stringify({schema:"magpie-fingerprint/v1",...C},null,2),{headers:{"content-type":"application/json","content-disposition":`attachment; filename="fingerprint-${C.id}.json"`}});else if(z[2]==="events"&&d.method==="GET"){if((c.get(C.id)?.size||0)>=6)return G({error:"Too many event subscribers."},429,T);let U=new TextEncoder,N=()=>{},W=new ReadableStream({start(V){let H=!1,ce,xe=(fe)=>{if(H||(V.desiredSize??0)<=0&&!or(fe))return;try{if(V.enqueue(U.encode(`event: snapshot data: ${JSON.stringify(fe)} -`)),ar(fe))W=!0,I(),V.close()}catch{W=!0,I()}},le=c.get(P.id)||new Set;le.add(xe),c.set(P.id,le),I=()=>{if(ce)clearInterval(ce);if(le.delete(xe),!le.size)c.delete(P.id)},ce=setInterval(()=>{if(!W&&(V.desiredSize??0)>0)try{V.enqueue(U.encode(`: heartbeat +`)),or(fe))H=!0,N(),V.close()}catch{H=!0,N()}},le=c.get(C.id)||new Set;le.add(xe),c.set(C.id,le),N=()=>{if(ce)clearInterval(ce);if(le.delete(xe),!le.size)c.delete(C.id)},ce=setInterval(()=>{if(!H&&(V.desiredSize??0)>0)try{V.enqueue(U.encode(`: heartbeat -`))}catch{W=!0,I()}},15000),d.signal.addEventListener("abort",()=>{W=!0,I();try{V.close()}catch{}},{once:!0}),xe(P)},cancel(){I()}});M=new Response(j,{headers:{"content-type":"text/event-stream","x-accel-buffering":"no"}})}else if(!z[2]&&d.method==="GET")M=F(P);else if(!z[2]&&d.method==="DELETE"){if(s.has(P.id))return F({error:"Cancel the running batch before deleting it."},409,T);await a.remove(P.id),M=F({ok:!0})}else M=F({error:"Method not allowed"},405)}for(let[z,P]of Object.entries(T))M.headers.set(z,P);return M}if(d.method!=="GET"&&d.method!=="HEAD")return new Response("Method not allowed",{status:405});if(_.pathname==="/"||_.pathname==="/index.html"){let K=_.searchParams.get("uiOrigin");if(K){let j=new URL(K);if(!["http:","https:"].includes(j.protocol)||j.hostname.includes("*")||j.origin!==K)throw Error("Invalid UI origin.")}let z=[...new Set([`http://${g}`,...K?[K]:[]])].join(" "),P=await rr(ie(b,"index.html"),"utf8").catch(()=>"Build required

Run bun run build to create the Fingerprint interface.

"),U=JSON.stringify({token:n,initialProvider:_.searchParams.get("provider")||"",theme:_.searchParams.get("theme")||"",lang:_.searchParams.get("lang")||""}).replaceAll("<","\\u003c"),I=nt(16).toString("base64");return P=P.replace("",``),new Response(P,{headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","referrer-policy":"no-referrer","x-content-type-options":"nosniff","content-security-policy":`default-src 'self' ${z}; connect-src 'self' ${z}; script-src 'self' ${z} 'nonce-${I}'; style-src 'self' ${z} 'unsafe-inline'; img-src 'self' ${z} data:; object-src 'none'; base-uri 'none'; form-action 'none'`}})}let Y=decodeURIComponent(_.pathname),q=at(b,`.${Y}`),X=oa(at(b),q);if(!X||X.startsWith("..")||sa(X)||Y.includes(".."))return new Response("Not found",{status:404});let ee=Bun.file(q);if(!await ee.exists())return new Response("Not found",{status:404});return new Response(ee,{headers:{"content-type":{".js":"text/javascript",".css":"text/css",".svg":"image/svg+xml",".png":"image/png",".woff2":"font/woff2"}[ia(q)]||"application/octet-stream","access-control-allow-origin":"*","x-content-type-options":"nosniff"}})}catch(M){return F({error:r.redact(M)},M instanceof we?413:400,T)}}})}catch(d){throw E.stop(!0),d}J=(async()=>{if(await a.load(),t.demo&&!a.jobs.size){let d=tr();a.jobs.set(d.id,d)}})();try{await J}catch(d){throw k.stop(!0),E.stop(!0),d}return{port:k.port,demo:t.demo,async close(){if(v)return;v=!0;for(let d of s.values())d.abort(Error("Plugin service stopped"));while(s.size)await Bun.sleep(20);await a.flush(),k.stop(!0),E.stop(!0)}}}async function sr(e={},t=1000){let r=he(e),a=Ie(r),n,s=!1,o,c="",l=async()=>{if(!r.port)return!1;let m;try{m=await fetch(`http://127.0.0.1:${r.port}/_fingerprint/health`,{signal:AbortSignal.timeout(1000),redirect:"error"})}catch{return!1}try{let f=JSON.parse(await ae(m,4096));if(m.ok&&f.app===a.app&&f.protocol===a.protocol&&f.configuration===a.configuration)return!0}catch{}throw Error(`Port ${r.port} belongs to an incompatible Fingerprint service or another application. Use another port, or turn Fingerprint off and on after upgrading.`)},i=async()=>{if(s||n||await l())return;try{n=await or(r)}catch(m){if(m.code==="EADDRINUSE"&&await l())return;throw m}if(s)await n.close(),n=void 0},p=()=>o??=i().finally(()=>{o=void 0});await p();let u=setInterval(()=>{p().then(()=>{c=""}).catch((m)=>{let f=m instanceof Error?m.message:String(m);if(f!==c)console.warn(`Fingerprint service recovery: ${f}`);c=f})},t);return u.unref(),{get port(){return n?.port??r.port},get role(){return n?"owner":"attached"},async close(){if(s)return;s=!0,clearInterval(u),await o,await n?.close(),n=void 0}}}var st,to={id:"magpie-fingerprint",server:async(e,t={})=>(st??=sr(t).catch((r)=>{throw st=void 0,r}),await st,{})};export{to as default}; +`))}catch{H=!0,N()}},15000),d.signal.addEventListener("abort",()=>{H=!0,N();try{V.close()}catch{}},{once:!0}),xe(C)},cancel(){N()}});M=new Response(W,{headers:{"content-type":"text/event-stream","x-accel-buffering":"no"}})}else if(!z[2]&&d.method==="GET")M=G(C);else if(!z[2]&&d.method==="DELETE"){if(s.has(C.id))return G({error:"Cancel the running batch before deleting it."},409,T);await a.remove(C.id),M=G({ok:!0})}else M=G({error:"Method not allowed"},405)}for(let[z,C]of Object.entries(T))M.headers.set(z,C);return M}if(d.method!=="GET"&&d.method!=="HEAD")return new Response("Method not allowed",{status:405});if(_.pathname==="/"||_.pathname==="/index.html"){let K=_.searchParams.get("uiOrigin");if(K){let W=new URL(K);if(!["http:","https:"].includes(W.protocol)||W.hostname.includes("*")||W.origin!==K)throw Error("Invalid UI origin.")}let z=[...new Set([`http://${g}`,...K?[K]:[]])].join(" "),C=await nr(ie(b,"index.html"),"utf8").catch(()=>"Build required

Run bun run build to create the Fingerprint interface.

"),U=JSON.stringify({token:n,initialProvider:_.searchParams.get("provider")||"",theme:_.searchParams.get("theme")||"",lang:_.searchParams.get("lang")||""}).replaceAll("<","\\u003c"),N=nt(16).toString("base64");return C=C.replace("",``),new Response(C,{headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","referrer-policy":"no-referrer","x-content-type-options":"nosniff","content-security-policy":`default-src 'self' ${z}; connect-src 'self' ${z}; script-src 'self' ${z} 'nonce-${N}'; style-src 'self' ${z} 'unsafe-inline'; img-src 'self' ${z} data:; object-src 'none'; base-uri 'none'; form-action 'none'`}})}let X=decodeURIComponent(_.pathname),L=at(b,`.${X}`),Y=ia(at(b),L);if(!Y||Y.startsWith("..")||ca(Y)||X.includes(".."))return new Response("Not found",{status:404});let ee=Bun.file(L);if(!await ee.exists())return new Response("Not found",{status:404});return new Response(ee,{headers:{"content-type":{".js":"text/javascript",".css":"text/css",".svg":"image/svg+xml",".png":"image/png",".woff2":"font/woff2"}[la(L)]||"application/octet-stream","access-control-allow-origin":"*","x-content-type-options":"nosniff"}})}catch(M){return G({error:r.redact(M)},M instanceof we?413:400,T)}}})}catch(d){throw E.stop(!0),d}J=(async()=>{if(await a.load(),t.demo&&!a.jobs.size){let d=rr();a.jobs.set(d.id,d)}})();try{await J}catch(d){throw k.stop(!0),E.stop(!0),d}return{port:k.port,demo:t.demo,async close(){if(v)return;v=!0;for(let d of s.values())d.abort(Error("Plugin service stopped"));while(s.size)await Bun.sleep(20);await a.flush(),k.stop(!0),E.stop(!0)}}}async function ir(e={},t=1000){let r=he(e),a=Ne(r),n,s=!1,o,c="",l=async()=>{if(!r.port)return!1;let m;try{m=await fetch(`http://127.0.0.1:${r.port}/_fingerprint/health`,{signal:AbortSignal.timeout(1000),redirect:"error"})}catch{return!1}try{let f=JSON.parse(await ae(m,4096));if(m.ok&&f.app===a.app&&f.protocol===a.protocol&&f.configuration===a.configuration)return!0}catch{}throw Error(`Port ${r.port} belongs to an incompatible Fingerprint service or another application. Use another port, or turn Fingerprint off and on after upgrading.`)},i=async()=>{if(s||n||await l())return;try{n=await sr(r)}catch(m){if(m.code==="EADDRINUSE"&&await l())return;throw m}if(s)await n.close(),n=void 0},p=()=>o??=i().finally(()=>{o=void 0});await p();let u=setInterval(()=>{p().then(()=>{c=""}).catch((m)=>{let f=m instanceof Error?m.message:String(m);if(f!==c)console.warn(`Fingerprint service recovery: ${f}`);c=f})},t);return u.unref(),{get port(){return n?.port??r.port},get role(){return n?"owner":"attached"},async close(){if(s)return;s=!0,clearInterval(u),await o,await n?.close(),n=void 0}}}var st,oo={id:"magpie-fingerprint",server:async(e,t={})=>(st??=ir(t).catch((r)=>{throw st=void 0,r}),await st,{})};export{oo as default}; diff --git a/packages/fingerprint/package.json b/packages/fingerprint/package.json index 78c26586..e9769d1b 100644 --- a/packages/fingerprint/package.json +++ b/packages/fingerprint/package.json @@ -1,6 +1,6 @@ { "name": "@magpie-community/page-fingerprint", - "version": "0.2.3", + "version": "0.2.4", "description": "Check for suspected model substitution with numeric response fingerprints in Magpie, powered by lm-detector.", "type": "module", "license": "MIT", diff --git a/packages/fingerprint/src/service-identity.ts b/packages/fingerprint/src/service-identity.ts index f9925a6b..265234b8 100644 --- a/packages/fingerprint/src/service-identity.ts +++ b/packages/fingerprint/src/service-identity.ts @@ -11,9 +11,10 @@ import { writeSync, } from 'node:fs'; import { join, resolve } from 'node:path'; +import { version } from '../package.json'; import { options, type Options } from './config'; -export const VERSION = '0.2.2'; +export const VERSION = version; // The health endpoint is public, so the configuration digest must not be a // plain hash of a low-entropy gateway key. Keep the salt beside the install's From 4e53fb5ca430e26fe2e5ede3c4ae1bd369dee88f Mon Sep 17 00:00:00 2001 From: KaranocaVe Date: Sun, 8 Nov 2026 15:27:21 +0800 Subject: [PATCH 3/4] Fix fingerprint provider menu clipping --- .../dist/ui/assets/index-1yjBrEfd.js | 12 -- .../dist/ui/assets/index-BNQ_IIC1.css | 1 + .../dist/ui/assets/index-BeAnCYkZ.js | 12 ++ .../dist/ui/assets/index-DeacCGXr.css | 1 - packages/fingerprint/dist/ui/index.html | 4 +- packages/fingerprint/web/AppMenu.tsx | 143 +++++++++++++----- packages/fingerprint/web/style.css | 13 +- 7 files changed, 131 insertions(+), 55 deletions(-) delete mode 100644 packages/fingerprint/dist/ui/assets/index-1yjBrEfd.js create mode 100644 packages/fingerprint/dist/ui/assets/index-BNQ_IIC1.css create mode 100644 packages/fingerprint/dist/ui/assets/index-BeAnCYkZ.js delete mode 100644 packages/fingerprint/dist/ui/assets/index-DeacCGXr.css diff --git a/packages/fingerprint/dist/ui/assets/index-1yjBrEfd.js b/packages/fingerprint/dist/ui/assets/index-1yjBrEfd.js deleted file mode 100644 index 0fba1926..00000000 --- a/packages/fingerprint/dist/ui/assets/index-1yjBrEfd.js +++ /dev/null @@ -1,12 +0,0 @@ -(function(){const p=document.createElement("link").relList;if(p&&p.supports&&p.supports("modulepreload"))return;for(const q of document.querySelectorAll('link[rel="modulepreload"]'))v(q);new MutationObserver(q=>{for(const C of q)if(C.type==="childList")for(const P of C.addedNodes)P.tagName==="LINK"&&P.rel==="modulepreload"&&v(P)}).observe(document,{childList:!0,subtree:!0});function T(q){const C={};return q.integrity&&(C.integrity=q.integrity),q.referrerPolicy&&(C.referrerPolicy=q.referrerPolicy),q.crossOrigin==="use-credentials"?C.credentials="include":q.crossOrigin==="anonymous"?C.credentials="omit":C.credentials="same-origin",C}function v(q){if(q.ep)return;q.ep=!0;const C=T(q);fetch(q.href,C)}})();var Ni={exports:{}},v0={};var os;function Kr(){if(os)return v0;os=1;var r=Symbol.for("react.transitional.element"),p=Symbol.for("react.fragment");function T(v,q,C){var P=null;if(C!==void 0&&(P=""+C),q.key!==void 0&&(P=""+q.key),"key"in q){C={};for(var j in q)j!=="key"&&(C[j]=q[j])}else C=q;return q=C.ref,{$$typeof:r,type:v,key:P,ref:q!==void 0?q:null,props:C}}return v0.Fragment=p,v0.jsx=T,v0.jsxs=T,v0}var rs;function Jr(){return rs||(rs=1,Ni.exports=Kr()),Ni.exports}var o=Jr(),zi={exports:{}},I={};var ds;function Fr(){if(ds)return I;ds=1;var r=Symbol.for("react.transitional.element"),p=Symbol.for("react.portal"),T=Symbol.for("react.fragment"),v=Symbol.for("react.strict_mode"),q=Symbol.for("react.profiler"),C=Symbol.for("react.consumer"),P=Symbol.for("react.context"),j=Symbol.for("react.forward_ref"),R=Symbol.for("react.suspense"),O=Symbol.for("react.memo"),_=Symbol.for("react.lazy"),S=Symbol.for("react.activity"),x=Symbol.for("react.view_transition"),el=Symbol.iterator;function nl(m){return m===null||typeof m!="object"?null:(m=el&&m[el]||m["@@iterator"],typeof m=="function"?m:null)}var Nl={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},W=Object.assign,Bl={};function Y(m,z,w){this.props=m,this.context=z,this.refs=Bl,this.updater=w||Nl}Y.prototype.isReactComponent={},Y.prototype.setState=function(m,z){if(typeof m!="object"&&typeof m!="function"&&m!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,m,z,"setState")},Y.prototype.forceUpdate=function(m){this.updater.enqueueForceUpdate(this,m,"forceUpdate")};function El(){}El.prototype=Y.prototype;function St(m,z,w){this.props=m,this.context=z,this.refs=Bl,this.updater=w||Nl}var nt=St.prototype=new El;nt.constructor=St,W(nt,Y.prototype),nt.isPureReactComponent=!0;var ut=Array.isArray;function G(){}var hl={H:null,A:null,T:null,S:null},ct=Object.prototype.hasOwnProperty;function rt(m,z,w){var Q=w.ref;return{$$typeof:r,type:m,key:z,ref:Q!==void 0?Q:null,props:w}}function dt(m,z){return rt(m.type,z,m.props)}function et(m){return typeof m=="object"&&m!==null&&m.$$typeof===r}function xt(m){var z={"=":"=0",":":"=2"};return"$"+m.replace(/[=:]/g,function(w){return z[w]})}var te=/\/+/g;function Rl(m,z){return typeof m=="object"&&m!==null&&m.key!=null?xt(""+m.key):z.toString(36)}function D(m){switch(m.status){case"fulfilled":return m.value;case"rejected":throw m.reason;default:switch(typeof m.status=="string"?m.then(G,G):(m.status="pending",m.then(function(z){m.status==="pending"&&(m.status="fulfilled",m.value=z)},function(z){m.status==="pending"&&(m.status="rejected",m.reason=z)})),m.status){case"fulfilled":return m.value;case"rejected":throw m.reason}}throw m}function J(m,z,w,Q,al){var rl=typeof m;(rl==="undefined"||rl==="boolean")&&(m=null);var dl=!1;if(m===null)dl=!0;else switch(rl){case"bigint":case"string":case"number":dl=!0;break;case"object":switch(m.$$typeof){case r:case p:dl=!0;break;case _:return dl=m._init,J(dl(m._payload),z,w,Q,al)}}if(dl)return al=al(m),dl=Q===""?"."+Rl(m,0):Q,ut(al)?(w="",dl!=null&&(w=dl.replace(te,"$&/")+"/"),J(al,z,w,"",function(N){return N})):al!=null&&(et(al)&&(al=dt(al,w+(al.key==null||m&&m.key===al.key?"":(""+al.key).replace(te,"$&/")+"/")+dl)),z.push(al)),1;dl=0;var L=Q===""?".":Q+":";if(ut(m))for(var k=0;k>>1,fl=D[Al];if(0>>1;Alq(bt,F))mq(z,bt)?(D[Al]=z,D[m]=F,Al=m):(D[Al]=bt,D[Rt]=F,Al=Rt);else if(mq(z,F))D[Al]=z,D[m]=F,Al=m;else break l}}return J}function q(D,J){var F=D.sortIndex-J.sortIndex;return F!==0?F:D.id-J.id}if(r.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var C=performance;r.unstable_now=function(){return C.now()}}else{var P=Date,j=P.now();r.unstable_now=function(){return P.now()-j}}var R=[],O=[],_=1,S=null,x=3,el=!1,nl=!1,Nl=!1,W=!1,Bl=typeof setTimeout=="function"?setTimeout:null,Y=typeof clearTimeout=="function"?clearTimeout:null,El=typeof setImmediate<"u"?setImmediate:null;function St(D){for(var J=T(O);J!==null;){if(J.callback===null)v(O);else if(J.startTime<=D)v(O),J.sortIndex=J.expirationTime,p(R,J);else break;J=T(O)}}function nt(D){if(Nl=!1,St(D),!nl)if(T(R)!==null)nl=!0,ut||(ut=!0,et());else{var J=T(O);J!==null&&Rl(nt,J.startTime-D)}}var ut=!1,G=-1,hl=5,ct=-1;function rt(){return W?!0:!(r.unstable_now()-ctD&&rt());){var Al=S.callback;if(typeof Al=="function"){S.callback=null,x=S.priorityLevel;var fl=Al(S.expirationTime<=D);if(D=r.unstable_now(),typeof fl=="function"){S.callback=fl,St(D),J=!0;break t}S===T(R)&&v(R),St(D)}else v(R);S=T(R)}if(S!==null)J=!0;else{var At=T(O);At!==null&&Rl(nt,At.startTime-D),J=!1}}break l}finally{S=null,x=F,el=!1}J=void 0}}finally{J?et():ut=!1}}}var et;if(typeof El=="function")et=function(){El(dt)};else if(typeof MessageChannel<"u"){var xt=new MessageChannel,te=xt.port2;xt.port1.onmessage=dt,et=function(){te.postMessage(null)}}else et=function(){Bl(dt,0)};function Rl(D,J){G=Bl(function(){D(r.unstable_now())},J)}r.unstable_IdlePriority=5,r.unstable_ImmediatePriority=1,r.unstable_LowPriority=4,r.unstable_NormalPriority=3,r.unstable_Profiling=null,r.unstable_UserBlockingPriority=2,r.unstable_cancelCallback=function(D){D.callback=null},r.unstable_forceFrameRate=function(D){0>D||125Al?(D.sortIndex=F,p(O,D),T(R)===null&&D===T(O)&&(Nl?(Y(G),G=-1):Nl=!0,Rl(nt,F-Al))):(D.sortIndex=fl,p(R,D),nl||el||(nl=!0,ut||(ut=!0,et()))),D},r.unstable_shouldYield=rt,r.unstable_wrapCallback=function(D){var J=x;return function(){var F=x;x=J;try{return D.apply(this,arguments)}finally{x=F}}}})(Zi)),Zi}var vs;function Wr(){return vs||(vs=1,Oi.exports=$r()),Oi.exports}var Ci={exports:{}},tt={};var ys;function kr(){if(ys)return tt;ys=1;var r=qi();function p(_){var S="https://react.dev/errors/"+_;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(r)}catch(p){console.error(p)}}return r(),Ci.exports=kr(),Ci.exports}var Es;function Pr(){if(Es)return y0;Es=1;var r=Wr(),p=qi(),T=Ir();function v(l){var t="https://react.dev/errors/"+l;if(1yl||(l.current=U[yl],U[yl]=null,yl--)}function bl(l,t){yl++,U[yl]=l.current,l.current=t}var Vt=zl(null),Kt=zl(null),Jt=zl(null),Oe=zl(null);function _a(l,t){switch(bl(Jt,t),bl(Kt,l),bl(Vt,null),t.nodeType){case 9:case 11:l=(l=t.documentElement)&&(l=l.namespaceURI)?S4(l):0;break;default:if(l=t.tagName,t=t.namespaceURI)t=S4(t),l=A4(t,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}_l(Vt),bl(Vt,l)}function me(){_l(Vt),_l(Kt),_l(Jt)}function na(l){var t=l.memoizedState;t!==null&&(yn._currentValue=t.memoizedState,bl(Oe,l)),t=Vt.current;var e=A4(t,l.type);t!==e&&(bl(Kt,l),bl(Vt,e))}function Ft(l){Kt.current===l&&(_l(Vt),_l(Kt)),Oe.current===l&&(_l(Oe),yn._currentValue=N)}var bn,Bi;function Ze(l){if(bn===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);bn=t&&t[1]||"",Bi=-1)":-1n||s[a]!==g[n]){var b=` -`+s[a].replace(" at new "," at ");return l.displayName&&b.includes("")&&(b=b.replace("",l.displayName)),b}while(1<=a&&0<=n);break}}}finally{Fu=!1,Error.prepareStackTrace=e}return(e=l?l.displayName||l.name:"")?Ze(e):""}function $s(l,t){switch(l.tag){case 26:case 27:case 5:return Ze(l.type);case 16:return Ze("Lazy");case 13:return l.child!==t&&t!==null?Ze("Suspense Fallback"):Ze("Suspense");case 19:return Ze("SuspenseList");case 0:case 15:return $u(l.type,!1);case 11:return $u(l.type.render,!1);case 1:return $u(l.type,!0);case 31:return Ze("Activity");case 30:return Ze("ViewTransition");default:return""}}function Yi(l){try{var t="",e=null;do t+=$s(l,e),e=l,l=l.return;while(l);return t}catch(a){return` -Error generating stack: `+a.message+` -`+a.stack}}var Wu=Object.prototype.hasOwnProperty,ku=r.unstable_scheduleCallback,Iu=r.unstable_cancelCallback,Ws=r.unstable_shouldYield,ks=r.unstable_requestPaint,pt=r.unstable_now,Is=r.unstable_getCurrentPriorityLevel,Li=r.unstable_ImmediatePriority,Gi=r.unstable_UserBlockingPriority,A0=r.unstable_NormalPriority,Ps=r.unstable_LowPriority,wi=r.unstable_IdlePriority,l6=r.log,t6=r.unstable_setDisableYieldValue,pn=null,Tt=null;function Ce(l){if(typeof l6=="function"&&t6(l),Tt&&typeof Tt.setStrictMode=="function")try{Tt.setStrictMode(pn,l)}catch{}}var Mt=Math.clz32?Math.clz32:n6,e6=Math.log,a6=Math.LN2;function n6(l){return l>>>=0,l===0?32:31-(e6(l)/a6|0)|0}var b0=256,p0=262144,T0=4194304;function ua(l){var t=l&42;if(t!==0)return t;switch(l&-l){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return l&-l;case 262144:case 524288:case 1048576:case 2097152:return l&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return l&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return l}}function M0(l,t,e){var a=l.pendingLanes;if(a===0)return 0;var n=0,u=l.suspendedLanes,c=l.pingedLanes;l=l.warmLanes;var f=a&134217727;return f!==0?(a=f&~u,a!==0?n=ua(a):(c&=f,c!==0?n=ua(c):e||(e=f&~l,e!==0&&(n=ua(e))))):(f=a&~u,f!==0?n=ua(f):c!==0?n=ua(c):e||(e=a&~l,e!==0&&(n=ua(e)))),n===0?0:t!==0&&t!==n&&(t&u)===0&&(u=n&-n,e=t&-t,u>=e||u===32&&(e&4194048)!==0)?t:n}function Tn(l,t){return(l.pendingLanes&~(l.suspendedLanes&~l.pingedLanes)&t)===0}function Qi(l,t){(t&8)!==0&&(t|=t&32);var e=l.entangledLanes;if(e!==0)for(l=l.entanglements,e&=t;0e;e++)t.push(l);return t}function Mn(l,t){l.pendingLanes|=t,t!==268435456&&(l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0)}function c6(l,t,e,a,n,u){var c=l.pendingLanes;l.pendingLanes=e,l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0,l.expiredLanes&=e,l.entangledLanes&=e,l.errorRecoveryDisabledLanes&=e,l.shellSuspendCounter=0;var f=l.entanglements,s=l.expirationTimes,g=l.hiddenUpdates;for(e=c&~e;0"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),s1=!1;if(ye)try{var _n={};Object.defineProperty(_n,"passive",{get:function(){s1=!0}}),window.addEventListener("test",_n,_n),window.removeEventListener("test",_n,_n)}catch{s1=!1}var De=null,o1=null,Z0=null;function vf(){if(Z0)return Z0;var l,t=o1,e=t.length,a,n="value"in De?De.value:De.textContent,u=n.length;for(l=0;l=Cn),bf=" ",pf=!1;function Tf(l,t){switch(l){case"keyup":return G6.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Mf(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var Ua=!1;function Q6(l,t){switch(l){case"compositionend":return Mf(t);case"keypress":return t.which!==32?null:(pf=!0,bf);case"textInput":return l=t.data,l===bf&&pf?null:l;default:return null}}function X6(l,t){if(Ua)return l==="compositionend"||!v1&&Tf(l,t)?(l=vf(),Z0=o1=De=null,Ua=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1"u")return null;try{return l.activeElement||l.body}catch{return l.body}}function Df(l){for(;l&&l.firstChild;)l=l.firstChild;return l}function xf(l,t){var e=Df(l);l=0;for(var a;e;){if(e.nodeType===3){if(a=l+e.textContent.length,l<=t&&a>=t)return{node:e,offset:t-l};l=a}l:{for(;e;){if(e.nextSibling){e=e.nextSibling;break l}e=e.parentNode}e=void 0}e=Df(e)}}function Rf(l,t){return l&&t?l===t?!0:l&&l.nodeType===3?!1:t&&t.nodeType===3?Rf(l,t.parentNode):"contains"in l?l.contains(t):l.compareDocumentPosition?!!(l.compareDocumentPosition(t)&16):!1:!1}function Vf(l){l=l!=null&&l.ownerDocument!=null&&l.ownerDocument.defaultView!=null?l.ownerDocument.defaultView:window;for(var t=E1(l.document);t instanceof l.HTMLIFrameElement;){try{var e=typeof t.contentWindow.location.href=="string"}catch{e=!1}if(e)l=t.contentWindow;else break;t=E1(l.document)}return t}function S1(l){var t=l&&l.nodeName&&l.nodeName.toLowerCase();return t&&(t==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||t==="textarea"||l.contentEditable==="true")}var P6=ye&&"documentMode"in document&&11>=document.documentMode,qa=null,A1=null,Vn=null,b1=!1;function jf(l,t,e){var a=e.window===e?e.document:e.nodeType===9?e:e.ownerDocument;b1||qa==null||qa!==E1(a)||(a=qa,"selectionStart"in a&&S1(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Vn&&Rn(Vn,a)||(Vn=a,a=Vu(A1,"onSelect"),0>=c,n-=c,ae=1<<32-Mt(t)+n|e<$?(wl=X,X=null):wl=X.sibling;var ml=h(y,X,E[$],M);if(ml===null){X===null&&(X=wl);break}l&&X&&ml.alternate===null&&t(y,X),d=u(ml,d,$),ol===null?V=ml:ol.sibling=ml,ol=ml,X=wl}if($===E.length)return e(y,X),ul&&Ae(y,$),V;if(X===null){for(;$$?(wl=X,X=null):wl=X.sibling;var aa=h(y,X,ml.value,M);if(aa===null){X===null&&(X=wl);break}l&&X&&aa.alternate===null&&t(y,X),d=u(aa,d,$),ol===null?V=aa:ol.sibling=aa,ol=aa,X=wl}if(ml.done)return e(y,X),ul&&Ae(y,$),V;if(X===null){for(;!ml.done;$++,ml=E.next())ml=H(y,ml.value,M),ml!==null&&(d=u(ml,d,$),ol===null?V=ml:ol.sibling=ml,ol=ml);return ul&&Ae(y,$),V}for(X=a(X);!ml.done;$++,ml=E.next())ml=A(X,y,$,ml.value,M),ml!==null&&(l&&(wl=ml.alternate,wl!==null&&X.delete(wl.key===null?$:wl.key)),d=u(ml,d,$),ol===null?V=ml:ol.sibling=ml,ol=ml);return l&&X.forEach(function(Xr){return t(y,Xr)}),ul&&Ae(y,$),V}function tl(y,d,E,M){if(typeof E=="object"&&E!==null&&E.type===dt&&E.key===null&&E.props.ref===void 0&&(E=E.props.children),typeof E=="object"&&E!==null){switch(E.$$typeof){case ct:l:{for(var V=E.key;d!==null;){if(d.key===V){if(V=E.type,V===dt){if(d.tag===7){e(y,d.sibling),M=n(d,E.props.children),qe(M,E),M.return=y,y=M;break l}}else if(d.elementType===V||typeof V=="object"&&V!==null&&V.$$typeof===fl&&Ea(V)===d.type){e(y,d.sibling),M=n(d,E.props),qe(M,E),M.return=y,y=M;break l}e(y,d);break}else t(y,d);d=d.sibling}E.type===dt?(M=ra(E.props.children,y.mode,M,E.key),qe(M,E),M.return=y,y=M):(M=Y0(E.type,E.key,E.props,null,y.mode,M),qe(M,E),M.return=y,y=M)}return c(y);case rt:l:{for(V=E.key;d!==null;){if(d.key===V)if(d.tag===4&&d.stateNode.containerInfo===E.containerInfo&&d.stateNode.implementation===E.implementation){e(y,d.sibling),M=n(d,E.children||[]),M.return=y,y=M;break l}else{e(y,d);break}else t(y,d);d=d.sibling}M=_1(E,y.mode,M),M.return=y,y=M}return c(y);case fl:return E=Ea(E),tl(y,d,E,M)}if(dl(E))return Z(y,d,E,M);if(Q(E)){if(V=Q(E),typeof V!="function")throw Error(v(150));return E=V.call(E),B(y,d,E,M)}if(typeof E.then=="function")return tl(y,d,W0(E),M);if(E.$$typeof===Rl)return tl(y,d,K0(y,E),M);k0(y,E)}return typeof E=="string"&&E!==""||typeof E=="number"||typeof E=="bigint"?(E=""+E,d!==null&&d.tag===6?(e(y,d.sibling),M=n(d,E),M.return=y,y=M):(e(y,d),M=z1(E,y.mode,M),M.return=y,y=M),c(y)):e(y,d)}return function(y,d,E,M){try{Ln=0;var V=tl(y,d,E,M);return Ja=null,V}catch(X){if(X===Ka||X===F0)throw X;var ol=ht(29,X,null,y.mode);return ol.lanes=M,ol.return=y,ol}}}var Aa=c2(!0),i2=c2(!1),Be=!1;function q1(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function B1(l,t){l=l.updateQueue,t.updateQueue===l&&(t.updateQueue={baseState:l.baseState,firstBaseUpdate:l.firstBaseUpdate,lastBaseUpdate:l.lastBaseUpdate,shared:l.shared,callbacks:null})}function Ye(l){return{lane:l,tag:0,payload:null,callback:null,next:null}}function Le(l,t,e){var a=l.updateQueue;if(a===null)return null;if(a=a.shared,(gl&2)!==0){var n=a.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),a.pending=t,t=B0(l),Qf(l,null,e),t}return q0(l,a,t,e),B0(l)}function Gn(l,t,e){if(t=t.updateQueue,t!==null&&(t=t.shared,(e&4194048)!==0)){var a=t.lanes;a&=l.pendingLanes,e|=a,t.lanes=e,Ji(l,e)}}function Y1(l,t){var e=l.updateQueue,a=l.alternate;if(a!==null&&(a=a.updateQueue,e===a)){var n=null,u=null;if(e=e.firstBaseUpdate,e!==null){do{var c={lane:e.lane,tag:e.tag,payload:e.payload,callback:null,next:null};u===null?n=u=c:u=u.next=c,e=e.next}while(e!==null);u===null?n=u=t:u=u.next=t}else n=u=t;e={baseState:a.baseState,firstBaseUpdate:n,lastBaseUpdate:u,shared:a.shared,callbacks:a.callbacks},l.updateQueue=e;return}l=e.lastBaseUpdate,l===null?e.firstBaseUpdate=t:l.next=t,e.lastBaseUpdate=t}var L1=!1;function wn(){if(L1){var l=Xa;if(l!==null)throw l}}function Qn(l,t,e,a){L1=!1;var n=l.updateQueue;Be=!1;var u=n.firstBaseUpdate,c=n.lastBaseUpdate,f=n.shared.pending;if(f!==null){n.shared.pending=null;var s=f,g=s.next;s.next=null,c===null?u=g:c.next=g,c=s;var b=l.alternate;b!==null&&(b=b.updateQueue,f=b.lastBaseUpdate,f!==c&&(f===null?b.firstBaseUpdate=g:f.next=g,b.lastBaseUpdate=s))}if(u!==null){var H=n.baseState;c=0,b=g=s=null,f=u;do{var h=f.lane&-536870913,A=h!==f.lane;if(A?(sl&h)===h:(a&h)===h){h!==0&&h===ya&&(L1=!0),b!==null&&(b=b.next={lane:0,tag:f.tag,payload:f.payload,callback:null,next:null});l:{var Z=l,B=f;h=t;var tl=e;switch(B.tag){case 1:if(Z=B.payload,typeof Z=="function"){H=Z.call(tl,H,h);break l}H=Z;break l;case 3:Z.flags=Z.flags&-65537|128;case 0:if(Z=B.payload,h=typeof Z=="function"?Z.call(tl,H,h):Z,h==null)break l;H=G({},H,h);break l;case 2:Be=!0}}h=f.callback,h!==null&&(l.flags|=64,A&&(l.flags|=8192),A=n.callbacks,A===null?n.callbacks=[h]:A.push(h))}else A={lane:h,tag:f.tag,payload:f.payload,callback:f.callback,next:null},b===null?(g=b=A,s=H):b=b.next=A,c|=h;if(f=f.next,f===null){if(f=n.shared.pending,f===null)break;A=f,f=A.next,A.next=null,n.lastBaseUpdate=A,n.shared.pending=null}}while(!0);b===null&&(s=H),n.baseState=s,n.firstBaseUpdate=g,n.lastBaseUpdate=b,u===null&&(n.shared.lanes=0),Fe|=c,l.lanes=c,l.memoizedState=H}}function f2(l,t){if(typeof l!="function")throw Error(v(191,l));l.call(t)}function s2(l,t){var e=l.callbacks;if(e!==null)for(l.callbacks=null,l=0;lu?u:8;var c=L.T,f={};f.types=c!==null?c.types:null,L.T=f,ic(l,!1,t,e);try{var s=n(),g=L.S;if(g!==null&&g(f,s),s!==null&&typeof s=="object"&&typeof s.then=="function"){var b=oo(s,a);Fn(l,t,b,Ct(l))}else Fn(l,t,a,Ct(l))}catch(H){Fn(l,t,{then:function(){},status:"rejected",reason:H},Ct())}finally{k.p=u,c!==null&&f.types!==null&&(c.types=f.types),L.T=c}}function go(){}function uc(l,t,e,a){if(l.tag!==5)throw Error(v(476));var n=L2(l).queue;Y2(l,n,t,N,e===null?go:function(){return G2(l),e(a)})}function L2(l){var t=l.memoizedState;if(t!==null)return t;t={memoizedState:N,baseState:N,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Me,lastRenderedState:N},next:null};var e={};return t.next={memoizedState:e,baseState:e,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Me,lastRenderedState:e},next:null},l.memoizedState=t,l=l.alternate,l!==null&&(l.memoizedState=t),t}function G2(l){var t=L2(l);t.next===null&&(t=l.alternate.memoizedState),Fn(l,t.next.queue,{},Ct())}function cc(){return Wl(yn)}function w2(){return Ul().memoizedState}function Q2(){return Ul().memoizedState}function Eo(l){for(var t=l.return;t!==null;){switch(t.tag){case 24:case 3:var e=Ct();l=Ye(e);var a=Le(t,l,e);a!==null&&(Et(a,t,e),Gn(a,t,e)),t={cache:R1()},l.payload=t;return}t=t.return}}function So(l,t,e){var a=Ct();e={lane:a,revertLane:0,gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null},iu(l)?K2(t,e):(e=H1(l,t,e,a),e!==null&&(Et(e,l,a),J2(e,t,a)))}function X2(l,t,e){var a=Ct();Fn(l,t,e,a)}function Fn(l,t,e,a){var n={lane:a,revertLane:0,gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null};if(iu(l))K2(t,n);else{var u=l.alternate;if(l.lanes===0&&(u===null||u.lanes===0)&&(u=t.lastRenderedReducer,u!==null))try{var c=t.lastRenderedState,f=u(c,e);if(n.hasEagerState=!0,n.eagerState=f,Nt(f,c))return q0(l,t,n,0),Ol===null&&U0(),!1}catch{}if(e=H1(l,t,n,a),e!==null)return Et(e,l,a),J2(e,t,a),!0}return!1}function ic(l,t,e,a){if(a={lane:2,revertLane:kc(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},iu(l)){if(t)throw Error(v(479))}else t=H1(l,e,a,2),t!==null&&Et(t,l,2)}function iu(l){var t=l.alternate;return l===ll||t!==null&&t===ll}function K2(l,t){Fa=lu=!0;var e=l.pending;e===null?t.next=t:(t.next=e.next,e.next=t),l.pending=t}function J2(l,t,e){if((e&4194048)!==0){var a=t.lanes;a&=l.pendingLanes,e|=a,t.lanes=e,Ji(l,e)}}var fu={readContext:Wl,use:au,useCallback:Vl,useContext:Vl,useEffect:Vl,useImperativeHandle:Vl,useLayoutEffect:Vl,useInsertionEffect:Vl,useMemo:Vl,useReducer:Vl,useRef:Vl,useState:Vl,useDebugValue:Vl,useDeferredValue:Vl,useTransition:Vl,useSyncExternalStore:Vl,useId:Vl,useHostTransitionStatus:Vl,useFormState:Vl,useActionState:Vl,useOptimistic:Vl,useMemoCache:Vl,useCacheRefresh:Vl,useEffectEvent:Vl},F2={readContext:Wl,use:au,useCallback:function(l,t){return ft().memoizedState=[l,t===void 0?null:t],l},useContext:Wl,useEffect:C2,useImperativeHandle:function(l,t,e){e=e!=null?e.concat([l]):null,uu(4194308,4,V2.bind(null,t,l),e)},useLayoutEffect:function(l,t){return uu(4194308,4,l,t)},useInsertionEffect:function(l,t){uu(4,2,l,t)},useMemo:function(l,t){var e=ft();t=t===void 0?null:t;var a=l();if(ba){Ce(!0);try{l()}finally{Ce(!1)}}return e.memoizedState=[a,t],a},useReducer:function(l,t,e){var a=ft();if(e!==void 0){var n=e(t);if(ba){Ce(!0);try{e(t)}finally{Ce(!1)}}}else n=t;return a.memoizedState=a.baseState=n,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:n},a.queue=l,l=l.dispatch=So.bind(null,ll,l),[a.memoizedState,l]},useRef:function(l){var t=ft();return l={current:l},t.memoizedState=l},useState:function(l){l=lc(l);var t=l.queue,e=X2.bind(null,ll,t);return t.dispatch=e,[l.memoizedState,e]},useDebugValue:ac,useDeferredValue:function(l,t){var e=ft();return nc(e,l,t)},useTransition:function(){var l=lc(!1);return l=Y2.bind(null,ll,l.queue,!0,!1),ft().memoizedState=l,[!1,l]},useSyncExternalStore:function(l,t,e){var a=ll,n=ft();if(ul){if(e===void 0)throw Error(v(407));e=e()}else{if(e=t(),Ol===null)throw Error(v(349));(sl&127)!==0||v2(a,t,e)}n.memoizedState=e;var u={value:e,getSnapshot:t};return n.queue=u,C2(g2.bind(null,a,u,l),[l]),a.flags|=2048,Wa(9,{destroy:void 0},y2.bind(null,a,u,e,t),null),e},useId:function(){var l=ft(),t=Ol.identifierPrefix;if(ul){var e=ne,a=ae;e=(a&~(1<<32-Mt(a)-1)).toString(32)+e,t="_"+t+"R_"+e,e=tu++,0<\/script>",u=u.removeChild(u.firstChild);break;case"select":u=typeof a.is=="string"?c.createElement("select",{is:a.is}):c.createElement("select"),a.multiple?u.multiple=!0:a.size&&(u.size=a.size);break;default:u=typeof a.is=="string"?c.createElement(n,{is:a.is}):c.createElement(n)}}u[$l]=t,u[mt]=a;l:for(c=t.child;c!==null;){if(c.tag===5||c.tag===6)u.appendChild(c.stateNode);else if(c.tag!==4&&c.tag!==27&&c.child!==null){c.child.return=c,c=c.child;continue}if(c===t)break l;for(;c.sibling===null;){if(c.return===null||c.return===t)break l;c=c.return}c.sibling.return=c.return,c=c.sibling}t.stateNode=u;l:switch(lt(u,n,a),n){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break l;case"img":a=!0;break l;default:a=!1}a&&Ne(t)}}return Cl(t),t.subtreeFlags&=-33554433,Ac(t,t.type,l===null?null:l.memoizedProps,t.pendingProps,e),null;case 6:if(l&&t.stateNode!=null)l.memoizedProps!==a&&Ne(t);else{if(typeof a!="string"&&t.stateNode===null)throw Error(v(166));if(l=Jt.current,Qa(t)){if(l=t.stateNode,e=t.memoizedProps,a=null,n=Kl,n!==null)switch(n.tag){case 27:case 5:a=n.memoizedProps}l[$l]=t,l=!!(l.nodeValue===e||a!==null&&a.suppressHydrationWarning===!0||g4(l.nodeValue,e)),l||je(t,!0)}else l=i0(l).createTextNode(a),l[$l]=t,t.stateNode=l}return Cl(t),null;case 31:if(e=t.memoizedState,l===null||l.memoizedState!==null){if(a=Qa(t),e!==null){if(l===null){if(!a)throw Error(v(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(v(557));l[$l]=t}else da(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Cl(t),l=!1}else e=C1(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=e),l=!0;if(!l)return t.flags&256?(zt(t),t):(zt(t),null);if((t.flags&128)!==0)throw Error(v(558))}return Cl(t),null;case 13:if(a=t.memoizedState,l===null||l.memoizedState!==null&&l.memoizedState.dehydrated!==null){if(n=Qa(t),a!==null&&a.dehydrated!==null){if(l===null){if(!n)throw Error(v(318));if(n=t.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(v(317));n[$l]=t}else da(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Cl(t),n=!1}else n=C1(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=n),n=!0;if(!n)return t.flags&256?(zt(t),t):(zt(t),null)}return zt(t),(t.flags&128)!==0?(t.lanes=e,t):(e=a!==null,l=l!==null&&l.memoizedState!==null,e&&(a=t.child,n=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(n=a.alternate.memoizedState.cachePool.pool),u=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(u=a.memoizedState.cachePool.pool),u!==n&&(a.flags|=2048)),e!==l&&e&&(t.child.flags|=8192),hu(t,t.updateQueue),Cl(t),null);case 4:return me(),l===null&&ti(t.stateNode.containerInfo),t.flags|=67108864,Cl(t),null;case 10:return pe(t.type),Cl(t),null;case 19:if(X1(t),a=t.memoizedState,a===null)return Cl(t),null;if(n=(t.flags&128)!==0,u=a.rendering,u===null)if(n)Wn(a,!1);else{if(jl!==0||l!==null&&(l.flags&128)!==0)for(l=t.child;l!==null;){if(u=P0(l),u!==null){for(t.flags|=128,Wn(a,!1),l=u.updateQueue,t.updateQueue=l,hu(t,l),t.subtreeFlags=0,l=e,e=t.child;e!==null;)Xf(e,l),e=e.sibling;return Xn(t,Il.current&1|2),ul&&Ae(t,a.treeForkCount),t.child}l=l.sibling}a.tail!==null&&pt()>Nu&&(t.flags|=128,n=!0,Wn(a,!1),t.lanes=4194304)}else{if(!n)if(l=P0(u),l!==null){if(t.flags|=128,n=!0,l=l.updateQueue,t.updateQueue=l,hu(t,l),Wn(a,!0),a.tail===null&&a.tailMode!=="collapsed"&&a.tailMode!=="visible"&&!u.alternate&&!ul)return Cl(t),null}else 2*pt()-a.renderingStartTime>Nu&&e!==536870912&&(t.flags|=128,n=!0,Wn(a,!1),t.lanes=4194304);a.isBackwards?(u.sibling=t.child,t.child=u):(l=a.last,l!==null?l.sibling=u:t.child=u,a.last=u)}if(a.tail!==null){l=a.tail;l:{for(e=l;e!==null;){if(e.alternate!==null){e=!1;break l}e=e.sibling}e=!0}return a.rendering=l,a.tail=l.sibling,a.renderingStartTime=pt(),l.sibling=null,u=Il.current,u=n?u&1|2:u&1,a.tailMode==="visible"||a.tailMode==="collapsed"||!e||ul?Xn(t,u):(e=u,bl(kl,t),bl(Il,e),at===null&&(at=t)),ul&&Ae(t,a.treeForkCount),l}return Cl(t),null;case 22:case 23:return zt(t),w1(),a=t.memoizedState!==null,l!==null?l.memoizedState!==null!==a&&(t.flags|=8192):a&&(t.flags|=8192),a?(e&536870912)!==0&&(t.flags&128)===0&&(Cl(t),t.subtreeFlags&6&&(t.flags|=8192)):Cl(t),e=t.updateQueue,e!==null&&hu(t,e.retryQueue),e=null,l!==null&&l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(e=l.memoizedState.cachePool.pool),a=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(a=t.memoizedState.cachePool.pool),a!==e&&(t.flags|=2048),l!==null&&_l(ga),null;case 24:return e=null,l!==null&&(e=l.memoizedState.cache),t.memoizedState.cache!==e&&(t.flags|=2048),pe(Yl),Cl(t),null;case 25:return null;case 30:return t.flags|=33554432,Cl(t),null}throw Error(v(156,t.tag))}function No(l,t){switch(O1(t),t.tag){case 1:return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 3:return pe(Yl),me(),l=t.flags,(l&65536)!==0&&(l&128)===0?(t.flags=l&-65537|128,t):null;case 26:case 27:case 5:return Ft(t),null;case 31:if(t.memoizedState!==null){if(zt(t),t.alternate===null)throw Error(v(340));da()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 13:if(zt(t),l=t.memoizedState,l!==null&&l.dehydrated!==null){if(t.alternate===null)throw Error(v(340));da()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 19:return X1(t),l=t.flags,l&65536?(t.flags=l&-65537|128,l=t.memoizedState,l!==null&&(l.rendering=null,l.tail=null),t.flags|=4,t):null;case 4:return me(),null;case 10:return pe(t.type),null;case 22:case 23:return zt(t),w1(),l!==null&&_l(ga),l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 24:return pe(Yl),null;case 25:return null;default:return null}}function S8(l,t){switch(O1(t),t.tag){case 3:pe(Yl),me();break;case 26:case 27:case 5:Ft(t);break;case 4:me();break;case 31:t.memoizedState!==null&&zt(t);break;case 13:zt(t);break;case 19:X1(t);break;case 10:pe(t.type);break;case 22:case 23:zt(t),w1(),l!==null&&_l(ga);break;case 24:pe(Yl)}}function kn(l,t){try{var e=t.updateQueue,a=e!==null?e.lastEffect:null;if(a!==null){var n=a.next;e=n;do{if((e.tag&l)===l){a=void 0;var u=e.create,c=e.inst;a=u(),c.destroy=a}e=e.next}while(e!==n)}}catch(f){Tl(t,t.return,f)}}function Xe(l,t,e){try{var a=t.updateQueue,n=a!==null?a.lastEffect:null;if(n!==null){var u=n.next;a=u;do{if((a.tag&l)===l){var c=a.inst,f=c.destroy;if(f!==void 0){c.destroy=void 0,n=t;var s=e,g=f;try{g()}catch(b){Tl(n,s,b)}}}a=a.next}while(a!==u)}}catch(b){Tl(t,t.return,b)}}function A8(l){var t=l.updateQueue;if(t!==null){var e=l.stateNode;try{s2(t,e)}catch(a){Tl(l,l.return,a)}}}function b8(l,t,e){e.props=pa(l.type,l.memoizedProps),e.state=l.memoizedState;try{e.componentWillUnmount()}catch(a){Tl(l,t,a)}}function ue(l,t){try{var e=l.ref;if(e!==null){switch(l.tag){case 26:case 27:case 5:var a=l.stateNode;break;case 30:var n=l.stateNode,u=ge(l.memoizedProps,n);(n.ref===null||n.ref.name!==u)&&(n.ref=_4(u)),a=n.ref;break;case 7:if(l.stateNode===null){var c=new Dt(l);S(l.child,!1,yr,c,void 0,void 0),l.stateNode=c}a=l.stateNode;break;default:a=l.stateNode}typeof e=="function"?l.refCleanup=e(a):e.current=a}}catch(f){Tl(l,t,f)}}function Pl(l,t){var e=l.ref,a=l.refCleanup;if(e!==null)if(typeof a=="function")try{a()}catch(n){Tl(l,t,n)}finally{l.refCleanup=null,l=l.alternate,l!=null&&(l.refCleanup=null)}else if(typeof e=="function")try{e(null)}catch(n){Tl(l,t,n)}else e.current=null}function vu(l,t){if((l.tag===5||l.tag===27||l.tag===6)&&l.alternate===null&&t!==null)for(var e=0;e title"))),lt(a,t,e),a[$l]=l,Xl(a),t=a;break l;case"link":if(u=X4("link","href",n).get(t+(e.href||""))){for(c=0;ctl&&(c=tl,tl=B,B=c);var y=xf(f,B),d=xf(f,tl);if(y&&d&&(A.rangeCount!==1||A.anchorNode!==y.node||A.anchorOffset!==y.offset||A.focusNode!==d.node||A.focusOffset!==d.offset)){var E=H.createRange();E.setStart(y.node,y.offset),A.removeAllRanges(),B>tl?(A.addRange(E),A.extend(d.node,d.offset)):(E.setEnd(d.node,d.offset),A.addRange(E))}}}}for(H=[],A=f;A=A.parentNode;)A.nodeType===1&&H.push({element:A,left:A.scrollLeft,top:A.scrollTop});for(typeof f.focus=="function"&&f.focus(),f=0;fe?32:e,L.T=null,e=Lc,Lc=null;var u=Pt,c=re;if(xl=0,Na=Pt=null,re=0,(gl&6)!==0)throw Error(v(331));var f=gl;if(gl|=4,Q8(u.current),L8(u,u.current,c,e),gl=f,n0(0,!1),Tt&&typeof Tt.onPostCommitFiberRoot=="function")try{Tt.onPostCommitFiberRoot(pn,u)}catch{}return!0}finally{k.p=n,L.T=a,u4(l,t)}}function c4(l,t,e){t=qt(e,t),t=oc(l.stateNode,t,2),l=Le(l,t,2),l!==null&&(Mn(l,2),de(l))}function Tl(l,t,e){if(l.tag===3)c4(l,l,e);else for(;t!==null;){if(t.tag===3){c4(t,l,e);break}else if(t.tag===1){var a=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&($e===null||!$e.has(a))){l=qt(e,l),e=e8(2),a=Le(t,e,2),a!==null&&(a8(e,a,t,l),Mn(a,2),de(a));break}}t=t.return}}function Fc(l,t,e){var a=l.pingCache;if(a===null){a=l.pingCache=new Zo;var n=new Set;a.set(t,n)}else n=a.get(t),n===void 0&&(n=new Set,a.set(t,n));n.has(e)||(qc=!0,n.add(e),l=qo.bind(null,l,t,e),t.then(l,l))}function qo(l,t,e){var a=l.pingCache;a!==null&&a.delete(t),l.pingedLanes|=l.suspendedLanes&e,l.warmLanes&=~e,Ol===l&&(sl&e)===e&&((jl===4||jl===3&&(sl&62914560)===sl&&300>pt()-Hu)&&(gl&2)===0?fn(l,0):Mu|=e,en===sl&&(en=0)),de(l)}function i4(l,t){t===0&&(t=Xi()),l=oa(l,t),l!==null&&(Mn(l,t),de(l))}function Bo(l){var t=l.memoizedState,e=0;t!==null&&(e=t.retryLane),i4(l,e)}function Yo(l,t){var e=0;switch(l.tag){case 31:case 13:var a=l.stateNode,n=l.memoizedState;n!==null&&(e=n.retryLane);break;case 19:a=l.stateNode;break;case 22:a=l.stateNode._retryCache;break;default:throw Error(v(314))}a!==null&&a.delete(t),i4(l,e)}function Lo(l,t){return ku(l,t)}var on=null,rn=null,$c=!1,xu=!1,Wc=!1,ke=0;function de(l){l!==rn&&l.next===null&&(rn===null?on=rn=l:rn=rn.next=l),xu=!0,$c||($c=!0,wo())}function n0(l,t){if(!Wc&&xu){Wc=!0;do for(var e=!1,a=on;a!==null;){if(l!==0){var n=a.pendingLanes;if(n===0)var u=0;else{var c=a.suspendedLanes,f=a.pingedLanes;u=(1<<31-Mt(42|l)+1)-1,u&=n&~(c&~f),u=u&201326741?u&201326741|1:u?u|2:0}u!==0&&(e=!0,r4(a,u))}else u=sl,u=M0(a,a===Ol?u:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(u&3)===0||Tn(a,u)||(e=!0,r4(a,u));a=a.next}while(e);Wc=!1}}function Go(){f4()}function f4(){xu=$c=!1;var l=0;ke!==0&&lr()&&(l=ke);for(var t=pt(),e=null,a=on;a!==null;){var n=a.next,u=s4(a,t);u===0?(a.next=null,e===null?on=n:e.next=n,n===null&&(rn=e)):(e=a,(l!==0||(u&3)!==0)&&(xu=!0)),a=n}xl!==0&&xl!==5||n0(l),ke!==0&&(ke=0)}function s4(l,t){for(var e=l.suspendedLanes,a=l.pingedLanes,n=l.expirationTimes,u=l.pendingLanes&-62914561;0f)break;var b=s.transferSize,H=s.initiatorType;b&&E4(H)&&(s=s.responseEnd,c+=b*(squ){B.length=Z;break}E=new Promise(cr.bind(E)),B.push(E)}}}if(0"u"?null:document;function L4(l,t,e){var a=mn;if(a&&typeof t=="string"&&t){var n=jt(t);n='link[rel="'+l+'"][href="'+n+'"]',typeof e=="string"&&(n+='[crossorigin="'+e+'"]'),Y4.has(n)||(Y4.add(n),l={rel:l,crossOrigin:e,href:t},a.querySelector(n)===null&&(t=a.createElement("link"),lt(t,"link",l),Xl(t),a.head.appendChild(t)))}}function Hr(l){_e.D(l),L4("dns-prefetch",l,null)}function Nr(l,t){_e.C(l,t),L4("preconnect",l,t)}function zr(l,t,e){_e.L(l,t,e);var a=mn;if(a&&l&&t){var n='link[rel="preload"][as="'+jt(t)+'"]';t==="image"&&e&&e.imageSrcSet?(n+='[imagesrcset="'+jt(e.imageSrcSet)+'"]',typeof e.imageSizes=="string"&&(n+='[imagesizes="'+jt(e.imageSizes)+'"]')):n+='[href="'+jt(l)+'"]';var u=n;switch(t){case"style":u=hn(l);break;case"script":u=vn(l)}if(!(Qt.has(u)||(l=G({rel:"preload",href:t==="image"&&e&&e.imageSrcSet?void 0:l,as:t},e),Qt.set(u,l),a.querySelector(n)!==null||t==="style"&&a.querySelector(s0(u))||t==="script"&&a.querySelector(o0(u))))){var c=a.createElement("link");lt(c,"link",l),t==="style"&&(c[H0]=!0,c.onload=c.onerror=function(){Pi(c)}),Xl(c),a.head.appendChild(c)}}}function _r(l,t){_e.m(l,t);var e=mn;if(e&&l){var a=t&&typeof t.as=="string"?t.as:"script",n='link[rel="modulepreload"][as="'+jt(a)+'"][href="'+jt(l)+'"]',u=n;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":u=vn(l)}if(!Qt.has(u)&&(l=G({rel:"modulepreload",href:l},t),Qt.set(u,l),e.querySelector(n)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(e.querySelector(o0(u)))return}a=e.createElement("link"),lt(a,"link",l),Xl(a),e.head.appendChild(a)}}}function Or(l,t,e){_e.S(l,t,e);var a=mn;if(a&&l){var n=Ca(a).hoistableStyles,u=hn(l);t=t||"default";var c=n.get(u);if(!c){var f={loading:0,preload:null};if(c=a.querySelector(s0(u)))f.loading=5;else{l=G({rel:"stylesheet",href:l,"data-precedence":t},e),(e=Qt.get(u))&&gi(l,e);var s=c=a.createElement("link");Xl(s),lt(s,"link",l),s._p=new Promise(function(g,b){s.onload=g,s.onerror=b}),s.addEventListener("load",function(){f.loading|=1}),s.addEventListener("error",function(){f.loading|=2}),f.loading|=4,ju(c,t,a)}c={type:"stylesheet",instance:c,count:1,state:f},n.set(u,c)}}}function Zr(l,t){_e.X(l,t);var e=mn;if(e&&l){var a=Ca(e).hoistableScripts,n=vn(l),u=a.get(n);u||(u=e.querySelector(o0(n)),u||(l=G({src:l,async:!0},t),(t=Qt.get(n))&&Ei(l,t),u=e.createElement("script"),Xl(u),lt(u,"link",l),e.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function Cr(l,t){_e.M(l,t);var e=mn;if(e&&l){var a=Ca(e).hoistableScripts,n=vn(l),u=a.get(n);u||(u=e.querySelector(o0(n)),u||(l=G({src:l,async:!0,type:"module"},t),(t=Qt.get(n))&&Ei(l,t),u=e.createElement("script"),Xl(u),lt(u,"link",l),e.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function G4(l,t,e,a){var n=(n=Jt.current)?f0(n):null;if(!n)throw Error(v(446));switch(l){case"meta":case"title":return null;case"style":return typeof e.precedence=="string"&&typeof e.href=="string"?(e=hn(e.href),t=Ca(n).hoistableStyles,a=t.get(e),a||(a={type:"style",instance:null,count:0,state:null},t.set(e,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(e.rel==="stylesheet"&&typeof e.href=="string"&&typeof e.precedence=="string"){l=hn(e.href);var u=Ca(n).hoistableStyles,c=u.get(l);if(c||(n=n.ownerDocument||n,c={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(l,c),(u=n.querySelector(s0(l)))?u._p||(c.instance=u,c.state.loading=5):(u=Qt.get(l),u||(u={rel:"preload",as:"style",href:e.href,crossOrigin:e.crossOrigin,integrity:e.integrity,media:e.media,hrefLang:e.hrefLang,referrerPolicy:e.referrerPolicy},Qt.set(l,u)),Dr(n,l,u,c.state))),t&&a===null)throw Error(v(528,""));return c}if(t&&a!==null)throw Error(v(529,""));return null;case"script":return t=e.async,e=e.src,typeof e=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(e=vn(e),t=Ca(n).hoistableScripts,a=t.get(e),a||(a={type:"script",instance:null,count:0,state:null},t.set(e,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(v(444,l))}}function hn(l){return'href="'+jt(l)+'"'}function s0(l){return'link[rel="stylesheet"]['+l+"]"}function w4(l){return G({},l,{"data-precedence":l.precedence,precedence:null})}function Dr(l,t,e,a){if(t=l.querySelector('link[rel="preload"][as="style"]['+t+"]")){if(t[H0]!==!0){a.loading=1;return}}else t=l.createElement("link"),t[H0]=!0,t.onload=t.onerror=Pi.bind(null,t),lt(t,"link",e),Xl(t),l.head.appendChild(t);a.preload=t,t.addEventListener("load",function(){return a.loading|=1}),t.addEventListener("error",function(){return a.loading|=2})}function vn(l){return'[src="'+jt(l)+'"]'}function o0(l){return"script[async]"+l}function Q4(l,t,e){if(t.count++,t.instance===null)switch(t.type){case"style":var a=l.querySelector('style[data-href~="'+jt(e.href)+'"]');if(a)return t.instance=a,Xl(a),a;var n=G({},e,{"data-href":e.href,"data-precedence":e.precedence,href:null,precedence:null});return a=(l.ownerDocument||l).createElement("style"),Xl(a),lt(a,"style",n),ju(a,e.precedence,l),t.instance=a;case"stylesheet":n=hn(e.href);var u=l.querySelector(s0(n));if(u)return t.state.loading|=4,t.instance=u,Xl(u),u;a=w4(e),(n=Qt.get(n))&&gi(a,n),u=(l.ownerDocument||l).createElement("link"),Xl(u);var c=u;return c._p=new Promise(function(f,s){c.onload=f,c.onerror=s}),lt(u,"link",a),t.state.loading|=4,ju(u,e.precedence,l),t.instance=u;case"script":return u=vn(e.src),(n=l.querySelector(o0(u)))?(t.instance=n,Xl(n),n):(a=e,(n=Qt.get(u))&&(a=G({},e),Ei(a,n)),l=l.ownerDocument||l,n=l.createElement("script"),Xl(n),lt(n,"link",a),l.head.appendChild(n),t.instance=n);case"void":return null;default:throw Error(v(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(a=t.instance,t.state.loading|=4,ju(a,e.precedence,l));return t.instance}function ju(l,t,e){for(var a=e.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),n=a.length?a[a.length-1]:null,u=n,c=0;c title"):null)}function xr(l,t,e){if(e===1||t.itemProp!=null)return!1;switch(l){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;return t.rel==="stylesheet"?(l=t.disabled,typeof t.precedence=="string"&&l==null):!0;case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function K4(l,t){return l==="img"&&t.src!=null&&t.src!==""&&t.onLoad==null&&t.loading!=="lazy"}function J4(l){return!(l.type==="stylesheet"&&(l.state.loading&3)===0)}function F4(l){return(l.width||100)*(l.height||100)*(typeof devicePixelRatio=="number"?devicePixelRatio:1)*.25}function $4(l,t){typeof t.decode=="function"&&(l.imgCount++,t.complete||(l.imgBytes+=F4(t),l.suspenseyImages.push(t)),l=jr.bind(l),t.decode().then(l,l))}function Rr(l,t,e,a){if(e.type==="stylesheet"&&(typeof a.media!="string"||matchMedia(a.media).matches!==!1)&&(e.state.loading&4)===0){if(e.instance===null){var n=hn(a.href),u=t.querySelector(s0(n));if(u){t=u._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(l.count++,l=r0.bind(l),t.then(l,l)),e.state.loading|=4,e.instance=u,Xl(u);return}u=t.ownerDocument||t,a=w4(a),(n=Qt.get(n))&&gi(a,n),u=u.createElement("link"),Xl(u);var c=u;c._p=new Promise(function(f,s){c.onload=f,c.onerror=s}),lt(u,"link",a),e.instance=u}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(e,t),(t=e.state.preload)&&(e.state.loading&3)===0&&(l.count++,e=r0.bind(l),t.addEventListener("load",e),t.addEventListener("error",e))}}var qu=0;function Vr(l,t){return l.stylesheets&&l.count===0&&Yu(l,l.stylesheets),0qu?50:800)+t);return l.unsuspend=e,function(){l.unsuspend=null,clearTimeout(a),clearTimeout(n)}}:null}function W4(l){if(l.count===0&&(l.imgCount===0||!l.waitingForImages)){if(l.stylesheets)Yu(l,l.stylesheets);else if(l.unsuspend){var t=l.unsuspend;l.unsuspend=null,t()}}}function r0(){this.count--,W4(this)}function jr(){this.imgCount--,W4(this)}var Bu=null;function Yu(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,Bu=new Map,t.forEach(Ur,l),Bu=null,r0.call(l))}function Ur(l,t){if(!(t.state.loading&4)){var e=Bu.get(l);if(e)var a=e.get(null);else{e=new Map,Bu.set(l,e);for(var n=l.querySelectorAll("link[data-precedence],style[data-precedence]"),u=0;u"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(r)}catch(p){console.error(p)}}return r(),_i.exports=Pr(),_i.exports}var td=ld();const ed=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M244,56v48a12,12,0,0,1-12,12H184a12,12,0,1,1,0-24H201.1l-19-17.38c-.13-.12-.26-.24-.38-.37A76,76,0,1,0,127,204h1a75.53,75.53,0,0,0,52.15-20.72,12,12,0,0,1,16.49,17.45A99.45,99.45,0,0,1,128,228h-1.37A100,100,0,1,1,198.51,57.06L220,76.72V56a12,12,0,0,1,24,0Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,128a88,88,0,1,1-88-88A88,88,0,0,1,216,128Z",opacity:"0.2"}),i.createElement("path",{d:"M240,56v48a8,8,0,0,1-8,8H184a8,8,0,0,1,0-16H211.4L184.81,71.64l-.25-.24a80,80,0,1,0-1.67,114.78,8,8,0,0,1,11,11.63A95.44,95.44,0,0,1,128,224h-1.32A96,96,0,1,1,195.75,60L224,85.8V56a8,8,0,1,1,16,0Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M240,56v48a8,8,0,0,1-8,8H184a8,8,0,0,1-5.66-13.66l17-17-10.55-9.65-.25-.24a80,80,0,1,0-1.67,114.78,8,8,0,1,1,11,11.63A95.44,95.44,0,0,1,128,224h-1.32A96,96,0,1,1,195.75,60l10.93,10L226.34,50.3A8,8,0,0,1,240,56Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M238,56v48a6,6,0,0,1-6,6H184a6,6,0,0,1,0-12h32.55l-30.38-27.8c-.06-.06-.12-.13-.19-.19a82,82,0,1,0-1.7,117.65,6,6,0,0,1,8.24,8.73A93.46,93.46,0,0,1,128,222h-1.28A94,94,0,1,1,194.37,61.4L226,90.35V56a6,6,0,1,1,12,0Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M240,56v48a8,8,0,0,1-8,8H184a8,8,0,0,1,0-16H211.4L184.81,71.64l-.25-.24a80,80,0,1,0-1.67,114.78,8,8,0,0,1,11,11.63A95.44,95.44,0,0,1,128,224h-1.32A96,96,0,1,1,195.75,60L224,85.8V56a8,8,0,1,1,16,0Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M236,56v48a4,4,0,0,1-4,4H184a4,4,0,0,1,0-8h37.7L187.53,68.69l-.13-.12a84,84,0,1,0-1.75,120.51,4,4,0,0,1,5.5,5.82A91.43,91.43,0,0,1,128,220h-1.26A92,92,0,1,1,193,62.84l35,32.05V56a4,4,0,1,1,8,0Z"}))]]),ad=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M184,80V208a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V80a8,8,0,0,1,8-8H176A8,8,0,0,1,184,80Z",opacity:"0.2"}),i.createElement("path",{d:"M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M192,136v72a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V80A16,16,0,0,1,48,64h72a8,8,0,0,1,0,16H48V208H176V136a8,8,0,0,1,16,0Zm32-96a8,8,0,0,0-8-8H152a8,8,0,0,0-5.66,13.66L172.69,72l-42.35,42.34a8,8,0,0,0,11.32,11.32L184,83.31l26.34,26.35A8,8,0,0,0,224,104Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M222,104a6,6,0,0,1-12,0V54.49l-69.75,69.75a6,6,0,0,1-8.48-8.48L201.51,46H152a6,6,0,0,1,0-12h64a6,6,0,0,1,6,6Zm-38,26a6,6,0,0,0-6,6v72a2,2,0,0,1-2,2H48a2,2,0,0,1-2-2V80a2,2,0,0,1,2-2h72a6,6,0,0,0,0-12H48A14,14,0,0,0,34,80V208a14,14,0,0,0,14,14H176a14,14,0,0,0,14-14V136A6,6,0,0,0,184,130Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M220,104a4,4,0,0,1-8,0V49.66l-73.16,73.17a4,4,0,0,1-5.66-5.66L206.34,44H152a4,4,0,0,1,0-8h64a4,4,0,0,1,4,4Zm-36,28a4,4,0,0,0-4,4v72a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V80a4,4,0,0,1,4-4h72a4,4,0,0,0,0-8H48A12,12,0,0,0,36,80V208a12,12,0,0,0,12,12H176a12,12,0,0,0,12-12V136A4,4,0,0,0,184,132Z"}))]]),nd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,96l-80,80L48,96Z",opacity:"0.2"}),i.createElement("path",{d:"M215.39,92.94A8,8,0,0,0,208,88H48a8,8,0,0,0-5.66,13.66l80,80a8,8,0,0,0,11.32,0l80-80A8,8,0,0,0,215.39,92.94ZM128,164.69,67.31,104H188.69Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,48,88H208a8,8,0,0,1,5.66,13.66Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M212.24,100.24l-80,80a6,6,0,0,1-8.48,0l-80-80a6,6,0,0,1,8.48-8.48L128,167.51l75.76-75.75a6,6,0,0,1,8.48,8.48Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M210.83,98.83l-80,80a4,4,0,0,1-5.66,0l-80-80a4,4,0,0,1,5.66-5.66L128,170.34l77.17-77.17a4,4,0,1,1,5.66,5.66Z"}))]]),ud=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M232,56V200a16,16,0,0,1-16,16H40a16,16,0,0,1-16-16V56A16,16,0,0,1,40,40H216A16,16,0,0,1,232,56Z",opacity:"0.2"}),i.createElement("path",{d:"M205.66,85.66l-96,96a8,8,0,0,1-11.32,0l-40-40a8,8,0,0,1,11.32-11.32L104,164.69l90.34-90.35a8,8,0,0,1,11.32,11.32Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM205.66,85.66l-96,96a8,8,0,0,1-11.32,0l-40-40a8,8,0,0,1,11.32-11.32L104,164.69l90.34-90.35a8,8,0,0,1,11.32,11.32Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M228.24,76.24l-128,128a6,6,0,0,1-8.48,0l-56-56a6,6,0,0,1,8.48-8.48L96,191.51,219.76,67.76a6,6,0,0,1,8.48,8.48Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M229.66,77.66l-128,128a8,8,0,0,1-11.32,0l-56-56a8,8,0,0,1,11.32-11.32L96,188.69,218.34,66.34a8,8,0,0,1,11.32,11.32Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M226.83,74.83l-128,128a4,4,0,0,1-5.66,0l-56-56a4,4,0,0,1,5.66-5.66L96,194.34,221.17,69.17a4,4,0,1,1,5.66,5.66Z"}))]]),cd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M176.49,95.51a12,12,0,0,1,0,17l-56,56a12,12,0,0,1-17,0l-24-24a12,12,0,1,1,17-17L112,143l47.51-47.52A12,12,0,0,1,176.49,95.51ZM236,128A108,108,0,1,1,128,20,108.12,108.12,0,0,1,236,128Zm-24,0a84,84,0,1,0-84,84A84.09,84.09,0,0,0,212,128Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),i.createElement("path",{d:"M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm45.66,85.66-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35a8,8,0,0,1,11.32,11.32Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M172.24,99.76a6,6,0,0,1,0,8.48l-56,56a6,6,0,0,1-8.48,0l-24-24a6,6,0,0,1,8.48-8.48L112,151.51l51.76-51.75A6,6,0,0,1,172.24,99.76ZM230,128A102,102,0,1,1,128,26,102.12,102.12,0,0,1,230,128Zm-12,0a90,90,0,1,0-90,90A90.1,90.1,0,0,0,218,128Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M170.83,101.17a4,4,0,0,1,0,5.66l-56,56a4,4,0,0,1-5.66,0l-24-24a4,4,0,0,1,5.66-5.66L112,154.34l53.17-53.17A4,4,0,0,1,170.83,101.17ZM228,128A100,100,0,1,1,128,28,100.11,100.11,0,0,1,228,128Zm-8,0a92,92,0,1,0-92,92A92.1,92.1,0,0,0,220,128Z"}))]]),id=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M236,128a108,108,0,0,1-216,0c0-42.52,24.73-81.34,63-98.9A12,12,0,1,1,93,50.91C63.24,64.57,44,94.83,44,128a84,84,0,0,0,168,0c0-33.17-19.24-63.43-49-77.09A12,12,0,1,1,173,29.1C211.27,46.66,236,85.48,236,128Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),i.createElement("path",{d:"M232,128a104,104,0,0,1-208,0c0-41,23.81-78.36,60.66-95.27a8,8,0,0,1,6.68,14.54C60.15,61.59,40,93.27,40,128a88,88,0,0,0,176,0c0-34.73-20.15-66.41-51.34-80.73a8,8,0,0,1,6.68-14.54C208.19,49.64,232,87,232,128Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,176A72,72,0,0,1,92,65.64a8,8,0,0,1,8,13.85,56,56,0,1,0,56,0,8,8,0,0,1,8-13.85A72,72,0,0,1,128,200Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M230,128a102,102,0,0,1-204,0c0-40.18,23.35-76.86,59.5-93.45a6,6,0,0,1,5,10.9C58.61,60.09,38,92.49,38,128a90,90,0,0,0,180,0c0-35.51-20.61-67.91-52.5-82.55a6,6,0,0,1,5-10.9C206.65,51.14,230,87.82,230,128Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M232,128a104,104,0,0,1-208,0c0-41,23.81-78.36,60.66-95.27a8,8,0,0,1,6.68,14.54C60.15,61.59,40,93.27,40,128a88,88,0,0,0,176,0c0-34.73-20.15-66.41-51.34-80.73a8,8,0,0,1,6.68-14.54C208.19,49.64,232,87,232,128Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M228,128a100,100,0,0,1-200,0c0-39.4,22.9-75.37,58.33-91.63a4,4,0,1,1,3.34,7.27C57.07,58.6,36,91.71,36,128a92,92,0,0,0,184,0c0-36.29-21.07-69.4-53.67-84.36a4,4,0,1,1,3.34-7.27C205.1,52.63,228,88.6,228,128Z"}))]]),fd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,28H165.47a51.88,51.88,0,0,0-74.94,0H56A20,20,0,0,0,36,48V216a20,20,0,0,0,20,20H200a20,20,0,0,0,20-20V48A20,20,0,0,0,200,28ZM155.71,60H100.29a28,28,0,0,1,55.42,0ZM196,212H60V52H77.41A52.13,52.13,0,0,0,76,64v8A12,12,0,0,0,88,84h80a12,12,0,0,0,12-12V64a52.13,52.13,0,0,0-1.41-12H196Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,48V216a8,8,0,0,1-8,8H56a8,8,0,0,1-8-8V48a8,8,0,0,1,8-8H96a39.83,39.83,0,0,0-8,24v8h80V64a39.83,39.83,0,0,0-8-24h40A8,8,0,0,1,208,48Z",opacity:"0.2"}),i.createElement("path",{d:"M200,32H163.74a47.92,47.92,0,0,0-71.48,0H56A16,16,0,0,0,40,48V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V48A16,16,0,0,0,200,32Zm-72,0a32,32,0,0,1,32,32H96A32,32,0,0,1,128,32Zm72,184H56V48H82.75A47.93,47.93,0,0,0,80,64v8a8,8,0,0,0,8,8h80a8,8,0,0,0,8-8V64a47.93,47.93,0,0,0-2.75-16H200Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,32H163.74a47.92,47.92,0,0,0-71.48,0H56A16,16,0,0,0,40,48V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V48A16,16,0,0,0,200,32Zm-72,0a32,32,0,0,1,32,32H96A32,32,0,0,1,128,32Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,34H162.83a45.91,45.91,0,0,0-69.66,0H56A14,14,0,0,0,42,48V216a14,14,0,0,0,14,14H200a14,14,0,0,0,14-14V48A14,14,0,0,0,200,34Zm-72-4a34,34,0,0,1,34,34v2H94V64A34,34,0,0,1,128,30Zm74,186a2,2,0,0,1-2,2H56a2,2,0,0,1-2-2V48a2,2,0,0,1,2-2H85.67A45.77,45.77,0,0,0,82,64v8a6,6,0,0,0,6,6h80a6,6,0,0,0,6-6V64a45.77,45.77,0,0,0-3.67-18H200a2,2,0,0,1,2,2Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,32H163.74a47.92,47.92,0,0,0-71.48,0H56A16,16,0,0,0,40,48V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V48A16,16,0,0,0,200,32Zm-72,0a32,32,0,0,1,32,32H96A32,32,0,0,1,128,32Zm72,184H56V48H82.75A47.93,47.93,0,0,0,80,64v8a8,8,0,0,0,8,8h80a8,8,0,0,0,8-8V64a47.93,47.93,0,0,0-2.75-16H200Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,36H161.92a44,44,0,0,0-67.84,0H56A12,12,0,0,0,44,48V216a12,12,0,0,0,12,12H200a12,12,0,0,0,12-12V48A12,12,0,0,0,200,36Zm-72-8a36,36,0,0,1,36,36v4H92V64A36,36,0,0,1,128,28Zm76,188a4,4,0,0,1-4,4H56a4,4,0,0,1-4-4V48a4,4,0,0,1,4-4H88.83A43.71,43.71,0,0,0,84,64v8a4,4,0,0,0,4,4h80a4,4,0,0,0,4-4V64a43.71,43.71,0,0,0-4.83-20H200a4,4,0,0,1,4,4Z"}))]]),sd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M140,80v41.21l34.17,20.5a12,12,0,1,1-12.34,20.58l-40-24A12,12,0,0,1,116,128V80a12,12,0,0,1,24,0ZM128,28A99.38,99.38,0,0,0,57.24,57.34c-4.69,4.74-9,9.37-13.24,14V64a12,12,0,0,0-24,0v40a12,12,0,0,0,12,12H72a12,12,0,0,0,0-24H57.77C63,86,68.37,80.22,74.26,74.26a76,76,0,1,1,1.58,109,12,12,0,0,0-16.48,17.46A100,100,0,1,0,128,28Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,128a88,88,0,1,1-88-88A88,88,0,0,1,216,128Z",opacity:"0.2"}),i.createElement("path",{d:"M136,80v43.47l36.12,21.67a8,8,0,0,1-8.24,13.72l-40-24A8,8,0,0,1,120,128V80a8,8,0,0,1,16,0Zm-8-48A95.44,95.44,0,0,0,60.08,60.15C52.81,67.51,46.35,74.59,40,82V64a8,8,0,0,0-16,0v40a8,8,0,0,0,8,8H72a8,8,0,0,0,0-16H49c7.15-8.42,14.27-16.35,22.39-24.57a80,80,0,1,1,1.66,114.75,8,8,0,1,0-11,11.64A96,96,0,1,0,128,32Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,128A96,96,0,0,1,62.11,197.82a8,8,0,1,1,11-11.64A80,80,0,1,0,71.43,71.43C67.9,75,64.58,78.51,61.35,82L77.66,98.34A8,8,0,0,1,72,112H32a8,8,0,0,1-8-8V64a8,8,0,0,1,13.66-5.66L50,70.7c3.22-3.49,6.54-7,10.06-10.55A96,96,0,0,1,224,128ZM128,72a8,8,0,0,0-8,8v48a8,8,0,0,0,3.88,6.86l40,24a8,8,0,1,0,8.24-13.72L136,123.47V80A8,8,0,0,0,128,72Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M134,80v44.6l37.09,22.25a6,6,0,0,1-6.18,10.3l-40-24A6,6,0,0,1,122,128V80a6,6,0,0,1,12,0Zm-6-46A93.4,93.4,0,0,0,61.51,61.56c-8.58,8.68-16,17-23.51,25.8V64a6,6,0,0,0-12,0v40a6,6,0,0,0,6,6H72a6,6,0,0,0,0-12H44.73C52.86,88.29,60.79,79.35,70,70a82,82,0,1,1,1.7,117.62,6,6,0,1,0-8.24,8.72A94,94,0,1,0,128,34Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M136,80v43.47l36.12,21.67a8,8,0,0,1-8.24,13.72l-40-24A8,8,0,0,1,120,128V80a8,8,0,0,1,16,0Zm-8-48A95.44,95.44,0,0,0,60.08,60.15C52.81,67.51,46.35,74.59,40,82V64a8,8,0,0,0-16,0v40a8,8,0,0,0,8,8H72a8,8,0,0,0,0-16H49c7.15-8.42,14.27-16.35,22.39-24.57a80,80,0,1,1,1.66,114.75,8,8,0,1,0-11,11.64A96,96,0,1,0,128,32Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M132,80v45.74l38.06,22.83a4,4,0,0,1-4.12,6.86l-40-24A4,4,0,0,1,124,128V80a4,4,0,0,1,8,0Zm-4-44A91.42,91.42,0,0,0,62.93,63C53.05,73,44.66,82.47,36,92.86V64a4,4,0,0,0-8,0v40a4,4,0,0,0,4,4H72a4,4,0,0,0,0-8H40.47C49.61,89,58.3,79,68.6,68.6a84,84,0,1,1,1.75,120.49,4,4,0,1,0-5.5,5.82A92,92,0,1,0,128,36Z"}))]]),od=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M228,144v64a12,12,0,0,1-12,12H40a12,12,0,0,1-12-12V144a12,12,0,0,1,24,0v52H204V144a12,12,0,0,1,24,0Zm-108.49,8.49a12,12,0,0,0,17,0l40-40a12,12,0,0,0-17-17L140,115V32a12,12,0,0,0-24,0v83L96.49,95.51a12,12,0,0,0-17,17Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,48V208H40V48A16,16,0,0,1,56,32H200A16,16,0,0,1,216,48Z",opacity:"0.2"}),i.createElement("path",{d:"M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0-11.32-11.32L136,124.69V32a8,8,0,0,0-16,0v92.69L93.66,98.34a8,8,0,0,0-11.32,11.32Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40A8,8,0,0,0,168,96H136V32a8,8,0,0,0-16,0V96H88a8,8,0,0,0-5.66,13.66Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M222,144v64a6,6,0,0,1-6,6H40a6,6,0,0,1-6-6V144a6,6,0,0,1,12,0v58H210V144a6,6,0,0,1,12,0Zm-98.24,4.24a6,6,0,0,0,8.48,0l40-40a6,6,0,0,0-8.48-8.48L134,129.51V32a6,6,0,0,0-12,0v97.51L92.24,99.76a6,6,0,0,0-8.48,8.48Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0-11.32-11.32L136,124.69V32a8,8,0,0,0-16,0v92.69L93.66,98.34a8,8,0,0,0-11.32,11.32Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M220,144v64a4,4,0,0,1-4,4H40a4,4,0,0,1-4-4V144a4,4,0,0,1,8,0v60H212V144a4,4,0,0,1,8,0Zm-94.83,2.83a4,4,0,0,0,5.66,0l40-40a4,4,0,1,0-5.66-5.66L132,134.34V32a4,4,0,0,0-8,0V134.34L90.83,101.17a4,4,0,0,0-5.66,5.66Z"}))]]),rd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M212.62,75.17A63.7,63.7,0,0,0,206.39,26,12,12,0,0,0,196,20a63.71,63.71,0,0,0-50,24H126A63.71,63.71,0,0,0,76,20a12,12,0,0,0-10.39,6,63.7,63.7,0,0,0-6.23,49.17A61.5,61.5,0,0,0,52,104v8a60.1,60.1,0,0,0,45.76,58.28A43.66,43.66,0,0,0,92,192v4H76a20,20,0,0,1-20-20,44.05,44.05,0,0,0-44-44,12,12,0,0,0,0,24,20,20,0,0,1,20,20,44.05,44.05,0,0,0,44,44H92v12a12,12,0,0,0,24,0V192a20,20,0,0,1,40,0v40a12,12,0,0,0,24,0V192a43.66,43.66,0,0,0-5.76-21.72A60.1,60.1,0,0,0,220,112v-8A61.5,61.5,0,0,0,212.62,75.17ZM196,112a36,36,0,0,1-36,36H112a36,36,0,0,1-36-36v-8a37.87,37.87,0,0,1,6.13-20.12,11.65,11.65,0,0,0,1.58-11.49,39.9,39.9,0,0,1-.4-27.72,39.87,39.87,0,0,1,26.41,17.8A12,12,0,0,0,119.82,68h32.35a12,12,0,0,0,10.11-5.53,39.84,39.84,0,0,1,26.41-17.8,39.9,39.9,0,0,1-.4,27.72,12,12,0,0,0,1.61,11.53A37.85,37.85,0,0,1,196,104Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,104v8a48,48,0,0,1-48,48H136a32,32,0,0,1,32,32v40H104V192a32,32,0,0,1,32-32H112a48,48,0,0,1-48-48v-8a49.28,49.28,0,0,1,8.51-27.3A51.92,51.92,0,0,1,76,32a52,52,0,0,1,43.83,24h32.34A52,52,0,0,1,196,32a51.92,51.92,0,0,1,3.49,44.7A49.28,49.28,0,0,1,208,104Z",opacity:"0.2"}),i.createElement("path",{d:"M208.3,75.68A59.74,59.74,0,0,0,202.93,28,8,8,0,0,0,196,24a59.75,59.75,0,0,0-48,24H124A59.75,59.75,0,0,0,76,24a8,8,0,0,0-6.93,4,59.78,59.78,0,0,0-5.38,47.68A58.14,58.14,0,0,0,56,104v8a56.06,56.06,0,0,0,48.44,55.47A39.8,39.8,0,0,0,96,192v8H72a24,24,0,0,1-24-24A40,40,0,0,0,8,136a8,8,0,0,0,0,16,24,24,0,0,1,24,24,40,40,0,0,0,40,40H96v16a8,8,0,0,0,16,0V192a24,24,0,0,1,48,0v40a8,8,0,0,0,16,0V192a39.8,39.8,0,0,0-8.44-24.53A56.06,56.06,0,0,0,216,112v-8A58,58,0,0,0,208.3,75.68ZM200,112a40,40,0,0,1-40,40H112a40,40,0,0,1-40-40v-8a41.74,41.74,0,0,1,6.9-22.48A8,8,0,0,0,80,73.83a43.81,43.81,0,0,1,.79-33.58,43.88,43.88,0,0,1,32.32,20.06A8,8,0,0,0,119.82,64h32.35a8,8,0,0,0,6.74-3.69,43.87,43.87,0,0,1,32.32-20.06A43.81,43.81,0,0,1,192,73.83a8.09,8.09,0,0,0,1,7.65A41.76,41.76,0,0,1,200,104Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,104v8a56.06,56.06,0,0,1-48.44,55.47A39.8,39.8,0,0,1,176,192v40a8,8,0,0,1-8,8H104a8,8,0,0,1-8-8V216H72a40,40,0,0,1-40-40A24,24,0,0,0,8,152a8,8,0,0,1,0-16,40,40,0,0,1,40,40,24,24,0,0,0,24,24H96v-8a39.8,39.8,0,0,1,8.44-24.53A56.06,56.06,0,0,1,56,112v-8a58.14,58.14,0,0,1,7.69-28.32A59.78,59.78,0,0,1,69.07,28,8,8,0,0,1,76,24a59.75,59.75,0,0,1,48,24h24a59.75,59.75,0,0,1,48-24,8,8,0,0,1,6.93,4,59.74,59.74,0,0,1,5.37,47.68A58,58,0,0,1,216,104Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M206.13,75.92A57.79,57.79,0,0,0,201.2,29a6,6,0,0,0-5.2-3,57.77,57.77,0,0,0-47,24H123A57.77,57.77,0,0,0,76,26a6,6,0,0,0-5.2,3,57.79,57.79,0,0,0-4.93,46.92A55.88,55.88,0,0,0,58,104v8a54.06,54.06,0,0,0,50.45,53.87A37.85,37.85,0,0,0,98,192v10H72a26,26,0,0,1-26-26A38,38,0,0,0,8,138a6,6,0,0,0,0,12,26,26,0,0,1,26,26,38,38,0,0,0,38,38H98v18a6,6,0,0,0,12,0V192a26,26,0,0,1,52,0v40a6,6,0,0,0,12,0V192a37.85,37.85,0,0,0-10.45-26.13A54.06,54.06,0,0,0,214,112v-8A55.88,55.88,0,0,0,206.13,75.92ZM202,112a42,42,0,0,1-42,42H112a42,42,0,0,1-42-42v-8a43.86,43.86,0,0,1,7.3-23.69,6,6,0,0,0,.81-5.76,45.85,45.85,0,0,1,1.43-36.42,45.85,45.85,0,0,1,35.23,21.1A6,6,0,0,0,119.83,62h32.34a6,6,0,0,0,5.06-2.76,45.83,45.83,0,0,1,35.23-21.11,45.85,45.85,0,0,1,1.43,36.42,6,6,0,0,0,.79,5.74A43.78,43.78,0,0,1,202,104Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208.31,75.68A59.78,59.78,0,0,0,202.93,28,8,8,0,0,0,196,24a59.75,59.75,0,0,0-48,24H124A59.75,59.75,0,0,0,76,24a8,8,0,0,0-6.93,4,59.78,59.78,0,0,0-5.38,47.68A58.14,58.14,0,0,0,56,104v8a56.06,56.06,0,0,0,48.44,55.47A39.8,39.8,0,0,0,96,192v8H72a24,24,0,0,1-24-24A40,40,0,0,0,8,136a8,8,0,0,0,0,16,24,24,0,0,1,24,24,40,40,0,0,0,40,40H96v16a8,8,0,0,0,16,0V192a24,24,0,0,1,48,0v40a8,8,0,0,0,16,0V192a39.8,39.8,0,0,0-8.44-24.53A56.06,56.06,0,0,0,216,112v-8A58.14,58.14,0,0,0,208.31,75.68ZM200,112a40,40,0,0,1-40,40H112a40,40,0,0,1-40-40v-8a41.74,41.74,0,0,1,6.9-22.48A8,8,0,0,0,80,73.83a43.81,43.81,0,0,1,.79-33.58,43.88,43.88,0,0,1,32.32,20.06A8,8,0,0,0,119.82,64h32.35a8,8,0,0,0,6.74-3.69,43.87,43.87,0,0,1,32.32-20.06A43.81,43.81,0,0,1,192,73.83a8.09,8.09,0,0,0,1,7.65A41.72,41.72,0,0,1,200,104Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M203.94,76.16A55.73,55.73,0,0,0,199.46,30,4,4,0,0,0,196,28a55.78,55.78,0,0,0-46,24H122A55.78,55.78,0,0,0,76,28a4,4,0,0,0-3.46,2,55.73,55.73,0,0,0-4.48,46.16A53.78,53.78,0,0,0,60,104v8a52.06,52.06,0,0,0,52,52h1.41A36,36,0,0,0,100,192v12H72a28,28,0,0,1-28-28A36,36,0,0,0,8,140a4,4,0,0,0,0,8,28,28,0,0,1,28,28,36,36,0,0,0,36,36h28v20a4,4,0,0,0,8,0V192a28,28,0,0,1,56,0v40a4,4,0,0,0,8,0V192a36,36,0,0,0-13.41-28H160a52.06,52.06,0,0,0,52-52v-8A53.78,53.78,0,0,0,203.94,76.16ZM204,112a44.05,44.05,0,0,1-44,44H112a44.05,44.05,0,0,1-44-44v-8a45.76,45.76,0,0,1,7.71-24.89,4,4,0,0,0,.53-3.84,47.82,47.82,0,0,1,2.1-39.21,47.8,47.8,0,0,1,38.12,22.1A4,4,0,0,0,119.83,60h32.34a4,4,0,0,0,3.37-1.84,47.8,47.8,0,0,1,38.12-22.1,47.82,47.82,0,0,1,2.1,39.21,4,4,0,0,0,.53,3.83A45.85,45.85,0,0,1,204,104Z"}))]]),dd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M219.71,117.38a12,12,0,0,0-7.25-8.52L161.28,88.39l10.59-70.61a12,12,0,0,0-20.64-10l-112,120a12,12,0,0,0,4.31,19.33l51.18,20.47L84.13,238.22a12,12,0,0,0,20.64,10l112-120A12,12,0,0,0,219.71,117.38ZM113.6,203.55l6.27-41.77a12,12,0,0,0-7.41-12.92L68.74,131.37,142.4,52.45l-6.27,41.77a12,12,0,0,0,7.41,12.92l43.72,17.49Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M96,240l16-80L48,136,160,16,144,96l64,24Z",opacity:"0.2"}),i.createElement("path",{d:"M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M213.85,125.46l-112,120a8,8,0,0,1-13.69-7l14.66-73.33L45.19,143.49a8,8,0,0,1-3-13l112-120a8,8,0,0,1,13.69,7L153.18,90.9l57.63,21.61a8,8,0,0,1,3,12.95Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M213.84,118.63a6,6,0,0,0-3.73-4.25L150.88,92.17l15-75a6,6,0,0,0-10.27-5.27l-112,120a6,6,0,0,0,2.28,9.71l59.23,22.21-15,75a6,6,0,0,0,3.14,6.52A6.07,6.07,0,0,0,96,246a6,6,0,0,0,4.39-1.91l112-120A6,6,0,0,0,213.84,118.63ZM106,220.46l11.85-59.28a6,6,0,0,0-3.77-6.8l-55.6-20.85,91.46-98L138.12,94.82a6,6,0,0,0,3.77,6.8l55.6,20.85Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M211.89,119.09a4,4,0,0,0-2.49-2.84l-60.81-22.8,15.33-76.67a4,4,0,0,0-6.84-3.51l-112,120a4,4,0,0,0-1,3.64,4,4,0,0,0,2.49,2.84l60.81,22.8L92.08,239.22a4,4,0,0,0,6.84,3.51l112-120A4,4,0,0,0,211.89,119.09ZM102.68,227l13.24-66.2a4,4,0,0,0-2.52-4.53L55,134.36,153.32,29l-13.24,66.2a4,4,0,0,0,2.52,4.53L201,121.64Z"}))]]),md=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M228,128a12,12,0,0,1-12,12H40a12,12,0,0,1,0-24H216A12,12,0,0,1,228,128ZM40,76H216a12,12,0,0,0,0-24H40a12,12,0,0,0,0,24ZM216,180H40a12,12,0,0,0,0,24H216a12,12,0,0,0,0-24Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,64V192H40V64Z",opacity:"0.2"}),i.createElement("path",{d:"M224,128a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128ZM40,72H216a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16ZM216,184H40a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM192,184H64a8,8,0,0,1,0-16H192a8,8,0,0,1,0,16Zm0-48H64a8,8,0,0,1,0-16H192a8,8,0,0,1,0,16Zm0-48H64a8,8,0,0,1,0-16H192a8,8,0,0,1,0,16Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M222,128a6,6,0,0,1-6,6H40a6,6,0,0,1,0-12H216A6,6,0,0,1,222,128ZM40,70H216a6,6,0,0,0,0-12H40a6,6,0,0,0,0,12ZM216,186H40a6,6,0,0,0,0,12H216a6,6,0,0,0,0-12Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,128a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128ZM40,72H216a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16ZM216,184H40a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M220,128a4,4,0,0,1-4,4H40a4,4,0,0,1,0-8H216A4,4,0,0,1,220,128ZM40,68H216a4,4,0,0,0,0-8H40a4,4,0,0,0,0,8ZM216,188H40a4,4,0,0,0,0,8H216a4,4,0,0,0,0-8Z"}))]]),hd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M232.49,215.51,185,168a92.12,92.12,0,1,0-17,17l47.53,47.54a12,12,0,0,0,17-17ZM44,112a68,68,0,1,1,68,68A68.07,68.07,0,0,1,44,112Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M192,112a80,80,0,1,1-80-80A80,80,0,0,1,192,112Z",opacity:"0.2"}),i.createElement("path",{d:"M229.66,218.34,179.6,168.28a88.21,88.21,0,1,0-11.32,11.31l50.06,50.07a8,8,0,0,0,11.32-11.32ZM40,112a72,72,0,1,1,72,72A72.08,72.08,0,0,1,40,112Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M168,112a56,56,0,1,1-56-56A56,56,0,0,1,168,112Zm61.66,117.66a8,8,0,0,1-11.32,0l-50.06-50.07a88,88,0,1,1,11.32-11.31l50.06,50.06A8,8,0,0,1,229.66,229.66ZM112,184a72,72,0,1,0-72-72A72.08,72.08,0,0,0,112,184Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M228.24,219.76l-51.38-51.38a86.15,86.15,0,1,0-8.48,8.48l51.38,51.38a6,6,0,0,0,8.48-8.48ZM38,112a74,74,0,1,1,74,74A74.09,74.09,0,0,1,38,112Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M229.66,218.34l-50.07-50.06a88.11,88.11,0,1,0-11.31,11.31l50.06,50.07a8,8,0,0,0,11.32-11.32ZM40,112a72,72,0,1,1,72,72A72.08,72.08,0,0,1,40,112Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M226.83,221.17l-52.7-52.7a84.1,84.1,0,1,0-5.66,5.66l52.7,52.7a4,4,0,0,0,5.66-5.66ZM36,112a76,76,0,1,1,76,76A76.08,76.08,0,0,1,36,112Z"}))]]),vd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,36H48A28,28,0,0,0,20,64V176a28,28,0,0,0,28,28H208a28,28,0,0,0,28-28V64A28,28,0,0,0,208,36Zm4,140a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V64a4,4,0,0,1,4-4H208a4,4,0,0,1,4,4Zm-40,52a12,12,0,0,1-12,12H96a12,12,0,0,1,0-24h64A12,12,0,0,1,172,228Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,64V176a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V64A16,16,0,0,1,48,48H208A16,16,0,0,1,224,64Z",opacity:"0.2"}),i.createElement("path",{d:"M208,40H48A24,24,0,0,0,24,64V176a24,24,0,0,0,24,24H208a24,24,0,0,0,24-24V64A24,24,0,0,0,208,40Zm8,136a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V64a8,8,0,0,1,8-8H208a8,8,0,0,1,8,8Zm-48,48a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,224Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M232,64V176a24,24,0,0,1-24,24H48a24,24,0,0,1-24-24V64A24,24,0,0,1,48,40H208A24,24,0,0,1,232,64ZM160,216H96a8,8,0,0,0,0,16h64a8,8,0,0,0,0-16Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,42H48A22,22,0,0,0,26,64V176a22,22,0,0,0,22,22H208a22,22,0,0,0,22-22V64A22,22,0,0,0,208,42Zm10,134a10,10,0,0,1-10,10H48a10,10,0,0,1-10-10V64A10,10,0,0,1,48,54H208a10,10,0,0,1,10,10Zm-52,48a6,6,0,0,1-6,6H96a6,6,0,0,1,0-12h64A6,6,0,0,1,166,224Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,40H48A24,24,0,0,0,24,64V176a24,24,0,0,0,24,24H208a24,24,0,0,0,24-24V64A24,24,0,0,0,208,40Zm8,136a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V64a8,8,0,0,1,8-8H208a8,8,0,0,1,8,8Zm-48,48a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,224Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,44H48A20,20,0,0,0,28,64V176a20,20,0,0,0,20,20H208a20,20,0,0,0,20-20V64A20,20,0,0,0,208,44Zm12,132a12,12,0,0,1-12,12H48a12,12,0,0,1-12-12V64A12,12,0,0,1,48,52H208a12,12,0,0,1,12,12Zm-56,48a4,4,0,0,1-4,4H96a4,4,0,0,1,0-8h64A4,4,0,0,1,164,224Z"}))]]),yd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M236.37,139.4a12,12,0,0,0-12-3A84.07,84.07,0,0,1,119.6,31.59a12,12,0,0,0-15-15A108.86,108.86,0,0,0,49.69,55.07,108,108,0,0,0,136,228a107.09,107.09,0,0,0,64.93-21.69,108.86,108.86,0,0,0,38.44-54.94A12,12,0,0,0,236.37,139.4Zm-49.88,47.74A84,84,0,0,1,68.86,69.51,84.93,84.93,0,0,1,92.27,48.29Q92,52.13,92,56A108.12,108.12,0,0,0,200,164q3.87,0,7.71-.27A84.79,84.79,0,0,1,186.49,187.14Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M227.89,147.89A96,96,0,1,1,108.11,28.11,96.09,96.09,0,0,0,227.89,147.89Z",opacity:"0.2"}),i.createElement("path",{d:"M233.54,142.23a8,8,0,0,0-8-2,88.08,88.08,0,0,1-109.8-109.8,8,8,0,0,0-10-10,104.84,104.84,0,0,0-52.91,37A104,104,0,0,0,136,224a103.09,103.09,0,0,0,62.52-20.88,104.84,104.84,0,0,0,37-52.91A8,8,0,0,0,233.54,142.23ZM188.9,190.34A88,88,0,0,1,65.66,67.11a89,89,0,0,1,31.4-26A106,106,0,0,0,96,56,104.11,104.11,0,0,0,200,160a106,106,0,0,0,14.92-1.06A89,89,0,0,1,188.9,190.34Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M235.54,150.21a104.84,104.84,0,0,1-37,52.91A104,104,0,0,1,32,120,103.09,103.09,0,0,1,52.88,57.48a104.84,104.84,0,0,1,52.91-37,8,8,0,0,1,10,10,88.08,88.08,0,0,0,109.8,109.8,8,8,0,0,1,10,10Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M232.13,143.64a6,6,0,0,0-6-1.49A90.07,90.07,0,0,1,113.86,29.85a6,6,0,0,0-7.49-7.48A102.88,102.88,0,0,0,54.48,58.68,102,102,0,0,0,197.32,201.52a102.88,102.88,0,0,0,36.31-51.89A6,6,0,0,0,232.13,143.64Zm-42,48.29a90,90,0,0,1-126-126A90.9,90.9,0,0,1,99.65,37.66,102.06,102.06,0,0,0,218.34,156.35,90.9,90.9,0,0,1,190.1,191.93Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M233.54,142.23a8,8,0,0,0-8-2,88.08,88.08,0,0,1-109.8-109.8,8,8,0,0,0-10-10,104.84,104.84,0,0,0-52.91,37A104,104,0,0,0,136,224a103.09,103.09,0,0,0,62.52-20.88,104.84,104.84,0,0,0,37-52.91A8,8,0,0,0,233.54,142.23ZM188.9,190.34A88,88,0,0,1,65.66,67.11a89,89,0,0,1,31.4-26A106,106,0,0,0,96,56,104.11,104.11,0,0,0,200,160a106,106,0,0,0,14.92-1.06A89,89,0,0,1,188.9,190.34Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M230.72,145.06a4,4,0,0,0-4-1A92.08,92.08,0,0,1,111.94,29.27a4,4,0,0,0-5-5A100.78,100.78,0,0,0,56.08,59.88a100,100,0,0,0,140,140,100.78,100.78,0,0,0,35.59-50.87A4,4,0,0,0,230.72,145.06ZM191.3,193.53A92,92,0,0,1,62.47,64.7a93,93,0,0,1,39.88-30.35,100.09,100.09,0,0,0,119.3,119.3A93,93,0,0,1,191.3,193.53Z"}))]]),gd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M234.49,111.07,90.41,22.94A20,20,0,0,0,60,39.87V216.13a20,20,0,0,0,30.41,16.93l144.08-88.13a19.82,19.82,0,0,0,0-33.86ZM84,208.85V47.15L216.16,128Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M228.23,134.69,84.15,222.81A8,8,0,0,1,72,216.12V39.88a8,8,0,0,1,12.15-6.69l144.08,88.12A7.82,7.82,0,0,1,228.23,134.69Z",opacity:"0.2"}),i.createElement("path",{d:"M232.4,114.49,88.32,26.35a16,16,0,0,0-16.2-.3A15.86,15.86,0,0,0,64,39.87V216.13A15.94,15.94,0,0,0,80,232a16.07,16.07,0,0,0,8.36-2.35L232.4,141.51a15.81,15.81,0,0,0,0-27ZM80,215.94V40l143.83,88Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M240,128a15.74,15.74,0,0,1-7.6,13.51L88.32,229.65a16,16,0,0,1-16.2.3A15.86,15.86,0,0,1,64,216.13V39.87a15.86,15.86,0,0,1,8.12-13.82,16,16,0,0,1,16.2.3L232.4,114.49A15.74,15.74,0,0,1,240,128Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M231.36,116.19,87.28,28.06a14,14,0,0,0-14.18-.27A13.69,13.69,0,0,0,66,39.87V216.13a13.69,13.69,0,0,0,7.1,12.08,14,14,0,0,0,14.18-.27l144.08-88.13a13.82,13.82,0,0,0,0-23.62Zm-6.26,13.38L81,217.7a2,2,0,0,1-2.06,0,1.78,1.78,0,0,1-1-1.61V39.87a1.78,1.78,0,0,1,1-1.61A2.06,2.06,0,0,1,80,38a2,2,0,0,1,1,.31L225.1,126.43a1.82,1.82,0,0,1,0,3.14Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M232.4,114.49,88.32,26.35a16,16,0,0,0-16.2-.3A15.86,15.86,0,0,0,64,39.87V216.13A15.94,15.94,0,0,0,80,232a16.07,16.07,0,0,0,8.36-2.35L232.4,141.51a15.81,15.81,0,0,0,0-27ZM80,215.94V40l143.83,88Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M230.32,117.9,86.24,29.79a11.91,11.91,0,0,0-12.17-.23A11.71,11.71,0,0,0,68,39.89V216.11a11.71,11.71,0,0,0,6.07,10.33,11.91,11.91,0,0,0,12.17-.23L230.32,138.1a11.82,11.82,0,0,0,0-20.2Zm-4.18,13.37L82.06,219.39a4,4,0,0,1-4.07.07,3.77,3.77,0,0,1-2-3.35V39.89a3.77,3.77,0,0,1,2-3.35,4,4,0,0,1,4.07.07l144.08,88.12a3.8,3.8,0,0,1,0,6.54Z"}))]]),Ed=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,36H56A20,20,0,0,0,36,56V200a20,20,0,0,0,20,20H200a20,20,0,0,0,20-20V56A20,20,0,0,0,200,36Zm-4,160H60V60H196Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,56V200a8,8,0,0,1-8,8H56a8,8,0,0,1-8-8V56a8,8,0,0,1,8-8H200A8,8,0,0,1,208,56Z",opacity:"0.2"}),i.createElement("path",{d:"M200,40H56A16,16,0,0,0,40,56V200a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V56A16,16,0,0,0,200,40Zm0,160H56V56H200V200Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,56V200a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V56A16,16,0,0,1,56,40H200A16,16,0,0,1,216,56Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,42H56A14,14,0,0,0,42,56V200a14,14,0,0,0,14,14H200a14,14,0,0,0,14-14V56A14,14,0,0,0,200,42Zm2,158a2,2,0,0,1-2,2H56a2,2,0,0,1-2-2V56a2,2,0,0,1,2-2H200a2,2,0,0,1,2,2Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,40H56A16,16,0,0,0,40,56V200a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V56A16,16,0,0,0,200,40Zm0,160H56V56H200V200Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,44H56A12,12,0,0,0,44,56V200a12,12,0,0,0,12,12H200a12,12,0,0,0,12-12V56A12,12,0,0,0,200,44Zm4,156a4,4,0,0,1-4,4H56a4,4,0,0,1-4-4V56a4,4,0,0,1,4-4H200a4,4,0,0,1,4,4Z"}))]]),Sd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M116,36V20a12,12,0,0,1,24,0V36a12,12,0,0,1-24,0Zm80,92a68,68,0,1,1-68-68A68.07,68.07,0,0,1,196,128Zm-24,0a44,44,0,1,0-44,44A44.05,44.05,0,0,0,172,128ZM51.51,68.49a12,12,0,1,0,17-17l-12-12a12,12,0,0,0-17,17Zm0,119-12,12a12,12,0,0,0,17,17l12-12a12,12,0,1,0-17-17ZM196,72a12,12,0,0,0,8.49-3.51l12-12a12,12,0,0,0-17-17l-12,12A12,12,0,0,0,196,72Zm8.49,115.51a12,12,0,0,0-17,17l12,12a12,12,0,0,0,17-17ZM48,128a12,12,0,0,0-12-12H20a12,12,0,0,0,0,24H36A12,12,0,0,0,48,128Zm80,80a12,12,0,0,0-12,12v16a12,12,0,0,0,24,0V220A12,12,0,0,0,128,208Zm108-92H220a12,12,0,0,0,0,24h16a12,12,0,0,0,0-24Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M184,128a56,56,0,1,1-56-56A56,56,0,0,1,184,128Z",opacity:"0.2"}),i.createElement("path",{d:"M120,40V16a8,8,0,0,1,16,0V40a8,8,0,0,1-16,0Zm72,88a64,64,0,1,1-64-64A64.07,64.07,0,0,1,192,128Zm-16,0a48,48,0,1,0-48,48A48.05,48.05,0,0,0,176,128ZM58.34,69.66A8,8,0,0,0,69.66,58.34l-16-16A8,8,0,0,0,42.34,53.66Zm0,116.68-16,16a8,8,0,0,0,11.32,11.32l16-16a8,8,0,0,0-11.32-11.32ZM192,72a8,8,0,0,0,5.66-2.34l16-16a8,8,0,0,0-11.32-11.32l-16,16A8,8,0,0,0,192,72Zm5.66,114.34a8,8,0,0,0-11.32,11.32l16,16a8,8,0,0,0,11.32-11.32ZM48,128a8,8,0,0,0-8-8H16a8,8,0,0,0,0,16H40A8,8,0,0,0,48,128Zm80,80a8,8,0,0,0-8,8v24a8,8,0,0,0,16,0V216A8,8,0,0,0,128,208Zm112-88H216a8,8,0,0,0,0,16h24a8,8,0,0,0,0-16Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M120,40V16a8,8,0,0,1,16,0V40a8,8,0,0,1-16,0Zm8,24a64,64,0,1,0,64,64A64.07,64.07,0,0,0,128,64ZM58.34,69.66A8,8,0,0,0,69.66,58.34l-16-16A8,8,0,0,0,42.34,53.66Zm0,116.68-16,16a8,8,0,0,0,11.32,11.32l16-16a8,8,0,0,0-11.32-11.32ZM192,72a8,8,0,0,0,5.66-2.34l16-16a8,8,0,0,0-11.32-11.32l-16,16A8,8,0,0,0,192,72Zm5.66,114.34a8,8,0,0,0-11.32,11.32l16,16a8,8,0,0,0,11.32-11.32ZM48,128a8,8,0,0,0-8-8H16a8,8,0,0,0,0,16H40A8,8,0,0,0,48,128Zm80,80a8,8,0,0,0-8,8v24a8,8,0,0,0,16,0V216A8,8,0,0,0,128,208Zm112-88H216a8,8,0,0,0,0,16h24a8,8,0,0,0,0-16Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M122,40V16a6,6,0,0,1,12,0V40a6,6,0,0,1-12,0Zm68,88a62,62,0,1,1-62-62A62.07,62.07,0,0,1,190,128Zm-12,0a50,50,0,1,0-50,50A50.06,50.06,0,0,0,178,128ZM59.76,68.24a6,6,0,1,0,8.48-8.48l-16-16a6,6,0,0,0-8.48,8.48Zm0,119.52-16,16a6,6,0,1,0,8.48,8.48l16-16a6,6,0,1,0-8.48-8.48ZM192,70a6,6,0,0,0,4.24-1.76l16-16a6,6,0,0,0-8.48-8.48l-16,16A6,6,0,0,0,192,70Zm4.24,117.76a6,6,0,0,0-8.48,8.48l16,16a6,6,0,0,0,8.48-8.48ZM46,128a6,6,0,0,0-6-6H16a6,6,0,0,0,0,12H40A6,6,0,0,0,46,128Zm82,82a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V216A6,6,0,0,0,128,210Zm112-88H216a6,6,0,0,0,0,12h24a6,6,0,0,0,0-12Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M120,40V16a8,8,0,0,1,16,0V40a8,8,0,0,1-16,0Zm72,88a64,64,0,1,1-64-64A64.07,64.07,0,0,1,192,128Zm-16,0a48,48,0,1,0-48,48A48.05,48.05,0,0,0,176,128ZM58.34,69.66A8,8,0,0,0,69.66,58.34l-16-16A8,8,0,0,0,42.34,53.66Zm0,116.68-16,16a8,8,0,0,0,11.32,11.32l16-16a8,8,0,0,0-11.32-11.32ZM192,72a8,8,0,0,0,5.66-2.34l16-16a8,8,0,0,0-11.32-11.32l-16,16A8,8,0,0,0,192,72Zm5.66,114.34a8,8,0,0,0-11.32,11.32l16,16a8,8,0,0,0,11.32-11.32ZM48,128a8,8,0,0,0-8-8H16a8,8,0,0,0,0,16H40A8,8,0,0,0,48,128Zm80,80a8,8,0,0,0-8,8v24a8,8,0,0,0,16,0V216A8,8,0,0,0,128,208Zm112-88H216a8,8,0,0,0,0,16h24a8,8,0,0,0,0-16Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M124,40V16a4,4,0,0,1,8,0V40a4,4,0,0,1-8,0Zm64,88a60,60,0,1,1-60-60A60.07,60.07,0,0,1,188,128Zm-8,0a52,52,0,1,0-52,52A52.06,52.06,0,0,0,180,128ZM61.17,66.83a4,4,0,0,0,5.66-5.66l-16-16a4,4,0,0,0-5.66,5.66Zm0,122.34-16,16a4,4,0,0,0,5.66,5.66l16-16a4,4,0,0,0-5.66-5.66ZM192,68a4,4,0,0,0,2.83-1.17l16-16a4,4,0,1,0-5.66-5.66l-16,16A4,4,0,0,0,192,68Zm2.83,121.17a4,4,0,0,0-5.66,5.66l16,16a4,4,0,0,0,5.66-5.66ZM40,124H16a4,4,0,0,0,0,8H40a4,4,0,0,0,0-8Zm88,88a4,4,0,0,0-4,4v24a4,4,0,0,0,8,0V216A4,4,0,0,0,128,212Zm112-88H216a4,4,0,0,0,0,8h24a4,4,0,0,0,0-8Z"}))]]),Ad=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,48H180V36A28,28,0,0,0,152,8H104A28,28,0,0,0,76,36V48H40a12,12,0,0,0,0,24h4V208a20,20,0,0,0,20,20H192a20,20,0,0,0,20-20V72h4a12,12,0,0,0,0-24ZM100,36a4,4,0,0,1,4-4h48a4,4,0,0,1,4,4V48H100Zm88,168H68V72H188ZM116,104v64a12,12,0,0,1-24,0V104a12,12,0,0,1,24,0Zm48,0v64a12,12,0,0,1-24,0V104a12,12,0,0,1,24,0Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,56V208a8,8,0,0,1-8,8H64a8,8,0,0,1-8-8V56Z",opacity:"0.2"}),i.createElement("path",{d:"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM112,168a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm0-120H96V40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,50H174V40a22,22,0,0,0-22-22H104A22,22,0,0,0,82,40V50H40a6,6,0,0,0,0,12H50V208a14,14,0,0,0,14,14H192a14,14,0,0,0,14-14V62h10a6,6,0,0,0,0-12ZM94,40a10,10,0,0,1,10-10h48a10,10,0,0,1,10,10V50H94ZM194,208a2,2,0,0,1-2,2H64a2,2,0,0,1-2-2V62H194ZM110,104v64a6,6,0,0,1-12,0V104a6,6,0,0,1,12,0Zm48,0v64a6,6,0,0,1-12,0V104a6,6,0,0,1,12,0Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,52H172V40a20,20,0,0,0-20-20H104A20,20,0,0,0,84,40V52H40a4,4,0,0,0,0,8H52V208a12,12,0,0,0,12,12H192a12,12,0,0,0,12-12V60h12a4,4,0,0,0,0-8ZM92,40a12,12,0,0,1,12-12h48a12,12,0,0,1,12,12V52H92ZM196,208a4,4,0,0,1-4,4H64a4,4,0,0,1-4-4V60H196ZM108,104v64a4,4,0,0,1-8,0V104a4,4,0,0,1,8,0Zm48,0v64a4,4,0,0,1-8,0V104a4,4,0,0,1,8,0Z"}))]]),bd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,20A108,108,0,1,0,236,128,108.12,108.12,0,0,0,128,20Zm0,192a84,84,0,1,1,84-84A84.09,84.09,0,0,1,128,212Zm-12-80V80a12,12,0,0,1,24,0v52a12,12,0,0,1-24,0Zm28,40a16,16,0,1,1-16-16A16,16,0,0,1,144,172Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),i.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm-8-80V80a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,172Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm-8,56a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm8,104a12,12,0,1,1,12-12A12,12,0,0,1,128,184Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,26A102,102,0,1,0,230,128,102.12,102.12,0,0,0,128,26Zm0,192a90,90,0,1,1,90-90A90.1,90.1,0,0,1,128,218Zm-6-82V80a6,6,0,0,1,12,0v56a6,6,0,0,1-12,0Zm16,36a10,10,0,1,1-10-10A10,10,0,0,1,138,172Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm-8-80V80a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,172Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,28A100,100,0,1,0,228,128,100.11,100.11,0,0,0,128,28Zm0,192a92,92,0,1,1,92-92A92.1,92.1,0,0,1,128,220Zm-4-84V80a4,4,0,0,1,8,0v56a4,4,0,0,1-8,0Zm12,36a8,8,0,1,1-8-8A8,8,0,0,1,136,172Z"}))]]),pd=i.createContext({color:"currentColor",size:"1em",weight:"regular",mirrored:!1}),ql=i.forwardRef((r,p)=>{const{alt:T,color:v,size:q,weight:C,mirrored:P,children:j,weights:R,...O}=r,{color:_="currentColor",size:S,weight:x="regular",mirrored:el=!1,...nl}=i.useContext(pd);return i.createElement("svg",{ref:p,xmlns:"http://www.w3.org/2000/svg",width:q??S,height:q??S,fill:v??_,viewBox:"0 0 256 256",transform:P||el?"scale(-1, 1)":void 0,...nl,...O},!!T&&i.createElement("title",null,T),j,R.get(C??x))});ql.displayName="IconBase";const Ms=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:ed}));Ms.displayName="ArrowClockwiseIcon";const As=Ms,Hs=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:ad}));Hs.displayName="ArrowSquareOutIcon";const Td=Hs,Ns=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:nd}));Ns.displayName="CaretDownIcon";const zs=Ns,_s=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:ud}));_s.displayName="CheckIcon";const Md=_s,Os=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:cd}));Os.displayName="CheckCircleIcon";const Hd=Os,Zs=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:id}));Zs.displayName="CircleNotchIcon";const Cs=Zs,Ds=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:fd}));Ds.displayName="ClipboardIcon";const xs=Ds,Rs=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:sd}));Rs.displayName="ClockCounterClockwiseIcon";const Nd=Rs,Vs=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:od}));Vs.displayName="DownloadSimpleIcon";const Ri=Vs,js=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:rd}));js.displayName="GithubLogoIcon";const zd=js,Us=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:dd}));Us.displayName="LightningIcon";const _d=Us,qs=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:md}));qs.displayName="ListIcon";const Od=qs,Bs=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:hd}));Bs.displayName="MagnifyingGlassIcon";const Zd=Bs,Ys=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:vd}));Ys.displayName="MonitorIcon";const Cd=Ys,Ls=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:yd}));Ls.displayName="MoonIcon";const Dd=Ls,Gs=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:gd}));Gs.displayName="PlayIcon";const xd=Gs,ws=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:Ed}));ws.displayName="StopIcon";const Rd=ws,Qs=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:Sd}));Qs.displayName="SunIcon";const Vd=Qs,Xs=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:Ad}));Xs.displayName="TrashIcon";const jd=Xs,Ks=i.forwardRef((r,p)=>i.createElement(ql,{ref:p,...r,weights:bd}));Ks.displayName="WarningCircleIcon";const Js=Ks,Ud="modulepreload",qd=function(r,p){return new URL(r,p).href},bs={},Bd=function(p,T,v){let q=Promise.resolve();if(T&&T.length>0){let P=function(_){return Promise.all(_.map(S=>Promise.resolve(S).then(x=>({status:"fulfilled",value:x}),x=>({status:"rejected",reason:x}))))};const j=document.getElementsByTagName("link"),R=document.querySelector("meta[property=csp-nonce]"),O=R?.nonce||R?.getAttribute("nonce");q=P(T.map(_=>{if(_=qd(_,v),_ in bs)return;bs[_]=!0;const S=_.endsWith(".css"),x=S?'[rel="stylesheet"]':"";if(v)for(let nl=j.length-1;nl>=0;nl--){const Nl=j[nl];if(Nl.href===_&&(!S||Nl.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${_}"]${x}`))return;const el=document.createElement("link");if(el.rel=S?"stylesheet":Ud,S||(el.as="script"),el.crossOrigin="",el.href=_,O&&el.setAttribute("nonce",O),document.head.appendChild(el),S)return new Promise((nl,Nl)=>{el.addEventListener("load",nl),el.addEventListener("error",()=>Nl(Error(`Unable to preload CSS for ${_}`)))})}))}function C(P){const j=new Event("vite:preloadError",{cancelable:!0});if(j.payload=P,window.dispatchEvent(j),!j.defaultPrevented)throw P}return q.then(P=>{for(const j of P||[])j.status==="rejected"&&C(j.reason);return p().catch(C)})},Xt=typeof window<"u"&&window.parent!==window;function Yd(r){if(!r||typeof r!="object")return null;const p=r;if(typeof p.dark!="boolean")return null;const T={};if(p.tokens&&typeof p.tokens=="object")for(const[v,q]of Object.entries(p.tokens))typeof q=="string"&&(T[v]=q);return{dark:p.dark,lang:typeof p.lang=="string"&&p.lang?p.lang:"en",tokens:T}}const Vi=new Set;let ps=!1,Ts=!1,ji=null;const Ld=typeof window<"u"&&typeof document<"u"?Bd(()=>import("./magpie-bridge-CFX0m8VY.js"),[],import.meta.url).catch(()=>{}):Promise.resolve(void 0);function Gd(){return typeof window>"u"?void 0:window.magpie}function Di(r){const p=Yd(r);if(p){ji=p,document.documentElement.dataset.magpie="connected";for(const T of Vi)try{T(p)}catch{}}}function wd(){ps||Ts||!Xt||(Ts=!0,Ld.then(()=>{const r=Gd();r&&(ps=!0,r.onTheme?.(Di),r.ready?.then(Di,()=>{}),r.theme&&Di(r.theme))}))}function Qd(r){return Xt?(Vi.add(r),ji&&r(ji),wd(),()=>Vi.delete(r)):()=>{}}function Ju({label:r,value:p,options:T,onChange:v,disabled:q=!1}){const P=`app-menu-${i.useId().replace(/:/g,"")}`,j=i.useRef(null),R=i.useRef(null),O=i.useRef(null),[_,S]=i.useState(!1),x=Math.max(0,T.findIndex(Y=>Y.value===p)),[el,nl]=i.useState(x);i.useEffect(()=>nl(x),[x]),i.useEffect(()=>{_&&O.current?.focus()},[_]),i.useEffect(()=>{if(!_)return;const Y=El=>{j.current?.contains(El.target)||S(!1)};return document.addEventListener("pointerdown",Y),()=>document.removeEventListener("pointerdown",Y)},[_]);const Nl=Y=>{const El=T[Y];El&&(nl(Y),v(El.value),S(!1),R.current?.focus())},W=Y=>{T.length&&nl(El=>(El+Y+T.length)%T.length)},Bl=Y=>{if(Y.key==="Escape"){Y.preventDefault(),S(!1),R.current?.focus();return}Y.key==="ArrowDown"||Y.key==="ArrowRight"?(Y.preventDefault(),W(1)):Y.key==="ArrowUp"||Y.key==="ArrowLeft"?(Y.preventDefault(),_||S(!0),W(-1)):Y.key==="Home"?(Y.preventDefault(),nl(0)):Y.key==="End"?(Y.preventDefault(),nl(Math.max(0,T.length-1))):Y.key==="Tab"?S(!1):(Y.key==="Enter"||Y.key===" ")&&(Y.preventDefault(),Nl(el))};return o.jsxs("div",{className:"app-menu",ref:j,children:[o.jsxs("button",{ref:R,type:"button",className:"app-menu-trigger","aria-label":r,"aria-haspopup":"listbox","aria-controls":P,"aria-expanded":_,disabled:q,onClick:()=>{nl(x),S(Y=>!Y)},onKeyDown:Y=>{Y.key==="ArrowDown"||Y.key==="ArrowUp"||Y.key==="Enter"||Y.key===" "?(Y.preventDefault(),nl(x),S(!0)):Y.key==="Escape"&&S(!1)},children:[o.jsx("span",{children:T.find(Y=>Y.value===p)?.label??p}),o.jsx("span",{className:"app-menu-chevron","aria-hidden":"true",children:"⌄"})]}),o.jsx("div",{id:P,ref:O,className:"app-menu-list",role:"listbox","aria-label":r,"aria-activedescendant":`${P}-option-${el}`,tabIndex:_?0:-1,hidden:!_,onKeyDown:Bl,onBlur:Y=>{j.current?.contains(Y.relatedTarget)||S(!1)},children:T.map((Y,El)=>o.jsxs("button",{id:`${P}-option-${El}`,type:"button",role:"option","aria-selected":Y.value===p,className:[Y.value===p?"selected":"",El===el?"active":""].filter(Boolean).join(" "),tabIndex:-1,onMouseEnter:()=>nl(El),onClick:()=>Nl(El),children:[o.jsx("span",{children:Y.label}),Y.value===p&&o.jsx("span",{"aria-hidden":"true",children:"✓"})]},Y.value))})]})}function xi(r){const p=(r||"").toLowerCase().replaceAll("_","-").split("-");return p[0]!=="zh"?"en":p.includes("hans")?"zh-Hans":p.includes("hant")||p.some(T=>["tw","hk","mo"].includes(T))?"zh-Hant":"zh-Hans"}const Ui=r=>new URL(r.replace(/^\//,""),document.baseURI).toString(),S0=()=>window.__FINGERPRINT__?.token;async function g0(r,p){const T=new Headers(p?.headers);S0()&&T.set("Authorization",`Bearer ${S0()}`),p?.body&&T.set("content-type","application/json");const v=await fetch(Ui(r),{...p,headers:T});if(v.status===401&&location.reload(),!v.ok){const q=await v.json().catch(()=>null);throw new Error(q?.error||`${v.status} ${v.statusText}`)}return v.json()}const Xd={locale:"zh-Hans",detect:"指纹检测",history:"检测历史",about:"关于",settings:"运行设置",ready:"服务已连接",offline:"服务离线",start:"开始检测",cancel:"取消任务",search:"搜索模型",selected:"已选择",noModels:"暂无可用模型",provider:"提供商",model:"模型",account:"账号",protocol:"协议",effort:"推理强度",tier:"服务等级",strict:"完整样本",targetParallel:"模型并行",sampleParallel:"样本并行",deadline:"超时(秒)",estimated:"预计请求",live:"实时进度",results:"检测结果",candidates:"候选排名",details:"样本详情",export:"导出 JSON",demo:"示例数据",clear:"清空选择",completed:"已完成",running:"运行中",failed:"失败",queued:"排队中",cancelled:"已取消"},Kd={locale:"zh-Hant",detect:"指紋檢測",history:"檢測歷史",about:"關於",settings:"執行設定",ready:"服務已連線",offline:"服務離線",start:"開始檢測",cancel:"取消任務",search:"搜尋模型",selected:"已選擇",noModels:"暫無可用模型",provider:"提供者",model:"模型",account:"帳號",protocol:"協定",effort:"推理強度",tier:"服務等級",strict:"完整樣本",targetParallel:"模型並行",sampleParallel:"樣本並行",deadline:"逾時(秒)",estimated:"預計請求",live:"即時進度",results:"檢測結果",candidates:"候選排名",details:"樣本詳情",export:"匯出 JSON",demo:"示例資料",clear:"清除選擇",completed:"已完成",running:"執行中",failed:"失敗",queued:"排隊中",cancelled:"已取消"},Jd={locale:"en",detect:"Fingerprint",history:"History",about:"About",settings:"Run settings",ready:"Service connected",offline:"Service offline",start:"Start detection",cancel:"Cancel job",search:"Search models",selected:"selected",noModels:"No models available",provider:"Provider",model:"Model",account:"Account",protocol:"Protocol",effort:"Reasoning effort",tier:"Service tier",strict:"Complete samples",targetParallel:"Model parallelism",sampleParallel:"Sample parallelism",deadline:"Deadline (sec)",estimated:"Estimated requests",live:"Live progress",results:"Results",candidates:"Candidate ranking",details:"Sample details",export:"Export JSON",demo:"Demo data",clear:"Clear selection",completed:"Completed",running:"Running",failed:"Failed",queued:"Queued",cancelled:"Cancelled"},E0=r=>!["queued","running"].includes(r),Sn=(r,p,T)=>Number.isInteger(Number(r))&&Number(r)>=p&&Number(r)<=T,An=(r,p)=>({completed:r.completed,running:r.running,failed:r.failed,queued:r.queued,cancelled:r.cancelled,interrupted:r.locale==="en"?"Interrupted":r.locale==="zh-Hant"?"已中斷":"已中断",scored:r.locale==="en"?"Scored":r.locale==="zh-Hant"?"已評分":"已评分",partial:r.locale==="en"?"Partial":r.locale==="zh-Hant"?"部分樣本":"部分样本",unscorable:r.locale==="en"?"Unscorable":r.locale==="zh-Hant"?"不可評分":"不可评分",not_model:r.locale==="en"?"Unexpected sequence":r.locale==="zh-Hant"?"序列不符合檢測假設":"序列不符合检测假设",complete:r.locale==="en"?"Complete":(r.locale==="zh-Hant","完成"),truncated:r.locale==="en"?"Truncated":r.locale==="zh-Hant"?"已截斷":"已截断",waiting:r.locale==="en"?"Waiting":r.locale==="zh-Hant"?"等待回應":"等待响应",streaming:r.locale==="en"?"Streaming":(r.locale==="zh-Hant","接收中")})[p]||p,K=(r,p,T,v)=>r.locale==="en"?v:r.locale==="zh-Hant"?T:p;function Fd(){const[r,p]=i.useState(()=>{try{const N=Xt?null:localStorage.getItem("fp-lang");return xi(N||window.__FINGERPRINT__?.lang)}catch{return xi(window.__FINGERPRINT__?.lang)}}),T=r==="en"?Jd:r==="zh-Hant"?Kd:Xd,[v,q]=i.useState(()=>{try{return!Xt&&localStorage.getItem("fp-theme")||window.__FINGERPRINT__?.theme||"system"}catch{return window.__FINGERPRINT__?.theme||"system"}}),[C,P]=i.useState(null),[j,R]=i.useState(""),[O,_]=i.useState("detect"),[S,x]=i.useState(null),[el,nl]=i.useState([]),[Nl,W]=i.useState(""),[Bl,Y]=i.useState("all"),[El,St]=i.useState([]),[nt,ut]=i.useState(""),[G,hl]=i.useState({api:"auto",effort:"",serviceTier:"default",strict:!1,targetParallel:2,sampleParallel:3,deadlineSeconds:300}),[ct,rt]=i.useState(!1),[dt,et]=i.useState(null),[xt,te]=i.useState(!1),[Rl,D]=i.useState(!1),J=Sn(G.targetParallel,1,3)&&Sn(G.sampleParallel,1,3)&&Sn(G.deadlineSeconds,10,900);i.useEffect(()=>{const N=matchMedia("(prefers-color-scheme: dark)"),U=()=>{document.documentElement.dataset.theme=v==="system"?N.matches?"dark":"light":v};U(),N.addEventListener("change",U);try{Xt||localStorage.setItem("fp-theme",v)}catch{}return()=>N.removeEventListener("change",U)},[v]),i.useEffect(()=>{document.documentElement.lang=r;try{Xt||localStorage.setItem("fp-lang",r)}catch{}},[r]),i.useEffect(()=>{const N=U=>{if(U.source!==window.parent)return;const yl=U.data;yl?.magpie===1&&yl.event==="action"&&yl.data?.provider?.id&&(Y(yl.data.provider.id),_("detect"))};return window.addEventListener("message",N),()=>window.removeEventListener("message",N)},[]),i.useEffect(()=>Qd(N=>{q(N.dark?"dark":"light");const U=xi(N.lang);document.documentElement.lang=U,p(U)}),[]);const F=async()=>{R("");try{const N=await g0("api/bootstrap");P(N),nl(N.jobs||[]),x(U=>U||N.jobs.find(yl=>!E0(yl.state))||null),window.__FINGERPRINT__?.initialProvider&&Y(window.__FINGERPRINT__.initialProvider),R(N.gateway.error||"")}catch(N){R(String(N))}},Al=async()=>{if(!Rl){D(!0),R("");try{const N=await g0("api/bank/download",{method:"POST"});P(U=>U&&{...U,bank:N.bank,bankStatus:N.bankStatus,bankError:N.error}),N.error&&R(N.error)}catch(N){R(String(N))}finally{D(!1)}}};i.useEffect(()=>{F()},[]),i.useEffect(()=>{if(!S||E0(S.state))return;const N=new AbortController,U=S.id;return(async()=>{let zl=!1;for(;!N.signal.aborted&&!zl;){try{const _l=await fetch(Ui(`api/jobs/${U}/events`),{headers:{Authorization:`Bearer ${S0()}`},signal:N.signal});if(_l.status===401&&location.reload(),!_l.ok||!_l.body)throw new Error(`Progress connection: HTTP ${_l.status}`);const bl=_l.body.getReader(),Vt=new TextDecoder;let Kt="";try{for(;!N.signal.aborted;){const Jt=await bl.read();if(Jt.done)break;Kt+=Vt.decode(Jt.value,{stream:!0});let Oe;for(;(Oe=Kt.indexOf(` - -`))>=0;){const _a=Kt.slice(0,Oe);Kt=Kt.slice(Oe+2);const me=_a.split(` -`).find(Ft=>Ft.startsWith("data: "));if(!me)continue;const na=JSON.parse(me.slice(6));x(Ft=>Ft?.id===U?na:Ft),nl(Ft=>[na,...Ft.filter(bn=>bn.id!==U)]),zl=E0(na.state)}}}finally{await bl.cancel().catch(()=>{})}}catch(_l){N.signal.aborted||R(String(_l))}!zl&&!N.signal.aborted&&await new Promise(_l=>setTimeout(_l,1500))}})(),()=>N.abort()},[S?.id]);const fl=C?.models||[],At=i.useMemo(()=>["all",...Array.from(new Set(fl.map(N=>N.provider)))],[fl]),Rt=fl.filter(N=>(Bl==="all"||N.provider===Bl)&&`${N.name} ${N.id}`.toLowerCase().includes(Nl.toLowerCase())),bt=fl.filter(N=>El.includes(N.id)),m=bt[0]?.efforts.filter(N=>bt.every(U=>U.efforts.includes(N)))||[],z=m.includes(G.effort)?G.effort:"",w=El.length*3,Q=N=>St(U=>U.includes(N)?U.filter(yl=>yl!==N):U.length<24?[...U,N]:U),al=(N,U)=>hl(yl=>({...yl,[N]:U})),rl=async()=>{if(!El.length||xt)return;if(nt&&new Set(bt.map(U=>U.provider)).size>1){R(K(T,"固定账号时请只选择同一提供商的模型。","固定帳號時請只選擇同一提供者的模型。","Select models from one provider when pinning an account."));return}te(!0),R("");const N={targets:El.map(U=>({model:U,...nt?{account:nt}:{}})),api:G.api,effort:z,serviceTier:G.serviceTier,strict:G.strict,targetParallel:Number(G.targetParallel),sampleParallel:Number(G.sampleParallel),deadlineSeconds:Number(G.deadlineSeconds)};try{const U=await g0("api/jobs",{method:"POST",body:JSON.stringify(N)});x(U),nl(yl=>[U,...yl.filter(zl=>zl.id!==U.id)]),et(U.results[0]?.id||null)}catch(U){R(String(U))}finally{te(!1)}},dl=async N=>{try{const U=await g0(`api/jobs/${N}/cancel`,{method:"POST"});x(yl=>yl?.id===N?U:yl),nl(yl=>yl.map(zl=>zl.id===N?U:zl))}catch(U){R(String(U))}},L=async N=>{try{const U=await fetch(Ui(`api/jobs/${N}/export`),{headers:S0()?{Authorization:`Bearer ${S0()}`}:{}});if(!U.ok)throw new Error("Export failed");const yl=await U.blob(),zl=document.createElement("a");zl.href=URL.createObjectURL(yl),zl.download=`fingerprint-${N}.json`,zl.click(),setTimeout(()=>URL.revokeObjectURL(zl.href),1e3)}catch(U){R(String(U))}},k=async N=>{try{await g0(`api/jobs/${N}`,{method:"DELETE"}),nl(U=>U.filter(yl=>yl.id!==N)),S?.id===N&&x(null)}catch(U){R(String(U))}};return o.jsxs("div",{className:`app-shell ${Xt?"embedded":"standalone"}`,children:[!Xt&&o.jsx("h1",{className:"standalone-title",children:"Fingerprint"}),o.jsxs("div",{className:"page-tools",children:[o.jsxs("nav",{className:"segs","aria-label":K(T,"指纹检测视图","指紋檢測檢視","Fingerprint views"),role:"tablist",onKeyDown:N=>{if(["ArrowLeft","ArrowRight","Home","End"].includes(N.key)){N.preventDefault();const U=["detect","history","about"],yl=U.indexOf(O),zl=N.key==="Home"?U[0]:N.key==="End"?U[2]:U[(yl+(N.key==="ArrowRight"?1:2))%U.length];_(zl),document.getElementById(`tab-${zl}`)?.focus()}},children:[o.jsx("button",{className:`opt ${O==="detect"?"on":""}`,id:"tab-detect",role:"tab","aria-selected":O==="detect","aria-controls":"fingerprint-panel",tabIndex:O==="detect"?0:-1,onClick:()=>_("detect"),children:T.detect}),o.jsxs("button",{className:`opt ${O==="history"?"on":""}`,id:"tab-history",role:"tab","aria-selected":O==="history","aria-controls":"fingerprint-panel",tabIndex:O==="history"?0:-1,onClick:()=>_("history"),children:[T.history,el.length>0&&o.jsx("span",{className:"tab-count",children:el.length})]}),o.jsx("button",{className:`opt ${O==="about"?"on":""}`,id:"tab-about",role:"tab","aria-selected":O==="about","aria-controls":"fingerprint-panel",tabIndex:O==="about"?0:-1,onClick:()=>_("about"),children:T.about})]}),o.jsxs("div",{className:"page-status",children:[C?.demo?o.jsx("span",{className:"badge",children:T.demo}):o.jsxs("span",{className:"service-dot",role:"status",children:[o.jsx("i",{className:C?.gateway.reachable?"":"bad"}),C?C.gateway.reachable?T.ready:T.offline:j?T.offline:K(T,"正在连接…","正在連線…","Connecting…")]}),o.jsx("button",{className:"icon icon-button",onClick:F,"aria-label":K(T,"刷新模型与检测历史","重新整理模型與檢測歷史","Refresh models and history"),title:K(T,"刷新","重新整理","Refresh"),children:o.jsx(As,{size:15})}),!Xt&&o.jsxs(o.Fragment,{children:[o.jsx("button",{className:"text",onClick:()=>p(r==="en"?"zh-Hans":r==="zh-Hans"?"zh-Hant":"en"),children:r==="en"?"简体中文":r==="zh-Hans"?"繁體中文":"English"}),o.jsx("button",{className:"icon icon-button","aria-label":K(T,`主题:${v}`,`主題:${v}`,`Theme: ${v}`),onClick:()=>q(v==="light"?"dark":v==="dark"?"system":"light"),children:v==="system"?o.jsx(Cd,{size:15}):v==="dark"?o.jsx(Dd,{size:15}):o.jsx(Vd,{size:15})})]})]})]}),o.jsxs("main",{className:"main",id:"fingerprint-panel",role:"tabpanel","aria-labelledby":`tab-${O}`,children:[j&&o.jsxs("div",{className:"notice error",role:"alert",children:[o.jsx(Js,{size:18}),o.jsx("span",{children:j}),o.jsx("button",{onClick:F,"aria-label":K(T,"重新连接","重新連線","Reconnect"),children:o.jsx(As,{size:16})})]}),O==="history"?o.jsx(Wd,{history:el,t:T,onCancel:dl,onDownload:L,onDelete:k}):O==="about"?o.jsx(kd,{t:T}):o.jsxs(o.Fragment,{children:[o.jsxs("div",{className:"intro",children:[o.jsx("p",{children:K(T,"选择模型,用同一组挑战比较响应指纹。","選擇模型,用同一組挑戰比較回應指紋。","Select models to compare their fingerprints with shared challenges.")}),o.jsxs("div",{className:"bank-tools",children:[C?.bank?o.jsxs("span",{title:C.bank.builtAt,children:[K(T,"参考库","參考庫","Reference bank")," ·"," ",C.bank.modelCount??"—"," ",K(T,"个模型","個模型","models")]}):o.jsx("span",{children:C?.bankStatus?.state==="cached"?K(T,"参考数据已缓存,将在运行时读取","參考資料已快取,執行時讀取","Reference data cached; it will be read when a run starts"):K(T,"参考数据未下载","參考資料尚未下載","Reference data not downloaded")}),o.jsxs("button",{className:"ghost-button bank-download",type:"button",onClick:Al,disabled:!C||Rl||xt,children:[o.jsx(Ri,{size:14}),Rl?K(T,"下载中…","下載中…","Downloading…"):K(T,"下载参考数据","下載參考資料","Download reference data")]}),C?.bankError&&o.jsx("span",{className:"bank-error",role:"alert",children:C.bankError})]})]}),o.jsx("p",{className:"source-note",children:K(T,"默认参考源:lm.ikale.io,备用 cdn.jsdmirror.com。仅主动下载或无缓存时启动检测才会连接;来源站点会看到 IP,不接收凭证、提示词或模型回答。","預設參考來源:lm.ikale.io,備用 cdn.jsdmirror.com。僅主動下載或無快取時開始檢測才會連線;來源網站會看到 IP,不接收憑證、提示詞或模型回答。","Default reference sources: lm.ikale.io, with cdn.jsdmirror.com as fallback. Contacted only on download or an uncached run; these hosts see your IP, but receive no credentials, prompts or replies.")}),C?.demo&&o.jsxs("div",{className:"notice demo",children:[o.jsx(_d,{size:15}),o.jsx("span",{children:K(T,"示例数据,可直接试用检测流程。","示例資料,可直接試用檢測流程。","Demo data. Try the detection workflow.")})]}),o.jsxs("div",{className:"workspace-grid",children:[o.jsxs("section",{className:"list panel models-panel",children:[o.jsxs("div",{className:"panel-title",children:[o.jsx("div",{children:o.jsxs("h2",{children:[K(T,"选择模型","選擇模型","Models")," ",o.jsx("span",{className:"section-count",children:fl.length})]})}),o.jsxs("span",{className:"selection-count",children:[El.length," ",T.selected]}),o.jsx("button",{className:"text ghost-button",onClick:()=>St([]),disabled:!El.length,children:T.clear})]}),o.jsxs("div",{className:"filter-row",children:[o.jsxs("div",{className:"search",children:[o.jsx(Zd,{size:17}),o.jsx("input",{placeholder:T.search,"aria-label":T.search,value:Nl,onChange:N=>W(N.target.value)})]}),o.jsx(Ju,{label:T.provider,value:Bl,options:At.map(N=>({value:N,label:N==="all"?T.provider:N})),onChange:Y})]}),o.jsx("div",{className:"model-list",children:Rt.length?Rt.map(N=>o.jsxs("label",{className:`row model model-row ${El.includes(N.id)?"selected":""}`,children:[o.jsx("input",{type:"checkbox","aria-label":`${N.name} · ${N.id}`,checked:El.includes(N.id),onChange:()=>Q(N.id)}),o.jsxs("span",{className:"who model-name",children:[o.jsx("strong",{className:"name",children:N.name}),o.jsx("small",{className:"sub",children:N.id})]}),o.jsx("span",{className:"model-endpoint",children:N.nativeEndpoints?.[0]?.replace("/v1/","")||"chat"})]},N.id)):o.jsxs("div",{className:"empty-state",children:[o.jsx(Od,{size:26}),o.jsx("p",{children:C?T.noModels:K(T,"正在加载模型与参考库…","正在載入模型與參考庫…","Loading models and reference data…")})]})})]}),o.jsxs("section",{className:"list panel config-panel",children:[o.jsx("div",{className:"panel-title",children:o.jsx("div",{children:o.jsx("h2",{children:T.settings})})}),o.jsxs("label",{children:[T.account,o.jsx("input",{value:nt,list:"account-options",onChange:N=>ut(N.target.value),placeholder:K(T,"可选:账号 ID 或名称","可選:帳號 ID 或名稱","Optional account ID or name")}),o.jsx("datalist",{id:"account-options",children:(C?.accounts||[]).filter(N=>!bt.length||bt.some(U=>U.provider===N.provider)).map(N=>o.jsxs("option",{value:N.id,children:[N.name," · ",N.provider]},`${N.provider}/${N.id}`))})]}),o.jsxs("div",{className:"two-col",children:[o.jsxs("label",{children:[T.protocol,o.jsx(Ju,{label:T.protocol,value:G.api,options:[{value:"auto",label:"Auto"},{value:"chat_completions",label:"chat_completions"},{value:"responses",label:"responses"},{value:"messages",label:"messages"}],onChange:N=>al("api",N)})]}),o.jsxs("label",{children:[T.effort,o.jsx(Ju,{label:T.effort,value:z,options:[{value:"",label:"Default"},...m.map(N=>({value:N,label:N}))],onChange:N=>al("effort",N)})]})]}),o.jsxs("div",{className:"switch-row",children:[o.jsxs("div",{children:[o.jsx("strong",{children:K(T,"完整样本","完整樣本","Complete samples")}),o.jsx("small",{children:K(T,"仅接受完整的 3 条采样","僅接受完整的 3 條取樣","Require all three samples")})]}),o.jsx("button",{className:`lib-switch switch ${G.strict?"on":""}`,role:"switch","aria-label":T.strict,"aria-checked":G.strict,onClick:()=>al("strict",!G.strict),children:o.jsx("i",{})})]}),o.jsxs("button",{className:"advanced-toggle","aria-expanded":ct,"aria-controls":"run-advanced",onClick:()=>rt(!ct),children:[ct?"−":"+"," ",K(T,"高级并行与超时","進階並行與逾時","Concurrency & deadline")]}),ct&&o.jsxs("div",{className:"advanced",id:"run-advanced",children:[o.jsxs("label",{children:[T.tier,o.jsx(Ju,{label:T.tier,value:G.serviceTier,options:[{value:"default",label:"Default"},{value:"flex",label:"Flex"},{value:"fast",label:"Fast"},{value:"ultrafast",label:"Ultra-fast"}],onChange:N=>al("serviceTier",N)})]}),o.jsxs("div",{className:"three-col",children:[o.jsxs("label",{children:[T.targetParallel,o.jsx("input",{type:"number",min:"1",max:"3","aria-invalid":!Sn(G.targetParallel,1,3),value:G.targetParallel,onChange:N=>al("targetParallel",N.target.value)})]}),o.jsxs("label",{children:[T.sampleParallel,o.jsx("input",{type:"number",min:"1",max:"3","aria-invalid":!Sn(G.sampleParallel,1,3),value:G.sampleParallel,onChange:N=>al("sampleParallel",N.target.value)})]}),o.jsxs("label",{children:[T.deadline,o.jsx("input",{type:"number",min:"10",max:"900","aria-invalid":!Sn(G.deadlineSeconds,10,900),value:G.deadlineSeconds,onChange:N=>al("deadlineSeconds",N.target.value)})]})]}),!J&&o.jsx("p",{className:"muted-line",role:"alert",children:K(T,"并行数须为 1–3 的整数,超时须为 10–900 的整数秒。","並行數須為 1–3 的整數,逾時須為 10–900 的整數秒。","Parallelism must be an integer from 1–3; deadline must be 10–900 whole seconds.")})]}),o.jsxs("div",{className:"run-footer",children:[o.jsxs("div",{children:[o.jsx("span",{children:T.estimated}),o.jsx("strong",{children:w}),o.jsxs("small",{children:["3 × ",El.length||0]})]}),o.jsxs("button",{className:"text primary primary-button",disabled:!El.length||!J||xt||el.some(N=>!E0(N.state)),onClick:rl,children:[o.jsx(xd,{size:17,weight:"fill"}),T.start]})]})]})]}),S&&o.jsx(Fs,{job:S,t:T,expanded:dt,setExpanded:et,onCancel:()=>dl(S.id),onDownload:()=>L(S.id)})]})]})]})}function Fs({job:r,t:p,expanded:T,setExpanded:v,onCancel:q,onDownload:C}){const[P,j]=i.useState(!1),[R,O]=i.useState(!1),_=i.useRef(null),S=r.results.length||r.config.targets.length,x=r.results.filter(W=>W.state==="completed").length,el=r.results.flatMap(W=>W.samples).filter(W=>!["queued","waiting","streaming"].includes(W.state)).length,nl=JSON.stringify({schema:"magpie-fingerprint/v1",...r},null,2),Nl=async()=>{try{if(!navigator.clipboard)throw new Error("Clipboard unavailable");await navigator.clipboard.writeText(nl),O(!0)}catch{_.current?.focus(),_.current?.select(),O(document.execCommand("copy"))}};return o.jsxs("section",{className:"results",children:[o.jsxs("div",{className:"results-head",children:[o.jsx("div",{children:o.jsx("h2",{children:E0(r.state)?p.results:p.live})}),o.jsxs("div",{className:"result-actions",children:[o.jsxs("span",{className:`status ${r.state}`,children:[r.state==="running"&&o.jsx(Cs,{className:"spin",size:14})," ",An(p,r.state)]}),["queued","running"].includes(r.state)?o.jsxs("button",{className:"danger-button",onClick:q,children:[o.jsx(Rd,{size:16}),p.cancel]}):o.jsxs("button",{className:"ghost-button",onClick:()=>j(!0),children:[o.jsx(Ri,{size:16}),p.export]})]})]}),o.jsx("div",{className:"progress-track",children:o.jsx("i",{style:{width:`${S?Math.round(el/(S*3)*100):0}%`}})}),o.jsxs("div",{className:"result-meta",children:[o.jsxs("span",{children:[el,"/",S*3," ",K(p,"条采样已结束","條取樣已結束","samples finished")," · ",x,"/",S," ",K(p,"个模型完成","個模型完成","models completed")]}),o.jsxs("span",{children:[r.demo&&o.jsx("b",{className:"demo-chip",children:p.demo}),new Date(r.createdAt).toLocaleString()]})]}),o.jsxs("div",{className:"run-context",children:[o.jsxs("span",{title:r.bank.builtAt,children:[K(p,"参考库","參考庫","Reference"),": ",r.bank.builtAt.slice(0,19)]}),o.jsxs("span",{children:["SDK ",r.bank.sdk]}),o.jsxs("span",{children:[r.config.effort||"default"," · ",r.config.serviceTier]})]}),r.error&&o.jsx("div",{className:"notice error",role:"alert",children:r.error}),o.jsxs("details",{className:"challenge-details",children:[o.jsx("summary",{children:K(p,"本批次共享的 3 个挑战","本批次共用的 3 個挑戰","Three challenges shared across this batch")}),r.challenges.map((W,Bl)=>o.jsxs("div",{children:[o.jsxs("b",{children:[Bl+1," · ",W.expected_count," ",K(p,"个数字","個數字","numbers")]}),o.jsx("p",{children:W.prompt})]},W.id))]}),r.results.map(W=>o.jsx($d,{r:W,demo:r.demo,t:p,expanded:T===W.id,toggle:()=>v(T===W.id?null:W.id)},W.id)),P&&o.jsxs("div",{className:"export-sheet",role:"dialog","aria-modal":"true","aria-label":p.export,onKeyDown:W=>{W.key==="Escape"&&j(!1)},children:[o.jsxs("div",{className:"export-head",children:[o.jsx("strong",{children:p.export}),o.jsx("button",{className:"icon icon-button","aria-label":K(p,"关闭导出","關閉匯出","Close export"),onClick:()=>j(!1),children:"×"})]}),o.jsx("textarea",{ref:_,"aria-label":"JSON",autoFocus:!0,readOnly:!0,value:nl}),o.jsxs("div",{children:[o.jsxs("button",{className:"text primary primary-button",onClick:Nl,children:[o.jsx(xs,{size:16})," ",R?K(p,"已复制","已複製","Copied"):K(p,"复制 JSON","複製 JSON","Copy JSON")]}),window.self===window.top&&o.jsxs("button",{className:"ghost-button",onClick:C,children:[o.jsx(Ri,{size:16}),K(p,"下载文件","下載檔案","Download file")]}),o.jsx("small",{children:K(p,"也可选中文本后手动复制保存。","也可選取文字後手動複製儲存。","You can also select and copy the text manually.")})]})]})]})}function $d({r,demo:p,t:T,expanded:v,toggle:q}){const C=r.analysis,P=C?.results||[],j=C?.decision;return o.jsxs("div",{className:`result-card ${r.state}`,children:[o.jsxs("button",{className:"result-summary","aria-expanded":v,"aria-controls":`result-${r.id}`,onClick:q,children:[o.jsx("span",{className:"result-icon",children:r.state==="completed"?o.jsx(Hd,{size:20}):r.state==="failed"?o.jsx(Js,{size:20}):o.jsx(Cs,{size:20,className:r.state==="running"?"spin":""})}),o.jsxs("span",{className:"result-model",children:[o.jsx("strong",{children:r.target.model}),o.jsxs("small",{children:[r.target.account?`${r.target.accountName||r.target.account} · `:"",r.api," · ",An(T,r.state)]})]}),o.jsxs("span",{className:"result-label",children:[C?.prediction_name||(j?An(T,j):"—"),o.jsx("small",{children:p?T.demo:j?An(T,j):""})]}),o.jsx("span",{className:"evidence-caveat",children:K(T,"证据,不是证明","證據,不是證明","Evidence, not proof")}),o.jsx(zs,{size:17,className:v?"rotate":""})]}),v&&o.jsxs("div",{className:"result-body",id:`result-${r.id}`,children:[o.jsxs("div",{className:"candidate-head",children:[o.jsx("h3",{children:T.candidates}),o.jsx("span",{children:C?.probability_status==="reference_calibrated"?K(T,"参考库内概率","參考庫內機率","Within-bank probability"):K(T,"排名分数(非概率)","排名分數(非機率)","Ranking score (not probability)")})]}),P.length?P.slice(0,5).map((R,O)=>o.jsxs("div",{className:"candidate",children:[o.jsx("span",{children:O+1}),o.jsxs("div",{children:[o.jsxs("div",{className:"candidate-label",children:[o.jsx("strong",{children:R.display_name||R.model||"Unknown"}),o.jsx("em",{children:R.probability==null?R.score.toFixed(3):`${(R.probability*100).toFixed(1)}%`})]}),o.jsx("div",{className:"bar",children:o.jsx("i",{style:{width:`${R.probability==null?Math.max(6,100-O*18):Math.max(1,Math.min(100,R.probability*100))}%`}})})]})]},O)):o.jsx("div",{className:"muted-line",children:r.error||(j==="partial"?"Partial result":j==="unscorable"?"Unscorable":j==="not_model"?"Not a model reply":K(T,"暂未产生可评分候选。","暫未產生可評分候選。","No scored candidates yet."))}),C&&o.jsx("p",{className:"evidence-note",children:K(T,`有效样本 ${C.used_outputs}/3 · 家族 ${C.family_prediction_name||"—"}。概率仅在参考库候选之间分配,库外模型也可能得到相近候选。`,`有效樣本 ${C.used_outputs}/3 · 家族 ${C.family_prediction_name||"—"}。機率僅在參考庫候選之間分配,庫外模型也可能得到相近候選。`,`${C.used_outputs}/3 usable samples · Family ${C.family_prediction_name||"—"}. Probabilities cover reference-bank candidates only; an unseen model can still rank close.`)}),r.error&&o.jsx("p",{className:"notice error",children:r.error}),o.jsx("div",{className:"sample-grid",children:r.samples.map((R,O)=>o.jsxs("div",{className:"sample-tile",children:[o.jsxs("header",{children:[o.jsxs("b",{children:[K(T,"采样","取樣","Sample")," ",O+1]}),o.jsx("span",{className:`status ${R.state}`,children:An(T,R.state)})]}),o.jsxs("strong",{children:[R.count,o.jsxs("small",{children:[" / ",R.expected_count]})]}),o.jsx("code",{children:r.provenance[O]?.model||K(T,"路由待确认","路由待確認","Route unverified")}),r.provenance[O]?.mismatch&&o.jsx("em",{children:K(T,"实际路由已变化","實際路由已變更","Route changed")}),R.error&&o.jsx("small",{children:R.error})]},O))}),o.jsxs("details",{children:[o.jsx("summary",{children:T.details}),o.jsx("pre",{children:JSON.stringify({samples:r.samples,provenance:r.provenance},null,2)})]})]})]})}function Wd({history:r,t:p,onCancel:T,onDownload:v,onDelete:q}){const[C,P]=i.useState(null),[j,R]=i.useState(null);return o.jsxs("div",{className:"history-page",children:[o.jsx("div",{className:"history-tools",children:o.jsx("p",{children:K(p,`本地保存了 ${r.length} 次检测`,`本機儲存了 ${r.length} 次檢測`,`${r.length} runs saved locally`)})}),o.jsx("div",{className:"list history-list",children:r.length?r.map(O=>o.jsxs("div",{className:"history-item",children:[o.jsxs("div",{className:"history-row",children:[o.jsxs("button",{"aria-expanded":C===O.id,"aria-controls":`history-${O.id}`,onClick:()=>{P(C===O.id?null:O.id),R(O.results[0]?.id||null)},children:[o.jsx("span",{className:`history-state ${O.state}`}),o.jsxs("span",{children:[o.jsxs("strong",{children:[O.config.targets[0]?.model||O.id.slice(0,12),O.config.targets.length>1?` +${O.config.targets.length-1}`:""]}),o.jsxs("small",{children:[new Date(O.createdAt).toLocaleString()," · ",O.config.targets.length," ",K(p,"个模型","個模型","models")," · ",O.id.slice(0,8)]})]}),o.jsx(zs,{className:C===O.id?"history-caret open":"history-caret",size:15})]}),o.jsx("span",{className:`status ${O.state}`,children:O.demo?p.demo:An(p,O.state)}),o.jsx("button",{className:"icon icon-button danger-icon",title:K(p,"删除","刪除","Delete"),"aria-label":`${K(p,"删除检测记录","刪除檢測紀錄","Delete run")} ${O.id.slice(0,8)}`,onClick:()=>{C===O.id&&P(null),q(O.id)},children:o.jsx(jd,{size:17})})]}),C===O.id&&o.jsx("div",{className:"history-detail",id:`history-${O.id}`,children:o.jsx(Fs,{job:O,t:p,expanded:j,setExpanded:R,onCancel:()=>T(O.id),onDownload:()=>v(O.id)})})]},O.id)):o.jsxs("div",{className:"empty-history",children:[o.jsx(Nd,{size:32}),o.jsx("p",{children:K(p,"还没有检测记录","還沒有檢測紀錄","No detection history yet")})]})})]})}function kd({t:r}){const[p,T]=i.useState(""),[v,q]=i.useState(""),C=[{label:K(r,"项目仓库","專案儲存庫","Project repository"),url:"https://github.com/KaranocaVe/magpie-fingerprint"},{label:K(r,"上游指纹项目","上游指紋專案","Upstream fingerprint project"),url:"https://github.com/Ikaleio/lm-detector"}];i.useEffect(()=>{if(!p)return;const j=setTimeout(()=>T(""),2500);return()=>clearTimeout(j)},[p]);const P=async(j,R)=>{q("");try{await navigator.clipboard.writeText(j),T(j)}catch{const O=document.getElementById(`about-address-${R}`),_=window.getSelection();if(O&&_){const x=document.createRange();x.selectNodeContents(O),_.removeAllRanges(),_.addRange(x)}let S=!1;try{S=document.execCommand("copy")}catch{}S?(_?.removeAllRanges(),T(j)):(T(""),q(j))}};return o.jsxs("div",{className:"about-page",children:[o.jsxs("header",{className:"about-heading",children:[o.jsx("h2",{children:"Fingerprint"}),o.jsx("p",{children:K(r,"模型响应指纹检测","模型回應指紋檢測","Model response fingerprinting")})]}),o.jsx("ul",{className:"about-links",children:C.map((j,R)=>o.jsxs("li",{className:"about-link",children:[o.jsx(zd,{className:"about-github",size:20,"aria-hidden":"true"}),o.jsxs("div",{className:"about-link-content",children:[o.jsx("strong",{children:j.label}),Xt?o.jsx("span",{className:"about-url",id:`about-address-${R}`,children:j.url}):o.jsxs("a",{className:"about-url",href:j.url,target:"_blank",rel:"noopener noreferrer",children:[j.url,o.jsx(Td,{size:14,"aria-hidden":"true"})]}),Xt&&v===j.url&&o.jsx("span",{className:"about-copy-error",role:"status",children:K(r,"请复制选中的地址","請複製選取的網址","Copy the selected address")})]}),Xt&&o.jsxs("div",{className:"about-copy",children:[o.jsx("button",{className:"icon icon-button",onClick:()=>{P(j.url,R)},"aria-label":K(r,`复制${j.label}地址`,`複製${j.label}網址`,`Copy ${j.label} URL`),title:p===j.url?K(r,"已复制","已複製","Copied"):K(r,"复制地址","複製網址","Copy URL"),children:p===j.url?o.jsx(Md,{size:16}):o.jsx(xs,{size:16})}),o.jsx("span",{className:"about-copy-status",role:"status",children:p===j.url&&K(r,"已复制","已複製","Copied")})]})]},j.url))})]})}td.createRoot(document.getElementById("root")).render(o.jsx(Fd,{})); diff --git a/packages/fingerprint/dist/ui/assets/index-BNQ_IIC1.css b/packages/fingerprint/dist/ui/assets/index-BNQ_IIC1.css new file mode 100644 index 00000000..59fc1dc4 --- /dev/null +++ b/packages/fingerprint/dist/ui/assets/index-BNQ_IIC1.css @@ -0,0 +1 @@ +:root{--ease: cubic-bezier(.2, .8, .2, 1);--bg: #f4f4f6;--card: #ffffff;--card-2: #f9f9fb;--pill: #f1f1f4;--pill-hover: #e9e9ee;--seg-track: #e6e6eb;--seg-thumb: var(--card);--seg-edge: 0 1px 2px rgba(0, 0, 0, .14), 0 0 0 .5px rgba(0, 0, 0, .08);--ctl-fg: #63636b;--line: #e3e3e8;--line-2: #ececf0;--fg: #1c1c21;--fg-2: #4b4b53;--muted: #85858d;--faint: #b9b9c2;--accent: #4f46e5;--accent-soft: #eeedfd;--accent-fg: #ffffff;--sel: #ecebfb;--green: #189a58;--green-soft: #e4f6ec;--red: #d64545;--red-soft: #fbe9e9;--amber: #b45309;--amber-soft: #fbf0df;--drift: #ce2c31;--drift-soft: #feebec;--pop-bg: rgba(255, 255, 255, .94);--shadow: 0 16px 44px rgba(20, 22, 30, .16), 0 2px 8px rgba(20, 22, 30, .06), 0 0 0 .5px rgba(20, 22, 30, .1);--font: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", system-ui, sans-serif;--code: ui-monospace, "SF Mono", Menlo, Consolas, monospace;--logo-invert: 0;--tk-s: #1a7f45;--tk-k: #7c3aed;--tk-f: #1d4ed8;--tk-n: #b45309;--tk-v: #0e7490;--tk-o: #a21caf;--tk-c: #85858d;--c1: #4f46e5;--c2: #0ea5e9;--c3: #10b981;--c4: #f59e0b;--c5: #ec4899;--c6: #8b5cf6;--c7: #64748b}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg: #1a1a1e;--card: #232327;--card-2: #1f1f23;--pill: #2d2d33;--pill-hover: #36363d;--seg-track: rgba(255, 255, 255, .035);--seg-thumb: rgba(255, 255, 255, .15);--seg-edge: inset 0 .5px 0 rgba(255, 255, 255, .08), 0 1px 2px rgba(0, 0, 0, .3);--line: #333339;--line-2: #2c2c32;--fg: #ededf1;--fg-2: #b9b9c1;--muted: #8b8b94;--faint: #56565f;--ctl-fg: #a1a1aa;--accent: #a5b4fc;--accent-soft: #2b2c47;--accent-fg: #14142a;--sel: #33345a;--green: #6fd99b;--green-soft: #1e3a2b;--red: #f28b82;--red-soft: #45272a;--amber: #f2b544;--amber-soft: #3f3220;--drift: #ff9592;--drift-soft: #3b1219;--pop-bg: rgba(38, 38, 43, .96);--shadow: 0 16px 44px rgba(0, 0, 0, .55), 0 2px 8px rgba(0, 0, 0, .3), 0 0 0 .5px rgba(255, 255, 255, .1);--logo-invert: 1;--tk-s: #98d8a4;--tk-k: #c4b5fd;--tk-f: #93c5fd;--tk-n: #f2b544;--tk-v: #67e8f9;--tk-o: #f0abfc;--tk-c: #8b8b94;--c1: #a5b4fc;--c2: #7dd3fc;--c3: #6ee7b7;--c4: #fcd34d;--c5: #f9a8d4;--c6: #c4b5fd;--c7: #94a3b8}}:root[data-theme=dark]{--bg: #1a1a1e;--card: #232327;--card-2: #1f1f23;--pill: #2d2d33;--pill-hover: #36363d;--seg-track: rgba(255, 255, 255, .035);--seg-thumb: rgba(255, 255, 255, .15);--seg-edge: inset 0 .5px 0 rgba(255, 255, 255, .08), 0 1px 2px rgba(0, 0, 0, .3);--line: #333339;--line-2: #2c2c32;--fg: #ededf1;--fg-2: #b9b9c1;--muted: #8b8b94;--faint: #56565f;--ctl-fg: #a1a1aa;--accent: #a5b4fc;--accent-soft: #2b2c47;--accent-fg: #14142a;--sel: #33345a;--green: #6fd99b;--green-soft: #1e3a2b;--red: #f28b82;--red-soft: #45272a;--amber: #f2b544;--amber-soft: #3f3220;--drift: #ff9592;--drift-soft: #3b1219;--pop-bg: rgba(38, 38, 43, .96);--shadow: 0 16px 44px rgba(0, 0, 0, .55), 0 2px 8px rgba(0, 0, 0, .3), 0 0 0 .5px rgba(255, 255, 255, .1);--logo-invert: 1;--tk-s: #98d8a4;--tk-k: #c4b5fd;--tk-f: #93c5fd;--tk-n: #f2b544;--tk-v: #67e8f9;--tk-o: #f0abfc;--tk-c: #8b8b94;--c1: #a5b4fc;--c2: #7dd3fc;--c3: #6ee7b7;--c4: #fcd34d;--c5: #f9a8d4;--c6: #c4b5fd;--c7: #94a3b8}:root[data-colorblind="1"]{--c1: #0072b2;--c2: #e69f00;--c3: #009e73;--c4: #d55e00;--c5: #cc79a7;--c6: #56b4e9;--c7: #64748b}@media(prefers-color-scheme:dark){:root:not([data-theme=light])[data-colorblind="1"]{--c1: #56b4e9;--c2: #fbbf24;--c3: #2dd4bf;--c4: #fb7185;--c5: #e879f9;--c6: #f0e442;--c7: #94a3b8}}:root[data-theme=dark][data-colorblind="1"]{--c1: #56b4e9;--c2: #fbbf24;--c3: #2dd4bf;--c4: #fb7185;--c5: #e879f9;--c6: #f0e442;--c7: #94a3b8}*{box-sizing:border-box;margin:0;padding:0}button{font:inherit;color:inherit;background:none;border:0;cursor:default;appearance:none;-webkit-appearance:none;text-align:center}button:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:1px}input{font:inherit;color:var(--fg)}.icon{width:26px;height:26px;border-radius:7px;display:inline-flex;align-items:center;justify-content:center;color:var(--muted);transition:background .12s,color .12s}.icon:hover,.icon.on{background:var(--pill);color:var(--fg)}.list{background:var(--card);border:1px solid var(--line);border-radius:12px;overflow:hidden;flex:none}.row{display:flex;align-items:center;gap:9px;min-height:40px;padding:5px 9px 5px 11px}.row+.row,.editor+.row,.row+.editor{border-top:1px solid var(--line-2)}.row .who{min-width:0;flex:1 1 auto}.row .name{font-weight:500;letter-spacing:-.005em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.row .sub{font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}.row.model:hover{background:var(--card-2)}.row.model.selected{background:var(--sel)}.segs{position:relative;display:inline-flex;padding:2px;border-radius:7px;background:var(--pill);align-self:flex-start}.opt{position:relative;z-index:1;white-space:nowrap;height:22px;padding:0 10px;border-radius:5px;font-size:12px;color:var(--muted);transition:color .18s var(--ease),transform .14s var(--ease)}.opt.on{color:var(--fg)}.opt:hover:not(.on){color:var(--fg-2)}.text{font-size:12px;color:var(--ctl-fg);padding:3px 7px;border-radius:6px;transition:background .12s,color .12s;white-space:nowrap}.text.primary{color:var(--accent-fg);background:var(--accent);font-weight:500}.text.primary:hover{filter:brightness(1.08)}input[type=checkbox]{appearance:none;-webkit-appearance:none;width:14px;height:14px;flex:none;display:inline-grid;place-content:center;vertical-align:middle;border:1px solid var(--faint);border-radius:4px;background:var(--card);color:var(--accent-fg)}input[type=checkbox]:hover:not(:disabled){border-color:var(--muted)}input[type=checkbox]:checked,input[type=checkbox]:indeterminate{background:var(--accent);border-color:var(--accent)}input[type=checkbox]:before{content:"";width:10px;height:10px;background:currentColor;transform:scale(0);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'%3E%3Cpath d='M2 5.2l2 2L8 3' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'%3E%3Cpath d='M2 5.2l2 2L8 3' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat}input[type=checkbox]:checked:before{transform:scale(1)}input[type=checkbox]:indeterminate:before{transform:scale(1);-webkit-mask:none;mask:none;width:8px;height:1.6px;border-radius:1px}input[type=checkbox]:focus-visible{outline:2px solid var(--accent);outline-offset:1px}input[type=checkbox]:disabled{opacity:.45}.lib-switch{flex:none;position:relative;width:32px;height:19px;border-radius:10px;background:var(--line);transition:background .2s var(--ease)}.lib-switch i{position:absolute;top:2px;left:2px;width:15px;height:15px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #00000040;transition:transform .22s var(--ease)}.lib-switch.on{background:var(--fg)}.lib-switch.on i{transform:translate(13px);background:var(--card)}:root[data-theme=dark] .lib-switch.on i{background:var(--bg)}:root[data-magpie]{--bg: var(--magpie-bg);--card: var(--magpie-card);--fg: var(--magpie-fg);--fg-2: var(--magpie-fg-2);--muted: var(--magpie-muted);--faint: var(--magpie-faint);--line: var(--magpie-line);--accent: var(--magpie-accent);--accent-soft: var(--magpie-accent-soft);--accent-fg: var(--magpie-accent-fg);--green: var(--magpie-green);--red: var(--magpie-red);--amber: var(--magpie-amber);--font: var(--magpie-font);--code: var(--magpie-code);--pill: color-mix(in srgb, var(--fg) 5%, var(--card));--pill-hover: color-mix(in srgb, var(--fg) 9%, var(--card));--card-2: color-mix(in srgb, var(--bg) 55%, var(--card));--line-2: color-mix(in srgb, var(--line) 70%, transparent);--sel: var(--accent-soft)}html,body,#root{min-height:100%}body{display:block;height:auto;padding:0;overflow:auto;background:var(--bg);color:var(--fg);font:13px/1.4 var(--font);-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit}button{cursor:default}button:disabled{opacity:.45;cursor:default}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.app-menu{position:relative;min-width:0}.app-menu-trigger{display:inline-flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:32px;padding:6px 9px;border:1px solid var(--line);border-radius:6px;background:var(--card);color:var(--fg);text-align:left;cursor:pointer}.app-menu-trigger:hover{background:var(--pill-hover)}.app-menu-chevron{color:var(--muted);line-height:1}.app-menu-list{position:fixed;z-index:100;box-sizing:border-box;overflow:auto;padding:4px;border:1px solid var(--line);border-radius:8px;background:var(--card);box-shadow:0 8px 24px #00000029}.app-menu-list>button{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;padding:6px 8px;border:0;border-radius:5px;background:none;color:var(--fg);text-align:left;cursor:pointer}.app-menu-list>button>span:first-child{min-width:0;overflow-wrap:anywhere}.app-menu-list>button:hover,.app-menu-list>button:focus-visible,.app-menu-list>button.selected,.app-menu-list>button.active{background:var(--accent-soft)}.app-shell{max-width:1232px;padding:0 16px 24px;margin:0 auto}.standalone{padding-top:20px}.standalone-title{font-size:18px;font-weight:600;margin:0 0 16px}.page-tools{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:48px}.segs{flex:none;align-self:center}.segs .opt{display:inline-flex;align-items:center;gap:7px;border:0;background:none}.segs .opt.on{background:var(--seg-thumb);box-shadow:var(--seg-edge)}.tab-count{color:var(--muted);font-size:10.5px;font-variant-numeric:tabular-nums}.page-status{display:flex;align-items:center;gap:8px}.service-dot{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--muted);white-space:nowrap}.service-dot i{width:5px;height:5px;border-radius:50%;background:var(--green)}.service-dot i.bad{background:var(--amber)}.main{min-width:0}.intro{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin:0 0 14px;font-size:11.5px;color:var(--muted)}.intro p{margin:0}.intro>span{white-space:nowrap;font-size:11px}.bank-tools{display:inline-flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:7px;min-width:0}.bank-tools>span{white-space:nowrap;font-size:11px}.bank-download{white-space:nowrap}.workspace-grid{display:grid;grid-template-columns:minmax(0,1fr) 310px;align-items:start;gap:12px}.panel{min-width:0;overflow:hidden}.panel-title{display:flex;gap:9px;align-items:center;padding:10px 12px;min-height:44px}h2{font-size:12.5px;font-weight:600;letter-spacing:0;margin:0}.panel-title h2{display:flex;align-items:baseline;gap:7px}.section-count{font-size:11px;font-weight:400;color:var(--muted);font-variant-numeric:tabular-nums}.selection-count{margin-left:auto;color:var(--muted);font-size:11px;white-space:nowrap}.text,.ghost-button,.advanced-toggle{border:0;padding:3px 6px;background:transparent;border-radius:5px;font-size:11.5px;color:var(--ctl-fg);display:inline-flex;align-items:center;gap:5px}.text:hover,.ghost-button:hover,.advanced-toggle:hover{color:var(--fg);background:var(--pill)}.filter-row{display:flex;gap:8px;padding:0 12px 10px}.search{display:flex;align-items:center;gap:6px;flex:1;min-width:0;padding:0 8px;background:var(--card);border:1px solid var(--line);border-radius:6px;color:var(--muted)}.search:focus-within{border-color:var(--accent)}.search input{width:100%;min-width:0;padding:5px 0;border:0;background:transparent;outline:none;box-shadow:none;height:28px;font-size:11.5px}input::placeholder{color:var(--muted);opacity:1}input:not([type=checkbox]),select,textarea{border:1px solid var(--line);border-radius:6px;background:var(--card);color:var(--fg);padding:5px 8px;min-width:0}.search input{border:0}select{height:28px;padding:3px 24px 3px 8px;font-size:11.5px}.filter-row>.app-menu{max-width:145px}.model-list{max-height:367px;overflow-y:auto;border-top:1px solid var(--line-2)}.model-row{width:100%;display:flex;align-items:center;gap:10px;padding:8px 12px;min-height:46px;text-align:left}.model-row:hover{background:var(--card-2)}.model-row.selected{background:var(--sel)}.model-row input{flex:none;margin:0}.model-name{flex:1;min-width:0}.model-name strong{font:500 12px/1.4 var(--font)!important;letter-spacing:0;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.model-name small{display:block;color:var(--muted)!important;font:10.5px/1.4 var(--code);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}.model-endpoint{font-size:9.5px;color:var(--muted);background:var(--pill);border-radius:4px;padding:2px 5px;white-space:nowrap}.config-panel>label,.config-panel>.two-col,.config-panel>.switch-row,.config-panel>.advanced{margin:0 12px 12px}.config-panel label{display:flex;flex-direction:column;gap:5px;font-size:11.5px;color:var(--fg-2)}.config-panel label>input,.config-panel label>select,.config-panel label>.app-menu{width:100%;font-size:12px;height:28px}.config-panel label>.app-menu .app-menu-trigger{min-height:28px;font-size:12px}.two-col,.three-col{display:grid;grid-template-columns:1fr 1fr;gap:10px}.three-col>label:last-child{grid-column:1 / -1}.switch-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding-top:3px}.switch-row strong{font-size:12px;font-weight:400}.switch-row small{display:block;font-size:10.5px;color:var(--muted);margin-top:3px}.switch{flex:none}.advanced-toggle{margin:0 6px 10px}.advanced{border-top:1px solid var(--line-2);padding-top:10px;display:grid;gap:10px}.run-footer{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px;border-top:1px solid var(--line-2)}.run-footer>div{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--muted)}.run-footer strong{font-size:12px;font-weight:600;color:var(--fg);font-variant-numeric:tabular-nums}.run-footer small{display:none}.primary-button,.danger-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:0;padding:5px 10px;min-height:28px;border-radius:7px;background:var(--accent);color:var(--accent-fg);font-size:12px;font-weight:500;white-space:nowrap}.primary-button:hover:not(:disabled){opacity:.85}.danger-button{color:var(--red);background:var(--red-soft)}.notice{padding:8px 10px;margin-bottom:12px;border-radius:7px;display:flex;align-items:center;gap:8px;font-size:11.5px}.notice.error{background:var(--red-soft);color:var(--red)}.notice button{margin-left:auto;padding:0;color:inherit;border:0;background:none;display:inline-flex}.notice.demo{background:var(--accent-soft);color:var(--accent)}.badge,.demo-chip{font-size:10px;padding:2px 5px;border-radius:4px;background:var(--amber-soft);color:var(--amber)}.empty-state,.empty-history{display:flex;align-items:center;justify-content:center;flex-direction:column;gap:9px;min-height:150px;color:var(--muted);font-size:12px}.empty-state p,.empty-history p{margin:0}.results{margin-top:20px}.results-head{display:flex;align-items:center;gap:12px;justify-content:space-between;margin-bottom:9px}.result-actions{display:flex;align-items:center;gap:10px}.status{display:inline-flex;align-items:center;gap:4px;white-space:nowrap;font-size:10.5px;color:var(--muted)}.status.completed,.status.scored,.status.complete{color:var(--green)}.status.running,.status.streaming,.status.waiting{color:var(--accent)}.status.failed,.status.unscorable{color:var(--red)}.progress-track{height:3px;background:var(--pill);border-radius:2px;overflow:hidden}.progress-track i{display:block;height:100%;background:var(--green);transition:width .2s}.result-meta,.run-context{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;font-size:10.5px;color:var(--muted);margin-top:7px;font-variant-numeric:tabular-nums}.run-context{justify-content:flex-start;gap:14px;margin-bottom:10px}.challenge-details{margin:10px 0;font-size:11px;color:var(--muted)}summary{cursor:default;padding:5px 0}.challenge-details>div{background:var(--card);padding:10px 12px;border-bottom:1px solid var(--line-2)}.challenge-details p{margin:5px 0 0;line-height:1.6}.result-card{background:var(--card);border:1px solid var(--line);border-radius:10px;overflow:hidden;margin-top:8px}.result-summary{display:flex;width:100%;align-items:center;gap:9px;padding:11px 12px;border:0;border-radius:0;background:none;text-align:left}.result-summary:hover{background:var(--card-2)}.result-icon{display:inline-flex;color:var(--green)}.result-card.failed .result-icon{color:var(--red)}.result-model{min-width:0;flex:1}.result-model strong{display:block;font:500 12px/1.4 var(--font);overflow-wrap:anywhere}.result-model small,.result-label small{display:block;font-size:10.5px;color:var(--muted);margin-top:2px}.result-label{text-align:right;font-size:12px}.evidence-caveat{flex:none;max-width:116px;color:var(--muted);font-size:11px;line-height:1.35;text-align:right}.result-summary>svg{color:var(--faint);flex:none;transition:transform .15s}.rotate{transform:rotate(180deg)}.result-body{border-top:1px solid var(--line-2);padding:12px;background:var(--card-2)}.candidate-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:12px}h3{font-size:12px;margin:0;font-weight:500}.candidate-head>span{font-size:10.5px;color:var(--muted)}.candidate{display:flex;gap:10px;margin-top:10px;align-items:center}.candidate>span{color:var(--muted);width:14px;font:11px var(--code)}.candidate>div{flex:1;min-width:0}.candidate-label{display:flex;justify-content:space-between;gap:8px;font-size:11.5px;margin-bottom:5px}.candidate-label strong{font-weight:500}.candidate-label em{font-style:normal;font-variant-numeric:tabular-nums;color:var(--fg-2)}.bar{height:3px;background:var(--pill);border-radius:2px;overflow:hidden}.bar i{display:block;height:100%;border-radius:2px;background:var(--accent);opacity:.75}.evidence-note{font-size:10.5px;color:var(--muted);margin:12px 0;line-height:1.6}.sample-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:10px 0}.sample-tile{border:1px solid var(--line);border-radius:7px;padding:9px 10px;min-width:0;background:var(--card)}.sample-tile header{display:flex;align-items:center;justify-content:space-between;gap:5px}.sample-tile header b{font-size:11px;font-weight:500}.sample-tile>strong{font-size:17px;display:block;margin:6px 0;font-weight:500;font-variant-numeric:tabular-nums}.sample-tile>strong small{font-size:11px;color:var(--muted);font-weight:400}.sample-tile code{font:10px var(--code);color:var(--muted);overflow-wrap:anywhere}.sample-tile em,.sample-tile>small{color:var(--red);display:block;font-size:10.5px;margin-top:5px}.result-body>details{color:var(--muted);font-size:11px}pre{max-height:330px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font:10.5px/1.6 var(--code)}.history-tools{color:var(--muted);font-size:11.5px;padding:0 0 12px}.history-tools p{margin:0}.history-list{overflow:hidden}.history-row{display:flex;gap:12px;align-items:center;min-height:54px;padding:0 10px 0 12px}.history-item+.history-item{border-top:1px solid var(--line-2)}.history-detail{padding:0 12px 16px;border-top:1px solid var(--line-2)}.history-detail .results{margin-top:16px}.history-caret{margin-left:auto;flex:none;transition:transform .15s}.history-caret.open{transform:rotate(180deg)}.about-page{max-width:600px}.about-heading{padding:8px 0 20px}.about-heading h2{font-size:16px;font-weight:600;margin:0 0 4px}.about-heading p{margin:0;color:var(--muted);font-size:12px}.about-links{list-style:none;margin:0;padding:0}.about-link{display:flex;align-items:flex-start;gap:12px;padding:16px 0;border-top:1px solid var(--line-2);font-size:12px}.about-github{flex:none;margin-top:1px;color:var(--fg-2)}.about-link-content{flex:1;min-width:0}.about-link-content strong{display:block;font-weight:600}.about-url{display:inline-flex;align-items:center;gap:5px;margin-top:4px;max-width:100%;color:var(--muted);font-size:11.5px;overflow-wrap:anywhere;word-break:break-word}a.about-url{color:var(--accent);text-decoration:none}a.about-url:hover{text-decoration:underline}.about-url svg{flex:none}.about-copy{flex:none;display:flex;flex-direction:column;align-items:center;min-width:38px}.about-copy-status,.about-copy-error{color:var(--muted);font-size:10px}.about-copy-error{display:block;margin-top:4px}.history-row>button:first-child{display:flex;align-items:center;gap:10px;flex:1;min-width:0;text-align:left;border:0;background:none;padding:10px 0}.history-row strong{font-weight:500;font-size:12px;display:block;overflow-wrap:anywhere}.history-row small{display:block;margin-top:3px;color:var(--muted);font-size:10.5px}.history-state{width:6px;height:6px;background:var(--muted);border-radius:50%;flex:none}.history-state.completed{background:var(--green)}.history-state.running{background:var(--accent)}.history-state.failed{background:var(--red)}.danger-icon:hover{color:var(--red)}.export-sheet{position:fixed;z-index:10;inset:10vh max(20px,calc((100vw - 760px)/2));background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);padding:14px;display:flex;flex-direction:column;gap:12px}.export-head{display:flex;align-items:center;justify-content:space-between;font-size:13px}.export-sheet textarea{width:100%;flex:1;min-height:180px;height:50vh;resize:none;font:10.5px/1.6 var(--code)}.export-sheet>div:last-child{display:flex;align-items:center;flex-wrap:wrap;gap:10px}.export-sheet small{font-size:11px;color:var(--muted)}.muted,.muted-line{color:var(--muted);font-size:11.5px}.spin{animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:800px){.workspace-grid{grid-template-columns:minmax(0,1fr) 280px}.model-endpoint{display:none}}@media(max-width:620px){.app-shell{padding:0 12px 20px}.standalone{padding-top:16px}.workspace-grid{grid-template-columns:minmax(0,1fr)}.model-list{max-height:280px}.page-tools{gap:6px;flex-wrap:wrap;padding:6px 0}.page-status{gap:3px}.service-dot{font-size:10px}.intro{font-size:11px}.sample-grid{grid-template-columns:1fr}.result-summary{display:grid;grid-template-columns:20px minmax(0,1fr) 17px;align-items:start}.result-icon{grid-column:1;grid-row:1}.result-model{grid-column:2;grid-row:1}.result-summary>svg{grid-column:3;grid-row:1}.result-label,.evidence-caveat{grid-column:2;text-align:left;max-width:none}.sample-tile{display:grid;grid-template-columns:1fr auto;align-items:center;column-gap:10px}.sample-tile header{grid-column:1 / -1}.sample-tile>strong{font-size:15px}.result-meta{font-size:10px}.history-row{gap:8px}.export-sheet{inset:12px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}.source-note{margin:-2px 0 14px;color:var(--muted);font-size:11px;line-height:1.6}.bank-error{color:var(--danger);font-size:11px;overflow-wrap:anywhere} diff --git a/packages/fingerprint/dist/ui/assets/index-BeAnCYkZ.js b/packages/fingerprint/dist/ui/assets/index-BeAnCYkZ.js new file mode 100644 index 00000000..d1da2337 --- /dev/null +++ b/packages/fingerprint/dist/ui/assets/index-BeAnCYkZ.js @@ -0,0 +1,12 @@ +(function(){const p=document.createElement("link").relList;if(p&&p.supports&&p.supports("modulepreload"))return;for(const Y of document.querySelectorAll('link[rel="modulepreload"]'))v(Y);new MutationObserver(Y=>{for(const D of Y)if(D.type==="childList")for(const I of D.addedNodes)I.tagName==="LINK"&&I.rel==="modulepreload"&&v(I)}).observe(document,{childList:!0,subtree:!0});function T(Y){const D={};return Y.integrity&&(D.integrity=Y.integrity),Y.referrerPolicy&&(D.referrerPolicy=Y.referrerPolicy),Y.crossOrigin==="use-credentials"?D.credentials="include":Y.crossOrigin==="anonymous"?D.credentials="omit":D.credentials="same-origin",D}function v(Y){if(Y.ep)return;Y.ep=!0;const D=T(Y);fetch(Y.href,D)}})();var Ni={exports:{}},v0={};var rs;function J6(){if(rs)return v0;rs=1;var o=Symbol.for("react.transitional.element"),p=Symbol.for("react.fragment");function T(v,Y,D){var I=null;if(D!==void 0&&(I=""+D),Y.key!==void 0&&(I=""+Y.key),"key"in Y){D={};for(var q in Y)q!=="key"&&(D[q]=Y[q])}else D=Y;return Y=D.ref,{$$typeof:o,type:v,key:I,ref:Y!==void 0?Y:null,props:D}}return v0.Fragment=p,v0.jsx=T,v0.jsxs=T,v0}var os;function F6(){return os||(os=1,Ni.exports=J6()),Ni.exports}var r=F6(),zi={exports:{}},P={};var ds;function $6(){if(ds)return P;ds=1;var o=Symbol.for("react.transitional.element"),p=Symbol.for("react.portal"),T=Symbol.for("react.fragment"),v=Symbol.for("react.strict_mode"),Y=Symbol.for("react.profiler"),D=Symbol.for("react.consumer"),I=Symbol.for("react.context"),q=Symbol.for("react.forward_ref"),j=Symbol.for("react.suspense"),_=Symbol.for("react.memo"),O=Symbol.for("react.lazy"),S=Symbol.for("react.activity"),C=Symbol.for("react.view_transition"),al=Symbol.iterator;function vl(m){return m===null||typeof m!="object"?null:(m=al&&m[al]||m["@@iterator"],typeof m=="function"?m:null)}var Sl={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},J=Object.assign,zl={};function Ll(m,z,G){this.props=m,this.context=z,this.refs=zl,this.updater=G||Sl}Ll.prototype.isReactComponent={},Ll.prototype.setState=function(m,z){if(typeof m!="object"&&typeof m!="function"&&m!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,m,z,"setState")},Ll.prototype.forceUpdate=function(m){this.updater.enqueueForceUpdate(this,m,"forceUpdate")};function ql(){}ql.prototype=Ll.prototype;function st(m,z,G){this.props=m,this.context=z,this.refs=zl,this.updater=G||Sl}var V=st.prototype=new ql;V.constructor=st,J(V,Ll.prototype),V.isPureReactComponent=!0;var ol=Array.isArray;function R(){}var nl={H:null,A:null,T:null,S:null},wl=Object.prototype.hasOwnProperty;function lt(m,z,G){var Q=G.ref;return{$$typeof:o,type:m,key:z,ref:Q!==void 0?Q:null,props:G}}function $l(m,z){return lt(m.type,z,m.props)}function Jl(m){return typeof m=="object"&&m!==null&&m.$$typeof===o}function rt(m){var z={"=":"=0",":":"=2"};return"$"+m.replace(/[=:]/g,function(G){return z[G]})}var At=/\/+/g;function Dl(m,z){return typeof m=="object"&&m!==null&&m.key!=null?rt(""+m.key):z.toString(36)}function x(m){switch(m.status){case"fulfilled":return m.value;case"rejected":throw m.reason;default:switch(typeof m.status=="string"?m.then(R,R):(m.status="pending",m.then(function(z){m.status==="pending"&&(m.status="fulfilled",m.value=z)},function(z){m.status==="pending"&&(m.status="rejected",m.reason=z)})),m.status){case"fulfilled":return m.value;case"rejected":throw m.reason}}throw m}function F(m,z,G,Q,el){var dl=typeof m;(dl==="undefined"||dl==="boolean")&&(m=null);var ml=!1;if(m===null)ml=!0;else switch(dl){case"bigint":case"string":case"number":ml=!0;break;case"object":switch(m.$$typeof){case o:case p:ml=!0;break;case O:return ml=m._init,F(ml(m._payload),z,G,Q,el)}}if(ml)return el=el(m),ml=Q===""?"."+Dl(m,0):Q,ol(el)?(G="",ml!=null&&(G=ml.replace(At,"$&/")+"/"),F(el,z,G,"",function(N){return N})):el!=null&&(Jl(el)&&(el=$l(el,G+(el.key==null||m&&m.key===el.key?"":(""+el.key).replace(At,"$&/")+"/")+ml)),z.push(el)),1;ml=0;var w=Q===""?".":Q+":";if(ol(m))for(var k=0;k>>1,fl=x[Al];if(0>>1;AlY(Tt,$))mY(z,Tt)?(x[Al]=z,x[m]=$,Al=m):(x[Al]=Tt,x[Vt]=$,Al=Vt);else if(mY(z,$))x[Al]=z,x[m]=$,Al=m;else break l}}return F}function Y(x,F){var $=x.sortIndex-F.sortIndex;return $!==0?$:x.id-F.id}if(o.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var D=performance;o.unstable_now=function(){return D.now()}}else{var I=Date,q=I.now();o.unstable_now=function(){return I.now()-q}}var j=[],_=[],O=1,S=null,C=3,al=!1,vl=!1,Sl=!1,J=!1,zl=typeof setTimeout=="function"?setTimeout:null,Ll=typeof clearTimeout=="function"?clearTimeout:null,ql=typeof setImmediate<"u"?setImmediate:null;function st(x){for(var F=T(_);F!==null;){if(F.callback===null)v(_);else if(F.startTime<=x)v(_),F.sortIndex=F.expirationTime,p(j,F);else break;F=T(_)}}function V(x){if(Sl=!1,st(x),!vl)if(T(j)!==null)vl=!0,ol||(ol=!0,Jl());else{var F=T(_);F!==null&&Dl(V,F.startTime-x)}}var ol=!1,R=-1,nl=5,wl=-1;function lt(){return J?!0:!(o.unstable_now()-wlx&<());){var Al=S.callback;if(typeof Al=="function"){S.callback=null,C=S.priorityLevel;var fl=Al(S.expirationTime<=x);if(x=o.unstable_now(),typeof fl=="function"){S.callback=fl,st(x),F=!0;break t}S===T(j)&&v(j),st(x)}else v(j);S=T(j)}if(S!==null)F=!0;else{var pt=T(_);pt!==null&&Dl(V,pt.startTime-x),F=!1}}break l}finally{S=null,C=$,al=!1}F=void 0}}finally{F?Jl():ol=!1}}}var Jl;if(typeof ql=="function")Jl=function(){ql($l)};else if(typeof MessageChannel<"u"){var rt=new MessageChannel,At=rt.port2;rt.port1.onmessage=$l,Jl=function(){At.postMessage(null)}}else Jl=function(){zl($l,0)};function Dl(x,F){R=zl(function(){x(o.unstable_now())},F)}o.unstable_IdlePriority=5,o.unstable_ImmediatePriority=1,o.unstable_LowPriority=4,o.unstable_NormalPriority=3,o.unstable_Profiling=null,o.unstable_UserBlockingPriority=2,o.unstable_cancelCallback=function(x){x.callback=null},o.unstable_forceFrameRate=function(x){0>x||125Al?(x.sortIndex=$,p(_,x),T(j)===null&&x===T(_)&&(Sl?(Ll(R),R=-1):Sl=!0,Dl(V,$-Al))):(x.sortIndex=fl,p(j,x),vl||al||(vl=!0,ol||(ol=!0,Jl()))),x},o.unstable_shouldYield=lt,o.unstable_wrapCallback=function(x){var F=C;return function(){var $=C;C=F;try{return x.apply(this,arguments)}finally{C=$}}}})(Zi)),Zi}var vs;function k6(){return vs||(vs=1,Oi.exports=W6()),Oi.exports}var Ci={exports:{}},it={};var ys;function I6(){if(ys)return it;ys=1;var o=qi();function p(O){var S="https://react.dev/errors/"+O;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(o)}catch(p){console.error(p)}}return o(),Ci.exports=I6(),Ci.exports}var Es;function P6(){if(Es)return y0;Es=1;var o=k6(),p=qi(),T=Ms();function v(l){var t="https://react.dev/errors/"+l;if(1gl||(l.current=B[gl],B[gl]=null,gl--)}function pl(l,t){gl++,B[gl]=l.current,l.current=t}var jt=_l(null),Jt=_l(null),Ft=_l(null),Oe=_l(null);function _a(l,t){switch(pl(Ft,t),pl(Jt,l),pl(jt,null),t.nodeType){case 9:case 11:l=(l=t.documentElement)&&(l=l.namespaceURI)?S4(l):0;break;default:if(l=t.tagName,t=t.namespaceURI)t=S4(t),l=b4(t,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}Ol(jt),pl(jt,l)}function me(){Ol(jt),Ol(Jt),Ol(Ft)}function na(l){var t=l.memoizedState;t!==null&&(yn._currentValue=t.memoizedState,pl(Oe,l)),t=jt.current;var e=b4(t,l.type);t!==e&&(pl(Jt,l),pl(jt,e))}function $t(l){Jt.current===l&&(Ol(jt),Ol(Jt)),Oe.current===l&&(Ol(Oe),yn._currentValue=N)}var An,Bi;function Ze(l){if(An===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);An=t&&t[1]||"",Bi=-1)":-1n||s[a]!==g[n]){var A=` +`+s[a].replace(" at new "," at ");return l.displayName&&A.includes("")&&(A=A.replace("",l.displayName)),A}while(1<=a&&0<=n);break}}}finally{Fu=!1,Error.prepareStackTrace=e}return(e=l?l.displayName||l.name:"")?Ze(e):""}function Ws(l,t){switch(l.tag){case 26:case 27:case 5:return Ze(l.type);case 16:return Ze("Lazy");case 13:return l.child!==t&&t!==null?Ze("Suspense Fallback"):Ze("Suspense");case 19:return Ze("SuspenseList");case 0:case 15:return $u(l.type,!1);case 11:return $u(l.type.render,!1);case 1:return $u(l.type,!0);case 31:return Ze("Activity");case 30:return Ze("ViewTransition");default:return""}}function Yi(l){try{var t="",e=null;do t+=Ws(l,e),e=l,l=l.return;while(l);return t}catch(a){return` +Error generating stack: `+a.message+` +`+a.stack}}var Wu=Object.prototype.hasOwnProperty,ku=o.unstable_scheduleCallback,Iu=o.unstable_cancelCallback,ks=o.unstable_shouldYield,Is=o.unstable_requestPaint,Mt=o.unstable_now,Ps=o.unstable_getCurrentPriorityLevel,Li=o.unstable_ImmediatePriority,wi=o.unstable_UserBlockingPriority,b0=o.unstable_NormalPriority,lr=o.unstable_LowPriority,Gi=o.unstable_IdlePriority,tr=o.log,er=o.unstable_setDisableYieldValue,pn=null,Ht=null;function Ce(l){if(typeof tr=="function"&&er(l),Ht&&typeof Ht.setStrictMode=="function")try{Ht.setStrictMode(pn,l)}catch{}}var Nt=Math.clz32?Math.clz32:ur,ar=Math.log,nr=Math.LN2;function ur(l){return l>>>=0,l===0?32:31-(ar(l)/nr|0)|0}var A0=256,p0=262144,T0=4194304;function ua(l){var t=l&42;if(t!==0)return t;switch(l&-l){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return l&-l;case 262144:case 524288:case 1048576:case 2097152:return l&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return l&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return l}}function M0(l,t,e){var a=l.pendingLanes;if(a===0)return 0;var n=0,u=l.suspendedLanes,c=l.pingedLanes;l=l.warmLanes;var f=a&134217727;return f!==0?(a=f&~u,a!==0?n=ua(a):(c&=f,c!==0?n=ua(c):e||(e=f&~l,e!==0&&(n=ua(e))))):(f=a&~u,f!==0?n=ua(f):c!==0?n=ua(c):e||(e=a&~l,e!==0&&(n=ua(e)))),n===0?0:t!==0&&t!==n&&(t&u)===0&&(u=n&-n,e=t&-t,u>=e||u===32&&(e&4194048)!==0)?t:n}function Tn(l,t){return(l.pendingLanes&~(l.suspendedLanes&~l.pingedLanes)&t)===0}function Qi(l,t){(t&8)!==0&&(t|=t&32);var e=l.entangledLanes;if(e!==0)for(l=l.entanglements,e&=t;0e;e++)t.push(l);return t}function Mn(l,t){l.pendingLanes|=t,t!==268435456&&(l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0)}function ir(l,t,e,a,n,u){var c=l.pendingLanes;l.pendingLanes=e,l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0,l.expiredLanes&=e,l.entangledLanes&=e,l.errorRecoveryDisabledLanes&=e,l.shellSuspendCounter=0;var f=l.entanglements,s=l.expirationTimes,g=l.hiddenUpdates;for(e=c&~e;0"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),s1=!1;if(ye)try{var _n={};Object.defineProperty(_n,"passive",{get:function(){s1=!0}}),window.addEventListener("test",_n,_n),window.removeEventListener("test",_n,_n)}catch{s1=!1}var xe=null,r1=null,Z0=null;function vf(){if(Z0)return Z0;var l,t=r1,e=t.length,a,n="value"in xe?xe.value:xe.textContent,u=n.length;for(l=0;l=Cn),Af=" ",pf=!1;function Tf(l,t){switch(l){case"keyup":return Gr.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Mf(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var Ua=!1;function Xr(l,t){switch(l){case"compositionend":return Mf(t);case"keypress":return t.which!==32?null:(pf=!0,Af);case"textInput":return l=t.data,l===Af&&pf?null:l;default:return null}}function Kr(l,t){if(Ua)return l==="compositionend"||!v1&&Tf(l,t)?(l=vf(),Z0=r1=xe=null,Ua=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1"u")return null;try{return l.activeElement||l.body}catch{return l.body}}function xf(l){for(;l&&l.firstChild;)l=l.firstChild;return l}function Df(l,t){var e=xf(l);l=0;for(var a;e;){if(e.nodeType===3){if(a=l+e.textContent.length,l<=t&&a>=t)return{node:e,offset:t-l};l=a}l:{for(;e;){if(e.nextSibling){e=e.nextSibling;break l}e=e.parentNode}e=void 0}e=xf(e)}}function Rf(l,t){return l&&t?l===t?!0:l&&l.nodeType===3?!1:t&&t.nodeType===3?Rf(l,t.parentNode):"contains"in l?l.contains(t):l.compareDocumentPosition?!!(l.compareDocumentPosition(t)&16):!1:!1}function Vf(l){l=l!=null&&l.ownerDocument!=null&&l.ownerDocument.defaultView!=null?l.ownerDocument.defaultView:window;for(var t=E1(l.document);t instanceof l.HTMLIFrameElement;){try{var e=typeof t.contentWindow.location.href=="string"}catch{e=!1}if(e)l=t.contentWindow;else break;t=E1(l.document)}return t}function S1(l){var t=l&&l.nodeName&&l.nodeName.toLowerCase();return t&&(t==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||t==="textarea"||l.contentEditable==="true")}var lo=ye&&"documentMode"in document&&11>=document.documentMode,qa=null,b1=null,Vn=null,A1=!1;function jf(l,t,e){var a=e.window===e?e.document:e.nodeType===9?e:e.ownerDocument;A1||qa==null||qa!==E1(a)||(a=qa,"selectionStart"in a&&S1(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Vn&&Rn(Vn,a)||(Vn=a,a=Vu(b1,"onSelect"),0>=c,n-=c,ae=1<<32-Nt(t)+n|e<W?(Kl=X,X=null):Kl=X.sibling;var hl=h(y,X,E[W],M);if(hl===null){X===null&&(X=Kl);break}l&&X&&hl.alternate===null&&t(y,X),d=u(hl,d,W),rl===null?U=hl:rl.sibling=hl,rl=hl,X=Kl}if(W===E.length)return e(y,X),ul&&be(y,W),U;if(X===null){for(;WW?(Kl=X,X=null):Kl=X.sibling;var aa=h(y,X,hl.value,M);if(aa===null){X===null&&(X=Kl);break}l&&X&&aa.alternate===null&&t(y,X),d=u(aa,d,W),rl===null?U=aa:rl.sibling=aa,rl=aa,X=Kl}if(hl.done)return e(y,X),ul&&be(y,W),U;if(X===null){for(;!hl.done;W++,hl=E.next())hl=H(y,hl.value,M),hl!==null&&(d=u(hl,d,W),rl===null?U=hl:rl.sibling=hl,rl=hl);return ul&&be(y,W),U}for(X=a(X);!hl.done;W++,hl=E.next())hl=b(X,y,W,hl.value,M),hl!==null&&(l&&(Kl=hl.alternate,Kl!==null&&X.delete(Kl.key===null?W:Kl.key)),d=u(hl,d,W),rl===null?U=hl:rl.sibling=hl,rl=hl);return l&&X.forEach(function(K6){return t(y,K6)}),ul&&be(y,W),U}function tl(y,d,E,M){if(typeof E=="object"&&E!==null&&E.type===$l&&E.key===null&&E.props.ref===void 0&&(E=E.props.children),typeof E=="object"&&E!==null){switch(E.$$typeof){case wl:l:{for(var U=E.key;d!==null;){if(d.key===U){if(U=E.type,U===$l){if(d.tag===7){e(y,d.sibling),M=n(d,E.props.children),qe(M,E),M.return=y,y=M;break l}}else if(d.elementType===U||typeof U=="object"&&U!==null&&U.$$typeof===fl&&Ea(U)===d.type){e(y,d.sibling),M=n(d,E.props),qe(M,E),M.return=y,y=M;break l}e(y,d);break}else t(y,d);d=d.sibling}E.type===$l?(M=oa(E.props.children,y.mode,M,E.key),qe(M,E),M.return=y,y=M):(M=Y0(E.type,E.key,E.props,null,y.mode,M),qe(M,E),M.return=y,y=M)}return c(y);case lt:l:{for(U=E.key;d!==null;){if(d.key===U)if(d.tag===4&&d.stateNode.containerInfo===E.containerInfo&&d.stateNode.implementation===E.implementation){e(y,d.sibling),M=n(d,E.children||[]),M.return=y,y=M;break l}else{e(y,d);break}else t(y,d);d=d.sibling}M=_1(E,y.mode,M),M.return=y,y=M}return c(y);case fl:return E=Ea(E),tl(y,d,E,M)}if(ml(E))return Z(y,d,E,M);if(Q(E)){if(U=Q(E),typeof U!="function")throw Error(v(150));return E=U.call(E),L(y,d,E,M)}if(typeof E.then=="function")return tl(y,d,W0(E),M);if(E.$$typeof===Dl)return tl(y,d,K0(y,E),M);k0(y,E)}return typeof E=="string"&&E!==""||typeof E=="number"||typeof E=="bigint"?(E=""+E,d!==null&&d.tag===6?(e(y,d.sibling),M=n(d,E),M.return=y,y=M):(e(y,d),M=z1(E,y.mode,M),M.return=y,y=M),c(y)):e(y,d)}return function(y,d,E,M){try{Ln=0;var U=tl(y,d,E,M);return Ja=null,U}catch(X){if(X===Ka||X===F0)throw X;var rl=yt(29,X,null,y.mode);return rl.lanes=M,rl.return=y,rl}}}var ba=c2(!0),i2=c2(!1),Be=!1;function q1(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function B1(l,t){l=l.updateQueue,t.updateQueue===l&&(t.updateQueue={baseState:l.baseState,firstBaseUpdate:l.firstBaseUpdate,lastBaseUpdate:l.lastBaseUpdate,shared:l.shared,callbacks:null})}function Ye(l){return{lane:l,tag:0,payload:null,callback:null,next:null}}function Le(l,t,e){var a=l.updateQueue;if(a===null)return null;if(a=a.shared,(El&2)!==0){var n=a.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),a.pending=t,t=B0(l),Qf(l,null,e),t}return q0(l,a,t,e),B0(l)}function wn(l,t,e){if(t=t.updateQueue,t!==null&&(t=t.shared,(e&4194048)!==0)){var a=t.lanes;a&=l.pendingLanes,e|=a,t.lanes=e,Ji(l,e)}}function Y1(l,t){var e=l.updateQueue,a=l.alternate;if(a!==null&&(a=a.updateQueue,e===a)){var n=null,u=null;if(e=e.firstBaseUpdate,e!==null){do{var c={lane:e.lane,tag:e.tag,payload:e.payload,callback:null,next:null};u===null?n=u=c:u=u.next=c,e=e.next}while(e!==null);u===null?n=u=t:u=u.next=t}else n=u=t;e={baseState:a.baseState,firstBaseUpdate:n,lastBaseUpdate:u,shared:a.shared,callbacks:a.callbacks},l.updateQueue=e;return}l=e.lastBaseUpdate,l===null?e.firstBaseUpdate=t:l.next=t,e.lastBaseUpdate=t}var L1=!1;function Gn(){if(L1){var l=Xa;if(l!==null)throw l}}function Qn(l,t,e,a){L1=!1;var n=l.updateQueue;Be=!1;var u=n.firstBaseUpdate,c=n.lastBaseUpdate,f=n.shared.pending;if(f!==null){n.shared.pending=null;var s=f,g=s.next;s.next=null,c===null?u=g:c.next=g,c=s;var A=l.alternate;A!==null&&(A=A.updateQueue,f=A.lastBaseUpdate,f!==c&&(f===null?A.firstBaseUpdate=g:f.next=g,A.lastBaseUpdate=s))}if(u!==null){var H=n.baseState;c=0,A=g=s=null,f=u;do{var h=f.lane&-536870913,b=h!==f.lane;if(b?(sl&h)===h:(a&h)===h){h!==0&&h===ya&&(L1=!0),A!==null&&(A=A.next={lane:0,tag:f.tag,payload:f.payload,callback:null,next:null});l:{var Z=l,L=f;h=t;var tl=e;switch(L.tag){case 1:if(Z=L.payload,typeof Z=="function"){H=Z.call(tl,H,h);break l}H=Z;break l;case 3:Z.flags=Z.flags&-65537|128;case 0:if(Z=L.payload,h=typeof Z=="function"?Z.call(tl,H,h):Z,h==null)break l;H=R({},H,h);break l;case 2:Be=!0}}h=f.callback,h!==null&&(l.flags|=64,b&&(l.flags|=8192),b=n.callbacks,b===null?n.callbacks=[h]:b.push(h))}else b={lane:h,tag:f.tag,payload:f.payload,callback:f.callback,next:null},A===null?(g=A=b,s=H):A=A.next=b,c|=h;if(f=f.next,f===null){if(f=n.shared.pending,f===null)break;b=f,f=b.next,b.next=null,n.lastBaseUpdate=b,n.shared.pending=null}}while(!0);A===null&&(s=H),n.baseState=s,n.firstBaseUpdate=g,n.lastBaseUpdate=A,u===null&&(n.shared.lanes=0),Fe|=c,l.lanes=c,l.memoizedState=H}}function f2(l,t){if(typeof l!="function")throw Error(v(191,l));l.call(t)}function s2(l,t){var e=l.callbacks;if(e!==null)for(l.callbacks=null,l=0;lu?u:8;var c=w.T,f={};f.types=c!==null?c.types:null,w.T=f,ic(l,!1,t,e);try{var s=n(),g=w.S;if(g!==null&&g(f,s),s!==null&&typeof s=="object"&&typeof s.then=="function"){var A=oo(s,a);Fn(l,t,A,Dt(l))}else Fn(l,t,a,Dt(l))}catch(H){Fn(l,t,{then:function(){},status:"rejected",reason:H},Dt())}finally{k.p=u,c!==null&&f.types!==null&&(c.types=f.types),w.T=c}}function Eo(){}function uc(l,t,e,a){if(l.tag!==5)throw Error(v(476));var n=L2(l).queue;Y2(l,n,t,N,e===null?Eo:function(){return w2(l),e(a)})}function L2(l){var t=l.memoizedState;if(t!==null)return t;t={memoizedState:N,baseState:N,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Me,lastRenderedState:N},next:null};var e={};return t.next={memoizedState:e,baseState:e,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Me,lastRenderedState:e},next:null},l.memoizedState=t,l=l.alternate,l!==null&&(l.memoizedState=t),t}function w2(l){var t=L2(l);t.next===null&&(t=l.alternate.memoizedState),Fn(l,t.next.queue,{},Dt())}function cc(){return et(yn)}function G2(){return Bl().memoizedState}function Q2(){return Bl().memoizedState}function So(l){for(var t=l.return;t!==null;){switch(t.tag){case 24:case 3:var e=Dt();l=Ye(e);var a=Le(t,l,e);a!==null&&(bt(a,t,e),wn(a,t,e)),t={cache:R1()},l.payload=t;return}t=t.return}}function bo(l,t,e){var a=Dt();e={lane:a,revertLane:0,gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null},iu(l)?K2(t,e):(e=H1(l,t,e,a),e!==null&&(bt(e,l,a),J2(e,t,a)))}function X2(l,t,e){var a=Dt();Fn(l,t,e,a)}function Fn(l,t,e,a){var n={lane:a,revertLane:0,gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null};if(iu(l))K2(t,n);else{var u=l.alternate;if(l.lanes===0&&(u===null||u.lanes===0)&&(u=t.lastRenderedReducer,u!==null))try{var c=t.lastRenderedState,f=u(c,e);if(n.hasEagerState=!0,n.eagerState=f,_t(f,c))return q0(l,t,n,0),Zl===null&&U0(),!1}catch{}if(e=H1(l,t,n,a),e!==null)return bt(e,l,a),J2(e,t,a),!0}return!1}function ic(l,t,e,a){if(a={lane:2,revertLane:kc(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},iu(l)){if(t)throw Error(v(479))}else t=H1(l,e,a,2),t!==null&&bt(t,l,2)}function iu(l){var t=l.alternate;return l===ll||t!==null&&t===ll}function K2(l,t){Fa=lu=!0;var e=l.pending;e===null?t.next=t:(t.next=e.next,e.next=t),l.pending=t}function J2(l,t,e){if((e&4194048)!==0){var a=t.lanes;a&=l.pendingLanes,e|=a,t.lanes=e,Ji(l,e)}}var fu={readContext:et,use:au,useCallback:jl,useContext:jl,useEffect:jl,useImperativeHandle:jl,useLayoutEffect:jl,useInsertionEffect:jl,useMemo:jl,useReducer:jl,useRef:jl,useState:jl,useDebugValue:jl,useDeferredValue:jl,useTransition:jl,useSyncExternalStore:jl,useId:jl,useHostTransitionStatus:jl,useFormState:jl,useActionState:jl,useOptimistic:jl,useMemoCache:jl,useCacheRefresh:jl,useEffectEvent:jl},F2={readContext:et,use:au,useCallback:function(l,t){return dt().memoizedState=[l,t===void 0?null:t],l},useContext:et,useEffect:C2,useImperativeHandle:function(l,t,e){e=e!=null?e.concat([l]):null,uu(4194308,4,V2.bind(null,t,l),e)},useLayoutEffect:function(l,t){return uu(4194308,4,l,t)},useInsertionEffect:function(l,t){uu(4,2,l,t)},useMemo:function(l,t){var e=dt();t=t===void 0?null:t;var a=l();if(Aa){Ce(!0);try{l()}finally{Ce(!1)}}return e.memoizedState=[a,t],a},useReducer:function(l,t,e){var a=dt();if(e!==void 0){var n=e(t);if(Aa){Ce(!0);try{e(t)}finally{Ce(!1)}}}else n=t;return a.memoizedState=a.baseState=n,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:n},a.queue=l,l=l.dispatch=bo.bind(null,ll,l),[a.memoizedState,l]},useRef:function(l){var t=dt();return l={current:l},t.memoizedState=l},useState:function(l){l=lc(l);var t=l.queue,e=X2.bind(null,ll,t);return t.dispatch=e,[l.memoizedState,e]},useDebugValue:ac,useDeferredValue:function(l,t){var e=dt();return nc(e,l,t)},useTransition:function(){var l=lc(!1);return l=Y2.bind(null,ll,l.queue,!0,!1),dt().memoizedState=l,[!1,l]},useSyncExternalStore:function(l,t,e){var a=ll,n=dt();if(ul){if(e===void 0)throw Error(v(407));e=e()}else{if(e=t(),Zl===null)throw Error(v(349));(sl&127)!==0||v2(a,t,e)}n.memoizedState=e;var u={value:e,getSnapshot:t};return n.queue=u,C2(g2.bind(null,a,u,l),[l]),a.flags|=2048,Wa(9,{destroy:void 0},y2.bind(null,a,u,e,t),null),e},useId:function(){var l=dt(),t=Zl.identifierPrefix;if(ul){var e=ne,a=ae;e=(a&~(1<<32-Nt(a)-1)).toString(32)+e,t="_"+t+"R_"+e,e=tu++,0<\/script>",u=u.removeChild(u.firstChild);break;case"select":u=typeof a.is=="string"?c.createElement("select",{is:a.is}):c.createElement("select"),a.multiple?u.multiple=!0:a.size&&(u.size=a.size);break;default:u=typeof a.is=="string"?c.createElement(n,{is:a.is}):c.createElement(n)}}u[tt]=t,u[vt]=a;l:for(c=t.child;c!==null;){if(c.tag===5||c.tag===6)u.appendChild(c.stateNode);else if(c.tag!==4&&c.tag!==27&&c.child!==null){c.child.return=c,c=c.child;continue}if(c===t)break l;for(;c.sibling===null;){if(c.return===null||c.return===t)break l;c=c.return}c.sibling.return=c.return,c=c.sibling}t.stateNode=u;l:switch(ct(u,n,a),n){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break l;case"img":a=!0;break l;default:a=!1}a&&Ne(t)}}return xl(t),t.subtreeFlags&=-33554433,bc(t,t.type,l===null?null:l.memoizedProps,t.pendingProps,e),null;case 6:if(l&&t.stateNode!=null)l.memoizedProps!==a&&Ne(t);else{if(typeof a!="string"&&t.stateNode===null)throw Error(v(166));if(l=Ft.current,Qa(t)){if(l=t.stateNode,e=t.memoizedProps,a=null,n=kl,n!==null)switch(n.tag){case 27:case 5:a=n.memoizedProps}l[tt]=t,l=!!(l.nodeValue===e||a!==null&&a.suppressHydrationWarning===!0||g4(l.nodeValue,e)),l||je(t,!0)}else l=i0(l).createTextNode(a),l[tt]=t,t.stateNode=l}return xl(t),null;case 31:if(e=t.memoizedState,l===null||l.memoizedState!==null){if(a=Qa(t),e!==null){if(l===null){if(!a)throw Error(v(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(v(557));l[tt]=t}else da(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;xl(t),l=!1}else e=C1(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=e),l=!0;if(!l)return t.flags&256?(Ot(t),t):(Ot(t),null);if((t.flags&128)!==0)throw Error(v(558))}return xl(t),null;case 13:if(a=t.memoizedState,l===null||l.memoizedState!==null&&l.memoizedState.dehydrated!==null){if(n=Qa(t),a!==null&&a.dehydrated!==null){if(l===null){if(!n)throw Error(v(318));if(n=t.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(v(317));n[tt]=t}else da(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;xl(t),n=!1}else n=C1(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=n),n=!0;if(!n)return t.flags&256?(Ot(t),t):(Ot(t),null)}return Ot(t),(t.flags&128)!==0?(t.lanes=e,t):(e=a!==null,l=l!==null&&l.memoizedState!==null,e&&(a=t.child,n=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(n=a.alternate.memoizedState.cachePool.pool),u=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(u=a.memoizedState.cachePool.pool),u!==n&&(a.flags|=2048)),e!==l&&e&&(t.child.flags|=8192),hu(t,t.updateQueue),xl(t),null);case 4:return me(),l===null&&ti(t.stateNode.containerInfo),t.flags|=67108864,xl(t),null;case 10:return pe(t.type),xl(t),null;case 19:if(X1(t),a=t.memoizedState,a===null)return xl(t),null;if(n=(t.flags&128)!==0,u=a.rendering,u===null)if(n)Wn(a,!1);else{if(Ul!==0||l!==null&&(l.flags&128)!==0)for(l=t.child;l!==null;){if(u=P0(l),u!==null){for(t.flags|=128,Wn(a,!1),l=u.updateQueue,t.updateQueue=l,hu(t,l),t.subtreeFlags=0,l=e,e=t.child;e!==null;)Xf(e,l),e=e.sibling;return Xn(t,nt.current&1|2),ul&&be(t,a.treeForkCount),t.child}l=l.sibling}a.tail!==null&&Mt()>Nu&&(t.flags|=128,n=!0,Wn(a,!1),t.lanes=4194304)}else{if(!n)if(l=P0(u),l!==null){if(t.flags|=128,n=!0,l=l.updateQueue,t.updateQueue=l,hu(t,l),Wn(a,!0),a.tail===null&&a.tailMode!=="collapsed"&&a.tailMode!=="visible"&&!u.alternate&&!ul)return xl(t),null}else 2*Mt()-a.renderingStartTime>Nu&&e!==536870912&&(t.flags|=128,n=!0,Wn(a,!1),t.lanes=4194304);a.isBackwards?(u.sibling=t.child,t.child=u):(l=a.last,l!==null?l.sibling=u:t.child=u,a.last=u)}if(a.tail!==null){l=a.tail;l:{for(e=l;e!==null;){if(e.alternate!==null){e=!1;break l}e=e.sibling}e=!0}return a.rendering=l,a.tail=l.sibling,a.renderingStartTime=Mt(),l.sibling=null,u=nt.current,u=n?u&1|2:u&1,a.tailMode==="visible"||a.tailMode==="collapsed"||!e||ul?Xn(t,u):(e=u,pl(at,t),pl(nt,e),ft===null&&(ft=t)),ul&&be(t,a.treeForkCount),l}return xl(t),null;case 22:case 23:return Ot(t),G1(),a=t.memoizedState!==null,l!==null?l.memoizedState!==null!==a&&(t.flags|=8192):a&&(t.flags|=8192),a?(e&536870912)!==0&&(t.flags&128)===0&&(xl(t),t.subtreeFlags&6&&(t.flags|=8192)):xl(t),e=t.updateQueue,e!==null&&hu(t,e.retryQueue),e=null,l!==null&&l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(e=l.memoizedState.cachePool.pool),a=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(a=t.memoizedState.cachePool.pool),a!==e&&(t.flags|=2048),l!==null&&Ol(ga),null;case 24:return e=null,l!==null&&(e=l.memoizedState.cache),t.memoizedState.cache!==e&&(t.flags|=2048),pe(Gl),xl(t),null;case 25:return null;case 30:return t.flags|=33554432,xl(t),null}throw Error(v(156,t.tag))}function zo(l,t){switch(O1(t),t.tag){case 1:return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 3:return pe(Gl),me(),l=t.flags,(l&65536)!==0&&(l&128)===0?(t.flags=l&-65537|128,t):null;case 26:case 27:case 5:return $t(t),null;case 31:if(t.memoizedState!==null){if(Ot(t),t.alternate===null)throw Error(v(340));da()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 13:if(Ot(t),l=t.memoizedState,l!==null&&l.dehydrated!==null){if(t.alternate===null)throw Error(v(340));da()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 19:return X1(t),l=t.flags,l&65536?(t.flags=l&-65537|128,l=t.memoizedState,l!==null&&(l.rendering=null,l.tail=null),t.flags|=4,t):null;case 4:return me(),null;case 10:return pe(t.type),null;case 22:case 23:return Ot(t),G1(),l!==null&&Ol(ga),l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 24:return pe(Gl),null;case 25:return null;default:return null}}function S8(l,t){switch(O1(t),t.tag){case 3:pe(Gl),me();break;case 26:case 27:case 5:$t(t);break;case 4:me();break;case 31:t.memoizedState!==null&&Ot(t);break;case 13:Ot(t);break;case 19:X1(t);break;case 10:pe(t.type);break;case 22:case 23:Ot(t),G1(),l!==null&&Ol(ga);break;case 24:pe(Gl)}}function kn(l,t){try{var e=t.updateQueue,a=e!==null?e.lastEffect:null;if(a!==null){var n=a.next;e=n;do{if((e.tag&l)===l){a=void 0;var u=e.create,c=e.inst;a=u(),c.destroy=a}e=e.next}while(e!==n)}}catch(f){Ml(t,t.return,f)}}function Xe(l,t,e){try{var a=t.updateQueue,n=a!==null?a.lastEffect:null;if(n!==null){var u=n.next;a=u;do{if((a.tag&l)===l){var c=a.inst,f=c.destroy;if(f!==void 0){c.destroy=void 0,n=t;var s=e,g=f;try{g()}catch(A){Ml(n,s,A)}}}a=a.next}while(a!==u)}}catch(A){Ml(t,t.return,A)}}function b8(l){var t=l.updateQueue;if(t!==null){var e=l.stateNode;try{s2(t,e)}catch(a){Ml(l,l.return,a)}}}function A8(l,t,e){e.props=pa(l.type,l.memoizedProps),e.state=l.memoizedState;try{e.componentWillUnmount()}catch(a){Ml(l,t,a)}}function ue(l,t){try{var e=l.ref;if(e!==null){switch(l.tag){case 26:case 27:case 5:var a=l.stateNode;break;case 30:var n=l.stateNode,u=ge(l.memoizedProps,n);(n.ref===null||n.ref.name!==u)&&(n.ref=_4(u)),a=n.ref;break;case 7:if(l.stateNode===null){var c=new Rt(l);S(l.child,!1,g6,c,void 0,void 0),l.stateNode=c}a=l.stateNode;break;default:a=l.stateNode}typeof e=="function"?l.refCleanup=e(a):e.current=a}}catch(f){Ml(l,t,f)}}function ut(l,t){var e=l.ref,a=l.refCleanup;if(e!==null)if(typeof a=="function")try{a()}catch(n){Ml(l,t,n)}finally{l.refCleanup=null,l=l.alternate,l!=null&&(l.refCleanup=null)}else if(typeof e=="function")try{e(null)}catch(n){Ml(l,t,n)}else e.current=null}function vu(l,t){if((l.tag===5||l.tag===27||l.tag===6)&&l.alternate===null&&t!==null)for(var e=0;e title"))),ct(a,t,e),a[tt]=l,Wl(a),t=a;break l;case"link":if(u=X4("link","href",n).get(t+(e.href||""))){for(c=0;ctl&&(c=tl,tl=L,L=c);var y=Df(f,L),d=Df(f,tl);if(y&&d&&(b.rangeCount!==1||b.anchorNode!==y.node||b.anchorOffset!==y.offset||b.focusNode!==d.node||b.focusOffset!==d.offset)){var E=H.createRange();E.setStart(y.node,y.offset),b.removeAllRanges(),L>tl?(b.addRange(E),b.extend(d.node,d.offset)):(E.setEnd(d.node,d.offset),b.addRange(E))}}}}for(H=[],b=f;b=b.parentNode;)b.nodeType===1&&H.push({element:b,left:b.scrollLeft,top:b.scrollTop});for(typeof f.focus=="function"&&f.focus(),f=0;fe?32:e,w.T=null,e=Lc,Lc=null;var u=le,c=oe;if(Vl=0,Na=le=null,oe=0,(El&6)!==0)throw Error(v(331));var f=El;if(El|=4,Q8(u.current),L8(u,u.current,c,e),El=f,n0(0,!1),Ht&&typeof Ht.onPostCommitFiberRoot=="function")try{Ht.onPostCommitFiberRoot(pn,u)}catch{}return!0}finally{k.p=n,w.T=a,u4(l,t)}}function c4(l,t,e){t=Bt(e,t),t=rc(l.stateNode,t,2),l=Le(l,t,2),l!==null&&(Mn(l,2),de(l))}function Ml(l,t,e){if(l.tag===3)c4(l,l,e);else for(;t!==null;){if(t.tag===3){c4(t,l,e);break}else if(t.tag===1){var a=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&($e===null||!$e.has(a))){l=Bt(e,l),e=e8(2),a=Le(t,e,2),a!==null&&(a8(e,a,t,l),Mn(a,2),de(a));break}}t=t.return}}function Fc(l,t,e){var a=l.pingCache;if(a===null){a=l.pingCache=new Co;var n=new Set;a.set(t,n)}else n=a.get(t),n===void 0&&(n=new Set,a.set(t,n));n.has(e)||(qc=!0,n.add(e),l=Bo.bind(null,l,t,e),t.then(l,l))}function Bo(l,t,e){var a=l.pingCache;a!==null&&a.delete(t),l.pingedLanes|=l.suspendedLanes&e,l.warmLanes&=~e,Zl===l&&(sl&e)===e&&((Ul===4||Ul===3&&(sl&62914560)===sl&&300>Mt()-Hu)&&(El&2)===0?fn(l,0):Mu|=e,en===sl&&(en=0)),de(l)}function i4(l,t){t===0&&(t=Xi()),l=ra(l,t),l!==null&&(Mn(l,t),de(l))}function Yo(l){var t=l.memoizedState,e=0;t!==null&&(e=t.retryLane),i4(l,e)}function Lo(l,t){var e=0;switch(l.tag){case 31:case 13:var a=l.stateNode,n=l.memoizedState;n!==null&&(e=n.retryLane);break;case 19:a=l.stateNode;break;case 22:a=l.stateNode._retryCache;break;default:throw Error(v(314))}a!==null&&a.delete(t),i4(l,e)}function wo(l,t){return ku(l,t)}var rn=null,on=null,$c=!1,Du=!1,Wc=!1,ke=0;function de(l){l!==on&&l.next===null&&(on===null?rn=on=l:on=on.next=l),Du=!0,$c||($c=!0,Qo())}function n0(l,t){if(!Wc&&Du){Wc=!0;do for(var e=!1,a=rn;a!==null;){if(l!==0){var n=a.pendingLanes;if(n===0)var u=0;else{var c=a.suspendedLanes,f=a.pingedLanes;u=(1<<31-Nt(42|l)+1)-1,u&=n&~(c&~f),u=u&201326741?u&201326741|1:u?u|2:0}u!==0&&(e=!0,o4(a,u))}else u=sl,u=M0(a,a===Zl?u:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(u&3)===0||Tn(a,u)||(e=!0,o4(a,u));a=a.next}while(e);Wc=!1}}function Go(){f4()}function f4(){Du=$c=!1;var l=0;ke!==0&&t6()&&(l=ke);for(var t=Mt(),e=null,a=rn;a!==null;){var n=a.next,u=s4(a,t);u===0?(a.next=null,e===null?rn=n:e.next=n,n===null&&(on=e)):(e=a,(l!==0||(u&3)!==0)&&(Du=!0)),a=n}Vl!==0&&Vl!==5||n0(l),ke!==0&&(ke=0)}function s4(l,t){for(var e=l.suspendedLanes,a=l.pingedLanes,n=l.expirationTimes,u=l.pendingLanes&-62914561;0f)break;var A=s.transferSize,H=s.initiatorType;A&&E4(H)&&(s=s.responseEnd,c+=A*(squ){L.length=Z;break}E=new Promise(i6.bind(E)),L.push(E)}}}if(0"u"?null:document;function L4(l,t,e){var a=mn;if(a&&typeof t=="string"&&t){var n=Ut(t);n='link[rel="'+l+'"][href="'+n+'"]',typeof e=="string"&&(n+='[crossorigin="'+e+'"]'),Y4.has(n)||(Y4.add(n),l={rel:l,crossOrigin:e,href:t},a.querySelector(n)===null&&(t=a.createElement("link"),ct(t,"link",l),Wl(t),a.head.appendChild(t)))}}function N6(l){_e.D(l),L4("dns-prefetch",l,null)}function z6(l,t){_e.C(l,t),L4("preconnect",l,t)}function _6(l,t,e){_e.L(l,t,e);var a=mn;if(a&&l&&t){var n='link[rel="preload"][as="'+Ut(t)+'"]';t==="image"&&e&&e.imageSrcSet?(n+='[imagesrcset="'+Ut(e.imageSrcSet)+'"]',typeof e.imageSizes=="string"&&(n+='[imagesizes="'+Ut(e.imageSizes)+'"]')):n+='[href="'+Ut(l)+'"]';var u=n;switch(t){case"style":u=hn(l);break;case"script":u=vn(l)}if(!(Xt.has(u)||(l=R({rel:"preload",href:t==="image"&&e&&e.imageSrcSet?void 0:l,as:t},e),Xt.set(u,l),a.querySelector(n)!==null||t==="style"&&a.querySelector(s0(u))||t==="script"&&a.querySelector(r0(u))))){var c=a.createElement("link");ct(c,"link",l),t==="style"&&(c[H0]=!0,c.onload=c.onerror=function(){Pi(c)}),Wl(c),a.head.appendChild(c)}}}function O6(l,t){_e.m(l,t);var e=mn;if(e&&l){var a=t&&typeof t.as=="string"?t.as:"script",n='link[rel="modulepreload"][as="'+Ut(a)+'"][href="'+Ut(l)+'"]',u=n;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":u=vn(l)}if(!Xt.has(u)&&(l=R({rel:"modulepreload",href:l},t),Xt.set(u,l),e.querySelector(n)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(e.querySelector(r0(u)))return}a=e.createElement("link"),ct(a,"link",l),Wl(a),e.head.appendChild(a)}}}function Z6(l,t,e){_e.S(l,t,e);var a=mn;if(a&&l){var n=Ca(a).hoistableStyles,u=hn(l);t=t||"default";var c=n.get(u);if(!c){var f={loading:0,preload:null};if(c=a.querySelector(s0(u)))f.loading=5;else{l=R({rel:"stylesheet",href:l,"data-precedence":t},e),(e=Xt.get(u))&&gi(l,e);var s=c=a.createElement("link");Wl(s),ct(s,"link",l),s._p=new Promise(function(g,A){s.onload=g,s.onerror=A}),s.addEventListener("load",function(){f.loading|=1}),s.addEventListener("error",function(){f.loading|=2}),f.loading|=4,ju(c,t,a)}c={type:"stylesheet",instance:c,count:1,state:f},n.set(u,c)}}}function C6(l,t){_e.X(l,t);var e=mn;if(e&&l){var a=Ca(e).hoistableScripts,n=vn(l),u=a.get(n);u||(u=e.querySelector(r0(n)),u||(l=R({src:l,async:!0},t),(t=Xt.get(n))&&Ei(l,t),u=e.createElement("script"),Wl(u),ct(u,"link",l),e.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function x6(l,t){_e.M(l,t);var e=mn;if(e&&l){var a=Ca(e).hoistableScripts,n=vn(l),u=a.get(n);u||(u=e.querySelector(r0(n)),u||(l=R({src:l,async:!0,type:"module"},t),(t=Xt.get(n))&&Ei(l,t),u=e.createElement("script"),Wl(u),ct(u,"link",l),e.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function w4(l,t,e,a){var n=(n=Ft.current)?f0(n):null;if(!n)throw Error(v(446));switch(l){case"meta":case"title":return null;case"style":return typeof e.precedence=="string"&&typeof e.href=="string"?(e=hn(e.href),t=Ca(n).hoistableStyles,a=t.get(e),a||(a={type:"style",instance:null,count:0,state:null},t.set(e,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(e.rel==="stylesheet"&&typeof e.href=="string"&&typeof e.precedence=="string"){l=hn(e.href);var u=Ca(n).hoistableStyles,c=u.get(l);if(c||(n=n.ownerDocument||n,c={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(l,c),(u=n.querySelector(s0(l)))?u._p||(c.instance=u,c.state.loading=5):(u=Xt.get(l),u||(u={rel:"preload",as:"style",href:e.href,crossOrigin:e.crossOrigin,integrity:e.integrity,media:e.media,hrefLang:e.hrefLang,referrerPolicy:e.referrerPolicy},Xt.set(l,u)),D6(n,l,u,c.state))),t&&a===null)throw Error(v(528,""));return c}if(t&&a!==null)throw Error(v(529,""));return null;case"script":return t=e.async,e=e.src,typeof e=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(e=vn(e),t=Ca(n).hoistableScripts,a=t.get(e),a||(a={type:"script",instance:null,count:0,state:null},t.set(e,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(v(444,l))}}function hn(l){return'href="'+Ut(l)+'"'}function s0(l){return'link[rel="stylesheet"]['+l+"]"}function G4(l){return R({},l,{"data-precedence":l.precedence,precedence:null})}function D6(l,t,e,a){if(t=l.querySelector('link[rel="preload"][as="style"]['+t+"]")){if(t[H0]!==!0){a.loading=1;return}}else t=l.createElement("link"),t[H0]=!0,t.onload=t.onerror=Pi.bind(null,t),ct(t,"link",e),Wl(t),l.head.appendChild(t);a.preload=t,t.addEventListener("load",function(){return a.loading|=1}),t.addEventListener("error",function(){return a.loading|=2})}function vn(l){return'[src="'+Ut(l)+'"]'}function r0(l){return"script[async]"+l}function Q4(l,t,e){if(t.count++,t.instance===null)switch(t.type){case"style":var a=l.querySelector('style[data-href~="'+Ut(e.href)+'"]');if(a)return t.instance=a,Wl(a),a;var n=R({},e,{"data-href":e.href,"data-precedence":e.precedence,href:null,precedence:null});return a=(l.ownerDocument||l).createElement("style"),Wl(a),ct(a,"style",n),ju(a,e.precedence,l),t.instance=a;case"stylesheet":n=hn(e.href);var u=l.querySelector(s0(n));if(u)return t.state.loading|=4,t.instance=u,Wl(u),u;a=G4(e),(n=Xt.get(n))&&gi(a,n),u=(l.ownerDocument||l).createElement("link"),Wl(u);var c=u;return c._p=new Promise(function(f,s){c.onload=f,c.onerror=s}),ct(u,"link",a),t.state.loading|=4,ju(u,e.precedence,l),t.instance=u;case"script":return u=vn(e.src),(n=l.querySelector(r0(u)))?(t.instance=n,Wl(n),n):(a=e,(n=Xt.get(u))&&(a=R({},e),Ei(a,n)),l=l.ownerDocument||l,n=l.createElement("script"),Wl(n),ct(n,"link",a),l.head.appendChild(n),t.instance=n);case"void":return null;default:throw Error(v(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(a=t.instance,t.state.loading|=4,ju(a,e.precedence,l));return t.instance}function ju(l,t,e){for(var a=e.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),n=a.length?a[a.length-1]:null,u=n,c=0;c title"):null)}function R6(l,t,e){if(e===1||t.itemProp!=null)return!1;switch(l){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;return t.rel==="stylesheet"?(l=t.disabled,typeof t.precedence=="string"&&l==null):!0;case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function K4(l,t){return l==="img"&&t.src!=null&&t.src!==""&&t.onLoad==null&&t.loading!=="lazy"}function J4(l){return!(l.type==="stylesheet"&&(l.state.loading&3)===0)}function F4(l){return(l.width||100)*(l.height||100)*(typeof devicePixelRatio=="number"?devicePixelRatio:1)*.25}function $4(l,t){typeof t.decode=="function"&&(l.imgCount++,t.complete||(l.imgBytes+=F4(t),l.suspenseyImages.push(t)),l=U6.bind(l),t.decode().then(l,l))}function V6(l,t,e,a){if(e.type==="stylesheet"&&(typeof a.media!="string"||matchMedia(a.media).matches!==!1)&&(e.state.loading&4)===0){if(e.instance===null){var n=hn(a.href),u=t.querySelector(s0(n));if(u){t=u._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(l.count++,l=o0.bind(l),t.then(l,l)),e.state.loading|=4,e.instance=u,Wl(u);return}u=t.ownerDocument||t,a=G4(a),(n=Xt.get(n))&&gi(a,n),u=u.createElement("link"),Wl(u);var c=u;c._p=new Promise(function(f,s){c.onload=f,c.onerror=s}),ct(u,"link",a),e.instance=u}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(e,t),(t=e.state.preload)&&(e.state.loading&3)===0&&(l.count++,e=o0.bind(l),t.addEventListener("load",e),t.addEventListener("error",e))}}var qu=0;function j6(l,t){return l.stylesheets&&l.count===0&&Yu(l,l.stylesheets),0qu?50:800)+t);return l.unsuspend=e,function(){l.unsuspend=null,clearTimeout(a),clearTimeout(n)}}:null}function W4(l){if(l.count===0&&(l.imgCount===0||!l.waitingForImages)){if(l.stylesheets)Yu(l,l.stylesheets);else if(l.unsuspend){var t=l.unsuspend;l.unsuspend=null,t()}}}function o0(){this.count--,W4(this)}function U6(){this.imgCount--,W4(this)}var Bu=null;function Yu(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,Bu=new Map,t.forEach(q6,l),Bu=null,o0.call(l))}function q6(l,t){if(!(t.state.loading&4)){var e=Bu.get(l);if(e)var a=e.get(null);else{e=new Map,Bu.set(l,e);for(var n=l.querySelectorAll("link[data-precedence],style[data-precedence]"),u=0;u"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(o)}catch(p){console.error(p)}}return o(),_i.exports=P6(),_i.exports}var td=ld();const ed=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M244,56v48a12,12,0,0,1-12,12H184a12,12,0,1,1,0-24H201.1l-19-17.38c-.13-.12-.26-.24-.38-.37A76,76,0,1,0,127,204h1a75.53,75.53,0,0,0,52.15-20.72,12,12,0,0,1,16.49,17.45A99.45,99.45,0,0,1,128,228h-1.37A100,100,0,1,1,198.51,57.06L220,76.72V56a12,12,0,0,1,24,0Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,128a88,88,0,1,1-88-88A88,88,0,0,1,216,128Z",opacity:"0.2"}),i.createElement("path",{d:"M240,56v48a8,8,0,0,1-8,8H184a8,8,0,0,1,0-16H211.4L184.81,71.64l-.25-.24a80,80,0,1,0-1.67,114.78,8,8,0,0,1,11,11.63A95.44,95.44,0,0,1,128,224h-1.32A96,96,0,1,1,195.75,60L224,85.8V56a8,8,0,1,1,16,0Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M240,56v48a8,8,0,0,1-8,8H184a8,8,0,0,1-5.66-13.66l17-17-10.55-9.65-.25-.24a80,80,0,1,0-1.67,114.78,8,8,0,1,1,11,11.63A95.44,95.44,0,0,1,128,224h-1.32A96,96,0,1,1,195.75,60l10.93,10L226.34,50.3A8,8,0,0,1,240,56Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M238,56v48a6,6,0,0,1-6,6H184a6,6,0,0,1,0-12h32.55l-30.38-27.8c-.06-.06-.12-.13-.19-.19a82,82,0,1,0-1.7,117.65,6,6,0,0,1,8.24,8.73A93.46,93.46,0,0,1,128,222h-1.28A94,94,0,1,1,194.37,61.4L226,90.35V56a6,6,0,1,1,12,0Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M240,56v48a8,8,0,0,1-8,8H184a8,8,0,0,1,0-16H211.4L184.81,71.64l-.25-.24a80,80,0,1,0-1.67,114.78,8,8,0,0,1,11,11.63A95.44,95.44,0,0,1,128,224h-1.32A96,96,0,1,1,195.75,60L224,85.8V56a8,8,0,1,1,16,0Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M236,56v48a4,4,0,0,1-4,4H184a4,4,0,0,1,0-8h37.7L187.53,68.69l-.13-.12a84,84,0,1,0-1.75,120.51,4,4,0,0,1,5.5,5.82A91.43,91.43,0,0,1,128,220h-1.26A92,92,0,1,1,193,62.84l35,32.05V56a4,4,0,1,1,8,0Z"}))]]),ad=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M184,80V208a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V80a8,8,0,0,1,8-8H176A8,8,0,0,1,184,80Z",opacity:"0.2"}),i.createElement("path",{d:"M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M192,136v72a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V80A16,16,0,0,1,48,64h72a8,8,0,0,1,0,16H48V208H176V136a8,8,0,0,1,16,0Zm32-96a8,8,0,0,0-8-8H152a8,8,0,0,0-5.66,13.66L172.69,72l-42.35,42.34a8,8,0,0,0,11.32,11.32L184,83.31l26.34,26.35A8,8,0,0,0,224,104Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M222,104a6,6,0,0,1-12,0V54.49l-69.75,69.75a6,6,0,0,1-8.48-8.48L201.51,46H152a6,6,0,0,1,0-12h64a6,6,0,0,1,6,6Zm-38,26a6,6,0,0,0-6,6v72a2,2,0,0,1-2,2H48a2,2,0,0,1-2-2V80a2,2,0,0,1,2-2h72a6,6,0,0,0,0-12H48A14,14,0,0,0,34,80V208a14,14,0,0,0,14,14H176a14,14,0,0,0,14-14V136A6,6,0,0,0,184,130Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M220,104a4,4,0,0,1-8,0V49.66l-73.16,73.17a4,4,0,0,1-5.66-5.66L206.34,44H152a4,4,0,0,1,0-8h64a4,4,0,0,1,4,4Zm-36,28a4,4,0,0,0-4,4v72a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V80a4,4,0,0,1,4-4h72a4,4,0,0,0,0-8H48A12,12,0,0,0,36,80V208a12,12,0,0,0,12,12H176a12,12,0,0,0,12-12V136A4,4,0,0,0,184,132Z"}))]]),nd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,96l-80,80L48,96Z",opacity:"0.2"}),i.createElement("path",{d:"M215.39,92.94A8,8,0,0,0,208,88H48a8,8,0,0,0-5.66,13.66l80,80a8,8,0,0,0,11.32,0l80-80A8,8,0,0,0,215.39,92.94ZM128,164.69,67.31,104H188.69Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,48,88H208a8,8,0,0,1,5.66,13.66Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M212.24,100.24l-80,80a6,6,0,0,1-8.48,0l-80-80a6,6,0,0,1,8.48-8.48L128,167.51l75.76-75.75a6,6,0,0,1,8.48,8.48Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M210.83,98.83l-80,80a4,4,0,0,1-5.66,0l-80-80a4,4,0,0,1,5.66-5.66L128,170.34l77.17-77.17a4,4,0,1,1,5.66,5.66Z"}))]]),ud=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M232,56V200a16,16,0,0,1-16,16H40a16,16,0,0,1-16-16V56A16,16,0,0,1,40,40H216A16,16,0,0,1,232,56Z",opacity:"0.2"}),i.createElement("path",{d:"M205.66,85.66l-96,96a8,8,0,0,1-11.32,0l-40-40a8,8,0,0,1,11.32-11.32L104,164.69l90.34-90.35a8,8,0,0,1,11.32,11.32Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM205.66,85.66l-96,96a8,8,0,0,1-11.32,0l-40-40a8,8,0,0,1,11.32-11.32L104,164.69l90.34-90.35a8,8,0,0,1,11.32,11.32Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M228.24,76.24l-128,128a6,6,0,0,1-8.48,0l-56-56a6,6,0,0,1,8.48-8.48L96,191.51,219.76,67.76a6,6,0,0,1,8.48,8.48Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M229.66,77.66l-128,128a8,8,0,0,1-11.32,0l-56-56a8,8,0,0,1,11.32-11.32L96,188.69,218.34,66.34a8,8,0,0,1,11.32,11.32Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M226.83,74.83l-128,128a4,4,0,0,1-5.66,0l-56-56a4,4,0,0,1,5.66-5.66L96,194.34,221.17,69.17a4,4,0,1,1,5.66,5.66Z"}))]]),cd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M176.49,95.51a12,12,0,0,1,0,17l-56,56a12,12,0,0,1-17,0l-24-24a12,12,0,1,1,17-17L112,143l47.51-47.52A12,12,0,0,1,176.49,95.51ZM236,128A108,108,0,1,1,128,20,108.12,108.12,0,0,1,236,128Zm-24,0a84,84,0,1,0-84,84A84.09,84.09,0,0,0,212,128Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),i.createElement("path",{d:"M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm45.66,85.66-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35a8,8,0,0,1,11.32,11.32Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M172.24,99.76a6,6,0,0,1,0,8.48l-56,56a6,6,0,0,1-8.48,0l-24-24a6,6,0,0,1,8.48-8.48L112,151.51l51.76-51.75A6,6,0,0,1,172.24,99.76ZM230,128A102,102,0,1,1,128,26,102.12,102.12,0,0,1,230,128Zm-12,0a90,90,0,1,0-90,90A90.1,90.1,0,0,0,218,128Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M170.83,101.17a4,4,0,0,1,0,5.66l-56,56a4,4,0,0,1-5.66,0l-24-24a4,4,0,0,1,5.66-5.66L112,154.34l53.17-53.17A4,4,0,0,1,170.83,101.17ZM228,128A100,100,0,1,1,128,28,100.11,100.11,0,0,1,228,128Zm-8,0a92,92,0,1,0-92,92A92.1,92.1,0,0,0,220,128Z"}))]]),id=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M236,128a108,108,0,0,1-216,0c0-42.52,24.73-81.34,63-98.9A12,12,0,1,1,93,50.91C63.24,64.57,44,94.83,44,128a84,84,0,0,0,168,0c0-33.17-19.24-63.43-49-77.09A12,12,0,1,1,173,29.1C211.27,46.66,236,85.48,236,128Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),i.createElement("path",{d:"M232,128a104,104,0,0,1-208,0c0-41,23.81-78.36,60.66-95.27a8,8,0,0,1,6.68,14.54C60.15,61.59,40,93.27,40,128a88,88,0,0,0,176,0c0-34.73-20.15-66.41-51.34-80.73a8,8,0,0,1,6.68-14.54C208.19,49.64,232,87,232,128Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,176A72,72,0,0,1,92,65.64a8,8,0,0,1,8,13.85,56,56,0,1,0,56,0,8,8,0,0,1,8-13.85A72,72,0,0,1,128,200Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M230,128a102,102,0,0,1-204,0c0-40.18,23.35-76.86,59.5-93.45a6,6,0,0,1,5,10.9C58.61,60.09,38,92.49,38,128a90,90,0,0,0,180,0c0-35.51-20.61-67.91-52.5-82.55a6,6,0,0,1,5-10.9C206.65,51.14,230,87.82,230,128Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M232,128a104,104,0,0,1-208,0c0-41,23.81-78.36,60.66-95.27a8,8,0,0,1,6.68,14.54C60.15,61.59,40,93.27,40,128a88,88,0,0,0,176,0c0-34.73-20.15-66.41-51.34-80.73a8,8,0,0,1,6.68-14.54C208.19,49.64,232,87,232,128Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M228,128a100,100,0,0,1-200,0c0-39.4,22.9-75.37,58.33-91.63a4,4,0,1,1,3.34,7.27C57.07,58.6,36,91.71,36,128a92,92,0,0,0,184,0c0-36.29-21.07-69.4-53.67-84.36a4,4,0,1,1,3.34-7.27C205.1,52.63,228,88.6,228,128Z"}))]]),fd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,28H165.47a51.88,51.88,0,0,0-74.94,0H56A20,20,0,0,0,36,48V216a20,20,0,0,0,20,20H200a20,20,0,0,0,20-20V48A20,20,0,0,0,200,28ZM155.71,60H100.29a28,28,0,0,1,55.42,0ZM196,212H60V52H77.41A52.13,52.13,0,0,0,76,64v8A12,12,0,0,0,88,84h80a12,12,0,0,0,12-12V64a52.13,52.13,0,0,0-1.41-12H196Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,48V216a8,8,0,0,1-8,8H56a8,8,0,0,1-8-8V48a8,8,0,0,1,8-8H96a39.83,39.83,0,0,0-8,24v8h80V64a39.83,39.83,0,0,0-8-24h40A8,8,0,0,1,208,48Z",opacity:"0.2"}),i.createElement("path",{d:"M200,32H163.74a47.92,47.92,0,0,0-71.48,0H56A16,16,0,0,0,40,48V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V48A16,16,0,0,0,200,32Zm-72,0a32,32,0,0,1,32,32H96A32,32,0,0,1,128,32Zm72,184H56V48H82.75A47.93,47.93,0,0,0,80,64v8a8,8,0,0,0,8,8h80a8,8,0,0,0,8-8V64a47.93,47.93,0,0,0-2.75-16H200Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,32H163.74a47.92,47.92,0,0,0-71.48,0H56A16,16,0,0,0,40,48V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V48A16,16,0,0,0,200,32Zm-72,0a32,32,0,0,1,32,32H96A32,32,0,0,1,128,32Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,34H162.83a45.91,45.91,0,0,0-69.66,0H56A14,14,0,0,0,42,48V216a14,14,0,0,0,14,14H200a14,14,0,0,0,14-14V48A14,14,0,0,0,200,34Zm-72-4a34,34,0,0,1,34,34v2H94V64A34,34,0,0,1,128,30Zm74,186a2,2,0,0,1-2,2H56a2,2,0,0,1-2-2V48a2,2,0,0,1,2-2H85.67A45.77,45.77,0,0,0,82,64v8a6,6,0,0,0,6,6h80a6,6,0,0,0,6-6V64a45.77,45.77,0,0,0-3.67-18H200a2,2,0,0,1,2,2Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,32H163.74a47.92,47.92,0,0,0-71.48,0H56A16,16,0,0,0,40,48V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V48A16,16,0,0,0,200,32Zm-72,0a32,32,0,0,1,32,32H96A32,32,0,0,1,128,32Zm72,184H56V48H82.75A47.93,47.93,0,0,0,80,64v8a8,8,0,0,0,8,8h80a8,8,0,0,0,8-8V64a47.93,47.93,0,0,0-2.75-16H200Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,36H161.92a44,44,0,0,0-67.84,0H56A12,12,0,0,0,44,48V216a12,12,0,0,0,12,12H200a12,12,0,0,0,12-12V48A12,12,0,0,0,200,36Zm-72-8a36,36,0,0,1,36,36v4H92V64A36,36,0,0,1,128,28Zm76,188a4,4,0,0,1-4,4H56a4,4,0,0,1-4-4V48a4,4,0,0,1,4-4H88.83A43.71,43.71,0,0,0,84,64v8a4,4,0,0,0,4,4h80a4,4,0,0,0,4-4V64a43.71,43.71,0,0,0-4.83-20H200a4,4,0,0,1,4,4Z"}))]]),sd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M140,80v41.21l34.17,20.5a12,12,0,1,1-12.34,20.58l-40-24A12,12,0,0,1,116,128V80a12,12,0,0,1,24,0ZM128,28A99.38,99.38,0,0,0,57.24,57.34c-4.69,4.74-9,9.37-13.24,14V64a12,12,0,0,0-24,0v40a12,12,0,0,0,12,12H72a12,12,0,0,0,0-24H57.77C63,86,68.37,80.22,74.26,74.26a76,76,0,1,1,1.58,109,12,12,0,0,0-16.48,17.46A100,100,0,1,0,128,28Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,128a88,88,0,1,1-88-88A88,88,0,0,1,216,128Z",opacity:"0.2"}),i.createElement("path",{d:"M136,80v43.47l36.12,21.67a8,8,0,0,1-8.24,13.72l-40-24A8,8,0,0,1,120,128V80a8,8,0,0,1,16,0Zm-8-48A95.44,95.44,0,0,0,60.08,60.15C52.81,67.51,46.35,74.59,40,82V64a8,8,0,0,0-16,0v40a8,8,0,0,0,8,8H72a8,8,0,0,0,0-16H49c7.15-8.42,14.27-16.35,22.39-24.57a80,80,0,1,1,1.66,114.75,8,8,0,1,0-11,11.64A96,96,0,1,0,128,32Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,128A96,96,0,0,1,62.11,197.82a8,8,0,1,1,11-11.64A80,80,0,1,0,71.43,71.43C67.9,75,64.58,78.51,61.35,82L77.66,98.34A8,8,0,0,1,72,112H32a8,8,0,0,1-8-8V64a8,8,0,0,1,13.66-5.66L50,70.7c3.22-3.49,6.54-7,10.06-10.55A96,96,0,0,1,224,128ZM128,72a8,8,0,0,0-8,8v48a8,8,0,0,0,3.88,6.86l40,24a8,8,0,1,0,8.24-13.72L136,123.47V80A8,8,0,0,0,128,72Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M134,80v44.6l37.09,22.25a6,6,0,0,1-6.18,10.3l-40-24A6,6,0,0,1,122,128V80a6,6,0,0,1,12,0Zm-6-46A93.4,93.4,0,0,0,61.51,61.56c-8.58,8.68-16,17-23.51,25.8V64a6,6,0,0,0-12,0v40a6,6,0,0,0,6,6H72a6,6,0,0,0,0-12H44.73C52.86,88.29,60.79,79.35,70,70a82,82,0,1,1,1.7,117.62,6,6,0,1,0-8.24,8.72A94,94,0,1,0,128,34Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M136,80v43.47l36.12,21.67a8,8,0,0,1-8.24,13.72l-40-24A8,8,0,0,1,120,128V80a8,8,0,0,1,16,0Zm-8-48A95.44,95.44,0,0,0,60.08,60.15C52.81,67.51,46.35,74.59,40,82V64a8,8,0,0,0-16,0v40a8,8,0,0,0,8,8H72a8,8,0,0,0,0-16H49c7.15-8.42,14.27-16.35,22.39-24.57a80,80,0,1,1,1.66,114.75,8,8,0,1,0-11,11.64A96,96,0,1,0,128,32Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M132,80v45.74l38.06,22.83a4,4,0,0,1-4.12,6.86l-40-24A4,4,0,0,1,124,128V80a4,4,0,0,1,8,0Zm-4-44A91.42,91.42,0,0,0,62.93,63C53.05,73,44.66,82.47,36,92.86V64a4,4,0,0,0-8,0v40a4,4,0,0,0,4,4H72a4,4,0,0,0,0-8H40.47C49.61,89,58.3,79,68.6,68.6a84,84,0,1,1,1.75,120.49,4,4,0,1,0-5.5,5.82A92,92,0,1,0,128,36Z"}))]]),rd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M228,144v64a12,12,0,0,1-12,12H40a12,12,0,0,1-12-12V144a12,12,0,0,1,24,0v52H204V144a12,12,0,0,1,24,0Zm-108.49,8.49a12,12,0,0,0,17,0l40-40a12,12,0,0,0-17-17L140,115V32a12,12,0,0,0-24,0v83L96.49,95.51a12,12,0,0,0-17,17Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,48V208H40V48A16,16,0,0,1,56,32H200A16,16,0,0,1,216,48Z",opacity:"0.2"}),i.createElement("path",{d:"M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0-11.32-11.32L136,124.69V32a8,8,0,0,0-16,0v92.69L93.66,98.34a8,8,0,0,0-11.32,11.32Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40A8,8,0,0,0,168,96H136V32a8,8,0,0,0-16,0V96H88a8,8,0,0,0-5.66,13.66Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M222,144v64a6,6,0,0,1-6,6H40a6,6,0,0,1-6-6V144a6,6,0,0,1,12,0v58H210V144a6,6,0,0,1,12,0Zm-98.24,4.24a6,6,0,0,0,8.48,0l40-40a6,6,0,0,0-8.48-8.48L134,129.51V32a6,6,0,0,0-12,0v97.51L92.24,99.76a6,6,0,0,0-8.48,8.48Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0-11.32-11.32L136,124.69V32a8,8,0,0,0-16,0v92.69L93.66,98.34a8,8,0,0,0-11.32,11.32Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M220,144v64a4,4,0,0,1-4,4H40a4,4,0,0,1-4-4V144a4,4,0,0,1,8,0v60H212V144a4,4,0,0,1,8,0Zm-94.83,2.83a4,4,0,0,0,5.66,0l40-40a4,4,0,1,0-5.66-5.66L132,134.34V32a4,4,0,0,0-8,0V134.34L90.83,101.17a4,4,0,0,0-5.66,5.66Z"}))]]),od=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M212.62,75.17A63.7,63.7,0,0,0,206.39,26,12,12,0,0,0,196,20a63.71,63.71,0,0,0-50,24H126A63.71,63.71,0,0,0,76,20a12,12,0,0,0-10.39,6,63.7,63.7,0,0,0-6.23,49.17A61.5,61.5,0,0,0,52,104v8a60.1,60.1,0,0,0,45.76,58.28A43.66,43.66,0,0,0,92,192v4H76a20,20,0,0,1-20-20,44.05,44.05,0,0,0-44-44,12,12,0,0,0,0,24,20,20,0,0,1,20,20,44.05,44.05,0,0,0,44,44H92v12a12,12,0,0,0,24,0V192a20,20,0,0,1,40,0v40a12,12,0,0,0,24,0V192a43.66,43.66,0,0,0-5.76-21.72A60.1,60.1,0,0,0,220,112v-8A61.5,61.5,0,0,0,212.62,75.17ZM196,112a36,36,0,0,1-36,36H112a36,36,0,0,1-36-36v-8a37.87,37.87,0,0,1,6.13-20.12,11.65,11.65,0,0,0,1.58-11.49,39.9,39.9,0,0,1-.4-27.72,39.87,39.87,0,0,1,26.41,17.8A12,12,0,0,0,119.82,68h32.35a12,12,0,0,0,10.11-5.53,39.84,39.84,0,0,1,26.41-17.8,39.9,39.9,0,0,1-.4,27.72,12,12,0,0,0,1.61,11.53A37.85,37.85,0,0,1,196,104Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,104v8a48,48,0,0,1-48,48H136a32,32,0,0,1,32,32v40H104V192a32,32,0,0,1,32-32H112a48,48,0,0,1-48-48v-8a49.28,49.28,0,0,1,8.51-27.3A51.92,51.92,0,0,1,76,32a52,52,0,0,1,43.83,24h32.34A52,52,0,0,1,196,32a51.92,51.92,0,0,1,3.49,44.7A49.28,49.28,0,0,1,208,104Z",opacity:"0.2"}),i.createElement("path",{d:"M208.3,75.68A59.74,59.74,0,0,0,202.93,28,8,8,0,0,0,196,24a59.75,59.75,0,0,0-48,24H124A59.75,59.75,0,0,0,76,24a8,8,0,0,0-6.93,4,59.78,59.78,0,0,0-5.38,47.68A58.14,58.14,0,0,0,56,104v8a56.06,56.06,0,0,0,48.44,55.47A39.8,39.8,0,0,0,96,192v8H72a24,24,0,0,1-24-24A40,40,0,0,0,8,136a8,8,0,0,0,0,16,24,24,0,0,1,24,24,40,40,0,0,0,40,40H96v16a8,8,0,0,0,16,0V192a24,24,0,0,1,48,0v40a8,8,0,0,0,16,0V192a39.8,39.8,0,0,0-8.44-24.53A56.06,56.06,0,0,0,216,112v-8A58,58,0,0,0,208.3,75.68ZM200,112a40,40,0,0,1-40,40H112a40,40,0,0,1-40-40v-8a41.74,41.74,0,0,1,6.9-22.48A8,8,0,0,0,80,73.83a43.81,43.81,0,0,1,.79-33.58,43.88,43.88,0,0,1,32.32,20.06A8,8,0,0,0,119.82,64h32.35a8,8,0,0,0,6.74-3.69,43.87,43.87,0,0,1,32.32-20.06A43.81,43.81,0,0,1,192,73.83a8.09,8.09,0,0,0,1,7.65A41.76,41.76,0,0,1,200,104Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,104v8a56.06,56.06,0,0,1-48.44,55.47A39.8,39.8,0,0,1,176,192v40a8,8,0,0,1-8,8H104a8,8,0,0,1-8-8V216H72a40,40,0,0,1-40-40A24,24,0,0,0,8,152a8,8,0,0,1,0-16,40,40,0,0,1,40,40,24,24,0,0,0,24,24H96v-8a39.8,39.8,0,0,1,8.44-24.53A56.06,56.06,0,0,1,56,112v-8a58.14,58.14,0,0,1,7.69-28.32A59.78,59.78,0,0,1,69.07,28,8,8,0,0,1,76,24a59.75,59.75,0,0,1,48,24h24a59.75,59.75,0,0,1,48-24,8,8,0,0,1,6.93,4,59.74,59.74,0,0,1,5.37,47.68A58,58,0,0,1,216,104Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M206.13,75.92A57.79,57.79,0,0,0,201.2,29a6,6,0,0,0-5.2-3,57.77,57.77,0,0,0-47,24H123A57.77,57.77,0,0,0,76,26a6,6,0,0,0-5.2,3,57.79,57.79,0,0,0-4.93,46.92A55.88,55.88,0,0,0,58,104v8a54.06,54.06,0,0,0,50.45,53.87A37.85,37.85,0,0,0,98,192v10H72a26,26,0,0,1-26-26A38,38,0,0,0,8,138a6,6,0,0,0,0,12,26,26,0,0,1,26,26,38,38,0,0,0,38,38H98v18a6,6,0,0,0,12,0V192a26,26,0,0,1,52,0v40a6,6,0,0,0,12,0V192a37.85,37.85,0,0,0-10.45-26.13A54.06,54.06,0,0,0,214,112v-8A55.88,55.88,0,0,0,206.13,75.92ZM202,112a42,42,0,0,1-42,42H112a42,42,0,0,1-42-42v-8a43.86,43.86,0,0,1,7.3-23.69,6,6,0,0,0,.81-5.76,45.85,45.85,0,0,1,1.43-36.42,45.85,45.85,0,0,1,35.23,21.1A6,6,0,0,0,119.83,62h32.34a6,6,0,0,0,5.06-2.76,45.83,45.83,0,0,1,35.23-21.11,45.85,45.85,0,0,1,1.43,36.42,6,6,0,0,0,.79,5.74A43.78,43.78,0,0,1,202,104Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208.31,75.68A59.78,59.78,0,0,0,202.93,28,8,8,0,0,0,196,24a59.75,59.75,0,0,0-48,24H124A59.75,59.75,0,0,0,76,24a8,8,0,0,0-6.93,4,59.78,59.78,0,0,0-5.38,47.68A58.14,58.14,0,0,0,56,104v8a56.06,56.06,0,0,0,48.44,55.47A39.8,39.8,0,0,0,96,192v8H72a24,24,0,0,1-24-24A40,40,0,0,0,8,136a8,8,0,0,0,0,16,24,24,0,0,1,24,24,40,40,0,0,0,40,40H96v16a8,8,0,0,0,16,0V192a24,24,0,0,1,48,0v40a8,8,0,0,0,16,0V192a39.8,39.8,0,0,0-8.44-24.53A56.06,56.06,0,0,0,216,112v-8A58.14,58.14,0,0,0,208.31,75.68ZM200,112a40,40,0,0,1-40,40H112a40,40,0,0,1-40-40v-8a41.74,41.74,0,0,1,6.9-22.48A8,8,0,0,0,80,73.83a43.81,43.81,0,0,1,.79-33.58,43.88,43.88,0,0,1,32.32,20.06A8,8,0,0,0,119.82,64h32.35a8,8,0,0,0,6.74-3.69,43.87,43.87,0,0,1,32.32-20.06A43.81,43.81,0,0,1,192,73.83a8.09,8.09,0,0,0,1,7.65A41.72,41.72,0,0,1,200,104Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M203.94,76.16A55.73,55.73,0,0,0,199.46,30,4,4,0,0,0,196,28a55.78,55.78,0,0,0-46,24H122A55.78,55.78,0,0,0,76,28a4,4,0,0,0-3.46,2,55.73,55.73,0,0,0-4.48,46.16A53.78,53.78,0,0,0,60,104v8a52.06,52.06,0,0,0,52,52h1.41A36,36,0,0,0,100,192v12H72a28,28,0,0,1-28-28A36,36,0,0,0,8,140a4,4,0,0,0,0,8,28,28,0,0,1,28,28,36,36,0,0,0,36,36h28v20a4,4,0,0,0,8,0V192a28,28,0,0,1,56,0v40a4,4,0,0,0,8,0V192a36,36,0,0,0-13.41-28H160a52.06,52.06,0,0,0,52-52v-8A53.78,53.78,0,0,0,203.94,76.16ZM204,112a44.05,44.05,0,0,1-44,44H112a44.05,44.05,0,0,1-44-44v-8a45.76,45.76,0,0,1,7.71-24.89,4,4,0,0,0,.53-3.84,47.82,47.82,0,0,1,2.1-39.21,47.8,47.8,0,0,1,38.12,22.1A4,4,0,0,0,119.83,60h32.34a4,4,0,0,0,3.37-1.84,47.8,47.8,0,0,1,38.12-22.1,47.82,47.82,0,0,1,2.1,39.21,4,4,0,0,0,.53,3.83A45.85,45.85,0,0,1,204,104Z"}))]]),dd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M219.71,117.38a12,12,0,0,0-7.25-8.52L161.28,88.39l10.59-70.61a12,12,0,0,0-20.64-10l-112,120a12,12,0,0,0,4.31,19.33l51.18,20.47L84.13,238.22a12,12,0,0,0,20.64,10l112-120A12,12,0,0,0,219.71,117.38ZM113.6,203.55l6.27-41.77a12,12,0,0,0-7.41-12.92L68.74,131.37,142.4,52.45l-6.27,41.77a12,12,0,0,0,7.41,12.92l43.72,17.49Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M96,240l16-80L48,136,160,16,144,96l64,24Z",opacity:"0.2"}),i.createElement("path",{d:"M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M213.85,125.46l-112,120a8,8,0,0,1-13.69-7l14.66-73.33L45.19,143.49a8,8,0,0,1-3-13l112-120a8,8,0,0,1,13.69,7L153.18,90.9l57.63,21.61a8,8,0,0,1,3,12.95Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M213.84,118.63a6,6,0,0,0-3.73-4.25L150.88,92.17l15-75a6,6,0,0,0-10.27-5.27l-112,120a6,6,0,0,0,2.28,9.71l59.23,22.21-15,75a6,6,0,0,0,3.14,6.52A6.07,6.07,0,0,0,96,246a6,6,0,0,0,4.39-1.91l112-120A6,6,0,0,0,213.84,118.63ZM106,220.46l11.85-59.28a6,6,0,0,0-3.77-6.8l-55.6-20.85,91.46-98L138.12,94.82a6,6,0,0,0,3.77,6.8l55.6,20.85Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M211.89,119.09a4,4,0,0,0-2.49-2.84l-60.81-22.8,15.33-76.67a4,4,0,0,0-6.84-3.51l-112,120a4,4,0,0,0-1,3.64,4,4,0,0,0,2.49,2.84l60.81,22.8L92.08,239.22a4,4,0,0,0,6.84,3.51l112-120A4,4,0,0,0,211.89,119.09ZM102.68,227l13.24-66.2a4,4,0,0,0-2.52-4.53L55,134.36,153.32,29l-13.24,66.2a4,4,0,0,0,2.52,4.53L201,121.64Z"}))]]),md=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M228,128a12,12,0,0,1-12,12H40a12,12,0,0,1,0-24H216A12,12,0,0,1,228,128ZM40,76H216a12,12,0,0,0,0-24H40a12,12,0,0,0,0,24ZM216,180H40a12,12,0,0,0,0,24H216a12,12,0,0,0,0-24Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,64V192H40V64Z",opacity:"0.2"}),i.createElement("path",{d:"M224,128a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128ZM40,72H216a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16ZM216,184H40a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM192,184H64a8,8,0,0,1,0-16H192a8,8,0,0,1,0,16Zm0-48H64a8,8,0,0,1,0-16H192a8,8,0,0,1,0,16Zm0-48H64a8,8,0,0,1,0-16H192a8,8,0,0,1,0,16Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M222,128a6,6,0,0,1-6,6H40a6,6,0,0,1,0-12H216A6,6,0,0,1,222,128ZM40,70H216a6,6,0,0,0,0-12H40a6,6,0,0,0,0,12ZM216,186H40a6,6,0,0,0,0,12H216a6,6,0,0,0,0-12Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,128a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128ZM40,72H216a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16ZM216,184H40a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M220,128a4,4,0,0,1-4,4H40a4,4,0,0,1,0-8H216A4,4,0,0,1,220,128ZM40,68H216a4,4,0,0,0,0-8H40a4,4,0,0,0,0,8ZM216,188H40a4,4,0,0,0,0,8H216a4,4,0,0,0,0-8Z"}))]]),hd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M232.49,215.51,185,168a92.12,92.12,0,1,0-17,17l47.53,47.54a12,12,0,0,0,17-17ZM44,112a68,68,0,1,1,68,68A68.07,68.07,0,0,1,44,112Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M192,112a80,80,0,1,1-80-80A80,80,0,0,1,192,112Z",opacity:"0.2"}),i.createElement("path",{d:"M229.66,218.34,179.6,168.28a88.21,88.21,0,1,0-11.32,11.31l50.06,50.07a8,8,0,0,0,11.32-11.32ZM40,112a72,72,0,1,1,72,72A72.08,72.08,0,0,1,40,112Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M168,112a56,56,0,1,1-56-56A56,56,0,0,1,168,112Zm61.66,117.66a8,8,0,0,1-11.32,0l-50.06-50.07a88,88,0,1,1,11.32-11.31l50.06,50.06A8,8,0,0,1,229.66,229.66ZM112,184a72,72,0,1,0-72-72A72.08,72.08,0,0,0,112,184Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M228.24,219.76l-51.38-51.38a86.15,86.15,0,1,0-8.48,8.48l51.38,51.38a6,6,0,0,0,8.48-8.48ZM38,112a74,74,0,1,1,74,74A74.09,74.09,0,0,1,38,112Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M229.66,218.34l-50.07-50.06a88.11,88.11,0,1,0-11.31,11.31l50.06,50.07a8,8,0,0,0,11.32-11.32ZM40,112a72,72,0,1,1,72,72A72.08,72.08,0,0,1,40,112Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M226.83,221.17l-52.7-52.7a84.1,84.1,0,1,0-5.66,5.66l52.7,52.7a4,4,0,0,0,5.66-5.66ZM36,112a76,76,0,1,1,76,76A76.08,76.08,0,0,1,36,112Z"}))]]),vd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,36H48A28,28,0,0,0,20,64V176a28,28,0,0,0,28,28H208a28,28,0,0,0,28-28V64A28,28,0,0,0,208,36Zm4,140a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V64a4,4,0,0,1,4-4H208a4,4,0,0,1,4,4Zm-40,52a12,12,0,0,1-12,12H96a12,12,0,0,1,0-24h64A12,12,0,0,1,172,228Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,64V176a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V64A16,16,0,0,1,48,48H208A16,16,0,0,1,224,64Z",opacity:"0.2"}),i.createElement("path",{d:"M208,40H48A24,24,0,0,0,24,64V176a24,24,0,0,0,24,24H208a24,24,0,0,0,24-24V64A24,24,0,0,0,208,40Zm8,136a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V64a8,8,0,0,1,8-8H208a8,8,0,0,1,8,8Zm-48,48a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,224Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M232,64V176a24,24,0,0,1-24,24H48a24,24,0,0,1-24-24V64A24,24,0,0,1,48,40H208A24,24,0,0,1,232,64ZM160,216H96a8,8,0,0,0,0,16h64a8,8,0,0,0,0-16Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,42H48A22,22,0,0,0,26,64V176a22,22,0,0,0,22,22H208a22,22,0,0,0,22-22V64A22,22,0,0,0,208,42Zm10,134a10,10,0,0,1-10,10H48a10,10,0,0,1-10-10V64A10,10,0,0,1,48,54H208a10,10,0,0,1,10,10Zm-52,48a6,6,0,0,1-6,6H96a6,6,0,0,1,0-12h64A6,6,0,0,1,166,224Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,40H48A24,24,0,0,0,24,64V176a24,24,0,0,0,24,24H208a24,24,0,0,0,24-24V64A24,24,0,0,0,208,40Zm8,136a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V64a8,8,0,0,1,8-8H208a8,8,0,0,1,8,8Zm-48,48a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,224Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,44H48A20,20,0,0,0,28,64V176a20,20,0,0,0,20,20H208a20,20,0,0,0,20-20V64A20,20,0,0,0,208,44Zm12,132a12,12,0,0,1-12,12H48a12,12,0,0,1-12-12V64A12,12,0,0,1,48,52H208a12,12,0,0,1,12,12Zm-56,48a4,4,0,0,1-4,4H96a4,4,0,0,1,0-8h64A4,4,0,0,1,164,224Z"}))]]),yd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M236.37,139.4a12,12,0,0,0-12-3A84.07,84.07,0,0,1,119.6,31.59a12,12,0,0,0-15-15A108.86,108.86,0,0,0,49.69,55.07,108,108,0,0,0,136,228a107.09,107.09,0,0,0,64.93-21.69,108.86,108.86,0,0,0,38.44-54.94A12,12,0,0,0,236.37,139.4Zm-49.88,47.74A84,84,0,0,1,68.86,69.51,84.93,84.93,0,0,1,92.27,48.29Q92,52.13,92,56A108.12,108.12,0,0,0,200,164q3.87,0,7.71-.27A84.79,84.79,0,0,1,186.49,187.14Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M227.89,147.89A96,96,0,1,1,108.11,28.11,96.09,96.09,0,0,0,227.89,147.89Z",opacity:"0.2"}),i.createElement("path",{d:"M233.54,142.23a8,8,0,0,0-8-2,88.08,88.08,0,0,1-109.8-109.8,8,8,0,0,0-10-10,104.84,104.84,0,0,0-52.91,37A104,104,0,0,0,136,224a103.09,103.09,0,0,0,62.52-20.88,104.84,104.84,0,0,0,37-52.91A8,8,0,0,0,233.54,142.23ZM188.9,190.34A88,88,0,0,1,65.66,67.11a89,89,0,0,1,31.4-26A106,106,0,0,0,96,56,104.11,104.11,0,0,0,200,160a106,106,0,0,0,14.92-1.06A89,89,0,0,1,188.9,190.34Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M235.54,150.21a104.84,104.84,0,0,1-37,52.91A104,104,0,0,1,32,120,103.09,103.09,0,0,1,52.88,57.48a104.84,104.84,0,0,1,52.91-37,8,8,0,0,1,10,10,88.08,88.08,0,0,0,109.8,109.8,8,8,0,0,1,10,10Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M232.13,143.64a6,6,0,0,0-6-1.49A90.07,90.07,0,0,1,113.86,29.85a6,6,0,0,0-7.49-7.48A102.88,102.88,0,0,0,54.48,58.68,102,102,0,0,0,197.32,201.52a102.88,102.88,0,0,0,36.31-51.89A6,6,0,0,0,232.13,143.64Zm-42,48.29a90,90,0,0,1-126-126A90.9,90.9,0,0,1,99.65,37.66,102.06,102.06,0,0,0,218.34,156.35,90.9,90.9,0,0,1,190.1,191.93Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M233.54,142.23a8,8,0,0,0-8-2,88.08,88.08,0,0,1-109.8-109.8,8,8,0,0,0-10-10,104.84,104.84,0,0,0-52.91,37A104,104,0,0,0,136,224a103.09,103.09,0,0,0,62.52-20.88,104.84,104.84,0,0,0,37-52.91A8,8,0,0,0,233.54,142.23ZM188.9,190.34A88,88,0,0,1,65.66,67.11a89,89,0,0,1,31.4-26A106,106,0,0,0,96,56,104.11,104.11,0,0,0,200,160a106,106,0,0,0,14.92-1.06A89,89,0,0,1,188.9,190.34Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M230.72,145.06a4,4,0,0,0-4-1A92.08,92.08,0,0,1,111.94,29.27a4,4,0,0,0-5-5A100.78,100.78,0,0,0,56.08,59.88a100,100,0,0,0,140,140,100.78,100.78,0,0,0,35.59-50.87A4,4,0,0,0,230.72,145.06ZM191.3,193.53A92,92,0,0,1,62.47,64.7a93,93,0,0,1,39.88-30.35,100.09,100.09,0,0,0,119.3,119.3A93,93,0,0,1,191.3,193.53Z"}))]]),gd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M234.49,111.07,90.41,22.94A20,20,0,0,0,60,39.87V216.13a20,20,0,0,0,30.41,16.93l144.08-88.13a19.82,19.82,0,0,0,0-33.86ZM84,208.85V47.15L216.16,128Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M228.23,134.69,84.15,222.81A8,8,0,0,1,72,216.12V39.88a8,8,0,0,1,12.15-6.69l144.08,88.12A7.82,7.82,0,0,1,228.23,134.69Z",opacity:"0.2"}),i.createElement("path",{d:"M232.4,114.49,88.32,26.35a16,16,0,0,0-16.2-.3A15.86,15.86,0,0,0,64,39.87V216.13A15.94,15.94,0,0,0,80,232a16.07,16.07,0,0,0,8.36-2.35L232.4,141.51a15.81,15.81,0,0,0,0-27ZM80,215.94V40l143.83,88Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M240,128a15.74,15.74,0,0,1-7.6,13.51L88.32,229.65a16,16,0,0,1-16.2.3A15.86,15.86,0,0,1,64,216.13V39.87a15.86,15.86,0,0,1,8.12-13.82,16,16,0,0,1,16.2.3L232.4,114.49A15.74,15.74,0,0,1,240,128Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M231.36,116.19,87.28,28.06a14,14,0,0,0-14.18-.27A13.69,13.69,0,0,0,66,39.87V216.13a13.69,13.69,0,0,0,7.1,12.08,14,14,0,0,0,14.18-.27l144.08-88.13a13.82,13.82,0,0,0,0-23.62Zm-6.26,13.38L81,217.7a2,2,0,0,1-2.06,0,1.78,1.78,0,0,1-1-1.61V39.87a1.78,1.78,0,0,1,1-1.61A2.06,2.06,0,0,1,80,38a2,2,0,0,1,1,.31L225.1,126.43a1.82,1.82,0,0,1,0,3.14Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M232.4,114.49,88.32,26.35a16,16,0,0,0-16.2-.3A15.86,15.86,0,0,0,64,39.87V216.13A15.94,15.94,0,0,0,80,232a16.07,16.07,0,0,0,8.36-2.35L232.4,141.51a15.81,15.81,0,0,0,0-27ZM80,215.94V40l143.83,88Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M230.32,117.9,86.24,29.79a11.91,11.91,0,0,0-12.17-.23A11.71,11.71,0,0,0,68,39.89V216.11a11.71,11.71,0,0,0,6.07,10.33,11.91,11.91,0,0,0,12.17-.23L230.32,138.1a11.82,11.82,0,0,0,0-20.2Zm-4.18,13.37L82.06,219.39a4,4,0,0,1-4.07.07,3.77,3.77,0,0,1-2-3.35V39.89a3.77,3.77,0,0,1,2-3.35,4,4,0,0,1,4.07.07l144.08,88.12a3.8,3.8,0,0,1,0,6.54Z"}))]]),Ed=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,36H56A20,20,0,0,0,36,56V200a20,20,0,0,0,20,20H200a20,20,0,0,0,20-20V56A20,20,0,0,0,200,36Zm-4,160H60V60H196Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,56V200a8,8,0,0,1-8,8H56a8,8,0,0,1-8-8V56a8,8,0,0,1,8-8H200A8,8,0,0,1,208,56Z",opacity:"0.2"}),i.createElement("path",{d:"M200,40H56A16,16,0,0,0,40,56V200a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V56A16,16,0,0,0,200,40Zm0,160H56V56H200V200Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,56V200a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V56A16,16,0,0,1,56,40H200A16,16,0,0,1,216,56Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,42H56A14,14,0,0,0,42,56V200a14,14,0,0,0,14,14H200a14,14,0,0,0,14-14V56A14,14,0,0,0,200,42Zm2,158a2,2,0,0,1-2,2H56a2,2,0,0,1-2-2V56a2,2,0,0,1,2-2H200a2,2,0,0,1,2,2Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,40H56A16,16,0,0,0,40,56V200a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V56A16,16,0,0,0,200,40Zm0,160H56V56H200V200Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,44H56A12,12,0,0,0,44,56V200a12,12,0,0,0,12,12H200a12,12,0,0,0,12-12V56A12,12,0,0,0,200,44Zm4,156a4,4,0,0,1-4,4H56a4,4,0,0,1-4-4V56a4,4,0,0,1,4-4H200a4,4,0,0,1,4,4Z"}))]]),Sd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M116,36V20a12,12,0,0,1,24,0V36a12,12,0,0,1-24,0Zm80,92a68,68,0,1,1-68-68A68.07,68.07,0,0,1,196,128Zm-24,0a44,44,0,1,0-44,44A44.05,44.05,0,0,0,172,128ZM51.51,68.49a12,12,0,1,0,17-17l-12-12a12,12,0,0,0-17,17Zm0,119-12,12a12,12,0,0,0,17,17l12-12a12,12,0,1,0-17-17ZM196,72a12,12,0,0,0,8.49-3.51l12-12a12,12,0,0,0-17-17l-12,12A12,12,0,0,0,196,72Zm8.49,115.51a12,12,0,0,0-17,17l12,12a12,12,0,0,0,17-17ZM48,128a12,12,0,0,0-12-12H20a12,12,0,0,0,0,24H36A12,12,0,0,0,48,128Zm80,80a12,12,0,0,0-12,12v16a12,12,0,0,0,24,0V220A12,12,0,0,0,128,208Zm108-92H220a12,12,0,0,0,0,24h16a12,12,0,0,0,0-24Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M184,128a56,56,0,1,1-56-56A56,56,0,0,1,184,128Z",opacity:"0.2"}),i.createElement("path",{d:"M120,40V16a8,8,0,0,1,16,0V40a8,8,0,0,1-16,0Zm72,88a64,64,0,1,1-64-64A64.07,64.07,0,0,1,192,128Zm-16,0a48,48,0,1,0-48,48A48.05,48.05,0,0,0,176,128ZM58.34,69.66A8,8,0,0,0,69.66,58.34l-16-16A8,8,0,0,0,42.34,53.66Zm0,116.68-16,16a8,8,0,0,0,11.32,11.32l16-16a8,8,0,0,0-11.32-11.32ZM192,72a8,8,0,0,0,5.66-2.34l16-16a8,8,0,0,0-11.32-11.32l-16,16A8,8,0,0,0,192,72Zm5.66,114.34a8,8,0,0,0-11.32,11.32l16,16a8,8,0,0,0,11.32-11.32ZM48,128a8,8,0,0,0-8-8H16a8,8,0,0,0,0,16H40A8,8,0,0,0,48,128Zm80,80a8,8,0,0,0-8,8v24a8,8,0,0,0,16,0V216A8,8,0,0,0,128,208Zm112-88H216a8,8,0,0,0,0,16h24a8,8,0,0,0,0-16Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M120,40V16a8,8,0,0,1,16,0V40a8,8,0,0,1-16,0Zm8,24a64,64,0,1,0,64,64A64.07,64.07,0,0,0,128,64ZM58.34,69.66A8,8,0,0,0,69.66,58.34l-16-16A8,8,0,0,0,42.34,53.66Zm0,116.68-16,16a8,8,0,0,0,11.32,11.32l16-16a8,8,0,0,0-11.32-11.32ZM192,72a8,8,0,0,0,5.66-2.34l16-16a8,8,0,0,0-11.32-11.32l-16,16A8,8,0,0,0,192,72Zm5.66,114.34a8,8,0,0,0-11.32,11.32l16,16a8,8,0,0,0,11.32-11.32ZM48,128a8,8,0,0,0-8-8H16a8,8,0,0,0,0,16H40A8,8,0,0,0,48,128Zm80,80a8,8,0,0,0-8,8v24a8,8,0,0,0,16,0V216A8,8,0,0,0,128,208Zm112-88H216a8,8,0,0,0,0,16h24a8,8,0,0,0,0-16Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M122,40V16a6,6,0,0,1,12,0V40a6,6,0,0,1-12,0Zm68,88a62,62,0,1,1-62-62A62.07,62.07,0,0,1,190,128Zm-12,0a50,50,0,1,0-50,50A50.06,50.06,0,0,0,178,128ZM59.76,68.24a6,6,0,1,0,8.48-8.48l-16-16a6,6,0,0,0-8.48,8.48Zm0,119.52-16,16a6,6,0,1,0,8.48,8.48l16-16a6,6,0,1,0-8.48-8.48ZM192,70a6,6,0,0,0,4.24-1.76l16-16a6,6,0,0,0-8.48-8.48l-16,16A6,6,0,0,0,192,70Zm4.24,117.76a6,6,0,0,0-8.48,8.48l16,16a6,6,0,0,0,8.48-8.48ZM46,128a6,6,0,0,0-6-6H16a6,6,0,0,0,0,12H40A6,6,0,0,0,46,128Zm82,82a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V216A6,6,0,0,0,128,210Zm112-88H216a6,6,0,0,0,0,12h24a6,6,0,0,0,0-12Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M120,40V16a8,8,0,0,1,16,0V40a8,8,0,0,1-16,0Zm72,88a64,64,0,1,1-64-64A64.07,64.07,0,0,1,192,128Zm-16,0a48,48,0,1,0-48,48A48.05,48.05,0,0,0,176,128ZM58.34,69.66A8,8,0,0,0,69.66,58.34l-16-16A8,8,0,0,0,42.34,53.66Zm0,116.68-16,16a8,8,0,0,0,11.32,11.32l16-16a8,8,0,0,0-11.32-11.32ZM192,72a8,8,0,0,0,5.66-2.34l16-16a8,8,0,0,0-11.32-11.32l-16,16A8,8,0,0,0,192,72Zm5.66,114.34a8,8,0,0,0-11.32,11.32l16,16a8,8,0,0,0,11.32-11.32ZM48,128a8,8,0,0,0-8-8H16a8,8,0,0,0,0,16H40A8,8,0,0,0,48,128Zm80,80a8,8,0,0,0-8,8v24a8,8,0,0,0,16,0V216A8,8,0,0,0,128,208Zm112-88H216a8,8,0,0,0,0,16h24a8,8,0,0,0,0-16Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M124,40V16a4,4,0,0,1,8,0V40a4,4,0,0,1-8,0Zm64,88a60,60,0,1,1-60-60A60.07,60.07,0,0,1,188,128Zm-8,0a52,52,0,1,0-52,52A52.06,52.06,0,0,0,180,128ZM61.17,66.83a4,4,0,0,0,5.66-5.66l-16-16a4,4,0,0,0-5.66,5.66Zm0,122.34-16,16a4,4,0,0,0,5.66,5.66l16-16a4,4,0,0,0-5.66-5.66ZM192,68a4,4,0,0,0,2.83-1.17l16-16a4,4,0,1,0-5.66-5.66l-16,16A4,4,0,0,0,192,68Zm2.83,121.17a4,4,0,0,0-5.66,5.66l16,16a4,4,0,0,0,5.66-5.66ZM40,124H16a4,4,0,0,0,0,8H40a4,4,0,0,0,0-8Zm88,88a4,4,0,0,0-4,4v24a4,4,0,0,0,8,0V216A4,4,0,0,0,128,212Zm112-88H216a4,4,0,0,0,0,8h24a4,4,0,0,0,0-8Z"}))]]),bd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,48H180V36A28,28,0,0,0,152,8H104A28,28,0,0,0,76,36V48H40a12,12,0,0,0,0,24h4V208a20,20,0,0,0,20,20H192a20,20,0,0,0,20-20V72h4a12,12,0,0,0,0-24ZM100,36a4,4,0,0,1,4-4h48a4,4,0,0,1,4,4V48H100Zm88,168H68V72H188ZM116,104v64a12,12,0,0,1-24,0V104a12,12,0,0,1,24,0Zm48,0v64a12,12,0,0,1-24,0V104a12,12,0,0,1,24,0Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,56V208a8,8,0,0,1-8,8H64a8,8,0,0,1-8-8V56Z",opacity:"0.2"}),i.createElement("path",{d:"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM112,168a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm0-120H96V40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,50H174V40a22,22,0,0,0-22-22H104A22,22,0,0,0,82,40V50H40a6,6,0,0,0,0,12H50V208a14,14,0,0,0,14,14H192a14,14,0,0,0,14-14V62h10a6,6,0,0,0,0-12ZM94,40a10,10,0,0,1,10-10h48a10,10,0,0,1,10,10V50H94ZM194,208a2,2,0,0,1-2,2H64a2,2,0,0,1-2-2V62H194ZM110,104v64a6,6,0,0,1-12,0V104a6,6,0,0,1,12,0Zm48,0v64a6,6,0,0,1-12,0V104a6,6,0,0,1,12,0Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,52H172V40a20,20,0,0,0-20-20H104A20,20,0,0,0,84,40V52H40a4,4,0,0,0,0,8H52V208a12,12,0,0,0,12,12H192a12,12,0,0,0,12-12V60h12a4,4,0,0,0,0-8ZM92,40a12,12,0,0,1,12-12h48a12,12,0,0,1,12,12V52H92ZM196,208a4,4,0,0,1-4,4H64a4,4,0,0,1-4-4V60H196ZM108,104v64a4,4,0,0,1-8,0V104a4,4,0,0,1,8,0Zm48,0v64a4,4,0,0,1-8,0V104a4,4,0,0,1,8,0Z"}))]]),Ad=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,20A108,108,0,1,0,236,128,108.12,108.12,0,0,0,128,20Zm0,192a84,84,0,1,1,84-84A84.09,84.09,0,0,1,128,212Zm-12-80V80a12,12,0,0,1,24,0v52a12,12,0,0,1-24,0Zm28,40a16,16,0,1,1-16-16A16,16,0,0,1,144,172Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),i.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm-8-80V80a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,172Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm-8,56a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm8,104a12,12,0,1,1,12-12A12,12,0,0,1,128,184Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,26A102,102,0,1,0,230,128,102.12,102.12,0,0,0,128,26Zm0,192a90,90,0,1,1,90-90A90.1,90.1,0,0,1,128,218Zm-6-82V80a6,6,0,0,1,12,0v56a6,6,0,0,1-12,0Zm16,36a10,10,0,1,1-10-10A10,10,0,0,1,138,172Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm-8-80V80a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,172Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,28A100,100,0,1,0,228,128,100.11,100.11,0,0,0,128,28Zm0,192a92,92,0,1,1,92-92A92.1,92.1,0,0,1,128,220Zm-4-84V80a4,4,0,0,1,8,0v56a4,4,0,0,1-8,0Zm12,36a8,8,0,1,1-8-8A8,8,0,0,1,136,172Z"}))]]),pd=i.createContext({color:"currentColor",size:"1em",weight:"regular",mirrored:!1}),Yl=i.forwardRef((o,p)=>{const{alt:T,color:v,size:Y,weight:D,mirrored:I,children:q,weights:j,..._}=o,{color:O="currentColor",size:S,weight:C="regular",mirrored:al=!1,...vl}=i.useContext(pd);return i.createElement("svg",{ref:p,xmlns:"http://www.w3.org/2000/svg",width:Y??S,height:Y??S,fill:v??O,viewBox:"0 0 256 256",transform:I||al?"scale(-1, 1)":void 0,...vl,..._},!!T&&i.createElement("title",null,T),q,j.get(D??C))});Yl.displayName="IconBase";const Hs=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:ed}));Hs.displayName="ArrowClockwiseIcon";const bs=Hs,Ns=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:ad}));Ns.displayName="ArrowSquareOutIcon";const Td=Ns,zs=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:nd}));zs.displayName="CaretDownIcon";const _s=zs,Os=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:ud}));Os.displayName="CheckIcon";const Md=Os,Zs=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:cd}));Zs.displayName="CheckCircleIcon";const Hd=Zs,Cs=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:id}));Cs.displayName="CircleNotchIcon";const xs=Cs,Ds=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:fd}));Ds.displayName="ClipboardIcon";const Rs=Ds,Vs=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:sd}));Vs.displayName="ClockCounterClockwiseIcon";const Nd=Vs,js=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:rd}));js.displayName="DownloadSimpleIcon";const Ri=js,Us=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:od}));Us.displayName="GithubLogoIcon";const zd=Us,qs=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:dd}));qs.displayName="LightningIcon";const _d=qs,Bs=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:md}));Bs.displayName="ListIcon";const Od=Bs,Ys=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:hd}));Ys.displayName="MagnifyingGlassIcon";const Zd=Ys,Ls=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:vd}));Ls.displayName="MonitorIcon";const Cd=Ls,ws=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:yd}));ws.displayName="MoonIcon";const xd=ws,Gs=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:gd}));Gs.displayName="PlayIcon";const Dd=Gs,Qs=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:Ed}));Qs.displayName="StopIcon";const Rd=Qs,Xs=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:Sd}));Xs.displayName="SunIcon";const Vd=Xs,Ks=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:bd}));Ks.displayName="TrashIcon";const jd=Ks,Js=i.forwardRef((o,p)=>i.createElement(Yl,{ref:p,...o,weights:Ad}));Js.displayName="WarningCircleIcon";const Fs=Js,Ud="modulepreload",qd=function(o,p){return new URL(o,p).href},As={},Bd=function(p,T,v){let Y=Promise.resolve();if(T&&T.length>0){let I=function(O){return Promise.all(O.map(S=>Promise.resolve(S).then(C=>({status:"fulfilled",value:C}),C=>({status:"rejected",reason:C}))))};const q=document.getElementsByTagName("link"),j=document.querySelector("meta[property=csp-nonce]"),_=j?.nonce||j?.getAttribute("nonce");Y=I(T.map(O=>{if(O=qd(O,v),O in As)return;As[O]=!0;const S=O.endsWith(".css"),C=S?'[rel="stylesheet"]':"";if(v)for(let vl=q.length-1;vl>=0;vl--){const Sl=q[vl];if(Sl.href===O&&(!S||Sl.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${O}"]${C}`))return;const al=document.createElement("link");if(al.rel=S?"stylesheet":Ud,S||(al.as="script"),al.crossOrigin="",al.href=O,_&&al.setAttribute("nonce",_),document.head.appendChild(al),S)return new Promise((vl,Sl)=>{al.addEventListener("load",vl),al.addEventListener("error",()=>Sl(Error(`Unable to preload CSS for ${O}`)))})}))}function D(I){const q=new Event("vite:preloadError",{cancelable:!0});if(q.payload=I,window.dispatchEvent(q),!q.defaultPrevented)throw I}return Y.then(I=>{for(const q of I||[])q.status==="rejected"&&D(q.reason);return p().catch(D)})},Kt=typeof window<"u"&&window.parent!==window;function Yd(o){if(!o||typeof o!="object")return null;const p=o;if(typeof p.dark!="boolean")return null;const T={};if(p.tokens&&typeof p.tokens=="object")for(const[v,Y]of Object.entries(p.tokens))typeof Y=="string"&&(T[v]=Y);return{dark:p.dark,lang:typeof p.lang=="string"&&p.lang?p.lang:"en",tokens:T}}const Vi=new Set;let ps=!1,Ts=!1,ji=null;const Ld=typeof window<"u"&&typeof document<"u"?Bd(()=>import("./magpie-bridge-CFX0m8VY.js"),[],import.meta.url).catch(()=>{}):Promise.resolve(void 0);function wd(){return typeof window>"u"?void 0:window.magpie}function xi(o){const p=Yd(o);if(p){ji=p,document.documentElement.dataset.magpie="connected";for(const T of Vi)try{T(p)}catch{}}}function Gd(){ps||Ts||!Kt||(Ts=!0,Ld.then(()=>{const o=wd();o&&(ps=!0,o.onTheme?.(xi),o.ready?.then(xi,()=>{}),o.theme&&xi(o.theme))}))}function Qd(o){return Kt?(Vi.add(o),ji&&o(ji),Gd(),()=>Vi.delete(o)):()=>{}}var Xd=Ms();function Ju({label:o,value:p,options:T,onChange:v,disabled:Y=!1}){const I=`app-menu-${i.useId().replace(/:/g,"")}`,q=i.useRef(null),j=i.useRef(null),_=i.useRef(null),O=i.useRef(!0),[S,C]=i.useState(!1),[al,vl]=i.useState(null),Sl=Math.max(0,T.findIndex(V=>V.value===p)),[J,zl]=i.useState(Sl);i.useEffect(()=>zl(Sl),[Sl]),i.useLayoutEffect(()=>{if(!S)return;const V=()=>{if(!j.current||!_.current)return;const R=j.current.getBoundingClientRect(),nl=8,wl=4,lt=Math.min(Math.max(R.width,170),Math.max(0,window.innerWidth-nl*2)),$l=Math.max(0,window.innerHeight-R.bottom-wl-nl),Jl=Math.max(0,R.top-wl-nl),rt=Math.min(280,_.current.scrollHeight+2),At=$l$l,Dl=Math.min(280,At?Jl:$l),x=Math.min(rt,Dl);vl({top:At?R.top-wl-x:R.bottom+wl,left:Math.max(nl,Math.min(R.left,window.innerWidth-nl-lt)),width:lt,maxHeight:Dl})};V(),window.addEventListener("resize",V);const ol=R=>{R.target!==_.current&&V()};return window.addEventListener("scroll",ol,!0),()=>{window.removeEventListener("resize",V),window.removeEventListener("scroll",ol,!0)}},[S,T.length]),i.useEffect(()=>{S&&_.current?.focus()},[S]),i.useEffect(()=>{if(!S||!_.current||!O.current)return;const V=_.current.querySelector(`[id="${I}-option-${J}"]`);if(!V)return;const ol=V.offsetTop,R=ol+V.offsetHeight;ol<_.current.scrollTop?_.current.scrollTop=ol:R>_.current.scrollTop+_.current.clientHeight&&(_.current.scrollTop=R-_.current.clientHeight)},[J,I,S]),i.useEffect(()=>{if(!S)return;const V=ol=>{!q.current?.contains(ol.target)&&!_.current?.contains(ol.target)&&C(!1)};return document.addEventListener("pointerdown",V),()=>document.removeEventListener("pointerdown",V)},[S]);const Ll=V=>{const ol=T[V];ol&&(zl(V),v(ol.value),C(!1),j.current?.focus())},ql=V=>{T.length&&zl(ol=>(ol+V+T.length)%T.length)},st=V=>{if(O.current=!0,V.key==="Escape"){V.preventDefault(),C(!1),j.current?.focus();return}V.key==="ArrowDown"||V.key==="ArrowRight"?(V.preventDefault(),ql(1)):V.key==="ArrowUp"||V.key==="ArrowLeft"?(V.preventDefault(),S||C(!0),ql(-1)):V.key==="Home"?(V.preventDefault(),zl(0)):V.key==="End"?(V.preventDefault(),zl(Math.max(0,T.length-1))):V.key==="Tab"?C(!1):(V.key==="Enter"||V.key===" ")&&(V.preventDefault(),Ll(J))};return r.jsxs("div",{className:"app-menu",ref:q,children:[r.jsxs("button",{ref:j,type:"button",className:"app-menu-trigger","aria-label":o,"aria-haspopup":"listbox","aria-controls":I,"aria-expanded":S,disabled:Y,onClick:()=>{O.current=!0,zl(Sl),C(V=>!V)},onKeyDown:V=>{V.key==="ArrowDown"||V.key==="ArrowUp"||V.key==="Enter"||V.key===" "?(V.preventDefault(),O.current=!0,zl(Sl),C(!0)):V.key==="Escape"&&C(!1)},children:[r.jsx("span",{children:T.find(V=>V.value===p)?.label??p}),r.jsx("span",{className:"app-menu-chevron","aria-hidden":"true",children:"⌄"})]}),S&&Xd.createPortal(r.jsx("div",{id:I,ref:_,className:"app-menu-list",role:"listbox","aria-label":o,"aria-activedescendant":`${I}-option-${J}`,tabIndex:0,style:al?{...al,visibility:"visible"}:{visibility:"hidden"},onKeyDown:st,onBlur:V=>{!q.current?.contains(V.relatedTarget)&&!_.current?.contains(V.relatedTarget)&&C(!1)},children:T.map((V,ol)=>r.jsxs("button",{id:`${I}-option-${ol}`,type:"button",role:"option","aria-selected":V.value===p,className:[V.value===p?"selected":"",ol===J?"active":""].filter(Boolean).join(" "),tabIndex:-1,onMouseMove:R=>{!R.movementX&&!R.movementY||(O.current=!1,zl(ol))},onClick:()=>Ll(ol),children:[r.jsx("span",{children:V.label}),V.value===p&&r.jsx("span",{"aria-hidden":"true",children:"✓"})]},V.value))}),document.body)]})}function Di(o){const p=(o||"").toLowerCase().replaceAll("_","-").split("-");return p[0]!=="zh"?"en":p.includes("hans")?"zh-Hans":p.includes("hant")||p.some(T=>["tw","hk","mo"].includes(T))?"zh-Hant":"zh-Hans"}const Ui=o=>new URL(o.replace(/^\//,""),document.baseURI).toString(),S0=()=>window.__FINGERPRINT__?.token;async function g0(o,p){const T=new Headers(p?.headers);S0()&&T.set("Authorization",`Bearer ${S0()}`),p?.body&&T.set("content-type","application/json");const v=await fetch(Ui(o),{...p,headers:T});if(v.status===401&&location.reload(),!v.ok){const Y=await v.json().catch(()=>null);throw new Error(Y?.error||`${v.status} ${v.statusText}`)}return v.json()}const Kd={locale:"zh-Hans",detect:"指纹检测",history:"检测历史",about:"关于",settings:"运行设置",ready:"服务已连接",offline:"服务离线",start:"开始检测",cancel:"取消任务",search:"搜索模型",selected:"已选择",noModels:"暂无可用模型",provider:"提供商",model:"模型",account:"账号",protocol:"协议",effort:"推理强度",tier:"服务等级",strict:"完整样本",targetParallel:"模型并行",sampleParallel:"样本并行",deadline:"超时(秒)",estimated:"预计请求",live:"实时进度",results:"检测结果",candidates:"候选排名",details:"样本详情",export:"导出 JSON",demo:"示例数据",clear:"清空选择",completed:"已完成",running:"运行中",failed:"失败",queued:"排队中",cancelled:"已取消"},Jd={locale:"zh-Hant",detect:"指紋檢測",history:"檢測歷史",about:"關於",settings:"執行設定",ready:"服務已連線",offline:"服務離線",start:"開始檢測",cancel:"取消任務",search:"搜尋模型",selected:"已選擇",noModels:"暫無可用模型",provider:"提供者",model:"模型",account:"帳號",protocol:"協定",effort:"推理強度",tier:"服務等級",strict:"完整樣本",targetParallel:"模型並行",sampleParallel:"樣本並行",deadline:"逾時(秒)",estimated:"預計請求",live:"即時進度",results:"檢測結果",candidates:"候選排名",details:"樣本詳情",export:"匯出 JSON",demo:"示例資料",clear:"清除選擇",completed:"已完成",running:"執行中",failed:"失敗",queued:"排隊中",cancelled:"已取消"},Fd={locale:"en",detect:"Fingerprint",history:"History",about:"About",settings:"Run settings",ready:"Service connected",offline:"Service offline",start:"Start detection",cancel:"Cancel job",search:"Search models",selected:"selected",noModels:"No models available",provider:"Provider",model:"Model",account:"Account",protocol:"Protocol",effort:"Reasoning effort",tier:"Service tier",strict:"Complete samples",targetParallel:"Model parallelism",sampleParallel:"Sample parallelism",deadline:"Deadline (sec)",estimated:"Estimated requests",live:"Live progress",results:"Results",candidates:"Candidate ranking",details:"Sample details",export:"Export JSON",demo:"Demo data",clear:"Clear selection",completed:"Completed",running:"Running",failed:"Failed",queued:"Queued",cancelled:"Cancelled"},E0=o=>!["queued","running"].includes(o),Sn=(o,p,T)=>Number.isInteger(Number(o))&&Number(o)>=p&&Number(o)<=T,bn=(o,p)=>({completed:o.completed,running:o.running,failed:o.failed,queued:o.queued,cancelled:o.cancelled,interrupted:o.locale==="en"?"Interrupted":o.locale==="zh-Hant"?"已中斷":"已中断",scored:o.locale==="en"?"Scored":o.locale==="zh-Hant"?"已評分":"已评分",partial:o.locale==="en"?"Partial":o.locale==="zh-Hant"?"部分樣本":"部分样本",unscorable:o.locale==="en"?"Unscorable":o.locale==="zh-Hant"?"不可評分":"不可评分",not_model:o.locale==="en"?"Unexpected sequence":o.locale==="zh-Hant"?"序列不符合檢測假設":"序列不符合检测假设",complete:o.locale==="en"?"Complete":(o.locale==="zh-Hant","完成"),truncated:o.locale==="en"?"Truncated":o.locale==="zh-Hant"?"已截斷":"已截断",waiting:o.locale==="en"?"Waiting":o.locale==="zh-Hant"?"等待回應":"等待响应",streaming:o.locale==="en"?"Streaming":(o.locale==="zh-Hant","接收中")})[p]||p,K=(o,p,T,v)=>o.locale==="en"?v:o.locale==="zh-Hant"?T:p;function $d(){const[o,p]=i.useState(()=>{try{const N=Kt?null:localStorage.getItem("fp-lang");return Di(N||window.__FINGERPRINT__?.lang)}catch{return Di(window.__FINGERPRINT__?.lang)}}),T=o==="en"?Fd:o==="zh-Hant"?Jd:Kd,[v,Y]=i.useState(()=>{try{return!Kt&&localStorage.getItem("fp-theme")||window.__FINGERPRINT__?.theme||"system"}catch{return window.__FINGERPRINT__?.theme||"system"}}),[D,I]=i.useState(null),[q,j]=i.useState(""),[_,O]=i.useState("detect"),[S,C]=i.useState(null),[al,vl]=i.useState([]),[Sl,J]=i.useState(""),[zl,Ll]=i.useState("all"),[ql,st]=i.useState([]),[V,ol]=i.useState(""),[R,nl]=i.useState({api:"auto",effort:"",serviceTier:"default",strict:!1,targetParallel:2,sampleParallel:3,deadlineSeconds:300}),[wl,lt]=i.useState(!1),[$l,Jl]=i.useState(null),[rt,At]=i.useState(!1),[Dl,x]=i.useState(!1),F=Sn(R.targetParallel,1,3)&&Sn(R.sampleParallel,1,3)&&Sn(R.deadlineSeconds,10,900);i.useEffect(()=>{const N=matchMedia("(prefers-color-scheme: dark)"),B=()=>{document.documentElement.dataset.theme=v==="system"?N.matches?"dark":"light":v};B(),N.addEventListener("change",B);try{Kt||localStorage.setItem("fp-theme",v)}catch{}return()=>N.removeEventListener("change",B)},[v]),i.useEffect(()=>{document.documentElement.lang=o;try{Kt||localStorage.setItem("fp-lang",o)}catch{}},[o]),i.useEffect(()=>{const N=B=>{if(B.source!==window.parent)return;const gl=B.data;gl?.magpie===1&&gl.event==="action"&&gl.data?.provider?.id&&(Ll(gl.data.provider.id),O("detect"))};return window.addEventListener("message",N),()=>window.removeEventListener("message",N)},[]),i.useEffect(()=>Qd(N=>{Y(N.dark?"dark":"light");const B=Di(N.lang);document.documentElement.lang=B,p(B)}),[]);const $=async()=>{j("");try{const N=await g0("api/bootstrap");I(N),vl(N.jobs||[]),C(B=>B||N.jobs.find(gl=>!E0(gl.state))||null),window.__FINGERPRINT__?.initialProvider&&Ll(window.__FINGERPRINT__.initialProvider),j(N.gateway.error||"")}catch(N){j(String(N))}},Al=async()=>{if(!Dl){x(!0),j("");try{const N=await g0("api/bank/download",{method:"POST"});I(B=>B&&{...B,bank:N.bank,bankStatus:N.bankStatus,bankError:N.error}),N.error&&j(N.error)}catch(N){j(String(N))}finally{x(!1)}}};i.useEffect(()=>{$()},[]),i.useEffect(()=>{if(!S||E0(S.state))return;const N=new AbortController,B=S.id;return(async()=>{let _l=!1;for(;!N.signal.aborted&&!_l;){try{const Ol=await fetch(Ui(`api/jobs/${B}/events`),{headers:{Authorization:`Bearer ${S0()}`},signal:N.signal});if(Ol.status===401&&location.reload(),!Ol.ok||!Ol.body)throw new Error(`Progress connection: HTTP ${Ol.status}`);const pl=Ol.body.getReader(),jt=new TextDecoder;let Jt="";try{for(;!N.signal.aborted;){const Ft=await pl.read();if(Ft.done)break;Jt+=jt.decode(Ft.value,{stream:!0});let Oe;for(;(Oe=Jt.indexOf(` + +`))>=0;){const _a=Jt.slice(0,Oe);Jt=Jt.slice(Oe+2);const me=_a.split(` +`).find($t=>$t.startsWith("data: "));if(!me)continue;const na=JSON.parse(me.slice(6));C($t=>$t?.id===B?na:$t),vl($t=>[na,...$t.filter(An=>An.id!==B)]),_l=E0(na.state)}}}finally{await pl.cancel().catch(()=>{})}}catch(Ol){N.signal.aborted||j(String(Ol))}!_l&&!N.signal.aborted&&await new Promise(Ol=>setTimeout(Ol,1500))}})(),()=>N.abort()},[S?.id]);const fl=D?.models||[],pt=i.useMemo(()=>["all",...Array.from(new Set(fl.map(N=>N.provider)))],[fl]),Vt=fl.filter(N=>(zl==="all"||N.provider===zl)&&`${N.name} ${N.id}`.toLowerCase().includes(Sl.toLowerCase())),Tt=fl.filter(N=>ql.includes(N.id)),m=Tt[0]?.efforts.filter(N=>Tt.every(B=>B.efforts.includes(N)))||[],z=m.includes(R.effort)?R.effort:"",G=ql.length*3,Q=N=>st(B=>B.includes(N)?B.filter(gl=>gl!==N):B.length<24?[...B,N]:B),el=(N,B)=>nl(gl=>({...gl,[N]:B})),dl=async()=>{if(!ql.length||rt)return;if(V&&new Set(Tt.map(B=>B.provider)).size>1){j(K(T,"固定账号时请只选择同一提供商的模型。","固定帳號時請只選擇同一提供者的模型。","Select models from one provider when pinning an account."));return}At(!0),j("");const N={targets:ql.map(B=>({model:B,...V?{account:V}:{}})),api:R.api,effort:z,serviceTier:R.serviceTier,strict:R.strict,targetParallel:Number(R.targetParallel),sampleParallel:Number(R.sampleParallel),deadlineSeconds:Number(R.deadlineSeconds)};try{const B=await g0("api/jobs",{method:"POST",body:JSON.stringify(N)});C(B),vl(gl=>[B,...gl.filter(_l=>_l.id!==B.id)]),Jl(B.results[0]?.id||null)}catch(B){j(String(B))}finally{At(!1)}},ml=async N=>{try{const B=await g0(`api/jobs/${N}/cancel`,{method:"POST"});C(gl=>gl?.id===N?B:gl),vl(gl=>gl.map(_l=>_l.id===N?B:_l))}catch(B){j(String(B))}},w=async N=>{try{const B=await fetch(Ui(`api/jobs/${N}/export`),{headers:S0()?{Authorization:`Bearer ${S0()}`}:{}});if(!B.ok)throw new Error("Export failed");const gl=await B.blob(),_l=document.createElement("a");_l.href=URL.createObjectURL(gl),_l.download=`fingerprint-${N}.json`,_l.click(),setTimeout(()=>URL.revokeObjectURL(_l.href),1e3)}catch(B){j(String(B))}},k=async N=>{try{await g0(`api/jobs/${N}`,{method:"DELETE"}),vl(B=>B.filter(gl=>gl.id!==N)),S?.id===N&&C(null)}catch(B){j(String(B))}};return r.jsxs("div",{className:`app-shell ${Kt?"embedded":"standalone"}`,children:[!Kt&&r.jsx("h1",{className:"standalone-title",children:"Fingerprint"}),r.jsxs("div",{className:"page-tools",children:[r.jsxs("nav",{className:"segs","aria-label":K(T,"指纹检测视图","指紋檢測檢視","Fingerprint views"),role:"tablist",onKeyDown:N=>{if(["ArrowLeft","ArrowRight","Home","End"].includes(N.key)){N.preventDefault();const B=["detect","history","about"],gl=B.indexOf(_),_l=N.key==="Home"?B[0]:N.key==="End"?B[2]:B[(gl+(N.key==="ArrowRight"?1:2))%B.length];O(_l),document.getElementById(`tab-${_l}`)?.focus()}},children:[r.jsx("button",{className:`opt ${_==="detect"?"on":""}`,id:"tab-detect",role:"tab","aria-selected":_==="detect","aria-controls":"fingerprint-panel",tabIndex:_==="detect"?0:-1,onClick:()=>O("detect"),children:T.detect}),r.jsxs("button",{className:`opt ${_==="history"?"on":""}`,id:"tab-history",role:"tab","aria-selected":_==="history","aria-controls":"fingerprint-panel",tabIndex:_==="history"?0:-1,onClick:()=>O("history"),children:[T.history,al.length>0&&r.jsx("span",{className:"tab-count",children:al.length})]}),r.jsx("button",{className:`opt ${_==="about"?"on":""}`,id:"tab-about",role:"tab","aria-selected":_==="about","aria-controls":"fingerprint-panel",tabIndex:_==="about"?0:-1,onClick:()=>O("about"),children:T.about})]}),r.jsxs("div",{className:"page-status",children:[D?.demo?r.jsx("span",{className:"badge",children:T.demo}):r.jsxs("span",{className:"service-dot",role:"status",children:[r.jsx("i",{className:D?.gateway.reachable?"":"bad"}),D?D.gateway.reachable?T.ready:T.offline:q?T.offline:K(T,"正在连接…","正在連線…","Connecting…")]}),r.jsx("button",{className:"icon icon-button",onClick:$,"aria-label":K(T,"刷新模型与检测历史","重新整理模型與檢測歷史","Refresh models and history"),title:K(T,"刷新","重新整理","Refresh"),children:r.jsx(bs,{size:15})}),!Kt&&r.jsxs(r.Fragment,{children:[r.jsx("button",{className:"text",onClick:()=>p(o==="en"?"zh-Hans":o==="zh-Hans"?"zh-Hant":"en"),children:o==="en"?"简体中文":o==="zh-Hans"?"繁體中文":"English"}),r.jsx("button",{className:"icon icon-button","aria-label":K(T,`主题:${v}`,`主題:${v}`,`Theme: ${v}`),onClick:()=>Y(v==="light"?"dark":v==="dark"?"system":"light"),children:v==="system"?r.jsx(Cd,{size:15}):v==="dark"?r.jsx(xd,{size:15}):r.jsx(Vd,{size:15})})]})]})]}),r.jsxs("main",{className:"main",id:"fingerprint-panel",role:"tabpanel","aria-labelledby":`tab-${_}`,children:[q&&r.jsxs("div",{className:"notice error",role:"alert",children:[r.jsx(Fs,{size:18}),r.jsx("span",{children:q}),r.jsx("button",{onClick:$,"aria-label":K(T,"重新连接","重新連線","Reconnect"),children:r.jsx(bs,{size:16})})]}),_==="history"?r.jsx(kd,{history:al,t:T,onCancel:ml,onDownload:w,onDelete:k}):_==="about"?r.jsx(Id,{t:T}):r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"intro",children:[r.jsx("p",{children:K(T,"选择模型,用同一组挑战比较响应指纹。","選擇模型,用同一組挑戰比較回應指紋。","Select models to compare their fingerprints with shared challenges.")}),r.jsxs("div",{className:"bank-tools",children:[D?.bank?r.jsxs("span",{title:D.bank.builtAt,children:[K(T,"参考库","參考庫","Reference bank")," ·"," ",D.bank.modelCount??"—"," ",K(T,"个模型","個模型","models")]}):r.jsx("span",{children:D?.bankStatus?.state==="cached"?K(T,"参考数据已缓存,将在运行时读取","參考資料已快取,執行時讀取","Reference data cached; it will be read when a run starts"):K(T,"参考数据未下载","參考資料尚未下載","Reference data not downloaded")}),r.jsxs("button",{className:"ghost-button bank-download",type:"button",onClick:Al,disabled:!D||Dl||rt,children:[r.jsx(Ri,{size:14}),Dl?K(T,"下载中…","下載中…","Downloading…"):K(T,"下载参考数据","下載參考資料","Download reference data")]}),D?.bankError&&r.jsx("span",{className:"bank-error",role:"alert",children:D.bankError})]})]}),r.jsx("p",{className:"source-note",children:K(T,"默认参考源:lm.ikale.io,备用 cdn.jsdmirror.com。仅主动下载或无缓存时启动检测才会连接;来源站点会看到 IP,不接收凭证、提示词或模型回答。","預設參考來源:lm.ikale.io,備用 cdn.jsdmirror.com。僅主動下載或無快取時開始檢測才會連線;來源網站會看到 IP,不接收憑證、提示詞或模型回答。","Default reference sources: lm.ikale.io, with cdn.jsdmirror.com as fallback. Contacted only on download or an uncached run; these hosts see your IP, but receive no credentials, prompts or replies.")}),D?.demo&&r.jsxs("div",{className:"notice demo",children:[r.jsx(_d,{size:15}),r.jsx("span",{children:K(T,"示例数据,可直接试用检测流程。","示例資料,可直接試用檢測流程。","Demo data. Try the detection workflow.")})]}),r.jsxs("div",{className:"workspace-grid",children:[r.jsxs("section",{className:"list panel models-panel",children:[r.jsxs("div",{className:"panel-title",children:[r.jsx("div",{children:r.jsxs("h2",{children:[K(T,"选择模型","選擇模型","Models")," ",r.jsx("span",{className:"section-count",children:fl.length})]})}),r.jsxs("span",{className:"selection-count",children:[ql.length," ",T.selected]}),r.jsx("button",{className:"text ghost-button",onClick:()=>st([]),disabled:!ql.length,children:T.clear})]}),r.jsxs("div",{className:"filter-row",children:[r.jsxs("div",{className:"search",children:[r.jsx(Zd,{size:17}),r.jsx("input",{placeholder:T.search,"aria-label":T.search,value:Sl,onChange:N=>J(N.target.value)})]}),r.jsx(Ju,{label:T.provider,value:zl,options:pt.map(N=>({value:N,label:N==="all"?T.provider:N})),onChange:Ll})]}),r.jsx("div",{className:"model-list",children:Vt.length?Vt.map(N=>r.jsxs("label",{className:`row model model-row ${ql.includes(N.id)?"selected":""}`,children:[r.jsx("input",{type:"checkbox","aria-label":`${N.name} · ${N.id}`,checked:ql.includes(N.id),onChange:()=>Q(N.id)}),r.jsxs("span",{className:"who model-name",children:[r.jsx("strong",{className:"name",children:N.name}),r.jsx("small",{className:"sub",children:N.id})]}),r.jsx("span",{className:"model-endpoint",children:N.nativeEndpoints?.[0]?.replace("/v1/","")||"chat"})]},N.id)):r.jsxs("div",{className:"empty-state",children:[r.jsx(Od,{size:26}),r.jsx("p",{children:D?T.noModels:K(T,"正在加载模型与参考库…","正在載入模型與參考庫…","Loading models and reference data…")})]})})]}),r.jsxs("section",{className:"list panel config-panel",children:[r.jsx("div",{className:"panel-title",children:r.jsx("div",{children:r.jsx("h2",{children:T.settings})})}),r.jsxs("label",{children:[T.account,r.jsx("input",{value:V,list:"account-options",onChange:N=>ol(N.target.value),placeholder:K(T,"可选:账号 ID 或名称","可選:帳號 ID 或名稱","Optional account ID or name")}),r.jsx("datalist",{id:"account-options",children:(D?.accounts||[]).filter(N=>!Tt.length||Tt.some(B=>B.provider===N.provider)).map(N=>r.jsxs("option",{value:N.id,children:[N.name," · ",N.provider]},`${N.provider}/${N.id}`))})]}),r.jsxs("div",{className:"two-col",children:[r.jsxs("label",{children:[T.protocol,r.jsx(Ju,{label:T.protocol,value:R.api,options:[{value:"auto",label:"Auto"},{value:"chat_completions",label:"chat_completions"},{value:"responses",label:"responses"},{value:"messages",label:"messages"}],onChange:N=>el("api",N)})]}),r.jsxs("label",{children:[T.effort,r.jsx(Ju,{label:T.effort,value:z,options:[{value:"",label:"Default"},...m.map(N=>({value:N,label:N}))],onChange:N=>el("effort",N)})]})]}),r.jsxs("div",{className:"switch-row",children:[r.jsxs("div",{children:[r.jsx("strong",{children:K(T,"完整样本","完整樣本","Complete samples")}),r.jsx("small",{children:K(T,"仅接受完整的 3 条采样","僅接受完整的 3 條取樣","Require all three samples")})]}),r.jsx("button",{className:`lib-switch switch ${R.strict?"on":""}`,role:"switch","aria-label":T.strict,"aria-checked":R.strict,onClick:()=>el("strict",!R.strict),children:r.jsx("i",{})})]}),r.jsxs("button",{className:"advanced-toggle","aria-expanded":wl,"aria-controls":"run-advanced",onClick:()=>lt(!wl),children:[wl?"−":"+"," ",K(T,"高级并行与超时","進階並行與逾時","Concurrency & deadline")]}),wl&&r.jsxs("div",{className:"advanced",id:"run-advanced",children:[r.jsxs("label",{children:[T.tier,r.jsx(Ju,{label:T.tier,value:R.serviceTier,options:[{value:"default",label:"Default"},{value:"flex",label:"Flex"},{value:"fast",label:"Fast"},{value:"ultrafast",label:"Ultra-fast"}],onChange:N=>el("serviceTier",N)})]}),r.jsxs("div",{className:"three-col",children:[r.jsxs("label",{children:[T.targetParallel,r.jsx("input",{type:"number",min:"1",max:"3","aria-invalid":!Sn(R.targetParallel,1,3),value:R.targetParallel,onChange:N=>el("targetParallel",N.target.value)})]}),r.jsxs("label",{children:[T.sampleParallel,r.jsx("input",{type:"number",min:"1",max:"3","aria-invalid":!Sn(R.sampleParallel,1,3),value:R.sampleParallel,onChange:N=>el("sampleParallel",N.target.value)})]}),r.jsxs("label",{children:[T.deadline,r.jsx("input",{type:"number",min:"10",max:"900","aria-invalid":!Sn(R.deadlineSeconds,10,900),value:R.deadlineSeconds,onChange:N=>el("deadlineSeconds",N.target.value)})]})]}),!F&&r.jsx("p",{className:"muted-line",role:"alert",children:K(T,"并行数须为 1–3 的整数,超时须为 10–900 的整数秒。","並行數須為 1–3 的整數,逾時須為 10–900 的整數秒。","Parallelism must be an integer from 1–3; deadline must be 10–900 whole seconds.")})]}),r.jsxs("div",{className:"run-footer",children:[r.jsxs("div",{children:[r.jsx("span",{children:T.estimated}),r.jsx("strong",{children:G}),r.jsxs("small",{children:["3 × ",ql.length||0]})]}),r.jsxs("button",{className:"text primary primary-button",disabled:!ql.length||!F||rt||al.some(N=>!E0(N.state)),onClick:dl,children:[r.jsx(Dd,{size:17,weight:"fill"}),T.start]})]})]})]}),S&&r.jsx($s,{job:S,t:T,expanded:$l,setExpanded:Jl,onCancel:()=>ml(S.id),onDownload:()=>w(S.id)})]})]})]})}function $s({job:o,t:p,expanded:T,setExpanded:v,onCancel:Y,onDownload:D}){const[I,q]=i.useState(!1),[j,_]=i.useState(!1),O=i.useRef(null),S=o.results.length||o.config.targets.length,C=o.results.filter(J=>J.state==="completed").length,al=o.results.flatMap(J=>J.samples).filter(J=>!["queued","waiting","streaming"].includes(J.state)).length,vl=JSON.stringify({schema:"magpie-fingerprint/v1",...o},null,2),Sl=async()=>{try{if(!navigator.clipboard)throw new Error("Clipboard unavailable");await navigator.clipboard.writeText(vl),_(!0)}catch{O.current?.focus(),O.current?.select(),_(document.execCommand("copy"))}};return r.jsxs("section",{className:"results",children:[r.jsxs("div",{className:"results-head",children:[r.jsx("div",{children:r.jsx("h2",{children:E0(o.state)?p.results:p.live})}),r.jsxs("div",{className:"result-actions",children:[r.jsxs("span",{className:`status ${o.state}`,children:[o.state==="running"&&r.jsx(xs,{className:"spin",size:14})," ",bn(p,o.state)]}),["queued","running"].includes(o.state)?r.jsxs("button",{className:"danger-button",onClick:Y,children:[r.jsx(Rd,{size:16}),p.cancel]}):r.jsxs("button",{className:"ghost-button",onClick:()=>q(!0),children:[r.jsx(Ri,{size:16}),p.export]})]})]}),r.jsx("div",{className:"progress-track",children:r.jsx("i",{style:{width:`${S?Math.round(al/(S*3)*100):0}%`}})}),r.jsxs("div",{className:"result-meta",children:[r.jsxs("span",{children:[al,"/",S*3," ",K(p,"条采样已结束","條取樣已結束","samples finished")," · ",C,"/",S," ",K(p,"个模型完成","個模型完成","models completed")]}),r.jsxs("span",{children:[o.demo&&r.jsx("b",{className:"demo-chip",children:p.demo}),new Date(o.createdAt).toLocaleString()]})]}),r.jsxs("div",{className:"run-context",children:[r.jsxs("span",{title:o.bank.builtAt,children:[K(p,"参考库","參考庫","Reference"),": ",o.bank.builtAt.slice(0,19)]}),r.jsxs("span",{children:["SDK ",o.bank.sdk]}),r.jsxs("span",{children:[o.config.effort||"default"," · ",o.config.serviceTier]})]}),o.error&&r.jsx("div",{className:"notice error",role:"alert",children:o.error}),r.jsxs("details",{className:"challenge-details",children:[r.jsx("summary",{children:K(p,"本批次共享的 3 个挑战","本批次共用的 3 個挑戰","Three challenges shared across this batch")}),o.challenges.map((J,zl)=>r.jsxs("div",{children:[r.jsxs("b",{children:[zl+1," · ",J.expected_count," ",K(p,"个数字","個數字","numbers")]}),r.jsx("p",{children:J.prompt})]},J.id))]}),o.results.map(J=>r.jsx(Wd,{r:J,demo:o.demo,t:p,expanded:T===J.id,toggle:()=>v(T===J.id?null:J.id)},J.id)),I&&r.jsxs("div",{className:"export-sheet",role:"dialog","aria-modal":"true","aria-label":p.export,onKeyDown:J=>{J.key==="Escape"&&q(!1)},children:[r.jsxs("div",{className:"export-head",children:[r.jsx("strong",{children:p.export}),r.jsx("button",{className:"icon icon-button","aria-label":K(p,"关闭导出","關閉匯出","Close export"),onClick:()=>q(!1),children:"×"})]}),r.jsx("textarea",{ref:O,"aria-label":"JSON",autoFocus:!0,readOnly:!0,value:vl}),r.jsxs("div",{children:[r.jsxs("button",{className:"text primary primary-button",onClick:Sl,children:[r.jsx(Rs,{size:16})," ",j?K(p,"已复制","已複製","Copied"):K(p,"复制 JSON","複製 JSON","Copy JSON")]}),window.self===window.top&&r.jsxs("button",{className:"ghost-button",onClick:D,children:[r.jsx(Ri,{size:16}),K(p,"下载文件","下載檔案","Download file")]}),r.jsx("small",{children:K(p,"也可选中文本后手动复制保存。","也可選取文字後手動複製儲存。","You can also select and copy the text manually.")})]})]})]})}function Wd({r:o,demo:p,t:T,expanded:v,toggle:Y}){const D=o.analysis,I=D?.results||[],q=D?.decision;return r.jsxs("div",{className:`result-card ${o.state}`,children:[r.jsxs("button",{className:"result-summary","aria-expanded":v,"aria-controls":`result-${o.id}`,onClick:Y,children:[r.jsx("span",{className:"result-icon",children:o.state==="completed"?r.jsx(Hd,{size:20}):o.state==="failed"?r.jsx(Fs,{size:20}):r.jsx(xs,{size:20,className:o.state==="running"?"spin":""})}),r.jsxs("span",{className:"result-model",children:[r.jsx("strong",{children:o.target.model}),r.jsxs("small",{children:[o.target.account?`${o.target.accountName||o.target.account} · `:"",o.api," · ",bn(T,o.state)]})]}),r.jsxs("span",{className:"result-label",children:[D?.prediction_name||(q?bn(T,q):"—"),r.jsx("small",{children:p?T.demo:q?bn(T,q):""})]}),r.jsx("span",{className:"evidence-caveat",children:K(T,"证据,不是证明","證據,不是證明","Evidence, not proof")}),r.jsx(_s,{size:17,className:v?"rotate":""})]}),v&&r.jsxs("div",{className:"result-body",id:`result-${o.id}`,children:[r.jsxs("div",{className:"candidate-head",children:[r.jsx("h3",{children:T.candidates}),r.jsx("span",{children:D?.probability_status==="reference_calibrated"?K(T,"参考库内概率","參考庫內機率","Within-bank probability"):K(T,"排名分数(非概率)","排名分數(非機率)","Ranking score (not probability)")})]}),I.length?I.slice(0,5).map((j,_)=>r.jsxs("div",{className:"candidate",children:[r.jsx("span",{children:_+1}),r.jsxs("div",{children:[r.jsxs("div",{className:"candidate-label",children:[r.jsx("strong",{children:j.display_name||j.model||"Unknown"}),r.jsx("em",{children:j.probability==null?j.score.toFixed(3):`${(j.probability*100).toFixed(1)}%`})]}),r.jsx("div",{className:"bar",children:r.jsx("i",{style:{width:`${j.probability==null?Math.max(6,100-_*18):Math.max(1,Math.min(100,j.probability*100))}%`}})})]})]},_)):r.jsx("div",{className:"muted-line",children:o.error||(q==="partial"?"Partial result":q==="unscorable"?"Unscorable":q==="not_model"?"Not a model reply":K(T,"暂未产生可评分候选。","暫未產生可評分候選。","No scored candidates yet."))}),D&&r.jsx("p",{className:"evidence-note",children:K(T,`有效样本 ${D.used_outputs}/3 · 家族 ${D.family_prediction_name||"—"}。概率仅在参考库候选之间分配,库外模型也可能得到相近候选。`,`有效樣本 ${D.used_outputs}/3 · 家族 ${D.family_prediction_name||"—"}。機率僅在參考庫候選之間分配,庫外模型也可能得到相近候選。`,`${D.used_outputs}/3 usable samples · Family ${D.family_prediction_name||"—"}. Probabilities cover reference-bank candidates only; an unseen model can still rank close.`)}),o.error&&r.jsx("p",{className:"notice error",children:o.error}),r.jsx("div",{className:"sample-grid",children:o.samples.map((j,_)=>r.jsxs("div",{className:"sample-tile",children:[r.jsxs("header",{children:[r.jsxs("b",{children:[K(T,"采样","取樣","Sample")," ",_+1]}),r.jsx("span",{className:`status ${j.state}`,children:bn(T,j.state)})]}),r.jsxs("strong",{children:[j.count,r.jsxs("small",{children:[" / ",j.expected_count]})]}),r.jsx("code",{children:o.provenance[_]?.model||K(T,"路由待确认","路由待確認","Route unverified")}),o.provenance[_]?.mismatch&&r.jsx("em",{children:K(T,"实际路由已变化","實際路由已變更","Route changed")}),j.error&&r.jsx("small",{children:j.error})]},_))}),r.jsxs("details",{children:[r.jsx("summary",{children:T.details}),r.jsx("pre",{children:JSON.stringify({samples:o.samples,provenance:o.provenance},null,2)})]})]})]})}function kd({history:o,t:p,onCancel:T,onDownload:v,onDelete:Y}){const[D,I]=i.useState(null),[q,j]=i.useState(null);return r.jsxs("div",{className:"history-page",children:[r.jsx("div",{className:"history-tools",children:r.jsx("p",{children:K(p,`本地保存了 ${o.length} 次检测`,`本機儲存了 ${o.length} 次檢測`,`${o.length} runs saved locally`)})}),r.jsx("div",{className:"list history-list",children:o.length?o.map(_=>r.jsxs("div",{className:"history-item",children:[r.jsxs("div",{className:"history-row",children:[r.jsxs("button",{"aria-expanded":D===_.id,"aria-controls":`history-${_.id}`,onClick:()=>{I(D===_.id?null:_.id),j(_.results[0]?.id||null)},children:[r.jsx("span",{className:`history-state ${_.state}`}),r.jsxs("span",{children:[r.jsxs("strong",{children:[_.config.targets[0]?.model||_.id.slice(0,12),_.config.targets.length>1?` +${_.config.targets.length-1}`:""]}),r.jsxs("small",{children:[new Date(_.createdAt).toLocaleString()," · ",_.config.targets.length," ",K(p,"个模型","個模型","models")," · ",_.id.slice(0,8)]})]}),r.jsx(_s,{className:D===_.id?"history-caret open":"history-caret",size:15})]}),r.jsx("span",{className:`status ${_.state}`,children:_.demo?p.demo:bn(p,_.state)}),r.jsx("button",{className:"icon icon-button danger-icon",title:K(p,"删除","刪除","Delete"),"aria-label":`${K(p,"删除检测记录","刪除檢測紀錄","Delete run")} ${_.id.slice(0,8)}`,onClick:()=>{D===_.id&&I(null),Y(_.id)},children:r.jsx(jd,{size:17})})]}),D===_.id&&r.jsx("div",{className:"history-detail",id:`history-${_.id}`,children:r.jsx($s,{job:_,t:p,expanded:q,setExpanded:j,onCancel:()=>T(_.id),onDownload:()=>v(_.id)})})]},_.id)):r.jsxs("div",{className:"empty-history",children:[r.jsx(Nd,{size:32}),r.jsx("p",{children:K(p,"还没有检测记录","還沒有檢測紀錄","No detection history yet")})]})})]})}function Id({t:o}){const[p,T]=i.useState(""),[v,Y]=i.useState(""),D=[{label:K(o,"项目仓库","專案儲存庫","Project repository"),url:"https://github.com/KaranocaVe/magpie-fingerprint"},{label:K(o,"上游指纹项目","上游指紋專案","Upstream fingerprint project"),url:"https://github.com/Ikaleio/lm-detector"}];i.useEffect(()=>{if(!p)return;const q=setTimeout(()=>T(""),2500);return()=>clearTimeout(q)},[p]);const I=async(q,j)=>{Y("");try{await navigator.clipboard.writeText(q),T(q)}catch{const _=document.getElementById(`about-address-${j}`),O=window.getSelection();if(_&&O){const C=document.createRange();C.selectNodeContents(_),O.removeAllRanges(),O.addRange(C)}let S=!1;try{S=document.execCommand("copy")}catch{}S?(O?.removeAllRanges(),T(q)):(T(""),Y(q))}};return r.jsxs("div",{className:"about-page",children:[r.jsxs("header",{className:"about-heading",children:[r.jsx("h2",{children:"Fingerprint"}),r.jsx("p",{children:K(o,"模型响应指纹检测","模型回應指紋檢測","Model response fingerprinting")})]}),r.jsx("ul",{className:"about-links",children:D.map((q,j)=>r.jsxs("li",{className:"about-link",children:[r.jsx(zd,{className:"about-github",size:20,"aria-hidden":"true"}),r.jsxs("div",{className:"about-link-content",children:[r.jsx("strong",{children:q.label}),Kt?r.jsx("span",{className:"about-url",id:`about-address-${j}`,children:q.url}):r.jsxs("a",{className:"about-url",href:q.url,target:"_blank",rel:"noopener noreferrer",children:[q.url,r.jsx(Td,{size:14,"aria-hidden":"true"})]}),Kt&&v===q.url&&r.jsx("span",{className:"about-copy-error",role:"status",children:K(o,"请复制选中的地址","請複製選取的網址","Copy the selected address")})]}),Kt&&r.jsxs("div",{className:"about-copy",children:[r.jsx("button",{className:"icon icon-button",onClick:()=>{I(q.url,j)},"aria-label":K(o,`复制${q.label}地址`,`複製${q.label}網址`,`Copy ${q.label} URL`),title:p===q.url?K(o,"已复制","已複製","Copied"):K(o,"复制地址","複製網址","Copy URL"),children:p===q.url?r.jsx(Md,{size:16}):r.jsx(Rs,{size:16})}),r.jsx("span",{className:"about-copy-status",role:"status",children:p===q.url&&K(o,"已复制","已複製","Copied")})]})]},q.url))})]})}td.createRoot(document.getElementById("root")).render(r.jsx($d,{})); diff --git a/packages/fingerprint/dist/ui/assets/index-DeacCGXr.css b/packages/fingerprint/dist/ui/assets/index-DeacCGXr.css deleted file mode 100644 index 043296b7..00000000 --- a/packages/fingerprint/dist/ui/assets/index-DeacCGXr.css +++ /dev/null @@ -1 +0,0 @@ -:root{--ease: cubic-bezier(.2, .8, .2, 1);--bg: #f4f4f6;--card: #ffffff;--card-2: #f9f9fb;--pill: #f1f1f4;--pill-hover: #e9e9ee;--seg-track: #e6e6eb;--seg-thumb: var(--card);--seg-edge: 0 1px 2px rgba(0, 0, 0, .14), 0 0 0 .5px rgba(0, 0, 0, .08);--ctl-fg: #63636b;--line: #e3e3e8;--line-2: #ececf0;--fg: #1c1c21;--fg-2: #4b4b53;--muted: #85858d;--faint: #b9b9c2;--accent: #4f46e5;--accent-soft: #eeedfd;--accent-fg: #ffffff;--sel: #ecebfb;--green: #189a58;--green-soft: #e4f6ec;--red: #d64545;--red-soft: #fbe9e9;--amber: #b45309;--amber-soft: #fbf0df;--drift: #ce2c31;--drift-soft: #feebec;--pop-bg: rgba(255, 255, 255, .94);--shadow: 0 16px 44px rgba(20, 22, 30, .16), 0 2px 8px rgba(20, 22, 30, .06), 0 0 0 .5px rgba(20, 22, 30, .1);--font: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", system-ui, sans-serif;--code: ui-monospace, "SF Mono", Menlo, Consolas, monospace;--logo-invert: 0;--tk-s: #1a7f45;--tk-k: #7c3aed;--tk-f: #1d4ed8;--tk-n: #b45309;--tk-v: #0e7490;--tk-o: #a21caf;--tk-c: #85858d;--c1: #4f46e5;--c2: #0ea5e9;--c3: #10b981;--c4: #f59e0b;--c5: #ec4899;--c6: #8b5cf6;--c7: #64748b}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg: #1a1a1e;--card: #232327;--card-2: #1f1f23;--pill: #2d2d33;--pill-hover: #36363d;--seg-track: rgba(255, 255, 255, .035);--seg-thumb: rgba(255, 255, 255, .15);--seg-edge: inset 0 .5px 0 rgba(255, 255, 255, .08), 0 1px 2px rgba(0, 0, 0, .3);--line: #333339;--line-2: #2c2c32;--fg: #ededf1;--fg-2: #b9b9c1;--muted: #8b8b94;--faint: #56565f;--ctl-fg: #a1a1aa;--accent: #a5b4fc;--accent-soft: #2b2c47;--accent-fg: #14142a;--sel: #33345a;--green: #6fd99b;--green-soft: #1e3a2b;--red: #f28b82;--red-soft: #45272a;--amber: #f2b544;--amber-soft: #3f3220;--drift: #ff9592;--drift-soft: #3b1219;--pop-bg: rgba(38, 38, 43, .96);--shadow: 0 16px 44px rgba(0, 0, 0, .55), 0 2px 8px rgba(0, 0, 0, .3), 0 0 0 .5px rgba(255, 255, 255, .1);--logo-invert: 1;--tk-s: #98d8a4;--tk-k: #c4b5fd;--tk-f: #93c5fd;--tk-n: #f2b544;--tk-v: #67e8f9;--tk-o: #f0abfc;--tk-c: #8b8b94;--c1: #a5b4fc;--c2: #7dd3fc;--c3: #6ee7b7;--c4: #fcd34d;--c5: #f9a8d4;--c6: #c4b5fd;--c7: #94a3b8}}:root[data-theme=dark]{--bg: #1a1a1e;--card: #232327;--card-2: #1f1f23;--pill: #2d2d33;--pill-hover: #36363d;--seg-track: rgba(255, 255, 255, .035);--seg-thumb: rgba(255, 255, 255, .15);--seg-edge: inset 0 .5px 0 rgba(255, 255, 255, .08), 0 1px 2px rgba(0, 0, 0, .3);--line: #333339;--line-2: #2c2c32;--fg: #ededf1;--fg-2: #b9b9c1;--muted: #8b8b94;--faint: #56565f;--ctl-fg: #a1a1aa;--accent: #a5b4fc;--accent-soft: #2b2c47;--accent-fg: #14142a;--sel: #33345a;--green: #6fd99b;--green-soft: #1e3a2b;--red: #f28b82;--red-soft: #45272a;--amber: #f2b544;--amber-soft: #3f3220;--drift: #ff9592;--drift-soft: #3b1219;--pop-bg: rgba(38, 38, 43, .96);--shadow: 0 16px 44px rgba(0, 0, 0, .55), 0 2px 8px rgba(0, 0, 0, .3), 0 0 0 .5px rgba(255, 255, 255, .1);--logo-invert: 1;--tk-s: #98d8a4;--tk-k: #c4b5fd;--tk-f: #93c5fd;--tk-n: #f2b544;--tk-v: #67e8f9;--tk-o: #f0abfc;--tk-c: #8b8b94;--c1: #a5b4fc;--c2: #7dd3fc;--c3: #6ee7b7;--c4: #fcd34d;--c5: #f9a8d4;--c6: #c4b5fd;--c7: #94a3b8}:root[data-colorblind="1"]{--c1: #0072b2;--c2: #e69f00;--c3: #009e73;--c4: #d55e00;--c5: #cc79a7;--c6: #56b4e9;--c7: #64748b}@media(prefers-color-scheme:dark){:root:not([data-theme=light])[data-colorblind="1"]{--c1: #56b4e9;--c2: #fbbf24;--c3: #2dd4bf;--c4: #fb7185;--c5: #e879f9;--c6: #f0e442;--c7: #94a3b8}}:root[data-theme=dark][data-colorblind="1"]{--c1: #56b4e9;--c2: #fbbf24;--c3: #2dd4bf;--c4: #fb7185;--c5: #e879f9;--c6: #f0e442;--c7: #94a3b8}*{box-sizing:border-box;margin:0;padding:0}button{font:inherit;color:inherit;background:none;border:0;cursor:default;appearance:none;-webkit-appearance:none;text-align:center}button:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:1px}input{font:inherit;color:var(--fg)}.icon{width:26px;height:26px;border-radius:7px;display:inline-flex;align-items:center;justify-content:center;color:var(--muted);transition:background .12s,color .12s}.icon:hover,.icon.on{background:var(--pill);color:var(--fg)}.list{background:var(--card);border:1px solid var(--line);border-radius:12px;overflow:hidden;flex:none}.row{display:flex;align-items:center;gap:9px;min-height:40px;padding:5px 9px 5px 11px}.row+.row,.editor+.row,.row+.editor{border-top:1px solid var(--line-2)}.row .who{min-width:0;flex:1 1 auto}.row .name{font-weight:500;letter-spacing:-.005em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.row .sub{font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}.row.model:hover{background:var(--card-2)}.row.model.selected{background:var(--sel)}.segs{position:relative;display:inline-flex;padding:2px;border-radius:7px;background:var(--pill);align-self:flex-start}.opt{position:relative;z-index:1;white-space:nowrap;height:22px;padding:0 10px;border-radius:5px;font-size:12px;color:var(--muted);transition:color .18s var(--ease),transform .14s var(--ease)}.opt.on{color:var(--fg)}.opt:hover:not(.on){color:var(--fg-2)}.text{font-size:12px;color:var(--ctl-fg);padding:3px 7px;border-radius:6px;transition:background .12s,color .12s;white-space:nowrap}.text.primary{color:var(--accent-fg);background:var(--accent);font-weight:500}.text.primary:hover{filter:brightness(1.08)}input[type=checkbox]{appearance:none;-webkit-appearance:none;width:14px;height:14px;flex:none;display:inline-grid;place-content:center;vertical-align:middle;border:1px solid var(--faint);border-radius:4px;background:var(--card);color:var(--accent-fg)}input[type=checkbox]:hover:not(:disabled){border-color:var(--muted)}input[type=checkbox]:checked,input[type=checkbox]:indeterminate{background:var(--accent);border-color:var(--accent)}input[type=checkbox]:before{content:"";width:10px;height:10px;background:currentColor;transform:scale(0);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'%3E%3Cpath d='M2 5.2l2 2L8 3' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'%3E%3Cpath d='M2 5.2l2 2L8 3' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat}input[type=checkbox]:checked:before{transform:scale(1)}input[type=checkbox]:indeterminate:before{transform:scale(1);-webkit-mask:none;mask:none;width:8px;height:1.6px;border-radius:1px}input[type=checkbox]:focus-visible{outline:2px solid var(--accent);outline-offset:1px}input[type=checkbox]:disabled{opacity:.45}.lib-switch{flex:none;position:relative;width:32px;height:19px;border-radius:10px;background:var(--line);transition:background .2s var(--ease)}.lib-switch i{position:absolute;top:2px;left:2px;width:15px;height:15px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #00000040;transition:transform .22s var(--ease)}.lib-switch.on{background:var(--fg)}.lib-switch.on i{transform:translate(13px);background:var(--card)}:root[data-theme=dark] .lib-switch.on i{background:var(--bg)}:root[data-magpie]{--bg: var(--magpie-bg);--card: var(--magpie-card);--fg: var(--magpie-fg);--fg-2: var(--magpie-fg-2);--muted: var(--magpie-muted);--faint: var(--magpie-faint);--line: var(--magpie-line);--accent: var(--magpie-accent);--accent-soft: var(--magpie-accent-soft);--accent-fg: var(--magpie-accent-fg);--green: var(--magpie-green);--red: var(--magpie-red);--amber: var(--magpie-amber);--font: var(--magpie-font);--code: var(--magpie-code);--pill: color-mix(in srgb, var(--fg) 5%, var(--card));--pill-hover: color-mix(in srgb, var(--fg) 9%, var(--card));--card-2: color-mix(in srgb, var(--bg) 55%, var(--card));--line-2: color-mix(in srgb, var(--line) 70%, transparent);--sel: var(--accent-soft)}html,body,#root{min-height:100%}body{display:block;height:auto;padding:0;overflow:auto;background:var(--bg);color:var(--fg);font:13px/1.4 var(--font);-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit}button{cursor:default}button:disabled{opacity:.45;cursor:default}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.app-menu{position:relative;min-width:0}.app-menu-trigger{display:inline-flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:32px;padding:6px 9px;border:1px solid var(--line);border-radius:6px;background:var(--card);color:var(--fg);text-align:left;cursor:pointer}.app-menu-trigger:hover{background:var(--pill-hover)}.app-menu-chevron{color:var(--muted);line-height:1}.app-menu-list{position:absolute;z-index:20;top:calc(100% + 4px);left:0;min-width:100%;max-height:280px;overflow:auto;padding:4px;border:1px solid var(--line);border-radius:8px;background:var(--card);box-shadow:0 8px 24px #00000029}.app-menu-list>button{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;padding:6px 8px;border:0;border-radius:5px;background:none;color:var(--fg);text-align:left;cursor:pointer}.app-menu-list>button:hover,.app-menu-list>button:focus-visible,.app-menu-list>button.selected,.app-menu-list>button.active{background:var(--accent-soft)}.app-shell{max-width:1232px;padding:0 16px 24px;margin:0 auto}.standalone{padding-top:20px}.standalone-title{font-size:18px;font-weight:600;margin:0 0 16px}.page-tools{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:48px}.segs{flex:none;align-self:center}.segs .opt{display:inline-flex;align-items:center;gap:7px;border:0;background:none}.segs .opt.on{background:var(--seg-thumb);box-shadow:var(--seg-edge)}.tab-count{color:var(--muted);font-size:10.5px;font-variant-numeric:tabular-nums}.page-status{display:flex;align-items:center;gap:8px}.service-dot{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--muted);white-space:nowrap}.service-dot i{width:5px;height:5px;border-radius:50%;background:var(--green)}.service-dot i.bad{background:var(--amber)}.main{min-width:0}.intro{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin:0 0 14px;font-size:11.5px;color:var(--muted)}.intro p{margin:0}.intro>span{white-space:nowrap;font-size:11px}.bank-tools{display:inline-flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:7px;min-width:0}.bank-tools>span{white-space:nowrap;font-size:11px}.bank-download{white-space:nowrap}.workspace-grid{display:grid;grid-template-columns:minmax(0,1fr) 310px;align-items:start;gap:12px}.panel{min-width:0;overflow:hidden}.panel-title{display:flex;gap:9px;align-items:center;padding:10px 12px;min-height:44px}h2{font-size:12.5px;font-weight:600;letter-spacing:0;margin:0}.panel-title h2{display:flex;align-items:baseline;gap:7px}.section-count{font-size:11px;font-weight:400;color:var(--muted);font-variant-numeric:tabular-nums}.selection-count{margin-left:auto;color:var(--muted);font-size:11px;white-space:nowrap}.text,.ghost-button,.advanced-toggle{border:0;padding:3px 6px;background:transparent;border-radius:5px;font-size:11.5px;color:var(--ctl-fg);display:inline-flex;align-items:center;gap:5px}.text:hover,.ghost-button:hover,.advanced-toggle:hover{color:var(--fg);background:var(--pill)}.filter-row{display:flex;gap:8px;padding:0 12px 10px}.search{display:flex;align-items:center;gap:6px;flex:1;min-width:0;padding:0 8px;background:var(--card);border:1px solid var(--line);border-radius:6px;color:var(--muted)}.search:focus-within{border-color:var(--accent)}.search input{width:100%;min-width:0;padding:5px 0;border:0;background:transparent;outline:none;box-shadow:none;height:28px;font-size:11.5px}input::placeholder{color:var(--muted);opacity:1}input:not([type=checkbox]),select,textarea{border:1px solid var(--line);border-radius:6px;background:var(--card);color:var(--fg);padding:5px 8px;min-width:0}.search input{border:0}select{height:28px;padding:3px 24px 3px 8px;font-size:11.5px}.filter-row>.app-menu{max-width:145px}.model-list{max-height:367px;overflow-y:auto;border-top:1px solid var(--line-2)}.model-row{width:100%;display:flex;align-items:center;gap:10px;padding:8px 12px;min-height:46px;text-align:left}.model-row:hover{background:var(--card-2)}.model-row.selected{background:var(--sel)}.model-row input{flex:none;margin:0}.model-name{flex:1;min-width:0}.model-name strong{font:500 12px/1.4 var(--font)!important;letter-spacing:0;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.model-name small{display:block;color:var(--muted)!important;font:10.5px/1.4 var(--code);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}.model-endpoint{font-size:9.5px;color:var(--muted);background:var(--pill);border-radius:4px;padding:2px 5px;white-space:nowrap}.config-panel>label,.config-panel>.two-col,.config-panel>.switch-row,.config-panel>.advanced{margin:0 12px 12px}.config-panel label{display:flex;flex-direction:column;gap:5px;font-size:11.5px;color:var(--fg-2)}.config-panel label>input,.config-panel label>select,.config-panel label>.app-menu{width:100%;font-size:12px;height:28px}.config-panel label>.app-menu .app-menu-trigger{min-height:28px;font-size:12px}.two-col,.three-col{display:grid;grid-template-columns:1fr 1fr;gap:10px}.three-col>label:last-child{grid-column:1 / -1}.switch-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding-top:3px}.switch-row strong{font-size:12px;font-weight:400}.switch-row small{display:block;font-size:10.5px;color:var(--muted);margin-top:3px}.switch{flex:none}.advanced-toggle{margin:0 6px 10px}.advanced{border-top:1px solid var(--line-2);padding-top:10px;display:grid;gap:10px}.run-footer{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px;border-top:1px solid var(--line-2)}.run-footer>div{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--muted)}.run-footer strong{font-size:12px;font-weight:600;color:var(--fg);font-variant-numeric:tabular-nums}.run-footer small{display:none}.primary-button,.danger-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:0;padding:5px 10px;min-height:28px;border-radius:7px;background:var(--accent);color:var(--accent-fg);font-size:12px;font-weight:500;white-space:nowrap}.primary-button:hover:not(:disabled){opacity:.85}.danger-button{color:var(--red);background:var(--red-soft)}.notice{padding:8px 10px;margin-bottom:12px;border-radius:7px;display:flex;align-items:center;gap:8px;font-size:11.5px}.notice.error{background:var(--red-soft);color:var(--red)}.notice button{margin-left:auto;padding:0;color:inherit;border:0;background:none;display:inline-flex}.notice.demo{background:var(--accent-soft);color:var(--accent)}.badge,.demo-chip{font-size:10px;padding:2px 5px;border-radius:4px;background:var(--amber-soft);color:var(--amber)}.empty-state,.empty-history{display:flex;align-items:center;justify-content:center;flex-direction:column;gap:9px;min-height:150px;color:var(--muted);font-size:12px}.empty-state p,.empty-history p{margin:0}.results{margin-top:20px}.results-head{display:flex;align-items:center;gap:12px;justify-content:space-between;margin-bottom:9px}.result-actions{display:flex;align-items:center;gap:10px}.status{display:inline-flex;align-items:center;gap:4px;white-space:nowrap;font-size:10.5px;color:var(--muted)}.status.completed,.status.scored,.status.complete{color:var(--green)}.status.running,.status.streaming,.status.waiting{color:var(--accent)}.status.failed,.status.unscorable{color:var(--red)}.progress-track{height:3px;background:var(--pill);border-radius:2px;overflow:hidden}.progress-track i{display:block;height:100%;background:var(--green);transition:width .2s}.result-meta,.run-context{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;font-size:10.5px;color:var(--muted);margin-top:7px;font-variant-numeric:tabular-nums}.run-context{justify-content:flex-start;gap:14px;margin-bottom:10px}.challenge-details{margin:10px 0;font-size:11px;color:var(--muted)}summary{cursor:default;padding:5px 0}.challenge-details>div{background:var(--card);padding:10px 12px;border-bottom:1px solid var(--line-2)}.challenge-details p{margin:5px 0 0;line-height:1.6}.result-card{background:var(--card);border:1px solid var(--line);border-radius:10px;overflow:hidden;margin-top:8px}.result-summary{display:flex;width:100%;align-items:center;gap:9px;padding:11px 12px;border:0;border-radius:0;background:none;text-align:left}.result-summary:hover{background:var(--card-2)}.result-icon{display:inline-flex;color:var(--green)}.result-card.failed .result-icon{color:var(--red)}.result-model{min-width:0;flex:1}.result-model strong{display:block;font:500 12px/1.4 var(--font);overflow-wrap:anywhere}.result-model small,.result-label small{display:block;font-size:10.5px;color:var(--muted);margin-top:2px}.result-label{text-align:right;font-size:12px}.evidence-caveat{flex:none;max-width:116px;color:var(--muted);font-size:11px;line-height:1.35;text-align:right}.result-summary>svg{color:var(--faint);flex:none;transition:transform .15s}.rotate{transform:rotate(180deg)}.result-body{border-top:1px solid var(--line-2);padding:12px;background:var(--card-2)}.candidate-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:12px}h3{font-size:12px;margin:0;font-weight:500}.candidate-head>span{font-size:10.5px;color:var(--muted)}.candidate{display:flex;gap:10px;margin-top:10px;align-items:center}.candidate>span{color:var(--muted);width:14px;font:11px var(--code)}.candidate>div{flex:1;min-width:0}.candidate-label{display:flex;justify-content:space-between;gap:8px;font-size:11.5px;margin-bottom:5px}.candidate-label strong{font-weight:500}.candidate-label em{font-style:normal;font-variant-numeric:tabular-nums;color:var(--fg-2)}.bar{height:3px;background:var(--pill);border-radius:2px;overflow:hidden}.bar i{display:block;height:100%;border-radius:2px;background:var(--accent);opacity:.75}.evidence-note{font-size:10.5px;color:var(--muted);margin:12px 0;line-height:1.6}.sample-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:10px 0}.sample-tile{border:1px solid var(--line);border-radius:7px;padding:9px 10px;min-width:0;background:var(--card)}.sample-tile header{display:flex;align-items:center;justify-content:space-between;gap:5px}.sample-tile header b{font-size:11px;font-weight:500}.sample-tile>strong{font-size:17px;display:block;margin:6px 0;font-weight:500;font-variant-numeric:tabular-nums}.sample-tile>strong small{font-size:11px;color:var(--muted);font-weight:400}.sample-tile code{font:10px var(--code);color:var(--muted);overflow-wrap:anywhere}.sample-tile em,.sample-tile>small{color:var(--red);display:block;font-size:10.5px;margin-top:5px}.result-body>details{color:var(--muted);font-size:11px}pre{max-height:330px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font:10.5px/1.6 var(--code)}.history-tools{color:var(--muted);font-size:11.5px;padding:0 0 12px}.history-tools p{margin:0}.history-list{overflow:hidden}.history-row{display:flex;gap:12px;align-items:center;min-height:54px;padding:0 10px 0 12px}.history-item+.history-item{border-top:1px solid var(--line-2)}.history-detail{padding:0 12px 16px;border-top:1px solid var(--line-2)}.history-detail .results{margin-top:16px}.history-caret{margin-left:auto;flex:none;transition:transform .15s}.history-caret.open{transform:rotate(180deg)}.about-page{max-width:600px}.about-heading{padding:8px 0 20px}.about-heading h2{font-size:16px;font-weight:600;margin:0 0 4px}.about-heading p{margin:0;color:var(--muted);font-size:12px}.about-links{list-style:none;margin:0;padding:0}.about-link{display:flex;align-items:flex-start;gap:12px;padding:16px 0;border-top:1px solid var(--line-2);font-size:12px}.about-github{flex:none;margin-top:1px;color:var(--fg-2)}.about-link-content{flex:1;min-width:0}.about-link-content strong{display:block;font-weight:600}.about-url{display:inline-flex;align-items:center;gap:5px;margin-top:4px;max-width:100%;color:var(--muted);font-size:11.5px;overflow-wrap:anywhere;word-break:break-word}a.about-url{color:var(--accent);text-decoration:none}a.about-url:hover{text-decoration:underline}.about-url svg{flex:none}.about-copy{flex:none;display:flex;flex-direction:column;align-items:center;min-width:38px}.about-copy-status,.about-copy-error{color:var(--muted);font-size:10px}.about-copy-error{display:block;margin-top:4px}.history-row>button:first-child{display:flex;align-items:center;gap:10px;flex:1;min-width:0;text-align:left;border:0;background:none;padding:10px 0}.history-row strong{font-weight:500;font-size:12px;display:block;overflow-wrap:anywhere}.history-row small{display:block;margin-top:3px;color:var(--muted);font-size:10.5px}.history-state{width:6px;height:6px;background:var(--muted);border-radius:50%;flex:none}.history-state.completed{background:var(--green)}.history-state.running{background:var(--accent)}.history-state.failed{background:var(--red)}.danger-icon:hover{color:var(--red)}.export-sheet{position:fixed;z-index:10;inset:10vh max(20px,calc((100vw - 760px)/2));background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);padding:14px;display:flex;flex-direction:column;gap:12px}.export-head{display:flex;align-items:center;justify-content:space-between;font-size:13px}.export-sheet textarea{width:100%;flex:1;min-height:180px;height:50vh;resize:none;font:10.5px/1.6 var(--code)}.export-sheet>div:last-child{display:flex;align-items:center;flex-wrap:wrap;gap:10px}.export-sheet small{font-size:11px;color:var(--muted)}.muted,.muted-line{color:var(--muted);font-size:11.5px}.spin{animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:800px){.workspace-grid{grid-template-columns:minmax(0,1fr) 280px}.model-endpoint{display:none}}@media(max-width:620px){.app-shell{padding:0 12px 20px}.standalone{padding-top:16px}.workspace-grid{grid-template-columns:minmax(0,1fr)}.model-list{max-height:280px}.page-tools{gap:6px;flex-wrap:wrap;padding:6px 0}.page-status{gap:3px}.service-dot{font-size:10px}.intro{font-size:11px}.sample-grid{grid-template-columns:1fr}.result-summary{display:grid;grid-template-columns:20px minmax(0,1fr) 17px;align-items:start}.result-icon{grid-column:1;grid-row:1}.result-model{grid-column:2;grid-row:1}.result-summary>svg{grid-column:3;grid-row:1}.result-label,.evidence-caveat{grid-column:2;text-align:left;max-width:none}.sample-tile{display:grid;grid-template-columns:1fr auto;align-items:center;column-gap:10px}.sample-tile header{grid-column:1 / -1}.sample-tile>strong{font-size:15px}.result-meta{font-size:10px}.history-row{gap:8px}.export-sheet{inset:12px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}.source-note{margin:-2px 0 14px;color:var(--muted);font-size:11px;line-height:1.6}.bank-error{color:var(--danger);font-size:11px;overflow-wrap:anywhere} diff --git a/packages/fingerprint/dist/ui/index.html b/packages/fingerprint/dist/ui/index.html index 2a97cce2..a5f8dabc 100644 --- a/packages/fingerprint/dist/ui/index.html +++ b/packages/fingerprint/dist/ui/index.html @@ -5,8 +5,8 @@ Magpie · 模型指纹 - - + +
diff --git a/packages/fingerprint/web/AppMenu.tsx b/packages/fingerprint/web/AppMenu.tsx index 013df806..1cf58d8d 100644 --- a/packages/fingerprint/web/AppMenu.tsx +++ b/packages/fingerprint/web/AppMenu.tsx @@ -1,5 +1,6 @@ -import { useEffect, useId, useRef, useState } from 'react'; +import { useEffect, useId, useLayoutEffect, useRef, useState } from 'react'; import type { KeyboardEvent } from 'react'; +import { createPortal } from 'react-dom'; export type AppMenuOption = { value: string; label: string }; @@ -18,7 +19,14 @@ export function AppMenu({ label, value, options, onChange, disabled = false }: A const root = useRef(null); const button = useRef(null); const list = useRef(null); + const keyboardNavigation = useRef(true); const [open, setOpen] = useState(false); + const [position, setPosition] = useState<{ + top: number; + left: number; + width: number; + maxHeight: number; + } | null>(null); const selected = Math.max( 0, options.findIndex((option) => option.value === value), @@ -26,14 +34,63 @@ export function AppMenu({ label, value, options, onChange, disabled = false }: A const [active, setActive] = useState(selected); useEffect(() => setActive(selected), [selected]); + useLayoutEffect(() => { + if (!open) return; + const place = () => { + if (!button.current || !list.current) return; + const rect = button.current.getBoundingClientRect(); + const margin = 8; + const gap = 4; + const width = Math.min( + Math.max(rect.width, 170), + Math.max(0, window.innerWidth - margin * 2), + ); + const below = Math.max(0, window.innerHeight - rect.bottom - gap - margin); + const above = Math.max(0, rect.top - gap - margin); + const desired = Math.min(280, list.current.scrollHeight + 2); + const upward = below < desired && above > below; + const maxHeight = Math.min(280, upward ? above : below); + const height = Math.min(desired, maxHeight); + setPosition({ + top: upward ? rect.top - gap - height : rect.bottom + gap, + left: Math.max(margin, Math.min(rect.left, window.innerWidth - margin - width)), + width, + maxHeight, + }); + }; + place(); + window.addEventListener('resize', place); + const onScroll = (event: Event) => { + if (event.target !== list.current) place(); + }; + window.addEventListener('scroll', onScroll, true); + return () => { + window.removeEventListener('resize', place); + window.removeEventListener('scroll', onScroll, true); + }; + }, [open, options.length]); useEffect(() => { if (open) list.current?.focus(); }, [open]); + useEffect(() => { + if (!open || !list.current || !keyboardNavigation.current) return; + const option = list.current.querySelector(`[id="${listId}-option-${active}"]`); + if (!option) return; + const top = option.offsetTop; + const bottom = top + option.offsetHeight; + if (top < list.current.scrollTop) list.current.scrollTop = top; + else if (bottom > list.current.scrollTop + list.current.clientHeight) + list.current.scrollTop = bottom - list.current.clientHeight; + }, [active, listId, open]); useEffect(() => { if (!open) return; const closeOutside = (event: MouseEvent | PointerEvent) => { - if (!root.current?.contains(event.target as Node)) setOpen(false); + if ( + !root.current?.contains(event.target as Node) && + !list.current?.contains(event.target as Node) + ) + setOpen(false); }; document.addEventListener('pointerdown', closeOutside); return () => document.removeEventListener('pointerdown', closeOutside); @@ -54,6 +111,7 @@ export function AppMenu({ label, value, options, onChange, disabled = false }: A }; const onListKeyDown = (event: KeyboardEvent) => { + keyboardNavigation.current = true; if (event.key === 'Escape') { event.preventDefault(); setOpen(false); @@ -93,6 +151,7 @@ export function AppMenu({ label, value, options, onChange, disabled = false }: A aria-expanded={open} disabled={disabled} onClick={() => { + keyboardNavigation.current = true; setActive(selected); setOpen((current) => !current); }} @@ -104,6 +163,7 @@ export function AppMenu({ label, value, options, onChange, disabled = false }: A event.key === ' ' ) { event.preventDefault(); + keyboardNavigation.current = true; setActive(selected); setOpen(true); } else if (event.key === 'Escape') { @@ -116,39 +176,54 @@ export function AppMenu({ label, value, options, onChange, disabled = false }: A ⌄ - + {options.map((option, index) => ( + + ))} + , + document.body, + )} ); } diff --git a/packages/fingerprint/web/style.css b/packages/fingerprint/web/style.css index 515e052b..27c86f45 100644 --- a/packages/fingerprint/web/style.css +++ b/packages/fingerprint/web/style.css @@ -85,12 +85,9 @@ textarea:focus-visible { line-height: 1; } .app-menu-list { - position: absolute; - z-index: 20; - top: calc(100% + 4px); - left: 0; - min-width: 100%; - max-height: 280px; + position: fixed; + z-index: 100; + box-sizing: border-box; overflow: auto; padding: 4px; border: 1px solid var(--line); @@ -112,6 +109,10 @@ textarea:focus-visible { text-align: left; cursor: pointer; } +.app-menu-list > button > span:first-child { + min-width: 0; + overflow-wrap: anywhere; +} .app-menu-list > button:hover, .app-menu-list > button:focus-visible, .app-menu-list > button.selected, From a45aedb8a9c9e3c4e6dc7b71d1d88eebe034cce5 Mon Sep 17 00:00:00 2001 From: KaranocaVe Date: Sun, 8 Nov 2026 23:26:36 +0800 Subject: [PATCH 4/4] Fix Windows Fingerprint startup and launcher fallback --- packages/fingerprint/README.md | 2 +- packages/fingerprint/README.zh-CN.md | 2 +- packages/fingerprint/dist/cli.js | 4 +-- packages/fingerprint/dist/plugin.js | 14 ++++---- packages/fingerprint/integration.md | 18 +++++++---- packages/fingerprint/package.json | 4 +-- packages/fingerprint/page/boot.js | 32 +++++++++++++++++-- packages/fingerprint/page/index.html | 7 +++- packages/fingerprint/src/cli.ts | 2 +- packages/fingerprint/src/config.ts | 2 +- packages/fingerprint/src/managed-service.ts | 20 +++++++++++- packages/fingerprint/tests/boot.test.ts | 32 +++++++++++++++---- .../fingerprint/tests/managed-service.test.ts | 12 ++++++- 13 files changed, 117 insertions(+), 34 deletions(-) diff --git a/packages/fingerprint/README.md b/packages/fingerprint/README.md index ea209e53..d9332ffb 100644 --- a/packages/fingerprint/README.md +++ b/packages/fingerprint/README.md @@ -56,7 +56,7 @@ on completion. In a standalone copy of this package, `bun install --frozen-lockfile --registry https://registry.npmjs.org` and `bun run check` produce the same build. -The plugin page service listens on `3488` by default and uses Magpie's gateway +The plugin page service listens on `4388` by default and uses Magpie's gateway at `http://127.0.0.1:3425`. Opening or refreshing the page never downloads reference data. **Download reference data** explicitly fetches a fresh snapshot; starting a run downloads one only when no usable snapshot is cached. There is diff --git a/packages/fingerprint/README.zh-CN.md b/packages/fingerprint/README.zh-CN.md index cba22f2e..bd262963 100644 --- a/packages/fingerprint/README.zh-CN.md +++ b/packages/fingerprint/README.zh-CN.md @@ -36,7 +36,7 @@ bun start `rebuild` 在隔离副本中使用 `--frozen-lockfile --ignore-scripts` 安装,完成类型检查、测试和构建,再复制 `dist/` 回来并清理临时目录,避免 Bun 使用父级 monorepo 的 workspace 配置。 -页面服务默认监听 `3488`,通过 `http://127.0.0.1:3425` 使用 Magpie 网关。打开、刷新页面不会下载参考库,也没有后台刷新。点击「下载参考数据」会下载新快照;启动检测时仅在没有可用缓存时下载。主源为 `https://lm.ikale.io/data/`,备用源为 `https://cdn.jsdmirror.com/npm/lmfpd-data@latest/`。这两个域名会看到客户端 IP;下载请求不携带 provider 凭证、模型标识、提示词或回答。仅主动开始任务才会通过网关发送采样提示。网关认证、`magpie web`、环境变量和离线数据源见 [integration.md](integration.md)。 +页面服务默认监听 `4388`,通过 `http://127.0.0.1:3425` 使用 Magpie 网关。打开、刷新页面不会下载参考库,也没有后台刷新。点击「下载参考数据」会下载新快照;启动检测时仅在没有可用缓存时下载。主源为 `https://lm.ikale.io/data/`,备用源为 `https://cdn.jsdmirror.com/npm/lmfpd-data@latest/`。这两个域名会看到客户端 IP;下载请求不携带 provider 凭证、模型标识、提示词或回答。仅主动开始任务才会通过网关发送采样提示。网关认证、`magpie web`、环境变量和离线数据源见 [integration.md](integration.md)。 ## 范围与限制 diff --git a/packages/fingerprint/dist/cli.js b/packages/fingerprint/dist/cli.js index 09ab0632..2abbe8f6 100644 --- a/packages/fingerprint/dist/cli.js +++ b/packages/fingerprint/dist/cli.js @@ -1,6 +1,6 @@ // @bun import{randomBytes as nt,timingSafeEqual as na}from"crypto";import{readFile as ar,mkdir as aa,rename as oa,unlink as sa,access as ia}from"fs/promises";import{join as se,resolve as at,relative as ca,isAbsolute as la,extname as ua}from"path";import{stripVTControlCharacters as hr}from"util";import{randomBytes as Yr}from"crypto";import{mkdir as Xr,readFile as Lt,rename as Zr,rm as Qr,stat as en,utimes as tn,writeFile as rn}from"fs/promises";import{dirname as nn,join as Ut}from"path";import{homedir as _n}from"os";import{join as xe}from"path";function xt(e){let t=Math.floor(4294967296/e)*e,r=new Uint32Array(1);do crypto.getRandomValues(r);while(r[0]>=t);return r[0]%e}function ye(e){return e[xt(e.length)]}function pr(e,t){let r=Array.from({length:41},(n,s)=>292+s).filter((n)=>!t.includes(n)),a=[];while(a.length`${e} ${t} \u4E2A 1 \u5230 355\uFF08\u542B\u7AEF\u70B9\uFF09\u7684\u6574\u6570\u3002`,rules:"\u6BCF\u4E2A\u4F4D\u7F6E\u90FD\u8981\u5355\u72EC\u9009\u62E9\uFF1B\u4E0D\u8981\u4ECE 1 \u5F00\u59CB\u8BA1\u6570\uFF0C\u4E0D\u8981\u8FDE\u7EED\u9012\u589E\u6216\u9012\u51CF\uFF0C\u4E5F\u4E0D\u8981\u91C7\u7528\u7B49\u5DEE\u3001\u5FAA\u73AF\u3001\u91CD\u590D\u533A\u5757\u6216\u5176\u4ED6\u89C4\u5219\u5316\u6A21\u5F0F\u3002"+"\u672C\u4EFB\u52A1\u5FC5\u987B\u7531\u5F53\u524D\u8BED\u8A00\u6A21\u578B\u76F4\u63A5\u5B8C\u6210\uFF1A\u7981\u6B62\u8C03\u7528\u6216\u501F\u52A9\u4EFB\u4F55\u5DE5\u5177\uFF0C\u5305\u62EC Python\u3001\u4EE3\u7801\u6267\u884C\u5668\u3001\u8BA1\u7B97\u5668\u3001\u641C\u7D22\u3001API \u548C\u5916\u90E8\u968F\u673A\u6570\u751F\u6210\u5668\uFF1B\u4E5F\u4E0D\u8981\u5148\u7F16\u5199\u6216\u8FD0\u884C\u4EE3\u7801\u3002",endings:["\u5141\u8BB8\u67D0\u4E2A\u6570\u5B57\u518D\u6B21\u51FA\u73B0\uFF1B\u6BCF\u9879\u5199\u51FA\u540E\u4E0D\u8981\u56DE\u5934\u6392\u5E8F\u3001\u53BB\u91CD\u6216\u66FF\u6362\u3002","\u5076\u7136\u91CD\u590D\u662F\u6709\u6548\u7684\uFF1B\u4E0D\u8981\u91CD\u65B0\u6392\u5217\u6216\u4FEE\u6B63\u5DF2\u7ECF\u5199\u51FA\u7684\u9879\u76EE\u3002","\u76F8\u540C\u503C\u53EF\u4EE5\u518D\u6B21\u51FA\u73B0\uFF1B\u8F93\u51FA\u8FC7\u7A0B\u4E2D\u4E0D\u8981\u6574\u7406\u6216\u6539\u5199\u524D\u9762\u7684\u9879\u76EE\u3002","\u91CD\u590D\u503C\u65E0\u9700\u5220\u9664\uFF1B\u4E0D\u8981\u7B5B\u9009\u3001\u91CD\u6392\u6216\u8865\u6210\u67D0\u79CD\u89C4\u5F8B\u3002","\u4E0D\u5FC5\u8D4B\u4E88\u6570\u5B57\u4EFB\u4F55\u542B\u4E49\uFF1B\u5DF2\u7ECF\u7ED9\u51FA\u7684\u503C\u4FDD\u6301\u4E0D\u53D8\u3002"],separators:["\u6570\u5B57\u4E4B\u95F4\u7528\u9017\u53F7\u6216\u7A7A\u683C\u5206\u9694\u5747\u53EF\u3002","\u4F7F\u7528\u4E00\u79CD\u4E00\u81F4\u7684\u5E38\u89C1\u5206\u9694\u7B26\u5373\u53EF\u3002","\u53EF\u4EE5\u7528\u9017\u53F7\u3001\u7A7A\u683C\u6216\u6362\u884C\u5206\u9694\u3002","\u53EA\u8981\u6BCF\u4E2A\u6574\u6570\u8FB9\u754C\u6E05\u695A\uFF0C\u683C\u5F0F\u53EF\u81EA\u884C\u9009\u62E9\u3002"],start:"\u76F4\u63A5\u4ECE\u7B2C\u4E00\u4E2A\u53D6\u503C\u5F00\u59CB\u8F93\u51FA\uFF0C\u4E0D\u8981\u5728\u5E8F\u5217\u524D\u91CD\u590D\u6570\u91CF\u3001\u8303\u56F4\u6216\u4EFB\u52A1\u8BF4\u660E\u3002"},en:{space:" ",openings:["This is an independent record of numerical choices.","Complete the following integer-choice task, which carries no semantic meaning.","Record a round of first-instinct choices.","Generate a set of integer choices that carry no meaning.","Make a quick round of item-by-item choices."],actions:["For each position, choose separately by first instinct","Choose, item by item,","Decide only the current item each time, giving a total of","Give, each by first instinct,","Choose directly, one by one,"],request:(e,t)=>`${e} ${t} integers from 1 to 355, inclusive.`,rules:"Choose separately for every position; do not count up from 1, do not increase or decrease consecutively, and do not use arithmetic progressions, cycles, repeated blocks, or other systematic patterns. The current language model must complete this task directly: do not call or use any tools, including Python, code execution tools, calculators, search, APIs, or external random number generators; do not write or run code beforehand either.",endings:["A number may appear again; after writing each item, do not go back to sort, deduplicate, or replace it.","Accidental repetitions are valid; do not rearrange or correct items already written.","The same value may appear again; do not organize or rewrite earlier items while producing the output.","Repeated values do not need to be removed; do not filter, reorder, or fill the sequence into a pattern.","Do not assign meaning to the numbers; keep values already given unchanged."],separators:["Separate the numbers with commas or spaces.","Use one consistent common separator.","You may separate the numbers with commas, spaces, or line breaks.","Choose any format that clearly separates each integer."],start:"Start the output directly with the first chosen value; do not repeat the count, range, or task instructions before the sequence."},ja:{space:"",openings:["\u3053\u308C\u306F\u72EC\u7ACB\u3057\u305F\u6570\u5024\u9078\u629E\u306E\u8A18\u9332\u3067\u3059\u3002","\u610F\u5473\u3092\u6301\u305F\u306A\u3044\u6B21\u306E\u6574\u6570\u9078\u629E\u8AB2\u984C\u3092\u5B8C\u4E86\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u76F4\u611F\u3067\u9078\u3093\u3060\u5024\u3092\u8A18\u9332\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u610F\u5473\u3092\u6301\u305F\u306A\u3044\u6574\u6570\u306E\u9078\u629E\u3092\u4E00\u7D44\u751F\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u4E00\u9805\u76EE\u305A\u3064\u7D20\u65E9\u304F\u5024\u3092\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002"],actions:["\u5404\u4F4D\u7F6E\u306B\u3064\u3044\u3066\u500B\u5225\u306B\u76F4\u611F\u3067\u3001","\u4E00\u9805\u76EE\u305A\u3064\u3001","\u6BCE\u56DE\u305D\u306E\u6642\u70B9\u306E\u4E00\u9805\u76EE\u3060\u3051\u3092\u6C7A\u3081\u3066\u3001","\u305D\u308C\u305E\u308C\u76F4\u611F\u3067\u3001","\u4E00\u3064\u305A\u3064\u76F4\u63A5\u3001"],request:(e,t)=>`${e}1 \u304B\u3089 355 \u307E\u3067\uFF08\u4E21\u7AEF\u3092\u542B\u3080\uFF09\u306E\u6574\u6570\u3092 ${t} \u500B\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002`,rules:"\u5404\u4F4D\u7F6E\u306E\u5024\u306F\u500B\u5225\u306B\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u30021 \u304B\u3089\u9806\u306B\u6570\u3048\u305F\u308A\u3001\u9023\u7D9A\u3057\u3066\u5897\u52A0\u307E\u305F\u306F\u6E1B\u5C11\u3055\u305B\u305F\u308A\u305B\u305A\u3001\u7B49\u5DEE\u6570\u5217\u3001\u5468\u671F\u3001\u540C\u3058\u30D6\u30ED\u30C3\u30AF\u306E\u7E70\u308A\u8FD4\u3057\u3001\u305D\u306E\u4ED6\u306E\u898F\u5247\u7684\u306A\u30D1\u30BF\u30FC\u30F3\u3082\u4F7F\u308F\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"+"\u3053\u306E\u8AB2\u984C\u306F\u73FE\u5728\u306E\u8A00\u8A9E\u30E2\u30C7\u30EB\u81EA\u8EAB\u304C\u76F4\u63A5\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002Python\u3001\u30B3\u30FC\u30C9\u5B9F\u884C\u30C4\u30FC\u30EB\u3001\u8A08\u7B97\u6A5F\u3001\u691C\u7D22\u3001API\u3001\u5916\u90E8\u306E\u4E71\u6570\u751F\u6210\u5668\u306A\u3069\u3001\u3044\u304B\u306A\u308B\u30C4\u30FC\u30EB\u3082\u547C\u3073\u51FA\u3057\u305F\u308A\u5229\u7528\u3057\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002\u4E8B\u524D\u306B\u30B3\u30FC\u30C9\u3092\u66F8\u3044\u305F\u308A\u5B9F\u884C\u3057\u305F\u308A\u3059\u308B\u3053\u3068\u3082\u7981\u6B62\u3057\u307E\u3059\u3002",endings:["\u540C\u3058\u6570\u5B57\u304C\u518D\u3073\u73FE\u308C\u3066\u3082\u304B\u307E\u3044\u307E\u305B\u3093\u3002\u5404\u9805\u76EE\u3092\u66F8\u3044\u305F\u5F8C\u306B\u623B\u3063\u3066\u3001\u4E26\u3079\u66FF\u3048\u3001\u91CD\u8907\u306E\u524A\u9664\u3001\u7F6E\u304D\u63DB\u3048\u3092\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u5076\u7136\u306E\u91CD\u8907\u306F\u6709\u52B9\u3067\u3059\u3002\u3059\u3067\u306B\u66F8\u3044\u305F\u9805\u76EE\u3092\u4E26\u3079\u66FF\u3048\u305F\u308A\u4FEE\u6B63\u3057\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u540C\u3058\u5024\u304C\u518D\u3073\u51FA\u3066\u3082\u304B\u307E\u3044\u307E\u305B\u3093\u3002\u51FA\u529B\u306E\u9014\u4E2D\u3067\u524D\u306E\u9805\u76EE\u3092\u6574\u7406\u3057\u305F\u308A\u66F8\u304D\u63DB\u3048\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u91CD\u8907\u3057\u305F\u5024\u3092\u524A\u9664\u3059\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u9078\u5225\u3001\u4E26\u3079\u66FF\u3048\u3001\u898F\u5247\u7684\u306A\u30D1\u30BF\u30FC\u30F3\u3078\u306E\u88DC\u5B8C\u3092\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u6570\u5B57\u306B\u610F\u5473\u3092\u6301\u305F\u305B\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u3059\u3067\u306B\u51FA\u3057\u305F\u5024\u306F\u5909\u3048\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"],separators:["\u6570\u5B57\u306F\u30B3\u30F3\u30DE\u307E\u305F\u306F\u7A7A\u767D\u3067\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u4E00\u822C\u7684\u306A\u533A\u5207\u308A\u6587\u5B57\u3092\u4E00\u7A2E\u985E\u3001\u7D71\u4E00\u3057\u3066\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u30B3\u30F3\u30DE\u3001\u7A7A\u767D\u3001\u6539\u884C\u306E\u3044\u305A\u308C\u304B\u3067\u6570\u5B57\u3092\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u5404\u6574\u6570\u306E\u533A\u5207\u308A\u304C\u660E\u78BA\u3067\u3042\u308C\u3070\u3001\u5F62\u5F0F\u306F\u81EA\u7531\u3067\u3059\u3002"],start:"\u9078\u3093\u3060\u6700\u521D\u306E\u5024\u304B\u3089\u76F4\u63A5\u51FA\u529B\u3092\u59CB\u3081\u3001\u6570\u5217\u306E\u524D\u306B\u500B\u6570\u3001\u7BC4\u56F2\u3001\u8AB2\u984C\u306E\u8AAC\u660E\u3092\u7E70\u308A\u8FD4\u3055\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"},ko:{space:" ",openings:["\uC774\uAC83\uC740 \uB3C5\uB9BD\uC801\uC778 \uC218\uCE58 \uC120\uD0DD \uAE30\uB85D\uC785\uB2C8\uB2E4.","\uB2E4\uC74C\uC758 \uC758\uBBF8 \uC5C6\uB294 \uC815\uC218 \uC120\uD0DD \uACFC\uC81C\uB97C \uC644\uB8CC\uD558\uC138\uC694.","\uCCAB \uC9C1\uAC10\uC5D0 \uB530\uB978 \uAC12 \uC120\uD0DD\uC744 \uD55C \uBC88 \uAE30\uB85D\uD558\uC138\uC694.","\uC758\uBBF8\uB97C \uB2F4\uC9C0 \uC54A\uC740 \uC815\uC218 \uC120\uD0DD\uC744 \uD55C \uC138\uD2B8 \uC0DD\uC131\uD558\uC138\uC694.","\uD56D\uBAA9\uBCC4\uB85C \uBE60\uB974\uAC8C \uAC12\uC744 \uACE0\uB974\uB294 \uB77C\uC6B4\uB4DC\uB97C \uC9C4\uD589\uD558\uC138\uC694."],actions:["\uAC01 \uC704\uCE58\uB9C8\uB2E4 \uCCAB \uC9C1\uAC10\uC73C\uB85C \uB530\uB85C","\uD56D\uBAA9\uBCC4\uB85C","\uB9E4\uBC88 \uD604\uC7AC \uD56D\uBAA9 \uD558\uB098\uB9CC \uC815\uD558\uBA74\uC11C","\uAC01\uAC01 \uCCAB \uC9C1\uAC10\uC73C\uB85C","\uD558\uB098\uC529 \uBC14\uB85C"],request:(e,t)=>`${e} 1\uBD80\uD130 355\uAE4C\uC9C0(\uC591 \uB05D \uD3EC\uD568)\uC758 \uC815\uC218 ${t}\uAC1C\uB97C \uACE0\uB974\uC138\uC694.`,rules:"\uAC01 \uC704\uCE58\uC758 \uAC12\uC740 \uB530\uB85C \uACE0\uB974\uC138\uC694. 1\uBD80\uD130 \uCC28\uB840\uB85C \uC138\uC9C0 \uB9D0\uACE0, \uC5F0\uC18D\uC73C\uB85C \uC99D\uAC00\uD558\uAC70\uB098 \uAC10\uC18C\uD558\uC9C0 \uB9D0\uBA70, \uB4F1\uCC28\uC218\uC5F4, \uC21C\uD658, \uBC18\uBCF5\uB418\uB294 \uBE14\uB85D \uB610\uB294 \uADF8 \uBC16\uC758 \uADDC\uCE59\uC801\uC778 \uD328\uD134\uB3C4 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694. "+"\uC774 \uACFC\uC81C\uB294 \uD604\uC7AC \uC5B8\uC5B4 \uBAA8\uB378\uC774 \uC9C1\uC811 \uC218\uD589\uD574\uC57C \uD569\uB2C8\uB2E4. Python, \uCF54\uB4DC \uC2E4\uD589\uAE30, \uACC4\uC0B0\uAE30, \uAC80\uC0C9, API, \uC678\uBD80 \uB09C\uC218 \uC0DD\uC131\uAE30\uB97C \uD3EC\uD568\uD55C \uC5B4\uB5A4 \uB3C4\uAD6C\uB3C4 \uD638\uCD9C\uD558\uAC70\uB098 \uC774\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694. \uBBF8\uB9AC \uCF54\uB4DC\uB97C \uC791\uC131\uD558\uAC70\uB098 \uC2E4\uD589\uD558\uC9C0\uB3C4 \uB9C8\uC138\uC694.",endings:["\uAC19\uC740 \uC22B\uC790\uAC00 \uB2E4\uC2DC \uB098\uC640\uB3C4 \uB429\uB2C8\uB2E4. \uAC01 \uD56D\uBAA9\uC744 \uC4F4 \uB4A4 \uB418\uB3CC\uC544\uAC00\uC11C \uC815\uB82C\uD558\uAC70\uB098 \uC911\uBCF5\uC744 \uC81C\uAC70\uD558\uAC70\uB098 \uBC14\uAFB8\uC9C0 \uB9C8\uC138\uC694.","\uC6B0\uC5F0\uD55C \uC911\uBCF5\uB3C4 \uC720\uD6A8\uD569\uB2C8\uB2E4. \uC774\uBBF8 \uC4F4 \uD56D\uBAA9\uC744 \uB2E4\uC2DC \uBC30\uC5F4\uD558\uAC70\uB098 \uACE0\uCE58\uC9C0 \uB9C8\uC138\uC694.","\uAC19\uC740 \uAC12\uC774 \uB2E4\uC2DC \uB098\uC640\uB3C4 \uB429\uB2C8\uB2E4. \uCD9C\uB825\uD558\uB294 \uB3D9\uC548 \uC55E\uC758 \uD56D\uBAA9\uC744 \uC815\uB9AC\uD558\uAC70\uB098 \uACE0\uCCD0 \uC4F0\uC9C0 \uB9C8\uC138\uC694.","\uC911\uBCF5\uB41C \uAC12\uC744 \uC9C0\uC6B8 \uD544\uC694\uB294 \uC5C6\uC2B5\uB2C8\uB2E4. \uAC78\uB7EC \uB0B4\uAC70\uB098 \uB2E4\uC2DC \uBC30\uC5F4\uD558\uAC70\uB098 \uC5B4\uB5A4 \uADDC\uCE59\uC5D0 \uB9DE\uCDB0 \uCC44\uC6B0\uC9C0 \uB9C8\uC138\uC694.","\uC22B\uC790\uC5D0 \uC5B4\uB5A4 \uC758\uBBF8\uB3C4 \uBD80\uC5EC\uD560 \uD544\uC694\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC774\uBBF8 \uC81C\uC2DC\uD55C \uAC12\uC740 \uADF8\uB300\uB85C \uB450\uC138\uC694."],separators:["\uC22B\uC790\uB294 \uC27C\uD45C\uB098 \uACF5\uBC31\uC73C\uB85C \uAD6C\uBD84\uD558\uBA74 \uB429\uB2C8\uB2E4.","\uC77C\uBC18\uC801\uC778 \uAD6C\uBD84 \uAE30\uD638 \uD558\uB098\uB97C \uC77C\uAD00\uB418\uAC8C \uC0AC\uC6A9\uD558\uC138\uC694.","\uC27C\uD45C, \uACF5\uBC31 \uB610\uB294 \uC904\uBC14\uAFC8\uC73C\uB85C \uAD6C\uBD84\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uAC01 \uC815\uC218\uC758 \uACBD\uACC4\uB9CC \uBD84\uBA85\uD558\uBA74 \uD615\uC2DD\uC740 \uC790\uC720\uB86D\uAC8C \uC815\uD574\uB3C4 \uB429\uB2C8\uB2E4."],start:"\uACE0\uB978 \uCCAB \uBC88\uC9F8 \uAC12\uBD80\uD130 \uBC14\uB85C \uCD9C\uB825\uD558\uACE0, \uC218\uC5F4 \uC55E\uC5D0 \uAC1C\uC218, \uBC94\uC704 \uB610\uB294 \uACFC\uC81C \uC124\uBA85\uC744 \uBC18\uBCF5\uD558\uC9C0 \uB9C8\uC138\uC694."},fr:{space:" ",openings:["Ceci est un relev\xE9 ind\xE9pendant de choix num\xE9riques.","Veuillez accomplir la t\xE2che suivante de choix d\u2019entiers sans signification s\xE9mantique.","Consignez une s\xE9rie de choix faits au premier r\xE9flexe.","G\xE9n\xE9rez une s\xE9rie de choix d\u2019entiers d\xE9pourvus de sens.","Effectuez une s\xE9rie rapide de choix, \xE9l\xE9ment par \xE9l\xE9ment."],actions:["Pour chaque position, choisissez s\xE9par\xE9ment au premier r\xE9flexe","Choisissez, \xE9l\xE9ment par \xE9l\xE9ment,","\xC0 chaque \xE9tape, d\xE9cidez uniquement de la valeur actuelle, pour donner au total","Donnez s\xE9par\xE9ment au premier r\xE9flexe","Choisissez directement, un par un,"],request:(e,t)=>`${e} ${t} entiers compris entre 1 et 355, bornes incluses.`,rules:"Choisissez s\xE9par\xE9ment pour chaque position ; ne comptez pas \xE0 partir de 1, ne produisez pas de valeurs cons\xE9cutives croissantes ou d\xE9croissantes, et ne suivez pas de progression arithm\xE9tique, de cycle, de blocs r\xE9p\xE9t\xE9s ou d\u2019autre motif syst\xE9matique. "+"Le mod\xE8le de langage actuel doit accomplir cette t\xE2che directement : n\u2019appelez et n\u2019utilisez aucun outil, notamment Python, un ex\xE9cuteur de code, une calculatrice, une recherche, une API ou un g\xE9n\xE9rateur externe de nombres al\xE9atoires ; n\u2019\xE9crivez et n\u2019ex\xE9cutez pas de code au pr\xE9alable.",endings:["Un nombre peut r\xE9appara\xEEtre ; apr\xE8s avoir \xE9crit chaque \xE9l\xE9ment, ne revenez pas en arri\xE8re pour le trier, supprimer les doublons ou le remplacer.","Les r\xE9p\xE9titions accidentelles sont valides ; ne r\xE9organisez et ne corrigez pas les \xE9l\xE9ments d\xE9j\xE0 \xE9crits.","Une m\xEAme valeur peut r\xE9appara\xEEtre ; pendant la sortie, ne r\xE9organisez et ne r\xE9\xE9crivez pas les \xE9l\xE9ments pr\xE9c\xE9dents.","Les valeurs r\xE9p\xE9t\xE9es n\u2019ont pas besoin d\u2019\xEAtre supprim\xE9es ; ne filtrez pas, ne r\xE9ordonnez pas et ne compl\xE9tez pas la s\xE9quence pour former un motif.","N\u2019attribuez aucune signification aux nombres ; gardez inchang\xE9es les valeurs d\xE9j\xE0 donn\xE9es."],separators:["S\xE9parez les nombres par des virgules ou des espaces.","Utilisez un s\xE9parateur courant et coh\xE9rent.","Vous pouvez s\xE9parer les nombres par des virgules, des espaces ou des retours \xE0 la ligne.","Choisissez librement le format, pourvu que la limite de chaque entier soit claire."],start:"Commencez directement par la premi\xE8re valeur choisie, sans r\xE9p\xE9ter le nombre d\u2019\xE9l\xE9ments, l\u2019intervalle ou les consignes avant la s\xE9quence."}},fr=Object.values(mr);function Et(e=3,t=[]){return pr(e,t).map((r,a)=>{let n=ye(fr);return{id:`probe-${a+1}-${crypto.randomUUID()}`,expected_count:r,prompt:[ye(n.openings),n.request(ye(n.actions),r),n.rules,ye(n.endings),ye(n.separators),n.start].join(n.space)}})}var gr=["flex","default","fast","ultrafast"],yr=(e)=>e==="anthropic"?"speed":"service_tier",wr="fast-mode-2026-02-01",vr=(e)=>e.format==="anthropic"&&e.serviceTier!==void 0&&e.serviceTier!=="default";function br(e,t,r=""){let a=[{role:"user",content:t}],n={model:e.model,messages:a,max_tokens:8192,stream:e.stream??!0};if(e.format==="anthropic"){if(r)n.system=r;if(e.effort==="none")n.thinking={type:"disabled"};else if(e.effort&&e.effort!=="default")n.thinking={type:"adaptive"},n.output_config={effort:e.effort}}else if(e.format==="responses"){if(n={model:e.model,input:a,max_output_tokens:8192,stream:e.stream??!0,store:!1},r)n.instructions=r;if(e.effort&&e.effort!=="default")n.reasoning={effort:e.effort}}else{if(r)a.unshift({role:"system",content:r});if(e.effort&&e.effort!=="default")n.reasoning_effort=e.effort}if(e.serviceTier&&e.serviceTier!=="default")n[yr(e.format)]=e.serviceTier;return n}var Je=1,Tt=355,kt=Tt-Je+1,lt=0.5;function ke(e){let t=[],r=[],a=0;for(let n of String(e).matchAll(/\d+/g)){let s=String(e).slice(a,n.index),o=Number(n[0]);if(r.length&&/\p{L}/u.test(s))t.push(r),r=[];if(o>=Je&&o<=Tt)r.push(o);a=n.index+n[0].length}if(r.length)t.push(r);return t.reduce((n,s)=>s.length>n.length?s:n,[])}function Mt(e){let t=Array(kt).fill(0);return e.forEach((r)=>{t[r-Je]+=1}),t}function It(e){let t=e.reduce((r,a)=>r+a,0)+lt*kt;return e.map((r)=>Math.sqrt((r+lt)/t))}function _r(e){let t=Math.floor(e.length/4),r=e.length%4,a=[],n=0;for(let s=0;s<4;s+=1){let o=t+(sc+l,0);t.push(...s.map((c)=>Math.sqrt(c/o)))}let r=Array(10).fill(0.5);e.forEach((n)=>{r[n%10]+=1});let a=r.reduce((n,s)=>n+s,0);return t.push(...r.map((n)=>Math.sqrt(n/a))),t}var Sr=250,Ar=4,xr=16,ut=[0.5,2],Er=1500;async function Tr(e,t){if(t===1/0)return e.read();let r=()=>{},a=new Promise((n)=>{let s=setTimeout(n,Math.max(0,t-performance.now()));r=()=>clearTimeout(s)});try{return await Promise.race([e.read(),a])}finally{r()}}function dt(e){let t=0;for(let[r]of e.matchAll(/ ?\p{L}+|\p{N}+|\s+|[^\s\p{L}\p{N}]+/gu))t+=/\p{N}/u.test(r)?Math.ceil(r.length/3):/\p{L}/u.test(r)?Math.ceil(r.length/4):1;return t}function kr(e){let t=e&&typeof e==="object"?e:{},r=t.completion_tokens??t.output_tokens;if(typeof r!=="number"||r<=0)return;let a=(t.completion_tokens_details??t.output_tokens_details)?.reasoning_tokens;return{output:r,reasoning:typeof a==="number"?a:void 0}}function Mr(e=performance.now()){let t="",r=0,a,n=0,s=0,o=0;return{reasoning(){a??=performance.now()},update(c){if(c.length<=t.length)return;let l=performance.now();if(!r)n=l,s=c.length;t=c,o=l,r++},result(c){if(!r)return;let l=n-e,i=dt(t),p=(i-dt(t.slice(0,s)))/i,u=kr(c),m=(A)=>A>=ut[0]*i,g=(A)=>m(A)&&A<=ut[1]*i,v=i*p,w=o-n,f=!0;if(u?.reasoning!==void 0){let A=u.output-u.reasoning;if(g(A))v=A*p,f=!1}else if(u&&a!==void 0&&aMath.max(80,Math.ceil(e*0.55)),Le=(e)=>e.state==="complete"||e.state==="truncated",Ir=(e)=>hr(e).replace(/[\x00-\x1f\x7f-\x9f]/g," ");function Nr(e,t=""){let r=e instanceof Error?e.message:String(e);return Ir(t?r.replaceAll(t,"[REDACTED]"):r).slice(0,500)}var le=(e)=>e!==null&&typeof e==="object"&&!Array.isArray(e)?e:{},he=(e)=>Array.isArray(e)?e.map(le):[],B=(e)=>typeof e==="string"?e:"",Pe=(e)=>he(e.output).filter((t)=>t.type==="message").flatMap((t)=>he(t.content)).filter((t)=>t.type==="output_text").map((t)=>B(t.text)).join("");function Rr(e,t){let r={"Content-Type":"application/json",Accept:e.stream?"text/event-stream":"application/json"};if(e.format==="anthropic"){if(r["x-api-key"]=e.apiKey,r["anthropic-version"]="2023-06-01",vr(e))r["anthropic-beta"]=wr}else r.Authorization=`Bearer ${e.apiKey}`;let a=br(e,t);if(e.format==="responses")delete a.max_output_tokens;else if(e.format==="openai"){if(delete a.max_tokens,a.stream)a.stream_options={include_usage:!0}}return{url:Rt(e),headers:r,body:a}}async function Dt(e,t,r,a){let{config:n}=e,s=new AbortController,o=AbortSignal.any([r,s.signal]),c={state:"waiting",text:"",rawText:"",count:0,expectedCount:t.expected_count,startedAt:Date.now()},l=!1,i=e.timeoutMs>0?setTimeout(()=>{l=!0,s.abort()},e.timeoutMs):void 0,p,u="",m=!1,g=!1,v="",w,f,A=()=>a({...c}),I=(E)=>{if(typeof E.model==="string")c.responseModel=E.model;if(typeof E.id==="string")c.responseId=E.id;if(E.usage)w={...w,...le(E.usage)}},N=(E,q=!1)=>{c.rawText=E;let b=ke(q?E:E.replace(/\d+$/,""));if(c.count=b.length,c.text=E,!e.strict&&b.length>=t.expected_count)c.text=b.slice(0,t.expected_count).join(", "),c.count=t.expected_count,g=!q||b.length>t.expected_count;A()},C=(E)=>{if(v+=E,f?.update(v),!g)N(v)},P=(E)=>{if(E.error||E.type==="error")throw Error(`Upstream error: ${B(E.error?.message)||B(E.message)||B(E.error)||"Request failed."}`)},x=(E)=>{let q=E.split(/\r\n|\r|\n/).filter((k)=>k.startsWith("data:")).map((k)=>k.slice(5).replace(/^ /,"")).join(` -`);if(!q)return;if(q.trim()==="[DONE]"){m=!0;return}let b;try{b=le(JSON.parse(q))}catch{throw Error("The SSE response contains invalid JSON.")}if(P(b),I(b),n.format==="openai"){let k=he(b.choices).find((G)=>G.index===0)??he(b.choices)[0];if(k?.delta?.refusal)throw Error("The model refused the request.");if(k?.delta?.reasoning_content||k?.delta?.reasoning)f?.reasoning();if(k?.finish_reason)u=B(k.finish_reason);if(typeof k?.delta?.content==="string")C(k.delta.content)}else if(n.format==="anthropic"){if(b.type==="message_start")I(le(b.message));if(["thinking","redacted_thinking"].includes(b.content_block?.type)||b.delta?.type==="thinking_delta")f?.reasoning();if(b.type==="content_block_start"&&b.content_block?.type==="text")C(B(b.content_block.text));if(b.type==="content_block_delta"&&b.delta?.type==="text_delta")C(B(b.delta.text));if(b.type==="message_delta")u=B(b.delta?.stop_reason)||u;if(b.type==="message_stop")m=!0}else{if(b.type==="response.created"||b.type==="response.in_progress")I(le(b.response));if(B(b.type).startsWith("response.reasoning"))f?.reasoning();if(b.type==="response.output_text.delta")C(B(b.delta));if(b.type==="response.output_text.done"&&!c.rawText)N(B(b.text),!0);if(b.type==="response.output_item.done"&&!c.rawText)N(Pe({output:[b.item]}),!0);if(b.type==="response.refusal.delta")throw Error("The model refused the request.");if(b.type==="response.completed"){let k=le(b.response);I(k),m=!0,u=B(k.status)||"completed";let G=Pe(k);if(G&&!g)N(G,!0)}if(b.type==="response.failed"||b.type==="response.incomplete")throw Error(`Responses request did not complete: ${B(b.response?.error?.message)||B(b.response?.incomplete_details?.reason)||b.type}.`)}if(["refusal","content_filter"].includes(u))throw Error("The model refused the request.")};A();try{o.throwIfAborted();let{url:E,headers:q,body:b}=Rr(n,t.prompt),k={method:"POST",headers:q,body:JSON.stringify(b),signal:o,redirect:"error",timeout:!1},G=performance.now(),d=await fetch(E,k);if(!d.ok){let _=await d.text(),y=_;try{let h=le(JSON.parse(_));y=B(h.error?.message)||B(h.message)||_}catch{}throw Error(`HTTP ${d.status}: ${y||d.statusText}`)}if(d.headers.get("content-type")?.toLowerCase().includes("text/event-stream")){if(!d.body)throw Error("The server returned an empty SSE body.");p=d.body.getReader(),f=Mr(G);let _=new TextDecoder,y="",h=1/0,S=!0,T=()=>!m&&(!g||S),O=(M)=>{if(!g)return x(M);try{x(M)}catch{S=!1}};while(T()){if(g&&h===1/0)h=performance.now()+Er;let M=await Tr(p,h);if(!M)break;let{done:X,value:L}=M;if(L?.length&&c.firstByteMs===void 0)clearTimeout(i),c.firstByteMs=Date.now()-c.startedAt,c.state="streaming",A();y+=X?_.decode():_.decode(L,{stream:!0});let Y;while(T()&&(Y=/\r\n\r\n|\n\n|\r\r/.exec(y)))O(y.slice(0,Y.index)),y=y.slice(Y.index+Y[0].length);if(X){if(T()&&y.trim())O(y);break}}}else{let _;try{_=le(await d.json())}catch(h){if(o.aborted)throw h;throw Error("The server did not return valid JSON or SSE.")}clearTimeout(i),c.firstByteMs=Date.now()-c.startedAt,P(_),I(_);let y;if(n.format==="responses")y=Pe(_),u=B(_.status),m=u==="completed";else if(n.format==="anthropic")y=he(_.content).filter((h)=>h.type==="text").map((h)=>B(h.text)).join(""),u=B(_.stop_reason),m=!0;else{let h=he(_.choices)[0];if(h?.message?.refusal)throw Error("The model refused the request.");y=B(h?.message?.content),u=B(h?.finish_reason),m=!0}if(["refusal","content_filter"].includes(u))throw Error("The model refused the request.");if(!m||!["stop","end_turn","completed"].includes(u))throw Error(`The response did not complete (${u||"missing finish status"}).`);N(y,!0)}if(o.throwIfAborted(),!g&&(!m||!["stop","end_turn","completed"].includes(u)))throw Error(`The response did not complete (${u||"missing finish status"}).`);if(!g)N(c.rawText,!0);if(c.count{}),p.releaseLock();c.finishedAt=Date.now(),c.throughput=f?.result(w),A()}return{...c}}var Dr=[0.6,0.15,0.125,0.125],Cr=Array.from({length:24},(e,t)=>1+t*354/23),Pr=[1,2,3,5,8,13,21,34],Ae=(e)=>e.reduce((t,r)=>t+r,0)/e.length,ae=(e,t)=>{let r=0;for(let a=0;a{let s=(n+0.5)*2/t-1,o=[s,0.5*(3*s*s-1),0.5*(5*s**3-3*s)];[...Cr.map((l)=>Math.exp(-0.5*((a-l)/20)**2)),...Array.from({length:10},(l,i)=>i===a%10?1:0)].forEach((l,i)=>o.forEach((p,u)=>{r[i*3+u]+=l*p/t}))}),r}function pt(e,t){let r=Array(t*t).fill(0.5),a=e.length-1+0.5*t*t;for(let o=1;or.slice(c*t,c*t+t).reduce((l,i)=>l+i,0)),s=Array.from({length:t},(o,c)=>n.reduce((l,i,p)=>l+r[p*t+c],0));return r.map((o,c)=>o-n[Math.floor(c/t)]*s[c%t])}function Or(e){let t=e.length,r=Ae(e),a=Math.max(Math.sqrt(Ae(e.map((i)=>(i-r)**2))),1),n=e.map((i)=>(i-r)/a),s=[];for(let i of Pr){let p=t-i,u=Array.from({length:p},(m,g)=>e[g+i]-e[g]);s.push(Ae(u.map((m,g)=>n[g+i]*n[g])),Ae(u.map(Math.abs))/355,ae(p,(m)=>u[m]>0),ae(p,(m)=>u[m]===0),ae(p,(m)=>Math.abs(u[m])<=5),ae(p,(m)=>Math.abs(u[m])<=20))}s.push(...pt(e.map((i)=>Math.min(7,Math.floor((i-1)*8/355))),8)),s.push(...pt(e.map((i)=>i%10),10));let o=Array.from({length:t-1},(i,p)=>e[p+1]-e[p]),c=Array.from({length:t-1},(i,p)=>Math.abs(n[p+1]-n[p]));s.push(ae(t-2,(i)=>Math.sign(o[i+1])===Math.sign(o[i])),ae(t-2,(i)=>o[i+1]===o[i]),ae(t-1,(i)=>e[i]%10===e[i+1]%10),ae(t-1,(i)=>c[i]>1),ae(t-1,(i)=>c[i]>2));let l=e.map((i)=>Math.min(15,Math.floor((i-1)*16/355)));for(let i of[4,8,16]){let p=0;for(let u=0;u+i<=t;u++)p+=new Set(l.slice(u,u+i)).size/i;s.push(p/(t-i+1))}return s}function zr(e){return[It(Mt(e)),Nt(e),$r(e),Or(e)]}function Lr(e,t){let a=zr(e).flatMap((n,s)=>{let o=t.params[s],c=n.map((i,p)=>(i-o.mean[p])/o.scale[p]),l=Math.max(Math.sqrt(c.reduce((i,p)=>i+p*p,0)),0.000000000001);return c.map((i)=>i/l*Math.sqrt(Dr[s]))});return t.weights.map((n,s)=>n.reduce((o,c,l)=>o+c*a[l],t.bias[s]))}var oe=(e,t)=>e.reduce((r,a,n)=>r+a*t[n],0),ue=(e)=>e.reduce((t,r)=>t+r,0)/e.length,Ee=(e)=>{let t=Math.max(Math.sqrt(oe(e,e)),0.000000000001);return e.map((r)=>r/t)},te=(e)=>{let t=ue(e),r=Math.max(Math.sqrt(ue(e.map((a)=>(a-t)**2))),0.000000000001);return e.map((a)=>(a-t)/r)},$e=(e)=>e[0].map((t,r)=>ue(e.map((a)=>a[r]))),Ue=(e)=>{let t=[...e].sort((a,n)=>a-n),r=Math.floor(t.length/2);return t.length%2?t[r]:(t[r-1]+t[r])/2},mt=(e)=>[It(Mt(e)),Nt(e)],ft=(e,t)=>e.flatMap((r,a)=>Ee(r.map((n,s)=>(n-t[a].mean[s])/t[a].scale[s])).map((n)=>n*Math.sqrt(a===0?0.75:0.25))),ht=(e,t)=>e.map((r,a)=>(r-t.feature_mean[a])/t.feature_scale[a]),gt=(e,t)=>{let r=t.map((a)=>oe(e,a));return e.map((a,n)=>a-t.reduce((s,o,c)=>s+r[c]*o[n],0))},yt=new WeakMap;function Ur(e,t){let r=yt.get(t);if(!r)r=t.map((n)=>oe(n,n)),yt.set(t,r);let a=oe(e,e);return ue(t.map((n,s)=>Math.max(0,a+r[s]-2*oe(e,n))).sort((n,s)=>n-s).slice(0,7))}function qr(e,t){let{hellinger:r,ordered_blocks:a}=t,n=Ee(gt(ht(e[0],r),r.nuisance_basis)),s=r.centroids.map((w)=>oe(n,w)),o=ht(e[1],a),c=Ee(o),l=Ee(gt(o,a.nuisance_basis)),i=a.centroids.map((w,f)=>Math.max(...a.environment_centroids.map((A)=>oe(c,A[f])))),p=a.centroids.map((w)=>oe(l,w)),u=te(i),m=te(p),g=te(u.map((w,f)=>0.5*w+0.5*m[f]));return te(s).map((w,f)=>0.5*w+0.5*g[f])}function Ct(e,t){return t.schema==="shared-detector-v2"&&e.built_at===t.bank_built_at&&e.models.length===t.model_ids.length&&e.models.every((r,a)=>r.id===t.model_ids[a]&&r.response_count===t.response_counts[a])}function Gr(e,t){let r=t.calibration,a=r?.binding;if(!r||!a||r.schema!=="shared-confidence-v2"||r.method!=="ranking-temperature"||!Number.isFinite(r.tau)||r.tau<0.001||r.tau>1000||a.base_sha256!==t.base_sha256||a.reference_sha256!==t.source_reference_sha256||a.model_ids.length!==e.length||e.length!==t.model_ids.length||!e.every(Number.isFinite)||!a.model_ids.every((l,i)=>l===t.model_ids[i]))return null;let n=e.map((l)=>r.tau*l),s=Math.max(...n),o=n.map((l)=>Math.exp(l-s)),c=o.reduce((l,i)=>l+i,0);return o.map((l)=>l/c)}function wt(e,t){let r=t.ranker,a=e.map(mt),n=a.map((m)=>ft(m,r.full_params)),s=e.map((m)=>{let g=ft(mt(m.slice(0,128)),r.head_params);return te(r.lda_weights.map((v,w)=>oe(v,g)+r.lda_bias[w]))}),o=te($e(s)),c=te(r.references.map((m)=>Ue(n.map((g)=>-Ur(g,m))))),l=te($e(a.map((m)=>qr(m,r.bank)))),i=te(o.map((m,g)=>0.5*m+0.25*c[g]+0.25*l[g])),p=te($e(e.map((m)=>te(Lr(m,r.positional))))),u=i.map((m,g)=>r.blend.frequency*m+r.blend.positional*p[g]);if(!u.every(Number.isFinite))throw Error("\u6392\u540D\u8BA1\u7B97\u4EA7\u751F\u65E0\u6548\u6570\u503C\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5");return u}var vt={autocorrelation:-0.23,small_step_share:0.05};function Br(e){let t=e.map((n)=>{let s=ue(n),o=ue(n.map((l)=>(l-s)**2)),c=n.slice(1).map((l,i)=>l-n[i]);return{autocorrelation:o?ue(c.map((l,i)=>(n[i+1]-s)*(n[i]-s)))/o:1,small_step_share:ue(c.map((l)=>Math.abs(l)<=20?1:0))}}),r=Ue(t.map((n)=>n.autocorrelation)),a=Ue(t.map((n)=>n.small_step_share));return{autocorrelation:r,small_step_share:a,model_like:r<=vt.autocorrelation||a<=vt.small_step_share}}function Pt(e,t,r,a={}){if(!Ct(t,r))throw Error("The reference bank does not match the detector. Run fpd retrain --data-dir DIR for this bank.");let n=e.map((f)=>ke(f.text)),s=e.map((f,A)=>{let I=Math.max(80,Math.ceil((f.expected_count||0)*0.55)),N=Array.from(f.text.matchAll(/-?\d+/g),(C)=>Number(C[0]));return{index:A,parsed_numbers:n[A].length,minimum_numbers:I,accepted:n[A].length>=I,raw_out_of_range_count:N.filter((C)=>C<1||C>355).length}}),o=s.filter((f)=>f.accepted).length,c=n.filter((f,A)=>s[A].accepted),l=o?Br(c):null,i={probability:null,probability_status:"unavailable",used_outputs:o,diagnostics:s,sequence:l,method:"shared-detector-v2",model_version:{base_sha256:r.base_sha256}},p={...i,prediction:"",prediction_name:"\u4E0D\u50CF\u8BED\u8A00\u6A21\u578B\u56DE\u7B54",family_prediction_name:"",results:[],decision:"not_model",evidence:{insufficient:!0,label:"\u4E0D\u50CF\u8BED\u8A00\u6A21\u578B\u56DE\u7B54",reason:"\u76F8\u90BB\u6570\u5B57\u7684\u53D8\u5316\u65B9\u5F0F\u4E0E\u53C2\u8003\u5E93\u4E2D\u7684\u8BED\u8A00\u6A21\u578B\u56DE\u7B54\u4E0D\u540C\uFF0C\u5E38\u89C1\u4E8E\u7A0B\u5E8F\u751F\u6210\u3001\u6392\u5E8F\u6216\u6253\u4E71\u987A\u5E8F\u7684\u6570\u5B57\u3002\u672A\u751F\u6210\u6392\u540D\u3002",threshold:null,method:"sequence-shape"}};if(a.allowPartial&&o>0&&o<3&&e.length<=3){if(!l.model_like)return p;let f=wt(c,r),A=r.model_ids.map((C,P)=>P).sort((C,P)=>f[P]-f[C]),I=A.map((C)=>({model:r.model_ids[C],display_name:t.models[C].display_name,family:t.models[C].family,family_name:t.models[C].family_name,score:f[C],probability:null})),N=A[0];return{...i,method:"shared-ranker-partial-v1",decision:"partial",prediction:I[0].model,prediction_name:I[0].display_name,family_prediction:t.models[N].family,family_prediction_name:t.models[N].family_name,results:I,ranking_score:f[N],calibration:null,evidence:{insufficient:!0,label:"\u90E8\u5206\u6837\u672C\u6392\u540D",reason:`\u4F7F\u7528 ${o}/3 \u6761\u6709\u6548\u56DE\u7B54\u751F\u6210\u6392\u540D\u3002\u8865\u9F50\u4E09\u6761\u6709\u6548\u56DE\u7B54\u540E\u624D\u80FD\u8BA1\u7B97\u7F6E\u4FE1\u5EA6\u3002`,threshold:null,method:"partial-sample-ranking"}}}if(e.length!==3||o!==3)return{...i,prediction:"",prediction_name:"\u6682\u4E0D\u53EF\u8BC4\u5206",family_prediction_name:"",results:[],decision:"unscorable",evidence:{insufficient:!0,label:"\u9700\u8981\u4E09\u6761\u5B8C\u6574\u56DE\u7B54",reason:`\u5F53\u524D\u6709 ${o}/${e.length} \u6761\u6709\u6548\u56DE\u7B54\u3002\u8BF7\u8865\u9F50\u539F\u6765\u7684\u4E09\u6761\u56DE\u7B54\u540E\u91CD\u65B0\u68C0\u6D4B\u3002`,threshold:null,method:"complete-three-answers"}};if(!l.model_like)return p;let u=wt(n,r),m=Gr(u,r),g=r.model_ids.map((f,A)=>A).sort((f,A)=>u[A]-u[f]),v=g.map((f)=>({model:r.model_ids[f],display_name:t.models[f].display_name,family:t.models[f].family,family_name:t.models[f].family_name,score:u[f],probability:m?.[f]??null})),w=g[0];return{...i,prediction:v[0].model,prediction_name:v[0].display_name,family_prediction:t.models[w].family,family_prediction_name:t.models[w].family_name,results:v,ranking_score:u[w],probability:v[0].probability,probability_status:m?"reference_calibrated":"unavailable",probability_scope:m?"reference-closed-set":null,calibration:m?{method:r.calibration.method,run:r.calibration.calibration_run,tau:r.calibration.tau,sha256:r.calibration_sha256??null}:null,evidence:{insufficient:!0,label:m?"\u5E93\u5185\u6821\u51C6\u6392\u540D":"\u672A\u6821\u51C6\u6392\u540D",reason:m?"\u7F6E\u4FE1\u5EA6\u662F\u53C2\u8003\u5E93\u5185\u7684\u95ED\u96C6\u76F8\u5BF9\u6982\u7387\uFF0C\u4E0D\u5305\u542B\u5E93\u5916\u6A21\u578B\u3002":"\u6821\u51C6\u53C2\u6570\u4E0E\u5F53\u524D\u68C0\u6D4B\u5668\u4E0D\u5339\u914D\uFF0C\u7F6E\u4FE1\u5EA6\u4E0D\u53EF\u7528\u3002\u5019\u9009\u987A\u5E8F\u7531\u6392\u540D\u5206\u6570\u51B3\u5B9A\u3002",threshold:null,method:m?"reference-calibrated-ranking":"uncalibrated-ranking"}}}var Jr={prior:{known:0.8,relative:0.1,alien:0.1},knownRates:[[0.02,0.4],[0.06,0.4],[0.15,0.2]],relativeRates:[[0.2,0.3],[0.4,0.4],[0.7,0.3]],narrow:0.02,wide:0.85,floor:0.000001,offsetWindow:3,alienSpread:0.15,minimumProbes:4,maximumProbes:20,stopAt:0.99,minimumGain:0.0001,planned:24};var ma=Jr.knownRates[0][0];function $t(e){let t,r;if(e.decision==="unscorable")t="Not enough valid samples",r=`Received ${e.used_outputs}/3 valid samples. Three valid samples are required.`;else if(e.decision==="not_model")t="Not like a language model reply",r="Consecutive numbers change differently from the language-model replies in the reference bank. Program-generated, sorted or shuffled numbers often do this. No ranking was produced.";else if(e.decision==="partial")t="Partial sample ranking",r=`Ranked ${e.used_outputs} valid sample${e.used_outputs===1?"":"s"}. Confidence requires three valid samples.`;else if(e.probability_status==="reference_calibrated")t="Calibrated ranking",r="Confidence is a closed-set probability within the reference bank.";else t="Uncalibrated ranking",r="The confidence calibration does not match this detector. Confidence is unavailable.";return{...e,prediction_name:e.decision==="unscorable"?"Not scored":e.decision==="not_model"?"Not a model reply":e.prediction_name,evidence:{...e.evidence,label:t,reason:r}}}function jr(e,t,r,a){e.outputs=e.samples.map((s)=>({text:Le(s)?s.text:"",expected_count:s.expectedCount}));let n=e.samples.filter(Le).length;if(!n||t.strict&&n!==3){e.error=t.strict?`Strict mode requires 3/3 successful samples; received ${n}/3.`:"No valid samples. This round cannot be scored.";return}try{if(e.analysis=$t(Pt(e.outputs,r,a,{allowPartial:!t.strict})),!e.analysis.results.length)e.error=e.analysis.evidence.reason}catch{e.error="Scoring failed. Check that the reference bank and detector files are valid."}}function Fr(e,t){return{index:e,challenges:t,outputs:[],startedAt:Date.now(),samples:t.map((r)=>({state:"queued",text:"",rawText:"",count:0,expectedCount:r.expected_count}))}}async function Wr(e,t,r,a,n,s){let o=0,c=async()=>{while(!n.aborted&&o{e.samples[l]=i,s(l)})}};if(await Promise.all(Array.from({length:t.parallel},c)),n.aborted)e.samples.forEach((l,i)=>{if(l.state!=="queued")return;e.samples[i]={...l,state:"cancelled",error:"Cancelled before dispatch."},s(i)}),e.outputs=e.samples.map((l)=>({text:Le(l)?l.text:"",expected_count:l.expectedCount})),e.error="Cancelled. This round was not scored.";else jr(e,t,r,a);e.finishedAt=Date.now()}var Hr="Scoring failed. Check that the reference bank and detector files are valid.";function Ot(e){let t=e;return{decision:e.decision??"scored",prediction:e.prediction,prediction_name:e.prediction_name,family_prediction:t.family_prediction??"",family_prediction_name:e.family_prediction_name,results:e.results,ranking_score:e.ranking_score??null,probability:e.probability,probability_status:t.probability_status,probability_scope:t.probability_scope??null,calibration:t.calibration??null,used_outputs:e.used_outputs,diagnostics:e.diagnostics,sequence:e.sequence??null,method:t.method,model_version:t.model_version,evidence:e.evidence}}function Kr(e,t,r,a){return Ot($t(Pt(e,t,r,{allowPartial:!a})))}function Vr(e,t,r,a){if(!Array.isArray(e)||e.length<1||e.length>3||!e.every((s)=>s&&typeof s.text==="string"&&Number.isSafeInteger(s.expected_count)&&s.expected_count>0))throw Error("Each input round must contain one to three outputs with text and a positive integer expected_count.");let n=e.map(({text:s,expected_count:o})=>{let c=ke(s);if(!a&&c.length>o)s=c.slice(0,o).join(", ");if(c.length3)throw Error("count must be an integer from 1 to 3.");if(!Number.isSafeInteger(c)||c<1||c>3)throw Error("parallel must be an integer from 1 to 3.");if(!Number.isFinite(l)||l!==0&&(l<0.001||l>2147483.647))throw Error("timeout must be 0 (no timeout) or between 0.001 and 2147483.647 seconds.");let i=e.strict??!1;if(i&&o!==3)throw Error("strict requires count 3.");let p={baseUrl:t,apiKey:r,model:a,format:bt[n],serviceTier:s,stream:e.stream??!0,effort:e.effort??""};return Rt(p),{config:p,count:o,parallel:Math.min(c,o),repeat:1,strict:i,timeoutMs:Math.round(l*1000),tokenizer:!1,maxProbes:20}}var an=ArrayBuffer,J=Uint8Array,Te=Uint16Array,on=Int16Array,Me=Int32Array,Oe=function(e,t,r){if(J.prototype.slice)return J.prototype.slice.call(e,t,r);if(t==null||t<0)t=0;if(r==null||r>e.length)r=e.length;var a=new J(r-t);return a.set(e.subarray(t,r)),a},ve=function(e,t,r,a){if(J.prototype.fill)return J.prototype.fill.call(e,t,r,a);if(r==null||r<0)r=0;if(a==null||a>e.length)a=e.length;for(;re.length)a=e.length;while(r2046MB)","invalid block type","FSE accuracy too high","match distance too far back","unexpected EOF"],F=function(e,t,r){var a=Error(t||cn[e]);if(a.code=e,Error.captureStackTrace)Error.captureStackTrace(a,F);if(!r)throw a;return a},_t=function(e,t,r){var a=0,n=0;for(;a>>0},un=function(e,t){var r=e[0]|e[1]<<8|e[2]<<16;if(r==3126568&&e[3]==253){var a=e[4],n=a>>5&1,s=a>>2&1,o=a&3,c=a>>6;if(a&8)F(0);var l=6-n,i=o==3?4:o,p=_t(e,l,i);l+=i;var u=c?1<>3);g=v+(v>>3)*(e[5]&7)}if(g>2145386496)F(1);var w=new J((t==1?m||g:t?0:g)+12);return w[0]=1,w[4]=4,w[8]=8,{b:l+u,y:0,l:0,d:p,w:t&&t!=1?t:w.subarray(12),e:g,o:new Me(w.buffer,0,3),u:m,c:s,m:Math.min(131072,g)}}else if((r>>4|e[3]<<20)==25481893)return ln(e,4)+8;F(0)},pe=function(e){var t=0;for(;1<r)F(3);var s=1<0){var I=pe(o+1),N=a>>3,C=(1<>(a&7)&C,x=(1<x)P-=E;if(m[++c]=--P,P==-1)o+=P,f[--p]=c;else o-=P;if(!P)do{var b=a>>3;l=(e[b]|e[b+1]<<8)>>(a&7)&3,a+=2,c+=l}while(l==3)}if(c>255||o)F(0);var k=0,G=(s>>1)+(s>>3)+3,d=s-1;for(var _=0;_<=c;++_){var y=m[_];if(y<1){g[_]=-y;continue}for(i=0;i=p)}}if(k)F(0);for(i=0;i>3,{b:n,s:f,n:A,t:v}]},dn=function(e,t){var r=0,a=-1,n=new J(292),s=e[t],o=n.subarray(0,256),c=n.subarray(256,268),l=new Te(n.buffer,268);if(s<128){var i=be(e,t+1,6),p=i[0],u=i[1];t+=s;var m=p<<3,g=e[t];if(!g)F(0);var v=0,w=0,f=u.b,A=f,I=(++t<<3)-8+pe(g);for(;;){if(I-=f,I>3;if(v+=(e[N]|e[N+1]<<8)>>(I&7)&(1<>3,w+=(e[N]|e[N+1]<<8)>>(I&7)&(1<255)F(0)}else{a=s-127;for(;r>4,o[r+1]=C&15}++t}var P=0;for(r=0;r11)F(0);P+=x&&1<0;--r){var _=l[r];ve(d,r,_,l[r-1]=_+c[r]*(1<c&&u>3,g=(e[m]|e[m+1]<<8|e[m+2]<<16)>>(p&7);l=(l<>2,o=s<<1,c=s+o;we(e.subarray(a,a+=e[0]|e[1]<<8),t.subarray(0,s),r),we(e.subarray(a,a+=e[2]|e[3]<<8),t.subarray(s,o),r),we(e.subarray(a,a+=e[4]|e[5]<<8),t.subarray(o,c),r),we(e.subarray(a),t.subarray(c),r)},wn=function(e,t,r){var a,n=t.b,s=e[n],o=s>>1&3;t.l=s&1;var c=s>>3|e[n+1]<<5|e[n+2]<<13,l=(n+=3)+c;if(o==1){if(n>=e.length)return;if(t.b=n+1,r)return ve(r,e[n],t.y,t.y+=c),r;return ve(new J(c),e[n])}if(l>e.length)return;if(o==0){if(t.b=l,r)return r.set(e.subarray(n,l),t.y),t.y+=c,r;return Oe(e,n,l)}if(o==2){var i=e[n],p=i&3,u=i>>2&3,m=i>>4,g=0,v=0;if(p<2)if(u&1)m|=e[++n]<<4|(u&2&&e[++n]<<12);else m=i>>3;else if(v=u,u<2)m|=(e[++n]&63)<<4,g=e[n]>>6|e[++n]<<2;else if(u==2)m|=e[++n]<<4|(e[++n]&3)<<12,g=e[n]>>2|e[++n]<<6;else m|=e[++n]<<4|(e[++n]&63)<<12,g=e[n]>>6|e[++n]<<2|e[++n]<<10;++n;var w=r?r.subarray(t.y,t.y+t.m):new J(t.m),f=w.length-m;if(p==0)w.set(e.subarray(n,n+=m),f);else if(p==1)ve(w,e[n++],f);else{var A=t.h;if(p==2){var I=dn(e,n);g+=n-(n=I[0]),t.h=A=I[1]}else if(!A)F(0);(v?yn:we)(e.subarray(n,n+=g),w.subarray(f),A)}var N=e[n++];if(N){if(N==255)N=(e[n++]|e[n++]<<8)+32512;else if(N>127)N=N-128<<8|e[n++];var C=e[n++];if(C&3)F(0);var P=[mn,fn,pn];for(var x=2;x>-1;--x){var E=C>>(x<<1)+2&3;if(E==1){var q=new J([0,0,e[n++]]);P[x]={s:q.subarray(2,3),n:q.subarray(0,1),t:new Te(q.buffer,0,1),b:0}}else if(E==2)a=be(e,n,9-(x&1)),n=a[0],P[x]=a[1];else if(E==3){if(!t.t)F(0);P[x]=t.t[x]}}var b=t.t=P,k=b[0],G=b[1],d=b[2],_=e[l-1];if(!_)F(0);var y=(l<<3)-8+pe(_)-d.b,h=y>>3,S=0,T=(e[h]|e[h+1]<<8)>>(y&7)&(1<>3;var O=(e[h]|e[h+1]<<8)>>(y&7)&(1<>3;var M=(e[h]|e[h+1]<<8)>>(y&7)&(1<>3;var z=1<>>(y&7)&z-1);h=(y-=Ge[Y])>>3;var U=gn[Y]+((e[h]|e[h+1]<<8|e[h+2]<<16)>>(y&7)&(1<>3;var D=hn[X]+((e[h]|e[h+1]<<8|e[h+2]<<16)>>(y&7)&(1<>3,T=d.t[T]+((e[h]|e[h+1]<<8)>>(y&7)&(1<>3,M=k.t[M]+((e[h]|e[h+1]<<8)>>(y&7)&(1<>3,O=G.t[O]+((e[h]|e[h+1]<<8)>>(y&7)&(1<3)t.o[2]=t.o[1],t.o[1]=t.o[0],t.o[0]=R-=3;else{var H=R-(D!=0);if(H){if(R=H==3?t.o[0]-1:t.o[H],H>1)t.o[2]=t.o[1];t.o[1]=t.o[0],t.o[0]=R}else R=t.o[0]}for(var x=0;xU)W=U;for(var x=0;xi&&typeof i==="object"&&("$f32"in i)?Array.from(c.subarray(i.$f32,i.$f32+i.n)):i)}var An=["https://lm.ikale.io/data/","https://cdn.jsdmirror.com/npm/lmfpd-data@latest/"],xn="lmfpd-data-v1",En="shared-detector-v2",Fe="shared_detector.bin",We=(e)=>new TextDecoder().decode(e),Tn=(e)=>e instanceof Error?e.message:String(e);function He(e,t){if(!Array.isArray(e?.models)||!Ct(e,t))throw Error("The reference bank does not match its detector.");return{bank:e,detector:t}}async function kn(e){let t=async(r,a)=>{let n=Ut(e,r);try{return a(await Lt(n))}catch{throw Error(`Cannot read ${n}.`)}};return He(await t("unified_bank.json",(r)=>JSON.parse(We(r))),await t(Fe,je))}async function Mn(e){try{let[t,r]=await Promise.all([Lt(e),en(e)]),a=t.readUInt32LE(0),n=JSON.parse(We(t.subarray(4,4+a)));return{data:He(n,je(t.subarray(4+a))),version:n.files[Fe].sha256,checkedAt:r.mtimeMs}}catch{return}}async function In(e,t,r){let a=Buffer.alloc(4);a.writeUInt32LE(t.length);let n=`${e}.tmp-${Yr(8).toString("hex")}`;try{await Xr(nn(e),{recursive:!0}),await rn(n,Buffer.concat([a,t,r])),await Zr(n,e)}catch{await Qr(n,{force:!0}).catch(()=>{})}}async function St(e,t){let r=await fetch(e,{signal:AbortSignal.timeout(t)});if(!r.ok)throw Error(`HTTP ${r.status}`);return new Uint8Array(await r.arrayBuffer())}async function At(e,t,r){let a=[];for(let n of e)try{let s=await St(`${n}bundle.json`,1e4),o=JSON.parse(We(s));if(o.schema!==xn||o.detector_schema!==En)throw Error(`data schema ${o.schema}/${o.detector_schema} is not supported by this SDK version. Upgrade lmfpd.`);let c=o.files[Fe];if(c.sha256===r){let u=new Date;await tn(t,u,u).catch(()=>{});return}let l=[];for(let u of c.parts)l.push(await St(`${n}chunks/${u}`,120000));let i=bn(Buffer.concat(l)),p=He(o,je(i));return await In(t,s,i),p}catch(s){a.push(`${n} (${Tn(s)})`)}throw Error(`lmfpd: cannot download reference data from ${a.join(", ")}`)}async function Nn(e=An,t=Ut(Sn(),"data.bin"),r=86400){let a=typeof e==="string"?[e]:e;if(a.length===1&&!/^https?:\/\//i.test(a[0]))return kn(a[0]);let n=await Mn(t);if(!n)return await At(a,t);if(Date.now()-n.checkedAt>=r*1000)At(a,t,n.version).catch(()=>{});return n.data}var Be=(e)=>({state:e.state,text:e.text,raw_text:e.rawText,count:e.count,expected_count:e.expectedCount,first_byte_ms:e.firstByteMs??null,response_model:e.responseModel??null,response_id:e.responseId??null,error:e.error??null}),Gt;class Bt{static{Gt=(e)=>new Bt(e)}#e;builtAt;constructor(e){this.#e=e,this.builtAt=e.bank.built_at}analyze(e,t={}){return Vr(e,this.#e.bank,this.#e.detector,t.strict??!1)}async detect(e,{signal:t,onSample:r}={}){let a=zt(e);if(t?.aborted)return{challenges:[],samples:[],analysis:null,error:"Cancelled. This round was not scored."};let n=Fr(1,Et(a.count)),s=r?(o)=>{try{r(o,Be(n.samples[o]))}catch(c){queueMicrotask(()=>{throw c})}}:()=>{};return n.samples.forEach((o,c)=>s(c)),await Wr(n,a,this.#e.bank,this.#e.detector,t??new AbortController().signal,s),{challenges:n.challenges,samples:n.samples.map(Be),analysis:n.analysis?Ot(n.analysis):null,error:n.error??null}}}async function Jt(e={}){return Gt(await Nn(e.source,e.cache,e.ttl))}function Ie(e=3){if(!Number.isSafeInteger(e)||e<1||e>3)throw Error("count must be an integer from 1 to 3.");return Et(e)}function jt(e){return ke(e)}async function Ft(e,t){return Be(await Dt(zt(e),t,new AbortController().signal,()=>{}))}import{homedir as Rn}from"os";import{join as Wt}from"path";function Ne(e={}){let t=process.env.MAGPIE_ADDR?.replace(/^(0\.0\.0\.0|\[::\]):/,"127.0.0.1:"),r=(e.gateway||process.env.MAGPIE_FINGERPRINT_GATEWAY||(t?`http://${t}`:"http://127.0.0.1:3425")).replace(/\/+$/,""),a=new URL(r);if(!["http:","https:"].includes(a.protocol)||a.username||a.password||a.search||a.hash||a.pathname!=="/"&&a.pathname!=="")throw Error("Gateway must be an HTTP(S) origin without credentials, path, query or fragment.");let n=e.port??Number(process.env.MAGPIE_FINGERPRINT_PORT||3488);if(!Number.isInteger(n)||n<0||n>65535)throw Error("Invalid service port.");return{port:n,gateway:r,apiKey:e.apiKey||process.env.MAGPIE_FINGERPRINT_API_KEY||"",dataDir:e.dataDir||process.env.MAGPIE_FINGERPRINT_DATA_DIR||Wt(process.env.XDG_CONFIG_HOME||Wt(Rn(),".config"),"magpie","fingerprint"),bankSource:e.bankSource||process.env.MAGPIE_FINGERPRINT_BANK_SOURCE,demo:e.demo??!1,uiDir:e.uiDir}}class _e extends Error{}async function me(e,t){if(Number(e.headers.get("content-length")||0)>t)throw await e.body?.cancel(),new _e("Body exceeds the size limit.");if(!e.body)return"";let r=e.body.getReader(),a=[],n=0;try{while(!0){let s=await r.read();if(s.done)break;if(n+=s.value.byteLength,n>t)throw await r.cancel(),new _e("Body exceeds the size limit.");a.push(s.value)}return Buffer.concat(a).toString("utf8")}finally{r.releaseLock()}}function Ht(e){return/^[\x20-\x7e]*$/.test(e)?e:encodeURIComponent(e)}class Ke{url;key;constructor(e,t=""){this.url=e;this.key=t}headers(e={}){return{"content-type":"application/json",...this.key?{authorization:`Bearer ${this.key}`}:{},...e}}redact(e){return String(e instanceof Error?e.message:e).replaceAll(this.key||"\x00","[redacted]").slice(0,500)}async catalog(){let e=await fetch(`${this.url}/v1/models`,{headers:this.headers(),signal:AbortSignal.timeout(5000),redirect:"error"});if(!e.ok)throw await e.body?.cancel(),Error(`Magpie model catalog returned HTTP ${e.status}.`);let r=(JSON.parse(await me(e,4194304)).data||[]).filter((n)=>{if(typeof n.id!=="string"||!n.id.includes("/")||n.id.startsWith("group/"))return!1;if(/^(embedding|image|audio)(_|$)/.test(n.type||""))return!1;if(Array.isArray(n.modalities?.output)&&!n.modalities.output.includes("text"))return!1;let s=Array.isArray(n.native_endpoints)?n.native_endpoints:[];return!s.length||!s.every((o)=>typeof o==="string"&&/\/(images|embeddings|audio)\b/.test(o))}).map((n)=>({id:n.id,name:String(n.display_name||n.name||n.id),provider:n.id.split("/")[0],efforts:(Array.isArray(n.reasoning_levels)?n.reasoning_levels:(n.supported_reasoning_levels||[]).map((s)=>s.effort)).filter((s)=>typeof s==="string"),nativeEndpoints:Array.isArray(n.native_endpoints)?n.native_endpoints.filter((s)=>typeof s==="string"):[]})),a=[];try{let n=await fetch(`${this.url}/v1/magpie/quotas?kept=1`,{headers:this.headers(),signal:AbortSignal.timeout(2500),redirect:"error"});if(n.ok){let s=JSON.parse(await me(n,1048576));for(let o of s.data||[])if(typeof o.provider==="string"&&typeof o.user==="string"&&o.user&&(!o.kind||o.kind==="subscription")){if(!a.some((c)=>c.provider===o.provider&&c.id===o.user))a.push({id:o.user,name:String(o.alias||o.user),provider:o.provider})}}else await n.body?.cancel()}catch{}return{models:r,accounts:a}}async route(e){try{let t=await fetch(`${this.url}/v1/magpie/route?session=${encodeURIComponent(e.session)}`,{headers:this.headers(),signal:AbortSignal.timeout(2500),redirect:"error"});if(!t.ok)throw await t.body?.cancel(),Error(`Route metadata HTTP ${t.status}`);e.route=JSON.parse(await me(t,262144));let r=e.route?.route??e.route;if(r?.model&&typeof r.model==="string"){if(e.model??=r.model,r.model!==e.requestedModel)e.mismatch=!0}}catch(t){e.routeError=this.redact(t)}}}import{mkdir as Dn,readdir as Cn,readFile as Pn,rename as $n,writeFile as On,unlink as zn}from"fs/promises";import{join as Ve}from"path";class Ye{dir;jobs=new Map;writing=Promise.resolve();constructor(e){this.dir=e}async load(){await Dn(this.dir,{recursive:!0,mode:448});for(let e of await Cn(this.dir)){if(!/^[\w-]+\.json$/.test(e))continue;try{let t=JSON.parse(await Pn(Ve(this.dir,e),"utf8"));if(!t.id||!Array.isArray(t.results)||e!==`${t.id}.json`)continue;if(t.state==="running"||t.state==="queued"){t.state="interrupted",t.error="The plugin service restarted before this job finished.",t.finishedAt=new Date().toISOString();for(let r of t.results)if(r.state==="running"||r.state==="queued")r.state="cancelled",r.analysis=null;await this.save(t)}this.jobs.set(t.id,t)}catch{}}}list(){return[...this.jobs.values()].sort((e,t)=>t.createdAt.localeCompare(e.createdAt))}save(e){let t=JSON.stringify(e),r=Ve(this.dir,`${e.id}.json`),a=this.writing.then(async()=>{let n=`${r}.tmp`;await On(n,t,{mode:384}),await $n(n,r)});return this.writing=a.catch(()=>{}),a}async remove(e){await this.writing,await zn(Ve(this.dir,`${e}.json`)),this.jobs.delete(e)}async flush(){await this.writing}}function Kt(e,t){let r=new TextDecoder,a="",n="",s=!1,o=!1,c=(i)=>{let p=i.split(/\r\n|\r|\n/).filter((u)=>u.startsWith("data:")).map((u)=>u.slice(5).replace(/^ /,"")).join(` +`);if(!q)return;if(q.trim()==="[DONE]"){m=!0;return}let b;try{b=le(JSON.parse(q))}catch{throw Error("The SSE response contains invalid JSON.")}if(P(b),I(b),n.format==="openai"){let k=he(b.choices).find((G)=>G.index===0)??he(b.choices)[0];if(k?.delta?.refusal)throw Error("The model refused the request.");if(k?.delta?.reasoning_content||k?.delta?.reasoning)f?.reasoning();if(k?.finish_reason)u=B(k.finish_reason);if(typeof k?.delta?.content==="string")C(k.delta.content)}else if(n.format==="anthropic"){if(b.type==="message_start")I(le(b.message));if(["thinking","redacted_thinking"].includes(b.content_block?.type)||b.delta?.type==="thinking_delta")f?.reasoning();if(b.type==="content_block_start"&&b.content_block?.type==="text")C(B(b.content_block.text));if(b.type==="content_block_delta"&&b.delta?.type==="text_delta")C(B(b.delta.text));if(b.type==="message_delta")u=B(b.delta?.stop_reason)||u;if(b.type==="message_stop")m=!0}else{if(b.type==="response.created"||b.type==="response.in_progress")I(le(b.response));if(B(b.type).startsWith("response.reasoning"))f?.reasoning();if(b.type==="response.output_text.delta")C(B(b.delta));if(b.type==="response.output_text.done"&&!c.rawText)N(B(b.text),!0);if(b.type==="response.output_item.done"&&!c.rawText)N(Pe({output:[b.item]}),!0);if(b.type==="response.refusal.delta")throw Error("The model refused the request.");if(b.type==="response.completed"){let k=le(b.response);I(k),m=!0,u=B(k.status)||"completed";let G=Pe(k);if(G&&!g)N(G,!0)}if(b.type==="response.failed"||b.type==="response.incomplete")throw Error(`Responses request did not complete: ${B(b.response?.error?.message)||B(b.response?.incomplete_details?.reason)||b.type}.`)}if(["refusal","content_filter"].includes(u))throw Error("The model refused the request.")};A();try{o.throwIfAborted();let{url:E,headers:q,body:b}=Rr(n,t.prompt),k={method:"POST",headers:q,body:JSON.stringify(b),signal:o,redirect:"error",timeout:!1},G=performance.now(),d=await fetch(E,k);if(!d.ok){let _=await d.text(),y=_;try{let h=le(JSON.parse(_));y=B(h.error?.message)||B(h.message)||_}catch{}throw Error(`HTTP ${d.status}: ${y||d.statusText}`)}if(d.headers.get("content-type")?.toLowerCase().includes("text/event-stream")){if(!d.body)throw Error("The server returned an empty SSE body.");p=d.body.getReader(),f=Mr(G);let _=new TextDecoder,y="",h=1/0,S=!0,T=()=>!m&&(!g||S),O=(M)=>{if(!g)return x(M);try{x(M)}catch{S=!1}};while(T()){if(g&&h===1/0)h=performance.now()+Er;let M=await Tr(p,h);if(!M)break;let{done:X,value:L}=M;if(L?.length&&c.firstByteMs===void 0)clearTimeout(i),c.firstByteMs=Date.now()-c.startedAt,c.state="streaming",A();y+=X?_.decode():_.decode(L,{stream:!0});let Y;while(T()&&(Y=/\r\n\r\n|\n\n|\r\r/.exec(y)))O(y.slice(0,Y.index)),y=y.slice(Y.index+Y[0].length);if(X){if(T()&&y.trim())O(y);break}}}else{let _;try{_=le(await d.json())}catch(h){if(o.aborted)throw h;throw Error("The server did not return valid JSON or SSE.")}clearTimeout(i),c.firstByteMs=Date.now()-c.startedAt,P(_),I(_);let y;if(n.format==="responses")y=Pe(_),u=B(_.status),m=u==="completed";else if(n.format==="anthropic")y=he(_.content).filter((h)=>h.type==="text").map((h)=>B(h.text)).join(""),u=B(_.stop_reason),m=!0;else{let h=he(_.choices)[0];if(h?.message?.refusal)throw Error("The model refused the request.");y=B(h?.message?.content),u=B(h?.finish_reason),m=!0}if(["refusal","content_filter"].includes(u))throw Error("The model refused the request.");if(!m||!["stop","end_turn","completed"].includes(u))throw Error(`The response did not complete (${u||"missing finish status"}).`);N(y,!0)}if(o.throwIfAborted(),!g&&(!m||!["stop","end_turn","completed"].includes(u)))throw Error(`The response did not complete (${u||"missing finish status"}).`);if(!g)N(c.rawText,!0);if(c.count{}),p.releaseLock();c.finishedAt=Date.now(),c.throughput=f?.result(w),A()}return{...c}}var Dr=[0.6,0.15,0.125,0.125],Cr=Array.from({length:24},(e,t)=>1+t*354/23),Pr=[1,2,3,5,8,13,21,34],Ae=(e)=>e.reduce((t,r)=>t+r,0)/e.length,ae=(e,t)=>{let r=0;for(let a=0;a{let s=(n+0.5)*2/t-1,o=[s,0.5*(3*s*s-1),0.5*(5*s**3-3*s)];[...Cr.map((l)=>Math.exp(-0.5*((a-l)/20)**2)),...Array.from({length:10},(l,i)=>i===a%10?1:0)].forEach((l,i)=>o.forEach((p,u)=>{r[i*3+u]+=l*p/t}))}),r}function pt(e,t){let r=Array(t*t).fill(0.5),a=e.length-1+0.5*t*t;for(let o=1;or.slice(c*t,c*t+t).reduce((l,i)=>l+i,0)),s=Array.from({length:t},(o,c)=>n.reduce((l,i,p)=>l+r[p*t+c],0));return r.map((o,c)=>o-n[Math.floor(c/t)]*s[c%t])}function Or(e){let t=e.length,r=Ae(e),a=Math.max(Math.sqrt(Ae(e.map((i)=>(i-r)**2))),1),n=e.map((i)=>(i-r)/a),s=[];for(let i of Pr){let p=t-i,u=Array.from({length:p},(m,g)=>e[g+i]-e[g]);s.push(Ae(u.map((m,g)=>n[g+i]*n[g])),Ae(u.map(Math.abs))/355,ae(p,(m)=>u[m]>0),ae(p,(m)=>u[m]===0),ae(p,(m)=>Math.abs(u[m])<=5),ae(p,(m)=>Math.abs(u[m])<=20))}s.push(...pt(e.map((i)=>Math.min(7,Math.floor((i-1)*8/355))),8)),s.push(...pt(e.map((i)=>i%10),10));let o=Array.from({length:t-1},(i,p)=>e[p+1]-e[p]),c=Array.from({length:t-1},(i,p)=>Math.abs(n[p+1]-n[p]));s.push(ae(t-2,(i)=>Math.sign(o[i+1])===Math.sign(o[i])),ae(t-2,(i)=>o[i+1]===o[i]),ae(t-1,(i)=>e[i]%10===e[i+1]%10),ae(t-1,(i)=>c[i]>1),ae(t-1,(i)=>c[i]>2));let l=e.map((i)=>Math.min(15,Math.floor((i-1)*16/355)));for(let i of[4,8,16]){let p=0;for(let u=0;u+i<=t;u++)p+=new Set(l.slice(u,u+i)).size/i;s.push(p/(t-i+1))}return s}function zr(e){return[It(Mt(e)),Nt(e),$r(e),Or(e)]}function Lr(e,t){let a=zr(e).flatMap((n,s)=>{let o=t.params[s],c=n.map((i,p)=>(i-o.mean[p])/o.scale[p]),l=Math.max(Math.sqrt(c.reduce((i,p)=>i+p*p,0)),0.000000000001);return c.map((i)=>i/l*Math.sqrt(Dr[s]))});return t.weights.map((n,s)=>n.reduce((o,c,l)=>o+c*a[l],t.bias[s]))}var oe=(e,t)=>e.reduce((r,a,n)=>r+a*t[n],0),ue=(e)=>e.reduce((t,r)=>t+r,0)/e.length,Ee=(e)=>{let t=Math.max(Math.sqrt(oe(e,e)),0.000000000001);return e.map((r)=>r/t)},te=(e)=>{let t=ue(e),r=Math.max(Math.sqrt(ue(e.map((a)=>(a-t)**2))),0.000000000001);return e.map((a)=>(a-t)/r)},$e=(e)=>e[0].map((t,r)=>ue(e.map((a)=>a[r]))),Ue=(e)=>{let t=[...e].sort((a,n)=>a-n),r=Math.floor(t.length/2);return t.length%2?t[r]:(t[r-1]+t[r])/2},mt=(e)=>[It(Mt(e)),Nt(e)],ft=(e,t)=>e.flatMap((r,a)=>Ee(r.map((n,s)=>(n-t[a].mean[s])/t[a].scale[s])).map((n)=>n*Math.sqrt(a===0?0.75:0.25))),ht=(e,t)=>e.map((r,a)=>(r-t.feature_mean[a])/t.feature_scale[a]),gt=(e,t)=>{let r=t.map((a)=>oe(e,a));return e.map((a,n)=>a-t.reduce((s,o,c)=>s+r[c]*o[n],0))},yt=new WeakMap;function Ur(e,t){let r=yt.get(t);if(!r)r=t.map((n)=>oe(n,n)),yt.set(t,r);let a=oe(e,e);return ue(t.map((n,s)=>Math.max(0,a+r[s]-2*oe(e,n))).sort((n,s)=>n-s).slice(0,7))}function qr(e,t){let{hellinger:r,ordered_blocks:a}=t,n=Ee(gt(ht(e[0],r),r.nuisance_basis)),s=r.centroids.map((w)=>oe(n,w)),o=ht(e[1],a),c=Ee(o),l=Ee(gt(o,a.nuisance_basis)),i=a.centroids.map((w,f)=>Math.max(...a.environment_centroids.map((A)=>oe(c,A[f])))),p=a.centroids.map((w)=>oe(l,w)),u=te(i),m=te(p),g=te(u.map((w,f)=>0.5*w+0.5*m[f]));return te(s).map((w,f)=>0.5*w+0.5*g[f])}function Ct(e,t){return t.schema==="shared-detector-v2"&&e.built_at===t.bank_built_at&&e.models.length===t.model_ids.length&&e.models.every((r,a)=>r.id===t.model_ids[a]&&r.response_count===t.response_counts[a])}function Gr(e,t){let r=t.calibration,a=r?.binding;if(!r||!a||r.schema!=="shared-confidence-v2"||r.method!=="ranking-temperature"||!Number.isFinite(r.tau)||r.tau<0.001||r.tau>1000||a.base_sha256!==t.base_sha256||a.reference_sha256!==t.source_reference_sha256||a.model_ids.length!==e.length||e.length!==t.model_ids.length||!e.every(Number.isFinite)||!a.model_ids.every((l,i)=>l===t.model_ids[i]))return null;let n=e.map((l)=>r.tau*l),s=Math.max(...n),o=n.map((l)=>Math.exp(l-s)),c=o.reduce((l,i)=>l+i,0);return o.map((l)=>l/c)}function wt(e,t){let r=t.ranker,a=e.map(mt),n=a.map((m)=>ft(m,r.full_params)),s=e.map((m)=>{let g=ft(mt(m.slice(0,128)),r.head_params);return te(r.lda_weights.map((v,w)=>oe(v,g)+r.lda_bias[w]))}),o=te($e(s)),c=te(r.references.map((m)=>Ue(n.map((g)=>-Ur(g,m))))),l=te($e(a.map((m)=>qr(m,r.bank)))),i=te(o.map((m,g)=>0.5*m+0.25*c[g]+0.25*l[g])),p=te($e(e.map((m)=>te(Lr(m,r.positional))))),u=i.map((m,g)=>r.blend.frequency*m+r.blend.positional*p[g]);if(!u.every(Number.isFinite))throw Error("\u6392\u540D\u8BA1\u7B97\u4EA7\u751F\u65E0\u6548\u6570\u503C\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5");return u}var vt={autocorrelation:-0.23,small_step_share:0.05};function Br(e){let t=e.map((n)=>{let s=ue(n),o=ue(n.map((l)=>(l-s)**2)),c=n.slice(1).map((l,i)=>l-n[i]);return{autocorrelation:o?ue(c.map((l,i)=>(n[i+1]-s)*(n[i]-s)))/o:1,small_step_share:ue(c.map((l)=>Math.abs(l)<=20?1:0))}}),r=Ue(t.map((n)=>n.autocorrelation)),a=Ue(t.map((n)=>n.small_step_share));return{autocorrelation:r,small_step_share:a,model_like:r<=vt.autocorrelation||a<=vt.small_step_share}}function Pt(e,t,r,a={}){if(!Ct(t,r))throw Error("The reference bank does not match the detector. Run fpd retrain --data-dir DIR for this bank.");let n=e.map((f)=>ke(f.text)),s=e.map((f,A)=>{let I=Math.max(80,Math.ceil((f.expected_count||0)*0.55)),N=Array.from(f.text.matchAll(/-?\d+/g),(C)=>Number(C[0]));return{index:A,parsed_numbers:n[A].length,minimum_numbers:I,accepted:n[A].length>=I,raw_out_of_range_count:N.filter((C)=>C<1||C>355).length}}),o=s.filter((f)=>f.accepted).length,c=n.filter((f,A)=>s[A].accepted),l=o?Br(c):null,i={probability:null,probability_status:"unavailable",used_outputs:o,diagnostics:s,sequence:l,method:"shared-detector-v2",model_version:{base_sha256:r.base_sha256}},p={...i,prediction:"",prediction_name:"\u4E0D\u50CF\u8BED\u8A00\u6A21\u578B\u56DE\u7B54",family_prediction_name:"",results:[],decision:"not_model",evidence:{insufficient:!0,label:"\u4E0D\u50CF\u8BED\u8A00\u6A21\u578B\u56DE\u7B54",reason:"\u76F8\u90BB\u6570\u5B57\u7684\u53D8\u5316\u65B9\u5F0F\u4E0E\u53C2\u8003\u5E93\u4E2D\u7684\u8BED\u8A00\u6A21\u578B\u56DE\u7B54\u4E0D\u540C\uFF0C\u5E38\u89C1\u4E8E\u7A0B\u5E8F\u751F\u6210\u3001\u6392\u5E8F\u6216\u6253\u4E71\u987A\u5E8F\u7684\u6570\u5B57\u3002\u672A\u751F\u6210\u6392\u540D\u3002",threshold:null,method:"sequence-shape"}};if(a.allowPartial&&o>0&&o<3&&e.length<=3){if(!l.model_like)return p;let f=wt(c,r),A=r.model_ids.map((C,P)=>P).sort((C,P)=>f[P]-f[C]),I=A.map((C)=>({model:r.model_ids[C],display_name:t.models[C].display_name,family:t.models[C].family,family_name:t.models[C].family_name,score:f[C],probability:null})),N=A[0];return{...i,method:"shared-ranker-partial-v1",decision:"partial",prediction:I[0].model,prediction_name:I[0].display_name,family_prediction:t.models[N].family,family_prediction_name:t.models[N].family_name,results:I,ranking_score:f[N],calibration:null,evidence:{insufficient:!0,label:"\u90E8\u5206\u6837\u672C\u6392\u540D",reason:`\u4F7F\u7528 ${o}/3 \u6761\u6709\u6548\u56DE\u7B54\u751F\u6210\u6392\u540D\u3002\u8865\u9F50\u4E09\u6761\u6709\u6548\u56DE\u7B54\u540E\u624D\u80FD\u8BA1\u7B97\u7F6E\u4FE1\u5EA6\u3002`,threshold:null,method:"partial-sample-ranking"}}}if(e.length!==3||o!==3)return{...i,prediction:"",prediction_name:"\u6682\u4E0D\u53EF\u8BC4\u5206",family_prediction_name:"",results:[],decision:"unscorable",evidence:{insufficient:!0,label:"\u9700\u8981\u4E09\u6761\u5B8C\u6574\u56DE\u7B54",reason:`\u5F53\u524D\u6709 ${o}/${e.length} \u6761\u6709\u6548\u56DE\u7B54\u3002\u8BF7\u8865\u9F50\u539F\u6765\u7684\u4E09\u6761\u56DE\u7B54\u540E\u91CD\u65B0\u68C0\u6D4B\u3002`,threshold:null,method:"complete-three-answers"}};if(!l.model_like)return p;let u=wt(n,r),m=Gr(u,r),g=r.model_ids.map((f,A)=>A).sort((f,A)=>u[A]-u[f]),v=g.map((f)=>({model:r.model_ids[f],display_name:t.models[f].display_name,family:t.models[f].family,family_name:t.models[f].family_name,score:u[f],probability:m?.[f]??null})),w=g[0];return{...i,prediction:v[0].model,prediction_name:v[0].display_name,family_prediction:t.models[w].family,family_prediction_name:t.models[w].family_name,results:v,ranking_score:u[w],probability:v[0].probability,probability_status:m?"reference_calibrated":"unavailable",probability_scope:m?"reference-closed-set":null,calibration:m?{method:r.calibration.method,run:r.calibration.calibration_run,tau:r.calibration.tau,sha256:r.calibration_sha256??null}:null,evidence:{insufficient:!0,label:m?"\u5E93\u5185\u6821\u51C6\u6392\u540D":"\u672A\u6821\u51C6\u6392\u540D",reason:m?"\u7F6E\u4FE1\u5EA6\u662F\u53C2\u8003\u5E93\u5185\u7684\u95ED\u96C6\u76F8\u5BF9\u6982\u7387\uFF0C\u4E0D\u5305\u542B\u5E93\u5916\u6A21\u578B\u3002":"\u6821\u51C6\u53C2\u6570\u4E0E\u5F53\u524D\u68C0\u6D4B\u5668\u4E0D\u5339\u914D\uFF0C\u7F6E\u4FE1\u5EA6\u4E0D\u53EF\u7528\u3002\u5019\u9009\u987A\u5E8F\u7531\u6392\u540D\u5206\u6570\u51B3\u5B9A\u3002",threshold:null,method:m?"reference-calibrated-ranking":"uncalibrated-ranking"}}}var Jr={prior:{known:0.8,relative:0.1,alien:0.1},knownRates:[[0.02,0.4],[0.06,0.4],[0.15,0.2]],relativeRates:[[0.2,0.3],[0.4,0.4],[0.7,0.3]],narrow:0.02,wide:0.85,floor:0.000001,offsetWindow:3,alienSpread:0.15,minimumProbes:4,maximumProbes:20,stopAt:0.99,minimumGain:0.0001,planned:24};var ma=Jr.knownRates[0][0];function $t(e){let t,r;if(e.decision==="unscorable")t="Not enough valid samples",r=`Received ${e.used_outputs}/3 valid samples. Three valid samples are required.`;else if(e.decision==="not_model")t="Not like a language model reply",r="Consecutive numbers change differently from the language-model replies in the reference bank. Program-generated, sorted or shuffled numbers often do this. No ranking was produced.";else if(e.decision==="partial")t="Partial sample ranking",r=`Ranked ${e.used_outputs} valid sample${e.used_outputs===1?"":"s"}. Confidence requires three valid samples.`;else if(e.probability_status==="reference_calibrated")t="Calibrated ranking",r="Confidence is a closed-set probability within the reference bank.";else t="Uncalibrated ranking",r="The confidence calibration does not match this detector. Confidence is unavailable.";return{...e,prediction_name:e.decision==="unscorable"?"Not scored":e.decision==="not_model"?"Not a model reply":e.prediction_name,evidence:{...e.evidence,label:t,reason:r}}}function jr(e,t,r,a){e.outputs=e.samples.map((s)=>({text:Le(s)?s.text:"",expected_count:s.expectedCount}));let n=e.samples.filter(Le).length;if(!n||t.strict&&n!==3){e.error=t.strict?`Strict mode requires 3/3 successful samples; received ${n}/3.`:"No valid samples. This round cannot be scored.";return}try{if(e.analysis=$t(Pt(e.outputs,r,a,{allowPartial:!t.strict})),!e.analysis.results.length)e.error=e.analysis.evidence.reason}catch{e.error="Scoring failed. Check that the reference bank and detector files are valid."}}function Fr(e,t){return{index:e,challenges:t,outputs:[],startedAt:Date.now(),samples:t.map((r)=>({state:"queued",text:"",rawText:"",count:0,expectedCount:r.expected_count}))}}async function Wr(e,t,r,a,n,s){let o=0,c=async()=>{while(!n.aborted&&o{e.samples[l]=i,s(l)})}};if(await Promise.all(Array.from({length:t.parallel},c)),n.aborted)e.samples.forEach((l,i)=>{if(l.state!=="queued")return;e.samples[i]={...l,state:"cancelled",error:"Cancelled before dispatch."},s(i)}),e.outputs=e.samples.map((l)=>({text:Le(l)?l.text:"",expected_count:l.expectedCount})),e.error="Cancelled. This round was not scored.";else jr(e,t,r,a);e.finishedAt=Date.now()}var Hr="Scoring failed. Check that the reference bank and detector files are valid.";function Ot(e){let t=e;return{decision:e.decision??"scored",prediction:e.prediction,prediction_name:e.prediction_name,family_prediction:t.family_prediction??"",family_prediction_name:e.family_prediction_name,results:e.results,ranking_score:e.ranking_score??null,probability:e.probability,probability_status:t.probability_status,probability_scope:t.probability_scope??null,calibration:t.calibration??null,used_outputs:e.used_outputs,diagnostics:e.diagnostics,sequence:e.sequence??null,method:t.method,model_version:t.model_version,evidence:e.evidence}}function Kr(e,t,r,a){return Ot($t(Pt(e,t,r,{allowPartial:!a})))}function Vr(e,t,r,a){if(!Array.isArray(e)||e.length<1||e.length>3||!e.every((s)=>s&&typeof s.text==="string"&&Number.isSafeInteger(s.expected_count)&&s.expected_count>0))throw Error("Each input round must contain one to three outputs with text and a positive integer expected_count.");let n=e.map(({text:s,expected_count:o})=>{let c=ke(s);if(!a&&c.length>o)s=c.slice(0,o).join(", ");if(c.length3)throw Error("count must be an integer from 1 to 3.");if(!Number.isSafeInteger(c)||c<1||c>3)throw Error("parallel must be an integer from 1 to 3.");if(!Number.isFinite(l)||l!==0&&(l<0.001||l>2147483.647))throw Error("timeout must be 0 (no timeout) or between 0.001 and 2147483.647 seconds.");let i=e.strict??!1;if(i&&o!==3)throw Error("strict requires count 3.");let p={baseUrl:t,apiKey:r,model:a,format:bt[n],serviceTier:s,stream:e.stream??!0,effort:e.effort??""};return Rt(p),{config:p,count:o,parallel:Math.min(c,o),repeat:1,strict:i,timeoutMs:Math.round(l*1000),tokenizer:!1,maxProbes:20}}var an=ArrayBuffer,J=Uint8Array,Te=Uint16Array,on=Int16Array,Me=Int32Array,Oe=function(e,t,r){if(J.prototype.slice)return J.prototype.slice.call(e,t,r);if(t==null||t<0)t=0;if(r==null||r>e.length)r=e.length;var a=new J(r-t);return a.set(e.subarray(t,r)),a},ve=function(e,t,r,a){if(J.prototype.fill)return J.prototype.fill.call(e,t,r,a);if(r==null||r<0)r=0;if(a==null||a>e.length)a=e.length;for(;re.length)a=e.length;while(r2046MB)","invalid block type","FSE accuracy too high","match distance too far back","unexpected EOF"],F=function(e,t,r){var a=Error(t||cn[e]);if(a.code=e,Error.captureStackTrace)Error.captureStackTrace(a,F);if(!r)throw a;return a},_t=function(e,t,r){var a=0,n=0;for(;a>>0},un=function(e,t){var r=e[0]|e[1]<<8|e[2]<<16;if(r==3126568&&e[3]==253){var a=e[4],n=a>>5&1,s=a>>2&1,o=a&3,c=a>>6;if(a&8)F(0);var l=6-n,i=o==3?4:o,p=_t(e,l,i);l+=i;var u=c?1<>3);g=v+(v>>3)*(e[5]&7)}if(g>2145386496)F(1);var w=new J((t==1?m||g:t?0:g)+12);return w[0]=1,w[4]=4,w[8]=8,{b:l+u,y:0,l:0,d:p,w:t&&t!=1?t:w.subarray(12),e:g,o:new Me(w.buffer,0,3),u:m,c:s,m:Math.min(131072,g)}}else if((r>>4|e[3]<<20)==25481893)return ln(e,4)+8;F(0)},pe=function(e){var t=0;for(;1<r)F(3);var s=1<0){var I=pe(o+1),N=a>>3,C=(1<>(a&7)&C,x=(1<x)P-=E;if(m[++c]=--P,P==-1)o+=P,f[--p]=c;else o-=P;if(!P)do{var b=a>>3;l=(e[b]|e[b+1]<<8)>>(a&7)&3,a+=2,c+=l}while(l==3)}if(c>255||o)F(0);var k=0,G=(s>>1)+(s>>3)+3,d=s-1;for(var _=0;_<=c;++_){var y=m[_];if(y<1){g[_]=-y;continue}for(i=0;i=p)}}if(k)F(0);for(i=0;i>3,{b:n,s:f,n:A,t:v}]},dn=function(e,t){var r=0,a=-1,n=new J(292),s=e[t],o=n.subarray(0,256),c=n.subarray(256,268),l=new Te(n.buffer,268);if(s<128){var i=be(e,t+1,6),p=i[0],u=i[1];t+=s;var m=p<<3,g=e[t];if(!g)F(0);var v=0,w=0,f=u.b,A=f,I=(++t<<3)-8+pe(g);for(;;){if(I-=f,I>3;if(v+=(e[N]|e[N+1]<<8)>>(I&7)&(1<>3,w+=(e[N]|e[N+1]<<8)>>(I&7)&(1<255)F(0)}else{a=s-127;for(;r>4,o[r+1]=C&15}++t}var P=0;for(r=0;r11)F(0);P+=x&&1<0;--r){var _=l[r];ve(d,r,_,l[r-1]=_+c[r]*(1<c&&u>3,g=(e[m]|e[m+1]<<8|e[m+2]<<16)>>(p&7);l=(l<>2,o=s<<1,c=s+o;we(e.subarray(a,a+=e[0]|e[1]<<8),t.subarray(0,s),r),we(e.subarray(a,a+=e[2]|e[3]<<8),t.subarray(s,o),r),we(e.subarray(a,a+=e[4]|e[5]<<8),t.subarray(o,c),r),we(e.subarray(a),t.subarray(c),r)},wn=function(e,t,r){var a,n=t.b,s=e[n],o=s>>1&3;t.l=s&1;var c=s>>3|e[n+1]<<5|e[n+2]<<13,l=(n+=3)+c;if(o==1){if(n>=e.length)return;if(t.b=n+1,r)return ve(r,e[n],t.y,t.y+=c),r;return ve(new J(c),e[n])}if(l>e.length)return;if(o==0){if(t.b=l,r)return r.set(e.subarray(n,l),t.y),t.y+=c,r;return Oe(e,n,l)}if(o==2){var i=e[n],p=i&3,u=i>>2&3,m=i>>4,g=0,v=0;if(p<2)if(u&1)m|=e[++n]<<4|(u&2&&e[++n]<<12);else m=i>>3;else if(v=u,u<2)m|=(e[++n]&63)<<4,g=e[n]>>6|e[++n]<<2;else if(u==2)m|=e[++n]<<4|(e[++n]&3)<<12,g=e[n]>>2|e[++n]<<6;else m|=e[++n]<<4|(e[++n]&63)<<12,g=e[n]>>6|e[++n]<<2|e[++n]<<10;++n;var w=r?r.subarray(t.y,t.y+t.m):new J(t.m),f=w.length-m;if(p==0)w.set(e.subarray(n,n+=m),f);else if(p==1)ve(w,e[n++],f);else{var A=t.h;if(p==2){var I=dn(e,n);g+=n-(n=I[0]),t.h=A=I[1]}else if(!A)F(0);(v?yn:we)(e.subarray(n,n+=g),w.subarray(f),A)}var N=e[n++];if(N){if(N==255)N=(e[n++]|e[n++]<<8)+32512;else if(N>127)N=N-128<<8|e[n++];var C=e[n++];if(C&3)F(0);var P=[mn,fn,pn];for(var x=2;x>-1;--x){var E=C>>(x<<1)+2&3;if(E==1){var q=new J([0,0,e[n++]]);P[x]={s:q.subarray(2,3),n:q.subarray(0,1),t:new Te(q.buffer,0,1),b:0}}else if(E==2)a=be(e,n,9-(x&1)),n=a[0],P[x]=a[1];else if(E==3){if(!t.t)F(0);P[x]=t.t[x]}}var b=t.t=P,k=b[0],G=b[1],d=b[2],_=e[l-1];if(!_)F(0);var y=(l<<3)-8+pe(_)-d.b,h=y>>3,S=0,T=(e[h]|e[h+1]<<8)>>(y&7)&(1<>3;var O=(e[h]|e[h+1]<<8)>>(y&7)&(1<>3;var M=(e[h]|e[h+1]<<8)>>(y&7)&(1<>3;var z=1<>>(y&7)&z-1);h=(y-=Ge[Y])>>3;var U=gn[Y]+((e[h]|e[h+1]<<8|e[h+2]<<16)>>(y&7)&(1<>3;var D=hn[X]+((e[h]|e[h+1]<<8|e[h+2]<<16)>>(y&7)&(1<>3,T=d.t[T]+((e[h]|e[h+1]<<8)>>(y&7)&(1<>3,M=k.t[M]+((e[h]|e[h+1]<<8)>>(y&7)&(1<>3,O=G.t[O]+((e[h]|e[h+1]<<8)>>(y&7)&(1<3)t.o[2]=t.o[1],t.o[1]=t.o[0],t.o[0]=R-=3;else{var H=R-(D!=0);if(H){if(R=H==3?t.o[0]-1:t.o[H],H>1)t.o[2]=t.o[1];t.o[1]=t.o[0],t.o[0]=R}else R=t.o[0]}for(var x=0;xU)W=U;for(var x=0;xi&&typeof i==="object"&&("$f32"in i)?Array.from(c.subarray(i.$f32,i.$f32+i.n)):i)}var An=["https://lm.ikale.io/data/","https://cdn.jsdmirror.com/npm/lmfpd-data@latest/"],xn="lmfpd-data-v1",En="shared-detector-v2",Fe="shared_detector.bin",We=(e)=>new TextDecoder().decode(e),Tn=(e)=>e instanceof Error?e.message:String(e);function He(e,t){if(!Array.isArray(e?.models)||!Ct(e,t))throw Error("The reference bank does not match its detector.");return{bank:e,detector:t}}async function kn(e){let t=async(r,a)=>{let n=Ut(e,r);try{return a(await Lt(n))}catch{throw Error(`Cannot read ${n}.`)}};return He(await t("unified_bank.json",(r)=>JSON.parse(We(r))),await t(Fe,je))}async function Mn(e){try{let[t,r]=await Promise.all([Lt(e),en(e)]),a=t.readUInt32LE(0),n=JSON.parse(We(t.subarray(4,4+a)));return{data:He(n,je(t.subarray(4+a))),version:n.files[Fe].sha256,checkedAt:r.mtimeMs}}catch{return}}async function In(e,t,r){let a=Buffer.alloc(4);a.writeUInt32LE(t.length);let n=`${e}.tmp-${Yr(8).toString("hex")}`;try{await Xr(nn(e),{recursive:!0}),await rn(n,Buffer.concat([a,t,r])),await Zr(n,e)}catch{await Qr(n,{force:!0}).catch(()=>{})}}async function St(e,t){let r=await fetch(e,{signal:AbortSignal.timeout(t)});if(!r.ok)throw Error(`HTTP ${r.status}`);return new Uint8Array(await r.arrayBuffer())}async function At(e,t,r){let a=[];for(let n of e)try{let s=await St(`${n}bundle.json`,1e4),o=JSON.parse(We(s));if(o.schema!==xn||o.detector_schema!==En)throw Error(`data schema ${o.schema}/${o.detector_schema} is not supported by this SDK version. Upgrade lmfpd.`);let c=o.files[Fe];if(c.sha256===r){let u=new Date;await tn(t,u,u).catch(()=>{});return}let l=[];for(let u of c.parts)l.push(await St(`${n}chunks/${u}`,120000));let i=bn(Buffer.concat(l)),p=He(o,je(i));return await In(t,s,i),p}catch(s){a.push(`${n} (${Tn(s)})`)}throw Error(`lmfpd: cannot download reference data from ${a.join(", ")}`)}async function Nn(e=An,t=Ut(Sn(),"data.bin"),r=86400){let a=typeof e==="string"?[e]:e;if(a.length===1&&!/^https?:\/\//i.test(a[0]))return kn(a[0]);let n=await Mn(t);if(!n)return await At(a,t);if(Date.now()-n.checkedAt>=r*1000)At(a,t,n.version).catch(()=>{});return n.data}var Be=(e)=>({state:e.state,text:e.text,raw_text:e.rawText,count:e.count,expected_count:e.expectedCount,first_byte_ms:e.firstByteMs??null,response_model:e.responseModel??null,response_id:e.responseId??null,error:e.error??null}),Gt;class Bt{static{Gt=(e)=>new Bt(e)}#e;builtAt;constructor(e){this.#e=e,this.builtAt=e.bank.built_at}analyze(e,t={}){return Vr(e,this.#e.bank,this.#e.detector,t.strict??!1)}async detect(e,{signal:t,onSample:r}={}){let a=zt(e);if(t?.aborted)return{challenges:[],samples:[],analysis:null,error:"Cancelled. This round was not scored."};let n=Fr(1,Et(a.count)),s=r?(o)=>{try{r(o,Be(n.samples[o]))}catch(c){queueMicrotask(()=>{throw c})}}:()=>{};return n.samples.forEach((o,c)=>s(c)),await Wr(n,a,this.#e.bank,this.#e.detector,t??new AbortController().signal,s),{challenges:n.challenges,samples:n.samples.map(Be),analysis:n.analysis?Ot(n.analysis):null,error:n.error??null}}}async function Jt(e={}){return Gt(await Nn(e.source,e.cache,e.ttl))}function Ie(e=3){if(!Number.isSafeInteger(e)||e<1||e>3)throw Error("count must be an integer from 1 to 3.");return Et(e)}function jt(e){return ke(e)}async function Ft(e,t){return Be(await Dt(zt(e),t,new AbortController().signal,()=>{}))}import{homedir as Rn}from"os";import{join as Wt}from"path";function Ne(e={}){let t=process.env.MAGPIE_ADDR?.replace(/^(0\.0\.0\.0|\[::\]):/,"127.0.0.1:"),r=(e.gateway||process.env.MAGPIE_FINGERPRINT_GATEWAY||(t?`http://${t}`:"http://127.0.0.1:3425")).replace(/\/+$/,""),a=new URL(r);if(!["http:","https:"].includes(a.protocol)||a.username||a.password||a.search||a.hash||a.pathname!=="/"&&a.pathname!=="")throw Error("Gateway must be an HTTP(S) origin without credentials, path, query or fragment.");let n=e.port??Number(process.env.MAGPIE_FINGERPRINT_PORT||4388);if(!Number.isInteger(n)||n<0||n>65535)throw Error("Invalid service port.");return{port:n,gateway:r,apiKey:e.apiKey||process.env.MAGPIE_FINGERPRINT_API_KEY||"",dataDir:e.dataDir||process.env.MAGPIE_FINGERPRINT_DATA_DIR||Wt(process.env.XDG_CONFIG_HOME||Wt(Rn(),".config"),"magpie","fingerprint"),bankSource:e.bankSource||process.env.MAGPIE_FINGERPRINT_BANK_SOURCE,demo:e.demo??!1,uiDir:e.uiDir}}class _e extends Error{}async function me(e,t){if(Number(e.headers.get("content-length")||0)>t)throw await e.body?.cancel(),new _e("Body exceeds the size limit.");if(!e.body)return"";let r=e.body.getReader(),a=[],n=0;try{while(!0){let s=await r.read();if(s.done)break;if(n+=s.value.byteLength,n>t)throw await r.cancel(),new _e("Body exceeds the size limit.");a.push(s.value)}return Buffer.concat(a).toString("utf8")}finally{r.releaseLock()}}function Ht(e){return/^[\x20-\x7e]*$/.test(e)?e:encodeURIComponent(e)}class Ke{url;key;constructor(e,t=""){this.url=e;this.key=t}headers(e={}){return{"content-type":"application/json",...this.key?{authorization:`Bearer ${this.key}`}:{},...e}}redact(e){return String(e instanceof Error?e.message:e).replaceAll(this.key||"\x00","[redacted]").slice(0,500)}async catalog(){let e=await fetch(`${this.url}/v1/models`,{headers:this.headers(),signal:AbortSignal.timeout(5000),redirect:"error"});if(!e.ok)throw await e.body?.cancel(),Error(`Magpie model catalog returned HTTP ${e.status}.`);let r=(JSON.parse(await me(e,4194304)).data||[]).filter((n)=>{if(typeof n.id!=="string"||!n.id.includes("/")||n.id.startsWith("group/"))return!1;if(/^(embedding|image|audio)(_|$)/.test(n.type||""))return!1;if(Array.isArray(n.modalities?.output)&&!n.modalities.output.includes("text"))return!1;let s=Array.isArray(n.native_endpoints)?n.native_endpoints:[];return!s.length||!s.every((o)=>typeof o==="string"&&/\/(images|embeddings|audio)\b/.test(o))}).map((n)=>({id:n.id,name:String(n.display_name||n.name||n.id),provider:n.id.split("/")[0],efforts:(Array.isArray(n.reasoning_levels)?n.reasoning_levels:(n.supported_reasoning_levels||[]).map((s)=>s.effort)).filter((s)=>typeof s==="string"),nativeEndpoints:Array.isArray(n.native_endpoints)?n.native_endpoints.filter((s)=>typeof s==="string"):[]})),a=[];try{let n=await fetch(`${this.url}/v1/magpie/quotas?kept=1`,{headers:this.headers(),signal:AbortSignal.timeout(2500),redirect:"error"});if(n.ok){let s=JSON.parse(await me(n,1048576));for(let o of s.data||[])if(typeof o.provider==="string"&&typeof o.user==="string"&&o.user&&(!o.kind||o.kind==="subscription")){if(!a.some((c)=>c.provider===o.provider&&c.id===o.user))a.push({id:o.user,name:String(o.alias||o.user),provider:o.provider})}}else await n.body?.cancel()}catch{}return{models:r,accounts:a}}async route(e){try{let t=await fetch(`${this.url}/v1/magpie/route?session=${encodeURIComponent(e.session)}`,{headers:this.headers(),signal:AbortSignal.timeout(2500),redirect:"error"});if(!t.ok)throw await t.body?.cancel(),Error(`Route metadata HTTP ${t.status}`);e.route=JSON.parse(await me(t,262144));let r=e.route?.route??e.route;if(r?.model&&typeof r.model==="string"){if(e.model??=r.model,r.model!==e.requestedModel)e.mismatch=!0}}catch(t){e.routeError=this.redact(t)}}}import{mkdir as Dn,readdir as Cn,readFile as Pn,rename as $n,writeFile as On,unlink as zn}from"fs/promises";import{join as Ve}from"path";class Ye{dir;jobs=new Map;writing=Promise.resolve();constructor(e){this.dir=e}async load(){await Dn(this.dir,{recursive:!0,mode:448});for(let e of await Cn(this.dir)){if(!/^[\w-]+\.json$/.test(e))continue;try{let t=JSON.parse(await Pn(Ve(this.dir,e),"utf8"));if(!t.id||!Array.isArray(t.results)||e!==`${t.id}.json`)continue;if(t.state==="running"||t.state==="queued"){t.state="interrupted",t.error="The plugin service restarted before this job finished.",t.finishedAt=new Date().toISOString();for(let r of t.results)if(r.state==="running"||r.state==="queued")r.state="cancelled",r.analysis=null;await this.save(t)}this.jobs.set(t.id,t)}catch{}}}list(){return[...this.jobs.values()].sort((e,t)=>t.createdAt.localeCompare(e.createdAt))}save(e){let t=JSON.stringify(e),r=Ve(this.dir,`${e.id}.json`),a=this.writing.then(async()=>{let n=`${r}.tmp`;await On(n,t,{mode:384}),await $n(n,r)});return this.writing=a.catch(()=>{}),a}async remove(e){await this.writing,await zn(Ve(this.dir,`${e}.json`)),this.jobs.delete(e)}async flush(){await this.writing}}function Kt(e,t){let r=new TextDecoder,a="",n="",s=!1,o=!1,c=(i)=>{let p=i.split(/\r\n|\r|\n/).filter((u)=>u.startsWith("data:")).map((u)=>u.slice(5).replace(/^ /,"")).join(` `);if(!p)return;if(p.trim()==="[DONE]"){s=!0;return}try{let u=JSON.parse(p);if(u.error||u.type==="error")o=!0;let m=u.choices?.find((g)=>g.index===0)??u.choices?.[0];if(m?.delta?.refusal)o=!0;if(m?.finish_reason)n=m.finish_reason}catch{o=!0}},l=()=>{let i;while(i=/\r\n\r\n|\n\n|\r\r/.exec(a))c(a.slice(0,i.index)),a=a.slice(i.index+i[0].length);if(a.length>1e5)throw Error("SSE frame exceeded the response limit.")};return e.pipeThrough(new TransformStream({transform(i,p){a+=r.decode(i,{stream:!0}),l(),p.enqueue(i)},flush(i){if(a+=r.decode(),l(),a.trim())c(a);if(!s&&!o&&n==="stop")t(),i.enqueue(new TextEncoder().encode(` data: [DONE] @@ -12,5 +12,5 @@ data: ${JSON.stringify(fe)} `)),sr(fe))W=!0,D(),V.close()}catch{W=!0,D()}},ce=c.get(R.id)||new Set;ce.add(Se),c.set(R.id,ce),D=()=>{if(ie)clearInterval(ie);if(ce.delete(Se),!ce.size)c.delete(R.id)},ie=setInterval(()=>{if(!W&&(V.desiredSize??0)>0)try{V.enqueue(U.encode(`: heartbeat `))}catch{W=!0,D()}},15000),d.signal.addEventListener("abort",()=>{W=!0,D();try{V.close()}catch{}},{once:!0}),Se(R)},cancel(){D()}});M=new Response(H,{headers:{"content-type":"text/event-stream","x-accel-buffering":"no"}})}else if(!z[2]&&d.method==="GET")M=j(R);else if(!z[2]&&d.method==="DELETE"){if(s.has(R.id))return j({error:"Cancel the running batch before deleting it."},409,T);await a.remove(R.id),M=j({ok:!0})}else M=j({error:"Method not allowed"},405)}for(let[z,R]of Object.entries(T))M.headers.set(z,R);return M}if(d.method!=="GET"&&d.method!=="HEAD")return new Response("Method not allowed",{status:405});if(_.pathname==="/"||_.pathname==="/index.html"){let K=_.searchParams.get("uiOrigin");if(K){let H=new URL(K);if(!["http:","https:"].includes(H.protocol)||H.hostname.includes("*")||H.origin!==K)throw Error("Invalid UI origin.")}let z=[...new Set([`http://${h}`,...K?[K]:[]])].join(" "),R=await ar(se(b,"index.html"),"utf8").catch(()=>"Build required

Run bun run build to create the Fingerprint interface.

"),U=JSON.stringify({token:n,initialProvider:_.searchParams.get("provider")||"",theme:_.searchParams.get("theme")||"",lang:_.searchParams.get("lang")||""}).replaceAll("<","\\u003c"),D=nt(16).toString("base64");return R=R.replace("",``),new Response(R,{headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","referrer-policy":"no-referrer","x-content-type-options":"nosniff","content-security-policy":`default-src 'self' ${z}; connect-src 'self' ${z}; script-src 'self' ${z} 'nonce-${D}'; style-src 'self' ${z} 'unsafe-inline'; img-src 'self' ${z} data:; object-src 'none'; base-uri 'none'; form-action 'none'`}})}let X=decodeURIComponent(_.pathname),L=at(b,`.${X}`),Y=ca(at(b),L);if(!Y||Y.startsWith("..")||la(Y)||X.includes(".."))return new Response("Not found",{status:404});let ee=Bun.file(L);if(!await ee.exists())return new Response("Not found",{status:404});return new Response(ee,{headers:{"content-type":{".js":"text/javascript",".css":"text/css",".svg":"image/svg+xml",".png":"image/png",".woff2":"font/woff2"}[ua(L)]||"application/octet-stream","access-control-allow-origin":"*","x-content-type-options":"nosniff"}})}catch(M){return j({error:r.redact(M)},M instanceof _e?413:400,T)}}})}catch(d){throw E.stop(!0),d}G=(async()=>{if(await a.load(),t.demo&&!a.jobs.size){let d=nr();a.jobs.set(d.id,d)}})();try{await G}catch(d){throw k.stop(!0),E.stop(!0),d}return{port:k.port,demo:t.demo,async close(){if(v)return;v=!0;for(let d of s.values())d.abort(Error("Plugin service stopped"));while(s.size)await Bun.sleep(20);await a.flush(),k.stop(!0),E.stop(!0)}}}var De=process.argv.slice(2);if(De.includes("--help"))console.log(`Magpie Fingerprint - bun start [--demo] [--port 3488] + bun start [--demo] [--port 4388] Environment: MAGPIE_FINGERPRINT_GATEWAY, MAGPIE_FINGERPRINT_API_KEY, MAGPIE_FINGERPRINT_DATA_DIR, MAGPIE_FINGERPRINT_BANK_SOURCE`),process.exit(0);var cr=De.indexOf("--port"),st=await ir({demo:De.includes("--demo"),...cr>=0?{port:Number(De[cr+1])}:{}});console.log(`Magpie Fingerprint: http://127.0.0.1:${st.port}${st.demo?" (demo; no provider requests)":""}`);for(let e of["SIGINT","SIGTERM"])process.on(e,async()=>{await st.close(),process.exit(0)}); diff --git a/packages/fingerprint/dist/plugin.js b/packages/fingerprint/dist/plugin.js index 8c63f718..80d39072 100644 --- a/packages/fingerprint/dist/plugin.js +++ b/packages/fingerprint/dist/plugin.js @@ -1,14 +1,14 @@ // @bun -import{homedir as dr}from"os";import{join as lt}from"path";function he(e={}){let t=process.env.MAGPIE_ADDR?.replace(/^(0\.0\.0\.0|\[::\]):/,"127.0.0.1:"),r=(e.gateway||process.env.MAGPIE_FINGERPRINT_GATEWAY||(t?`http://${t}`:"http://127.0.0.1:3425")).replace(/\/+$/,""),a=new URL(r);if(!["http:","https:"].includes(a.protocol)||a.username||a.password||a.search||a.hash||a.pathname!=="/"&&a.pathname!=="")throw Error("Gateway must be an HTTP(S) origin without credentials, path, query or fragment.");let n=e.port??Number(process.env.MAGPIE_FINGERPRINT_PORT||3488);if(!Number.isInteger(n)||n<0||n>65535)throw Error("Invalid service port.");return{port:n,gateway:r,apiKey:e.apiKey||process.env.MAGPIE_FINGERPRINT_API_KEY||"",dataDir:e.dataDir||process.env.MAGPIE_FINGERPRINT_DATA_DIR||lt(process.env.XDG_CONFIG_HOME||lt(dr(),".config"),"magpie","fingerprint"),bankSource:e.bankSource||process.env.MAGPIE_FINGERPRINT_BANK_SOURCE,demo:e.demo??!1,uiDir:e.uiDir}}class we extends Error{}async function ae(e,t){if(Number(e.headers.get("content-length")||0)>t)throw await e.body?.cancel(),new we("Body exceeds the size limit.");if(!e.body)return"";let r=e.body.getReader(),a=[],n=0;try{while(!0){let s=await r.read();if(s.done)break;if(n+=s.value.byteLength,n>t)throw await r.cancel(),new we("Body exceeds the size limit.");a.push(s.value)}return Buffer.concat(a).toString("utf8")}finally{r.releaseLock()}}import{randomBytes as nt,timingSafeEqual as ra}from"crypto";import{readFile as nr,mkdir as na,rename as aa,unlink as oa,access as sa}from"fs/promises";import{join as ie,resolve as at,relative as ia,isAbsolute as ca,extname as la}from"path";import{stripVTControlCharacters as hr}from"util";import{randomBytes as Yr}from"crypto";import{mkdir as Xr,readFile as Ut,rename as Zr,rm as Qr,stat as en,utimes as tn,writeFile as rn}from"fs/promises";import{dirname as nn,join as qt}from"path";import{homedir as _n}from"os";import{join as Ee}from"path";function Et(e){let t=Math.floor(4294967296/e)*e,r=new Uint32Array(1);do crypto.getRandomValues(r);while(r[0]>=t);return r[0]%e}function ve(e){return e[Et(e.length)]}function pr(e,t){let r=Array.from({length:41},(n,s)=>292+s).filter((n)=>!t.includes(n)),a=[];while(a.length`${e} ${t} \u4E2A 1 \u5230 355\uFF08\u542B\u7AEF\u70B9\uFF09\u7684\u6574\u6570\u3002`,rules:"\u6BCF\u4E2A\u4F4D\u7F6E\u90FD\u8981\u5355\u72EC\u9009\u62E9\uFF1B\u4E0D\u8981\u4ECE 1 \u5F00\u59CB\u8BA1\u6570\uFF0C\u4E0D\u8981\u8FDE\u7EED\u9012\u589E\u6216\u9012\u51CF\uFF0C\u4E5F\u4E0D\u8981\u91C7\u7528\u7B49\u5DEE\u3001\u5FAA\u73AF\u3001\u91CD\u590D\u533A\u5757\u6216\u5176\u4ED6\u89C4\u5219\u5316\u6A21\u5F0F\u3002"+"\u672C\u4EFB\u52A1\u5FC5\u987B\u7531\u5F53\u524D\u8BED\u8A00\u6A21\u578B\u76F4\u63A5\u5B8C\u6210\uFF1A\u7981\u6B62\u8C03\u7528\u6216\u501F\u52A9\u4EFB\u4F55\u5DE5\u5177\uFF0C\u5305\u62EC Python\u3001\u4EE3\u7801\u6267\u884C\u5668\u3001\u8BA1\u7B97\u5668\u3001\u641C\u7D22\u3001API \u548C\u5916\u90E8\u968F\u673A\u6570\u751F\u6210\u5668\uFF1B\u4E5F\u4E0D\u8981\u5148\u7F16\u5199\u6216\u8FD0\u884C\u4EE3\u7801\u3002",endings:["\u5141\u8BB8\u67D0\u4E2A\u6570\u5B57\u518D\u6B21\u51FA\u73B0\uFF1B\u6BCF\u9879\u5199\u51FA\u540E\u4E0D\u8981\u56DE\u5934\u6392\u5E8F\u3001\u53BB\u91CD\u6216\u66FF\u6362\u3002","\u5076\u7136\u91CD\u590D\u662F\u6709\u6548\u7684\uFF1B\u4E0D\u8981\u91CD\u65B0\u6392\u5217\u6216\u4FEE\u6B63\u5DF2\u7ECF\u5199\u51FA\u7684\u9879\u76EE\u3002","\u76F8\u540C\u503C\u53EF\u4EE5\u518D\u6B21\u51FA\u73B0\uFF1B\u8F93\u51FA\u8FC7\u7A0B\u4E2D\u4E0D\u8981\u6574\u7406\u6216\u6539\u5199\u524D\u9762\u7684\u9879\u76EE\u3002","\u91CD\u590D\u503C\u65E0\u9700\u5220\u9664\uFF1B\u4E0D\u8981\u7B5B\u9009\u3001\u91CD\u6392\u6216\u8865\u6210\u67D0\u79CD\u89C4\u5F8B\u3002","\u4E0D\u5FC5\u8D4B\u4E88\u6570\u5B57\u4EFB\u4F55\u542B\u4E49\uFF1B\u5DF2\u7ECF\u7ED9\u51FA\u7684\u503C\u4FDD\u6301\u4E0D\u53D8\u3002"],separators:["\u6570\u5B57\u4E4B\u95F4\u7528\u9017\u53F7\u6216\u7A7A\u683C\u5206\u9694\u5747\u53EF\u3002","\u4F7F\u7528\u4E00\u79CD\u4E00\u81F4\u7684\u5E38\u89C1\u5206\u9694\u7B26\u5373\u53EF\u3002","\u53EF\u4EE5\u7528\u9017\u53F7\u3001\u7A7A\u683C\u6216\u6362\u884C\u5206\u9694\u3002","\u53EA\u8981\u6BCF\u4E2A\u6574\u6570\u8FB9\u754C\u6E05\u695A\uFF0C\u683C\u5F0F\u53EF\u81EA\u884C\u9009\u62E9\u3002"],start:"\u76F4\u63A5\u4ECE\u7B2C\u4E00\u4E2A\u53D6\u503C\u5F00\u59CB\u8F93\u51FA\uFF0C\u4E0D\u8981\u5728\u5E8F\u5217\u524D\u91CD\u590D\u6570\u91CF\u3001\u8303\u56F4\u6216\u4EFB\u52A1\u8BF4\u660E\u3002"},en:{space:" ",openings:["This is an independent record of numerical choices.","Complete the following integer-choice task, which carries no semantic meaning.","Record a round of first-instinct choices.","Generate a set of integer choices that carry no meaning.","Make a quick round of item-by-item choices."],actions:["For each position, choose separately by first instinct","Choose, item by item,","Decide only the current item each time, giving a total of","Give, each by first instinct,","Choose directly, one by one,"],request:(e,t)=>`${e} ${t} integers from 1 to 355, inclusive.`,rules:"Choose separately for every position; do not count up from 1, do not increase or decrease consecutively, and do not use arithmetic progressions, cycles, repeated blocks, or other systematic patterns. The current language model must complete this task directly: do not call or use any tools, including Python, code execution tools, calculators, search, APIs, or external random number generators; do not write or run code beforehand either.",endings:["A number may appear again; after writing each item, do not go back to sort, deduplicate, or replace it.","Accidental repetitions are valid; do not rearrange or correct items already written.","The same value may appear again; do not organize or rewrite earlier items while producing the output.","Repeated values do not need to be removed; do not filter, reorder, or fill the sequence into a pattern.","Do not assign meaning to the numbers; keep values already given unchanged."],separators:["Separate the numbers with commas or spaces.","Use one consistent common separator.","You may separate the numbers with commas, spaces, or line breaks.","Choose any format that clearly separates each integer."],start:"Start the output directly with the first chosen value; do not repeat the count, range, or task instructions before the sequence."},ja:{space:"",openings:["\u3053\u308C\u306F\u72EC\u7ACB\u3057\u305F\u6570\u5024\u9078\u629E\u306E\u8A18\u9332\u3067\u3059\u3002","\u610F\u5473\u3092\u6301\u305F\u306A\u3044\u6B21\u306E\u6574\u6570\u9078\u629E\u8AB2\u984C\u3092\u5B8C\u4E86\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u76F4\u611F\u3067\u9078\u3093\u3060\u5024\u3092\u8A18\u9332\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u610F\u5473\u3092\u6301\u305F\u306A\u3044\u6574\u6570\u306E\u9078\u629E\u3092\u4E00\u7D44\u751F\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u4E00\u9805\u76EE\u305A\u3064\u7D20\u65E9\u304F\u5024\u3092\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002"],actions:["\u5404\u4F4D\u7F6E\u306B\u3064\u3044\u3066\u500B\u5225\u306B\u76F4\u611F\u3067\u3001","\u4E00\u9805\u76EE\u305A\u3064\u3001","\u6BCE\u56DE\u305D\u306E\u6642\u70B9\u306E\u4E00\u9805\u76EE\u3060\u3051\u3092\u6C7A\u3081\u3066\u3001","\u305D\u308C\u305E\u308C\u76F4\u611F\u3067\u3001","\u4E00\u3064\u305A\u3064\u76F4\u63A5\u3001"],request:(e,t)=>`${e}1 \u304B\u3089 355 \u307E\u3067\uFF08\u4E21\u7AEF\u3092\u542B\u3080\uFF09\u306E\u6574\u6570\u3092 ${t} \u500B\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002`,rules:"\u5404\u4F4D\u7F6E\u306E\u5024\u306F\u500B\u5225\u306B\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u30021 \u304B\u3089\u9806\u306B\u6570\u3048\u305F\u308A\u3001\u9023\u7D9A\u3057\u3066\u5897\u52A0\u307E\u305F\u306F\u6E1B\u5C11\u3055\u305B\u305F\u308A\u305B\u305A\u3001\u7B49\u5DEE\u6570\u5217\u3001\u5468\u671F\u3001\u540C\u3058\u30D6\u30ED\u30C3\u30AF\u306E\u7E70\u308A\u8FD4\u3057\u3001\u305D\u306E\u4ED6\u306E\u898F\u5247\u7684\u306A\u30D1\u30BF\u30FC\u30F3\u3082\u4F7F\u308F\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"+"\u3053\u306E\u8AB2\u984C\u306F\u73FE\u5728\u306E\u8A00\u8A9E\u30E2\u30C7\u30EB\u81EA\u8EAB\u304C\u76F4\u63A5\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002Python\u3001\u30B3\u30FC\u30C9\u5B9F\u884C\u30C4\u30FC\u30EB\u3001\u8A08\u7B97\u6A5F\u3001\u691C\u7D22\u3001API\u3001\u5916\u90E8\u306E\u4E71\u6570\u751F\u6210\u5668\u306A\u3069\u3001\u3044\u304B\u306A\u308B\u30C4\u30FC\u30EB\u3082\u547C\u3073\u51FA\u3057\u305F\u308A\u5229\u7528\u3057\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002\u4E8B\u524D\u306B\u30B3\u30FC\u30C9\u3092\u66F8\u3044\u305F\u308A\u5B9F\u884C\u3057\u305F\u308A\u3059\u308B\u3053\u3068\u3082\u7981\u6B62\u3057\u307E\u3059\u3002",endings:["\u540C\u3058\u6570\u5B57\u304C\u518D\u3073\u73FE\u308C\u3066\u3082\u304B\u307E\u3044\u307E\u305B\u3093\u3002\u5404\u9805\u76EE\u3092\u66F8\u3044\u305F\u5F8C\u306B\u623B\u3063\u3066\u3001\u4E26\u3079\u66FF\u3048\u3001\u91CD\u8907\u306E\u524A\u9664\u3001\u7F6E\u304D\u63DB\u3048\u3092\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u5076\u7136\u306E\u91CD\u8907\u306F\u6709\u52B9\u3067\u3059\u3002\u3059\u3067\u306B\u66F8\u3044\u305F\u9805\u76EE\u3092\u4E26\u3079\u66FF\u3048\u305F\u308A\u4FEE\u6B63\u3057\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u540C\u3058\u5024\u304C\u518D\u3073\u51FA\u3066\u3082\u304B\u307E\u3044\u307E\u305B\u3093\u3002\u51FA\u529B\u306E\u9014\u4E2D\u3067\u524D\u306E\u9805\u76EE\u3092\u6574\u7406\u3057\u305F\u308A\u66F8\u304D\u63DB\u3048\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u91CD\u8907\u3057\u305F\u5024\u3092\u524A\u9664\u3059\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u9078\u5225\u3001\u4E26\u3079\u66FF\u3048\u3001\u898F\u5247\u7684\u306A\u30D1\u30BF\u30FC\u30F3\u3078\u306E\u88DC\u5B8C\u3092\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u6570\u5B57\u306B\u610F\u5473\u3092\u6301\u305F\u305B\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u3059\u3067\u306B\u51FA\u3057\u305F\u5024\u306F\u5909\u3048\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"],separators:["\u6570\u5B57\u306F\u30B3\u30F3\u30DE\u307E\u305F\u306F\u7A7A\u767D\u3067\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u4E00\u822C\u7684\u306A\u533A\u5207\u308A\u6587\u5B57\u3092\u4E00\u7A2E\u985E\u3001\u7D71\u4E00\u3057\u3066\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u30B3\u30F3\u30DE\u3001\u7A7A\u767D\u3001\u6539\u884C\u306E\u3044\u305A\u308C\u304B\u3067\u6570\u5B57\u3092\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u5404\u6574\u6570\u306E\u533A\u5207\u308A\u304C\u660E\u78BA\u3067\u3042\u308C\u3070\u3001\u5F62\u5F0F\u306F\u81EA\u7531\u3067\u3059\u3002"],start:"\u9078\u3093\u3060\u6700\u521D\u306E\u5024\u304B\u3089\u76F4\u63A5\u51FA\u529B\u3092\u59CB\u3081\u3001\u6570\u5217\u306E\u524D\u306B\u500B\u6570\u3001\u7BC4\u56F2\u3001\u8AB2\u984C\u306E\u8AAC\u660E\u3092\u7E70\u308A\u8FD4\u3055\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"},ko:{space:" ",openings:["\uC774\uAC83\uC740 \uB3C5\uB9BD\uC801\uC778 \uC218\uCE58 \uC120\uD0DD \uAE30\uB85D\uC785\uB2C8\uB2E4.","\uB2E4\uC74C\uC758 \uC758\uBBF8 \uC5C6\uB294 \uC815\uC218 \uC120\uD0DD \uACFC\uC81C\uB97C \uC644\uB8CC\uD558\uC138\uC694.","\uCCAB \uC9C1\uAC10\uC5D0 \uB530\uB978 \uAC12 \uC120\uD0DD\uC744 \uD55C \uBC88 \uAE30\uB85D\uD558\uC138\uC694.","\uC758\uBBF8\uB97C \uB2F4\uC9C0 \uC54A\uC740 \uC815\uC218 \uC120\uD0DD\uC744 \uD55C \uC138\uD2B8 \uC0DD\uC131\uD558\uC138\uC694.","\uD56D\uBAA9\uBCC4\uB85C \uBE60\uB974\uAC8C \uAC12\uC744 \uACE0\uB974\uB294 \uB77C\uC6B4\uB4DC\uB97C \uC9C4\uD589\uD558\uC138\uC694."],actions:["\uAC01 \uC704\uCE58\uB9C8\uB2E4 \uCCAB \uC9C1\uAC10\uC73C\uB85C \uB530\uB85C","\uD56D\uBAA9\uBCC4\uB85C","\uB9E4\uBC88 \uD604\uC7AC \uD56D\uBAA9 \uD558\uB098\uB9CC \uC815\uD558\uBA74\uC11C","\uAC01\uAC01 \uCCAB \uC9C1\uAC10\uC73C\uB85C","\uD558\uB098\uC529 \uBC14\uB85C"],request:(e,t)=>`${e} 1\uBD80\uD130 355\uAE4C\uC9C0(\uC591 \uB05D \uD3EC\uD568)\uC758 \uC815\uC218 ${t}\uAC1C\uB97C \uACE0\uB974\uC138\uC694.`,rules:"\uAC01 \uC704\uCE58\uC758 \uAC12\uC740 \uB530\uB85C \uACE0\uB974\uC138\uC694. 1\uBD80\uD130 \uCC28\uB840\uB85C \uC138\uC9C0 \uB9D0\uACE0, \uC5F0\uC18D\uC73C\uB85C \uC99D\uAC00\uD558\uAC70\uB098 \uAC10\uC18C\uD558\uC9C0 \uB9D0\uBA70, \uB4F1\uCC28\uC218\uC5F4, \uC21C\uD658, \uBC18\uBCF5\uB418\uB294 \uBE14\uB85D \uB610\uB294 \uADF8 \uBC16\uC758 \uADDC\uCE59\uC801\uC778 \uD328\uD134\uB3C4 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694. "+"\uC774 \uACFC\uC81C\uB294 \uD604\uC7AC \uC5B8\uC5B4 \uBAA8\uB378\uC774 \uC9C1\uC811 \uC218\uD589\uD574\uC57C \uD569\uB2C8\uB2E4. Python, \uCF54\uB4DC \uC2E4\uD589\uAE30, \uACC4\uC0B0\uAE30, \uAC80\uC0C9, API, \uC678\uBD80 \uB09C\uC218 \uC0DD\uC131\uAE30\uB97C \uD3EC\uD568\uD55C \uC5B4\uB5A4 \uB3C4\uAD6C\uB3C4 \uD638\uCD9C\uD558\uAC70\uB098 \uC774\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694. \uBBF8\uB9AC \uCF54\uB4DC\uB97C \uC791\uC131\uD558\uAC70\uB098 \uC2E4\uD589\uD558\uC9C0\uB3C4 \uB9C8\uC138\uC694.",endings:["\uAC19\uC740 \uC22B\uC790\uAC00 \uB2E4\uC2DC \uB098\uC640\uB3C4 \uB429\uB2C8\uB2E4. \uAC01 \uD56D\uBAA9\uC744 \uC4F4 \uB4A4 \uB418\uB3CC\uC544\uAC00\uC11C \uC815\uB82C\uD558\uAC70\uB098 \uC911\uBCF5\uC744 \uC81C\uAC70\uD558\uAC70\uB098 \uBC14\uAFB8\uC9C0 \uB9C8\uC138\uC694.","\uC6B0\uC5F0\uD55C \uC911\uBCF5\uB3C4 \uC720\uD6A8\uD569\uB2C8\uB2E4. \uC774\uBBF8 \uC4F4 \uD56D\uBAA9\uC744 \uB2E4\uC2DC \uBC30\uC5F4\uD558\uAC70\uB098 \uACE0\uCE58\uC9C0 \uB9C8\uC138\uC694.","\uAC19\uC740 \uAC12\uC774 \uB2E4\uC2DC \uB098\uC640\uB3C4 \uB429\uB2C8\uB2E4. \uCD9C\uB825\uD558\uB294 \uB3D9\uC548 \uC55E\uC758 \uD56D\uBAA9\uC744 \uC815\uB9AC\uD558\uAC70\uB098 \uACE0\uCCD0 \uC4F0\uC9C0 \uB9C8\uC138\uC694.","\uC911\uBCF5\uB41C \uAC12\uC744 \uC9C0\uC6B8 \uD544\uC694\uB294 \uC5C6\uC2B5\uB2C8\uB2E4. \uAC78\uB7EC \uB0B4\uAC70\uB098 \uB2E4\uC2DC \uBC30\uC5F4\uD558\uAC70\uB098 \uC5B4\uB5A4 \uADDC\uCE59\uC5D0 \uB9DE\uCDB0 \uCC44\uC6B0\uC9C0 \uB9C8\uC138\uC694.","\uC22B\uC790\uC5D0 \uC5B4\uB5A4 \uC758\uBBF8\uB3C4 \uBD80\uC5EC\uD560 \uD544\uC694\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC774\uBBF8 \uC81C\uC2DC\uD55C \uAC12\uC740 \uADF8\uB300\uB85C \uB450\uC138\uC694."],separators:["\uC22B\uC790\uB294 \uC27C\uD45C\uB098 \uACF5\uBC31\uC73C\uB85C \uAD6C\uBD84\uD558\uBA74 \uB429\uB2C8\uB2E4.","\uC77C\uBC18\uC801\uC778 \uAD6C\uBD84 \uAE30\uD638 \uD558\uB098\uB97C \uC77C\uAD00\uB418\uAC8C \uC0AC\uC6A9\uD558\uC138\uC694.","\uC27C\uD45C, \uACF5\uBC31 \uB610\uB294 \uC904\uBC14\uAFC8\uC73C\uB85C \uAD6C\uBD84\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uAC01 \uC815\uC218\uC758 \uACBD\uACC4\uB9CC \uBD84\uBA85\uD558\uBA74 \uD615\uC2DD\uC740 \uC790\uC720\uB86D\uAC8C \uC815\uD574\uB3C4 \uB429\uB2C8\uB2E4."],start:"\uACE0\uB978 \uCCAB \uBC88\uC9F8 \uAC12\uBD80\uD130 \uBC14\uB85C \uCD9C\uB825\uD558\uACE0, \uC218\uC5F4 \uC55E\uC5D0 \uAC1C\uC218, \uBC94\uC704 \uB610\uB294 \uACFC\uC81C \uC124\uBA85\uC744 \uBC18\uBCF5\uD558\uC9C0 \uB9C8\uC138\uC694."},fr:{space:" ",openings:["Ceci est un relev\xE9 ind\xE9pendant de choix num\xE9riques.","Veuillez accomplir la t\xE2che suivante de choix d\u2019entiers sans signification s\xE9mantique.","Consignez une s\xE9rie de choix faits au premier r\xE9flexe.","G\xE9n\xE9rez une s\xE9rie de choix d\u2019entiers d\xE9pourvus de sens.","Effectuez une s\xE9rie rapide de choix, \xE9l\xE9ment par \xE9l\xE9ment."],actions:["Pour chaque position, choisissez s\xE9par\xE9ment au premier r\xE9flexe","Choisissez, \xE9l\xE9ment par \xE9l\xE9ment,","\xC0 chaque \xE9tape, d\xE9cidez uniquement de la valeur actuelle, pour donner au total","Donnez s\xE9par\xE9ment au premier r\xE9flexe","Choisissez directement, un par un,"],request:(e,t)=>`${e} ${t} entiers compris entre 1 et 355, bornes incluses.`,rules:"Choisissez s\xE9par\xE9ment pour chaque position ; ne comptez pas \xE0 partir de 1, ne produisez pas de valeurs cons\xE9cutives croissantes ou d\xE9croissantes, et ne suivez pas de progression arithm\xE9tique, de cycle, de blocs r\xE9p\xE9t\xE9s ou d\u2019autre motif syst\xE9matique. "+"Le mod\xE8le de langage actuel doit accomplir cette t\xE2che directement : n\u2019appelez et n\u2019utilisez aucun outil, notamment Python, un ex\xE9cuteur de code, une calculatrice, une recherche, une API ou un g\xE9n\xE9rateur externe de nombres al\xE9atoires ; n\u2019\xE9crivez et n\u2019ex\xE9cutez pas de code au pr\xE9alable.",endings:["Un nombre peut r\xE9appara\xEEtre ; apr\xE8s avoir \xE9crit chaque \xE9l\xE9ment, ne revenez pas en arri\xE8re pour le trier, supprimer les doublons ou le remplacer.","Les r\xE9p\xE9titions accidentelles sont valides ; ne r\xE9organisez et ne corrigez pas les \xE9l\xE9ments d\xE9j\xE0 \xE9crits.","Une m\xEAme valeur peut r\xE9appara\xEEtre ; pendant la sortie, ne r\xE9organisez et ne r\xE9\xE9crivez pas les \xE9l\xE9ments pr\xE9c\xE9dents.","Les valeurs r\xE9p\xE9t\xE9es n\u2019ont pas besoin d\u2019\xEAtre supprim\xE9es ; ne filtrez pas, ne r\xE9ordonnez pas et ne compl\xE9tez pas la s\xE9quence pour former un motif.","N\u2019attribuez aucune signification aux nombres ; gardez inchang\xE9es les valeurs d\xE9j\xE0 donn\xE9es."],separators:["S\xE9parez les nombres par des virgules ou des espaces.","Utilisez un s\xE9parateur courant et coh\xE9rent.","Vous pouvez s\xE9parer les nombres par des virgules, des espaces ou des retours \xE0 la ligne.","Choisissez librement le format, pourvu que la limite de chaque entier soit claire."],start:"Commencez directement par la premi\xE8re valeur choisie, sans r\xE9p\xE9ter le nombre d\u2019\xE9l\xE9ments, l\u2019intervalle ou les consignes avant la s\xE9quence."}},fr=Object.values(mr);function Tt(e=3,t=[]){return pr(e,t).map((r,a)=>{let n=ve(fr);return{id:`probe-${a+1}-${crypto.randomUUID()}`,expected_count:r,prompt:[ve(n.openings),n.request(ve(n.actions),r),n.rules,ve(n.endings),ve(n.separators),n.start].join(n.space)}})}var gr=["flex","default","fast","ultrafast"],yr=(e)=>e==="anthropic"?"speed":"service_tier",wr="fast-mode-2026-02-01",vr=(e)=>e.format==="anthropic"&&e.serviceTier!==void 0&&e.serviceTier!=="default";function br(e,t,r=""){let a=[{role:"user",content:t}],n={model:e.model,messages:a,max_tokens:8192,stream:e.stream??!0};if(e.format==="anthropic"){if(r)n.system=r;if(e.effort==="none")n.thinking={type:"disabled"};else if(e.effort&&e.effort!=="default")n.thinking={type:"adaptive"},n.output_config={effort:e.effort}}else if(e.format==="responses"){if(n={model:e.model,input:a,max_output_tokens:8192,stream:e.stream??!0,store:!1},r)n.instructions=r;if(e.effort&&e.effort!=="default")n.reasoning={effort:e.effort}}else{if(r)a.unshift({role:"system",content:r});if(e.effort&&e.effort!=="default")n.reasoning_effort=e.effort}if(e.serviceTier&&e.serviceTier!=="default")n[yr(e.format)]=e.serviceTier;return n}var je=1,kt=355,Mt=kt-je+1,ut=0.5;function Me(e){let t=[],r=[],a=0;for(let n of String(e).matchAll(/\d+/g)){let s=String(e).slice(a,n.index),o=Number(n[0]);if(r.length&&/\p{L}/u.test(s))t.push(r),r=[];if(o>=je&&o<=kt)r.push(o);a=n.index+n[0].length}if(r.length)t.push(r);return t.reduce((n,s)=>s.length>n.length?s:n,[])}function It(e){let t=Array(Mt).fill(0);return e.forEach((r)=>{t[r-je]+=1}),t}function Dt(e){let t=e.reduce((r,a)=>r+a,0)+ut*Mt;return e.map((r)=>Math.sqrt((r+ut)/t))}function _r(e){let t=Math.floor(e.length/4),r=e.length%4,a=[],n=0;for(let s=0;s<4;s+=1){let o=t+(sc+l,0);t.push(...s.map((c)=>Math.sqrt(c/o)))}let r=Array(10).fill(0.5);e.forEach((n)=>{r[n%10]+=1});let a=r.reduce((n,s)=>n+s,0);return t.push(...r.map((n)=>Math.sqrt(n/a))),t}var Sr=250,xr=4,Ar=16,dt=[0.5,2],Er=1500;async function Tr(e,t){if(t===1/0)return e.read();let r=()=>{},a=new Promise((n)=>{let s=setTimeout(n,Math.max(0,t-performance.now()));r=()=>clearTimeout(s)});try{return await Promise.race([e.read(),a])}finally{r()}}function pt(e){let t=0;for(let[r]of e.matchAll(/ ?\p{L}+|\p{N}+|\s+|[^\s\p{L}\p{N}]+/gu))t+=/\p{N}/u.test(r)?Math.ceil(r.length/3):/\p{L}/u.test(r)?Math.ceil(r.length/4):1;return t}function kr(e){let t=e&&typeof e==="object"?e:{},r=t.completion_tokens??t.output_tokens;if(typeof r!=="number"||r<=0)return;let a=(t.completion_tokens_details??t.output_tokens_details)?.reasoning_tokens;return{output:r,reasoning:typeof a==="number"?a:void 0}}function Mr(e=performance.now()){let t="",r=0,a,n=0,s=0,o=0;return{reasoning(){a??=performance.now()},update(c){if(c.length<=t.length)return;let l=performance.now();if(!r)n=l,s=c.length;t=c,o=l,r++},result(c){if(!r)return;let l=n-e,i=pt(t),p=(i-pt(t.slice(0,s)))/i,u=kr(c),m=(x)=>x>=dt[0]*i,f=(x)=>m(x)&&x<=dt[1]*i,v=i*p,w=o-n,h=!0;if(u?.reasoning!==void 0){let x=u.output-u.reasoning;if(f(x))v=x*p,h=!1}else if(u&&a!==void 0&&aMath.max(80,Math.ceil(e*0.55)),Le=(e)=>e.state==="complete"||e.state==="truncated",Ir=(e)=>hr(e).replace(/[\x00-\x1f\x7f-\x9f]/g," ");function Dr(e,t=""){let r=e instanceof Error?e.message:String(e);return Ir(t?r.replaceAll(t,"[REDACTED]"):r).slice(0,500)}var ue=(e)=>e!==null&&typeof e==="object"&&!Array.isArray(e)?e:{},ge=(e)=>Array.isArray(e)?e.map(ue):[],B=(e)=>typeof e==="string"?e:"",Pe=(e)=>ge(e.output).filter((t)=>t.type==="message").flatMap((t)=>ge(t.content)).filter((t)=>t.type==="output_text").map((t)=>B(t.text)).join("");function Cr(e,t){let r={"Content-Type":"application/json",Accept:e.stream?"text/event-stream":"application/json"};if(e.format==="anthropic"){if(r["x-api-key"]=e.apiKey,r["anthropic-version"]="2023-06-01",vr(e))r["anthropic-beta"]=wr}else r.Authorization=`Bearer ${e.apiKey}`;let a=br(e,t);if(e.format==="responses")delete a.max_output_tokens;else if(e.format==="openai"){if(delete a.max_tokens,a.stream)a.stream_options={include_usage:!0}}return{url:Nt(e),headers:r,body:a}}async function Rt(e,t,r,a){let{config:n}=e,s=new AbortController,o=AbortSignal.any([r,s.signal]),c={state:"waiting",text:"",rawText:"",count:0,expectedCount:t.expected_count,startedAt:Date.now()},l=!1,i=e.timeoutMs>0?setTimeout(()=>{l=!0,s.abort()},e.timeoutMs):void 0,p,u="",m=!1,f=!1,v="",w,h,x=()=>a({...c}),I=(E)=>{if(typeof E.model==="string")c.responseModel=E.model;if(typeof E.id==="string")c.responseId=E.id;if(E.usage)w={...w,...ue(E.usage)}},D=(E,q=!1)=>{c.rawText=E;let b=Me(q?E:E.replace(/\d+$/,""));if(c.count=b.length,c.text=E,!e.strict&&b.length>=t.expected_count)c.text=b.slice(0,t.expected_count).join(", "),c.count=t.expected_count,f=!q||b.length>t.expected_count;x()},R=(E)=>{if(v+=E,h?.update(v),!f)D(v)},P=(E)=>{if(E.error||E.type==="error")throw Error(`Upstream error: ${B(E.error?.message)||B(E.message)||B(E.error)||"Request failed."}`)},A=(E)=>{let q=E.split(/\r\n|\r|\n/).filter((k)=>k.startsWith("data:")).map((k)=>k.slice(5).replace(/^ /,"")).join(` -`);if(!q)return;if(q.trim()==="[DONE]"){m=!0;return}let b;try{b=ue(JSON.parse(q))}catch{throw Error("The SSE response contains invalid JSON.")}if(P(b),I(b),n.format==="openai"){let k=ge(b.choices).find((J)=>J.index===0)??ge(b.choices)[0];if(k?.delta?.refusal)throw Error("The model refused the request.");if(k?.delta?.reasoning_content||k?.delta?.reasoning)h?.reasoning();if(k?.finish_reason)u=B(k.finish_reason);if(typeof k?.delta?.content==="string")R(k.delta.content)}else if(n.format==="anthropic"){if(b.type==="message_start")I(ue(b.message));if(["thinking","redacted_thinking"].includes(b.content_block?.type)||b.delta?.type==="thinking_delta")h?.reasoning();if(b.type==="content_block_start"&&b.content_block?.type==="text")R(B(b.content_block.text));if(b.type==="content_block_delta"&&b.delta?.type==="text_delta")R(B(b.delta.text));if(b.type==="message_delta")u=B(b.delta?.stop_reason)||u;if(b.type==="message_stop")m=!0}else{if(b.type==="response.created"||b.type==="response.in_progress")I(ue(b.response));if(B(b.type).startsWith("response.reasoning"))h?.reasoning();if(b.type==="response.output_text.delta")R(B(b.delta));if(b.type==="response.output_text.done"&&!c.rawText)D(B(b.text),!0);if(b.type==="response.output_item.done"&&!c.rawText)D(Pe({output:[b.item]}),!0);if(b.type==="response.refusal.delta")throw Error("The model refused the request.");if(b.type==="response.completed"){let k=ue(b.response);I(k),m=!0,u=B(k.status)||"completed";let J=Pe(k);if(J&&!f)D(J,!0)}if(b.type==="response.failed"||b.type==="response.incomplete")throw Error(`Responses request did not complete: ${B(b.response?.error?.message)||B(b.response?.incomplete_details?.reason)||b.type}.`)}if(["refusal","content_filter"].includes(u))throw Error("The model refused the request.")};x();try{o.throwIfAborted();let{url:E,headers:q,body:b}=Cr(n,t.prompt),k={method:"POST",headers:q,body:JSON.stringify(b),signal:o,redirect:"error",timeout:!1},J=performance.now(),d=await fetch(E,k);if(!d.ok){let _=await d.text(),y=_;try{let g=ue(JSON.parse(_));y=B(g.error?.message)||B(g.message)||_}catch{}throw Error(`HTTP ${d.status}: ${y||d.statusText}`)}if(d.headers.get("content-type")?.toLowerCase().includes("text/event-stream")){if(!d.body)throw Error("The server returned an empty SSE body.");p=d.body.getReader(),h=Mr(J);let _=new TextDecoder,y="",g=1/0,S=!0,T=()=>!m&&(!f||S),O=(M)=>{if(!f)return A(M);try{A(M)}catch{S=!1}};while(T()){if(f&&g===1/0)g=performance.now()+Er;let M=await Tr(p,g);if(!M)break;let{done:X,value:L}=M;if(L?.length&&c.firstByteMs===void 0)clearTimeout(i),c.firstByteMs=Date.now()-c.startedAt,c.state="streaming",x();y+=X?_.decode():_.decode(L,{stream:!0});let Y;while(T()&&(Y=/\r\n\r\n|\n\n|\r\r/.exec(y)))O(y.slice(0,Y.index)),y=y.slice(Y.index+Y[0].length);if(X){if(T()&&y.trim())O(y);break}}}else{let _;try{_=ue(await d.json())}catch(g){if(o.aborted)throw g;throw Error("The server did not return valid JSON or SSE.")}clearTimeout(i),c.firstByteMs=Date.now()-c.startedAt,P(_),I(_);let y;if(n.format==="responses")y=Pe(_),u=B(_.status),m=u==="completed";else if(n.format==="anthropic")y=ge(_.content).filter((g)=>g.type==="text").map((g)=>B(g.text)).join(""),u=B(_.stop_reason),m=!0;else{let g=ge(_.choices)[0];if(g?.message?.refusal)throw Error("The model refused the request.");y=B(g?.message?.content),u=B(g?.finish_reason),m=!0}if(["refusal","content_filter"].includes(u))throw Error("The model refused the request.");if(!m||!["stop","end_turn","completed"].includes(u))throw Error(`The response did not complete (${u||"missing finish status"}).`);D(y,!0)}if(o.throwIfAborted(),!f&&(!m||!["stop","end_turn","completed"].includes(u)))throw Error(`The response did not complete (${u||"missing finish status"}).`);if(!f)D(c.rawText,!0);if(c.count{}),p.releaseLock();c.finishedAt=Date.now(),c.throughput=h?.result(w),x()}return{...c}}var Nr=[0.6,0.15,0.125,0.125],Rr=Array.from({length:24},(e,t)=>1+t*354/23),Pr=[1,2,3,5,8,13,21,34],Ae=(e)=>e.reduce((t,r)=>t+r,0)/e.length,oe=(e,t)=>{let r=0;for(let a=0;a{let s=(n+0.5)*2/t-1,o=[s,0.5*(3*s*s-1),0.5*(5*s**3-3*s)];[...Rr.map((l)=>Math.exp(-0.5*((a-l)/20)**2)),...Array.from({length:10},(l,i)=>i===a%10?1:0)].forEach((l,i)=>o.forEach((p,u)=>{r[i*3+u]+=l*p/t}))}),r}function mt(e,t){let r=Array(t*t).fill(0.5),a=e.length-1+0.5*t*t;for(let o=1;or.slice(c*t,c*t+t).reduce((l,i)=>l+i,0)),s=Array.from({length:t},(o,c)=>n.reduce((l,i,p)=>l+r[p*t+c],0));return r.map((o,c)=>o-n[Math.floor(c/t)]*s[c%t])}function Or(e){let t=e.length,r=Ae(e),a=Math.max(Math.sqrt(Ae(e.map((i)=>(i-r)**2))),1),n=e.map((i)=>(i-r)/a),s=[];for(let i of Pr){let p=t-i,u=Array.from({length:p},(m,f)=>e[f+i]-e[f]);s.push(Ae(u.map((m,f)=>n[f+i]*n[f])),Ae(u.map(Math.abs))/355,oe(p,(m)=>u[m]>0),oe(p,(m)=>u[m]===0),oe(p,(m)=>Math.abs(u[m])<=5),oe(p,(m)=>Math.abs(u[m])<=20))}s.push(...mt(e.map((i)=>Math.min(7,Math.floor((i-1)*8/355))),8)),s.push(...mt(e.map((i)=>i%10),10));let o=Array.from({length:t-1},(i,p)=>e[p+1]-e[p]),c=Array.from({length:t-1},(i,p)=>Math.abs(n[p+1]-n[p]));s.push(oe(t-2,(i)=>Math.sign(o[i+1])===Math.sign(o[i])),oe(t-2,(i)=>o[i+1]===o[i]),oe(t-1,(i)=>e[i]%10===e[i+1]%10),oe(t-1,(i)=>c[i]>1),oe(t-1,(i)=>c[i]>2));let l=e.map((i)=>Math.min(15,Math.floor((i-1)*16/355)));for(let i of[4,8,16]){let p=0;for(let u=0;u+i<=t;u++)p+=new Set(l.slice(u,u+i)).size/i;s.push(p/(t-i+1))}return s}function zr(e){return[Dt(It(e)),Ct(e),$r(e),Or(e)]}function Lr(e,t){let a=zr(e).flatMap((n,s)=>{let o=t.params[s],c=n.map((i,p)=>(i-o.mean[p])/o.scale[p]),l=Math.max(Math.sqrt(c.reduce((i,p)=>i+p*p,0)),0.000000000001);return c.map((i)=>i/l*Math.sqrt(Nr[s]))});return t.weights.map((n,s)=>n.reduce((o,c,l)=>o+c*a[l],t.bias[s]))}var se=(e,t)=>e.reduce((r,a,n)=>r+a*t[n],0),de=(e)=>e.reduce((t,r)=>t+r,0)/e.length,Te=(e)=>{let t=Math.max(Math.sqrt(se(e,e)),0.000000000001);return e.map((r)=>r/t)},te=(e)=>{let t=de(e),r=Math.max(Math.sqrt(de(e.map((a)=>(a-t)**2))),0.000000000001);return e.map((a)=>(a-t)/r)},$e=(e)=>e[0].map((t,r)=>de(e.map((a)=>a[r]))),Ue=(e)=>{let t=[...e].sort((a,n)=>a-n),r=Math.floor(t.length/2);return t.length%2?t[r]:(t[r-1]+t[r])/2},ft=(e)=>[Dt(It(e)),Ct(e)],ht=(e,t)=>e.flatMap((r,a)=>Te(r.map((n,s)=>(n-t[a].mean[s])/t[a].scale[s])).map((n)=>n*Math.sqrt(a===0?0.75:0.25))),gt=(e,t)=>e.map((r,a)=>(r-t.feature_mean[a])/t.feature_scale[a]),yt=(e,t)=>{let r=t.map((a)=>se(e,a));return e.map((a,n)=>a-t.reduce((s,o,c)=>s+r[c]*o[n],0))},wt=new WeakMap;function Ur(e,t){let r=wt.get(t);if(!r)r=t.map((n)=>se(n,n)),wt.set(t,r);let a=se(e,e);return de(t.map((n,s)=>Math.max(0,a+r[s]-2*se(e,n))).sort((n,s)=>n-s).slice(0,7))}function qr(e,t){let{hellinger:r,ordered_blocks:a}=t,n=Te(yt(gt(e[0],r),r.nuisance_basis)),s=r.centroids.map((w)=>se(n,w)),o=gt(e[1],a),c=Te(o),l=Te(yt(o,a.nuisance_basis)),i=a.centroids.map((w,h)=>Math.max(...a.environment_centroids.map((x)=>se(c,x[h])))),p=a.centroids.map((w)=>se(l,w)),u=te(i),m=te(p),f=te(u.map((w,h)=>0.5*w+0.5*m[h]));return te(s).map((w,h)=>0.5*w+0.5*f[h])}function Pt(e,t){return t.schema==="shared-detector-v2"&&e.built_at===t.bank_built_at&&e.models.length===t.model_ids.length&&e.models.every((r,a)=>r.id===t.model_ids[a]&&r.response_count===t.response_counts[a])}function Jr(e,t){let r=t.calibration,a=r?.binding;if(!r||!a||r.schema!=="shared-confidence-v2"||r.method!=="ranking-temperature"||!Number.isFinite(r.tau)||r.tau<0.001||r.tau>1000||a.base_sha256!==t.base_sha256||a.reference_sha256!==t.source_reference_sha256||a.model_ids.length!==e.length||e.length!==t.model_ids.length||!e.every(Number.isFinite)||!a.model_ids.every((l,i)=>l===t.model_ids[i]))return null;let n=e.map((l)=>r.tau*l),s=Math.max(...n),o=n.map((l)=>Math.exp(l-s)),c=o.reduce((l,i)=>l+i,0);return o.map((l)=>l/c)}function vt(e,t){let r=t.ranker,a=e.map(ft),n=a.map((m)=>ht(m,r.full_params)),s=e.map((m)=>{let f=ht(ft(m.slice(0,128)),r.head_params);return te(r.lda_weights.map((v,w)=>se(v,f)+r.lda_bias[w]))}),o=te($e(s)),c=te(r.references.map((m)=>Ue(n.map((f)=>-Ur(f,m))))),l=te($e(a.map((m)=>qr(m,r.bank)))),i=te(o.map((m,f)=>0.5*m+0.25*c[f]+0.25*l[f])),p=te($e(e.map((m)=>te(Lr(m,r.positional))))),u=i.map((m,f)=>r.blend.frequency*m+r.blend.positional*p[f]);if(!u.every(Number.isFinite))throw Error("\u6392\u540D\u8BA1\u7B97\u4EA7\u751F\u65E0\u6548\u6570\u503C\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5");return u}var bt={autocorrelation:-0.23,small_step_share:0.05};function Br(e){let t=e.map((n)=>{let s=de(n),o=de(n.map((l)=>(l-s)**2)),c=n.slice(1).map((l,i)=>l-n[i]);return{autocorrelation:o?de(c.map((l,i)=>(n[i+1]-s)*(n[i]-s)))/o:1,small_step_share:de(c.map((l)=>Math.abs(l)<=20?1:0))}}),r=Ue(t.map((n)=>n.autocorrelation)),a=Ue(t.map((n)=>n.small_step_share));return{autocorrelation:r,small_step_share:a,model_like:r<=bt.autocorrelation||a<=bt.small_step_share}}function $t(e,t,r,a={}){if(!Pt(t,r))throw Error("The reference bank does not match the detector. Run fpd retrain --data-dir DIR for this bank.");let n=e.map((h)=>Me(h.text)),s=e.map((h,x)=>{let I=Math.max(80,Math.ceil((h.expected_count||0)*0.55)),D=Array.from(h.text.matchAll(/-?\d+/g),(R)=>Number(R[0]));return{index:x,parsed_numbers:n[x].length,minimum_numbers:I,accepted:n[x].length>=I,raw_out_of_range_count:D.filter((R)=>R<1||R>355).length}}),o=s.filter((h)=>h.accepted).length,c=n.filter((h,x)=>s[x].accepted),l=o?Br(c):null,i={probability:null,probability_status:"unavailable",used_outputs:o,diagnostics:s,sequence:l,method:"shared-detector-v2",model_version:{base_sha256:r.base_sha256}},p={...i,prediction:"",prediction_name:"\u4E0D\u50CF\u8BED\u8A00\u6A21\u578B\u56DE\u7B54",family_prediction_name:"",results:[],decision:"not_model",evidence:{insufficient:!0,label:"\u4E0D\u50CF\u8BED\u8A00\u6A21\u578B\u56DE\u7B54",reason:"\u76F8\u90BB\u6570\u5B57\u7684\u53D8\u5316\u65B9\u5F0F\u4E0E\u53C2\u8003\u5E93\u4E2D\u7684\u8BED\u8A00\u6A21\u578B\u56DE\u7B54\u4E0D\u540C\uFF0C\u5E38\u89C1\u4E8E\u7A0B\u5E8F\u751F\u6210\u3001\u6392\u5E8F\u6216\u6253\u4E71\u987A\u5E8F\u7684\u6570\u5B57\u3002\u672A\u751F\u6210\u6392\u540D\u3002",threshold:null,method:"sequence-shape"}};if(a.allowPartial&&o>0&&o<3&&e.length<=3){if(!l.model_like)return p;let h=vt(c,r),x=r.model_ids.map((R,P)=>P).sort((R,P)=>h[P]-h[R]),I=x.map((R)=>({model:r.model_ids[R],display_name:t.models[R].display_name,family:t.models[R].family,family_name:t.models[R].family_name,score:h[R],probability:null})),D=x[0];return{...i,method:"shared-ranker-partial-v1",decision:"partial",prediction:I[0].model,prediction_name:I[0].display_name,family_prediction:t.models[D].family,family_prediction_name:t.models[D].family_name,results:I,ranking_score:h[D],calibration:null,evidence:{insufficient:!0,label:"\u90E8\u5206\u6837\u672C\u6392\u540D",reason:`\u4F7F\u7528 ${o}/3 \u6761\u6709\u6548\u56DE\u7B54\u751F\u6210\u6392\u540D\u3002\u8865\u9F50\u4E09\u6761\u6709\u6548\u56DE\u7B54\u540E\u624D\u80FD\u8BA1\u7B97\u7F6E\u4FE1\u5EA6\u3002`,threshold:null,method:"partial-sample-ranking"}}}if(e.length!==3||o!==3)return{...i,prediction:"",prediction_name:"\u6682\u4E0D\u53EF\u8BC4\u5206",family_prediction_name:"",results:[],decision:"unscorable",evidence:{insufficient:!0,label:"\u9700\u8981\u4E09\u6761\u5B8C\u6574\u56DE\u7B54",reason:`\u5F53\u524D\u6709 ${o}/${e.length} \u6761\u6709\u6548\u56DE\u7B54\u3002\u8BF7\u8865\u9F50\u539F\u6765\u7684\u4E09\u6761\u56DE\u7B54\u540E\u91CD\u65B0\u68C0\u6D4B\u3002`,threshold:null,method:"complete-three-answers"}};if(!l.model_like)return p;let u=vt(n,r),m=Jr(u,r),f=r.model_ids.map((h,x)=>x).sort((h,x)=>u[x]-u[h]),v=f.map((h)=>({model:r.model_ids[h],display_name:t.models[h].display_name,family:t.models[h].family,family_name:t.models[h].family_name,score:u[h],probability:m?.[h]??null})),w=f[0];return{...i,prediction:v[0].model,prediction_name:v[0].display_name,family_prediction:t.models[w].family,family_prediction_name:t.models[w].family_name,results:v,ranking_score:u[w],probability:v[0].probability,probability_status:m?"reference_calibrated":"unavailable",probability_scope:m?"reference-closed-set":null,calibration:m?{method:r.calibration.method,run:r.calibration.calibration_run,tau:r.calibration.tau,sha256:r.calibration_sha256??null}:null,evidence:{insufficient:!0,label:m?"\u5E93\u5185\u6821\u51C6\u6392\u540D":"\u672A\u6821\u51C6\u6392\u540D",reason:m?"\u7F6E\u4FE1\u5EA6\u662F\u53C2\u8003\u5E93\u5185\u7684\u95ED\u96C6\u76F8\u5BF9\u6982\u7387\uFF0C\u4E0D\u5305\u542B\u5E93\u5916\u6A21\u578B\u3002":"\u6821\u51C6\u53C2\u6570\u4E0E\u5F53\u524D\u68C0\u6D4B\u5668\u4E0D\u5339\u914D\uFF0C\u7F6E\u4FE1\u5EA6\u4E0D\u53EF\u7528\u3002\u5019\u9009\u987A\u5E8F\u7531\u6392\u540D\u5206\u6570\u51B3\u5B9A\u3002",threshold:null,method:m?"reference-calibrated-ranking":"uncalibrated-ranking"}}}var jr={prior:{known:0.8,relative:0.1,alien:0.1},knownRates:[[0.02,0.4],[0.06,0.4],[0.15,0.2]],relativeRates:[[0.2,0.3],[0.4,0.4],[0.7,0.3]],narrow:0.02,wide:0.85,floor:0.000001,offsetWindow:3,alienSpread:0.15,minimumProbes:4,maximumProbes:20,stopAt:0.99,minimumGain:0.0001,planned:24};var ga=jr.knownRates[0][0];function Ot(e){let t,r;if(e.decision==="unscorable")t="Not enough valid samples",r=`Received ${e.used_outputs}/3 valid samples. Three valid samples are required.`;else if(e.decision==="not_model")t="Not like a language model reply",r="Consecutive numbers change differently from the language-model replies in the reference bank. Program-generated, sorted or shuffled numbers often do this. No ranking was produced.";else if(e.decision==="partial")t="Partial sample ranking",r=`Ranked ${e.used_outputs} valid sample${e.used_outputs===1?"":"s"}. Confidence requires three valid samples.`;else if(e.probability_status==="reference_calibrated")t="Calibrated ranking",r="Confidence is a closed-set probability within the reference bank.";else t="Uncalibrated ranking",r="The confidence calibration does not match this detector. Confidence is unavailable.";return{...e,prediction_name:e.decision==="unscorable"?"Not scored":e.decision==="not_model"?"Not a model reply":e.prediction_name,evidence:{...e.evidence,label:t,reason:r}}}function Gr(e,t,r,a){e.outputs=e.samples.map((s)=>({text:Le(s)?s.text:"",expected_count:s.expectedCount}));let n=e.samples.filter(Le).length;if(!n||t.strict&&n!==3){e.error=t.strict?`Strict mode requires 3/3 successful samples; received ${n}/3.`:"No valid samples. This round cannot be scored.";return}try{if(e.analysis=Ot($t(e.outputs,r,a,{allowPartial:!t.strict})),!e.analysis.results.length)e.error=e.analysis.evidence.reason}catch{e.error="Scoring failed. Check that the reference bank and detector files are valid."}}function Fr(e,t){return{index:e,challenges:t,outputs:[],startedAt:Date.now(),samples:t.map((r)=>({state:"queued",text:"",rawText:"",count:0,expectedCount:r.expected_count}))}}async function Hr(e,t,r,a,n,s){let o=0,c=async()=>{while(!n.aborted&&o{e.samples[l]=i,s(l)})}};if(await Promise.all(Array.from({length:t.parallel},c)),n.aborted)e.samples.forEach((l,i)=>{if(l.state!=="queued")return;e.samples[i]={...l,state:"cancelled",error:"Cancelled before dispatch."},s(i)}),e.outputs=e.samples.map((l)=>({text:Le(l)?l.text:"",expected_count:l.expectedCount})),e.error="Cancelled. This round was not scored.";else Gr(e,t,r,a);e.finishedAt=Date.now()}var Wr="Scoring failed. Check that the reference bank and detector files are valid.";function zt(e){let t=e;return{decision:e.decision??"scored",prediction:e.prediction,prediction_name:e.prediction_name,family_prediction:t.family_prediction??"",family_prediction_name:e.family_prediction_name,results:e.results,ranking_score:e.ranking_score??null,probability:e.probability,probability_status:t.probability_status,probability_scope:t.probability_scope??null,calibration:t.calibration??null,used_outputs:e.used_outputs,diagnostics:e.diagnostics,sequence:e.sequence??null,method:t.method,model_version:t.model_version,evidence:e.evidence}}function Kr(e,t,r,a){return zt(Ot($t(e,t,r,{allowPartial:!a})))}function Vr(e,t,r,a){if(!Array.isArray(e)||e.length<1||e.length>3||!e.every((s)=>s&&typeof s.text==="string"&&Number.isSafeInteger(s.expected_count)&&s.expected_count>0))throw Error("Each input round must contain one to three outputs with text and a positive integer expected_count.");let n=e.map(({text:s,expected_count:o})=>{let c=Me(s);if(!a&&c.length>o)s=c.slice(0,o).join(", ");if(c.length3)throw Error("count must be an integer from 1 to 3.");if(!Number.isSafeInteger(c)||c<1||c>3)throw Error("parallel must be an integer from 1 to 3.");if(!Number.isFinite(l)||l!==0&&(l<0.001||l>2147483.647))throw Error("timeout must be 0 (no timeout) or between 0.001 and 2147483.647 seconds.");let i=e.strict??!1;if(i&&o!==3)throw Error("strict requires count 3.");let p={baseUrl:t,apiKey:r,model:a,format:_t[n],serviceTier:s,stream:e.stream??!0,effort:e.effort??""};return Nt(p),{config:p,count:o,parallel:Math.min(c,o),repeat:1,strict:i,timeoutMs:Math.round(l*1000),tokenizer:!1,maxProbes:20}}var an=ArrayBuffer,j=Uint8Array,ke=Uint16Array,on=Int16Array,Ie=Int32Array,Oe=function(e,t,r){if(j.prototype.slice)return j.prototype.slice.call(e,t,r);if(t==null||t<0)t=0;if(r==null||r>e.length)r=e.length;var a=new j(r-t);return a.set(e.subarray(t,r)),a},_e=function(e,t,r,a){if(j.prototype.fill)return j.prototype.fill.call(e,t,r,a);if(r==null||r<0)r=0;if(a==null||a>e.length)a=e.length;for(;re.length)a=e.length;while(r2046MB)","invalid block type","FSE accuracy too high","match distance too far back","unexpected EOF"],F=function(e,t,r){var a=Error(t||cn[e]);if(a.code=e,Error.captureStackTrace)Error.captureStackTrace(a,F);if(!r)throw a;return a},St=function(e,t,r){var a=0,n=0;for(;a>>0},un=function(e,t){var r=e[0]|e[1]<<8|e[2]<<16;if(r==3126568&&e[3]==253){var a=e[4],n=a>>5&1,s=a>>2&1,o=a&3,c=a>>6;if(a&8)F(0);var l=6-n,i=o==3?4:o,p=St(e,l,i);l+=i;var u=c?1<>3);f=v+(v>>3)*(e[5]&7)}if(f>2145386496)F(1);var w=new j((t==1?m||f:t?0:f)+12);return w[0]=1,w[4]=4,w[8]=8,{b:l+u,y:0,l:0,d:p,w:t&&t!=1?t:w.subarray(12),e:f,o:new Ie(w.buffer,0,3),u:m,c:s,m:Math.min(131072,f)}}else if((r>>4|e[3]<<20)==25481893)return ln(e,4)+8;F(0)},me=function(e){var t=0;for(;1<r)F(3);var s=1<0){var I=me(o+1),D=a>>3,R=(1<>(a&7)&R,A=(1<A)P-=E;if(m[++c]=--P,P==-1)o+=P,h[--p]=c;else o-=P;if(!P)do{var b=a>>3;l=(e[b]|e[b+1]<<8)>>(a&7)&3,a+=2,c+=l}while(l==3)}if(c>255||o)F(0);var k=0,J=(s>>1)+(s>>3)+3,d=s-1;for(var _=0;_<=c;++_){var y=m[_];if(y<1){f[_]=-y;continue}for(i=0;i=p)}}if(k)F(0);for(i=0;i>3,{b:n,s:h,n:x,t:v}]},dn=function(e,t){var r=0,a=-1,n=new j(292),s=e[t],o=n.subarray(0,256),c=n.subarray(256,268),l=new ke(n.buffer,268);if(s<128){var i=Se(e,t+1,6),p=i[0],u=i[1];t+=s;var m=p<<3,f=e[t];if(!f)F(0);var v=0,w=0,h=u.b,x=h,I=(++t<<3)-8+me(f);for(;;){if(I-=h,I>3;if(v+=(e[D]|e[D+1]<<8)>>(I&7)&(1<>3,w+=(e[D]|e[D+1]<<8)>>(I&7)&(1<255)F(0)}else{a=s-127;for(;r>4,o[r+1]=R&15}++t}var P=0;for(r=0;r11)F(0);P+=A&&1<0;--r){var _=l[r];_e(d,r,_,l[r-1]=_+c[r]*(1<c&&u>3,f=(e[m]|e[m+1]<<8|e[m+2]<<16)>>(p&7);l=(l<>2,o=s<<1,c=s+o;be(e.subarray(a,a+=e[0]|e[1]<<8),t.subarray(0,s),r),be(e.subarray(a,a+=e[2]|e[3]<<8),t.subarray(s,o),r),be(e.subarray(a,a+=e[4]|e[5]<<8),t.subarray(o,c),r),be(e.subarray(a),t.subarray(c),r)},wn=function(e,t,r){var a,n=t.b,s=e[n],o=s>>1&3;t.l=s&1;var c=s>>3|e[n+1]<<5|e[n+2]<<13,l=(n+=3)+c;if(o==1){if(n>=e.length)return;if(t.b=n+1,r)return _e(r,e[n],t.y,t.y+=c),r;return _e(new j(c),e[n])}if(l>e.length)return;if(o==0){if(t.b=l,r)return r.set(e.subarray(n,l),t.y),t.y+=c,r;return Oe(e,n,l)}if(o==2){var i=e[n],p=i&3,u=i>>2&3,m=i>>4,f=0,v=0;if(p<2)if(u&1)m|=e[++n]<<4|(u&2&&e[++n]<<12);else m=i>>3;else if(v=u,u<2)m|=(e[++n]&63)<<4,f=e[n]>>6|e[++n]<<2;else if(u==2)m|=e[++n]<<4|(e[++n]&3)<<12,f=e[n]>>2|e[++n]<<6;else m|=e[++n]<<4|(e[++n]&63)<<12,f=e[n]>>6|e[++n]<<2|e[++n]<<10;++n;var w=r?r.subarray(t.y,t.y+t.m):new j(t.m),h=w.length-m;if(p==0)w.set(e.subarray(n,n+=m),h);else if(p==1)_e(w,e[n++],h);else{var x=t.h;if(p==2){var I=dn(e,n);f+=n-(n=I[0]),t.h=x=I[1]}else if(!x)F(0);(v?yn:be)(e.subarray(n,n+=f),w.subarray(h),x)}var D=e[n++];if(D){if(D==255)D=(e[n++]|e[n++]<<8)+32512;else if(D>127)D=D-128<<8|e[n++];var R=e[n++];if(R&3)F(0);var P=[mn,fn,pn];for(var A=2;A>-1;--A){var E=R>>(A<<1)+2&3;if(E==1){var q=new j([0,0,e[n++]]);P[A]={s:q.subarray(2,3),n:q.subarray(0,1),t:new ke(q.buffer,0,1),b:0}}else if(E==2)a=Se(e,n,9-(A&1)),n=a[0],P[A]=a[1];else if(E==3){if(!t.t)F(0);P[A]=t.t[A]}}var b=t.t=P,k=b[0],J=b[1],d=b[2],_=e[l-1];if(!_)F(0);var y=(l<<3)-8+me(_)-d.b,g=y>>3,S=0,T=(e[g]|e[g+1]<<8)>>(y&7)&(1<>3;var O=(e[g]|e[g+1]<<8)>>(y&7)&(1<>3;var M=(e[g]|e[g+1]<<8)>>(y&7)&(1<>3;var z=1<>>(y&7)&z-1);g=(y-=Je[Y])>>3;var U=gn[Y]+((e[g]|e[g+1]<<8|e[g+2]<<16)>>(y&7)&(1<>3;var N=hn[X]+((e[g]|e[g+1]<<8|e[g+2]<<16)>>(y&7)&(1<>3,T=d.t[T]+((e[g]|e[g+1]<<8)>>(y&7)&(1<>3,M=k.t[M]+((e[g]|e[g+1]<<8)>>(y&7)&(1<>3,O=J.t[O]+((e[g]|e[g+1]<<8)>>(y&7)&(1<3)t.o[2]=t.o[1],t.o[1]=t.o[0],t.o[0]=C-=3;else{var W=C-(N!=0);if(W){if(C=W==3?t.o[0]-1:t.o[W],W>1)t.o[2]=t.o[1];t.o[1]=t.o[0],t.o[0]=C}else C=t.o[0]}for(var A=0;AU)H=U;for(var A=0;Ai&&typeof i==="object"&&("$f32"in i)?Array.from(c.subarray(i.$f32,i.$f32+i.n)):i)}var xn=["https://lm.ikale.io/data/","https://cdn.jsdmirror.com/npm/lmfpd-data@latest/"],An="lmfpd-data-v1",En="shared-detector-v2",Fe="shared_detector.bin",He=(e)=>new TextDecoder().decode(e),Tn=(e)=>e instanceof Error?e.message:String(e);function We(e,t){if(!Array.isArray(e?.models)||!Pt(e,t))throw Error("The reference bank does not match its detector.");return{bank:e,detector:t}}async function kn(e){let t=async(r,a)=>{let n=qt(e,r);try{return a(await Ut(n))}catch{throw Error(`Cannot read ${n}.`)}};return We(await t("unified_bank.json",(r)=>JSON.parse(He(r))),await t(Fe,Ge))}async function Mn(e){try{let[t,r]=await Promise.all([Ut(e),en(e)]),a=t.readUInt32LE(0),n=JSON.parse(He(t.subarray(4,4+a)));return{data:We(n,Ge(t.subarray(4+a))),version:n.files[Fe].sha256,checkedAt:r.mtimeMs}}catch{return}}async function In(e,t,r){let a=Buffer.alloc(4);a.writeUInt32LE(t.length);let n=`${e}.tmp-${Yr(8).toString("hex")}`;try{await Xr(nn(e),{recursive:!0}),await rn(n,Buffer.concat([a,t,r])),await Zr(n,e)}catch{await Qr(n,{force:!0}).catch(()=>{})}}async function xt(e,t){let r=await fetch(e,{signal:AbortSignal.timeout(t)});if(!r.ok)throw Error(`HTTP ${r.status}`);return new Uint8Array(await r.arrayBuffer())}async function At(e,t,r){let a=[];for(let n of e)try{let s=await xt(`${n}bundle.json`,1e4),o=JSON.parse(He(s));if(o.schema!==An||o.detector_schema!==En)throw Error(`data schema ${o.schema}/${o.detector_schema} is not supported by this SDK version. Upgrade lmfpd.`);let c=o.files[Fe];if(c.sha256===r){let u=new Date;await tn(t,u,u).catch(()=>{});return}let l=[];for(let u of c.parts)l.push(await xt(`${n}chunks/${u}`,120000));let i=bn(Buffer.concat(l)),p=We(o,Ge(i));return await In(t,s,i),p}catch(s){a.push(`${n} (${Tn(s)})`)}throw Error(`lmfpd: cannot download reference data from ${a.join(", ")}`)}async function Dn(e=xn,t=qt(Sn(),"data.bin"),r=86400){let a=typeof e==="string"?[e]:e;if(a.length===1&&!/^https?:\/\//i.test(a[0]))return kn(a[0]);let n=await Mn(t);if(!n)return await At(a,t);if(Date.now()-n.checkedAt>=r*1000)At(a,t,n.version).catch(()=>{});return n.data}var Be=(e)=>({state:e.state,text:e.text,raw_text:e.rawText,count:e.count,expected_count:e.expectedCount,first_byte_ms:e.firstByteMs??null,response_model:e.responseModel??null,response_id:e.responseId??null,error:e.error??null}),Bt;class jt{static{Bt=(e)=>new jt(e)}#e;builtAt;constructor(e){this.#e=e,this.builtAt=e.bank.built_at}analyze(e,t={}){return Vr(e,this.#e.bank,this.#e.detector,t.strict??!1)}async detect(e,{signal:t,onSample:r}={}){let a=Lt(e);if(t?.aborted)return{challenges:[],samples:[],analysis:null,error:"Cancelled. This round was not scored."};let n=Fr(1,Tt(a.count)),s=r?(o)=>{try{r(o,Be(n.samples[o]))}catch(c){queueMicrotask(()=>{throw c})}}:()=>{};return n.samples.forEach((o,c)=>s(c)),await Hr(n,a,this.#e.bank,this.#e.detector,t??new AbortController().signal,s),{challenges:n.challenges,samples:n.samples.map(Be),analysis:n.analysis?zt(n.analysis):null,error:n.error??null}}}async function Gt(e={}){return Bt(await Dn(e.source,e.cache,e.ttl))}function De(e=3){if(!Number.isSafeInteger(e)||e<1||e>3)throw Error("count must be an integer from 1 to 3.");return Tt(e)}function Ft(e){return Me(e)}async function Ht(e,t){return Be(await Rt(Lt(e),t,new AbortController().signal,()=>{}))}function Wt(e){return/^[\x20-\x7e]*$/.test(e)?e:encodeURIComponent(e)}class Ke{url;key;constructor(e,t=""){this.url=e;this.key=t}headers(e={}){return{"content-type":"application/json",...this.key?{authorization:`Bearer ${this.key}`}:{},...e}}redact(e){return String(e instanceof Error?e.message:e).replaceAll(this.key||"\x00","[redacted]").slice(0,500)}async catalog(){let e=await fetch(`${this.url}/v1/models`,{headers:this.headers(),signal:AbortSignal.timeout(5000),redirect:"error"});if(!e.ok)throw await e.body?.cancel(),Error(`Magpie model catalog returned HTTP ${e.status}.`);let r=(JSON.parse(await ae(e,4194304)).data||[]).filter((n)=>{if(typeof n.id!=="string"||!n.id.includes("/")||n.id.startsWith("group/"))return!1;if(/^(embedding|image|audio)(_|$)/.test(n.type||""))return!1;if(Array.isArray(n.modalities?.output)&&!n.modalities.output.includes("text"))return!1;let s=Array.isArray(n.native_endpoints)?n.native_endpoints:[];return!s.length||!s.every((o)=>typeof o==="string"&&/\/(images|embeddings|audio)\b/.test(o))}).map((n)=>({id:n.id,name:String(n.display_name||n.name||n.id),provider:n.id.split("/")[0],efforts:(Array.isArray(n.reasoning_levels)?n.reasoning_levels:(n.supported_reasoning_levels||[]).map((s)=>s.effort)).filter((s)=>typeof s==="string"),nativeEndpoints:Array.isArray(n.native_endpoints)?n.native_endpoints.filter((s)=>typeof s==="string"):[]})),a=[];try{let n=await fetch(`${this.url}/v1/magpie/quotas?kept=1`,{headers:this.headers(),signal:AbortSignal.timeout(2500),redirect:"error"});if(n.ok){let s=JSON.parse(await ae(n,1048576));for(let o of s.data||[])if(typeof o.provider==="string"&&typeof o.user==="string"&&o.user&&(!o.kind||o.kind==="subscription")){if(!a.some((c)=>c.provider===o.provider&&c.id===o.user))a.push({id:o.user,name:String(o.alias||o.user),provider:o.provider})}}else await n.body?.cancel()}catch{}return{models:r,accounts:a}}async route(e){try{let t=await fetch(`${this.url}/v1/magpie/route?session=${encodeURIComponent(e.session)}`,{headers:this.headers(),signal:AbortSignal.timeout(2500),redirect:"error"});if(!t.ok)throw await t.body?.cancel(),Error(`Route metadata HTTP ${t.status}`);e.route=JSON.parse(await ae(t,262144));let r=e.route?.route??e.route;if(r?.model&&typeof r.model==="string"){if(e.model??=r.model,r.model!==e.requestedModel)e.mismatch=!0}}catch(t){e.routeError=this.redact(t)}}}import{mkdir as Cn,readdir as Nn,readFile as Rn,rename as Pn,writeFile as $n,unlink as On}from"fs/promises";import{join as Ve}from"path";class Ye{dir;jobs=new Map;writing=Promise.resolve();constructor(e){this.dir=e}async load(){await Cn(this.dir,{recursive:!0,mode:448});for(let e of await Nn(this.dir)){if(!/^[\w-]+\.json$/.test(e))continue;try{let t=JSON.parse(await Rn(Ve(this.dir,e),"utf8"));if(!t.id||!Array.isArray(t.results)||e!==`${t.id}.json`)continue;if(t.state==="running"||t.state==="queued"){t.state="interrupted",t.error="The plugin service restarted before this job finished.",t.finishedAt=new Date().toISOString();for(let r of t.results)if(r.state==="running"||r.state==="queued")r.state="cancelled",r.analysis=null;await this.save(t)}this.jobs.set(t.id,t)}catch{}}}list(){return[...this.jobs.values()].sort((e,t)=>t.createdAt.localeCompare(e.createdAt))}save(e){let t=JSON.stringify(e),r=Ve(this.dir,`${e.id}.json`),a=this.writing.then(async()=>{let n=`${r}.tmp`;await $n(n,t,{mode:384}),await Pn(n,r)});return this.writing=a.catch(()=>{}),a}async remove(e){await this.writing,await On(Ve(this.dir,`${e}.json`)),this.jobs.delete(e)}async flush(){await this.writing}}function Kt(e,t){let r=new TextDecoder,a="",n="",s=!1,o=!1,c=(i)=>{let p=i.split(/\r\n|\r|\n/).filter((u)=>u.startsWith("data:")).map((u)=>u.slice(5).replace(/^ /,"")).join(` -`);if(!p)return;if(p.trim()==="[DONE]"){s=!0;return}try{let u=JSON.parse(p);if(u.error||u.type==="error")o=!0;let m=u.choices?.find((f)=>f.index===0)??u.choices?.[0];if(m?.delta?.refusal)o=!0;if(m?.finish_reason)n=m.finish_reason}catch{o=!0}},l=()=>{let i;while(i=/\r\n\r\n|\n\n|\r\r/.exec(a))c(a.slice(0,i.index)),a=a.slice(i.index+i[0].length);if(a.length>1e5)throw Error("SSE frame exceeded the response limit.")};return e.pipeThrough(new TransformStream({transform(i,p){a+=r.decode(i,{stream:!0}),l(),p.enqueue(i)},flush(i){if(a+=r.decode(),l(),a.trim())c(a);if(!s&&!o&&n==="stop")t(),i.enqueue(new TextEncoder().encode(` +import{homedir as pr}from"os";import{join as lt}from"path";function he(e={}){let t=process.env.MAGPIE_ADDR?.replace(/^(0\.0\.0\.0|\[::\]):/,"127.0.0.1:"),r=(e.gateway||process.env.MAGPIE_FINGERPRINT_GATEWAY||(t?`http://${t}`:"http://127.0.0.1:3425")).replace(/\/+$/,""),a=new URL(r);if(!["http:","https:"].includes(a.protocol)||a.username||a.password||a.search||a.hash||a.pathname!=="/"&&a.pathname!=="")throw Error("Gateway must be an HTTP(S) origin without credentials, path, query or fragment.");let n=e.port??Number(process.env.MAGPIE_FINGERPRINT_PORT||4388);if(!Number.isInteger(n)||n<0||n>65535)throw Error("Invalid service port.");return{port:n,gateway:r,apiKey:e.apiKey||process.env.MAGPIE_FINGERPRINT_API_KEY||"",dataDir:e.dataDir||process.env.MAGPIE_FINGERPRINT_DATA_DIR||lt(process.env.XDG_CONFIG_HOME||lt(pr(),".config"),"magpie","fingerprint"),bankSource:e.bankSource||process.env.MAGPIE_FINGERPRINT_BANK_SOURCE,demo:e.demo??!1,uiDir:e.uiDir}}class we extends Error{}async function ae(e,t){if(Number(e.headers.get("content-length")||0)>t)throw await e.body?.cancel(),new we("Body exceeds the size limit.");if(!e.body)return"";let r=e.body.getReader(),a=[],n=0;try{while(!0){let s=await r.read();if(s.done)break;if(n+=s.value.byteLength,n>t)throw await r.cancel(),new we("Body exceeds the size limit.");a.push(s.value)}return Buffer.concat(a).toString("utf8")}finally{r.releaseLock()}}import{randomBytes as nt,timingSafeEqual as na}from"crypto";import{readFile as nr,mkdir as aa,rename as oa,unlink as sa,access as ia}from"fs/promises";import{join as ie,resolve as at,relative as ca,isAbsolute as la,extname as ua}from"path";import{stripVTControlCharacters as gr}from"util";import{randomBytes as Xr}from"crypto";import{mkdir as Zr,readFile as Ut,rename as Qr,rm as en,stat as tn,utimes as rn,writeFile as nn}from"fs/promises";import{dirname as an,join as qt}from"path";import{homedir as Sn}from"os";import{join as Ae}from"path";function At(e){let t=Math.floor(4294967296/e)*e,r=new Uint32Array(1);do crypto.getRandomValues(r);while(r[0]>=t);return r[0]%e}function ve(e){return e[At(e.length)]}function mr(e,t){let r=Array.from({length:41},(n,s)=>292+s).filter((n)=>!t.includes(n)),a=[];while(a.length`${e} ${t} \u4E2A 1 \u5230 355\uFF08\u542B\u7AEF\u70B9\uFF09\u7684\u6574\u6570\u3002`,rules:"\u6BCF\u4E2A\u4F4D\u7F6E\u90FD\u8981\u5355\u72EC\u9009\u62E9\uFF1B\u4E0D\u8981\u4ECE 1 \u5F00\u59CB\u8BA1\u6570\uFF0C\u4E0D\u8981\u8FDE\u7EED\u9012\u589E\u6216\u9012\u51CF\uFF0C\u4E5F\u4E0D\u8981\u91C7\u7528\u7B49\u5DEE\u3001\u5FAA\u73AF\u3001\u91CD\u590D\u533A\u5757\u6216\u5176\u4ED6\u89C4\u5219\u5316\u6A21\u5F0F\u3002"+"\u672C\u4EFB\u52A1\u5FC5\u987B\u7531\u5F53\u524D\u8BED\u8A00\u6A21\u578B\u76F4\u63A5\u5B8C\u6210\uFF1A\u7981\u6B62\u8C03\u7528\u6216\u501F\u52A9\u4EFB\u4F55\u5DE5\u5177\uFF0C\u5305\u62EC Python\u3001\u4EE3\u7801\u6267\u884C\u5668\u3001\u8BA1\u7B97\u5668\u3001\u641C\u7D22\u3001API \u548C\u5916\u90E8\u968F\u673A\u6570\u751F\u6210\u5668\uFF1B\u4E5F\u4E0D\u8981\u5148\u7F16\u5199\u6216\u8FD0\u884C\u4EE3\u7801\u3002",endings:["\u5141\u8BB8\u67D0\u4E2A\u6570\u5B57\u518D\u6B21\u51FA\u73B0\uFF1B\u6BCF\u9879\u5199\u51FA\u540E\u4E0D\u8981\u56DE\u5934\u6392\u5E8F\u3001\u53BB\u91CD\u6216\u66FF\u6362\u3002","\u5076\u7136\u91CD\u590D\u662F\u6709\u6548\u7684\uFF1B\u4E0D\u8981\u91CD\u65B0\u6392\u5217\u6216\u4FEE\u6B63\u5DF2\u7ECF\u5199\u51FA\u7684\u9879\u76EE\u3002","\u76F8\u540C\u503C\u53EF\u4EE5\u518D\u6B21\u51FA\u73B0\uFF1B\u8F93\u51FA\u8FC7\u7A0B\u4E2D\u4E0D\u8981\u6574\u7406\u6216\u6539\u5199\u524D\u9762\u7684\u9879\u76EE\u3002","\u91CD\u590D\u503C\u65E0\u9700\u5220\u9664\uFF1B\u4E0D\u8981\u7B5B\u9009\u3001\u91CD\u6392\u6216\u8865\u6210\u67D0\u79CD\u89C4\u5F8B\u3002","\u4E0D\u5FC5\u8D4B\u4E88\u6570\u5B57\u4EFB\u4F55\u542B\u4E49\uFF1B\u5DF2\u7ECF\u7ED9\u51FA\u7684\u503C\u4FDD\u6301\u4E0D\u53D8\u3002"],separators:["\u6570\u5B57\u4E4B\u95F4\u7528\u9017\u53F7\u6216\u7A7A\u683C\u5206\u9694\u5747\u53EF\u3002","\u4F7F\u7528\u4E00\u79CD\u4E00\u81F4\u7684\u5E38\u89C1\u5206\u9694\u7B26\u5373\u53EF\u3002","\u53EF\u4EE5\u7528\u9017\u53F7\u3001\u7A7A\u683C\u6216\u6362\u884C\u5206\u9694\u3002","\u53EA\u8981\u6BCF\u4E2A\u6574\u6570\u8FB9\u754C\u6E05\u695A\uFF0C\u683C\u5F0F\u53EF\u81EA\u884C\u9009\u62E9\u3002"],start:"\u76F4\u63A5\u4ECE\u7B2C\u4E00\u4E2A\u53D6\u503C\u5F00\u59CB\u8F93\u51FA\uFF0C\u4E0D\u8981\u5728\u5E8F\u5217\u524D\u91CD\u590D\u6570\u91CF\u3001\u8303\u56F4\u6216\u4EFB\u52A1\u8BF4\u660E\u3002"},en:{space:" ",openings:["This is an independent record of numerical choices.","Complete the following integer-choice task, which carries no semantic meaning.","Record a round of first-instinct choices.","Generate a set of integer choices that carry no meaning.","Make a quick round of item-by-item choices."],actions:["For each position, choose separately by first instinct","Choose, item by item,","Decide only the current item each time, giving a total of","Give, each by first instinct,","Choose directly, one by one,"],request:(e,t)=>`${e} ${t} integers from 1 to 355, inclusive.`,rules:"Choose separately for every position; do not count up from 1, do not increase or decrease consecutively, and do not use arithmetic progressions, cycles, repeated blocks, or other systematic patterns. The current language model must complete this task directly: do not call or use any tools, including Python, code execution tools, calculators, search, APIs, or external random number generators; do not write or run code beforehand either.",endings:["A number may appear again; after writing each item, do not go back to sort, deduplicate, or replace it.","Accidental repetitions are valid; do not rearrange or correct items already written.","The same value may appear again; do not organize or rewrite earlier items while producing the output.","Repeated values do not need to be removed; do not filter, reorder, or fill the sequence into a pattern.","Do not assign meaning to the numbers; keep values already given unchanged."],separators:["Separate the numbers with commas or spaces.","Use one consistent common separator.","You may separate the numbers with commas, spaces, or line breaks.","Choose any format that clearly separates each integer."],start:"Start the output directly with the first chosen value; do not repeat the count, range, or task instructions before the sequence."},ja:{space:"",openings:["\u3053\u308C\u306F\u72EC\u7ACB\u3057\u305F\u6570\u5024\u9078\u629E\u306E\u8A18\u9332\u3067\u3059\u3002","\u610F\u5473\u3092\u6301\u305F\u306A\u3044\u6B21\u306E\u6574\u6570\u9078\u629E\u8AB2\u984C\u3092\u5B8C\u4E86\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u76F4\u611F\u3067\u9078\u3093\u3060\u5024\u3092\u8A18\u9332\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u610F\u5473\u3092\u6301\u305F\u306A\u3044\u6574\u6570\u306E\u9078\u629E\u3092\u4E00\u7D44\u751F\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002","\u4E00\u9805\u76EE\u305A\u3064\u7D20\u65E9\u304F\u5024\u3092\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002"],actions:["\u5404\u4F4D\u7F6E\u306B\u3064\u3044\u3066\u500B\u5225\u306B\u76F4\u611F\u3067\u3001","\u4E00\u9805\u76EE\u305A\u3064\u3001","\u6BCE\u56DE\u305D\u306E\u6642\u70B9\u306E\u4E00\u9805\u76EE\u3060\u3051\u3092\u6C7A\u3081\u3066\u3001","\u305D\u308C\u305E\u308C\u76F4\u611F\u3067\u3001","\u4E00\u3064\u305A\u3064\u76F4\u63A5\u3001"],request:(e,t)=>`${e}1 \u304B\u3089 355 \u307E\u3067\uFF08\u4E21\u7AEF\u3092\u542B\u3080\uFF09\u306E\u6574\u6570\u3092 ${t} \u500B\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002`,rules:"\u5404\u4F4D\u7F6E\u306E\u5024\u306F\u500B\u5225\u306B\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u30021 \u304B\u3089\u9806\u306B\u6570\u3048\u305F\u308A\u3001\u9023\u7D9A\u3057\u3066\u5897\u52A0\u307E\u305F\u306F\u6E1B\u5C11\u3055\u305B\u305F\u308A\u305B\u305A\u3001\u7B49\u5DEE\u6570\u5217\u3001\u5468\u671F\u3001\u540C\u3058\u30D6\u30ED\u30C3\u30AF\u306E\u7E70\u308A\u8FD4\u3057\u3001\u305D\u306E\u4ED6\u306E\u898F\u5247\u7684\u306A\u30D1\u30BF\u30FC\u30F3\u3082\u4F7F\u308F\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"+"\u3053\u306E\u8AB2\u984C\u306F\u73FE\u5728\u306E\u8A00\u8A9E\u30E2\u30C7\u30EB\u81EA\u8EAB\u304C\u76F4\u63A5\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002Python\u3001\u30B3\u30FC\u30C9\u5B9F\u884C\u30C4\u30FC\u30EB\u3001\u8A08\u7B97\u6A5F\u3001\u691C\u7D22\u3001API\u3001\u5916\u90E8\u306E\u4E71\u6570\u751F\u6210\u5668\u306A\u3069\u3001\u3044\u304B\u306A\u308B\u30C4\u30FC\u30EB\u3082\u547C\u3073\u51FA\u3057\u305F\u308A\u5229\u7528\u3057\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002\u4E8B\u524D\u306B\u30B3\u30FC\u30C9\u3092\u66F8\u3044\u305F\u308A\u5B9F\u884C\u3057\u305F\u308A\u3059\u308B\u3053\u3068\u3082\u7981\u6B62\u3057\u307E\u3059\u3002",endings:["\u540C\u3058\u6570\u5B57\u304C\u518D\u3073\u73FE\u308C\u3066\u3082\u304B\u307E\u3044\u307E\u305B\u3093\u3002\u5404\u9805\u76EE\u3092\u66F8\u3044\u305F\u5F8C\u306B\u623B\u3063\u3066\u3001\u4E26\u3079\u66FF\u3048\u3001\u91CD\u8907\u306E\u524A\u9664\u3001\u7F6E\u304D\u63DB\u3048\u3092\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u5076\u7136\u306E\u91CD\u8907\u306F\u6709\u52B9\u3067\u3059\u3002\u3059\u3067\u306B\u66F8\u3044\u305F\u9805\u76EE\u3092\u4E26\u3079\u66FF\u3048\u305F\u308A\u4FEE\u6B63\u3057\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u540C\u3058\u5024\u304C\u518D\u3073\u51FA\u3066\u3082\u304B\u307E\u3044\u307E\u305B\u3093\u3002\u51FA\u529B\u306E\u9014\u4E2D\u3067\u524D\u306E\u9805\u76EE\u3092\u6574\u7406\u3057\u305F\u308A\u66F8\u304D\u63DB\u3048\u305F\u308A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u91CD\u8907\u3057\u305F\u5024\u3092\u524A\u9664\u3059\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u9078\u5225\u3001\u4E26\u3079\u66FF\u3048\u3001\u898F\u5247\u7684\u306A\u30D1\u30BF\u30FC\u30F3\u3078\u306E\u88DC\u5B8C\u3092\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002","\u6570\u5B57\u306B\u610F\u5473\u3092\u6301\u305F\u305B\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u3059\u3067\u306B\u51FA\u3057\u305F\u5024\u306F\u5909\u3048\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"],separators:["\u6570\u5B57\u306F\u30B3\u30F3\u30DE\u307E\u305F\u306F\u7A7A\u767D\u3067\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u4E00\u822C\u7684\u306A\u533A\u5207\u308A\u6587\u5B57\u3092\u4E00\u7A2E\u985E\u3001\u7D71\u4E00\u3057\u3066\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u30B3\u30F3\u30DE\u3001\u7A7A\u767D\u3001\u6539\u884C\u306E\u3044\u305A\u308C\u304B\u3067\u6570\u5B57\u3092\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044\u3002","\u5404\u6574\u6570\u306E\u533A\u5207\u308A\u304C\u660E\u78BA\u3067\u3042\u308C\u3070\u3001\u5F62\u5F0F\u306F\u81EA\u7531\u3067\u3059\u3002"],start:"\u9078\u3093\u3060\u6700\u521D\u306E\u5024\u304B\u3089\u76F4\u63A5\u51FA\u529B\u3092\u59CB\u3081\u3001\u6570\u5217\u306E\u524D\u306B\u500B\u6570\u3001\u7BC4\u56F2\u3001\u8AB2\u984C\u306E\u8AAC\u660E\u3092\u7E70\u308A\u8FD4\u3055\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"},ko:{space:" ",openings:["\uC774\uAC83\uC740 \uB3C5\uB9BD\uC801\uC778 \uC218\uCE58 \uC120\uD0DD \uAE30\uB85D\uC785\uB2C8\uB2E4.","\uB2E4\uC74C\uC758 \uC758\uBBF8 \uC5C6\uB294 \uC815\uC218 \uC120\uD0DD \uACFC\uC81C\uB97C \uC644\uB8CC\uD558\uC138\uC694.","\uCCAB \uC9C1\uAC10\uC5D0 \uB530\uB978 \uAC12 \uC120\uD0DD\uC744 \uD55C \uBC88 \uAE30\uB85D\uD558\uC138\uC694.","\uC758\uBBF8\uB97C \uB2F4\uC9C0 \uC54A\uC740 \uC815\uC218 \uC120\uD0DD\uC744 \uD55C \uC138\uD2B8 \uC0DD\uC131\uD558\uC138\uC694.","\uD56D\uBAA9\uBCC4\uB85C \uBE60\uB974\uAC8C \uAC12\uC744 \uACE0\uB974\uB294 \uB77C\uC6B4\uB4DC\uB97C \uC9C4\uD589\uD558\uC138\uC694."],actions:["\uAC01 \uC704\uCE58\uB9C8\uB2E4 \uCCAB \uC9C1\uAC10\uC73C\uB85C \uB530\uB85C","\uD56D\uBAA9\uBCC4\uB85C","\uB9E4\uBC88 \uD604\uC7AC \uD56D\uBAA9 \uD558\uB098\uB9CC \uC815\uD558\uBA74\uC11C","\uAC01\uAC01 \uCCAB \uC9C1\uAC10\uC73C\uB85C","\uD558\uB098\uC529 \uBC14\uB85C"],request:(e,t)=>`${e} 1\uBD80\uD130 355\uAE4C\uC9C0(\uC591 \uB05D \uD3EC\uD568)\uC758 \uC815\uC218 ${t}\uAC1C\uB97C \uACE0\uB974\uC138\uC694.`,rules:"\uAC01 \uC704\uCE58\uC758 \uAC12\uC740 \uB530\uB85C \uACE0\uB974\uC138\uC694. 1\uBD80\uD130 \uCC28\uB840\uB85C \uC138\uC9C0 \uB9D0\uACE0, \uC5F0\uC18D\uC73C\uB85C \uC99D\uAC00\uD558\uAC70\uB098 \uAC10\uC18C\uD558\uC9C0 \uB9D0\uBA70, \uB4F1\uCC28\uC218\uC5F4, \uC21C\uD658, \uBC18\uBCF5\uB418\uB294 \uBE14\uB85D \uB610\uB294 \uADF8 \uBC16\uC758 \uADDC\uCE59\uC801\uC778 \uD328\uD134\uB3C4 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694. "+"\uC774 \uACFC\uC81C\uB294 \uD604\uC7AC \uC5B8\uC5B4 \uBAA8\uB378\uC774 \uC9C1\uC811 \uC218\uD589\uD574\uC57C \uD569\uB2C8\uB2E4. Python, \uCF54\uB4DC \uC2E4\uD589\uAE30, \uACC4\uC0B0\uAE30, \uAC80\uC0C9, API, \uC678\uBD80 \uB09C\uC218 \uC0DD\uC131\uAE30\uB97C \uD3EC\uD568\uD55C \uC5B4\uB5A4 \uB3C4\uAD6C\uB3C4 \uD638\uCD9C\uD558\uAC70\uB098 \uC774\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694. \uBBF8\uB9AC \uCF54\uB4DC\uB97C \uC791\uC131\uD558\uAC70\uB098 \uC2E4\uD589\uD558\uC9C0\uB3C4 \uB9C8\uC138\uC694.",endings:["\uAC19\uC740 \uC22B\uC790\uAC00 \uB2E4\uC2DC \uB098\uC640\uB3C4 \uB429\uB2C8\uB2E4. \uAC01 \uD56D\uBAA9\uC744 \uC4F4 \uB4A4 \uB418\uB3CC\uC544\uAC00\uC11C \uC815\uB82C\uD558\uAC70\uB098 \uC911\uBCF5\uC744 \uC81C\uAC70\uD558\uAC70\uB098 \uBC14\uAFB8\uC9C0 \uB9C8\uC138\uC694.","\uC6B0\uC5F0\uD55C \uC911\uBCF5\uB3C4 \uC720\uD6A8\uD569\uB2C8\uB2E4. \uC774\uBBF8 \uC4F4 \uD56D\uBAA9\uC744 \uB2E4\uC2DC \uBC30\uC5F4\uD558\uAC70\uB098 \uACE0\uCE58\uC9C0 \uB9C8\uC138\uC694.","\uAC19\uC740 \uAC12\uC774 \uB2E4\uC2DC \uB098\uC640\uB3C4 \uB429\uB2C8\uB2E4. \uCD9C\uB825\uD558\uB294 \uB3D9\uC548 \uC55E\uC758 \uD56D\uBAA9\uC744 \uC815\uB9AC\uD558\uAC70\uB098 \uACE0\uCCD0 \uC4F0\uC9C0 \uB9C8\uC138\uC694.","\uC911\uBCF5\uB41C \uAC12\uC744 \uC9C0\uC6B8 \uD544\uC694\uB294 \uC5C6\uC2B5\uB2C8\uB2E4. \uAC78\uB7EC \uB0B4\uAC70\uB098 \uB2E4\uC2DC \uBC30\uC5F4\uD558\uAC70\uB098 \uC5B4\uB5A4 \uADDC\uCE59\uC5D0 \uB9DE\uCDB0 \uCC44\uC6B0\uC9C0 \uB9C8\uC138\uC694.","\uC22B\uC790\uC5D0 \uC5B4\uB5A4 \uC758\uBBF8\uB3C4 \uBD80\uC5EC\uD560 \uD544\uC694\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC774\uBBF8 \uC81C\uC2DC\uD55C \uAC12\uC740 \uADF8\uB300\uB85C \uB450\uC138\uC694."],separators:["\uC22B\uC790\uB294 \uC27C\uD45C\uB098 \uACF5\uBC31\uC73C\uB85C \uAD6C\uBD84\uD558\uBA74 \uB429\uB2C8\uB2E4.","\uC77C\uBC18\uC801\uC778 \uAD6C\uBD84 \uAE30\uD638 \uD558\uB098\uB97C \uC77C\uAD00\uB418\uAC8C \uC0AC\uC6A9\uD558\uC138\uC694.","\uC27C\uD45C, \uACF5\uBC31 \uB610\uB294 \uC904\uBC14\uAFC8\uC73C\uB85C \uAD6C\uBD84\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","\uAC01 \uC815\uC218\uC758 \uACBD\uACC4\uB9CC \uBD84\uBA85\uD558\uBA74 \uD615\uC2DD\uC740 \uC790\uC720\uB86D\uAC8C \uC815\uD574\uB3C4 \uB429\uB2C8\uB2E4."],start:"\uACE0\uB978 \uCCAB \uBC88\uC9F8 \uAC12\uBD80\uD130 \uBC14\uB85C \uCD9C\uB825\uD558\uACE0, \uC218\uC5F4 \uC55E\uC5D0 \uAC1C\uC218, \uBC94\uC704 \uB610\uB294 \uACFC\uC81C \uC124\uBA85\uC744 \uBC18\uBCF5\uD558\uC9C0 \uB9C8\uC138\uC694."},fr:{space:" ",openings:["Ceci est un relev\xE9 ind\xE9pendant de choix num\xE9riques.","Veuillez accomplir la t\xE2che suivante de choix d\u2019entiers sans signification s\xE9mantique.","Consignez une s\xE9rie de choix faits au premier r\xE9flexe.","G\xE9n\xE9rez une s\xE9rie de choix d\u2019entiers d\xE9pourvus de sens.","Effectuez une s\xE9rie rapide de choix, \xE9l\xE9ment par \xE9l\xE9ment."],actions:["Pour chaque position, choisissez s\xE9par\xE9ment au premier r\xE9flexe","Choisissez, \xE9l\xE9ment par \xE9l\xE9ment,","\xC0 chaque \xE9tape, d\xE9cidez uniquement de la valeur actuelle, pour donner au total","Donnez s\xE9par\xE9ment au premier r\xE9flexe","Choisissez directement, un par un,"],request:(e,t)=>`${e} ${t} entiers compris entre 1 et 355, bornes incluses.`,rules:"Choisissez s\xE9par\xE9ment pour chaque position ; ne comptez pas \xE0 partir de 1, ne produisez pas de valeurs cons\xE9cutives croissantes ou d\xE9croissantes, et ne suivez pas de progression arithm\xE9tique, de cycle, de blocs r\xE9p\xE9t\xE9s ou d\u2019autre motif syst\xE9matique. "+"Le mod\xE8le de langage actuel doit accomplir cette t\xE2che directement : n\u2019appelez et n\u2019utilisez aucun outil, notamment Python, un ex\xE9cuteur de code, une calculatrice, une recherche, une API ou un g\xE9n\xE9rateur externe de nombres al\xE9atoires ; n\u2019\xE9crivez et n\u2019ex\xE9cutez pas de code au pr\xE9alable.",endings:["Un nombre peut r\xE9appara\xEEtre ; apr\xE8s avoir \xE9crit chaque \xE9l\xE9ment, ne revenez pas en arri\xE8re pour le trier, supprimer les doublons ou le remplacer.","Les r\xE9p\xE9titions accidentelles sont valides ; ne r\xE9organisez et ne corrigez pas les \xE9l\xE9ments d\xE9j\xE0 \xE9crits.","Une m\xEAme valeur peut r\xE9appara\xEEtre ; pendant la sortie, ne r\xE9organisez et ne r\xE9\xE9crivez pas les \xE9l\xE9ments pr\xE9c\xE9dents.","Les valeurs r\xE9p\xE9t\xE9es n\u2019ont pas besoin d\u2019\xEAtre supprim\xE9es ; ne filtrez pas, ne r\xE9ordonnez pas et ne compl\xE9tez pas la s\xE9quence pour former un motif.","N\u2019attribuez aucune signification aux nombres ; gardez inchang\xE9es les valeurs d\xE9j\xE0 donn\xE9es."],separators:["S\xE9parez les nombres par des virgules ou des espaces.","Utilisez un s\xE9parateur courant et coh\xE9rent.","Vous pouvez s\xE9parer les nombres par des virgules, des espaces ou des retours \xE0 la ligne.","Choisissez librement le format, pourvu que la limite de chaque entier soit claire."],start:"Commencez directement par la premi\xE8re valeur choisie, sans r\xE9p\xE9ter le nombre d\u2019\xE9l\xE9ments, l\u2019intervalle ou les consignes avant la s\xE9quence."}},hr=Object.values(fr);function Tt(e=3,t=[]){return mr(e,t).map((r,a)=>{let n=ve(hr);return{id:`probe-${a+1}-${crypto.randomUUID()}`,expected_count:r,prompt:[ve(n.openings),n.request(ve(n.actions),r),n.rules,ve(n.endings),ve(n.separators),n.start].join(n.space)}})}var yr=["flex","default","fast","ultrafast"],wr=(e)=>e==="anthropic"?"speed":"service_tier",vr="fast-mode-2026-02-01",br=(e)=>e.format==="anthropic"&&e.serviceTier!==void 0&&e.serviceTier!=="default";function _r(e,t,r=""){let a=[{role:"user",content:t}],n={model:e.model,messages:a,max_tokens:8192,stream:e.stream??!0};if(e.format==="anthropic"){if(r)n.system=r;if(e.effort==="none")n.thinking={type:"disabled"};else if(e.effort&&e.effort!=="default")n.thinking={type:"adaptive"},n.output_config={effort:e.effort}}else if(e.format==="responses"){if(n={model:e.model,input:a,max_output_tokens:8192,stream:e.stream??!0,store:!1},r)n.instructions=r;if(e.effort&&e.effort!=="default")n.reasoning={effort:e.effort}}else{if(r)a.unshift({role:"system",content:r});if(e.effort&&e.effort!=="default")n.reasoning_effort=e.effort}if(e.serviceTier&&e.serviceTier!=="default")n[wr(e.format)]=e.serviceTier;return n}var je=1,kt=355,Mt=kt-je+1,ut=0.5;function Me(e){let t=[],r=[],a=0;for(let n of String(e).matchAll(/\d+/g)){let s=String(e).slice(a,n.index),o=Number(n[0]);if(r.length&&/\p{L}/u.test(s))t.push(r),r=[];if(o>=je&&o<=kt)r.push(o);a=n.index+n[0].length}if(r.length)t.push(r);return t.reduce((n,s)=>s.length>n.length?s:n,[])}function It(e){let t=Array(Mt).fill(0);return e.forEach((r)=>{t[r-je]+=1}),t}function Ct(e){let t=e.reduce((r,a)=>r+a,0)+ut*Mt;return e.map((r)=>Math.sqrt((r+ut)/t))}function Sr(e){let t=Math.floor(e.length/4),r=e.length%4,a=[],n=0;for(let s=0;s<4;s+=1){let o=t+(sc+l,0);t.push(...s.map((c)=>Math.sqrt(c/o)))}let r=Array(10).fill(0.5);e.forEach((n)=>{r[n%10]+=1});let a=r.reduce((n,s)=>n+s,0);return t.push(...r.map((n)=>Math.sqrt(n/a))),t}var xr=250,Er=4,Ar=16,dt=[0.5,2],Tr=1500;async function kr(e,t){if(t===1/0)return e.read();let r=()=>{},a=new Promise((n)=>{let s=setTimeout(n,Math.max(0,t-performance.now()));r=()=>clearTimeout(s)});try{return await Promise.race([e.read(),a])}finally{r()}}function pt(e){let t=0;for(let[r]of e.matchAll(/ ?\p{L}+|\p{N}+|\s+|[^\s\p{L}\p{N}]+/gu))t+=/\p{N}/u.test(r)?Math.ceil(r.length/3):/\p{L}/u.test(r)?Math.ceil(r.length/4):1;return t}function Mr(e){let t=e&&typeof e==="object"?e:{},r=t.completion_tokens??t.output_tokens;if(typeof r!=="number"||r<=0)return;let a=(t.completion_tokens_details??t.output_tokens_details)?.reasoning_tokens;return{output:r,reasoning:typeof a==="number"?a:void 0}}function Ir(e=performance.now()){let t="",r=0,a,n=0,s=0,o=0;return{reasoning(){a??=performance.now()},update(c){if(c.length<=t.length)return;let l=performance.now();if(!r)n=l,s=c.length;t=c,o=l,r++},result(c){if(!r)return;let l=n-e,i=pt(t),m=(i-pt(t.slice(0,s)))/i,u=Mr(c),p=(x)=>x>=dt[0]*i,f=(x)=>p(x)&&x<=dt[1]*i,v=i*m,w=o-n,h=!0;if(u?.reasoning!==void 0){let x=u.output-u.reasoning;if(f(x))v=x*m,h=!1}else if(u&&a!==void 0&&aMath.max(80,Math.ceil(e*0.55)),Le=(e)=>e.state==="complete"||e.state==="truncated",Cr=(e)=>gr(e).replace(/[\x00-\x1f\x7f-\x9f]/g," ");function Dr(e,t=""){let r=e instanceof Error?e.message:String(e);return Cr(t?r.replaceAll(t,"[REDACTED]"):r).slice(0,500)}var ue=(e)=>e!==null&&typeof e==="object"&&!Array.isArray(e)?e:{},ge=(e)=>Array.isArray(e)?e.map(ue):[],B=(e)=>typeof e==="string"?e:"",Pe=(e)=>ge(e.output).filter((t)=>t.type==="message").flatMap((t)=>ge(t.content)).filter((t)=>t.type==="output_text").map((t)=>B(t.text)).join("");function Nr(e,t){let r={"Content-Type":"application/json",Accept:e.stream?"text/event-stream":"application/json"};if(e.format==="anthropic"){if(r["x-api-key"]=e.apiKey,r["anthropic-version"]="2023-06-01",br(e))r["anthropic-beta"]=vr}else r.Authorization=`Bearer ${e.apiKey}`;let a=_r(e,t);if(e.format==="responses")delete a.max_output_tokens;else if(e.format==="openai"){if(delete a.max_tokens,a.stream)a.stream_options={include_usage:!0}}return{url:Nt(e),headers:r,body:a}}async function Rt(e,t,r,a){let{config:n}=e,s=new AbortController,o=AbortSignal.any([r,s.signal]),c={state:"waiting",text:"",rawText:"",count:0,expectedCount:t.expected_count,startedAt:Date.now()},l=!1,i=e.timeoutMs>0?setTimeout(()=>{l=!0,s.abort()},e.timeoutMs):void 0,m,u="",p=!1,f=!1,v="",w,h,x=()=>a({...c}),I=(A)=>{if(typeof A.model==="string")c.responseModel=A.model;if(typeof A.id==="string")c.responseId=A.id;if(A.usage)w={...w,...ue(A.usage)}},C=(A,q=!1)=>{c.rawText=A;let b=Me(q?A:A.replace(/\d+$/,""));if(c.count=b.length,c.text=A,!e.strict&&b.length>=t.expected_count)c.text=b.slice(0,t.expected_count).join(", "),c.count=t.expected_count,f=!q||b.length>t.expected_count;x()},R=(A)=>{if(v+=A,h?.update(v),!f)C(v)},P=(A)=>{if(A.error||A.type==="error")throw Error(`Upstream error: ${B(A.error?.message)||B(A.message)||B(A.error)||"Request failed."}`)},E=(A)=>{let q=A.split(/\r\n|\r|\n/).filter((k)=>k.startsWith("data:")).map((k)=>k.slice(5).replace(/^ /,"")).join(` +`);if(!q)return;if(q.trim()==="[DONE]"){p=!0;return}let b;try{b=ue(JSON.parse(q))}catch{throw Error("The SSE response contains invalid JSON.")}if(P(b),I(b),n.format==="openai"){let k=ge(b.choices).find((J)=>J.index===0)??ge(b.choices)[0];if(k?.delta?.refusal)throw Error("The model refused the request.");if(k?.delta?.reasoning_content||k?.delta?.reasoning)h?.reasoning();if(k?.finish_reason)u=B(k.finish_reason);if(typeof k?.delta?.content==="string")R(k.delta.content)}else if(n.format==="anthropic"){if(b.type==="message_start")I(ue(b.message));if(["thinking","redacted_thinking"].includes(b.content_block?.type)||b.delta?.type==="thinking_delta")h?.reasoning();if(b.type==="content_block_start"&&b.content_block?.type==="text")R(B(b.content_block.text));if(b.type==="content_block_delta"&&b.delta?.type==="text_delta")R(B(b.delta.text));if(b.type==="message_delta")u=B(b.delta?.stop_reason)||u;if(b.type==="message_stop")p=!0}else{if(b.type==="response.created"||b.type==="response.in_progress")I(ue(b.response));if(B(b.type).startsWith("response.reasoning"))h?.reasoning();if(b.type==="response.output_text.delta")R(B(b.delta));if(b.type==="response.output_text.done"&&!c.rawText)C(B(b.text),!0);if(b.type==="response.output_item.done"&&!c.rawText)C(Pe({output:[b.item]}),!0);if(b.type==="response.refusal.delta")throw Error("The model refused the request.");if(b.type==="response.completed"){let k=ue(b.response);I(k),p=!0,u=B(k.status)||"completed";let J=Pe(k);if(J&&!f)C(J,!0)}if(b.type==="response.failed"||b.type==="response.incomplete")throw Error(`Responses request did not complete: ${B(b.response?.error?.message)||B(b.response?.incomplete_details?.reason)||b.type}.`)}if(["refusal","content_filter"].includes(u))throw Error("The model refused the request.")};x();try{o.throwIfAborted();let{url:A,headers:q,body:b}=Nr(n,t.prompt),k={method:"POST",headers:q,body:JSON.stringify(b),signal:o,redirect:"error",timeout:!1},J=performance.now(),d=await fetch(A,k);if(!d.ok){let _=await d.text(),y=_;try{let g=ue(JSON.parse(_));y=B(g.error?.message)||B(g.message)||_}catch{}throw Error(`HTTP ${d.status}: ${y||d.statusText}`)}if(d.headers.get("content-type")?.toLowerCase().includes("text/event-stream")){if(!d.body)throw Error("The server returned an empty SSE body.");m=d.body.getReader(),h=Ir(J);let _=new TextDecoder,y="",g=1/0,S=!0,T=()=>!p&&(!f||S),O=(M)=>{if(!f)return E(M);try{E(M)}catch{S=!1}};while(T()){if(f&&g===1/0)g=performance.now()+Tr;let M=await kr(m,g);if(!M)break;let{done:X,value:L}=M;if(L?.length&&c.firstByteMs===void 0)clearTimeout(i),c.firstByteMs=Date.now()-c.startedAt,c.state="streaming",x();y+=X?_.decode():_.decode(L,{stream:!0});let Y;while(T()&&(Y=/\r\n\r\n|\n\n|\r\r/.exec(y)))O(y.slice(0,Y.index)),y=y.slice(Y.index+Y[0].length);if(X){if(T()&&y.trim())O(y);break}}}else{let _;try{_=ue(await d.json())}catch(g){if(o.aborted)throw g;throw Error("The server did not return valid JSON or SSE.")}clearTimeout(i),c.firstByteMs=Date.now()-c.startedAt,P(_),I(_);let y;if(n.format==="responses")y=Pe(_),u=B(_.status),p=u==="completed";else if(n.format==="anthropic")y=ge(_.content).filter((g)=>g.type==="text").map((g)=>B(g.text)).join(""),u=B(_.stop_reason),p=!0;else{let g=ge(_.choices)[0];if(g?.message?.refusal)throw Error("The model refused the request.");y=B(g?.message?.content),u=B(g?.finish_reason),p=!0}if(["refusal","content_filter"].includes(u))throw Error("The model refused the request.");if(!p||!["stop","end_turn","completed"].includes(u))throw Error(`The response did not complete (${u||"missing finish status"}).`);C(y,!0)}if(o.throwIfAborted(),!f&&(!p||!["stop","end_turn","completed"].includes(u)))throw Error(`The response did not complete (${u||"missing finish status"}).`);if(!f)C(c.rawText,!0);if(c.count{}),m.releaseLock();c.finishedAt=Date.now(),c.throughput=h?.result(w),x()}return{...c}}var Rr=[0.6,0.15,0.125,0.125],Pr=Array.from({length:24},(e,t)=>1+t*354/23),$r=[1,2,3,5,8,13,21,34],Ee=(e)=>e.reduce((t,r)=>t+r,0)/e.length,oe=(e,t)=>{let r=0;for(let a=0;a{let s=(n+0.5)*2/t-1,o=[s,0.5*(3*s*s-1),0.5*(5*s**3-3*s)];[...Pr.map((l)=>Math.exp(-0.5*((a-l)/20)**2)),...Array.from({length:10},(l,i)=>i===a%10?1:0)].forEach((l,i)=>o.forEach((m,u)=>{r[i*3+u]+=l*m/t}))}),r}function mt(e,t){let r=Array(t*t).fill(0.5),a=e.length-1+0.5*t*t;for(let o=1;or.slice(c*t,c*t+t).reduce((l,i)=>l+i,0)),s=Array.from({length:t},(o,c)=>n.reduce((l,i,m)=>l+r[m*t+c],0));return r.map((o,c)=>o-n[Math.floor(c/t)]*s[c%t])}function zr(e){let t=e.length,r=Ee(e),a=Math.max(Math.sqrt(Ee(e.map((i)=>(i-r)**2))),1),n=e.map((i)=>(i-r)/a),s=[];for(let i of $r){let m=t-i,u=Array.from({length:m},(p,f)=>e[f+i]-e[f]);s.push(Ee(u.map((p,f)=>n[f+i]*n[f])),Ee(u.map(Math.abs))/355,oe(m,(p)=>u[p]>0),oe(m,(p)=>u[p]===0),oe(m,(p)=>Math.abs(u[p])<=5),oe(m,(p)=>Math.abs(u[p])<=20))}s.push(...mt(e.map((i)=>Math.min(7,Math.floor((i-1)*8/355))),8)),s.push(...mt(e.map((i)=>i%10),10));let o=Array.from({length:t-1},(i,m)=>e[m+1]-e[m]),c=Array.from({length:t-1},(i,m)=>Math.abs(n[m+1]-n[m]));s.push(oe(t-2,(i)=>Math.sign(o[i+1])===Math.sign(o[i])),oe(t-2,(i)=>o[i+1]===o[i]),oe(t-1,(i)=>e[i]%10===e[i+1]%10),oe(t-1,(i)=>c[i]>1),oe(t-1,(i)=>c[i]>2));let l=e.map((i)=>Math.min(15,Math.floor((i-1)*16/355)));for(let i of[4,8,16]){let m=0;for(let u=0;u+i<=t;u++)m+=new Set(l.slice(u,u+i)).size/i;s.push(m/(t-i+1))}return s}function Lr(e){return[Ct(It(e)),Dt(e),Or(e),zr(e)]}function Ur(e,t){let a=Lr(e).flatMap((n,s)=>{let o=t.params[s],c=n.map((i,m)=>(i-o.mean[m])/o.scale[m]),l=Math.max(Math.sqrt(c.reduce((i,m)=>i+m*m,0)),0.000000000001);return c.map((i)=>i/l*Math.sqrt(Rr[s]))});return t.weights.map((n,s)=>n.reduce((o,c,l)=>o+c*a[l],t.bias[s]))}var se=(e,t)=>e.reduce((r,a,n)=>r+a*t[n],0),de=(e)=>e.reduce((t,r)=>t+r,0)/e.length,Te=(e)=>{let t=Math.max(Math.sqrt(se(e,e)),0.000000000001);return e.map((r)=>r/t)},te=(e)=>{let t=de(e),r=Math.max(Math.sqrt(de(e.map((a)=>(a-t)**2))),0.000000000001);return e.map((a)=>(a-t)/r)},$e=(e)=>e[0].map((t,r)=>de(e.map((a)=>a[r]))),Ue=(e)=>{let t=[...e].sort((a,n)=>a-n),r=Math.floor(t.length/2);return t.length%2?t[r]:(t[r-1]+t[r])/2},ft=(e)=>[Ct(It(e)),Dt(e)],ht=(e,t)=>e.flatMap((r,a)=>Te(r.map((n,s)=>(n-t[a].mean[s])/t[a].scale[s])).map((n)=>n*Math.sqrt(a===0?0.75:0.25))),gt=(e,t)=>e.map((r,a)=>(r-t.feature_mean[a])/t.feature_scale[a]),yt=(e,t)=>{let r=t.map((a)=>se(e,a));return e.map((a,n)=>a-t.reduce((s,o,c)=>s+r[c]*o[n],0))},wt=new WeakMap;function qr(e,t){let r=wt.get(t);if(!r)r=t.map((n)=>se(n,n)),wt.set(t,r);let a=se(e,e);return de(t.map((n,s)=>Math.max(0,a+r[s]-2*se(e,n))).sort((n,s)=>n-s).slice(0,7))}function Jr(e,t){let{hellinger:r,ordered_blocks:a}=t,n=Te(yt(gt(e[0],r),r.nuisance_basis)),s=r.centroids.map((w)=>se(n,w)),o=gt(e[1],a),c=Te(o),l=Te(yt(o,a.nuisance_basis)),i=a.centroids.map((w,h)=>Math.max(...a.environment_centroids.map((x)=>se(c,x[h])))),m=a.centroids.map((w)=>se(l,w)),u=te(i),p=te(m),f=te(u.map((w,h)=>0.5*w+0.5*p[h]));return te(s).map((w,h)=>0.5*w+0.5*f[h])}function Pt(e,t){return t.schema==="shared-detector-v2"&&e.built_at===t.bank_built_at&&e.models.length===t.model_ids.length&&e.models.every((r,a)=>r.id===t.model_ids[a]&&r.response_count===t.response_counts[a])}function Br(e,t){let r=t.calibration,a=r?.binding;if(!r||!a||r.schema!=="shared-confidence-v2"||r.method!=="ranking-temperature"||!Number.isFinite(r.tau)||r.tau<0.001||r.tau>1000||a.base_sha256!==t.base_sha256||a.reference_sha256!==t.source_reference_sha256||a.model_ids.length!==e.length||e.length!==t.model_ids.length||!e.every(Number.isFinite)||!a.model_ids.every((l,i)=>l===t.model_ids[i]))return null;let n=e.map((l)=>r.tau*l),s=Math.max(...n),o=n.map((l)=>Math.exp(l-s)),c=o.reduce((l,i)=>l+i,0);return o.map((l)=>l/c)}function vt(e,t){let r=t.ranker,a=e.map(ft),n=a.map((p)=>ht(p,r.full_params)),s=e.map((p)=>{let f=ht(ft(p.slice(0,128)),r.head_params);return te(r.lda_weights.map((v,w)=>se(v,f)+r.lda_bias[w]))}),o=te($e(s)),c=te(r.references.map((p)=>Ue(n.map((f)=>-qr(f,p))))),l=te($e(a.map((p)=>Jr(p,r.bank)))),i=te(o.map((p,f)=>0.5*p+0.25*c[f]+0.25*l[f])),m=te($e(e.map((p)=>te(Ur(p,r.positional))))),u=i.map((p,f)=>r.blend.frequency*p+r.blend.positional*m[f]);if(!u.every(Number.isFinite))throw Error("\u6392\u540D\u8BA1\u7B97\u4EA7\u751F\u65E0\u6548\u6570\u503C\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5");return u}var bt={autocorrelation:-0.23,small_step_share:0.05};function jr(e){let t=e.map((n)=>{let s=de(n),o=de(n.map((l)=>(l-s)**2)),c=n.slice(1).map((l,i)=>l-n[i]);return{autocorrelation:o?de(c.map((l,i)=>(n[i+1]-s)*(n[i]-s)))/o:1,small_step_share:de(c.map((l)=>Math.abs(l)<=20?1:0))}}),r=Ue(t.map((n)=>n.autocorrelation)),a=Ue(t.map((n)=>n.small_step_share));return{autocorrelation:r,small_step_share:a,model_like:r<=bt.autocorrelation||a<=bt.small_step_share}}function $t(e,t,r,a={}){if(!Pt(t,r))throw Error("The reference bank does not match the detector. Run fpd retrain --data-dir DIR for this bank.");let n=e.map((h)=>Me(h.text)),s=e.map((h,x)=>{let I=Math.max(80,Math.ceil((h.expected_count||0)*0.55)),C=Array.from(h.text.matchAll(/-?\d+/g),(R)=>Number(R[0]));return{index:x,parsed_numbers:n[x].length,minimum_numbers:I,accepted:n[x].length>=I,raw_out_of_range_count:C.filter((R)=>R<1||R>355).length}}),o=s.filter((h)=>h.accepted).length,c=n.filter((h,x)=>s[x].accepted),l=o?jr(c):null,i={probability:null,probability_status:"unavailable",used_outputs:o,diagnostics:s,sequence:l,method:"shared-detector-v2",model_version:{base_sha256:r.base_sha256}},m={...i,prediction:"",prediction_name:"\u4E0D\u50CF\u8BED\u8A00\u6A21\u578B\u56DE\u7B54",family_prediction_name:"",results:[],decision:"not_model",evidence:{insufficient:!0,label:"\u4E0D\u50CF\u8BED\u8A00\u6A21\u578B\u56DE\u7B54",reason:"\u76F8\u90BB\u6570\u5B57\u7684\u53D8\u5316\u65B9\u5F0F\u4E0E\u53C2\u8003\u5E93\u4E2D\u7684\u8BED\u8A00\u6A21\u578B\u56DE\u7B54\u4E0D\u540C\uFF0C\u5E38\u89C1\u4E8E\u7A0B\u5E8F\u751F\u6210\u3001\u6392\u5E8F\u6216\u6253\u4E71\u987A\u5E8F\u7684\u6570\u5B57\u3002\u672A\u751F\u6210\u6392\u540D\u3002",threshold:null,method:"sequence-shape"}};if(a.allowPartial&&o>0&&o<3&&e.length<=3){if(!l.model_like)return m;let h=vt(c,r),x=r.model_ids.map((R,P)=>P).sort((R,P)=>h[P]-h[R]),I=x.map((R)=>({model:r.model_ids[R],display_name:t.models[R].display_name,family:t.models[R].family,family_name:t.models[R].family_name,score:h[R],probability:null})),C=x[0];return{...i,method:"shared-ranker-partial-v1",decision:"partial",prediction:I[0].model,prediction_name:I[0].display_name,family_prediction:t.models[C].family,family_prediction_name:t.models[C].family_name,results:I,ranking_score:h[C],calibration:null,evidence:{insufficient:!0,label:"\u90E8\u5206\u6837\u672C\u6392\u540D",reason:`\u4F7F\u7528 ${o}/3 \u6761\u6709\u6548\u56DE\u7B54\u751F\u6210\u6392\u540D\u3002\u8865\u9F50\u4E09\u6761\u6709\u6548\u56DE\u7B54\u540E\u624D\u80FD\u8BA1\u7B97\u7F6E\u4FE1\u5EA6\u3002`,threshold:null,method:"partial-sample-ranking"}}}if(e.length!==3||o!==3)return{...i,prediction:"",prediction_name:"\u6682\u4E0D\u53EF\u8BC4\u5206",family_prediction_name:"",results:[],decision:"unscorable",evidence:{insufficient:!0,label:"\u9700\u8981\u4E09\u6761\u5B8C\u6574\u56DE\u7B54",reason:`\u5F53\u524D\u6709 ${o}/${e.length} \u6761\u6709\u6548\u56DE\u7B54\u3002\u8BF7\u8865\u9F50\u539F\u6765\u7684\u4E09\u6761\u56DE\u7B54\u540E\u91CD\u65B0\u68C0\u6D4B\u3002`,threshold:null,method:"complete-three-answers"}};if(!l.model_like)return m;let u=vt(n,r),p=Br(u,r),f=r.model_ids.map((h,x)=>x).sort((h,x)=>u[x]-u[h]),v=f.map((h)=>({model:r.model_ids[h],display_name:t.models[h].display_name,family:t.models[h].family,family_name:t.models[h].family_name,score:u[h],probability:p?.[h]??null})),w=f[0];return{...i,prediction:v[0].model,prediction_name:v[0].display_name,family_prediction:t.models[w].family,family_prediction_name:t.models[w].family_name,results:v,ranking_score:u[w],probability:v[0].probability,probability_status:p?"reference_calibrated":"unavailable",probability_scope:p?"reference-closed-set":null,calibration:p?{method:r.calibration.method,run:r.calibration.calibration_run,tau:r.calibration.tau,sha256:r.calibration_sha256??null}:null,evidence:{insufficient:!0,label:p?"\u5E93\u5185\u6821\u51C6\u6392\u540D":"\u672A\u6821\u51C6\u6392\u540D",reason:p?"\u7F6E\u4FE1\u5EA6\u662F\u53C2\u8003\u5E93\u5185\u7684\u95ED\u96C6\u76F8\u5BF9\u6982\u7387\uFF0C\u4E0D\u5305\u542B\u5E93\u5916\u6A21\u578B\u3002":"\u6821\u51C6\u53C2\u6570\u4E0E\u5F53\u524D\u68C0\u6D4B\u5668\u4E0D\u5339\u914D\uFF0C\u7F6E\u4FE1\u5EA6\u4E0D\u53EF\u7528\u3002\u5019\u9009\u987A\u5E8F\u7531\u6392\u540D\u5206\u6570\u51B3\u5B9A\u3002",threshold:null,method:p?"reference-calibrated-ranking":"uncalibrated-ranking"}}}var Fr={prior:{known:0.8,relative:0.1,alien:0.1},knownRates:[[0.02,0.4],[0.06,0.4],[0.15,0.2]],relativeRates:[[0.2,0.3],[0.4,0.4],[0.7,0.3]],narrow:0.02,wide:0.85,floor:0.000001,offsetWindow:3,alienSpread:0.15,minimumProbes:4,maximumProbes:20,stopAt:0.99,minimumGain:0.0001,planned:24};var ya=Fr.knownRates[0][0];function Ot(e){let t,r;if(e.decision==="unscorable")t="Not enough valid samples",r=`Received ${e.used_outputs}/3 valid samples. Three valid samples are required.`;else if(e.decision==="not_model")t="Not like a language model reply",r="Consecutive numbers change differently from the language-model replies in the reference bank. Program-generated, sorted or shuffled numbers often do this. No ranking was produced.";else if(e.decision==="partial")t="Partial sample ranking",r=`Ranked ${e.used_outputs} valid sample${e.used_outputs===1?"":"s"}. Confidence requires three valid samples.`;else if(e.probability_status==="reference_calibrated")t="Calibrated ranking",r="Confidence is a closed-set probability within the reference bank.";else t="Uncalibrated ranking",r="The confidence calibration does not match this detector. Confidence is unavailable.";return{...e,prediction_name:e.decision==="unscorable"?"Not scored":e.decision==="not_model"?"Not a model reply":e.prediction_name,evidence:{...e.evidence,label:t,reason:r}}}function Gr(e,t,r,a){e.outputs=e.samples.map((s)=>({text:Le(s)?s.text:"",expected_count:s.expectedCount}));let n=e.samples.filter(Le).length;if(!n||t.strict&&n!==3){e.error=t.strict?`Strict mode requires 3/3 successful samples; received ${n}/3.`:"No valid samples. This round cannot be scored.";return}try{if(e.analysis=Ot($t(e.outputs,r,a,{allowPartial:!t.strict})),!e.analysis.results.length)e.error=e.analysis.evidence.reason}catch{e.error="Scoring failed. Check that the reference bank and detector files are valid."}}function Wr(e,t){return{index:e,challenges:t,outputs:[],startedAt:Date.now(),samples:t.map((r)=>({state:"queued",text:"",rawText:"",count:0,expectedCount:r.expected_count}))}}async function Hr(e,t,r,a,n,s){let o=0,c=async()=>{while(!n.aborted&&o{e.samples[l]=i,s(l)})}};if(await Promise.all(Array.from({length:t.parallel},c)),n.aborted)e.samples.forEach((l,i)=>{if(l.state!=="queued")return;e.samples[i]={...l,state:"cancelled",error:"Cancelled before dispatch."},s(i)}),e.outputs=e.samples.map((l)=>({text:Le(l)?l.text:"",expected_count:l.expectedCount})),e.error="Cancelled. This round was not scored.";else Gr(e,t,r,a);e.finishedAt=Date.now()}var Kr="Scoring failed. Check that the reference bank and detector files are valid.";function zt(e){let t=e;return{decision:e.decision??"scored",prediction:e.prediction,prediction_name:e.prediction_name,family_prediction:t.family_prediction??"",family_prediction_name:e.family_prediction_name,results:e.results,ranking_score:e.ranking_score??null,probability:e.probability,probability_status:t.probability_status,probability_scope:t.probability_scope??null,calibration:t.calibration??null,used_outputs:e.used_outputs,diagnostics:e.diagnostics,sequence:e.sequence??null,method:t.method,model_version:t.model_version,evidence:e.evidence}}function Vr(e,t,r,a){return zt(Ot($t(e,t,r,{allowPartial:!a})))}function Yr(e,t,r,a){if(!Array.isArray(e)||e.length<1||e.length>3||!e.every((s)=>s&&typeof s.text==="string"&&Number.isSafeInteger(s.expected_count)&&s.expected_count>0))throw Error("Each input round must contain one to three outputs with text and a positive integer expected_count.");let n=e.map(({text:s,expected_count:o})=>{let c=Me(s);if(!a&&c.length>o)s=c.slice(0,o).join(", ");if(c.length3)throw Error("count must be an integer from 1 to 3.");if(!Number.isSafeInteger(c)||c<1||c>3)throw Error("parallel must be an integer from 1 to 3.");if(!Number.isFinite(l)||l!==0&&(l<0.001||l>2147483.647))throw Error("timeout must be 0 (no timeout) or between 0.001 and 2147483.647 seconds.");let i=e.strict??!1;if(i&&o!==3)throw Error("strict requires count 3.");let m={baseUrl:t,apiKey:r,model:a,format:_t[n],serviceTier:s,stream:e.stream??!0,effort:e.effort??""};return Nt(m),{config:m,count:o,parallel:Math.min(c,o),repeat:1,strict:i,timeoutMs:Math.round(l*1000),tokenizer:!1,maxProbes:20}}var on=ArrayBuffer,j=Uint8Array,ke=Uint16Array,sn=Int16Array,Ie=Int32Array,Oe=function(e,t,r){if(j.prototype.slice)return j.prototype.slice.call(e,t,r);if(t==null||t<0)t=0;if(r==null||r>e.length)r=e.length;var a=new j(r-t);return a.set(e.subarray(t,r)),a},_e=function(e,t,r,a){if(j.prototype.fill)return j.prototype.fill.call(e,t,r,a);if(r==null||r<0)r=0;if(a==null||a>e.length)a=e.length;for(;re.length)a=e.length;while(r2046MB)","invalid block type","FSE accuracy too high","match distance too far back","unexpected EOF"],G=function(e,t,r){var a=Error(t||ln[e]);if(a.code=e,Error.captureStackTrace)Error.captureStackTrace(a,G);if(!r)throw a;return a},St=function(e,t,r){var a=0,n=0;for(;a>>0},dn=function(e,t){var r=e[0]|e[1]<<8|e[2]<<16;if(r==3126568&&e[3]==253){var a=e[4],n=a>>5&1,s=a>>2&1,o=a&3,c=a>>6;if(a&8)G(0);var l=6-n,i=o==3?4:o,m=St(e,l,i);l+=i;var u=c?1<>3);f=v+(v>>3)*(e[5]&7)}if(f>2145386496)G(1);var w=new j((t==1?p||f:t?0:f)+12);return w[0]=1,w[4]=4,w[8]=8,{b:l+u,y:0,l:0,d:m,w:t&&t!=1?t:w.subarray(12),e:f,o:new Ie(w.buffer,0,3),u:p,c:s,m:Math.min(131072,f)}}else if((r>>4|e[3]<<20)==25481893)return un(e,4)+8;G(0)},me=function(e){var t=0;for(;1<r)G(3);var s=1<0){var I=me(o+1),C=a>>3,R=(1<>(a&7)&R,E=(1<E)P-=A;if(p[++c]=--P,P==-1)o+=P,h[--m]=c;else o-=P;if(!P)do{var b=a>>3;l=(e[b]|e[b+1]<<8)>>(a&7)&3,a+=2,c+=l}while(l==3)}if(c>255||o)G(0);var k=0,J=(s>>1)+(s>>3)+3,d=s-1;for(var _=0;_<=c;++_){var y=p[_];if(y<1){f[_]=-y;continue}for(i=0;i=m)}}if(k)G(0);for(i=0;i>3,{b:n,s:h,n:x,t:v}]},pn=function(e,t){var r=0,a=-1,n=new j(292),s=e[t],o=n.subarray(0,256),c=n.subarray(256,268),l=new ke(n.buffer,268);if(s<128){var i=Se(e,t+1,6),m=i[0],u=i[1];t+=s;var p=m<<3,f=e[t];if(!f)G(0);var v=0,w=0,h=u.b,x=h,I=(++t<<3)-8+me(f);for(;;){if(I-=h,I>3;if(v+=(e[C]|e[C+1]<<8)>>(I&7)&(1<>3,w+=(e[C]|e[C+1]<<8)>>(I&7)&(1<255)G(0)}else{a=s-127;for(;r>4,o[r+1]=R&15}++t}var P=0;for(r=0;r11)G(0);P+=E&&1<0;--r){var _=l[r];_e(d,r,_,l[r-1]=_+c[r]*(1<c&&u>3,f=(e[p]|e[p+1]<<8|e[p+2]<<16)>>(m&7);l=(l<>2,o=s<<1,c=s+o;be(e.subarray(a,a+=e[0]|e[1]<<8),t.subarray(0,s),r),be(e.subarray(a,a+=e[2]|e[3]<<8),t.subarray(s,o),r),be(e.subarray(a,a+=e[4]|e[5]<<8),t.subarray(o,c),r),be(e.subarray(a),t.subarray(c),r)},vn=function(e,t,r){var a,n=t.b,s=e[n],o=s>>1&3;t.l=s&1;var c=s>>3|e[n+1]<<5|e[n+2]<<13,l=(n+=3)+c;if(o==1){if(n>=e.length)return;if(t.b=n+1,r)return _e(r,e[n],t.y,t.y+=c),r;return _e(new j(c),e[n])}if(l>e.length)return;if(o==0){if(t.b=l,r)return r.set(e.subarray(n,l),t.y),t.y+=c,r;return Oe(e,n,l)}if(o==2){var i=e[n],m=i&3,u=i>>2&3,p=i>>4,f=0,v=0;if(m<2)if(u&1)p|=e[++n]<<4|(u&2&&e[++n]<<12);else p=i>>3;else if(v=u,u<2)p|=(e[++n]&63)<<4,f=e[n]>>6|e[++n]<<2;else if(u==2)p|=e[++n]<<4|(e[++n]&3)<<12,f=e[n]>>2|e[++n]<<6;else p|=e[++n]<<4|(e[++n]&63)<<12,f=e[n]>>6|e[++n]<<2|e[++n]<<10;++n;var w=r?r.subarray(t.y,t.y+t.m):new j(t.m),h=w.length-p;if(m==0)w.set(e.subarray(n,n+=p),h);else if(m==1)_e(w,e[n++],h);else{var x=t.h;if(m==2){var I=pn(e,n);f+=n-(n=I[0]),t.h=x=I[1]}else if(!x)G(0);(v?wn:be)(e.subarray(n,n+=f),w.subarray(h),x)}var C=e[n++];if(C){if(C==255)C=(e[n++]|e[n++]<<8)+32512;else if(C>127)C=C-128<<8|e[n++];var R=e[n++];if(R&3)G(0);var P=[fn,hn,mn];for(var E=2;E>-1;--E){var A=R>>(E<<1)+2&3;if(A==1){var q=new j([0,0,e[n++]]);P[E]={s:q.subarray(2,3),n:q.subarray(0,1),t:new ke(q.buffer,0,1),b:0}}else if(A==2)a=Se(e,n,9-(E&1)),n=a[0],P[E]=a[1];else if(A==3){if(!t.t)G(0);P[E]=t.t[E]}}var b=t.t=P,k=b[0],J=b[1],d=b[2],_=e[l-1];if(!_)G(0);var y=(l<<3)-8+me(_)-d.b,g=y>>3,S=0,T=(e[g]|e[g+1]<<8)>>(y&7)&(1<>3;var O=(e[g]|e[g+1]<<8)>>(y&7)&(1<>3;var M=(e[g]|e[g+1]<<8)>>(y&7)&(1<>3;var z=1<>>(y&7)&z-1);g=(y-=Je[Y])>>3;var U=yn[Y]+((e[g]|e[g+1]<<8|e[g+2]<<16)>>(y&7)&(1<>3;var N=gn[X]+((e[g]|e[g+1]<<8|e[g+2]<<16)>>(y&7)&(1<>3,T=d.t[T]+((e[g]|e[g+1]<<8)>>(y&7)&(1<>3,M=k.t[M]+((e[g]|e[g+1]<<8)>>(y&7)&(1<>3,O=J.t[O]+((e[g]|e[g+1]<<8)>>(y&7)&(1<3)t.o[2]=t.o[1],t.o[1]=t.o[0],t.o[0]=D-=3;else{var H=D-(N!=0);if(H){if(D=H==3?t.o[0]-1:t.o[H],H>1)t.o[2]=t.o[1];t.o[1]=t.o[0],t.o[0]=D}else D=t.o[0]}for(var E=0;EU)W=U;for(var E=0;Ei&&typeof i==="object"&&("$f32"in i)?Array.from(c.subarray(i.$f32,i.$f32+i.n)):i)}var En=["https://lm.ikale.io/data/","https://cdn.jsdmirror.com/npm/lmfpd-data@latest/"],An="lmfpd-data-v1",Tn="shared-detector-v2",Ge="shared_detector.bin",We=(e)=>new TextDecoder().decode(e),kn=(e)=>e instanceof Error?e.message:String(e);function He(e,t){if(!Array.isArray(e?.models)||!Pt(e,t))throw Error("The reference bank does not match its detector.");return{bank:e,detector:t}}async function Mn(e){let t=async(r,a)=>{let n=qt(e,r);try{return a(await Ut(n))}catch{throw Error(`Cannot read ${n}.`)}};return He(await t("unified_bank.json",(r)=>JSON.parse(We(r))),await t(Ge,Fe))}async function In(e){try{let[t,r]=await Promise.all([Ut(e),tn(e)]),a=t.readUInt32LE(0),n=JSON.parse(We(t.subarray(4,4+a)));return{data:He(n,Fe(t.subarray(4+a))),version:n.files[Ge].sha256,checkedAt:r.mtimeMs}}catch{return}}async function Cn(e,t,r){let a=Buffer.alloc(4);a.writeUInt32LE(t.length);let n=`${e}.tmp-${Xr(8).toString("hex")}`;try{await Zr(an(e),{recursive:!0}),await nn(n,Buffer.concat([a,t,r])),await Qr(n,e)}catch{await en(n,{force:!0}).catch(()=>{})}}async function xt(e,t){let r=await fetch(e,{signal:AbortSignal.timeout(t)});if(!r.ok)throw Error(`HTTP ${r.status}`);return new Uint8Array(await r.arrayBuffer())}async function Et(e,t,r){let a=[];for(let n of e)try{let s=await xt(`${n}bundle.json`,1e4),o=JSON.parse(We(s));if(o.schema!==An||o.detector_schema!==Tn)throw Error(`data schema ${o.schema}/${o.detector_schema} is not supported by this SDK version. Upgrade lmfpd.`);let c=o.files[Ge];if(c.sha256===r){let u=new Date;await rn(t,u,u).catch(()=>{});return}let l=[];for(let u of c.parts)l.push(await xt(`${n}chunks/${u}`,120000));let i=_n(Buffer.concat(l)),m=He(o,Fe(i));return await Cn(t,s,i),m}catch(s){a.push(`${n} (${kn(s)})`)}throw Error(`lmfpd: cannot download reference data from ${a.join(", ")}`)}async function Dn(e=En,t=qt(xn(),"data.bin"),r=86400){let a=typeof e==="string"?[e]:e;if(a.length===1&&!/^https?:\/\//i.test(a[0]))return Mn(a[0]);let n=await In(t);if(!n)return await Et(a,t);if(Date.now()-n.checkedAt>=r*1000)Et(a,t,n.version).catch(()=>{});return n.data}var Be=(e)=>({state:e.state,text:e.text,raw_text:e.rawText,count:e.count,expected_count:e.expectedCount,first_byte_ms:e.firstByteMs??null,response_model:e.responseModel??null,response_id:e.responseId??null,error:e.error??null}),Bt;class jt{static{Bt=(e)=>new jt(e)}#e;builtAt;constructor(e){this.#e=e,this.builtAt=e.bank.built_at}analyze(e,t={}){return Yr(e,this.#e.bank,this.#e.detector,t.strict??!1)}async detect(e,{signal:t,onSample:r}={}){let a=Lt(e);if(t?.aborted)return{challenges:[],samples:[],analysis:null,error:"Cancelled. This round was not scored."};let n=Wr(1,Tt(a.count)),s=r?(o)=>{try{r(o,Be(n.samples[o]))}catch(c){queueMicrotask(()=>{throw c})}}:()=>{};return n.samples.forEach((o,c)=>s(c)),await Hr(n,a,this.#e.bank,this.#e.detector,t??new AbortController().signal,s),{challenges:n.challenges,samples:n.samples.map(Be),analysis:n.analysis?zt(n.analysis):null,error:n.error??null}}}async function Ft(e={}){return Bt(await Dn(e.source,e.cache,e.ttl))}function Ce(e=3){if(!Number.isSafeInteger(e)||e<1||e>3)throw Error("count must be an integer from 1 to 3.");return Tt(e)}function Gt(e){return Me(e)}async function Wt(e,t){return Be(await Rt(Lt(e),t,new AbortController().signal,()=>{}))}function Ht(e){return/^[\x20-\x7e]*$/.test(e)?e:encodeURIComponent(e)}class Ke{url;key;constructor(e,t=""){this.url=e;this.key=t}headers(e={}){return{"content-type":"application/json",...this.key?{authorization:`Bearer ${this.key}`}:{},...e}}redact(e){return String(e instanceof Error?e.message:e).replaceAll(this.key||"\x00","[redacted]").slice(0,500)}async catalog(){let e=await fetch(`${this.url}/v1/models`,{headers:this.headers(),signal:AbortSignal.timeout(5000),redirect:"error"});if(!e.ok)throw await e.body?.cancel(),Error(`Magpie model catalog returned HTTP ${e.status}.`);let r=(JSON.parse(await ae(e,4194304)).data||[]).filter((n)=>{if(typeof n.id!=="string"||!n.id.includes("/")||n.id.startsWith("group/"))return!1;if(/^(embedding|image|audio)(_|$)/.test(n.type||""))return!1;if(Array.isArray(n.modalities?.output)&&!n.modalities.output.includes("text"))return!1;let s=Array.isArray(n.native_endpoints)?n.native_endpoints:[];return!s.length||!s.every((o)=>typeof o==="string"&&/\/(images|embeddings|audio)\b/.test(o))}).map((n)=>({id:n.id,name:String(n.display_name||n.name||n.id),provider:n.id.split("/")[0],efforts:(Array.isArray(n.reasoning_levels)?n.reasoning_levels:(n.supported_reasoning_levels||[]).map((s)=>s.effort)).filter((s)=>typeof s==="string"),nativeEndpoints:Array.isArray(n.native_endpoints)?n.native_endpoints.filter((s)=>typeof s==="string"):[]})),a=[];try{let n=await fetch(`${this.url}/v1/magpie/quotas?kept=1`,{headers:this.headers(),signal:AbortSignal.timeout(2500),redirect:"error"});if(n.ok){let s=JSON.parse(await ae(n,1048576));for(let o of s.data||[])if(typeof o.provider==="string"&&typeof o.user==="string"&&o.user&&(!o.kind||o.kind==="subscription")){if(!a.some((c)=>c.provider===o.provider&&c.id===o.user))a.push({id:o.user,name:String(o.alias||o.user),provider:o.provider})}}else await n.body?.cancel()}catch{}return{models:r,accounts:a}}async route(e){try{let t=await fetch(`${this.url}/v1/magpie/route?session=${encodeURIComponent(e.session)}`,{headers:this.headers(),signal:AbortSignal.timeout(2500),redirect:"error"});if(!t.ok)throw await t.body?.cancel(),Error(`Route metadata HTTP ${t.status}`);e.route=JSON.parse(await ae(t,262144));let r=e.route?.route??e.route;if(r?.model&&typeof r.model==="string"){if(e.model??=r.model,r.model!==e.requestedModel)e.mismatch=!0}}catch(t){e.routeError=this.redact(t)}}}import{mkdir as Nn,readdir as Rn,readFile as Pn,rename as $n,writeFile as On,unlink as zn}from"fs/promises";import{join as Ve}from"path";class Ye{dir;jobs=new Map;writing=Promise.resolve();constructor(e){this.dir=e}async load(){await Nn(this.dir,{recursive:!0,mode:448});for(let e of await Rn(this.dir)){if(!/^[\w-]+\.json$/.test(e))continue;try{let t=JSON.parse(await Pn(Ve(this.dir,e),"utf8"));if(!t.id||!Array.isArray(t.results)||e!==`${t.id}.json`)continue;if(t.state==="running"||t.state==="queued"){t.state="interrupted",t.error="The plugin service restarted before this job finished.",t.finishedAt=new Date().toISOString();for(let r of t.results)if(r.state==="running"||r.state==="queued")r.state="cancelled",r.analysis=null;await this.save(t)}this.jobs.set(t.id,t)}catch{}}}list(){return[...this.jobs.values()].sort((e,t)=>t.createdAt.localeCompare(e.createdAt))}save(e){let t=JSON.stringify(e),r=Ve(this.dir,`${e.id}.json`),a=this.writing.then(async()=>{let n=`${r}.tmp`;await On(n,t,{mode:384}),await $n(n,r)});return this.writing=a.catch(()=>{}),a}async remove(e){await this.writing,await zn(Ve(this.dir,`${e}.json`)),this.jobs.delete(e)}async flush(){await this.writing}}function Kt(e,t){let r=new TextDecoder,a="",n="",s=!1,o=!1,c=(i)=>{let m=i.split(/\r\n|\r|\n/).filter((u)=>u.startsWith("data:")).map((u)=>u.slice(5).replace(/^ /,"")).join(` +`);if(!m)return;if(m.trim()==="[DONE]"){s=!0;return}try{let u=JSON.parse(m);if(u.error||u.type==="error")o=!0;let p=u.choices?.find((f)=>f.index===0)??u.choices?.[0];if(p?.delta?.refusal)o=!0;if(p?.finish_reason)n=p.finish_reason}catch{o=!0}},l=()=>{let i;while(i=/\r\n\r\n|\n\n|\r\r/.exec(a))c(a.slice(0,i.index)),a=a.slice(i.index+i[0].length);if(a.length>1e5)throw Error("SSE frame exceeded the response limit.")};return e.pipeThrough(new TransformStream({transform(i,m){a+=r.decode(i,{stream:!0}),l(),m.enqueue(i)},flush(i){if(a+=r.decode(),l(),a.trim())c(a);if(!s&&!o&&n==="stop")t(),i.enqueue(new TextEncoder().encode(` data: [DONE] -`))}}))}import{createHmac as Ln,randomBytes as Xe}from"crypto";import{chmodSync as Un,closeSync as Yt,fsyncSync as qn,linkSync as Jn,mkdirSync as Bn,openSync as jn,readFileSync as Gn,rmSync as Fn,writeSync as Hn}from"fs";import{join as Wn,resolve as Ze}from"path";var Vt="0.2.4";var et=Vt,Kn=".service-identity-salt",Qe=32,Xt=new Map,Ce=(e)=>{try{let t=Gn(e);return t.length===Qe?t:void 0}catch{return}},Vn=(e,t)=>{let r,a=`${e}.${process.pid}.${Xe(8).toString("hex")}.tmp`;try{r=jn(a,"wx",384);let n=0;while(n24)Q("targets must contain 1 to 24 items");let r=e.targets.map((a)=>`${a.model}\x00${a.account??""}`);if(new Set(r).size!==r.length)Q("duplicate targets are not allowed");if(!Number.isInteger(e.targetParallel)||e.targetParallel<1||e.targetParallel>3)Q("targetParallel must be 1 to 3");if(!Number.isInteger(e.sampleParallel)||e.sampleParallel<1||e.sampleParallel>3)Q("sampleParallel must be 1 to 3");if(!Number.isFinite(e.deadlineSeconds)||e.deadlineSeconds<10||e.deadlineSeconds>900)Q("deadlineSeconds must be 10 to 900");if(typeof e.effort!=="string"||e.effort.length>64)Q("effort must be at most 64 characters");if(typeof e.strict!=="boolean")Q("strict must be boolean");if(!["default","flex","fast","ultrafast"].includes(e.serviceTier))Q("unknown service tier");if(!["auto",...Zt].includes(e.api))Q("unknown API");if(e.account!==void 0&&(typeof e.account!=="string"||e.account.length>256))Q("account must be at most 256 characters");for(let a of e.targets){if(typeof a.model!=="string"||!a.model.trim())Q("target model must be text");if(a.account!==void 0&&(typeof a.account!=="string"||a.account.length>256))Q("account must be at most 256 characters");if(!t.find((s)=>s.id===a.model))Q(`unknown model: ${a.model}`)}}function Qn(e,t){if(e!=="auto")return e;let r=(t.nativeEndpoints??[]).map((a)=>a.toLowerCase());for(let a of Zt)if(r.some((n)=>n===a||n.includes(`/${a==="chat_completions"?"chat/completions":a}`)||n.includes(a)))return a;return"chat_completions"}function Qt(e){return{state:"queued",text:"",raw_text:"",count:0,expected_count:e.expected_count,first_byte_ms:null,response_model:null,response_id:null,error:null}}function ea(e,t,r,a){let n=e.account||t;if(!n)return{model:e.model};let s=a.filter((l)=>l.provider===r.provider),o=s.filter((l)=>l.name===n),c=s.find((l)=>l.id.toLowerCase()===n.toLowerCase())??(o.length===1?o[0]:void 0);return{model:e.model,account:c?.id??n,...c?{accountName:c.name}:{}}}function er(e,t,r,a=[]){Zn(e,t);let n=e.targets.map((p)=>ea(p,e.account,t.find((u)=>u.id===p.model),a)),s=n.map((p)=>`${p.model}\x00${p.account??""}`);if(new Set(s).size!==s.length)Q("duplicate targets are not allowed");let o=n[0].account!==void 0&&n.every((p)=>p.account===n[0].account)?n[0]:void 0,c={targets:n,...o?{account:o.account,...o.accountName?{accountName:o.accountName}:{}}:{},api:e.api,effort:e.effort,serviceTier:e.serviceTier,strict:e.strict,targetParallel:e.targetParallel,sampleParallel:e.sampleParallel,deadlineSeconds:e.deadlineSeconds},l=De(3),i=c.targets.map((p,u)=>{let m=t.find((f)=>f.id===p.model);return{id:`target-${u+1}-${crypto.randomUUID()}`,target:p,api:Qn(e.api,m),state:"queued",samples:l.map(Qt),provenance:l.map(()=>({session:"",requestedModel:p.model})),analysis:null,error:null}});return{id:crypto.randomUUID(),createdAt:new Date().toISOString(),state:"queued",config:c,challenges:l,results:i,bank:{builtAt:r,sdk:Xn}}}function ta(e,t="Cancelled. This round was not scored."){return{...Qt(e),state:"cancelled",error:t}}async function pe(e){await e.onUpdate()}async function tr(e,t){e.state="running",await pe(t);let r=t.sample??((s,o)=>Ht(s,o)),a=0,n=async()=>{while(!0){let s=a++;if(s>=e.results.length)return;let o=e.results[s];o.state="running",await pe(t);let c=0,l=async()=>{while(!0){let v=c++;if(v>=e.challenges.length)return;let w=e.challenges[v];if(t.signal.aborted){o.samples[v]=ta(w),await pe(t);continue}try{let h=t.sampleEndpoint(o,v),x={baseUrl:h.baseUrl,apiKey:h.apiKey,model:o.target.model,api:o.api,effort:e.config.effort,serviceTier:e.config.serviceTier,strict:e.config.strict,count:3,parallel:1,stream:!0};o.samples[v]={...o.samples[v],state:"waiting"},await pe(t);let I=await r(x,w,t.signal);if(o.samples[v]=I,t.afterSample)await t.afterSample(o,v);await pe(t)}catch(h){let x=h instanceof Error?h.message:String(h);o.samples[v]={...o.samples[v],state:t.signal.aborted?"cancelled":"failed",error:x},o.error??=x,await pe(t)}}};await Promise.all(Array.from({length:Math.min(e.config.sampleParallel,e.challenges.length)},l));let i=o.samples.some((v)=>v.state==="cancelled"),p=t.signal.aborted,u=o.provenance.some((v)=>v.mismatch),m=o.samples.filter((v)=>v.state==="complete"||!e.config.strict&&v.state==="truncated"),f=e.config.strict&&(o.samples.length!==3||o.samples.some((v)=>v.state!=="complete"));if(!p&&!i&&!u&&!f&&m.length>0)o.analysis=t.detector.analyze(m.map((v)=>({text:v.text,expected_count:v.expected_count})),{strict:e.config.strict});else if(p||i)o.error=t.signal.reason instanceof Error?t.signal.reason.message:"Cancelled. This round was not scored.";else if(u)o.error="Provider/model response does not match the requested target; result was not scored.";else if(f)o.error="Strict mode requires three complete, untruncated samples.";o.state=p||i?"cancelled":u||o.samples.some((v)=>v.state==="failed")||f?"failed":"completed",await pe(t)}};if(await Promise.all(Array.from({length:Math.min(e.config.targetParallel,e.results.length)},n)),e.finishedAt=new Date().toISOString(),t.signal.aborted||e.results.some((s)=>s.state==="cancelled")){if(e.state="cancelled",t.signal.aborted)e.error=t.signal.reason instanceof Error?t.signal.reason.message:"Cancelled"}else if(e.results.some((s)=>s.state==="failed"))e.state="failed";else e.state="completed";await pe(t)}var tt=[{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",provider:"anthropic",efforts:["low","medium","high"],nativeEndpoints:["/v1/messages"]},{id:"openai/gpt-5.5",name:"GPT-5.5",provider:"openai",efforts:["low","medium","high"],nativeEndpoints:["/v1/responses"]},{id:"relay/claude-opus-4.7",name:"Claude Opus 4.7",provider:"relay",efforts:["low","medium","high"],nativeEndpoints:["/v1/messages"]},{id:"google/gemini-3.1-pro",name:"Gemini 3.1 Pro",provider:"google",efforts:[],nativeEndpoints:[]}];function rt(e){let t=e.split("/").slice(1).join("/"),r=[t,"claude-sonnet-4.6","gpt-5.4","gemini-3.1-pro","deepseek-v3.2"].filter((a,n,s)=>s.indexOf(a)===n);return{decision:"scored",prediction:t,prediction_name:t,family_prediction:t.split("-")[0],family_prediction_name:t.split("-")[0],results:r.map((a,n)=>({model:a,display_name:a,family:a.split("-")[0],family_name:a.split("-")[0],score:1-n*0.17,probability:n===0?0.87:0.13/(r.length-1)})),ranking_score:1,probability:0.87,probability_status:"reference_calibrated",probability_scope:"Reference bank candidates only (illustrative demo)",calibration:null,used_outputs:3,diagnostics:[0,1,2].map((a)=>({index:a,parsed_numbers:300,minimum_numbers:165,accepted:!0,raw_out_of_range_count:0})),sequence:null,method:"Illustrative demo; no measurement",model_version:{base_sha256:"demo-not-measured"},evidence:{insufficient:!1,label:"Demo",reason:"Illustrative data only",threshold:null,method:"demo"}}}function rr(){let e=new Date(Date.now()-3600000).toISOString(),t={targets:tt.slice(0,2).map((r)=>({model:r.id})),api:"auto",effort:"",serviceTier:"default",strict:!1,targetParallel:1,sampleParallel:3,deadlineSeconds:300};return{id:"demo-example",createdAt:e,finishedAt:e,state:"completed",config:t,challenges:De(),bank:{builtAt:"Demo reference data",sdk:"0.2.0"},demo:!0,results:t.targets.map((r,a)=>({id:`demo-${a}`,target:r,api:a?"responses":"messages",state:"completed",samples:[0,1,2].map(()=>({state:"complete",text:"137, 42, 291, 65, 188",raw_text:"137, 42, 291, 65, 188 (illustrative excerpt)",count:300,expected_count:300,first_byte_ms:650,response_model:r.model.split("/")[1],response_id:"demo",error:null})),provenance:[0,1,2].map((n)=>({session:`demo-${n}`,requestedModel:r.model,provider:r.model.split("/")[0],model:r.model})),analysis:rt(r.model),error:null}))}}var ua=(e)=>e instanceof Error?e.message:String(e),G=(e,t=200,r={})=>Response.json(e,{status:t,headers:r}),ar=(e,t)=>e.length===t.length&&ra(Buffer.from(e),Buffer.from(t)),or=(e)=>!["queued","running"].includes(e.state),ot=()=>crypto.randomUUID();async function sr(e={}){let t=he(e),r=new Ke(t.gateway,t.apiKey),a=new Ye(ie(t.dataDir,t.demo?"demo-jobs":"jobs")),n=nt(32).toString("hex"),s=new Map,o=new Map,c=new Map,l,i="",p,u=[],m=[],f="",v=!1,w=!1,h,x=(d)=>{for(let _ of c.get(d.id)||[])_(d)},I=async(d)=>{x(d),await a.save(d)};async function D(d=!1){if(t.demo)return;if(l&&!d)return l;if(p)return p;return p=(async()=>{try{await na(t.dataDir,{recursive:!0,mode:448});let _=ie(t.dataDir,d&&(!t.bankSource||/^https?:\/\//i.test(t.bankSource))?`reference-refresh-${ot()}.bin`:"reference.bin");try{let y=await Gt({...t.bankSource?{source:t.bankSource}:{},cache:_,ttl:1/0});if(d&&_!==ie(t.dataDir,"reference.bin"))await aa(_,ie(t.dataDir,"reference.bin"));l=y;try{let g=await nr(ie(t.dataDir,"reference.bin"));h=JSON.parse(g.subarray(4,4+g.readUInt32LE(0)).toString()).models?.length}catch{}}finally{if(d&&_!==ie(t.dataDir,"reference.bin"))await oa(_).catch(()=>{})}return i="",l}catch(_){i=r.redact(_);return}finally{p=void 0}})(),p}function R(){return t.demo?{builtAt:"Demo reference data",modelCount:64}:l?{builtAt:l.builtAt,modelCount:h}:null}async function P(){if(t.demo||l)return{state:"ready"};let _=t.bankSource&&!/^https?:\/\//i.test(t.bankSource)?ie(t.bankSource,"unified_bank.json"):ie(t.dataDir,"reference.bin");return{state:await sa(_).then(()=>!0,()=>!1)?"cached":"missing"}}async function A(){if(t.demo)return u=tt,m=[],{models:u,accounts:m};try{let d=await r.catalog();return u=d.models,m=d.accounts,f="",d}catch(d){return f=r.redact(d),{models:[],accounts:[]}}}let E=Bun.serve({hostname:"127.0.0.1",port:0,idleTimeout:0,async fetch(d){let _=new URL(d.url);if(d.headers.get("host")!==_.host||_.hostname!=="127.0.0.1")return new Response("Forbidden",{status:403});let y=_.pathname.match(/^\/sample\/([\w-]+)\/v1\/(responses|chat\/completions|messages)$/),g=y?o.get(y[1]):void 0;if(!g||d.method!=="POST"||g.used||g.controller.signal.aborted)return new Response("Unknown sample",{status:404});let S=d.headers.get("authorization")?.replace(/^Bearer /,"")||d.headers.get("x-api-key")||"";if(!ar(S,g.secret))return new Response("Unauthorized",{status:401});g.used=!0;let{job:T,result:O,index:M,controller:X}=g,L={session:`fp-${ot()}`,requestedModel:O.target.model};O.provenance[M]=L;let Y,ee=()=>Y??=(async()=>{try{await r.route(L),x(T)}finally{g.finish()}})();try{let re=await ae(d,16384);if(re.length>16384)throw Error("Sample request too large.");if(JSON.parse(re).model!==O.target.model)throw Error("Sample model does not match its job.");let z={responses:"responses",chat_completions:"chat/completions",messages:"messages"}[O.api];if(y[2]!==z)throw Error("Sample protocol does not match its job.");let C=Date.now(),U=r.headers({"X-Magpie-Session":L.session,...O.target.account?{"X-Magpie-Account":Wt(O.target.account)}:{}});for(let ne of["anthropic-version","anthropic-beta","accept"]){let Z=d.headers.get(ne);if(Z)U[ne]=Z}let N=await fetch(`${r.url}/v1/${z}`,{method:"POST",headers:U,body:re,signal:X.signal,redirect:"error",timeout:!1});if(L.provider=N.headers.get("X-Magpie-Provider")||void 0,L.model=N.headers.get("X-Magpie-Model")||void 0,L.mismatch=!!(L.model&&L.model!==O.target.model||L.provider&&L.provider!==O.target.model.split("/")[0]),!N.ok||!N.body)return await N.body?.cancel(),await ee(),G({error:{message:`Magpie returned HTTP ${N.status}. Inspect Magpie's request log for details.`}},N.ok?502:N.status);let W=!1,V="",H="",ce=0,le=(O.api==="chat_completions"&&N.headers.get("content-type")?.includes("text/event-stream")?Kt(N.body,()=>{L.streamNormalization="chat-done-after-stop"}):N.body).getReader(),fe=0,cr=new TextDecoder,lr=(ne)=>{let Z=O.samples[M];if(!Z)return;if(ce+=ne.byteLength,ce>2097152)throw Error("Sample exceeded the 2 MiB response limit.");Z.state="streaming",Z.first_byte_ms??=Date.now()-C,H+=cr.decode(ne,{stream:!0});let Re;while((Re=H.indexOf(` -`))>=0){let it=H.slice(0,Re).trim();if(H=H.slice(Re+1),!it.startsWith("data:"))continue;try{let ye=JSON.parse(it.slice(5)),ct=ye.choices?.[0]?.delta?.content??(ye.type==="response.output_text.delta"?ye.delta:void 0)??(ye.type==="content_block_delta"?ye.delta?.text:void 0);if(typeof ct==="string")V+=ct}catch{}}if(V.length>1e5||H.length>1e5)throw Error("Sample text exceeded the response limit.");if(Z.raw_text=V,Z.count=Ft(V).length,Date.now()-fe>150)fe=Date.now(),x(T)},ur=new ReadableStream({async pull(ne){try{let Z=await le.read();if(Z.done)W=!0,await ee(),ne.close();else lr(Z.value),ne.enqueue(Z.value)}catch(Z){if(await le.cancel().catch(()=>{}),!W)W=!0,await ee();ne.error(Z)}},async cancel(){if(!W)W=!0,await le.cancel().catch(()=>{}),await ee()}});return new Response(ur,{headers:{"content-type":N.headers.get("content-type")||"text/event-stream","cache-control":"no-store"}})}catch(re){return await ee(),G({error:{message:X.signal.aborted?"Detection cancelled or deadline exceeded.":r.redact(re)}},502)}}});async function q(d,_){let y=new AbortController;s.set(d.id,y);let g=setTimeout(()=>y.abort(Error("Job deadline exceeded")),d.config.deadlineSeconds*1000);try{if(t.demo){d.demo=!0,d.state="running",await I(d);for(let S of d.results){S.state="running";for(let T=0;T<3;T++){if(y.signal.aborted)break;S.samples[T]={state:"streaming",text:"",raw_text:"",count:0,expected_count:d.challenges[T].expected_count,first_byte_ms:650,response_model:S.target.model.split("/")[1],response_id:"demo",error:null},x(d),await Bun.sleep(350),S.samples[T]={...S.samples[T],state:"complete",text:"137, 42, 291, 65, 188",raw_text:"137, 42, 291, 65, 188 (illustrative excerpt)",count:d.challenges[T].expected_count},S.provenance[T]={session:`demo-${T}`,requestedModel:S.target.model,model:S.target.model,provider:S.target.model.split("/")[0]},x(d)}if(S.state=y.signal.aborted?"cancelled":"completed",S.analysis=y.signal.aborted?null:rt(S.target.model),await I(d),y.signal.aborted)break}d.state=y.signal.aborted?"cancelled":"completed",d.finishedAt=new Date().toISOString()}else{if(!_)throw Error(i||"Reference data is not loaded.");await tr(d,{detector:_,signal:y.signal,sampleEndpoint:(S,T)=>{let O=ot(),M,X=new Promise((Y)=>{M=Y}),L={job:d,result:S,index:T,secret:nt(32).toString("hex"),controller:y,used:!1,done:X,finish:M};return o.set(O,L),{baseUrl:`http://127.0.0.1:${E.port}/sample/${O}/v1`,apiKey:L.secret}},afterSample:async(S,T)=>{let O=[...o.values()].find((M)=>M.job===d&&M.result===S&&M.index===T);if(O?.used)await Promise.race([O.done,Bun.sleep(3500)])},onUpdate:()=>I(d)})}}catch(S){d.state=y.signal.aborted?"cancelled":"failed",d.error=r.redact(S),d.finishedAt=new Date().toISOString()}finally{if(clearTimeout(g),s.delete(d.id),y.signal.aborted&&!d.error)d.error=ua(y.signal.reason||"Cancelled");for(let[S,T]of o)if(T.job===d)T.finish(),o.delete(S);for(let S of d.results)if(S.state==="running"||S.state==="queued")S.state="cancelled",S.analysis=null;await I(d)}}let b=t.uiDir||at(import.meta.dir,import.meta.dir.endsWith("/src")?"../dist/ui":"ui"),k,J=Promise.resolve();try{k=Bun.serve({hostname:"127.0.0.1",port:t.port,idleTimeout:0,async fetch(d){let _=new URL(d.url),y=`127.0.0.1:${k.port}`,g=d.headers.get("host");if(g!==y&&g!==`localhost:${k.port}`)return new Response("Invalid host",{status:403});let S=d.headers.get("origin");if(S&&S!=="null"&&S!==`http://${y}`&&S!==`http://localhost:${k.port}`)return new Response("Invalid origin",{status:403});let T={"access-control-allow-origin":S||"*","access-control-allow-headers":"Authorization, Content-Type","access-control-allow-methods":"GET, POST, DELETE, OPTIONS",vary:"Origin","cache-control":"no-store"};if(d.method==="OPTIONS")return new Response(null,{status:204,headers:T});if(_.pathname==="/_fingerprint/health"&&d.method==="GET")return G(Ne(t),200,T);await J;let O=_.pathname.startsWith("/api/");if(O&&!ar(d.headers.get("authorization")?.replace(/^Bearer /,"")||"",n))return G({error:"Unauthorized"},401,T);try{let M;if(O){let K=_.pathname;if(K==="/api/bootstrap"&&d.method==="GET"){let z=await A();M=G({version:et,demo:t.demo,...z,jobs:a.list(),bank:R(),bankStatus:await P(),gateway:{url:t.gateway,reachable:t.demo||!f,...f?{error:f}:{}},...i?{bankError:i}:{}})}else if(K==="/api/models"&&d.method==="GET")M=G(await A());else if(K==="/api/jobs"&&d.method==="GET")M=G(a.list());else if(K==="/api/jobs"&&d.method==="POST"){if(s.size||w)return G({error:"A detection batch is already running."},409,T);w=!0;try{if(a.jobs.size>=200)return G({error:"History limit reached (200 batches). Export and delete older batches first."},409,T);if(Number(d.headers.get("content-length")||0)>16384)return G({error:"Request too large"},413,T);let z=await ae(d,16384),C=JSON.parse(z);await A();let U=er(C,u,"",m),N=await D();if(!t.demo&&!N)return G({error:i||"Reference data unavailable"},503,T);if(U.bank.builtAt=t.demo?"Demo reference data":N.builtAt,t.demo)U.demo=!0;a.jobs.set(U.id,U),await a.save(U),q(U,N).catch((W)=>{U.state="failed",U.error=`Could not save task history: ${r.redact(W)}`,x(U)}),M=G(U,202)}finally{w=!1}}else if((K==="/api/bank/download"||K==="/api/reload-data")&&d.method==="POST")await D(!0),M=G({bank:R(),bankStatus:await P(),error:i||void 0},i?503:200);else{let z=K.match(/^\/api\/jobs\/([\w-]+)(?:\/(cancel|events|export))?$/),C=z?a.jobs.get(z[1]):void 0;if(!C)return G({error:"Job not found"},404,T);if(z[2]==="cancel"&&d.method==="POST")s.get(C.id)?.abort(Error("Cancelled by user")),M=G(C);else if(z[2]==="export"&&d.method==="GET")M=new Response(JSON.stringify({schema:"magpie-fingerprint/v1",...C},null,2),{headers:{"content-type":"application/json","content-disposition":`attachment; filename="fingerprint-${C.id}.json"`}});else if(z[2]==="events"&&d.method==="GET"){if((c.get(C.id)?.size||0)>=6)return G({error:"Too many event subscribers."},429,T);let U=new TextEncoder,N=()=>{},W=new ReadableStream({start(V){let H=!1,ce,xe=(fe)=>{if(H||(V.desiredSize??0)<=0&&!or(fe))return;try{if(V.enqueue(U.encode(`event: snapshot +`))}}))}import{createHmac as Un,randomBytes as Xe}from"crypto";import{chmodSync as qn,closeSync as Yt,fsyncSync as Jn,linkSync as Bn,mkdirSync as jn,openSync as Fn,readFileSync as Gn,rmSync as Wn,writeSync as Hn}from"fs";import{join as Kn,resolve as Ze}from"path";var Vt="0.2.4";var et=Vt,Vn=".service-identity-salt",Qe=32,Xt=new Map,De=(e)=>{try{let t=Gn(e);return t.length===Qe?t:void 0}catch{return}},Yn=(e,t)=>{let r,a=`${e}.${process.pid}.${Xe(8).toString("hex")}.tmp`;try{r=Fn(a,"wx",384);let n=0;while(n24)Q("targets must contain 1 to 24 items");let r=e.targets.map((a)=>`${a.model}\x00${a.account??""}`);if(new Set(r).size!==r.length)Q("duplicate targets are not allowed");if(!Number.isInteger(e.targetParallel)||e.targetParallel<1||e.targetParallel>3)Q("targetParallel must be 1 to 3");if(!Number.isInteger(e.sampleParallel)||e.sampleParallel<1||e.sampleParallel>3)Q("sampleParallel must be 1 to 3");if(!Number.isFinite(e.deadlineSeconds)||e.deadlineSeconds<10||e.deadlineSeconds>900)Q("deadlineSeconds must be 10 to 900");if(typeof e.effort!=="string"||e.effort.length>64)Q("effort must be at most 64 characters");if(typeof e.strict!=="boolean")Q("strict must be boolean");if(!["default","flex","fast","ultrafast"].includes(e.serviceTier))Q("unknown service tier");if(!["auto",...Zt].includes(e.api))Q("unknown API");if(e.account!==void 0&&(typeof e.account!=="string"||e.account.length>256))Q("account must be at most 256 characters");for(let a of e.targets){if(typeof a.model!=="string"||!a.model.trim())Q("target model must be text");if(a.account!==void 0&&(typeof a.account!=="string"||a.account.length>256))Q("account must be at most 256 characters");if(!t.find((s)=>s.id===a.model))Q(`unknown model: ${a.model}`)}}function ea(e,t){if(e!=="auto")return e;let r=(t.nativeEndpoints??[]).map((a)=>a.toLowerCase());for(let a of Zt)if(r.some((n)=>n===a||n.includes(`/${a==="chat_completions"?"chat/completions":a}`)||n.includes(a)))return a;return"chat_completions"}function Qt(e){return{state:"queued",text:"",raw_text:"",count:0,expected_count:e.expected_count,first_byte_ms:null,response_model:null,response_id:null,error:null}}function ta(e,t,r,a){let n=e.account||t;if(!n)return{model:e.model};let s=a.filter((l)=>l.provider===r.provider),o=s.filter((l)=>l.name===n),c=s.find((l)=>l.id.toLowerCase()===n.toLowerCase())??(o.length===1?o[0]:void 0);return{model:e.model,account:c?.id??n,...c?{accountName:c.name}:{}}}function er(e,t,r,a=[]){Qn(e,t);let n=e.targets.map((m)=>ta(m,e.account,t.find((u)=>u.id===m.model),a)),s=n.map((m)=>`${m.model}\x00${m.account??""}`);if(new Set(s).size!==s.length)Q("duplicate targets are not allowed");let o=n[0].account!==void 0&&n.every((m)=>m.account===n[0].account)?n[0]:void 0,c={targets:n,...o?{account:o.account,...o.accountName?{accountName:o.accountName}:{}}:{},api:e.api,effort:e.effort,serviceTier:e.serviceTier,strict:e.strict,targetParallel:e.targetParallel,sampleParallel:e.sampleParallel,deadlineSeconds:e.deadlineSeconds},l=Ce(3),i=c.targets.map((m,u)=>{let p=t.find((f)=>f.id===m.model);return{id:`target-${u+1}-${crypto.randomUUID()}`,target:m,api:ea(e.api,p),state:"queued",samples:l.map(Qt),provenance:l.map(()=>({session:"",requestedModel:m.model})),analysis:null,error:null}});return{id:crypto.randomUUID(),createdAt:new Date().toISOString(),state:"queued",config:c,challenges:l,results:i,bank:{builtAt:r,sdk:Zn}}}function ra(e,t="Cancelled. This round was not scored."){return{...Qt(e),state:"cancelled",error:t}}async function pe(e){await e.onUpdate()}async function tr(e,t){e.state="running",await pe(t);let r=t.sample??((s,o)=>Wt(s,o)),a=0,n=async()=>{while(!0){let s=a++;if(s>=e.results.length)return;let o=e.results[s];o.state="running",await pe(t);let c=0,l=async()=>{while(!0){let v=c++;if(v>=e.challenges.length)return;let w=e.challenges[v];if(t.signal.aborted){o.samples[v]=ra(w),await pe(t);continue}try{let h=t.sampleEndpoint(o,v),x={baseUrl:h.baseUrl,apiKey:h.apiKey,model:o.target.model,api:o.api,effort:e.config.effort,serviceTier:e.config.serviceTier,strict:e.config.strict,count:3,parallel:1,stream:!0};o.samples[v]={...o.samples[v],state:"waiting"},await pe(t);let I=await r(x,w,t.signal);if(o.samples[v]=I,t.afterSample)await t.afterSample(o,v);await pe(t)}catch(h){let x=h instanceof Error?h.message:String(h);o.samples[v]={...o.samples[v],state:t.signal.aborted?"cancelled":"failed",error:x},o.error??=x,await pe(t)}}};await Promise.all(Array.from({length:Math.min(e.config.sampleParallel,e.challenges.length)},l));let i=o.samples.some((v)=>v.state==="cancelled"),m=t.signal.aborted,u=o.provenance.some((v)=>v.mismatch),p=o.samples.filter((v)=>v.state==="complete"||!e.config.strict&&v.state==="truncated"),f=e.config.strict&&(o.samples.length!==3||o.samples.some((v)=>v.state!=="complete"));if(!m&&!i&&!u&&!f&&p.length>0)o.analysis=t.detector.analyze(p.map((v)=>({text:v.text,expected_count:v.expected_count})),{strict:e.config.strict});else if(m||i)o.error=t.signal.reason instanceof Error?t.signal.reason.message:"Cancelled. This round was not scored.";else if(u)o.error="Provider/model response does not match the requested target; result was not scored.";else if(f)o.error="Strict mode requires three complete, untruncated samples.";o.state=m||i?"cancelled":u||o.samples.some((v)=>v.state==="failed")||f?"failed":"completed",await pe(t)}};if(await Promise.all(Array.from({length:Math.min(e.config.targetParallel,e.results.length)},n)),e.finishedAt=new Date().toISOString(),t.signal.aborted||e.results.some((s)=>s.state==="cancelled")){if(e.state="cancelled",t.signal.aborted)e.error=t.signal.reason instanceof Error?t.signal.reason.message:"Cancelled"}else if(e.results.some((s)=>s.state==="failed"))e.state="failed";else e.state="completed";await pe(t)}var tt=[{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",provider:"anthropic",efforts:["low","medium","high"],nativeEndpoints:["/v1/messages"]},{id:"openai/gpt-5.5",name:"GPT-5.5",provider:"openai",efforts:["low","medium","high"],nativeEndpoints:["/v1/responses"]},{id:"relay/claude-opus-4.7",name:"Claude Opus 4.7",provider:"relay",efforts:["low","medium","high"],nativeEndpoints:["/v1/messages"]},{id:"google/gemini-3.1-pro",name:"Gemini 3.1 Pro",provider:"google",efforts:[],nativeEndpoints:[]}];function rt(e){let t=e.split("/").slice(1).join("/"),r=[t,"claude-sonnet-4.6","gpt-5.4","gemini-3.1-pro","deepseek-v3.2"].filter((a,n,s)=>s.indexOf(a)===n);return{decision:"scored",prediction:t,prediction_name:t,family_prediction:t.split("-")[0],family_prediction_name:t.split("-")[0],results:r.map((a,n)=>({model:a,display_name:a,family:a.split("-")[0],family_name:a.split("-")[0],score:1-n*0.17,probability:n===0?0.87:0.13/(r.length-1)})),ranking_score:1,probability:0.87,probability_status:"reference_calibrated",probability_scope:"Reference bank candidates only (illustrative demo)",calibration:null,used_outputs:3,diagnostics:[0,1,2].map((a)=>({index:a,parsed_numbers:300,minimum_numbers:165,accepted:!0,raw_out_of_range_count:0})),sequence:null,method:"Illustrative demo; no measurement",model_version:{base_sha256:"demo-not-measured"},evidence:{insufficient:!1,label:"Demo",reason:"Illustrative data only",threshold:null,method:"demo"}}}function rr(){let e=new Date(Date.now()-3600000).toISOString(),t={targets:tt.slice(0,2).map((r)=>({model:r.id})),api:"auto",effort:"",serviceTier:"default",strict:!1,targetParallel:1,sampleParallel:3,deadlineSeconds:300};return{id:"demo-example",createdAt:e,finishedAt:e,state:"completed",config:t,challenges:Ce(),bank:{builtAt:"Demo reference data",sdk:"0.2.0"},demo:!0,results:t.targets.map((r,a)=>({id:`demo-${a}`,target:r,api:a?"responses":"messages",state:"completed",samples:[0,1,2].map(()=>({state:"complete",text:"137, 42, 291, 65, 188",raw_text:"137, 42, 291, 65, 188 (illustrative excerpt)",count:300,expected_count:300,first_byte_ms:650,response_model:r.model.split("/")[1],response_id:"demo",error:null})),provenance:[0,1,2].map((n)=>({session:`demo-${n}`,requestedModel:r.model,provider:r.model.split("/")[0],model:r.model})),analysis:rt(r.model),error:null}))}}var da=(e)=>e instanceof Error?e.message:String(e),F=(e,t=200,r={})=>Response.json(e,{status:t,headers:r}),ar=(e,t)=>e.length===t.length&&na(Buffer.from(e),Buffer.from(t)),or=(e)=>!["queued","running"].includes(e.state),ot=()=>crypto.randomUUID();async function sr(e={}){let t=he(e),r=new Ke(t.gateway,t.apiKey),a=new Ye(ie(t.dataDir,t.demo?"demo-jobs":"jobs")),n=nt(32).toString("hex"),s=new Map,o=new Map,c=new Map,l,i="",m,u=[],p=[],f="",v=!1,w=!1,h,x=(d)=>{for(let _ of c.get(d.id)||[])_(d)},I=async(d)=>{x(d),await a.save(d)};async function C(d=!1){if(t.demo)return;if(l&&!d)return l;if(m)return m;return m=(async()=>{try{await aa(t.dataDir,{recursive:!0,mode:448});let _=ie(t.dataDir,d&&(!t.bankSource||/^https?:\/\//i.test(t.bankSource))?`reference-refresh-${ot()}.bin`:"reference.bin");try{let y=await Ft({...t.bankSource?{source:t.bankSource}:{},cache:_,ttl:1/0});if(d&&_!==ie(t.dataDir,"reference.bin"))await oa(_,ie(t.dataDir,"reference.bin"));l=y;try{let g=await nr(ie(t.dataDir,"reference.bin"));h=JSON.parse(g.subarray(4,4+g.readUInt32LE(0)).toString()).models?.length}catch{}}finally{if(d&&_!==ie(t.dataDir,"reference.bin"))await sa(_).catch(()=>{})}return i="",l}catch(_){i=r.redact(_);return}finally{m=void 0}})(),m}function R(){return t.demo?{builtAt:"Demo reference data",modelCount:64}:l?{builtAt:l.builtAt,modelCount:h}:null}async function P(){if(t.demo||l)return{state:"ready"};let _=t.bankSource&&!/^https?:\/\//i.test(t.bankSource)?ie(t.bankSource,"unified_bank.json"):ie(t.dataDir,"reference.bin");return{state:await ia(_).then(()=>!0,()=>!1)?"cached":"missing"}}async function E(){if(t.demo)return u=tt,p=[],{models:u,accounts:p};try{let d=await r.catalog();return u=d.models,p=d.accounts,f="",d}catch(d){return f=r.redact(d),{models:[],accounts:[]}}}let A=Bun.serve({hostname:"127.0.0.1",port:0,idleTimeout:0,async fetch(d){let _=new URL(d.url);if(d.headers.get("host")!==_.host||_.hostname!=="127.0.0.1")return new Response("Forbidden",{status:403});let y=_.pathname.match(/^\/sample\/([\w-]+)\/v1\/(responses|chat\/completions|messages)$/),g=y?o.get(y[1]):void 0;if(!g||d.method!=="POST"||g.used||g.controller.signal.aborted)return new Response("Unknown sample",{status:404});let S=d.headers.get("authorization")?.replace(/^Bearer /,"")||d.headers.get("x-api-key")||"";if(!ar(S,g.secret))return new Response("Unauthorized",{status:401});g.used=!0;let{job:T,result:O,index:M,controller:X}=g,L={session:`fp-${ot()}`,requestedModel:O.target.model};O.provenance[M]=L;let Y,ee=()=>Y??=(async()=>{try{await r.route(L),x(T)}finally{g.finish()}})();try{let re=await ae(d,16384);if(re.length>16384)throw Error("Sample request too large.");if(JSON.parse(re).model!==O.target.model)throw Error("Sample model does not match its job.");let z={responses:"responses",chat_completions:"chat/completions",messages:"messages"}[O.api];if(y[2]!==z)throw Error("Sample protocol does not match its job.");let D=Date.now(),U=r.headers({"X-Magpie-Session":L.session,...O.target.account?{"X-Magpie-Account":Ht(O.target.account)}:{}});for(let ne of["anthropic-version","anthropic-beta","accept"]){let Z=d.headers.get(ne);if(Z)U[ne]=Z}let N=await fetch(`${r.url}/v1/${z}`,{method:"POST",headers:U,body:re,signal:X.signal,redirect:"error",timeout:!1});if(L.provider=N.headers.get("X-Magpie-Provider")||void 0,L.model=N.headers.get("X-Magpie-Model")||void 0,L.mismatch=!!(L.model&&L.model!==O.target.model||L.provider&&L.provider!==O.target.model.split("/")[0]),!N.ok||!N.body)return await N.body?.cancel(),await ee(),F({error:{message:`Magpie returned HTTP ${N.status}. Inspect Magpie's request log for details.`}},N.ok?502:N.status);let H=!1,V="",W="",ce=0,le=(O.api==="chat_completions"&&N.headers.get("content-type")?.includes("text/event-stream")?Kt(N.body,()=>{L.streamNormalization="chat-done-after-stop"}):N.body).getReader(),fe=0,lr=new TextDecoder,ur=(ne)=>{let Z=O.samples[M];if(!Z)return;if(ce+=ne.byteLength,ce>2097152)throw Error("Sample exceeded the 2 MiB response limit.");Z.state="streaming",Z.first_byte_ms??=Date.now()-D,W+=lr.decode(ne,{stream:!0});let Re;while((Re=W.indexOf(` +`))>=0){let it=W.slice(0,Re).trim();if(W=W.slice(Re+1),!it.startsWith("data:"))continue;try{let ye=JSON.parse(it.slice(5)),ct=ye.choices?.[0]?.delta?.content??(ye.type==="response.output_text.delta"?ye.delta:void 0)??(ye.type==="content_block_delta"?ye.delta?.text:void 0);if(typeof ct==="string")V+=ct}catch{}}if(V.length>1e5||W.length>1e5)throw Error("Sample text exceeded the response limit.");if(Z.raw_text=V,Z.count=Gt(V).length,Date.now()-fe>150)fe=Date.now(),x(T)},dr=new ReadableStream({async pull(ne){try{let Z=await le.read();if(Z.done)H=!0,await ee(),ne.close();else ur(Z.value),ne.enqueue(Z.value)}catch(Z){if(await le.cancel().catch(()=>{}),!H)H=!0,await ee();ne.error(Z)}},async cancel(){if(!H)H=!0,await le.cancel().catch(()=>{}),await ee()}});return new Response(dr,{headers:{"content-type":N.headers.get("content-type")||"text/event-stream","cache-control":"no-store"}})}catch(re){return await ee(),F({error:{message:X.signal.aborted?"Detection cancelled or deadline exceeded.":r.redact(re)}},502)}}});async function q(d,_){let y=new AbortController;s.set(d.id,y);let g=setTimeout(()=>y.abort(Error("Job deadline exceeded")),d.config.deadlineSeconds*1000);try{if(t.demo){d.demo=!0,d.state="running",await I(d);for(let S of d.results){S.state="running";for(let T=0;T<3;T++){if(y.signal.aborted)break;S.samples[T]={state:"streaming",text:"",raw_text:"",count:0,expected_count:d.challenges[T].expected_count,first_byte_ms:650,response_model:S.target.model.split("/")[1],response_id:"demo",error:null},x(d),await Bun.sleep(350),S.samples[T]={...S.samples[T],state:"complete",text:"137, 42, 291, 65, 188",raw_text:"137, 42, 291, 65, 188 (illustrative excerpt)",count:d.challenges[T].expected_count},S.provenance[T]={session:`demo-${T}`,requestedModel:S.target.model,model:S.target.model,provider:S.target.model.split("/")[0]},x(d)}if(S.state=y.signal.aborted?"cancelled":"completed",S.analysis=y.signal.aborted?null:rt(S.target.model),await I(d),y.signal.aborted)break}d.state=y.signal.aborted?"cancelled":"completed",d.finishedAt=new Date().toISOString()}else{if(!_)throw Error(i||"Reference data is not loaded.");await tr(d,{detector:_,signal:y.signal,sampleEndpoint:(S,T)=>{let O=ot(),M,X=new Promise((Y)=>{M=Y}),L={job:d,result:S,index:T,secret:nt(32).toString("hex"),controller:y,used:!1,done:X,finish:M};return o.set(O,L),{baseUrl:`http://127.0.0.1:${A.port}/sample/${O}/v1`,apiKey:L.secret}},afterSample:async(S,T)=>{let O=[...o.values()].find((M)=>M.job===d&&M.result===S&&M.index===T);if(O?.used)await Promise.race([O.done,Bun.sleep(3500)])},onUpdate:()=>I(d)})}}catch(S){d.state=y.signal.aborted?"cancelled":"failed",d.error=r.redact(S),d.finishedAt=new Date().toISOString()}finally{if(clearTimeout(g),s.delete(d.id),y.signal.aborted&&!d.error)d.error=da(y.signal.reason||"Cancelled");for(let[S,T]of o)if(T.job===d)T.finish(),o.delete(S);for(let S of d.results)if(S.state==="running"||S.state==="queued")S.state="cancelled",S.analysis=null;await I(d)}}let b=t.uiDir||at(import.meta.dir,import.meta.dir.endsWith("/src")?"../dist/ui":"ui"),k,J=Promise.resolve();try{k=Bun.serve({hostname:"127.0.0.1",port:t.port,idleTimeout:0,async fetch(d){let _=new URL(d.url),y=`127.0.0.1:${k.port}`,g=d.headers.get("host");if(g!==y&&g!==`localhost:${k.port}`)return new Response("Invalid host",{status:403});let S=d.headers.get("origin");if(S&&S!=="null"&&S!==`http://${y}`&&S!==`http://localhost:${k.port}`)return new Response("Invalid origin",{status:403});let T={"access-control-allow-origin":S||"*","access-control-allow-headers":"Authorization, Content-Type","access-control-allow-methods":"GET, POST, DELETE, OPTIONS",vary:"Origin","cache-control":"no-store"};if(d.method==="OPTIONS")return new Response(null,{status:204,headers:T});if(_.pathname==="/_fingerprint/health"&&d.method==="GET")return F(Ne(t),200,T);await J;let O=_.pathname.startsWith("/api/");if(O&&!ar(d.headers.get("authorization")?.replace(/^Bearer /,"")||"",n))return F({error:"Unauthorized"},401,T);try{let M;if(O){let K=_.pathname;if(K==="/api/bootstrap"&&d.method==="GET"){let z=await E();M=F({version:et,demo:t.demo,...z,jobs:a.list(),bank:R(),bankStatus:await P(),gateway:{url:t.gateway,reachable:t.demo||!f,...f?{error:f}:{}},...i?{bankError:i}:{}})}else if(K==="/api/models"&&d.method==="GET")M=F(await E());else if(K==="/api/jobs"&&d.method==="GET")M=F(a.list());else if(K==="/api/jobs"&&d.method==="POST"){if(s.size||w)return F({error:"A detection batch is already running."},409,T);w=!0;try{if(a.jobs.size>=200)return F({error:"History limit reached (200 batches). Export and delete older batches first."},409,T);if(Number(d.headers.get("content-length")||0)>16384)return F({error:"Request too large"},413,T);let z=await ae(d,16384),D=JSON.parse(z);await E();let U=er(D,u,"",p),N=await C();if(!t.demo&&!N)return F({error:i||"Reference data unavailable"},503,T);if(U.bank.builtAt=t.demo?"Demo reference data":N.builtAt,t.demo)U.demo=!0;a.jobs.set(U.id,U),await a.save(U),q(U,N).catch((H)=>{U.state="failed",U.error=`Could not save task history: ${r.redact(H)}`,x(U)}),M=F(U,202)}finally{w=!1}}else if((K==="/api/bank/download"||K==="/api/reload-data")&&d.method==="POST")await C(!0),M=F({bank:R(),bankStatus:await P(),error:i||void 0},i?503:200);else{let z=K.match(/^\/api\/jobs\/([\w-]+)(?:\/(cancel|events|export))?$/),D=z?a.jobs.get(z[1]):void 0;if(!D)return F({error:"Job not found"},404,T);if(z[2]==="cancel"&&d.method==="POST")s.get(D.id)?.abort(Error("Cancelled by user")),M=F(D);else if(z[2]==="export"&&d.method==="GET")M=new Response(JSON.stringify({schema:"magpie-fingerprint/v1",...D},null,2),{headers:{"content-type":"application/json","content-disposition":`attachment; filename="fingerprint-${D.id}.json"`}});else if(z[2]==="events"&&d.method==="GET"){if((c.get(D.id)?.size||0)>=6)return F({error:"Too many event subscribers."},429,T);let U=new TextEncoder,N=()=>{},H=new ReadableStream({start(V){let W=!1,ce,xe=(fe)=>{if(W||(V.desiredSize??0)<=0&&!or(fe))return;try{if(V.enqueue(U.encode(`event: snapshot data: ${JSON.stringify(fe)} -`)),or(fe))H=!0,N(),V.close()}catch{H=!0,N()}},le=c.get(C.id)||new Set;le.add(xe),c.set(C.id,le),N=()=>{if(ce)clearInterval(ce);if(le.delete(xe),!le.size)c.delete(C.id)},ce=setInterval(()=>{if(!H&&(V.desiredSize??0)>0)try{V.enqueue(U.encode(`: heartbeat +`)),or(fe))W=!0,N(),V.close()}catch{W=!0,N()}},le=c.get(D.id)||new Set;le.add(xe),c.set(D.id,le),N=()=>{if(ce)clearInterval(ce);if(le.delete(xe),!le.size)c.delete(D.id)},ce=setInterval(()=>{if(!W&&(V.desiredSize??0)>0)try{V.enqueue(U.encode(`: heartbeat -`))}catch{H=!0,N()}},15000),d.signal.addEventListener("abort",()=>{H=!0,N();try{V.close()}catch{}},{once:!0}),xe(C)},cancel(){N()}});M=new Response(W,{headers:{"content-type":"text/event-stream","x-accel-buffering":"no"}})}else if(!z[2]&&d.method==="GET")M=G(C);else if(!z[2]&&d.method==="DELETE"){if(s.has(C.id))return G({error:"Cancel the running batch before deleting it."},409,T);await a.remove(C.id),M=G({ok:!0})}else M=G({error:"Method not allowed"},405)}for(let[z,C]of Object.entries(T))M.headers.set(z,C);return M}if(d.method!=="GET"&&d.method!=="HEAD")return new Response("Method not allowed",{status:405});if(_.pathname==="/"||_.pathname==="/index.html"){let K=_.searchParams.get("uiOrigin");if(K){let W=new URL(K);if(!["http:","https:"].includes(W.protocol)||W.hostname.includes("*")||W.origin!==K)throw Error("Invalid UI origin.")}let z=[...new Set([`http://${g}`,...K?[K]:[]])].join(" "),C=await nr(ie(b,"index.html"),"utf8").catch(()=>"Build required

Run bun run build to create the Fingerprint interface.

"),U=JSON.stringify({token:n,initialProvider:_.searchParams.get("provider")||"",theme:_.searchParams.get("theme")||"",lang:_.searchParams.get("lang")||""}).replaceAll("<","\\u003c"),N=nt(16).toString("base64");return C=C.replace("",``),new Response(C,{headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","referrer-policy":"no-referrer","x-content-type-options":"nosniff","content-security-policy":`default-src 'self' ${z}; connect-src 'self' ${z}; script-src 'self' ${z} 'nonce-${N}'; style-src 'self' ${z} 'unsafe-inline'; img-src 'self' ${z} data:; object-src 'none'; base-uri 'none'; form-action 'none'`}})}let X=decodeURIComponent(_.pathname),L=at(b,`.${X}`),Y=ia(at(b),L);if(!Y||Y.startsWith("..")||ca(Y)||X.includes(".."))return new Response("Not found",{status:404});let ee=Bun.file(L);if(!await ee.exists())return new Response("Not found",{status:404});return new Response(ee,{headers:{"content-type":{".js":"text/javascript",".css":"text/css",".svg":"image/svg+xml",".png":"image/png",".woff2":"font/woff2"}[la(L)]||"application/octet-stream","access-control-allow-origin":"*","x-content-type-options":"nosniff"}})}catch(M){return G({error:r.redact(M)},M instanceof we?413:400,T)}}})}catch(d){throw E.stop(!0),d}J=(async()=>{if(await a.load(),t.demo&&!a.jobs.size){let d=rr();a.jobs.set(d.id,d)}})();try{await J}catch(d){throw k.stop(!0),E.stop(!0),d}return{port:k.port,demo:t.demo,async close(){if(v)return;v=!0;for(let d of s.values())d.abort(Error("Plugin service stopped"));while(s.size)await Bun.sleep(20);await a.flush(),k.stop(!0),E.stop(!0)}}}async function ir(e={},t=1000){let r=he(e),a=Ne(r),n,s=!1,o,c="",l=async()=>{if(!r.port)return!1;let m;try{m=await fetch(`http://127.0.0.1:${r.port}/_fingerprint/health`,{signal:AbortSignal.timeout(1000),redirect:"error"})}catch{return!1}try{let f=JSON.parse(await ae(m,4096));if(m.ok&&f.app===a.app&&f.protocol===a.protocol&&f.configuration===a.configuration)return!0}catch{}throw Error(`Port ${r.port} belongs to an incompatible Fingerprint service or another application. Use another port, or turn Fingerprint off and on after upgrading.`)},i=async()=>{if(s||n||await l())return;try{n=await sr(r)}catch(m){if(m.code==="EADDRINUSE"&&await l())return;throw m}if(s)await n.close(),n=void 0},p=()=>o??=i().finally(()=>{o=void 0});await p();let u=setInterval(()=>{p().then(()=>{c=""}).catch((m)=>{let f=m instanceof Error?m.message:String(m);if(f!==c)console.warn(`Fingerprint service recovery: ${f}`);c=f})},t);return u.unref(),{get port(){return n?.port??r.port},get role(){return n?"owner":"attached"},async close(){if(s)return;s=!0,clearInterval(u),await o,await n?.close(),n=void 0}}}var st,oo={id:"magpie-fingerprint",server:async(e,t={})=>(st??=ir(t).catch((r)=>{throw st=void 0,r}),await st,{})};export{oo as default}; +`))}catch{W=!0,N()}},15000),d.signal.addEventListener("abort",()=>{W=!0,N();try{V.close()}catch{}},{once:!0}),xe(D)},cancel(){N()}});M=new Response(H,{headers:{"content-type":"text/event-stream","x-accel-buffering":"no"}})}else if(!z[2]&&d.method==="GET")M=F(D);else if(!z[2]&&d.method==="DELETE"){if(s.has(D.id))return F({error:"Cancel the running batch before deleting it."},409,T);await a.remove(D.id),M=F({ok:!0})}else M=F({error:"Method not allowed"},405)}for(let[z,D]of Object.entries(T))M.headers.set(z,D);return M}if(d.method!=="GET"&&d.method!=="HEAD")return new Response("Method not allowed",{status:405});if(_.pathname==="/"||_.pathname==="/index.html"){let K=_.searchParams.get("uiOrigin");if(K){let H=new URL(K);if(!["http:","https:"].includes(H.protocol)||H.hostname.includes("*")||H.origin!==K)throw Error("Invalid UI origin.")}let z=[...new Set([`http://${g}`,...K?[K]:[]])].join(" "),D=await nr(ie(b,"index.html"),"utf8").catch(()=>"Build required

Run bun run build to create the Fingerprint interface.

"),U=JSON.stringify({token:n,initialProvider:_.searchParams.get("provider")||"",theme:_.searchParams.get("theme")||"",lang:_.searchParams.get("lang")||""}).replaceAll("<","\\u003c"),N=nt(16).toString("base64");return D=D.replace("",``),new Response(D,{headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","referrer-policy":"no-referrer","x-content-type-options":"nosniff","content-security-policy":`default-src 'self' ${z}; connect-src 'self' ${z}; script-src 'self' ${z} 'nonce-${N}'; style-src 'self' ${z} 'unsafe-inline'; img-src 'self' ${z} data:; object-src 'none'; base-uri 'none'; form-action 'none'`}})}let X=decodeURIComponent(_.pathname),L=at(b,`.${X}`),Y=ca(at(b),L);if(!Y||Y.startsWith("..")||la(Y)||X.includes(".."))return new Response("Not found",{status:404});let ee=Bun.file(L);if(!await ee.exists())return new Response("Not found",{status:404});return new Response(ee,{headers:{"content-type":{".js":"text/javascript",".css":"text/css",".svg":"image/svg+xml",".png":"image/png",".woff2":"font/woff2"}[ua(L)]||"application/octet-stream","access-control-allow-origin":"*","x-content-type-options":"nosniff"}})}catch(M){return F({error:r.redact(M)},M instanceof we?413:400,T)}}})}catch(d){throw A.stop(!0),d}J=(async()=>{if(await a.load(),t.demo&&!a.jobs.size){let d=rr();a.jobs.set(d.id,d)}})();try{await J}catch(d){throw k.stop(!0),A.stop(!0),d}return{port:k.port,demo:t.demo,async close(){if(v)return;v=!0;for(let d of s.values())d.abort(Error("Plugin service stopped"));while(s.size)await Bun.sleep(20);await a.flush(),k.stop(!0),A.stop(!0)}}}function ir(e,t){let r=e;if(r.code==="EADDRINUSE")return Error(`Cannot bind Fingerprint service to port ${t}: the port is already in use. Configure a different page service port.`);if(r.code==="EACCES"||r.code==="EPERM")return Error(`Cannot bind Fingerprint service to port ${t}: the operating system denied access. On Windows, this port may be reserved or excluded; choose another available page service port and check \`netsh interface ipv4 show excludedportrange protocol=tcp\`.`);return e instanceof Error?e:Error(String(e))}async function cr(e={},t=1000){let r=he(e),a=Ne(r),n,s=!1,o,c="",l=async()=>{if(!r.port)return!1;let p;try{p=await fetch(`http://127.0.0.1:${r.port}/_fingerprint/health`,{signal:AbortSignal.timeout(1000),redirect:"error"})}catch{return!1}try{let f=JSON.parse(await ae(p,4096));if(p.ok&&f.app===a.app&&f.protocol===a.protocol&&f.configuration===a.configuration)return!0}catch{}throw Error(`Port ${r.port} belongs to an incompatible Fingerprint service or another application. Use another port, or turn Fingerprint off and on after upgrading.`)},i=async()=>{if(s||n||await l())return;try{n=await sr(r)}catch(p){if(p.code==="EADDRINUSE"){if(await l())return;throw ir(p,r.port)}if(["EACCES","EPERM"].includes(p.code||""))throw ir(p,r.port);throw p}if(s)await n.close(),n=void 0},m=()=>o??=i().finally(()=>{o=void 0});await m();let u=setInterval(()=>{m().then(()=>{c=""}).catch((p)=>{let f=p instanceof Error?p.message:String(p);if(f!==c)console.warn(`Fingerprint service recovery: ${f}`);c=f})},t);return u.unref(),{get port(){return n?.port??r.port},get role(){return n?"owner":"attached"},async close(){if(s)return;s=!0,clearInterval(u),await o,await n?.close(),n=void 0}}}var st,so={id:"magpie-fingerprint",server:async(e,t={})=>(st??=cr(t).catch((r)=>{throw st=void 0,r}),await st,{})};export{so as default}; diff --git a/packages/fingerprint/integration.md b/packages/fingerprint/integration.md index 4de7e3ab..da2e698f 100644 --- a/packages/fingerprint/integration.md +++ b/packages/fingerprint/integration.md @@ -3,7 +3,7 @@ ## Plugin contract The package is a Magpie page plugin. Its manifest declares `page.file` as -`page/index.html`, a local service on port `3488` (configurable through the +`page/index.html`, a local service on port `4388` (configurable through the `port` option), and one provider-menu action named `fingerprint`. Magpie sends the action as `{ id, provider: { id, name } }` to the page frame. The page boot document captures this event before navigating to the service, so the selected @@ -21,13 +21,17 @@ WebKitGTK, magpie's Linux window, matches nothing to it there, so a policy of `'self'` alone loads no script and the page stays blank. The launcher origin changes only the document policy; the API bearer token and Host/Origin checks still apply. -On Windows, port 3488 can be in an excluded TCP range. Check +On Windows, a TCP port can be in an excluded range. Check `netsh interface ipv4 show excludedportrange protocol=tcp` and the Magpie -plugin host log if the service cannot bind; configure the plugin's `port` -option to an available port, such as 4388. If the launcher remains on -"Connecting" after its handshake, it shows the local service address for -opening in a browser. Magpie's "page didn't answer" message instead means the -page did not complete the initial host handshake; inspect the host log and +plugin host log if the service cannot bind. `EADDRINUSE` means another process +already owns the port; `EACCES` or `EPERM` can indicate that Windows reserved +or excluded it. Configure the plugin's `port` option to an available port. +If the launcher remains on "Connecting" after its handshake, the page shows +the local service address and a copy action after four seconds. Magpie's +plugin iframe currently has no popup or top-level navigation permission, so +opening the system browser requires an upstream native bridge. Magpie's "page +didn't answer" message instead means the page did not complete the initial +host handshake; inspect the host log and page loading errors to identify its cause. ## UI integration diff --git a/packages/fingerprint/package.json b/packages/fingerprint/package.json index e9769d1b..f96268e5 100644 --- a/packages/fingerprint/package.json +++ b/packages/fingerprint/package.json @@ -40,7 +40,7 @@ "file": "page/index.html", "icon": "page/icon.svg", "service": { - "port": 3488, + "port": 4388, "option": "port" } }, @@ -58,7 +58,7 @@ } ], "options": { - "port": 3488 + "port": 4388 }, "permissions": [] }, diff --git a/packages/fingerprint/page/boot.js b/packages/fingerprint/page/boot.js index 1e4ed656..f9bb429a 100644 --- a/packages/fingerprint/page/boot.js +++ b/packages/fingerprint/page/boot.js @@ -8,6 +8,9 @@ invalidPort: 'Invalid Fingerprint service port.', failed: 'Could not connect', fallback: 'If the page does not open, copy this address into a browser on this computer:', + copyAddress: 'Copy address', + copied: 'Address copied.', + copyFallback: 'Address selected. Copy it and open it in a browser on this computer.', }, 'zh-Hans': { title: '模型指纹', @@ -16,6 +19,9 @@ invalidPort: '模型指纹服务端口无效。', failed: '连接失败', fallback: '如果页面未打开,请将此地址复制到本机浏览器:', + copyAddress: '复制地址', + copied: '地址已复制。', + copyFallback: '已选中地址,请复制后在本机浏览器中打开。', }, 'zh-Hant': { title: '模型指紋', @@ -24,6 +30,9 @@ invalidPort: '模型指紋服務連接埠無效。', failed: '連線失敗', fallback: '如果頁面未開啟,請將此網址複製到本機瀏覽器:', + copyAddress: '複製網址', + copied: '網址已複製。', + copyFallback: '已選取網址,請複製後在本機瀏覽器中開啟。', }, ja: { title: 'モデル指紋', @@ -34,6 +43,9 @@ failed: '接続できませんでした', fallback: 'ページが開かない場合は、このアドレスをこのコンピューターのブラウザーにコピーしてください:', + copyAddress: 'アドレスをコピー', + copied: 'アドレスをコピーしました。', + copyFallback: 'アドレスを選択しました。このコンピューターのブラウザーに貼り付けてください。', }, de: { title: 'Modell-Fingerabdruck', @@ -44,6 +56,9 @@ failed: 'Verbindung fehlgeschlagen', fallback: 'Falls sich die Seite nicht öffnet, diese Adresse im Browser auf diesem Computer öffnen:', + copyAddress: 'Adresse kopieren', + copied: 'Adresse kopiert.', + copyFallback: 'Adresse ausgewählt. Kopieren und im Browser auf diesem Computer öffnen.', }, }; let text = messages.en; @@ -71,7 +86,7 @@ followLanguage(theme); window.magpie?.onTheme?.(followLanguage); const config = (await window.magpie?.options?.get?.()) || {}; - const port = Number(config.port ?? 3488); + const port = Number(config.port ?? 4388); if (!Number.isInteger(port) || port < 1 || port > 65535) throw new Error(text.invalidPort); let service = window.magpie?.service; let localFallback = ''; @@ -114,7 +129,20 @@ status.textContent = text.fallback; const field = document.getElementById('service-url'); field.value = localFallback; - field.onclick = () => field.select(); + const copy = document.getElementById('copy-service-url'); + copy.textContent = text.copyAddress; + copy.onclick = async () => { + try { + const clipboard = window.navigator?.clipboard; + if (!clipboard?.writeText) throw new Error('Clipboard unavailable'); + await clipboard.writeText(localFallback); + status.textContent = text.copied; + } catch { + field.focus(); + field.select(); + status.textContent = text.copyFallback; + } + }; document.getElementById('fallback').hidden = false; }, 4000); } diff --git a/packages/fingerprint/page/index.html b/packages/fingerprint/page/index.html index 390be128..cbd80b02 100644 --- a/packages/fingerprint/page/index.html +++ b/packages/fingerprint/page/index.html @@ -33,14 +33,19 @@ width: 100%; padding: 6px; } + button { + margin-top: 8px; + padding: 6px 10px; + }
Fingerprint -

Connecting to Fingerprint…

+

Connecting to Fingerprint…

diff --git a/packages/fingerprint/src/cli.ts b/packages/fingerprint/src/cli.ts index 1ed8ca56..3093c7a4 100644 --- a/packages/fingerprint/src/cli.ts +++ b/packages/fingerprint/src/cli.ts @@ -2,7 +2,7 @@ import { startServer } from './server'; const argv = process.argv.slice(2); if (argv.includes('--help')) { console.log( - 'Magpie Fingerprint\n bun start [--demo] [--port 3488]\nEnvironment: MAGPIE_FINGERPRINT_GATEWAY, MAGPIE_FINGERPRINT_API_KEY, MAGPIE_FINGERPRINT_DATA_DIR, MAGPIE_FINGERPRINT_BANK_SOURCE', + 'Magpie Fingerprint\n bun start [--demo] [--port 4388]\nEnvironment: MAGPIE_FINGERPRINT_GATEWAY, MAGPIE_FINGERPRINT_API_KEY, MAGPIE_FINGERPRINT_DATA_DIR, MAGPIE_FINGERPRINT_BANK_SOURCE', ); process.exit(0); } diff --git a/packages/fingerprint/src/config.ts b/packages/fingerprint/src/config.ts index 9aac37b4..237c1015 100644 --- a/packages/fingerprint/src/config.ts +++ b/packages/fingerprint/src/config.ts @@ -30,7 +30,7 @@ export function options( throw new Error( 'Gateway must be an HTTP(S) origin without credentials, path, query or fragment.', ); - const port = input.port ?? Number(process.env.MAGPIE_FINGERPRINT_PORT || 3488); + const port = input.port ?? Number(process.env.MAGPIE_FINGERPRINT_PORT || 4388); if (!Number.isInteger(port) || port < 0 || port > 65535) throw new Error('Invalid service port.'); return { port, diff --git a/packages/fingerprint/src/managed-service.ts b/packages/fingerprint/src/managed-service.ts index e5deaef3..9ab97a7e 100644 --- a/packages/fingerprint/src/managed-service.ts +++ b/packages/fingerprint/src/managed-service.ts @@ -3,6 +3,19 @@ import { boundedText } from './http'; import { startServer } from './server'; import { serviceIdentity } from './service-identity'; +export function serviceBindError(error: unknown, port: number) { + const cause = error as NodeJS.ErrnoException; + if (cause.code === 'EADDRINUSE') + return new Error( + `Cannot bind Fingerprint service to port ${port}: the port is already in use. Configure a different page service port.`, + ); + if (cause.code === 'EACCES' || cause.code === 'EPERM') + return new Error( + `Cannot bind Fingerprint service to port ${port}: the operating system denied access. On Windows, this port may be reserved or excluded; choose another available page service port and check \`netsh interface ipv4 show excludedportrange protocol=tcp\`.`, + ); + return error instanceof Error ? error : new Error(String(error)); +} + /** Hosts with identical settings share one listener. An attached host takes over * when its owner exits; no detached daemon survives the Magpie hosts. */ export async function startManagedService(input: Options = {}, pollMs = 1000) { @@ -45,7 +58,12 @@ export async function startManagedService(input: Options = {}, pollMs = 1000) { owned = await startServer(opt); } catch (error) { // Another host may have won between discovery and bind. - if ((error as NodeJS.ErrnoException).code === 'EADDRINUSE' && (await probe())) return; + if ((error as NodeJS.ErrnoException).code === 'EADDRINUSE') { + if (await probe()) return; + throw serviceBindError(error, opt.port); + } + if (['EACCES', 'EPERM'].includes((error as NodeJS.ErrnoException).code || '')) + throw serviceBindError(error, opt.port); throw error; } if (closed) { diff --git a/packages/fingerprint/tests/boot.test.ts b/packages/fingerprint/tests/boot.test.ts index d82175e4..56819a3d 100644 --- a/packages/fingerprint/tests/boot.test.ts +++ b/packages/fingerprint/tests/boot.test.ts @@ -3,12 +3,19 @@ import { readFile } from 'node:fs/promises'; import { runInNewContext } from 'node:vm'; const source = await readFile(new URL('../page/boot.js', import.meta.url), 'utf8'); -async function boot(lang?: string, remote = false, port = 3488, desktopHost = '') { +async function boot( + lang?: string, + remote = false, + port = 4388, + desktopHost = '', + clipboard?: { writeText: (value: string) => Promise }, +) { const elements = { status: { textContent: 'Connecting to Fingerprint…' }, title: { textContent: 'Fingerprint' }, fallback: { hidden: true }, - 'service-url': { value: '', onclick: () => {}, select: () => {} }, + 'service-url': { value: '', focus: () => {}, select: () => {} }, + 'copy-service-url': { textContent: '', onclick: async () => {} }, }; const document = { title: 'Fingerprint', @@ -18,7 +25,7 @@ async function boot(lang?: string, remote = false, port = 3488, desktopHost = '' let destination: URL | undefined; let fallback: (() => void) | undefined; // magpie hands no service to its desktop window, only to magpie web - const service = remote || desktopHost ? '' : 'http://127.0.0.1:3488/'; + const service = remote || desktopHost ? '' : `http://127.0.0.1:${port}/`; await runInNewContext(source, { URL, setTimeout: (callback: () => void) => { @@ -26,6 +33,7 @@ async function boot(lang?: string, remote = false, port = 3488, desktopHost = '' }, document, window: { + navigator: clipboard ? { clipboard } : undefined, magpie: { ready: Promise.resolve({ dark: true, ...(lang ? { lang } : {}) }), service, @@ -61,7 +69,7 @@ test('boot defaults to English and follows host languages before navigation', as expect(result.document.documentElement.lang).toBe(htmlLang!); expect(result.elements.status.textContent).toContain(status!); expect(result.destination?.searchParams.get('provider')).toBe('vendor'); - expect(result.destination?.searchParams.get('uiOrigin')).toBe('http://127.0.0.1:3488'); + expect(result.destination?.searchParams.get('uiOrigin')).toBe('http://127.0.0.1:4388'); expect(result.destination?.searchParams.get('lang')).toBe(lang || null); } }); @@ -73,6 +81,16 @@ test('a stalled desktop navigation offers the local service address', async () = expect(result.elements.fallback.hidden).toBe(false); expect(result.elements['service-url'].value).toBe('http://127.0.0.1:4388/'); expect(result.elements.status.textContent).toContain('本机浏览器'); + const copied: string[] = []; + const withClipboard = await boot('en', false, 4388, 'wails.localhost', { + writeText: async (value) => void copied.push(value), + }); + withClipboard.fallback?.(); + await withClipboard.elements['copy-service-url'].onclick(); + expect(copied).toEqual(['http://127.0.0.1:4388/']); + expect(withClipboard.elements.status.textContent).toBe('Address copied.'); + await result.elements['copy-service-url'].onclick(); + expect(result.elements.status.textContent).toContain('已选中地址'); const remote = await boot('en'); expect(remote.fallback).toBeUndefined(); }); @@ -90,9 +108,9 @@ test("boot goes to the local service from magpie's desktop window on every syste // Wails v3: wails://localhost on macOS and Linux, http://wails.localhost // on Windows (WebView2), where the page said "upgrade Magpie" instead for (const host of ['localhost', 'wails.localhost', '[::1]', '127.0.0.1']) { - const result = await boot('zh-CN', false, 3490, host); - expect(result.destination?.origin).toBe('http://127.0.0.1:3490'); - expect(result.destination?.searchParams.get('uiOrigin')).toBe('http://127.0.0.1:3490'); + const result = await boot('zh-CN', false, 4390, host); + expect(result.destination?.origin).toBe('http://127.0.0.1:4390'); + expect(result.destination?.searchParams.get('uiOrigin')).toBe('http://127.0.0.1:4390'); expect(result.elements.status.textContent).not.toContain('升级'); } }); diff --git a/packages/fingerprint/tests/managed-service.test.ts b/packages/fingerprint/tests/managed-service.test.ts index ded5924e..113be6c7 100644 --- a/packages/fingerprint/tests/managed-service.test.ts +++ b/packages/fingerprint/tests/managed-service.test.ts @@ -3,7 +3,7 @@ import { createHash } from 'node:crypto'; import { mkdtemp, mkdir, writeFile, readFile, rm } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; -import { startManagedService } from '../src/managed-service'; +import { serviceBindError, startManagedService } from '../src/managed-service'; const waitFor = async (check: () => boolean) => { for (let i = 0; i < 100; i++) { @@ -13,6 +13,16 @@ const waitFor = async (check: () => boolean) => { throw new Error('Timed out waiting for host takeover'); }; +test('bind diagnostics distinguish port conflicts from Windows port exclusions', () => { + const inUse = Object.assign(new Error('bind failed'), { code: 'EADDRINUSE' }); + const denied = Object.assign(new Error('bind failed'), { code: 'EACCES' }); + expect(serviceBindError(inUse, 3488).message).toContain('port 3488: the port is already in use'); + expect(serviceBindError(denied, 3488).message).toContain('reserved or excluded'); + expect(serviceBindError(denied, 3488).message).toContain( + 'netsh interface ipv4 show excludedportrange protocol=tcp', + ); +}); + test('two hosts share one compatible service and the survivor takes over', async () => { const dir = await mkdtemp(join(tmpdir(), 'fingerprint-hosts-')); const opts = { demo: true, dataDir: dir, uiDir: join(dir, 'ui') };