SPB Git

spb/autoscholar

Public

Visual redesign: design system (Newsreader/Geist, oxide+cobalt tokens, dark theme), compact header with drawer, new homepage, library with facet sidebar and filter sheet, paper page with pdf.js reader, KaTeX, provenance and citation panels, recomposed supporting pages, responsive admin; before/after screenshots, e2e green, Lighthouse measured

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Oct 30, 2026) parent 87b4e55 Browse files

272 changed files +4,509 −1,344

272 changed files
Unified Split
modified apps/web/UI-NOTES.md +5 −31
@@ -1,33 +1,7 @@
1 # UI notes — needs outside the UI scope (for the control-plane owner) 1 # UI notes — needs outside the UI scope (for the control-plane owner)
2 2
3−## BLOCKER — `packages/core/src/papers.ts` related-papers query 3+- Lighthouse mobile LCP sits at ~3.2–3.4 s (desktop 0.7 s) under Lighthouse's simulated slow 4G: the serif web font (Newsreader, 58 KB regular + 64 KB italic even as static instances) delays the final text paint. Options if a lower simulated-mobile LCP is required: subset Newsreader with `unicode-range` / a smaller display serif, or serve `font-display: optional` for the serif (costs the serif on first slow-network visits).
4− 4+- SEO category < 70 locally only because `STAGING_MODE=1` sets `noindex` (`is-crawlable` audit); production is indexable.
5−`getPaperBySlug` builds `sql\`${paperVersions.keywords} && ${row.v.keywords}\``. Drizzle expands the JS array as a tuple 5+- `loading.tsx` boundaries were removed from `/research` and `/research/[slug]`: with a streaming loading shell Next.js answers `200` before `notFound()` runs, so unknown papers returned 200 (e2e caught it). If skeletons are wanted again, wrap the slow part in `<Suspense>` inside the page instead of a route-level loading file.
6−(`&& ($4,$5,$6)`), so PostgreSQL rejects the query and **every paper page returns 500/404** (`/research/[slug]`and`/api/public/papers/[slug]`). Verified fix (one line, import `arrayOverlaps`from`drizzle-orm`): 6+- The pdf.js worker is copied to `apps/web/public/pdf.worker.min.mjs` (same-origin, CSP-safe). Keep it in sync when `pdfjs-dist` is bumped (`cp node_modules/pdfjs-dist/build/pdf.worker.min.mjs public/`).
7− 7+- The admin password used by the e2e suite (`Rotated-Passphrase-2026!x`) is the rotated local one; `tests/e2e/shots.mjs` takes `ADMIN_PASSWORD` for admin screenshots.
8−```ts
9−or(eq(papers.discipline, row.p.discipline), arrayOverlaps(paperVersions.keywords, row.v.keywords));
10−```
11−
12−The e2e suite was run with this fix applied temporarily (25/25 pass); the original file was restored afterwards and
13−`packages/core` rebuilt from it, so the paper page is broken again until the fix lands.
14−
15−## Tooling
16−
17−- `biome.json`: add `"css": { "parser": { "tailwindDirectives": true } }` so `apps/web/src/app/globals.css` (`@import "tailwindcss"`, `@theme`, `@apply`, `@custom-variant`) parses; today `pnpm lint` reports parse errors there. Also `biome migrate` (schema 2.4.0 vs CLI 2.6.4; `recommended` deprecated).
18−- pnpm 11 "deps status check" aborted `pnpm start` / `pnpm exec playwright` after dependencies changed (`ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY` → it tried `pnpm install --production`). Workaround used: run binaries directly (`apps/web/node_modules/.bin/next`, `node_modules/.bin/playwright`). Consider `verify-deps-before-run=false` in `.npmrc` for non-interactive hosts (pm2).
19−- `next start` warns that `output: "standalone"` expects `node .next/standalone/server.js` (copy `.next/static` and `public` into the standalone dir on deploy). It still serves correctly; the pm2 manifest should pick one of the two.
20−- Rebuilding `.next` while a `next start` process is still serving leaves it with a stale client manifest ("Could not find the module …link.js in the React Client Manifest" → 500 on every page with `next/link`). Always stop the server before `next build` (or build to a fresh dir and swap).
21−- `packages/db/package.json`: added `pdf-lib` (used only by `src/seed.ts` to generate the staging PDF).
22−
23−## Server helpers / API observations (not changed)
24−
25−- `clientIp()` returns `null` when `TRUST_PROXY=0` and no proxy header is present (Next does not expose the socket address), so locally all visitors share the limiter keys `"unknown"`/`"public"`, and for `/api/internal/*` the CIDR allow-list is skipped (only the bearer token protects it). In production the worker reaches the control plane directly on the LAN (no proxy headers) → same situation. If a LAN-only guard is wanted, bind the internal API to a separate port/listener or set the socket address via a custom server.
26−- Internal worker routes answer **403** (`viaPublicProxy`) to Playwright's request context because it sends `x-forwarded-*`-free requests… actually they return 403 for any request whose headers include forwarded hints; the e2e asserts 401 _or_ 403 for those routes.
27−- The in-memory login limiter (10 logins / 15 min per username) is easy to hit while developing/testing; the e2e suite reuses one signed-in storage state to stay below it. A restart of the web process resets it.
28−- `listEvents()` returns `Date` objects; `redact()` turns a `Date` into `{}` (it walks it as a plain object). The run page converts dates before redacting; the `/api/admin/runs/[id]/events` route passes rows straight through `redact()` → `at` becomes `{}` in the JSON. Suggest `redact()` to pass `Date`/`Buffer` instances through unchanged, or serialise before redacting in that route.
29−- Public artifact route sets `accept-ranges: none`; the browser PDF viewer works but cannot seek by byte range on large PDFs.
30−
31−## Seed
32−
33−`pnpm db:seed` → `seedTopicsAndSeries()` always (17 disciplines + 10 subfields + series `as-wp`), `seedStagingPaper()` only with `STAGING_MODE=1` (one synthetic paper `AS-WP-2026-0000`, `papers.synthetic=true`, 6-page PDF written under `ARTIFACT_ROOT/public/AS-WP-2026-0000/v1/manuscript/main.pdf` with a `.sha256` sidecar). Production (`STAGING_MODE=0`) never lists, serves or indexes it. Remove it before launch with `delete from papers where public_id='AS-WP-2026-0000'` (cascades) + delete the public object.
modified apps/web/package.json +3 −0
@@ -20,8 +20,10 @@
20 "@autoscholar/schemas": "workspace:*", 20 "@autoscholar/schemas": "workspace:*",
21 "@autoscholar/storage": "workspace:*", 21 "@autoscholar/storage": "workspace:*",
22 "drizzle-orm": "^0.45.0", 22 "drizzle-orm": "^0.45.0",
23+ "katex": "^0.16.47",
23 "marked": "^16.0.0", 24 "marked": "^16.0.0",
24 "next": "^16.4.0", 25 "next": "^16.4.0",
26+ "pdfjs-dist": "^6.4.299",
25 "react": "^19.3.0", 27 "react": "^19.3.0",
26 "react-dom": "^19.3.0", 28 "react-dom": "^19.3.0",
27 "sanitize-html": "^2.17.0", 29 "sanitize-html": "^2.17.0",
@@ -29,6 +31,7 @@
29 }, 31 },
30 "devDependencies": { 32 "devDependencies": {
31 "@tailwindcss/postcss": "^4.1.0", 33 "@tailwindcss/postcss": "^4.1.0",
34+ "@types/katex": "^0.16.8",
32 "@types/react": "^19.2.0", 35 "@types/react": "^19.2.0",
33 "@types/react-dom": "^19.2.0", 36 "@types/react-dom": "^19.2.0",
34 "@types/sanitize-html": "^2.16.0", 37 "@types/sanitize-html": "^2.16.0",
added apps/web/public/pdf.worker.min.mjs +28 −0
@@ -0,0 +1,28 @@
1+/**
2+ * @licstart The following is the entire license notice for the
3+ * JavaScript code in this page
4+ *
5+ * Copyright 2024 Mozilla Foundation
6+ *
7+ * Licensed under the Apache License, Version 2.0 (the "License");
8+ * you may not use this file except in compliance with the License.
9+ * You may obtain a copy of the License at
10+ *
11+ * http://www.apache.org/licenses/LICENSE-2.0
12+ *
13+ * Unless required by applicable law or agreed to in writing, software
14+ * distributed under the License is distributed on an "AS IS" BASIS,
15+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+ * See the License for the specific language governing permissions and
17+ * limitations under the License.
18+ * @licend The above is the entire license notice for the
19+ * JavaScript code in this page
20+ */
21+/**
22+ * pdfjsVersion = 6.4.299
23+ * pdfjsBuild = d0991a0d5
24+ */
25+const e=!("object"!=typeof process||process+""!="[object process]"||process.versions.nw||process.versions.electron&&process.type&&"browser"!==process.type),t=[1/0,1/0,-1/0,-1/0],a=new Float32Array(t),n=[.001,0,0,.001,0,0],s=.35/1.35,r="http://www.w3.org/2000/svg",i=1,o=2,l=4,f=8,c=16,h=64,u=128,m=256,p="pdfjs_internal_editor_",d=3,g=9,b=13,w=15,j=101,k={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048},y=1,q=2,v=3,S=0,x=4,C=1,F=2,T=3,R={TEXT:1,LINK:2,FREETEXT:3,LINE:4,SQUARE:5,CIRCLE:6,POLYGON:7,POLYLINE:8,HIGHLIGHT:9,UNDERLINE:10,SQUIGGLY:11,STRIKEOUT:12,STAMP:13,CARET:14,INK:15,POPUP:16,FILEATTACHMENT:17,SOUND:18,MOVIE:19,WIDGET:20,SCREEN:21,PRINTERMARK:22,TRAPNET:23,WATERMARK:24,THREED:25,REDACT:26,RICHMEDIA:27},O="Group",D="R",H=0,M=4,N=1,E=2,_=4,z=16,L=32,U=128,W=512,X=1,K=2,G=4096,V=8192,$=32768,Y=65536,J=131072,Q=1048576,Z=2097152,ee=8388608,te=16777216,ae=1,ne=2,se=3,re=4,ie=5,oe={E:"Mouse Enter",X:"Mouse Exit",D:"Mouse Down",U:"Mouse Up",Fo:"Focus",Bl:"Blur",PO:"PageOpen",PC:"PageClose",PV:"PageVisible",PI:"PageInvisible",K:"Keystroke",F:"Format",V:"Validate",C:"Calculate"},le={WC:"WillClose",WS:"WillSave",DS:"DidSave",WP:"WillPrint",DP:"DidPrint"},fe={O:"PageOpen",C:"PageClose"},ce=1,he=5,ue=1,me=2,pe=3,de=4,ge=5,be=6,we=7,je=8,ke=9,ye=10,qe=11,ve=12,Se=13,Ae=14,xe=15,Ce=16,Ie=17,Fe=18,Te=19,Re=20,Oe=21,Be=22,De=23,He=24,Me=25,Ne=26,Pe=27,Ee=28,_e=29,ze=30,Le=31,Ue=32,We=33,Xe=34,Ke=35,Ge=36,Ve=37,$e=38,Ye=39,Je=40,Qe=41,Ze=42,et=43,tt=44,at=45,nt=46,st=47,rt=48,it=49,ot=50,lt=51,ft=52,ct=53,ht=54,ut=55,mt=56,pt=57,dt=58,gt=59,bt=60,wt=61,jt=62,kt=63,yt=64,qt=65,vt=66,St=67,At=68,xt=69,Ct=70,It=71,Ft=72,Tt=73,Rt=74,Ot=75,Bt=76,Dt=77,Ht=80,Mt=81,Nt=83,Pt=84,Et=85,_t=86,zt=87,Lt=88,Ut=89,Wt=90,Xt=91,Kt=92,Gt=93,Vt=94,$t=0,Yt=1,Jt=2,Qt=3,Zt=4,ea=1,ta=2;let aa=ce;function info(e){aa>=he&&console.info(`Info: ${e}`)}function warn(e){aa>=ce&&console.warn(`Warning: ${e}`)}function unreachable(e){throw new Error(e)}function assert(e,t){e||unreachable(t)}function createValidAbsoluteUrl(e,t=null,a=null){if(!e)return null;if(a&&"string"==typeof e){if(a.addDefaultProtocol&&e.startsWith("www.")){const t=e.match(/\./g);t?.length>=2&&(e=`http://${e}`)}if(a.tryConvertEncoding)try{e=stringToUTF8String(e)}catch{}}const n=t?URL.parse(e,t):URL.parse(e);return function _isValidProtocol(e){switch(e?.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}(n)?n:null}function shadow(e,t,a,n=!1){Object.defineProperty(e,t,{value:a,enumerable:!n,configurable:!0,writable:!1});return a}const na=function BaseExceptionClosure(){function BaseException(e,t){this.message=e;this.name=t}BaseException.prototype=new Error;BaseException.constructor=BaseException;return BaseException}();class PasswordException extends na{constructor(e,t){super(e,"PasswordException");this.code=t}}class UnknownErrorException extends na{constructor(e,t){super(e,"UnknownErrorException");this.details=t}}class InvalidPDFException extends na{constructor(e){super(e,"InvalidPDFException")}}class ResponseException extends na{constructor(e,t,a){super(e,"ResponseException");this.status=t;this.missing=a}}class FormatError extends na{constructor(e){super(e,"FormatError")}}class AbortException extends na{constructor(e){super(e,"AbortException")}}function bytesToString(e){"object"==typeof e&&void 0!==e?.length||unreachable("Invalid argument for bytesToString");const t=e.length,a=8192;if(t<a)return String.fromCharCode.apply(null,e);const n=[];for(let s=0;s<t;s+=a){const r=Math.min(s+a,t),i=e.subarray(s,r);n.push(String.fromCharCode.apply(null,i))}return n.join("")}function stringToBytes(e){"string"!=typeof e&&unreachable("Invalid argument for stringToBytes");const t=e.length,a=new Uint8Array(t);for(let n=0;n<t;++n)a[n]=255&e.charCodeAt(n);return a}class FeatureTest{static get isLittleEndian(){const e=new Uint8Array(4);e[0]=1;return shadow(this,"isLittleEndian",1===new Uint32Array(e.buffer,0,1)[0])}static get isOffscreenCanvasSupported(){return shadow(this,"isOffscreenCanvasSupported","undefined"!=typeof OffscreenCanvas)}static get isImageDecoderSupported(){return shadow(this,"isImageDecoderSupported","undefined"!=typeof ImageDecoder)}static get isFloat16ArraySupported(){return shadow(this,"isFloat16ArraySupported","undefined"!=typeof Float16Array)}static get isSanitizerSupported(){return shadow(this,"isSanitizerSupported","undefined"!=typeof Sanitizer)}static get platform(){const{platform:e,userAgent:t}=navigator;return shadow(this,"platform",{isAndroid:t.includes("Android"),isLinux:e.includes("Linux"),isMac:e.includes("Mac"),isWindows:e.includes("Win"),isFirefox:t.includes("Firefox")})}static get isCanvasFilterSupported(){let e;this.isOffscreenCanvasSupported&&(e=new OffscreenCanvas(1,1).getContext("2d"));return shadow(this,"isCanvasFilterSupported",void 0!==e?.filter)}static get isAlphaColorInputSupported(){return shadow(this,"isAlphaColorInputSupported",!1)}static get isBackdropFilterSupported(){return shadow(this,"isBackdropFilterSupported","undefined"!=typeof CSS&&CSS.supports("backdrop-filter","blur(1px)"))}}class Util{static get hexNums(){return shadow(this,"hexNums",Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0")))}static makeHexColor(e,t,a){return`#${this.hexNums[e]}${this.hexNums[t]}${this.hexNums[a]}`}static transform(e,t){return[e[0]*t[0]+e[2]*t[1],e[1]*t[0]+e[3]*t[1],e[0]*t[2]+e[2]*t[3],e[1]*t[2]+e[3]*t[3],e[0]*t[4]+e[2]*t[5]+e[4],e[1]*t[4]+e[3]*t[5]+e[5]]}static multiplyByDOMMatrix(e,t){return[e[0]*t.a+e[2]*t.b,e[1]*t.a+e[3]*t.b,e[0]*t.c+e[2]*t.d,e[1]*t.c+e[3]*t.d,e[0]*t.e+e[2]*t.f+e[4],e[1]*t.e+e[3]*t.f+e[5]]}static applyTransform(e,t,a=0){const n=e[a],s=e[a+1];e[a]=n*t[0]+s*t[2]+t[4];e[a+1]=n*t[1]+s*t[3]+t[5]}static applyTransformToBezier(e,t,a=0){const n=t[0],s=t[1],r=t[2],i=t[3],o=t[4],l=t[5];for(let t=0;t<6;t+=2){const f=e[a+t],c=e[a+t+1];e[a+t]=f*n+c*r+o;e[a+t+1]=f*s+c*i+l}}static applyInverseTransform(e,t){const a=e[0],n=e[1],s=t[0]*t[3]-t[1]*t[2];e[0]=(a*t[3]-n*t[2]+t[2]*t[5]-t[4]*t[3])/s;e[1]=(-a*t[1]+n*t[0]+t[4]*t[1]-t[5]*t[0])/s}static axialAlignedBoundingBox(e,t,a){const n=t[0],s=t[1],r=t[2],i=t[3],o=t[4],l=t[5],f=e[0],c=e[1],h=e[2],u=e[3];let m=n*f+o,p=m,d=n*h+o,g=d,b=i*c+l,w=b,j=i*u+l,k=j;if(0!==s||0!==r){const e=s*f,t=s*h,a=r*c,n=r*u;m+=a;g+=a;d+=n;p+=n;b+=e;k+=e;j+=t;w+=t}a[0]=Math.min(a[0],m,d,p,g);a[1]=Math.min(a[1],b,j,w,k);a[2]=Math.max(a[2],m,d,p,g);a[3]=Math.max(a[3],b,j,w,k)}static inverseTransform(e){const t=e[0]*e[3]-e[1]*e[2];return[e[3]/t,-e[1]/t,-e[2]/t,e[0]/t,(e[2]*e[5]-e[4]*e[3])/t,(e[4]*e[1]-e[5]*e[0])/t]}static singularValueDecompose2dScale(e,t){const a=e[0],n=e[1],s=e[2],r=e[3],i=a**2+n**2,o=a*s+n*r,l=s**2+r**2,f=(i+l)/2,c=Math.sqrt(f**2-(i*l-o**2));t[0]=Math.sqrt(f+c||1);t[1]=Math.sqrt(f-c||1)}static normalizeRect(e){const t=e.slice(0);if(e[0]>e[2]){t[0]=e[2];t[2]=e[0]}if(e[1]>e[3]){t[1]=e[3];t[3]=e[1]}return t}static intersect(e,t){const a=Math.max(Math.min(e[0],e[2]),Math.min(t[0],t[2])),n=Math.min(Math.max(e[0],e[2]),Math.max(t[0],t[2]));if(a>n)return null;const s=Math.max(Math.min(e[1],e[3]),Math.min(t[1],t[3])),r=Math.min(Math.max(e[1],e[3]),Math.max(t[1],t[3]));return s>r?null:[a,s,n,r]}static pointBoundingBox(e,t,a){a[0]=Math.min(a[0],e);a[1]=Math.min(a[1],t);a[2]=Math.max(a[2],e);a[3]=Math.max(a[3],t)}static rectBoundingBox(e,t,a,n,s){s[0]=Math.min(s[0],e,a);s[1]=Math.min(s[1],t,n);s[2]=Math.max(s[2],e,a);s[3]=Math.max(s[3],t,n)}static#e(e,t,a,n,s,r,i,o,l,f){if(l<=0||l>=1)return;const c=1-l,h=l*l,u=h*l,m=c*(c*(c*e+3*l*t)+3*h*a)+u*n,p=c*(c*(c*s+3*l*r)+3*h*i)+u*o;f[0]=Math.min(f[0],m);f[1]=Math.min(f[1],p);f[2]=Math.max(f[2],m);f[3]=Math.max(f[3],p)}static#t(e,t,a,n,s,r,i,o,l,f,c,h){if(Math.abs(l)<1e-12){Math.abs(f)>=1e-12&&this.#e(e,t,a,n,s,r,i,o,-c/f,h);return}const u=f**2-4*c*l;if(u<0)return;const m=Math.sqrt(u),p=2*l;this.#e(e,t,a,n,s,r,i,o,(-f+m)/p,h);this.#e(e,t,a,n,s,r,i,o,(-f-m)/p,h)}static bezierBoundingBox(e,t,a,n,s,r,i,o,l){l[0]=Math.min(l[0],e,i);l[1]=Math.min(l[1],t,o);l[2]=Math.max(l[2],e,i);l[3]=Math.max(l[3],t,o);this.#t(e,a,s,i,t,n,r,o,3*(3*(a-s)-e+i),6*(e-2*a+s),3*(a-e),l);this.#t(e,a,s,i,t,n,r,o,3*(3*(n-r)-t+o),6*(t-2*n+r),3*(n-t),l)}}function stringToUTF8String(e){return decodeURIComponent(escape(e))}function utf8StringToString(e){return unescape(encodeURIComponent(e))}function isArrayEqual(e,t){if(e.length!==t.length)return!1;for(let a=0,n=e.length;a<n;a++)if(e[a]!==t[a])return!1;return!0}let sa=null,ra=null;const makeArr=()=>[],makeMap=()=>new Map,makeObj=()=>Object.create(null),makeSet=()=>new Set;"function"!=typeof Iterator.prototype.join&&(Iterator.prototype.join=function(e){return[...this].join(e)});const ia=Symbol("CIRCULAR_REF"),oa=Symbol("EOF"),la=new Map,fa=new Map,ca=new Map;class Name{constructor(e){this.name=e}static get(e){let t=fa.get(e);if(!t){t=new Name(e);fa.set(e,t)}return t}}class Cmd{constructor(e){this.cmd=e}static get(e){let t=la.get(e);if(!t){t=new Cmd(e);la.set(e,t)}return t}}const nonSerializable=()=>nonSerializable;class Dict{__nonSerializable__=nonSerializable;#a=new Map;objId=null;suppressEncryption=!1;xref;constructor(e=null){this.xref=e}assignXref(e){this.xref=e}get size(){return this.#a.size}#n(e,t,a){let n=this.#a.get(t);void 0===n&&void 0!==a&&(n=this.#a.get(a));return n instanceof Ref&&this.xref?e?this.xref.fetchAsync(n,this.suppressEncryption):this.xref.fetch(n,this.suppressEncryption):n}get(e,t){return this.#n(!1,e,t)}async getAsync(e,t){return this.#n(!0,e,t)}getArray(e,t){let a=this.#n(!1,e,t);if(Array.isArray(a)){a=a.slice();for(let e=0,t=a.length;e<t;e++)a[e]instanceof Ref&&this.xref&&(a[e]=this.xref.fetch(a[e],this.suppressEncryption))}return a}getRaw(e){return this.#a.get(e)}getKeys(){return this.#a.keys()}getRawValues(){return this.#a.values()}getRawEntries(){return this.#a.entries()}set(e,t){this.#a.set(e,t)}setIfNotExists(e,t){this.has(e)||this.set(e,t)}setIfNumber(e,t){"number"==typeof t&&this.set(e,t)}setIfArray(e,t){(Array.isArray(t)||ArrayBuffer.isView(t))&&this.set(e,t)}setIfDefined(e,t){null!=t&&this.set(e,t)}setIfName(e,t){"string"==typeof t?this.set(e,Name.get(t)):t instanceof Name&&this.set(e,t)}setIfDict(e,t){t instanceof Dict&&this.set(e,t)}has(e){return this.#a.has(e)}*[Symbol.iterator](){for(const[e,t]of this.#a)yield[e,t instanceof Ref&&this.xref?this.xref.fetch(t,this.suppressEncryption):t]}static get empty(){const e=new Dict(null);e.set=(e,t)=>{unreachable("Should not call `set` on the empty dictionary.")};return shadow(this,"empty",e)}static merge({xref:e,dictArray:t,mergeSubDicts:a=!1}){const n=new Dict(e),s=new Map;for(const e of t)if(e instanceof Dict)for(const[t,n]of e.getRawEntries()){const e=s.getOrInsertComputed(t,makeArr);(!e.length||a&&n instanceof Dict)&&e.push(n)}for(const[t,a]of s){if(1===a.length||!(a[0]instanceof Dict)){n.set(t,a[0]);continue}const s=new Dict(e);for(const e of a)for(const[t,a]of e.getRawEntries())s.setIfNotExists(t,a);s.size>0&&n.set(t,s)}s.clear();return n.size>0?n:Dict.empty}clone(){const e=new Dict(this.xref);for(const[t,a]of this.#a)e.set(t,a);return e}delete(e){this.#a.delete(e)}}class Ref{#s;constructor(e,t,a){this.#s=e;this.num=t;this.gen=a}toString(){return this.#s}static fromString(e){let t=ca.get(e);if(t)return t;const a=/^([1-9]\d*)R([1-9]\d*)?$/.exec(e);if(!a)return null;t=new Ref(e,parseInt(a[1],10),a[2]?parseInt(a[2],10):0);ca.set(e,t);return t}static get(e,t){const a=0===t?`${e}R`:`${e}R${t}`;let n=ca.get(a);if(!n){n=new Ref(a,e,t);ca.set(a,n)}return n}}class RefSet{#r=new Set;constructor(e=null){if(e)for(const t of e)this.#r.add(t)}has(e){return this.#r.has(e.toString())}put(e){this.#r.add(e.toString())}remove(e){this.#r.delete(e.toString())}[Symbol.iterator](){return this.#r.keys()}clear(){this.#r.clear()}}class RefMap{#a=new Map;get size(){return this.#a.size}get(e){return this.#a.get(e.toString())}has(e){return this.#a.has(e.toString())}put(e,t){this.#a.set(e.toString(),t)}putAlias(e,t){this.#a.set(e.toString(),this.get(t))}getOrPutComputed(e,t){const a=this.#a,n=e.toString();a.has(n)||a.set(n,t(e));return a.get(n)}[Symbol.iterator](){return this.#a.values()}clear(){this.#a.clear()}*values(){yield*this.#a.values()}*items(){for(const[e,t]of this.#a)yield[Ref.fromString(e),t]}*keys(){for(const e of this.#a.keys())yield Ref.fromString(e)}}function isName(e,t){return e instanceof Name&&(void 0===t||e.name===t)}function isCmd(e,t){return e instanceof Cmd&&(void 0===t||e.cmd===t)}function isDict(e,t){return e instanceof Dict&&(void 0===t||isName(e.get("Type"),t))}function isRefsEqual(e,t){return e.num===t.num&&e.gen===t.gen}class BaseStream{get length(){unreachable("Abstract getter `length` accessed")}get isEmpty(){unreachable("Abstract getter `isEmpty` accessed")}get isDataLoaded(){return shadow(this,"isDataLoaded",!0)}getByte(){unreachable("Abstract method `getByte` called")}getBytes(e){unreachable("Abstract method `getBytes` called")}async getImageData(e,t){return this.getBytes(e,t)}async asyncGetBytes(){unreachable("Abstract method `asyncGetBytes` called")}get isAsync(){return!1}get isAsyncDecoder(){return!1}get isImageStream(){return!1}get canAsyncDecodeImageFromBuffer(){return!1}async getTransferableImage(e,t){return null}peekByte(){const e=this.getByte();-1!==e&&this.pos--;return e}peekBytes(e){const t=this.getBytes(e);this.pos-=t.length;return t}getUint16(){const e=this.getByte(),t=this.getByte();return-1===e||-1===t?-1:(e<<8)+t}getInt32(){return(this.getByte()<<24)+(this.getByte()<<16)+(this.getByte()<<8)+this.getByte()}getByteRange(e,t){unreachable("Abstract method `getByteRange` called")}getString(e){return bytesToString(this.getBytes(e))}skip(e){this.pos+=e||1}reset(){unreachable("Abstract method `reset` called")}moveStart(){unreachable("Abstract method `moveStart` called")}makeSubStream(e,t,a=null){unreachable("Abstract method `makeSubStream` called")}clone(){unreachable("Abstract method `clone` called")}getBaseStreams(){return null}getOriginalStream(){return this.stream?.getOriginalStream()||this}}const ha=/\p{Cc}/u;function serializeFontFamily(e){if(function isCSSString(e){const t=e[0];if(e.length<2||'"'!==t&&"'"!==t||e.at(-1)!==t)return!1;const a=e.length-1;for(let n=1;n<a;n++){const s=e[n];if(s===t||ha.test(s))return!1;if("\\"===s&&(++n>=a||ha.test(e[n])))return!1}return!0}(e))return e;return`"${e.replaceAll(/["\\\p{Cc}]/gu,e=>'"'===e||"\\"===e?`\\${e}`:`\\${e.codePointAt(0).toString(16)} `)}"`}function stringToAsciiOrUTF16BE(e){return null==e||function isAscii(e){return"string"==typeof e&&(!e||/^[\x00-\x7F]*$/.test(e))}(e)?e:stringToUTF16String(e,!0)}function stringToUTF16HexString(e){const t=[];for(let a=0,n=e.length;a<n;a++){const n=e.charCodeAt(a);t.push(Util.hexNums[n>>8&255],Util.hexNums[255&n])}return t.join("")}function stringToUTF16String(e,t=!1){const a=[];t&&a.push("þÿ");for(let t=0,n=e.length;t<n;t++){const n=e.charCodeAt(t);a.push(String.fromCharCode(n>>8&255),String.fromCharCode(255&n))}return a.join("")}const ua=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364],ma=Object.create(null);function stringToPDFString(e,t=!1){if(e[0]>="ï"){let a;if("þ"===e[0]&&"ÿ"===e[1]){a="utf-16be";e.length%2==1&&(e=e.slice(0,-1))}else if("ÿ"===e[0]&&"þ"===e[1]){a="utf-16le";e.length%2==1&&(e=e.slice(0,-1))}else"ï"===e[0]&&"»"===e[1]&&"¿"===e[2]&&(a="utf-8");if(a)try{const n=ma[a]??=new TextDecoder(a,{fatal:!0}),s=stringToBytes(e),r=n.decode(s);return t||!r.includes("")?r:r.replaceAll(/\x1b[^\x1b]*(?:\x1b|$)/g,"")}catch(e){warn(`stringToPDFString: "${e}".`)}}const a=[];for(let n=0,s=e.length;n<s;n++){const r=e.charCodeAt(n);if(!t&&27===r){for(;++n<s&&27!==e.charCodeAt(n););continue}const i=ua[r];a.push(i?String.fromCharCode(i):e.charAt(n))}return a.join("")}const pa=/^[1-9]\.\d$/,da=2**31-1,ga=[1,0,0,1,0,0],ba=["ColorSpace","ExtGState","Font","Pattern","Properties","Shading","XObject"],wa=["ExtGState","Font","Properties","XObject"];function getLookupTableFactory(e,t=!1){let a;return function(){if(e){a=t?[]:Object.create(null);e(a);e=null}return a}}class MissingDataException extends na{constructor(e,t){super(`Missing data [${e}, ${t})`,"MissingDataException");this.begin=e;this.end=t}}class ParserEOFException extends na{constructor(e){super(e,"ParserEOFException")}}class XRefEntryException extends na{constructor(e){super(e,"XRefEntryException")}}class XRefParseException extends na{constructor(e){super(e,"XRefParseException")}}function arrayBuffersToBytes(e){const t=e.length;if(0===t)return new Uint8Array(0);if(1===t)return new Uint8Array(e[0]);let a=0;for(let n=0;n<t;n++)a+=e[n].byteLength;const n=new Uint8Array(a);let s=0;for(let a=0;a<t;a++){const t=new Uint8Array(e[a]);n.set(t,s);s+=t.byteLength}return n}async function fetchBinaryData(e){const t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch file "${e}" with "${t.statusText}".`);return t.bytes()}function getInheritableProperty({dict:e,key:t,getArray:a=!1,stopWhenFound:n=!0}){let s;const r=new RefSet;for(;e instanceof Dict&&(!e.objId||!r.has(e.objId));){e.objId&&r.put(e.objId);const i=a?e.getArray(t):e.get(t);if(void 0!==i){if(n)return i;(s||=[]).push(i)}e=e.get("Parent")}return s}function deepCompare(e,t){if(e===t)return!0;if(e instanceof Ref&&t instanceof Ref)return isRefsEqual(e,t);if(e instanceof Name&&t instanceof Name)return e.name===t.name;if(e instanceof Dict&&t instanceof Dict){if(e.size!==t.size)return!1;for(const[a,n]of e.getRawEntries()){const e=t.getRaw(a);if(void 0===e||!deepCompare(n,e))return!1}return!0}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let a=0,n=e.length;a<n;a++)if(!deepCompare(e[a],t[a]))return!1;return!0}return!1}const ja=["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM","","X","XX","XXX","XL","L","LX","LXX","LXXX","XC","","I","II","III","IV","V","VI","VII","VIII","IX"];function toRomanNumerals(e,t=!1){assert(Number.isInteger(e)&&e>0,"The number should be a positive integer.");const a="M".repeat(e/1e3|0)+ja[e%1e3/100|0]+ja[10+(e%100/10|0)]+ja[20+e%10];return t?a.toLowerCase():a}function isWhiteSpace(e){return 32===e||9===e||13===e||10===e}function isNumberArray(e,t){return Array.isArray(e)?(null===t||e.length===t)&&e.every(e=>"number"==typeof e):ArrayBuffer.isView(e)&&!(e instanceof BigInt64Array||e instanceof BigUint64Array)&&(null===t||e.length===t)}function lookupMatrix(e,t){return isNumberArray(e,6)?e:t}function lookupRect(e,t){return isNumberArray(e,4)?e:t}function lookupNormalRect(e,t){return isNumberArray(e,4)?Util.normalizeRect(e):t}function parseXFAPath(e){const t=/^(.+)\[(\d+)\]$/;return e.split(".").map(e=>{const a=e.match(t);return a?{name:a[1],pos:parseInt(a[2],10)}:{name:e,pos:0}})}function escapePDFName(e){const t=[];let a=0;for(let n=0,s=e.length;n<s;n++){const s=e.charCodeAt(n);if(s<33||s>126||35===s||40===s||41===s||60===s||62===s||91===s||93===s||123===s||125===s||47===s||37===s){a<n&&t.push(e.substring(a,n));t.push(`#${s.toString(16).padStart(2,"0")}`);a=n+1}}if(0===t.length)return e;a<e.length&&t.push(e.substring(a));return t.join("")}function escapeString(e){return e.replaceAll(/([()\\\n\r])/g,e=>"\n"===e?"\\n":"\r"===e?"\\r":`\\${e}`)}function _collectJS(e,t,a,n){if(!e)return;let s=null;if(e instanceof Ref){if(n.has(e))return;s=e;n.put(s);e=t.fetch(e)}if(Array.isArray(e))for(const s of e)_collectJS(s,t,a,n);else if(e instanceof Dict){if(isName(e.get("S"),"JavaScript")){const t=e.get("JS");let n;t instanceof BaseStream?n=t.getString():"string"==typeof t&&(n=t);n&&=stringToPDFString(n,!0).replaceAll("\0","");n&&a.push(n.trim())}_collectJS(e.getRaw("Next"),t,a,n)}s&&n.remove(s)}function _collectAction(e,t,a,n){const s=[];_collectJS(e,a,s,new RefSet);s.length&&n.set(t,s)}function collectActions(e,t,a){const n=new Map,s=getInheritableProperty({dict:t,key:"AA",stopWhenFound:!1});if(s)for(let t=s.length-1;t>=0;t--){const r=s[t];if(r instanceof Dict)for(const[t,s]of r.getRawEntries()){const r=a[t];r&&_collectAction(s,r,e,n)}}t.has("A")&&_collectAction(t.get("A"),"Action",e,n);return n.size?n:null}const ka={60:"&lt;",62:"&gt;",38:"&amp;",34:"&quot;",39:"&apos;"};function*codePointIter(e){for(let t=0,a=e.length;t<a;t++){const a=e.codePointAt(t);a>55295&&(a<57344||a>65533)&&t++;yield a}}function encodeToXmlString(e){const t=[];let a=0;for(let n=0,s=e.length;n<s;n++){const s=e.codePointAt(n);if(32<=s&&s<=126){const r=ka[s];if(r){a<n&&t.push(e.substring(a,n));t.push(r);a=n+1}}else{a<n&&t.push(e.substring(a,n));t.push(`&#x${s.toString(16).toUpperCase()};`);s>65535&&n++;a=n+1}}if(0===t.length)return e;a<e.length&&t.push(e.substring(a));return t.join("")}function validateFontName(e,t=!1){const a=/^("|').*("|')$/.exec(e);if(a&&a[1]===a[2]){if(new RegExp(`[^\\\\]${a[1]}`).test(e.slice(1,-1))){t&&warn(`FontFamily contains unescaped ${a[1]}: ${e}.`);return!1}if(ha.test(e)){t&&warn(`FontFamily contains control characters: ${e}.`);return!1}}else for(const a of e.split(/[ \t]+/))if(/^(?:\d|-[\d-])/.test(a)||!/^[\w\\-]+$/.test(a)){t&&warn(`FontFamily contains invalid <custom-ident>: ${e}.`);return!1}return!0}function normalizeCSSFontFamily(e){return e.replaceAll(/( +)(\d)?/g,(e,t,a)=>a??" ")}function validateCSSFont(e){const t=new Set(["100","200","300","400","500","600","700","800","900","1000","normal","bold","bolder","lighter"]),{fontFamily:a,fontWeight:n,italicAngle:s}=e;if(!validateFontName(a,!0))return!1;const r=n?n.toString():"";e.fontWeight=t.has(r)?r:"400";const i=parseFloat(s);e.italicAngle=isNaN(i)||i<-90||i>90?"14":s.toString();return!0}function recoverJsURL(e){const t=new RegExp("^\\s*("+["app.launchURL","window.open","xfa.host.gotoURL"].join("|").replaceAll(".","\\.")+")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))","i").exec(e);return t?.[2]?{url:t[2],newWindow:"app.launchURL"===t[1]&&"true"===t[3]}:null}function numberToString(e){if(Number.isInteger(e))return e.toString();const t=Math.round(100*e);return t%100==0?(t/100).toString():t%10==0?e.toFixed(1):e.toFixed(2)}function getNewAnnotationsMap(e){if(!e)return null;const t=new Map;for(const[a,n]of e)a.startsWith(p)&&t.getOrInsertComputed(n.pageIndex,makeArr).push(n);return t.size>0?t:null}function getModificationDate(e=new Date){e instanceof Date||(e=new Date(e));return[e.getUTCFullYear().toString(),(e.getUTCMonth()+1).toString().padStart(2,"0"),e.getUTCDate().toString().padStart(2,"0"),e.getUTCHours().toString().padStart(2,"0"),e.getUTCMinutes().toString().padStart(2,"0"),e.getUTCSeconds().toString().padStart(2,"0")].join("")}function getRotationMatrix(e,t,a){switch(e){case 90:return[0,1,-1,0,t,0];case 180:return[-1,0,0,-1,t,a];case 270:return[0,-1,1,0,0,a];default:throw new Error("Invalid rotation")}}function getSizeInBytes(e){return Math.ceil(Math.ceil(Math.log2(1+e))/8)}const ya=1===new Uint8Array(new Uint32Array([1]).buffer)[0]?4278190080:255,qa=~ya;class QCMS{static#i=null;static _memory=null;static _destBuffer=null;static _destOffset=0;static _keepAlpha=!1;static get _memoryArray(){const e=this.#i;return e?.byteLength?e:this.#i=new Uint8Array(this._memory.buffer)}}const va=Object.freeze({RGB8:0,0:"RGB8",RGBA8:1,1:"RGBA8",BGRA8:2,2:"BGRA8",Gray8:3,3:"Gray8",GrayA8:4,4:"GrayA8",CMYK:5,5:"CMYK"}),Sa=Object.freeze({Perceptual:0,0:"Perceptual",RelativeColorimetric:1,1:"RelativeColorimetric",Saturation:2,2:"Saturation",AbsoluteColorimetric:3,3:"AbsoluteColorimetric"});function qcms_convert_array(e,t,a){const n=passArray8ToWasm0(t,Ra.__wbindgen_malloc),s=Oa;Ra.qcms_convert_array(e,n,s,a)}function __wbg_get_imports(){return{__proto__:null,"./qcms_bg.js":{__proto__:null,__wbg___wbindgen_throw_344f42d3211c4765:function(e,t){throw new Error(function getStringFromWasm0(e,t){return function decodeText(e,t){Ia+=t;if(Ia>=Ca){xa=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});xa.decode();Ia=t}return xa.decode(getUint8ArrayMemory0().subarray(e,e+t))}(e>>>0,t)}(e,t))},__wbg_copy_result_0d15f3bf9d9012ae:function(e,t){!function copy_result(e,t){const{_destBuffer:a,_destOffset:n,_keepAlpha:s,_memoryArray:r}=QCMS;if(!s){a.set(r.subarray(e,e+t),n);return}const i=t>>2,o=a.byteOffset+n;if(!(3&(o|e))){const t=new Uint32Array(a.buffer,o,i),n=new Uint32Array(QCMS._memory.buffer,e,i);for(let e=0;e<i;e++)t[e]=t[e]&ya|n[e]&qa;return}for(let s=e,i=e+t,o=n;s<i;s+=4,o+=4){a[o]=r[s];a[o+1]=r[s+1];a[o+2]=r[s+2]}}(e>>>0,t>>>0)},__wbindgen_init_externref_table:function(){const e=Ra.__wbindgen_externrefs,t=e.grow(4);e.set(0,void 0);e.set(t+0,void 0);e.set(t+1,null);e.set(t+2,!0);e.set(t+3,!1)}}}}let Aa=null;function getUint8ArrayMemory0(){null!==Aa&&0!==Aa.byteLength||(Aa=new Uint8Array(Ra.memory.buffer));return Aa}function passArray8ToWasm0(e,t){const a=t(1*e.length,1)>>>0;getUint8ArrayMemory0().set(e,a/1);Oa=e.length;return a}let xa=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});xa.decode();const Ca=2146435072;let Ia=0;let Fa,Ta,Ra,Oa=0;function __wbg_finalize_init(e,t){Ta=e;Ra=e.exports;Fa=t;Aa=null;Ra.__wbindgen_start();return Ra}function MathClamp(e,t,a){return Math.min(Math.max(e,t),a)}function isDefaultDecodeHelper(e,t){if(!Array.isArray(e))return!0;const a=e.length;if(a<t){warn("Decode map length is too short.");return!0}if(a>t){info("Truncating too long decode map.");e.length=t}return!1}class ColorSpace{static#o=new Uint8ClampedArray(3);constructor(e,t){this.name=e;this.numComps=t}getRgb(e,t,a=new Uint8ClampedArray(3)){this.getRgbItem(e,t,a,0);return a}getRgbHex(e,t){const a=this.getRgb(e,t,ColorSpace.#o);return Util.makeHexColor(a[0],a[1],a[2])}getRgbItem(e,t,a,n){unreachable("Should not call ColorSpace.getRgbItem")}getRgbBuffer(e,t,a,n,s,r,i){unreachable("Should not call ColorSpace.getRgbBuffer")}getRgbItems(e,t,a,n,s){const{numComps:r}=this;for(let i=0,o=0;i<t;i++,o+=r){this.getRgbItem(e,o,a,n);n+=3+s}}isPassthrough(e){return!1}isDefaultDecode(e,t){return ColorSpace.isDefaultDecode(e,this.numComps)}fillRgb(e,t,a,n,s,r,i,o,l){const f=t*a;let c=null;const h=1<<i,u=a!==s||t!==n;if(this.isPassthrough(i))c=o;else if(1===this.numComps&&f>h&&"DeviceGray"!==this.name&&"DeviceRGB"!==this.name){const t=i<=8?new Uint8Array(h):new Uint16Array(h);for(let e=0;e<h;e++)t[e]=e;const a=new Uint8ClampedArray(3*h);this.getRgbBuffer(t,0,h,a,0,i,0);if(u){c=new Uint8Array(3*f);let e=0;for(let t=0;t<f;++t){const n=3*o[t];c[e++]=a[n];c[e++]=a[n+1];c[e++]=a[n+2]}}else{let t=0;for(let n=0;n<f;++n){const s=3*o[n];e[t++]=a[s];e[t++]=a[s+1];e[t++]=a[s+2];t+=l}}}else if(u){c=new Uint8ClampedArray(3*f);this.getRgbBuffer(o,0,f,c,0,i,0)}else this.getRgbBuffer(o,0,n*r,e,0,i,l);if(c)if(u)!function resizeRgbImage(e,t,a,n,s,r,i){i=1!==i?0:i;const o=a/s,l=n/r;let f,c=0;const h=new Uint16Array(s),u=3*a;for(let e=0;e<s;e++)h[e]=3*Math.floor(e*o);for(let a=0;a<r;a++){const n=Math.floor(a*l)*u;for(let a=0;a<s;a++){f=n+h[a];t[c++]=e[f++];t[c++]=e[f++];t[c++]=e[f++];c+=i}}}(c,e,t,a,n,s,l);else{let t=0,a=0;for(let s=0,i=n*r;s<i;s++){e[t++]=c[a++];e[t++]=c[a++];e[t++]=c[a++];t+=l}}}get usesZeroToOneRange(){return shadow(this,"usesZeroToOneRange",!0)}static isDefaultDecode(e,t){if(isDefaultDecodeHelper(e,2*t))return!0;for(let t=0,a=e.length;t<a;t+=2)if(0!==e[t]||1!==e[t+1])return!1;return!0}}class AlternateCS extends ColorSpace{constructor(e,t,a){super("Alternate",e);this.base=t;this.tintFn=a;this.tmpBuf=new Float32Array(t.numComps)}getRgbItem(e,t,a,n){const s=this.tmpBuf;this.tintFn(e,t,s,0);this.base.getRgbItem(s,0,a,n)}getRgbItems(e,t,a,n,s){const{base:r,numComps:i,tintFn:o}=this,l=r.numComps,f=new Float32Array(t*l);for(let a=0,n=0,s=0;a<t;a++){o(e,n,f,s);n+=i;s+=l}r.getRgbItems(f,t,a,n,s)}getRgbBuffer(e,t,a,n,s,r,i){const o=this.tintFn,l=this.base,f=1/((1<<r)-1),c=l.numComps,h=l.usesZeroToOneRange,u=(l.isPassthrough(8)||!h)&&0===i;let m=u?s:0;const p=u?n:new Uint8ClampedArray(c*a),d=this.numComps,g=new Float32Array(d),b=new Float32Array(c);let w,j;for(w=0;w<a;w++){for(j=0;j<d;j++)g[j]=e[t++]*f;o(g,0,b,0);if(h)for(j=0;j<c;j++)p[m++]=255*b[j];else{l.getRgbItem(b,0,p,m);m+=c}}u||l.getRgbBuffer(p,0,a,n,s,8,i)}}class PatternCS extends ColorSpace{constructor(e){super("Pattern",null);this.base=e}isDefaultDecode(e,t){unreachable("Should not call PatternCS.isDefaultDecode")}}class IndexedCS extends ColorSpace{#l;constructor(e,t,a){super("Indexed",1);this.highVal=t;const n=t+1,s=e.numComps*n,r=new Uint8Array(s);if(a instanceof BaseStream)r.set(a.getBytes(s));else{if("string"!=typeof a)throw new FormatError(`IndexedCS - unrecognized lookup table: ${a}`);for(let e=0;e<s;++e)r[e]=a.charCodeAt(e)}this.#l=new Uint8ClampedArray(3*n);e.getRgbBuffer(r,0,n,this.#l,0,8,0)}getRgbItem(e,t,a,n){const s=this.#l,r=3*MathClamp(Math.round(e[t]),0,this.highVal);a[n]=s[r];a[n+1]=s[r+1];a[n+2]=s[r+2]}getRgbBuffer(e,t,a,n,s,r,i){const{highVal:o}=this,l=this.#l;for(let r=0;r<a;++r){const a=3*MathClamp(Math.round(e[t++]),0,o);n[s++]=l[a];n[s++]=l[a+1];n[s++]=l[a+2];s+=i}}isDefaultDecode(e,t){if(isDefaultDecodeHelper(e,2))return!0;if(!Number.isInteger(t)||t<1){warn("Bits per component is not correct");return!0}return 0===e[0]&&e[1]===(1<<t)-1}}class DeviceGrayCS extends ColorSpace{constructor(){super("DeviceGray",1)}getRgbItem(e,t,a,n){const s=255*e[t];a[n]=a[n+1]=a[n+2]=s}getRgbBuffer(e,t,a,n,s,r,i){const o=255/((1<<r)-1);let l=t,f=s;for(let t=0;t<a;++t){const t=o*e[l++];n[f++]=t;n[f++]=t;n[f++]=t;f+=i}}}class DeviceRgbCS extends ColorSpace{constructor(){super("DeviceRGB",3)}getRgbItem(e,t,a,n){a[n]=255*e[t];a[n+1]=255*e[t+1];a[n+2]=255*e[t+2]}getRgbBuffer(e,t,a,n,s,r,i){if(8===r&&0===i){n.set(e.subarray(t,t+3*a),s);return}const o=255/((1<<r)-1);let l=t,f=s;for(let t=0;t<a;++t){n[f++]=o*e[l++];n[f++]=o*e[l++];n[f++]=o*e[l++];f+=i}}isPassthrough(e){return 8===e}}class DeviceRgbaCS extends ColorSpace{constructor(){super("DeviceRGBA",4)}isPassthrough(e){return 8===e}fillRgb(e,t,a,n,s,r,i,o,l){a!==s||t!==n?function resizeRgbaImage(e,t,a,n,s,r,i){const o=a/s,l=n/r;let f=0;const c=new Uint16Array(s);if(1===i){for(let e=0;e<s;e++)c[e]=Math.floor(e*o);const n=new Uint32Array(e.buffer),i=new Uint32Array(t.buffer),h=FeatureTest.isLittleEndian?16777215:4294967040;for(let e=0;e<r;e++){const t=n.subarray(Math.floor(e*l)*a);for(let e=0;e<s;e++)i[f++]|=t[c[e]]&h}}else{const n=4,i=a*n;for(let e=0;e<s;e++)c[e]=Math.floor(e*o)*n;for(let a=0;a<r;a++){const n=e.subarray(Math.floor(a*l)*i);for(let e=0;e<s;e++){const a=c[e];t[f++]=n[a];t[f++]=n[a+1];t[f++]=n[a+2]}}}}(o,e,t,a,n,s,l):function copyRgbaImage(e,t,a){if(1===a){const a=new Uint32Array(e.buffer),n=new Uint32Array(t.buffer),s=FeatureTest.isLittleEndian?16777215:4294967040;for(let e=0,t=a.length;e<t;e++)n[e]|=a[e]&s}else{let a=0;for(let n=0,s=e.length;n<s;n+=4){t[a++]=e[n];t[a++]=e[n+1];t[a++]=e[n+2]}}}(o,e,l)}}class DeviceCmykCS extends ColorSpace{constructor(){super("DeviceCMYK",4)}#f(e,t,a,n,s){const r=e[t]*a,i=e[t+1]*a,o=e[t+2]*a,l=e[t+3]*a;n[s]=255+r*(-4.387332384609988*r+54.48615194189176*i+18.82290502165302*o+212.25662451639585*l-285.2331026137004)+i*(1.7149763477362134*i-5.6096736904047315*o+-17.873870861415444*l-5.497006427196366)+o*(-2.5217340131683033*o-21.248923337353073*l+17.5119270841813)+l*(-21.86122147463605*l-189.48180835922747);n[s+1]=255+r*(8.841041422036149*r+60.118027045597366*i+6.871425592049007*o+31.159100130055922*l-79.2970844816548)+i*(-15.310361306967817*i+17.575251261109482*o+131.35250912493976*l-190.9453302588951)+o*(4.444339102852739*o+9.8632861493405*l-24.86741582555878)+l*(-20.737325471181034*l-187.80453709719578);n[s+2]=255+r*(.8842522430003296*r+8.078677503112928*i+30.89978309703729*o-.23883238689178934*l-14.183576799673286)+i*(10.49593273432072*i+63.02378494754052*o+50.606957656360734*l-112.23884253719248)+o*(.03296041114873217*o+115.60384449646641*l-193.58209356861505)+l*(-22.33816807309886*l-180.12613974708367)}getRgbItem(e,t,a,n){this.#f(e,t,1,a,n)}getRgbBuffer(e,t,a,n,s,r,i){const o=1/((1<<r)-1);for(let r=0;r<a;r++){this.#f(e,t,o,n,s);t+=4;s+=3+i}}}class CalGrayCS extends ColorSpace{constructor(e,t,a){super("CalGray",1);if(!e)throw new FormatError("WhitePoint missing - required for color space CalGray");[this.XW,this.YW,this.ZW]=e;[this.XB,this.YB,this.ZB]=t||[0,0,0];this.G=a||1;if(this.XW<0||this.ZW<0||1!==this.YW)throw new FormatError(`Invalid WhitePoint components for ${this.name}, no fallback available`);if(this.XB<0||this.YB<0||this.ZB<0){info(`Invalid BlackPoint for ${this.name}, falling back to default.`);this.XB=this.YB=this.ZB=0}0===this.XB&&0===this.YB&&0===this.ZB||warn(`${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ZB: ${this.ZB}, only default values are supported.`);if(this.G<1){info(`Invalid Gamma: ${this.G} for ${this.name}, falling back to default.`);this.G=1}}#f(e,t,a,n,s){const r=(e[t]*s)**this.G,i=this.YW*r,o=Math.max(295.8*i**.3333333333333333-40.8,0);a[n]=o;a[n+1]=o;a[n+2]=o}getRgbItem(e,t,a,n){this.#f(e,t,a,n,1)}getRgbBuffer(e,t,a,n,s,r,i){const o=1/((1<<r)-1);for(let r=0;r<a;++r){this.#f(e,t,n,s,o);t+=1;s+=3+i}}}class CalRGBCS extends ColorSpace{static#c=new Float32Array([.8951,.2664,-.1614,-.7502,1.7135,.0367,.0389,-.0685,1.0296]);static#h=new Float32Array([.9869929,-.1470543,.1599627,.4323053,.5183603,.0492912,-.0085287,.0400428,.9684867]);static#u=new Float32Array([3.2404542,-1.5371385,-.4985314,-.969266,1.8760108,.041556,.0556434,-.2040259,1.0572252]);static#m=new Float32Array([1,1,1]);static#p=new Float32Array(3);static#d=new Float32Array(3);static#g=new Float32Array(3);static#b=(24/116)**3/8;constructor(e,t,a,n){super("CalRGB",3);if(!e)throw new FormatError("WhitePoint missing - required for color space CalRGB");const[s,r,i]=this.whitePoint=e,[o,l,f]=this.blackPoint=t||new Float32Array(3);[this.GR,this.GG,this.GB]=a||new Float32Array([1,1,1]);[this.MXA,this.MYA,this.MZA,this.MXB,this.MYB,this.MZB,this.MXC,this.MYC,this.MZC]=n||new Float32Array([1,0,0,0,1,0,0,0,1]);if(s<0||i<0||1!==r)throw new FormatError(`Invalid WhitePoint components for ${this.name}, no fallback available`);if(o<0||l<0||f<0){info(`Invalid BlackPoint for ${this.name} [${o}, ${l}, ${f}], falling back to default.`);this.blackPoint=new Float32Array(3)}if(this.GR<0||this.GG<0||this.GB<0){info(`Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ${this.name}, falling back to default.`);this.GR=this.GG=this.GB=1}}#w(e,t,a){a[0]=e[0]*t[0]+e[1]*t[1]+e[2]*t[2];a[1]=e[3]*t[0]+e[4]*t[1]+e[5]*t[2];a[2]=e[6]*t[0]+e[7]*t[1]+e[8]*t[2]}#j(e,t,a){a[0]=1*t[0]/e[0];a[1]=1*t[1]/e[1];a[2]=1*t[2]/e[2]}#k(e,t,a){a[0]=.95047*t[0]/e[0];a[1]=1*t[1]/e[1];a[2]=1.08883*t[2]/e[2]}#y(e){return e<=.0031308?MathClamp(12.92*e,0,1):e>=.99554525?1:MathClamp(1.055*e**(1/2.4)-.055,0,1)}#q(e){return e<0?-this.#q(-e):e>8?((e+16)/116)**3:e*CalRGBCS.#b}#v(e,t,a){if(0===e[0]&&0===e[1]&&0===e[2]){a[0]=t[0];a[1]=t[1];a[2]=t[2];return}const n=this.#q(0),s=(1-n)/(1-this.#q(e[0])),r=1-s,i=(1-n)/(1-this.#q(e[1])),o=1-i,l=(1-n)/(1-this.#q(e[2])),f=1-l;a[0]=t[0]*s+r;a[1]=t[1]*i+o;a[2]=t[2]*l+f}#S(e,t,a){if(1===e[0]&&1===e[2]){a[0]=t[0];a[1]=t[1];a[2]=t[2];return}const n=a;this.#w(CalRGBCS.#c,t,n);const s=CalRGBCS.#p;this.#j(e,n,s);this.#w(CalRGBCS.#h,s,a)}#A(e,t,a){const n=a;this.#w(CalRGBCS.#c,t,n);const s=CalRGBCS.#p;this.#k(e,n,s);this.#w(CalRGBCS.#h,s,a)}#f(e,t,a,n,s){const r=MathClamp(e[t]*s,0,1),i=MathClamp(e[t+1]*s,0,1),o=MathClamp(e[t+2]*s,0,1),l=1===r?1:r**this.GR,f=1===i?1:i**this.GG,c=1===o?1:o**this.GB,h=this.MXA*l+this.MXB*f+this.MXC*c,u=this.MYA*l+this.MYB*f+this.MYC*c,m=this.MZA*l+this.MZB*f+this.MZC*c,p=CalRGBCS.#d;p[0]=h;p[1]=u;p[2]=m;const d=CalRGBCS.#g;this.#S(this.whitePoint,p,d);const g=CalRGBCS.#d;this.#v(this.blackPoint,d,g);const b=CalRGBCS.#g;this.#A(CalRGBCS.#m,g,b);const w=CalRGBCS.#d;this.#w(CalRGBCS.#u,b,w);a[n]=255*this.#y(w[0]);a[n+1]=255*this.#y(w[1]);a[n+2]=255*this.#y(w[2])}getRgbItem(e,t,a,n){this.#f(e,t,a,n,1)}getRgbBuffer(e,t,a,n,s,r,i){const o=1/((1<<r)-1);for(let r=0;r<a;++r){this.#f(e,t,n,s,o);t+=3;s+=3+i}}}class LabCS extends ColorSpace{constructor(e,t,a){super("Lab",3);if(!e)throw new FormatError("WhitePoint missing - required for color space Lab");[this.XW,this.YW,this.ZW]=e;[this.amin,this.amax,this.bmin,this.bmax]=a||[-100,100,-100,100];[this.XB,this.YB,this.ZB]=t||[0,0,0];if(this.XW<0||this.ZW<0||1!==this.YW)throw new FormatError("Invalid WhitePoint components, no fallback available");if(this.XB<0||this.YB<0||this.ZB<0){info("Invalid BlackPoint, falling back to default");this.XB=this.YB=this.ZB=0}if(this.amin>this.amax||this.bmin>this.bmax){info("Invalid Range, falling back to defaults");this.amin=-100;this.amax=100;this.bmin=-100;this.bmax=100}}#x(e){return e>=6/29?e**3:108/841*(e-4/29)}#C(e,t,a,n){return a+e*(n-a)/t}#f(e,t,a,n,s){let r=e[t],i=e[t+1],o=e[t+2];if(!1!==a){r=this.#C(r,a,0,100);i=this.#C(i,a,this.amin,this.amax);o=this.#C(o,a,this.bmin,this.bmax)}i>this.amax?i=this.amax:i<this.amin&&(i=this.amin);o>this.bmax?o=this.bmax:o<this.bmin&&(o=this.bmin);const l=(r+16)/116,f=l+i/500,c=l-o/200,h=this.XW*this.#x(f),u=this.YW*this.#x(l),m=this.ZW*this.#x(c);let p,d,g;if(this.ZW<1){p=3.1339*h+-1.617*u+-.4906*m;d=-.9785*h+1.916*u+.0333*m;g=.072*h+-.229*u+1.4057*m}else{p=3.2406*h+-1.5372*u+-.4986*m;d=-.9689*h+1.8758*u+.0415*m;g=.0557*h+-.204*u+1.057*m}n[s]=255*Math.sqrt(p);n[s+1]=255*Math.sqrt(d);n[s+2]=255*Math.sqrt(g)}getRgbItem(e,t,a,n){this.#f(e,t,!1,a,n)}getRgbBuffer(e,t,a,n,s,r,i){const o=(1<<r)-1;for(let r=0;r<a;r++){this.#f(e,t,o,n,s);t+=3;s+=3+i}}isDefaultDecode(e,t){return!0}get usesZeroToOneRange(){return shadow(this,"usesZeroToOneRange",!1)}}function fetchSync(e){const t=new XMLHttpRequest;t.open("GET",e,!1);t.responseType="arraybuffer";t.send(null);return t.response}class IccColorSpace extends ColorSpace{#I;#F;static#T=!0;static#R=null;static#O=null;constructor(e,t,a){if(!IccColorSpace.isUsable)throw new Error("No ICC color space support");super(t,a);let n;switch(a){case 1:n=va.Gray8;this.#F=(e,t)=>function qcms_convert_one(e,t){return Ra.qcms_convert_one(e,t)>>>0}(this.#I,255*e[t]);break;case 3:n=va.RGB8;this.#F=(e,t)=>function qcms_convert_three(e,t,a,n){return Ra.qcms_convert_three(e,t,a,n)>>>0}(this.#I,255*e[t],255*e[t+1],255*e[t+2]);break;case 4:n=va.CMYK;this.#F=(e,t)=>function qcms_convert_four(e,t,a,n,s){return Ra.qcms_convert_four(e,t,a,n,s)>>>0}(this.#I,255*e[t],255*e[t+1],255*e[t+2],255*e[t+3]);break;default:throw new Error(`Unsupported number of components: ${a}`)}this.#I=function qcms_transformer_from_memory(e,t,a){const n=passArray8ToWasm0(e,Ra.__wbindgen_malloc),s=Oa;return Ra.qcms_transformer_from_memory(n,s,t,a)>>>0}(e,n,Sa.Perceptual);if(!this.#I)throw new Error("Failed to create ICC color space");IccColorSpace.#O||=new FinalizationRegistry(e=>{!function qcms_drop_transformer(e){Ra.qcms_drop_transformer(e)}(e)});IccColorSpace.#O.register(this,this.#I)}getRgbHex(e,t){const a=this.#F(e,t);return Util.makeHexColor(a>>16,a>>8&255,255&a)}getRgbItem(e,t,a,n){const s=this.#F(e,t);a[n]=s>>16;a[n+1]=s>>8&255;a[n+2]=255&s}getRgbItems(e,t,a,n,s){const{numComps:r}=this,i=t*r,o=new Uint8Array(i);for(let t=0;t<i;t++)o[t]=255*e[t];QCMS._destBuffer=a;QCMS._destOffset=n;QCMS._keepAlpha=1===s;qcms_convert_array(this.#I,o,1===s);QCMS._destBuffer=null}getRgbBuffer(e,t,a,n,s,r,i){e=e.subarray(t,t+a*this.numComps);if(8!==r){const t=255/((1<<r)-1);for(let a=0,n=e.length;a<n;a++)e[a]*=t}QCMS._destBuffer=n;QCMS._destOffset=s;QCMS._keepAlpha=1===i&&n.buffer!==e.buffer;qcms_convert_array(this.#I,e,1===i);QCMS._destBuffer=null}static setOptions({useWasm:e,useWorkerFetch:t,wasmUrl:a}){if(t){this.#T=e;this.#R=a}else this.#T=!1}static get isUsable(){let e=!1;if(this.#T)if(this.#R)try{this._module=function initSync(e){if(void 0!==Ra)return Ra;void 0!==e&&(Object.getPrototypeOf(e)===Object.prototype?({module:e}=e):console.warn("using deprecated parameters for `initSync()`; pass a single object instead"));const t=__wbg_get_imports();e instanceof WebAssembly.Module||(e=new WebAssembly.Module(e));return __wbg_finalize_init(new WebAssembly.Instance(e,t),e)}({module:fetchSync(`${this.#R}qcms_bg.wasm`)});e=!!this._module;QCMS._memory=this._module.memory}catch(e){warn(`ICCBased color space: "${e}".`)}else warn("No ICC color space support due to missing `wasmUrl` API option");return shadow(this,"isUsable",e)}}class CmykICCBasedCS extends IccColorSpace{static#B;constructor(){super(new Uint8Array(fetchSync(`${CmykICCBasedCS.#B}CGATS001Compat-v2-micro.icc`)),"DeviceCMYK",4)}static setOptions({iccUrl:e}){this.#B=e}static get isUsable(){let e=!1;IccColorSpace.isUsable&&(this.#B?e=!0:warn("No CMYK ICC profile support due to missing `iccUrl` API option"));return shadow(this,"isUsable",e)}}class Stream extends BaseStream{constructor(e,t,a,n){super();this.bytes=e instanceof Uint8Array?e:new Uint8Array(e);this.start=t||0;this.pos=this.start;this.end=t+a||this.bytes.length;this.dict=n}get length(){return this.end-this.start}get isEmpty(){return 0===this.length}getByte(){return this.pos>=this.end?-1:this.bytes[this.pos++]}getBytes(e){const t=this.pos,a=e?Math.min(t+e,this.end):this.end;this.pos=a;return this.bytes.subarray(t,a)}getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);return this.bytes.subarray(e,t)}reset(){this.pos=this.start}moveStart(){this.start=this.pos}makeSubStream(e,t,a=null){return new Stream(this.bytes.buffer,e,t,a)}clone(){return new Stream(this.bytes.buffer,this.start,this.length,this.dict?.clone())}}class StringStream extends Stream{constructor(e,t=null){super(stringToBytes(e),NaN,NaN,t)}}class NullStream extends Stream{constructor(){super(new Uint8Array(0))}}class ChunkedStream extends Stream{progressiveDataLength=0;_lastSuccessfulEnsureByteChunk=-1;_loadedChunks=new Set;constructor(e,t,a){super(new Uint8Array(e),0,e,null);this.chunkSize=t;this.numChunks=Math.ceil(e/t);this.manager=a}getMissingChunks(){const e=[];for(let t=0,a=this.numChunks;t<a;++t)this._loadedChunks.has(t)||e.push(t);return e}get numChunksLoaded(){return this._loadedChunks.size}get isDataLoaded(){return this.numChunksLoaded===this.numChunks}onReceiveData(e,t){const a=this.chunkSize;if(e%a!==0)throw new Error(`Bad begin offset: ${e}`);const n=e+t.byteLength;if(n%a!==0&&n!==this.bytes.length)throw new Error(`Bad end offset: ${n}`);this.bytes.set(new Uint8Array(t),e);const s=Math.floor(e/a),r=Math.floor((n-1)/a)+1;for(let e=s;e<r;++e)this._loadedChunks.add(e)}onReceiveProgressiveData(e){let t=this.progressiveDataLength;const a=Math.floor(t/this.chunkSize);this.bytes.set(new Uint8Array(e),t);t+=e.byteLength;this.progressiveDataLength=t;const n=t>=this.end?this.numChunks:Math.floor(t/this.chunkSize);for(let e=a;e<n;++e)this._loadedChunks.add(e)}ensureByte(e){if(e<this.progressiveDataLength)return;const t=Math.floor(e/this.chunkSize);if(!(t>this.numChunks||t===this._lastSuccessfulEnsureByteChunk)){if(!this._loadedChunks.has(t))throw new MissingDataException(e,e+1);this._lastSuccessfulEnsureByteChunk=t}}ensureRange(e,t){if(e>=t||t<=this.progressiveDataLength)return;const a=Math.floor(e/this.chunkSize);if(a>this.numChunks)return;const n=Math.min(Math.floor((t-1)/this.chunkSize)+1,this.numChunks);for(let s=a;s<n;++s)if(!this._loadedChunks.has(s))throw new MissingDataException(e,t)}nextEmptyChunk(e){const t=this.numChunks;for(let a=0;a<t;++a){const n=(e+a)%t;if(!this._loadedChunks.has(n))return n}return null}hasChunk(e){return this._loadedChunks.has(e)}getByte(){const e=this.pos;if(e>=this.end)return-1;e>=this.progressiveDataLength&&this.ensureByte(e);return this.bytes[this.pos++]}getBytes(e){const t=this.pos,a=e?Math.min(t+e,this.end):this.end;a>this.progressiveDataLength&&this.ensureRange(t,a);this.pos=a;return this.bytes.subarray(t,a)}getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);t>this.progressiveDataLength&&this.ensureRange(e,t);return this.bytes.subarray(e,t)}makeSubStream(e,t,a=null){t?e+t>this.progressiveDataLength&&this.ensureRange(e,e+t):e>=this.progressiveDataLength&&this.ensureByte(e);function ChunkedStreamSubstream(){}ChunkedStreamSubstream.prototype=Object.create(this);ChunkedStreamSubstream.prototype.getMissingChunks=function(){const e=this.chunkSize,t=Math.floor(this.start/e),a=Math.floor((this.end-1)/e)+1,n=[];for(let e=t;e<a;++e)this._loadedChunks.has(e)||n.push(e);return n};Object.defineProperty(ChunkedStreamSubstream.prototype,"isDataLoaded",{get(){return this.numChunksLoaded===this.numChunks||0===this.getMissingChunks().length},configurable:!0});const n=new ChunkedStreamSubstream;n.pos=n.start=e;n.end=e+t||this.end;n.dict=a;return n}getBaseStreams(){return[this]}}class ChunkedStreamManager{#D=!1;#H=0;#M=new Map;#N=Promise.withResolvers();_promisesByRequest=new Map;_requestsByChunk=new Map;constructor(e,t){this.length=t.length;this.chunkSize=t.rangeChunkSize;this.stream=new ChunkedStream(this.length,this.chunkSize,this);this.pdfStream=e;this.disableAutoFetch=t.disableAutoFetch;this.msgHandler=t.msgHandler}async sendRequest(e,t){const a=this.pdfStream.getRangeReader(e,t);let n=[];for(;;){const{value:e,done:t}=await a.read();if(this.#D){n=null;return}if(t)break;n.push(e)}if(0===n.length&&this.disableAutoFetch)return;const s=arrayBuffersToBytes(n);n=null;this.onReceiveData({chunk:s.buffer,begin:e})}requestAllChunks(e=!1){if(!e){const e=this.stream.getMissingChunks();this._requestChunks(e)}return this.#N.promise}_requestChunks(e){const t=new Set;for(const a of e)this.stream.hasChunk(a)||t.add(a);if(0===t.size)return Promise.resolve();const a=this.#H++;this.#M.set(a,t);const n=Promise.withResolvers();this._promisesByRequest.set(a,n);const s=[];for(const e of t){this._requestsByChunk.getOrInsertComputed(e,()=>{s.push(e);return[]}).push(a)}if(s.length>0){const e=this.groupChunks(s);for(const t of e){const e=t.beginChunk*this.chunkSize,a=Math.min(t.endChunk*this.chunkSize,this.length);this.sendRequest(e,a).catch(n.reject)}}return n.promise.catch(e=>{if(!this.#D)throw e})}getStream(){return this.stream}requestRange(e,t){t=Math.min(t,this.length);const a=this.getBeginChunk(e),n=this.getEndChunk(t),s=[];for(let e=a;e<n;++e)s.push(e);return this._requestChunks(s)}requestRanges(e=[]){const t=[];for(const a of e){const e=this.getBeginChunk(a.begin),n=this.getEndChunk(a.end);for(let a=e;a<n;++a)t.includes(a)||t.push(a)}t.sort((e,t)=>e-t);return this._requestChunks(t)}groupChunks(e){const t=[];let a=-1,n=-1;for(let s=0,r=e.length;s<r;++s){const r=e[s];a<0&&(a=r);if(n>=0&&n+1!==r){t.push({beginChunk:a,endChunk:n+1});a=r}s+1===e.length&&t.push({beginChunk:a,endChunk:r+1});n=r}return t}onReceiveData(e){const{chunkSize:t,length:a,stream:n}=this,s=e.chunk,r=void 0===e.begin,i=r?n.progressiveDataLength:e.begin,o=i+s.byteLength,l=Math.floor(i/t),f=o<a?Math.floor(o/t):Math.ceil(o/t);r?n.onReceiveProgressiveData(s):n.onReceiveData(i,s);n.isDataLoaded&&this.#N.resolve(n);const c=[];for(let e=l;e<f;++e){const t=this._requestsByChunk.get(e);if(t){this._requestsByChunk.delete(e);for(const a of t){const t=this.#M.get(a);t.has(e)&&t.delete(e);t.size>0||c.push(a)}}}if(!this.disableAutoFetch&&0===this._requestsByChunk.size){let e;if(1===n.numChunksLoaded){const t=n.numChunks-1;n.hasChunk(t)||(e=t)}else e=n.nextEmptyChunk(f);Number.isInteger(e)&&this._requestChunks([e])}for(const e of c){const t=this._promisesByRequest.get(e);this._promisesByRequest.delete(e);t.resolve()}this.msgHandler.send("DocProgress",{loaded:MathClamp(n.numChunksLoaded*t,n.progressiveDataLength,a),total:a})}getBeginChunk(e){return Math.floor(e/this.chunkSize)}getEndChunk(e){return Math.floor((e-1)/this.chunkSize)+1}abort(e){this.#D=!0;this.pdfStream?.cancelAllRequests(e);for(const t of this._promisesByRequest.values())t.reject(e);this.#N.reject(e)}}function convertToRGBA(e){switch(e.kind){case C:return convertBlackAndWhiteToRGBA(e);case F:return function convertRGBToRGBA({src:e,srcPos:t=0,dest:a,destPos:n=0,width:s,height:r}){let i=0;const o=s*r*3,l=o>>2,f=new Uint32Array(e.buffer,t,l),c=FeatureTest.isLittleEndian?4278190080:255;if(FeatureTest.isLittleEndian){for(;i<l-2;i+=3,n+=4){const e=f[i],t=f[i+1],s=f[i+2];a[n]=e|c;a[n+1]=e>>>24|t<<8|c;a[n+2]=t>>>16|s<<16|c;a[n+3]=s>>>8|c}for(let s=t+4*i,r=t+o;s<r;s+=3)a[n++]=e[s]|e[s+1]<<8|e[s+2]<<16|c}else{for(;i<l-2;i+=3,n+=4){const e=f[i],t=f[i+1],s=f[i+2];a[n]=e|c;a[n+1]=e<<24|t>>>8|c;a[n+2]=t<<16|s>>>16|c;a[n+3]=s<<8|c}for(let s=t+4*i,r=t+o;s<r;s+=3)a[n++]=e[s]<<24|e[s+1]<<16|e[s+2]<<8|c}return{srcPos:t+o,destPos:n}}(e)}return null}function convertBlackAndWhiteToRGBA({src:e,srcPos:t=0,dest:a,width:n,height:s,nonBlackColor:r=4294967295,inverseDecode:i=!1}){const o=FeatureTest.isLittleEndian?4278190080:255,[l,f]=i?[r,o]:[o,r],c=n>>3,h=7&n,u=l^f,m=e.length;a=new Uint32Array(a.buffer);let p=0;for(let n=0;n<s;++n){for(const n=t+c;t<n;++t,p+=8){const n=e[t];a[p]=l^-(n>>7&1)&u;a[p+1]=l^-(n>>6&1)&u;a[p+2]=l^-(n>>5&1)&u;a[p+3]=l^-(n>>4&1)&u;a[p+4]=l^-(n>>3&1)&u;a[p+5]=l^-(n>>2&1)&u;a[p+6]=l^-(n>>1&1)&u;a[p+7]=l^-(1&n)&u}if(0===h)continue;const n=t<m?e[t++]:255;for(let e=0;e<h;++e,++p)a[p]=l^-(n>>7-e&1)&u}return{srcPos:t,destPos:p}}class ImageResizer{static#P=2048;static#E=FeatureTest.isImageDecoderSupported;constructor(e,t){this._imgData=e;this._isMask=t}static get canUseImageDecoder(){return shadow(this,"canUseImageDecoder",this.#E?ImageDecoder.isTypeSupported("image/bmp"):Promise.resolve(!1))}static needsToBeResized(e,t){if(e<=this.#P&&t<=this.#P)return!1;const{MAX_DIM:a}=this;if(e>a||t>a)return!0;const n=e*t;if(this._hasMaxArea)return n>this.MAX_AREA;if(n<this.#P**2)return!1;if(this._areGoodDims(e,t)){this.#P=Math.max(this.#P,Math.floor(Math.sqrt(e*t)));return!1}this.#P=this._guessMax(this.#P,a,128,0);return n>(this.MAX_AREA=this.#P**2)}static getReducePower(e,t,a=1/0){if(!Number.isInteger(e)||e<=0||!Number.isInteger(t)||t<=0)return 0;const n=e*t;if(!this.needsToBeResized(e,t))return n>a?Math.ceil(Math.log2(n/a)):0;const{MAX_DIM:s,MAX_AREA:r}=this,i=Math.max(e/s,t/s,Math.sqrt(n/Math.min(a,r)));return Math.max(0,Math.ceil(Math.log2(i)))}static getReducePowerForJPX(e,t,a){return this.getReducePower(e,t,2**30/(4*a))}static get MAX_DIM(){return shadow(this,"MAX_DIM",this._guessMax(2048,32768,0,1))}static get MAX_AREA(){this._hasMaxArea=!0;return shadow(this,"MAX_AREA",this._guessMax(this.#P,this.MAX_DIM,128,0)**2)}static set MAX_AREA(e){if(e>=0){this._hasMaxArea=!0;shadow(this,"MAX_AREA",e)}}static setOptions({canvasMaxAreaInBytes:e=-1,isImageDecoderSupported:t=!1}){this._hasMaxArea||(this.MAX_AREA=e>>2);this.#E=t}static _areGoodDims(e,t){try{const a=new OffscreenCanvas(e,t),n=a.getContext("2d");n.fillRect(0,0,1,1);const s=n.getImageData(0,0,1,1).data[3];a.width=a.height=1;return 0!==s}catch{return!1}}static _guessMax(e,t,a,n){for(;e+a+1<t;){const a=Math.floor((e+t)/2),s=n||a;this._areGoodDims(a,s)?e=a:t=a}return e}static async createImage(e,t=!1){return new ImageResizer(e,t)._createImage()}async _createImage(){const{_imgData:e}=this,{width:t,height:a}=e;if(t*a*4>da){const e=this.#_();if(e)return e}const n=this._encodeBMP();let s,r;if(await ImageResizer.canUseImageDecoder){s=new ImageDecoder({data:n,type:"image/bmp",preferAnimation:!1,transfer:[n.buffer]});r=s.decode().catch(e=>{warn(`BMP image decoding failed: ${e}`);return createImageBitmap(new Blob([this._encodeBMP().buffer],{type:"image/bmp"}))}).finally(()=>{s.close()})}else r=createImageBitmap(new Blob([n.buffer],{type:"image/bmp"}));const{MAX_AREA:i,MAX_DIM:o}=ImageResizer,l=Math.max(t/o,a/o,Math.sqrt(t*a/i)),f=Math.max(l,2),c=Math.round(10*(l+1.25))/10/f,h=Math.floor(Math.log2(c)),u=new Array(h+2).fill(2);u[0]=f;u.splice(-1,1,c/(1<<h));let m=t,p=a;const d=await r;let g=d.image||d;for(const e of u){const t=m,a=p;m=Math.floor(m/e);p=Math.floor(p/e);const n=new OffscreenCanvas(m,p);n.getContext("2d").drawImage(g,0,0,t,a,0,0,m,p);g.close();g=n.transferToImageBitmap()}e.data=null;e.bitmap=g;e.width=m;e.height=p;return e}#_(){const{_imgData:e}=this,{data:t,width:a,height:n,kind:s}=e,r=a*n*4,i=Math.ceil(Math.log2(r/da)),o=a>>i,l=n>>i;let f,c=n;try{f=new Uint8Array(r)}catch{let e=Math.floor(Math.log2(r+1));for(;;)try{f=new Uint8Array(2**e-1);break}catch{e-=1}c=Math.floor((2**e-1)/(4*a));const t=a*c*4;t<f.length&&(f=new Uint8Array(t))}const h=new Uint32Array(f.buffer),u=new Uint32Array(o*l);let m=0,p=0;const d=Math.ceil(n/c),g=n%c===0?n:n%c;for(let e=0;e<d;e++){const n=e<d-1?c:g;({srcPos:m}=convertToRGBA({kind:s,src:t,dest:h,width:a,height:n,inverseDecode:this._isMask,srcPos:m}));for(let e=0,t=n>>i;e<t;e++){const t=h.subarray((e<<i)*a);for(let e=0;e<o;e++)u[p++]=t[e<<i]}}if(ImageResizer.needsToBeResized(o,l)){e.data=u;e.width=o;e.height=l;e.kind=T;return null}const b=new OffscreenCanvas(o,l);b.getContext("2d",{willReadFrequently:!0}).putImageData(new ImageData(new Uint8ClampedArray(u.buffer),o,l),0,0);e.data=null;e.bitmap=b.transferToImageBitmap();e.width=o;e.height=l;return e}_encodeBMP(){const{width:e,height:t,kind:a}=this._imgData;let n,s=this._imgData.data,r=new Uint8Array(0),i=r,o=0;switch(a){case C:{n=1;r=new Uint8Array(this._isMask?[255,255,255,255,0,0,0,0]:[0,0,0,0,255,255,255,255]);const a=e+7>>3,i=a+3&-4;if(a!==i){const e=new Uint8Array(i*t);let n=0;for(let r=0,o=t*a;r<o;r+=a,n+=i)e.set(s.subarray(r,r+a),n);s=e}break}case F:n=24;if(3&e){const a=3*e,n=a+3&-4,r=n-a,i=new Uint8Array(n*t);let o=0;for(let e=0,n=t*a;e<n;e+=a){const t=s.subarray(e,e+a);for(let e=0;e<a;e+=3){i[o++]=t[e+2];i[o++]=t[e+1];i[o++]=t[e]}o+=r}s=i}else for(let e=0,t=s.length;e<t;e+=3){const t=s[e];s[e]=s[e+2];s[e+2]=t}break;case T:n=32;o=3;i=new Uint8Array(68);const a=new DataView(i.buffer);if(FeatureTest.isLittleEndian){a.setUint32(0,255,!0);a.setUint32(4,65280,!0);a.setUint32(8,16711680,!0);a.setUint32(12,4278190080,!0)}else{a.setUint32(0,4278190080,!0);a.setUint32(4,16711680,!0);a.setUint32(8,65280,!0);a.setUint32(12,255,!0)}break;default:throw new Error("invalid format")}let l=0;const f=40+i.length,c=14+f+r.length+s.length,h=new Uint8Array(c),u=new DataView(h.buffer);u.setUint16(l,19778,!0);l+=2;u.setUint32(l,c,!0);l+=4;u.setUint32(l,0,!0);l+=4;u.setUint32(l,14+f+r.length,!0);l+=4;u.setUint32(l,f,!0);l+=4;u.setInt32(l,e,!0);l+=4;u.setInt32(l,-t,!0);l+=4;u.setUint16(l,1,!0);l+=2;u.setUint16(l,n,!0);l+=2;u.setUint32(l,o,!0);l+=4;u.setUint32(l,0,!0);l+=4;u.setInt32(l,0,!0);l+=4;u.setInt32(l,0,!0);l+=4;u.setUint32(l,r.length/4,!0);l+=4;u.setUint32(l,0,!0);l+=4;h.set(i,l);l+=i.length;h.set(r,l);l+=r.length;h.set(s,l);return h}}const Ba=new Uint8Array(0);class DecodeStream extends BaseStream{buffer=Ba;bufferLength=0;eof=!1;minBufferLength=512;pos=0;constructor(e){super();this._rawMinBufferLength=e||0;if(e)for(;this.minBufferLength<e;)this.minBufferLength*=2}readBlock(){unreachable("Abstract method `readBlock` called")}get isEmpty(){for(;!this.eof&&0===this.bufferLength;)this.readBlock();return 0===this.bufferLength}ensureBuffer(e){const t=this.buffer;if(e<=t.byteLength)return t;let a=this.minBufferLength;for(;a<e;)a*=2;const n=new Uint8Array(a);n.set(t);return this.buffer=n}getByte(){const e=this.pos;for(;this.bufferLength<=e;){if(this.eof)return-1;this.readBlock()}return this.buffer[this.pos++]}getBytes(e,t=null){const a=this.pos;let n;if(e){this.ensureBuffer(a+e);n=a+e;for(;!this.eof&&this.bufferLength<n;)this.readBlock(t);const s=this.bufferLength;n>s&&(n=s)}else{for(;!this.eof;)this.readBlock(t);n=this.bufferLength}this.pos=n;return this.buffer.subarray(a,n)}async getImageData(e,t){if(!this.canAsyncDecodeImageFromBuffer)return this.isAsyncDecoder?this.decodeImage(null,e,t):this.getBytes(e,t);const a=await this.stream.asyncGetBytes();return this.decodeImage(a,e,t)}async asyncGetBytesFromDecompressionStream(e){this.stream.reset();const t=this.stream.isAsync?await this.stream.asyncGetBytes():this.stream.getBytes();try{const{readable:a,writable:n}=new DecompressionStream(e),s=n.getWriter();await s.ready;s.write(t).then(async()=>{await s.ready;await s.close()}).catch(()=>{});const r=[];let i=0;for await(const e of a){r.push(e);i+=e.byteLength}const o=new Uint8Array(i);let l=0;for(const e of r){o.set(e,l);l+=e.byteLength}return{decompressed:o,compressed:t}}catch{return{decompressed:null,compressed:t}}}reset(){this.pos=0}makeSubStream(e,t,a=null){if(void 0===t)for(;!this.eof;)this.readBlock();else{const a=e+t;for(;this.bufferLength<=a&&!this.eof;)this.readBlock()}return new Stream(this.buffer,e,t,a)}clone(){for(;!this.eof;)this.readBlock();return new Stream(this.buffer,0,this.bufferLength,this.dict?.clone())}getBaseStreams(){return this.stream?this.stream.getBaseStreams():null}}class StreamsSequenceStream extends DecodeStream{constructor(e,t=null){e=e.filter(e=>e instanceof BaseStream&&!e.isImageStream);let a=0;for(const t of e)a+=t instanceof DecodeStream?t._rawMinBufferLength:t.length;super(a);this.streams=e;this._onError=t}readBlock(){const e=this.streams;if(0===e.length){this.eof=!0;return}const t=e.shift();let a;try{a=t.getBytes()}catch(e){if(this._onError){this._onError(e,t.dict?.objId);return}throw e}const n=this.bufferLength,s=n+a.length;this.ensureBuffer(s).set(a,n);this.bufferLength=s}getBaseStreams(){const e=[];for(const t of this.streams){const a=t.getBaseStreams();a&&e.push(...a)}return e.length>0?e:null}}class ColorSpaceUtils{static parse({cs:e,xref:t,resources:a=null,pdfFunctionFactory:n,globalColorSpaceCache:s,localColorSpaceCache:r,asyncIfNotCached:i=!1}){const o={xref:t,resources:a,pdfFunctionFactory:n,globalColorSpaceCache:s,localColorSpaceCache:r};let l,f,c;if(e instanceof Ref){f=e;const a=s.getByRef(f)||r.getByRef(f);if(a)return a;e=t.fetch(e)}if(e instanceof Name){l=e.name;const t=r.getByName(l);if(t)return t}try{c=this.#z(e,o)}catch(e){if(i&&!(e instanceof MissingDataException))return Promise.reject(e);throw e}if(l||f){r.set(l,f,c);f&&s.set(null,f,c)}return i?Promise.resolve(c):c}static#L(e,t){const{globalColorSpaceCache:a}=t;let n;if(e instanceof Ref){n=e;const t=a.getByRef(n);if(t)return t}const s=this.#z(e,t);n&&a.set(null,n,s);return s}static#z(e,t){const{xref:a,resources:n,pdfFunctionFactory:s,globalColorSpaceCache:r}=t;if((e=a.fetchIfRef(e))instanceof Name)switch(e.name){case"G":case"DeviceGray":return this.gray;case"RGB":case"DeviceRGB":return this.rgb;case"DeviceRGBA":return this.rgba;case"CMYK":case"DeviceCMYK":return this.cmyk;case"Pattern":return new PatternCS(null);default:if(n instanceof Dict){const a=n.get("ColorSpace");if(a instanceof Dict){const n=a.get(e.name);if(n){if(n instanceof Name)return this.#z(n,t);e=n;break}}}warn(`Unrecognized ColorSpace: ${e.name}`);return this.gray}if(Array.isArray(e)){const n=a.fetchIfRef(e[0]).name;let i,o,l,f,c,h;switch(n){case"G":case"DeviceGray":return this.gray;case"RGB":case"DeviceRGB":return this.rgb;case"CMYK":case"DeviceCMYK":return this.cmyk;case"CalGray":i=a.fetchIfRef(e[1]);f=i.getArray("WhitePoint");c=i.getArray("BlackPoint");h=i.get("Gamma");return new CalGrayCS(f,c,h);case"CalRGB":i=a.fetchIfRef(e[1]);f=i.getArray("WhitePoint");c=i.getArray("BlackPoint");h=i.getArray("Gamma");const u=i.getArray("Matrix");return new CalRGBCS(f,c,h,u);case"ICCBased":const m=e[1]instanceof Ref;if(m){const t=r.getByRef(e[1]);if(t)return t}const p=a.fetchIfRef(e[1]),d=p.dict;o=d.get("N");if(IccColorSpace.isUsable)try{const t=new IccColorSpace(p.getBytes(),"ICCBased",o);m&&r.set(null,e[1],t);return t}catch(t){if(t instanceof MissingDataException)throw t;warn(`ICCBased color space (${e[1]}): "${t}".`)}const g=d.getRaw("Alternate");if(g){const e=this.#L(g,t);if(e.numComps===o)return e;warn("ICCBased color space: Ignoring incorrect /Alternate entry.")}if(1===o)return this.gray;if(3===o)return this.rgb;if(4===o)return this.cmyk;break;case"Pattern":l=e[1]||null;l&&=this.#L(l,t);return new PatternCS(l);case"I":case"Indexed":l=this.#L(e[1],t);const b=MathClamp(a.fetchIfRef(e[2]),0,255),w=a.fetchIfRef(e[3]);return new IndexedCS(l,b,w);case"Separation":case"DeviceN":const j=a.fetchIfRef(e[1]);o=Array.isArray(j)?j.length:1;l=this.#L(e[2],t);const k=s.create(e[3]);return new AlternateCS(o,l,k);case"Lab":i=a.fetchIfRef(e[1]);f=i.getArray("WhitePoint");c=i.getArray("BlackPoint");const y=i.getArray("Range");return new LabCS(f,c,y);default:warn(`Unimplemented ColorSpace object: ${n}`);return this.gray}}warn(`Unrecognized ColorSpace object: ${e}`);return this.gray}static get gray(){return shadow(this,"gray",new DeviceGrayCS)}static get rgb(){return shadow(this,"rgb",new DeviceRgbCS)}static get rgba(){return shadow(this,"rgba",new DeviceRgbaCS)}static get cmyk(){if(CmykICCBasedCS.isUsable)try{return shadow(this,"cmyk",new CmykICCBasedCS)}catch{warn("CMYK fallback: DeviceCMYK")}return shadow(this,"cmyk",new DeviceCmykCS)}}class JpegError extends na{constructor(e){super(e,"JpegError")}}class DNLMarkerError extends na{constructor(e,t){super(e,"DNLMarkerError");this.scanLines=t}}class EOIMarkerError extends na{constructor(e){super(e,"EOIMarkerError")}}const Da=new Uint8Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),Ha=4017,Ma=799,Na=3406,Pa=2276,Ea=1567,_a=3784,za=5793,La=2896;function buildHuffmanTable(e,t){let a,n,s=0,r=16;for(;r>0&&!e[r-1];)r--;const i=[{children:[],index:0}];let o,l=i[0];for(a=0;a<r;a++){for(n=0;n<e[a];n++){l=i.pop();l.children[l.index]=t[s];for(;l.index>0;)l=i.pop();l.index++;i.push(l);for(;i.length<=a;){i.push(o={children:[],index:0});l.children[l.index]=o.children;l=o}s++}if(a+1<r){i.push(o={children:[],index:0});l.children[l.index]=o.children;l=o}}return i[0].children}function getBlockBufferOffset(e,t,a){return 64*((e.blocksPerLine+1)*t+a)}function decodeScan(e,t,a,n,s,r,i,o,l,f,c=!1){const h=n.mcusPerLine,u=n.progressive,m=a;let p=0,d=0;function readBit(){if(d>0){d--;return p>>d&1}p=e[a++];if(255===p){const s=e[a++];if(s){if(220===s&&c){a+=2;const e=t.getUint16(a);a+=2;if(e>0&&e!==n.scanLines)throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data",e)}else if(217===s){if(c){const e=j*(8===n.precision?8:0);if(e>0&&Math.round(n.scanLines/e)>=5)throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect `scanLines` parameter",e)}throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data")}throw new JpegError(`unexpected marker ${(p<<8|s).toString(16)}`)}}d=7;return p>>>7}function decodeHuffman(e){let t=e;for(;;){t=t[readBit()];switch(typeof t){case"number":return t;case"object":continue}throw new JpegError("invalid huffman sequence")}}function receive(e){let t=0;for(;e>0;){t=t<<1|readBit();e--}return t}function receiveAndExtend(e){if(1===e)return 1===readBit()?1:-1;const t=receive(e);return t>=1<<e-1?t:t+(-1<<e)+1}let g=0;let b,w=0;let j=0;function decodeMcu(e,t,a,n,s){const r=a%h;j=(a/h|0)*e.v+n;const i=r*e.h+s;t(e,getBlockBufferOffset(e,j,i))}function decodeBlock(e,t,a){j=a/e.blocksPerLine|0;const n=a%e.blocksPerLine;t(e,getBlockBufferOffset(e,j,n))}const k=s.length;let y,q,v,S,x,C;C=u?0===i?0===l?function decodeDCFirst(e,t){const a=decodeHuffman(e.huffmanTableDC),n=0===a?0:receiveAndExtend(a)<<f;e.blockData[t]=e.pred+=n}:function decodeDCSuccessive(e,t){e.blockData[t]|=readBit()<<f}:0===l?function decodeACFirst(e,t){if(g>0){g--;return}let a=i;const n=o;for(;a<=n;){const n=decodeHuffman(e.huffmanTableAC),s=15&n,r=n>>4;if(0===s){if(r<15){g=receive(r)+(1<<r)-1;break}a+=16;continue}a+=r;const i=Da[a];e.blockData[t+i]=receiveAndExtend(s)*(1<<f);a++}}:function decodeACSuccessive(e,t){let a=i;const n=o;let s,r,l=0;for(;a<=n;){const n=t+Da[a],i=e.blockData[n]<0?-1:1;switch(w){case 0:r=decodeHuffman(e.huffmanTableAC);s=15&r;l=r>>4;if(0===s)if(l<15){g=receive(l)+(1<<l);w=4}else{l=16;w=1}else{if(1!==s)throw new JpegError("invalid ACn encoding");b=receiveAndExtend(s);w=l?2:3}continue;case 1:case 2:if(e.blockData[n])e.blockData[n]+=i*(readBit()<<f);else{l--;0===l&&(w=2===w?3:0)}break;case 3:if(e.blockData[n])e.blockData[n]+=i*(readBit()<<f);else{e.blockData[n]=b<<f;w=0}break;case 4:e.blockData[n]&&(e.blockData[n]+=i*(readBit()<<f))}a++}if(4===w){g--;0===g&&(w=0)}}:function decodeBaseline(e,t){const a=decodeHuffman(e.huffmanTableDC),n=0===a?0:receiveAndExtend(a);e.blockData[t]=e.pred+=n;let s=1;for(;s<64;){const a=decodeHuffman(e.huffmanTableAC),n=15&a,r=a>>4;if(0===n){if(r<15)break;s+=16;continue}s+=r;const i=Da[s];e.blockData[t+i]=receiveAndExtend(n);s++}};let F,T=0;const R=1===k?s[0].blocksPerLine*s[0].blocksPerColumn:h*n.mcusPerColumn;let O,D;for(;T<=R;){const n=r?Math.min(R-T,r):R;if(n>0){for(q=0;q<k;q++)s[q].pred=0;g=0;if(1===k){y=s[0];for(x=0;x<n;x++){decodeBlock(y,C,T);T++}}else for(x=0;x<n;x++){for(q=0;q<k;q++){y=s[q];O=y.h;D=y.v;for(v=0;v<D;v++)for(S=0;S<O;S++)decodeMcu(y,C,T,v,S)}T++}}d=0;F=findNextFileMarker(e,t,a);if(!F)break;if(F.invalid){warn(`decodeScan - ${n>0?"unexpected":"excessive"} MCU data, current marker is: ${F.invalid}`);a=F.offset}if(!(F.marker>=65488&&F.marker<=65495))break;a+=2}return a-m}function quantizeAndInverse(e,t,a){const n=e.quantizationTable,s=e.blockData;let r,i,o,l,f,c,h,u,m,p,d,g,b,w,j,k,y;if(!n)throw new JpegError("missing required Quantization Table.");for(let e=0;e<64;e+=8){m=s[t+e];p=s[t+e+1];d=s[t+e+2];g=s[t+e+3];b=s[t+e+4];w=s[t+e+5];j=s[t+e+6];k=s[t+e+7];m*=n[e];if(0!==(p|d|g|b|w|j|k)){p*=n[e+1];d*=n[e+2];g*=n[e+3];b*=n[e+4];w*=n[e+5];j*=n[e+6];k*=n[e+7];r=za*m+128>>8;i=za*b+128>>8;o=d;l=j;f=La*(p-k)+128>>8;u=La*(p+k)+128>>8;c=g<<4;h=w<<4;r=r+i+1>>1;i=r-i;y=o*_a+l*Ea+128>>8;o=o*Ea-l*_a+128>>8;l=y;f=f+h+1>>1;h=f-h;u=u+c+1>>1;c=u-c;r=r+l+1>>1;l=r-l;i=i+o+1>>1;o=i-o;y=f*Pa+u*Na+2048>>12;f=f*Na-u*Pa+2048>>12;u=y;y=c*Ma+h*Ha+2048>>12;c=c*Ha-h*Ma+2048>>12;h=y;a[e]=r+u;a[e+7]=r-u;a[e+1]=i+h;a[e+6]=i-h;a[e+2]=o+c;a[e+5]=o-c;a[e+3]=l+f;a[e+4]=l-f}else{y=za*m+512>>10;a[e]=y;a[e+1]=y;a[e+2]=y;a[e+3]=y;a[e+4]=y;a[e+5]=y;a[e+6]=y;a[e+7]=y}}for(let e=0;e<8;++e){m=a[e];p=a[e+8];d=a[e+16];g=a[e+24];b=a[e+32];w=a[e+40];j=a[e+48];k=a[e+56];if(0!==(p|d|g|b|w|j|k)){r=za*m+2048>>12;i=za*b+2048>>12;o=d;l=j;f=La*(p-k)+2048>>12;u=La*(p+k)+2048>>12;c=g;h=w;r=4112+(r+i+1>>1);i=r-i;y=o*_a+l*Ea+2048>>12;o=o*Ea-l*_a+2048>>12;l=y;f=f+h+1>>1;h=f-h;u=u+c+1>>1;c=u-c;r=r+l+1>>1;l=r-l;i=i+o+1>>1;o=i-o;y=f*Pa+u*Na+2048>>12;f=f*Na-u*Pa+2048>>12;u=y;y=c*Ma+h*Ha+2048>>12;c=c*Ha-h*Ma+2048>>12;h=y;m=r+u;k=r-u;p=i+h;j=i-h;d=o+c;w=o-c;g=l+f;b=l-f;m<16?m=0:m>=4080?m=255:m>>=4;p<16?p=0:p>=4080?p=255:p>>=4;d<16?d=0:d>=4080?d=255:d>>=4;g<16?g=0:g>=4080?g=255:g>>=4;b<16?b=0:b>=4080?b=255:b>>=4;w<16?w=0:w>=4080?w=255:w>>=4;j<16?j=0:j>=4080?j=255:j>>=4;k<16?k=0:k>=4080?k=255:k>>=4;s[t+e]=m;s[t+e+8]=p;s[t+e+16]=d;s[t+e+24]=g;s[t+e+32]=b;s[t+e+40]=w;s[t+e+48]=j;s[t+e+56]=k}else{y=za*m+8192>>14;y=y<-2040?0:y>=2024?255:y+2056>>4;s[t+e]=y;s[t+e+8]=y;s[t+e+16]=y;s[t+e+24]=y;s[t+e+32]=y;s[t+e+40]=y;s[t+e+48]=y;s[t+e+56]=y}}}function buildComponentData(e,t){const a=t.blocksPerLine,n=t.blocksPerColumn,s=new Int16Array(64);for(let e=0;e<n;e++)for(let n=0;n<a;n++){quantizeAndInverse(t,getBlockBufferOffset(t,e,n),s)}return t.blockData}function findNextFileMarker(e,t,a,n=a){const s=e.length-1;let r=n<a?n:a;if(a>=s)return null;const i=t.getUint16(a);if(i>=65472&&i<=65534)return{invalid:null,marker:i,offset:a};let o=t.getUint16(r);for(;!(o>=65472&&o<=65534);){if(++r>=s)return null;o=t.getUint16(r)}return{invalid:i.toString(16),marker:o,offset:r}}function prepareComponents(e){const t=Math.ceil(e.samplesPerLine/8/e.maxH),a=Math.ceil(e.scanLines/8/e.maxV);for(const n of e.components){const s=Math.ceil(Math.ceil(e.samplesPerLine/8)*n.h/e.maxH),r=Math.ceil(Math.ceil(e.scanLines/8)*n.v/e.maxV),i=t*n.h,o=64*(a*n.v)*(i+1);n.blockData=new Int16Array(o);n.blocksPerLine=s;n.blocksPerColumn=r}e.mcusPerLine=t;e.mcusPerColumn=a}function readDataBlock(e,t,a){const n=t.getUint16(a);let s=(a+=2)+n-2;const r=findNextFileMarker(e,t,s,a);if(r?.invalid){warn("readDataBlock - incorrect length, current marker is: "+r.invalid);s=r.offset}const i=e.subarray(a,s);return{appData:i,oldOffset:a,newOffset:a+i.length}}function skipData(e,t,a){const n=t.getUint16(a),s=(a+=2)+n-2,r=findNextFileMarker(e,t,s,a);return r?.invalid?r.offset:s}class JpegImage{constructor(e){this._colorTransform=e?.colorTransform??-1}static canUseImageDecoder(e,t=-1){const a=new DataView(e.buffer,e.byteOffset,e.byteLength),n={width:0,height:0,exifStart:0,exifEnd:0};let s=0,r=null,i=a.getUint16(s);s+=2;if(65496!==i)throw new JpegError("SOI not found");i=a.getUint16(s);s+=2;e:for(;65497!==i;){switch(i){case 65505:const{appData:t,oldOffset:o,newOffset:l}=readDataBlock(e,a,s);s=l;if(69===t[0]&&120===t[1]&&105===t[2]&&102===t[3]&&0===t[4]&&0===t[5]){if(n.exifStart)throw new JpegError("Duplicate EXIF-blocks found.");n.exifStart=o+6;n.exifEnd=l}i=a.getUint16(s);s+=2;continue;case 65472:case 65473:case 65474:n.height=a.getUint16(s+3);n.width=a.getUint16(s+5);r=e[s+7];break e;case 65535:255!==e[s]&&s--}s=skipData(e,a,s);i=a.getUint16(s);s+=2}return 4===r||3===r&&0===t?null:n}parse(e,{dnlScanLines:t=null}={}){const a=new DataView(e.buffer,e.byteOffset,e.byteLength),n=e.length-1;let s,r,i=0,o=null,l=null,f=0;const c=[],h=[],u=[];let m=a.getUint16(i);i+=2;if(65496!==m)throw new JpegError("SOI not found");m=a.getUint16(i);i+=2;e:for(;65497!==m;){let p,d,g;switch(m){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:const{appData:b,newOffset:w}=readDataBlock(e,a,i);i=w;65504===m&&74===b[0]&&70===b[1]&&73===b[2]&&70===b[3]&&0===b[4]&&(o={version:{major:b[5],minor:b[6]},densityUnits:b[7],xDensity:b[8]<<8|b[9],yDensity:b[10]<<8|b[11],thumbWidth:b[12],thumbHeight:b[13],thumbData:b.subarray(14,14+3*b[12]*b[13])});65518===m&&65===b[0]&&100===b[1]&&111===b[2]&&98===b[3]&&101===b[4]&&(l={version:b[5]<<8|b[6],flags0:b[7]<<8|b[8],flags1:b[9]<<8|b[10],transformCode:b[11]});break;case 65499:const j=a.getUint16(i);i+=2;const k=j+i-2;let y;for(;i<k;){const t=e[i++],n=new Uint16Array(64);if(t>>4){if(t>>4!=1)throw new JpegError("DQT - invalid table spec");for(d=0;d<64;d++){y=Da[d];n[y]=a.getUint16(i);i+=2}}else for(d=0;d<64;d++){y=Da[d];n[y]=e[i++]}c[15&t]=n}break;case 65472:case 65473:case 65474:if(s)throw new JpegError("Only single frame JPEGs supported");i+=2;s={};s.extended=65473===m;s.progressive=65474===m;s.precision=e[i++];const q=a.getUint16(i);i+=2;s.scanLines=t||q;s.samplesPerLine=a.getUint16(i);i+=2;s.components=[];s.componentIds={};const v=e[i++];let S=0,x=0;for(p=0;p<v;p++){const t=e[i],a=e[i+1]>>4,n=15&e[i+1];S<a&&(S=a);x<n&&(x=n);const r=e[i+2];g=s.components.push({h:a,v:n,quantizationId:r,quantizationTable:null});s.componentIds[t]=g-1;i+=3}s.maxH=S;s.maxV=x;prepareComponents(s);break;case 65476:const C=a.getUint16(i);i+=2;for(p=2;p<C;){const t=e[i++],a=new Uint8Array(16);let n=0;for(d=0;d<16;d++,i++)n+=a[d]=e[i];const s=new Uint8Array(n);for(d=0;d<n;d++,i++)s[d]=e[i];p+=17+n;(t>>4?h:u)[15&t]=buildHuffmanTable(a,s)}break;case 65501:i+=2;r=a.getUint16(i);i+=2;break;case 65498:const F=1===++f&&!t;i+=2;const T=e[i++],R=[];for(p=0;p<T;p++){const t=e[i++],a=s.componentIds[t],n=s.components[a];n.index=t;const r=e[i++];n.huffmanTableDC=u[r>>4];n.huffmanTableAC=h[15&r];R.push(n)}const O=e[i++],D=e[i++],H=e[i++];try{i+=decodeScan(e,a,i,s,R,r,O,D,H>>4,15&H,F)}catch(t){if(t instanceof DNLMarkerError){warn(`${t.message} -- attempting to re-parse the JPEG image.`);return this.parse(e,{dnlScanLines:t.scanLines})}if(t instanceof EOIMarkerError){warn(`${t.message} -- ignoring the rest of the image data.`);break e}throw t}break;case 65500:i+=4;break;case 65535:255!==e[i]&&i--;break;default:const M=findNextFileMarker(e,a,i-2,i-3);if(M?.invalid){warn("JpegImage.parse - unexpected data, current marker is: "+M.invalid);i=M.offset;break}if(!M||i>=n){warn("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).");break e}throw new JpegError("JpegImage.parse - unknown marker: "+m.toString(16))}if(i<n){m=a.getUint16(i);i+=2}else m=0}if(!s)throw new JpegError("JpegImage.parse - no frame data found.");this.width=s.samplesPerLine;this.height=s.scanLines;this.jfif=o;this.adobe=l;this.components=[];for(const e of s.components){const t=c[e.quantizationId];t&&(e.quantizationTable=t);this.components.push({index:e.index,output:buildComponentData(0,e),scaleX:e.h/s.maxH,scaleY:e.v/s.maxV,blocksPerLine:e.blocksPerLine,blocksPerColumn:e.blocksPerColumn})}this.numComponents=this.components.length}#U(e,t){const a=this.width/e,n=this.height/t;let s,r,i,o,l,f,c,h,u=0;const m=this.components.length,p=new Uint8ClampedArray(e*t*m),d=new Uint32Array(e),g=4294967288;let b;for(c=0;c<m;c++){s=this.components[c];r=s.scaleX*a;i=s.scaleY*n;u=c;const w=s.output;o=s.blocksPerLine+1<<3;if(r!==b){for(l=0;l<e;l++){h=0|l*r;d[l]=(h&g)<<3|7&h}b=r}for(f=0;f<t;f++){h=0|f*i;const t=o*(h&g)|(7&h)<<3;for(l=0;l<e;l++){p[u]=w[t+d[l]];u+=m}}}return p}get _isColorConversionNeeded(){return this.adobe?!!this.adobe.transformCode:3===this.numComponents?0!==this._colorTransform&&(82!==this.components[0].index||71!==this.components[1].index||66!==this.components[2].index):1===this._colorTransform}_convertYccToRgb(e){let t,a,n;for(let s=0,r=e.length;s<r;s+=3){t=e[s];a=e[s+1];n=e[s+2];e[s]=t-179.456+1.402*n;e[s+1]=t+135.459-.344*a-.714*n;e[s+2]=t-226.816+1.772*a}return e}_convertYccToRgba(e,t){for(let a=0,n=0,s=e.length;a<s;a+=3,n+=4){const s=e[a],r=e[a+1],i=e[a+2];t[n]=s-179.456+1.402*i;t[n+1]=s+135.459-.344*r-.714*i;t[n+2]=s-226.816+1.772*r;t[n+3]=255}return t}_convertYcckToRgb(e){this._convertYcckToCmyk(e);return this._convertCmykToRgb(e)}_convertYcckToRgba(e){this._convertYcckToCmyk(e);return this._convertCmykToRgba(e)}_convertYcckToCmyk(e){let t,a,n;for(let s=0,r=e.length;s<r;s+=4){t=e[s];a=e[s+1];n=e[s+2];e[s]=434.456-t-1.402*n;e[s+1]=119.541-t+.344*a+.714*n;e[s+2]=481.816-t-1.772*a}return e}_convertCmykToRgb(e){const t=e.length/4;ColorSpaceUtils.cmyk.getRgbBuffer(e,0,t,e,0,8,0);return e.subarray(0,3*t)}_convertCmykToRgba(e){ColorSpaceUtils.cmyk.getRgbBuffer(e,0,e.length/4,e,0,8,1);if(ColorSpaceUtils.cmyk instanceof DeviceCmykCS)for(let t=3,a=e.length;t<a;t+=4)e[t]=255;return e}getData({width:e,height:t,forceRGBA:a=!1,forceRGB:n=!1}){if(this.numComponents>4)throw new JpegError("Unsupported color mode");const s=this.#U(e,t);if(1===this.numComponents&&(a||n)){const e=s.length*(a?4:3),t=new Uint8ClampedArray(e);if(a)!function grayToRGBA(e,t){if(FeatureTest.isLittleEndian)for(let a=0,n=e.length;a<n;a++)t[a]=65793*e[a]|4278190080;else for(let a=0,n=e.length;a<n;a++)t[a]=16843008*e[a]|255}(s,new Uint32Array(t.buffer));else{let e=0;for(const a of s){t[e++]=a;t[e++]=a;t[e++]=a}}return t}if(3===this.numComponents&&this._isColorConversionNeeded){if(a){const e=new Uint8ClampedArray(s.length/3*4);return this._convertYccToRgba(s,e)}return this._convertYccToRgb(s)}if(4===this.numComponents){if(this._isColorConversionNeeded)return a?this._convertYcckToRgba(s):n?this._convertYcckToRgb(s):this._convertYcckToCmyk(s);if(a)return this._convertCmykToRgba(s);if(n)return this._convertCmykToRgb(s)}return s}}class JpegStream extends DecodeStream{static#E=FeatureTest.isImageDecoderSupported;constructor(e,t,a){super(t);this.stream=e;this.dict=e.dict;this.maybeLength=t;this.params=a}static get canUseImageDecoder(){return shadow(this,"canUseImageDecoder",this.#E?ImageDecoder.isTypeSupported("image/jpeg"):Promise.resolve(!1))}static setOptions({isImageDecoderSupported:e=!1}){this.#E=e}get bytes(){return shadow(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(e){}readBlock(){this.decodeImage()}get jpegOptions(){const e={colorTransform:void 0};if(this.params instanceof Dict){const t=this.params.get("ColorTransform");Number.isInteger(t)&&(e.colorTransform=t)}return shadow(this,"jpegOptions",e)}#W(e){for(let t=0,a=e.length-1;t<a;t++)if(255===e[t]&&216===e[t+1]){t>0&&(e=e.subarray(t));break}return e}decodeImage(e){if(this.eof)return this.buffer;e=this.#W(e||this.bytes);const t=new JpegImage(this.jpegOptions);t.parse(e);const a=t.getData({width:this.drawWidth,height:this.drawHeight,forceRGBA:this.forceRGBA,forceRGB:this.forceRGB});this.buffer=a;this.bufferLength=a.length;this.eof=!0;return this.buffer}get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync}async getTransferableImage(e,t){if(!await JpegStream.canUseImageDecoder)return null;const a=this.jpegOptions;let n;try{const s=this.canAsyncDecodeImageFromBuffer&&await this.stream.asyncGetBytes()||this.bytes;if(!s)return null;let r=this.#W(s);const i=JpegImage.canUseImageDecoder(r,a.colorTransform);if(!i)return null;const{width:o,height:l}=i,f=ImageResizer.getReducePower(o,l);if((o!==e||l!==t)&&(f||!l))return null;if(i.exifStart){r=r.slice();r.fill(0,i.exifStart,i.exifEnd)}const c={data:r,type:"image/jpeg",preferAnimation:!1};if(f){const e=2**f;c.desiredWidth=Math.ceil(o/e);c.desiredHeight=Math.ceil(l/e)}n=new ImageDecoder(c);return(await n.decode()).image}catch(e){warn(`getTransferableImage - failed: "${e}".`);return null}finally{n?.close()}}get isImageStream(){return!0}}function addState(e,t,a,n,s){let r=e;for(let e=0,a=t.length-1;e<a;e++){const a=t[e];r=r[a]||=[]}r[t.at(-1)]={checkFn:a,iterateFn:n,processFn:s}}const Ua=[];addState(Ua,[ye,ve,_t,qe],null,function iterateInlineImageGroup(e,t){const a=e.fnArray,n=(t-(e.iCurr-3))%4;switch(n){case 0:return a[t]===ye;case 1:return a[t]===ve;case 2:return a[t]===_t;case 3:return a[t]===qe}throw new Error(`iterateInlineImageGroup - invalid pos: ${n}`)},function foundInlineImageGroup(e,t){const a=e.fnArray,n=e.argsArray,s=e.iCurr,r=s-3,i=s-2,o=s-1,l=Math.min(Math.floor((t-r)/4),200);if(l<10)return t-(t-r)%4;let f=0;const c=[];let h=0,u=1,m=1;for(let e=0;e<l;e++){const t=n[i+(e<<2)],a=n[o+(e<<2)][0];if(u+a.width>1e3){f=Math.max(f,u);m+=h+2;u=0;h=0}c.push({transform:t,x:u,y:m,w:a.width,h:a.height});u+=a.width+2;h=Math.max(h,a.height)}const p=Math.max(f,u)+1,d=m+h+1,g=new Uint8Array(p*d*4),b=p<<2;for(let e=0;e<l;e++){const t=n[o+(e<<2)][0].data,a=c[e].w<<2;let s=0,r=c[e].x+c[e].y*p<<2;g.set(t.subarray(0,a),r-b);for(let n=0,i=c[e].h;n<i;n++){g.set(t.subarray(s,s+a),r);s+=a;r+=b}g.set(t.subarray(s-a,s),r);for(;r>=0;){t[r-4]=t[r];t[r-3]=t[r+1];t[r-2]=t[r+2];t[r-1]=t[r+3];t[r+a]=t[r+a-4];t[r+a+1]=t[r+a-3];t[r+a+2]=t[r+a-2];t[r+a+3]=t[r+a-1];r-=b}}const w={width:p,height:d};if(e.isOffscreenCanvasSupported){const e=new OffscreenCanvas(p,d);e.getContext("2d").putImageData(new ImageData(new Uint8ClampedArray(g.buffer),p,d),0,0);w.bitmap=e.transferToImageBitmap();w.data=null}else{w.kind=T;w.data=g}a.splice(r,4*l,zt);n.splice(r,4*l,[w,c]);return r+1});addState(Ua,[ye,ve,Nt,qe],null,function iterateImageMaskGroup(e,t){const a=e.fnArray,n=(t-(e.iCurr-3))%4;switch(n){case 0:return a[t]===ye;case 1:return a[t]===ve;case 2:return a[t]===Nt;case 3:return a[t]===qe}throw new Error(`iterateImageMaskGroup - invalid pos: ${n}`)},function foundImageMaskGroup(e,t){const a=e.fnArray,n=e.argsArray,s=e.iCurr,r=s-3,i=s-2,o=s-1;let l=Math.floor((t-r)/4);if(l<10)return t-(t-r)%4;let f,c,h=!1;const u=n[o][0],m=n[i][0],p=n[i][1],d=n[i][2],g=n[i][3];if(p===d){h=!0;f=i+4;let e=o+4;for(let t=1;t<l;t++,f+=4,e+=4){c=n[f];if(n[e][0]!==u||c[0]!==m||c[1]!==p||c[2]!==d||c[3]!==g){t<10?h=!1:l=t;break}}}if(h){l=Math.min(l,1e3);const e=new Float32Array(2*l);f=i;for(let t=0;t<l;t++,f+=4){c=n[f];e[t<<1]=c[4];e[1+(t<<1)]=c[5]}a.splice(r,4*l,Ut);n.splice(r,4*l,[u,m,p,d,g,e])}else{l=Math.min(l,100);const e=[];for(let t=0;t<l;t++){c=n[i+(t<<2)];const a=n[o+(t<<2)][0];e.push({data:a.data,width:a.width,height:a.height,interpolate:a.interpolate,count:a.count,transform:c})}a.splice(r,4*l,Pt);n.splice(r,4*l,[e])}return r+1});addState(Ua,[ye,ve,Et,qe],function(e){const t=e.argsArray,a=e.iCurr-2;return 0===t[a][1]&&0===t[a][2]},function iterateImageGroup(e,t){const a=e.fnArray,n=e.argsArray,s=(t-(e.iCurr-3))%4;switch(s){case 0:return a[t]===ye;case 1:if(a[t]!==ve)return!1;const s=e.iCurr-2,r=n[s][0],i=n[s][3];return n[t][0]===r&&0===n[t][1]&&0===n[t][2]&&n[t][3]===i;case 2:if(a[t]!==Et)return!1;const o=n[e.iCurr-1][0];return n[t][0]===o;case 3:return a[t]===qe}throw new Error(`iterateImageGroup - invalid pos: ${s}`)},function(e,t){const a=e.fnArray,n=e.argsArray,s=e.iCurr,r=s-3,i=s-2,o=n[s-1][0],l=n[i][0],f=n[i][3],c=Math.min(Math.floor((t-r)/4),1e3);if(c<3)return t-(t-r)%4;const h=new Float32Array(2*c);let u=i;for(let e=0;e<c;e++,u+=4){const t=n[u];h[e<<1]=t[4];h[1+(e<<1)]=t[5]}const m=[o,l,f,h];a.splice(r,4*c,Lt);n.splice(r,4*c,m);return r+1});addState(Ua,[Le,Ve,Ze,tt,Ue],null,function iterateShowTextGroup(e,t){const a=e.fnArray,n=e.argsArray,s=(t-(e.iCurr-4))%5;switch(s){case 0:return a[t]===Le;case 1:return a[t]===Ve;case 2:return a[t]===Ze;case 3:if(a[t]!==tt)return!1;const s=e.iCurr-3,r=n[s][0],i=n[s][1];return n[t][0]===r&&n[t][1]===i;case 4:return a[t]===Ue}throw new Error(`iterateShowTextGroup - invalid pos: ${s}`)},function(e,t){const a=e.fnArray,n=e.argsArray,s=e.iCurr,r=s-4,i=s-3,o=s-2,l=s-1,f=s,c=n[i][0],h=n[i][1];let u=Math.min(Math.floor((t-r)/5),1e3);if(u<3)return t-(t-r)%5;let m=r;if(r>=4&&a[r-4]===a[i]&&a[r-3]===a[o]&&a[r-2]===a[l]&&a[r-1]===a[f]&&n[r-4][0]===c&&n[r-4][1]===h){u++;m-=5}let p=m+4;for(let e=1;e<u;e++){a.splice(p,3);n.splice(p,3);p+=2}return p+1});addState(Ua,[ye,ve,Xt,qe],e=>{const t=e.argsArray,a=t[e.iCurr-1][0];if(a!==Re&&a!==Oe&&a!==He&&a!==Me&&a!==Ne&&a!==Pe)return!0;const n=t[e.iCurr-2];return 1===n[0]&&0===n[1]&&0===n[2]&&1===n[3]},()=>!1,(e,t)=>{const{fnArray:n,argsArray:s}=e,r=e.iCurr,i=r-3,o=r-2,l=s[r-1],f=s[o],[,[c],h]=l;if(h){const e=a.slice();Util.axialAlignedBoundingBox(h,f,e);h.set(e);for(let e=0,t=c.length;e<t;)switch(c[e++]){case $t:case Yt:Util.applyTransform(c,f,e);e+=2;break;case Jt:Util.applyTransformToBezier(c,f,e);e+=6}}n.splice(i,4,Xt);s.splice(i,4,l);return i+1});class NullOptimizer{constructor(e){this.queue=e}_optimize(){}push(e,t){this.queue.fnArray.push(e);this.queue.argsArray.push(t);this._optimize()}flush(){}reset(){}}class QueueOptimizer extends NullOptimizer{constructor(e){super(e);this.state=null;this.context={iCurr:0,fnArray:e.fnArray,argsArray:e.argsArray,isOffscreenCanvasSupported:OperatorList.isOffscreenCanvasSupported};this.match=null;this.lastProcessed=0}_optimize(){const e=this.queue.fnArray;let t=this.lastProcessed,a=e.length,n=this.state,s=this.match;if(!n&&!s&&t+1===a&&!Ua[e[t]]){this.lastProcessed=a;return}const r=this.context;for(;t<a;){if(s){if((0,s.iterateFn)(r,t)){t++;continue}t=(0,s.processFn)(r,t+1);a=e.length;s=null;n=null;if(t>=a)break}n=(n||Ua)[e[t]];if(n&&!Array.isArray(n)){r.iCurr=t;t++;if(!n.checkFn||(0,n.checkFn)(r)){s=n;n=null}else n=null}else t++}this.state=n;this.match=s;this.lastProcessed=t}flush(){for(;this.match;){const e=this.queue.fnArray.length;this.lastProcessed=(0,this.match.processFn)(this.context,e);this.match=null;this.state=null;this._optimize()}}reset(){this.state=null;this.match=null;this.lastProcessed=0}}class OperatorList{static CHUNK_SIZE=1e3;static CHUNK_SIZE_ABOUT=this.CHUNK_SIZE-5;static isOffscreenCanvasSupported=!1;constructor(e=0,t){this._streamSink=t;this.fnArray=[];this.argsArray=[];this.optimizer=!t||e&m?new NullOptimizer(this):new QueueOptimizer(this);this.dependencies=new Set;this.weight=0;this._resolved=t?null:Promise.resolve()}static setOptions({isOffscreenCanvasSupported:e}){this.isOffscreenCanvasSupported=e}get length(){return this.argsArray.length}get ready(){return this._resolved||this._streamSink.ready}addOp(e,t){this.optimizer.push(e,t);this.weight++;this._streamSink&&(this.weight>=OperatorList.CHUNK_SIZE||this.weight>=OperatorList.CHUNK_SIZE_ABOUT&&(e===qe||e===Ue))&&this.flush()}addImageOps(e,t,a,n=!1){if(n){this.addOp(ye);this.addOp(ke,[[["SMask",!1]]])}void 0!==a&&this.addOp(Ct,["OC",a]);this.addOp(e,t);void 0!==a&&this.addOp(It,[]);n&&this.addOp(qe)}addDependency(e){if(!this.dependencies.has(e)){this.dependencies.add(e);this.addOp(ue,[e])}}addDependencies(e){for(const t of e)this.addDependency(t)}addOpList(e){if(e instanceof OperatorList){for(const t of e.dependencies)this.dependencies.add(t);for(let t=0,a=e.length;t<a;t++)this.addOp(e.fnArray[t],e.argsArray[t])}else warn('addOpList - ignoring invalid "opList" parameter.')}getIR(){return{fnArray:this.fnArray,argsArray:this.argsArray,length:this.length}}get _transfers(){const e=[],{fnArray:t,argsArray:a,length:n}=this;for(let s=0;s<n;s++)switch(t[s]){case _t:case zt:case Nt:{const{bitmap:t,data:n}=a[s][0];(t||n?.buffer)&&e.push(t||n.buffer);break}case Xt:{const[,[t],n]=a[s];t&&e.push(t.buffer,n.buffer);break}case Rt:const[t,n]=a[s];t&&e.push(t.buffer);n&&e.push(n.buffer);break;case Ze:e.push(a[s][0].buffer)}return e}flush(e=!1,t=null){this.optimizer.flush();this._streamSink.enqueue({fnArray:this.fnArray,argsArray:this.argsArray,lastChunk:e,separateAnnots:t,length:this.length},1,this._transfers);this.dependencies.clear();this.fnArray.length=0;this.argsArray.length=0;this.weight=0;this.optimizer.reset()}}class CheckedOperatorList extends OperatorList{needsIsolation=!1;hasSoftMask=!1;addOp(e,t){if(!this.needsIsolation||!this.hasSoftMask)if(e===Bt){this.needsIsolation||=t[0].needsIsolation;this.hasSoftMask||=t[0].hasSoftMask}else if(e===ke)for(const[e,a]of t[0])if("BM"===e&&"source-over"!==a)this.needsIsolation=!0;else if("SMask"===e&&!1!==a){this.needsIsolation=!0;this.hasSoftMask=!0}super.addOp(e,t)}}const Wa=1,Xa=2,Ka=3,Ga=4,Va=5,$a=6,Ya=7;function getColorConversionBatchSize(e,t){return MathClamp(Math.floor(65536/t),1,e)}function parseShadingFunction(e,t,a,n){const s=t.create(e,!0);if(s.numInputs!==a||s.numOutputs!==n)throw new FormatError(`Invalid shading function: expected ${a}-in ${n}-out, got ${s.numInputs}-in ${s.numOutputs}-out.`);return s}class Pattern{static#X=!1;constructor(){unreachable("Cannot initialize Pattern.")}static setOptions({hasGPU:e}){this.#X=e}static parseShading(e,t,a,n,s,r){const i=e instanceof BaseStream?e.dict:e,o=i.get("ShadingType");try{switch(o){case Wa:return new FunctionBasedShading(i,t,a,n,s,r);case Xa:case Ka:return new RadialAxialShading(i,t,a,n,s,r);case Ga:case Va:case $a:case Ya:return new MeshShading(e,t,a,n,s,r);default:throw new FormatError("Unsupported ShadingType: "+o)}}catch(e){if(e instanceof MissingDataException)throw e;warn(e);return new DummyShading}}}class BaseShading{static SMALL_NUMBER=1e-6;getIR(){unreachable("Abstract method `getIR` called.")}}class RadialAxialShading extends BaseShading{constructor(e,t,a,n,s,r){super();this.shadingType=e.get("ShadingType");let i=0;this.shadingType===Xa?i=4:this.shadingType===Ka&&(i=6);this.coordsArr=e.getArray("Coords");if(!isNumberArray(this.coordsArr,i))throw new FormatError("RadialAxialShading: Invalid /Coords array.");const o=ColorSpaceUtils.parse({cs:e.getRaw("CS")||e.getRaw("ColorSpace"),xref:t,resources:a,pdfFunctionFactory:n,globalColorSpaceCache:s,localColorSpaceCache:r});this.bbox=lookupNormalRect(e.getArray("BBox"),null);const l=e.getArray("Domain"),[f,c]=isNumberArray(l,2)?l:[0,1],h=e.getArray("Extend"),[u,m]=function isBooleanArray(e,t){return Array.isArray(e)&&(null===t||e.length===t)&&e.every(e=>"boolean"==typeof e)}(h,2)?h:[!1,!1],p=parseShadingFunction(e.getRaw("Function"),n,1,o.numComps),d=840,g=(c-f)/d,b=this.colorStops=[];if(f>=c||g<=0){info("Bad shading domain.");return}const{numComps:w}=o,j=new Float32Array(1),k=getColorConversionBatchSize(d,w),y=new Float32Array(k*w),q=new Uint8ClampedArray(2520);for(let e=0;e<d;e+=k){const t=Math.min(k,d-e);for(let a=0,n=0;a<t;a++,n+=w){j[0]=f+(e+a)*g;p(j,0,y,n)}o.getRgbItems(y,t,q,3*e,0)}let v=0,S=q[0],x=q[1],C=q[2];b.push([0,Util.makeHexColor(S,x,C)]);let F=1,T=q[3],R=q[4],O=q[5],D=T-S+1,H=R-x+1,M=O-C+1,N=T-S-1,E=R-x-1,_=O-C-1;for(let e=2;e<d;e++){const t=3*e,a=q[t],n=q[t+1],s=q[t+2],r=e-v;D=Math.min(D,(a-S+1)/r);H=Math.min(H,(n-x+1)/r);M=Math.min(M,(s-C+1)/r);N=Math.max(N,(a-S-1)/r);E=Math.max(E,(n-x-1)/r);_=Math.max(_,(s-C-1)/r);if(!(N<=D&&E<=H&&_<=M)){const e=Util.makeHexColor(T,R,O);b.push([F/d,e]);D=a-T+1;H=n-R+1;M=s-O+1;N=a-T-1;E=n-R-1;_=s-O-1;v=F;S=T;x=R;C=O}F=e;T=a;R=n;O=s}b.push([1,Util.makeHexColor(T,R,O)]);const z=e.has("Background")?o.getRgbHex(e.get("Background"),0):"transparent";if(!u){b.unshift([0,z]);b[1][0]+=BaseShading.SMALL_NUMBER}if(!m){b.at(-1)[0]-=BaseShading.SMALL_NUMBER;b.push([1,z])}}getIR(){const{coordsArr:e,shadingType:t}=this;let a,n,s,r,i;if(t===Xa){n=[e[0],e[1]];s=[e[2],e[3]];r=null;i=null;a="axial"}else if(t===Ka){n=[e[0],e[1]];s=[e[3],e[4]];r=e[2];i=e[5];a="radial"}else unreachable(`getPattern type unknown: ${t}`);return["RadialAxial",a,this.bbox,this.colorStops,n,s,r,i]}}function buildMeshVertexData(e,t,a){let n=0;for(const e of a)if(e.type===y)n+=e.coords.length;else if(e.type===q){const t=e.verticesPerRow;n+=(Math.floor(e.coords.length/t)-1)*(t-1)*6}const s=new Float32Array(2*n),r=new Uint8Array(4*n);let i=0,o=0;const addVertex=(a,n)=>{s[i++]=e[2*a];s[i++]=e[2*a+1];r[o++]=t[4*n];r[o++]=t[4*n+1];r[o++]=t[4*n+2];o++};for(const e of a){const t=e.coords,a=e.colors;if(e.type===y)for(let e=0,n=t.length;e<n;e++)addVertex(t[e],a[e]);else if(e.type===q){const n=e.verticesPerRow,s=Math.floor(t.length/n)-1,r=n-1;for(let e=0;e<s;e++){let s=e*n;for(let e=0;e<r;e++,s++){addVertex(t[s],a[s]);addVertex(t[s+1],a[s+1]);addVertex(t[s+n],a[s+n]);addVertex(t[s+n+1],a[s+n+1]);addVertex(t[s+1],a[s+1]);addVertex(t[s+n],a[s+n])}}}}return{posData:s,colData:r,vertexCount:n}}class FunctionBasedShading extends BaseShading{static MAX_STEP_COUNT=512;constructor(e,a,n,s,r,i){super();this.bbox=lookupNormalRect(e.getArray("BBox"),null);const o=ColorSpaceUtils.parse({cs:e.getRaw("CS")||e.getRaw("ColorSpace"),xref:a,resources:n,pdfFunctionFactory:s,globalColorSpaceCache:r,localColorSpaceCache:i});this.background=e.has("Background")?o.getRgb(e.get("Background"),0):null;const l=e.getRaw("Function");if(!l)throw new FormatError("FunctionBasedShading: missing /Function");const f=parseShadingFunction(l,s,2,o.numComps),[c,h,u,m]=lookupRect(e.getArray("Domain"),[0,1,0,1]),p=lookupMatrix(e.getArray("Matrix"),ga);this.bounds=t.slice();Util.axialAlignedBoundingBox([c,u,h,m],p,this.bounds);const d=this.bounds[2]-this.bounds[0],g=this.bounds[3]-this.bounds[1],b=MathClamp(Math.ceil(d),1,FunctionBasedShading.MAX_STEP_COUNT),w=MathClamp(Math.ceil(g),1,FunctionBasedShading.MAX_STEP_COUNT),j=b+1,k=(w+1)*j,y=this.coords=new Float32Array(2*k),v=this.colors=new Uint8ClampedArray(4*k),{numComps:S}=o,x=new Float32Array(2),C=getColorConversionBatchSize(k,S),F=new Float32Array(C*S),T=(h-c)/b,R=(m-u)/w,O=T/2,D=R/2;let H=0,M=0,N=0,E=0;for(let e=0;e<=w;e++){const t=u+R*e;x[1]=e===w?t-D:t;for(let e=0;e<=b;e++){const a=c+T*e;x[0]=e===b?a-O:a;f(x,0,F,M);M+=S;N++;y[H]=a;y[H+1]=t;Util.applyTransform(y,p,H);H+=2;if(N===C){o.getRgbItems(F,N,v,E,1);E+=4*N;M=N=0}}}N>0&&o.getRgbItems(F,N,v,E,1);const _=new Uint32Array(k);for(let e=0;e<k;e++)_[e]=e;this.figures=[{type:q,coords:_,colors:new Uint32Array(_),verticesPerRow:j}]}getIR(){const{posData:e,colData:t,vertexCount:a}=buildMeshVertexData(this.coords,this.colors,this.figures);return["Mesh",Wa,e,t,a,this.bounds,this.bbox,this.background]}}class MeshStreamReader{constructor(e,t){this.stream=e;this.context=t;this.buffer=0;this.bufferLength=0;const a=t.numComps;this.tmpCompsBuf=new Float32Array(a);const n=t.colorSpace.numComps;this.tmpCsCompsBuf=t.colorFn?new Float32Array(n):this.tmpCompsBuf}get hasData(){if(this.stream.end)return this.stream.pos<this.stream.end;if(this.bufferLength>0)return!0;const e=this.stream.getByte();if(e<0)return!1;this.buffer=e;this.bufferLength=8;return!0}readBits(e){const{stream:t}=this;let{buffer:a,bufferLength:n}=this;if(32===e){if(0===n)return t.getInt32()>>>0;a=a<<24|t.getByte()<<16|t.getByte()<<8|t.getByte();const e=t.getByte();this.buffer=e&(1<<n)-1;return(a<<8-n|(255&e)>>n)>>>0}if(8===e&&0===n)return t.getByte();for(;n<e;){a=a<<8|t.getByte();n+=8}n-=e;this.bufferLength=n;this.buffer=a&(1<<n)-1;return a>>n}align(){this.buffer=0;this.bufferLength=0}readFlag(){return this.readBits(this.context.bitsPerFlag)}readCoordinate(){const{bitsPerCoordinate:e,decode:t}=this.context,a=this.readBits(e),n=this.readBits(e),s=e<32?1/((1<<e)-1):2.3283064365386963e-10;return[a*s*(t[1]-t[0])+t[0],n*s*(t[3]-t[2])+t[2]]}readComponents(){const{bitsPerComponent:e,colorFn:t,colorSpace:a,decode:n,numComps:s}=this.context,r=e<32?1/((1<<e)-1):2.3283064365386963e-10,i=this.tmpCompsBuf;for(let t=0,a=4;t<s;t++,a+=2){const s=this.readBits(e);i[t]=s*r*(n[a+1]-n[a])+n[a]}const o=this.tmpCsCompsBuf;t?.(i,0,o,0);return a.getRgb(o,0)}}let Ja=null;function getB(e){return(Ja??=new Map).getOrInsertComputed(e,()=>Array.from({length:e+1},(t,a)=>{const n=a/e,s=1-n;return new Float32Array([s**3,3*n*s**2,3*n**2*s,n**3])}))}class MeshShading extends BaseShading{static MIN_SPLIT_PATCH_CHUNKS_AMOUNT=3;static MAX_SPLIT_PATCH_CHUNKS_AMOUNT=20;static TRIANGLE_DENSITY=20;constructor(e,t,a,n,s,r){super();if(!(e instanceof BaseStream))throw new FormatError("Mesh data is not a stream");const i=e.dict;this.shadingType=i.get("ShadingType");this.bbox=lookupNormalRect(i.getArray("BBox"),null);const o=ColorSpaceUtils.parse({cs:i.getRaw("CS")||i.getRaw("ColorSpace"),xref:t,resources:a,pdfFunctionFactory:n,globalColorSpaceCache:s,localColorSpaceCache:r});this.background=i.has("Background")?o.getRgb(i.get("Background"),0):null;const l=i.getRaw("Function"),f=l?parseShadingFunction(l,n,1,o.numComps):null;this.coords=[];this.colors=[];this.figures=[];const c={bitsPerCoordinate:i.get("BitsPerCoordinate"),bitsPerComponent:i.get("BitsPerComponent"),bitsPerFlag:i.get("BitsPerFlag"),decode:i.getArray("Decode"),colorFn:f,colorSpace:o,numComps:f?1:o.numComps},h=new MeshStreamReader(e,c);let u=!1;switch(this.shadingType){case Ga:this._decodeType4Shading(h);break;case Va:const e=0|i.get("VerticesPerRow");if(e<2)throw new FormatError("Invalid VerticesPerRow");this._decodeType5Shading(h,e);break;case $a:this._decodeType6Shading(h);u=!0;break;case Ya:this._decodeType7Shading(h);u=!0;break;default:unreachable("Unsupported mesh type.")}if(u){this._updateBounds();for(let e=0,t=this.figures.length;e<t;e++)this._buildFigureFromPatch(e)}this._updateBounds();this._packData()}_decodeType4Shading(e){const t=this.coords,a=this.colors,n=[],s=[];let r=0;for(;e.hasData;){const i=e.readFlag(),o=e.readCoordinate(),l=e.readComponents();if(0===r){if(!(0<=i&&i<=2))throw new FormatError("Unknown type4 flag");switch(i){case 0:r=3;break;case 1:s.push(s.at(-2),s.at(-1));r=1;break;case 2:s.push(s.at(-3),s.at(-1));r=1}n.push(i)}s.push(t.length);t.push(o);a.push(l);r--;e.align()}this.figures.push({type:y,coords:new Int32Array(s),colors:new Int32Array(s)})}_decodeType5Shading(e,t){const a=this.coords,n=this.colors,s=[];for(;e.hasData;){const t=e.readCoordinate(),r=e.readComponents();s.push(a.length);a.push(t);n.push(r)}this.figures.push({type:q,coords:new Int32Array(s),colors:new Int32Array(s),verticesPerRow:t})}_decodeType6Shading(e){const t=this.coords,a=this.colors,n=new Int32Array(16),s=new Int32Array(4);for(;e.hasData;){const r=e.readFlag();if(!(0<=r&&r<=3))throw new FormatError("Unknown type6 flag");const i=t.length;for(let a=0,n=0!==r?8:12;a<n;a++)t.push(e.readCoordinate());const o=a.length;for(let t=0,n=0!==r?2:4;t<n;t++)a.push(e.readComponents());let l,f,c,h;switch(r){case 0:n[12]=i+3;n[13]=i+4;n[14]=i+5;n[15]=i+6;n[8]=i+2;n[11]=i+7;n[4]=i+1;n[7]=i+8;n[0]=i;n[1]=i+11;n[2]=i+10;n[3]=i+9;s[2]=o+1;s[3]=o+2;s[0]=o;s[1]=o+3;break;case 1:l=n[12];f=n[13];c=n[14];h=n[15];n[12]=h;n[13]=i+0;n[14]=i+1;n[15]=i+2;n[8]=c;n[11]=i+3;n[4]=f;n[7]=i+4;n[0]=l;n[1]=i+7;n[2]=i+6;n[3]=i+5;l=s[2];f=s[3];s[2]=f;s[3]=o;s[0]=l;s[1]=o+1;break;case 2:l=n[15];f=n[11];n[12]=n[3];n[13]=i+0;n[14]=i+1;n[15]=i+2;n[8]=n[7];n[11]=i+3;n[4]=f;n[7]=i+4;n[0]=l;n[1]=i+7;n[2]=i+6;n[3]=i+5;l=s[3];s[2]=s[1];s[3]=o;s[0]=l;s[1]=o+1;break;case 3:n[12]=n[0];n[13]=i+0;n[14]=i+1;n[15]=i+2;n[8]=n[1];n[11]=i+3;n[4]=n[2];n[7]=i+4;n[0]=n[3];n[1]=i+7;n[2]=i+6;n[3]=i+5;s[2]=s[0];s[3]=o;s[0]=s[1];s[1]=o+1}n[5]=t.length;t.push([(-4*t[n[0]][0]-t[n[15]][0]+6*(t[n[4]][0]+t[n[1]][0])-2*(t[n[12]][0]+t[n[3]][0])+3*(t[n[13]][0]+t[n[7]][0]))/9,(-4*t[n[0]][1]-t[n[15]][1]+6*(t[n[4]][1]+t[n[1]][1])-2*(t[n[12]][1]+t[n[3]][1])+3*(t[n[13]][1]+t[n[7]][1]))/9]);n[6]=t.length;t.push([(-4*t[n[3]][0]-t[n[12]][0]+6*(t[n[2]][0]+t[n[7]][0])-2*(t[n[0]][0]+t[n[15]][0])+3*(t[n[4]][0]+t[n[14]][0]))/9,(-4*t[n[3]][1]-t[n[12]][1]+6*(t[n[2]][1]+t[n[7]][1])-2*(t[n[0]][1]+t[n[15]][1])+3*(t[n[4]][1]+t[n[14]][1]))/9]);n[9]=t.length;t.push([(-4*t[n[12]][0]-t[n[3]][0]+6*(t[n[8]][0]+t[n[13]][0])-2*(t[n[0]][0]+t[n[15]][0])+3*(t[n[11]][0]+t[n[1]][0]))/9,(-4*t[n[12]][1]-t[n[3]][1]+6*(t[n[8]][1]+t[n[13]][1])-2*(t[n[0]][1]+t[n[15]][1])+3*(t[n[11]][1]+t[n[1]][1]))/9]);n[10]=t.length;t.push([(-4*t[n[15]][0]-t[n[0]][0]+6*(t[n[11]][0]+t[n[14]][0])-2*(t[n[12]][0]+t[n[3]][0])+3*(t[n[2]][0]+t[n[8]][0]))/9,(-4*t[n[15]][1]-t[n[0]][1]+6*(t[n[11]][1]+t[n[14]][1])-2*(t[n[12]][1]+t[n[3]][1])+3*(t[n[2]][1]+t[n[8]][1]))/9]);this.figures.push({type:v,coords:new Int32Array(n),colors:new Int32Array(s)})}}_decodeType7Shading(e){const t=this.coords,a=this.colors,n=new Int32Array(16),s=new Int32Array(4);for(;e.hasData;){const r=e.readFlag();if(!(0<=r&&r<=3))throw new FormatError("Unknown type7 flag");const i=t.length;for(let a=0,n=0!==r?12:16;a<n;a++)t.push(e.readCoordinate());const o=a.length;for(let t=0,n=0!==r?2:4;t<n;t++)a.push(e.readComponents());let l,f,c,h;switch(r){case 0:n[12]=i+3;n[13]=i+4;n[14]=i+5;n[15]=i+6;n[8]=i+2;n[9]=i+13;n[10]=i+14;n[11]=i+7;n[4]=i+1;n[5]=i+12;n[6]=i+15;n[7]=i+8;n[0]=i;n[1]=i+11;n[2]=i+10;n[3]=i+9;s[2]=o+1;s[3]=o+2;s[0]=o;s[1]=o+3;break;case 1:l=n[12];f=n[13];c=n[14];h=n[15];n[12]=h;n[13]=i+0;n[14]=i+1;n[15]=i+2;n[8]=c;n[9]=i+9;n[10]=i+10;n[11]=i+3;n[4]=f;n[5]=i+8;n[6]=i+11;n[7]=i+4;n[0]=l;n[1]=i+7;n[2]=i+6;n[3]=i+5;l=s[2];f=s[3];s[2]=f;s[3]=o;s[0]=l;s[1]=o+1;break;case 2:l=n[15];f=n[11];n[12]=n[3];n[13]=i+0;n[14]=i+1;n[15]=i+2;n[8]=n[7];n[9]=i+9;n[10]=i+10;n[11]=i+3;n[4]=f;n[5]=i+8;n[6]=i+11;n[7]=i+4;n[0]=l;n[1]=i+7;n[2]=i+6;n[3]=i+5;l=s[3];s[2]=s[1];s[3]=o;s[0]=l;s[1]=o+1;break;case 3:n[12]=n[0];n[13]=i+0;n[14]=i+1;n[15]=i+2;n[8]=n[1];n[9]=i+9;n[10]=i+10;n[11]=i+3;n[4]=n[2];n[5]=i+8;n[6]=i+11;n[7]=i+4;n[0]=n[3];n[1]=i+7;n[2]=i+6;n[3]=i+5;s[2]=s[0];s[3]=o;s[0]=s[1];s[1]=o+1}this.figures.push({type:v,coords:new Int32Array(n),colors:new Int32Array(s)})}}_buildFigureFromPatch(e){const t=this.figures[e];assert(t.type===v,"Unexpected patch mesh figure");const a=this.coords,n=this.colors,s=t.coords,r=t.colors,i=Math.min(a[s[0]][0],a[s[3]][0],a[s[12]][0],a[s[15]][0]),o=Math.min(a[s[0]][1],a[s[3]][1],a[s[12]][1],a[s[15]][1]),l=Math.max(a[s[0]][0],a[s[3]][0],a[s[12]][0],a[s[15]][0]),f=Math.max(a[s[0]][1],a[s[3]][1],a[s[12]][1],a[s[15]][1]);let c=Math.ceil((l-i)*MeshShading.TRIANGLE_DENSITY/(this.bounds[2]-this.bounds[0]));c=MathClamp(c,MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT,MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT);let h=Math.ceil((f-o)*MeshShading.TRIANGLE_DENSITY/(this.bounds[3]-this.bounds[1]));h=MathClamp(h,MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT,MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT);const u=c+1,m=new Int32Array((h+1)*u),p=new Int32Array((h+1)*u);let d=0;const g=new Uint8Array(3),b=new Uint8Array(3),w=n[r[0]],j=n[r[1]],k=n[r[2]],y=n[r[3]],S=getB(h),x=getB(c);for(let e=0;e<=h;e++){g[0]=(w[0]*(h-e)+k[0]*e)/h|0;g[1]=(w[1]*(h-e)+k[1]*e)/h|0;g[2]=(w[2]*(h-e)+k[2]*e)/h|0;b[0]=(j[0]*(h-e)+y[0]*e)/h|0;b[1]=(j[1]*(h-e)+y[1]*e)/h|0;b[2]=(j[2]*(h-e)+y[2]*e)/h|0;for(let t=0;t<=c;t++,d++){if(!(0!==e&&e!==h||0!==t&&t!==c))continue;let r=0,i=0,o=0;for(let n=0;n<=3;n++)for(let l=0;l<=3;l++,o++){const f=S[e][n]*x[t][l];r+=a[s[o]][0]*f;i+=a[s[o]][1]*f}m[d]=a.length;a.push([r,i]);p[d]=n.length;const l=new Uint8Array(3);l[0]=(g[0]*(c-t)+b[0]*t)/c|0;l[1]=(g[1]*(c-t)+b[1]*t)/c|0;l[2]=(g[2]*(c-t)+b[2]*t)/c|0;n.push(l)}}m[0]=s[0];p[0]=r[0];m[c]=s[3];p[c]=r[1];m[u*h]=s[12];p[u*h]=r[2];m[u*h+c]=s[15];p[u*h+c]=r[3];this.figures[e]={type:q,coords:m,colors:p,verticesPerRow:u}}_updateBounds(){!function meshUpdateBounds(e){let t=e.coords[0][0],a=e.coords[0][1],n=t,s=a;for(let r=1,i=e.coords.length;r<i;r++){const i=e.coords[r][0],o=e.coords[r][1];t=t>i?i:t;a=a>o?o:a;n=n<i?i:n;s=s<o?o:s}e.bounds=[t,a,n,s]}(this)}_packData(){!function meshPackData(e){let t,a,n;const s=e.coords,r=new Float32Array(2*s.length);for(t=0,a=0,n=s.length;t<n;t++){const e=s[t];r[a++]=e[0];r[a++]=e[1]}e.coords=r;const i=e.colors,o=new Uint8Array(4*i.length);for(t=0,a=0,n=i.length;t<n;t++){const e=i[t];o[a++]=e[0];o[a++]=e[1];o[a++]=e[2];a++}e.colors=o;for(const t of e.figures){t.coords=new Uint32Array(t.coords);t.colors=new Uint32Array(t.colors)}}(this)}getIR(){const{posData:e,colData:t,vertexCount:a}=buildMeshVertexData(this.coords,this.colors,this.figures);return["Mesh",this.shadingType,e,t,a,this.bounds,this.bbox,this.background]}}class DummyShading extends BaseShading{getIR(){return["Dummy"]}}function getTilingPatternIR(e,t,a,n=!0){const s=lookupMatrix(t.getArray("Matrix"),ga),r=lookupNormalRect(t.getArray("BBox"),null);if(!r||r[2]-r[0]===0||r[3]-r[1]===0)throw new FormatError("Invalid getTilingPatternIR /BBox array.");const i=t.get("XStep");if("number"!=typeof i)throw new FormatError("Invalid getTilingPatternIR /XStep value.");const o=t.get("YStep");if("number"!=typeof o)throw new FormatError("Invalid getTilingPatternIR /YStep value.");const l=t.get("PaintType");if(!Number.isInteger(l))throw new FormatError("Invalid getTilingPatternIR /PaintType value.");const f=t.get("TilingType");if(!Number.isInteger(f))throw new FormatError("Invalid getTilingPatternIR /TilingType value.");return["TilingPattern",a,e,s,r,i,o,l,f,n]}function hexToInt(e,t){let a=0;for(let n=0;n<=t;n++)a=a<<8|e[n];return a>>>0}function hexToStr(e,t){return 1===t?String.fromCharCode(e[0],e[1]):3===t?String.fromCharCode(e[0],e[1],e[2],e[3]):String.fromCharCode(...e.subarray(0,t+1))}function addHex(e,t,a){let n=0;for(let s=a;s>=0;s--){n+=e[s]+t[s];e[s]=255&n;n>>=8}}function incHex(e,t){let a=1;for(let n=t;n>=0&&a>0;n--){a+=e[n];e[n]=255&a;a>>=8}}const Qa=16;class BinaryCMapStream extends Stream{tmpBuf=new Uint8Array(19);constructor(e){super(e,0,e.length,null)}readNumber(){let e,t=0;do{const a=this.getByte();if(a<0)throw new FormatError("unexpected EOF in bcmap");e=!(128&a);t=t<<7|127&a}while(!e);return t}readSigned(){const e=this.readNumber();return 1&e?~(e>>>1):e>>>1}readHex(e,t){e.set(this.getBytes(t+1))}readHexNumber(e,t){let a;const n=this.tmpBuf;let s=0;do{const e=this.getByte();if(e<0)throw new FormatError("unexpected EOF in bcmap");a=!(128&e);n[s++]=127&e}while(!a);let r=t,i=0,o=0;for(;r>=0;){for(;o<8&&n.length>0;){i|=n[--s]<<o;o+=7}e[r]=255&i;r--;i>>=8;o-=8}}readHexSigned(e,t){this.readHexNumber(e,t);const a=1&e[t]?255:0;let n=0;for(let s=0;s<=t;s++){n=(1&n)<<8|e[s];e[s]=n>>1^a}}readString(){const e=this.readNumber(),t=new Array(e);for(let a=0;a<e;a++)t[a]=this.readNumber();return String.fromCharCode(...t)}}class BinaryCMapReader{async process(e,t,a){const n=new BinaryCMapStream(e),s=n.getByte();t.vertical=!!(1&s);let r=null;const i=new Uint8Array(Qa),o=new Uint8Array(Qa),l=new Uint8Array(Qa),f=new Uint8Array(Qa),c=new Uint8Array(Qa);let h,u;for(;(u=n.getByte())>=0;){const e=u>>5;if(7===e){switch(31&u){case 0:n.readString();break;case 1:r=n.readString()}continue}const a=!!(16&u),s=15&u;if(s+1>Qa)throw new Error("BinaryCMapReader.process: Invalid dataSize.");const m=1,p=n.readNumber();switch(e){case 0:n.readHex(i,s);n.readHexNumber(o,s);addHex(o,i,s);t.addCodespaceRange(s+1,hexToInt(i,s),hexToInt(o,s));for(let e=1;e<p;e++){incHex(o,s);n.readHexNumber(i,s);addHex(i,o,s);n.readHexNumber(o,s);addHex(o,i,s);t.addCodespaceRange(s+1,hexToInt(i,s),hexToInt(o,s))}break;case 1:n.readHex(i,s);n.readHexNumber(o,s);addHex(o,i,s);n.readNumber();for(let e=1;e<p;e++){incHex(o,s);n.readHexNumber(i,s);addHex(i,o,s);n.readHexNumber(o,s);addHex(o,i,s);n.readNumber()}break;case 2:n.readHex(l,s);h=n.readNumber();t.mapOne(hexToInt(l,s),h);for(let e=1;e<p;e++){incHex(l,s);if(!a){n.readHexNumber(c,s);addHex(l,c,s)}h=n.readSigned()+(h+1);t.mapOne(hexToInt(l,s),h)}break;case 3:n.readHex(i,s);n.readHexNumber(o,s);addHex(o,i,s);h=n.readNumber();t.mapCidRange(hexToInt(i,s),hexToInt(o,s),h);for(let e=1;e<p;e++){incHex(o,s);if(a)i.set(o);else{n.readHexNumber(i,s);addHex(i,o,s)}n.readHexNumber(o,s);addHex(o,i,s);h=n.readNumber();t.mapCidRange(hexToInt(i,s),hexToInt(o,s),h)}break;case 4:n.readHex(l,m);n.readHex(f,s);t.mapOne(hexToInt(l,m),hexToStr(f,s));for(let e=1;e<p;e++){incHex(l,m);if(!a){n.readHexNumber(c,m);addHex(l,c,m)}incHex(f,s);n.readHexSigned(c,s);addHex(f,c,s);t.mapOne(hexToInt(l,m),hexToStr(f,s))}break;case 5:n.readHex(i,m);n.readHexNumber(o,m);addHex(o,i,m);n.readHex(f,s);t.mapBfRange(hexToInt(i,m),hexToInt(o,m),hexToStr(f,s));for(let e=1;e<p;e++){incHex(o,m);if(a)i.set(o);else{n.readHexNumber(i,m);addHex(i,o,m)}n.readHexNumber(o,m);addHex(o,i,m);n.readHex(f,s);t.mapBfRange(hexToInt(i,m),hexToInt(o,m),hexToStr(f,s))}break;default:throw new Error(`BinaryCMapReader.process - unknown type: ${e}`)}}return r?a(r):t}}class Ascii85Stream extends DecodeStream{#K=new Uint8Array(5);constructor(e,t){t&&(t*=.8);super(t);this.stream=e;this.dict=e.dict}readBlock(){const e=this.stream;let t=e.getByte();for(;isWhiteSpace(t);)t=e.getByte();if(-1===t||126===t){this.eof=!0;return}const a=this.bufferLength;let n,s;if(122===t){n=this.ensureBuffer(a+4);n.fill(0,a,a+4);this.bufferLength+=4}else{const r=this.#K;r[0]=t;for(s=1;s<5;++s){t=e.getByte();for(;isWhiteSpace(t);)t=e.getByte();r[s]=t;if(-1===t||126===t)break}n=this.ensureBuffer(a+s-1);this.bufferLength+=s-1;if(s<5){r.fill(117,s,5);this.eof=!0}let i=0;for(s=0;s<5;++s)i=85*i+(r[s]-33);for(s=3;s>=0;--s){n[a+s]=255&i;i>>=8}}}}class AsciiHexStream extends DecodeStream{constructor(e,t){t&&(t*=.5);super(t);this.stream=e;this.dict=e.dict;this.firstDigit=-1}readBlock(){const e=this.stream.getBytes(8e3);if(!e.length){this.eof=!0;return}const t=e.length+1>>1,a=this.ensureBuffer(this.bufferLength+t);let n=this.bufferLength,s=this.firstDigit;for(const t of e){let e;if(t>=48&&t<=57)e=15&t;else{if(!(t>=65&&t<=70||t>=97&&t<=102)){if(62===t){this.eof=!0;break}continue}e=9+(15&t)}if(s<0)s=e;else{a[n++]=s<<4|e;s=-1}}if(s>=0&&this.eof){a[n++]=s<<4;s=-1}this.firstDigit=s;this.bufferLength=n}}let Za=(()=>{const e=Int32Array.from([256,402,436,468,500,534,566,598,630,662,694,726,758,790,822,854,886,920,952,984,1016,1048,1080]),t=Int32Array.from([1,2,3,4,0,5,17,6,16,7,8,9,10,11,12,13,14,15]),a=Int32Array.from([0,3,2,1,0,0,0,0,0,0,3,3,3,3,3,3]),n=Int32Array.from([0,0,0,0,-1,1,-2,2,-3,3,-1,1,-2,2,-3,3]),s=Int32Array.from([131072,131076,131075,196610,131072,131076,131075,262145,131072,131076,131075,196610,131072,131076,131075,262149]),r=Int32Array.from([1,5,9,13,17,25,33,41,49,65,81,97,113,145,177,209,241,305,369,497,753,1265,2289,4337,8433,16625]),i=Int32Array.from([2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,7,8,9,10,11,12,13,24]),o=Int16Array.from([0,0,0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,12,14,24]),l=Int16Array.from([0,0,0,0,0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,24]),f=new Int16Array(2816);!function unpackCommandLookupTable(e){const t=new Int32Array(24),a=new Int32Array(24);a[0]=2;for(let e=0;e<23;++e){t[e+1]=t[e]+(1<<o[e]);a[e+1]=a[e]+(1<<l[e])}for(let n=0;n<704;++n){let s=n>>6,r=-4;if(s>=2){s-=2;r=0}const i=(170064>>2*s&3)<<3|n>>3&7,f=(156228>>2*s&3)<<3|7&n,c=a[f],h=r+Math.min(c,5)-2,u=4*n;e[u]=o[i]|l[f]<<8;e[u+1]=t[i];e[u+2]=a[f];e[u+3]=h}}(f);function log2floor(e){let t=-1,a=16,n=e;for(;a>0;){let e=n>>a;if(0!==e){t+=a;n=e}a>>=1}return t+n}function calculateDistanceAlphabetSize(e,t,a){return 16+t+2*(a<<e)}function calculateDistanceAlphabetLimit(e,t,a,n){if(t<n+(2<<a))return makeError(e,-23);const s=4+(t-n>>a),r=log2floor(s)-1;return((r-1<<1|s>>r&1)-1<<a)+(1<<a)+n+16}function initState(e){if(0!==e.runningState)return makeError(e,-26);e.blockTrees=new Int32Array(3091);e.blockTrees[0]=7;e.distRbIdx=3;let t=calculateDistanceAlphabetLimit(e,2147483644,3,120);if(t<0)return t;const a=t;e.distExtraBits=new Int8Array(a);e.distOffset=new Int32Array(a);t=function initBitReader(e){e.byteBuffer=new Int8Array(4160);e.accumulator32=0;e.shortBuffer=new Int16Array(2080);e.bitOffset=32;e.halfOffset=2048;e.endOfStreamReached=0;return prepare(e)}(e);if(t<0)return t;e.runningState=1;return 0}function decodeVarLenUnsignedByte(e){if(e.bitOffset>=16){e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16}if(0!==readFewBits(e,1)){const t=readFewBits(e,3);return 0===t?1:readFewBits(e,t)+(1<<t)}return 0}function readSymbol(e,t,a){let n=e[t];const s=a.accumulator32>>>a.bitOffset;n+=255&s;const r=e[n]>>16,i=65535&e[n];if(r<=8){a.bitOffset+=r;return i}n+=i;n+=(s&(1<<r)-1)>>>8;a.bitOffset+=8+(e[n]>>16);return 65535&e[n]}function readBlockLength(e,t,a){if(a.bitOffset>=16){a.accumulator32=a.shortBuffer[a.halfOffset++]<<16|a.accumulator32>>>16;a.bitOffset-=16}const n=readSymbol(e,t,a),s=i[n];if(a.bitOffset>=16){a.accumulator32=a.shortBuffer[a.halfOffset++]<<16|a.accumulator32>>>16;a.bitOffset-=16}return r[n]+(s<=16?readFewBits(a,s):readManyBits(a,s))}function moveToFront(e,t){let a=t;const n=e[a];for(;a>0;){e[a]=e[a-1];a--}e[0]=n}function readSimpleHuffmanCode(e,t,a,n,s){const r=new Int32Array(t),i=new Int32Array(4),o=1+log2floor(e-1),l=readFewBits(s,2)+1;for(let e=0;e<l;++e){if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}const a=readFewBits(s,o);if(a>=t)return makeError(s,-15);i[e]=a}const f=function checkDupes(e,t,a){for(let n=0;n<a-1;++n)for(let s=n+1;s<a;++s)if(t[n]===t[s])return makeError(e,-7);return 0}(s,i,l);if(f<0)return f;let c=l;4===l&&(c+=readFewBits(s,1));switch(c){case 1:r[i[0]]=1;break;case 2:r[i[0]]=1;r[i[1]]=1;break;case 3:r[i[0]]=1;r[i[1]]=2;r[i[2]]=2;break;case 4:r[i[0]]=2;r[i[1]]=2;r[i[2]]=2;r[i[3]]=2;break;case 5:r[i[0]]=1;r[i[1]]=2;r[i[2]]=3;r[i[3]]=3}return buildHuffmanTable(a,n,8,r,t)}function readComplexHuffmanCode(e,a,n,r,i){const o=new Int32Array(e),l=new Int32Array(18);let f=32,c=0;for(let e=a;e<18;++e){const a=t[e];if(i.bitOffset>=16){i.accumulator32=i.shortBuffer[i.halfOffset++]<<16|i.accumulator32>>>16;i.bitOffset-=16}const n=i.accumulator32>>>i.bitOffset&15;i.bitOffset+=s[n]>>16;const r=65535&s[n];l[a]=r;if(0!==r){f-=32>>r;c++;if(f<=0)break}}if(0!==f&&1!==c)return makeError(i,-4);const h=function readHuffmanCodeLengths(e,t,a,n){let s=0,r=8,i=0,o=0,l=32768;const f=new Int32Array(33);buildHuffmanTable(f,f.length-1,5,e,18);for(;s<t&&l>0;){if(n.halfOffset>2030){const e=readMoreInput(n);if(e<0)return e}if(n.bitOffset>=16){n.accumulator32=n.shortBuffer[n.halfOffset++]<<16|n.accumulator32>>>16;n.bitOffset-=16}const e=n.accumulator32>>>n.bitOffset&31;n.bitOffset+=f[e]>>16;const c=65535&f[e];if(c<16){i=0;a[s++]=c;if(0!==c){r=c;l-=32768>>c}}else{const e=c-14;let f=0;16===c&&(f=r);if(o!==f){i=0;o=f}const h=i;if(i>0){i-=2;i<<=e}if(n.bitOffset>=16){n.accumulator32=n.shortBuffer[n.halfOffset++]<<16|n.accumulator32>>>16;n.bitOffset-=16}i+=readFewBits(n,e)+3;const u=i-h;if(s+u>t)return makeError(n,-2);for(let e=0;e<u;++e)a[s++]=o;0!==o&&(l-=u<<15-o)}}if(0!==l)return makeError(n,-18);a.fill(0,s,t);return 0}(l,e,o,i);return h<0?h:buildHuffmanTable(n,r,8,o,e)}function readHuffmanCode(e,t,a,n,s){if(s.halfOffset>2030){const e=readMoreInput(s);if(e<0)return e}if(s.bitOffset>=16){s.accumulator32=s.shortBuffer[s.halfOffset++]<<16|s.accumulator32>>>16;s.bitOffset-=16}const r=readFewBits(s,2);return 1===r?readSimpleHuffmanCode(e,t,a,n,s):readComplexHuffmanCode(t,r,a,n,s)}function decodeContextMap(t,a,n){let s;if(n.halfOffset>2030){s=readMoreInput(n);if(s<0)return s}const r=decodeVarLenUnsignedByte(n)+1;if(1===r){a.fill(0,0,t);return r}if(n.bitOffset>=16){n.accumulator32=n.shortBuffer[n.halfOffset++]<<16|n.accumulator32>>>16;n.bitOffset-=16}let i=0;0!==readFewBits(n,1)&&(i=readFewBits(n,4)+1);const o=r+i,l=e[o+31>>5],f=new Int32Array(l+1),c=f.length-1;s=readHuffmanCode(o,o,f,c,n);if(s<0)return s;let h=0;for(;h<t;){if(n.halfOffset>2030){s=readMoreInput(n);if(s<0)return s}if(n.bitOffset>=16){n.accumulator32=n.shortBuffer[n.halfOffset++]<<16|n.accumulator32>>>16;n.bitOffset-=16}const e=readSymbol(f,c,n);if(0===e){a[h]=0;h++}else if(e<=i){if(n.bitOffset>=16){n.accumulator32=n.shortBuffer[n.halfOffset++]<<16|n.accumulator32>>>16;n.bitOffset-=16}let s=(1<<e)+readFewBits(n,e);for(;0!==s;){if(h>=t)return makeError(n,-3);a[h]=0;h++;s--}}else{a[h]=e-i;h++}}if(n.bitOffset>=16){n.accumulator32=n.shortBuffer[n.halfOffset++]<<16|n.accumulator32>>>16;n.bitOffset-=16}1===readFewBits(n,1)&&function inverseMoveToFrontTransform(e,t){const a=new Int32Array(256);for(let e=0;e<256;++e)a[e]=e;for(let n=0;n<t;++n){const t=255&e[n];e[n]=a[t];0!==t&&moveToFront(a,t)}}(a,t);return r}function decodeBlockTypeAndLength(e,t,a){const n=e.rings,s=4+2*t;if(e.bitOffset>=16){e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16}let r=readSymbol(e.blockTrees,2*t,e);const i=readBlockLength(e.blockTrees,2*t+1,e);1===r?r=n[s+1]+1:0===r?r=n[s]:r-=2;r>=a&&(r-=a);n[s]=n[s+1];n[s+1]=r;return i}function decodeLiteralBlockSwitch(e){e.literalBlockLength=decodeBlockTypeAndLength(e,0,e.numLiteralBlockTypes);const t=e.rings[5];e.contextMapSlice=t<<6;e.literalTreeIdx=255&e.contextMap[e.contextMapSlice];const a=e.contextModes[t];e.contextLookupOffset1=a<<9;e.contextLookupOffset2=e.contextLookupOffset1+256}function decodeCommandBlockSwitch(e){e.commandBlockLength=decodeBlockTypeAndLength(e,1,e.numCommandBlockTypes);e.commandTreeIdx=e.rings[7]}function decodeDistanceBlockSwitch(e){e.distanceBlockLength=decodeBlockTypeAndLength(e,2,e.numDistanceBlockTypes);e.distContextMapSlice=e.rings[9]<<2}function readNextMetablockHeader(e){if(0!==e.inputEnd){e.nextRunningState=10;e.runningState=12;return 0}e.literalTreeGroup=new Int32Array(0);e.commandTreeGroup=new Int32Array(0);e.distanceTreeGroup=new Int32Array(0);let t;if(e.halfOffset>2030){t=readMoreInput(e);if(t<0)return t}t=function decodeMetaBlockLength(e){if(e.bitOffset>=16){e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16}e.inputEnd=readFewBits(e,1);e.metaBlockLength=0;e.isUncompressed=0;e.isMetadata=0;if(0!==e.inputEnd&&0!==readFewBits(e,1))return 0;const t=readFewBits(e,2)+4;if(7===t){e.isMetadata=1;if(0!==readFewBits(e,1))return makeError(e,-6);const t=readFewBits(e,2);if(0===t)return 0;for(let a=0;a<t;++a){if(e.bitOffset>=16){e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16}const n=readFewBits(e,8);if(0===n&&a+1===t&&t>1)return makeError(e,-8);e.metaBlockLength+=n<<8*a}}else for(let a=0;a<t;++a){if(e.bitOffset>=16){e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16}const n=readFewBits(e,4);if(0===n&&a+1===t&&t>4)return makeError(e,-8);e.metaBlockLength+=n<<4*a}e.metaBlockLength++;0===e.inputEnd&&(e.isUncompressed=readFewBits(e,1));return 0}(e);if(t<0)return t;if(0===e.metaBlockLength&&0===e.isMetadata)return 0;if(0!==e.isUncompressed||0!==e.isMetadata){t=jumpToByteBoundary(e);if(t<0)return t;0===e.isMetadata?e.runningState=6:e.runningState=5}else e.runningState=3;if(0!==e.isMetadata)return 0;e.expectedTotalSize+=e.metaBlockLength;e.expectedTotalSize>1<<30&&(e.expectedTotalSize=1<<30);e.ringBufferSize<e.maxRingBufferSize&&function maybeReallocateRingBuffer(e){let t=e.maxRingBufferSize;if(t>e.expectedTotalSize){const a=e.expectedTotalSize;for(;t>>1>a;)t>>=1;0===e.inputEnd&&t<16384&&e.maxRingBufferSize>=16384&&(t=16384)}if(t<=e.ringBufferSize)return;const a=new Int8Array(t+37),n=e.ringBuffer;0!==n.length&&a.set(n.subarray(0,e.ringBufferSize),0);e.ringBuffer=a;e.ringBufferSize=t}(e);return 0}function readMetablockPartition(e,t,a){let n=e.blockTrees[2*t];if(a<=1){e.blockTrees[2*t+1]=n;e.blockTrees[2*t+2]=n;return 1<<28}const s=a+2;let r=readHuffmanCode(s,s,e.blockTrees,2*t,e);if(r<0)return r;n+=r;e.blockTrees[2*t+1]=n;r=readHuffmanCode(26,26,e.blockTrees,2*t+1,e);if(r<0)return r;n+=r;e.blockTrees[2*t+2]=n;return readBlockLength(e.blockTrees,2*t+1,e)}function readMetablockHuffmanCodesAndContextMaps(e){e.numLiteralBlockTypes=decodeVarLenUnsignedByte(e)+1;let t=readMetablockPartition(e,0,e.numLiteralBlockTypes);if(t<0)return t;e.literalBlockLength=t;e.numCommandBlockTypes=decodeVarLenUnsignedByte(e)+1;t=readMetablockPartition(e,1,e.numCommandBlockTypes);if(t<0)return t;e.commandBlockLength=t;e.numDistanceBlockTypes=decodeVarLenUnsignedByte(e)+1;t=readMetablockPartition(e,2,e.numDistanceBlockTypes);if(t<0)return t;e.distanceBlockLength=t;if(e.halfOffset>2030){t=readMoreInput(e);if(t<0)return t}if(e.bitOffset>=16){e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16}e.distancePostfixBits=readFewBits(e,2);e.numDirectDistanceCodes=readFewBits(e,4)<<e.distancePostfixBits;e.contextModes=new Int8Array(e.numLiteralBlockTypes);let a=0;for(;a<e.numLiteralBlockTypes;){const n=Math.min(a+96,e.numLiteralBlockTypes);for(;a<n;){if(e.bitOffset>=16){e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16}e.contextModes[a]=readFewBits(e,2);a++}if(e.halfOffset>2030){t=readMoreInput(e);if(t<0)return t}}const n=e.numLiteralBlockTypes<<6;e.contextMap=new Int8Array(n);t=decodeContextMap(n,e.contextMap,e);if(t<0)return t;const s=t;e.trivialLiteralContext=1;for(let t=0;t<n;++t)if(e.contextMap[t]!==t>>6){e.trivialLiteralContext=0;break}e.distContextMap=new Int8Array(e.numDistanceBlockTypes<<2);t=decodeContextMap(e.numDistanceBlockTypes<<2,e.distContextMap,e);if(t<0)return t;const r=t;e.literalTreeGroup=new Int32Array(huffmanTreeGroupAllocSize(256,s));t=decodeHuffmanTreeGroup(256,256,s,e,e.literalTreeGroup);if(t<0)return t;e.commandTreeGroup=new Int32Array(huffmanTreeGroupAllocSize(704,e.numCommandBlockTypes));t=decodeHuffmanTreeGroup(704,704,e.numCommandBlockTypes,e,e.commandTreeGroup);if(t<0)return t;let i=calculateDistanceAlphabetSize(e.distancePostfixBits,e.numDirectDistanceCodes,24),o=i;if(1===e.isLargeWindow){i=calculateDistanceAlphabetSize(e.distancePostfixBits,e.numDirectDistanceCodes,62);t=calculateDistanceAlphabetLimit(e,2147483644,e.distancePostfixBits,e.numDirectDistanceCodes);if(t<0)return t;o=t}e.distanceTreeGroup=new Int32Array(huffmanTreeGroupAllocSize(o,r));t=decodeHuffmanTreeGroup(i,o,r,e,e.distanceTreeGroup);if(t<0)return t;!function calculateDistanceLut(e,t){const a=e.distExtraBits,n=e.distOffset,s=e.distancePostfixBits,r=e.numDirectDistanceCodes,i=1<<s;let o=1,l=0,f=16;for(let e=0;e<r;++e){a[f]=0;n[f]=e+1;++f}for(;f<t;){const e=r+((2+l<<o)-4<<s)+1;for(let t=0;t<i;++t){a[f]=o;n[f]=e+t;++f}o+=l;l^=1}}(e,o);e.contextMapSlice=0;e.distContextMapSlice=0;e.contextLookupOffset1=512*e.contextModes[0];e.contextLookupOffset2=e.contextLookupOffset1+256;e.literalTreeIdx=0;e.commandTreeIdx=0;e.rings[4]=1;e.rings[5]=0;e.rings[6]=1;e.rings[7]=0;e.rings[8]=1;e.rings[9]=0;return 0}function copyUncompressedData(e){const t=e.ringBuffer;let a;if(e.metaBlockLength<=0){a=reload(e);if(a<0)return a;e.runningState=2;return 0}const n=Math.min(e.ringBufferSize-e.pos,e.metaBlockLength);a=function copyRawBytes(e,t,a,n){let s=a,r=n;if(7&e.bitOffset)return makeError(e,-30);for(;32!==e.bitOffset&&0!==r;){t[s++]=e.accumulator32>>>e.bitOffset;e.bitOffset+=8;r--}if(0===r)return 0;const i=Math.min(halfAvailable(e),r>>1);if(i>0){const a=e.halfOffset<<1,n=i<<1;t.set(e.byteBuffer.subarray(a,a+n),s);s+=n;r-=n;e.halfOffset+=i}if(0===r)return 0;if(halfAvailable(e)>0){if(e.bitOffset>=16){e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16}for(;0!==r;){t[s++]=e.accumulator32>>>e.bitOffset;e.bitOffset+=8;r--}return checkHealth(e,0)}for(;r>0;){const a=readInput(e,t,s,r);if(a<-1)return a;if(a<=0)return makeError(e,-16);s+=a;r-=a}return 0}(e,t,e.pos,n);if(a<0)return a;e.metaBlockLength-=n;e.pos+=n;if(e.pos===e.ringBufferSize){e.nextRunningState=6;e.runningState=12;return 0}a=reload(e);if(a<0)return a;e.runningState=2;return 0}function writeRingBuffer(e){const t=Math.min(e.outputLength-e.outputUsed,e.ringBufferBytesReady-e.ringBufferBytesWritten);if(0!==t){e.output.set(e.ringBuffer.subarray(e.ringBufferBytesWritten,e.ringBufferBytesWritten+t),e.outputOffset+e.outputUsed);e.outputUsed+=t;e.ringBufferBytesWritten+=t}return e.outputUsed<e.outputLength?0:2}function huffmanTreeGroupAllocSize(t,a){return a+a*e[t+31>>5]}function decodeHuffmanTreeGroup(e,t,a,n,s){let r=a;for(let i=0;i<a;++i){s[i]=r;const a=readHuffmanCode(e,t,s,i,n);if(a<0)return a;r+=a}return 0}function calculateFence(e){let t=e.ringBufferSize;0!==e.isEager&&(t=Math.min(t,e.ringBufferBytesWritten+e.outputLength-e.outputUsed));return t}function doUseDictionary(e,t){if(e.distance>2147483644)return makeError(e,-9);const a=e.distance-e.maxDistance-1-e.cdTotalSize;if(a<0){const t=function initializeCompoundDictionaryCopy(e,t,a){-1===e.cdBlockBits&&function initializeCompoundDictionary(e){e.cdBlockMap=new Int8Array(256);let t=8;for(;e.cdTotalSize-1>>t;)t++;t-=8;e.cdBlockBits=t;let a=0,n=0;for(;a<e.cdTotalSize;){for(;e.cdChunkOffsets[n+1]<a;)n++;e.cdBlockMap[a>>t]=n;a+=1<<t}}(e);let n=e.cdBlockMap[t>>e.cdBlockBits];for(;t>=e.cdChunkOffsets[n+1];)n++;if(e.cdTotalSize>t+a)return makeError(e,-9);e.distRbIdx=e.distRbIdx+1&3;e.rings[e.distRbIdx]=e.distance;e.metaBlockLength-=a;e.cdBrIndex=n;e.cdBrOffset=t-e.cdChunkOffsets[n];e.cdBrLength=a;e.cdBrCopied=0;return 0}(e,-a-1,e.copyLength);if(t<0)return t;e.runningState=14}else{const n=u,s=e.copyLength;if(s>31)return makeError(e,-9);const r=p[s];if(0===r)return makeError(e,-9);let i=m[s];const o=a>>r;i+=(a&(1<<r)-1)*s;const l=c;if(o>=l.numTransforms)return makeError(e,-9);const f=function transformDictionaryWord(e,t,a,n,s,r,i){let o=t;const l=r.triplets,f=r.prefixSuffixStorage,c=r.prefixSuffixHeads,h=3*i,u=l[h],m=l[h+1],p=l[h+2];let d=c[u];const g=c[u+1];let b=c[p];const w=c[p+1];let j=m-11,k=m;(j<1||j>9)&&(j=0);(k<1||k>9)&&(k=0);for(;d!==g;)e[o++]=f[d++];let y=s;j>y&&(j=y);let q=n+j;y-=j;y-=k;let v=y;for(;v>0;){e[o++]=a[q++];v--}if(10===m||11===m){let t=o-y;10===m&&(y=1);for(;y>0;){const a=255&e[t];if(a<192){a>=97&&a<=122&&(e[t]=32^e[t]);t+=1;y-=1}else if(a<224){e[t+1]=32^e[t+1];t+=2;y-=2}else{e[t+2]=5^e[t+2];t+=3;y-=3}}}else if(21===m||22===m){let t=o-y;const a=r.params[i];let n=16777216-(32768&a)+(32767&a);for(;y>0;){let a=1;const s=255&e[t];if(s<128){n+=s;e[t]=127&n}else if(s<192);else if(s<224)if(y>=2){const r=e[t+1];n+=63&r|(31&s)<<6;e[t]=192|n>>6&31;e[t+1]=192&r|63&n;a=2}else a=y;else if(s<240)if(y>=3){const r=e[t+1],i=e[t+2];n+=63&i|(63&r)<<6|(15&s)<<12;e[t]=224|n>>12&15;e[t+1]=192&r|n>>6&63;e[t+2]=192&i|63&n;a=3}else a=y;else if(s<248)if(y>=4){const r=e[t+1],i=e[t+2],o=e[t+3];n+=63&o|(63&i)<<6|(63&r)<<12|(7&s)<<18;e[t]=240|n>>18&7;e[t+1]=192&r|n>>12&63;e[t+2]=192&i|n>>6&63;e[t+3]=192&o|63&n;a=4}else a=y;t+=a;y-=a;21===m&&(y=0)}}for(;b!==w;)e[o++]=f[b++];return o-t}(e.ringBuffer,e.pos,n,i,s,l,o);e.pos+=f;e.metaBlockLength-=f;if(e.pos>=t){e.nextRunningState=4;e.runningState=12;return 0}e.runningState=4}return 0}function copyFromCompoundDictionary(e,t){let a=e.pos;const n=a;for(;e.cdBrLength!==e.cdBrCopied;){const n=t-a,s=e.cdChunkOffsets[e.cdBrIndex+1]-e.cdChunkOffsets[e.cdBrIndex]-e.cdBrOffset;let r=e.cdBrLength-e.cdBrCopied;r>s&&(r=s);r>n&&(r=n);e.ringBuffer.set(e.cdChunks[e.cdBrIndex].subarray(e.cdBrOffset,e.cdBrOffset+r),a);a+=r;e.cdBrOffset+=r;e.cdBrCopied+=r;if(r===s){e.cdBrIndex++;e.cdBrOffset=0}if(a>=t)break}return a-n}function decompress(e){let t;if(0===e.runningState)return makeError(e,-25);if(e.runningState<0)return makeError(e,-28);if(11===e.runningState)return makeError(e,-22);if(1===e.runningState){const t=function decodeWindowBits(e){const t=e.isLargeWindow;e.isLargeWindow=0;if(e.bitOffset>=16){e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16}if(0===readFewBits(e,1))return 16;let a=readFewBits(e,3);if(0!==a)return 17+a;a=readFewBits(e,3);if(0!==a){if(1===a){if(0===t)return-1;e.isLargeWindow=1;if(1===readFewBits(e,1))return-1;a=readFewBits(e,6);return a<10||a>30?-1:a}return 8+a}return 17}(e);if(-1===t)return makeError(e,-11);e.maxRingBufferSize=1<<t;e.maxBackwardDistance=e.maxRingBufferSize-16;e.runningState=2}let s=calculateFence(e),r=e.ringBufferSize-1,i=e.ringBuffer;for(;10!==e.runningState;)switch(e.runningState){case 2:if(e.metaBlockLength<0)return makeError(e,-10);t=readNextMetablockHeader(e);if(t<0)return t;s=calculateFence(e);r=e.ringBufferSize-1;i=e.ringBuffer;continue;case 3:t=readMetablockHuffmanCodesAndContextMaps(e);if(t<0)return t;e.runningState=4;continue;case 4:if(e.metaBlockLength<=0){e.runningState=2;continue}if(e.halfOffset>2030){t=readMoreInput(e);if(t<0)return t}0===e.commandBlockLength&&decodeCommandBlockSwitch(e);e.commandBlockLength--;if(e.bitOffset>=16){e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16}const o=readSymbol(e.commandTreeGroup,e.commandTreeIdx,e)<<2,l=f[o],c=f[o+1],u=f[o+2];e.distanceCode=f[o+3];if(e.bitOffset>=16){e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16}const m=255&l;e.insertLength=c+(m<=16?readFewBits(e,m):readManyBits(e,m));if(e.bitOffset>=16){e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16}const p=l>>8;e.copyLength=u+(p<=16?readFewBits(e,p):readManyBits(e,p));e.j=0;e.runningState=7;continue;case 7:if(0!==e.trivialLiteralContext)for(;e.j<e.insertLength;){if(e.halfOffset>2030){t=readMoreInput(e);if(t<0)return t}0===e.literalBlockLength&&decodeLiteralBlockSwitch(e);e.literalBlockLength--;if(e.bitOffset>=16){e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16}i[e.pos]=readSymbol(e.literalTreeGroup,e.literalTreeIdx,e);e.pos++;e.j++;if(e.pos>=s){e.nextRunningState=7;e.runningState=12;break}}else{let a=255&i[e.pos-1&r],n=255&i[e.pos-2&r];for(;e.j<e.insertLength;){if(e.halfOffset>2030){t=readMoreInput(e);if(t<0)return t}0===e.literalBlockLength&&decodeLiteralBlockSwitch(e);const r=h[e.contextLookupOffset1+a]|h[e.contextLookupOffset2+n],o=255&e.contextMap[e.contextMapSlice+r];e.literalBlockLength--;n=a;if(e.bitOffset>=16){e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16}a=readSymbol(e.literalTreeGroup,o,e);i[e.pos]=a;e.pos++;e.j++;if(e.pos>=s){e.nextRunningState=7;e.runningState=12;break}}}if(7!==e.runningState)continue;e.metaBlockLength-=e.insertLength;if(e.metaBlockLength<=0){e.runningState=4;continue}let d=e.distanceCode;if(d<0)e.distance=e.rings[e.distRbIdx];else{if(e.halfOffset>2030){t=readMoreInput(e);if(t<0)return t}0===e.distanceBlockLength&&decodeDistanceBlockSwitch(e);e.distanceBlockLength--;if(e.bitOffset>=16){e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16}const s=255&e.distContextMap[e.distContextMapSlice+d];d=readSymbol(e.distanceTreeGroup,s,e);if(d<16){const t=e.distRbIdx+a[d]&3;e.distance=e.rings[t]+n[d];if(e.distance<0)return makeError(e,-12)}else{const t=e.distExtraBits[d];let a;if(e.bitOffset+t<=32)a=readFewBits(e,t);else{if(e.bitOffset>=16){e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16}a=t<=16?readFewBits(e,t):readManyBits(e,t)}e.distance=e.distOffset[d]+(a<<e.distancePostfixBits)}}e.maxDistance!==e.maxBackwardDistance&&e.pos<e.maxBackwardDistance?e.maxDistance=e.pos:e.maxDistance=e.maxBackwardDistance;if(e.distance>e.maxDistance){e.runningState=9;continue}if(d>0){e.distRbIdx=e.distRbIdx+1&3;e.rings[e.distRbIdx]=e.distance}if(e.copyLength>e.metaBlockLength)return makeError(e,-9);e.j=0;e.runningState=8;continue;case 8:let g=e.pos-e.distance&r,b=e.pos;const w=e.copyLength-e.j,j=g+w,k=b+w;if(j<r&&k<r){if(w<12||j>b&&k>g){const e=w+3>>2;for(let t=0;t<e;++t){i[b++]=i[g++];i[b++]=i[g++];i[b++]=i[g++];i[b++]=i[g++]}}else i.copyWithin(b,g,j);e.j+=w;e.metaBlockLength-=w;e.pos+=w}else for(;e.j<e.copyLength;){i[e.pos]=i[e.pos-e.distance&r];e.metaBlockLength--;e.pos++;e.j++;if(e.pos>=s){e.nextRunningState=8;e.runningState=12;break}}8===e.runningState&&(e.runningState=4);continue;case 9:t=doUseDictionary(e,s);if(t<0)return t;continue;case 14:e.pos+=copyFromCompoundDictionary(e,s);if(e.pos>=s){e.nextRunningState=14;e.runningState=12;return 2}e.runningState=4;continue;case 5:for(;e.metaBlockLength>0;){if(e.halfOffset>2030){t=readMoreInput(e);if(t<0)return t}if(e.bitOffset>=16){e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16}readFewBits(e,8);e.metaBlockLength--}e.runningState=2;continue;case 6:t=copyUncompressedData(e);if(t<0)return t;continue;case 12:e.ringBufferBytesReady=Math.min(e.pos,e.ringBufferSize);e.runningState=13;continue;case 13:t=writeRingBuffer(e);if(0!==t)return t;e.pos>=e.maxBackwardDistance&&(e.maxDistance=e.maxBackwardDistance);if(e.pos>=e.ringBufferSize){e.pos>e.ringBufferSize&&i.copyWithin(0,e.ringBufferSize,e.pos);e.pos=e.pos&r;e.ringBufferBytesWritten=0}e.runningState=e.nextRunningState;continue;default:return makeError(e,-28)}if(10!==e.runningState)return makeError(e,-29);if(e.metaBlockLength<0)return makeError(e,-10);t=jumpToByteBoundary(e);if(0!==t)return t;t=checkHealth(e,1);return 0!==t?t:1}const c=new function Transforms(e,t,a){this.numTransforms=0;this.triplets=new Int32Array(0);this.prefixSuffixStorage=new Int8Array(0);this.prefixSuffixHeads=new Int32Array(0);this.params=new Int16Array(0);this.numTransforms=e;this.triplets=new Int32Array(3*e);this.params=new Int16Array(e);this.prefixSuffixStorage=new Int8Array(t);this.prefixSuffixHeads=new Int32Array(a+1)}(121,167,50);!function unpackTransforms(e,t,a,n,s){const r=toUtf8Runes(n),i=r.length;let o=1,l=0;for(let a=0;a<i;++a){const n=r[a];35===n?t[o++]=l:e[l++]=n}for(let e=0;e<363;++e)a[e]=s.charCodeAt(e)-32}(c.prefixSuffixStorage,c.prefixSuffixHeads,c.triplets,'# #s #, #e #.# the #.com/# # of # and # in # to #"#">#\n#]# for # a # that #. # with #\'# from # by #. The # on # as # is #ing #\n\t#:#ed #(# at #ly #="# of the #. This #,# not #er #al #=\'#ful #ive #less #est #ize #ous #'," !! ! , *! &! \" ! ) * * - ! # ! #!*! + ,$ ! - % . / # 0 1 . \" 2 3!* 4% ! # / 5 6 7 8 0 1 & $ 9 + : ; < ' != > ?! 4 @ 4 2 & A *# ( B C& ) % ) !*# *-% A +! *. D! %' & E *6 F G% ! *A *% H! D I!+! J!+ K +- *4! A L!*4 M N +6 O!*% +.! K *G P +%( ! G *D +D Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K");function getNextKey(e,t){let a=1<<t-1;for(;0!==(e&a);)a>>=1;return(e&a-1)+a}function replicateValue(e,t,a,n,s){let r=n;for(;r>0;){r-=a;e[t+r]=s}}function nextTableBitSize(e,t,a){let n=t,s=1<<n-a;for(;n<15;){s-=e[n];if(s<=0)break;n++;s<<=1}return n-a}function buildHuffmanTable(e,t,a,n,s){const r=e[t],i=new Int32Array(s),o=new Int32Array(16),l=new Int32Array(16);for(let e=0;e<s;++e)o[n[e]]++;l[1]=0;for(let e=1;e<15;++e)l[e+1]=l[e]+o[e];for(let e=0;e<s;++e)0!==n[e]&&(i[l[n[e]]++]=e);let f=a,c=1<<f,h=c;if(1===l[15]){for(let t=0;t<h;++t)e[r+t]=i[0];return h}let u=0,m=0,p=1;for(let t=1;t<=a;++t){p<<=1;for(;o[t]>0;){replicateValue(e,r+u,p,c,t<<16|i[m++]);u=getNextKey(u,t);o[t]--}}const d=h-1;let g=-1,b=r;p=1;for(let t=a+1;t<=15;++t){p<<=1;for(;o[t]>0;){if((u&d)!==g){b+=c;f=nextTableBitSize(o,t,a);c=1<<f;h+=c;g=u&d;e[r+g]=f+a<<16|b-r-g}replicateValue(e,b+(u>>a),p,c,t-a<<16|i[m++]);u=getNextKey(u,t);o[t]--}}return h}function readMoreInput(e){if(0!==e.endOfStreamReached)return halfAvailable(e)>=-2?0:makeError(e,-16);const t=e.halfOffset<<1;let a=4096-t;e.byteBuffer.copyWithin(0,t,4096);e.halfOffset=0;for(;a<4096;){const t=4096-a,n=readInput(e,e.byteBuffer,a,t);if(n<-1)return n;if(n<=0){e.endOfStreamReached=1;e.tailBytes=a;a+=1;break}a+=n}!function bytesToNibbles(e,t){const a=e.byteBuffer,n=t>>1,s=e.shortBuffer;for(let e=0;e<n;++e)s[e]=255&a[2*e]|(255&a[2*e+1])<<8}(e,a);return 0}function checkHealth(e,t){if(0===e.endOfStreamReached)return 0;const a=(e.halfOffset<<1)+(e.bitOffset+7>>3)-4;return a>e.tailBytes?makeError(e,-13):0!==t&&a!==e.tailBytes?makeError(e,-17):0}function readFewBits(e,t){const a=e.accumulator32>>>e.bitOffset&(1<<t)-1;e.bitOffset+=t;return a}function readManyBits(e,t){const a=readFewBits(e,16);e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16;return a|readFewBits(e,t-16)<<16}function prepare(e){if(e.halfOffset>2030){const t=readMoreInput(e);if(0!==t)return t}let t=checkHealth(e,0);if(0!==t)return t;e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16;e.accumulator32=e.shortBuffer[e.halfOffset++]<<16|e.accumulator32>>>16;e.bitOffset-=16;return 0}function reload(e){return 32===e.bitOffset?prepare(e):0}function jumpToByteBoundary(e){const t=32-e.bitOffset&7;if(0!==t){if(0!==readFewBits(e,t))return makeError(e,-5)}return 0}function halfAvailable(e){let t=2048;0!==e.endOfStreamReached&&(t=e.tailBytes+1>>1);return t-e.halfOffset}const h=new Int32Array(2048);!function unpackLookupTable(e,t,a){for(let t=0;t<256;++t){e[t]=63&t;e[512+t]=t>>2;e[1792+t]=2+(t>>6)}for(let a=0;a<128;++a)e[1024+a]=4*(t.charCodeAt(a)-32);for(let t=0;t<64;++t){e[1152+t]=1&t;e[1216+t]=2+(1&t)}let n=1280;for(let t=0;t<19;++t){const s=3&t,r=a.charCodeAt(t)-32;for(let t=0;t<r;++t)e[n++]=s}for(let t=0;t<16;++t){e[1792+t]=1;e[2032+t]=6}e[1792]=0;e[2047]=7;for(let t=0;t<256;++t)e[1536+t]=e[1792+t]<<3}(h," !! ! \"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# ","A/* ': & : $  @");function State(){this.ringBuffer=new Int8Array(0);this.contextModes=new Int8Array(0);this.contextMap=new Int8Array(0);this.distContextMap=new Int8Array(0);this.distExtraBits=new Int8Array(0);this.output=new Int8Array(0);this.byteBuffer=new Int8Array(0);this.shortBuffer=new Int16Array(0);this.intBuffer=new Int32Array(0);this.rings=new Int32Array(0);this.blockTrees=new Int32Array(0);this.literalTreeGroup=new Int32Array(0);this.commandTreeGroup=new Int32Array(0);this.distanceTreeGroup=new Int32Array(0);this.distOffset=new Int32Array(0);this.accumulator64=0;this.runningState=0;this.nextRunningState=0;this.accumulator32=0;this.bitOffset=0;this.halfOffset=0;this.tailBytes=0;this.endOfStreamReached=0;this.metaBlockLength=0;this.inputEnd=0;this.isUncompressed=0;this.isMetadata=0;this.literalBlockLength=0;this.numLiteralBlockTypes=0;this.commandBlockLength=0;this.numCommandBlockTypes=0;this.distanceBlockLength=0;this.numDistanceBlockTypes=0;this.pos=0;this.maxDistance=0;this.distRbIdx=0;this.trivialLiteralContext=0;this.literalTreeIdx=0;this.commandTreeIdx=0;this.j=0;this.insertLength=0;this.contextMapSlice=0;this.distContextMapSlice=0;this.contextLookupOffset1=0;this.contextLookupOffset2=0;this.distanceCode=0;this.numDirectDistanceCodes=0;this.distancePostfixBits=0;this.distance=0;this.copyLength=0;this.maxBackwardDistance=0;this.maxRingBufferSize=0;this.ringBufferSize=0;this.expectedTotalSize=0;this.outputOffset=0;this.outputLength=0;this.outputUsed=0;this.ringBufferBytesWritten=0;this.ringBufferBytesReady=0;this.isEager=0;this.isLargeWindow=0;this.cdNumChunks=0;this.cdTotalSize=0;this.cdBrIndex=0;this.cdBrOffset=0;this.cdBrLength=0;this.cdBrCopied=0;this.cdChunks=new Array(0);this.cdChunkOffsets=new Int32Array(0);this.cdBlockBits=0;this.cdBlockMap=new Int8Array(0);this.input=new InputStream(new Int8Array(0));this.ringBuffer=new Int8Array(0);this.rings=new Int32Array(10);this.rings[0]=16;this.rings[1]=15;this.rings[2]=11;this.rings[3]=4}let u=new Int8Array(0);const m=new Int32Array(32),p=new Int32Array(32);const d=new Int8Array(122784),g=new Int32Array(25);!function unpackDictionaryData(e,t,a,n,s,r){const i=function toUsAsciiBytes(e){const t=e.length,a=new Int8Array(t);for(let n=0;n<t;++n)a[n]=e.charCodeAt(n);return a}(t+a),o=toUtf8Runes(n);let l=0;const f=o.length>>1;for(let e=0;e<f;++e){const t=o[2*e]-36,a=o[2*e+1]-36;for(let e=0;e<t;++e){i[l]=3^i[l];l++}for(let e=0;e<a;++e){i[l]=236^i[l];l++}}for(let e=0;e<r.length;++e)s[e]=r.charCodeAt(e)-65;e.set(i)}(d,'wjnfgltmojefofewab`h`lgfgbwbpkltlmozpjwf`jwzlsfmivpwojhfeqfftlqhwf{wzfbqlufqalgzolufelqnallhsobzojufojmfkfosklnfpjgfnlqftlqgolmdwkfnujftejmgsbdfgbzpevookfbgwfqnfb`kbqfbeqlnwqvfnbqhbaofvslmkjdkgbwfobmgmftpfufmmf{w`bpfalwkslpwvpfgnbgfkbmgkfqftkbwmbnfOjmhaoldpjyfabpfkfognbhfnbjmvpfq$*#(klogfmgptjwkMftpqfbgtfqfpjdmwbhfkbufdbnfpffm`boosbwktfoosovpnfmvejonsbqwiljmwkjpojpwdllgmffgtbzptfpwilapnjmgboploldlqj`kvpfpobpwwfbnbqnzellghjmdtjoofbpwtbqgafpwejqfSbdfhmltbtbz-smdnlufwkbmolbgdjufpfoemlwfnv`keffgnbmzql`hj`lmlm`follhkjgfgjfgKlnfqvofklpwbib{jmel`ovaobtpofppkboeplnfpv`kylmf233&lmfp`bqfWjnfqb`faovfelvqtffheb`fklsfdbufkbqgolpwtkfmsbqhhfswsbpppkjsqllnKWNOsobmWzsfglmfpbufhffseobdojmhplogejufwllhqbwfwltmivnswkvpgbqh`bqgejofefbqpwbzhjoowkbweboobvwlfufq-`lnwbohpklsulwfgffsnlgfqfpwwvqmalqmabmgefooqlpfvqo+phjmqlof`lnfb`wpbdfpnffwdlog-isdjwfnubqzefowwkfmpfmggqlsUjft`lsz2-3!?,b=pwlsfopfojfpwlvqsb`h-djesbpw`pp<dqbznfbm%dw8qjgfpklwobwfpbjgqlbgubq#effoilkmqj`hslqwebpw$VB.gfbg?,a=sllqajoowzsfV-P-tllgnvpw1s{8JmelqbmhtjgftbmwtbooofbgX3^8sbvotbufpvqf\'+$ tbjwnbppbqnpdlfpdbjmobmdsbjg"..#ol`hvmjwqllwtbohejqntjef{no!plmdwfpw13s{hjmgqltpwlloelmwnbjopbefpwbqnbsp`lqfqbjmeoltabazpsbmpbzp7s{85s{8bqwpellwqfbotjhjkfbwpwfswqjslqd,obhftfbhwlogElqn`bpwebmpabmhufqzqvmpivozwbph2s{8dlbodqftpoltfgdfjg>!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+"sj`hfujo\'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sks<kfoowbootklnyk9\t),\t#233kboo-\t\tB4s{8svpk`kbw3s{8`qft),?,kbpk46s{eobwqbqf#%%#wfoo`bnslmwlobjgnjppphjswfmwejmfnbofdfwpsolw733/\t\t`lloeffw-sks?aq=fqj`nlpwdvjgafoogfp`kbjqnbwkbwln,jnd% ;1ov`h`fmw3338wjmzdlmfkwnopfoogqvdEQFFmlgfmj`h<jg>olpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{$$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqnlupalzpX3^-$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\n.pjy....sqls$*8ojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#lxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*"+njmfyk9abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm$/#$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\b$**8svqfnbdfsbqbwlmfalmg904Y\\le\\$^*8333/yk9\vwbmhzbqgaltoavpk965YIbub03s{\t~\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\t~\tf{jw906Yubqpafbw$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\t\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd\'+$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\tgvpw`ojs*-\t\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf.\t"331*mgltX2^8X^8\tOld#pbow\t\n\nabmdwqjnabwk*x\t33s{\t~*8hl9\0effpbg=p9,,#X^8wloosovd+*x\tx\t#-ip$133sgvboalbw-ISD*8\t~rvlw*8\t\t$*8\t\t~1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\<Q<\\<R<P=l<\\=l=o=n<\\<Q<Y<S<R<R=n<T<[<Q<R<X<R=n<R<Z<Y<R<Q<T=i<q<\\<Y<Y<]=g<P=g<~=g=m<R<^=g<^<R<q<R<R<]<s<R<W<T<Q<T<L<H<q<Y<p=g=n=g<r<Q<T<P<X<\\<{<\\<x<\\<q=o<r<]=n<Y<t<[<Y<U<Q=o<P<P<N=g=o<Z5m5f4O5j5i4K5i4U5o5h4O5d4]4C5f4K5m5e5k5d5h5i5h5o4K5d5h5k4D4_4K5h4I5j5k5f4O5f5n4C5k5h4G5i4D5k5h5d5h5f4D5h4K5f4D5o4X5f4K5i4O5i5j4F4D5f5h5j4A4D5k5i5i4X5d4Xejqpwujgflojdkwtlqognfgjbtkjwf`olpfaob`hqjdkwpnbooallhpsob`fnvpj`ejfoglqgfqsljmwubovfofufowbaofalbqgklvpfdqlvstlqhpzfbqppwbwfwlgbztbwfqpwbqwpwzofgfbwksltfqsklmfmjdkwfqqlqjmsvwbalvwwfqnpwjwofwllopfufmwol`bowjnfpobqdftlqgpdbnfppklqwpsb`fel`vp`ofbqnlgfoaol`hdvjgfqbgjlpkbqftlnfmbdbjmnlmfzjnbdfmbnfpzlvmdojmfpobwfq`lolqdqffmeqlmw%bns8tbw`kelq`fsqj`fqvofpafdjmbewfqujpjwjppvfbqfbpafoltjmgf{wlwboklvqpobafosqjmwsqfppavjowojmhppsffgpwvgzwqbgfelvmgpfmpfvmgfqpkltmelqnpqbmdfbggfgpwjoonlufgwbhfmbalufeobpkej{fglewfmlwkfqujftp`kf`hofdboqjufqjwfnprvj`hpkbsfkvnbmf{jpwdljmdnlujfwkjqgabpj`sfb`fpwbdftjgwkoldjmjgfbptqlwfsbdfpvpfqpgqjufpwlqfaqfbhplvwkulj`fpjwfpnlmwktkfqfavjogtkj`kfbqwkelqvnwkqffpslqwsbqwz@oj`holtfqojufp`obppobzfqfmwqzpwlqzvpbdfplvmg`lvqwzlvq#ajqwkslsvswzsfpbssozJnbdfafjmdvssfqmlwfpfufqzpkltpnfbmpf{wqbnbw`kwqb`hhmltmfbqozafdbmpvsfqsbsfqmlqwkofbqmdjufmmbnfgfmgfgWfqnpsbqwpDqlvsaqbmgvpjmdtlnbmebopfqfbgzbvgjlwbhfptkjof-`ln,ojufg`bpfpgbjoz`kjogdqfbwivgdfwklpfvmjwpmfufqaqlbg`lbpw`lufqbssofejofp`z`ofp`fmfsobmp`oj`htqjwfrvffmsjf`ffnbjoeqbnflogfqsklwlojnjw`b`kf`jujop`boffmwfqwkfnfwkfqfwlv`kalvmgqlzbobphfgtklofpjm`fpwl`h#mbnfebjwkkfbqwfnswzleefqp`lsfltmfgnjdkwboavnwkjmhaollgbqqbznbilqwqvpw`bmlmvmjlm`lvmwubojgpwlmfPwzofOldjmkbsszl``vqofew9eqfpkrvjwfejonpdqbgfmffgpvqabmejdkwabpjpklufqbvwl8qlvwf-kwnonj{fgejmboZlvq#pojgfwlsj`aqltmbolmfgqbtmpsojwqfb`kQjdkwgbwfpnbq`krvlwfdllgpOjmhpglvawbpzm`wkvnaboolt`kjfezlvwkmlufo23s{8pfqufvmwjokbmgp@kf`hPsb`frvfqzibnfpfrvbowtj`f3/333Pwbqwsbmfoplmdpqlvmgfjdkwpkjewtlqwkslpwpofbgptffhpbuljgwkfpfnjofpsobmfpnbqwboskbsobmwnbqhpqbwfpsobzp`objnpbofpwf{wppwbqptqlmd?,k0=wkjmd-lqd,nvowjkfbqgSltfqpwbmgwlhfmplojg+wkjpaqjmdpkjsppwbeewqjfg`boopevoozeb`wpbdfmwWkjp#,,..=bgnjmfdzswFufmw26s{8Fnbjowqvf!`qlpppsfmwaoldpal{!=mlwfgofbuf`kjmbpjyfpdvfpw?,k7=qlalwkfbuzwqvf/pfufmdqbmg`qjnfpjdmpbtbqfgbm`fskbpf=?"..fm\\VP% 0:8133s{\\mbnfobwjmfmilzbib{-bwjlmpnjwkV-P-#klogpsfwfqjmgjbmbu!=`kbjmp`lqf`lnfpgljmdsqjlqPkbqf2::3pqlnbmojpwpibsbmeboopwqjboltmfqbdqff?,k1=bavpfbofqwlsfqb!.,,T`bqgpkjoopwfbnpSklwlwqvwk`ofbm-sks<pbjmwnfwboolvjpnfbmwsqlleaqjfeqlt!=dfmqfwqv`hollhpUbovfEqbnf-mfw,..=\t?wqz#x\tubq#nbhfp`lpwpsobjmbgvowrvfpwwqbjmobalqkfosp`bvpfnbdj`nlwlqwkfjq163s{ofbpwpwfsp@lvmw`lvogdobpppjgfpevmgpklwfobtbqgnlvwknlufpsbqjpdjufpgvw`kwf{bpeqvjwmvoo/X^8wls!=\t?"..SLPW!l`fbm?aq,=eollqpsfbhgfswk#pjyfabmhp`bw`k`kbqw13s{8bojdmgfboptlvog63s{8vqo>!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\tabmgprvfvf>#x~8;3s{8`hjmdx\t\n\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\t\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*##oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9npjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\t~\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?"..\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isdpvjwfpoj`fkbqqz213!#ptffwwq=\tmbnf>gjfdlsbdf#ptjpp..=\t\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9ojg>!`Mbnf!tlqpfpklwp.al{.gfowb\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\t.2!*8wzsf>aovfpwqvozgbujp-ip$8=\t?"pwffo#zlv#k1=\telqn#ifpvp233&#nfmv-\t\n\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\t\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\t\\elqn!ofbufppwqfpp!#,=\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{fpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\jnbdfwkqfbgmbwjufsl`hfwal{!=\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw##X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\t\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\t\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=vpjmd#\t\nubq#=$*8\t\n?,wg=\t?,wq=\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\bTA\nzk\vBl\bQ\vUmGx\bSM\nmC\bTA\twQ\nd}\bW@\bTl\bTF\ti@\tcT\vBM\v|jBV\tqw\tcC\bWI\npa\tfM\n{Z{X\bTF\bVV\bVK\tmkF\t[]\bPm\bTv\nsI\vpg\t[I\bQpmx\v_W\n^M\npe\vQ}\vGu\nel\npeChBV\bTA\tSo\nzk\vGL\vxD\nd[JzMY\bQpli\nfl\npC{BNt\vwT\ti_\bTgQQ\n|p\vXN\bQS\vxDQC\bWZ\tpD\vVS\bTWNtYh\nzuKjN}\twr\tHa\n_D\tj`\vQ}\vWp\nxZ{c\tji\tBU\nbDa|\tTn\tpV\nZd\nmC\vEV{X\tc}\tTo\bWl\bUd\tIQ\tcg\vxs\nXW\twR\vek\tc}\t]y\tJn\nrp\neg\npV\nz\\{W\npl\nz\\\nzU\tPc\t`{\bV@\nc|\bRw\ti_\bVb\nwX\tHvSu\bTF\v_W\vWs\vsIm\nTT\ndc\tUS\t}f\tiZ\bWz\tc}MD\tBe\tiD\v@@\bTl\bPv\t}tSwM`\vnU\tkW\ved\nqo\vxY\tA|\bTz\vy`BRBM\tiaXU\nyun^\tfL\tiI\nXW\tfD\bWz\bW@\tyj\tm\tav\tBN\vb\\\tpD\bTf\nY[\tJn\bQy\t[^\vWc\vyuDlCJ\vWj\vHR\t`V\vuW\tQy\np@\vGuplJm\bW[\nLP\nxC\n`m\twQuiR\nbI\twQ\tBZ\tWVBR\npg\tcgtiCW\n_y\tRg\bQa\vQB\vWc\nYble\ngESu\nL[\tQ\tea\tdj\v]W\nb~M`\twL\bTV\bVH\nt\npl\t|bs_\bU|\bTaoQlvSkM`\bTv\vK}\nfl\tcCoQBR\tHk\t|d\bQp\tHK\tBZ\vHR\bPv\vLx\vEZ\bT\bTv\tiDoDMU\vwBSuk`St\ntC\tPl\tKg\noi\tjY\vxYh}\nzk\bWZ\tm\ve`\tTB\tfE\nzk\t`zYh\nV|\tHK\tAJ\tAJ\bUL\tp\\\tql\nYcKd\nfyYh\t[I\vDgJm\n]n\nlb\bUd\n{Z\tlu\tfsoQ\bTWJm\vwB\teaYhBC\tsb\tTn\nzU\n_y\vxY\tQ]\ngwmt\tO\\\ntb\bWW\bQy\tmI\tV[\ny\\\naB\vRb\twQ\n]QQJ\bWg\vWa\bQj\ntC\bVH\nYm\vxs\bVK\nel\bWI\vxYCq\ntR\vHV\bTl\bVw\tay\bQa\bVV\t}t\tdj\nr|\tp\\\twR\n{i\nTT\t[I\ti[\tAJ\vxs\v_W\td{\vQ}\tcg\tTz\tA|\tCj\vLmN}m\nbK\tdZ\tp\\\t`V\tsV\np@\tiD\twQ\vQ}\bTfkaJm\v@@\bV`\tzp\n@NSw\tiI\tcg\noiSu\bVwloCy\tc}\vb\\\tsUBA\bWI\bTf\nxS\tVp\nd|\bTV\vbC\tNoJu\nTC\t|`\n{Z\tD]\bU|\tc}lm\bTl\tBv\tPl\tc}\bQp\tm\nLk\tkj\n@NSbKO\tj_\tp\\\nzU\bTl\bTg\bWI\tcfXO\bWW\ndzli\tBN\nd[\bWOMD\vKC\tdj\tI_\bVV\ny\\\vLmxl\txB\tkV\vb\\\vJW\vVS\tVx\vxD\td{MD\bTa\t|`\vPzR}\vWsBM\nsICN\bTaJm\npe\ti_\npV\nrh\tRd\tHv\n~A\nxR\vWh\vWk\nxS\vAz\vwX\nbIoQ\tfw\nqI\nV|\nunz\vpg\td\\\voA{D\ti_xB\bT\t`Vqr\tTTg]CA\vuR\tVJ\tT`\npw\vRb\tI_\nCxRo\vsICjKh\tBv\tWVBBoD{D\nhcKm\v^R\tQE\n{I\np@\nc|Gt\tc}Dl\nzUqN\tsVk}\tHh\v|j\nqou|\tQ]\vekZM`St\npe\tdj\bVG\veE\tm\vWc|I\n[W\tfL\bT\tBZSu\vKaCqNtY[\nqI\bTv\tfM\ti@\t}fB\\\tQy\vBl\bWgXDkc\vx[\bVV\tQ]\ta\tPy\vxD\nfI\t}foD\tdj\tSGls\t~DCN\n{Z\t\\v\n_D\nhc\vx_C[\tAJ\nLM\tVxCI\tbj\tc^\tcF\ntCSx\twrXA\bU\\\t|a\vK\\\bTV\bVj\nd|\tfsCX\ntb\bRw\tVx\tAE\tA|\bTNt\vDg\tVc\bTld@\npo\tM\tcF\npe\tiZ\tBo\bSq\nfHl`\bTx\bWf\tHE\vF{\tcO\tfD\nlm\vfZ\nlm\veU\tdGBH\bTV\tSiMW\nwX\nz\\\t\\cCX\nd}\tl}\bQp\bTV\tF~\bQ\t`i\ng@nO\bUd\bTl\nL[\twQ\tji\ntC\t|J\nLU\naB\vxYKj\tAJuN\ti[\npeSk\vDg\vx]\bVb\bVV\nea\tkV\nqI\bTaSk\nAO\tpD\ntb\nts\nyi\bVg\ti_\v_W\nLkNt\tyj\tfMR\tiI\bTl\vwX\tsV\vMl\nyu\tAJ\bVjKO\tWV\vA}\vW\nrp\tiD\v|olv\vsIBM\td~\tCU\bVbeV\npC\vwT\tj`\tc}\vxs\vps\vvh\tWV\vGg\vAe\vVK\v]W\trg\vWcF`\tBr\vb\\\tdZ\bQp\nqIkF\nLk\vAR\bWI\bTg\tbs\tdw\n{L\n_y\tiZ\bTA\tlg\bVV\bTl\tdk\n`k\ta{\ti_{Awj\twN\v@@\bTe\ti_\n_D\twL\nAH\viK\vek\n[]\tp_\tyj\bTv\tUS\t[r\n{I\npsGt\vVK\nplS}\vWP\t|dMD\vHV\bTR}M`\bTV\bVHlvCh\bW[Ke\tR{\v^R\tab\tBZ\tVA\tB`\nd|\nhsKe\tBeOi\tR{\td\\nB\bWZ\tdZ\tVJOs\tmuQ\vhZQ@QQ\nfI\bW[B\\li\nzU\nMdM`\nxS\bVV\n\\}\vxD\tm\bTpIS\nc|\tkVi~\tV{\vhZ\t|b\bWt\n@R\voA\vnU\bWI\tea\tB`\tiD\tc}\tTzBR\vQBNj\tCP\t[I\bTv\t`WuN\vpg\vpg\vWc\tiT\tbs\twL\tU_\tc\\\t|h\vKa\tNr\tfL\nq|\nzu\nz\\\tNr\bUg\t|bm`\bTv\nyd\nrp\bWf\tUXBV\nzk\nd}\twQ\t}fCe\ved\bTW\bSB\nxU\tcn\bTb\ne\ta\\\tSG\bU|\npV\nN\\Kn\vnU\tAt\tpD\v^R\vIrb[\tR{\tdE\vxD\vWK\vWA\bQL\bW@Su\bUd\nDM\tPcCADloQ\tHswiub\na\bQpOb\nLP\bTlY[\vK}\tAJ\bQn^\vsA\bSM\nqM\bWZ\n^W\vz{S|\tfD\bVK\bTv\bPvBB\tCPdF\tid\vxsmx\vws\tcC\ntC\tycM`\vW\nrh\bQp\vxD\\o\nsI_k\nzukF\tfDXsXO\tjp\bTvBS{B\tBr\nzQ\nbI\tc{BDBVnO\bTF\tcaJd\tfL\tPV\tI_\nlK`o\twX\npa\tgu\bP}{^\bWf\n{I\tBN\npaKl\vpg\tcn\tfL\vvhCq\bTl\vnU\bSqCm\twR\bUJ\npe\nyd\nYgCy\vKW\tfD\neaoQ\tj_\tBvnM\vID\bTa\nzApl\n]n\bTa\tR{\tfr\n_y\bUg{Xkk\vxD|Ixl\nfyCe\vwB\nLk\vd]\noi\n}h\tQ]\npe\bVwHkOQ\nzk\tAJ\npV\bPv\ny\\\tA{Oi\bSBXA\veE\tjp\nq}\tiDqN\v^R\tm\tiZ\tBr\bVg\noi\n\\X\tU_\nc|\vHV\bTf\tTn\\N\\N\nuBlv\nyu\tTd\bTf\bPL\v]W\tdG\nA`\nw^\ngI\npe\tdw\nz\\ia\bWZ\tcFJm\n{Z\bWO_kDfRR\td\\\bVV\vxsBNtilm\tTd\t]y\vHV\tSo\v|jXX\tA|\vZ^\vGu\bTWM`kF\vhZ\vVK\tdG\vBl\tay\nxUqEnO\bVw\nqICX\ne\tPl\bWO\vLm\tdLuHCm\tdTfn\vwBka\vnU\n@M\nyT\tHv\t\\}Kh\td~Yhk}\neR\td\\\bWI\t|b\tHK\tiD\bTWMY\npl\bQ_\twr\vAx\tHE\bTg\bSqvp\vb\\\bWO\nOl\nsI\nfy\vID\t\\c\n{Z\n^~\npe\nAO\tTT\vxvk_\bWO\v|j\vwB\tQy\ti@\tPl\tHa\tdZk}ra\tUT\vJc\ved\np@\tQN\nd|\tkj\tHkM`\noi\twr\td\\\nlq\no_\nlb\nL[\tacBBBHCm\npl\tIQ\bVK\vxs\n`e\viK\npaOi\tUS\bTp\tfD\nPGkkXA\nz\\\neg\vWh\twRqN\nqS\tcnlo\nxS\n^W\tBU\nt\tHE\tp\\\tfF\tfw\bVV\bW@\tak\vVKls\tVJ\bVV\veE\\o\nyX\nYmM`lL\nd|\nzk\tA{sE\twQXT\nt\tPl\t]y\vwT{pMD\vb\\\tQ]Kj\tJn\nAH\vRb\tBU\tHK\t\\c\nfIm\nqM\n@R\tSo\noiBT\tHv\n_yKh\tBZ\t]i\bUJ\tV{Sr\nbI\vGg\ta_\bTR\nfI\nfl\t[K\tIIS|\vuW\tiI\bWI\nqI\v|jBV\bVg\bWZkF\vx]\bTA\tab\tfr\ti@\tJd\tJd\vps\nAO\bTaxu\tiD\nzk\t|d\t|`\bW[\tlP\tdG\bVV\vw}\vqO\ti[\bQ\bTz\vVF\twNts\tdw\bTv\neS\ngi\tNryS\npe\bVV\bSq\n`m\tyj\tBZ\vWX\bSB\tc\\\nUR\t[J\tc_nM\bWQ\vAx\nMd\tBrui\vxY\bSM\vWc\v|j\vxs\t}Q\tBO\bPL\bWW\tfM\nAO\tPc\veUe^\bTg\nqI\tac\bPv\tcFoQ\tQ\vhZka\nz\\\tiK\tBU\n`k\tCPS|M`\n{I\tS{_O\tBZZiSk\tps\tp\\\nYu\n]s\nxC\bWt\nbD\tkV\vGuyS\nqA\t[r\neKM`\tdZlL\bUg\bTl\nbD\tUS\vb\\\tpV\nccS\\\tct\t`z\bPL\vWs\nA`\neg\bSquECR\vDg\t`W\vz{\vWcSkSk\tbW\bUg\tea\nxZ\tiI\tUX\tVJ\nqn\tS{\vRb\bTQ\nplGt\vuWuj\npF\nqI\tfL\t[I\tiaXO\nyu\vDg\ved\tq{VG\bQka\tVj\tkV\txB\nd|\np@\tQN\tPc\tps]j\tkV\toU\bTp\nzUnB\vB]\ta{\bV@\n]nm`\tcz\tR{m`\bQa\vwT\bSMMYqN\tdj~s\vQ}MY\vMB\tBv\twR\bRg\vQ}\tql\vKC\nrmxuCC\vwB\vvh\tBqXq\npV\ti_ObuE\nbd\nqo\v{i\nC~\tBL\veEuH\bVjEyGz\vzR\v{i\tcf\n{Z\n]nXA\vGu\vnU\thS\vGI\nCc\tHE\bTA\tHBBHCj\nCc\bTF\tHE\nXI\tA{\bQ\tc\\\vmO\vWX\nfH\np@MY\bTF\nlK\tBt\nzU\tTTKm\vwT\npV\ndt\vyI\tVx\tQ\tRg\tTd\nzU\bRS\nLM\twAnM\tTn\ndS\t]g\nLc\vwB\t}t\t[I\tCPkX\vFm\vhZm\ti[\np@\vQ}\vW\t|d\nMO\nMd\tf_\tfD\tcJ\tHz\vRb\tio\tPyY[\nxU\tct\v@@\tww\bPvBMFF\ntbv|\vKm\tBq\tBqKh`o\nZdXU\ti]\t|`\tStB\\\bQ\v_W\tTJ\nqI\t|a\tA{\vuPMD\tPl\nxR\tfL\vws\tc{\td\\\bV`\neg\tHKkc\nd|\bVV\ny\\kc\ti]\bVG\t`V\tss\tI_\tAE\tbs\tdu\nel\tpD\vW\nqslv\bSMZi\vVKia\vQB\tQ\n{Z\bPt\vKl\nlK\nhs\ndS\bVKmf\nd^\tkV\tcO\nc|\bVH\t\\]\bTv\bSq\tmI\vDg\tVJ\tcn\ny\\\bVg\bTv\nyX\bTF\t]]\bTp\noi\nhs\veU\nBf\tdjMr\n|p\t\\g\t]r\bVb{D\nd[XN\tfM\tO\\s_\tcf\tiZXN\vWc\tqv\n`m\tU^oD\nd|\vGg\tdE\vwflou}\nd|oQ\t`iOi\vxD\ndZ\nCxYw\nzk\ntb\ngw\tyj\tB`\nyX\vps\ntC\vpP\vqw\bPu\bPX\tDm\npwNj\tss\taG\vxs\bPt\noLGz\tOk\ti@\ti]eC\tIQ\tii\tdj\v@J\t|duh\bWZ\veU\vnU\bTa\tcCg]\nzkYh\bVK\nLU\np@\ntb\ntR\tCj\vNP\ti@\bP{\n\\}\n{c\nwX\tfL\bVG\tc{\t|`\tAJ\t|C\tfDln\t|d\tbs\nqI{B\vAx\np@\nzk\vRbOs\vWSe^\vD_\tBv\vWd\bVb\vxs\veE\bRw\n]n\n|p\vg|\tfwkc\bTIka\n\\TSp\tju\vps\npeu|\vGr\bVe\tCU]MXU\vxD\bTa\tIQ\vWq\tCU\tam\tdj\bSoSw\vnUCh\tQ]s_\bPt\tfS\bTa\t\\}\n@OYc\tUZ\bTx\npe\vnU\nzU\t|}\tiD\nz\\\bSM\vxDBR\nzQ\tQN]MYh\nLP\vFm\vLXvc\vqlka\tHK\bVb\ntC\nCy\bTv\nuVoQ\t`z\t[I\tB`\vRb\tyj\tsb\vWs\bTl\tkV\ved\nelL\vxN\tm\nJn\tjY\vxD\bVb\bSq\vyu\twL\vXL\bTA\tpg\tAt\tnDXX\twR\npl\nhwyS\nps\tcO\bW[\v|jXN\tsV\tp\\\tBe\nb~\nAJ\n]ek`qN\tdw\tWV\tHE\vEVJz\tid\tB`\tzhE]\tfD\bTgqN\bTa\tjaCv\bSM\nhc\bUet_\tieg]\twQ\nPn\bVB\tjw\bVg\vbE\tBZ\vRH\bP{\tjp\n\\}\ta_\tcC\t|a\vD]\tBZ\ti[\tfD\vxW\no_\td\\\n_D\ntb\t\\c\tAJ\nlKoQlo\vLx\vM@\bWZKn\vpg\nTi\nIv\n|r\v@}JzLmWhk}ln\vxD\n]sgc\vps\tBr\bTW\vBMtZ\nBYDW\tjf\vSWC}\nqo\tdE\tmv\tIQ\bPP\bUblvBC\nzQ\t[I\vgl\nig\bUsBT\vbC\bSq\tsU\tiW\nJn\tSY\tHK\trg\npV\vID\v|jKO\t`S\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl<X<W=c=k=n<R<V<\\<V<T<W<T=a=n<R<^=m<Y<Y<_<R<S=l<T=n<\\<V<Y=e<Y=o<Z<Y<v<\\<V<]<Y<[<]=g<W<R<Q<T<~=m<Y<S<R<X<A=n<R=n<R<P=k<Y<P<Q<Y=n<W<Y=n=l<\\<[<R<Q<\\<_<X<Y<P<Q<Y<x<W=c<s=l<T<Q<\\=m<Q<T=i=n<Y<P<V=n<R<_<R<X<^<R=n=n<\\<P<M<D<|<P<\\=c<K=n<R<^<\\=m<^<\\<P<Y<P=o<N<\\<V<X<^<\\<Q<\\<P=a=n<T=a=n=o<~<\\<P=n<Y=i<S=l<R=n=o=n<Q<\\<X<X<Q=c<~<R=n=n=l<T<Q<Y<U<~<\\=m<Q<T<P=m<\\<P=n<R=n=l=o<]<r<Q<T<P<T=l<Q<Y<Y<r<r<r<W<T=j=a=n<\\<r<Q<\\<Q<Y<P<X<R<P<P<R<U<X<^<Y<R<Q<R=m=o<X\fHy\fIk\fHU\fId\fHy\fIl\fHT\fIk\fHy\fHR\fHy\fIg\fHx\fH\\\fHF\fH\\\fHD\fIk\fHc\fHy\fHy\fHS\fHA\fIl\fHk\fHT\fHy\fH\\\fHH\fIg\fHU\fIg\fHj\fHF\fHU\fIl\fHC\fHU\fHC\fHR\fHH\fHy\fHI\fHRibdqbm\fHj\fHp\fHp\fIg\fHi\fH@\fHJ\fIg\fH{\fHd\fHp\fHR\fH{\fHc\fHU\fHB\fHk\fHD\fHY\fHU\fHC\fIk\fHI\fIk\fHI\fIl\fHt\fH\\\fHp\fH@\fHJ\fIl\fHy\fHd\fHp\fIl\fHY\fIk\fHD\fHd\fHD\fHc\fHU\fH\\\fHe\fHT\fHB\fIk\fHy\fHB\fHY\fIg\fH^\fIk\fHT\fH@\fHB\fHd\fHJ\fIk\fH\fH\\\fHj\fHB\fH@\fHT\fHA\fH\\\fH@\fHD\fHv\fH^\fHB\fHD\fHj\fH{\fHT\fIl\fH^\fIl4U5h5e4I5h5e5k4\\4K4N4B4]4U4C4C4K5h5e5k4\\5k4Y5d4]4V5f4]5o4K5j5d5h4K4D5f5j4U4]4Z4\\5h5o5k5j4K5f5d5i5n4K5h4U5h5f4K5j4K5h5o5j4A4F5e5n4D5h5d4A4E4K4B4]5m5n4[4U4D4C4]5o5j4I4\\4K5o5i4K4K4A4C4I5h4K5m5f5k4D4U4Z5o5f5m4D4A4G5d5i5j5d5k5d4O5j4K4@4C4K5h5k4K4_5h5i4U5j4C5h5f4_4U4D4]4Y5h5e5i5j4\\4D5k4K4O5j5k5i4G5h5o5j4F4K5h4K4A5f4G5i4Y4]4X4]4A4A5d5h5d5m5f4K4\\4K5h5o5h5i4]4E4K5j4F4K5h5m4O4D5d4B4K4Y4O5j4F4K5j5k4K5h5f4U4Z5d5d5n4C4K4D5j4B5f4]4D5j4F5h5o5i4X4K4M5d5k5f4K4D5d5n4Y4Y5d5i4K4]5n5i4O4A4C5j4A5j4U4C5i4]4O5f4K4A4E5o4F4D4C5d5j5f4@4D5i5j5k4F4A4F4@5k4E4_5j4E5f4F5i5o4]4E4V4^4E5j5m4_4D5f4F5h5h5k5h5j4K4F5h5o5n5h4D5h5i4K4U5j5k4O5d5h4X5f4M5j5d4]4O5i4K5m5f5o4D5o5h4\\4K4F4]4F4D4D4O5j5k5i4_4K5j5o4D5f4U5m5n4C4A4_5j5h5k5i4X4U4]4O5k5h4X5k4]5n4[4]4[5h4Dsqlejofpfquj`fgfebvowkjnpfoegfwbjop`lmwfmwpvsslqwpwbqwfgnfppbdfpv``fppebpkjlm?wjwof=`lvmwqzb``lvmw`qfbwfgpwlqjfpqfpvowpqvmmjmdsql`fpptqjwjmdlaif`wpujpjaoftfo`lnfbqwj`ofvmhmltmmfwtlqh`lnsbmzgzmbnj`aqltpfqsqjub`zsqlaofnPfquj`fqfpsf`wgjpsobzqfrvfpwqfpfquftfapjwfkjpwlqzeqjfmgplswjlmptlqhjmdufqpjlmnjoojlm`kbmmfotjmglt-bggqfppujpjwfgtfbwkfq`lqqf`wsqlgv`wfgjqf`welqtbqgzlv#`bmqfnlufgpvaif`w`lmwqlobq`kjuf`vqqfmwqfbgjmdojaqbqzojnjwfgnbmbdfqevqwkfqpvnnbqznb`kjmfnjmvwfpsqjubwf`lmwf{wsqldqbnpl`jfwzmvnafqptqjwwfmfmbaofgwqjddfqplvq`fpolbgjmdfofnfmwsbqwmfqejmboozsfqef`wnfbmjmdpzpwfnphffsjmd`vowvqf%rvlw8/ilvqmbosqlif`wpvqeb`fp%rvlw8f{sjqfpqfujftpabobm`fFmdojpk@lmwfmwwkqlvdkSofbpf#lsjmjlm`lmwb`wbufqbdfsqjnbqzujoobdfPsbmjpkdboofqzgf`ojmfnffwjmdnjppjlmslsvobqrvbojwznfbpvqfdfmfqbopsf`jfppfppjlmpf`wjlmtqjwfqp`lvmwfqjmjwjboqfslqwpejdvqfpnfnafqpklogjmdgjpsvwffbqojfqf{sqfppgjdjwbosj`wvqfBmlwkfqnbqqjfgwqbeej`ofbgjmd`kbmdfg`fmwqbouj`wlqzjnbdfp,qfbplmppwvgjfpefbwvqfojpwjmdnvpw#afp`kllopUfqpjlmvpvboozfsjplgfsobzjmddqltjmdlaujlvplufqobzsqfpfmwb`wjlmp?,vo=\ttqbssfqboqfbgz`fqwbjmqfbojwzpwlqbdfbmlwkfqgfphwlsleefqfgsbwwfqmvmvpvboGjdjwbo`bsjwboTfapjwfebjovqf`lmmf`wqfgv`fgBmgqljggf`bgfpqfdvobq#%bns8#bmjnbopqfofbpfBvwlnbwdfwwjmdnfwklgpmlwkjmdSlsvobq`bswjlmofwwfqp`bswvqfp`jfm`foj`fmpf`kbmdfpFmdobmg>2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2$^*8\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\t\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#$$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\t\tTkfm#lapfquf?,k1=\tNlgfqm#sqlujgf!#bow>!alqgfqp-\t\tElq#\t\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2$^*8\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\t\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\t\n\n?"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+#X^8\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\aobmh$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsks<jg>bo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\t\n?"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-ip<bqf#wkfhlmwbhwwlgbz$p-kwno!#wbqdfw>tfbqjmdBoo#Qjd8\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\t\t?"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\t\tPlnf#$`oj`h$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\t~*8\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg$^*8\t##kbp#wkfvm`ofbqFufmw$/alwk#jmmlw#boo\t\t?"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm$wqfwqfbw-#Plnf#tt-!*8\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfpx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\t\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\t\n\njw#jmwlqbmhfg#qbwf#levo=\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\t\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp">#$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq$($jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\t\n\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl"..#fmgojfp#jm$^*8\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#$nbhf#b#pf`vqfgAbswjpwulwjmd#\t\n\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\tsflsof-jm#lmf#>tjmgltellwfq\\b#dllg#qfhobnblwkfqp/wl#wkjp\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\t\t\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbm<ubovf>gjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\t\n\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\t\t?"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo\'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\t\n\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\t\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#$kwws9$p`qjsw$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\t\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\t\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\t\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\t\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\t\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?"..#fmg?,psbm=??aq#,=\t\\slsvspp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\t\tWkf#wb{lmlnznv`k#le#?,psbm=\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\t?kfbg=\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8"..#wjwof!=?,irvfqz-?,elqn=\t+\vBl\bQ*+\vUmGx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_<R<X<\\<Y=m<W<T<Y=m=n=`<]=g<W<R<]=g=n=`=a=n<R<P<y=m<W<T=n<R<_<R<P<Y<Q=c<^=m<Y=i=a=n<R<U<X<\\<Z<Y<]=g<W<T<_<R<X=o<X<Y<Q=`=a=n<R=n<]=g<W<\\=m<Y<]=c<R<X<T<Q=m<Y<]<Y<Q<\\<X<R=m<\\<U=n=h<R=n<R<Q<Y<_<R=m<^<R<T=m<^<R<U<T<_=l=g=n<R<Z<Y<^=m<Y<P=m<^<R=b<W<T=d=`=a=n<T=i<S<R<V<\\<X<Q<Y<U<X<R<P<\\<P<T=l<\\<W<T<]<R=n<Y<P=o=i<R=n=c<X<^=o=i=m<Y=n<T<W=b<X<T<X<Y<W<R<P<T=l<Y=n<Y<]=c=m<^<R<Y<^<T<X<Y=k<Y<_<R=a=n<T<P=m=k<Y=n=n<Y<P=g=j<Y<Q=g=m=n<\\<W<^<Y<X=`=n<Y<P<Y<^<R<X=g=n<Y<]<Y<^=g=d<Y<Q<\\<P<T=n<T<S<\\=n<R<P=o<S=l<\\<^<W<T=j<\\<R<X<Q<\\<_<R<X=g<[<Q<\\=b<P<R<_=o<X=l=o<_<^=m<Y<U<T<X<Y=n<V<T<Q<R<R<X<Q<R<X<Y<W<\\<X<Y<W<Y=m=l<R<V<T=b<Q=c<^<Y=m=`<y=m=n=`=l<\\<[<\\<Q<\\=d<T4K5h5h5k4K5h4F5f4@5i5f4U4B4K4Y4E4K5h4\\5f4U5h5f5k4@4C5f4C4K5h4N5j4K5h4]4C4F4A5o5i4Y5m4A4E5o4K5j4F4K5h5h5f5f5o5d5j4X4D5o4E5m5f5k4K4D5j4K4F4A5d4K4M4O5o4G4]4B5h4K5h4K5h4A4D4C5h5f5h4C4]5d4_4K4Z4V4[4F5o5d5j5k5j4K5o4_4K4A4E5j4K4C5f4K5h4[4D4U5h5f5o4X5o4]4K5f5i5o5j5i5j5k4K4X4]5o4E4]4J5f4_5j4X5f4[5i4K4\\4K4K5h5m5j4X4D4K4D4F4U4D4]4]4A5i4E5o4K5m4E5f5n5d5h5i4]5o4^5o5h5i4E4O4A5i4C5n5h4D5f5f4U5j5f4Y5d4]4E4[4]5f5n4X4K4]5o4@5d4K5h4O4B4]5e5i4U5j4K4K4D4A4G4U4]5d4Z4D4X5o5h5i4_4@5h4D5j4K5j4B4K5h4C5o4F4K4D5o5h5f4E4D4C5d5j4O5f4Z4K5f5d4@4C5m4]5f5n5o4F4D4F4O5m4Z5h5i4[4D4B4K5o4G4]4D4K4]5o4K5m4Z5h4K4A5h5e5j5m4_5k4O5f4K5i4]4C5d4C4O5j5k4K4C5f5j4K4K5h4K5j5i4U4]4Z4F4U5h5i4C4K4B5h5i5i5o5j\0\0\v\n\t\b\r\f\f\r\b\t\n\v\0\v\v\v\v\0qfplvq`fp`lvmwqjfprvfpwjlmpfrvjsnfmw`lnnvmjwzbubjobaofkjdkojdkwGWG,{kwnonbqhfwjmdhmltofgdfplnfwkjmd`lmwbjmfqgjqf`wjlmpvap`qjafbgufqwjpf`kbqb`wfq!#ubovf>!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\t\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\t\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\t?"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\t\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\t?"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\t%ow8"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\t\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\t?kfbg=\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\t?,b=?,wg=gfsfmg#lmpfbq`k!=\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\t\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{qjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\fUh\fT{\fTN\n{I\np@Fr\vBl\bQ\tA{\vUmGx\tA{ypYA\0zX\bTV\bWl\bUdBM\vB{\npV\v@xB\\\np@DbGz\tal\npa\tfM\tuD\bV~mx\vQ}\ndS\tp\\\bVK\bS]\bU|oD\tkV\ved\vHR\nb~M`\nJpoD|Q\nLPSw\bTl\nAI\nxC\bWt\tBqF`Cm\vLm\tKx\t}t\bPv\ny\\\naB\tV\nZdXUli\tfr\ti@\tBHBDBV\t`V\n[]\tp_\tTn\n~A\nxR\tuD\t`{\bV@\tTn\tHK\tAJ\vxsZf\nqIZf\vBM\v|j\t}t\bSM\nmC\vQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\fHB\fIk\fHn\fH^\fHS\fHc\fHU\fId\fHn\fH{\fHC\fHR\fHT\fHR\fHI\fHc\fHY\fHn\fH\\\fHU\fIk\fHy\fIg\fHd\fHy\fIm\fHw\fH\\\fHU\fHR\fH@\fHR\fHJ\fHy\fHU\fHR\fHT\fHA\fIl\fHU\fIm\fHc\fH\\\fHU\fIl\fHB\fId\fHn\fHJ\fHS\fHD\fH@\fHR\fHHgjsolgl`p\fHT\fHB\fHC\fH\\\fIn\fHF\fHD\fHR\fHB\fHF\fHH\fHR\fHG\fHS\fH\\\fHx\fHT\fHH\fHH\fH\\\fHU\fH^\fIg\fH{\fHU\fIm\fHj\fH@\fHR\fH\\\fHJ\fIk\fHZ\fHU\fIm\fHd\fHz\fIk\fH^\fHC\fHJ\fHS\fHy\fHR\fHB\fHY\fIk\fH@\fHH\fIl\fHD\fH@\fIl\fHv\fHB\fI`\fHH\fHT\fHR\fH^\fH^\fIk\fHz\fHp\fIe\fH@\fHB\fHJ\fHJ\fHH\fHI\fHR\fHD\fHU\fIl\fHZ\fHU\fH\\\fHi\fH^\fH{\fHy\fHA\fIl\fHD\fH{\fH\\\fHF\fHR\fHT\fH\\\fHR\fHH\fHy\fHS\fHc\fHe\fHT\fIk\fH{\fHC\fIl\fHU\fIn\fHm\fHj\fH{\fIk\fHs\fIl\fHB\fHz\fIg\fHp\fHy\fHR\fH\\\fHi\fHA\fIl\fH{\fHC\fIk\fHH\fIm\fHB\fHY\fIg\fHs\fHJ\fIk\fHn\fHi\fH{\fH\\\fH|\fHT\fIk\fHB\fIk\fH^\fH^\fH{\fHR\fHU\fHR\fH^\fHf\fHF\fH\\\fHv\fHR\fH\\\fH|\fHT\fHR\fHJ\fIk\fH\\\fHp\fHS\fHT\fHJ\fHS\fH^\fH@\fHn\fHJ\fH@\fHD\fHR\fHU\fIn\fHn\fH^\fHR\fHz\fHp\fIl\fHH\fH@\fHs\fHD\fHB\fHS\fH^\fHk\fHT\fIk\fHj\fHD\fIk\fHD\fHC\fHR\fHy\fIm\fH^\fH^\fIe\fH{\fHA\fHR\fH{\fH\\\fIk\fH^\fHp\fH{\fHU\fH\\\fHR\fHB\fH^\fH{\fIk\fHF\fIk\fHp\fHU\fHR\fHI\fHk\fHT\fIl\fHT\fHU\fIl\fHy\fH^\fHR\fHL\fIl\fHy\fHU\fHR\fHm\fHJ\fIn\fH\\\fHH\fHU\fHH\fHT\fHR\fHH\fHC\fHR\fHJ\fHj\fHC\fHR\fHF\fHR\fHy\fHy\fI`\fHD\fHZ\fHR\fHB\fHJ\fIk\fHz\fHC\fHU\fIl\fH\\\fHR\fHC\fHz\fIm\fHJ\fH^\fH{\fIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw$/#$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\t\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\t#`lopsbm>!?,elqn=\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\t?,-jmgf{Le+$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\t\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\t?"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\t?,kfbg=\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\t\t%ow8"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\t?kfbg=\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=,jmgf{-sksbqqjubo#le.ippgh$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\t\n\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks<?,avwwlm=\tsfq`fmwbdfafpw.hmltm`qfbwjmd#b!#gjq>!owqOjfvwfmbmw\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\t\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw','fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf<P<R<Z<Q<R<]=o<X<Y=n<P<R<Z<Y=n<^=l<Y<P=c=n<\\<V<Z<Y=k=n<R<]=g<]<R<W<Y<Y<R=k<Y<Q=`=a=n<R<_<R<V<R<_<X<\\<S<R=m<W<Y<^=m<Y<_<R=m<\\<U=n<Y=k<Y=l<Y<[<P<R<_=o=n=m<\\<U=n<\\<Z<T<[<Q<T<P<Y<Z<X=o<]=o<X=o=n<s<R<T=m<V<[<X<Y=m=`<^<T<X<Y<R=m<^=c<[<T<Q=o<Z<Q<R=m<^<R<Y<U<W=b<X<Y<U<S<R=l<Q<R<P<Q<R<_<R<X<Y=n<Y<U=m<^<R<T=i<S=l<\\<^<\\=n<\\<V<R<U<P<Y=m=n<R<T<P<Y<Y=n<Z<T<[<Q=`<R<X<Q<R<U<W=o=k=d<Y<S<Y=l<Y<X=k<\\=m=n<T=k<\\=m=n=`=l<\\<]<R=n<Q<R<^=g=i<S=l<\\<^<R=m<R<]<R<U<S<R=n<R<P<P<Y<Q<Y<Y=k<T=m<W<Y<Q<R<^=g<Y=o=m<W=o<_<R<V<R<W<R<Q<\\<[<\\<X=n<\\<V<R<Y=n<R<_<X<\\<S<R=k=n<T<s<R=m<W<Y=n<\\<V<T<Y<Q<R<^=g<U=m=n<R<T=n=n<\\<V<T=i=m=l<\\<[=o<M<\\<Q<V=n=h<R=l=o<P<v<R<_<X<\\<V<Q<T<_<T=m<W<R<^<\\<Q<\\=d<Y<U<Q<\\<U=n<T=m<^<R<T<P=m<^=c<[=`<W=b<]<R<U=k<\\=m=n<R=m=l<Y<X<T<v=l<R<P<Y<H<R=l=o<P=l=g<Q<V<Y=m=n<\\<W<T<S<R<T=m<V=n=g=m=c=k<P<Y=m=c=j=j<Y<Q=n=l=n=l=o<X<\\=m<\\<P=g=i=l=g<Q<V<\\<q<R<^=g<U=k<\\=m<R<^<P<Y=m=n<\\=h<T<W=`<P<P<\\=l=n<\\=m=n=l<\\<Q<P<Y=m=n<Y=n<Y<V=m=n<Q<\\=d<T=i<P<T<Q=o=n<T<P<Y<Q<T<T<P<Y=b=n<Q<R<P<Y=l<_<R=l<R<X=m<\\<P<R<P=a=n<R<P=o<V<R<Q=j<Y=m<^<R<Y<P<V<\\<V<R<U<|=l=i<T<^5i5j4F4C5e4I4]4_4K5h4]4_4K5h4E4K5h4U4K5i5o4F4D5k4K4D4]4K5i4@4K5h5f5d5i4K5h4Y5d4]4@4C5f4C4E4K5h4U4Z5d4I4Z4K5m4E4K5h5n4_5i4K5h4U4K4D4F4A5i5f5h5i5h5m4K4F5i5h4F5n5e4F4U4C5f5h4K5h4X4U4]4O4B4D4K4]4F4[5d5f4]4U5h5f5o5i4I4]5m4K5n4[5h4D4K4F4K5h5h4V4E4F4]4F5f4D4K5h5j4K4_4K5h4X5f4B5i5j4F4C5f4K5h4U4]4D4K5h5n4Y4Y4K5m5h4K5i4U5h5f5k4K4F4A4C5f4G4K5h5h5k5i4K5h4U5i5h5i5o4F4D4E5f5i5o5j5o4K5h4[5m5h5m5f4C5f5d4I4C4K4]4E4F4K4]5f4B4K5h4Y4A4E4F4_4@5f5h4K5h5d5n4F4U5j4C5i4K5i4C5f5j4E4F4Y5i5f5i4O4]4X5f5m4K5h4\\5f5j4U4]4D5f4E4D5d4K4D4E4O5h4U4K4D4K5h4_5m4]5i4X4K5o5h4F4U4K5h5e4K5h4O5d5h4K5h4_5j4E4@4K5i4U4E4K5h4Y4A5m4K5h4C5f5j5o5h5i4K4F4K5h4B4K4Y4K5h5i5h5m4O4U4Z4K4M5o4F4K4D4E4K5h4B5f4]4]4_4K4J5h4K5h5n5h4D4K5h4O4C4D5i5n4K4[4U5i4]4K4_5h5i5j4[5n4E4K5h5o4F4D4K5h4]4@5h4K4X4F4]5o4K5h5n4C5i5f4U4[5f5opAzWbdMbnf+-isd!#bow>!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISDwkvnasbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\t\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\t\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\t\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\t?kfbg=\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\tkbujmd#affm\t?kfbg=\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\t\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks<qfnbjmfg#jmwqbmpelqnfgKf#tbp#bopltbp#boqfbgzpwbwjpwj`bojm#ebulq#leNjmjpwqz#lenlufnfmw#leelqnvobwjlmjp#qfrvjqfg?ojmh#qfo>!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\t?,kfbg=\t@lmufqpfoz/=\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\t\n?,gju=\t\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\t\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\t\n\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#pklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\n\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\tKltfufq#wkfofbg#wl#wkf\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?"X@GBWBX\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\t,jmgf{-kwno!tjmglt-lsfm+#"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm$vmgfejmfg$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\t?kwdfldqbskj`bo@lmpwjwvwjlm$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?"Xfmgje^..=~\t?,p`qjsw=\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\t-mlmwlv`k#lapfqubwjlmp?,b=\t?,gju=\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\t\n\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\n\n?,p`qjsw=\t\t\n\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\t?,gju=\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\t?kfbg=\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=pbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\t?,p`qjsw=\t\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\t?gju#!=?,gju=\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(_p(\',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*<p<R<Q<_<R<W<M=l<S=m<V<T=m=l<S=m<V<T=m=l<S=m<V<R5h4U4]4D5f4E\nAOGx\bTA\nzk\vBl\bQ\bTA\nzk\vUm\bQ\bTA\nzk\npeu|\ti@\tcT\bVV\n\\}\nxS\tVptSk`\t[X\t[X\vHR\bPv\bTW\bUe\na\bQp\v_W\vWs\nxS\vAz\n_yKhjmelqnb`j/_mkfqqbnjfmwbpfof`wq/_mj`lgfp`qjs`j/_m`obpjej`bglp`lml`jnjfmwlsvaoj`b`j/_mqfob`jlmbgbpjmelqn/Mwj`bqfob`jlmbglpgfsbqwbnfmwlwqbabibglqfpgjqf`wbnfmwfbzvmwbnjfmwlnfq`bglOjaqf`lmw/M`wfmlpkbajwb`jlmfp`vnsojnjfmwlqfpwbvqbmwfpgjpslpj`j/_m`lmpf`vfm`jbfof`wq/_mj`bbsoj`b`jlmfpgfp`lmf`wbgljmpwbob`j/_mqfbojyb`j/_mvwjojyb`j/_mfm`j`olsfgjbfmefqnfgbgfpjmpwqvnfmwlpf{sfqjfm`jbpjmpwjwv`j/_msbqwj`vobqfppva`bwfdlqjb=n<R<W=`<V<R<L<R=m=m<T<T=l<\\<]<R=n=g<]<R<W=`=d<Y<S=l<R=m=n<R<P<R<Z<Y=n<Y<X=l=o<_<T=i=m<W=o=k<\\<Y=m<Y<U=k<\\=m<^=m<Y<_<X<\\<L<R=m=m<T=c<p<R=m<V<^<Y<X=l=o<_<T<Y<_<R=l<R<X<\\<^<R<S=l<R=m<X<\\<Q<Q=g=i<X<R<W<Z<Q=g<T<P<Y<Q<Q<R<p<R=m<V<^=g=l=o<]<W<Y<U<p<R=m<V<^<\\=m=n=l<\\<Q=g<Q<T=k<Y<_<R=l<\\<]<R=n<Y<X<R<W<Z<Y<Q=o=m<W=o<_<T=n<Y<S<Y=l=`<r<X<Q<\\<V<R<S<R=n<R<P=o=l<\\<]<R=n=o<\\<S=l<Y<W=c<^<R<R<]=e<Y<R<X<Q<R<_<R=m<^<R<Y<_<R=m=n<\\=n=`<T<X=l=o<_<R<U=h<R=l=o<P<Y=i<R=l<R=d<R<S=l<R=n<T<^=m=m=g<W<V<\\<V<\\<Z<X=g<U<^<W<\\=m=n<T<_=l=o<S<S=g<^<P<Y=m=n<Y=l<\\<]<R=n<\\=m<V<\\<[<\\<W<S<Y=l<^=g<U<X<Y<W<\\=n=`<X<Y<Q=`<_<T<S<Y=l<T<R<X<]<T<[<Q<Y=m<R=m<Q<R<^<Y<P<R<P<Y<Q=n<V=o<S<T=n=`<X<R<W<Z<Q<\\=l<\\<P<V<\\=i<Q<\\=k<\\<W<R<L<\\<]<R=n<\\<N<R<W=`<V<R=m<R<^=m<Y<P<^=n<R=l<R<U<Q<\\=k<\\<W<\\=m<S<T=m<R<V=m<W=o<Z<]=g=m<T=m=n<Y<P<S<Y=k<\\=n<T<Q<R<^<R<_<R<S<R<P<R=e<T=m<\\<U=n<R<^<S<R=k<Y<P=o<S<R<P<R=e=`<X<R<W<Z<Q<R=m=m=g<W<V<T<]=g=m=n=l<R<X<\\<Q<Q=g<Y<P<Q<R<_<T<Y<S=l<R<Y<V=n<M<Y<U=k<\\=m<P<R<X<Y<W<T=n<\\<V<R<_<R<R<Q<W<\\<U<Q<_<R=l<R<X<Y<^<Y=l=m<T=c=m=n=l<\\<Q<Y=h<T<W=`<P=g=o=l<R<^<Q=c=l<\\<[<Q=g=i<T=m<V<\\=n=`<Q<Y<X<Y<W=b=c<Q<^<\\=l=c<P<Y<Q=`=d<Y<P<Q<R<_<T=i<X<\\<Q<Q<R<U<[<Q<\\=k<T=n<Q<Y<W=`<[=c=h<R=l=o<P<\\<N<Y<S<Y=l=`<P<Y=m=c=j<\\<[<\\=e<T=n=g<w=o=k=d<T<Y\fHD\fHU\fIl\fHn\fHy\fH\\\fHD\fIk\fHi\fHF\fHD\fIk\fHy\fHS\fHC\fHR\fHy\fH\\\fIk\fHn\fHi\fHD\fIa\fHC\fHy\fIa\fHC\fHR\fH{\fHR\fHk\fHM\fH@\fHR\fH\\\fIk\fHy\fHS\fHT\fIl\fHJ\fHS\fHC\fHR\fHF\fHU\fH^\fIk\fHT\fHS\fHn\fHU\fHA\fHR\fH\\\fHH\fHi\fHF\fHD\fIl\fHY\fHR\fH^\fIk\fHT\fIk\fHY\fHR\fHy\fH\\\fHH\fIk\fHB\fIk\fH\\\fIk\fHU\fIg\fHD\fIk\fHT\fHy\fHH\fIk\fH@\fHU\fIm\fHH\fHT\fHR\fHk\fHs\fHU\fIg\fH{\fHR\fHp\fHR\fHD\fIk\fHB\fHS\fHD\fHs\fHy\fH\\\fHH\fHR\fHy\fH\\\fHD\fHR\fHe\fHD\fHy\fIk\fHC\fHU\fHR\fHm\fHT\fH@\fHT\fIk\fHA\fHR\fH[\fHR\fHj\fHF\fHy\fIk\fH^\fHS\fHC\fIk\fHZ\fIm\fH\\\fIn\fHk\fHT\fHy\fIk\fHt\fHn\fHs\fIk\fHB\fIk\fH\\\fIl\fHT\fHy\fHH\fHR\fHB\fIk\fH\\\fHR\fH^\fIk\fHy\fH\\\fHi\fHK\fHS\fHy\fHi\fHF\fHD\fHR\fHT\fHB\fHR\fHp\fHB\fIm\fHq\fIk\fHy\fHR\fH\\\fHO\fHU\fIg\fHH\fHR\fHy\fHM\fHP\fIl\fHC\fHU\fHR\fHn\fHU\fIg\fHs\fH^\fHZ\fH@\fIa\fHJ\fH^\fHS\fHC\fHR\fHp\fIl\fHY\fHD\fHp\fHR\fHH\fHR\fHy\fId\fHT\fIk\fHj\fHF\fHy\fHR\fHY\fHR\fH^\fIl\fHJ\fIk\fHD\fIk\fHF\fIn\fH\\\fIl\fHF\fHR\fHD\fIl\fHe\fHT\fHy\fIk\fHU\fIg\fH{\fIl\fH@\fId\fHL\fHy\fHj\fHF\fHy\fIl\fHY\fH\\\fIa\fH[\fH{\fHR\fHn\fHY\fHj\fHF\fHy\fIg\fHp\fHS\fH^\fHR\fHp\fHR\fHD\fHR\fHT\fHU\fHB\fHH\fHU\fHB\fIk\fHn\fHe\fHD\fHy\fIl\fHC\fHR\fHU\fIn\fHJ\fH\\\fIa\fHp\fHT\fIn\fHv\fIl\fHF\fHT\fHn\fHJ\fHT\fHY\fHR\fH^\fHU\fIg\fHD\fHR\fHU\fIg\fHH\fIl\fHp\fId\fHT\fIk\fHY\fHR\fHF\fHT\fHp\fHD\fHH\fHR\fHD\fIk\fHH\fHR\fHp\fHR\fH\\\fIl\fHt\fHR\fHC\fH^\fHp\fHS\fH^\fIk\fHD\fIl\fHv\fIk\fHp\fHR\fHn\fHv\fHF\fHH\fIa\fH\\\fH{\fIn\fH{\fH^\fHp\fHR\fHH\fIk\fH@\fHR\fHU\fH\\\fHj\fHF\fHD\fIk\fHY\fHR\fHU\fHD\fHk\fHT\fHy\fHR\fHT\fIm\fH@\fHU\fH\\\fHU\fHD\fIk\fHk\fHT\fHT\fIk\fHT\fHU\fHS\fHH\fH@\fHM\fHP\fIk\fHt\fHs\fHD\fHR\fHH\fH^\fHR\fHZ\fHF\fHR\fHn\fHv\fHZ\fIa\fH\\\fIl\fH@\fHM\fHP\fIl\fHU\fIg\fHH\fIk\fHT\fHR\fHd\fHs\fHZ\fHR\fHC\fHJ\fHT\fHy\fHH\fIl\fHp\fHR\fHH\fIl\fHY\fHR\fH^\fHR\fHU\fHp\fHR\fH\\\fHF\fHs\fHD\fHR\fH\\\fHz\fHD\fIk\fHT\fHM\fHP\fHy\fHB\fHS\fH^\fHR\fHe\fHT\fHy\fIl\fHy\fIk\fHY\fH^\fH^\fH{\fHH\fHR\fHz\fHR\fHD\fHR\fHi\fH\\\fIa\fHI\fHp\fHU\fHR\fHn\fHJ\fIk\fHz\fHR\fHF\fHU\fH^\fIl\fHD\fHS\fHC\fHB\fH@\fHS\fHD\fHR\fH@\fId\fHn\fHy\fHy\fHU\fIl\fHn\fHy\fHU\fHD\fHR\fHJ\fIk\fHH\fHR\fHU\fHB\fH^\fIk\fHy\fHR\fHG\fIl\fHp\fH@\fHy\fHS\fHH\fIm\fH\\\fHH\fHB\fHR\fHn\fH{\fHY\fHU\fIl\fHn\fH\\\fIg\fHp\fHP\fHB\fHS\fH^\fIl\fHj\fH\\\fIg\fHF\fHT\fIk\fHD\fHR\fHC\fHR\fHJ\fHY\fH^\fIk\fHD\fIk\fHz\fHR\fHH\fHR\fHy\fH\\\fIl\fH@\fHe\fHD\fHy\fHR\fHp\fHY\fHR\fH@\fHF\fIn\fH\\\fHR\fH@\fHM\fHP\fHR\fHT\fI`\fHJ\fHR\fHZ\fIk\fHC\fH\\\fHy\fHS\fHC\fIk\fHy\fHU\fHR\fHn\fHi\fHy\fHT\fH\\\fH@\fHD\fHR\fHc\fHY\fHU\fHR\fHn\fHT\fIa\fHI\fH^\fHB\fHS\fH^\fIk\fH^\fIk\fHz\fHy\fHY\fHS\fH[\fHC\fHy\fIa\fH\\\fHn\fHT\fHB\fIn\fHU\fHI\fHR\fHD\fHR4F4_4F4[5f4U5i4X4K4]5o4E4D5d4K4_4[4E4K5h4Y5m4A4E5i5d4K4Z5f4U4K5h4B4K4Y4E4K5h5i4^5f4C4K5h4U4K5i4E4K5h5o4K4F4D4K5h4]4C5d4C4D4]5j4K5i4@4K5h4C5d5h4E4K5h4U4K5h5i4K5h5i5d5n4U4K5h4U4]4D5f4K5h4_4]5f4U4K5h4@5d4K5h4K5h4\\5k4K4D4K5h4A5f4K4E4K5h4A5n5d5n4K5h5o4]5f5i4K5h4U4]4K5n5i4A5m5d4T4E4K5h4G4K5j5f5i4X4K5k4C4E4K5h5i4]4O4E4K5h5n4]4N5j4K5h4X4D4K4D4K5h4A5d4K4]4K5h4@4C5f4C4K5h4O4_4]4E4K5h4U5h5d5i5i4@5i5d4U4E4K5h4]4A5i5j4K5h5j5n4K4[5m5h4_4[5f5j4K5h5o5d5f4F4K5h4C5j5f4K4D4]5o4K4F5k4K5h4]5f4K4Z4F4A5f4K4F5f4D4F5d5n5f4F4K5h4O5d5h5e4K5h4D4]5f4C4K5h5o5h4K5i4K5h4]4K4D4[4K5h4X4B4Y5f4_5f4K4]4K4F4K5h4G4K5h4G4K5h4Y5h4K4E4K5h4A4C5f4G4K5h4^5d4K4]4K5h4B5h5f4@4K5h4@5i5f4U4K5h4U4K5i5k4K5h4@5i4K5h4K5h4_4K4U4E5i4X4K5k4C5k4K5h4]4J5f4_4K5h4C4B5d5h4K5h5m5j5f4E4K5h5o4F4K4D4K5h4C5d4]5f4K5h4C4]5d4_4K4_4F4V4]5n4F4Y4K5i5f5i4K5h4D5j4K4F4K5h4U4T5f5ifmwfqwbjmnfmwvmgfqpwbmgjmd#>#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\t?,gju=\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\t\n?ojmh#qfo>!#pq`>$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw"Xfmgje^..=\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\n\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\t?,p`qjsw=\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,<plqw>wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf$/#$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?"Xfmgje^..=\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\t?,p`qjsw=\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?"Xfmgje^..=\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>$pwzofpkffw$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\twzsf>!pvanjw!#\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?"Xfmgje^..=\t\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+$p`qjsw$?,b=\t?,oj=\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\t\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\t?algz#pwzof>!tjgwk9Wj\rVSmd#Uj\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\t?,p`qjsw=\t\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\t\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\t\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\t?,p`qjsw=\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\jg!#`lmwfmw>!`bsjwbo#le#wkf\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#xje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\t?,kfbg=\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\t-\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?"Xfmgje^..=\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\t\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\n\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\t?,p`qjsw=\t?skjolplskj`bo#pqsphlkqubwphjwj\rVSmd#Uj\rWkw<L=o=m=m<V<T<U=l=o=m=m<V<T<Ujmufpwjdb`j/_msbqwj`jsb`j/_m<V<R=n<R=l=g<Y<R<]<W<\\=m=n<T<V<R=n<R=l=g<U=k<Y<W<R<^<Y<V=m<T=m=n<Y<P=g<q<R<^<R=m=n<T<V<R=n<R=l=g=i<R<]<W<\\=m=n=`<^=l<Y<P<Y<Q<T<V<R=n<R=l<\\=c=m<Y<_<R<X<Q=c=m<V<\\=k<\\=n=`<Q<R<^<R=m=n<T<O<V=l<\\<T<Q=g<^<R<S=l<R=m=g<V<R=n<R=l<R<U=m<X<Y<W<\\=n=`<S<R<P<R=e=`=b=m=l<Y<X=m=n<^<R<]=l<\\<[<R<P=m=n<R=l<R<Q=g=o=k<\\=m=n<T<Y=n<Y=k<Y<Q<T<Y<<W<\\<^<Q<\\=c<T=m=n<R=l<T<T=m<T=m=n<Y<P<\\=l<Y=d<Y<Q<T=c<M<V<\\=k<\\=n=`<S<R=a=n<R<P=o=m<W<Y<X=o<Y=n=m<V<\\<[<\\=n=`=n<R<^<\\=l<R<^<V<R<Q<Y=k<Q<R=l<Y=d<Y<Q<T<Y<V<R=n<R=l<R<Y<R=l<_<\\<Q<R<^<V<R=n<R=l<R<P<L<Y<V<W<\\<P<\\4K5h5i5j4F4C5e5i5j4F4C5f4K4F4K5h5i5d4Z5d4U4K5h4D4]4K5i4@4K5h5i5d4K5n4U4K5h4]4_4K4J5h5i4X4K4]5o4K4F4K5h4O4U4Z4K4M4K5h4]5f4K4Z4E4K5h4F4Y5i5f5i4K5h4K4U4Z4K4M4K5h5j4F4K4J4@4K5h4O5h4U4K4D4K5h4F4_4@5f5h4K5h4O5n4_4K5i4K5h4Z4V4[4K4F4K5h5m5f4C5f5d4K5h4F4]4A5f4D4K5h4@4C5f4C4E4K5h4F4U5h5f5i4K5h4O4B4D4K4]4K5h4K5m5h4K5i4K5h4O5m5h4K5i4K5h4F4K4]5f4B4K5h4F5n5j5f4E4K5h4K5h4U4K4D4K5h4B5d4K4[4]4K5h5i4@4F5i4U4K5h4C5f5o5d4]4K5h4_5f4K4A4E4U4D4C4K5h5h5k4K5h4F4]4D5f4E4K5h4]5d4K4D4[4K5h4O4C4D5f4E4K5h4K4B4D4K4]4K5h5i4F4A4C4E4K5h4K4V4K5j5f`vqplq9sljmwfq8?,wjwof=\t?nfwb#!#kqfe>!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=##?b#kqfe>!?"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\t\n\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\t?,kwno=\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\t?,p`qjsw=\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\t?,gju=\t\tbgnjmjpwqbwjuf#?,algz=\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\t\n?gju#`obpp>!?,gju=\t\n?,gju=\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\t\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\bTA\nzk#+\vBl\bQ*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\fHe\fHF\fHC\fIg\fH{\fHF\fIn\fH\\\fIa\fHY\fHU\fHB\fHR\fH\\\fIk\fH^\fIg\fH{\fIg\fHn\fHv\fIm\fHD\fHR\fHY\fH^\fIk\fHy\fHS\fHD\fHT\fH\\\fHy\fHR\fH\\\fHF\fIm\fH^\fHS\fHT\fHz\fIg\fHp\fIk\fHn\fHv\fHR\fHU\fHS\fHc\fHA\fIk\fHp\fIk\fHn\fHZ\fHR\fHB\fHS\fH^\fHU\fHB\fHR\fH\\\fIl\fHp\fHR\fH{\fH\\\fHO\fH@\fHD\fHR\fHD\fIk\fHy\fIm\fHB\fHR\fH\\\fH@\fIa\fH^\fIe\fH{\fHB\fHR\fH^\fHS\fHy\fHB\fHU\fHS\fH^\fHR\fHF\fIo\fH[\fIa\fHL\fH@\fHN\fHP\fHH\fIk\fHA\fHR\fHp\fHF\fHR\fHy\fIa\fH^\fHS\fHy\fHs\fIa\fH\\\fIk\fHD\fHz\fHS\fH^\fHR\fHG\fHJ\fI`\fH\\\fHR\fHD\fHB\fHR\fHB\fH^\fIk\fHB\fHH\fHJ\fHR\fHD\fH@\fHR\fHp\fHR\fH\\\fHY\fHS\fHy\fHR\fHT\fHy\fIa\fHC\fIg\fHn\fHv\fHR\fHU\fHH\fIk\fHF\fHU\fIm\fHm\fHv\fH@\fHH\fHR\fHC\fHR\fHT\fHn\fHY\fHR\fHJ\fHJ\fIk\fHz\fHD\fIk\fHF\fHS\fHw\fH^\fIk\fHY\fHS\fHZ\fIk\fH[\fH\\\fHR\fHp\fIa\fHC\fHe\fHH\fIa\fHH\fH\\\fHB\fIm\fHn\fH@\fHd\fHJ\fIg\fHD\fIg\fHn\fHe\fHF\fHy\fH\\\fHO\fHF\fHN\fHP\fIk\fHn\fHT\fIa\fHI\fHS\fHH\fHG\fHS\fH^\fIa\fHB\fHB\fIm\fHz\fIa\fHC\fHi\fHv\fIa\fHw\fHR\fHw\fIn\fHs\fHH\fIl\fHT\fHn\fH{\fIl\fHH\fHp\fHR\fHc\fH{\fHR\fHY\fHS\fHA\fHR\fH{\fHt\fHO\fIa\fHs\fIk\fHJ\fIn\fHT\fH\\\fIk\fHJ\fHS\fHD\fIg\fHn\fHU\fHH\fIa\fHC\fHR\fHT\fIk\fHy\fIa\fHT\fH{\fHR\fHn\fHK\fIl\fHY\fHS\fHZ\fIa\fHY\fH\\\fHR\fHH\fIk\fHn\fHJ\fId\fHs\fIa\fHT\fHD\fHy\fIa\fHZ\fHR\fHT\fHR\fHB\fHD\fIk\fHi\fHJ\fHR\fH^\fHH\fH@\fHS\fHp\fH^\fIl\fHF\fIm\fH\\\fIn\fH[\fHU\fHS\fHn\fHJ\fIl\fHB\fHS\fHH\fIa\fH\\\fHy\fHY\fHS\fHH\fHR\fH\\\fIm\fHF\fHC\fIk\fHT\fIa\fHI\fHR\fHD\fHy\fH\\\fIg\fHM\fHP\fHB\fIm\fHy\fIa\fHH\fHC\fIg\fHp\fHD\fHR\fHy\fIo\fHF\fHC\fHR\fHF\fIg\fHT\fIa\fHs\fHt\fH\\\fIk\fH^\fIn\fHy\fHR\fH\\\fIa\fHC\fHY\fHS\fHv\fHR\fH\\\fHT\fIn\fHv\fHD\fHR\fHB\fIn\fH^\fIa\fHC\fHJ\fIk\fHz\fIk\fHn\fHU\fHB\fIk\fHZ\fHR\fHT\fIa\fHy\fIn\fH^\fHB\fId\fHn\fHD\fIk\fHH\fId\fHC\fHR\fH\\\fHp\fHS\fHT\fHy\fIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\t?,p`qjsw=\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\t?,kwno=\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\t?,p`qjsw=\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\t\n\n?,gju=\tgjpsobz9#mlmf8!=!#,=\t?ojmh#qfo>!\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isdwkvnaofewubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\t\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\t?-ip!=?,p`qjsw=\tojmh#qfo>!j`lm!#$#bow>$$#`obpp>$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\t##?sbdf=\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*"y"W"W"["Q"U"V"@=i=l<^<\\=n=m<V<T<V<R<P<S<\\<Q<T<T=c<^<W=c<Y=n=m=c<x<R<]<\\<^<T=n=`=k<Y<W<R<^<Y<V<\\=l<\\<[<^<T=n<T=c<t<Q=n<Y=l<Q<Y=n<r=n<^<Y=n<T=n=`<Q<\\<S=l<T<P<Y=l<T<Q=n<Y=l<Q<Y=n<V<R=n<R=l<R<_<R=m=n=l<\\<Q<T=j=g<V<\\=k<Y=m=n<^<Y=o=m<W<R<^<T=c=i<S=l<R<]<W<Y<P=g<S<R<W=o=k<T=n=`=c<^<W=c=b=n=m=c<Q<\\<T<]<R<W<Y<Y<V<R<P<S<\\<Q<T=c<^<Q<T<P<\\<Q<T<Y=m=l<Y<X=m=n<^<\\4K5h5i5d4K4Z5f4U4K5h4]4J5f4_5f4E4K5h4K5j4F5n4K5h5i4X4K4]5o4K4F5o4K5h4_5f4K4]4K4F4K5h5i5o4F5d4D4E4K5h4_4U5d4C5f4E4K4A4Y4K4J5f4K4F4K5h4U4K5h5i5f4E4K5h4Y5d4F5f4K4F4K5h4K5j4F4]5j4F4K5h4F4Y4K5i5f5i4K5h4I4_5h4K5i5f4K5h5i4X4K4]5o4E4K5h5i4]4J5f4K4Fqlalwp!#`lmwfmw>!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isdqjdkwwkvna-ip!=?,p`qjsw=\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\t?,gju=\t?gfqjufg#eqln#wkf#?jnd#pq`>$kwws9,,b``lqgjmd#wl#wkf#\t?,algz=\t?,kwno=\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+$?`kbqpfw>!vwe.;!=\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\t?,gju=\t\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\t?,kwno="y"W"W"["Q"U"V"@\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>$!#wbqdfw>!\\aobmh!=Lm#wkf#lwkfq#kbmg/-isdwkvnaqjdkw1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\t?,kwno=\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?"GL@WZSF#kwno=\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\t?,gju=\t\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\t?,gju=\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\n\n?,gju=\t\n\n?,gju=\twkf#nlwjlm#sj`wvqf<}=f<W<_<\\=l=m<V<T<]=f<W<_<\\=l=m<V<T<H<Y<X<Y=l<\\=j<T<T<Q<Y=m<V<R<W=`<V<R=m<R<R<]=e<Y<Q<T<Y=m<R<R<]=e<Y<Q<T=c<S=l<R<_=l<\\<P<P=g<r=n<S=l<\\<^<T=n=`<]<Y=m<S<W<\\=n<Q<R<P<\\=n<Y=l<T<\\<W=g<S<R<[<^<R<W=c<Y=n<S<R=m<W<Y<X<Q<T<Y=l<\\<[<W<T=k<Q=g=i<S=l<R<X=o<V=j<T<T<S=l<R<_=l<\\<P<P<\\<S<R<W<Q<R=m=n=`=b<Q<\\=i<R<X<T=n=m=c<T<[<]=l<\\<Q<Q<R<Y<Q<\\=m<Y<W<Y<Q<T=c<T<[<P<Y<Q<Y<Q<T=c<V<\\=n<Y<_<R=l<T<T<|<W<Y<V=m<\\<Q<X=l\fHJ\fIa\fHY\fHR\fH\\\fHR\fHB\fId\fHD\fIm\fHi\fH^\fHF\fIa\fH\\\fHJ\fHR\fHD\fHA\fHR\fH\\\fHH\fIl\fHC\fHi\fHD\fIm\fHJ\fIk\fHZ\fHU\fHS\fHD\fIa\fHJ\fIl\fHk\fHn\fHM\fHS\fHC\fHR\fHJ\fHS\fH^\fIa\fH^\fIl\fHi\fHK\fHS\fHy\fHR\fH\\\fHY\fIl\fHM\fHS\fHC\fIg\fHv\fHS\fHs\fIa\fHL\fIk\fHT\fHB\fHR\fHv\fHR\fH\\\fHp\fHn\fHy\fIa\fHZ\fHD\fHJ\fIm\fHD\fHS\fHC\fHR\fHF\fIa\fH\\\fHC\fIg\fH{\fHi\fHD\fIm\fHT\fHR\fH\\\fH}\fHD\fH^\fHR\fHk\fHD\fHF\fHR\fH\\\fIa\fHs\fIl\fHZ\fH\\\fIa\fHH\fIg\fHn\fH^\fIg\fHy\fHT\fHA\fHR\fHG\fHP\fIa\fH^\fId\fHZ\fHZ\fH\\\fIa\fHH\fIk\fHn\fHF\fIa\fH\\\fHJ\fIk\fHZ\fHF\fIa\fH^\fIk\fHC\fH\\\fHy\fIk\fHn\fHJ\fIa\fH\\\fHT\fIa\fHI\fHS\fHH\fHS\fHe\fHH\fIa\fHF\fHR\fHJ\fHe\fHD\fIa\fHU\fIk\fHn\fHv\fHS\fHs\fIa\fHL\fHR\fHC\fHR\fHH\fIa\fH\\\fHR\fHp\fIa\fHC\fHR\fHJ\fHR\fHF\fIm\fH\\\fHR\fHD\fIk\fHp\fIg\fHM\fHP\fIk\fHn\fHi\fHD\fIm\fHY\fHR\fHJ\fHZ\fIa\fH\\\fIk\fHO\fIl\fHZ\fHS\fHy\fIa\fH[\fHR\fHT\fH\\\fHy\fHR\fH\\\fIl\fHT\fHn\fH{\fIa\fH\\\fHU\fHF\fH\\\fHS\fHO\fHR\fHB\fH@\fIa\fH\\\fHR\fHn\fHM\fH@\fHv\fIa\fHv\fIg\fHn\fHe\fHF\fH^\fH@\fIa\fHK\fHB\fHn\fHH\fIa\fH\\\fIl\fHT\fHn\fHF\fH\\\fIa\fHy\fHe\fHB\fIa\fHB\fIl\fHJ\fHB\fHR\fHK\fIa\fHC\fHB\fHT\fHU\fHR\fHC\fHH\fHR\fHZ\fH@\fIa\fHJ\fIg\fHn\fHB\fIl\fHM\fHS\fHC\fHR\fHj\fHd\fHF\fIl\fHc\fH^\fHB\fIg\fH@\fHR\fHk\fH^\fHT\fHn\fHz\fIa\fHC\fHR\fHj\fHF\fH\\\fIk\fHZ\fHD\fHi\fHD\fIm\fH@\fHn\fHK\fH@\fHR\fHp\fHP\fHR\fH\\\fHD\fHY\fIl\fHD\fHH\fHB\fHF\fIa\fH\\\fHB\fIm\fHz\fHF\fIa\fH\\\fHZ\fIa\fHD\fHF\fH\\\fHS\fHY\fHR\fH\\\fHD\fIm\fHy\fHT\fHR\fHD\fHT\fHB\fH\\\fIa\fHI\fHD\fHj\fHC\fIg\fHp\fHS\fHH\fHT\fIg\fHB\fHY\fHR\fH\\4K5h5i4X4K4]5o4K4F4K5h5i5j4F4C5f4K4F4K5h5o5i4D5f5d4F4]4K5h5i4X4K5k4C4K4F4U4C4C4K5h4^5d4K4]4U4C4C4K5h4]4C5d4C4K5h4I4_5h4K5i5f4E4K5h5m5d4F5d4X5d4D4K5h5i4_4K4D5n4K4F4K5h5i4U5h5d5i4K4F4K5h5i4_5h4_5h4K4F4K5h4@4]4K5m5f5o4_4K5h4K4_5h4K5i5f4E4K5h4K4F4Y4K5h4K4Fhfztlqgp!#`lmwfmw>!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\t?,gju=\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\t\t?,algz=\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\tt-bggFufmwOjpwfmfq<b`wjlm>!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\t\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+$p`qjsw$*8#?nfwb#sqlsfqwz>!ld9<}=f<W<_<\\=l=m<V<T\t#wzsf>!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\t?,p`qjsw=\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\t?p`qjsw#wzsf>!w?b#kqfe>$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\t?,p`qjsw=\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\t?,p`qjsw=\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\t?,gju=\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\t?,gju=\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*<O<V=l<\\={<Q=m=`<V<\\=o<V=l<\\={<Q=m=`<V<\\<L<R=m=m<T<U=m<V<R<U<P<\\=n<Y=l<T<\\<W<R<^<T<Q=h<R=l<P<\\=j<T<T=o<S=l<\\<^<W<Y<Q<T=c<Q<Y<R<]=i<R<X<T<P<R<T<Q=h<R=l<P<\\=j<T=c<t<Q=h<R=l<P<\\=j<T=c<L<Y=m<S=o<]<W<T<V<T<V<R<W<T=k<Y=m=n<^<R<T<Q=h<R=l<P<\\=j<T=b=n<Y=l=l<T=n<R=l<T<T<X<R=m=n<\\=n<R=k<Q<R4K5h5i4F5d4K4@4C5d5j4K5h4K4X4F4]4K5o4K4F4K5h4K5n4F4]4K4A4K4Fkwno8#`kbqpfw>VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\t?,gju=\t?,gju=\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\t?lswjlm#ubov?"GL@WZSF#kwno=\t?"..XJmwfqmbwjlmbo#Bjqslqw=\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\fTL\fT^\fTE\fT^\fUh\fT{\fTN\roI\ro|\roL\ro{\roO\rov\rot\nAOGx\bTA\nzk#+\vUmGx*\fHD\fHS\fH\\\fIa\fHJ\fIk\fHZ\fHM\fHR\fHe\fHD\fH^\fIg\fHM\fHy\fIa\fH[\fIk\fHH\fIa\fH\\\fHp\fHR\fHD\fHy\fHR\fH\\\fIl\fHT\fHn\fH@\fHn\fHK\fHS\fHH\fHT\fIa\fHI\fHR\fHF\fHD\fHR\fHT\fIa\fHY\fIl\fHy\fHR\fH\\\fHT\fHn\fHT\fIa\fHy\fH\\\fHO\fHT\fHR\fHB\fH{\fIa\fH\\\fIl\fHv\fHS\fHs\fIa\fHL\fIg\fHn\fHY\fHS\fHp\fIa\fHr\fHR\fHD\fHi\fHB\fIk\fH\\\fHS\fHy\fHR\fHY\fHS\fHA\fHS\fHD\fIa\fHD\fH{\fHR\fHM\fHS\fHC\fHR\fHm\fHy\fIa\fHC\fIg\fHn\fHy\fHS\fHT\fIm\fH\\\fHy\fIa\fH[\fHR\fHF\fHU\fIm\fHm\fHv\fHH\fIl\fHF\fIa\fH\\\fH@\fHn\fHK\fHD\fHs\fHS\fHF\fIa\fHF\fHO\fIl\fHy\fIa\fH\\\fHS\fHy\fIk\fHs\fHF\fIa\fH\\\fHR\fH\\\fHn\fHA\fHF\fIa\fH\\\fHR\fHF\fIa\fHH\fHB\fHR\fH^\fHS\fHy\fIg\fHn\fH\\\fHG\fHP\fIa\fHH\fHR\fH\\\fHD\fHS\fH\\\fIa\fHB\fHR\fHO\fH^\fHS\fHB\fHS\fHs\fIk\fHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?"GL@WZSF#kwno=\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>$wf{w,ibubp`qjsw$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\n\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*<R=l<_<\\<Q<T<[<\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n=`<R<]=l<\\<[<R<^<\\<Q<T=c=l<Y<_<T=m=n=l<\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n<T<R<]=c<[<\\=n<Y<W=`<Q<\\?"GL@WZSF#kwno#SVAOJ@#!mw.Wzsf!#`lmwfmw>!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#$wf{w,ibubp`qjsw$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+$p`qjsw$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+$#wzsf>$wf{w,ibubp`qjsw$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\t\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>$wf{w,ibubp`qjsw$=<X<Y=c=n<Y<W=`<Q<R=m=n<T=m<R<R=n<^<Y=n=m=n<^<T<T<S=l<R<T<[<^<R<X=m=n<^<\\<]<Y<[<R<S<\\=m<Q<R=m=n<T\fHF\fIm\fHT\fIa\fHH\fHS\fHy\fHR\fHy\fHR\fHn\fH{\fIa\fH\\\fIk\fHT\fHe\fHD\fIa\fHU\fIg\fHn\fHD\fIk\fHY\fHS\fHK\fHR\fHD\fHT\fHA\fHR\fHG\fHS\fHy\fIa\fHT\fHS\fHn\fH{\fHT\fIm\fH\\\fHy\fIa\fH[\fHS\fHH\fHy\fIe\fHF\fIl\fH\\\fHR\fHk\fHs\fHY\fHS\fHp\fIa\fHr\fHR\fHF\fHD\fHy\fHR\fH\\\fIa\fH\\\fHY\fHR\fHd\fHT\fHy\fIa\fH\\\fHS\fHC\fHH\fHR',"۷%ƌ'T%…'W%×%O%g%¦&Ɠ%ǥ&>&*&'&^&ˆŸా&ƭ&ƒ&)&^&%&'&‚&P&1&±&3&]&m&u&E&t&C&Ï&V&V&/&>&6&ྲྀ᝼o&p&@&E&M&P&x&@&F&e&Ì&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1ɞ*Ϫ⇳&፲&K&;&)&E&H&P&0&?&9&V&&-&v&a&,&E&)&?&=&'&'&B&മ&ԃ&̖*&*8&%&%&&&%,)&š&>&†&7&]&F&2&>&J&6&n&2&%&?&Ž&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%Լ„(,(<&,&Ϛ&ᣇ&-&,(%&(&%&(Ļ0&X&D&&j&'&J&(&.&B&3&Z&R&h&3&E&E&<Æ-͠ỳ&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&Cܬ⨥&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&ṸÌ-&7&1&F&7&t&W&7&I&.&.&^&=ྜ᧓&8(>&/&/&ݻ')'ၥ')'%@/&0&%оী*&*@&CԽהɴ׫4෗ܚӑ6඄&/Ÿ̃Z&*%ɆϿ&Ĵ&1¨ҴŴ",g,"AAAAKKLLKKKKKJJIHHIHHGGFF");!function setData(e,t){const a=m,n=p;for(let e=0;e<t.length;++e)n[e]=t[e];let s=0;for(let e=0;e<t.length;++e){a[e]=s;const t=n[e];0!==t&&(s+=e<<(31&t))}for(let e=t.length;e<32;++e)a[e]=s;u=e}(d,g);function InputStream(e){this.data=new Int8Array(0);this.offset=0;this.data=e}function readInput(e,t,a,n){if(null===e.input)return-1;const s=e.input,r=Math.min(s.offset+n,s.data.length),i=r-s.offset;t.set(s.data.subarray(s.offset,r),a);s.offset+=i;return i}function toUtf8Runes(e){const t=e.length,a=new Int32Array(t);for(let n=0;n<t;++n)a[n]=e.charCodeAt(n);return a}function makeError(e,t){if(t>=0)return t;e.runningState>=0&&(e.runningState=t);throw new Error("Brotli error code: "+t)}return function decode(e,t){let a=new State;a.input=new InputStream(e);initState(a);if(t){let e=t.customDictionary;e&&function attachDictionaryChunk(e,t){if(1!==e.runningState)return makeError(e,-24);if(0===e.cdNumChunks){e.cdChunks=new Array(16);e.cdChunkOffsets=new Int32Array(16);e.cdBlockBits=-1}if(15===e.cdNumChunks)return makeError(e,-27);e.cdChunks[e.cdNumChunks]=t;e.cdNumChunks++;e.cdTotalSize+=t.length;e.cdChunkOffsets[e.cdNumChunks]=e.cdTotalSize;return 0}(a,e)}let n=0,s=[];for(;;){let e=new Int8Array(16384);s.push(e);a.output=e;a.outputOffset=0;a.outputLength=16384;a.outputUsed=0;decompress(a);n+=a.outputUsed;if(a.outputUsed<16384)break}!function close(e){if(0===e.runningState)return makeError(e,-25);e.runningState>0&&(e.runningState=11);return 0}(a);!function closeInput(e){e.input=new InputStream(new Int8Array(0))}(a);let r=new Int8Array(n),i=0;for(let e=0;e<s.length;++e){let t=s[e],a=Math.min(n,i+16384)-i;a<16384?r.set(t.subarray(0,a),i):r.set(t,i);i+=a}return r}})();class BrotliStream extends DecodeStream{#G=!0;constructor(e,t){super(t);this.stream=e;this.dict=e.dict}readBlock(){const e=this.stream.getBytes(),t=Za(new Int8Array(e.buffer,e.byteOffset,e.length));this.buffer=new Uint8Array(t.buffer,t.byteOffset,t.length);this.bufferLength=this.buffer.length;this.eof=!0}async getImageData(e,t){const a=await this.asyncGetBytes();return a?a.length<=e?a:a.subarray(0,e):this.getBytes(e)}async asyncGetBytes(){const{decompressed:e,compressed:t}=await this.asyncGetBytesFromDecompressionStream("brotli");if(e)return e;this.#G=!1;this.stream=new Stream(t,0,t.length,this.stream.dict);this.reset();return null}get isAsync(){return this.#G}}const en=async function JBig2(e={}){var t=e,quit_=(e,t)=>{throw t},a=import.meta.url;try{new URL(".",a).href}catch{}0;console.log.bind(console);var n,s,r=console.error.bind(console),i=!1;function updateMemoryViews(){if(!s?.buffer?.resizable){var e=function getMemoryBuffer(){return p.buffer}();s=new Int8Array(e);o=new Uint8Array(e)}}class ExitStatus{name="ExitStatus";constructor(e){this.message=`Program terminated with exit(${e})`;this.status=e}}var o,callRuntimeCallbacks=e=>{for(;e.length>0;)e.shift()(t)},l=[],f=[],c=!0,h=0,u={},handleException=e=>{if(e instanceof ExitStatus||"unwind"==e)return n;quit_(0,e)},keepRuntimeAlive=()=>c||h>0,_proc_exit=e=>{n=e;if(!keepRuntimeAlive()){t.onExit?.(e);i=!0}quit_(0,new ExitStatus(e))},_exit=(e,t)=>{n=e;_proc_exit(e)},callUserCallback=e=>{if(!i)try{return e()}catch(e){handleException(e)}finally{(()=>{if(!keepRuntimeAlive())try{_exit(n)}catch(e){handleException(e)}})()}},alignMemory=(e,t)=>Math.ceil(e/t)*t,growMemory=e=>{var t=(e-p.buffer.byteLength+65535)/65536|0;try{p.grow(t);updateMemoryViews();return 1}catch(e){}};t.noExitRuntime&&(c=t.noExitRuntime);t.print&&t.print;t.printErr&&(r=t.printErr);t.arguments&&t.arguments;t.thisProgram&&t.thisProgram;var m,p,d=t.preInit;if(d){"function"==typeof d&&(t.preInit=d=[d]);for(;d.length>0;)d.shift()()}t.writeArrayToMemory=(e,t)=>{s.set(e,t)};var g,b={e:()=>function abort(e){t.onAbort?.(e);r(e=`Aborted(${e})`);i=!0;e+=". Build with -sASSERTIONS for more info.";throw new WebAssembly.RuntimeError(e)}(""),d:()=>{c=!1;h=0},a:(e,t)=>{if(u[e]){clearTimeout(u[e].id);delete u[e]}if(!t)return 0;var a=setTimeout(()=>{delete u[e];callUserCallback(()=>m(e,performance.now()))},t);u[e]={id:a,timeout_ms:t};return 0},g:function _createImageData(e){t.imageData=new Uint8Array(e)},b:e=>{var t=o.length,a=2147483648;if((e>>>=0)>a)return!1;for(var n=1;n<=4;n*=2){var s=t*(1+.2/n);s=Math.min(s,e+100663296);var r=Math.min(a,alignMemory(Math.max(e,s),65536));if(growMemory(r))return!0}return!1},c:_proc_exit,h:function _setImageData(e,a,n,s){if(n===a){t.imageData=new Uint8ClampedArray(o.subarray(e,e+n*s));return}const r=a*s,i=t.imageData=new Uint8ClampedArray(r);for(let t=e,s=0;s<r;t+=n,s+=a)i.set(o.subarray(t,t+a),s)},f:function _setLineData(e,a,n){t.imageData.set(o.subarray(e,e+a),n)}};g=await async function createWasm(){function receiveInstance(e){!function assignWasmExports(e){t._malloc=e.k;t._free=e.l;t._jbig2_decode=e.m;t._ccitt_decode=e.n;m=e.o;p=e.i;e.__indirect_function_table}(g=e.exports);updateMemoryViews();return g}var e=function getWasmImports(){return{a:b}}(),a=t.instantiateWasm;return new Promise(t=>{a(e,e=>t(receiveInstance(e)))})}();await async function run(){!function preRun(){var e=t.preRun;if(e){"function"==typeof e&&(e=[e]);f.push(...e)}callRuntimeCallbacks(f)}();var e=t.setStatus;if(e){e("Running...");await new Promise(e=>setTimeout(e,1));setTimeout(e,1,"")}if(!i){!function initRuntime(){0;g.j()}();t.onRuntimeInitialized?.();!function postRun(){var e=t.postRun;if(e){"function"==typeof e&&(e=[e]);l.push(...e)}callRuntimeCallbacks(l)}()}}();return t};class WasmImage{static#V=null;static#$=new Set;static#T=!0;static#Y=!0;static#R=null;#J=null;#Q=null;_filename=null;_noWasmFilename=null;static setOptions({handler:e,useWasm:t,useWorkerFetch:a,wasmUrl:n}){WasmImage.#T=t;WasmImage.#Y=a;WasmImage.#R=n;a||(WasmImage.#V=e)}static get instance(){unreachable("Abstract getter `instance` accessed")}static cleanup(){for(const e of WasmImage.#$)e.#Q=null}constructor(e=!1){e&&WasmImage.#$.add(this)}async#Z(e){let t=null;try{t=(await(import(
26+/*webpackIgnore: true*/
27+/*@vite-ignore*/
28+`${WasmImage.#R}${this._noWasmFilename}`))).default()}catch(e){warn(`#getJsModule: ${e}`)}e(t)}async#ee(e,t,a){try{this.#J||(WasmImage.#Y?this.#J=await fetchBinaryData(`${WasmImage.#R}${this._filename}`):this.#J=await WasmImage.#V.sendWithPromise("FetchBinaryData",{kind:"wasmUrl",filename:this._filename}));return a((await WebAssembly.instantiate(this.#J,t)).instance)}catch(t){warn(`#instantiateWasm: ${t}`);this.#Z(e);return null}}_getModule(e){if(!this.#Q){const{promise:t,resolve:a}=Promise.withResolvers(),n=[t];WasmImage.#T?n.push(e({warn,instantiateWasm:this.#ee.bind(this,a)})):this.#Z(a);this.#Q=Promise.race(n)}return this.#Q}async decode(e,t){unreachable("Abstract method `decode` called")}}class Jbig2Error extends na{constructor(e){super(e,"Jbig2Error")}}class JBig2CCITTFaxImage extends WasmImage{_filename="jbig2.wasm";_noWasmFilename="jbig2_nowasm_fallback.js";static get instance(){return shadow(this,"instance",new JBig2CCITTFaxImage(!0))}async decode(e,t,a,n,s){const r=await this._getModule(en);if(!r)throw new Jbig2Error("JBig2 failed to initialize");let i,o;try{const l=e.length;i=r._malloc(l);r.writeArrayToMemory(e,i);if(s)r._ccitt_decode(i,l,t,a,s.K,s.EndOfLine?1:0,s.EncodedByteAlign?1:0,s.BlackIs1?1:0,s.Columns,s.Rows);else{const e=n?n.length:0;if(e>0){o=r._malloc(e);r.writeArrayToMemory(n,o)}r._jbig2_decode(i,l,t,a,o,e)}if(!r.imageData)throw new Jbig2Error("Unknown error");const{imageData:f}=r;r.imageData=null;return f}finally{i&&r._free(i);o&&r._free(o)}}}class CCITTFaxStream extends DecodeStream{constructor(e,t,a){super(t);this.stream=e;this.maybeLength=t;this.dict=e.dict;a instanceof Dict||(a=Dict.empty);this.params={K:a.get("K")||0,EndOfLine:!!a.get("EndOfLine"),EncodedByteAlign:!!a.get("EncodedByteAlign"),Columns:a.get("Columns")||1728,Rows:a.get("Rows")||0,EndOfBlock:!!(a.get("EndOfBlock")??!0),BlackIs1:!!a.get("BlackIs1")}}get bytes(){return shadow(this,"bytes",this.stream.getBytes(this.maybeLength))}get isImageStream(){return!0}get isAsyncDecoder(){return!0}async decodeImage(e,t,a){if(this.eof)return this.buffer;e??=this.stream.isAsync&&await this.stream.asyncGetBytes()||this.bytes;this.buffer=await JBig2CCITTFaxImage.instance.decode(e,this.dict.get("W","Width"),this.dict.get("H","Height"),null,this.params);this.bufferLength=this.buffer.length;this.eof=!0;return this.buffer}}const tn=new Int32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),an=new Int32Array([3,4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843,327875,327907,258,258,258]),nn=new Int32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,459009,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]),sn=[new Int32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59e4,524296,524424,524360,590064,459010,524372,524308,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,590040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,524326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,524366,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,524381,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,524339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,524399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,524416,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,459009,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9],rn=[new Int32Array([327680,327696,327688,327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5];class FlateStream extends DecodeStream{#G=!0;constructor(e,t){super(t);this.stream=e;this.dict=e.dict;const a=e.getByte(),n=e.getByte();if(-1===a||-1===n)throw new FormatError(`Invalid header in flate stream: ${a}, ${n}`);if(8!=(15&a))throw new FormatError(`Unknown compression method in flate stream: ${a}, ${n}`);if(((a<<8)+n)%31!=0)throw new FormatError(`Bad FCHECK in flate stream: ${a}, ${n}`);if(32&n)throw new FormatError(`FDICT bit set in flate stream: ${a}, ${n}`);this.codeSize=0;this.codeBuf=0}async getImageData(e,t){const a=await this.asyncGetBytes();return a?a.length<=e?a:a.subarray(0,e):this.getBytes(e)}async asyncGetBytes(){const{decompressed:e,compressed:t}=await this.asyncGetBytesFromDecompressionStream("deflate");if(e)return e;this.#G=!1;this.stream=new Stream(t,2,t.length,this.stream.dict);this.reset();return null}get isAsync(){return this.#G}getBits(e){const t=this.stream;let a,n=this.codeSize,s=this.codeBuf;for(;n<e;){if(-1===(a=t.getByte()))throw new FormatError("Bad encoding in flate stream");s|=a<<n;n+=8}a=s&(1<<e)-1;this.codeBuf=s>>e;this.codeSize=n-=e;return a}getCode(e){const t=this.stream,a=e[0],n=e[1];let s,r=this.codeSize,i=this.codeBuf;for(;r<n&&-1!==(s=t.getByte());){i|=s<<r;r+=8}const o=a[i&(1<<n)-1],l=o>>16,f=65535&o;if(l<1||r<l)throw new FormatError("Bad encoding in flate stream");this.codeBuf=i>>l;this.codeSize=r-l;return f}generateHuffmanTable(e){const t=e.length;let a,n=0;for(a=0;a<t;++a)e[a]>n&&(n=e[a]);const s=1<<n,r=new Int32Array(s);for(let i=1,o=0,l=2;i<=n;++i,o<<=1,l<<=1)for(let n=0;n<t;++n)if(e[n]===i){let e=0,t=o;for(a=0;a<i;++a){e=e<<1|1&t;t>>=1}for(a=e;a<s;a+=l)r[a]=i<<16|n;++o}return[r,n]}#te(e){info(e);this.eof=!0}readBlock(){let e,t,a;const n=this.stream;try{t=this.getBits(3)}catch(e){this.#te(e.message);return}1&t&&(this.eof=!0);t>>=1;if(0===t){let t;if(-1===(t=n.getByte())){this.#te("Bad block header in flate stream");return}let a=t;if(-1===(t=n.getByte())){this.#te("Bad block header in flate stream");return}a|=t<<8;if(-1===(t=n.getByte())){this.#te("Bad block header in flate stream");return}let s=t;if(-1===(t=n.getByte())){this.#te("Bad block header in flate stream");return}s|=t<<8;if(s!==(65535&~a)&&(0!==a||0!==s))throw new FormatError("Bad uncompressed block length in flate stream");this.codeBuf=0;this.codeSize=0;const r=this.bufferLength,i=r+a;e=this.ensureBuffer(i);this.bufferLength=i;if(0===a)-1===n.peekByte()&&(this.eof=!0);else{const t=n.getBytes(a);e.set(t,r);t.length<a&&(this.eof=!0)}return}let s,r;if(1===t){s=sn;r=rn}else{if(2!==t)throw new FormatError("Unknown block type in flate stream");{const e=this.getBits(5)+257,t=this.getBits(5)+1,n=this.getBits(4)+4,i=new Uint8Array(tn.length);let o;for(o=0;o<n;++o)i[tn[o]]=this.getBits(3);const l=this.generateHuffmanTable(i);a=0;o=0;const f=e+t,c=new Uint8Array(f);let h,u,m;for(;o<f;){const e=this.getCode(l);if(16===e){h=2;u=3;m=a}else if(17===e){h=3;u=3;m=a=0}else{if(18!==e){c[o++]=a=e;continue}h=7;u=11;m=a=0}let t=this.getBits(h)+u;for(;t-- >0;)c[o++]=m}s=this.generateHuffmanTable(c.subarray(0,e));r=this.generateHuffmanTable(c.subarray(e,f))}}e=this.buffer;let i=e?e.length:0,o=this.bufferLength;for(;;){let t=this.getCode(s);if(t<256){if(o+1>=i){e=this.ensureBuffer(o+1);i=e.length}e[o++]=t;continue}if(256===t){this.bufferLength=o;return}t-=257;t=an[t];let n=t>>16;n>0&&(n=this.getBits(n));a=(65535&t)+n;t=this.getCode(r);t=nn[t];n=t>>16;n>0&&(n=this.getBits(n));const l=(65535&t)+n;if(o+a>=i){e=this.ensureBuffer(o+a);i=e.length}for(let t=0;t<a;++t,++o)e[o]=e[o-l]}}}class Jbig2Stream extends DecodeStream{constructor(e,t,a){super(t);this.stream=e;this.dict=e.dict;this.maybeLength=t;this.params=a}get bytes(){return shadow(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(e){}get isAsyncDecoder(){return!0}get isImageStream(){return!0}static stripFileHeader(e){if(e.length>=9&&151===e[0]&&74===e[1]&&66===e[2]&&50===e[3]&&13===e[4]&&10===e[5]&&26===e[6]&&10===e[7]){const t=2&e[8]?9:13;return e.subarray(t)}return e}async decodeImage(e,t,a){if(this.eof)return this.buffer;e=Jbig2Stream.stripFileHeader(e||this.bytes);let n=null;if(this.params instanceof Dict){const e=this.params.get("JBIG2Globals");e instanceof BaseStream&&(n=Jbig2Stream.stripFileHeader(e.getBytes()))}this.buffer=await JBig2CCITTFaxImage.instance.decode(e,this.dict.get("Width"),this.dict.get("Height"),n);this.bufferLength=this.buffer.length;this.eof=!0;return this.buffer}get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync}}const on=async function OpenJPEG(e={}){var t=e,a="./this.program",quit_=(e,t)=>{throw t},n=import.meta.url;try{new URL(".",n).href}catch{}0;var s,r,i=console.log.bind(console),o=console.error.bind(console),l=!1;function updateMemoryViews(){if(!r?.buffer?.resizable){var e=function getMemoryBuffer(){return y.buffer}();r=new Int8Array(e);c=new Uint8Array(e);f=new Int32Array(e);h=new Uint32Array(e)}}class ExitStatus{name="ExitStatus";constructor(e){this.message=`Program terminated with exit(${e})`;this.status=e}}var f,c,h,callRuntimeCallbacks=e=>{for(;e.length>0;)e.shift()(t)},u=[],m=[],p=!0,d=0,g={},handleException=e=>{if(e instanceof ExitStatus||"unwind"==e)return s;quit_(0,e)},keepRuntimeAlive=()=>p||d>0,_proc_exit=e=>{s=e;if(!keepRuntimeAlive()){t.onExit?.(e);l=!0}quit_(0,new ExitStatus(e))},_exit=(e,t)=>{s=e;_proc_exit(e)},callUserCallback=e=>{if(!l)try{return e()}catch(e){handleException(e)}finally{(()=>{if(!keepRuntimeAlive())try{_exit(s)}catch(e){handleException(e)}})()}},alignMemory=(e,t)=>Math.ceil(e/t)*t,growMemory=e=>{var t=(e-y.buffer.byteLength+65535)/65536|0;try{y.grow(t);updateMemoryViews();return 1}catch(e){}},b={},getEnvStrings=()=>{if(!getEnvStrings.strings){var e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8",_:a};for(var t in b)void 0===b[t]?delete e[t]:e[t]=b[t];var n=[];for(var t in e)n.push(`${t}=${e[t]}`);getEnvStrings.strings=n}return getEnvStrings.strings},stringToUTF8=(e,t,a)=>((e,t,a,n)=>{if(!(n>0))return 0;for(var s=a,r=a+n-1,i=0;i<e.length;++i){var o=e.codePointAt(i);if(o<=127){if(a>=r)break;t[a++]=o}else if(o<=2047){if(a+1>=r)break;t[a++]=192|o>>6;t[a++]=128|63&o}else if(o<=65535){if(a+2>=r)break;t[a++]=224|o>>12;t[a++]=128|o>>6&63;t[a++]=128|63&o}else{if(a+3>=r)break;t[a++]=240|o>>18;t[a++]=128|o>>12&63;t[a++]=128|o>>6&63;t[a++]=128|63&o;i++}}t[a]=0;return a-s})(e,c,t,a),lengthBytesUTF8=e=>{for(var t=0,a=0;a<e.length;++a){var n=e.charCodeAt(a);if(n<=127)t++;else if(n<=2047)t+=2;else if(n>=55296&&n<=57343){t+=4;++a}else t+=3}return t},w=[null,[],[]],j=globalThis.TextDecoder&&new TextDecoder,UTF8ArrayToString=(e,t=0,a,n)=>{var s=((e,t,a,n)=>{var s=t+a;if(n)return s;for(;e[t]&&!(t>=s);)++t;return t})(e,t,a,n);if(s-t>16&&e.buffer&&j)return j.decode(e.subarray(t,s));for(var r="";t<s;){var i=e[t++];if(128&i){var o=63&e[t++];if(192!=(224&i)){var l=63&e[t++];if((i=224==(240&i)?(15&i)<<12|o<<6|l:(7&i)<<18|o<<12|l<<6|63&e[t++])<65536)r+=String.fromCharCode(i);else{var f=i-65536;r+=String.fromCharCode(55296|f>>10,56320|1023&f)}}else r+=String.fromCharCode((31&i)<<6|o)}else r+=String.fromCharCode(i)}return r},printChar=(e,t)=>{var a=w[e];if(t&&10!==t)a.push(t);else{(1===e?i:o)(UTF8ArrayToString(a));a.length=0}},UTF8ToString=(e,t,a)=>e?UTF8ArrayToString(c,e,t,a):"";t.noExitRuntime&&(p=t.noExitRuntime);t.print&&(i=t.print);t.printErr&&(o=t.printErr);t.arguments&&t.arguments;t.thisProgram&&(a=t.thisProgram);var k,y,q=t.preInit;if(q){"function"==typeof q&&(t.preInit=q=[q]);for(;q.length>0;)q.shift()()}t.writeArrayToMemory=(e,t)=>{r.set(e,t)};var v,S={m:()=>function abort(e){t.onAbort?.(e);o(e=`Aborted(${e})`);l=!0;e+=". Build with -sASSERTIONS for more info.";throw new WebAssembly.RuntimeError(e)}(""),l:()=>{p=!1;d=0},i:(e,t)=>{if(g[e]){clearTimeout(g[e].id);delete g[e]}if(!t)return 0;var a=setTimeout(()=>{delete g[e];callUserCallback(()=>k(e,performance.now()))},t);g[e]={id:a,timeout_ms:t};return 0},f:function _copy_pixels_1(e,a){e>>=2;const n=t.imageData=new Uint8ClampedArray(a),s=f.subarray(e,e+a);n.set(s)},e:function _copy_pixels_3(e,a,n,s){e>>=2;a>>=2;n>>=2;const r=t.imageData=new Uint8ClampedArray(3*s),i=f.subarray(e,e+s),o=f.subarray(a,a+s),l=f.subarray(n,n+s);for(let e=0;e<s;e++){r[3*e]=i[e];r[3*e+1]=o[e];r[3*e+2]=l[e]}},d:function _copy_pixels_4(e,a,n,s,r){e>>=2;a>>=2;n>>=2;s>>=2;const i=t.imageData=new Uint8ClampedArray(4*r),o=f.subarray(e,e+r),l=f.subarray(a,a+r),c=f.subarray(n,n+r),h=f.subarray(s,s+r);for(let e=0;e<r;e++){i[4*e]=o[e];i[4*e+1]=l[e];i[4*e+2]=c[e];i[4*e+3]=h[e]}},j:e=>{var t=c.length,a=2147483648;if((e>>>=0)>a)return!1;for(var n=1;n<=4;n*=2){var s=t*(1+.2/n);s=Math.min(s,e+100663296);var r=Math.min(a,alignMemory(Math.max(e,s),65536));if(growMemory(r))return!0}return!1},o:(e,t)=>{var a=0,n=0;for(var s of getEnvStrings()){var r=t+a;h[e+n>>2]=r;a+=stringToUTF8(s,r,1/0)+1;n+=4}return 0},p:(e,t)=>{var a=getEnvStrings();h[e>>2]=a.length;var n=0;for(var s of a)n+=lengthBytesUTF8(s)+1;h[t>>2]=n;return 0},n:function _fd_seek(e,t,a,n){t=(s=t)<-9007199254740992||s>9007199254740992?NaN:Number(s);var s;return 70},b:(e,t,a,n)=>{for(var s=0,r=0;r<a;r++){var i=h[t>>2],o=h[t+4>>2];t+=8;for(var l=0;l<o;l++)printChar(e,c[i+l]);s+=o}h[n>>2]=s;return 0},q:function _gray_to_rgba(e,a){e>>=2;const n=t.imageData=new Uint8ClampedArray(4*a),s=f.subarray(e,e+a);for(let e=0;e<a;e++){n[4*e]=n[4*e+1]=n[4*e+2]=s[e];n[4*e+3]=255}},h:function _graya_to_rgba(e,a,n){e>>=2;a>>=2;const s=t.imageData=new Uint8ClampedArray(4*n),r=f.subarray(e,e+n),i=f.subarray(a,a+n);for(let e=0;e<n;e++){s[4*e]=s[4*e+1]=s[4*e+2]=r[e];s[4*e+3]=i[e]}},c:function _jsPrintWarning(e){const a=UTF8ToString(e);(t.warn||console.warn)(`OpenJPEG: ${a}`)},k:_proc_exit,g:function _rgb_to_rgba(e,a,n,s){e>>=2;a>>=2;n>>=2;const r=t.imageData=new Uint8ClampedArray(4*s),i=f.subarray(e,e+s),o=f.subarray(a,a+s),l=f.subarray(n,n+s);for(let e=0;e<s;e++){r[4*e]=i[e];r[4*e+1]=o[e];r[4*e+2]=l[e];r[4*e+3]=255}},a:function _storeErrorMessage(e){const a=UTF8ToString(e);t.errorMessages?t.errorMessages+="\n"+a:t.errorMessages=a}};v=await async function createWasm(){function receiveInstance(e){!function assignWasmExports(e){t._malloc=e.t;t._free=e.u;t._jp2_decode=e.v;k=e.w;y=e.r;e.__indirect_function_table}(v=e.exports);updateMemoryViews();return v}var e=function getWasmImports(){return{a:S}}(),a=t.instantiateWasm;return new Promise(t=>{a(e,e=>t(receiveInstance(e)))})}();await async function run(){!function preRun(){var e=t.preRun;if(e){"function"==typeof e&&(e=[e]);m.push(...e)}callRuntimeCallbacks(m)}();var e=t.setStatus;if(e){e("Running...");await new Promise(e=>setTimeout(e,1));setTimeout(e,1,"")}if(!l){!function initRuntime(){0;v.s()}();t.onRuntimeInitialized?.();!function postRun(){var e=t.postRun;if(e){"function"==typeof e&&(e=[e]);u.push(...e)}callRuntimeCallbacks(u)}()}}();return t};class JpxError extends na{constructor(e){super(e,"JpxError")}}class JpxImage extends WasmImage{_filename="openjpeg.wasm";_noWasmFilename="openjpeg_nowasm_fallback.js";static get instance(){return shadow(this,"instance",new JpxImage(!0))}async decode(e,{numComponents:t=4,isIndexedColormap:a=!1,smaskInData:n=!1,reducePower:s=0}={}){const r=await this._getModule(on);if(!r)throw new JpxError("OpenJPEG failed to initialize");let i;try{const o=e.length;i=r._malloc(o);r.writeArrayToMemory(e,i);if(r._jp2_decode(i,o,t>0?t:0,!!a,!!n,s)){const{errorMessages:e}=r;if(e){delete r.errorMessages;throw new JpxError(e)}throw new JpxError("Unknown error")}const{imageData:l}=r;r.imageData=null;return l}finally{i&&r._free(i)}}static parseImageProperties(e){let t=e.getByte();for(;t>=0;){const a=t;t=e.getByte();if(65361===(a<<8|t)){e.skip(4);const t=e.getInt32()>>>0,a=e.getInt32()>>>0,n=e.getInt32()>>>0,s=e.getInt32()>>>0;e.skip(16);return{width:t-n,height:a-s,bitsPerComponent:8,componentsCount:e.getUint16()}}}throw new JpxError("No size marker found in JPX stream")}}class JpxStream extends DecodeStream{constructor(e,t){super(t);this.stream=e;this.dict=e.dict;this.maybeLength=t}get bytes(){return shadow(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(e){}get isAsyncDecoder(){return!0}async decodeImage(e,t,a){if(this.eof)return this.buffer;e||=this.bytes;this.buffer=await JpxImage.instance.decode(e,a);this.bufferLength=this.buffer.length;this.eof=!0;return this.buffer}get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync}get isImageStream(){return!0}}class LZWStream extends DecodeStream{constructor(e,t,a){super(t);this.stream=e;this.dict=e.dict;this.cachedData=0;this.bitsCached=0;const n=4096,s={earlyChange:a,codeLength:9,nextCode:258,dictionaryValues:new Uint8Array(n),dictionaryLengths:new Uint16Array(n).fill(1,0,256),dictionaryPrevCodes:new Uint16Array(n),currentSequence:new Uint8Array(n),currentSequenceLength:0};for(let e=0;e<256;++e)s.dictionaryValues[e]=e;this.lzwState=s}readBits(e){let t=this.bitsCached,a=this.cachedData;for(;t<e;){const e=this.stream.getByte();if(-1===e){this.eof=!0;return null}a=a<<8|e;t+=8}this.bitsCached=t-=e;this.cachedData=a;return a>>>t&(1<<e)-1}readBlock(){let e,t,a,n=1024;const{lzwState:s}=this,r=s.earlyChange;let i=s.nextCode;const o=s.dictionaryValues,l=s.dictionaryLengths,f=s.dictionaryPrevCodes;let c=s.codeLength,h=s.prevCode;const u=s.currentSequence;let m=s.currentSequenceLength,p=0,d=this.bufferLength,g=this.ensureBuffer(this.bufferLength+n);for(e=0;e<512;e++){const e=this.readBits(c),s=m>0;if(e<256){u[0]=e;m=1}else{if(!(e>=258)){if(256===e){c=9;i=258;m=0;continue}this.eof=!0;delete this.lzwState;break}if(e<i){m=l[e];for(t=m-1,a=e;t>=0;t--){u[t]=o[a];a=f[a]}}else u[m++]=u[0]}if(s){f[i]=h;l[i]=l[h]+1;o[i]=u[0];i++;c=i+r&i+r-1?c:0|Math.min(Math.log(i+r)/.6931471805599453+1,12)}h=e;p+=m;if(n<p){do{n+=512}while(n<p);g=this.ensureBuffer(this.bufferLength+n)}for(t=0;t<m;t++)g[d++]=u[t]}s.nextCode=i;s.codeLength=c;s.prevCode=h;s.currentSequenceLength=m;this.bufferLength=d}}class PredictorStream extends DecodeStream{constructor(e,t,a){super(t);if(!(a instanceof Dict))return e;const n=this.predictor=a.get("Predictor")||1;if(n<=1)return e;if(2!==n&&(n<10||n>15))throw new FormatError(`Unsupported predictor: ${n}`);this.readBlock=2===n?this.readBlockTiff:this.readBlockPng;this.stream=e;this.dict=e.dict;const s=this.colors=a.get("Colors")||1,r=this.bits=a.get("BPC","BitsPerComponent")||8,i=this.columns=a.get("Columns")||1;this.pixBytes=s*r+7>>3;this.rowBytes=i*s*r+7>>3;return this}readBlockTiff(){const e=this.rowBytes,t=this.bufferLength,a=this.ensureBuffer(t+e),n=this.bits,s=this.colors,r=this.stream.getBytes(e);this.eof=!r.length;if(this.eof)return;let i,o=0,l=0,f=0,c=0,h=t;if(1===n&&1===s)for(i=0;i<e;++i){let e=r[i]^o;e^=e>>1;e^=e>>2;e^=e>>4;o=(1&e)<<7;a[h++]=e}else if(8===n){for(i=0;i<s;++i)a[h++]=r[i];for(;i<e;++i){a[h]=a[h-s]+r[i];h++}}else if(16===n){const t=2*s;for(i=0;i<t;++i)a[h++]=r[i];for(;i<e;i+=2){const e=((255&r[i])<<8)+(255&r[i+1])+((255&a[h-t])<<8)+(255&a[h-t+1]);a[h++]=e>>8&255;a[h++]=255&e}}else{const e=new Uint8Array(s+1),h=(1<<n)-1;let u=0,m=t;const p=this.columns;for(i=0;i<p;++i)for(let t=0;t<s;++t){if(f<n){o=o<<8|255&r[u++];f+=8}e[t]=e[t]+(o>>f-n)&h;f-=n;l=l<<n|e[t];c+=n;if(c>=8){a[m++]=l>>c-8&255;c-=8}}c>0&&(a[m++]=(l<<8-c)+(o&(1<<8-c)-1))}this.bufferLength+=e}readBlockPng(){const e=this.rowBytes,t=this.pixBytes,a=this.stream.getByte(),n=this.stream.getBytes(e);this.eof=!n.length;if(this.eof)return;const s=this.bufferLength,r=this.ensureBuffer(s+e);let i=r.subarray(s-e,s);0===i.length&&(i=new Uint8Array(e));let o,l,f,c=s;switch(a){case 0:for(o=0;o<e;++o)r[c++]=n[o];break;case 1:for(o=0;o<t;++o)r[c++]=n[o];for(;o<e;++o){r[c]=r[c-t]+n[o]&255;c++}break;case 2:for(o=0;o<e;++o)r[c++]=i[o]+n[o]&255;break;case 3:for(o=0;o<t;++o)r[c++]=(i[o]>>1)+n[o];for(;o<e;++o){r[c]=(i[o]+r[c-t]>>1)+n[o]&255;c++}break;case 4:for(o=0;o<t;++o){l=i[o];f=n[o];r[c++]=l+f}for(;o<e;++o){l=i[o];const e=i[o-t],a=r[c-t],s=a+l-e;let h=s-a;h<0&&(h=-h);let u=s-l;u<0&&(u=-u);let m=s-e;m<0&&(m=-m);f=n[o];r[c++]=h<=u&&h<=m?a+f:u<=m?l+f:e+f}break;default:throw new FormatError(`Unsupported predictor: ${a}`)}this.bufferLength+=e}}class RunLengthStream extends DecodeStream{constructor(e,t){super(t);this.stream=e;this.dict=e.dict}readBlock(){const e=this.stream.getBytes(2);if(e.length<2||128===e[0]){this.eof=!0;return}let t,a=this.bufferLength,n=e[0];if(n<128){t=this.ensureBuffer(a+n+1);t[a++]=e[1];if(n>0){const e=this.stream.getBytes(n);t.set(e,a);a+=n}}else{n=257-n;t=this.ensureBuffer(a+n+1);t.fill(e[1],a,a+n);a+=n}this.bufferLength=a}}class Parser{#ae=null;#ne=0;constructor({lexer:e,xref:t,allowStreams:a=!1,recoveryMode:n=!1}){this.lexer=e;this.xref=t;this.allowStreams=a;this.recoveryMode=n;this.refill()}refill(){this.buf1=this.lexer.getObj();this.buf2=this.lexer.getObj()}shift(){if(this.buf2 instanceof Cmd&&"ID"===this.buf2.cmd){this.buf1=this.buf2;this.buf2=null}else{this.buf1=this.buf2;this.buf2=this.lexer.getObj()}}tryShift(){try{this.shift();return!0}catch(e){if(e instanceof MissingDataException)throw e;return!1}}getObj(e=null){const t=this.buf1;this.shift();if(t instanceof Cmd)switch(t.cmd){case"BI":return this.makeInlineImage(e);case"[":const a=[];for(;!isCmd(this.buf1,"]")&&this.buf1!==oa;)a.push(this.getObj(e));if(this.buf1===oa){if(this.recoveryMode)return a;throw new ParserEOFException("End of file inside array.")}this.shift();return a;case"<<":const n=new Dict(this.xref);for(;!isCmd(this.buf1,">>")&&this.buf1!==oa;){if(!(this.buf1 instanceof Name)){info("Malformed dictionary: key must be a name object");this.shift();continue}const t=this.buf1.name;this.shift();if(this.buf1===oa)break;n.set(t,this.getObj(e))}if(this.buf1===oa){if(this.recoveryMode)return n;throw new ParserEOFException("End of file inside dictionary.")}if(isCmd(this.buf2,"stream"))return this.allowStreams?this.makeStream(n,e):n;this.shift();return n;default:return t}if(Number.isInteger(t)){if(Number.isInteger(this.buf1)&&isCmd(this.buf2,"R")){const e=Ref.get(t,this.buf1);this.shift();this.shift();return e}return t}return"string"==typeof t&&e?e.decryptString(t):t}findDefaultInlineStreamEnd(e){const{knownCommands:t}=this.lexer,a=e.pos;let n,s,r=0;for(;-1!==(n=e.getByte());)if(0===r)r=69===n?1:0;else if(1===r)r=73===n?2:0;else if(32===n||10===n||13===n){s=e.pos;const a=e.peekBytes(15),i=a.length;if(0===i)break;for(let e=0;e<i;e++){n=a[e];if((0!==n||0===a[e+1])&&(10!==n&&13!==n&&(n<32||n>127))){r=0;break}}if(2!==r)continue;if(!t){warn("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.");continue}const o=new Lexer(new Stream(e.peekBytes(75)),t);o._hexStringWarn=()=>{};let l=0;for(;;){const e=o.getObj();if(e===oa){r=0;break}if(e instanceof Cmd){const a=t[e.cmd];if(!a){r=0;break}if(a.variableArgs?l<=a.numArgs:l===a.numArgs)break;l=0;continue}l++}if(2===r)break}else r=0;if(-1===n){warn("findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker");if(s){warn('... trying to recover by using the last "EI" occurrence.');e.skip(-(e.pos-s))}}let i=4;e.skip(-i);n=e.peekByte();e.skip(i);isWhiteSpace(n)||i--;return e.pos-i-a}findDCTDecodeInlineStreamEnd(e){const t=e.pos;let a,n,s=!1;for(;-1!==(a=e.getByte());)if(255===a){switch(e.getByte()){case 0:break;case 255:e.skip(-1);break;case 217:s=!0;break;case 192:case 193:case 194:case 195:case 197:case 198:case 199:case 201:case 202:case 203:case 205:case 206:case 207:case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:n=e.getUint16();n>2?e.skip(n-2):e.skip(-2)}if(s)break}const r=e.pos-t;if(-1===a){warn("Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead.");e.skip(-r);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return r}findASCII85DecodeInlineStreamEnd(e){const t=e.pos;let a;for(;-1!==(a=e.getByte());)if(126===a){const t=e.pos;a=e.peekByte();for(;isWhiteSpace(a);){e.skip();a=e.peekByte()}if(62===a){e.skip();break}if(e.pos>t){const t=e.peekBytes(2);if(69===t[0]&&73===t[1])break}}const n=e.pos-t;if(-1===a){warn("Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead.");e.skip(-n);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return n}findASCIIHexDecodeInlineStreamEnd(e){const t=e.pos;let a;for(;-1!==(a=e.getByte())&&62!==a;);const n=e.pos-t;if(-1===a){warn("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead.");e.skip(-n);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return n}inlineStreamSkipEI(e){let t,a=0;for(;-1!==(t=e.getByte());)if(0===a)a=69===t?1:0;else if(1===a)a=73===t?2:0;else if(2===a)break}makeInlineImage(e){const t=this.lexer,a=t.stream,n=new Dict(this.xref);let s;for(;!isCmd(this.buf1,"ID")&&this.buf1!==oa;){if(!(this.buf1 instanceof Name))throw new FormatError("Dictionary key must be a name object");const t=this.buf1.name;this.shift();if(this.buf1===oa)break;n.set(t,this.getObj(e))}-1!==t.beginInlineImagePos&&(s=a.pos-t.beginInlineImagePos);const r=n.get("F","Filter");let i;if(r instanceof Name)i=r.name;else if(Array.isArray(r)){const e=this.#se(r[0]);e instanceof Name&&(i=e.name)}const o=a.pos;let l,f;switch(i){case"DCT":case"DCTDecode":l=this.findDCTDecodeInlineStreamEnd(a);break;case"A85":case"ASCII85Decode":l=this.findASCII85DecodeInlineStreamEnd(a);break;case"AHx":case"ASCIIHexDecode":l=this.findASCIIHexDecodeInlineStreamEnd(a);break;default:l=this.findDefaultInlineStreamEnd(a)}if(l<1e3&&s>0){const e=a.pos;a.pos=t.beginInlineImagePos;f=function getInlineImageCacheKey(e){const t=[],a=e.length;let n=0;for(;n<a-1;)t.push(e[n++]<<8|e[n++]);n<a&&t.push(e[n]);return a+"_"+String.fromCharCode.apply(null,t)}(a.getBytes(s+l));a.pos=e;const n=this.#ae?.get(f);if(n){this.buf2=Cmd.get("EI");this.shift();n.reset();return n}}let c=a.makeSubStream(o,l,n);e&&!this.#re(r)&&(c=e.createStream(c,l));c=this.filter(c,n,l,e);c.dict=n;if(f){c.cacheKey="inline_img_"+ ++this.#ne;(this.#ae??=new Map).set(f,c)}this.buf2=Cmd.get("EI");this.shift();return c}#se(e){return this.xref?this.xref.fetchIfRef(e):e}#re(e){return Array.isArray(e)?e.some(e=>isName(this.#se(e),"Crypt")):isName(e,"Crypt")}#ie(e){const{stream:t}=this.lexer;t.pos=e;const a=new Uint8Array([101,110,100]),n=a.length,s=[new Uint8Array([115,116,114,101,97,109]),new Uint8Array([115,116,101,97,109]),new Uint8Array([115,116,114,101,97])],r=9-n;for(;t.pos<t.end;){const i=t.peekBytes(2048),o=i.length-9;if(o<=0)break;let l=0;for(;l<o;){let o=0;for(;o<n&&i[l+o]===a[o];)o++;if(o>=n){let n=!1;for(const e of s){const t=e.length;let s=0;for(;s<t&&i[l+o+s]===e[s];)s++;if(s>=r){n=!0;break}if(s>=t){if(isWhiteSpace(i[l+o+s])){info(`Found "${bytesToString([...a,...e])}" when searching for endstream command.`);n=!0}break}}if(n){t.pos+=l;return t.pos-e}}l++}t.pos+=o}return-1}makeStream(e,t){const a=this.lexer;let n=a.stream;a.skipToNextLine();const s=n.pos-1;let r=e.get("Length");if(!Number.isInteger(r)){info(`Bad length "${r&&r.toString()}" in stream.`);r=0}n.pos=s+r;a.nextChar();if(this.tryShift()&&isCmd(this.buf2,"endstream"))this.shift();else{r=this.#ie(s);if(r<0)throw new FormatError("Missing endstream command.");a.nextChar();this.shift();this.shift()}this.shift();n=n.makeSubStream(s,r,e);const i=e.get("F","Filter");t&&!this.#re(i)&&(n=t.createStream(n,r));n=this.filter(n,e,r,t);n.dict=e;return n}filter(e,t,a,n=null){let s=t.get("F","Filter"),r=t.get("DP","DecodeParms");if(s instanceof Name){Array.isArray(r)&&warn("/DecodeParms should not be an Array, when /Filter is a Name.");return this.makeFilter(e,s.name,a,r,n)}let i=a;if(Array.isArray(s)){const t=s,a=r;for(let o=0,l=t.length;o<l;++o){s=this.#se(t[o]);if(!(s instanceof Name))throw new FormatError(`Bad filter name "${s}"`);r=null;Array.isArray(a)&&o in a&&(r=this.#se(a[o]));e=this.makeFilter(e,s.name,i,r,n);i=null}}return e}makeFilter(e,t,a,n,s=null){if(0===a){warn(`Empty "${t}" stream.`);return new NullStream}try{switch(t){case"Fl":case"FlateDecode":return n?new PredictorStream(new FlateStream(e,a),a,n):new FlateStream(e,a);case"LZW":case"LZWDecode":let t=1;if(n){n.has("EarlyChange")&&(t=n.get("EarlyChange"));return new PredictorStream(new LZWStream(e,a,t),a,n)}return new LZWStream(e,a,t);case"DCT":case"DCTDecode":return new JpegStream(e,a,n);case"JPX":case"JPXDecode":return new JpxStream(e,a);case"A85":case"ASCII85Decode":return new Ascii85Stream(e,a);case"AHx":case"ASCIIHexDecode":return new AsciiHexStream(e,a);case"CCF":case"CCITTFaxDecode":return new CCITTFaxStream(e,a,n);case"RL":case"RunLengthDecode":return new RunLengthStream(e,a);case"JBIG2Decode":return new Jbig2Stream(e,a,n);case"BrotliDecode":return new BrotliStream(e,a);case"Crypt":{if(!s){warn('Filter "Crypt" is missing a cipher transform.');return e}const t=n instanceof Dict?n.get("Name"):null,r=t instanceof Name?t:Name.get("Identity");return s.createStream(e,a,r)}}warn(`Filter "${t}" is not supported.`);return e}catch(e){if(e instanceof MissingDataException)throw e;warn(`Invalid stream: "${e}"`);return new NullStream}}}const ln=[1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];function toHexDigit(e){return e>=48&&e<=57?15&e:e>=65&&e<=70||e>=97&&e<=102?9+(15&e):-1}class Lexer{constructor(e,t=null){this.stream=e;this.nextChar();this.strBuf=[];this.knownCommands=t;this._hexStringNumWarn=0;this.beginInlineImagePos=-1}nextChar(){return this.currentChar=this.stream.getByte()}peekChar(){return this.stream.peekByte()}getNumber(){let e=this.currentChar,t=0,a=1;if(45===e){a=-1;e=this.nextChar();45===e&&(e=this.nextChar())}else 43===e&&(e=this.nextChar());if(10===e||13===e)do{e=this.nextChar()}while(10===e||13===e);if(46===e){t=10;e=this.nextChar()}if(e<48||e>57){const t=`Invalid number: ${String.fromCharCode(e)} (charCode ${e})`;if(isWhiteSpace(e)||40===e||60===e||-1===e){info(`Lexer.getNumber - "${t}".`);return 0}throw new FormatError(t)}let n=e-48;for(;(e=this.nextChar())>=0;)if(e>=48&&e<=57){0!==t&&(t*=10);n=10*n+(e-48)}else if(46===e){if(0!==t)break;t=1}else{if(45!==e)break;warn("Badly formatted number: minus sign in the middle")}0!==t&&(n/=t);return a*n}getString(){let e=1,t=!1;const a=this.strBuf;a.length=0;let n=this.nextChar();for(;;){let s=!1;switch(0|n){case-1:warn("Unterminated string");t=!0;break;case 40:++e;a.push("(");break;case 41:if(0===--e){this.nextChar();t=!0}else a.push(")");break;case 92:n=this.nextChar();switch(n){case-1:warn("Unterminated string");t=!0;break;case 110:a.push("\n");break;case 114:a.push("\r");break;case 116:a.push("\t");break;case 98:a.push("\b");break;case 102:a.push("\f");break;case 92:case 40:case 41:a.push(String.fromCharCode(n));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:let e=15&n;n=this.nextChar();s=!0;if(n>=48&&n<=55){e=(e<<3)+(15&n);n=this.nextChar();if(n>=48&&n<=55){s=!1;e=(e<<3)+(15&n)}}a.push(String.fromCharCode(e));break;case 13:10===this.peekChar()&&this.nextChar();break;case 10:break;default:a.push(String.fromCharCode(n))}break;default:a.push(String.fromCharCode(n))}if(t)break;s||(n=this.nextChar())}return a.join("")}getName(){let e,t;const a=this.strBuf;a.length=0;for(;(e=this.nextChar())>=0&&!ln[e];)if(35===e){e=this.nextChar();if(ln[e]){warn("Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number.");a.push("#");break}const n=toHexDigit(e);if(-1!==n){t=e;e=this.nextChar();const s=toHexDigit(e);if(-1===s){warn(`Lexer_getName: Illegal digit (${String.fromCharCode(e)}) in hexadecimal number.`);a.push("#",String.fromCharCode(t));if(ln[e])break;a.push(String.fromCharCode(e));continue}a.push(String.fromCharCode(n<<4|s))}else a.push("#",String.fromCharCode(e))}else a.push(String.fromCharCode(e));a.length>127&&warn(`Name token is longer than allowed by the spec: ${a.length}`);return Name.get(a.join(""))}_hexStringWarn(e){5!==this._hexStringNumWarn++?this._hexStringNumWarn>5||warn(`getHexString - ignoring invalid character: ${e}`):warn("getHexString - ignoring additional invalid characters.")}getHexString(){const e=this.strBuf;e.length=0;let t=this.currentChar,a=-1,n=-1;this._hexStringNumWarn=0;for(;;){if(t<0){warn("Unterminated hex string");break}if(62===t){this.nextChar();break}if(1!==ln[t]){n=toHexDigit(t);if(-1===n)this._hexStringWarn(t);else if(-1===a)a=n;else{e.push(String.fromCharCode(a<<4|n));a=-1}t=this.nextChar()}else t=this.nextChar()}-1!==a&&e.push(String.fromCharCode(a<<4));return e.join("")}getObj(){let e=!1,t=this.currentChar;for(;;){if(t<0)return oa;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(1!==ln[t])break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return this.getNumber();case 40:return this.getString();case 47:return this.getName();case 91:this.nextChar();return Cmd.get("[");case 93:this.nextChar();return Cmd.get("]");case 60:t=this.nextChar();if(60===t){this.nextChar();return Cmd.get("<<")}return this.getHexString();case 62:t=this.nextChar();if(62===t){this.nextChar();return Cmd.get(">>")}return Cmd.get(">");case 123:this.nextChar();return Cmd.get("{");case 125:this.nextChar();return Cmd.get("}");case 41:this.nextChar();throw new FormatError(`Illegal character: ${t}`)}let a=String.fromCharCode(t);if(t<32||t>127){const e=this.peekChar();if(e>=32&&e<=127){this.nextChar();return Cmd.get(a)}}const n=this.knownCommands;let s=void 0!==n?.[a];for(;(t=this.nextChar())>=0&&!ln[t];){const e=a+String.fromCharCode(t);if(s&&void 0===n[e])break;if(128===a.length)throw new FormatError(`Command token too long: ${a.length}`);a=e;s=void 0!==n?.[a]}if("true"===a)return!0;if("false"===a)return!1;if("null"===a)return null;"BI"===a&&(this.beginInlineImagePos=this.stream.pos);return Cmd.get(a)}skipToNextLine(){let e=this.currentChar;for(;e>=0;){if(13===e){e=this.nextChar();10===e&&this.nextChar();break}if(10===e){this.nextChar();break}e=this.nextChar()}}}class Linearization{static create(e){function getInt(e,t,a=!1){const n=e.get(t);if(Number.isInteger(n)&&(a?n>=0:n>0))return n;throw new Error(`The "${t}" parameter in the linearization dictionary is invalid.`)}const t=new Parser({lexer:new Lexer(e),xref:null}),a=t.getObj(),n=t.getObj(),s=t.getObj(),r=t.getObj();let i,o;if(!(Number.isInteger(a)&&Number.isInteger(n)&&isCmd(s,"obj")&&r instanceof Dict&&"number"==typeof(i=r.get("Linearized"))&&i>0))return null;if((o=getInt(r,"L"))!==e.length)throw new Error('The "L" parameter in the linearization dictionary does not equal the stream length.');return{length:o,hints:function getHints(e){const t=e.get("H");let a;if(Array.isArray(t)&&(2===(a=t.length)||4===a)){for(let e=0;e<a;e++){const a=t[e];if(!(Number.isInteger(a)&&a>0))throw new Error(`Hint (${e}) in the linearization dictionary is invalid.`)}return t}throw new Error("Hint array in the linearization dictionary is invalid.")}(r),objectNumberFirst:getInt(r,"O"),endFirst:getInt(r,"E"),numPages:getInt(r,"N"),mainXRefEntriesOffset:getInt(r,"T"),pageFirst:r.has("P")?getInt(r,"P",!0):0}}}const fn=new Set(["Adobe-GB1-UCS2","Adobe-CNS1-UCS2","Adobe-Japan1-UCS2","Adobe-Korea1-UCS2","78-EUC-H","78-EUC-V","78-H","78-RKSJ-H","78-RKSJ-V","78-V","78ms-RKSJ-H","78ms-RKSJ-V","83pv-RKSJ-H","90ms-RKSJ-H","90ms-RKSJ-V","90msp-RKSJ-H","90msp-RKSJ-V","90pv-RKSJ-H","90pv-RKSJ-V","Add-H","Add-RKSJ-H","Add-RKSJ-V","Add-V","Adobe-CNS1-0","Adobe-CNS1-1","Adobe-CNS1-2","Adobe-CNS1-3","Adobe-CNS1-4","Adobe-CNS1-5","Adobe-CNS1-6","Adobe-GB1-0","Adobe-GB1-1","Adobe-GB1-2","Adobe-GB1-3","Adobe-GB1-4","Adobe-GB1-5","Adobe-Japan1-0","Adobe-Japan1-1","Adobe-Japan1-2","Adobe-Japan1-3","Adobe-Japan1-4","Adobe-Japan1-5","Adobe-Japan1-6","Adobe-Korea1-0","Adobe-Korea1-1","Adobe-Korea1-2","B5-H","B5-V","B5pc-H","B5pc-V","CNS-EUC-H","CNS-EUC-V","CNS1-H","CNS1-V","CNS2-H","CNS2-V","ETHK-B5-H","ETHK-B5-V","ETen-B5-H","ETen-B5-V","ETenms-B5-H","ETenms-B5-V","EUC-H","EUC-V","Ext-H","Ext-RKSJ-H","Ext-RKSJ-V","Ext-V","GB-EUC-H","GB-EUC-V","GB-H","GB-V","GBK-EUC-H","GBK-EUC-V","GBK2K-H","GBK2K-V","GBKp-EUC-H","GBKp-EUC-V","GBT-EUC-H","GBT-EUC-V","GBT-H","GBT-V","GBTpc-EUC-H","GBTpc-EUC-V","GBpc-EUC-H","GBpc-EUC-V","H","HKdla-B5-H","HKdla-B5-V","HKdlb-B5-H","HKdlb-B5-V","HKgccs-B5-H","HKgccs-B5-V","HKm314-B5-H","HKm314-B5-V","HKm471-B5-H","HKm471-B5-V","HKscs-B5-H","HKscs-B5-V","Hankaku","Hiragana","KSC-EUC-H","KSC-EUC-V","KSC-H","KSC-Johab-H","KSC-Johab-V","KSC-V","KSCms-UHC-H","KSCms-UHC-HW-H","KSCms-UHC-HW-V","KSCms-UHC-V","KSCpc-EUC-H","KSCpc-EUC-V","Katakana","NWP-H","NWP-V","RKSJ-H","RKSJ-V","Roman","UniCNS-UCS2-H","UniCNS-UCS2-V","UniCNS-UTF16-H","UniCNS-UTF16-V","UniCNS-UTF32-H","UniCNS-UTF32-V","UniCNS-UTF8-H","UniCNS-UTF8-V","UniGB-UCS2-H","UniGB-UCS2-V","UniGB-UTF16-H","UniGB-UTF16-V","UniGB-UTF32-H","UniGB-UTF32-V","UniGB-UTF8-H","UniGB-UTF8-V","UniJIS-UCS2-H","UniJIS-UCS2-HW-H","UniJIS-UCS2-HW-V","UniJIS-UCS2-V","UniJIS-UTF16-H","UniJIS-UTF16-V","UniJIS-UTF32-H","UniJIS-UTF32-V","UniJIS-UTF8-H","UniJIS-UTF8-V","UniJIS2004-UTF16-H","UniJIS2004-UTF16-V","UniJIS2004-UTF32-H","UniJIS2004-UTF32-V","UniJIS2004-UTF8-H","UniJIS2004-UTF8-V","UniJISPro-UCS2-HW-V","UniJISPro-UCS2-V","UniJISPro-UTF8-V","UniJISX0213-UTF32-H","UniJISX0213-UTF32-V","UniJISX02132004-UTF32-H","UniJISX02132004-UTF32-V","UniKS-UCS2-H","UniKS-UCS2-V","UniKS-UTF16-H","UniKS-UTF16-V","UniKS-UTF32-H","UniKS-UTF32-V","UniKS-UTF8-H","UniKS-UTF8-V","V","WP-Symbol"]);class CMap{#a=new Map;#oe=0;constructor(e=!1){this.codespaceRanges=[[],[],[],[]];this.numCodespaceRanges=0;this.name="";this.vertical=!1;this.useCMap=null;this.builtInCMap=e}addCodespaceRange(e,t,a){this.codespaceRanges[e-1].push(t,a);this.numCodespaceRanges++}#le(e,t){if(!(e<=0)){if(this.#oe+e>16777215)throw new Error(`${t} - ignoring data above MAX_MAP_RANGE.`);this.#oe+=e}}mapCidRange(e,t,a){this.#le(t-e+1,"mapCidRange");for(;e<=t;)this.#a.set(e++,a++)}mapBfRange(e,t,a){this.#le(t-e+1,"mapBfRange");const n=a.length-1;for(;e<=t;){this.#a.set(e++,a);const t=a.charCodeAt(n)+1;t>255?a=a.substring(0,n-1)+String.fromCharCode(a.charCodeAt(n-1)+1)+"\0":a=a.substring(0,n)+String.fromCharCode(t)}}mapBfRangeToArray(e,t,a){const n=a.length;this.#le(Math.min(t-e+1,n),"mapBfRangeToArray");let s=0;for(;e<=t&&s<n;)this.#a.set(e++,a[s++])}mapOne(e,t){this.#a.set(e,t)}lookup(e){return this.#a.get(e)}contains(e){return this.#a.has(e)}forEach(e){for(const[t,a]of this.#a)e(t,a)}charCodeOf(e){for(const[t,a]of this.#a)if(a===e)return t;return-1}getMap(){return new Map(this.#a)}readCharCode(e,t,a){let n=0;const s=this.codespaceRanges;for(let r=0,i=s.length;r<i;r++){n=(n<<8|e.charCodeAt(t+r))>>>0;const i=s[r];for(let e=0,t=i.length;e<t;){const t=i[e++],s=i[e++];if(n>=t&&n<=s){a.charcode=n;a.length=r+1;return}}}a.charcode=0;a.length=1}getCharCodeLength(e){const t=this.codespaceRanges;for(let a=0,n=t.length;a<n;a++){const n=t[a];for(let t=0,s=n.length;t<s;){const s=n[t++],r=n[t++];if(e>=s&&e<=r)return a+1}}return 1}get size(){return this.#a.size}get isIdentityCMap(){if("Identity-H"!==this.name&&"Identity-V"!==this.name)return!1;if(65536!==this.#a.size)return!1;for(let e=0;e<65536;e++)if(this.#a.get(e)!==e)return!1;return!0}}class IdentityCMap extends CMap{constructor(e,t){super();this.vertical=e;this.addCodespaceRange(t,0,65535)}mapCidRange(e,t,a){unreachable("should not call mapCidRange")}mapBfRange(e,t,a){unreachable("should not call mapBfRange")}mapBfRangeToArray(e,t,a){unreachable("should not call mapBfRangeToArray")}mapOne(e,t){unreachable("should not call mapCidOne")}lookup(e){return Number.isInteger(e)&&e<=65535?e:void 0}contains(e){return Number.isInteger(e)&&e<=65535}forEach(e){for(let t=0;t<=65535;t++)e(t,t)}charCodeOf(e){return Number.isInteger(e)&&e<=65535?e:-1}getMap(){unreachable("should not call getMap")}get size(){return 65536}get isIdentityCMap(){unreachable("should not access .isIdentityCMap")}}function strToInt(e){let t=0;for(let a=0;a<e.length;a++)t=t<<8|e.charCodeAt(a);return t>>>0}function expectString(e){if("string"!=typeof e)throw new FormatError("Malformed CMap: expected string.")}function expectInt(e){if(!Number.isInteger(e))throw new FormatError("Malformed CMap: expected int.")}function parseBfChar(e,t){for(;;){let a=t.getObj();if(a===oa)break;if(isCmd(a,"endbfchar"))return;expectString(a);const n=strToInt(a);a=t.getObj();expectString(a);const s=a;e.mapOne(n,s)}}function parseBfRange(e,t){for(;;){let a=t.getObj();if(a===oa)break;if(isCmd(a,"endbfrange"))return;expectString(a);const n=strToInt(a);a=t.getObj();expectString(a);const s=strToInt(a);a=t.getObj();if(Number.isInteger(a)||"string"==typeof a){const t=Number.isInteger(a)?String.fromCharCode(a):a;e.mapBfRange(n,s,t)}else{if(!isCmd(a,"["))break;{a=t.getObj();const r=[];for(;!isCmd(a,"]")&&a!==oa;){r.push(a);a=t.getObj()}e.mapBfRangeToArray(n,s,r)}}}throw new FormatError("Invalid bf range.")}function parseCidChar(e,t){for(;;){let a=t.getObj();if(a===oa)break;if(isCmd(a,"endcidchar"))return;expectString(a);const n=strToInt(a);a=t.getObj();expectInt(a);const s=a;e.mapOne(n,s)}}function parseCidRange(e,t){for(;;){let a=t.getObj();if(a===oa)break;if(isCmd(a,"endcidrange"))return;expectString(a);const n=strToInt(a);a=t.getObj();expectString(a);const s=strToInt(a);a=t.getObj();expectInt(a);const r=a;e.mapCidRange(n,s,r)}}function parseCodespaceRange(e,t){for(;;){let a=t.getObj();if(a===oa)break;if(isCmd(a,"endcodespacerange"))return;if("string"!=typeof a)break;const n=strToInt(a);a=t.getObj();if("string"!=typeof a)break;const s=strToInt(a);e.addCodespaceRange(a.length,n,s)}throw new FormatError("Invalid codespace range.")}function parseWMode(e,t){const a=t.getObj();Number.isInteger(a)&&(e.vertical=!!a)}function parseCMapName(e,t){const a=t.getObj();a instanceof Name&&(e.name=a.name)}async function parseCMap(e,t,a,n){let s,r;e:for(;;)try{const a=t.getObj();if(a===oa)break;if(a instanceof Name){"WMode"===a.name?parseWMode(e,t):"CMapName"===a.name&&parseCMapName(e,t);s=a}else if(a instanceof Cmd)switch(a.cmd){case"endcmap":break e;case"usecmap":s instanceof Name&&(r=s.name);break;case"begincodespacerange":parseCodespaceRange(e,t);break;case"beginbfchar":parseBfChar(e,t);break;case"begincidchar":parseCidChar(e,t);break;case"beginbfrange":parseBfRange(e,t);break;case"begincidrange":parseCidRange(e,t)}}catch(e){if(e instanceof MissingDataException)throw e;warn("Invalid cMap data: "+e);continue}!n&&r&&(n=r);return n?extendCMap(e,a,n):e}async function extendCMap(e,t,a){e.useCMap=await createBuiltInCMap(a,t);if(0===e.numCodespaceRanges){const t=e.useCMap.codespaceRanges;for(let a=0;a<t.length;a++)e.codespaceRanges[a]=t[a].slice();e.numCodespaceRanges=e.useCMap.numCodespaceRanges}e.useCMap.forEach((t,a)=>{e.contains(t)||e.mapOne(t,a)});return e}async function createBuiltInCMap(e,t){if("Identity-H"===e)return new IdentityCMap(!1,2);if("Identity-V"===e)return new IdentityCMap(!0,2);if(!fn.has(e))throw new Error("Unknown CMap name: "+e);if(!t)throw new Error("Built-in CMap parameters are not provided.");const{cMapData:a,isCompressed:n}=await t(e),s=new CMap(!0);if(n)return(new BinaryCMapReader).process(a,s,e=>extendCMap(s,t,e));const r=new Lexer(new Stream(a));return parseCMap(s,r,t,null)}class CMapFactory{static async create({encoding:e,fetchBuiltInCMap:t,useCMap:a}){if(e instanceof Name)return createBuiltInCMap(e.name,t);if(e instanceof BaseStream){if(e.isAsync){const t=await e.asyncGetBytes();t&&(e=new Stream(t,0,t.length,e.dict))}const n=await parseCMap(new CMap,new Lexer(e),t,a);return n.isIdentityCMap?createBuiltInCMap(n.name,t):n}throw new Error("Encoding required.")}}const cn=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],hn=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","centoldstyle","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","","threequartersemdash","","questionsmall","","","","","Ethsmall","","","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","","","","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hypheninferior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","asuperior","centsuperior","","","","","Aacutesmall","Agravesmall","Acircumflexsmall","Adieresissmall","Atildesmall","Aringsmall","Ccedillasmall","Eacutesmall","Egravesmall","Ecircumflexsmall","Edieresissmall","Iacutesmall","Igravesmall","Icircumflexsmall","Idieresissmall","Ntildesmall","Oacutesmall","Ogravesmall","Ocircumflexsmall","Odieresissmall","Otildesmall","Uacutesmall","Ugravesmall","Ucircumflexsmall","Udieresissmall","","eightsuperior","fourinferior","threeinferior","sixinferior","eightinferior","seveninferior","Scaronsmall","","centinferior","twoinferior","","Dieresissmall","","Caronsmall","osuperior","fiveinferior","","commainferior","periodinferior","Yacutesmall","","dollarinferior","","","Thornsmall","","nineinferior","zeroinferior","Zcaronsmall","AEsmall","Oslashsmall","questiondownsmall","oneinferior","Lslashsmall","","","","","","","Cedillasmall","","","","","","OEsmall","figuredash","hyphensuperior","","","","","exclamdownsmall","","Ydieresissmall","","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","ninesuperior","zerosuperior","","esuperior","rsuperior","tsuperior","","","isuperior","ssuperior","dsuperior","","","","","","lsuperior","Ogoneksmall","Brevesmall","Macronsmall","bsuperior","nsuperior","msuperior","commasuperior","periodsuperior","Dotaccentsmall","Ringsmall","","","",""],un=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","space","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron"],mn=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls","","","",""],pn=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","bullet","Euro","bullet","quotesinglbase","florin","quotedblbase","ellipsis","dagger","daggerdbl","circumflex","perthousand","Scaron","guilsinglleft","OE","bullet","Zcaron","bullet","bullet","quoteleft","quoteright","quotedblleft","quotedblright","bullet","endash","emdash","tilde","trademark","scaron","guilsinglright","oe","bullet","zcaron","Ydieresis","space","exclamdown","cent","sterling","currency","yen","brokenbar","section","dieresis","copyright","ordfeminine","guillemotleft","logicalnot","hyphen","registered","macron","degree","plusminus","twosuperior","threesuperior","acute","mu","paragraph","periodcentered","cedilla","onesuperior","ordmasculine","guillemotright","onequarter","onehalf","threequarters","questiondown","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring","AE","Ccedilla","Egrave","Eacute","Ecircumflex","Edieresis","Igrave","Iacute","Icircumflex","Idieresis","Eth","Ntilde","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","multiply","Oslash","Ugrave","Uacute","Ucircumflex","Udieresis","Yacute","Thorn","germandbls","agrave","aacute","acircumflex","atilde","adieresis","aring","ae","ccedilla","egrave","eacute","ecircumflex","edieresis","igrave","iacute","icircumflex","idieresis","eth","ntilde","ograve","oacute","ocircumflex","otilde","odieresis","divide","oslash","ugrave","uacute","ucircumflex","udieresis","yacute","thorn","ydieresis"],dn=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","universal","numbersign","existential","percent","ampersand","suchthat","parenleft","parenright","asteriskmath","plus","comma","minus","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","congruent","Alpha","Beta","Chi","Delta","Epsilon","Phi","Gamma","Eta","Iota","theta1","Kappa","Lambda","Mu","Nu","Omicron","Pi","Theta","Rho","Sigma","Tau","Upsilon","sigma1","Omega","Xi","Psi","Zeta","bracketleft","therefore","bracketright","perpendicular","underscore","radicalex","alpha","beta","chi","delta","epsilon","phi","gamma","eta","iota","phi1","kappa","lambda","mu","nu","omicron","pi","theta","rho","sigma","tau","upsilon","omega1","omega","xi","psi","zeta","braceleft","bar","braceright","similar","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Euro","Upsilon1","minute","lessequal","fraction","infinity","florin","club","diamond","heart","spade","arrowboth","arrowleft","arrowup","arrowright","arrowdown","degree","plusminus","second","greaterequal","multiply","proportional","partialdiff","bullet","divide","notequal","equivalence","approxequal","ellipsis","arrowvertex","arrowhorizex","carriagereturn","aleph","Ifraktur","Rfraktur","weierstrass","circlemultiply","circleplus","emptyset","intersection","union","propersuperset","reflexsuperset","notsubset","propersubset","reflexsubset","element","notelement","angle","gradient","registerserif","copyrightserif","trademarkserif","product","radical","dotmath","logicalnot","logicaland","logicalor","arrowdblboth","arrowdblleft","arrowdblup","arrowdblright","arrowdbldown","lozenge","angleleft","registersans","copyrightsans","trademarksans","summation","parenlefttp","parenleftex","parenleftbt","bracketlefttp","bracketleftex","bracketleftbt","bracelefttp","braceleftmid","braceleftbt","braceex","","angleright","integral","integraltp","integralex","integralbt","parenrighttp","parenrightex","parenrightbt","bracketrighttp","bracketrightex","bracketrightbt","bracerighttp","bracerightmid","bracerightbt",""],gn=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","a1","a2","a202","a3","a4","a5","a119","a118","a117","a11","a12","a13","a14","a15","a16","a105","a17","a18","a19","a20","a21","a22","a23","a24","a25","a26","a27","a28","a6","a7","a8","a9","a10","a29","a30","a31","a32","a33","a34","a35","a36","a37","a38","a39","a40","a41","a42","a43","a44","a45","a46","a47","a48","a49","a50","a51","a52","a53","a54","a55","a56","a57","a58","a59","a60","a61","a62","a63","a64","a65","a66","a67","a68","a69","a70","a71","a72","a73","a74","a203","a75","a204","a76","a77","a78","a79","a81","a82","a83","a84","a97","a98","a99","a100","","a89","a90","a93","a94","a91","a92","a205","a85","a206","a86","a87","a88","a95","a96","","","","","","","","","","","","","","","","","","","","a101","a102","a103","a104","a106","a107","a108","a112","a111","a110","a109","a120","a121","a122","a123","a124","a125","a126","a127","a128","a129","a130","a131","a132","a133","a134","a135","a136","a137","a138","a139","a140","a141","a142","a143","a144","a145","a146","a147","a148","a149","a150","a151","a152","a153","a154","a155","a156","a157","a158","a159","a160","a161","a163","a164","a196","a165","a192","a166","a167","a168","a169","a170","a171","a172","a173","a162","a174","a175","a176","a177","a178","a179","a193","a180","a199","a181","a200","a182","","a201","a183","a184","a197","a185","a194","a198","a186","a195","a187","a188","a189","a190","a191",""];function getEncoding(e){switch(e){case"WinAnsiEncoding":return pn;case"StandardEncoding":return mn;case"MacRomanEncoding":return un;case"SymbolSetEncoding":return dn;case"ZapfDingbatsEncoding":return gn;case"ExpertEncoding":return cn;case"MacExpertEncoding":return hn;default:return null}}const bn=getLookupTableFactory(function(e){e.A=65;e.AE=198;e.AEacute=508;e.AEmacron=482;e.AEsmall=63462;e.Aacute=193;e.Aacutesmall=63457;e.Abreve=258;e.Abreveacute=7854;e.Abrevecyrillic=1232;e.Abrevedotbelow=7862;e.Abrevegrave=7856;e.Abrevehookabove=7858;e.Abrevetilde=7860;e.Acaron=461;e.Acircle=9398;e.Acircumflex=194;e.Acircumflexacute=7844;e.Acircumflexdotbelow=7852;e.Acircumflexgrave=7846;e.Acircumflexhookabove=7848;e.Acircumflexsmall=63458;e.Acircumflextilde=7850;e.Acute=63177;e.Acutesmall=63412;e.Acyrillic=1040;e.Adblgrave=512;e.Adieresis=196;e.Adieresiscyrillic=1234;e.Adieresismacron=478;e.Adieresissmall=63460;e.Adotbelow=7840;e.Adotmacron=480;e.Agrave=192;e.Agravesmall=63456;e.Ahookabove=7842;e.Aiecyrillic=1236;e.Ainvertedbreve=514;e.Alpha=913;e.Alphatonos=902;e.Amacron=256;e.Amonospace=65313;e.Aogonek=260;e.Aring=197;e.Aringacute=506;e.Aringbelow=7680;e.Aringsmall=63461;e.Asmall=63329;e.Atilde=195;e.Atildesmall=63459;e.Aybarmenian=1329;e.B=66;e.Bcircle=9399;e.Bdotaccent=7682;e.Bdotbelow=7684;e.Becyrillic=1041;e.Benarmenian=1330;e.Beta=914;e.Bhook=385;e.Blinebelow=7686;e.Bmonospace=65314;e.Brevesmall=63220;e.Bsmall=63330;e.Btopbar=386;e.C=67;e.Caarmenian=1342;e.Cacute=262;e.Caron=63178;e.Caronsmall=63221;e.Ccaron=268;e.Ccedilla=199;e.Ccedillaacute=7688;e.Ccedillasmall=63463;e.Ccircle=9400;e.Ccircumflex=264;e.Cdot=266;e.Cdotaccent=266;e.Cedillasmall=63416;e.Chaarmenian=1353;e.Cheabkhasiancyrillic=1212;e.Checyrillic=1063;e.Chedescenderabkhasiancyrillic=1214;e.Chedescendercyrillic=1206;e.Chedieresiscyrillic=1268;e.Cheharmenian=1347;e.Chekhakassiancyrillic=1227;e.Cheverticalstrokecyrillic=1208;e.Chi=935;e.Chook=391;e.Circumflexsmall=63222;e.Cmonospace=65315;e.Coarmenian=1361;e.Csmall=63331;e.D=68;e.DZ=497;e.DZcaron=452;e.Daarmenian=1332;e.Dafrican=393;e.Dcaron=270;e.Dcedilla=7696;e.Dcircle=9401;e.Dcircumflexbelow=7698;e.Dcroat=272;e.Ddotaccent=7690;e.Ddotbelow=7692;e.Decyrillic=1044;e.Deicoptic=1006;e.Delta=8710;e.Deltagreek=916;e.Dhook=394;e.Dieresis=63179;e.DieresisAcute=63180;e.DieresisGrave=63181;e.Dieresissmall=63400;e.Digammagreek=988;e.Djecyrillic=1026;e.Dlinebelow=7694;e.Dmonospace=65316;e.Dotaccentsmall=63223;e.Dslash=272;e.Dsmall=63332;e.Dtopbar=395;e.Dz=498;e.Dzcaron=453;e.Dzeabkhasiancyrillic=1248;e.Dzecyrillic=1029;e.Dzhecyrillic=1039;e.E=69;e.Eacute=201;e.Eacutesmall=63465;e.Ebreve=276;e.Ecaron=282;e.Ecedillabreve=7708;e.Echarmenian=1333;e.Ecircle=9402;e.Ecircumflex=202;e.Ecircumflexacute=7870;e.Ecircumflexbelow=7704;e.Ecircumflexdotbelow=7878;e.Ecircumflexgrave=7872;e.Ecircumflexhookabove=7874;e.Ecircumflexsmall=63466;e.Ecircumflextilde=7876;e.Ecyrillic=1028;e.Edblgrave=516;e.Edieresis=203;e.Edieresissmall=63467;e.Edot=278;e.Edotaccent=278;e.Edotbelow=7864;e.Efcyrillic=1060;e.Egrave=200;e.Egravesmall=63464;e.Eharmenian=1335;e.Ehookabove=7866;e.Eightroman=8551;e.Einvertedbreve=518;e.Eiotifiedcyrillic=1124;e.Elcyrillic=1051;e.Elevenroman=8554;e.Emacron=274;e.Emacronacute=7702;e.Emacrongrave=7700;e.Emcyrillic=1052;e.Emonospace=65317;e.Encyrillic=1053;e.Endescendercyrillic=1186;e.Eng=330;e.Enghecyrillic=1188;e.Enhookcyrillic=1223;e.Eogonek=280;e.Eopen=400;e.Epsilon=917;e.Epsilontonos=904;e.Ercyrillic=1056;e.Ereversed=398;e.Ereversedcyrillic=1069;e.Escyrillic=1057;e.Esdescendercyrillic=1194;e.Esh=425;e.Esmall=63333;e.Eta=919;e.Etarmenian=1336;e.Etatonos=905;e.Eth=208;e.Ethsmall=63472;e.Etilde=7868;e.Etildebelow=7706;e.Euro=8364;e.Ezh=439;e.Ezhcaron=494;e.Ezhreversed=440;e.F=70;e.Fcircle=9403;e.Fdotaccent=7710;e.Feharmenian=1366;e.Feicoptic=996;e.Fhook=401;e.Fitacyrillic=1138;e.Fiveroman=8548;e.Fmonospace=65318;e.Fourroman=8547;e.Fsmall=63334;e.G=71;e.GBsquare=13191;e.Gacute=500;e.Gamma=915;e.Gammaafrican=404;e.Gangiacoptic=1002;e.Gbreve=286;e.Gcaron=486;e.Gcedilla=290;e.Gcircle=9404;e.Gcircumflex=284;e.Gcommaaccent=290;e.Gdot=288;e.Gdotaccent=288;e.Gecyrillic=1043;e.Ghadarmenian=1346;e.Ghemiddlehookcyrillic=1172;e.Ghestrokecyrillic=1170;e.Gheupturncyrillic=1168;e.Ghook=403;e.Gimarmenian=1331;e.Gjecyrillic=1027;e.Gmacron=7712;e.Gmonospace=65319;e.Grave=63182;e.Gravesmall=63328;e.Gsmall=63335;e.Gsmallhook=667;e.Gstroke=484;e.H=72;e.H18533=9679;e.H18543=9642;e.H18551=9643;e.H22073=9633;e.HPsquare=13259;e.Haabkhasiancyrillic=1192;e.Hadescendercyrillic=1202;e.Hardsigncyrillic=1066;e.Hbar=294;e.Hbrevebelow=7722;e.Hcedilla=7720;e.Hcircle=9405;e.Hcircumflex=292;e.Hdieresis=7718;e.Hdotaccent=7714;e.Hdotbelow=7716;e.Hmonospace=65320;e.Hoarmenian=1344;e.Horicoptic=1e3;e.Hsmall=63336;e.Hungarumlaut=63183;e.Hungarumlautsmall=63224;e.Hzsquare=13200;e.I=73;e.IAcyrillic=1071;e.IJ=306;e.IUcyrillic=1070;e.Iacute=205;e.Iacutesmall=63469;e.Ibreve=300;e.Icaron=463;e.Icircle=9406;e.Icircumflex=206;e.Icircumflexsmall=63470;e.Icyrillic=1030;e.Idblgrave=520;e.Idieresis=207;e.Idieresisacute=7726;e.Idieresiscyrillic=1252;e.Idieresissmall=63471;e.Idot=304;e.Idotaccent=304;e.Idotbelow=7882;e.Iebrevecyrillic=1238;e.Iecyrillic=1045;e.Ifraktur=8465;e.Igrave=204;e.Igravesmall=63468;e.Ihookabove=7880;e.Iicyrillic=1048;e.Iinvertedbreve=522;e.Iishortcyrillic=1049;e.Imacron=298;e.Imacroncyrillic=1250;e.Imonospace=65321;e.Iniarmenian=1339;e.Iocyrillic=1025;e.Iogonek=302;e.Iota=921;e.Iotaafrican=406;e.Iotadieresis=938;e.Iotatonos=906;e.Ismall=63337;e.Istroke=407;e.Itilde=296;e.Itildebelow=7724;e.Izhitsacyrillic=1140;e.Izhitsadblgravecyrillic=1142;e.J=74;e.Jaarmenian=1345;e.Jcircle=9407;e.Jcircumflex=308;e.Jecyrillic=1032;e.Jheharmenian=1355;e.Jmonospace=65322;e.Jsmall=63338;e.K=75;e.KBsquare=13189;e.KKsquare=13261;e.Kabashkircyrillic=1184;e.Kacute=7728;e.Kacyrillic=1050;e.Kadescendercyrillic=1178;e.Kahookcyrillic=1219;e.Kappa=922;e.Kastrokecyrillic=1182;e.Kaverticalstrokecyrillic=1180;e.Kcaron=488;e.Kcedilla=310;e.Kcircle=9408;e.Kcommaaccent=310;e.Kdotbelow=7730;e.Keharmenian=1364;e.Kenarmenian=1343;e.Khacyrillic=1061;e.Kheicoptic=998;e.Khook=408;e.Kjecyrillic=1036;e.Klinebelow=7732;e.Kmonospace=65323;e.Koppacyrillic=1152;e.Koppagreek=990;e.Ksicyrillic=1134;e.Ksmall=63339;e.L=76;e.LJ=455;e.LL=63167;e.Lacute=313;e.Lambda=923;e.Lcaron=317;e.Lcedilla=315;e.Lcircle=9409;e.Lcircumflexbelow=7740;e.Lcommaaccent=315;e.Ldot=319;e.Ldotaccent=319;e.Ldotbelow=7734;e.Ldotbelowmacron=7736;e.Liwnarmenian=1340;e.Lj=456;e.Ljecyrillic=1033;e.Llinebelow=7738;e.Lmonospace=65324;e.Lslash=321;e.Lslashsmall=63225;e.Lsmall=63340;e.M=77;e.MBsquare=13190;e.Macron=63184;e.Macronsmall=63407;e.Macute=7742;e.Mcircle=9410;e.Mdotaccent=7744;e.Mdotbelow=7746;e.Menarmenian=1348;e.Mmonospace=65325;e.Msmall=63341;e.Mturned=412;e.Mu=924;e.N=78;e.NJ=458;e.Nacute=323;e.Ncaron=327;e.Ncedilla=325;e.Ncircle=9411;e.Ncircumflexbelow=7754;e.Ncommaaccent=325;e.Ndotaccent=7748;e.Ndotbelow=7750;e.Nhookleft=413;e.Nineroman=8552;e.Nj=459;e.Njecyrillic=1034;e.Nlinebelow=7752;e.Nmonospace=65326;e.Nowarmenian=1350;e.Nsmall=63342;e.Ntilde=209;e.Ntildesmall=63473;e.Nu=925;e.O=79;e.OE=338;e.OEsmall=63226;e.Oacute=211;e.Oacutesmall=63475;e.Obarredcyrillic=1256;e.Obarreddieresiscyrillic=1258;e.Obreve=334;e.Ocaron=465;e.Ocenteredtilde=415;e.Ocircle=9412;e.Ocircumflex=212;e.Ocircumflexacute=7888;e.Ocircumflexdotbelow=7896;e.Ocircumflexgrave=7890;e.Ocircumflexhookabove=7892;e.Ocircumflexsmall=63476;e.Ocircumflextilde=7894;e.Ocyrillic=1054;e.Odblacute=336;e.Odblgrave=524;e.Odieresis=214;e.Odieresiscyrillic=1254;e.Odieresissmall=63478;e.Odotbelow=7884;e.Ogoneksmall=63227;e.Ograve=210;e.Ogravesmall=63474;e.Oharmenian=1365;e.Ohm=8486;e.Ohookabove=7886;e.Ohorn=416;e.Ohornacute=7898;e.Ohorndotbelow=7906;e.Ohorngrave=7900;e.Ohornhookabove=7902;e.Ohorntilde=7904;e.Ohungarumlaut=336;e.Oi=418;e.Oinvertedbreve=526;e.Omacron=332;e.Omacronacute=7762;e.Omacrongrave=7760;e.Omega=8486;e.Omegacyrillic=1120;e.Omegagreek=937;e.Omegaroundcyrillic=1146;e.Omegatitlocyrillic=1148;e.Omegatonos=911;e.Omicron=927;e.Omicrontonos=908;e.Omonospace=65327;e.Oneroman=8544;e.Oogonek=490;e.Oogonekmacron=492;e.Oopen=390;e.Oslash=216;e.Oslashacute=510;e.Oslashsmall=63480;e.Osmall=63343;e.Ostrokeacute=510;e.Otcyrillic=1150;e.Otilde=213;e.Otildeacute=7756;e.Otildedieresis=7758;e.Otildesmall=63477;e.P=80;e.Pacute=7764;e.Pcircle=9413;e.Pdotaccent=7766;e.Pecyrillic=1055;e.Peharmenian=1354;e.Pemiddlehookcyrillic=1190;e.Phi=934;e.Phook=420;e.Pi=928;e.Piwrarmenian=1363;e.Pmonospace=65328;e.Psi=936;e.Psicyrillic=1136;e.Psmall=63344;e.Q=81;e.Qcircle=9414;e.Qmonospace=65329;e.Qsmall=63345;e.R=82;e.Raarmenian=1356;e.Racute=340;e.Rcaron=344;e.Rcedilla=342;e.Rcircle=9415;e.Rcommaaccent=342;e.Rdblgrave=528;e.Rdotaccent=7768;e.Rdotbelow=7770;e.Rdotbelowmacron=7772;e.Reharmenian=1360;e.Rfraktur=8476;e.Rho=929;e.Ringsmall=63228;e.Rinvertedbreve=530;e.Rlinebelow=7774;e.Rmonospace=65330;e.Rsmall=63346;e.Rsmallinverted=641;e.Rsmallinvertedsuperior=694;e.S=83;e.SF010000=9484;e.SF020000=9492;e.SF030000=9488;e.SF040000=9496;e.SF050000=9532;e.SF060000=9516;e.SF070000=9524;e.SF080000=9500;e.SF090000=9508;e.SF100000=9472;e.SF110000=9474;e.SF190000=9569;e.SF200000=9570;e.SF210000=9558;e.SF220000=9557;e.SF230000=9571;e.SF240000=9553;e.SF250000=9559;e.SF260000=9565;e.SF270000=9564;e.SF280000=9563;e.SF360000=9566;e.SF370000=9567;e.SF380000=9562;e.SF390000=9556;e.SF400000=9577;e.SF410000=9574;e.SF420000=9568;e.SF430000=9552;e.SF440000=9580;e.SF450000=9575;e.SF460000=9576;e.SF470000=9572;e.SF480000=9573;e.SF490000=9561;e.SF500000=9560;e.SF510000=9554;e.SF520000=9555;e.SF530000=9579;e.SF540000=9578;e.Sacute=346;e.Sacutedotaccent=7780;e.Sampigreek=992;e.Scaron=352;e.Scarondotaccent=7782;e.Scaronsmall=63229;e.Scedilla=350;e.Schwa=399;e.Schwacyrillic=1240;e.Schwadieresiscyrillic=1242;e.Scircle=9416;e.Scircumflex=348;e.Scommaaccent=536;e.Sdotaccent=7776;e.Sdotbelow=7778;e.Sdotbelowdotaccent=7784;e.Seharmenian=1357;e.Sevenroman=8550;e.Shaarmenian=1351;e.Shacyrillic=1064;e.Shchacyrillic=1065;e.Sheicoptic=994;e.Shhacyrillic=1210;e.Shimacoptic=1004;e.Sigma=931;e.Sixroman=8549;e.Smonospace=65331;e.Softsigncyrillic=1068;e.Ssmall=63347;e.Stigmagreek=986;e.T=84;e.Tau=932;e.Tbar=358;e.Tcaron=356;e.Tcedilla=354;e.Tcircle=9417;e.Tcircumflexbelow=7792;e.Tcommaaccent=354;e.Tdotaccent=7786;e.Tdotbelow=7788;e.Tecyrillic=1058;e.Tedescendercyrillic=1196;e.Tenroman=8553;e.Tetsecyrillic=1204;e.Theta=920;e.Thook=428;e.Thorn=222;e.Thornsmall=63486;e.Threeroman=8546;e.Tildesmall=63230;e.Tiwnarmenian=1359;e.Tlinebelow=7790;e.Tmonospace=65332;e.Toarmenian=1337;e.Tonefive=444;e.Tonesix=388;e.Tonetwo=423;e.Tretroflexhook=430;e.Tsecyrillic=1062;e.Tshecyrillic=1035;e.Tsmall=63348;e.Twelveroman=8555;e.Tworoman=8545;e.U=85;e.Uacute=218;e.Uacutesmall=63482;e.Ubreve=364;e.Ucaron=467;e.Ucircle=9418;e.Ucircumflex=219;e.Ucircumflexbelow=7798;e.Ucircumflexsmall=63483;e.Ucyrillic=1059;e.Udblacute=368;e.Udblgrave=532;e.Udieresis=220;e.Udieresisacute=471;e.Udieresisbelow=7794;e.Udieresiscaron=473;e.Udieresiscyrillic=1264;e.Udieresisgrave=475;e.Udieresismacron=469;e.Udieresissmall=63484;e.Udotbelow=7908;e.Ugrave=217;e.Ugravesmall=63481;e.Uhookabove=7910;e.Uhorn=431;e.Uhornacute=7912;e.Uhorndotbelow=7920;e.Uhorngrave=7914;e.Uhornhookabove=7916;e.Uhorntilde=7918;e.Uhungarumlaut=368;e.Uhungarumlautcyrillic=1266;e.Uinvertedbreve=534;e.Ukcyrillic=1144;e.Umacron=362;e.Umacroncyrillic=1262;e.Umacrondieresis=7802;e.Umonospace=65333;e.Uogonek=370;e.Upsilon=933;e.Upsilon1=978;e.Upsilonacutehooksymbolgreek=979;e.Upsilonafrican=433;e.Upsilondieresis=939;e.Upsilondieresishooksymbolgreek=980;e.Upsilonhooksymbol=978;e.Upsilontonos=910;e.Uring=366;e.Ushortcyrillic=1038;e.Usmall=63349;e.Ustraightcyrillic=1198;e.Ustraightstrokecyrillic=1200;e.Utilde=360;e.Utildeacute=7800;e.Utildebelow=7796;e.V=86;e.Vcircle=9419;e.Vdotbelow=7806;e.Vecyrillic=1042;e.Vewarmenian=1358;e.Vhook=434;e.Vmonospace=65334;e.Voarmenian=1352;e.Vsmall=63350;e.Vtilde=7804;e.W=87;e.Wacute=7810;e.Wcircle=9420;e.Wcircumflex=372;e.Wdieresis=7812;e.Wdotaccent=7814;e.Wdotbelow=7816;e.Wgrave=7808;e.Wmonospace=65335;e.Wsmall=63351;e.X=88;e.Xcircle=9421;e.Xdieresis=7820;e.Xdotaccent=7818;e.Xeharmenian=1341;e.Xi=926;e.Xmonospace=65336;e.Xsmall=63352;e.Y=89;e.Yacute=221;e.Yacutesmall=63485;e.Yatcyrillic=1122;e.Ycircle=9422;e.Ycircumflex=374;e.Ydieresis=376;e.Ydieresissmall=63487;e.Ydotaccent=7822;e.Ydotbelow=7924;e.Yericyrillic=1067;e.Yerudieresiscyrillic=1272;e.Ygrave=7922;e.Yhook=435;e.Yhookabove=7926;e.Yiarmenian=1349;e.Yicyrillic=1031;e.Yiwnarmenian=1362;e.Ymonospace=65337;e.Ysmall=63353;e.Ytilde=7928;e.Yusbigcyrillic=1130;e.Yusbigiotifiedcyrillic=1132;e.Yuslittlecyrillic=1126;e.Yuslittleiotifiedcyrillic=1128;e.Z=90;e.Zaarmenian=1334;e.Zacute=377;e.Zcaron=381;e.Zcaronsmall=63231;e.Zcircle=9423;e.Zcircumflex=7824;e.Zdot=379;e.Zdotaccent=379;e.Zdotbelow=7826;e.Zecyrillic=1047;e.Zedescendercyrillic=1176;e.Zedieresiscyrillic=1246;e.Zeta=918;e.Zhearmenian=1338;e.Zhebrevecyrillic=1217;e.Zhecyrillic=1046;e.Zhedescendercyrillic=1174;e.Zhedieresiscyrillic=1244;e.Zlinebelow=7828;e.Zmonospace=65338;e.Zsmall=63354;e.Zstroke=437;e.a=97;e.aabengali=2438;e.aacute=225;e.aadeva=2310;e.aagujarati=2694;e.aagurmukhi=2566;e.aamatragurmukhi=2622;e.aarusquare=13059;e.aavowelsignbengali=2494;e.aavowelsigndeva=2366;e.aavowelsigngujarati=2750;e.abbreviationmarkarmenian=1375;e.abbreviationsigndeva=2416;e.abengali=2437;e.abopomofo=12570;e.abreve=259;e.abreveacute=7855;e.abrevecyrillic=1233;e.abrevedotbelow=7863;e.abrevegrave=7857;e.abrevehookabove=7859;e.abrevetilde=7861;e.acaron=462;e.acircle=9424;e.acircumflex=226;e.acircumflexacute=7845;e.acircumflexdotbelow=7853;e.acircumflexgrave=7847;e.acircumflexhookabove=7849;e.acircumflextilde=7851;e.acute=180;e.acutebelowcmb=791;e.acutecmb=769;e.acutecomb=769;e.acutedeva=2388;e.acutelowmod=719;e.acutetonecmb=833;e.acyrillic=1072;e.adblgrave=513;e.addakgurmukhi=2673;e.adeva=2309;e.adieresis=228;e.adieresiscyrillic=1235;e.adieresismacron=479;e.adotbelow=7841;e.adotmacron=481;e.ae=230;e.aeacute=509;e.aekorean=12624;e.aemacron=483;e.afii00208=8213;e.afii08941=8356;e.afii10017=1040;e.afii10018=1041;e.afii10019=1042;e.afii10020=1043;e.afii10021=1044;e.afii10022=1045;e.afii10023=1025;e.afii10024=1046;e.afii10025=1047;e.afii10026=1048;e.afii10027=1049;e.afii10028=1050;e.afii10029=1051;e.afii10030=1052;e.afii10031=1053;e.afii10032=1054;e.afii10033=1055;e.afii10034=1056;e.afii10035=1057;e.afii10036=1058;e.afii10037=1059;e.afii10038=1060;e.afii10039=1061;e.afii10040=1062;e.afii10041=1063;e.afii10042=1064;e.afii10043=1065;e.afii10044=1066;e.afii10045=1067;e.afii10046=1068;e.afii10047=1069;e.afii10048=1070;e.afii10049=1071;e.afii10050=1168;e.afii10051=1026;e.afii10052=1027;e.afii10053=1028;e.afii10054=1029;e.afii10055=1030;e.afii10056=1031;e.afii10057=1032;e.afii10058=1033;e.afii10059=1034;e.afii10060=1035;e.afii10061=1036;e.afii10062=1038;e.afii10063=63172;e.afii10064=63173;e.afii10065=1072;e.afii10066=1073;e.afii10067=1074;e.afii10068=1075;e.afii10069=1076;e.afii10070=1077;e.afii10071=1105;e.afii10072=1078;e.afii10073=1079;e.afii10074=1080;e.afii10075=1081;e.afii10076=1082;e.afii10077=1083;e.afii10078=1084;e.afii10079=1085;e.afii10080=1086;e.afii10081=1087;e.afii10082=1088;e.afii10083=1089;e.afii10084=1090;e.afii10085=1091;e.afii10086=1092;e.afii10087=1093;e.afii10088=1094;e.afii10089=1095;e.afii10090=1096;e.afii10091=1097;e.afii10092=1098;e.afii10093=1099;e.afii10094=1100;e.afii10095=1101;e.afii10096=1102;e.afii10097=1103;e.afii10098=1169;e.afii10099=1106;e.afii10100=1107;e.afii10101=1108;e.afii10102=1109;e.afii10103=1110;e.afii10104=1111;e.afii10105=1112;e.afii10106=1113;e.afii10107=1114;e.afii10108=1115;e.afii10109=1116;e.afii10110=1118;e.afii10145=1039;e.afii10146=1122;e.afii10147=1138;e.afii10148=1140;e.afii10192=63174;e.afii10193=1119;e.afii10194=1123;e.afii10195=1139;e.afii10196=1141;e.afii10831=63175;e.afii10832=63176;e.afii10846=1241;e.afii299=8206;e.afii300=8207;e.afii301=8205;e.afii57381=1642;e.afii57388=1548;e.afii57392=1632;e.afii57393=1633;e.afii57394=1634;e.afii57395=1635;e.afii57396=1636;e.afii57397=1637;e.afii57398=1638;e.afii57399=1639;e.afii57400=1640;e.afii57401=1641;e.afii57403=1563;e.afii57407=1567;e.afii57409=1569;e.afii57410=1570;e.afii57411=1571;e.afii57412=1572;e.afii57413=1573;e.afii57414=1574;e.afii57415=1575;e.afii57416=1576;e.afii57417=1577;e.afii57418=1578;e.afii57419=1579;e.afii57420=1580;e.afii57421=1581;e.afii57422=1582;e.afii57423=1583;e.afii57424=1584;e.afii57425=1585;e.afii57426=1586;e.afii57427=1587;e.afii57428=1588;e.afii57429=1589;e.afii57430=1590;e.afii57431=1591;e.afii57432=1592;e.afii57433=1593;e.afii57434=1594;e.afii57440=1600;e.afii57441=1601;e.afii57442=1602;e.afii57443=1603;e.afii57444=1604;e.afii57445=1605;e.afii57446=1606;e.afii57448=1608;e.afii57449=1609;e.afii57450=1610;e.afii57451=1611;e.afii57452=1612;e.afii57453=1613;e.afii57454=1614;e.afii57455=1615;e.afii57456=1616;e.afii57457=1617;e.afii57458=1618;e.afii57470=1607;e.afii57505=1700;e.afii57506=1662;e.afii57507=1670;e.afii57508=1688;e.afii57509=1711;e.afii57511=1657;e.afii57512=1672;e.afii57513=1681;e.afii57514=1722;e.afii57519=1746;e.afii57534=1749;e.afii57636=8362;e.afii57645=1470;e.afii57658=1475;e.afii57664=1488;e.afii57665=1489;e.afii57666=1490;e.afii57667=1491;e.afii57668=1492;e.afii57669=1493;e.afii57670=1494;e.afii57671=1495;e.afii57672=1496;e.afii57673=1497;e.afii57674=1498;e.afii57675=1499;e.afii57676=1500;e.afii57677=1501;e.afii57678=1502;e.afii57679=1503;e.afii57680=1504;e.afii57681=1505;e.afii57682=1506;e.afii57683=1507;e.afii57684=1508;e.afii57685=1509;e.afii57686=1510;e.afii57687=1511;e.afii57688=1512;e.afii57689=1513;e.afii57690=1514;e.afii57694=64298;e.afii57695=64299;e.afii57700=64331;e.afii57705=64287;e.afii57716=1520;e.afii57717=1521;e.afii57718=1522;e.afii57723=64309;e.afii57793=1460;e.afii57794=1461;e.afii57795=1462;e.afii57796=1467;e.afii57797=1464;e.afii57798=1463;e.afii57799=1456;e.afii57800=1458;e.afii57801=1457;e.afii57802=1459;e.afii57803=1474;e.afii57804=1473;e.afii57806=1465;e.afii57807=1468;e.afii57839=1469;e.afii57841=1471;e.afii57842=1472;e.afii57929=700;e.afii61248=8453;e.afii61289=8467;e.afii61352=8470;e.afii61573=8236;e.afii61574=8237;e.afii61575=8238;e.afii61664=8204;e.afii63167=1645;e.afii64937=701;e.agrave=224;e.agujarati=2693;e.agurmukhi=2565;e.ahiragana=12354;e.ahookabove=7843;e.aibengali=2448;e.aibopomofo=12574;e.aideva=2320;e.aiecyrillic=1237;e.aigujarati=2704;e.aigurmukhi=2576;e.aimatragurmukhi=2632;e.ainarabic=1593;e.ainfinalarabic=65226;e.aininitialarabic=65227;e.ainmedialarabic=65228;e.ainvertedbreve=515;e.aivowelsignbengali=2504;e.aivowelsigndeva=2376;e.aivowelsigngujarati=2760;e.akatakana=12450;e.akatakanahalfwidth=65393;e.akorean=12623;e.alef=1488;e.alefarabic=1575;e.alefdageshhebrew=64304;e.aleffinalarabic=65166;e.alefhamzaabovearabic=1571;e.alefhamzaabovefinalarabic=65156;e.alefhamzabelowarabic=1573;e.alefhamzabelowfinalarabic=65160;e.alefhebrew=1488;e.aleflamedhebrew=64335;e.alefmaddaabovearabic=1570;e.alefmaddaabovefinalarabic=65154;e.alefmaksuraarabic=1609;e.alefmaksurafinalarabic=65264;e.alefmaksurainitialarabic=65267;e.alefmaksuramedialarabic=65268;e.alefpatahhebrew=64302;e.alefqamatshebrew=64303;e.aleph=8501;e.allequal=8780;e.alpha=945;e.alphatonos=940;e.amacron=257;e.amonospace=65345;e.ampersand=38;e.ampersandmonospace=65286;e.ampersandsmall=63270;e.amsquare=13250;e.anbopomofo=12578;e.angbopomofo=12580;e.angbracketleft=12296;e.angbracketright=12297;e.angkhankhuthai=3674;e.angle=8736;e.anglebracketleft=12296;e.anglebracketleftvertical=65087;e.anglebracketright=12297;e.anglebracketrightvertical=65088;e.angleleft=9001;e.angleright=9002;e.angstrom=8491;e.anoteleia=903;e.anudattadeva=2386;e.anusvarabengali=2434;e.anusvaradeva=2306;e.anusvaragujarati=2690;e.aogonek=261;e.apaatosquare=13056;e.aparen=9372;e.apostrophearmenian=1370;e.apostrophemod=700;e.apple=63743;e.approaches=8784;e.approxequal=8776;e.approxequalorimage=8786;e.approximatelyequal=8773;e.araeaekorean=12686;e.araeakorean=12685;e.arc=8978;e.arighthalfring=7834;e.aring=229;e.aringacute=507;e.aringbelow=7681;e.arrowboth=8596;e.arrowdashdown=8675;e.arrowdashleft=8672;e.arrowdashright=8674;e.arrowdashup=8673;e.arrowdblboth=8660;e.arrowdbldown=8659;e.arrowdblleft=8656;e.arrowdblright=8658;e.arrowdblup=8657;e.arrowdown=8595;e.arrowdownleft=8601;e.arrowdownright=8600;e.arrowdownwhite=8681;e.arrowheaddownmod=709;e.arrowheadleftmod=706;e.arrowheadrightmod=707;e.arrowheadupmod=708;e.arrowhorizex=63719;e.arrowleft=8592;e.arrowleftdbl=8656;e.arrowleftdblstroke=8653;e.arrowleftoverright=8646;e.arrowleftwhite=8678;e.arrowright=8594;e.arrowrightdblstroke=8655;e.arrowrightheavy=10142;e.arrowrightoverleft=8644;e.arrowrightwhite=8680;e.arrowtableft=8676;e.arrowtabright=8677;e.arrowup=8593;e.arrowupdn=8597;e.arrowupdnbse=8616;e.arrowupdownbase=8616;e.arrowupleft=8598;e.arrowupleftofdown=8645;e.arrowupright=8599;e.arrowupwhite=8679;e.arrowvertex=63718;e.asciicircum=94;e.asciicircummonospace=65342;e.asciitilde=126;e.asciitildemonospace=65374;e.ascript=593;e.ascriptturned=594;e.asmallhiragana=12353;e.asmallkatakana=12449;e.asmallkatakanahalfwidth=65383;e.asterisk=42;e.asteriskaltonearabic=1645;e.asteriskarabic=1645;e.asteriskmath=8727;e.asteriskmonospace=65290;e.asterisksmall=65121;e.asterism=8258;e.asuperior=63209;e.asymptoticallyequal=8771;e.at=64;e.atilde=227;e.atmonospace=65312;e.atsmall=65131;e.aturned=592;e.aubengali=2452;e.aubopomofo=12576;e.audeva=2324;e.augujarati=2708;e.augurmukhi=2580;e.aulengthmarkbengali=2519;e.aumatragurmukhi=2636;e.auvowelsignbengali=2508;e.auvowelsigndeva=2380;e.auvowelsigngujarati=2764;e.avagrahadeva=2365;e.aybarmenian=1377;e.ayin=1506;e.ayinaltonehebrew=64288;e.ayinhebrew=1506;e.b=98;e.babengali=2476;e.backslash=92;e.backslashmonospace=65340;e.badeva=2348;e.bagujarati=2732;e.bagurmukhi=2604;e.bahiragana=12400;e.bahtthai=3647;e.bakatakana=12496;e.bar=124;e.barmonospace=65372;e.bbopomofo=12549;e.bcircle=9425;e.bdotaccent=7683;e.bdotbelow=7685;e.beamedsixteenthnotes=9836;e.because=8757;e.becyrillic=1073;e.beharabic=1576;e.behfinalarabic=65168;e.behinitialarabic=65169;e.behiragana=12409;e.behmedialarabic=65170;e.behmeeminitialarabic=64671;e.behmeemisolatedarabic=64520;e.behnoonfinalarabic=64621;e.bekatakana=12505;e.benarmenian=1378;e.bet=1489;e.beta=946;e.betasymbolgreek=976;e.betdagesh=64305;e.betdageshhebrew=64305;e.bethebrew=1489;e.betrafehebrew=64332;e.bhabengali=2477;e.bhadeva=2349;e.bhagujarati=2733;e.bhagurmukhi=2605;e.bhook=595;e.bihiragana=12403;e.bikatakana=12499;e.bilabialclick=664;e.bindigurmukhi=2562;e.birusquare=13105;e.blackcircle=9679;e.blackdiamond=9670;e.blackdownpointingtriangle=9660;e.blackleftpointingpointer=9668;e.blackleftpointingtriangle=9664;e.blacklenticularbracketleft=12304;e.blacklenticularbracketleftvertical=65083;e.blacklenticularbracketright=12305;e.blacklenticularbracketrightvertical=65084;e.blacklowerlefttriangle=9699;e.blacklowerrighttriangle=9698;e.blackrectangle=9644;e.blackrightpointingpointer=9658;e.blackrightpointingtriangle=9654;e.blacksmallsquare=9642;e.blacksmilingface=9787;e.blacksquare=9632;e.blackstar=9733;e.blackupperlefttriangle=9700;e.blackupperrighttriangle=9701;e.blackuppointingsmalltriangle=9652;e.blackuppointingtriangle=9650;e.blank=9251;e.blinebelow=7687;e.block=9608;e.bmonospace=65346;e.bobaimaithai=3610;e.bohiragana=12412;e.bokatakana=12508;e.bparen=9373;e.bqsquare=13251;e.braceex=63732;e.braceleft=123;e.braceleftbt=63731;e.braceleftmid=63730;e.braceleftmonospace=65371;e.braceleftsmall=65115;e.bracelefttp=63729;e.braceleftvertical=65079;e.braceright=125;e.bracerightbt=63742;e.bracerightmid=63741;e.bracerightmonospace=65373;e.bracerightsmall=65116;e.bracerighttp=63740;e.bracerightvertical=65080;e.bracketleft=91;e.bracketleftbt=63728;e.bracketleftex=63727;e.bracketleftmonospace=65339;e.bracketlefttp=63726;e.bracketright=93;e.bracketrightbt=63739;e.bracketrightex=63738;e.bracketrightmonospace=65341;e.bracketrighttp=63737;e.breve=728;e.brevebelowcmb=814;e.brevecmb=774;e.breveinvertedbelowcmb=815;e.breveinvertedcmb=785;e.breveinverteddoublecmb=865;e.bridgebelowcmb=810;e.bridgeinvertedbelowcmb=826;e.brokenbar=166;e.bstroke=384;e.bsuperior=63210;e.btopbar=387;e.buhiragana=12406;e.bukatakana=12502;e.bullet=8226;e.bulletinverse=9688;e.bulletoperator=8729;e.bullseye=9678;e.c=99;e.caarmenian=1390;e.cabengali=2458;e.cacute=263;e.cadeva=2330;e.cagujarati=2714;e.cagurmukhi=2586;e.calsquare=13192;e.candrabindubengali=2433;e.candrabinducmb=784;e.candrabindudeva=2305;e.candrabindugujarati=2689;e.capslock=8682;e.careof=8453;e.caron=711;e.caronbelowcmb=812;e.caroncmb=780;e.carriagereturn=8629;e.cbopomofo=12568;e.ccaron=269;e.ccedilla=231;e.ccedillaacute=7689;e.ccircle=9426;e.ccircumflex=265;e.ccurl=597;e.cdot=267;e.cdotaccent=267;e.cdsquare=13253;e.cedilla=184;e.cedillacmb=807;e.cent=162;e.centigrade=8451;e.centinferior=63199;e.centmonospace=65504;e.centoldstyle=63394;e.centsuperior=63200;e.chaarmenian=1401;e.chabengali=2459;e.chadeva=2331;e.chagujarati=2715;e.chagurmukhi=2587;e.chbopomofo=12564;e.cheabkhasiancyrillic=1213;e.checkmark=10003;e.checyrillic=1095;e.chedescenderabkhasiancyrillic=1215;e.chedescendercyrillic=1207;e.chedieresiscyrillic=1269;e.cheharmenian=1395;e.chekhakassiancyrillic=1228;e.cheverticalstrokecyrillic=1209;e.chi=967;e.chieuchacirclekorean=12919;e.chieuchaparenkorean=12823;e.chieuchcirclekorean=12905;e.chieuchkorean=12618;e.chieuchparenkorean=12809;e.chochangthai=3594;e.chochanthai=3592;e.chochingthai=3593;e.chochoethai=3596;e.chook=392;e.cieucacirclekorean=12918;e.cieucaparenkorean=12822;e.cieuccirclekorean=12904;e.cieuckorean=12616;e.cieucparenkorean=12808;e.cieucuparenkorean=12828;e.circle=9675;e.circlecopyrt=169;e.circlemultiply=8855;e.circleot=8857;e.circleplus=8853;e.circlepostalmark=12342;e.circlewithlefthalfblack=9680;e.circlewithrighthalfblack=9681;e.circumflex=710;e.circumflexbelowcmb=813;e.circumflexcmb=770;e.clear=8999;e.clickalveolar=450;e.clickdental=448;e.clicklateral=449;e.clickretroflex=451;e.club=9827;e.clubsuitblack=9827;e.clubsuitwhite=9831;e.cmcubedsquare=13220;e.cmonospace=65347;e.cmsquaredsquare=13216;e.coarmenian=1409;e.colon=58;e.colonmonetary=8353;e.colonmonospace=65306;e.colonsign=8353;e.colonsmall=65109;e.colontriangularhalfmod=721;e.colontriangularmod=720;e.comma=44;e.commaabovecmb=787;e.commaaboverightcmb=789;e.commaaccent=63171;e.commaarabic=1548;e.commaarmenian=1373;e.commainferior=63201;e.commamonospace=65292;e.commareversedabovecmb=788;e.commareversedmod=701;e.commasmall=65104;e.commasuperior=63202;e.commaturnedabovecmb=786;e.commaturnedmod=699;e.compass=9788;e.congruent=8773;e.contourintegral=8750;e.control=8963;e.controlACK=6;e.controlBEL=7;e.controlBS=8;e.controlCAN=24;e.controlCR=13;e.controlDC1=17;e.controlDC2=18;e.controlDC3=19;e.controlDC4=20;e.controlDEL=127;e.controlDLE=16;e.controlEM=25;e.controlENQ=5;e.controlEOT=4;e.controlESC=27;e.controlETB=23;e.controlETX=3;e.controlFF=12;e.controlFS=28;e.controlGS=29;e.controlHT=9;e.controlLF=10;e.controlNAK=21;e.controlNULL=0;e.controlRS=30;e.controlSI=15;e.controlSO=14;e.controlSOT=2;e.controlSTX=1;e.controlSUB=26;e.controlSYN=22;e.controlUS=31;e.controlVT=11;e.copyright=169;e.copyrightsans=63721;e.copyrightserif=63193;e.cornerbracketleft=12300;e.cornerbracketlefthalfwidth=65378;e.cornerbracketleftvertical=65089;e.cornerbracketright=12301;e.cornerbracketrighthalfwidth=65379;e.cornerbracketrightvertical=65090;e.corporationsquare=13183;e.cosquare=13255;e.coverkgsquare=13254;e.cparen=9374;e.cruzeiro=8354;e.cstretched=663;e.curlyand=8911;e.curlyor=8910;e.currency=164;e.cyrBreve=63185;e.cyrFlex=63186;e.cyrbreve=63188;e.cyrflex=63189;e.d=100;e.daarmenian=1380;e.dabengali=2470;e.dadarabic=1590;e.dadeva=2342;e.dadfinalarabic=65214;e.dadinitialarabic=65215;e.dadmedialarabic=65216;e.dagesh=1468;e.dageshhebrew=1468;e.dagger=8224;e.daggerdbl=8225;e.dagujarati=2726;e.dagurmukhi=2598;e.dahiragana=12384;e.dakatakana=12480;e.dalarabic=1583;e.dalet=1491;e.daletdagesh=64307;e.daletdageshhebrew=64307;e.dalethebrew=1491;e.dalfinalarabic=65194;e.dammaarabic=1615;e.dammalowarabic=1615;e.dammatanaltonearabic=1612;e.dammatanarabic=1612;e.danda=2404;e.dargahebrew=1447;e.dargalefthebrew=1447;e.dasiapneumatacyrilliccmb=1157;e.dblGrave=63187;e.dblanglebracketleft=12298;e.dblanglebracketleftvertical=65085;e.dblanglebracketright=12299;e.dblanglebracketrightvertical=65086;e.dblarchinvertedbelowcmb=811;e.dblarrowleft=8660;e.dblarrowright=8658;e.dbldanda=2405;e.dblgrave=63190;e.dblgravecmb=783;e.dblintegral=8748;e.dbllowline=8215;e.dbllowlinecmb=819;e.dbloverlinecmb=831;e.dblprimemod=698;e.dblverticalbar=8214;e.dblverticallineabovecmb=782;e.dbopomofo=12553;e.dbsquare=13256;e.dcaron=271;e.dcedilla=7697;e.dcircle=9427;e.dcircumflexbelow=7699;e.dcroat=273;e.ddabengali=2465;e.ddadeva=2337;e.ddagujarati=2721;e.ddagurmukhi=2593;e.ddalarabic=1672;e.ddalfinalarabic=64393;e.dddhadeva=2396;e.ddhabengali=2466;e.ddhadeva=2338;e.ddhagujarati=2722;e.ddhagurmukhi=2594;e.ddotaccent=7691;e.ddotbelow=7693;e.decimalseparatorarabic=1643;e.decimalseparatorpersian=1643;e.decyrillic=1076;e.degree=176;e.dehihebrew=1453;e.dehiragana=12391;e.deicoptic=1007;e.dekatakana=12487;e.deleteleft=9003;e.deleteright=8998;e.delta=948;e.deltaturned=397;e.denominatorminusonenumeratorbengali=2552;e.dezh=676;e.dhabengali=2471;e.dhadeva=2343;e.dhagujarati=2727;e.dhagurmukhi=2599;e.dhook=599;e.dialytikatonos=901;e.dialytikatonoscmb=836;e.diamond=9830;e.diamondsuitwhite=9826;e.dieresis=168;e.dieresisacute=63191;e.dieresisbelowcmb=804;e.dieresiscmb=776;e.dieresisgrave=63192;e.dieresistonos=901;e.dihiragana=12386;e.dikatakana=12482;e.dittomark=12291;e.divide=247;e.divides=8739;e.divisionslash=8725;e.djecyrillic=1106;e.dkshade=9619;e.dlinebelow=7695;e.dlsquare=13207;e.dmacron=273;e.dmonospace=65348;e.dnblock=9604;e.dochadathai=3598;e.dodekthai=3604;e.dohiragana=12393;e.dokatakana=12489;e.dollar=36;e.dollarinferior=63203;e.dollarmonospace=65284;e.dollaroldstyle=63268;e.dollarsmall=65129;e.dollarsuperior=63204;e.dong=8363;e.dorusquare=13094;e.dotaccent=729;e.dotaccentcmb=775;e.dotbelowcmb=803;e.dotbelowcomb=803;e.dotkatakana=12539;e.dotlessi=305;e.dotlessj=63166;e.dotlessjstrokehook=644;e.dotmath=8901;e.dottedcircle=9676;e.doubleyodpatah=64287;e.doubleyodpatahhebrew=64287;e.downtackbelowcmb=798;e.downtackmod=725;e.dparen=9375;e.dsuperior=63211;e.dtail=598;e.dtopbar=396;e.duhiragana=12389;e.dukatakana=12485;e.dz=499;e.dzaltone=675;e.dzcaron=454;e.dzcurl=677;e.dzeabkhasiancyrillic=1249;e.dzecyrillic=1109;e.dzhecyrillic=1119;e.e=101;e.eacute=233;e.earth=9793;e.ebengali=2447;e.ebopomofo=12572;e.ebreve=277;e.ecandradeva=2317;e.ecandragujarati=2701;e.ecandravowelsigndeva=2373;e.ecandravowelsigngujarati=2757;e.ecaron=283;e.ecedillabreve=7709;e.echarmenian=1381;e.echyiwnarmenian=1415;e.ecircle=9428;e.ecircumflex=234;e.ecircumflexacute=7871;e.ecircumflexbelow=7705;e.ecircumflexdotbelow=7879;e.ecircumflexgrave=7873;e.ecircumflexhookabove=7875;e.ecircumflextilde=7877;e.ecyrillic=1108;e.edblgrave=517;e.edeva=2319;e.edieresis=235;e.edot=279;e.edotaccent=279;e.edotbelow=7865;e.eegurmukhi=2575;e.eematragurmukhi=2631;e.efcyrillic=1092;e.egrave=232;e.egujarati=2703;e.eharmenian=1383;e.ehbopomofo=12573;e.ehiragana=12360;e.ehookabove=7867;e.eibopomofo=12575;e.eight=56;e.eightarabic=1640;e.eightbengali=2542;e.eightcircle=9319;e.eightcircleinversesansserif=10129;e.eightdeva=2414;e.eighteencircle=9329;e.eighteenparen=9349;e.eighteenperiod=9369;e.eightgujarati=2798;e.eightgurmukhi=2670;e.eighthackarabic=1640;e.eighthangzhou=12328;e.eighthnotebeamed=9835;e.eightideographicparen=12839;e.eightinferior=8328;e.eightmonospace=65304;e.eightoldstyle=63288;e.eightparen=9339;e.eightperiod=9359;e.eightpersian=1784;e.eightroman=8567;e.eightsuperior=8312;e.eightthai=3672;e.einvertedbreve=519;e.eiotifiedcyrillic=1125;e.ekatakana=12456;e.ekatakanahalfwidth=65396;e.ekonkargurmukhi=2676;e.ekorean=12628;e.elcyrillic=1083;e.element=8712;e.elevencircle=9322;e.elevenparen=9342;e.elevenperiod=9362;e.elevenroman=8570;e.ellipsis=8230;e.ellipsisvertical=8942;e.emacron=275;e.emacronacute=7703;e.emacrongrave=7701;e.emcyrillic=1084;e.emdash=8212;e.emdashvertical=65073;e.emonospace=65349;e.emphasismarkarmenian=1371;e.emptyset=8709;e.enbopomofo=12579;e.encyrillic=1085;e.endash=8211;e.endashvertical=65074;e.endescendercyrillic=1187;e.eng=331;e.engbopomofo=12581;e.enghecyrillic=1189;e.enhookcyrillic=1224;e.enspace=8194;e.eogonek=281;e.eokorean=12627;e.eopen=603;e.eopenclosed=666;e.eopenreversed=604;e.eopenreversedclosed=606;e.eopenreversedhook=605;e.eparen=9376;e.epsilon=949;e.epsilontonos=941;e.equal=61;e.equalmonospace=65309;e.equalsmall=65126;e.equalsuperior=8316;e.equivalence=8801;e.erbopomofo=12582;e.ercyrillic=1088;e.ereversed=600;e.ereversedcyrillic=1101;e.escyrillic=1089;e.esdescendercyrillic=1195;e.esh=643;e.eshcurl=646;e.eshortdeva=2318;e.eshortvowelsigndeva=2374;e.eshreversedloop=426;e.eshsquatreversed=645;e.esmallhiragana=12359;e.esmallkatakana=12455;e.esmallkatakanahalfwidth=65386;e.estimated=8494;e.esuperior=63212;e.eta=951;e.etarmenian=1384;e.etatonos=942;e.eth=240;e.etilde=7869;e.etildebelow=7707;e.etnahtafoukhhebrew=1425;e.etnahtafoukhlefthebrew=1425;e.etnahtahebrew=1425;e.etnahtalefthebrew=1425;e.eturned=477;e.eukorean=12641;e.euro=8364;e.evowelsignbengali=2503;e.evowelsigndeva=2375;e.evowelsigngujarati=2759;e.exclam=33;e.exclamarmenian=1372;e.exclamdbl=8252;e.exclamdown=161;e.exclamdownsmall=63393;e.exclammonospace=65281;e.exclamsmall=63265;e.existential=8707;e.ezh=658;e.ezhcaron=495;e.ezhcurl=659;e.ezhreversed=441;e.ezhtail=442;e.f=102;e.fadeva=2398;e.fagurmukhi=2654;e.fahrenheit=8457;e.fathaarabic=1614;e.fathalowarabic=1614;e.fathatanarabic=1611;e.fbopomofo=12552;e.fcircle=9429;e.fdotaccent=7711;e.feharabic=1601;e.feharmenian=1414;e.fehfinalarabic=65234;e.fehinitialarabic=65235;e.fehmedialarabic=65236;e.feicoptic=997;e.female=9792;e.ff=64256;e.f_f=64256;e.ffi=64259;e.f_f_i=64259;e.ffl=64260;e.f_f_l=64260;e.fi=64257;e.f_i=64257;e.fifteencircle=9326;e.fifteenparen=9346;e.fifteenperiod=9366;e.figuredash=8210;e.filledbox=9632;e.filledrect=9644;e.finalkaf=1498;e.finalkafdagesh=64314;e.finalkafdageshhebrew=64314;e.finalkafhebrew=1498;e.finalmem=1501;e.finalmemhebrew=1501;e.finalnun=1503;e.finalnunhebrew=1503;e.finalpe=1507;e.finalpehebrew=1507;e.finaltsadi=1509;e.finaltsadihebrew=1509;e.firsttonechinese=713;e.fisheye=9673;e.fitacyrillic=1139;e.five=53;e.fivearabic=1637;e.fivebengali=2539;e.fivecircle=9316;e.fivecircleinversesansserif=10126;e.fivedeva=2411;e.fiveeighths=8541;e.fivegujarati=2795;e.fivegurmukhi=2667;e.fivehackarabic=1637;e.fivehangzhou=12325;e.fiveideographicparen=12836;e.fiveinferior=8325;e.fivemonospace=65301;e.fiveoldstyle=63285;e.fiveparen=9336;e.fiveperiod=9356;e.fivepersian=1781;e.fiveroman=8564;e.fivesuperior=8309;e.fivethai=3669;e.fl=64258;e.f_l=64258;e.florin=402;e.fmonospace=65350;e.fmsquare=13209;e.fofanthai=3615;e.fofathai=3613;e.fongmanthai=3663;e.forall=8704;e.four=52;e.fourarabic=1636;e.fourbengali=2538;e.fourcircle=9315;e.fourcircleinversesansserif=10125;e.fourdeva=2410;e.fourgujarati=2794;e.fourgurmukhi=2666;e.fourhackarabic=1636;e.fourhangzhou=12324;e.fourideographicparen=12835;e.fourinferior=8324;e.fourmonospace=65300;e.fournumeratorbengali=2551;e.fouroldstyle=63284;e.fourparen=9335;e.fourperiod=9355;e.fourpersian=1780;e.fourroman=8563;e.foursuperior=8308;e.fourteencircle=9325;e.fourteenparen=9345;e.fourteenperiod=9365;e.fourthai=3668;e.fourthtonechinese=715;e.fparen=9377;e.fraction=8260;e.franc=8355;e.g=103;e.gabengali=2455;e.gacute=501;e.gadeva=2327;e.gafarabic=1711;e.gaffinalarabic=64403;e.gafinitialarabic=64404;e.gafmedialarabic=64405;e.gagujarati=2711;e.gagurmukhi=2583;e.gahiragana=12364;e.gakatakana=12460;e.gamma=947;e.gammalatinsmall=611;e.gammasuperior=736;e.gangiacoptic=1003;e.gbopomofo=12557;e.gbreve=287;e.gcaron=487;e.gcedilla=291;e.gcircle=9430;e.gcircumflex=285;e.gcommaaccent=291;e.gdot=289;e.gdotaccent=289;e.gecyrillic=1075;e.gehiragana=12370;e.gekatakana=12466;e.geometricallyequal=8785;e.gereshaccenthebrew=1436;e.gereshhebrew=1523;e.gereshmuqdamhebrew=1437;e.germandbls=223;e.gershayimaccenthebrew=1438;e.gershayimhebrew=1524;e.getamark=12307;e.ghabengali=2456;e.ghadarmenian=1394;e.ghadeva=2328;e.ghagujarati=2712;e.ghagurmukhi=2584;e.ghainarabic=1594;e.ghainfinalarabic=65230;e.ghaininitialarabic=65231;e.ghainmedialarabic=65232;e.ghemiddlehookcyrillic=1173;e.ghestrokecyrillic=1171;e.gheupturncyrillic=1169;e.ghhadeva=2394;e.ghhagurmukhi=2650;e.ghook=608;e.ghzsquare=13203;e.gihiragana=12366;e.gikatakana=12462;e.gimarmenian=1379;e.gimel=1490;e.gimeldagesh=64306;e.gimeldageshhebrew=64306;e.gimelhebrew=1490;e.gjecyrillic=1107;e.glottalinvertedstroke=446;e.glottalstop=660;e.glottalstopinverted=662;e.glottalstopmod=704;e.glottalstopreversed=661;e.glottalstopreversedmod=705;e.glottalstopreversedsuperior=740;e.glottalstopstroke=673;e.glottalstopstrokereversed=674;e.gmacron=7713;e.gmonospace=65351;e.gohiragana=12372;e.gokatakana=12468;e.gparen=9378;e.gpasquare=13228;e.gradient=8711;e.grave=96;e.gravebelowcmb=790;e.gravecmb=768;e.gravecomb=768;e.gravedeva=2387;e.gravelowmod=718;e.gravemonospace=65344;e.gravetonecmb=832;e.greater=62;e.greaterequal=8805;e.greaterequalorless=8923;e.greatermonospace=65310;e.greaterorequivalent=8819;e.greaterorless=8823;e.greateroverequal=8807;e.greatersmall=65125;e.gscript=609;e.gstroke=485;e.guhiragana=12368;e.guillemotleft=171;e.guillemotright=187;e.guilsinglleft=8249;e.guilsinglright=8250;e.gukatakana=12464;e.guramusquare=13080;e.gysquare=13257;e.h=104;e.haabkhasiancyrillic=1193;e.haaltonearabic=1729;e.habengali=2489;e.hadescendercyrillic=1203;e.hadeva=2361;e.hagujarati=2745;e.hagurmukhi=2617;e.haharabic=1581;e.hahfinalarabic=65186;e.hahinitialarabic=65187;e.hahiragana=12399;e.hahmedialarabic=65188;e.haitusquare=13098;e.hakatakana=12495;e.hakatakanahalfwidth=65418;e.halantgurmukhi=2637;e.hamzaarabic=1569;e.hamzalowarabic=1569;e.hangulfiller=12644;e.hardsigncyrillic=1098;e.harpoonleftbarbup=8636;e.harpoonrightbarbup=8640;e.hasquare=13258;e.hatafpatah=1458;e.hatafpatah16=1458;e.hatafpatah23=1458;e.hatafpatah2f=1458;e.hatafpatahhebrew=1458;e.hatafpatahnarrowhebrew=1458;e.hatafpatahquarterhebrew=1458;e.hatafpatahwidehebrew=1458;e.hatafqamats=1459;e.hatafqamats1b=1459;e.hatafqamats28=1459;e.hatafqamats34=1459;e.hatafqamatshebrew=1459;e.hatafqamatsnarrowhebrew=1459;e.hatafqamatsquarterhebrew=1459;e.hatafqamatswidehebrew=1459;e.hatafsegol=1457;e.hatafsegol17=1457;e.hatafsegol24=1457;e.hatafsegol30=1457;e.hatafsegolhebrew=1457;e.hatafsegolnarrowhebrew=1457;e.hatafsegolquarterhebrew=1457;e.hatafsegolwidehebrew=1457;e.hbar=295;e.hbopomofo=12559;e.hbrevebelow=7723;e.hcedilla=7721;e.hcircle=9431;e.hcircumflex=293;e.hdieresis=7719;e.hdotaccent=7715;e.hdotbelow=7717;e.he=1492;e.heart=9829;e.heartsuitblack=9829;e.heartsuitwhite=9825;e.hedagesh=64308;e.hedageshhebrew=64308;e.hehaltonearabic=1729;e.heharabic=1607;e.hehebrew=1492;e.hehfinalaltonearabic=64423;e.hehfinalalttwoarabic=65258;e.hehfinalarabic=65258;e.hehhamzaabovefinalarabic=64421;e.hehhamzaaboveisolatedarabic=64420;e.hehinitialaltonearabic=64424;e.hehinitialarabic=65259;e.hehiragana=12408;e.hehmedialaltonearabic=64425;e.hehmedialarabic=65260;e.heiseierasquare=13179;e.hekatakana=12504;e.hekatakanahalfwidth=65421;e.hekutaarusquare=13110;e.henghook=615;e.herutusquare=13113;e.het=1495;e.hethebrew=1495;e.hhook=614;e.hhooksuperior=689;e.hieuhacirclekorean=12923;e.hieuhaparenkorean=12827;e.hieuhcirclekorean=12909;e.hieuhkorean=12622;e.hieuhparenkorean=12813;e.hihiragana=12402;e.hikatakana=12498;e.hikatakanahalfwidth=65419;e.hiriq=1460;e.hiriq14=1460;e.hiriq21=1460;e.hiriq2d=1460;e.hiriqhebrew=1460;e.hiriqnarrowhebrew=1460;e.hiriqquarterhebrew=1460;e.hiriqwidehebrew=1460;e.hlinebelow=7830;e.hmonospace=65352;e.hoarmenian=1392;e.hohipthai=3627;e.hohiragana=12411;e.hokatakana=12507;e.hokatakanahalfwidth=65422;e.holam=1465;e.holam19=1465;e.holam26=1465;e.holam32=1465;e.holamhebrew=1465;e.holamnarrowhebrew=1465;e.holamquarterhebrew=1465;e.holamwidehebrew=1465;e.honokhukthai=3630;e.hookabovecomb=777;e.hookcmb=777;e.hookpalatalizedbelowcmb=801;e.hookretroflexbelowcmb=802;e.hoonsquare=13122;e.horicoptic=1001;e.horizontalbar=8213;e.horncmb=795;e.hotsprings=9832;e.house=8962;e.hparen=9379;e.hsuperior=688;e.hturned=613;e.huhiragana=12405;e.huiitosquare=13107;e.hukatakana=12501;e.hukatakanahalfwidth=65420;e.hungarumlaut=733;e.hungarumlautcmb=779;e.hv=405;e.hyphen=45;e.hypheninferior=63205;e.hyphenmonospace=65293;e.hyphensmall=65123;e.hyphensuperior=63206;e.hyphentwo=8208;e.i=105;e.iacute=237;e.iacyrillic=1103;e.ibengali=2439;e.ibopomofo=12583;e.ibreve=301;e.icaron=464;e.icircle=9432;e.icircumflex=238;e.icyrillic=1110;e.idblgrave=521;e.ideographearthcircle=12943;e.ideographfirecircle=12939;e.ideographicallianceparen=12863;e.ideographiccallparen=12858;e.ideographiccentrecircle=12965;e.ideographicclose=12294;e.ideographiccomma=12289;e.ideographiccommaleft=65380;e.ideographiccongratulationparen=12855;e.ideographiccorrectcircle=12963;e.ideographicearthparen=12847;e.ideographicenterpriseparen=12861;e.ideographicexcellentcircle=12957;e.ideographicfestivalparen=12864;e.ideographicfinancialcircle=12950;e.ideographicfinancialparen=12854;e.ideographicfireparen=12843;e.ideographichaveparen=12850;e.ideographichighcircle=12964;e.ideographiciterationmark=12293;e.ideographiclaborcircle=12952;e.ideographiclaborparen=12856;e.ideographicleftcircle=12967;e.ideographiclowcircle=12966;e.ideographicmedicinecircle=12969;e.ideographicmetalparen=12846;e.ideographicmoonparen=12842;e.ideographicnameparen=12852;e.ideographicperiod=12290;e.ideographicprintcircle=12958;e.ideographicreachparen=12867;e.ideographicrepresentparen=12857;e.ideographicresourceparen=12862;e.ideographicrightcircle=12968;e.ideographicsecretcircle=12953;e.ideographicselfparen=12866;e.ideographicsocietyparen=12851;e.ideographicspace=12288;e.ideographicspecialparen=12853;e.ideographicstockparen=12849;e.ideographicstudyparen=12859;e.ideographicsunparen=12848;e.ideographicsuperviseparen=12860;e.ideographicwaterparen=12844;e.ideographicwoodparen=12845;e.ideographiczero=12295;e.ideographmetalcircle=12942;e.ideographmooncircle=12938;e.ideographnamecircle=12948;e.ideographsuncircle=12944;e.ideographwatercircle=12940;e.ideographwoodcircle=12941;e.ideva=2311;e.idieresis=239;e.idieresisacute=7727;e.idieresiscyrillic=1253;e.idotbelow=7883;e.iebrevecyrillic=1239;e.iecyrillic=1077;e.ieungacirclekorean=12917;e.ieungaparenkorean=12821;e.ieungcirclekorean=12903;e.ieungkorean=12615;e.ieungparenkorean=12807;e.igrave=236;e.igujarati=2695;e.igurmukhi=2567;e.ihiragana=12356;e.ihookabove=7881;e.iibengali=2440;e.iicyrillic=1080;e.iideva=2312;e.iigujarati=2696;e.iigurmukhi=2568;e.iimatragurmukhi=2624;e.iinvertedbreve=523;e.iishortcyrillic=1081;e.iivowelsignbengali=2496;e.iivowelsigndeva=2368;e.iivowelsigngujarati=2752;e.ij=307;e.ikatakana=12452;e.ikatakanahalfwidth=65394;e.ikorean=12643;e.ilde=732;e.iluyhebrew=1452;e.imacron=299;e.imacroncyrillic=1251;e.imageorapproximatelyequal=8787;e.imatragurmukhi=2623;e.imonospace=65353;e.increment=8710;e.infinity=8734;e.iniarmenian=1387;e.integral=8747;e.integralbottom=8993;e.integralbt=8993;e.integralex=63733;e.integraltop=8992;e.integraltp=8992;e.intersection=8745;e.intisquare=13061;e.invbullet=9688;e.invcircle=9689;e.invsmileface=9787;e.iocyrillic=1105;e.iogonek=303;e.iota=953;e.iotadieresis=970;e.iotadieresistonos=912;e.iotalatin=617;e.iotatonos=943;e.iparen=9380;e.irigurmukhi=2674;e.ismallhiragana=12355;e.ismallkatakana=12451;e.ismallkatakanahalfwidth=65384;e.issharbengali=2554;e.istroke=616;e.isuperior=63213;e.iterationhiragana=12445;e.iterationkatakana=12541;e.itilde=297;e.itildebelow=7725;e.iubopomofo=12585;e.iucyrillic=1102;e.ivowelsignbengali=2495;e.ivowelsigndeva=2367;e.ivowelsigngujarati=2751;e.izhitsacyrillic=1141;e.izhitsadblgravecyrillic=1143;e.j=106;e.jaarmenian=1393;e.jabengali=2460;e.jadeva=2332;e.jagujarati=2716;e.jagurmukhi=2588;e.jbopomofo=12560;e.jcaron=496;e.jcircle=9433;e.jcircumflex=309;e.jcrossedtail=669;e.jdotlessstroke=607;e.jecyrillic=1112;e.jeemarabic=1580;e.jeemfinalarabic=65182;e.jeeminitialarabic=65183;e.jeemmedialarabic=65184;e.jeharabic=1688;e.jehfinalarabic=64395;e.jhabengali=2461;e.jhadeva=2333;e.jhagujarati=2717;e.jhagurmukhi=2589;e.jheharmenian=1403;e.jis=12292;e.jmonospace=65354;e.jparen=9381;e.jsuperior=690;e.k=107;e.kabashkircyrillic=1185;e.kabengali=2453;e.kacute=7729;e.kacyrillic=1082;e.kadescendercyrillic=1179;e.kadeva=2325;e.kaf=1499;e.kafarabic=1603;e.kafdagesh=64315;e.kafdageshhebrew=64315;e.kaffinalarabic=65242;e.kafhebrew=1499;e.kafinitialarabic=65243;e.kafmedialarabic=65244;e.kafrafehebrew=64333;e.kagujarati=2709;e.kagurmukhi=2581;e.kahiragana=12363;e.kahookcyrillic=1220;e.kakatakana=12459;e.kakatakanahalfwidth=65398;e.kappa=954;e.kappasymbolgreek=1008;e.kapyeounmieumkorean=12657;e.kapyeounphieuphkorean=12676;e.kapyeounpieupkorean=12664;e.kapyeounssangpieupkorean=12665;e.karoriisquare=13069;e.kashidaautoarabic=1600;e.kashidaautonosidebearingarabic=1600;e.kasmallkatakana=12533;e.kasquare=13188;e.kasraarabic=1616;e.kasratanarabic=1613;e.kastrokecyrillic=1183;e.katahiraprolongmarkhalfwidth=65392;e.kaverticalstrokecyrillic=1181;e.kbopomofo=12558;e.kcalsquare=13193;e.kcaron=489;e.kcedilla=311;e.kcircle=9434;e.kcommaaccent=311;e.kdotbelow=7731;e.keharmenian=1412;e.kehiragana=12369;e.kekatakana=12465;e.kekatakanahalfwidth=65401;e.kenarmenian=1391;e.kesmallkatakana=12534;e.kgreenlandic=312;e.khabengali=2454;e.khacyrillic=1093;e.khadeva=2326;e.khagujarati=2710;e.khagurmukhi=2582;e.khaharabic=1582;e.khahfinalarabic=65190;e.khahinitialarabic=65191;e.khahmedialarabic=65192;e.kheicoptic=999;e.khhadeva=2393;e.khhagurmukhi=2649;e.khieukhacirclekorean=12920;e.khieukhaparenkorean=12824;e.khieukhcirclekorean=12906;e.khieukhkorean=12619;e.khieukhparenkorean=12810;e.khokhaithai=3586;e.khokhonthai=3589;e.khokhuatthai=3587;e.khokhwaithai=3588;e.khomutthai=3675;e.khook=409;e.khorakhangthai=3590;e.khzsquare=13201;e.kihiragana=12365;e.kikatakana=12461;e.kikatakanahalfwidth=65399;e.kiroguramusquare=13077;e.kiromeetorusquare=13078;e.kirosquare=13076;e.kiyeokacirclekorean=12910;e.kiyeokaparenkorean=12814;e.kiyeokcirclekorean=12896;e.kiyeokkorean=12593;e.kiyeokparenkorean=12800;e.kiyeoksioskorean=12595;e.kjecyrillic=1116;e.klinebelow=7733;e.klsquare=13208;e.kmcubedsquare=13222;e.kmonospace=65355;e.kmsquaredsquare=13218;e.kohiragana=12371;e.kohmsquare=13248;e.kokaithai=3585;e.kokatakana=12467;e.kokatakanahalfwidth=65402;e.kooposquare=13086;e.koppacyrillic=1153;e.koreanstandardsymbol=12927;e.koroniscmb=835;e.kparen=9382;e.kpasquare=13226;e.ksicyrillic=1135;e.ktsquare=13263;e.kturned=670;e.kuhiragana=12367;e.kukatakana=12463;e.kukatakanahalfwidth=65400;e.kvsquare=13240;e.kwsquare=13246;e.l=108;e.labengali=2482;e.lacute=314;e.ladeva=2354;e.lagujarati=2738;e.lagurmukhi=2610;e.lakkhangyaothai=3653;e.lamaleffinalarabic=65276;e.lamalefhamzaabovefinalarabic=65272;e.lamalefhamzaaboveisolatedarabic=65271;e.lamalefhamzabelowfinalarabic=65274;e.lamalefhamzabelowisolatedarabic=65273;e.lamalefisolatedarabic=65275;e.lamalefmaddaabovefinalarabic=65270;e.lamalefmaddaaboveisolatedarabic=65269;e.lamarabic=1604;e.lambda=955;e.lambdastroke=411;e.lamed=1500;e.lameddagesh=64316;e.lameddageshhebrew=64316;e.lamedhebrew=1500;e.lamfinalarabic=65246;e.lamhahinitialarabic=64714;e.laminitialarabic=65247;e.lamjeeminitialarabic=64713;e.lamkhahinitialarabic=64715;e.lamlamhehisolatedarabic=65010;e.lammedialarabic=65248;e.lammeemhahinitialarabic=64904;e.lammeeminitialarabic=64716;e.largecircle=9711;e.lbar=410;e.lbelt=620;e.lbopomofo=12556;e.lcaron=318;e.lcedilla=316;e.lcircle=9435;e.lcircumflexbelow=7741;e.lcommaaccent=316;e.ldot=320;e.ldotaccent=320;e.ldotbelow=7735;e.ldotbelowmacron=7737;e.leftangleabovecmb=794;e.lefttackbelowcmb=792;e.less=60;e.lessequal=8804;e.lessequalorgreater=8922;e.lessmonospace=65308;e.lessorequivalent=8818;e.lessorgreater=8822;e.lessoverequal=8806;e.lesssmall=65124;e.lezh=622;e.lfblock=9612;e.lhookretroflex=621;e.lira=8356;e.liwnarmenian=1388;e.lj=457;e.ljecyrillic=1113;e.ll=63168;e.lladeva=2355;e.llagujarati=2739;e.llinebelow=7739;e.llladeva=2356;e.llvocalicbengali=2529;e.llvocalicdeva=2401;e.llvocalicvowelsignbengali=2531;e.llvocalicvowelsigndeva=2403;e.lmiddletilde=619;e.lmonospace=65356;e.lmsquare=13264;e.lochulathai=3628;e.logicaland=8743;e.logicalnot=172;e.logicalnotreversed=8976;e.logicalor=8744;e.lolingthai=3621;e.longs=383;e.lowlinecenterline=65102;e.lowlinecmb=818;e.lowlinedashed=65101;e.lozenge=9674;e.lparen=9383;e.lslash=322;e.lsquare=8467;e.lsuperior=63214;e.ltshade=9617;e.luthai=3622;e.lvocalicbengali=2444;e.lvocalicdeva=2316;e.lvocalicvowelsignbengali=2530;e.lvocalicvowelsigndeva=2402;e.lxsquare=13267;e.m=109;e.mabengali=2478;e.macron=175;e.macronbelowcmb=817;e.macroncmb=772;e.macronlowmod=717;e.macronmonospace=65507;e.macute=7743;e.madeva=2350;e.magujarati=2734;e.magurmukhi=2606;e.mahapakhhebrew=1444;e.mahapakhlefthebrew=1444;e.mahiragana=12414;e.maichattawalowleftthai=63637;e.maichattawalowrightthai=63636;e.maichattawathai=3659;e.maichattawaupperleftthai=63635;e.maieklowleftthai=63628;e.maieklowrightthai=63627;e.maiekthai=3656;e.maiekupperleftthai=63626;e.maihanakatleftthai=63620;e.maihanakatthai=3633;e.maitaikhuleftthai=63625;e.maitaikhuthai=3655;e.maitholowleftthai=63631;e.maitholowrightthai=63630;e.maithothai=3657;e.maithoupperleftthai=63629;e.maitrilowleftthai=63634;e.maitrilowrightthai=63633;e.maitrithai=3658;e.maitriupperleftthai=63632;e.maiyamokthai=3654;e.makatakana=12510;e.makatakanahalfwidth=65423;e.male=9794;e.mansyonsquare=13127;e.maqafhebrew=1470;e.mars=9794;e.masoracirclehebrew=1455;e.masquare=13187;e.mbopomofo=12551;e.mbsquare=13268;e.mcircle=9436;e.mcubedsquare=13221;e.mdotaccent=7745;e.mdotbelow=7747;e.meemarabic=1605;e.meemfinalarabic=65250;e.meeminitialarabic=65251;e.meemmedialarabic=65252;e.meemmeeminitialarabic=64721;e.meemmeemisolatedarabic=64584;e.meetorusquare=13133;e.mehiragana=12417;e.meizierasquare=13182;e.mekatakana=12513;e.mekatakanahalfwidth=65426;e.mem=1502;e.memdagesh=64318;e.memdageshhebrew=64318;e.memhebrew=1502;e.menarmenian=1396;e.merkhahebrew=1445;e.merkhakefulahebrew=1446;e.merkhakefulalefthebrew=1446;e.merkhalefthebrew=1445;e.mhook=625;e.mhzsquare=13202;e.middledotkatakanahalfwidth=65381;e.middot=183;e.mieumacirclekorean=12914;e.mieumaparenkorean=12818;e.mieumcirclekorean=12900;e.mieumkorean=12609;e.mieumpansioskorean=12656;e.mieumparenkorean=12804;e.mieumpieupkorean=12654;e.mieumsioskorean=12655;e.mihiragana=12415;e.mikatakana=12511;e.mikatakanahalfwidth=65424;e.minus=8722;e.minusbelowcmb=800;e.minuscircle=8854;e.minusmod=727;e.minusplus=8723;e.minute=8242;e.miribaarusquare=13130;e.mirisquare=13129;e.mlonglegturned=624;e.mlsquare=13206;e.mmcubedsquare=13219;e.mmonospace=65357;e.mmsquaredsquare=13215;e.mohiragana=12418;e.mohmsquare=13249;e.mokatakana=12514;e.mokatakanahalfwidth=65427;e.molsquare=13270;e.momathai=3617;e.moverssquare=13223;e.moverssquaredsquare=13224;e.mparen=9384;e.mpasquare=13227;e.mssquare=13235;e.msuperior=63215;e.mturned=623;e.mu=181;e.mu1=181;e.muasquare=13186;e.muchgreater=8811;e.muchless=8810;e.mufsquare=13196;e.mugreek=956;e.mugsquare=13197;e.muhiragana=12416;e.mukatakana=12512;e.mukatakanahalfwidth=65425;e.mulsquare=13205;e.multiply=215;e.mumsquare=13211;e.munahhebrew=1443;e.munahlefthebrew=1443;e.musicalnote=9834;e.musicalnotedbl=9835;e.musicflatsign=9837;e.musicsharpsign=9839;e.mussquare=13234;e.muvsquare=13238;e.muwsquare=13244;e.mvmegasquare=13241;e.mvsquare=13239;e.mwmegasquare=13247;e.mwsquare=13245;e.n=110;e.nabengali=2472;e.nabla=8711;e.nacute=324;e.nadeva=2344;e.nagujarati=2728;e.nagurmukhi=2600;e.nahiragana=12394;e.nakatakana=12490;e.nakatakanahalfwidth=65413;e.napostrophe=329;e.nasquare=13185;e.nbopomofo=12555;e.nbspace=160;e.ncaron=328;e.ncedilla=326;e.ncircle=9437;e.ncircumflexbelow=7755;e.ncommaaccent=326;e.ndotaccent=7749;e.ndotbelow=7751;e.nehiragana=12397;e.nekatakana=12493;e.nekatakanahalfwidth=65416;e.newsheqelsign=8362;e.nfsquare=13195;e.ngabengali=2457;e.ngadeva=2329;e.ngagujarati=2713;e.ngagurmukhi=2585;e.ngonguthai=3591;e.nhiragana=12435;e.nhookleft=626;e.nhookretroflex=627;e.nieunacirclekorean=12911;e.nieunaparenkorean=12815;e.nieuncieuckorean=12597;e.nieuncirclekorean=12897;e.nieunhieuhkorean=12598;e.nieunkorean=12596;e.nieunpansioskorean=12648;e.nieunparenkorean=12801;e.nieunsioskorean=12647;e.nieuntikeutkorean=12646;e.nihiragana=12395;e.nikatakana=12491;e.nikatakanahalfwidth=65414;e.nikhahitleftthai=63641;e.nikhahitthai=3661;e.nine=57;e.ninearabic=1641;e.ninebengali=2543;e.ninecircle=9320;e.ninecircleinversesansserif=10130;e.ninedeva=2415;e.ninegujarati=2799;e.ninegurmukhi=2671;e.ninehackarabic=1641;e.ninehangzhou=12329;e.nineideographicparen=12840;e.nineinferior=8329;e.ninemonospace=65305;e.nineoldstyle=63289;e.nineparen=9340;e.nineperiod=9360;e.ninepersian=1785;e.nineroman=8568;e.ninesuperior=8313;e.nineteencircle=9330;e.nineteenparen=9350;e.nineteenperiod=9370;e.ninethai=3673;e.nj=460;e.njecyrillic=1114;e.nkatakana=12531;e.nkatakanahalfwidth=65437;e.nlegrightlong=414;e.nlinebelow=7753;e.nmonospace=65358;e.nmsquare=13210;e.nnabengali=2467;e.nnadeva=2339;e.nnagujarati=2723;e.nnagurmukhi=2595;e.nnnadeva=2345;e.nohiragana=12398;e.nokatakana=12494;e.nokatakanahalfwidth=65417;e.nonbreakingspace=160;e.nonenthai=3603;e.nonuthai=3609;e.noonarabic=1606;e.noonfinalarabic=65254;e.noonghunnaarabic=1722;e.noonghunnafinalarabic=64415;e.nooninitialarabic=65255;e.noonjeeminitialarabic=64722;e.noonjeemisolatedarabic=64587;e.noonmedialarabic=65256;e.noonmeeminitialarabic=64725;e.noonmeemisolatedarabic=64590;e.noonnoonfinalarabic=64653;e.notcontains=8716;e.notelement=8713;e.notelementof=8713;e.notequal=8800;e.notgreater=8815;e.notgreaternorequal=8817;e.notgreaternorless=8825;e.notidentical=8802;e.notless=8814;e.notlessnorequal=8816;e.notparallel=8742;e.notprecedes=8832;e.notsubset=8836;e.notsucceeds=8833;e.notsuperset=8837;e.nowarmenian=1398;e.nparen=9385;e.nssquare=13233;e.nsuperior=8319;e.ntilde=241;e.nu=957;e.nuhiragana=12396;e.nukatakana=12492;e.nukatakanahalfwidth=65415;e.nuktabengali=2492;e.nuktadeva=2364;e.nuktagujarati=2748;e.nuktagurmukhi=2620;e.numbersign=35;e.numbersignmonospace=65283;e.numbersignsmall=65119;e.numeralsigngreek=884;e.numeralsignlowergreek=885;e.numero=8470;e.nun=1504;e.nundagesh=64320;e.nundageshhebrew=64320;e.nunhebrew=1504;e.nvsquare=13237;e.nwsquare=13243;e.nyabengali=2462;e.nyadeva=2334;e.nyagujarati=2718;e.nyagurmukhi=2590;e.o=111;e.oacute=243;e.oangthai=3629;e.obarred=629;e.obarredcyrillic=1257;e.obarreddieresiscyrillic=1259;e.obengali=2451;e.obopomofo=12571;e.obreve=335;e.ocandradeva=2321;e.ocandragujarati=2705;e.ocandravowelsigndeva=2377;e.ocandravowelsigngujarati=2761;e.ocaron=466;e.ocircle=9438;e.ocircumflex=244;e.ocircumflexacute=7889;e.ocircumflexdotbelow=7897;e.ocircumflexgrave=7891;e.ocircumflexhookabove=7893;e.ocircumflextilde=7895;e.ocyrillic=1086;e.odblacute=337;e.odblgrave=525;e.odeva=2323;e.odieresis=246;e.odieresiscyrillic=1255;e.odotbelow=7885;e.oe=339;e.oekorean=12634;e.ogonek=731;e.ogonekcmb=808;e.ograve=242;e.ogujarati=2707;e.oharmenian=1413;e.ohiragana=12362;e.ohookabove=7887;e.ohorn=417;e.ohornacute=7899;e.ohorndotbelow=7907;e.ohorngrave=7901;e.ohornhookabove=7903;e.ohorntilde=7905;e.ohungarumlaut=337;e.oi=419;e.oinvertedbreve=527;e.okatakana=12458;e.okatakanahalfwidth=65397;e.okorean=12631;e.olehebrew=1451;e.omacron=333;e.omacronacute=7763;e.omacrongrave=7761;e.omdeva=2384;e.omega=969;e.omega1=982;e.omegacyrillic=1121;e.omegalatinclosed=631;e.omegaroundcyrillic=1147;e.omegatitlocyrillic=1149;e.omegatonos=974;e.omgujarati=2768;e.omicron=959;e.omicrontonos=972;e.omonospace=65359;e.one=49;e.onearabic=1633;e.onebengali=2535;e.onecircle=9312;e.onecircleinversesansserif=10122;e.onedeva=2407;e.onedotenleader=8228;e.oneeighth=8539;e.onefitted=63196;e.onegujarati=2791;e.onegurmukhi=2663;e.onehackarabic=1633;e.onehalf=189;e.onehangzhou=12321;e.oneideographicparen=12832;e.oneinferior=8321;e.onemonospace=65297;e.onenumeratorbengali=2548;e.oneoldstyle=63281;e.oneparen=9332;e.oneperiod=9352;e.onepersian=1777;e.onequarter=188;e.oneroman=8560;e.onesuperior=185;e.onethai=3665;e.onethird=8531;e.oogonek=491;e.oogonekmacron=493;e.oogurmukhi=2579;e.oomatragurmukhi=2635;e.oopen=596;e.oparen=9386;e.openbullet=9702;e.option=8997;e.ordfeminine=170;e.ordmasculine=186;e.orthogonal=8735;e.oshortdeva=2322;e.oshortvowelsigndeva=2378;e.oslash=248;e.oslashacute=511;e.osmallhiragana=12361;e.osmallkatakana=12457;e.osmallkatakanahalfwidth=65387;e.ostrokeacute=511;e.osuperior=63216;e.otcyrillic=1151;e.otilde=245;e.otildeacute=7757;e.otildedieresis=7759;e.oubopomofo=12577;e.overline=8254;e.overlinecenterline=65098;e.overlinecmb=773;e.overlinedashed=65097;e.overlinedblwavy=65100;e.overlinewavy=65099;e.overscore=175;e.ovowelsignbengali=2507;e.ovowelsigndeva=2379;e.ovowelsigngujarati=2763;e.p=112;e.paampssquare=13184;e.paasentosquare=13099;e.pabengali=2474;e.pacute=7765;e.padeva=2346;e.pagedown=8671;e.pageup=8670;e.pagujarati=2730;e.pagurmukhi=2602;e.pahiragana=12401;e.paiyannoithai=3631;e.pakatakana=12497;e.palatalizationcyrilliccmb=1156;e.palochkacyrillic=1216;e.pansioskorean=12671;e.paragraph=182;e.parallel=8741;e.parenleft=40;e.parenleftaltonearabic=64830;e.parenleftbt=63725;e.parenleftex=63724;e.parenleftinferior=8333;e.parenleftmonospace=65288;e.parenleftsmall=65113;e.parenleftsuperior=8317;e.parenlefttp=63723;e.parenleftvertical=65077;e.parenright=41;e.parenrightaltonearabic=64831;e.parenrightbt=63736;e.parenrightex=63735;e.parenrightinferior=8334;e.parenrightmonospace=65289;e.parenrightsmall=65114;e.parenrightsuperior=8318;e.parenrighttp=63734;e.parenrightvertical=65078;e.partialdiff=8706;e.paseqhebrew=1472;e.pashtahebrew=1433;e.pasquare=13225;e.patah=1463;e.patah11=1463;e.patah1d=1463;e.patah2a=1463;e.patahhebrew=1463;e.patahnarrowhebrew=1463;e.patahquarterhebrew=1463;e.patahwidehebrew=1463;e.pazerhebrew=1441;e.pbopomofo=12550;e.pcircle=9439;e.pdotaccent=7767;e.pe=1508;e.pecyrillic=1087;e.pedagesh=64324;e.pedageshhebrew=64324;e.peezisquare=13115;e.pefinaldageshhebrew=64323;e.peharabic=1662;e.peharmenian=1402;e.pehebrew=1508;e.pehfinalarabic=64343;e.pehinitialarabic=64344;e.pehiragana=12410;e.pehmedialarabic=64345;e.pekatakana=12506;e.pemiddlehookcyrillic=1191;e.perafehebrew=64334;e.percent=37;e.percentarabic=1642;e.percentmonospace=65285;e.percentsmall=65130;e.period=46;e.periodarmenian=1417;e.periodcentered=183;e.periodhalfwidth=65377;e.periodinferior=63207;e.periodmonospace=65294;e.periodsmall=65106;e.periodsuperior=63208;e.perispomenigreekcmb=834;e.perpendicular=8869;e.perthousand=8240;e.peseta=8359;e.pfsquare=13194;e.phabengali=2475;e.phadeva=2347;e.phagujarati=2731;e.phagurmukhi=2603;e.phi=966;e.phi1=981;e.phieuphacirclekorean=12922;e.phieuphaparenkorean=12826;e.phieuphcirclekorean=12908;e.phieuphkorean=12621;e.phieuphparenkorean=12812;e.philatin=632;e.phinthuthai=3642;e.phisymbolgreek=981;e.phook=421;e.phophanthai=3614;e.phophungthai=3612;e.phosamphaothai=3616;e.pi=960;e.pieupacirclekorean=12915;e.pieupaparenkorean=12819;e.pieupcieuckorean=12662;e.pieupcirclekorean=12901;e.pieupkiyeokkorean=12658;e.pieupkorean=12610;e.pieupparenkorean=12805;e.pieupsioskiyeokkorean=12660;e.pieupsioskorean=12612;e.pieupsiostikeutkorean=12661;e.pieupthieuthkorean=12663;e.pieuptikeutkorean=12659;e.pihiragana=12404;e.pikatakana=12500;e.pisymbolgreek=982;e.piwrarmenian=1411;e.planckover2pi=8463;e.planckover2pi1=8463;e.plus=43;e.plusbelowcmb=799;e.pluscircle=8853;e.plusminus=177;e.plusmod=726;e.plusmonospace=65291;e.plussmall=65122;e.plussuperior=8314;e.pmonospace=65360;e.pmsquare=13272;e.pohiragana=12413;e.pointingindexdownwhite=9759;e.pointingindexleftwhite=9756;e.pointingindexrightwhite=9758;e.pointingindexupwhite=9757;e.pokatakana=12509;e.poplathai=3611;e.postalmark=12306;e.postalmarkface=12320;e.pparen=9387;e.precedes=8826;e.prescription=8478;e.primemod=697;e.primereversed=8245;e.product=8719;e.projective=8965;e.prolongedkana=12540;e.propellor=8984;e.propersubset=8834;e.propersuperset=8835;e.proportion=8759;e.proportional=8733;e.psi=968;e.psicyrillic=1137;e.psilipneumatacyrilliccmb=1158;e.pssquare=13232;e.puhiragana=12407;e.pukatakana=12503;e.pvsquare=13236;e.pwsquare=13242;e.q=113;e.qadeva=2392;e.qadmahebrew=1448;e.qafarabic=1602;e.qaffinalarabic=65238;e.qafinitialarabic=65239;e.qafmedialarabic=65240;e.qamats=1464;e.qamats10=1464;e.qamats1a=1464;e.qamats1c=1464;e.qamats27=1464;e.qamats29=1464;e.qamats33=1464;e.qamatsde=1464;e.qamatshebrew=1464;e.qamatsnarrowhebrew=1464;e.qamatsqatanhebrew=1464;e.qamatsqatannarrowhebrew=1464;e.qamatsqatanquarterhebrew=1464;e.qamatsqatanwidehebrew=1464;e.qamatsquarterhebrew=1464;e.qamatswidehebrew=1464;e.qarneyparahebrew=1439;e.qbopomofo=12561;e.qcircle=9440;e.qhook=672;e.qmonospace=65361;e.qof=1511;e.qofdagesh=64327;e.qofdageshhebrew=64327;e.qofhebrew=1511;e.qparen=9388;e.quarternote=9833;e.qubuts=1467;e.qubuts18=1467;e.qubuts25=1467;e.qubuts31=1467;e.qubutshebrew=1467;e.qubutsnarrowhebrew=1467;e.qubutsquarterhebrew=1467;e.qubutswidehebrew=1467;e.question=63;e.questionarabic=1567;e.questionarmenian=1374;e.questiondown=191;e.questiondownsmall=63423;e.questiongreek=894;e.questionmonospace=65311;e.questionsmall=63295;e.quotedbl=34;e.quotedblbase=8222;e.quotedblleft=8220;e.quotedblmonospace=65282;e.quotedblprime=12318;e.quotedblprimereversed=12317;e.quotedblright=8221;e.quoteleft=8216;e.quoteleftreversed=8219;e.quotereversed=8219;e.quoteright=8217;e.quoterightn=329;e.quotesinglbase=8218;e.quotesingle=39;e.quotesinglemonospace=65287;e.r=114;e.raarmenian=1404;e.rabengali=2480;e.racute=341;e.radeva=2352;e.radical=8730;e.radicalex=63717;e.radoverssquare=13230;e.radoverssquaredsquare=13231;e.radsquare=13229;e.rafe=1471;e.rafehebrew=1471;e.ragujarati=2736;e.ragurmukhi=2608;e.rahiragana=12425;e.rakatakana=12521;e.rakatakanahalfwidth=65431;e.ralowerdiagonalbengali=2545;e.ramiddlediagonalbengali=2544;e.ramshorn=612;e.ratio=8758;e.rbopomofo=12566;e.rcaron=345;e.rcedilla=343;e.rcircle=9441;e.rcommaaccent=343;e.rdblgrave=529;e.rdotaccent=7769;e.rdotbelow=7771;e.rdotbelowmacron=7773;e.referencemark=8251;e.reflexsubset=8838;e.reflexsuperset=8839;e.registered=174;e.registersans=63720;e.registerserif=63194;e.reharabic=1585;e.reharmenian=1408;e.rehfinalarabic=65198;e.rehiragana=12428;e.rekatakana=12524;e.rekatakanahalfwidth=65434;e.resh=1512;e.reshdageshhebrew=64328;e.reshhebrew=1512;e.reversedtilde=8765;e.reviahebrew=1431;e.reviamugrashhebrew=1431;e.revlogicalnot=8976;e.rfishhook=638;e.rfishhookreversed=639;e.rhabengali=2525;e.rhadeva=2397;e.rho=961;e.rhook=637;e.rhookturned=635;e.rhookturnedsuperior=693;e.rhosymbolgreek=1009;e.rhotichookmod=734;e.rieulacirclekorean=12913;e.rieulaparenkorean=12817;e.rieulcirclekorean=12899;e.rieulhieuhkorean=12608;e.rieulkiyeokkorean=12602;e.rieulkiyeoksioskorean=12649;e.rieulkorean=12601;e.rieulmieumkorean=12603;e.rieulpansioskorean=12652;e.rieulparenkorean=12803;e.rieulphieuphkorean=12607;e.rieulpieupkorean=12604;e.rieulpieupsioskorean=12651;e.rieulsioskorean=12605;e.rieulthieuthkorean=12606;e.rieultikeutkorean=12650;e.rieulyeorinhieuhkorean=12653;e.rightangle=8735;e.righttackbelowcmb=793;e.righttriangle=8895;e.rihiragana=12426;e.rikatakana=12522;e.rikatakanahalfwidth=65432;e.ring=730;e.ringbelowcmb=805;e.ringcmb=778;e.ringhalfleft=703;e.ringhalfleftarmenian=1369;e.ringhalfleftbelowcmb=796;e.ringhalfleftcentered=723;e.ringhalfright=702;e.ringhalfrightbelowcmb=825;e.ringhalfrightcentered=722;e.rinvertedbreve=531;e.rittorusquare=13137;e.rlinebelow=7775;e.rlongleg=636;e.rlonglegturned=634;e.rmonospace=65362;e.rohiragana=12429;e.rokatakana=12525;e.rokatakanahalfwidth=65435;e.roruathai=3619;e.rparen=9389;e.rrabengali=2524;e.rradeva=2353;e.rragurmukhi=2652;e.rreharabic=1681;e.rrehfinalarabic=64397;e.rrvocalicbengali=2528;e.rrvocalicdeva=2400;e.rrvocalicgujarati=2784;e.rrvocalicvowelsignbengali=2500;e.rrvocalicvowelsigndeva=2372;e.rrvocalicvowelsigngujarati=2756;e.rsuperior=63217;e.rtblock=9616;e.rturned=633;e.rturnedsuperior=692;e.ruhiragana=12427;e.rukatakana=12523;e.rukatakanahalfwidth=65433;e.rupeemarkbengali=2546;e.rupeesignbengali=2547;e.rupiah=63197;e.ruthai=3620;e.rvocalicbengali=2443;e.rvocalicdeva=2315;e.rvocalicgujarati=2699;e.rvocalicvowelsignbengali=2499;e.rvocalicvowelsigndeva=2371;e.rvocalicvowelsigngujarati=2755;e.s=115;e.sabengali=2488;e.sacute=347;e.sacutedotaccent=7781;e.sadarabic=1589;e.sadeva=2360;e.sadfinalarabic=65210;e.sadinitialarabic=65211;e.sadmedialarabic=65212;e.sagujarati=2744;e.sagurmukhi=2616;e.sahiragana=12373;e.sakatakana=12469;e.sakatakanahalfwidth=65403;e.sallallahoualayhewasallamarabic=65018;e.samekh=1505;e.samekhdagesh=64321;e.samekhdageshhebrew=64321;e.samekhhebrew=1505;e.saraaathai=3634;e.saraaethai=3649;e.saraaimaimalaithai=3652;e.saraaimaimuanthai=3651;e.saraamthai=3635;e.saraathai=3632;e.saraethai=3648;e.saraiileftthai=63622;e.saraiithai=3637;e.saraileftthai=63621;e.saraithai=3636;e.saraothai=3650;e.saraueeleftthai=63624;e.saraueethai=3639;e.saraueleftthai=63623;e.sarauethai=3638;e.sarauthai=3640;e.sarauuthai=3641;e.sbopomofo=12569;e.scaron=353;e.scarondotaccent=7783;e.scedilla=351;e.schwa=601;e.schwacyrillic=1241;e.schwadieresiscyrillic=1243;e.schwahook=602;e.scircle=9442;e.scircumflex=349;e.scommaaccent=537;e.sdotaccent=7777;e.sdotbelow=7779;e.sdotbelowdotaccent=7785;e.seagullbelowcmb=828;e.second=8243;e.secondtonechinese=714;e.section=167;e.seenarabic=1587;e.seenfinalarabic=65202;e.seeninitialarabic=65203;e.seenmedialarabic=65204;e.segol=1462;e.segol13=1462;e.segol1f=1462;e.segol2c=1462;e.segolhebrew=1462;e.segolnarrowhebrew=1462;e.segolquarterhebrew=1462;e.segoltahebrew=1426;e.segolwidehebrew=1462;e.seharmenian=1405;e.sehiragana=12379;e.sekatakana=12475;e.sekatakanahalfwidth=65406;e.semicolon=59;e.semicolonarabic=1563;e.semicolonmonospace=65307;e.semicolonsmall=65108;e.semivoicedmarkkana=12444;e.semivoicedmarkkanahalfwidth=65439;e.sentisquare=13090;e.sentosquare=13091;e.seven=55;e.sevenarabic=1639;e.sevenbengali=2541;e.sevencircle=9318;e.sevencircleinversesansserif=10128;e.sevendeva=2413;e.seveneighths=8542;e.sevengujarati=2797;e.sevengurmukhi=2669;e.sevenhackarabic=1639;e.sevenhangzhou=12327;e.sevenideographicparen=12838;e.seveninferior=8327;e.sevenmonospace=65303;e.sevenoldstyle=63287;e.sevenparen=9338;e.sevenperiod=9358;e.sevenpersian=1783;e.sevenroman=8566;e.sevensuperior=8311;e.seventeencircle=9328;e.seventeenparen=9348;e.seventeenperiod=9368;e.seventhai=3671;e.sfthyphen=173;e.shaarmenian=1399;e.shabengali=2486;e.shacyrillic=1096;e.shaddaarabic=1617;e.shaddadammaarabic=64609;e.shaddadammatanarabic=64606;e.shaddafathaarabic=64608;e.shaddakasraarabic=64610;e.shaddakasratanarabic=64607;e.shade=9618;e.shadedark=9619;e.shadelight=9617;e.shademedium=9618;e.shadeva=2358;e.shagujarati=2742;e.shagurmukhi=2614;e.shalshelethebrew=1427;e.shbopomofo=12565;e.shchacyrillic=1097;e.sheenarabic=1588;e.sheenfinalarabic=65206;e.sheeninitialarabic=65207;e.sheenmedialarabic=65208;e.sheicoptic=995;e.sheqel=8362;e.sheqelhebrew=8362;e.sheva=1456;e.sheva115=1456;e.sheva15=1456;e.sheva22=1456;e.sheva2e=1456;e.shevahebrew=1456;e.shevanarrowhebrew=1456;e.shevaquarterhebrew=1456;e.shevawidehebrew=1456;e.shhacyrillic=1211;e.shimacoptic=1005;e.shin=1513;e.shindagesh=64329;e.shindageshhebrew=64329;e.shindageshshindot=64300;e.shindageshshindothebrew=64300;e.shindageshsindot=64301;e.shindageshsindothebrew=64301;e.shindothebrew=1473;e.shinhebrew=1513;e.shinshindot=64298;e.shinshindothebrew=64298;e.shinsindot=64299;e.shinsindothebrew=64299;e.shook=642;e.sigma=963;e.sigma1=962;e.sigmafinal=962;e.sigmalunatesymbolgreek=1010;e.sihiragana=12375;e.sikatakana=12471;e.sikatakanahalfwidth=65404;e.siluqhebrew=1469;e.siluqlefthebrew=1469;e.similar=8764;e.sindothebrew=1474;e.siosacirclekorean=12916;e.siosaparenkorean=12820;e.sioscieuckorean=12670;e.sioscirclekorean=12902;e.sioskiyeokkorean=12666;e.sioskorean=12613;e.siosnieunkorean=12667;e.siosparenkorean=12806;e.siospieupkorean=12669;e.siostikeutkorean=12668;e.six=54;e.sixarabic=1638;e.sixbengali=2540;e.sixcircle=9317;e.sixcircleinversesansserif=10127;e.sixdeva=2412;e.sixgujarati=2796;e.sixgurmukhi=2668;e.sixhackarabic=1638;e.sixhangzhou=12326;e.sixideographicparen=12837;e.sixinferior=8326;e.sixmonospace=65302;e.sixoldstyle=63286;e.sixparen=9337;e.sixperiod=9357;e.sixpersian=1782;e.sixroman=8565;e.sixsuperior=8310;e.sixteencircle=9327;e.sixteencurrencydenominatorbengali=2553;e.sixteenparen=9347;e.sixteenperiod=9367;e.sixthai=3670;e.slash=47;e.slashmonospace=65295;e.slong=383;e.slongdotaccent=7835;e.smileface=9786;e.smonospace=65363;e.sofpasuqhebrew=1475;e.softhyphen=173;e.softsigncyrillic=1100;e.sohiragana=12381;e.sokatakana=12477;e.sokatakanahalfwidth=65407;e.soliduslongoverlaycmb=824;e.solidusshortoverlaycmb=823;e.sorusithai=3625;e.sosalathai=3624;e.sosothai=3595;e.sosuathai=3626;e.space=32;e.spacehackarabic=32;e.spade=9824;e.spadesuitblack=9824;e.spadesuitwhite=9828;e.sparen=9390;e.squarebelowcmb=827;e.squarecc=13252;e.squarecm=13213;e.squarediagonalcrosshatchfill=9641;e.squarehorizontalfill=9636;e.squarekg=13199;e.squarekm=13214;e.squarekmcapital=13262;e.squareln=13265;e.squarelog=13266;e.squaremg=13198;e.squaremil=13269;e.squaremm=13212;e.squaremsquared=13217;e.squareorthogonalcrosshatchfill=9638;e.squareupperlefttolowerrightfill=9639;e.squareupperrighttolowerleftfill=9640;e.squareverticalfill=9637;e.squarewhitewithsmallblack=9635;e.srsquare=13275;e.ssabengali=2487;e.ssadeva=2359;e.ssagujarati=2743;e.ssangcieuckorean=12617;e.ssanghieuhkorean=12677;e.ssangieungkorean=12672;e.ssangkiyeokkorean=12594;e.ssangnieunkorean=12645;e.ssangpieupkorean=12611;e.ssangsioskorean=12614;e.ssangtikeutkorean=12600;e.ssuperior=63218;e.sterling=163;e.sterlingmonospace=65505;e.strokelongoverlaycmb=822;e.strokeshortoverlaycmb=821;e.subset=8834;e.subsetnotequal=8842;e.subsetorequal=8838;e.succeeds=8827;e.suchthat=8715;e.suhiragana=12377;e.sukatakana=12473;e.sukatakanahalfwidth=65405;e.sukunarabic=1618;e.summation=8721;e.sun=9788;e.superset=8835;e.supersetnotequal=8843;e.supersetorequal=8839;e.svsquare=13276;e.syouwaerasquare=13180;e.t=116;e.tabengali=2468;e.tackdown=8868;e.tackleft=8867;e.tadeva=2340;e.tagujarati=2724;e.tagurmukhi=2596;e.taharabic=1591;e.tahfinalarabic=65218;e.tahinitialarabic=65219;e.tahiragana=12383;e.tahmedialarabic=65220;e.taisyouerasquare=13181;e.takatakana=12479;e.takatakanahalfwidth=65408;e.tatweelarabic=1600;e.tau=964;e.tav=1514;e.tavdages=64330;e.tavdagesh=64330;e.tavdageshhebrew=64330;e.tavhebrew=1514;e.tbar=359;e.tbopomofo=12554;e.tcaron=357;e.tccurl=680;e.tcedilla=355;e.tcheharabic=1670;e.tchehfinalarabic=64379;e.tchehinitialarabic=64380;e.tchehmedialarabic=64381;e.tcircle=9443;e.tcircumflexbelow=7793;e.tcommaaccent=355;e.tdieresis=7831;e.tdotaccent=7787;e.tdotbelow=7789;e.tecyrillic=1090;e.tedescendercyrillic=1197;e.teharabic=1578;e.tehfinalarabic=65174;e.tehhahinitialarabic=64674;e.tehhahisolatedarabic=64524;e.tehinitialarabic=65175;e.tehiragana=12390;e.tehjeeminitialarabic=64673;e.tehjeemisolatedarabic=64523;e.tehmarbutaarabic=1577;e.tehmarbutafinalarabic=65172;e.tehmedialarabic=65176;e.tehmeeminitialarabic=64676;e.tehmeemisolatedarabic=64526;e.tehnoonfinalarabic=64627;e.tekatakana=12486;e.tekatakanahalfwidth=65411;e.telephone=8481;e.telephoneblack=9742;e.telishagedolahebrew=1440;e.telishaqetanahebrew=1449;e.tencircle=9321;e.tenideographicparen=12841;e.tenparen=9341;e.tenperiod=9361;e.tenroman=8569;e.tesh=679;e.tet=1496;e.tetdagesh=64312;e.tetdageshhebrew=64312;e.tethebrew=1496;e.tetsecyrillic=1205;e.tevirhebrew=1435;e.tevirlefthebrew=1435;e.thabengali=2469;e.thadeva=2341;e.thagujarati=2725;e.thagurmukhi=2597;e.thalarabic=1584;e.thalfinalarabic=65196;e.thanthakhatlowleftthai=63640;e.thanthakhatlowrightthai=63639;e.thanthakhatthai=3660;e.thanthakhatupperleftthai=63638;e.theharabic=1579;e.thehfinalarabic=65178;e.thehinitialarabic=65179;e.thehmedialarabic=65180;e.thereexists=8707;e.therefore=8756;e.theta=952;e.theta1=977;e.thetasymbolgreek=977;e.thieuthacirclekorean=12921;e.thieuthaparenkorean=12825;e.thieuthcirclekorean=12907;e.thieuthkorean=12620;e.thieuthparenkorean=12811;e.thirteencircle=9324;e.thirteenparen=9344;e.thirteenperiod=9364;e.thonangmonthothai=3601;e.thook=429;e.thophuthaothai=3602;e.thorn=254;e.thothahanthai=3607;e.thothanthai=3600;e.thothongthai=3608;e.thothungthai=3606;e.thousandcyrillic=1154;e.thousandsseparatorarabic=1644;e.thousandsseparatorpersian=1644;e.three=51;e.threearabic=1635;e.threebengali=2537;e.threecircle=9314;e.threecircleinversesansserif=10124;e.threedeva=2409;e.threeeighths=8540;e.threegujarati=2793;e.threegurmukhi=2665;e.threehackarabic=1635;e.threehangzhou=12323;e.threeideographicparen=12834;e.threeinferior=8323;e.threemonospace=65299;e.threenumeratorbengali=2550;e.threeoldstyle=63283;e.threeparen=9334;e.threeperiod=9354;e.threepersian=1779;e.threequarters=190;e.threequartersemdash=63198;e.threeroman=8562;e.threesuperior=179;e.threethai=3667;e.thzsquare=13204;e.tihiragana=12385;e.tikatakana=12481;e.tikatakanahalfwidth=65409;e.tikeutacirclekorean=12912;e.tikeutaparenkorean=12816;e.tikeutcirclekorean=12898;e.tikeutkorean=12599;e.tikeutparenkorean=12802;e.tilde=732;e.tildebelowcmb=816;e.tildecmb=771;e.tildecomb=771;e.tildedoublecmb=864;e.tildeoperator=8764;e.tildeoverlaycmb=820;e.tildeverticalcmb=830;e.timescircle=8855;e.tipehahebrew=1430;e.tipehalefthebrew=1430;e.tippigurmukhi=2672;e.titlocyrilliccmb=1155;e.tiwnarmenian=1407;e.tlinebelow=7791;e.tmonospace=65364;e.toarmenian=1385;e.tohiragana=12392;e.tokatakana=12488;e.tokatakanahalfwidth=65412;e.tonebarextrahighmod=741;e.tonebarextralowmod=745;e.tonebarhighmod=742;e.tonebarlowmod=744;e.tonebarmidmod=743;e.tonefive=445;e.tonesix=389;e.tonetwo=424;e.tonos=900;e.tonsquare=13095;e.topatakthai=3599;e.tortoiseshellbracketleft=12308;e.tortoiseshellbracketleftsmall=65117;e.tortoiseshellbracketleftvertical=65081;e.tortoiseshellbracketright=12309;e.tortoiseshellbracketrightsmall=65118;e.tortoiseshellbracketrightvertical=65082;e.totaothai=3605;e.tpalatalhook=427;e.tparen=9391;e.trademark=8482;e.trademarksans=63722;e.trademarkserif=63195;e.tretroflexhook=648;e.triagdn=9660;e.triaglf=9668;e.triagrt=9658;e.triagup=9650;e.ts=678;e.tsadi=1510;e.tsadidagesh=64326;e.tsadidageshhebrew=64326;e.tsadihebrew=1510;e.tsecyrillic=1094;e.tsere=1461;e.tsere12=1461;e.tsere1e=1461;e.tsere2b=1461;e.tserehebrew=1461;e.tserenarrowhebrew=1461;e.tserequarterhebrew=1461;e.tserewidehebrew=1461;e.tshecyrillic=1115;e.tsuperior=63219;e.ttabengali=2463;e.ttadeva=2335;e.ttagujarati=2719;e.ttagurmukhi=2591;e.tteharabic=1657;e.ttehfinalarabic=64359;e.ttehinitialarabic=64360;e.ttehmedialarabic=64361;e.tthabengali=2464;e.tthadeva=2336;e.tthagujarati=2720;e.tthagurmukhi=2592;e.tturned=647;e.tuhiragana=12388;e.tukatakana=12484;e.tukatakanahalfwidth=65410;e.tusmallhiragana=12387;e.tusmallkatakana=12483;e.tusmallkatakanahalfwidth=65391;e.twelvecircle=9323;e.twelveparen=9343;e.twelveperiod=9363;e.twelveroman=8571;e.twentycircle=9331;e.twentyhangzhou=21316;e.twentyparen=9351;e.twentyperiod=9371;e.two=50;e.twoarabic=1634;e.twobengali=2536;e.twocircle=9313;e.twocircleinversesansserif=10123;e.twodeva=2408;e.twodotenleader=8229;e.twodotleader=8229;e.twodotleadervertical=65072;e.twogujarati=2792;e.twogurmukhi=2664;e.twohackarabic=1634;e.twohangzhou=12322;e.twoideographicparen=12833;e.twoinferior=8322;e.twomonospace=65298;e.twonumeratorbengali=2549;e.twooldstyle=63282;e.twoparen=9333;e.twoperiod=9353;e.twopersian=1778;e.tworoman=8561;e.twostroke=443;e.twosuperior=178;e.twothai=3666;e.twothirds=8532;e.u=117;e.uacute=250;e.ubar=649;e.ubengali=2441;e.ubopomofo=12584;e.ubreve=365;e.ucaron=468;e.ucircle=9444;e.ucircumflex=251;e.ucircumflexbelow=7799;e.ucyrillic=1091;e.udattadeva=2385;e.udblacute=369;e.udblgrave=533;e.udeva=2313;e.udieresis=252;e.udieresisacute=472;e.udieresisbelow=7795;e.udieresiscaron=474;e.udieresiscyrillic=1265;e.udieresisgrave=476;e.udieresismacron=470;e.udotbelow=7909;e.ugrave=249;e.ugujarati=2697;e.ugurmukhi=2569;e.uhiragana=12358;e.uhookabove=7911;e.uhorn=432;e.uhornacute=7913;e.uhorndotbelow=7921;e.uhorngrave=7915;e.uhornhookabove=7917;e.uhorntilde=7919;e.uhungarumlaut=369;e.uhungarumlautcyrillic=1267;e.uinvertedbreve=535;e.ukatakana=12454;e.ukatakanahalfwidth=65395;e.ukcyrillic=1145;e.ukorean=12636;e.umacron=363;e.umacroncyrillic=1263;e.umacrondieresis=7803;e.umatragurmukhi=2625;e.umonospace=65365;e.underscore=95;e.underscoredbl=8215;e.underscoremonospace=65343;e.underscorevertical=65075;e.underscorewavy=65103;e.union=8746;e.universal=8704;e.uogonek=371;e.uparen=9392;e.upblock=9600;e.upperdothebrew=1476;e.upsilon=965;e.upsilondieresis=971;e.upsilondieresistonos=944;e.upsilonlatin=650;e.upsilontonos=973;e.uptackbelowcmb=797;e.uptackmod=724;e.uragurmukhi=2675;e.uring=367;e.ushortcyrillic=1118;e.usmallhiragana=12357;e.usmallkatakana=12453;e.usmallkatakanahalfwidth=65385;e.ustraightcyrillic=1199;e.ustraightstrokecyrillic=1201;e.utilde=361;e.utildeacute=7801;e.utildebelow=7797;e.uubengali=2442;e.uudeva=2314;e.uugujarati=2698;e.uugurmukhi=2570;e.uumatragurmukhi=2626;e.uuvowelsignbengali=2498;e.uuvowelsigndeva=2370;e.uuvowelsigngujarati=2754;e.uvowelsignbengali=2497;e.uvowelsigndeva=2369;e.uvowelsigngujarati=2753;e.v=118;e.vadeva=2357;e.vagujarati=2741;e.vagurmukhi=2613;e.vakatakana=12535;e.vav=1493;e.vavdagesh=64309;e.vavdagesh65=64309;e.vavdageshhebrew=64309;e.vavhebrew=1493;e.vavholam=64331;e.vavholamhebrew=64331;e.vavvavhebrew=1520;e.vavyodhebrew=1521;e.vcircle=9445;e.vdotbelow=7807;e.vecyrillic=1074;e.veharabic=1700;e.vehfinalarabic=64363;e.vehinitialarabic=64364;e.vehmedialarabic=64365;e.vekatakana=12537;e.venus=9792;e.verticalbar=124;e.verticallineabovecmb=781;e.verticallinebelowcmb=809;e.verticallinelowmod=716;e.verticallinemod=712;e.vewarmenian=1406;e.vhook=651;e.vikatakana=12536;e.viramabengali=2509;e.viramadeva=2381;e.viramagujarati=2765;e.visargabengali=2435;e.visargadeva=2307;e.visargagujarati=2691;e.vmonospace=65366;e.voarmenian=1400;e.voicediterationhiragana=12446;e.voicediterationkatakana=12542;e.voicedmarkkana=12443;e.voicedmarkkanahalfwidth=65438;e.vokatakana=12538;e.vparen=9393;e.vtilde=7805;e.vturned=652;e.vuhiragana=12436;e.vukatakana=12532;e.w=119;e.wacute=7811;e.waekorean=12633;e.wahiragana=12431;e.wakatakana=12527;e.wakatakanahalfwidth=65436;e.wakorean=12632;e.wasmallhiragana=12430;e.wasmallkatakana=12526;e.wattosquare=13143;e.wavedash=12316;e.wavyunderscorevertical=65076;e.wawarabic=1608;e.wawfinalarabic=65262;e.wawhamzaabovearabic=1572;e.wawhamzaabovefinalarabic=65158;e.wbsquare=13277;e.wcircle=9446;e.wcircumflex=373;e.wdieresis=7813;e.wdotaccent=7815;e.wdotbelow=7817;e.wehiragana=12433;e.weierstrass=8472;e.wekatakana=12529;e.wekorean=12638;e.weokorean=12637;e.wgrave=7809;e.whitebullet=9702;e.whitecircle=9675;e.whitecircleinverse=9689;e.whitecornerbracketleft=12302;e.whitecornerbracketleftvertical=65091;e.whitecornerbracketright=12303;e.whitecornerbracketrightvertical=65092;e.whitediamond=9671;e.whitediamondcontainingblacksmalldiamond=9672;e.whitedownpointingsmalltriangle=9663;e.whitedownpointingtriangle=9661;e.whiteleftpointingsmalltriangle=9667;e.whiteleftpointingtriangle=9665;e.whitelenticularbracketleft=12310;e.whitelenticularbracketright=12311;e.whiterightpointingsmalltriangle=9657;e.whiterightpointingtriangle=9655;e.whitesmallsquare=9643;e.whitesmilingface=9786;e.whitesquare=9633;e.whitestar=9734;e.whitetelephone=9743;e.whitetortoiseshellbracketleft=12312;e.whitetortoiseshellbracketright=12313;e.whiteuppointingsmalltriangle=9653;e.whiteuppointingtriangle=9651;e.wihiragana=12432;e.wikatakana=12528;e.wikorean=12639;e.wmonospace=65367;e.wohiragana=12434;e.wokatakana=12530;e.wokatakanahalfwidth=65382;e.won=8361;e.wonmonospace=65510;e.wowaenthai=3623;e.wparen=9394;e.wring=7832;e.wsuperior=695;e.wturned=653;e.wynn=447;e.x=120;e.xabovecmb=829;e.xbopomofo=12562;e.xcircle=9447;e.xdieresis=7821;e.xdotaccent=7819;e.xeharmenian=1389;e.xi=958;e.xmonospace=65368;e.xparen=9395;e.xsuperior=739;e.y=121;e.yaadosquare=13134;e.yabengali=2479;e.yacute=253;e.yadeva=2351;e.yaekorean=12626;e.yagujarati=2735;e.yagurmukhi=2607;e.yahiragana=12420;e.yakatakana=12516;e.yakatakanahalfwidth=65428;e.yakorean=12625;e.yamakkanthai=3662;e.yasmallhiragana=12419;e.yasmallkatakana=12515;e.yasmallkatakanahalfwidth=65388;e.yatcyrillic=1123;e.ycircle=9448;e.ycircumflex=375;e.ydieresis=255;e.ydotaccent=7823;e.ydotbelow=7925;e.yeharabic=1610;e.yehbarreearabic=1746;e.yehbarreefinalarabic=64431;e.yehfinalarabic=65266;e.yehhamzaabovearabic=1574;e.yehhamzaabovefinalarabic=65162;e.yehhamzaaboveinitialarabic=65163;e.yehhamzaabovemedialarabic=65164;e.yehinitialarabic=65267;e.yehmedialarabic=65268;e.yehmeeminitialarabic=64733;e.yehmeemisolatedarabic=64600;e.yehnoonfinalarabic=64660;e.yehthreedotsbelowarabic=1745;e.yekorean=12630;e.yen=165;e.yenmonospace=65509;e.yeokorean=12629;e.yeorinhieuhkorean=12678;e.yerahbenyomohebrew=1450;e.yerahbenyomolefthebrew=1450;e.yericyrillic=1099;e.yerudieresiscyrillic=1273;e.yesieungkorean=12673;e.yesieungpansioskorean=12675;e.yesieungsioskorean=12674;e.yetivhebrew=1434;e.ygrave=7923;e.yhook=436;e.yhookabove=7927;e.yiarmenian=1397;e.yicyrillic=1111;e.yikorean=12642;e.yinyang=9775;e.yiwnarmenian=1410;e.ymonospace=65369;e.yod=1497;e.yoddagesh=64313;e.yoddageshhebrew=64313;e.yodhebrew=1497;e.yodyodhebrew=1522;e.yodyodpatahhebrew=64287;e.yohiragana=12424;e.yoikorean=12681;e.yokatakana=12520;e.yokatakanahalfwidth=65430;e.yokorean=12635;e.yosmallhiragana=12423;e.yosmallkatakana=12519;e.yosmallkatakanahalfwidth=65390;e.yotgreek=1011;e.yoyaekorean=12680;e.yoyakorean=12679;e.yoyakthai=3618;e.yoyingthai=3597;e.yparen=9396;e.ypogegrammeni=890;e.ypogegrammenigreekcmb=837;e.yr=422;e.yring=7833;e.ysuperior=696;e.ytilde=7929;e.yturned=654;e.yuhiragana=12422;e.yuikorean=12684;e.yukatakana=12518;e.yukatakanahalfwidth=65429;e.yukorean=12640;e.yusbigcyrillic=1131;e.yusbigiotifiedcyrillic=1133;e.yuslittlecyrillic=1127;e.yuslittleiotifiedcyrillic=1129;e.yusmallhiragana=12421;e.yusmallkatakana=12517;e.yusmallkatakanahalfwidth=65389;e.yuyekorean=12683;e.yuyeokorean=12682;e.yyabengali=2527;e.yyadeva=2399;e.z=122;e.zaarmenian=1382;e.zacute=378;e.zadeva=2395;e.zagurmukhi=2651;e.zaharabic=1592;e.zahfinalarabic=65222;e.zahinitialarabic=65223;e.zahiragana=12374;e.zahmedialarabic=65224;e.zainarabic=1586;e.zainfinalarabic=65200;e.zakatakana=12470;e.zaqefgadolhebrew=1429;e.zaqefqatanhebrew=1428;e.zarqahebrew=1432;e.zayin=1494;e.zayindagesh=64310;e.zayindageshhebrew=64310;e.zayinhebrew=1494;e.zbopomofo=12567;e.zcaron=382;e.zcircle=9449;e.zcircumflex=7825;e.zcurl=657;e.zdot=380;e.zdotaccent=380;e.zdotbelow=7827;e.zecyrillic=1079;e.zedescendercyrillic=1177;e.zedieresiscyrillic=1247;e.zehiragana=12380;e.zekatakana=12476;e.zero=48;e.zeroarabic=1632;e.zerobengali=2534;e.zerodeva=2406;e.zerogujarati=2790;e.zerogurmukhi=2662;e.zerohackarabic=1632;e.zeroinferior=8320;e.zeromonospace=65296;e.zerooldstyle=63280;e.zeropersian=1776;e.zerosuperior=8304;e.zerothai=3664;e.zerowidthjoiner=65279;e.zerowidthnonjoiner=8204;e.zerowidthspace=8203;e.zeta=950;e.zhbopomofo=12563;e.zhearmenian=1386;e.zhebrevecyrillic=1218;e.zhecyrillic=1078;e.zhedescendercyrillic=1175;e.zhedieresiscyrillic=1245;e.zihiragana=12376;e.zikatakana=12472;e.zinorhebrew=1454;e.zlinebelow=7829;e.zmonospace=65370;e.zohiragana=12382;e.zokatakana=12478;e.zparen=9397;e.zretroflexhook=656;e.zstroke=438;e.zuhiragana=12378;e.zukatakana=12474;e[".notdef"]=0;e.angbracketleftbig=9001;e.angbracketleftBig=9001;e.angbracketleftbigg=9001;e.angbracketleftBigg=9001;e.angbracketrightBig=9002;e.angbracketrightbig=9002;e.angbracketrightBigg=9002;e.angbracketrightbigg=9002;e.arrowhookleft=8618;e.arrowhookright=8617;e.arrowlefttophalf=8636;e.arrowleftbothalf=8637;e.arrownortheast=8599;e.arrownorthwest=8598;e.arrowrighttophalf=8640;e.arrowrightbothalf=8641;e.arrowsoutheast=8600;e.arrowsouthwest=8601;e.backslashbig=8726;e.backslashBig=8726;e.backslashBigg=8726;e.backslashbigg=8726;e.bardbl=8214;e.bracehtipdownleft=65079;e.bracehtipdownright=65079;e.bracehtipupleft=65080;e.bracehtipupright=65080;e.braceleftBig=123;e.braceleftbig=123;e.braceleftbigg=123;e.braceleftBigg=123;e.bracerightBig=125;e.bracerightbig=125;e.bracerightbigg=125;e.bracerightBigg=125;e.bracketleftbig=91;e.bracketleftBig=91;e.bracketleftbigg=91;e.bracketleftBigg=91;e.bracketrightBig=93;e.bracketrightbig=93;e.bracketrightbigg=93;e.bracketrightBigg=93;e.ceilingleftbig=8968;e.ceilingleftBig=8968;e.ceilingleftBigg=8968;e.ceilingleftbigg=8968;e.ceilingrightbig=8969;e.ceilingrightBig=8969;e.ceilingrightbigg=8969;e.ceilingrightBigg=8969;e.circledotdisplay=8857;e.circledottext=8857;e.circlemultiplydisplay=8855;e.circlemultiplytext=8855;e.circleplusdisplay=8853;e.circleplustext=8853;e.contintegraldisplay=8750;e.contintegraltext=8750;e.coproductdisplay=8720;e.coproducttext=8720;e.floorleftBig=8970;e.floorleftbig=8970;e.floorleftbigg=8970;e.floorleftBigg=8970;e.floorrightbig=8971;e.floorrightBig=8971;e.floorrightBigg=8971;e.floorrightbigg=8971;e.hatwide=770;e.hatwider=770;e.hatwidest=770;e.intercal=7488;e.integraldisplay=8747;e.integraltext=8747;e.intersectiondisplay=8898;e.intersectiontext=8898;e.logicalanddisplay=8743;e.logicalandtext=8743;e.logicalordisplay=8744;e.logicalortext=8744;e.parenleftBig=40;e.parenleftbig=40;e.parenleftBigg=40;e.parenleftbigg=40;e.parenrightBig=41;e.parenrightbig=41;e.parenrightBigg=41;e.parenrightbigg=41;e.prime=8242;e.productdisplay=8719;e.producttext=8719;e.radicalbig=8730;e.radicalBig=8730;e.radicalBigg=8730;e.radicalbigg=8730;e.radicalbt=8730;e.radicaltp=8730;e.radicalvertex=8730;e.slashbig=47;e.slashBig=47;e.slashBigg=47;e.slashbigg=47;e.summationdisplay=8721;e.summationtext=8721;e.tildewide=732;e.tildewider=732;e.tildewidest=732;e.uniondisplay=8899;e.unionmultidisplay=8846;e.unionmultitext=8846;e.unionsqdisplay=8852;e.unionsqtext=8852;e.uniontext=8899;e.vextenddouble=8741;e.vextendsingle=8739}),wn=getLookupTableFactory(function(e){e.space=32;e.a1=9985;e.a2=9986;e.a202=9987;e.a3=9988;e.a4=9742;e.a5=9990;e.a119=9991;e.a118=9992;e.a117=9993;e.a11=9755;e.a12=9758;e.a13=9996;e.a14=9997;e.a15=9998;e.a16=9999;e.a105=1e4;e.a17=10001;e.a18=10002;e.a19=10003;e.a20=10004;e.a21=10005;e.a22=10006;e.a23=10007;e.a24=10008;e.a25=10009;e.a26=10010;e.a27=10011;e.a28=10012;e.a6=10013;e.a7=10014;e.a8=10015;e.a9=10016;e.a10=10017;e.a29=10018;e.a30=10019;e.a31=10020;e.a32=10021;e.a33=10022;e.a34=10023;e.a35=9733;e.a36=10025;e.a37=10026;e.a38=10027;e.a39=10028;e.a40=10029;e.a41=10030;e.a42=10031;e.a43=10032;e.a44=10033;e.a45=10034;e.a46=10035;e.a47=10036;e.a48=10037;e.a49=10038;e.a50=10039;e.a51=10040;e.a52=10041;e.a53=10042;e.a54=10043;e.a55=10044;e.a56=10045;e.a57=10046;e.a58=10047;e.a59=10048;e.a60=10049;e.a61=10050;e.a62=10051;e.a63=10052;e.a64=10053;e.a65=10054;e.a66=10055;e.a67=10056;e.a68=10057;e.a69=10058;e.a70=10059;e.a71=9679;e.a72=10061;e.a73=9632;e.a74=10063;e.a203=10064;e.a75=10065;e.a204=10066;e.a76=9650;e.a77=9660;e.a78=9670;e.a79=10070;e.a81=9687;e.a82=10072;e.a83=10073;e.a84=10074;e.a97=10075;e.a98=10076;e.a99=10077;e.a100=10078;e.a101=10081;e.a102=10082;e.a103=10083;e.a104=10084;e.a106=10085;e.a107=10086;e.a108=10087;e.a112=9827;e.a111=9830;e.a110=9829;e.a109=9824;e.a120=9312;e.a121=9313;e.a122=9314;e.a123=9315;e.a124=9316;e.a125=9317;e.a126=9318;e.a127=9319;e.a128=9320;e.a129=9321;e.a130=10102;e.a131=10103;e.a132=10104;e.a133=10105;e.a134=10106;e.a135=10107;e.a136=10108;e.a137=10109;e.a138=10110;e.a139=10111;e.a140=10112;e.a141=10113;e.a142=10114;e.a143=10115;e.a144=10116;e.a145=10117;e.a146=10118;e.a147=10119;e.a148=10120;e.a149=10121;e.a150=10122;e.a151=10123;e.a152=10124;e.a153=10125;e.a154=10126;e.a155=10127;e.a156=10128;e.a157=10129;e.a158=10130;e.a159=10131;e.a160=10132;e.a161=8594;e.a163=8596;e.a164=8597;e.a196=10136;e.a165=10137;e.a192=10138;e.a166=10139;e.a167=10140;e.a168=10141;e.a169=10142;e.a170=10143;e.a171=10144;e.a172=10145;e.a173=10146;e.a162=10147;e.a174=10148;e.a175=10149;e.a176=10150;e.a177=10151;e.a178=10152;e.a179=10153;e.a193=10154;e.a180=10155;e.a199=10156;e.a181=10157;e.a200=10158;e.a182=10159;e.a201=10161;e.a183=10162;e.a184=10163;e.a197=10164;e.a185=10165;e.a194=10166;e.a198=10167;e.a186=10168;e.a195=10169;e.a187=10170;e.a188=10171;e.a189=10172;e.a190=10173;e.a191=10174;e.a89=10088;e.a90=10089;e.a93=10090;e.a94=10091;e.a91=10092;e.a92=10093;e.a205=10094;e.a85=10095;e.a206=10096;e.a86=10097;e.a87=10098;e.a88=10099;e.a95=10100;e.a96=10101;e[".notdef"]=0}),jn=getLookupTableFactory(function(e){e[63721]=169;e[63193]=169;e[63720]=174;e[63194]=174;e[63722]=8482;e[63195]=8482;e[63718]=9168;e[63719]=9135;e[63733]=9134;e[63729]=9127;e[63730]=9128;e[63731]=9129;e[63740]=9131;e[63741]=9132;e[63742]=9133;e[63726]=9121;e[63727]=9122;e[63728]=9123;e[63737]=9124;e[63738]=9125;e[63739]=9126;e[63723]=9115;e[63724]=9116;e[63725]=9117;e[63734]=9118;e[63735]=9119;e[63736]=9120});function getUnicodeForGlyph(e,t){let a=t[e];if(void 0!==a)return a;if(!e)return-1;if("u"===e[0]){const t=e.length;let n;if(7===t&&"n"===e[1]&&"i"===e[2])n=e.substring(3);else{if(!(t>=5&&t<=7))return-1;n=e.substring(1)}if(n===n.toUpperCase()){a=parseInt(n,16);if(a>=0)return a}}return-1}const kn=[[0,127],[128,255],[256,383],[384,591],[592,687,7424,7551,7552,7615],[688,767,42752,42783],[768,879,7616,7679],[880,1023],[11392,11519],[1024,1279,1280,1327,11744,11775,42560,42655],[1328,1423],[1424,1535],[42240,42559],[1536,1791,1872,1919],[1984,2047],[2304,2431],[2432,2559],[2560,2687],[2688,2815],[2816,2943],[2944,3071],[3072,3199],[3200,3327],[3328,3455],[3584,3711],[3712,3839],[4256,4351,11520,11567],[6912,7039],[4352,4607],[7680,7935,11360,11391,42784,43007],[7936,8191],[8192,8303,11776,11903],[8304,8351],[8352,8399],[8400,8447],[8448,8527],[8528,8591],[8592,8703,10224,10239,10496,10623,11008,11263],[8704,8959,10752,11007,10176,10223,10624,10751],[8960,9215],[9216,9279],[9280,9311],[9312,9471],[9472,9599],[9600,9631],[9632,9727],[9728,9983],[9984,10175],[12288,12351],[12352,12447],[12448,12543,12784,12799],[12544,12591,12704,12735],[12592,12687],[43072,43135],[12800,13055],[13056,13311],[44032,55215],[55296,57343],[67840,67871],[19968,40959,11904,12031,12032,12255,12272,12287,13312,19903,131072,173791,12688,12703],[57344,63743],[12736,12783,63744,64255,194560,195103],[64256,64335],[64336,65023],[65056,65071],[65040,65055],[65104,65135],[65136,65279],[65280,65519],[65520,65535],[3840,4095],[1792,1871],[1920,1983],[3456,3583],[4096,4255],[4608,4991,4992,5023,11648,11743],[5024,5119],[5120,5759],[5760,5791],[5792,5887],[6016,6143],[6144,6319],[10240,10495],[40960,42127],[5888,5919,5920,5951,5952,5983,5984,6015],[66304,66351],[66352,66383],[66560,66639],[118784,119039,119040,119295,119296,119375],[119808,120831],[1044480,1048573],[65024,65039,917760,917999],[917504,917631],[6400,6479],[6480,6527],[6528,6623],[6656,6687],[11264,11359],[11568,11647],[19904,19967],[43008,43055],[65536,65663,65664,65791,65792,65855],[65856,65935],[66432,66463],[66464,66527],[66640,66687],[66688,66735],[67584,67647],[68096,68191],[119552,119647],[73728,74751,74752,74879],[119648,119679],[7040,7103],[7168,7247],[7248,7295],[43136,43231],[43264,43311],[43312,43359],[43520,43615],[65936,65999],[66e3,66047],[66208,66271,66176,66207,67872,67903],[127024,127135,126976,127023]];function getUnicodeRangeFor(e,t=-1){if(-1!==t){const a=kn[t];for(let n=0,s=a.length;n<s;n+=2)if(e>=a[n]&&e<=a[n+1])return t}for(let t=0,a=kn.length;t<a;t++){const a=kn[t];for(let n=0,s=a.length;n<s;n+=2)if(e>=a[n]&&e<=a[n+1])return t}return-1}const yn=/^(\s)|(\p{Mn})|(\p{Cf})$/u,qn=new Map;const vn=1,Sn=2,An=4,xn=32,Cn=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"];function recoverGlyphName(e,t){if(void 0!==t[e])return e;const a=getUnicodeForGlyph(e,t);if(-1!==a)for(const e in t)if(t[e]===a)return e;info("Unable to recover a standard glyph name for: "+e);return e}function type1FontGlyphMapping(e,t,a){const n=new Map;let s,r;const i=!!(e.flags&An);if(e.isInternalFont){r=t;for(let e=0;e<r.length;e++){s=a.indexOf(r[e]);n.set(e,s>=0?s:0)}}else if(e.baseEncodingName){r=getEncoding(e.baseEncodingName);for(let e=0;e<r.length;e++){s=a.indexOf(r[e]);n.set(e,s>=0?s:0)}}else if(i)for(const e in t)n.set(+e,t[e]);else{r=mn;for(let e=0;e<r.length;e++){s=a.indexOf(r[e]);n.set(e,s>=0?s:0)}}let o;if(e.differences)for(const[t,r]of e.differences){s=a.indexOf(r);if(-1===s){o??=bn();const e=recoverGlyphName(r,o);e!==r&&(s=a.indexOf(e))}n.set(t,s>=0?s:0)}return n}function normalizeFontName(e){return e.replaceAll(/[,_]/g,"-").replaceAll(/\s/g,"")}const In=getLookupTableFactory(e=>{e[8211]=65074;e[8212]=65073;e[8229]=65072;e[8230]=65049;e[12289]=65041;e[12290]=65042;e[12296]=65087;e[12297]=65088;e[12298]=65085;e[12299]=65086;e[12300]=65089;e[12301]=65090;e[12302]=65091;e[12303]=65092;e[12304]=65083;e[12305]=65084;e[12308]=65081;e[12309]=65082;e[12310]=65047;e[12311]=65048;e[65103]=65076;e[65281]=65045;e[65288]=65077;e[65289]=65078;e[65292]=65040;e[65306]=65043;e[65307]=65044;e[65311]=65046;e[65339]=65095;e[65341]=65096;e[65343]=65075;e[65371]=65079;e[65373]=65080});const Fn=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron"],Tn=[".notdef","space","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],Rn=[".notdef","space","dollaroldstyle","dollarsuperior","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","hyphensuperior","colonmonetary","onefitted","rupiah","centoldstyle","figuredash","hypheninferior","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior"];class DataBuilder{#fe;#ce=1024;#he=!1;#ue=0;#me;constructor({exactLength:e=0,minLength:t=0}){this.#he=!!e;this.#pe(e||t)}#pe(e){if(this.#he)this.#ce=e;else for(;this.#ce<e;)this.#ce*=2;const t=new Uint8Array(this.#ce);this.#fe&&t.set(this.#fe,0);this.#fe=t;this.#me=new DataView(t.buffer)}get data(){return this.#fe.subarray(0,this.#ue)}get length(){return this.#ue}skip(e){this.#ue+=e}setArray(e){const t=this.#ue+e.length;!this.#he&&t>this.#ce&&this.#pe(t);this.#fe.set(e,this.#ue);this.#ue=t}setInt16(e){const t=this.#ue+2;!this.#he&&t>this.#ce&&this.#pe(t);this.#me.setInt16(this.#ue,e);this.#ue=t}setSafeInt16(e){const t=this.#ue+2;!this.#he&&t>this.#ce&&this.#pe(t);this.#me.setInt16(this.#ue,MathClamp(e,-32768,32767));this.#ue=t}setInt32(e){const t=this.#ue+4;!this.#he&&t>this.#ce&&this.#pe(t);this.#me.setInt32(this.#ue,e);this.#ue=t}}function looksLikeUnsigned16BitNegative(e){return e>32767&&e<=65535}function recoverSigned16BitBBox(e,t=!1){return Util.normalizeRect(e.map((e,a)=>(!t||a<2)&&looksLikeUnsigned16BitNegative(e)?e-65536:e))}const On=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003","Black","Bold","Book","Light","Medium","Regular","Roman","Semibold"],Bn=391,Dn=.039625,Hn=[null,{id:"hstem",min:2,stackClearing:!0,stem:!0},null,{id:"vstem",min:2,stackClearing:!0,stem:!0},{id:"vmoveto",min:1,stackClearing:!0},{id:"rlineto",min:2,resetStack:!0},{id:"hlineto",min:1,resetStack:!0},{id:"vlineto",min:1,resetStack:!0},{id:"rrcurveto",min:6,resetStack:!0},null,{id:"callsubr",min:1},{id:"return",min:0},null,null,{id:"endchar",min:0,stackClearing:!0},null,null,null,{id:"hstemhm",min:2,stackClearing:!0,stem:!0},{id:"hintmask",min:0,stackClearing:!0},{id:"cntrmask",min:0,stackClearing:!0},{id:"rmoveto",min:2,stackClearing:!0},{id:"hmoveto",min:1,stackClearing:!0},{id:"vstemhm",min:2,stackClearing:!0,stem:!0},{id:"rcurveline",min:8,resetStack:!0},{id:"rlinecurve",min:8,resetStack:!0},{id:"vvcurveto",min:4,resetStack:!0},{id:"hhcurveto",min:4,resetStack:!0},null,{id:"callgsubr",min:1},{id:"vhcurveto",min:4,resetStack:!0},{id:"hvcurveto",min:4,resetStack:!0}],Mn=[null,null,null,{id:"and",min:2,stackDelta:-1},{id:"or",min:2,stackDelta:-1},{id:"not",min:1,stackDelta:0},null,null,null,{id:"abs",min:1,stackDelta:0},{id:"add",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]+e[t-1]}},{id:"sub",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]-e[t-1]}},{id:"div",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]/e[t-1]}},null,{id:"neg",min:1,stackDelta:0,stackFn(e,t){e[t-1]=-e[t-1]}},{id:"eq",min:2,stackDelta:-1},null,null,{id:"drop",min:1,stackDelta:-1},null,{id:"put",min:2,stackDelta:-2},{id:"get",min:1,stackDelta:0},{id:"ifelse",min:4,stackDelta:-3},{id:"random",min:0,stackDelta:1},{id:"mul",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]*e[t-1]}},null,{id:"sqrt",min:1,stackDelta:0},{id:"dup",min:1,stackDelta:1},{id:"exch",min:2,stackDelta:0},{id:"index",min:2,stackDelta:0},{id:"roll",min:3,stackDelta:-2},null,null,null,{id:"hflex",min:7,resetStack:!0},{id:"flex",min:13,resetStack:!0},{id:"hflex1",min:9,resetStack:!0},{id:"flex1",min:11,resetStack:!0}];class CFFParser{constructor(e,t,a){this.bytes=e.getBytes();this.properties=t;this.seacAnalysisEnabled=!!a}parse(){const e=this.properties,t=new CFF(this.bytes.length);this.cff=t;const a=this.parseHeader(),n=this.parseIndex(a.endPos),s=this.parseIndex(n.endPos),r=this.parseIndex(s.endPos),i=this.parseIndex(r.endPos),o=this.parseDict(s.obj.get(0)),l=this.createDict(CFFTopDict,o,t.strings);t.header=a.obj;t.names=this.parseNameIndex(n.obj);t.strings=this.parseStringIndex(r.obj);t.topDict=l;t.globalSubrIndex=i.obj;this.parsePrivateDict(t.topDict);t.isCIDFont=l.hasName("ROS");const f=l.getByName("CharStrings"),c=this.parseIndex(f).obj;t.charStringCount=c.count;const h=l.getByName("FontMatrix");h&&(e.fontMatrix=h);let u=l.getByName("FontBBox");const m=e.bbox?.some(e=>0!==e)?recoverSigned16BitBBox(e.bbox):null,p=u?.slice(0,2).some(looksLikeUnsigned16BitNegative),d=u?.some(looksLikeUnsigned16BitNegative);if(u?.every(e=>0===e)&&m){u=m;l.setByName("FontBBox",u)}else if(d){const t=recoverSigned16BitBBox(u),a=m&&e.bbox.some(e=>e<0)&&!e.bbox.some(looksLikeUnsigned16BitNegative)&&isArrayEqual(t,m);if(a||p){u=a?t:recoverSigned16BitBBox(u,!0);l.setByName("FontBBox",u)}}if(u?.some(e=>0!==e)){e.ascent=Math.max(u[3],u[1]);e.descent=Math.min(u[1],u[3]);e.ascentScaled=!0}let g,b;if(t.isCIDFont){const e=this.parseIndex(l.getByName("FDArray")).obj;let a=e.count;if(a>256){warn(`CFFParser.parse: too many FDArray entries (${a}).`);a=256}for(let n=0;n<a;++n){const a=e.get(n),s=this.createDict(CFFTopDict,this.parseDict(a),t.strings);this.parsePrivateDict(s);t.fdArray.push(s)}b=null;g=this.parseCharsets(l.getByName("charset"),c.count,t.strings,!0);t.fdSelect=this.parseFDSelect(l.getByName("FDSelect"),c.count)}else{g=this.parseCharsets(l.getByName("charset"),c.count,t.strings,!1);b=this.parseEncoding(l.getByName("Encoding"),e,t.strings,g.charset)}t.charset=g;t.encoding=b;const w=this.parseCharStrings({charStrings:c,localSubrIndex:l.privateDict.subrsIndex,globalSubrIndex:i.obj,fdSelect:t.fdSelect,fdArray:t.fdArray,privateDict:l.privateDict});t.charStrings=w.charStrings;t.seacs=w.seacs;t.widths=w.widths;return t}parseHeader(){let e=this.bytes;const t=e.length;let a=0;for(;a<t&&1!==e[a];)++a;if(a>=t)throw new FormatError("Invalid CFF header");if(0!==a){info("cff data is shifted");e=e.subarray(a);this.bytes=e}const n=e[0],s=e[1],r=e[2],i=e[3];return{obj:new CFFHeader(n,s,r,i),endPos:r}}parseDict(e){const t=new DataView(e.buffer,e.byteOffset,e.bytesLength);let a=0;function parseOperand(){let n=e[a++];if(30===n)return function parseFloatOperand(){let t="";const n=15,s=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"],r=e.length;for(;a<r;){const r=e[a++],i=r>>4,o=15&r;if(i===n)break;t+=s[i];if(o===n)break;t+=s[o]}return parseFloat(t)}();if(28===n){n=t.getInt16(a);a+=2;return n}if(29===n){n=t.getInt32(a);a+=4;return n}if(n>=32&&n<=246)return n-139;if(n>=247&&n<=250)return 256*(n-247)+e[a++]+108;if(n>=251&&n<=254)return-256*(n-251)-e[a++]-108;warn(`CFFParser.parseDict: "${n}" is a reserved command.`);return NaN}let n=[];const s=[];a=0;const r=e.length;for(;a<r;){let t=e[a];if(t<=21){12===t&&(t=t<<8|e[++a]);s.push([t,n]);n=[];++a}else n.push(parseOperand())}return s}parseIndex(e){const t=new CFFIndex,a=this.bytes,n=a[e++]<<8|a[e++],s=[];let r,i,o=e;if(0!==n){const t=a[e++];if(t<1||t>4)throw new FormatError(`Invalid CFF INDEX offset size: ${t}`);const l=e+(n+1)*t-1,f=a.length;let c=l;for(r=0,i=n+1;r<i;++r){let n=0;for(let s=0;s<t;++s)n=n<<8|a[e++];c=MathClamp(l+n,c,f);s.push(c)}o=s[n]}for(r=0,i=s.length-1;r<i;++r){const e=s[r],n=s[r+1];t.add(a.subarray(e,n))}return{obj:t,endPos:o}}parseNameIndex(e){const t=[];for(let a=0,n=e.count;a<n;++a){const n=e.get(a);t.push(bytesToString(n))}return t}parseStringIndex(e){const t=new CFFStrings;for(let a=0,n=e.count;a<n;++a){const n=e.get(a);t.add(bytesToString(n))}return t}createDict(e,t,a){const n=new e(a);for(const[e,a]of t)n.setByKey(e,a);return n}parseCharString(e,t,a,n){if(!t||e.callDepth>10)return!1;const s=new DataView(t.buffer,t.byteOffset,t.bytesLength);let r=e.stackSize;const i=e.stack;let o=t.length;for(let l=0;l<o;){const f=t[l++];let c=null;if(12===f){const e=t[l++];if(0===e){t[l-2]=139;t[l-1]=22;r=0}else c=Mn[e]}else if(28===f){i[r]=s.getInt16(l);l+=2;r++}else if(14===f){if(r>=4){r-=4;if(this.seacAnalysisEnabled){e.seac=i.slice(r,r+4);return!1}}c=Hn[f]}else if(f>=32&&f<=246){i[r]=f-139;r++}else if(f>=247&&f<=254){i[r]=f<251?(f-247<<8)+t[l]+108:-(f-251<<8)-t[l]-108;l++;r++}else if(255===f){i[r]=s.getInt32(l)/65536;l+=4;r++}else if(19===f||20===f){e.hints+=r>>1;if(0===e.hints){t.copyWithin(l-1,l,-1);l-=1;o-=1;continue}l+=e.hints+7>>3;r%=2;c=Hn[f]}else{if(10===f||29===f){const t=10===f?a:n;if(!t){c=Hn[f];warn("Missing subrsIndex for "+c.id);return!1}let s=32768;t.count<1240?s=107:t.count<33900&&(s=1131);const o=i[--r]+s;if(o<0||o>=t.count||isNaN(o)){c=Hn[f];warn("Out of bounds subrIndex for "+c.id);return!1}e.stackSize=r;e.callDepth++;if(!this.parseCharString(e,t.get(o),a,n))return!1;e.callDepth--;r=e.stackSize;continue}if(11===f){e.stackSize=r;return!0}if(0===f&&l===t.length){t[l-1]=14;c=Hn[14]}else{if(9===f){t.copyWithin(l-1,l,-1);l-=1;o-=1;continue}c=Hn[f]}}if(c){if(c.stem){e.hints+=r>>1;if(3===f||23===f)e.hasVStems=!0;else if(e.hasVStems&&(1===f||18===f)){warn("CFF stem hints are in wrong order");t[l-1]=1===f?3:23}}if(r<c.min){warn("Not enough parameters for "+c.id+"; actual: "+r+", expected: "+c.min);if(0===r){t[l-1]=14;return!0}return!1}if(e.firstStackClearing&&c.stackClearing){e.firstStackClearing=!1;r-=c.min;r>=2&&c.stem?r%=2:r>1&&warn("Found too many parameters for stack-clearing command");r>0&&(e.width=i[r-1])}if("stackDelta"in c){"stackFn"in c&&c.stackFn(i,r);r+=c.stackDelta}else(c.stackClearing||c.resetStack)&&(r=0)}}o<t.length&&t.fill(14,o);e.stackSize=r;return!0}parseCharStrings({charStrings:e,localSubrIndex:t,globalSubrIndex:a,fdSelect:n,fdArray:s,privateDict:r}){const i=new Map,o=[],l=e.count;for(let f=0;f<l;f++){const l=e.get(f),c={callDepth:0,stackSize:0,stack:[],hints:0,firstStackClearing:!0,seac:null,width:null,hasVStems:!1};let h=!0,u=null,m=r;if(n&&s.length){const e=n.getFDIndex(f);if(-1===e){warn("Glyph index is not in fd select.");h=!1}if(e>=s.length){warn("Invalid fd index for glyph index.");h=!1}if(h){m=s[e].privateDict;u=m.subrsIndex}}else t&&(u=t);h&&=this.parseCharString(c,l,u,a);if(null!==c.width){const e=m.getByName("nominalWidthX");o[f]=e+c.width}else{const e=m.getByName("defaultWidthX");o[f]=e}null!==c.seac&&i.set(f,c.seac);h||e.set(f,new Uint8Array([14]))}return{charStrings:e,seacs:i,widths:o}}emptyPrivateDictionary(e){const t=this.createDict(CFFPrivateDict,[],e.strings);e.setByKey(18,[0,0]);e.privateDict=t}parsePrivateDict(e){if(!e.hasName("Private")){this.emptyPrivateDictionary(e);return}const t=e.getByName("Private");if(!Array.isArray(t)||2!==t.length){e.removeByName("Private");return}const a=t[0],n=t[1];if(0===a||n>=this.bytes.length){this.emptyPrivateDictionary(e);return}if(n+a>this.bytes.length)throw new FormatError("CFF Private DICT extends past end of font");const s=n+a,r=this.bytes.subarray(n,s),i=this.parseDict(r),o=this.createDict(CFFPrivateDict,i,e.strings);e.privateDict=o;const l=o.getByName("BlueScale"),f=o.getByName("BlueShift"),c=o.getByName("BlueFuzz"),h=o.getByName("ExpansionFactor");if(0===l&&0===f&&0===c&&0===h){o.setByName("BlueScale",Dn);o.setByName("BlueShift",7);o.setByName("BlueFuzz",1)}0===h&&o.setByName("ExpansionFactor",.06);if(l>0){let e=0;for(const t of[o.getByName("BlueValues"),o.getByName("OtherBlues")])if(t)for(let a=1;a<t.length;a+=2)t[a]>e&&(e=t[a]);if(e>0){const t=1e5,a=.5/e,n=MathClamp(l,a<=Dn?Math.ceil(a*t)/t:-1/0,Math.floor(t/e)/t);n!==l&&o.setByName("BlueScale",n)}}if(!o.getByName("Subrs"))return;const u=o.getByName("Subrs"),m=n+u;if(0===u||m>=this.bytes.length){this.emptyPrivateDictionary(e);return}const p=this.parseIndex(m);o.subrsIndex=p.obj}parseCharsets(e,t,a,n){if(0===e)return new CFFCharset(!0,En.ISO_ADOBE,Fn);if(1===e)return new CFFCharset(!0,En.EXPERT,Tn);if(2===e)return new CFFCharset(!0,En.EXPERT_SUBSET,Rn);const{bytes:s}=this,r=s[e++],i=[n?0:".notdef"];let o,l,f;t-=1;switch(r){case 0:for(f=0;f<t;f++){o=s[e++]<<8|s[e++];i.push(n?o:a.get(o))}break;case 1:for(;i.length<=t;){o=s[e++]<<8|s[e++];l=s[e++];for(f=0;f<=l;f++)i.push(n?o++:a.get(o++))}break;case 2:for(;i.length<=t;){o=s[e++]<<8|s[e++];l=s[e++]<<8|s[e++];for(f=0;f<=l;f++)i.push(n?o++:a.get(o++))}break;default:throw new FormatError("Unknown charset format")}return new CFFCharset(!1,r,i)}parseEncoding(e,t,a,n){const s=Object.create(null),r=this.bytes;let i,o,l,f=!1,c=null;if(0===e||1===e){f=!0;i=e;const t=e?cn:mn;for(o=0,l=n.length;o<l;o++){const e=t.indexOf(n[o]);-1!==e&&(s[e]=o)}}else{const t=e;i=r[e++];switch(127&i){case 0:const t=r[e++];for(o=1;o<=t;o++)s[r[e++]]=o;break;case 1:const a=r[e++];let n=1;for(o=0;o<a;o++){const t=r[e++],a=r[e++];for(let e=t;e<=t+a;e++)s[e]=n++}break;default:throw new FormatError(`Unknown encoding format: ${i} in CFF`)}const l=e;if(128&i){r[t]&=127;!function readSupplement(){const t=r[e++];for(o=0;o<t;o++){const t=r[e++],i=(r[e++]<<8)+(255&r[e++]);s[t]=n.indexOf(a.get(i))}}()}c=r.subarray(t,l)}i&=127;return new CFFEncoding(f,i,s,c)}parseFDSelect(e,t){const a=this.bytes,n=a[e++],s=[];let r;switch(n){case 0:for(r=0;r<t;++r){const t=a[e++];s.push(t)}break;case 3:const i=a[e++]<<8|a[e++];for(r=0;r<i;++r){let n=a[e++]<<8|a[e++];if(0===r&&0!==n){warn("parseFDSelect: The first range must have a first GID of 0 -- trying to recover.");n=0}const i=a[e++],o=a[e]<<8|a[e+1];if(o-n>t-s.length)throw new FormatError("parseFDSelect: Invalid font data.");for(let e=n;e<o;++e)s.push(i)}e+=2;break;default:throw new FormatError(`parseFDSelect: Unknown format "${n}".`)}if(s.length!==t)throw new FormatError("parseFDSelect: Invalid font data.");return new CFFFDSelect(n,s)}}class CFF{header=null;names=[];topDict=null;strings=new CFFStrings;globalSubrIndex=null;encoding=null;charset=null;charStrings=null;fdArray=[];fdSelect=null;isCIDFont=!1;charStringCount=0;constructor(e=0){this.rawFileLength=e}duplicateFirstGlyph(){if(this.charStrings.count>=65535){warn("Not enough space in charstrings to duplicate first glyph.");return}const e=this.charStrings.get(0);this.charStrings.add(e);this.isCIDFont&&this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0])}hasGlyphId(e){if(e<0||e>=this.charStrings.count)return!1;return this.charStrings.get(e).length>0}}class CFFHeader{constructor(e,t,a,n){this.major=e;this.minor=t;this.hdrSize=a;this.offSize=n}}class CFFStrings{strings=[];get(e){return e>=0&&e<=390?On[e]:e-Bn<=this.strings.length?this.strings[e-Bn]:On[0]}getSID(e){let t=On.indexOf(e);if(-1!==t)return t;t=this.strings.indexOf(e);return-1!==t?t+Bn:-1}add(e){this.strings.push(e)}get count(){return this.strings.length}}class CFFIndex{objects=[];length=0;add(e){this.length+=e.length;this.objects.push(e)}set(e,t){this.length+=t.length-this.objects[e].length;this.objects[e]=t}get(e){return this.objects[e]}get count(){return this.objects.length}}class CFFDict{values=new Map;constructor(e,t){this.keyToNameMap=e.keyToNameMap;this.nameToKeyMap=e.nameToKeyMap;this.defaults=e.defaults;this.types=e.types;this.opcodes=e.opcodes;this.order=e.order;this.strings=t}setByKey(e,t){if(!this.keyToNameMap.has(e))return!1;if(0===t.length)return!0;for(const a of t)if(isNaN(a)){warn(`Invalid CFFDict value: "${t}" for key "${e}".`);return!0}const a=this.types.get(e);"num"!==a&&"sid"!==a&&"offset"!==a||(t=t[0]);this.values.set(e,t);return!0}setByName(e,t){if(!this.nameToKeyMap.has(e))throw new FormatError(`Invalid dictionary name "${e}"`);const a=this.nameToKeyMap.get(e);this.values.set(a,t)}hasName(e){const t=this.nameToKeyMap.get(e);return this.values.has(t)}getByName(e){if(!this.nameToKeyMap.has(e))throw new FormatError(`Invalid dictionary name ${e}"`);const t=this.nameToKeyMap.get(e);return this.values.has(t)?this.values.get(t):this.defaults.get(t)}removeByName(e){const t=this.nameToKeyMap.get(e);this.values.delete(t)}static createTables(e){const t={keyToNameMap:new Map,nameToKeyMap:new Map,defaults:new Map,types:new Map,opcodes:new Map,order:[]};for(const a of e){const e=Array.isArray(a[0])?(a[0][0]<<8)+a[0][1]:a[0];t.keyToNameMap.set(e,a[1]);t.nameToKeyMap.set(a[1],e);t.types.set(e,a[2]);t.defaults.set(e,a[3]);t.opcodes.set(e,Array.isArray(a[0])?a[0]:[a[0]]);t.order.push(e)}return t}}const Nn=[[[12,30],"ROS",["sid","sid","num"],null],[[12,20],"SyntheticBase","num",null],[0,"version","sid",null],[1,"Notice","sid",null],[[12,0],"Copyright","sid",null],[2,"FullName","sid",null],[3,"FamilyName","sid",null],[4,"Weight","sid",null],[[12,1],"isFixedPitch","num",0],[[12,2],"ItalicAngle","num",0],[[12,3],"UnderlinePosition","num",-100],[[12,4],"UnderlineThickness","num",50],[[12,5],"PaintType","num",0],[[12,6],"CharstringType","num",2],[[12,7],"FontMatrix",["num","num","num","num","num","num"],[.001,0,0,.001,0,0]],[13,"UniqueID","num",null],[5,"FontBBox",["num","num","num","num"],[0,0,0,0]],[[12,8],"StrokeWidth","num",0],[14,"XUID","array",null],[15,"charset","offset",0],[16,"Encoding","offset",0],[17,"CharStrings","offset",0],[18,"Private",["offset","offset"],null],[[12,21],"PostScript","sid",null],[[12,22],"BaseFontName","sid",null],[[12,23],"BaseFontBlend","delta",null],[[12,31],"CIDFontVersion","num",0],[[12,32],"CIDFontRevision","num",0],[[12,33],"CIDFontType","num",0],[[12,34],"CIDCount","num",8720],[[12,35],"UIDBase","num",null],[[12,37],"FDSelect","offset",null],[[12,36],"FDArray","offset",null],[[12,38],"FontName","sid",null]];class CFFTopDict extends CFFDict{static get tables(){return shadow(this,"tables",this.createTables(Nn))}privateDict=null;constructor(e){super(CFFTopDict.tables,e)}}const Pn=[[6,"BlueValues","delta",null],[7,"OtherBlues","delta",null],[8,"FamilyBlues","delta",null],[9,"FamilyOtherBlues","delta",null],[[12,9],"BlueScale","num",Dn],[[12,10],"BlueShift","num",7],[[12,11],"BlueFuzz","num",1],[10,"StdHW","num",null],[11,"StdVW","num",null],[[12,12],"StemSnapH","delta",null],[[12,13],"StemSnapV","delta",null],[[12,14],"ForceBold","num",0],[[12,17],"LanguageGroup","num",0],[[12,18],"ExpansionFactor","num",.06],[[12,19],"initialRandomSeed","num",0],[20,"defaultWidthX","num",0],[21,"nominalWidthX","num",0],[19,"Subrs","offset",null]];class CFFPrivateDict extends CFFDict{static get tables(){return shadow(this,"tables",this.createTables(Pn))}subrsIndex=null;constructor(e){super(CFFPrivateDict.tables,e)}}const En={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2};class CFFCharset{constructor(e,t,a){this.predefined=e;this.format=t;this.charset=a}}class CFFEncoding{constructor(e,t,a,n){this.predefined=e;this.format=t;this.encoding=a;this.raw=n}}class CFFFDSelect{constructor(e,t){this.format=e;this.fdSelect=t}getFDIndex(e){return e<0||e>=this.fdSelect.length?-1:this.fdSelect[e]}}class CFFOffsetTracker{#de=new Map;isTracking(e){return this.#de.has(e)}track(e,t){if(this.#de.has(e))throw new FormatError(`Already tracking location of ${e}`);this.#de.set(e,t)}offset(e){for(const[t,a]of this.#de)this.#de.set(t,a+e)}setEntryLocation(e,t,a){if(!this.#de.has(e))throw new FormatError(`Not tracking location of ${e}`);const n=a.data,s=this.#de.get(e);for(let e=0,a=t.length;e<a;++e){const a=5*e+s,r=a+1,i=a+2,o=a+3,l=a+4;if(29!==n[a]||0!==n[r]||0!==n[i]||0!==n[o]||0!==n[l])throw new FormatError("writing to an offset that is not empty");const f=t[e];n[a]=29;n[r]=f>>24&255;n[i]=f>>16&255;n[o]=f>>8&255;n[l]=255&f}}}class CFFCompiler{constructor(e){this.cff=e}compile(){const e=this.cff,t=new DataBuilder({minLength:e.rawFileLength}),a=this.compileHeader(e.header);t.setArray(a);const n=this.compileNameIndex(e.names);t.setArray(n);if(e.isCIDFont&&e.topDict.hasName("FontMatrix")){const t=e.topDict.getByName("FontMatrix");e.topDict.removeByName("FontMatrix");for(const a of e.fdArray){let e=t.slice(0);a.hasName("FontMatrix")&&(e=Util.transform(e,a.getByName("FontMatrix")));a.setByName("FontMatrix",e)}}const s=e.topDict.getByName("XUID");s?.length>16&&e.topDict.removeByName("XUID");e.topDict.setByName("charset",0);let r=this.compileTopDicts([e.topDict],t.length,e.isCIDFont);t.setArray(r.output);const i=r.trackers[0],o=this.compileStringIndex(e.strings.strings);t.setArray(o);const l=this.compileIndex(e.globalSubrIndex);t.setArray(l);if(e.encoding&&e.topDict.hasName("Encoding"))if(e.encoding.predefined)i.setEntryLocation("Encoding",[e.encoding.format],t);else{const a=this.compileEncoding(e.encoding);i.setEntryLocation("Encoding",[t.length],t);t.setArray(a)}const f=this.compileCharset(e.charset,e.charStrings.count,e.strings,e.isCIDFont);i.setEntryLocation("charset",[t.length],t);t.setArray(f);const c=this.compileCharStrings(e.charStrings);i.setEntryLocation("CharStrings",[t.length],t);t.setArray(c);if(e.isCIDFont){i.setEntryLocation("FDSelect",[t.length],t);const a=this.compileFDSelect(e.fdSelect);t.setArray(a);r=this.compileTopDicts(e.fdArray,t.length,!0);i.setEntryLocation("FDArray",[t.length],t);t.setArray(r.output);const n=r.trackers;this.compilePrivateDicts(e.fdArray,n,t)}this.compilePrivateDicts([e.topDict],[i],t);t.setArray([0]);return t.data}encodeNumber(e){return Number.isInteger(e)?this.encodeInteger(e):this.encodeFloat(e)}static get EncodeFloatRegExp(){return shadow(this,"EncodeFloatRegExp",/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/)}encodeFloat(e){let t=e.toString();const a=CFFCompiler.EncodeFloatRegExp.exec(t);if(a){const n=parseFloat("1e"+((a[2]?+a[2]:0)+a[1].length));t=(Math.round(e*n)/n).toString()}let n,s,r="";for(n=0,s=t.length;n<s;++n){const e=t[n];r+="e"===e?"-"===t[++n]?"c":"b":"."===e?"a":"-"===e?"e":e}r+=1&r.length?"f":"ff";const i=[30];for(n=0,s=r.length;n<s;n+=2)i.push(parseInt(r.substring(n,n+2),16));return i}encodeInteger(e){let t;t=e>=-107&&e<=107?[e+139]:e>=108&&e<=1131?[247+((e-=108)>>8),255&e]:e>=-1131&&e<=-108?[251+((e=-e-108)>>8),255&e]:e>=-32768&&e<=32767?[28,e>>8&255,255&e]:[29,e>>24&255,e>>16&255,e>>8&255,255&e];return t}compileHeader(e){return[e.major,e.minor,4,e.offSize]}compileNameIndex(e){const t=new CFFIndex;for(const a of e){const e=Math.min(a.length,127);let n=new Array(e);for(let t=0;t<e;t++){let e=a[t];(e<"!"||e>"~"||"["===e||"]"===e||"("===e||")"===e||"{"===e||"}"===e||"<"===e||">"===e||"/"===e||"%"===e)&&(e="_");n[t]=e}n=n.join("");""===n&&(n="Bad_Font_Name");t.add(stringToBytes(n))}return this.compileIndex(t)}compileTopDicts(e,t,a){const n=[];let s=new CFFIndex;for(const r of e){if(a){r.removeByName("CIDFontVersion");r.removeByName("CIDFontRevision");r.removeByName("CIDFontType");r.removeByName("CIDCount");r.removeByName("UIDBase")}const e=new CFFOffsetTracker,i=this.compileDict(r,e);n.push(e);s.add(i);e.offset(t)}s=this.compileIndex(s,n);return{trackers:n,output:s}}compilePrivateDicts(e,t,a){for(let n=0,s=e.length;n<s;++n){const s=e[n],r=s.privateDict;if(!r||!s.hasName("Private"))throw new FormatError("There must be a private dictionary.");const i=new CFFOffsetTracker,o=this.compileDict(r,i);let l=a.length;i.offset(l);o.length||(l=0);t[n].setEntryLocation("Private",[o.length,l],a);a.setArray(o);if(r.subrsIndex&&r.hasName("Subrs")){const e=this.compileIndex(r.subrsIndex);i.setEntryLocation("Subrs",[o.length],a);a.setArray(e)}}}compileDict(e,t){const a=[];for(const n of e.order){if(!e.values.has(n))continue;let s=e.values.get(n),r=e.types.get(n);Array.isArray(r)||(r=[r]);Array.isArray(s)||(s=[s]);if(0!==s.length){for(let i=0,o=r.length;i<o;++i){const o=r[i],l=s[i];switch(o){case"num":case"sid":a.push(...this.encodeNumber(l));break;case"offset":const r=e.keyToNameMap.get(n);t.isTracking(r)||t.track(r,a.length);a.push(29,0,0,0,0);break;case"array":case"delta":a.push(...this.encodeNumber(l));for(let e=1,t=s.length;e<t;++e)a.push(...this.encodeNumber(s[e]));break;default:throw new FormatError(`Unknown data type of ${o}`)}}a.push(...e.opcodes.get(n))}}return a}compileStringIndex(e){const t=new CFFIndex;for(const a of e)t.add(stringToBytes(a));return this.compileIndex(t)}compileCharStrings(e){const t=new CFFIndex;for(let a=0;a<e.count;a++){const n=e.get(a);0!==n.length?t.add(n):t.add(new Uint8Array([139,14]))}return this.compileIndex(t)}compileCharset(e,t,a,n){let s;const r=t-1;if(n){const e=r-1;s=new Uint8Array([2,0,1,e>>8&255,255&e])}else{s=new Uint8Array(1+2*r);let t=0;const n=e.charset.length;let i=!1;for(let r=1;r<s.length;r+=2){let o=0;if(t<n){const n=e.charset[t++];o=a.getSID(n);if(-1===o){o=0;if(!i){i=!0;warn(`Couldn't find ${n} in CFF strings`)}}}s[r]=o>>8&255;s[r+1]=255&o}}return s}compileEncoding(e){return e.raw}compileFDSelect(e){const t=e.format;let a,n;switch(t){case 0:a=new Uint8Array(1+e.fdSelect.length);a[0]=t;a.set(e.fdSelect,1);break;case 3:const s=0;let r=e.fdSelect[0];const i=[t,0,0,s>>8&255,255&s,r];for(n=1;n<e.fdSelect.length;n++){const t=e.fdSelect[n];if(t!==r){i.push(n>>8&255,255&n,t);r=t}}const o=(i.length-3)/3;i[1]=o>>8&255;i[2]=255&o;i.push(n>>8&255,255&n);a=new Uint8Array(i)}return a}compileIndex(e,t=[]){const a=e.objects,n=a.length;if(0===n)return new Uint8Array(2);let s,r,i=1;for(s=0;s<n;++s)i+=a[s].length;r=i<256?1:i<65536?2:i<16777216?3:4;const o=new Uint8Array(2+r*(n+1)+i);let l=0;o[l++]=n>>8&255;o[l++]=255&n;o[l++]=r;let f=1;for(s=0;s<n+1;s++){if(1===r)o[l++]=255&f;else if(2===r){o[l++]=f>>8&255;o[l++]=255&f}else if(3===r){o[l++]=f>>16&255;o[l++]=f>>8&255;o[l++]=255&f}else{o[l++]=f>>>24&255;o[l++]=f>>16&255;o[l++]=f>>8&255;o[l++]=255&f}a[s]&&(f+=a[s].length)}for(s=0;s<n;s++){t[s]?.offset(l);o.set(a[s],l);l+=a[s].length}return o}}const _n=getLookupTableFactory(function(e){e["Times-Roman"]="Times-Roman";e.Helvetica="Helvetica";e.Courier="Courier";e.Symbol="Symbol";e["Times-Bold"]="Times-Bold";e["Helvetica-Bold"]="Helvetica-Bold";e["Courier-Bold"]="Courier-Bold";e.ZapfDingbats="ZapfDingbats";e["Times-Italic"]="Times-Italic";e["Helvetica-Oblique"]="Helvetica-Oblique";e["Courier-Oblique"]="Courier-Oblique";e["Times-BoldItalic"]="Times-BoldItalic";e["Helvetica-BoldOblique"]="Helvetica-BoldOblique";e["Courier-BoldOblique"]="Courier-BoldOblique";e.ArialNarrow="Helvetica";e["ArialNarrow-Bold"]="Helvetica-Bold";e["ArialNarrow-BoldItalic"]="Helvetica-BoldOblique";e["ArialNarrow-Italic"]="Helvetica-Oblique";e.ArialBlack="Helvetica";e["ArialBlack-Bold"]="Helvetica-Bold";e["ArialBlack-BoldItalic"]="Helvetica-BoldOblique";e["ArialBlack-Italic"]="Helvetica-Oblique";e["Arial-Black"]="Helvetica";e["Arial-Black-Bold"]="Helvetica-Bold";e["Arial-Black-BoldItalic"]="Helvetica-BoldOblique";e["Arial-Black-Italic"]="Helvetica-Oblique";e.Arial="Helvetica";e["Arial-Bold"]="Helvetica-Bold";e["Arial-BoldItalic"]="Helvetica-BoldOblique";e["Arial-Italic"]="Helvetica-Oblique";e.ArialMT="Helvetica";e["Arial-BoldItalicMT"]="Helvetica-BoldOblique";e["Arial-BoldMT"]="Helvetica-Bold";e["Arial-ItalicMT"]="Helvetica-Oblique";e["Arial-BoldItalicMT-BoldItalic"]="Helvetica-BoldOblique";e["Arial-BoldMT-Bold"]="Helvetica-Bold";e["Arial-ItalicMT-Italic"]="Helvetica-Oblique";e.ArialUnicodeMS="Helvetica";e["ArialUnicodeMS-Bold"]="Helvetica-Bold";e["ArialUnicodeMS-BoldItalic"]="Helvetica-BoldOblique";e["ArialUnicodeMS-Italic"]="Helvetica-Oblique";e["Courier-BoldItalic"]="Courier-BoldOblique";e["Courier-Italic"]="Courier-Oblique";e.CourierNew="Courier";e["CourierNew-Bold"]="Courier-Bold";e["CourierNew-BoldItalic"]="Courier-BoldOblique";e["CourierNew-Italic"]="Courier-Oblique";e["CourierNewPS-BoldItalicMT"]="Courier-BoldOblique";e["CourierNewPS-BoldMT"]="Courier-Bold";e["CourierNewPS-ItalicMT"]="Courier-Oblique";e.CourierNewPSMT="Courier";e["Helvetica-BoldItalic"]="Helvetica-BoldOblique";e["Helvetica-Italic"]="Helvetica-Oblique";e["HelveticaLTStd-Bold"]="Helvetica-Bold";e["Symbol-Bold"]="Symbol";e["Symbol-BoldItalic"]="Symbol";e["Symbol-Italic"]="Symbol";e.TimesNewRoman="Times-Roman";e["TimesNewRoman-Bold"]="Times-Bold";e["TimesNewRoman-BoldItalic"]="Times-BoldItalic";e["TimesNewRoman-Italic"]="Times-Italic";e.TimesNewRomanPS="Times-Roman";e["TimesNewRomanPS-Bold"]="Times-Bold";e["TimesNewRomanPS-BoldItalic"]="Times-BoldItalic";e["TimesNewRomanPS-BoldItalicMT"]="Times-BoldItalic";e["TimesNewRomanPS-BoldMT"]="Times-Bold";e["TimesNewRomanPS-Italic"]="Times-Italic";e["TimesNewRomanPS-ItalicMT"]="Times-Italic";e.TimesNewRomanPSMT="Times-Roman";e["TimesNewRomanPSMT-Bold"]="Times-Bold";e["TimesNewRomanPSMT-BoldItalic"]="Times-BoldItalic";e["TimesNewRomanPSMT-Italic"]="Times-Italic"}),zn=getLookupTableFactory(function(e){e.Courier="FoxitFixed.pfb";e["Courier-Bold"]="FoxitFixedBold.pfb";e["Courier-BoldOblique"]="FoxitFixedBoldItalic.pfb";e["Courier-Oblique"]="FoxitFixedItalic.pfb";e.Helvetica="LiberationSans-Regular.ttf";e["Helvetica-Bold"]="LiberationSans-Bold.ttf";e["Helvetica-BoldOblique"]="LiberationSans-BoldItalic.ttf";e["Helvetica-Oblique"]="LiberationSans-Italic.ttf";e["Times-Roman"]="FoxitSerif.pfb";e["Times-Bold"]="FoxitSerifBold.pfb";e["Times-BoldItalic"]="FoxitSerifBoldItalic.pfb";e["Times-Italic"]="FoxitSerifItalic.pfb";e.Symbol="FoxitSymbol.pfb";e.ZapfDingbats="FoxitDingbats.pfb";e["LiberationSans-Regular"]="LiberationSans-Regular.ttf";e["LiberationSans-Bold"]="LiberationSans-Bold.ttf";e["LiberationSans-Italic"]="LiberationSans-Italic.ttf";e["LiberationSans-BoldItalic"]="LiberationSans-BoldItalic.ttf"}),Ln=getLookupTableFactory(function(e){e.Calibri="Helvetica";e["Calibri-Bold"]="Helvetica-Bold";e["Calibri-BoldItalic"]="Helvetica-BoldOblique";e["Calibri-Italic"]="Helvetica-Oblique";e.CenturyGothic="Helvetica";e["CenturyGothic-Bold"]="Helvetica-Bold";e["CenturyGothic-BoldItalic"]="Helvetica-BoldOblique";e["CenturyGothic-Italic"]="Helvetica-Oblique";e.ComicSansMS="Comic Sans MS";e["ComicSansMS-Bold"]="Comic Sans MS-Bold";e["ComicSansMS-BoldItalic"]="Comic Sans MS-BoldItalic";e["ComicSansMS-Italic"]="Comic Sans MS-Italic";e.GillSansMT="Helvetica";e["GillSansMT-Bold"]="Helvetica-Bold";e["GillSansMT-BoldItalic"]="Helvetica-BoldOblique";e["GillSansMT-Italic"]="Helvetica-Oblique";e.Impact="Helvetica";e["ItcSymbol-Bold"]="Helvetica-Bold";e["ItcSymbol-BoldItalic"]="Helvetica-BoldOblique";e["ItcSymbol-Book"]="Helvetica";e["ItcSymbol-BookItalic"]="Helvetica-Oblique";e["ItcSymbol-Medium"]="Helvetica";e["ItcSymbol-MediumItalic"]="Helvetica-Oblique";e.LucidaConsole="Courier";e["LucidaConsole-Bold"]="Courier-Bold";e["LucidaConsole-BoldItalic"]="Courier-BoldOblique";e["LucidaConsole-Italic"]="Courier-Oblique";e["LucidaSans-Demi"]="Helvetica-Bold";e["MS-Gothic"]="MS Gothic";e["MS-Gothic-Bold"]="MS Gothic-Bold";e["MS-Gothic-BoldItalic"]="MS Gothic-BoldItalic";e["MS-Gothic-Italic"]="MS Gothic-Italic";e["MS-Mincho"]="MS Mincho";e["MS-Mincho-Bold"]="MS Mincho-Bold";e["MS-Mincho-BoldItalic"]="MS Mincho-BoldItalic";e["MS-Mincho-Italic"]="MS Mincho-Italic";e["MS-PGothic"]="MS PGothic";e["MS-PGothic-Bold"]="MS PGothic-Bold";e["MS-PGothic-BoldItalic"]="MS PGothic-BoldItalic";e["MS-PGothic-Italic"]="MS PGothic-Italic";e["MS-PMincho"]="MS PMincho";e["MS-PMincho-Bold"]="MS PMincho-Bold";e["MS-PMincho-BoldItalic"]="MS PMincho-BoldItalic";e["MS-PMincho-Italic"]="MS PMincho-Italic";e.NuptialScript="Times-Italic";e.SegoeUISymbol="Helvetica";e.TrebuchetMS="Helvetica";e["TrebuchetMS-Bold"]="Helvetica-Bold";e["TrebuchetMS-BoldItalic"]="Helvetica-BoldOblique";e["TrebuchetMS-Italic"]="Helvetica-Oblique"}),Un=getLookupTableFactory(function(e){e["Adobe Jenson"]=!0;e["Adobe Text"]=!0;e.Albertus=!0;e.Aldus=!0;e.Alexandria=!0;e.Algerian=!0;e["American Typewriter"]=!0;e.Antiqua=!0;e.Apex=!0;e.Arno=!0;e.Aster=!0;e.Aurora=!0;e.Baskerville=!0;e.Bell=!0;e.Bembo=!0;e["Bembo Schoolbook"]=!0;e.Benguiat=!0;e["Berkeley Old Style"]=!0;e["Bernhard Modern"]=!0;e["Berthold City"]=!0;e.Bodoni=!0;e["Bauer Bodoni"]=!0;e["Book Antiqua"]=!0;e.Bookman=!0;e["Bordeaux Roman"]=!0;e["Californian FB"]=!0;e.Calisto=!0;e.Calvert=!0;e.Capitals=!0;e.Cambria=!0;e.Cartier=!0;e.Caslon=!0;e.Catull=!0;e.Centaur=!0;e["Century Old Style"]=!0;e["Century Schoolbook"]=!0;e.Chaparral=!0;e["Charis SIL"]=!0;e.Cheltenham=!0;e["Cholla Slab"]=!0;e.Clarendon=!0;e.Clearface=!0;e.Cochin=!0;e.Colonna=!0;e["Computer Modern"]=!0;e["Concrete Roman"]=!0;e.Constantia=!0;e["Cooper Black"]=!0;e.Corona=!0;e.Ecotype=!0;e.Egyptienne=!0;e.Elephant=!0;e.Excelsior=!0;e.Fairfield=!0;e["FF Scala"]=!0;e.Folkard=!0;e.Footlight=!0;e.FreeSerif=!0;e["Friz Quadrata"]=!0;e.Garamond=!0;e.Gentium=!0;e.Georgia=!0;e.Gloucester=!0;e["Goudy Old Style"]=!0;e["Goudy Schoolbook"]=!0;e["Goudy Pro Font"]=!0;e.Granjon=!0;e["Guardian Egyptian"]=!0;e.Heather=!0;e.Hercules=!0;e["High Tower Text"]=!0;e.Hiroshige=!0;e["Hoefler Text"]=!0;e["Humana Serif"]=!0;e.Imprint=!0;e["Ionic No. 5"]=!0;e.Janson=!0;e.Joanna=!0;e.Korinna=!0;e.Lexicon=!0;e.LiberationSerif=!0;e["Liberation Serif"]=!0;e["Linux Libertine"]=!0;e.Literaturnaya=!0;e.Lucida=!0;e["Lucida Bright"]=!0;e.Melior=!0;e.Memphis=!0;e.Miller=!0;e.Minion=!0;e.Modern=!0;e["Mona Lisa"]=!0;e["Mrs Eaves"]=!0;e["MS Serif"]=!0;e["Museo Slab"]=!0;e["New York"]=!0;e["Nimbus Roman"]=!0;e["NPS Rawlinson Roadway"]=!0;e.NuptialScript=!0;e.Palatino=!0;e.Perpetua=!0;e.Plantin=!0;e["Plantin Schoolbook"]=!0;e.Playbill=!0;e["Poor Richard"]=!0;e["Rawlinson Roadway"]=!0;e.Renault=!0;e.Requiem=!0;e.Rockwell=!0;e.Roman=!0;e["Rotis Serif"]=!0;e.Sabon=!0;e.Scala=!0;e.Seagull=!0;e.Sistina=!0;e.Souvenir=!0;e.STIX=!0;e["Stone Informal"]=!0;e["Stone Serif"]=!0;e.Sylfaen=!0;e.Times=!0;e.Trajan=!0;e["Trinité"]=!0;e["Trump Mediaeval"]=!0;e.Utopia=!0;e["Vale Type"]=!0;e["Bitstream Vera"]=!0;e["Vera Serif"]=!0;e.Versailles=!0;e.Wanted=!0;e.Weiss=!0;e["Wide Latin"]=!0;e.Windsor=!0;e.XITS=!0}),Wn=getLookupTableFactory(function(e){e.Dingbats=!0;e.Symbol=!0;e.ZapfDingbats=!0;e.Wingdings=!0;e["Wingdings-Bold"]=!0;e["Wingdings-Regular"]=!0}),Xn=getLookupTableFactory(function(e){const t=bn();e[2]=10;for(let a=3;a<Cn.length;a++){const n=t[Cn[a]];void 0!==n&&(e[a]=n)}}),Kn=getLookupTableFactory(function(e){e[2]=10;e[3]=32;e[4]=33;e[5]=34;e[6]=35;e[7]=36;e[8]=37;e[9]=38;e[10]=39;e[11]=40;e[12]=41;e[13]=42;e[14]=43;e[15]=44;e[16]=45;e[17]=46;e[18]=47;e[19]=48;e[20]=49;e[21]=50;e[22]=51;e[23]=52;e[24]=53;e[25]=54;e[26]=55;e[27]=56;e[28]=57;e[29]=58;e[30]=894;e[31]=60;e[32]=61;e[33]=62;e[34]=63;e[35]=64;e[36]=65;e[37]=66;e[38]=67;e[39]=68;e[40]=69;e[41]=70;e[42]=71;e[43]=72;e[44]=73;e[45]=74;e[46]=75;e[47]=76;e[48]=77;e[49]=78;e[50]=79;e[51]=80;e[52]=81;e[53]=82;e[54]=83;e[55]=84;e[56]=85;e[57]=86;e[58]=87;e[59]=88;e[60]=89;e[61]=90;e[62]=91;e[63]=92;e[64]=93;e[65]=94;e[66]=95;e[67]=96;e[68]=97;e[69]=98;e[70]=99;e[71]=100;e[72]=101;e[73]=102;e[74]=103;e[75]=104;e[76]=105;e[77]=106;e[78]=107;e[79]=108;e[80]=109;e[81]=110;e[82]=111;e[83]=112;e[84]=113;e[85]=114;e[86]=115;e[87]=116;e[88]=117;e[89]=118;e[90]=119;e[91]=120;e[92]=121;e[93]=122;e[94]=123;e[95]=124;e[96]=125;e[97]=126;e[98]=196;e[99]=197;e[100]=199;e[101]=201;e[102]=209;e[103]=214;e[104]=220;e[105]=225;e[106]=224;e[107]=226;e[108]=228;e[109]=227;e[110]=229;e[111]=231;e[112]=233;e[113]=232;e[114]=234;e[115]=235;e[116]=237;e[117]=236;e[118]=238;e[119]=239;e[120]=241;e[121]=243;e[122]=242;e[123]=244;e[124]=246;e[125]=245;e[126]=250;e[127]=249;e[128]=251;e[129]=252;e[130]=8224;e[131]=176;e[132]=162;e[133]=163;e[134]=167;e[135]=8226;e[136]=182;e[137]=223;e[138]=174;e[139]=169;e[140]=8482;e[141]=180;e[142]=168;e[143]=8800;e[144]=198;e[145]=216;e[146]=8734;e[147]=177;e[148]=8804;e[149]=8805;e[150]=165;e[151]=181;e[152]=8706;e[153]=8721;e[154]=8719;e[156]=8747;e[157]=170;e[158]=186;e[159]=8486;e[160]=230;e[161]=248;e[162]=191;e[163]=161;e[164]=172;e[165]=8730;e[166]=402;e[167]=8776;e[168]=8710;e[169]=171;e[170]=187;e[171]=8230;e[179]=8220;e[180]=8221;e[181]=8216;e[182]=8217;e[200]=193;e[203]=205;e[207]=211;e[210]=218;e[223]=711;e[224]=321;e[225]=322;e[226]=352;e[227]=353;e[228]=381;e[229]=382;e[233]=221;e[234]=253;e[252]=263;e[253]=268;e[254]=269;e[258]=258;e[260]=260;e[261]=261;e[265]=280;e[266]=281;e[267]=282;e[268]=283;e[269]=313;e[275]=323;e[276]=324;e[278]=328;e[283]=344;e[284]=345;e[285]=346;e[286]=347;e[292]=367;e[295]=377;e[296]=378;e[298]=380;e[305]=963;e[306]=964;e[307]=966;e[308]=8215;e[309]=8252;e[310]=8319;e[311]=8359;e[312]=8592;e[313]=8593;e[337]=9552;e[493]=1039;e[494]=1040;e[570]=1040;e[571]=1041;e[572]=1042;e[573]=1043;e[574]=1044;e[575]=1045;e[576]=1046;e[577]=1047;e[578]=1048;e[579]=1049;e[580]=1050;e[581]=1051;e[582]=1052;e[583]=1053;e[584]=1054;e[585]=1055;e[586]=1056;e[587]=1057;e[588]=1058;e[589]=1059;e[590]=1060;e[591]=1061;e[592]=1062;e[593]=1063;e[594]=1064;e[595]=1065;e[596]=1066;e[597]=1067;e[598]=1068;e[599]=1069;e[600]=1070;e[601]=1071;e[602]=1072;e[603]=1073;e[604]=1074;e[605]=1075;e[606]=1076;e[607]=1077;e[608]=1078;e[609]=1079;e[610]=1080;e[611]=1081;e[612]=1082;e[613]=1083;e[614]=1084;e[615]=1085;e[616]=1086;e[617]=1087;e[618]=1088;e[619]=1089;e[620]=1090;e[621]=1091;e[622]=1092;e[623]=1093;e[624]=1094;e[625]=1095;e[626]=1096;e[627]=1097;e[628]=1098;e[629]=1099;e[630]=1100;e[631]=1101;e[632]=1102;e[633]=1103;e[672]=1488;e[673]=1489;e[674]=1490;e[675]=1491;e[676]=1492;e[677]=1493;e[678]=1494;e[679]=1495;e[680]=1496;e[681]=1497;e[682]=1498;e[683]=1499;e[684]=1500;e[685]=1501;e[686]=1502;e[687]=1503;e[688]=1504;e[689]=1505;e[690]=1506;e[691]=1507;e[692]=1508;e[693]=1509;e[694]=1510;e[695]=1511;e[696]=1512;e[697]=1513;e[698]=1514;e[705]=1524;e[706]=8362;e[710]=64288;e[711]=64298;e[759]=1617;e[761]=1776;e[763]=1778;e[775]=1652;e[777]=1764;e[778]=1780;e[779]=1781;e[780]=1782;e[782]=771;e[783]=64726;e[786]=8363;e[788]=8532;e[790]=768;e[791]=769;e[792]=768;e[795]=803;e[797]=64336;e[798]=64337;e[799]=64342;e[800]=64343;e[801]=64344;e[802]=64345;e[803]=64362;e[804]=64363;e[805]=64364;e[2424]=7821;e[2425]=7822;e[2426]=7823;e[2427]=7824;e[2428]=7825;e[2429]=7826;e[2430]=7827;e[2433]=7682;e[2678]=8045;e[2679]=8046;e[2830]=1552;e[2838]=686;e[2840]=751;e[2842]=753;e[2843]=754;e[2844]=755;e[2846]=757;e[2856]=767;e[2857]=848;e[2858]=849;e[2862]=853;e[2863]=854;e[2864]=855;e[2865]=861;e[2866]=862;e[2906]=7460;e[2908]=7462;e[2909]=7463;e[2910]=7464;e[2912]=7466;e[2913]=7467;e[2914]=7468;e[2916]=7470;e[2917]=7471;e[2918]=7472;e[2920]=7474;e[2921]=7475;e[2922]=7476;e[2924]=7478;e[2925]=7479;e[2926]=7480;e[2928]=7482;e[2929]=7483;e[2930]=7484;e[2932]=7486;e[2933]=7487;e[2934]=7488;e[2936]=7490;e[2937]=7491;e[2938]=7492;e[2940]=7494;e[2941]=7495;e[2942]=7496;e[2944]=7498;e[2946]=7500;e[2948]=7502;e[2950]=7504;e[2951]=7505;e[2952]=7506;e[2954]=7508;e[2955]=7509;e[2956]=7510;e[2958]=7512;e[2959]=7513;e[2960]=7514;e[2962]=7516;e[2963]=7517;e[2964]=7518;e[2966]=7520;e[2967]=7521;e[2968]=7522;e[2970]=7524;e[2971]=7525;e[2972]=7526;e[2974]=7528;e[2975]=7529;e[2976]=7530;e[2978]=1537;e[2979]=1538;e[2980]=1539;e[2982]=1549;e[2983]=1551;e[2984]=1552;e[2986]=1554;e[2987]=1555;e[2988]=1556;e[2990]=1623;e[2991]=1624;e[2995]=1775;e[2999]=1791;e[3002]=64290;e[3003]=64291;e[3004]=64292;e[3006]=64294;e[3007]=64295;e[3008]=64296;e[3011]=1900;e[3014]=8223;e[3015]=8244;e[3017]=7532;e[3018]=7533;e[3019]=7534;e[3075]=7590;e[3076]=7591;e[3079]=7594;e[3080]=7595;e[3083]=7598;e[3084]=7599;e[3087]=7602;e[3088]=7603;e[3091]=7606;e[3092]=7607;e[3095]=7610;e[3096]=7611;e[3099]=7614;e[3100]=7615;e[3103]=7618;e[3104]=7619;e[3107]=8337;e[3108]=8338;e[3116]=1884;e[3119]=1885;e[3120]=1885;e[3123]=1886;e[3124]=1886;e[3127]=1887;e[3128]=1887;e[3131]=1888;e[3132]=1888;e[3135]=1889;e[3136]=1889;e[3139]=1890;e[3140]=1890;e[3143]=1891;e[3144]=1891;e[3147]=1892;e[3148]=1892;e[3153]=580;e[3154]=581;e[3157]=584;e[3158]=585;e[3161]=588;e[3162]=589;e[3165]=891;e[3166]=892;e[3169]=1274;e[3170]=1275;e[3173]=1278;e[3174]=1279;e[3181]=7622;e[3182]=7623;e[3282]=11799;e[3316]=578;e[3379]=42785;e[3393]=1159;e[3416]=8377}),Gn=getLookupTableFactory(function(e){e[151]=956;e[159]=937;e[168]=916;e[189]=8364;e[195]=8729;e[218]=713;e[236]=222;e[237]=254;e[238]=8722;e[239]=185;e[240]=178;e[241]=179;e[242]=189;e[243]=188;e[244]=190;e[245]=181;e[246]=8486;e[247]=8710;e[248]=253;e[249]=215;e[250]=173;e[253]=8355;e[254]=286;e[255]=287;e[256]=304;e[257]=350;e[258]=351;e[259]=262;e[260]=263;e[261]=268;e[262]=269;e[263]=273;e[264]=175;e[266]=183;e[267]=258;e[268]=259;e[269]=260;e[270]=261;e[271]=270;e[272]=271;e[273]=272;e[274]=280;e[275]=281;e[276]=282;e[277]=283;e[278]=313;e[279]=314;e[280]=317;e[281]=318;e[282]=319;e[283]=320;e[284]=323;e[285]=324;e[286]=327;e[287]=328;e[288]=336;e[289]=337;e[290]=340;e[291]=341;e[292]=344;e[293]=345;e[294]=346;e[295]=347;e[296]=538;e[297]=539;e[298]=356;e[299]=357;e[300]=366;e[301]=367;e[302]=368;e[303]=369;e[304]=377;e[305]=378;e[306]=379;e[307]=380}),Vn=getLookupTableFactory(function(e){e[227]=322;e[264]=261;e[291]=346}),$n=getLookupTableFactory(function(e){e[1]=32;e[4]=65;e[5]=192;e[6]=193;e[9]=196;e[17]=66;e[18]=67;e[21]=268;e[24]=68;e[28]=69;e[29]=200;e[30]=201;e[32]=282;e[38]=70;e[39]=71;e[44]=72;e[47]=73;e[48]=204;e[49]=205;e[58]=74;e[60]=75;e[62]=76;e[68]=77;e[69]=78;e[75]=79;e[76]=210;e[80]=214;e[87]=80;e[89]=81;e[90]=82;e[92]=344;e[94]=83;e[97]=352;e[100]=84;e[104]=85;e[109]=220;e[115]=86;e[116]=87;e[121]=88;e[122]=89;e[124]=221;e[127]=90;e[129]=381;e[258]=97;e[259]=224;e[260]=225;e[263]=228;e[268]=261;e[271]=98;e[272]=99;e[273]=263;e[275]=269;e[282]=100;e[286]=101;e[287]=232;e[288]=233;e[290]=283;e[295]=281;e[296]=102;e[336]=103;e[346]=104;e[349]=105;e[350]=236;e[351]=237;e[361]=106;e[364]=107;e[367]=108;e[371]=322;e[373]=109;e[374]=110;e[381]=111;e[382]=242;e[383]=243;e[386]=246;e[393]=112;e[395]=113;e[396]=114;e[398]=345;e[400]=115;e[401]=347;e[403]=353;e[410]=116;e[437]=117;e[442]=252;e[448]=118;e[449]=119;e[454]=120;e[455]=121;e[457]=253;e[460]=122;e[462]=382;e[463]=380;e[853]=44;e[855]=58;e[856]=46;e[876]=47;e[878]=45;e[882]=45;e[894]=40;e[895]=41;e[896]=91;e[897]=93;e[923]=64;e[940]=163;e[1004]=48;e[1005]=49;e[1006]=50;e[1007]=51;e[1008]=52;e[1009]=53;e[1010]=54;e[1011]=55;e[1012]=56;e[1013]=57;e[1081]=37;e[1085]=43;e[1086]=45});function getStandardFontName(e){const t=normalizeFontName(e);return _n()[t]}function isKnownFontName(e){const t=normalizeFontName(e);return!!(_n()[t]||Ln()[t]||Un()[t]||Wn()[t])}const Yn=256,Jn=10;class GlyfTable{constructor({glyfTable:e,isGlyphLocationsLong:t,locaTable:a,numGlyphs:n}){this.glyphs=[];const s=new DataView(a.buffer,a.byteOffset,a.byteLength),r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=t?4:2;let o=t?s.getUint32(0):2*s.getUint16(0),l=0;for(let e=0;e<n;e++){l+=i;const e=t?s.getUint32(l):2*s.getUint16(l);if(e===o){this.glyphs.push(new Glyph({}));continue}const a=Glyph.parse(o,r);this.glyphs.push(a);o=e}}getSize(){return Math.sumPrecise(this.glyphs.map(e=>e.getSize()+3&-4))}write(){const e=this.getSize(),t=new DataView(new ArrayBuffer(e)),a=e>131070,n=a?4:2,s=new DataView(new ArrayBuffer((this.glyphs.length+1)*n));a?s.setUint32(0,0):s.setUint16(0,0);let r=0,i=0;for(const e of this.glyphs){r+=e.write(r,t);r=r+3&-4;i+=n;a?s.setUint32(i,r):s.setUint16(i,r>>1)}return{isLocationLong:a,loca:new Uint8Array(s.buffer),glyf:new Uint8Array(t.buffer)}}scale(e){for(let t=0,a=this.glyphs.length;t<a;t++)this.glyphs[t].scale(e[t])}}class Glyph{constructor({header:e=null,simple:t=null,composites:a=null}){this.header=e;this.simple=t;this.composites=a}static parse(e,t){const[a,n]=GlyphHeader.parse(e,t);e+=a;if(n.numberOfContours<0){const a=[];for(;;){const[n,s]=CompositeGlyph.parse(e,t);e+=n;a.push(s);if(!(32&s.flags))break}return new Glyph({header:n,composites:a})}const s=SimpleGlyph.parse(e,t,n.numberOfContours);return new Glyph({header:n,simple:s})}getSize(){if(!this.header)return 0;const e=this.simple?this.simple.getSize():Math.sumPrecise(this.composites.map(e=>e.getSize()));return this.header.getSize()+e}write(e,t){if(!this.header)return 0;const a=e;e+=this.header.write(e,t);if(this.simple)e+=this.simple.write(e,t);else for(const a of this.composites)e+=a.write(e,t);return e-a}scale(e){if(!this.header)return;const t=(this.header.xMin+this.header.xMax)/2;this.header.scale(t,e);if(this.simple)this.simple.scale(t,e);else for(const a of this.composites)a.scale(t,e)}}class GlyphHeader{constructor({numberOfContours:e,xMin:t,yMin:a,xMax:n,yMax:s}){this.numberOfContours=e;this.xMin=t;this.yMin=a;this.xMax=n;this.yMax=s}static parse(e,t){return[Jn,new GlyphHeader({numberOfContours:t.getInt16(e),xMin:t.getInt16(e+2),yMin:t.getInt16(e+4),xMax:t.getInt16(e+6),yMax:t.getInt16(e+8)})]}getSize(){return Jn}write(e,t){t.setInt16(e,this.numberOfContours);t.setInt16(e+2,this.xMin);t.setInt16(e+4,this.yMin);t.setInt16(e+6,this.xMax);t.setInt16(e+8,this.yMax);return Jn}scale(e,t){this.xMin=Math.round(e+(this.xMin-e)*t);this.xMax=Math.round(e+(this.xMax-e)*t)}}class Contour{constructor({flags:e,xCoordinates:t,yCoordinates:a}){this.xCoordinates=t;this.yCoordinates=a;this.flags=e}}class SimpleGlyph{constructor({contours:e,instructions:t}){this.contours=e;this.instructions=t}static parse(e,t,a){const n=[];for(let s=0;s<a;s++){const a=t.getUint16(e);e+=2;n.push(a)}const s=n[a-1]+1,r=t.getUint16(e);e+=2;const i=new Uint8Array(t).slice(e,e+r);e+=r;const o=[];for(let a=0;a<s;e++,a++){let n=t.getUint8(e);o.push(n);if(8&n){const s=t.getUint8(++e);n^=8;for(let e=0;e<s;e++)o.push(n);a+=s}}const l=[];let f=[],c=[],h=[];const u=[];let m=0,p=0;for(let a=0;a<s;a++){const s=o[a];if(2&s){const a=t.getUint8(e++);p+=16&s?a:-a;f.push(p)}else if(16&s)f.push(p);else{p+=t.getInt16(e);e+=2;f.push(p)}if(n[m]===a){m++;l.push(f);f=[]}}p=0;m=0;for(let a=0;a<s;a++){const s=o[a];if(4&s){const a=t.getUint8(e++);p+=32&s?a:-a;c.push(p)}else if(32&s)c.push(p);else{p+=t.getInt16(e);e+=2;c.push(p)}h.push(1&s|64&s);if(n[m]===a){f=l[m];m++;u.push(new Contour({flags:h,xCoordinates:f,yCoordinates:c}));c=[];h=[]}}return new SimpleGlyph({contours:u,instructions:i})}getSize(){let e=2*this.contours.length+2+this.instructions.length,t=0,a=0;for(const n of this.contours){e+=n.flags.length;for(let s=0,r=n.xCoordinates.length;s<r;s++){const r=n.xCoordinates[s],i=n.yCoordinates[s];let o=Math.abs(r-t);o>255?e+=2:o>0&&(e+=1);t=r;o=Math.abs(i-a);o>255?e+=2:o>0&&(e+=1);a=i}}return e}write(e,t){const a=e,n=[],s=[],r=[];let i=0,o=0;for(const a of this.contours){for(let e=0,t=a.xCoordinates.length;e<t;e++){let t=a.flags[e];const l=a.xCoordinates[e];let f=l-i;if(0===f){t|=16;n.push(0)}else{const e=Math.abs(f);if(e<=255){t|=f>=0?18:2;n.push(e)}else n.push(f)}i=l;const c=a.yCoordinates[e];f=c-o;if(0===f){t|=32;s.push(0)}else{const e=Math.abs(f);if(e<=255){t|=f>=0?36:4;s.push(e)}else s.push(f)}o=c;r.push(t)}t.setUint16(e,n.length-1);e+=2}t.setUint16(e,this.instructions.length);e+=2;if(this.instructions.length){new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e);e+=this.instructions.length}for(const a of r)t.setUint8(e++,a);for(let a=0,s=n.length;a<s;a++){const s=n[a],i=r[a];if(2&i)t.setUint8(e++,s);else if(!(16&i)){t.setInt16(e,s);e+=2}}for(let a=0,n=s.length;a<n;a++){const n=s[a],i=r[a];if(4&i)t.setUint8(e++,n);else if(!(32&i)){t.setInt16(e,n);e+=2}}return e-a}scale(e,t){for(const a of this.contours)if(0!==a.xCoordinates.length)for(let n=0,s=a.xCoordinates.length;n<s;n++)a.xCoordinates[n]=Math.round(e+(a.xCoordinates[n]-e)*t)}}class CompositeGlyph{constructor({flags:e,glyphIndex:t,argument1:a,argument2:n,transf:s,instructions:r}){this.flags=e;this.glyphIndex=t;this.argument1=a;this.argument2=n;this.transf=s;this.instructions=r}static parse(e,t){const a=e,n=[];let s=t.getUint16(e);const r=t.getUint16(e+2);e+=4;let i,o;if(1&s){if(2&s){i=t.getInt16(e);o=t.getInt16(e+2)}else{i=t.getUint16(e);o=t.getUint16(e+2)}e+=4;s^=1}else{if(2&s){i=t.getInt8(e);o=t.getInt8(e+1)}else{i=t.getUint8(e);o=t.getUint8(e+1)}e+=2}if(8&s){n.push(t.getUint16(e));e+=2}else if(64&s){n.push(t.getUint16(e),t.getUint16(e+2));e+=4}else if(128&s){n.push(t.getUint16(e),t.getUint16(e+2),t.getUint16(e+4),t.getUint16(e+6));e+=8}let l=null;if(s&Yn){const a=t.getUint16(e);e+=2;l=new Uint8Array(t).slice(e,e+a);e+=a}return[e-a,new CompositeGlyph({flags:s,glyphIndex:r,argument1:i,argument2:o,transf:n,instructions:l})]}getSize(){let e=4+2*this.transf.length;this.flags&Yn&&(e+=2+this.instructions.length);e+=2;2&this.flags?this.argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(e+=2):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(e+=2);return e}write(e,t){const a=e;2&this.flags?this.argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(this.flags|=1):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(this.flags|=1);t.setUint16(e,this.flags);t.setUint16(e+2,this.glyphIndex);e+=4;if(1&this.flags){if(2&this.flags){t.setInt16(e,this.argument1);t.setInt16(e+2,this.argument2)}else{t.setUint16(e,this.argument1);t.setUint16(e+2,this.argument2)}e+=4}else{t.setUint8(e,this.argument1);t.setUint8(e+1,this.argument2);e+=2}if(this.flags&Yn){t.setUint16(e,this.instructions.length);e+=2;if(this.instructions.length){new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e);e+=this.instructions.length}}return e-a}scale(e,t){}}class ToUnicodeMap{#a;constructor(e){this.#a=e}get size(){return this.#a.size}forEach(e){for(const[t,a]of this.#a)e(t,a.codePointAt(0))}has(e){return this.#a.has(e)}get(e){return this.#a.get(e)}charCodeOf(e){for(const[t,a]of this.#a)if(a===e)return t;return-1}amend(e){for(const[t,a]of e)this.#a.set(t,a)}}class IdentityToUnicodeMap{constructor(e,t){this.firstChar=e;this.lastChar=t}get size(){return this.lastChar+1-this.firstChar}forEach(e){for(let t=this.firstChar,a=this.lastChar;t<=a;t++)e(t,t)}has(e){return this.firstChar<=e&&e<=this.lastChar}get(e){return this.firstChar<=e&&e<=this.lastChar?String.fromCharCode(e):void 0}charCodeOf(e){return Number.isInteger(e)&&e>=this.firstChar&&e<=this.lastChar?e:-1}amend(e){unreachable("Should not call amend()")}}class CFFFont{constructor(e,t){this.properties=t;const a=new CFFParser(e,t,!0);this.cff=a.parse();this.cff.duplicateFirstGlyph();const n=new CFFCompiler(this.cff);this.seacs=this.cff.seacs;try{this.data=n.compile()}catch(a){warn(`Failed to compile font "${t.loadedName}": "${a}".`);e.reset();this.data=e.getBytes()}this._createBuiltInEncoding()}get numGlyphs(){return this.cff.charStrings.count}getCharset(){return this.cff.charset.charset}getGlyphMapping(){const e=this.cff,t=this.properties,{cidToGidMap:a,cMap:n}=t,s=e.charset.charset;if(t.composite){let t;if(a?.size){t=new Map;for(const[e,n]of a)t.set(n,e)}const r=new Map;let i,o;if(e.isCIDFont)for(o=0;o<s.length;o++){const e=s[o];i=n.charCodeOf(e);t?.has(i)&&(i=t.get(i));r.set(i,o)}else for(o=0;o<e.charStrings.count;o++){i=n.charCodeOf(o);r.set(i,o)}return r}let r=e.encoding?e.encoding.encoding:null;t.isInternalFont&&(r=t.defaultEncoding);return type1FontGlyphMapping(t,r,s)}hasGlyphId(e){return this.cff.hasGlyphId(e)}_createBuiltInEncoding(){const{charset:e,encoding:t}=this.cff;if(!e||!t)return;const a=e.charset,n=t.encoding,s=[];for(const e in n){const t=n[e];if(t>=0){const n=a[t];n&&(s[e]=n)}}s.length>0&&(this.properties.builtInEncoding=s)}}class CSS_FONT_INFO{static strings=["fontFamily","fontWeight","italicAngle"]}class SYSTEM_FONT_INFO{static strings=["css","loadedName","baseFontName","src"]}class FONT_INFO{static bools=["black","bold","disableFontFace","fontExtraProperties","isInvalidPDFjsFont","isType3Font","italic","missingFile","remeasure","vertical"];static strings=["fallbackName","loadedName"];static OFFSET_BBOX=Math.ceil(2*this.bools.length/8);static OFFSET_FONT_MATRIX=this.OFFSET_BBOX+1+8;static OFFSET_STRINGS=this.OFFSET_FONT_MATRIX+1+48}class PATTERN_INFO{static KIND=0;static HAS_BBOX=1;static HAS_BACKGROUND=2;static SHADING_TYPE=3;static N_COORD=4;static N_COLOR=8;static N_STOP=12;static N_FIGURES=16}class InfoUtils{static get decoder(){return shadow(this,"decoder",new TextDecoder)}static get encoder(){return shadow(this,"encoder",new TextEncoder)}}function encodeStrings(e,t){const{encoder:a}=InfoUtils,n=new Map;let s=0;for(const r of e){const e=a.encode(t[r]),i=e.length;n.set(e,i);s+=4+i}return{encodedStrings:n,stringsLength:s}}function writeStrings(e,t,a,n=0){for(const[s,r]of e){a.setUint32(n,r);t.set(s,n+4);n+=4+r}return n}function compileFontInfo(e){function writeArray(e,t,a,n){if(e){l.setUint8(f++,t);for(const t of e){l[a](f,t,!0);f+=n}}else{l.setUint8(f++,0);f+=n*t}}function writeBuffer(e,t){if(!e){l.setUint32(f,0);f+=4;return}const a=e.byteLength;l.setUint32(f,a);assert(f+4+a<=i.byteLength,`compileFontInfo: Buffer overflow at ${t}`);o.set(new Uint8Array(e),f+4);f+=4+a}const t=e.systemFontInfo?function compileSystemFontInfo(e){const{encodedStrings:t,stringsLength:a}=encodeStrings(SYSTEM_FONT_INFO.strings,e);let n,s=0;e.style&&({encodedStrings:n,stringsLength:s}=encodeStrings(["style","weight"],e.style));const r=new ArrayBuffer(4+a+s),i=new Uint8Array(r),o=new DataView(r);let l=0;o.setUint32(l,a);l=writeStrings(t,i,o,l+4);n&&(l=writeStrings(n,i,o,l));assert(l<=r.byteLength,"compileSystemFontInfo: Buffer overflow");return r.transferToFixedLength(l)}(e.systemFontInfo):null,a=e.cssFontInfo?function compileCssFontInfo(e){const{encodedStrings:t,stringsLength:a}=encodeStrings(CSS_FONT_INFO.strings,e),n=new ArrayBuffer(a);assert(writeStrings(t,new Uint8Array(n),new DataView(n))===n.byteLength,"compileCssFontInfo: Buffer overflow");return n}(e.cssFontInfo):null,{encodedStrings:n,stringsLength:s}=encodeStrings(FONT_INFO.strings,e),r=FONT_INFO.OFFSET_STRINGS+4+s+4+(t?.byteLength??0)+4+(a?.byteLength??0)+4+(e.data?.length??0),i=new ArrayBuffer(r),o=new Uint8Array(i),l=new DataView(i);let f=0;const c=FONT_INFO.bools.length;let h=0,u=0;for(let t=0;t<c;t++){const a=e[FONT_INFO.bools[t]];h|=(void 0===a?0:a?2:1)<<u;u+=2;if(8===u||t===c-1){l.setUint8(f++,h);h=0;u=0}}assert(f===FONT_INFO.OFFSET_BBOX,"compileFontInfo: Boolean properties offset mismatch");writeArray(e.bbox,4,"setInt16",2);assert(f===FONT_INFO.OFFSET_FONT_MATRIX,"compileFontInfo: BBox properties offset mismatch");writeArray(e.fontMatrix,6,"setFloat64",8);assert(f===FONT_INFO.OFFSET_STRINGS,"compileFontInfo: FontMatrix properties offset mismatch");l.setUint32(f,s);f=writeStrings(n,o,l,f+4);writeBuffer(t,"systemFontInfo");writeBuffer(a,"cssFontInfo");if(void 0===e.data){l.setUint32(f,0);f+=4}else{l.setUint32(f,e.data.length);o.set(e.data,f+4);f+=4+e.data.length}assert(f<=i.byteLength,"compileFontInfo: Buffer overflow");return i.transferToFixedLength(f)}function getFloat214(e,t){return e.getInt16(t)/16384}function getSubroutineBias(e){const t=e.length;return t>=33900?32768:t<1240?107:1131}function parseCmap(e,t,a){const n=new DataView(e.buffer,e.byteOffset,e.byteLength),s=1===n.getUint16(t+2)?n.getUint32(t+8):n.getUint32(t+16),r=n.getUint16(t+s);let i,o,l;if(4===r){const e=n.getUint16(t+s+6)>>1;o=t+s+14;i=[];for(l=0;l<e;l++,o+=2)i[l]={end:n.getUint16(o)};o+=2;for(l=0;l<e;l++,o+=2)i[l].start=n.getUint16(o);for(l=0;l<e;l++,o+=2)i[l].idDelta=n.getUint16(o);for(l=0;l<e;l++,o+=2){let e=n.getUint16(o);if(0!==e){i[l].ids=[];for(let t=0,a=i[l].end-i[l].start+1;t<a;t++){i[l].ids[t]=n.getUint16(o+e);e+=2}}}return i}if(12===r){const e=n.getUint32(t+s+12);o=t+s+16;i=[];for(l=0;l<e;l++){t=n.getUint32(o);i.push({start:t,end:n.getUint32(o+4),idDelta:n.getUint32(o+8)-t});o+=12}return i}throw new FormatError(`unsupported cmap: ${r}`)}function parseCff(e,t,a,n){const s=new CFFParser(new Stream(e,t,a-t),{},n).parse();return{glyphs:s.charStrings.objects,subrs:s.topDict.privateDict?.subrsIndex?.objects,gsubrs:s.globalSubrIndex?.objects,isCFFCIDFont:s.isCIDFont,fdSelect:s.fdSelect,fdArray:s.fdArray}}function lookupCmap(e,t){const a=t.codePointAt(0);let n=0,s=0,r=e.length-1;for(;s<r;){const t=s+r+1>>1;a<e[t].start?r=t-1:s=t}e[s].start<=a&&a<=e[s].end&&(n=e[s].idDelta+(e[s].ids?e[s].ids[a-e[s].start]:a)&65535);return{charCode:a,glyphId:n}}function compileGlyf(e,t,a,n=new Set){if(!e?.length)return;if(n.has(e)){warn("compileGlyf: skipping recursive composite glyph reference.");return}n.add(e);function moveTo(e,a){l&&t.add(Yt,l);l=[e,a];t.add($t,[e,a])}function lineTo(e,a){t.add(Yt,[e,a])}function quadraticCurveTo(e,a,n,s){t.add(Qt,[e,a,n,s])}const s=new DataView(e.buffer,e.byteOffset,e.byteLength);let r=0;const i=s.getInt16(r);let o,l=null,f=0,c=0;r+=10;if(i<0)do{o=s.getUint16(r);const i=s.getUint16(r+2);r+=4;let l,h;if(1&o){if(2&o){l=s.getInt16(r);h=s.getInt16(r+2)}else{l=s.getUint16(r);h=s.getUint16(r+2)}r+=4}else if(2&o){l=s.getInt8(r++);h=s.getInt8(r++)}else{l=e[r++];h=e[r++]}if(2&o){f=l;c=h}else{f=0;c=0}let u=1,m=1,p=0,d=0;if(8&o){u=m=getFloat214(s,r);r+=2}else if(64&o){u=getFloat214(s,r);m=getFloat214(s,r+2);r+=4}else if(128&o){u=getFloat214(s,r);p=getFloat214(s,r+2);d=getFloat214(s,r+4);m=getFloat214(s,r+6);r+=8}const g=a.glyphs[i];if(g){t.save();t.transform([u,p,d,m,f,c]);compileGlyf(g,t,a,n);t.restore()}}while(32&o);else{const t=[];let a,n;for(a=0;a<i;a++){t.push(s.getUint16(r));r+=2}r+=2+s.getUint16(r);const l=t.at(-1)+1,h=[];for(;h.length<l;){o=e[r++];let t=1;8&o&&(t+=e[r++]);for(;t-- >0;)h.push({flags:o})}for(a=0;a<l;a++){switch(18&h[a].flags){case 0:f+=s.getInt16(r);r+=2;break;case 2:f-=e[r++];break;case 18:f+=e[r++]}h[a].x=f}for(a=0;a<l;a++){switch(36&h[a].flags){case 0:c+=s.getInt16(r);r+=2;break;case 4:c-=e[r++];break;case 36:c+=e[r++]}h[a].y=c}let u=0;for(r=0;r<i;r++){const e=t[r],s=h.slice(u,e+1);if(1&s[0].flags)s.push(s[0]);else if(1&s.at(-1).flags)s.unshift(s.at(-1));else{const e={flags:1,x:(s[0].x+s.at(-1).x)/2,y:(s[0].y+s.at(-1).y)/2};s.unshift(e);s.push(e)}moveTo(s[0].x,s[0].y);for(a=1,n=s.length;a<n;a++)if(1&s[a].flags)lineTo(s[a].x,s[a].y);else if(1&s[a+1].flags){quadraticCurveTo(s[a].x,s[a].y,s[a+1].x,s[a+1].y);a++}else quadraticCurveTo(s[a].x,s[a].y,(s[a].x+s[a+1].x)/2,(s[a].y+s[a+1].y)/2);u=e+1}}n.delete(e)}function compileCharString(e,t,a,n){function moveTo(e,a){l&&t.add(Yt,l);l=[e,a];t.add($t,[e,a])}function lineTo(e,a){t.add(Yt,[e,a])}function bezierCurveTo(e,a,n,s,r,i){t.add(Jt,[e,a,n,s,r,i])}const s=[];let r=0,i=0,o=0,l=null;!function parse(e){const l=new DataView(e.buffer,e.byteOffset,e.byteLength);let f=0;for(;f<e.length;){let c,h,u,m,p,d,g,b,w,j=!1,k=e[f++];switch(k){case 1:case 3:case 18:case 23:o+=s.length>>1;j=!0;break;case 4:i+=s.pop();moveTo(r,i);j=!0;break;case 5:for(;s.length>0;){r+=s.shift();i+=s.shift();lineTo(r,i)}break;case 6:for(;s.length>0;){r+=s.shift();lineTo(r,i);if(0===s.length)break;i+=s.shift();lineTo(r,i)}break;case 7:for(;s.length>0;){i+=s.shift();lineTo(r,i);if(0===s.length)break;r+=s.shift();lineTo(r,i)}break;case 8:for(;s.length>0;){c=r+s.shift();u=i+s.shift();h=c+s.shift();m=u+s.shift();r=h+s.shift();i=m+s.shift();bezierCurveTo(c,u,h,m,r,i)}break;case 10:b=s.pop();w=null;if(a.isCFFCIDFont){const e=a.fdSelect.getFDIndex(n);if(e>=0&&e<a.fdArray.length){const t=a.fdArray[e];let n;t.privateDict?.subrsIndex&&(n=t.privateDict.subrsIndex.objects);if(n){b+=getSubroutineBias(n);w=n[b]}}else warn("Invalid fd index for glyph index.")}else w=a.subrs[b+a.subrsBias];w&&parse(w);break;case 11:return;case 12:k=e[f++];switch(k){case 34:c=r+s.shift();h=c+s.shift();p=i+s.shift();r=h+s.shift();bezierCurveTo(c,i,h,p,r,p);c=r+s.shift();h=c+s.shift();r=h+s.shift();bezierCurveTo(c,p,h,i,r,i);break;case 35:c=r+s.shift();u=i+s.shift();h=c+s.shift();m=u+s.shift();r=h+s.shift();i=m+s.shift();bezierCurveTo(c,u,h,m,r,i);c=r+s.shift();u=i+s.shift();h=c+s.shift();m=u+s.shift();r=h+s.shift();i=m+s.shift();bezierCurveTo(c,u,h,m,r,i);s.pop();break;case 36:c=r+s.shift();p=i+s.shift();h=c+s.shift();d=p+s.shift();r=h+s.shift();bezierCurveTo(c,p,h,d,r,d);c=r+s.shift();h=c+s.shift();g=d+s.shift();r=h+s.shift();bezierCurveTo(c,d,h,g,r,i);break;case 37:const e=r,t=i;c=r+s.shift();u=i+s.shift();h=c+s.shift();m=u+s.shift();r=h+s.shift();i=m+s.shift();bezierCurveTo(c,u,h,m,r,i);c=r+s.shift();u=i+s.shift();h=c+s.shift();m=u+s.shift();r=h;i=m;Math.abs(r-e)>Math.abs(i-t)?r+=s.shift():i+=s.shift();bezierCurveTo(c,u,h,m,r,i);break;default:throw new FormatError(`unknown operator: 12 ${k}`)}break;case 14:if(s.length>=4){const e=s.pop(),n=s.pop();i=s.pop();r=s.pop();t.save();t.translate(r,i);let o=lookupCmap(a.cmap,String.fromCharCode(a.glyphNameMap[mn[e]]));compileCharString(a.glyphs[o.glyphId],t,a,o.glyphId);t.restore();o=lookupCmap(a.cmap,String.fromCharCode(a.glyphNameMap[mn[n]]));compileCharString(a.glyphs[o.glyphId],t,a,o.glyphId)}return;case 19:case 20:o+=s.length>>1;f+=o+7>>3;j=!0;break;case 21:i+=s.pop();r+=s.pop();moveTo(r,i);j=!0;break;case 22:r+=s.pop();moveTo(r,i);j=!0;break;case 24:for(;s.length>2;){c=r+s.shift();u=i+s.shift();h=c+s.shift();m=u+s.shift();r=h+s.shift();i=m+s.shift();bezierCurveTo(c,u,h,m,r,i)}r+=s.shift();i+=s.shift();lineTo(r,i);break;case 25:for(;s.length>6;){r+=s.shift();i+=s.shift();lineTo(r,i)}c=r+s.shift();u=i+s.shift();h=c+s.shift();m=u+s.shift();r=h+s.shift();i=m+s.shift();bezierCurveTo(c,u,h,m,r,i);break;case 26:s.length%2&&(r+=s.shift());for(;s.length>0;){c=r;u=i+s.shift();h=c+s.shift();m=u+s.shift();r=h;i=m+s.shift();bezierCurveTo(c,u,h,m,r,i)}break;case 27:s.length%2&&(i+=s.shift());for(;s.length>0;){c=r+s.shift();u=i;h=c+s.shift();m=u+s.shift();r=h+s.shift();i=m;bezierCurveTo(c,u,h,m,r,i)}break;case 28:s.push(l.getInt16(f));f+=2;break;case 29:b=s.pop()+a.gsubrsBias;w=a.gsubrs[b];w&&parse(w);break;case 30:for(;s.length>0;){c=r;u=i+s.shift();h=c+s.shift();m=u+s.shift();r=h+s.shift();i=m+(1===s.length?s.shift():0);bezierCurveTo(c,u,h,m,r,i);if(0===s.length)break;c=r+s.shift();u=i;h=c+s.shift();m=u+s.shift();i=m+s.shift();r=h+(1===s.length?s.shift():0);bezierCurveTo(c,u,h,m,r,i)}break;case 31:for(;s.length>0;){c=r+s.shift();u=i;h=c+s.shift();m=u+s.shift();i=m+s.shift();r=h+(1===s.length?s.shift():0);bezierCurveTo(c,u,h,m,r,i);if(0===s.length)break;c=r;u=i+s.shift();h=c+s.shift();m=u+s.shift();r=h+s.shift();i=m+(1===s.length?s.shift():0);bezierCurveTo(c,u,h,m,r,i)}break;default:if(k<32)throw new FormatError(`unknown operator: ${k}`);if(k<247)s.push(k-139);else if(k<251)s.push(256*(k-247)+e[f++]+108);else if(k<255)s.push(256*-(k-251)-e[f++]-108);else{s.push(l.getInt32(f)/65536);f+=4}}j&&(s.length=0)}}(e)}class Commands{cmds=[];transformStack=[];currentTransform=[1,0,0,1,0,0];add(e,t){if(t){const{currentTransform:a}=this;for(let e=0,n=t.length;e<n;e+=2)Util.applyTransform(t,a,e);this.cmds.push(e,...t)}else this.cmds.push(e)}transform(e){this.currentTransform=Util.transform(this.currentTransform,e)}translate(e,t){this.transform([1,0,0,1,e,t])}save(){this.transformStack.push(this.currentTransform.slice())}restore(){this.currentTransform=this.transformStack.pop()||[1,0,0,1,0,0]}getPath(){return FeatureTest.isFloat16ArraySupported?new Float16Array(this.cmds):new Float32Array(this.cmds)}}class CompiledFont{#ge=new Set;#be=new Map;constructor(e){this.fontMatrix=e}static get NOOP(){return shadow(this,"NOOP",FeatureTest.isFloat16ArraySupported?new Float16Array(0):new Float32Array(0))}getPath(e){const{charCode:t,glyphId:a}=lookupCmap(this.cmap,e);if(this.#be.has(a)&&this.#ge.has(t))return null;const n=this.#be.getOrInsertComputed(a,()=>{try{return this.compileGlyph(this.glyphs[a],a)}catch(e){return e}});this.#ge.add(t);if(n instanceof Error)throw n;return function compileFontPathInfo(e){return e.slice().buffer}(n)}compileGlyph(e,t){if(!e?.length||14===e[0])return CompiledFont.NOOP;let a=this.fontMatrix;if(this.isCFFCIDFont){const e=this.fdSelect.getFDIndex(t);if(e>=0&&e<this.fdArray.length){a=this.fdArray[e].getByName("FontMatrix")||n}else warn("Invalid fd index for glyph index.")}assert(isNumberArray(a,6),"Expected a valid fontMatrix.");const s=new Commands;s.transform(a.slice());this.compileGlyphImpl(e,s,t);s.add(Zt);return s.getPath()}compileGlyphImpl(){unreachable("Children classes should implement this.")}}class TrueTypeCompiled extends CompiledFont{constructor(e,t,a){super(a||[488e-6,0,0,488e-6,0,0]);this.glyphs=e;this.cmap=t}compileGlyphImpl(e,t){compileGlyf(e,t,this)}}class Type2Compiled extends CompiledFont{constructor(e,t,a){super(a||[.001,0,0,.001,0,0]);this.glyphs=e.glyphs;this.gsubrs=e.gsubrs||[];this.subrs=e.subrs||[];this.cmap=t;this.glyphNameMap=bn();this.gsubrsBias=getSubroutineBias(this.gsubrs);this.subrsBias=getSubroutineBias(this.subrs);this.isCFFCIDFont=e.isCFFCIDFont;this.fdSelect=e.fdSelect;this.fdArray=e.fdArray}compileGlyphImpl(e,t,a){compileCharString(e,t,this,a)}}class FontRendererFactory{static create(e,t){const a=new Uint8Array(e.data),n=new DataView(a.buffer);let s,r,i,o,l,f;const c=n.getUint16(4);for(let e=0,h=12;e<c;e++,h+=16){const e=bytesToString(a.subarray(h,h+4)),c=n.getUint32(h+8),u=n.getUint32(h+12);switch(e){case"cmap":s=parseCmap(a,c);break;case"glyf":r=a.subarray(c,c+u);break;case"loca":i=a.subarray(c,c+u);break;case"head":f=n.getUint16(c+18);l=n.getUint16(c+50);break;case"CFF ":o=parseCff(a,c,c+u,t)}}if(r){const t=f?[1/f,0,0,1/f,0,0]:e.fontMatrix;return new TrueTypeCompiled(function parseGlyfTable(e,t,a){const n=new DataView(t.buffer,t.byteOffset,t.byteLength);let s,r;if(a){s=4;r=(e,t)=>e.getUint32(t)}else{s=2;r=(e,t)=>2*e.getUint16(t)}const i=[];let o=r(n,0);for(let a=s;a<t.length;a+=s){const t=r(n,a);i.push(e.subarray(o,t));o=t}return i}(r,i,l),s,t)}return new Type2Compiled(o,s,e.fontMatrix)}}const Qn=getLookupTableFactory(function(e){e.Courier=600;e["Courier-Bold"]=600;e["Courier-BoldOblique"]=600;e["Courier-Oblique"]=600;e.Helvetica=getLookupTableFactory(function(e){e.space=278;e.exclam=278;e.quotedbl=355;e.numbersign=556;e.dollar=556;e.percent=889;e.ampersand=667;e.quoteright=222;e.parenleft=333;e.parenright=333;e.asterisk=389;e.plus=584;e.comma=278;e.hyphen=333;e.period=278;e.slash=278;e.zero=556;e.one=556;e.two=556;e.three=556;e.four=556;e.five=556;e.six=556;e.seven=556;e.eight=556;e.nine=556;e.colon=278;e.semicolon=278;e.less=584;e.equal=584;e.greater=584;e.question=556;e.at=1015;e.A=667;e.B=667;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=722;e.I=278;e.J=500;e.K=667;e.L=556;e.M=833;e.N=722;e.O=778;e.P=667;e.Q=778;e.R=722;e.S=667;e.T=611;e.U=722;e.V=667;e.W=944;e.X=667;e.Y=667;e.Z=611;e.bracketleft=278;e.backslash=278;e.bracketright=278;e.asciicircum=469;e.underscore=556;e.quoteleft=222;e.a=556;e.b=556;e.c=500;e.d=556;e.e=556;e.f=278;e.g=556;e.h=556;e.i=222;e.j=222;e.k=500;e.l=222;e.m=833;e.n=556;e.o=556;e.p=556;e.q=556;e.r=333;e.s=500;e.t=278;e.u=556;e.v=500;e.w=722;e.x=500;e.y=500;e.z=500;e.braceleft=334;e.bar=260;e.braceright=334;e.asciitilde=584;e.exclamdown=333;e.cent=556;e.sterling=556;e.fraction=167;e.yen=556;e.florin=556;e.section=556;e.currency=556;e.quotesingle=191;e.quotedblleft=333;e.guillemotleft=556;e.guilsinglleft=333;e.guilsinglright=333;e.fi=500;e.fl=500;e.endash=556;e.dagger=556;e.daggerdbl=556;e.periodcentered=278;e.paragraph=537;e.bullet=350;e.quotesinglbase=222;e.quotedblbase=333;e.quotedblright=333;e.guillemotright=556;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=611;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=370;e.Lslash=556;e.Oslash=778;e.OE=1e3;e.ordmasculine=365;e.ae=889;e.dotlessi=278;e.lslash=222;e.oslash=611;e.oe=944;e.germandbls=611;e.Idieresis=278;e.eacute=556;e.abreve=556;e.uhungarumlaut=556;e.ecaron=556;e.Ydieresis=667;e.divide=584;e.Yacute=667;e.Acircumflex=667;e.aacute=556;e.Ucircumflex=722;e.yacute=500;e.scommaaccent=500;e.ecircumflex=556;e.Uring=722;e.Udieresis=722;e.aogonek=556;e.Uacute=722;e.uogonek=556;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=737;e.Emacron=667;e.ccaron=500;e.aring=556;e.Ncommaaccent=722;e.lacute=222;e.agrave=556;e.Tcommaaccent=611;e.Cacute=722;e.atilde=556;e.Edotaccent=667;e.scaron=500;e.scedilla=500;e.iacute=278;e.lozenge=471;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=556;e.acircumflex=556;e.Amacron=667;e.rcaron=333;e.ccedilla=500;e.Zdotaccent=611;e.Thorn=667;e.Omacron=778;e.Racute=722;e.Sacute=667;e.dcaron=643;e.Umacron=722;e.uring=556;e.threesuperior=333;e.Ograve=778;e.Agrave=667;e.Abreve=667;e.multiply=584;e.uacute=556;e.Tcaron=611;e.partialdiff=476;e.ydieresis=500;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=556;e.edieresis=556;e.cacute=500;e.nacute=556;e.umacron=556;e.Ncaron=722;e.Iacute=278;e.plusminus=584;e.brokenbar=260;e.registered=737;e.Gbreve=778;e.Idotaccent=278;e.summation=600;e.Egrave=667;e.racute=333;e.omacron=556;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent=222;e.tcaron=317;e.eogonek=556;e.Uogonek=722;e.Aacute=667;e.Adieresis=667;e.egrave=556;e.zacute=500;e.iogonek=222;e.Oacute=778;e.oacute=556;e.amacron=556;e.sacute=500;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=556;e.twosuperior=333;e.Odieresis=778;e.mu=556;e.igrave=278;e.ohungarumlaut=556;e.Eogonek=667;e.dcroat=556;e.threequarters=834;e.Scedilla=667;e.lcaron=299;e.Kcommaaccent=667;e.Lacute=556;e.trademark=1e3;e.edotaccent=556;e.Igrave=278;e.Imacron=278;e.Lcaron=556;e.onehalf=834;e.lessequal=549;e.ocircumflex=556;e.ntilde=556;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=556;e.gbreve=556;e.onequarter=834;e.Scaron=667;e.Scommaaccent=667;e.Ohungarumlaut=778;e.degree=400;e.ograve=556;e.Ccaron=722;e.ugrave=556;e.radical=453;e.Dcaron=722;e.rcommaaccent=333;e.Ntilde=722;e.otilde=556;e.Rcommaaccent=722;e.Lcommaaccent=556;e.Atilde=667;e.Aogonek=667;e.Aring=667;e.Otilde=778;e.zdotaccent=500;e.Ecaron=667;e.Iogonek=278;e.kcommaaccent=500;e.minus=584;e.Icircumflex=278;e.ncaron=556;e.tcommaaccent=278;e.logicalnot=584;e.odieresis=556;e.udieresis=556;e.notequal=549;e.gcommaaccent=556;e.eth=556;e.zcaron=500;e.ncommaaccent=556;e.onesuperior=333;e.imacron=278;e.Euro=556});e["Helvetica-Bold"]=getLookupTableFactory(function(e){e.space=278;e.exclam=333;e.quotedbl=474;e.numbersign=556;e.dollar=556;e.percent=889;e.ampersand=722;e.quoteright=278;e.parenleft=333;e.parenright=333;e.asterisk=389;e.plus=584;e.comma=278;e.hyphen=333;e.period=278;e.slash=278;e.zero=556;e.one=556;e.two=556;e.three=556;e.four=556;e.five=556;e.six=556;e.seven=556;e.eight=556;e.nine=556;e.colon=333;e.semicolon=333;e.less=584;e.equal=584;e.greater=584;e.question=611;e.at=975;e.A=722;e.B=722;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=722;e.I=278;e.J=556;e.K=722;e.L=611;e.M=833;e.N=722;e.O=778;e.P=667;e.Q=778;e.R=722;e.S=667;e.T=611;e.U=722;e.V=667;e.W=944;e.X=667;e.Y=667;e.Z=611;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=584;e.underscore=556;e.quoteleft=278;e.a=556;e.b=611;e.c=556;e.d=611;e.e=556;e.f=333;e.g=611;e.h=611;e.i=278;e.j=278;e.k=556;e.l=278;e.m=889;e.n=611;e.o=611;e.p=611;e.q=611;e.r=389;e.s=556;e.t=333;e.u=611;e.v=556;e.w=778;e.x=556;e.y=556;e.z=500;e.braceleft=389;e.bar=280;e.braceright=389;e.asciitilde=584;e.exclamdown=333;e.cent=556;e.sterling=556;e.fraction=167;e.yen=556;e.florin=556;e.section=556;e.currency=556;e.quotesingle=238;e.quotedblleft=500;e.guillemotleft=556;e.guilsinglleft=333;e.guilsinglright=333;e.fi=611;e.fl=611;e.endash=556;e.dagger=556;e.daggerdbl=556;e.periodcentered=278;e.paragraph=556;e.bullet=350;e.quotesinglbase=278;e.quotedblbase=500;e.quotedblright=500;e.guillemotright=556;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=611;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=370;e.Lslash=611;e.Oslash=778;e.OE=1e3;e.ordmasculine=365;e.ae=889;e.dotlessi=278;e.lslash=278;e.oslash=611;e.oe=944;e.germandbls=611;e.Idieresis=278;e.eacute=556;e.abreve=556;e.uhungarumlaut=611;e.ecaron=556;e.Ydieresis=667;e.divide=584;e.Yacute=667;e.Acircumflex=722;e.aacute=556;e.Ucircumflex=722;e.yacute=556;e.scommaaccent=556;e.ecircumflex=556;e.Uring=722;e.Udieresis=722;e.aogonek=556;e.Uacute=722;e.uogonek=611;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=737;e.Emacron=667;e.ccaron=556;e.aring=556;e.Ncommaaccent=722;e.lacute=278;e.agrave=556;e.Tcommaaccent=611;e.Cacute=722;e.atilde=556;e.Edotaccent=667;e.scaron=556;e.scedilla=556;e.iacute=278;e.lozenge=494;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=611;e.acircumflex=556;e.Amacron=722;e.rcaron=389;e.ccedilla=556;e.Zdotaccent=611;e.Thorn=667;e.Omacron=778;e.Racute=722;e.Sacute=667;e.dcaron=743;e.Umacron=722;e.uring=611;e.threesuperior=333;e.Ograve=778;e.Agrave=722;e.Abreve=722;e.multiply=584;e.uacute=611;e.Tcaron=611;e.partialdiff=494;e.ydieresis=556;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=556;e.edieresis=556;e.cacute=556;e.nacute=611;e.umacron=611;e.Ncaron=722;e.Iacute=278;e.plusminus=584;e.brokenbar=280;e.registered=737;e.Gbreve=778;e.Idotaccent=278;e.summation=600;e.Egrave=667;e.racute=389;e.omacron=611;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent=278;e.tcaron=389;e.eogonek=556;e.Uogonek=722;e.Aacute=722;e.Adieresis=722;e.egrave=556;e.zacute=500;e.iogonek=278;e.Oacute=778;e.oacute=611;e.amacron=556;e.sacute=556;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=611;e.twosuperior=333;e.Odieresis=778;e.mu=611;e.igrave=278;e.ohungarumlaut=611;e.Eogonek=667;e.dcroat=611;e.threequarters=834;e.Scedilla=667;e.lcaron=400;e.Kcommaaccent=722;e.Lacute=611;e.trademark=1e3;e.edotaccent=556;e.Igrave=278;e.Imacron=278;e.Lcaron=611;e.onehalf=834;e.lessequal=549;e.ocircumflex=611;e.ntilde=611;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=556;e.gbreve=611;e.onequarter=834;e.Scaron=667;e.Scommaaccent=667;e.Ohungarumlaut=778;e.degree=400;e.ograve=611;e.Ccaron=722;e.ugrave=611;e.radical=549;e.Dcaron=722;e.rcommaaccent=389;e.Ntilde=722;e.otilde=611;e.Rcommaaccent=722;e.Lcommaaccent=611;e.Atilde=722;e.Aogonek=722;e.Aring=722;e.Otilde=778;e.zdotaccent=500;e.Ecaron=667;e.Iogonek=278;e.kcommaaccent=556;e.minus=584;e.Icircumflex=278;e.ncaron=611;e.tcommaaccent=333;e.logicalnot=584;e.odieresis=611;e.udieresis=611;e.notequal=549;e.gcommaaccent=611;e.eth=611;e.zcaron=500;e.ncommaaccent=611;e.onesuperior=333;e.imacron=278;e.Euro=556});e["Helvetica-BoldOblique"]=getLookupTableFactory(function(e){e.space=278;e.exclam=333;e.quotedbl=474;e.numbersign=556;e.dollar=556;e.percent=889;e.ampersand=722;e.quoteright=278;e.parenleft=333;e.parenright=333;e.asterisk=389;e.plus=584;e.comma=278;e.hyphen=333;e.period=278;e.slash=278;e.zero=556;e.one=556;e.two=556;e.three=556;e.four=556;e.five=556;e.six=556;e.seven=556;e.eight=556;e.nine=556;e.colon=333;e.semicolon=333;e.less=584;e.equal=584;e.greater=584;e.question=611;e.at=975;e.A=722;e.B=722;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=722;e.I=278;e.J=556;e.K=722;e.L=611;e.M=833;e.N=722;e.O=778;e.P=667;e.Q=778;e.R=722;e.S=667;e.T=611;e.U=722;e.V=667;e.W=944;e.X=667;e.Y=667;e.Z=611;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=584;e.underscore=556;e.quoteleft=278;e.a=556;e.b=611;e.c=556;e.d=611;e.e=556;e.f=333;e.g=611;e.h=611;e.i=278;e.j=278;e.k=556;e.l=278;e.m=889;e.n=611;e.o=611;e.p=611;e.q=611;e.r=389;e.s=556;e.t=333;e.u=611;e.v=556;e.w=778;e.x=556;e.y=556;e.z=500;e.braceleft=389;e.bar=280;e.braceright=389;e.asciitilde=584;e.exclamdown=333;e.cent=556;e.sterling=556;e.fraction=167;e.yen=556;e.florin=556;e.section=556;e.currency=556;e.quotesingle=238;e.quotedblleft=500;e.guillemotleft=556;e.guilsinglleft=333;e.guilsinglright=333;e.fi=611;e.fl=611;e.endash=556;e.dagger=556;e.daggerdbl=556;e.periodcentered=278;e.paragraph=556;e.bullet=350;e.quotesinglbase=278;e.quotedblbase=500;e.quotedblright=500;e.guillemotright=556;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=611;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=370;e.Lslash=611;e.Oslash=778;e.OE=1e3;e.ordmasculine=365;e.ae=889;e.dotlessi=278;e.lslash=278;e.oslash=611;e.oe=944;e.germandbls=611;e.Idieresis=278;e.eacute=556;e.abreve=556;e.uhungarumlaut=611;e.ecaron=556;e.Ydieresis=667;e.divide=584;e.Yacute=667;e.Acircumflex=722;e.aacute=556;e.Ucircumflex=722;e.yacute=556;e.scommaaccent=556;e.ecircumflex=556;e.Uring=722;e.Udieresis=722;e.aogonek=556;e.Uacute=722;e.uogonek=611;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=737;e.Emacron=667;e.ccaron=556;e.aring=556;e.Ncommaaccent=722;e.lacute=278;e.agrave=556;e.Tcommaaccent=611;e.Cacute=722;e.atilde=556;e.Edotaccent=667;e.scaron=556;e.scedilla=556;e.iacute=278;e.lozenge=494;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=611;e.acircumflex=556;e.Amacron=722;e.rcaron=389;e.ccedilla=556;e.Zdotaccent=611;e.Thorn=667;e.Omacron=778;e.Racute=722;e.Sacute=667;e.dcaron=743;e.Umacron=722;e.uring=611;e.threesuperior=333;e.Ograve=778;e.Agrave=722;e.Abreve=722;e.multiply=584;e.uacute=611;e.Tcaron=611;e.partialdiff=494;e.ydieresis=556;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=556;e.edieresis=556;e.cacute=556;e.nacute=611;e.umacron=611;e.Ncaron=722;e.Iacute=278;e.plusminus=584;e.brokenbar=280;e.registered=737;e.Gbreve=778;e.Idotaccent=278;e.summation=600;e.Egrave=667;e.racute=389;e.omacron=611;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent=278;e.tcaron=389;e.eogonek=556;e.Uogonek=722;e.Aacute=722;e.Adieresis=722;e.egrave=556;e.zacute=500;e.iogonek=278;e.Oacute=778;e.oacute=611;e.amacron=556;e.sacute=556;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=611;e.twosuperior=333;e.Odieresis=778;e.mu=611;e.igrave=278;e.ohungarumlaut=611;e.Eogonek=667;e.dcroat=611;e.threequarters=834;e.Scedilla=667;e.lcaron=400;e.Kcommaaccent=722;e.Lacute=611;e.trademark=1e3;e.edotaccent=556;e.Igrave=278;e.Imacron=278;e.Lcaron=611;e.onehalf=834;e.lessequal=549;e.ocircumflex=611;e.ntilde=611;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=556;e.gbreve=611;e.onequarter=834;e.Scaron=667;e.Scommaaccent=667;e.Ohungarumlaut=778;e.degree=400;e.ograve=611;e.Ccaron=722;e.ugrave=611;e.radical=549;e.Dcaron=722;e.rcommaaccent=389;e.Ntilde=722;e.otilde=611;e.Rcommaaccent=722;e.Lcommaaccent=611;e.Atilde=722;e.Aogonek=722;e.Aring=722;e.Otilde=778;e.zdotaccent=500;e.Ecaron=667;e.Iogonek=278;e.kcommaaccent=556;e.minus=584;e.Icircumflex=278;e.ncaron=611;e.tcommaaccent=333;e.logicalnot=584;e.odieresis=611;e.udieresis=611;e.notequal=549;e.gcommaaccent=611;e.eth=611;e.zcaron=500;e.ncommaaccent=611;e.onesuperior=333;e.imacron=278;e.Euro=556});e["Helvetica-Oblique"]=getLookupTableFactory(function(e){e.space=278;e.exclam=278;e.quotedbl=355;e.numbersign=556;e.dollar=556;e.percent=889;e.ampersand=667;e.quoteright=222;e.parenleft=333;e.parenright=333;e.asterisk=389;e.plus=584;e.comma=278;e.hyphen=333;e.period=278;e.slash=278;e.zero=556;e.one=556;e.two=556;e.three=556;e.four=556;e.five=556;e.six=556;e.seven=556;e.eight=556;e.nine=556;e.colon=278;e.semicolon=278;e.less=584;e.equal=584;e.greater=584;e.question=556;e.at=1015;e.A=667;e.B=667;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=722;e.I=278;e.J=500;e.K=667;e.L=556;e.M=833;e.N=722;e.O=778;e.P=667;e.Q=778;e.R=722;e.S=667;e.T=611;e.U=722;e.V=667;e.W=944;e.X=667;e.Y=667;e.Z=611;e.bracketleft=278;e.backslash=278;e.bracketright=278;e.asciicircum=469;e.underscore=556;e.quoteleft=222;e.a=556;e.b=556;e.c=500;e.d=556;e.e=556;e.f=278;e.g=556;e.h=556;e.i=222;e.j=222;e.k=500;e.l=222;e.m=833;e.n=556;e.o=556;e.p=556;e.q=556;e.r=333;e.s=500;e.t=278;e.u=556;e.v=500;e.w=722;e.x=500;e.y=500;e.z=500;e.braceleft=334;e.bar=260;e.braceright=334;e.asciitilde=584;e.exclamdown=333;e.cent=556;e.sterling=556;e.fraction=167;e.yen=556;e.florin=556;e.section=556;e.currency=556;e.quotesingle=191;e.quotedblleft=333;e.guillemotleft=556;e.guilsinglleft=333;e.guilsinglright=333;e.fi=500;e.fl=500;e.endash=556;e.dagger=556;e.daggerdbl=556;e.periodcentered=278;e.paragraph=537;e.bullet=350;e.quotesinglbase=222;e.quotedblbase=333;e.quotedblright=333;e.guillemotright=556;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=611;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=370;e.Lslash=556;e.Oslash=778;e.OE=1e3;e.ordmasculine=365;e.ae=889;e.dotlessi=278;e.lslash=222;e.oslash=611;e.oe=944;e.germandbls=611;e.Idieresis=278;e.eacute=556;e.abreve=556;e.uhungarumlaut=556;e.ecaron=556;e.Ydieresis=667;e.divide=584;e.Yacute=667;e.Acircumflex=667;e.aacute=556;e.Ucircumflex=722;e.yacute=500;e.scommaaccent=500;e.ecircumflex=556;e.Uring=722;e.Udieresis=722;e.aogonek=556;e.Uacute=722;e.uogonek=556;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=737;e.Emacron=667;e.ccaron=500;e.aring=556;e.Ncommaaccent=722;e.lacute=222;e.agrave=556;e.Tcommaaccent=611;e.Cacute=722;e.atilde=556;e.Edotaccent=667;e.scaron=500;e.scedilla=500;e.iacute=278;e.lozenge=471;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=556;e.acircumflex=556;e.Amacron=667;e.rcaron=333;e.ccedilla=500;e.Zdotaccent=611;e.Thorn=667;e.Omacron=778;e.Racute=722;e.Sacute=667;e.dcaron=643;e.Umacron=722;e.uring=556;e.threesuperior=333;e.Ograve=778;e.Agrave=667;e.Abreve=667;e.multiply=584;e.uacute=556;e.Tcaron=611;e.partialdiff=476;e.ydieresis=500;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=556;e.edieresis=556;e.cacute=500;e.nacute=556;e.umacron=556;e.Ncaron=722;e.Iacute=278;e.plusminus=584;e.brokenbar=260;e.registered=737;e.Gbreve=778;e.Idotaccent=278;e.summation=600;e.Egrave=667;e.racute=333;e.omacron=556;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent=222;e.tcaron=317;e.eogonek=556;e.Uogonek=722;e.Aacute=667;e.Adieresis=667;e.egrave=556;e.zacute=500;e.iogonek=222;e.Oacute=778;e.oacute=556;e.amacron=556;e.sacute=500;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=556;e.twosuperior=333;e.Odieresis=778;e.mu=556;e.igrave=278;e.ohungarumlaut=556;e.Eogonek=667;e.dcroat=556;e.threequarters=834;e.Scedilla=667;e.lcaron=299;e.Kcommaaccent=667;e.Lacute=556;e.trademark=1e3;e.edotaccent=556;e.Igrave=278;e.Imacron=278;e.Lcaron=556;e.onehalf=834;e.lessequal=549;e.ocircumflex=556;e.ntilde=556;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=556;e.gbreve=556;e.onequarter=834;e.Scaron=667;e.Scommaaccent=667;e.Ohungarumlaut=778;e.degree=400;e.ograve=556;e.Ccaron=722;e.ugrave=556;e.radical=453;e.Dcaron=722;e.rcommaaccent=333;e.Ntilde=722;e.otilde=556;e.Rcommaaccent=722;e.Lcommaaccent=556;e.Atilde=667;e.Aogonek=667;e.Aring=667;e.Otilde=778;e.zdotaccent=500;e.Ecaron=667;e.Iogonek=278;e.kcommaaccent=500;e.minus=584;e.Icircumflex=278;e.ncaron=556;e.tcommaaccent=278;e.logicalnot=584;e.odieresis=556;e.udieresis=556;e.notequal=549;e.gcommaaccent=556;e.eth=556;e.zcaron=500;e.ncommaaccent=556;e.onesuperior=333;e.imacron=278;e.Euro=556});e.Symbol=getLookupTableFactory(function(e){e.space=250;e.exclam=333;e.universal=713;e.numbersign=500;e.existential=549;e.percent=833;e.ampersand=778;e.suchthat=439;e.parenleft=333;e.parenright=333;e.asteriskmath=500;e.plus=549;e.comma=250;e.minus=549;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=278;e.semicolon=278;e.less=549;e.equal=549;e.greater=549;e.question=444;e.congruent=549;e.Alpha=722;e.Beta=667;e.Chi=722;e.Delta=612;e.Epsilon=611;e.Phi=763;e.Gamma=603;e.Eta=722;e.Iota=333;e.theta1=631;e.Kappa=722;e.Lambda=686;e.Mu=889;e.Nu=722;e.Omicron=722;e.Pi=768;e.Theta=741;e.Rho=556;e.Sigma=592;e.Tau=611;e.Upsilon=690;e.sigma1=439;e.Omega=768;e.Xi=645;e.Psi=795;e.Zeta=611;e.bracketleft=333;e.therefore=863;e.bracketright=333;e.perpendicular=658;e.underscore=500;e.radicalex=500;e.alpha=631;e.beta=549;e.chi=549;e.delta=494;e.epsilon=439;e.phi=521;e.gamma=411;e.eta=603;e.iota=329;e.phi1=603;e.kappa=549;e.lambda=549;e.mu=576;e.nu=521;e.omicron=549;e.pi=549;e.theta=521;e.rho=549;e.sigma=603;e.tau=439;e.upsilon=576;e.omega1=713;e.omega=686;e.xi=493;e.psi=686;e.zeta=494;e.braceleft=480;e.bar=200;e.braceright=480;e.similar=549;e.Euro=750;e.Upsilon1=620;e.minute=247;e.lessequal=549;e.fraction=167;e.infinity=713;e.florin=500;e.club=753;e.diamond=753;e.heart=753;e.spade=753;e.arrowboth=1042;e.arrowleft=987;e.arrowup=603;e.arrowright=987;e.arrowdown=603;e.degree=400;e.plusminus=549;e.second=411;e.greaterequal=549;e.multiply=549;e.proportional=713;e.partialdiff=494;e.bullet=460;e.divide=549;e.notequal=549;e.equivalence=549;e.approxequal=549;e.ellipsis=1e3;e.arrowvertex=603;e.arrowhorizex=1e3;e.carriagereturn=658;e.aleph=823;e.Ifraktur=686;e.Rfraktur=795;e.weierstrass=987;e.circlemultiply=768;e.circleplus=768;e.emptyset=823;e.intersection=768;e.union=768;e.propersuperset=713;e.reflexsuperset=713;e.notsubset=713;e.propersubset=713;e.reflexsubset=713;e.element=713;e.notelement=713;e.angle=768;e.gradient=713;e.registerserif=790;e.copyrightserif=790;e.trademarkserif=890;e.product=823;e.radical=549;e.dotmath=250;e.logicalnot=713;e.logicaland=603;e.logicalor=603;e.arrowdblboth=1042;e.arrowdblleft=987;e.arrowdblup=603;e.arrowdblright=987;e.arrowdbldown=603;e.lozenge=494;e.angleleft=329;e.registersans=790;e.copyrightsans=790;e.trademarksans=786;e.summation=713;e.parenlefttp=384;e.parenleftex=384;e.parenleftbt=384;e.bracketlefttp=384;e.bracketleftex=384;e.bracketleftbt=384;e.bracelefttp=494;e.braceleftmid=494;e.braceleftbt=494;e.braceex=494;e.angleright=329;e.integral=274;e.integraltp=686;e.integralex=686;e.integralbt=686;e.parenrighttp=384;e.parenrightex=384;e.parenrightbt=384;e.bracketrighttp=384;e.bracketrightex=384;e.bracketrightbt=384;e.bracerighttp=494;e.bracerightmid=494;e.bracerightbt=494;e.apple=790});e["Times-Roman"]=getLookupTableFactory(function(e){e.space=250;e.exclam=333;e.quotedbl=408;e.numbersign=500;e.dollar=500;e.percent=833;e.ampersand=778;e.quoteright=333;e.parenleft=333;e.parenright=333;e.asterisk=500;e.plus=564;e.comma=250;e.hyphen=333;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=278;e.semicolon=278;e.less=564;e.equal=564;e.greater=564;e.question=444;e.at=921;e.A=722;e.B=667;e.C=667;e.D=722;e.E=611;e.F=556;e.G=722;e.H=722;e.I=333;e.J=389;e.K=722;e.L=611;e.M=889;e.N=722;e.O=722;e.P=556;e.Q=722;e.R=667;e.S=556;e.T=611;e.U=722;e.V=722;e.W=944;e.X=722;e.Y=722;e.Z=611;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=469;e.underscore=500;e.quoteleft=333;e.a=444;e.b=500;e.c=444;e.d=500;e.e=444;e.f=333;e.g=500;e.h=500;e.i=278;e.j=278;e.k=500;e.l=278;e.m=778;e.n=500;e.o=500;e.p=500;e.q=500;e.r=333;e.s=389;e.t=278;e.u=500;e.v=500;e.w=722;e.x=500;e.y=500;e.z=444;e.braceleft=480;e.bar=200;e.braceright=480;e.asciitilde=541;e.exclamdown=333;e.cent=500;e.sterling=500;e.fraction=167;e.yen=500;e.florin=500;e.section=500;e.currency=500;e.quotesingle=180;e.quotedblleft=444;e.guillemotleft=500;e.guilsinglleft=333;e.guilsinglright=333;e.fi=556;e.fl=556;e.endash=500;e.dagger=500;e.daggerdbl=500;e.periodcentered=250;e.paragraph=453;e.bullet=350;e.quotesinglbase=333;e.quotedblbase=444;e.quotedblright=444;e.guillemotright=500;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=444;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=889;e.ordfeminine=276;e.Lslash=611;e.Oslash=722;e.OE=889;e.ordmasculine=310;e.ae=667;e.dotlessi=278;e.lslash=278;e.oslash=500;e.oe=722;e.germandbls=500;e.Idieresis=333;e.eacute=444;e.abreve=444;e.uhungarumlaut=500;e.ecaron=444;e.Ydieresis=722;e.divide=564;e.Yacute=722;e.Acircumflex=722;e.aacute=444;e.Ucircumflex=722;e.yacute=500;e.scommaaccent=389;e.ecircumflex=444;e.Uring=722;e.Udieresis=722;e.aogonek=444;e.Uacute=722;e.uogonek=500;e.Edieresis=611;e.Dcroat=722;e.commaaccent=250;e.copyright=760;e.Emacron=611;e.ccaron=444;e.aring=444;e.Ncommaaccent=722;e.lacute=278;e.agrave=444;e.Tcommaaccent=611;e.Cacute=667;e.atilde=444;e.Edotaccent=611;e.scaron=389;e.scedilla=389;e.iacute=278;e.lozenge=471;e.Rcaron=667;e.Gcommaaccent=722;e.ucircumflex=500;e.acircumflex=444;e.Amacron=722;e.rcaron=333;e.ccedilla=444;e.Zdotaccent=611;e.Thorn=556;e.Omacron=722;e.Racute=667;e.Sacute=556;e.dcaron=588;e.Umacron=722;e.uring=500;e.threesuperior=300;e.Ograve=722;e.Agrave=722;e.Abreve=722;e.multiply=564;e.uacute=500;e.Tcaron=611;e.partialdiff=476;e.ydieresis=500;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=611;e.adieresis=444;e.edieresis=444;e.cacute=444;e.nacute=500;e.umacron=500;e.Ncaron=722;e.Iacute=333;e.plusminus=564;e.brokenbar=200;e.registered=760;e.Gbreve=722;e.Idotaccent=333;e.summation=600;e.Egrave=611;e.racute=333;e.omacron=500;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=667;e.lcommaaccent=278;e.tcaron=326;e.eogonek=444;e.Uogonek=722;e.Aacute=722;e.Adieresis=722;e.egrave=444;e.zacute=444;e.iogonek=278;e.Oacute=722;e.oacute=500;e.amacron=444;e.sacute=389;e.idieresis=278;e.Ocircumflex=722;e.Ugrave=722;e.Delta=612;e.thorn=500;e.twosuperior=300;e.Odieresis=722;e.mu=500;e.igrave=278;e.ohungarumlaut=500;e.Eogonek=611;e.dcroat=500;e.threequarters=750;e.Scedilla=556;e.lcaron=344;e.Kcommaaccent=722;e.Lacute=611;e.trademark=980;e.edotaccent=444;e.Igrave=333;e.Imacron=333;e.Lcaron=611;e.onehalf=750;e.lessequal=549;e.ocircumflex=500;e.ntilde=500;e.Uhungarumlaut=722;e.Eacute=611;e.emacron=444;e.gbreve=500;e.onequarter=750;e.Scaron=556;e.Scommaaccent=556;e.Ohungarumlaut=722;e.degree=400;e.ograve=500;e.Ccaron=667;e.ugrave=500;e.radical=453;e.Dcaron=722;e.rcommaaccent=333;e.Ntilde=722;e.otilde=500;e.Rcommaaccent=667;e.Lcommaaccent=611;e.Atilde=722;e.Aogonek=722;e.Aring=722;e.Otilde=722;e.zdotaccent=444;e.Ecaron=611;e.Iogonek=333;e.kcommaaccent=500;e.minus=564;e.Icircumflex=333;e.ncaron=500;e.tcommaaccent=278;e.logicalnot=564;e.odieresis=500;e.udieresis=500;e.notequal=549;e.gcommaaccent=500;e.eth=500;e.zcaron=444;e.ncommaaccent=500;e.onesuperior=300;e.imacron=278;e.Euro=500});e["Times-Bold"]=getLookupTableFactory(function(e){e.space=250;e.exclam=333;e.quotedbl=555;e.numbersign=500;e.dollar=500;e.percent=1e3;e.ampersand=833;e.quoteright=333;e.parenleft=333;e.parenright=333;e.asterisk=500;e.plus=570;e.comma=250;e.hyphen=333;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=333;e.semicolon=333;e.less=570;e.equal=570;e.greater=570;e.question=500;e.at=930;e.A=722;e.B=667;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=778;e.I=389;e.J=500;e.K=778;e.L=667;e.M=944;e.N=722;e.O=778;e.P=611;e.Q=778;e.R=722;e.S=556;e.T=667;e.U=722;e.V=722;e.W=1e3;e.X=722;e.Y=722;e.Z=667;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=581;e.underscore=500;e.quoteleft=333;e.a=500;e.b=556;e.c=444;e.d=556;e.e=444;e.f=333;e.g=500;e.h=556;e.i=278;e.j=333;e.k=556;e.l=278;e.m=833;e.n=556;e.o=500;e.p=556;e.q=556;e.r=444;e.s=389;e.t=333;e.u=556;e.v=500;e.w=722;e.x=500;e.y=500;e.z=444;e.braceleft=394;e.bar=220;e.braceright=394;e.asciitilde=520;e.exclamdown=333;e.cent=500;e.sterling=500;e.fraction=167;e.yen=500;e.florin=500;e.section=500;e.currency=500;e.quotesingle=278;e.quotedblleft=500;e.guillemotleft=500;e.guilsinglleft=333;e.guilsinglright=333;e.fi=556;e.fl=556;e.endash=500;e.dagger=500;e.daggerdbl=500;e.periodcentered=250;e.paragraph=540;e.bullet=350;e.quotesinglbase=333;e.quotedblbase=500;e.quotedblright=500;e.guillemotright=500;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=500;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=300;e.Lslash=667;e.Oslash=778;e.OE=1e3;e.ordmasculine=330;e.ae=722;e.dotlessi=278;e.lslash=278;e.oslash=500;e.oe=722;e.germandbls=556;e.Idieresis=389;e.eacute=444;e.abreve=500;e.uhungarumlaut=556;e.ecaron=444;e.Ydieresis=722;e.divide=570;e.Yacute=722;e.Acircumflex=722;e.aacute=500;e.Ucircumflex=722;e.yacute=500;e.scommaaccent=389;e.ecircumflex=444;e.Uring=722;e.Udieresis=722;e.aogonek=500;e.Uacute=722;e.uogonek=556;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=747;e.Emacron=667;e.ccaron=444;e.aring=500;e.Ncommaaccent=722;e.lacute=278;e.agrave=500;e.Tcommaaccent=667;e.Cacute=722;e.atilde=500;e.Edotaccent=667;e.scaron=389;e.scedilla=389;e.iacute=278;e.lozenge=494;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=556;e.acircumflex=500;e.Amacron=722;e.rcaron=444;e.ccedilla=444;e.Zdotaccent=667;e.Thorn=611;e.Omacron=778;e.Racute=722;e.Sacute=556;e.dcaron=672;e.Umacron=722;e.uring=556;e.threesuperior=300;e.Ograve=778;e.Agrave=722;e.Abreve=722;e.multiply=570;e.uacute=556;e.Tcaron=667;e.partialdiff=494;e.ydieresis=500;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=500;e.edieresis=444;e.cacute=444;e.nacute=556;e.umacron=556;e.Ncaron=722;e.Iacute=389;e.plusminus=570;e.brokenbar=220;e.registered=747;e.Gbreve=778;e.Idotaccent=389;e.summation=600;e.Egrave=667;e.racute=444;e.omacron=500;e.Zacute=667;e.Zcaron=667;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent=278;e.tcaron=416;e.eogonek=444;e.Uogonek=722;e.Aacute=722;e.Adieresis=722;e.egrave=444;e.zacute=444;e.iogonek=278;e.Oacute=778;e.oacute=500;e.amacron=500;e.sacute=389;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=556;e.twosuperior=300;e.Odieresis=778;e.mu=556;e.igrave=278;e.ohungarumlaut=500;e.Eogonek=667;e.dcroat=556;e.threequarters=750;e.Scedilla=556;e.lcaron=394;e.Kcommaaccent=778;e.Lacute=667;e.trademark=1e3;e.edotaccent=444;e.Igrave=389;e.Imacron=389;e.Lcaron=667;e.onehalf=750;e.lessequal=549;e.ocircumflex=500;e.ntilde=556;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=444;e.gbreve=500;e.onequarter=750;e.Scaron=556;e.Scommaaccent=556;e.Ohungarumlaut=778;e.degree=400;e.ograve=500;e.Ccaron=722;e.ugrave=556;e.radical=549;e.Dcaron=722;e.rcommaaccent=444;e.Ntilde=722;e.otilde=500;e.Rcommaaccent=722;e.Lcommaaccent=667;e.Atilde=722;e.Aogonek=722;e.Aring=722;e.Otilde=778;e.zdotaccent=444;e.Ecaron=667;e.Iogonek=389;e.kcommaaccent=556;e.minus=570;e.Icircumflex=389;e.ncaron=556;e.tcommaaccent=333;e.logicalnot=570;e.odieresis=500;e.udieresis=556;e.notequal=549;e.gcommaaccent=500;e.eth=500;e.zcaron=444;e.ncommaaccent=556;e.onesuperior=300;e.imacron=278;e.Euro=500});e["Times-BoldItalic"]=getLookupTableFactory(function(e){e.space=250;e.exclam=389;e.quotedbl=555;e.numbersign=500;e.dollar=500;e.percent=833;e.ampersand=778;e.quoteright=333;e.parenleft=333;e.parenright=333;e.asterisk=500;e.plus=570;e.comma=250;e.hyphen=333;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=333;e.semicolon=333;e.less=570;e.equal=570;e.greater=570;e.question=500;e.at=832;e.A=667;e.B=667;e.C=667;e.D=722;e.E=667;e.F=667;e.G=722;e.H=778;e.I=389;e.J=500;e.K=667;e.L=611;e.M=889;e.N=722;e.O=722;e.P=611;e.Q=722;e.R=667;e.S=556;e.T=611;e.U=722;e.V=667;e.W=889;e.X=667;e.Y=611;e.Z=611;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=570;e.underscore=500;e.quoteleft=333;e.a=500;e.b=500;e.c=444;e.d=500;e.e=444;e.f=333;e.g=500;e.h=556;e.i=278;e.j=278;e.k=500;e.l=278;e.m=778;e.n=556;e.o=500;e.p=500;e.q=500;e.r=389;e.s=389;e.t=278;e.u=556;e.v=444;e.w=667;e.x=500;e.y=444;e.z=389;e.braceleft=348;e.bar=220;e.braceright=348;e.asciitilde=570;e.exclamdown=389;e.cent=500;e.sterling=500;e.fraction=167;e.yen=500;e.florin=500;e.section=500;e.currency=500;e.quotesingle=278;e.quotedblleft=500;e.guillemotleft=500;e.guilsinglleft=333;e.guilsinglright=333;e.fi=556;e.fl=556;e.endash=500;e.dagger=500;e.daggerdbl=500;e.periodcentered=250;e.paragraph=500;e.bullet=350;e.quotesinglbase=333;e.quotedblbase=500;e.quotedblright=500;e.guillemotright=500;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=500;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=944;e.ordfeminine=266;e.Lslash=611;e.Oslash=722;e.OE=944;e.ordmasculine=300;e.ae=722;e.dotlessi=278;e.lslash=278;e.oslash=500;e.oe=722;e.germandbls=500;e.Idieresis=389;e.eacute=444;e.abreve=500;e.uhungarumlaut=556;e.ecaron=444;e.Ydieresis=611;e.divide=570;e.Yacute=611;e.Acircumflex=667;e.aacute=500;e.Ucircumflex=722;e.yacute=444;e.scommaaccent=389;e.ecircumflex=444;e.Uring=722;e.Udieresis=722;e.aogonek=500;e.Uacute=722;e.uogonek=556;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=747;e.Emacron=667;e.ccaron=444;e.aring=500;e.Ncommaaccent=722;e.lacute=278;e.agrave=500;e.Tcommaaccent=611;e.Cacute=667;e.atilde=500;e.Edotaccent=667;e.scaron=389;e.scedilla=389;e.iacute=278;e.lozenge=494;e.Rcaron=667;e.Gcommaaccent=722;e.ucircumflex=556;e.acircumflex=500;e.Amacron=667;e.rcaron=389;e.ccedilla=444;e.Zdotaccent=611;e.Thorn=611;e.Omacron=722;e.Racute=667;e.Sacute=556;e.dcaron=608;e.Umacron=722;e.uring=556;e.threesuperior=300;e.Ograve=722;e.Agrave=667;e.Abreve=667;e.multiply=570;e.uacute=556;e.Tcaron=611;e.partialdiff=494;e.ydieresis=444;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=500;e.edieresis=444;e.cacute=444;e.nacute=556;e.umacron=556;e.Ncaron=722;e.Iacute=389;e.plusminus=570;e.brokenbar=220;e.registered=747;e.Gbreve=722;e.Idotaccent=389;e.summation=600;e.Egrave=667;e.racute=389;e.omacron=500;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=667;e.lcommaaccent=278;e.tcaron=366;e.eogonek=444;e.Uogonek=722;e.Aacute=667;e.Adieresis=667;e.egrave=444;e.zacute=389;e.iogonek=278;e.Oacute=722;e.oacute=500;e.amacron=500;e.sacute=389;e.idieresis=278;e.Ocircumflex=722;e.Ugrave=722;e.Delta=612;e.thorn=500;e.twosuperior=300;e.Odieresis=722;e.mu=576;e.igrave=278;e.ohungarumlaut=500;e.Eogonek=667;e.dcroat=500;e.threequarters=750;e.Scedilla=556;e.lcaron=382;e.Kcommaaccent=667;e.Lacute=611;e.trademark=1e3;e.edotaccent=444;e.Igrave=389;e.Imacron=389;e.Lcaron=611;e.onehalf=750;e.lessequal=549;e.ocircumflex=500;e.ntilde=556;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=444;e.gbreve=500;e.onequarter=750;e.Scaron=556;e.Scommaaccent=556;e.Ohungarumlaut=722;e.degree=400;e.ograve=500;e.Ccaron=667;e.ugrave=556;e.radical=549;e.Dcaron=722;e.rcommaaccent=389;e.Ntilde=722;e.otilde=500;e.Rcommaaccent=667;e.Lcommaaccent=611;e.Atilde=667;e.Aogonek=667;e.Aring=667;e.Otilde=722;e.zdotaccent=389;e.Ecaron=667;e.Iogonek=389;e.kcommaaccent=500;e.minus=606;e.Icircumflex=389;e.ncaron=556;e.tcommaaccent=278;e.logicalnot=606;e.odieresis=500;e.udieresis=556;e.notequal=549;e.gcommaaccent=500;e.eth=500;e.zcaron=389;e.ncommaaccent=556;e.onesuperior=300;e.imacron=278;e.Euro=500});e["Times-Italic"]=getLookupTableFactory(function(e){e.space=250;e.exclam=333;e.quotedbl=420;e.numbersign=500;e.dollar=500;e.percent=833;e.ampersand=778;e.quoteright=333;e.parenleft=333;e.parenright=333;e.asterisk=500;e.plus=675;e.comma=250;e.hyphen=333;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=333;e.semicolon=333;e.less=675;e.equal=675;e.greater=675;e.question=500;e.at=920;e.A=611;e.B=611;e.C=667;e.D=722;e.E=611;e.F=611;e.G=722;e.H=722;e.I=333;e.J=444;e.K=667;e.L=556;e.M=833;e.N=667;e.O=722;e.P=611;e.Q=722;e.R=611;e.S=500;e.T=556;e.U=722;e.V=611;e.W=833;e.X=611;e.Y=556;e.Z=556;e.bracketleft=389;e.backslash=278;e.bracketright=389;e.asciicircum=422;e.underscore=500;e.quoteleft=333;e.a=500;e.b=500;e.c=444;e.d=500;e.e=444;e.f=278;e.g=500;e.h=500;e.i=278;e.j=278;e.k=444;e.l=278;e.m=722;e.n=500;e.o=500;e.p=500;e.q=500;e.r=389;e.s=389;e.t=278;e.u=500;e.v=444;e.w=667;e.x=444;e.y=444;e.z=389;e.braceleft=400;e.bar=275;e.braceright=400;e.asciitilde=541;e.exclamdown=389;e.cent=500;e.sterling=500;e.fraction=167;e.yen=500;e.florin=500;e.section=500;e.currency=500;e.quotesingle=214;e.quotedblleft=556;e.guillemotleft=500;e.guilsinglleft=333;e.guilsinglright=333;e.fi=500;e.fl=500;e.endash=500;e.dagger=500;e.daggerdbl=500;e.periodcentered=250;e.paragraph=523;e.bullet=350;e.quotesinglbase=333;e.quotedblbase=556;e.quotedblright=556;e.guillemotright=500;e.ellipsis=889;e.perthousand=1e3;e.questiondown=500;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=889;e.AE=889;e.ordfeminine=276;e.Lslash=556;e.Oslash=722;e.OE=944;e.ordmasculine=310;e.ae=667;e.dotlessi=278;e.lslash=278;e.oslash=500;e.oe=667;e.germandbls=500;e.Idieresis=333;e.eacute=444;e.abreve=500;e.uhungarumlaut=500;e.ecaron=444;e.Ydieresis=556;e.divide=675;e.Yacute=556;e.Acircumflex=611;e.aacute=500;e.Ucircumflex=722;e.yacute=444;e.scommaaccent=389;e.ecircumflex=444;e.Uring=722;e.Udieresis=722;e.aogonek=500;e.Uacute=722;e.uogonek=500;e.Edieresis=611;e.Dcroat=722;e.commaaccent=250;e.copyright=760;e.Emacron=611;e.ccaron=444;e.aring=500;e.Ncommaaccent=667;e.lacute=278;e.agrave=500;e.Tcommaaccent=556;e.Cacute=667;e.atilde=500;e.Edotaccent=611;e.scaron=389;e.scedilla=389;e.iacute=278;e.lozenge=471;e.Rcaron=611;e.Gcommaaccent=722;e.ucircumflex=500;e.acircumflex=500;e.Amacron=611;e.rcaron=389;e.ccedilla=444;e.Zdotaccent=556;e.Thorn=611;e.Omacron=722;e.Racute=611;e.Sacute=500;e.dcaron=544;e.Umacron=722;e.uring=500;e.threesuperior=300;e.Ograve=722;e.Agrave=611;e.Abreve=611;e.multiply=675;e.uacute=500;e.Tcaron=556;e.partialdiff=476;e.ydieresis=444;e.Nacute=667;e.icircumflex=278;e.Ecircumflex=611;e.adieresis=500;e.edieresis=444;e.cacute=444;e.nacute=500;e.umacron=500;e.Ncaron=667;e.Iacute=333;e.plusminus=675;e.brokenbar=275;e.registered=760;e.Gbreve=722;e.Idotaccent=333;e.summation=600;e.Egrave=611;e.racute=389;e.omacron=500;e.Zacute=556;e.Zcaron=556;e.greaterequal=549;e.Eth=722;e.Ccedilla=667;e.lcommaaccent=278;e.tcaron=300;e.eogonek=444;e.Uogonek=722;e.Aacute=611;e.Adieresis=611;e.egrave=444;e.zacute=389;e.iogonek=278;e.Oacute=722;e.oacute=500;e.amacron=500;e.sacute=389;e.idieresis=278;e.Ocircumflex=722;e.Ugrave=722;e.Delta=612;e.thorn=500;e.twosuperior=300;e.Odieresis=722;e.mu=500;e.igrave=278;e.ohungarumlaut=500;e.Eogonek=611;e.dcroat=500;e.threequarters=750;e.Scedilla=500;e.lcaron=300;e.Kcommaaccent=667;e.Lacute=556;e.trademark=980;e.edotaccent=444;e.Igrave=333;e.Imacron=333;e.Lcaron=611;e.onehalf=750;e.lessequal=549;e.ocircumflex=500;e.ntilde=500;e.Uhungarumlaut=722;e.Eacute=611;e.emacron=444;e.gbreve=500;e.onequarter=750;e.Scaron=500;e.Scommaaccent=500;e.Ohungarumlaut=722;e.degree=400;e.ograve=500;e.Ccaron=667;e.ugrave=500;e.radical=453;e.Dcaron=722;e.rcommaaccent=389;e.Ntilde=667;e.otilde=500;e.Rcommaaccent=611;e.Lcommaaccent=556;e.Atilde=611;e.Aogonek=611;e.Aring=611;e.Otilde=722;e.zdotaccent=389;e.Ecaron=611;e.Iogonek=333;e.kcommaaccent=444;e.minus=675;e.Icircumflex=333;e.ncaron=500;e.tcommaaccent=278;e.logicalnot=675;e.odieresis=500;e.udieresis=500;e.notequal=549;e.gcommaaccent=500;e.eth=500;e.zcaron=389;e.ncommaaccent=500;e.onesuperior=300;e.imacron=278;e.Euro=500});e.ZapfDingbats=getLookupTableFactory(function(e){e.space=278;e.a1=974;e.a2=961;e.a202=974;e.a3=980;e.a4=719;e.a5=789;e.a119=790;e.a118=791;e.a117=690;e.a11=960;e.a12=939;e.a13=549;e.a14=855;e.a15=911;e.a16=933;e.a105=911;e.a17=945;e.a18=974;e.a19=755;e.a20=846;e.a21=762;e.a22=761;e.a23=571;e.a24=677;e.a25=763;e.a26=760;e.a27=759;e.a28=754;e.a6=494;e.a7=552;e.a8=537;e.a9=577;e.a10=692;e.a29=786;e.a30=788;e.a31=788;e.a32=790;e.a33=793;e.a34=794;e.a35=816;e.a36=823;e.a37=789;e.a38=841;e.a39=823;e.a40=833;e.a41=816;e.a42=831;e.a43=923;e.a44=744;e.a45=723;e.a46=749;e.a47=790;e.a48=792;e.a49=695;e.a50=776;e.a51=768;e.a52=792;e.a53=759;e.a54=707;e.a55=708;e.a56=682;e.a57=701;e.a58=826;e.a59=815;e.a60=789;e.a61=789;e.a62=707;e.a63=687;e.a64=696;e.a65=689;e.a66=786;e.a67=787;e.a68=713;e.a69=791;e.a70=785;e.a71=791;e.a72=873;e.a73=761;e.a74=762;e.a203=762;e.a75=759;e.a204=759;e.a76=892;e.a77=892;e.a78=788;e.a79=784;e.a81=438;e.a82=138;e.a83=277;e.a84=415;e.a97=392;e.a98=392;e.a99=668;e.a100=668;e.a89=390;e.a90=390;e.a93=317;e.a94=317;e.a91=276;e.a92=276;e.a205=509;e.a85=509;e.a206=410;e.a86=410;e.a87=234;e.a88=234;e.a95=334;e.a96=334;e.a101=732;e.a102=544;e.a103=544;e.a104=910;e.a106=667;e.a107=760;e.a108=760;e.a112=776;e.a111=595;e.a110=694;e.a109=626;e.a120=788;e.a121=788;e.a122=788;e.a123=788;e.a124=788;e.a125=788;e.a126=788;e.a127=788;e.a128=788;e.a129=788;e.a130=788;e.a131=788;e.a132=788;e.a133=788;e.a134=788;e.a135=788;e.a136=788;e.a137=788;e.a138=788;e.a139=788;e.a140=788;e.a141=788;e.a142=788;e.a143=788;e.a144=788;e.a145=788;e.a146=788;e.a147=788;e.a148=788;e.a149=788;e.a150=788;e.a151=788;e.a152=788;e.a153=788;e.a154=788;e.a155=788;e.a156=788;e.a157=788;e.a158=788;e.a159=788;e.a160=894;e.a161=838;e.a163=1016;e.a164=458;e.a196=748;e.a165=924;e.a192=748;e.a166=918;e.a167=927;e.a168=928;e.a169=928;e.a170=834;e.a171=873;e.a172=828;e.a173=924;e.a162=924;e.a174=917;e.a175=930;e.a176=931;e.a177=463;e.a178=883;e.a179=836;e.a193=836;e.a180=867;e.a199=867;e.a181=696;e.a200=696;e.a182=874;e.a201=874;e.a183=760;e.a184=946;e.a197=771;e.a185=865;e.a194=771;e.a198=888;e.a186=967;e.a195=888;e.a187=831;e.a188=873;e.a189=927;e.a190=970;e.a191=918})}),Zn=getLookupTableFactory(function(e){e.Courier={ascent:629,descent:-157,capHeight:562,xHeight:-426};e["Courier-Bold"]={ascent:629,descent:-157,capHeight:562,xHeight:439};e["Courier-Oblique"]={ascent:629,descent:-157,capHeight:562,xHeight:426};e["Courier-BoldOblique"]={ascent:629,descent:-157,capHeight:562,xHeight:426};e.Helvetica={ascent:718,descent:-207,capHeight:718,xHeight:523};e["Helvetica-Bold"]={ascent:718,descent:-207,capHeight:718,xHeight:532};e["Helvetica-Oblique"]={ascent:718,descent:-207,capHeight:718,xHeight:523};e["Helvetica-BoldOblique"]={ascent:718,descent:-207,capHeight:718,xHeight:532};e["Times-Roman"]={ascent:683,descent:-217,capHeight:662,xHeight:450};e["Times-Bold"]={ascent:683,descent:-217,capHeight:676,xHeight:461};e["Times-Italic"]={ascent:683,descent:-217,capHeight:653,xHeight:441};e["Times-BoldItalic"]={ascent:683,descent:-217,capHeight:669,xHeight:462};e.Symbol={ascent:Math.NaN,descent:Math.NaN,capHeight:Math.NaN,xHeight:Math.NaN};e.ZapfDingbats={ascent:Math.NaN,descent:Math.NaN,capHeight:Math.NaN,xHeight:Math.NaN}});class OpenTypeFileBuilder{#we=new Map;constructor(e){this.sfnt=e}static getSearchParams(e,t){let a=1,n=0;for(;(a^e)>a;){a<<=1;n++}const s=a*t;return{range:s,entry:n,rangeShift:t*e-s}}toArray(){let e=this.sfnt;const t=this.#we,a=[...t.keys()].sort(),n=a.length;let s=12+16*n;const r=[s];for(let e=0;e<n;e++){s+=(t.get(a[e]).length+3&-4)>>>0;r.push(s)}const i=new Uint8Array(s),o=new DataView(i.buffer);for(let e=0;e<n;e++){const n=t.get(a[e]);i.set(n,r[e])}"true"===e&&(e="\0\0\0");i.set(stringToBytes(e),0);o.setInt16(4,n);const l=OpenTypeFileBuilder.getSearchParams(n,16);o.setInt16(6,l.range);o.setInt16(8,l.entry);o.setInt16(10,l.rangeShift);s=12;for(let e=0;e<n;e++){const n=a[e];i.set(stringToBytes(n),s);let l=0;for(let t=r[e],a=r[e+1];t<a;t+=4){l=l+o.getUint32(t)>>>0}o.setInt32(s+4,l);o.setInt32(s+8,r[e]);o.setInt32(s+12,t.get(n).length);s+=16}this.#we.clear();return i}addTable(e,t){if(this.#we.has(e))throw new Error(`Table ${e} already exists`);this.#we.set(e,t)}}const es=[4],ts=[5],as=[6],ns=[7],ss=[8],rs=[12,35],is=[14],os=[21],ls=[22],fs=[30],cs=[31];class Type1CharString{width=0;lsb=0;flexing=!1;output=[];stack=[];convert(e,t,a){const n=e.length;let s,r,i,o=!1;for(let l=0;l<n;l++){let n=e[l];if(n<32){12===n&&(n=(n<<8)+e[++l]);switch(n){case 1:case 3:case 9:case 3072:case 3073:case 3074:case 3105:this.stack=[];break;case 4:if(this.flexing){if(this.stack.length<1){o=!0;break}const e=this.stack.pop();this.stack.push(0,e);break}o=this.executeCommand(1,es);break;case 5:o=this.executeCommand(2,ts);break;case 6:o=this.executeCommand(1,as);break;case 7:o=this.executeCommand(1,ns);break;case 8:o=this.executeCommand(6,ss);break;case 10:if(this.stack.length<1){o=!0;break}i=this.stack.pop();if(!t[i]){o=!0;break}o=this.convert(t[i],t,a);break;case 11:return o;case 13:if(this.stack.length<2){o=!0;break}s=this.stack.pop();r=this.stack.pop();this.lsb=r;this.width=s;this.stack.push(s,r);o=this.executeCommand(2,ls);break;case 14:this.output.push(is[0]);break;case 21:if(this.flexing)break;o=this.executeCommand(2,os);break;case 22:if(this.flexing){this.stack.push(0);break}o=this.executeCommand(1,ls);break;case 30:o=this.executeCommand(4,fs);break;case 31:o=this.executeCommand(4,cs);break;case 3078:if(a){const e=this.stack.at(-5);this.seac=this.stack.splice(-4,4);this.seac[0]+=this.lsb-e;o=this.executeCommand(0,is)}else o=this.executeCommand(4,is);break;case 3079:if(this.stack.length<4){o=!0;break}this.stack.pop();s=this.stack.pop();const e=this.stack.pop();r=this.stack.pop();this.lsb=r;this.width=s;this.stack.push(s,r,e);o=this.executeCommand(3,os);break;case 3084:if(this.stack.length<2){o=!0;break}const l=this.stack.pop(),f=this.stack.pop();this.stack.push(f/l);break;case 3088:if(this.stack.length<2){o=!0;break}i=this.stack.pop();const c=this.stack.pop();if(0===i&&3===c){const e=this.stack.splice(-17,17);this.stack.push(e[2]+e[0],e[3]+e[1],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14]);o=this.executeCommand(13,rs,!0);this.flexing=!1;this.stack.push(e[15],e[16])}else 1===i&&0===c&&(this.flexing=!0);break;case 3089:break;default:warn('Unknown type 1 charstring command of "'+n+'"')}if(o)break}else{n<=246?n-=139:n=n<=250?256*(n-247)+e[++l]+108:n<=254?-256*(n-251)-e[++l]-108:(255&e[++l])<<24|(255&e[++l])<<16|(255&e[++l])<<8|255&e[++l];this.stack.push(n)}}return o}executeCommand(e,t,a){const n=this.stack.length;if(e>n)return!0;const s=n-e;for(let e=s;e<n;e++){let t=this.stack[e];if(Number.isInteger(t))this.output.push(28,t>>8&255,255&t);else{t=65536*t|0;this.output.push(255,t>>24&255,t>>16&255,t>>8&255,255&t)}}this.output.push(...t);a?this.stack.splice(s,e):this.stack.length=0;return!1}}function isHexDigit(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function decrypt(e,t,a){if(a>=e.length)return new Uint8Array(0);let n,s,r=0|t;for(n=0;n<a;n++)r=52845*(e[n]+r)+22719&65535;const i=e.length-a,o=new Uint8Array(i);for(n=a,s=0;s<i;n++,s++){const t=e[n];o[s]=t^r>>8;r=52845*(t+r)+22719&65535}return o}function isSpecial(e){return 47===e||91===e||93===e||123===e||125===e||40===e||41===e}class Type1Parser{constructor(e,t,a){if(t){const t=e.getBytes(),a=!((isHexDigit(t[0])||isWhiteSpace(t[0]))&&isHexDigit(t[1])&&isHexDigit(t[2])&&isHexDigit(t[3])&&isHexDigit(t[4])&&isHexDigit(t[5])&&isHexDigit(t[6])&&isHexDigit(t[7]));e=new Stream(a?decrypt(t,55665,4):function decryptAscii(e,t,a){let n=0|t;const s=e.length,r=new Uint8Array(s>>>1);let i,o;for(i=0,o=0;i<s;i++){const t=e[i];if(!isHexDigit(t))continue;i++;let a;for(;i<s&&!isHexDigit(a=e[i]);)i++;if(i<s){const e=parseInt(String.fromCharCode(t,a),16);r[o++]=e^n>>8;n=52845*(e+n)+22719&65535}}return r.slice(a,o)}(t,55665,4))}this.seacAnalysisEnabled=!!a;this.stream=e;this.nextChar()}readNumberArray(){this.getToken();const e=[];for(;;){const t=this.getToken();if(null===t||"]"===t||"}"===t)break;e.push(parseFloat(t||0))}return e}readNumber(){const e=this.getToken();return parseFloat(e||0)}readInt(){const e=this.getToken();return 0|parseInt(e||0,10)}readBoolean(){return"true"===this.getToken()?1:0}nextChar(){return this.currentChar=this.stream.getByte()}prevChar(){this.stream.skip(-2);return this.currentChar=this.stream.getByte()}getToken(){let e=!1,t=this.currentChar;for(;;){if(-1===t)return null;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!isWhiteSpace(t))break;t=this.nextChar()}if(isSpecial(t)){this.nextChar();return String.fromCharCode(t)}let a="";do{a+=String.fromCharCode(t);t=this.nextChar()}while(t>=0&&!isWhiteSpace(t)&&!isSpecial(t));return a}readCharStrings(e,t){return-1===t?e:decrypt(e,4330,t)}extractFontProgram(e){const t=this.stream,a=[],n=[],s=new Map([["lenIV",4]]),r={subrs:[],charstrings:[],properties:{privateData:s}};let i,o,l,f=!1,c=!1;for(;null!==(i=this.getToken());)if("/"===i){i=this.getToken();switch(i){case"CharStrings":if(c)break;c=!0;this.getToken();this.getToken();this.getToken();this.getToken();for(;;){i=this.getToken();if(null===i||"end"===i)break;if("/"!==i)continue;const e=this.getToken();o=this.readInt();this.getToken();l=o>0?t.getBytes(o):new Uint8Array(0);const a=this.readCharStrings(l,s.get("lenIV"));this.nextChar();i=this.getToken();"noaccess"===i?this.getToken():"/"===i&&this.prevChar();n.push({glyph:e,encoded:a})}break;case"Subrs":if(f)break;f=!0;this.readInt();this.getToken();for(;"dup"===this.getToken();){const e=this.readInt();o=this.readInt();this.getToken();l=o>0?t.getBytes(o):new Uint8Array(0);const n=this.readCharStrings(l,s.get("lenIV"));this.nextChar();i=this.getToken();"noaccess"===i&&this.getToken();a[e]=n}break;case"BlueValues":case"OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":this.readNumberArray();0;break;case"StemSnapH":case"StemSnapV":s.set(i,this.readNumberArray());break;case"StdHW":case"StdVW":s.set(i,this.readNumberArray()[0]);break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"LanguageGroup":s.set(i,this.readNumber());break;case"ExpansionFactor":s.set(i,this.readNumber()||.06);break;case"ForceBold":s.set(i,this.readBoolean())}}for(const{encoded:t,glyph:s}of n){const n=new Type1CharString,i={glyphName:s,charstring:n.convert(t,a,this.seacAnalysisEnabled)?[14]:n.output,width:n.width,lsb:n.lsb,seac:n.seac};".notdef"===s?r.charstrings.unshift(i):r.charstrings.push(i);if(e.builtInEncoding){const t=e.builtInEncoding.indexOf(s);t>-1&&void 0===e.widths[t]&&t>=e.firstChar&&t<=e.lastChar&&(e.widths[t]=n.width)}}return r}extractCidKeyedFontProgram(e){const t=this.stream,a=new Map([["lenIV",4]]),n={subrs:[],charstrings:[],properties:{privateData:a}};let s=0,r=-1,i=1,o=0,l=-1,f=0,c=0,h=0,u=!1,m=!1;const p=[];function rememberToken(e){p.push(e);p.length>4&&p.shift()}let d;for(;null!==(d=this.getToken());){if("StartData"===d){const e=p.at(-3),t=p.at(-1);if("("!==p.at(-4)||")"!==p.at(-2)||"Binary"!==e&&"Hex"!==e||!/^\d+$/.test(t))return null;h=parseInt(t,10);if(h<=0)return null;u="Hex"===e;m=!0;break}rememberToken(d);if("/"===d){d=this.getToken();rememberToken(d);switch(d){case"FontMatrix":e.fontMatrix=this.readNumberArray();break;case"FontBBox":const t=this.readNumberArray();e.ascent=Math.max(t[3],t[1]);e.descent=Math.min(t[1],t[3]);e.ascentScaled=!0;break;case"CIDCount":s=this.readInt();break;case"CIDMapOffset":r=this.readInt();break;case"FDBytes":i=this.readInt();break;case"GDBytes":o=this.readInt();break;case"SubrMapOffset":l=this.readInt();break;case"SDBytes":f=this.readInt();break;case"SubrCount":c=this.readInt();break;case"BlueValues":case"OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":this.readNumberArray();break;case"StemSnapH":case"StemSnapV":a.set(d,this.readNumberArray());break;case"StdHW":case"StdVW":a.set(d,this.readNumberArray()[0]);break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"LanguageGroup":a.set(d,this.readNumber());break;case"ExpansionFactor":a.set(d,this.readNumber()||.06);break;case"ForceBold":a.set(d,this.readBoolean())}}}if(!m||s<=0||r<0||i<0||i>4||o<1||o>4)return null;const g=t.end-t.pos;if(h>g)if(u){if(h>2*g)return null}else h=g;let b=t.getBytes(u?void 0:h);if(u){const e=new Uint8Array(h);let t=-1,a=0;for(let n=0,s=b.length;n<s&&a<h;n++){const s=b[n];if(isHexDigit(s))if(t<0)t=s;else{e[a++]=parseInt(String.fromCharCode(t,s),16);t=-1}}if(a!==h)return null;b=e}const w=a.get("lenIV"),j=i+o,k=[];function readUint(e,t){let a=0;for(let n=0;n<t;n++)a=a<<8|b[e+n];return a>>>0}if(r+(s+1)*j>b.length||c>0&&(l<0||f<1||f>4||l+(c+1)*f>b.length))return null;if(i>0)for(let e=0;e<s;e++)if(0!==readUint(r+e*j,i))return null;if(c>0){const e=new Array(c+1);for(let t=0;t<=c;t++)e[t]=readUint(l+t*f,f);for(let t=0;t<c;t++){const a=e[t],n=e[t+1];n>b.length||n<a?k[t]=new Uint8Array(0):k[t]=this.readCharStrings(b.subarray(a,n),w)}}const y=[];let q=readUint(r+i,o);for(let e=0;e<s;e++){const t=readUint(r+(e+1)*j+i,o),a=0===e?".notdef":`cid${e}`;if(t>q&&t<=b.length){const e=this.readCharStrings(b.subarray(q,t),w),n=new Type1CharString,s=n.convert(e,k,this.seacAnalysisEnabled);y.push({glyphName:a,charstring:s?[14]:n.output,width:n.width,lsb:n.lsb,seac:n.seac})}else{const e=y[0];y.push({glyphName:a,charstring:e?.charstring.slice()||[139,14],width:e?.width||0,lsb:e?.lsb||0})}q=t}n.subrs=k;n.charstrings=y;return n}extractFontHeader(e){let t;for(;null!==(t=this.getToken());)if("/"===t){t=this.getToken();switch(t){case"FontMatrix":const a=this.readNumberArray();e.fontMatrix=a;break;case"Encoding":const n=this.getToken();let s;if(/^\d+$/.test(n)){s=[];const e=0|parseInt(n,10);this.getToken();for(let a=0;a<e;a++){t=this.getToken();for(;"dup"!==t&&"def"!==t;){t=this.getToken();if(null===t)return}if("def"===t)break;const e=this.readInt();this.getToken();const a=this.getToken();s[e]=a;this.getToken()}}else s=getEncoding(n);e.builtInEncoding=s;break;case"FontBBox":const r=this.readNumberArray();e.ascent=Math.max(r[3],r[1]);e.descent=Math.min(r[1],r[3]);e.ascentScaled=!0}}}}function findBlock(e,t,a){const n=e.length,s=t.length,r=n-s;let i=a,o=!1;for(;i<r;){let a=0;for(;a<s&&e[i+a]===t[a];)a++;if(a>=s){i+=a;for(;i<n&&isWhiteSpace(e[i]);)i++;o=!0;break}i++}return{found:o,length:i}}class Type1Font{#je;constructor(e,t,a){let n;a.composite&&function isCidKeyedType1File(e){const t=e.peekBytes(2048);if(t.length<2||37!==t[0]||33!==t[1])return!1;const a=bytesToString(t);return a.includes("Resource-CIDFont")||/\/CIDFontType\s+0\b/.test(a)}(t)&&(n=this.#ke(t,a));n||=this.#ye(t,a);for(const e in n.properties)a[e]=n.properties[e];const s=n.charstrings,r=this.getType2Charstrings(s),i=this.getType2Subrs(n.subrs);this.charstrings=s;this.data=this.wrap(e,r,this.charstrings,i,a);this.seacs=this.getSeacs(n.charstrings)}#ye(e,t){let a=t.length1,n=t.length2,s=e.peekBytes(6);const r=128===s[0]&&1===s[1];if(r){e.skip(6);a=s[5]<<24|s[4]<<16|s[3]<<8|s[2]}const i=function getHeaderBlock(e,t){const a=[101,101,120,101,99],n=e.pos;let s,r,i,o;try{s=e.getBytes(t);r=s.length}catch{}if(r===t){i=findBlock(s,a,t-2*a.length);if(i.found&&i.length===t)return{stream:new Stream(s),length:t}}warn('Invalid "Length1" property in Type1 font -- trying to recover.');e.pos=n;for(;;){i=findBlock(e.peekBytes(2048),a,0);if(0===i.length)break;e.pos+=i.length;if(i.found){o=e.pos-n;break}}e.pos=n;if(o)return{stream:new Stream(e.getBytes(o)),length:o};warn('Unable to recover "Length1" property in Type1 font -- using as is.');return{stream:new Stream(e.getBytes(t)),length:t}}(e,a);new Type1Parser(i.stream,!1,!0).extractFontHeader(t);if(r){s=e.getBytes(6);n=s[5]<<24|s[4]<<16|s[3]<<8|s[2]}const o=function getEexecBlock(e,t){const a=e.getBytes();if(0===a.length)throw new FormatError("getEexecBlock - no font program found.");return{stream:new Stream(a),length:a.length}}(e),l=new Type1Parser(o.stream,!0,!0).extractFontProgram(t);this.#je=i.length+o.length;return l}#ke(e,t){const a=e.pos,n=e.end-a,s=new Type1Parser(e,!1,!0).extractCidKeyedFontProgram(t);if(!s){e.pos=a;warn("Type1Font: unable to parse CID-keyed Type 1 font.");return null}this.#je=n;return s}get numGlyphs(){return this.charstrings.length+1}getCharset(){const e=[".notdef"];for(const{glyphName:t}of this.charstrings)e.push(t);return e}getGlyphMapping(e){const t=this.charstrings;if(e.composite){const a=new Map;for(let n=0,s=t.length;n<s;n++){const t=e.cMap.charCodeOf(n);a.set(t,n+1)}return a}const a=[".notdef"];let n,s;for(s=0;s<t.length;s++)a.push(t[s].glyphName);const r=e.builtInEncoding;if(r){n=Object.create(null);for(const e in r){s=a.indexOf(r[e]);s>=0&&(n[e]=s)}}return type1FontGlyphMapping(e,n,a)}hasGlyphId(e){if(e<0||e>=this.numGlyphs)return!1;if(0===e)return!0;return this.charstrings[e-1].charstring.length>0}getSeacs(e){const t=new Map;for(let a=0,n=e.length;a<n;a++){const{seac:n}=e[a];n&&t.set(a+1,n)}return t}getType2Charstrings(e){const t=[];for(const a of e)t.push(a.charstring);return t}getType2Subrs(e){let t=0;const a=e.length;t=a<1133?107:a<33769?1131:32768;const n=[];let s;for(s=0;s<t;s++)n.push([11]);for(s=0;s<a;s++)n.push(e[s]);return n}wrap(e,t,a,n,s){const r=new CFF(this.#je);r.header=new CFFHeader(1,0,4,4);r.names=[e];const i=new CFFTopDict;i.setByName("version",391);i.setByName("Notice",392);i.setByName("FullName",393);i.setByName("FamilyName",394);i.setByName("Weight",395);i.setByName("Encoding",null);i.setByName("FontMatrix",s.fontMatrix);i.setByName("FontBBox",s.bbox);i.setByName("charset",null);i.setByName("CharStrings",null);i.setByName("Private",null);r.topDict=i;const o=new CFFStrings;o.add("Version 0.11");o.add("See original notice");o.add(e);o.add(e);o.add("Medium");r.strings=o;r.globalSubrIndex=new CFFIndex;const l=t.length,f=[".notdef"];for(let e=0;e<l;e++){const{glyphName:t}=a[e];-1===On.indexOf(t)&&o.add(t);f.push(t)}r.charset=new CFFCharset(!1,0,f);const c=new CFFIndex;c.add([139,14]);for(let e=0;e<l;e++)c.add(t[e]);r.charStrings=c;const h=new CFFPrivateDict;h.setByName("Subrs",null);const u=["BlueValues","OtherBlues","FamilyBlues","FamilyOtherBlues","StemSnapH","StemSnapV","BlueShift","BlueFuzz","BlueScale","LanguageGroup","ExpansionFactor","ForceBold","StdHW","StdVW"];for(const e of u){if(!s.privateData.has(e))continue;const t=s.privateData.get(e);if(Array.isArray(t))for(let e=t.length-1;e>0;e--)t[e]-=t[e-1];h.setByName(e,t)}r.topDict.privateDict=h;const m=new CFFIndex;for(const e of n)m.add(e);h.subrsIndex=m;return new CFFCompiler(r).compile()}}const hs=[[57344,63743],[1048576,1114109]],us=1e3,ms=["bbox","black","bold","cssFontInfo","data","disableFontFace","fallbackName","fontExtraProperties","fontMatrix","isInvalidPDFjsFont","isType3Font","italic","loadedName","missingFile","remeasure","systemFontInfo","vertical"],ps=["ascent","composite","defaultEncoding","defaultVMetrics","defaultWidth","descent","differences","isMonospace","isSerifFont","isSymbolicFont","name","seacMap","subtype","toFontChar","type","vmetrics","widths"];function adjustWidths(e){if(!e.fontMatrix||e.fontMatrix[0]===n[0])return;const t=.001/e.fontMatrix[0],a=e.widths;for(const e in a)a[e]*=t;e.defaultWidth*=t}function amendFallbackToUnicode(e){if(!e.fallbackToUnicode||e.toUnicode instanceof IdentityToUnicodeMap)return;const t=new Map;for(const[a,n]of e.fallbackToUnicode)e.toUnicode.has(a)||t.set(a,n);e.toUnicode.amend(t)}class fonts_Glyph{constructor(e,t,a,n,s,r,i,o,l){this.originalCharCode=e;this.fontChar=t;this.unicode=a;this.accent=n;this.width=s;this.vmetric=r;this.operatorListId=i;this.isSpace=o;this.isInFont=l}get category(){return shadow(this,"category",function getCharUnicodeCategory(e){const t=qn.get(e);if(t)return t;const a=e.match(yn),n={isWhitespace:!!a?.[1],isZeroWidthDiacritic:!!a?.[2],isInvisibleFormatMark:!!a?.[3]};qn.set(e,n);return n}(this.unicode),!0)}}function int16(e,t){return(e<<8)+t}function writeSignedInt16(e,t,a){e[t+1]=a;e[t]=a>>>8}function signedInt16(e,t){const a=(e<<8)+t;return 32768&a?a-65536:a}function writeUint32(e,t,a){e[t+3]=255&a;e[t+2]=a>>>8;e[t+1]=a>>>16;e[t]=a>>>24}function isTrueTypeCollectionFile(e){return"ttcf"===bytesToString(e.peekBytes(4))}function getFontFileType(e,{type:t,subtype:a,composite:n}){let s,r;if(function isTrueTypeFile(e){const t=bytesToString(e.peekBytes(4));return"\0\0\0"===t||"true"===t}(e)||isTrueTypeCollectionFile(e))s=n?"CIDFontType2":"TrueType";else if(function isOpenTypeFile(e){return"OTTO"===bytesToString(e.peekBytes(4))}(e))s=n?"CIDFontType2":"OpenType";else if(function isType1File(e){const t=e.peekBytes(2);return 37===t[0]&&33===t[1]||128===t[0]&&1===t[1]}(e))s=n?"CIDFontType0":"MMType1"===t?"MMType1":"Type1";else if(function isCFFFile(e){const t=e.peekBytes(4);return t[0]>=1&&t[3]>=1&&t[3]<=4}(e))if(n){s="CIDFontType0";r="CIDFontType0C"}else{s="MMType1"===t?"MMType1":"Type1";r="Type1C"}else{warn("getFontFileType: Unable to detect correct font file Type/Subtype.");s=t;r=a}return[s,r]}function applyStandardFontGlyphMap(e,t){for(const a in t)e.set(+a,t[a])}const ds=getLookupTableFactory(e=>{let t=3;for(const[a,n]of[[32,126],[161,254]])for(let s=a;s<=n;s++)e[t++]=dn[s]},!0);function buildToFontChar(e,t,a){const n=new Map;let s;for(let a=0,r=e.length;a<r;a++){s=getUnicodeForGlyph(e[a],t);-1!==s&&n.set(a,s)}for(const[e,r]of a){s=getUnicodeForGlyph(r,t);-1!==s&&n.set(e,s)}return n}function isMacNameRecord(e){return 1===e.platform&&0===e.encoding&&0===e.language}function isWinNameRecord(e){return 3===e.platform&&1===e.encoding&&1033===e.language}function convertCidString(e,t,a=!1){switch(t.length){case 1:return t.charCodeAt(0);case 2:return t.charCodeAt(0)<<8|t.charCodeAt(1)}const n=`Unsupported CID string (charCode ${e}): "${t}".`;if(a)throw new FormatError(n);warn(n);return t}function adjustMapping(e,t,a,n){const s=new Map,r=new Map,i=new Map,o=new Set;let l=0;let f=hs[l][0],c=hs[l][1];const isInPrivateArea=e=>hs[0][0]<=e&&e<=hs[0][1]||hs[1][0]<=e&&e<=hs[1][1];let h=null;for(const[u,m]of e){if(!t(m))continue;if(f>c){l++;if(l>=hs.length){warn("Ran out of space in font private use area.");break}f=hs[l][0];c=hs[l][1]}const e=f++,p=0===m?a:m;let d=n.get(u);if("string"==typeof d)if(1===d.length)d=d.codePointAt(0);else{if(!h){h=new Map;for(let e=64256;e<=64335;e++){const t=String.fromCharCode(e).normalize("NFKD");t.length>1&&h.set(t,e)}}d=h.get(d)||d.codePointAt(0)}if(d&&!isInPrivateArea(d)&&!o.has(p)){r.set(d,p);o.add(p)}s.set(e,p);i.set(u,e)}return{toFontChar:i,charCodeToGlyphId:s,toUnicodeExtraMap:r,nextAvailableFontCharCode:f}}function createCmapTable(e,t,a){const n=function getRanges(e,t,a){const n=[];for(const[t,s]of e)s>=a||n.push({fontCharCode:t,glyphId:s});if(t)for(const[e,s]of t)s>=a||n.push({fontCharCode:e,glyphId:s});0===n.length&&n.push({fontCharCode:0,glyphId:0});n.sort((e,t)=>e.fontCharCode-t.fontCharCode);const s=[],r=n.length;for(let e=0;e<r;){const t=n[e].fontCharCode,a=[n[e].glyphId];++e;let i=t;for(;e<r&&i+1===n[e].fontCharCode;){a.push(n[e].glyphId);++i;++e;if(65535===i)break}s.push([t,i,a])}return s}(e,t,a),s=n.at(-1)[1]>65535;let r,i,o;for(r=n.length-1;r>=0&&!(n[r][0]<=65535);--r);const l=r+1;n[r][0]<65535&&65535===n[r][1]&&(n[r][1]=65534);const f=n[r][1]<65535?1:0,c=l+f,h=OpenTypeFileBuilder.getSearchParams(c,2),u=2*l+2*f,m=new DataBuilder({exactLength:u}),p=new DataBuilder({exactLength:u}),d=new DataBuilder({exactLength:u}),g=new DataBuilder({exactLength:u}),b=new DataBuilder({});let w=0,j=!1;for(r=0;r<l;r++){const[e,t,a]=n[r];m.setInt16(e);p.setInt16(t);let s=!0;for(i=1,o=a.length;i<o;++i)if(a[i]!==a[i-1]+1){s=!1;break}if(s){const t=a[0];d.setInt16(t-e&65535);g.skip(2)}else{const n=2*(c-r)+2*w;w+=t-e+1;d.skip(2);if(n>65535){j=!0;g.skip(2)}else g.setInt16(n);for(i=0,o=a.length;i<o;++i)b.setInt16(a[i])}}if(f>0){p.setArray([255,255]);m.setArray([255,255]);d.setArray([0,1]);g.skip(2)}const k=new DataBuilder({exactLength:12+m.length+p.length+d.length+g.length+b.length});k.skip(2);k.setInt16(2*c);k.setInt16(h.range);k.setInt16(h.entry);k.setInt16(h.rangeShift);k.setArray(p.data);k.skip(2);k.setArray(m.data);k.setArray(d.data);k.setArray(g.data);k.setArray(b.data);const y=!j&&k.length+4<=65535,q=s||!y,v=(y?1:0)+(q?1:0);let S=null,x=null;if(q){S=new DataBuilder({});for(const e of n){let t=e[0];const a=e[2];let n=a[0];for(i=1,o=a.length;i<o;++i)if(a[i]!==a[i-1]+1){const s=e[0]+i-1;S.setInt32(t);S.setInt32(s);S.setInt32(n);t=s+1;n=a[i]}S.setInt32(t);S.setInt32(e[1]);S.setInt32(n)}x=new DataBuilder({exactLength:16});x.setArray([0,12]);x.skip(2);x.setInt32(S.length+16);x.skip(4);x.setInt32(S.length/12)}const C=4+8*v,F=y?4+k.length:0,T=new DataBuilder({exactLength:C});T.skip(2);T.setInt16(v);let R=C;if(y){T.setArray([0,3]);T.setArray([0,1]);T.setInt32(R);R+=F}if(q){T.setArray([0,3]);T.setArray([0,10]);T.setInt32(R)}const O=new DataBuilder({exactLength:T.length+F+(x?.length??0)+(S?.length??0)});O.setArray(T.data);if(y){O.setArray([0,4]);O.setInt16(k.length+4);O.setArray(k.data)}if(q){O.setArray(x.data);O.setArray(S.data)}return O.data}function createOS2Table(e,t,a){a||={unitsPerEm:0,yMax:0,yMin:0,ascent:0,descent:0};let n=0,s=0,r=0,i=0,o=null,l=0,f=-1;if(t){for(const e of t.keys()){(o>e||!o)&&(o=e);l<e&&(l=e);f=getUnicodeRangeFor(e,f);if(f<32)n|=1<<f;else if(f<64)s|=1<<f-32;else if(f<96)r|=1<<f-64;else{if(!(f<123))throw new FormatError("Unicode ranges Bits > 123 are reserved for internal usage");i|=1<<f-96}}l>65535&&(l=65535)}else{o=0;l=255}const c=e.bbox||[0,0,0,0],h=a.unitsPerEm||(e.fontMatrix?1/Math.max(...e.fontMatrix.slice(0,4).map(Math.abs)):1e3),u=e.ascentScaled?1:h/us,m=a.ascent||Math.round(u*(e.ascent||c[3]));let p=a.descent||Math.round(u*(e.descent||c[1]));p>0&&e.descent>0&&c[1]<0&&(p=-p);const d=a.yMax||m,g=-a.yMin||-p,b=new DataBuilder({exactLength:96});b.setArray([0,3]);b.setArray([2,36]);b.setArray([1,244]);b.setArray([0,5]);b.skip(2);b.setArray([2,138]);b.setArray([2,187]);b.skip(2);b.setArray([0,140]);b.setArray([2,138]);b.setArray([2,187]);b.skip(2);b.setArray([1,223]);b.setArray([0,49]);b.setArray([1,2]);b.skip(2);b.setArray([0,0,6,e.fixedPitch?9:0,0,0,0,0,0,0]);b.setInt32(n);b.setInt32(s);b.setInt32(r);b.setInt32(i);b.setArray([42,50,49,42]);b.setInt16(e.italicAngle?1:0);b.setInt16(o||e.firstChar);b.setInt16(l||e.lastChar);b.setInt16(m);b.setInt16(p);b.setArray([0,100]);b.setInt16(d);b.setInt16(g);b.skip(8);b.setInt16(e.xHeight);b.setInt16(e.capHeight);b.skip(2);b.setInt16(o||e.firstChar);b.setArray([0,3]);return b.data}function createPostTable(e){const t=new DataBuilder({exactLength:32});t.setArray([0,3,0,0]);t.setInt32(Math.floor(65536*e.italicAngle));t.skip(4);t.setInt32(e.fixedPitch?1:0);t.skip(16);return t.data}function createPostscriptName(e){return e.replaceAll(/[^\x21-\x7E]|[[\](){}<>/%]/g,"").slice(0,63)}function createNameTable(e,t){t||=[[],[]];const a=[t[0][0]||"Original licence",t[0][1]||e,t[0][2]||"Unknown",t[0][3]||"uniqueID",t[0][4]||e,t[0][5]||"Version 0.11",t[0][6]||createPostscriptName(e),t[0][7]||"Unknown",t[0][8]||"Unknown",t[0][9]||"Unknown"],n=a.map(stringToBytes),s=new Array(a.length);let r,i,o,l,f;for(r=0,i=a.length;r<i;r++){f=t[1][r]||a[r];const e=new DataBuilder({exactLength:2*f.length});for(o=0,l=f.length;o<l;o++)e.setInt16(f.charCodeAt(o));s[r]=e.data}const c=[n,s],h=[[0,1],[0,3]],u=[[0,0],[0,1]],m=[[0,0],[4,9]],p=[];let d=0;for(r=0,i=h.length;r<i;r++){const e=c[r];for(o=0,l=e.length;o<l;o++){f=e[o];const t=new DataBuilder({exactLength:6+h[r].length+u[r].length+m[r].length});t.setArray(h[r]);t.setArray(u[r]);t.setArray(m[r]);t.setInt16(o);t.setInt16(f.length);t.setInt16(d);p.push(t.data);d+=f.length}}const g=n.length*h.length,b=new DataBuilder({exactLength:6+Math.sumPrecise(p.map(e=>e.length))+Math.sumPrecise(n.map(e=>e.length))+Math.sumPrecise(s.map(e=>e.length))});b.skip(2);b.setInt16(g);b.setInt16(12*g+6);for(const e of p)b.setArray(e);for(const e of n)b.setArray(e);for(const e of s)b.setArray(e);return b.data}class Font{#qe=new Map;#ve=new Map;charProcOperatorList;toFontChar=new Map;constructor(e,t,a,n){this.name=e;this.psName=null;this.disableFontFace=n.disableFontFace;this.fontExtraProperties=n.fontExtraProperties;this.loadedName=a.loadedName;this.isType3Font=a.isType3Font;this.missingFile=!1;this.cssFontInfo=a.cssFontInfo;let s=!!(a.flags&Sn);if(!s&&!a.isSimulatedFlags){const t=_n(),a=Ln(),n=Un();for(const r of e.split("+")){let e=normalizeFontName(r);e=t[e]||a[e]||e;e=e.split("-",1)[0];if(n[e]){s=!0;break}}}this.isSerifFont=s;this.isSymbolicFont=!!(a.flags&An);this.isMonospace=!!(a.flags&vn);let{type:r,subtype:i}=a;this.type=r;this.subtype=i;this.systemFontInfo=a.systemFontInfo;const o=e.match(/^InvalidPDFjsFont_(.*)_\d+$/);this.isInvalidPDFjsFont=!!o;this.isInvalidPDFjsFont?this.fallbackName=o[1]:this.isMonospace?this.fallbackName="monospace":this.isSerifFont?this.fallbackName="serif":this.fallbackName="sans-serif";if(this.systemFontInfo?.guessFallback){this.systemFontInfo.guessFallback=!1;this.systemFontInfo.css+=`,${this.fallbackName}`}this.differences=a.differences;this.widths=a.widths;this.defaultWidth=a.defaultWidth;this.composite=a.composite;this.cMap=a.cMap;this.capHeight=a.capHeight/us;this.ascent=a.ascent/us;this.descent=a.descent/us;this.lineHeight=this.ascent-this.descent;this.fontMatrix=a.fontMatrix;this.bbox=a.bbox;this.defaultEncoding=a.defaultEncoding;this.toUnicode=a.toUnicode;if("Type3"===a.type){for(let e=0;e<256;e++)this.toFontChar.set(e,this.differences.get(e)||a.defaultEncoding[e]);return}this.cidEncoding=a.cidEncoding||"";this.vertical=!!a.vertical;if(this.vertical){this.vmetrics=a.vmetrics;this.defaultVMetrics=a.defaultVMetrics}if(!t||t.isEmpty){t&&warn('Font file is empty in "'+e+'" ('+this.loadedName+")");this.fallbackToSystemFont(a);return}[r,i]=getFontFileType(t,a);r===this.type&&i===this.subtype||info(`Inconsistent font file Type/SubType, expected: ${this.type}/${this.subtype} but found: ${r}/${i}.`);let l;try{switch(r){case"MMType1":info("MMType1 font ("+e+"), falling back to Type1.");case"Type1":case"CIDFontType0":const n="Type1C"===i||"CIDFontType0C"===i?new CFFFont(t,a):new Type1Font(e,t,a);adjustWidths(a);l=this.convert(e,n,a);break;case"OpenType":case"TrueType":case"CIDFontType2":l=this.checkAndRepair(e,t,a);adjustWidths(a);this.isOpenType&&(r="OpenType");break;default:throw new FormatError(`Font ${r} is not supported`)}}catch(e){warn(e);this.fallbackToSystemFont(a);return}amendFallbackToUnicode(a);this.data=l;this.type=r;this.subtype=i;this.fontMatrix=a.fontMatrix;this.widths=a.widths;this.defaultWidth=a.defaultWidth;this.toUnicode=a.toUnicode;this.seacMap=a.seacMap}get renderer(){return shadow(this,"renderer",FontRendererFactory.create(this,!0))}#Se(e){const t=Object.create(null);for(const a of e){const e=this[a];void 0!==e&&(t[a]=e)}return t}exportData(){return{buffer:compileFontInfo(this.#Se(ms)),charProcOperatorList:this.charProcOperatorList,extra:this.fontExtraProperties?this.#Se(ps):void 0}}fallbackToSystemFont(e){this.missingFile=!0;const{name:t,type:a}=this;let n=normalizeFontName(t);const s=_n(),r=Ln(),i=!!s[n],o=!(!r[n]||!s[r[n]]);n=s[n]||r[n]||n;const l=Zn()[n];if(l){isNaN(this.ascent)&&(this.ascent=l.ascent/us);isNaN(this.descent)&&(this.descent=l.descent/us);isNaN(this.capHeight)&&(this.capHeight=l.capHeight/us)}this.bold=/bold/i.test(n);this.italic=/oblique|italic/i.test(n);this.black=/Black/.test(t);const f=/Narrow/.test(t);this.remeasure=(!i||f)&&Object.keys(this.widths).length>0;if((i||o)&&"CIDFontType2"===a&&this.cidEncoding.startsWith("Identity-")){const a=e.cidToGidMap,n=new Map;if(/Trebuchet/i.test(t)){applyStandardFontGlyphMap(n,Xn());applyStandardFontGlyphMap(n,Gn())}else{applyStandardFontGlyphMap(n,Kn());/Arial-?Black/i.test(t)?applyStandardFontGlyphMap(n,Vn()):/Calibri/i.test(t)&&applyStandardFontGlyphMap(n,$n())}if(a){for(const[e,t]of n)a.has(t)&&n.set(e,a.get(t));if(a.size!==this.toUnicode.size&&e.hasIncludedToUnicodeMap&&this.toUnicode instanceof IdentityToUnicodeMap)for(const[e,t]of n)!a.has(t)&&this.toUnicode.has(e)&&n.delete(e)}this.toUnicode instanceof IdentityToUnicodeMap||this.toUnicode.forEach((e,t)=>{n.set(e,t)});this.toFontChar=n;this.toUnicode=new ToUnicodeMap(new Map(n))}else if(/Symbol/i.test(n)){const e=this.composite&&this.cidEncoding.startsWith("Identity-");this.toFontChar=buildToFontChar(e?ds():dn,bn(),this.differences)}else if(/Dingbats/i.test(n))this.toFontChar=buildToFontChar(gn,wn(),this.differences);else if(i||o){const e=buildToFontChar(this.defaultEncoding,bn(),this.differences);"CIDFontType2"!==a||this.cidEncoding.startsWith("Identity-")||this.toUnicode instanceof IdentityToUnicodeMap||this.toUnicode.forEach((t,a)=>{e.set(t,a)});this.toFontChar=e}else{const e=bn(),a=new Map;this.toUnicode.forEach((t,n)=>{if(!this.composite){const a=getUnicodeForGlyph(this.differences.get(t)||this.defaultEncoding[t],e);-1!==a&&(n=a)}a.set(t,n)});this.composite&&this.toUnicode instanceof IdentityToUnicodeMap&&/Tahoma|Verdana/i.test(t)&&applyStandardFontGlyphMap(a,Kn());this.toFontChar=a}amendFallbackToUnicode(e);this.loadedName=n.split("-",1)[0]}checkAndRepair(e,t,a){const n=["OS/2","cmap","head","hhea","hmtx","maxp","name","post","loca","glyf","fpgm","prep","cvt ","CFF "];function readTables(e,t){const a=Object.create(null);a["OS/2"]=null;a.cmap=null;a.head=null;a.hhea=null;a.hmtx=null;a.maxp=null;a.name=null;a.post=null;for(let s=0;s<t;s++){const t=readTableEntry(e);n.includes(t.tag)&&(0!==t.length&&(a[t.tag]=t))}return a}function readTableEntry(e){const t=e.getString(4),a=e.getInt32()>>>0,n=e.getInt32()>>>0,s=e.getInt32()>>>0,r=e.pos;e.pos=e.start||0;e.skip(n);const i=e.getBytes(s);e.pos=r;if("head"===t){i[8]=i[9]=i[10]=i[11]=0;i[17]|=32}return{tag:t,checksum:a,length:s,offset:n,data:i,view:"CFF "===t?null:new DataView(i.buffer,i.byteOffset,i.byteLength)}}function readOpenTypeHeader(e){return{version:e.getString(4),numTables:e.getUint16(),searchRange:e.getUint16(),entrySelector:e.getUint16(),rangeShift:e.getUint16()}}function sanitizeGlyph(e,t,a,n,s,r){const i={length:0,sizeOfInstructions:0};if(t<0||t>=e.length||a>e.length||a-t<=12)return i;const o=e.subarray(t,a),l=signedInt16(o[2],o[3]),f=signedInt16(o[4],o[5]),c=signedInt16(o[6],o[7]),h=signedInt16(o[8],o[9]);if(l>c){writeSignedInt16(o,2,c);writeSignedInt16(o,6,l)}if(f>h){writeSignedInt16(o,4,h);writeSignedInt16(o,8,f)}const u=signedInt16(o[0],o[1]);if(u<0){if(u<-1)return i;n.set(o,s);i.length=o.length;return i}let m,p=10,d=0;for(m=0;m<u;m++){d=(o[p]<<8|o[p+1])+1;p+=2}const g=p,b=o[p]<<8|o[p+1];i.sizeOfInstructions=b;p+=2+b;const w=p;let j=0;for(m=0;m<d;m++){const e=o[p++];192&e&&(o[p-1]=63&e);let t=2;2&e?t=1:16&e&&(t=0);let a=2;4&e?a=1:32&e&&(a=0);const n=t+a;j+=n;if(8&e){const e=o[p++];0===e&&(o[p-1]^=8);m+=e;j+=e*n}}if(0===j)return i;let k=p+j;if(k>o.length)return i;if(!r&&b>0){n.set(o.subarray(0,g),s);n.set([0,0],s+g);n.set(o.subarray(w,k),s+g+2);k-=b;o.length-k>3&&(k=k+3&-4);i.length=k;return i}if(o.length-k>3){k=k+3&-4;n.set(o.subarray(0,k),s);i.length=k;return i}n.set(o,s);i.length=o.length;return i}function readNameTable(e){const a=(t.start||0)+e.offset;t.pos=a;const n=[[],[]],s=[],r=e.length,i=a+r;if(0!==t.getUint16()||r<6)return[n,s];const o=t.getUint16(),l=t.getUint16();let f,c;for(f=0;f<o&&t.pos+12<=i;f++){const e={platform:t.getUint16(),encoding:t.getUint16(),language:t.getUint16(),name:t.getUint16(),length:t.getUint16(),offset:t.getUint16()};(isMacNameRecord(e)||isWinNameRecord(e))&&s.push(e)}for(f=0,c=s.length;f<c;f++){const e=s[f];if(e.length<=0)continue;const r=a+l+e.offset;if(r+e.length>i)continue;t.pos=r;const o=e.name;if(e.encoding){let a="";for(let n=0,s=e.length;n<s;n+=2)a+=String.fromCharCode(t.getUint16());n[1][o]=a}else n[0][o]=t.getString(e.length)}return[n,s]}const s=[0,0,0,0,0,0,0,0,-2,-2,-2,-2,0,0,-2,-5,-1,-1,-1,-1,-1,-1,-1,-1,0,0,-1,0,-1,-1,-1,-1,1,-1,-999,0,1,0,-1,-2,0,-1,-2,-1,-1,0,-1,-1,0,0,-999,-999,-1,-1,-1,-1,-2,-999,-2,-2,-999,0,-2,-2,0,0,-2,0,-2,0,0,0,-2,-1,-1,1,1,0,0,-1,-1,-1,-1,-1,-1,-1,0,0,-1,0,-1,-1,0,-999,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-2,-999,-999,-999,-999,-999,-1,-1,-2,-2,0,0,0,0,-1,-1,-999,-2,-2,0,0,-1,-2,-2,0,0,0,-1,-1,-1,-2];function sanitizeTTProgram(e,t){let a,n,r,i,o,l=e.data,f=0,c=0,h=0;const u=[],m=[],p=[];let d=t.tooComplexToFollowFunctions,g=!1,b=0,w=0;for(let e=l.length;f<e;){const e=l[f++];if(64===e){n=l[f++];if(g||w)f+=n;else for(a=0;a<n;a++)u.push(l[f++])}else if(65===e){n=l[f++];if(g||w)f+=2*n;else for(a=0;a<n;a++){r=l[f++];u.push(signedInt16(r,l[f++]))}}else if(176==(248&e)){n=e-176+1;if(g||w)f+=n;else for(a=0;a<n;a++)u.push(l[f++])}else if(184==(248&e)){n=e-184+1;if(g||w)f+=2*n;else for(a=0;a<n;a++){r=l[f++];u.push(signedInt16(r,l[f++]))}}else if(43!==e||d)if(44!==e||d){if(45===e)if(g){g=!1;c=f}else{o=m.pop();if(!o){warn("TT: ENDF bad stack");t.hintsValid=!1;return}i=p.pop();l=o.data;f=o.i;t.functionsStackDeltas[i]=u.length-o.stackTop}else if(137===e){if(g||w){warn("TT: nested IDEFs not allowed");d=!0}g=!0;h=f}else if(88===e)++b;else if(27===e)w=b;else if(89===e){w===b&&(w=0);--b}else if(28===e&&!g&&!w){const e=u.at(-1);e>0&&(f+=e-1)}}else{if(g||w){warn("TT: nested FDEFs not allowed");d=!0}g=!0;h=f;i=u.pop();t.functionsDefined[i]={data:l,i:f}}else if(!g&&!w){i=u.at(-1);if(isNaN(i))info("TT: CALL empty stack (or invalid entry).");else{t.functionsUsed[i]=!0;if(i in t.functionsStackDeltas){const e=u.length+t.functionsStackDeltas[i];if(e<0){warn("TT: CALL invalid functions stack delta.");t.hintsValid=!1;return}u.length=e}else if(i in t.functionsDefined&&!p.includes(i)){m.push({data:l,i:f,stackTop:u.length-1});p.push(i);o=t.functionsDefined[i];if(!o){warn("TT: CALL non-existent function");t.hintsValid=!1;return}l=o.data;f=o.i}}}if(!g&&!w){let t=0;e<=142?t=s[e]:e>=192&&e<=223?t=-1:e>=224&&(t=-2);if(e>=113&&e<=117){n=u.pop();isNaN(n)||(t=2*-n)}for(;t<0&&u.length>0;){u.pop();t++}for(;t>0;){u.push(NaN);t--}}}t.tooComplexToFollowFunctions=d;const j=[l];f>l.length&&j.push(new Uint8Array(f-l.length));if(h>c){warn("TT: complementing a missing function tail");j.push(new Uint8Array([34,45]))}!function foldTTTable(e,t){if(t.length>1){let a,n,s=0;for(a=0,n=t.length;a<n;a++)s+=t[a].length;s=s+3&-4;const r=new Uint8Array(s);let i=0;for(a=0,n=t.length;a<n;a++){r.set(t[a],i);i+=t[a].length}e.data=r;e.length=s}}(e,j)}let r,i;if(isTrueTypeCollectionFile(t=new Stream(new Uint8Array(t.getBytes())))){const e=function readTrueTypeCollectionData(e,t){const{numFonts:a,offsetTable:n}=function readTrueTypeCollectionHeader(e){const t=e.getString(4);assert("ttcf"===t,"Must be a TrueType Collection font.");const a=e.getUint16(),n=e.getUint16(),s=e.getInt32()>>>0,r=[];for(let t=0;t<s;t++)r.push(e.getInt32()>>>0);const i={ttcTag:t,majorVersion:a,minorVersion:n,numFonts:s,offsetTable:r};switch(a){case 1:return i;case 2:i.dsigTag=e.getInt32()>>>0;i.dsigLength=e.getInt32()>>>0;i.dsigOffset=e.getInt32()>>>0;return i}throw new FormatError(`Invalid TrueType Collection majorVersion: ${a}.`)}(e),s=t.split("+");let r;for(let i=0;i<a;i++){e.pos=(e.start||0)+n[i];const a=readOpenTypeHeader(e),o=readTables(e,a.numTables);if(!o.name)throw new FormatError('TrueType Collection font must contain a "name" table.');const[l]=readNameTable(o.name);for(const e of l)for(const n of e){const e=n?.replaceAll(/\s/g,"");if(e){if(e===t)return{header:a,tables:o};if(!(s.length<2))for(const t of s)e===t&&(r={name:t,header:a,tables:o})}}}if(r){warn(`TrueType Collection does not contain "${t}" font, falling back to "${r.name}" font instead.`);return{header:r.header,tables:r.tables}}throw new FormatError(`TrueType Collection does not contain "${t}" font.`)}(t,this.name);r=e.header;i=e.tables}else{r=readOpenTypeHeader(t);i=readTables(t,r.numTables)}const o=!i["CFF "];let l,f=null;if(o){if(!i.loca)throw new FormatError('Required "loca" table is not found');if(!i.glyf){warn('Required "glyf" table is not found -- trying to recover.');i.glyf={tag:"glyf",data:new Uint8Array(0)}}this.isOpenType=!1}else{try{f=new CFFParser(new Stream(i["CFF "].data),a,!0).parse()}catch{warn("Failed to parse font "+a.loadedName)}if("OTTO"===r.version&&(!a.composite||"FontFile3"===a.fontFileN&&f?.isCIDFont)||!i.head||!i.hhea||!i.maxp||!i.post)return this.convert(e,new CFFFont(new Stream(i["CFF "].data),a),a);delete i.glyf;delete i.loca;delete i.fpgm;delete i.prep;delete i["cvt "];this.isOpenType=!0}if(!i.maxp)throw new FormatError('Required "maxp" table is not found');if(f)try{f.duplicateFirstGlyph();i["CFF "].data=new CFFCompiler(f).compile();l=f.charStringCount}catch{warn("Failed to compile font "+a.loadedName)}t.pos=(t.start||0)+i.maxp.offset;let c=t.getInt32();const h=l??t.getUint16();if(20480===c&&6!==i.maxp.length){i.maxp.data=i.maxp.data.subarray(0,6);i.maxp.length=6}if(65536!==c&&20480!==c){if(6===i.maxp.length)c=20480;else{if(!(i.maxp.length>=32))throw new FormatError('"maxp" table has a wrong version number');c=65536}writeUint32(i.maxp.data,0,c)}let u=int16(i.head.data[50],i.head.data[51]);if(i.loca){const e=u?4*(h+1):2*(h+1);if(i.loca.length!==e){warn("Incorrect 'loca' table length -- attempting to fix it.");const a=Object.values(i).filter(Boolean).sort((e,t)=>e.offset-t.offset),n=a.indexOf(i.loca),s=a[n+1]||null;if(s&&i.loca.offset+e<s.offset){const a=t.pos;t.pos=t.start||0;t.skip(i.loca.offset);i.loca.data=t.getBytes(e);i.loca.length=e;t.pos=a}}}if(a.scaleFactors?.length===h&&o){const{scaleFactors:e}=a,t=new GlyfTable({glyfTable:i.glyf.data,isGlyphLocationsLong:u,locaTable:i.loca.data,numGlyphs:h});t.scale(e);const{glyf:n,loca:s,isLocationLong:r}=t.write();i.glyf.data=n;i.loca.data=s;if(r!==!!u){i.head.data[50]=0;u=i.head.data[51]=r?1:0}const o=i.hmtx.data;for(let t=0;t<h;t++){const a=4*t,n=Math.round(e[t]*int16(o[a],o[a+1]));o[a]=n>>8&255;o[a+1]=255&n;writeSignedInt16(o,a+2,Math.round(e[t]*signedInt16(o[a+2],o[a+3])))}}let m=h+1,p=!0;if(m>65535){p=!1;m=h;warn("Not enough space in glyfs to duplicate first glyph.")}let d=0,g=0;if(c>=65536&&i.maxp.length>=32){t.pos+=8;if(t.getUint16()>2){i.maxp.data[14]=0;i.maxp.data[15]=2}t.pos+=4;d=t.getUint16();t.pos+=4;g=t.getUint16()}else if(o&&20480===c){const e=new Uint8Array(32);writeUint32(e,0,65536);e[4]=h>>8&255;e[5]=255&h;e.fill(255,6,14);e[15]=2;e[28]=255;e[29]=255;e[31]=16;i.maxp.data=e;i.maxp.length=32;c=65536}i.maxp.data[4]=m>>8;i.maxp.data[5]=255&m;const b=function sanitizeTTPrograms(e,t,a,n){const s={functionsDefined:[],functionsUsed:[],functionsStackDeltas:[],tooComplexToFollowFunctions:!1,hintsValid:!0};e&&sanitizeTTProgram(e,s);t&&sanitizeTTProgram(t,s);e&&function checkInvalidFunctions(e,t){if(!e.tooComplexToFollowFunctions)if(e.functionsDefined.length>t){warn("TT: more functions defined than expected");e.hintsValid=!1}else for(let a=0,n=e.functionsUsed.length;a<n;a++){if(a>t){warn("TT: invalid function id: "+a);e.hintsValid=!1;return}if(e.functionsUsed[a]&&!e.functionsDefined[a]){warn("TT: undefined function: "+a);e.hintsValid=!1;return}}}(s,n);if(a&&1&a.length){const e=new Uint8Array(a.length+1);e.set(a.data);a.data=e}return s.hintsValid}(i.fpgm,i.prep,i["cvt "],d);if(!b){delete i.fpgm;delete i.prep;delete i["cvt "]}!function sanitizeMetrics(e,t,a,n,s,r){if(!t){a&&(a.data=null);return}e.pos=(e.start||0)+t.offset;e.pos+=4;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;const i=e.getUint16();e.pos+=8;e.pos+=2;let o=e.getUint16();if(0!==i){if(!(2&int16(n.data[44],n.data[45]))){t.data[22]=0;t.data[23]=0}}if(o>s){info(`The numOfMetrics (${o}) should not be greater than the numGlyphs (${s}).`);o=s;t.data[34]=(65280&o)>>8;t.data[35]=255&o}const l=s-o-(a.length-4*o>>1);if(l>0){const e=new Uint8Array(a.length+2*l);e.set(a.data);if(r){e[a.length]=a.data[2];e[a.length+1]=a.data[3]}a.data=e}}(t,i.hhea,i.hmtx,i.head,m,p);if(!i.head)throw new FormatError('Required "head" table is not found');!function sanitizeHead(e,t,a){const{data:n,view:s}=e,r=s.getInt32(0);if(r>>16!=1){info("Attempting to fix invalid version in head table: "+r);s.setInt32(0,65536)}const i=signedInt16(n[50],n[51]);if(i<0||i>1){info("Attempting to fix invalid indexToLocFormat in head table: "+i);const e=t+1;if(a===e<<1){n[50]=0;n[51]=0}else{if(a!==e<<2)throw new FormatError("Could not fix indexToLocFormat: "+i);n[50]=0;n[51]=1}}}(i.head,h,o?i.loca.length:0);let w=null;if(o){const e=function sanitizeGlyphLocations(e,t,a,n,s,r,i){let o,l,f;if(n){o=4;l=function fontItemDecodeLong(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]};f=function fontItemEncodeLong(e,t,a){e[t]=a>>>24&255;e[t+1]=a>>16&255;e[t+2]=a>>8&255;e[t+3]=255&a}}else{o=2;l=function fontItemDecode(e,t){return e[t]<<9|e[t+1]<<1};f=function fontItemEncode(e,t,a){e[t]=a>>9&255;e[t+1]=a>>1&255}}const c=r?a+1:a,h=o*(1+c),u=new Uint8Array(h);u.set(e.data.subarray(0,h));e.data=u;const m=t.data,p=m.length,d=new Uint8Array(p);let g,b;const w=[];for(g=0,b=0;g<a+1;g++,b+=o){let e=l(u,b);e>p&&(e=p);w.push({index:g,offset:e,endOffset:0})}w.sort((e,t)=>e.offset-t.offset);for(g=0;g<a;g++)w[g].endOffset=w[g+1].offset;w.sort((e,t)=>e.index-t.index);for(g=0;g<a;g++){const{offset:e,endOffset:t}=w[g];if(0!==e||0!==t)break;const a=w[g+1].offset;if(0!==a){w[g].endOffset=a;break}}const j=w.at(-2);0!==j.offset&&0===j.endOffset&&(j.endOffset=p);const k=function pruneCompositeGlyphCycles(e,t,a){const n=new DataView(e.buffer,e.byteOffset,e.byteLength),s=new Array(a);for(let e=0;e<a;e++){const a=t[e].offset,r=Math.min(t[e].endOffset,n.byteLength);if(r-a<=Jn||n.getInt16(a)>=0)continue;const i=[];let o=a+Jn;for(;o+4<=r;){const e=n.getUint16(o),t=n.getUint16(o+2);let a=4+(1&e?4:2);8&e?a+=2:64&e?a+=4:128&e&&(a+=8);i.push({gid:t,offset:o,size:a,flags:e});o+=a;if(!(32&e))break}i.length&&(s[e]=i)}const r=new Uint8Array(a),i=new Map;for(let e=0;e<a;e++){if(0!==r[e]||!s[e])continue;const t=[{node:e,idx:0}];r[e]=1;for(;t.length>0;){const e=t.at(-1),n=s[e.node];if(!n||e.idx>=n.length){r[e.node]=2;t.pop();continue}const o=e.idx++,l=n[o].gid;if(!(l>=a||2===r[l]))if(0!==r[l])i.getOrInsertComputed(e.node,makeSet).add(o);else{r[l]=1;t.push({node:l,idx:0})}}}const o=new Set;for(const[a,r]of i){const i=s[a],l=[];for(let e=0;e<i.length;e++)r.has(e)||l.push(i[e]);if(0===l.length){o.add(a);continue}const f=t[a].offset,c=Math.min(t[a].endOffset,n.byteLength);let h=f+Jn;for(let t=0;t<l.length;t++){const a=l[t],s=t===l.length-1;let r=-257&a.flags;r=s?-33&r:32|r;h!==a.offset&&e.copyWithin(h,a.offset,a.offset+a.size);n.setUint16(h,r);h+=a.size}h<c&&e.fill(0,h,c)}return o}(m,w,a),y=new Uint8Array(a);let q=0;f(u,0,q);for(g=0,b=o;g<a;g++,b+=o){const e=k.has(g)?{length:0,sizeOfInstructions:0}:sanitizeGlyph(m,w[g].offset,w[g].endOffset,d,q,s),t=e.length;0===t&&(y[g]=1);e.sizeOfInstructions>i&&(i=e.sizeOfInstructions);q+=t;f(u,b,q)}if(0===q){const e=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]);for(g=0,b=o;g<c;g++,b+=o)f(u,b,e.length);t.data=e}else if(r){const a=l(u,o);if(d.length>a+q)t.data=d.subarray(0,a+q);else{t.data=new Uint8Array(a+q);t.data.set(d.subarray(0,q))}t.data.set(d.subarray(0,a),q);f(e.data,u.length-o,q+a)}else t.data=d.subarray(0,q);return{missingGlyphs:y,maxSizeOfInstructions:i}}(i.loca,i.glyf,h,u,b,p,g);w=e.missingGlyphs;if(c>=65536&&i.maxp.length>=32){i.maxp.data[26]=e.maxSizeOfInstructions>>8;i.maxp.data[27]=255&e.maxSizeOfInstructions}}if(!i.hhea)throw new FormatError('Required "hhea" table is not found');if(0===i.hhea.data[10]&&0===i.hhea.data[11]){i.hhea.data[10]=255;i.hhea.data[11]=255}const j={unitsPerEm:int16(i.head.data[18],i.head.data[19]),yMax:signedInt16(i.head.data[42],i.head.data[43]),yMin:signedInt16(i.head.data[38],i.head.data[39]),ascent:signedInt16(i.hhea.data[4],i.hhea.data[5]),descent:signedInt16(i.hhea.data[6],i.hhea.data[7]),lineGap:signedInt16(i.hhea.data[8],i.hhea.data[9])};this.ascent=j.ascent/j.unitsPerEm;this.descent=j.descent/j.unitsPerEm;this.lineGap=j.lineGap/j.unitsPerEm;if(this.cssFontInfo?.lineHeight){this.lineHeight=this.cssFontInfo.metrics.lineHeight;this.lineGap=this.cssFontInfo.metrics.lineGap}else this.lineHeight=this.ascent-this.descent+this.lineGap;i.post&&function readPostScriptTable(e,a,n){const s=(t.start||0)+e.offset;t.pos=s;const r=s+e.length,i=t.getInt32();t.skip(28);let o,l,f=!0;switch(i){case 65536:o=Cn;break;case 131072:const e=t.getUint16();if(e!==n){f=!1;break}const s=[];for(l=0;l<e;++l){const e=t.getUint16();if(e>=32768){f=!1;break}s.push(e)}if(!f)break;const c=[];for(;t.pos<r;){const e=t.getByte(),a=t.getString(e);c.push(a)}o=[];for(l=0;l<e;++l){const e=s[l];e<258?o.push(Cn[e]):o.push(c[e-258])}break;case 196608:break;default:warn("Unknown/unsupported post table version "+i);f=!1;a.defaultEncoding&&(o=a.defaultEncoding)}a.glyphNames=o;return f}(i.post,a,h);i.post={tag:"post",data:createPostTable(a)};const k=new Map;function hasGlyph(e){return!w?.[e]}if(a.composite){const{cidToGidMap:e,cMap:t}=a,n=!e?.size;t.forEach((t,a)=>{"string"==typeof a&&(a=convertCidString(t,a,!0));if(a>65535)throw new FormatError("Max size of CID is 65,535");const s=n?a:e.get(a)??-1;s>=0&&s<h&&hasGlyph(s)&&k.set(t,s)})}else{const e=function readCmapTable(e,t,a,n){if(!e){warn("No cmap table available.");return{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:!1}}let s,r=(t.start||0)+e.offset;t.pos=r;t.skip(2);const i=t.getUint16();let o,l=!1;for(let e=0;e<i;e++){const s=t.getUint16(),r=t.getUint16(),f=t.getInt32()>>>0;let c=!1;if(o?.platformId!==s||o?.encodingId!==r){if(0!==s||0!==r&&1!==r&&3!==r)if(1===s&&0===r)c=!0;else if(3!==s||1!==r||!n&&o){if(a&&3===s&&0===r){c=!0;let a=!0;if(e<i-1){const e=t.peekBytes(2);int16(e[0],e[1])<s&&(a=!1)}a&&(l=!0)}}else{c=!0;a||(l=!0)}else c=!0;c&&(o={platformId:s,encodingId:r,offset:f});if(l)break}}o&&(t.pos=r+o.offset);if(!o||-1===t.peekByte()){warn("Could not find a preferred cmap table.");return{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:!1}}const f=t.getUint16();let c=!1;const h=[];let u,m;if(0===f){t.skip(4);for(u=0;u<256;u++){const e=t.getByte();e&&h.push({charCode:u,glyphId:e})}c=!0}else if(2===f){t.skip(4);const e=[];let a=0;for(let n=0;n<256;n++){const n=t.getUint16()>>3;e.push(n);a=Math.max(n,a)}const n=[];for(let e=0;e<=a;e++)n.push({firstCode:t.getUint16(),entryCount:t.getUint16(),idDelta:signedInt16(t.getByte(),t.getByte()),idRangePos:t.pos+t.getUint16()});for(let a=0;a<256;a++)if(0===e[a]){t.pos=n[0].idRangePos+2*a;m=t.getUint16();h.push({charCode:a,glyphId:m})}else{const s=n[e[a]];for(u=0;u<s.entryCount;u++){const e=(a<<8)+u+s.firstCode;t.pos=s.idRangePos+2*u;m=t.getUint16();0!==m&&(m=(m+s.idDelta)%65536);h.push({charCode:e,glyphId:m})}}}else if(4===f){t.skip(4);const e=t.getUint16()>>1;t.skip(6);const a=[];let n;for(n=0;n<e;n++)a.push({end:t.getUint16()});t.skip(2);for(n=0;n<e;n++)a[n].start=t.getUint16();for(n=0;n<e;n++)a[n].delta=t.getUint16();let i,o=0;for(n=0;n<e;n++){s=a[n];const r=t.getUint16();if(r){i=(r>>1)-(e-n);s.offsetIndex=i;o=Math.max(o,i+s.end-s.start+1)}else s.offsetIndex=-1}const l=[];for(u=0;u<o;u++)l.push(t.getUint16());for(n=0;n<e;n++){s=a[n];r=s.start;const e=s.end,t=s.delta;i=s.offsetIndex;for(u=r;u<=e;u++)if(65535!==u){m=i<0?u:l[i+u-r];m=m+t&65535;h.push({charCode:u,glyphId:m})}}}else if(6===f){t.skip(4);const e=t.getUint16(),a=t.getUint16();for(u=0;u<a;u++){m=t.getUint16();const a=e+u;h.push({charCode:a,glyphId:m})}}else{if(12!==f){warn("cmap table has unsupported format: "+f);return{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:!1}}{t.skip(10);const e=t.getInt32()>>>0;for(u=0;u<e;u++){const e=t.getInt32()>>>0,a=t.getInt32()>>>0;let n=t.getInt32()>>>0;for(let t=e;t<=a;t++)h.push({charCode:t,glyphId:n++})}}}const p=[],d=new Set;for(const e of h){const{charCode:t}=e;if(!d.has(t)){d.add(t);p.push(e)}}return{platformId:o.platformId,encodingId:o.encodingId,mappings:p.sort((e,t)=>e.charCode-t.charCode),hasShortCmap:c}}(i.cmap,t,this.isSymbolicFont,a.hasEncoding),n=e.platformId,s=e.encodingId,r=e.mappings;let o=[],l=!1;!a.hasEncoding||"MacRomanEncoding"!==a.baseEncodingName&&"WinAnsiEncoding"!==a.baseEncodingName||(o=getEncoding(a.baseEncodingName));if(a.hasEncoding&&!this.isSymbolicFont&&(3===n&&1===s||1===n&&0===s)){const e=bn();for(let t=0;t<256;t++){let i;i=this.differences.has(t)?this.differences.get(t):o.length&&""!==o[t]?o[t]:mn[t];if(!i)continue;const l=recoverGlyphName(i,e);let f;3===n&&1===s?f=e[l]:1===n&&0===s&&(f=un.indexOf(l));if(void 0===f){if(!a.glyphNames&&a.hasIncludedToUnicodeMap&&!(this.toUnicode instanceof IdentityToUnicodeMap)){const e=this.toUnicode.get(t);e&&(f=e.codePointAt(0))}if(void 0===f)continue}for(const e of r)if(e.charCode===f){k.set(t,e.glyphId);break}}}else if(0===n){for(const e of r)k.set(e.charCode,e.glyphId);l=!0}else if(3===n&&0===s)for(const e of r){let t=e.charCode;t>=61440&&t<=61695&&(t&=255);k.set(t,e.glyphId)}else for(const e of r)k.set(e.charCode,e.glyphId);if(a.glyphNames&&(o.length||this.differences.size))for(let e=0;e<256;++e){if(!l&&k.has(e))continue;const t=this.differences.get(e)||o[e];if(!t)continue;const n=a.glyphNames.indexOf(t);n>0&&hasGlyph(n)&&k.set(e,n)}a.isInternalFont||k.has(0)||!hasGlyph(0)||k.set(0,0)}k.size||k.set(0,0);const y=p?m-1:0;if(!a.cssFontInfo){const e=adjustMapping(k,hasGlyph,y,this.toUnicode);this.toFontChar=e.toFontChar;i.cmap={tag:"cmap",data:createCmapTable(e.charCodeToGlyphId,e.toUnicodeExtraMap,m)};i["OS/2"]&&function validateOS2Table(e,t){t.pos=(t.start||0)+e.offset;const a=t.getUint16(),n=[78,86,96,96,96,100][a];if(void 0===n||e.length<n)return!1;t.skip(60);const s=t.getUint16();if(a<4&&768&s)return!1;if(t.getUint16()>t.getUint16())return!1;t.skip(6);if(0===t.getUint16())return!1;e.data[8]=e.data[9]=0;return!0}(i["OS/2"],t)||(i["OS/2"]={tag:"OS/2",data:createOS2Table(a,e.charCodeToGlyphId,j)})}if(i.name){const[t,n]=readNameTable(i.name);i.name.data=createNameTable(e,t);this.psName=t[0][6]||null;a.composite||function adjustTrueTypeToUnicode(e,t,a){if(e.isInternalFont)return;if(e.hasIncludedToUnicodeMap)return;if(e.hasEncoding)return;if(e.toUnicode instanceof IdentityToUnicodeMap)return;if(!t)return;if(0===a.length)return;if(e.defaultEncoding===pn)return;for(const e of a)if(!isWinNameRecord(e))return;const n=pn,s=new Map,r=bn();for(const e in n){const t=n[e];if(""===t)continue;const a=r[t];void 0!==a&&s.set(+e,String.fromCharCode(a))}e.toUnicode.amend(s)}(a,this.isSymbolicFont,n)}else i.name={tag:"name",data:createNameTable(this.name)};const q=new OpenTypeFileBuilder(r.version);for(const e in i)q.addTable(e,i[e].data);return q.toArray()}convert(e,t,a){a.fixedPitch=!1;a.builtInEncoding&&function adjustType1ToUnicode(e,t){if(e.isInternalFont)return;if(e.hasIncludedToUnicodeMap)return;if(t===e.defaultEncoding)return;if(e.toUnicode instanceof IdentityToUnicodeMap)return;const a=new Map,n=bn();for(const s in t){if(e.hasEncoding&&(e.baseEncodingName||e.differences.has(+s)))continue;const r=getUnicodeForGlyph(t[s],n);-1!==r&&a.set(+s,String.fromCharCode(r))}e.toUnicode.amend(a)}(a,a.builtInEncoding);const s=t instanceof CFFFont?t.numGlyphs-1:1,r=t.getGlyphMapping(a);let i=null,o=r,l=null;if(!a.cssFontInfo){i=adjustMapping(r,t.hasGlyphId.bind(t),s,this.toUnicode);this.toFontChar=i.toFontChar;o=i.charCodeToGlyphId;l=i.toUnicodeExtraMap}const{numGlyphs:f,seacs:c}=t;function getCharCodes(e,t){let a=null;for(const[n,s]of e)t===s&&(a??=[]).push(n);return a}function createCharCode(e,t){for(const[a,n]of e)if(t===n)return a;i.charCodeToGlyphId.set(i.nextAvailableFontCharCode,t);return i.nextAvailableFontCharCode++}if(i&&c?.size){const e=a.fontMatrix||n,s=t.getCharset(),o=new Map;for(const[t,a]of c){const n=mn[a[2]],l=mn[a[3]],f=s.indexOf(n),c=s.indexOf(l);if(f<0||c<0)continue;const h={x:a[0]*e[0]+a[1]*e[2]+e[4],y:a[0]*e[1]+a[1]*e[3]+e[5]},u=getCharCodes(r,t);if(u)for(const e of u){const{charCodeToGlyphId:t}=i,a=createCharCode(t,f),n=createCharCode(t,c);o.set(e,{baseFontCharCode:a,accentFontCharCode:n,accentOffset:h})}}a.seacMap=o}const h=a.fontMatrix?1/Math.max(...a.fontMatrix.slice(0,4).map(Math.abs)):1e3,u=new OpenTypeFileBuilder("OTTO");u.addTable("CFF ",t.data);u.addTable("OS/2",createOS2Table(a,o));u.addTable("cmap",createCmapTable(o,l,f));u.addTable("head",function fontTableHead(){const e=[0,0,0,0,158,11,126,39],t=new DataBuilder({exactLength:54});t.setArray([0,1,0,0]);t.setArray([0,0,16,0]);t.skip(4);t.setArray([95,15,60,245]);t.skip(2);t.setSafeInt16(h);t.setArray(e);t.setArray(e);t.skip(2);t.setSafeInt16(a.descent);t.setArray([15,255]);t.setSafeInt16(a.ascent);t.setInt16(a.italicAngle?2:0);t.setArray([0,17]);t.skip(6);return t.data}());u.addTable("hhea",function fontTableHhea(){const e=new DataBuilder({exactLength:36});e.setArray([0,1,0,0]);e.setSafeInt16(a.ascent);e.setSafeInt16(a.descent);e.skip(2);e.setArray([255,255]);e.skip(6);e.setSafeInt16(a.capHeight);e.setSafeInt16(Math.tan(a.italicAngle)*a.xHeight);e.skip(12);e.setInt16(f);return e.data}());u.addTable("hmtx",function fontTableHmtx(){const e=t.charstrings,a=t.cff?.widths??null,n=new DataBuilder({exactLength:4*f});n.skip(4);for(let t=1;t<f;t++){let s=0;e?s=e[t-1].width||0:a&&(s=Math.ceil(a[t]||0));n.setInt16(s);n.skip(2)}return n.data}());u.addTable("maxp",function fontTableMaxp(){const e=new DataBuilder({exactLength:6});e.setArray([0,0,80,0]);e.setInt16(f);return e.data}());u.addTable("name",createNameTable(e));u.addTable("post",createPostTable(a));return u.toArray()}get _spaceWidth(){const e=["space","minus","one","i","I"];let t;for(const a of e){if(a in this.widths){t=this.widths[a];break}const e=bn()[a];let n=0;if(this.composite&&this.cMap.contains(e)){n=this.cMap.lookup(e);"string"==typeof n&&(n=convertCidString(e,n))}!n&&this.toUnicode&&(n=this.toUnicode.charCodeOf(e));n<=0&&(n=e);t=this.widths[n];if(t)break}return shadow(this,"_spaceWidth",t||this.defaultWidth)}_charToGlyph(e,t=!1){let a,n,s,r=this.#ve.get(e);if(r?.isSpace===t)return r;let i=e;if(this.cMap?.contains(e)){i=this.cMap.lookup(e);"string"==typeof i&&(i=convertCidString(e,i))}n=this.widths[i];"number"!=typeof n&&(n=this.defaultWidth);let o=this.vmetrics?.[i];if(!o&&this.defaultVMetrics){const[e,,t]=this.defaultVMetrics;o=[e,.5*n,t]}let l=this.toUnicode.get(e)||e;"number"==typeof l&&(l=String.fromCharCode(l));let f=this.toFontChar.has(e);a=this.toFontChar.get(e)||e;if(this.missingFile){const t=this.differences.get(e)||this.defaultEncoding[e];if((".notdef"===t||""===t)&&"Type1"===this.type){a=32;if(""===t){n||=this._spaceWidth;this.toUnicode.has(e)||(l=String.fromCharCode(a))}}a=function mapSpecialUnicodeValues(e){return e>=65520&&e<=65535?0:e>=62976&&e<=63743?jn()[e]||e:173===e?45:e}(a)}this.isType3Font&&(s=a);let c=null;const h=this.seacMap?.get(e);if(h){f=!0;a=h.baseFontCharCode;c={fontChar:String.fromCodePoint(h.accentFontCharCode),offset:h.accentOffset}}let u="";"number"==typeof a&&(a<=1114111?u=String.fromCodePoint(a):warn(`charToGlyph - invalid fontCharCode: ${a}`));if(this.missingFile&&this.vertical&&1===u.length){const e=In()[u.charCodeAt(0)];e&&(u=l=String.fromCharCode(e))}r=new fonts_Glyph(e,u,l,c,n,o,s,t,f);this.#ve.set(e,r);return r}charsToGlyphs(e){let t=this.#qe.get(e);if(t)return t;t=[];if(this.cMap){const a=Object.create(null),n=e.length;let s=0;for(;s<n;){this.cMap.readCharCode(e,s,a);const{charcode:n,length:r}=a;s+=r;const i=this._charToGlyph(n,1===r&&32===e.charCodeAt(s-1));t.push(i)}}else for(let a=0,n=e.length;a<n;++a){const n=e.charCodeAt(a),s=this._charToGlyph(n,32===n);t.push(s)}this.#qe.set(e,t);return t}getCharPositions(e){const t=[];if(this.cMap){const a=Object.create(null);let n=0;for(;n<e.length;){this.cMap.readCharCode(e,n,a);const s=a.length;t.push([n,n+s]);n+=s}}else for(let a=0,n=e.length;a<n;++a)t.push([a,a+1]);return t}get glyphCacheValues(){return this.#ve.values()}encodeString(e){const t=[],a=[],hasCurrentBufErrors=()=>t.length%2==1,n=this.toUnicode instanceof IdentityToUnicodeMap?e=>this.toUnicode.charCodeOf(e):e=>this.toUnicode.charCodeOf(String.fromCodePoint(e));for(let s=0,r=e.length;s<r;s++){const r=e.codePointAt(s);r>65535&&s++;if(this.toUnicode){const e=n(r);if(-1!==e){if(hasCurrentBufErrors()){t.push(a.join(""));a.length=0}for(let t=(this.cMap?this.cMap.getCharCodeLength(e):1)-1;t>=0;t--)a.push(String.fromCharCode(e>>8*t&255));continue}}if(!hasCurrentBufErrors()){t.push(a.join(""));a.length=0}a.push(String.fromCodePoint(r))}t.push(a.join(""));return t}}class ErrorFont{constructor(e){this.error=e;this.loadedName="g_font_error";this.missingFile=!0}charsToGlyphs(){return[]}encodeString(e){return[e]}exportData(){return{error:this.error}}}const gs=[1.3877,1,1,1,.97801,.92482,.89552,.91133,.81988,.97566,.98152,.93548,.93548,1.2798,.85284,.92794,1,.96134,1.54657,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.82845,.82845,.85284,.85284,.85284,.75859,.92138,.83908,.7762,.73293,.87289,.73133,.7514,.81921,.87356,.95958,.59526,.75727,.69225,1.04924,.9121,.86943,.79795,.88198,.77958,.70864,.81055,.90399,.88653,.96017,.82577,.77892,.78257,.97507,1.54657,.97507,.85284,.89552,.90176,.88762,.8785,.75241,.8785,.90518,.95015,.77618,.8785,.88401,.91916,.86304,.88401,.91488,.8785,.8801,.8785,.8785,.91343,.7173,1.04106,.8785,.85075,.95794,.82616,.85162,.79492,.88331,1.69808,.88331,.85284,.97801,.89552,.91133,.89552,.91133,1.7801,.89552,1.24487,1.13254,1.12401,.96839,.85284,.68787,.70645,.85592,.90747,1.01466,1.0088,.90323,1,1.07463,1,.91056,.75806,1.19118,.96839,.78864,.82845,.84133,.75859,.83908,.83908,.83908,.83908,.83908,.83908,.77539,.73293,.73133,.73133,.73133,.73133,.95958,.95958,.95958,.95958,.88506,.9121,.86943,.86943,.86943,.86943,.86943,.85284,.87508,.90399,.90399,.90399,.90399,.77892,.79795,.90807,.88762,.88762,.88762,.88762,.88762,.88762,.8715,.75241,.90518,.90518,.90518,.90518,.88401,.88401,.88401,.88401,.8785,.8785,.8801,.8801,.8801,.8801,.8801,.90747,.89049,.8785,.8785,.8785,.8785,.85162,.8785,.85162,.83908,.88762,.83908,.88762,.83908,.88762,.73293,.75241,.73293,.75241,.73293,.75241,.73293,.75241,.87289,.83016,.88506,.93125,.73133,.90518,.73133,.90518,.73133,.90518,.73133,.90518,.73133,.90518,.81921,.77618,.81921,.77618,.81921,.77618,1,1,.87356,.8785,.91075,.89608,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.76229,.90167,.59526,.91916,1,1,.86304,.69225,.88401,1,1,.70424,.79468,.91926,.88175,.70823,.94903,.9121,.8785,1,1,.9121,.8785,.87802,.88656,.8785,.86943,.8801,.86943,.8801,.86943,.8801,.87402,.89291,.77958,.91343,1,1,.77958,.91343,.70864,.7173,.70864,.7173,.70864,.7173,.70864,.7173,1,1,.81055,.75841,.81055,1.06452,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.96017,.95794,.77892,.85162,.77892,.78257,.79492,.78257,.79492,.78257,.79492,.9297,.56892,.83908,.88762,.77539,.8715,.87508,.89049,1,1,.81055,1.04106,1.20528,1.20528,1,1.15543,.70674,.98387,.94721,1.33431,1.45894,.95161,1.06303,.83908,.80352,.57184,.6965,.56289,.82001,.56029,.81235,1.02988,.83908,.7762,.68156,.80367,.73133,.78257,.87356,.86943,.95958,.75727,.89019,1.04924,.9121,.7648,.86943,.87356,.79795,.78275,.81055,.77892,.9762,.82577,.99819,.84896,.95958,.77892,.96108,1.01407,.89049,1.02988,.94211,.96108,.8936,.84021,.87842,.96399,.79109,.89049,1.00813,1.02988,.86077,.87445,.92099,.84723,.86513,.8801,.75638,.85714,.78216,.79586,.87965,.94211,.97747,.78287,.97926,.84971,1.02988,.94211,.8801,.94211,.84971,.73133,1,1,1,1,1,1,1,1,1,1,1,1,.90264,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.90518,1,1,1,1,1,1,1,1,1,1,1,1,.90548,1,1,1,1,1,1,.96017,.95794,.96017,.95794,.96017,.95794,.77892,.85162,1,1,.89552,.90527,1,.90363,.92794,.92794,.92794,.92794,.87012,.87012,.87012,.89552,.89552,1.42259,.71143,1.06152,1,1,1.03372,1.03372,.97171,1.4956,2.2807,.93835,.83406,.91133,.84107,.91133,1,1,1,.72021,1,1.23108,.83489,.88525,.88525,.81499,.90527,1.81055,.90527,1.81055,1.31006,1.53711,.94434,1.08696,1,.95018,.77192,.85284,.90747,1.17534,.69825,.9716,1.37077,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.08004,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,.90727,.90727,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],bs={lineHeight:1.2207,lineGap:.2207},ws=[1.3877,1,1,1,.97801,.92482,.89552,.91133,.81988,.97566,.98152,.93548,.93548,1.2798,.85284,.92794,1,.96134,1.56239,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.82845,.82845,.85284,.85284,.85284,.75859,.92138,.83908,.7762,.71805,.87289,.73133,.7514,.81921,.87356,.95958,.59526,.75727,.69225,1.04924,.90872,.85938,.79795,.87068,.77958,.69766,.81055,.90399,.88653,.96068,.82577,.77892,.78257,.97507,1.529,.97507,.85284,.89552,.90176,.94908,.86411,.74012,.86411,.88323,.95015,.86411,.86331,.88401,.91916,.86304,.88401,.9039,.86331,.86331,.86411,.86411,.90464,.70852,1.04106,.86331,.84372,.95794,.82616,.84548,.79492,.88331,1.69808,.88331,.85284,.97801,.89552,.91133,.89552,.91133,1.7801,.89552,1.24487,1.13254,1.19129,.96839,.85284,.68787,.70645,.85592,.90747,1.01466,1.0088,.90323,1,1.07463,1,.91056,.75806,1.19118,.96839,.78864,.82845,.84133,.75859,.83908,.83908,.83908,.83908,.83908,.83908,.77539,.71805,.73133,.73133,.73133,.73133,.95958,.95958,.95958,.95958,.88506,.90872,.85938,.85938,.85938,.85938,.85938,.85284,.87068,.90399,.90399,.90399,.90399,.77892,.79795,.90807,.94908,.94908,.94908,.94908,.94908,.94908,.85887,.74012,.88323,.88323,.88323,.88323,.88401,.88401,.88401,.88401,.8785,.86331,.86331,.86331,.86331,.86331,.86331,.90747,.89049,.86331,.86331,.86331,.86331,.84548,.86411,.84548,.83908,.94908,.83908,.94908,.83908,.94908,.71805,.74012,.71805,.74012,.71805,.74012,.71805,.74012,.87289,.79538,.88506,.92726,.73133,.88323,.73133,.88323,.73133,.88323,.73133,.88323,.73133,.88323,.81921,.86411,.81921,.86411,.81921,.86411,1,1,.87356,.86331,.91075,.8777,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.76467,.90167,.59526,.91916,1,1,.86304,.69225,.88401,1,1,.70424,.77312,.91926,.88175,.70823,.94903,.90872,.86331,1,1,.90872,.86331,.86906,.88116,.86331,.85938,.86331,.85938,.86331,.85938,.86331,.87402,.86549,.77958,.90464,1,1,.77958,.90464,.69766,.70852,.69766,.70852,.69766,.70852,.69766,.70852,1,1,.81055,.75841,.81055,1.06452,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.96068,.95794,.77892,.84548,.77892,.78257,.79492,.78257,.79492,.78257,.79492,.9297,.56892,.83908,.94908,.77539,.85887,.87068,.89049,1,1,.81055,1.04106,1.20528,1.20528,1,1.15543,.70088,.98387,.94721,1.33431,1.45894,.95161,1.48387,.83908,.80352,.57118,.6965,.56347,.79179,.55853,.80346,1.02988,.83908,.7762,.67174,.86036,.73133,.78257,.87356,.86441,.95958,.75727,.89019,1.04924,.90872,.74889,.85938,.87891,.79795,.7957,.81055,.77892,.97447,.82577,.97466,.87179,.95958,.77892,.94252,.95612,.8753,1.02988,.92733,.94252,.87411,.84021,.8728,.95612,.74081,.8753,1.02189,1.02988,.84814,.87445,.91822,.84723,.85668,.86331,.81344,.87581,.76422,.82046,.96057,.92733,.99375,.78022,.95452,.86015,1.02988,.92733,.86331,.92733,.86015,.73133,1,1,1,1,1,1,1,1,1,1,1,1,.90631,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.88323,1,1,1,1,1,1,1,1,1,1,1,1,.85174,1,1,1,1,1,1,.96068,.95794,.96068,.95794,.96068,.95794,.77892,.84548,1,1,.89552,.90527,1,.90363,.92794,.92794,.92794,.89807,.87012,.87012,.87012,.89552,.89552,1.42259,.71094,1.06152,1,1,1.03372,1.03372,.97171,1.4956,2.2807,.92972,.83406,.91133,.83326,.91133,1,1,1,.72021,1,1.23108,.83489,.88525,.88525,.81499,.90616,1.81055,.90527,1.81055,1.3107,1.53711,.94434,1.08696,1,.95018,.77192,.85284,.90747,1.17534,.69825,.9716,1.37077,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.08004,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,.90727,.90727,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],js={lineHeight:1.2207,lineGap:.2207},ks=[1.3877,1,1,1,1.17223,1.1293,.89552,.91133,.80395,1.02269,1.15601,.91056,.91056,1.2798,.85284,.89807,1,.90861,1.39543,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.96309,.96309,.85284,.85284,.85284,.83319,.88071,.8675,.81552,.72346,.85193,.73206,.7522,.81105,.86275,.90685,.6377,.77892,.75593,1.02638,.89249,.84118,.77452,.85374,.75186,.67789,.79776,.88844,.85066,.94309,.77818,.7306,.76659,1.10369,1.38313,1.10369,1.06139,.89552,.8739,.9245,.9245,.83203,.9245,.85865,1.09842,.9245,.9245,1.03297,1.07692,.90918,1.03297,.94959,.9245,.92274,.9245,.9245,1.02933,.77832,1.20562,.9245,.8916,.98986,.86621,.89453,.79004,.94152,1.77256,.94152,.85284,.97801,.89552,.91133,.89552,.91133,1.91729,.89552,1.17889,1.13254,1.16359,.92098,.85284,.68787,.71353,.84737,.90747,1.0088,1.0044,.87683,1,1.09091,1,.92229,.739,1.15642,.92098,.76288,.80504,.80972,.75859,.8675,.8675,.8675,.8675,.8675,.8675,.76318,.72346,.73206,.73206,.73206,.73206,.90685,.90685,.90685,.90685,.86477,.89249,.84118,.84118,.84118,.84118,.84118,.85284,.84557,.88844,.88844,.88844,.88844,.7306,.77452,.86331,.9245,.9245,.9245,.9245,.9245,.9245,.84843,.83203,.85865,.85865,.85865,.85865,.82601,.82601,.82601,.82601,.94469,.9245,.92274,.92274,.92274,.92274,.92274,.90747,.86651,.9245,.9245,.9245,.9245,.89453,.9245,.89453,.8675,.9245,.8675,.9245,.8675,.9245,.72346,.83203,.72346,.83203,.72346,.83203,.72346,.83203,.85193,.8875,.86477,.99034,.73206,.85865,.73206,.85865,.73206,.85865,.73206,.85865,.73206,.85865,.81105,.9245,.81105,.9245,.81105,.9245,1,1,.86275,.9245,.90872,.93591,.90685,.82601,.90685,.82601,.90685,.82601,.90685,1.03297,.90685,.82601,.77896,1.05611,.6377,1.07692,1,1,.90918,.75593,1.03297,1,1,.76032,.9375,.98156,.93407,.77261,1.11429,.89249,.9245,1,1,.89249,.9245,.92534,.86698,.9245,.84118,.92274,.84118,.92274,.84118,.92274,.8667,.86291,.75186,1.02933,1,1,.75186,1.02933,.67789,.77832,.67789,.77832,.67789,.77832,.67789,.77832,1,1,.79776,.97655,.79776,1.23023,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.94309,.98986,.7306,.89453,.7306,.76659,.79004,.76659,.79004,.76659,.79004,1.09231,.54873,.8675,.9245,.76318,.84843,.84557,.86651,1,1,.79776,1.20562,1.18622,1.18622,1,1.1437,.67009,.96334,.93695,1.35191,1.40909,.95161,1.48387,.8675,.90861,.6192,.7363,.64824,.82411,.56321,.85696,1.23516,.8675,.81552,.7286,.84134,.73206,.76659,.86275,.84369,.90685,.77892,.85871,1.02638,.89249,.75828,.84118,.85984,.77452,.76466,.79776,.7306,.90782,.77818,.903,.87291,.90685,.7306,.99058,1.03667,.94635,1.23516,.9849,.99058,.92393,.8916,.942,1.03667,.75026,.94635,1.0297,1.23516,.90918,.94048,.98217,.89746,.84153,.92274,.82507,.88832,.84438,.88178,1.03525,.9849,1.00225,.78086,.97248,.89404,1.23516,.9849,.92274,.9849,.89404,.73206,1,1,1,1,1,1,1,1,1,1,1,1,.89693,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.85865,1,1,1,1,1,1,1,1,1,1,1,1,.90933,1,1,1,1,1,1,.94309,.98986,.94309,.98986,.94309,.98986,.7306,.89453,1,1,.89552,.90527,1,.90186,1.12308,1.12308,1.12308,1.12308,1.2566,1.2566,1.2566,.89552,.89552,1.42259,.68994,1.03809,1,1,1.0176,1.0176,1.11523,1.4956,2.01462,.97858,.82616,.91133,.83437,.91133,1,1,1,.70508,1,1.23108,.79801,.84426,.84426,.774,.90572,1.81055,.90749,1.81055,1.28809,1.55469,.94434,1.07806,1,.97094,.7589,.85284,.90747,1.19658,.69825,.97622,1.33512,.90747,.90747,.85284,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.0336,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,1.05859,1.05859,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],ys={lineHeight:1.2207,lineGap:.2207},qs=[1.3877,1,1,1,1.17223,1.1293,.89552,.91133,.80395,1.02269,1.15601,.91056,.91056,1.2798,.85284,.89807,1,.90861,1.39016,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.96309,.96309,.85284,.85284,.85284,.83319,.88071,.8675,.81552,.73834,.85193,.73206,.7522,.81105,.86275,.90685,.6377,.77892,.75593,1.02638,.89385,.85122,.77452,.86503,.75186,.68887,.79776,.88844,.85066,.94258,.77818,.7306,.76659,1.10369,1.39016,1.10369,1.06139,.89552,.8739,.86128,.94469,.8457,.94469,.89464,1.09842,.84636,.94469,1.03297,1.07692,.90918,1.03297,.95897,.94469,.9482,.94469,.94469,1.04692,.78223,1.20562,.94469,.90332,.98986,.86621,.90527,.79004,.94152,1.77256,.94152,.85284,.97801,.89552,.91133,.89552,.91133,1.91729,.89552,1.17889,1.13254,1.08707,.92098,.85284,.68787,.71353,.84737,.90747,1.0088,1.0044,.87683,1,1.09091,1,.92229,.739,1.15642,.92098,.76288,.80504,.80972,.75859,.8675,.8675,.8675,.8675,.8675,.8675,.76318,.73834,.73206,.73206,.73206,.73206,.90685,.90685,.90685,.90685,.86477,.89385,.85122,.85122,.85122,.85122,.85122,.85284,.85311,.88844,.88844,.88844,.88844,.7306,.77452,.86331,.86128,.86128,.86128,.86128,.86128,.86128,.8693,.8457,.89464,.89464,.89464,.89464,.82601,.82601,.82601,.82601,.94469,.94469,.9482,.9482,.9482,.9482,.9482,.90747,.86651,.94469,.94469,.94469,.94469,.90527,.94469,.90527,.8675,.86128,.8675,.86128,.8675,.86128,.73834,.8457,.73834,.8457,.73834,.8457,.73834,.8457,.85193,.92454,.86477,.9921,.73206,.89464,.73206,.89464,.73206,.89464,.73206,.89464,.73206,.89464,.81105,.84636,.81105,.84636,.81105,.84636,1,1,.86275,.94469,.90872,.95786,.90685,.82601,.90685,.82601,.90685,.82601,.90685,1.03297,.90685,.82601,.77741,1.05611,.6377,1.07692,1,1,.90918,.75593,1.03297,1,1,.76032,.90452,.98156,1.11842,.77261,1.11429,.89385,.94469,1,1,.89385,.94469,.95877,.86901,.94469,.85122,.9482,.85122,.9482,.85122,.9482,.8667,.90016,.75186,1.04692,1,1,.75186,1.04692,.68887,.78223,.68887,.78223,.68887,.78223,.68887,.78223,1,1,.79776,.92188,.79776,1.23023,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.94258,.98986,.7306,.90527,.7306,.76659,.79004,.76659,.79004,.76659,.79004,1.09231,.54873,.8675,.86128,.76318,.8693,.85311,.86651,1,1,.79776,1.20562,1.18622,1.18622,1,1.1437,.67742,.96334,.93695,1.35191,1.40909,.95161,1.48387,.86686,.90861,.62267,.74359,.65649,.85498,.56963,.88254,1.23516,.8675,.81552,.75443,.84503,.73206,.76659,.86275,.85122,.90685,.77892,.85746,1.02638,.89385,.75657,.85122,.86275,.77452,.74171,.79776,.7306,.95165,.77818,.89772,.88831,.90685,.7306,.98142,1.02191,.96576,1.23516,.99018,.98142,.9236,.89258,.94035,1.02191,.78848,.96576,.9561,1.23516,.90918,.92578,.95424,.89746,.83969,.9482,.80113,.89442,.85208,.86155,.98022,.99018,1.00452,.81209,.99247,.89181,1.23516,.99018,.9482,.99018,.89181,.73206,1,1,1,1,1,1,1,1,1,1,1,1,.88844,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.89464,1,1,1,1,1,1,1,1,1,1,1,1,.96766,1,1,1,1,1,1,.94258,.98986,.94258,.98986,.94258,.98986,.7306,.90527,1,1,.89552,.90527,1,.90186,1.12308,1.12308,1.12308,1.12308,1.2566,1.2566,1.2566,.89552,.89552,1.42259,.69043,1.03809,1,1,1.0176,1.0176,1.11523,1.4956,2.01462,.99331,.82616,.91133,.84286,.91133,1,1,1,.70508,1,1.23108,.79801,.84426,.84426,.774,.90527,1.81055,.90527,1.81055,1.28809,1.55469,.94434,1.07806,1,.97094,.7589,.85284,.90747,1.19658,.69825,.97622,1.33512,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.0336,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,1.05859,1.05859,1,1,1,1.07185,.99413,.96334,1.08065,1,1,1,1,1,1,1,1,1,1,1],vs={lineHeight:1.2207,lineGap:.2207},Ss=[.76116,1,1,1.0006,.99998,.99974,.99973,.99973,.99982,.99977,1.00087,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99998,1,1.00003,1.00003,1.00003,1.00026,.9999,.99977,.99977,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,.99973,.99977,1.00026,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,.99998,1.0006,.99998,1.00003,.99973,.99998,.99973,1.00026,.99973,1.00026,.99973,.99998,1.00026,1.00026,1.0006,1.0006,.99973,1.0006,.99982,1.00026,1.00026,1.00026,1.00026,.99959,.99973,.99998,1.00026,.99973,1.00022,.99973,.99973,1,.99959,1.00077,.99959,1.00003,.99998,.99973,.99973,.99973,.99973,1.00077,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.99973,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,.99977,.99977,.99977,.99977,.99977,.99977,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,.99973,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.06409,1.00026,1.00026,1.00026,1.00026,1.00026,.99973,1.00026,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,1.03374,.99977,1.00026,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,.99977,1.00026,.99977,1.00026,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.00042,.99973,.99973,1.0006,.99977,.99973,.99973,1.00026,1.0006,1.00026,1.0006,1.00026,1.03828,1.00026,.99999,1.00026,1.0006,.99977,1.00026,.99977,1.00026,.99977,1.00026,.9993,.9998,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1,1.00016,.99977,.99959,.99977,.99959,.99977,.99959,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00026,.99998,1.00026,.8121,1.00026,.99998,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,1.00016,1.00022,1.00001,.99973,1.00001,1.00026,1,1.00026,1,1.00026,1,1.0006,.99973,.99977,.99973,1,.99982,1.00022,1.00026,1.00001,.99973,1.00026,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,1.00034,.99977,1,.99997,1.00026,1.00078,1.00036,.99973,1.00013,1.0006,.99977,.99977,.99988,.85148,1.00001,1.00026,.99977,1.00022,1.0006,.99977,1.00001,.99999,.99977,1.00069,1.00022,.99977,1.00001,.99984,1.00026,1.00001,1.00024,1.00001,.9999,1,1.0006,1.00001,1.00041,.99962,1.00026,1.0006,.99995,1.00041,.99942,.99973,.99927,1.00082,.99902,1.00026,1.00087,1.0006,1.00069,.99973,.99867,.99973,.9993,1.00026,1.00049,1.00056,1,.99988,.99935,.99995,.99954,1.00055,.99945,1.00032,1.0006,.99995,1.00026,.99995,1.00032,1.00001,1.00008,.99971,1.00019,.9994,1.00001,1.0006,1.00044,.99973,1.00023,1.00047,1,.99942,.99561,.99989,1.00035,.99977,1.00035,.99977,1.00019,.99944,1.00001,1.00021,.99926,1.00035,1.00035,.99942,1.00048,.99999,.99977,1.00022,1.00035,1.00001,.99977,1.00026,.99989,1.00057,1.00001,.99936,1.00052,1.00012,.99996,1.00043,1,1.00035,.9994,.99976,1.00035,.99973,1.00052,1.00041,1.00119,1.00037,.99973,1.00002,.99986,1.00041,1.00041,.99902,.9996,1.00034,.99999,1.00026,.99999,1.00026,.99973,1.00052,.99973,1,.99973,1.00041,1.00075,.9994,1.0003,.99999,1,1.00041,.99955,1,.99915,.99973,.99973,1.00026,1.00119,.99955,.99973,1.0006,.99911,1.0006,1.00026,.99972,1.00026,.99902,1.00041,.99973,.99999,1,1,1.00038,1.0005,1.00016,1.00022,1.00016,1.00022,1.00016,1.00022,1.00001,.99973,1,1,.99973,1,1,.99955,1.0006,1.0006,1.0006,1.0006,1,1,1,.99973,.99973,.99972,1,1,1.00106,.99999,.99998,.99998,.99999,.99998,1.66475,1,.99973,.99973,1.00023,.99973,.99971,1.00047,1.00023,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1,1,1,1,1,1,1,.99972,1,1.20985,1.39713,1.00003,1.00031,1.00015,1,.99561,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.99972,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],As={lineHeight:1.2,lineGap:.2},xs=[.76116,1,1,1.0006,.99998,.99974,.99973,.99973,.99982,.99977,1.00087,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99998,1,1.00003,1.00003,1.00003,1.00026,.9999,.99977,.99977,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,.99973,.99977,1.00026,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,.99998,1.0006,.99998,1.00003,.99973,.99998,.99973,1.00026,.99973,1.00026,.99973,.99998,1.00026,1.00026,1.0006,1.0006,.99973,1.0006,.99982,1.00026,1.00026,1.00026,1.00026,.99959,.99973,.99998,1.00026,.99973,1.00022,.99973,.99973,1,.99959,1.00077,.99959,1.00003,.99998,.99973,.99973,.99973,.99973,1.00077,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.99973,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,.99977,.99977,.99977,.99977,.99977,.99977,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,.99973,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.06409,1.00026,1.00026,1.00026,1.00026,1.00026,.99973,1.00026,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,1.0044,.99977,1.00026,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,.99977,1.00026,.99977,1.00026,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99971,.99973,.99973,1.0006,.99977,.99973,.99973,1.00026,1.0006,1.00026,1.0006,1.00026,1.01011,1.00026,.99999,1.00026,1.0006,.99977,1.00026,.99977,1.00026,.99977,1.00026,.9993,.9998,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1,1.00016,.99977,.99959,.99977,.99959,.99977,.99959,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00026,.99998,1.00026,.8121,1.00026,.99998,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,1.00016,1.00022,1.00001,.99973,1.00001,1.00026,1,1.00026,1,1.00026,1,1.0006,.99973,.99977,.99973,1,.99982,1.00022,1.00026,1.00001,.99973,1.00026,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99977,1,1,1.00026,.99969,.99972,.99981,.9998,1.0006,.99977,.99977,1.00022,.91155,1.00001,1.00026,.99977,1.00022,1.0006,.99977,1.00001,.99999,.99977,.99966,1.00022,1.00032,1.00001,.99944,1.00026,1.00001,.99968,1.00001,1.00047,1,1.0006,1.00001,.99981,1.00101,1.00026,1.0006,.99948,.99981,1.00064,.99973,.99942,1.00101,1.00061,1.00026,1.00069,1.0006,1.00014,.99973,1.01322,.99973,1.00065,1.00026,1.00012,.99923,1,1.00064,1.00076,.99948,1.00055,1.00063,1.00007,.99943,1.0006,.99948,1.00026,.99948,.99943,1.00001,1.00001,1.00029,1.00038,1.00035,1.00001,1.0006,1.0006,.99973,.99978,1.00001,1.00057,.99989,.99967,.99964,.99967,.99977,.99999,.99977,1.00038,.99977,1.00001,.99973,1.00066,.99967,.99967,1.00041,.99998,.99999,.99977,1.00022,.99967,1.00001,.99977,1.00026,.99964,1.00031,1.00001,.99999,.99999,1,1.00023,1,1,.99999,1.00035,1.00001,.99999,.99973,.99977,.99999,1.00058,.99973,.99973,.99955,.9995,1.00026,1.00026,1.00032,.99989,1.00034,.99999,1.00026,1.00026,1.00026,.99973,.45998,.99973,1.00026,.99973,1.00001,.99999,.99982,.99994,.99996,1,1.00042,1.00044,1.00029,1.00023,.99973,.99973,1.00026,.99949,1.00002,.99973,1.0006,1.0006,1.0006,.99975,1.00026,1.00026,1.00032,.98685,.99973,1.00026,1,1,.99966,1.00044,1.00016,1.00022,1.00016,1.00022,1.00016,1.00022,1.00001,.99973,1,1,.99973,1,1,.99955,1.0006,1.0006,1.0006,1.0006,1,1,1,.99973,.99973,.99972,1,1,1.00106,.99999,.99998,.99998,.99999,.99998,1.66475,1,.99973,.99973,1,.99973,.99971,.99978,1,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1.00098,1,1,1,1.00049,1,1,.99972,1,1.20985,1.39713,1.00003,1.00031,1.00015,1,.99561,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.99972,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],Cs={lineHeight:1.35,lineGap:.2},Is=[.76116,1,1,1.0006,1.0006,1.00006,.99973,.99973,.99982,1.00001,1.00043,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.0006,1,1.00003,1.00003,1.00003,.99973,.99987,1.00001,1.00001,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,1,1.00001,.99973,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,1.0006,1.0006,1.0006,.99949,.99973,.99998,.99973,.99973,1,.99973,.99973,1.0006,.99973,.99973,.99924,.99924,1,.99924,.99999,.99973,.99973,.99973,.99973,.99998,1,1.0006,.99973,1,.99977,1,1,1,1.00005,1.0009,1.00005,1.00003,.99998,.99973,.99973,.99973,.99973,1.0009,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.9998,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,1.00001,1.00001,1.00001,1.00001,1.00001,1.00001,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,1,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.06409,1.00026,.99973,.99973,.99973,.99973,1,.99973,1,1.00001,.99973,1.00001,.99973,1.00001,.99973,.99977,1,.99977,1,.99977,1,.99977,1,.99977,1.0288,.99977,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,.99977,.99973,.99977,.99973,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99924,1.0006,1.0006,.99946,1.00034,1,.99924,1.00001,1,1,.99973,.99924,.99973,.99924,.99973,1.06311,.99973,1.00024,.99973,.99924,.99977,.99973,.99977,.99973,.99977,.99973,1.00041,.9998,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1,1.00016,.99977,.99998,.99977,.99998,.99977,.99998,1.00001,1,1.00001,1,1.00001,1,1.00001,1,1.00026,1.0006,1.00026,.89547,1.00026,1.0006,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,1.00016,.99977,1.00001,1,1.00001,1.00026,1,1.00026,1,1.00026,1,.99924,.99973,1.00001,.99973,1,.99982,1.00022,1.00026,1.00001,1,1.00026,1.0006,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,1.00001,1,1.00054,.99977,1.00084,1.00007,.99973,1.00013,.99924,1.00001,1.00001,.99945,.91221,1.00001,1.00026,.99977,1.00022,1.0006,1.00001,1.00001,.99999,.99977,.99933,1.00022,1.00054,1.00001,1.00065,1.00026,1.00001,1.0001,1.00001,1.00052,1,1.0006,1.00001,.99945,.99897,.99968,.99924,1.00036,.99945,.99949,1,1.0006,.99897,.99918,.99968,.99911,.99924,1,.99962,1.01487,1,1.0005,.99973,1.00012,1.00043,1,.99995,.99994,1.00036,.99947,1.00019,1.00063,1.00025,.99924,1.00036,.99973,1.00036,1.00025,1.00001,1.00001,1.00027,1.0001,1.00068,1.00001,1.0006,1.0006,1,1.00008,.99957,.99972,.9994,.99954,.99975,1.00051,1.00001,1.00019,1.00001,1.0001,.99986,1.00001,1.00001,1.00038,.99954,.99954,.9994,1.00066,.99999,.99977,1.00022,1.00054,1.00001,.99977,1.00026,.99975,1.0001,1.00001,.99993,.9995,.99955,1.00016,.99978,.99974,1.00019,1.00022,.99955,1.00053,.99973,1.00089,1.00005,.99967,1.00048,.99973,1.00002,1.00034,.99973,.99973,.99964,1.00006,1.00066,.99947,.99973,.98894,.99973,1,.44898,1,.99946,1,1.00039,1.00082,.99991,.99991,.99985,1.00022,1.00023,1.00061,1.00006,.99966,.99973,.99973,.99973,1.00019,1.0008,1,.99924,.99924,.99924,.99983,1.00044,.99973,.99964,.98332,1,.99973,1,1,.99962,.99895,1.00016,.99977,1.00016,.99977,1.00016,.99977,1.00001,1,1,1,.99973,1,1,.99955,.99924,.99924,.99924,.99924,.99998,.99998,.99998,.99973,.99973,.99972,1,1,1.00267,.99999,.99998,.99998,1,.99998,1.66475,1,.99973,.99973,1.00023,.99973,1.00423,.99925,.99999,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1.00049,1,1.00245,1,1,1,1,.96329,1,1.20985,1.39713,1.00003,.8254,1.00015,1,1.00035,1.00027,1.00031,1.00031,1.00003,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.95317,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],Fs={lineHeight:1.35,lineGap:.2},Ts=[.76116,1,1,1.0006,1.0006,1.00006,.99973,.99973,.99982,1.00001,1.00043,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.0006,1,1.00003,1.00003,1.00003,.99973,.99987,1.00001,1.00001,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,1,1.00001,.99973,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,1.0006,1.0006,1.0006,.99949,.99973,.99998,.99973,.99973,1,.99973,.99973,1.0006,.99973,.99973,.99924,.99924,1,.99924,.99999,.99973,.99973,.99973,.99973,.99998,1,1.0006,.99973,1,.99977,1,1,1,1.00005,1.0009,1.00005,1.00003,.99998,.99973,.99973,.99973,.99973,1.0009,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.9998,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,1.00001,1.00001,1.00001,1.00001,1.00001,1.00001,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,1,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.06409,1.00026,.99973,.99973,.99973,.99973,1,.99973,1,1.00001,.99973,1.00001,.99973,1.00001,.99973,.99977,1,.99977,1,.99977,1,.99977,1,.99977,1.04596,.99977,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,.99977,.99973,.99977,.99973,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99924,1.0006,1.0006,1.00019,1.00034,1,.99924,1.00001,1,1,.99973,.99924,.99973,.99924,.99973,1.02572,.99973,1.00005,.99973,.99924,.99977,.99973,.99977,.99973,.99977,.99973,.99999,.9998,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1,1.00016,.99977,.99998,.99977,.99998,.99977,.99998,1.00001,1,1.00001,1,1.00001,1,1.00001,1,1.00026,1.0006,1.00026,.84533,1.00026,1.0006,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,1.00016,.99977,1.00001,1,1.00001,1.00026,1,1.00026,1,1.00026,1,.99924,.99973,1.00001,.99973,1,.99982,1.00022,1.00026,1.00001,1,1.00026,1.0006,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99928,1,.99977,1.00013,1.00055,.99947,.99945,.99941,.99924,1.00001,1.00001,1.0004,.91621,1.00001,1.00026,.99977,1.00022,1.0006,1.00001,1.00005,.99999,.99977,1.00015,1.00022,.99977,1.00001,.99973,1.00026,1.00001,1.00019,1.00001,.99946,1,1.0006,1.00001,.99978,1.00045,.99973,.99924,1.00023,.99978,.99966,1,1.00065,1.00045,1.00019,.99973,.99973,.99924,1,1,.96499,1,1.00055,.99973,1.00008,1.00027,1,.9997,.99995,1.00023,.99933,1.00019,1.00015,1.00031,.99924,1.00023,.99973,1.00023,1.00031,1.00001,.99928,1.00029,1.00092,1.00035,1.00001,1.0006,1.0006,1,.99988,.99975,1,1.00082,.99561,.9996,1.00035,1.00001,.99962,1.00001,1.00092,.99964,1.00001,.99963,.99999,1.00035,1.00035,1.00082,.99962,.99999,.99977,1.00022,1.00035,1.00001,.99977,1.00026,.9996,.99967,1.00001,1.00034,1.00074,1.00054,1.00053,1.00063,.99971,.99962,1.00035,.99975,.99977,.99973,1.00043,.99953,1.0007,.99915,.99973,1.00008,.99892,1.00073,1.00073,1.00114,.99915,1.00073,.99955,.99973,1.00092,.99973,1,.99998,1,1.0003,1,1.00043,1.00001,.99969,1.0003,1,1.00035,1.00001,.9995,1,1.00092,.99973,.99973,.99973,1.0007,.9995,1,.99924,1.0006,.99924,.99972,1.00062,.99973,1.00114,1.00073,1,.99955,1,1,1.00047,.99968,1.00016,.99977,1.00016,.99977,1.00016,.99977,1.00001,1,1,1,.99973,1,1,.99955,.99924,.99924,.99924,.99924,.99998,.99998,.99998,.99973,.99973,.99972,1,1,1.00267,.99999,.99998,.99998,1,.99998,1.66475,1,.99973,.99973,1.00023,.99973,.99971,.99925,1.00023,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1,1,1,1,1,1,1,.96329,1,1.20985,1.39713,1.00003,.8254,1.00015,1,1.00035,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.95317,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],Rs={lineHeight:1.2,lineGap:.2},Os=[365,0,333,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,333,556,556,556,556,280,556,333,737,370,556,584,737,552,400,549,333,333,333,576,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,549,611,611,611,611,611,556,611,556,722,556,722,556,722,556,722,556,722,556,722,556,722,556,722,719,722,611,667,556,667,556,667,556,667,556,667,556,778,611,778,611,778,611,778,611,722,611,722,611,278,278,278,278,278,278,278,278,278,278,785,556,556,278,722,556,556,611,278,611,278,611,385,611,479,611,278,722,611,722,611,722,611,708,723,611,778,611,778,611,778,611,1e3,944,722,389,722,389,722,389,667,556,667,556,667,556,667,556,611,333,611,479,611,333,722,611,722,611,722,611,722,611,722,611,722,611,944,778,667,556,667,611,500,611,500,611,500,278,556,722,556,1e3,889,778,611,667,556,611,333,333,333,333,333,333,333,333,333,333,333,465,722,333,853,906,474,825,927,838,278,722,722,601,719,667,611,722,778,278,722,667,833,722,644,778,722,667,600,611,667,821,667,809,802,278,667,615,451,611,278,582,615,610,556,606,475,460,611,541,278,558,556,612,556,445,611,766,619,520,684,446,582,715,576,753,845,278,582,611,582,845,667,669,885,567,711,667,278,276,556,1094,1062,875,610,722,622,719,722,719,722,567,712,667,904,626,719,719,610,702,833,722,778,719,667,722,611,622,854,667,730,703,1005,1019,870,979,719,711,1031,719,556,618,615,417,635,556,709,497,615,615,500,635,740,604,611,604,611,556,490,556,875,556,615,581,833,844,729,854,615,552,854,583,556,556,611,417,552,556,278,281,278,969,906,611,500,615,556,604,778,611,487,447,944,778,944,778,944,778,667,556,333,333,556,1e3,1e3,552,278,278,278,278,500,500,500,556,556,350,1e3,1e3,240,479,333,333,604,333,167,396,556,556,1094,556,885,489,1115,1e3,768,600,834,834,834,834,1e3,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,722,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,611,611,333,333,333,333,333,333,333,333,222,222,333,333,333,333,333,333,333,333],Bs=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],Ds=[365,0,333,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,333,556,556,556,556,280,556,333,737,370,556,584,737,552,400,549,333,333,333,576,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,549,611,611,611,611,611,556,611,556,722,556,722,556,722,556,722,556,722,556,722,556,722,556,722,740,722,611,667,556,667,556,667,556,667,556,667,556,778,611,778,611,778,611,778,611,722,611,722,611,278,278,278,278,278,278,278,278,278,278,782,556,556,278,722,556,556,611,278,611,278,611,396,611,479,611,278,722,611,722,611,722,611,708,723,611,778,611,778,611,778,611,1e3,944,722,389,722,389,722,389,667,556,667,556,667,556,667,556,611,333,611,479,611,333,722,611,722,611,722,611,722,611,722,611,722,611,944,778,667,556,667,611,500,611,500,611,500,278,556,722,556,1e3,889,778,611,667,556,611,333,333,333,333,333,333,333,333,333,333,333,333,722,333,854,906,473,844,930,847,278,722,722,610,671,667,611,722,778,278,722,667,833,722,657,778,718,667,590,611,667,822,667,829,781,278,667,620,479,611,278,591,620,621,556,610,479,492,611,558,278,566,556,603,556,450,611,712,605,532,664,409,591,704,578,773,834,278,591,611,591,834,667,667,886,614,719,667,278,278,556,1094,1042,854,622,719,677,719,722,708,722,614,722,667,927,643,719,719,615,687,833,722,778,719,667,722,611,677,781,667,729,708,979,989,854,1e3,708,719,1042,729,556,619,604,534,618,556,736,510,611,611,507,622,740,604,611,611,611,556,889,556,885,556,646,583,889,935,707,854,594,552,865,589,556,556,611,469,563,556,278,278,278,969,906,611,507,619,556,611,778,611,575,467,944,778,944,778,944,778,667,556,333,333,556,1e3,1e3,552,278,278,278,278,500,500,500,556,556,350,1e3,1e3,240,479,333,333,604,333,167,396,556,556,1104,556,885,516,1146,1e3,768,600,834,834,834,834,999,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,722,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,611,611,333,333,333,333,333,333,333,333,222,222,333,333,333,333,333,333,333,333],Hs=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],Ms=[365,0,333,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,333,556,556,556,556,260,556,333,737,370,556,584,737,552,400,549,333,333,333,576,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,549,611,556,556,556,556,500,556,500,667,556,667,556,667,556,722,500,722,500,722,500,722,500,722,625,722,556,667,556,667,556,667,556,667,556,667,556,778,556,778,556,778,556,778,556,722,556,722,556,278,278,278,278,278,278,278,222,278,278,733,444,500,222,667,500,500,556,222,556,222,556,281,556,400,556,222,722,556,722,556,722,556,615,723,556,778,556,778,556,778,556,1e3,944,722,333,722,333,722,333,667,500,667,500,667,500,667,500,611,278,611,354,611,278,722,556,722,556,722,556,722,556,722,556,722,556,944,722,667,500,667,611,500,611,500,611,500,222,556,667,556,1e3,889,778,611,667,500,611,278,333,333,333,333,333,333,333,333,333,333,333,667,278,789,846,389,794,865,775,222,667,667,570,671,667,611,722,778,278,667,667,833,722,648,778,725,667,600,611,667,837,667,831,761,278,667,570,439,555,222,550,570,571,500,556,439,463,555,542,222,500,492,548,500,447,556,670,573,486,603,374,550,652,546,728,779,222,550,556,550,779,667,667,843,544,708,667,278,278,500,1066,982,844,589,715,639,724,667,651,667,544,704,667,917,614,715,715,589,686,833,722,778,725,667,722,611,639,795,667,727,673,920,923,805,886,651,694,1022,682,556,562,522,493,553,556,688,465,556,556,472,564,686,550,556,556,556,500,833,500,835,500,572,518,830,851,621,736,526,492,752,534,556,556,556,378,496,500,222,222,222,910,828,556,472,565,500,556,778,556,492,339,944,722,944,722,944,722,667,500,333,333,556,1e3,1e3,552,222,222,222,222,333,333,333,556,556,350,1e3,1e3,188,354,333,333,500,333,167,365,556,556,1094,556,885,323,1083,1e3,768,600,834,834,834,834,1e3,500,998,500,1e3,500,500,494,612,823,713,584,549,713,979,719,274,549,549,584,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,500,500,333,333,333,333,333,333,333,333,222,222,294,294,324,324,316,328,398,285],Ns=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],Es=[365,0,333,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,333,556,556,556,556,260,556,333,737,370,556,584,737,552,400,549,333,333,333,576,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,549,611,556,556,556,556,500,556,500,667,556,667,556,667,556,722,500,722,500,722,500,722,500,722,615,722,556,667,556,667,556,667,556,667,556,667,556,778,556,778,556,778,556,778,556,722,556,722,556,278,278,278,278,278,278,278,222,278,278,735,444,500,222,667,500,500,556,222,556,222,556,292,556,334,556,222,722,556,722,556,722,556,604,723,556,778,556,778,556,778,556,1e3,944,722,333,722,333,722,333,667,500,667,500,667,500,667,500,611,278,611,375,611,278,722,556,722,556,722,556,722,556,722,556,722,556,944,722,667,500,667,611,500,611,500,611,500,222,556,667,556,1e3,889,778,611,667,500,611,278,333,333,333,333,333,333,333,333,333,333,333,667,278,784,838,384,774,855,752,222,667,667,551,668,667,611,722,778,278,667,668,833,722,650,778,722,667,618,611,667,798,667,835,748,278,667,578,446,556,222,547,578,575,500,557,446,441,556,556,222,500,500,576,500,448,556,690,569,482,617,395,547,648,525,713,781,222,547,556,547,781,667,667,865,542,719,667,278,278,500,1057,1010,854,583,722,635,719,667,656,667,542,677,667,923,604,719,719,583,656,833,722,778,719,667,722,611,635,760,667,740,667,917,938,792,885,656,719,1010,722,556,573,531,365,583,556,669,458,559,559,438,583,688,552,556,542,556,500,458,500,823,500,573,521,802,823,625,719,521,510,750,542,556,556,556,365,510,500,222,278,222,906,812,556,438,559,500,552,778,556,489,411,944,722,944,722,944,722,667,500,333,333,556,1e3,1e3,552,222,222,222,222,333,333,333,556,556,350,1e3,1e3,188,354,333,333,500,333,167,365,556,556,1094,556,885,323,1073,1e3,768,600,834,834,834,834,1e3,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,719,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,500,500,333,333,333,333,333,333,333,333,222,222,294,294,324,324,316,328,398,285],_s=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],zs=[1.36898,1,1,.72706,.80479,.83734,.98894,.99793,.9897,.93884,.86209,.94292,.94292,1.16661,1.02058,.93582,.96694,.93582,1.19137,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.78076,.78076,1.02058,1.02058,1.02058,.72851,.78966,.90838,.83637,.82391,.96376,.80061,.86275,.8768,.95407,1.0258,.73901,.85022,.83655,1.0156,.95546,.92179,.87107,.92179,.82114,.8096,.89713,.94438,.95353,.94083,.91905,.90406,.9446,.94292,1.18777,.94292,1.02058,.89903,.90088,.94938,.97898,.81093,.97571,.94938,1.024,.9577,.95933,.98621,1.0474,.97455,.98981,.9672,.95933,.9446,.97898,.97407,.97646,.78036,1.10208,.95442,.95298,.97579,.9332,.94039,.938,.80687,1.01149,.80687,1.02058,.80479,.99793,.99793,.99793,.99793,1.01149,1.00872,.90088,.91882,1.0213,.8361,1.02058,.62295,.54324,.89022,1.08595,1,1,.90088,1,.97455,.93582,.90088,1,1.05686,.8361,.99642,.99642,.99642,.72851,.90838,.90838,.90838,.90838,.90838,.90838,.868,.82391,.80061,.80061,.80061,.80061,1.0258,1.0258,1.0258,1.0258,.97484,.95546,.92179,.92179,.92179,.92179,.92179,1.02058,.92179,.94438,.94438,.94438,.94438,.90406,.86958,.98225,.94938,.94938,.94938,.94938,.94938,.94938,.9031,.81093,.94938,.94938,.94938,.94938,.98621,.98621,.98621,.98621,.93969,.95933,.9446,.9446,.9446,.9446,.9446,1.08595,.9446,.95442,.95442,.95442,.95442,.94039,.97898,.94039,.90838,.94938,.90838,.94938,.90838,.94938,.82391,.81093,.82391,.81093,.82391,.81093,.82391,.81093,.96376,.84313,.97484,.97571,.80061,.94938,.80061,.94938,.80061,.94938,.80061,.94938,.80061,.94938,.8768,.9577,.8768,.9577,.8768,.9577,1,1,.95407,.95933,.97069,.95933,1.0258,.98621,1.0258,.98621,1.0258,.98621,1.0258,.98621,1.0258,.98621,.887,1.01591,.73901,1.0474,1,1,.97455,.83655,.98981,1,1,.83655,.73977,.83655,.73903,.84638,1.033,.95546,.95933,1,1,.95546,.95933,.8271,.95417,.95933,.92179,.9446,.92179,.9446,.92179,.9446,.936,.91964,.82114,.97646,1,1,.82114,.97646,.8096,.78036,.8096,.78036,1,1,.8096,.78036,1,1,.89713,.77452,.89713,1.10208,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94083,.97579,.90406,.94039,.90406,.9446,.938,.9446,.938,.9446,.938,1,.99793,.90838,.94938,.868,.9031,.92179,.9446,1,1,.89713,1.10208,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90989,.9358,.91945,.83181,.75261,.87992,.82976,.96034,.83689,.97268,1.0078,.90838,.83637,.8019,.90157,.80061,.9446,.95407,.92436,1.0258,.85022,.97153,1.0156,.95546,.89192,.92179,.92361,.87107,.96318,.89713,.93704,.95638,.91905,.91709,.92796,1.0258,.93704,.94836,1.0373,.95933,1.0078,.95871,.94836,.96174,.92601,.9498,.98607,.95776,.95933,1.05453,1.0078,.98275,.9314,.95617,.91701,1.05993,.9446,.78367,.9553,1,.86832,1.0128,.95871,.99394,.87548,.96361,.86774,1.0078,.95871,.9446,.95871,.86774,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.94083,.97579,.94083,.97579,.94083,.97579,.90406,.94039,.96694,1,.89903,1,1,1,.93582,.93582,.93582,1,.908,.908,.918,.94219,.94219,.96544,1,1.285,1,1,.81079,.81079,1,1,.74854,1,1,1,1,.99793,1,1,1,.65,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.17173,1,.80535,.76169,1.02058,1.0732,1.05486,1,1,1.30692,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.16161,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],Ls={lineHeight:1.2,lineGap:.2},Us=[1.36898,1,1,.66227,.80779,.81625,.97276,.97276,.97733,.92222,.83266,.94292,.94292,1.16148,1.02058,.93582,.96694,.93582,1.17337,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.78076,.78076,1.02058,1.02058,1.02058,.71541,.76813,.85576,.80591,.80729,.94299,.77512,.83655,.86523,.92222,.98621,.71743,.81698,.79726,.98558,.92222,.90637,.83809,.90637,.80729,.76463,.86275,.90699,.91605,.9154,.85308,.85458,.90531,.94292,1.21296,.94292,1.02058,.89903,1.18616,.99613,.91677,.78216,.91677,.90083,.98796,.9135,.92168,.95381,.98981,.95298,.95381,.93459,.92168,.91513,.92004,.91677,.95077,.748,1.04502,.91677,.92061,.94236,.89544,.89364,.9,.80687,.8578,.80687,1.02058,.80779,.97276,.97276,.97276,.97276,.8578,.99973,1.18616,.91339,1.08074,.82891,1.02058,.55509,.71526,.89022,1.08595,1,1,1.18616,1,.96736,.93582,1.18616,1,1.04864,.82711,.99043,.99043,.99043,.71541,.85576,.85576,.85576,.85576,.85576,.85576,.845,.80729,.77512,.77512,.77512,.77512,.98621,.98621,.98621,.98621,.95961,.92222,.90637,.90637,.90637,.90637,.90637,1.02058,.90251,.90699,.90699,.90699,.90699,.85458,.83659,.94951,.99613,.99613,.99613,.99613,.99613,.99613,.85811,.78216,.90083,.90083,.90083,.90083,.95381,.95381,.95381,.95381,.9135,.92168,.91513,.91513,.91513,.91513,.91513,1.08595,.91677,.91677,.91677,.91677,.91677,.89364,.92332,.89364,.85576,.99613,.85576,.99613,.85576,.99613,.80729,.78216,.80729,.78216,.80729,.78216,.80729,.78216,.94299,.76783,.95961,.91677,.77512,.90083,.77512,.90083,.77512,.90083,.77512,.90083,.77512,.90083,.86523,.9135,.86523,.9135,.86523,.9135,1,1,.92222,.92168,.92222,.92168,.98621,.95381,.98621,.95381,.98621,.95381,.98621,.95381,.98621,.95381,.86036,.97096,.71743,.98981,1,1,.95298,.79726,.95381,1,1,.79726,.6894,.79726,.74321,.81691,1.0006,.92222,.92168,1,1,.92222,.92168,.79464,.92098,.92168,.90637,.91513,.90637,.91513,.90637,.91513,.909,.87514,.80729,.95077,1,1,.80729,.95077,.76463,.748,.76463,.748,1,1,.76463,.748,1,1,.86275,.72651,.86275,1.04502,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.9154,.94236,.85458,.89364,.85458,.90531,.9,.90531,.9,.90531,.9,1,.97276,.85576,.99613,.845,.85811,.90251,.91677,1,1,.86275,1.04502,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.00899,1.30628,.85576,.80178,.66862,.7927,.69323,.88127,.72459,.89711,.95381,.85576,.80591,.7805,.94729,.77512,.90531,.92222,.90637,.98621,.81698,.92655,.98558,.92222,.85359,.90637,.90976,.83809,.94523,.86275,.83509,.93157,.85308,.83392,.92346,.98621,.83509,.92886,.91324,.92168,.95381,.90646,.92886,.90557,.86847,.90276,.91324,.86842,.92168,.99531,.95381,.9224,.85408,.92699,.86847,1.0051,.91513,.80487,.93481,1,.88159,1.05214,.90646,.97355,.81539,.89398,.85923,.95381,.90646,.91513,.90646,.85923,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.9154,.94236,.9154,.94236,.9154,.94236,.85458,.89364,.96694,1,.89903,1,1,1,.91782,.91782,.91782,1,.896,.896,.896,.9332,.9332,.95973,1,1.26,1,1,.80479,.80178,1,1,.85633,1,1,1,1,.97276,1,1,1,.698,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.14542,1,.79199,.78694,1.02058,1.03493,1.05486,1,1,1.23026,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.20006,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],Ws={lineHeight:1.2,lineGap:.2},Xs=[1.36898,1,1,.65507,.84943,.85639,.88465,.88465,.86936,.88307,.86948,.85283,.85283,1.06383,1.02058,.75945,.9219,.75945,1.17337,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.75945,.75945,1.02058,1.02058,1.02058,.69046,.70926,.85158,.77812,.76852,.89591,.70466,.76125,.80094,.86822,.83864,.728,.77212,.79475,.93637,.87514,.8588,.76013,.8588,.72421,.69866,.77598,.85991,.80811,.87832,.78112,.77512,.8562,1.0222,1.18417,1.0222,1.27014,.89903,1.15012,.93859,.94399,.846,.94399,.81453,1.0186,.94219,.96017,1.03075,1.02175,.912,1.03075,.96998,.96017,.93859,.94399,.94399,.95493,.746,1.12658,.94578,.91,.979,.882,.882,.83,.85034,.83537,.85034,1.02058,.70869,.88465,.88465,.88465,.88465,.83537,.90083,1.15012,.9161,.94565,.73541,1.02058,.53609,.69353,.79519,1.08595,1,1,1.15012,1,.91974,.75945,1.15012,1,.9446,.73361,.9005,.9005,.9005,.62864,.85158,.85158,.85158,.85158,.85158,.85158,.773,.76852,.70466,.70466,.70466,.70466,.83864,.83864,.83864,.83864,.90561,.87514,.8588,.8588,.8588,.8588,.8588,1.02058,.85751,.85991,.85991,.85991,.85991,.77512,.76013,.88075,.93859,.93859,.93859,.93859,.93859,.93859,.8075,.846,.81453,.81453,.81453,.81453,.82424,.82424,.82424,.82424,.9278,.96017,.93859,.93859,.93859,.93859,.93859,1.08595,.8562,.94578,.94578,.94578,.94578,.882,.94578,.882,.85158,.93859,.85158,.93859,.85158,.93859,.76852,.846,.76852,.846,.76852,.846,.76852,.846,.89591,.8544,.90561,.94399,.70466,.81453,.70466,.81453,.70466,.81453,.70466,.81453,.70466,.81453,.80094,.94219,.80094,.94219,.80094,.94219,1,1,.86822,.96017,.86822,.96017,.83864,.82424,.83864,.82424,.83864,.82424,.83864,1.03075,.83864,.82424,.81402,1.02738,.728,1.02175,1,1,.912,.79475,1.03075,1,1,.79475,.83911,.79475,.66266,.80553,1.06676,.87514,.96017,1,1,.87514,.96017,.86865,.87396,.96017,.8588,.93859,.8588,.93859,.8588,.93859,.867,.84759,.72421,.95493,1,1,.72421,.95493,.69866,.746,.69866,.746,1,1,.69866,.746,1,1,.77598,.88417,.77598,1.12658,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.87832,.979,.77512,.882,.77512,.8562,.83,.8562,.83,.8562,.83,1,.88465,.85158,.93859,.773,.8075,.85751,.8562,1,1,.77598,1.12658,1.15012,1.15012,1.15012,1.15012,1.15012,1.15313,1.15012,1.15012,1.15012,1.08106,1.03901,.85158,.77025,.62264,.7646,.65351,.86026,.69461,.89947,1.03075,.85158,.77812,.76449,.88836,.70466,.8562,.86822,.8588,.83864,.77212,.85308,.93637,.87514,.82352,.8588,.85701,.76013,.89058,.77598,.8156,.82565,.78112,.77899,.89386,.83864,.8156,.9486,.92388,.96186,1.03075,.91123,.9486,.93298,.878,.93942,.92388,.84596,.96186,.95119,1.03075,.922,.88787,.95829,.88,.93559,.93859,.78815,.93758,1,.89217,1.03737,.91123,.93969,.77487,.85769,.86799,1.03075,.91123,.93859,.91123,.86799,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.87832,.979,.87832,.979,.87832,.979,.77512,.882,.9219,1,.89903,1,1,1,.87321,.87321,.87321,1,1.027,1.027,1.027,.86847,.86847,.79121,1,1.124,1,1,.73572,.73572,1,1,.85034,1,1,1,1,.88465,1,1,1,.669,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.04828,1,.74948,.75187,1.02058,.98391,1.02119,1,1,1.06233,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.05233,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],Ks={lineHeight:1.2,lineGap:.2},Gs=[1.36898,1,1,.76305,.82784,.94935,.89364,.92241,.89073,.90706,.98472,.85283,.85283,1.0664,1.02058,.74505,.9219,.74505,1.23456,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.74505,.74505,1.02058,1.02058,1.02058,.73002,.72601,.91755,.8126,.80314,.92222,.73764,.79726,.83051,.90284,.86023,.74,.8126,.84869,.96518,.91115,.8858,.79761,.8858,.74498,.73914,.81363,.89591,.83659,.89633,.85608,.8111,.90531,1.0222,1.22736,1.0222,1.27014,.89903,.90088,.86667,1.0231,.896,1.01411,.90083,1.05099,1.00512,.99793,1.05326,1.09377,.938,1.06226,1.00119,.99793,.98714,1.0231,1.01231,.98196,.792,1.19137,.99074,.962,1.01915,.926,.942,.856,.85034,.92006,.85034,1.02058,.69067,.92241,.92241,.92241,.92241,.92006,.9332,.90088,.91882,.93484,.75339,1.02058,.56866,.54324,.79519,1.08595,1,1,.90088,1,.95325,.74505,.90088,1,.97198,.75339,.91009,.91009,.91009,.66466,.91755,.91755,.91755,.91755,.91755,.91755,.788,.80314,.73764,.73764,.73764,.73764,.86023,.86023,.86023,.86023,.92915,.91115,.8858,.8858,.8858,.8858,.8858,1.02058,.8858,.89591,.89591,.89591,.89591,.8111,.79611,.89713,.86667,.86667,.86667,.86667,.86667,.86667,.86936,.896,.90083,.90083,.90083,.90083,.84224,.84224,.84224,.84224,.97276,.99793,.98714,.98714,.98714,.98714,.98714,1.08595,.89876,.99074,.99074,.99074,.99074,.942,1.0231,.942,.91755,.86667,.91755,.86667,.91755,.86667,.80314,.896,.80314,.896,.80314,.896,.80314,.896,.92222,.93372,.92915,1.01411,.73764,.90083,.73764,.90083,.73764,.90083,.73764,.90083,.73764,.90083,.83051,1.00512,.83051,1.00512,.83051,1.00512,1,1,.90284,.99793,.90976,.99793,.86023,.84224,.86023,.84224,.86023,.84224,.86023,1.05326,.86023,.84224,.82873,1.07469,.74,1.09377,1,1,.938,.84869,1.06226,1,1,.84869,.83704,.84869,.81441,.85588,1.08927,.91115,.99793,1,1,.91115,.99793,.91887,.90991,.99793,.8858,.98714,.8858,.98714,.8858,.98714,.894,.91434,.74498,.98196,1,1,.74498,.98196,.73914,.792,.73914,.792,1,1,.73914,.792,1,1,.81363,.904,.81363,1.19137,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89633,1.01915,.8111,.942,.8111,.90531,.856,.90531,.856,.90531,.856,1,.92241,.91755,.86667,.788,.86936,.8858,.89876,1,1,.81363,1.19137,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90388,1.03901,.92138,.78105,.7154,.86169,.80513,.94007,.82528,.98612,1.06226,.91755,.8126,.81884,.92819,.73764,.90531,.90284,.8858,.86023,.8126,.91172,.96518,.91115,.83089,.8858,.87791,.79761,.89297,.81363,.88157,.89992,.85608,.81992,.94307,.86023,.88157,.95308,.98699,.99793,1.06226,.95817,.95308,.97358,.928,.98088,.98699,.92761,.99793,.96017,1.06226,.986,.944,.95978,.938,.96705,.98714,.80442,.98972,1,.89762,1.04552,.95817,.99007,.87064,.91879,.88888,1.06226,.95817,.98714,.95817,.88888,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.89633,1.01915,.89633,1.01915,.89633,1.01915,.8111,.942,.9219,1,.89903,1,1,1,.93173,.93173,.93173,1,1.06304,1.06304,1.06904,.89903,.89903,.80549,1,1.156,1,1,.76575,.76575,1,1,.72458,1,1,1,1,.92241,1,1,1,.619,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.07257,1,.74705,.71119,1.02058,1.024,1.02119,1,1,1.1536,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.05638,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],Vs={lineHeight:1.2,lineGap:.2},$s=[1.76738,1,1,.99297,.9824,1.04016,1.06497,1.03424,.97529,1.17647,1.23203,1.1085,1.1085,1.16939,1.2107,.9754,1.21408,.9754,1.59578,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,.81378,.81378,1.2107,1.2107,1.2107,.71703,.97847,.97363,.88776,.8641,1.02096,.79795,.85132,.914,1.06085,1.1406,.8007,.89858,.83693,1.14889,1.09398,.97489,.92094,.97489,.90399,.84041,.95923,1.00135,1,1.06467,.98243,.90996,.99361,1.1085,1.56942,1.1085,1.2107,.74627,.94282,.96752,1.01519,.86304,1.01359,.97278,1.15103,1.01359,.98561,1.02285,1.02285,1.00527,1.02285,1.0302,.99041,1.0008,1.01519,1.01359,1.02258,.79104,1.16862,.99041,.97454,1.02511,.99298,.96752,.95801,.94856,1.16579,.94856,1.2107,.9824,1.03424,1.03424,1,1.03424,1.16579,.8727,1.3871,1.18622,1.10818,1.04478,1.2107,1.18622,.75155,.94994,1.28826,1.21408,1.21408,.91056,1,.91572,.9754,.64663,1.18328,1.24866,1.04478,1.14169,1.15749,1.17389,.71703,.97363,.97363,.97363,.97363,.97363,.97363,.93506,.8641,.79795,.79795,.79795,.79795,1.1406,1.1406,1.1406,1.1406,1.02096,1.09398,.97426,.97426,.97426,.97426,.97426,1.2107,.97489,1.00135,1.00135,1.00135,1.00135,.90996,.92094,1.02798,.96752,.96752,.96752,.96752,.96752,.96752,.93136,.86304,.97278,.97278,.97278,.97278,1.02285,1.02285,1.02285,1.02285,.97122,.99041,1,1,1,1,1,1.28826,1.0008,.99041,.99041,.99041,.99041,.96752,1.01519,.96752,.97363,.96752,.97363,.96752,.97363,.96752,.8641,.86304,.8641,.86304,.8641,.86304,.8641,.86304,1.02096,1.03057,1.02096,1.03517,.79795,.97278,.79795,.97278,.79795,.97278,.79795,.97278,.79795,.97278,.914,1.01359,.914,1.01359,.914,1.01359,1,1,1.06085,.98561,1.06085,1.00879,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,.97138,1.08692,.8007,1.02285,1,1,1.00527,.83693,1.02285,1,1,.83693,.9455,.83693,.90418,.83693,1.13005,1.09398,.99041,1,1,1.09398,.99041,.96692,1.09251,.99041,.97489,1.0008,.97489,1.0008,.97489,1.0008,.93994,.97931,.90399,1.02258,1,1,.90399,1.02258,.84041,.79104,.84041,.79104,.84041,.79104,.84041,.79104,1,1,.95923,1.07034,.95923,1.16862,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.06467,1.02511,.90996,.96752,.90996,.99361,.95801,.99361,.95801,.99361,.95801,1.07733,1.03424,.97363,.96752,.93506,.93136,.97489,1.0008,1,1,.95923,1.16862,1.15103,1.15103,1.01173,1.03959,.75953,.81378,.79912,1.15103,1.21994,.95161,.87815,1.01149,.81525,.7676,.98167,1.01134,1.02546,.84097,1.03089,1.18102,.97363,.88776,.85134,.97826,.79795,.99361,1.06085,.97489,1.1406,.89858,1.0388,1.14889,1.09398,.86039,.97489,1.0595,.92094,.94793,.95923,.90996,.99346,.98243,1.02112,.95493,1.1406,.90996,1.03574,1.02597,1.0008,1.18102,1.06628,1.03574,1.0192,1.01932,1.00886,.97531,1.0106,1.0008,1.13189,1.18102,1.02277,.98683,1.0016,.99561,1.07237,1.0008,.90434,.99921,.93803,.8965,1.23085,1.06628,1.04983,.96268,1.0499,.98439,1.18102,1.06628,1.0008,1.06628,.98439,.79795,1,1,1,1,1,1,1,1,1,1,1,1,1.09466,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.97278,1,1,1,1,1,1,1,1,1,1,1,1,1.02065,1,1,1,1,1,1,1.06467,1.02511,1.06467,1.02511,1.06467,1.02511,.90996,.96752,1,1.21408,.89903,1,1,.75155,1.04394,1.04394,1.04394,1.04394,.98633,.98633,.98633,.73047,.73047,1.20642,.91211,1.25635,1.222,1.02956,1.03372,1.03372,.96039,1.24633,1,1.12454,.93503,1.03424,1.19687,1.03424,1,1,1,.771,1,1,1.15749,1.15749,1.15749,1.10948,.86279,.94434,.86279,.94434,.86182,1,1,1.16897,1,.96085,.90137,1.2107,1.18416,1.13973,.69825,.9716,2.10339,1.29004,1.29004,1.21172,1.29004,1.29004,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18874,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.09193,1.09193,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],Ys={lineHeight:1.33008,lineGap:0},Js=[1.76738,1,1,.98946,1.03959,1.04016,1.02809,1.036,.97639,1.10953,1.23203,1.11144,1.11144,1.16939,1.21237,.9754,1.21261,.9754,1.59754,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,.81378,.81378,1.21237,1.21237,1.21237,.73541,.97847,.97363,.89723,.87897,1.0426,.79429,.85292,.91149,1.05815,1.1406,.79631,.90128,.83853,1.04396,1.10615,.97552,.94436,.97552,.88641,.80527,.96083,1.00135,1,1.06777,.9817,.91142,.99361,1.11144,1.57293,1.11144,1.21237,.74627,1.31818,1.06585,.97042,.83055,.97042,.93503,1.1261,.97042,.97922,1.14236,.94552,1.01054,1.14236,1.02471,.97922,.94165,.97042,.97042,1.0276,.78929,1.1261,.97922,.95874,1.02197,.98507,.96752,.97168,.95107,1.16579,.95107,1.21237,1.03959,1.036,1.036,1,1.036,1.16579,.87357,1.31818,1.18754,1.26781,1.05356,1.21237,1.18622,.79487,.94994,1.29004,1.24047,1.24047,1.31818,1,.91484,.9754,1.31818,1.1349,1.24866,1.05356,1.13934,1.15574,1.17389,.73541,.97363,.97363,.97363,.97363,.97363,.97363,.94385,.87897,.79429,.79429,.79429,.79429,1.1406,1.1406,1.1406,1.1406,1.0426,1.10615,.97552,.97552,.97552,.97552,.97552,1.21237,.97552,1.00135,1.00135,1.00135,1.00135,.91142,.94436,.98721,1.06585,1.06585,1.06585,1.06585,1.06585,1.06585,.96705,.83055,.93503,.93503,.93503,.93503,1.14236,1.14236,1.14236,1.14236,.93125,.97922,.94165,.94165,.94165,.94165,.94165,1.29004,.94165,.97922,.97922,.97922,.97922,.96752,.97042,.96752,.97363,1.06585,.97363,1.06585,.97363,1.06585,.87897,.83055,.87897,.83055,.87897,.83055,.87897,.83055,1.0426,1.0033,1.0426,.97042,.79429,.93503,.79429,.93503,.79429,.93503,.79429,.93503,.79429,.93503,.91149,.97042,.91149,.97042,.91149,.97042,1,1,1.05815,.97922,1.05815,.97922,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,.97441,1.04302,.79631,1.01582,1,1,1.01054,.83853,1.14236,1,1,.83853,1.09125,.83853,.90418,.83853,1.19508,1.10615,.97922,1,1,1.10615,.97922,1.01034,1.10466,.97922,.97552,.94165,.97552,.94165,.97552,.94165,.91602,.91981,.88641,1.0276,1,1,.88641,1.0276,.80527,.78929,.80527,.78929,.80527,.78929,.80527,.78929,1,1,.96083,1.05403,.95923,1.16862,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.06777,1.02197,.91142,.96752,.91142,.99361,.97168,.99361,.97168,.99361,.97168,1.23199,1.036,.97363,1.06585,.94385,.96705,.97552,.94165,1,1,.96083,1.1261,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,.95161,1.27126,1.00811,.83284,.77702,.99137,.95253,1.0347,.86142,1.07205,1.14236,.97363,.89723,.86869,1.09818,.79429,.99361,1.05815,.97552,1.1406,.90128,1.06662,1.04396,1.10615,.84918,.97552,1.04694,.94436,.98015,.96083,.91142,1.00356,.9817,1.01945,.98999,1.1406,.91142,1.04961,.9898,1.00639,1.14236,1.07514,1.04961,.99607,1.02897,1.008,.9898,.95134,1.00639,1.11121,1.14236,1.00518,.97981,1.02186,1,1.08578,.94165,.99314,.98387,.93028,.93377,1.35125,1.07514,1.10687,.93491,1.04232,1.00351,1.14236,1.07514,.94165,1.07514,1.00351,.79429,1,1,1,1,1,1,1,1,1,1,1,1,1.09097,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.93503,1,1,1,1,1,1,1,1,1,1,1,1,.96609,1,1,1,1,1,1,1.06777,1.02197,1.06777,1.02197,1.06777,1.02197,.91142,.96752,1,1.21261,.89903,1,1,.75155,1.04745,1.04745,1.04745,1.04394,.98633,.98633,.98633,.72959,.72959,1.20502,.91406,1.26514,1.222,1.02956,1.03372,1.03372,.96039,1.24633,1,1.09125,.93327,1.03336,1.16541,1.036,1,1,1,.771,1,1,1.15574,1.15574,1.15574,1.15574,.86364,.94434,.86279,.94434,.86224,1,1,1.16798,1,.96085,.90068,1.21237,1.18416,1.13904,.69825,.9716,2.10339,1.29004,1.29004,1.21339,1.29004,1.29004,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18775,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.13269,1.13269,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],Qs={lineHeight:1.33008,lineGap:0},Zs=[1.76738,1,1,.98946,1.14763,1.05365,1.06234,.96927,.92586,1.15373,1.18414,.91349,.91349,1.07403,1.17308,.78383,1.20088,.78383,1.42531,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.78383,.78383,1.17308,1.17308,1.17308,.77349,.94565,.94729,.85944,.88506,.9858,.74817,.80016,.88449,.98039,.95782,.69238,.89898,.83231,.98183,1.03989,.96924,.86237,.96924,.80595,.74524,.86091,.95402,.94143,.98448,.8858,.83089,.93285,1.0949,1.39016,1.0949,1.45994,.74627,1.04839,.97454,.97454,.87207,.97454,.87533,1.06151,.97454,1.00176,1.16484,1.08132,.98047,1.16484,1.02989,1.01054,.96225,.97454,.97454,1.06598,.79004,1.16344,1.00351,.94629,.9973,.91016,.96777,.9043,.91082,.92481,.91082,1.17308,.95748,.96927,.96927,1,.96927,.92481,.80597,1.04839,1.23393,1.1781,.9245,1.17308,1.20808,.63218,.94261,1.24822,1.09971,1.09971,1.04839,1,.85273,.78032,1.04839,1.09971,1.22326,.9245,1.09836,1.13525,1.15222,.70424,.94729,.94729,.94729,.94729,.94729,.94729,.85498,.88506,.74817,.74817,.74817,.74817,.95782,.95782,.95782,.95782,.9858,1.03989,.96924,.96924,.96924,.96924,.96924,1.17308,.96924,.95402,.95402,.95402,.95402,.83089,.86237,.88409,.97454,.97454,.97454,.97454,.97454,.97454,.92916,.87207,.87533,.87533,.87533,.87533,.93146,.93146,.93146,.93146,.93854,1.01054,.96225,.96225,.96225,.96225,.96225,1.24822,.8761,1.00351,1.00351,1.00351,1.00351,.96777,.97454,.96777,.94729,.97454,.94729,.97454,.94729,.97454,.88506,.87207,.88506,.87207,.88506,.87207,.88506,.87207,.9858,.95391,.9858,.97454,.74817,.87533,.74817,.87533,.74817,.87533,.74817,.87533,.74817,.87533,.88449,.97454,.88449,.97454,.88449,.97454,1,1,.98039,1.00176,.98039,1.00176,.95782,.93146,.95782,.93146,.95782,.93146,.95782,1.16484,.95782,.93146,.84421,1.12761,.69238,1.08132,1,1,.98047,.83231,1.16484,1,1,.84723,1.04861,.84723,.78755,.83231,1.23736,1.03989,1.01054,1,1,1.03989,1.01054,.9857,1.03849,1.01054,.96924,.96225,.96924,.96225,.96924,.96225,.92383,.90171,.80595,1.06598,1,1,.80595,1.06598,.74524,.79004,.74524,.79004,.74524,.79004,.74524,.79004,1,1,.86091,1.02759,.85771,1.16344,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.98448,.9973,.83089,.96777,.83089,.93285,.9043,.93285,.9043,.93285,.9043,1.31868,.96927,.94729,.97454,.85498,.92916,.96924,.8761,1,1,.86091,1.16344,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,.81965,.81965,.94729,.78032,.71022,.90883,.84171,.99877,.77596,1.05734,1.2,.94729,.85944,.82791,.9607,.74817,.93285,.98039,.96924,.95782,.89898,.98316,.98183,1.03989,.78614,.96924,.97642,.86237,.86075,.86091,.83089,.90082,.8858,.97296,1.01284,.95782,.83089,1.0976,1.04,1.03342,1.2,1.0675,1.0976,.98205,1.03809,1.05097,1.04,.95364,1.03342,1.05401,1.2,1.02148,1.0119,1.04724,1.0127,1.02732,.96225,.8965,.97783,.93574,.94818,1.30679,1.0675,1.11826,.99821,1.0557,1.0326,1.2,1.0675,.96225,1.0675,1.0326,.74817,1,1,1,1,1,1,1,1,1,1,1,1,1.03754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.87533,1,1,1,1,1,1,1,1,1,1,1,1,.98705,1,1,1,1,1,1,.98448,.9973,.98448,.9973,.98448,.9973,.83089,.96777,1,1.20088,.89903,1,1,.75155,.94945,.94945,.94945,.94945,1.12317,1.12317,1.12317,.67603,.67603,1.15621,.73584,1.21191,1.22135,1.06483,.94868,.94868,.95996,1.24633,1,1.07497,.87709,.96927,1.01473,.96927,1,1,1,.77295,1,1,1.09836,1.09836,1.09836,1.01522,.86321,.94434,.8649,.94434,.86182,1,1,1.083,1,.91578,.86438,1.17308,1.18416,1.14589,.69825,.97622,1.96791,1.24822,1.24822,1.17308,1.24822,1.24822,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.17984,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.10742,1.10742,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],er={lineHeight:1.33008,lineGap:0},tr=[1.76738,1,1,.98594,1.02285,1.10454,1.06234,.96927,.92037,1.19985,1.2046,.90616,.90616,1.07152,1.1714,.78032,1.20088,.78032,1.40246,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.78032,.78032,1.1714,1.1714,1.1714,.80597,.94084,.96706,.85944,.85734,.97093,.75842,.79936,.88198,.9831,.95782,.71387,.86969,.84636,1.07796,1.03584,.96924,.83968,.96924,.82826,.79649,.85771,.95132,.93119,.98965,.88433,.8287,.93365,1.08612,1.3638,1.08612,1.45786,.74627,.80499,.91484,1.05707,.92383,1.05882,.9403,1.12654,1.05882,1.01756,1.09011,1.09011,.99414,1.09011,1.034,1.01756,1.05356,1.05707,1.05882,1.04399,.84863,1.21968,1.01756,.95801,1.00068,.91797,.96777,.9043,.90351,.92105,.90351,1.1714,.85337,.96927,.96927,.99912,.96927,.92105,.80597,1.2434,1.20808,1.05937,.90957,1.1714,1.20808,.75155,.94261,1.24644,1.09971,1.09971,.84751,1,.85273,.78032,.61584,1.05425,1.17914,.90957,1.08665,1.11593,1.14169,.73381,.96706,.96706,.96706,.96706,.96706,.96706,.86035,.85734,.75842,.75842,.75842,.75842,.95782,.95782,.95782,.95782,.97093,1.03584,.96924,.96924,.96924,.96924,.96924,1.1714,.96924,.95132,.95132,.95132,.95132,.8287,.83968,.89049,.91484,.91484,.91484,.91484,.91484,.91484,.93575,.92383,.9403,.9403,.9403,.9403,.8717,.8717,.8717,.8717,1.00527,1.01756,1.05356,1.05356,1.05356,1.05356,1.05356,1.24644,.95923,1.01756,1.01756,1.01756,1.01756,.96777,1.05707,.96777,.96706,.91484,.96706,.91484,.96706,.91484,.85734,.92383,.85734,.92383,.85734,.92383,.85734,.92383,.97093,1.0969,.97093,1.05882,.75842,.9403,.75842,.9403,.75842,.9403,.75842,.9403,.75842,.9403,.88198,1.05882,.88198,1.05882,.88198,1.05882,1,1,.9831,1.01756,.9831,1.01756,.95782,.8717,.95782,.8717,.95782,.8717,.95782,1.09011,.95782,.8717,.84784,1.11551,.71387,1.09011,1,1,.99414,.84636,1.09011,1,1,.84636,1.0536,.84636,.94298,.84636,1.23297,1.03584,1.01756,1,1,1.03584,1.01756,1.00323,1.03444,1.01756,.96924,1.05356,.96924,1.05356,.96924,1.05356,.93066,.98293,.82826,1.04399,1,1,.82826,1.04399,.79649,.84863,.79649,.84863,.79649,.84863,.79649,.84863,1,1,.85771,1.17318,.85771,1.21968,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.98965,1.00068,.8287,.96777,.8287,.93365,.9043,.93365,.9043,.93365,.9043,1.08571,.96927,.96706,.91484,.86035,.93575,.96924,.95923,1,1,.85771,1.21968,1.11437,1.11437,.93109,.91202,.60411,.84164,.55572,1.01173,.97361,.81818,.81818,.96635,.78032,.72727,.92366,.98601,1.03405,.77968,1.09799,1.2,.96706,.85944,.85638,.96491,.75842,.93365,.9831,.96924,.95782,.86969,.94152,1.07796,1.03584,.78437,.96924,.98715,.83968,.83491,.85771,.8287,.94492,.88433,.9287,1.0098,.95782,.8287,1.0625,.98248,1.03424,1.2,1.01071,1.0625,.95246,1.03809,1.04912,.98248,1.00221,1.03424,1.05443,1.2,1.04785,.99609,1.00169,1.05176,.99346,1.05356,.9087,1.03004,.95542,.93117,1.23362,1.01071,1.07831,1.02512,1.05205,1.03502,1.2,1.01071,1.05356,1.01071,1.03502,.75842,1,1,1,1,1,1,1,1,1,1,1,1,1.03719,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.9403,1,1,1,1,1,1,1,1,1,1,1,1,1.04021,1,1,1,1,1,1,.98965,1.00068,.98965,1.00068,.98965,1.00068,.8287,.96777,1,1.20088,.89903,1,1,.75155,1.03077,1.03077,1.03077,1.03077,1.13196,1.13196,1.13196,.67428,.67428,1.16039,.73291,1.20996,1.22135,1.06483,.94868,.94868,.95996,1.24633,1,1.07497,.87796,.96927,1.01518,.96927,1,1,1,.77295,1,1,1.10539,1.10539,1.11358,1.06967,.86279,.94434,.86279,.94434,.86182,1,1,1.083,1,.91578,.86507,1.1714,1.18416,1.14589,.69825,.97622,1.9697,1.24822,1.24822,1.17238,1.24822,1.24822,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18083,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.10938,1.10938,1,1,1,1.05425,1.09971,1.09971,1.09971,1,1,1,1,1,1,1,1,1,1,1],ar={lineHeight:1.33008,lineGap:0},nr=getLookupTableFactory(function(e){e["MyriadPro-Regular"]=e["PdfJS-Fallback-Regular"]={name:"LiberationSans-Regular",factors:Gs,baseWidths:Es,baseMapping:_s,metrics:Vs};e["MyriadPro-Bold"]=e["PdfJS-Fallback-Bold"]={name:"LiberationSans-Bold",factors:zs,baseWidths:Os,baseMapping:Bs,metrics:Ls};e["MyriadPro-It"]=e["MyriadPro-Italic"]=e["PdfJS-Fallback-Italic"]={name:"LiberationSans-Italic",factors:Xs,baseWidths:Ms,baseMapping:Ns,metrics:Ks};e["MyriadPro-BoldIt"]=e["MyriadPro-BoldItalic"]=e["PdfJS-Fallback-BoldItalic"]={name:"LiberationSans-BoldItalic",factors:Us,baseWidths:Ds,baseMapping:Hs,metrics:Ws};e.ArialMT=e.Arial=e["Arial-Regular"]={name:"LiberationSans-Regular",baseWidths:Es,baseMapping:_s};e["Arial-BoldMT"]=e["Arial-Bold"]={name:"LiberationSans-Bold",baseWidths:Os,baseMapping:Bs};e["Arial-ItalicMT"]=e["Arial-Italic"]={name:"LiberationSans-Italic",baseWidths:Ms,baseMapping:Ns};e["Arial-BoldItalicMT"]=e["Arial-BoldItalic"]={name:"LiberationSans-BoldItalic",baseWidths:Ds,baseMapping:Hs};e["Calibri-Regular"]={name:"LiberationSans-Regular",factors:qs,baseWidths:Es,baseMapping:_s,metrics:vs};e["Calibri-Bold"]={name:"LiberationSans-Bold",factors:gs,baseWidths:Os,baseMapping:Bs,metrics:bs};e["Calibri-Italic"]={name:"LiberationSans-Italic",factors:ks,baseWidths:Ms,baseMapping:Ns,metrics:ys};e["Calibri-BoldItalic"]={name:"LiberationSans-BoldItalic",factors:ws,baseWidths:Ds,baseMapping:Hs,metrics:js};e["Segoeui-Regular"]={name:"LiberationSans-Regular",factors:tr,baseWidths:Es,baseMapping:_s,metrics:ar};e["Segoeui-Bold"]={name:"LiberationSans-Bold",factors:$s,baseWidths:Os,baseMapping:Bs,metrics:Ys};e["Segoeui-Italic"]={name:"LiberationSans-Italic",factors:Zs,baseWidths:Ms,baseMapping:Ns,metrics:er};e["Segoeui-BoldItalic"]={name:"LiberationSans-BoldItalic",factors:Js,baseWidths:Ds,baseMapping:Hs,metrics:Qs};e["Helvetica-Regular"]=e.Helvetica={name:"LiberationSans-Regular",factors:Ts,baseWidths:Es,baseMapping:_s,metrics:Rs};e["Helvetica-Bold"]={name:"LiberationSans-Bold",factors:Ss,baseWidths:Os,baseMapping:Bs,metrics:As};e["Helvetica-Italic"]={name:"LiberationSans-Italic",factors:Is,baseWidths:Ms,baseMapping:Ns,metrics:Fs};e["Helvetica-BoldItalic"]={name:"LiberationSans-BoldItalic",factors:xs,baseWidths:Ds,baseMapping:Hs,metrics:Cs}});function getXfaFontName(e){const t=normalizeFontName(e);return nr()[t]}function getXfaFontDict(e){const t=function getXfaFontWidths(e){const t=getXfaFontName(e);if(!t)return null;const{baseWidths:a,baseMapping:n,factors:s}=t,r=s?a.map((e,t)=>e*s[t]):a;let i,o=-2;const l=[];for(const[e,t]of n.map((e,t)=>[e,t]).sort(([e],[t])=>e-t))if(-1!==e)if(e===o+1){i.push(r[t]);o+=1}else{o=e;i=[r[t]];l.push(e,i)}return l}(e),a=new Dict(null);a.set("BaseFont",Name.get(e));a.set("Type",Name.get("Font"));a.set("Subtype",Name.get("CIDFontType2"));a.set("Encoding",Name.get("Identity-H"));a.set("CIDToGIDMap",Name.get("Identity"));a.set("W",t);a.set("FirstChar",t[0]);a.set("LastChar",t.at(-2)+t.at(-1).length-1);const n=new Dict(null);a.set("FontDescriptor",n);const s=new Dict(null);s.set("Ordering","Identity");s.set("Registry","Adobe");s.set("Supplement",0);a.set("CIDSystemInfo",s);return a}const sr={number:0,lbrace:1,rbrace:2,true:3,false:4,add:5,sub:6,mul:7,div:8,idiv:9,mod:10,exp:11,eq:12,ne:13,gt:14,ge:15,lt:16,le:17,and:18,or:19,xor:20,bitshift:21,abs:22,neg:23,ceiling:24,floor:25,round:26,truncate:27,not:28,sqrt:29,sin:30,cos:31,ln:32,log:33,atan:34,cvi:35,cvr:36,dup:37,exch:38,pop:39,copy:40,index:41,roll:42,if:43,ifelse:44,eof:45,min:46,max:47};class Token{constructor(e,t=null){this.id=e;this.value=t}}class lexer_Lexer{static#Ae=null;static#xe=null;static#Ce(){const e=Object.create(null),t=Object.create(null);for(const[a,n]of Object.entries(sr)){if("number"===a)continue;const s=n>=sr.true&&n<=sr.ifelse,r=new Token(n,s?a:null);e[a]=r;s&&(t[a]=r)}this.#Ae=e;this.#xe=t}constructor(e){lexer_Lexer.#Ae||lexer_Lexer.#Ce();this.data=e;this.pos=0;this.len=e.length;this._numberPattern=/[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?/iy;this._identifierPattern=/[a-z]+/y}_skipComment(){const e=this.data.indexOf("\n",this.pos),t=this.data.indexOf("\r",this.pos),a=Math.min(e<0?this.len:e,t<0?this.len:t);this.pos=Math.min(a+1,this.len)}_getNumber(){this._numberPattern.lastIndex=this.pos;const e=this._numberPattern.exec(this.data);if(!e)return new Token(sr.number,0);const t=parseFloat(e[0]);if(!Number.isFinite(t))return new Token(sr.number,0);this.pos=this._numberPattern.lastIndex;return new Token(sr.number,t)}_getOperator(){this._identifierPattern.lastIndex=this.pos;const e=this._identifierPattern.exec(this.data);if(!e)return new Token(sr.number,0);this.pos=this._identifierPattern.lastIndex;const t=e[0];return lexer_Lexer.#xe[t]??new Token(sr.number,0)}next(){for(;this.pos<this.len;){const e=this.data.charCodeAt(this.pos++);switch(e){case 0:case 9:case 10:case 12:case 13:case 32:break;case 37:this._skipComment();break;case 123:return lexer_Lexer.#Ae.lbrace;case 125:return lexer_Lexer.#Ae.rbrace;case 43:case 45:case 46:this.pos--;return this._getNumber();default:if(e>=48&&e<=57){this.pos--;return this._getNumber()}if(e>=97&&e<=122){this.pos--;return this._getOperator()}return new Token(sr.number,0)}}return lexer_Lexer.#Ae.eof}}const rr=0,ir=1,or=2,lr=0,fr=1,cr=2,hr=3,ur=4,mr=5,pr=6,dr=7,gr=8,br=9,wr=10;class PsNode{constructor(e){this.type=e}}class PsProgram extends PsNode{constructor(e){super(lr);this.body=e}}class PsBlock extends PsNode{constructor(e){super(fr);this.instructions=e}}class PsNumber extends PsNode{constructor(e){super(cr);this.value=e}}class PsOperator extends PsNode{constructor(e){super(hr);this.op=e}}class PsIf extends PsNode{constructor(e){super(ur);this.then=e}}class PsIfElse extends PsNode{constructor(e,t){super(mr);this.then=e;this.otherwise=t}}class PsArgNode extends PsNode{constructor(e){super(pr);this.index=e;this.valueType=rr}}class PsConstNode extends PsNode{constructor(e){super(dr);this.value=e;this.valueType="boolean"==typeof e?ir:rr}}class PsUnaryNode extends PsNode{constructor(e,t,a=or){super(gr);this.op=e;this.operand=t;this.valueType=a}}class PsBinaryNode extends PsNode{constructor(e,t,a,n=or){super(br);this.op=e;this.first=t;this.second=a;this.valueType=n}}class PsTernaryNode extends PsNode{constructor(e,t,a,n=or){super(wr);this.cond=e;this.then=t;this.otherwise=a;this.valueType=n}}class ast_Parser{constructor(e){this.lexer=e;this._token=null}static _isRegularOperator(e){return e>=sr.true&&e<sr.if}_advance(){this._token=this.lexer.next()}_expect(e){if(this._token.id!==e)throw new FormatError(`PostScript function: expected token id ${e}, got ${this._token.id}.`);const t=this._token;this._advance();return t}parse(){this._advance();this._expect(sr.lbrace);const e=this._parseBlock();this._expect(sr.rbrace);this._token.id!==sr.eof&&warn("PostScript function: unexpected content after closing brace.");return new PsProgram(e)}_parseBlock(){const e=[];for(;;){const t=this._token;switch(t.id){case sr.number:e.push(new PsNumber(t.value));this._advance();break;case sr.lbrace:{this._advance();const t=this._parseBlock();this._expect(sr.rbrace);if(this._token.id===sr.if){this._advance();e.push(new PsIf(t))}else{if(this._token.id!==sr.lbrace)throw new FormatError("PostScript function: a procedure block must be followed by 'if' or '{…} ifelse'.");{this._advance();const a=this._parseBlock();this._expect(sr.rbrace);this._expect(sr.ifelse);e.push(new PsIfElse(t,a))}}break}case sr.rbrace:case sr.eof:return new PsBlock(e);case sr.if:case sr.ifelse:throw new FormatError(`PostScript function: unexpected '${t.value}' operator.`);default:if(ast_Parser._isRegularOperator(t.id)){e.push(new PsOperator(t.id));this._advance();break}throw new FormatError(`PostScript function: unexpected token id ${t.id}.`)}}}}function parsePostScriptFunction(e){return new ast_Parser(new lexer_Lexer(e)).parse()}function _nodesEqual(e,t){if(e===t)return!0;if(e.type!==t.type)return!1;switch(e.type){case pr:return e.index===t.index;case dr:return e.value===t.value;case gr:return e.op===t.op&&_nodesEqual(e.operand,t.operand);case br:return e.op===t.op&&_nodesEqual(e.first,t.first)&&_nodesEqual(e.second,t.second);case wr:return _nodesEqual(e.cond,t.cond)&&_nodesEqual(e.then,t.then)&&_nodesEqual(e.otherwise,t.otherwise);default:return!1}}const jr=100;class PSStackToTree{static#Ie=null;static#Fe=null;static#Te=null;static#Re=null;static#Oe(){this.#Ie=new Set([sr.add,sr.sub,sr.mul,sr.div,sr.idiv,sr.mod,sr.exp,sr.atan,sr.eq,sr.ne,sr.gt,sr.ge,sr.lt,sr.le,sr.and,sr.or,sr.xor,sr.bitshift]);this.#Fe=new Set([sr.abs,sr.neg,sr.ceiling,sr.floor,sr.round,sr.truncate,sr.sqrt,sr.sin,sr.cos,sr.ln,sr.log,sr.cvi,sr.cvr,sr.not]);this.#Te=new Set([sr.abs,sr.ceiling,sr.cvi,sr.cvr,sr.floor,sr.round,sr.truncate]);this.#Re=new Map([[sr.eq,sr.ne],[sr.ne,sr.eq],[sr.lt,sr.ge],[sr.le,sr.gt],[sr.gt,sr.le],[sr.ge,sr.lt]])}evaluate(e,t){PSStackToTree.#Ie||PSStackToTree.#Oe();this._failed=!1;if(t>jr)return null;const a=[];for(let e=0;e<t;e++)a.push(new PsArgNode(e));this._evalBlock(e.body,a);if(this._failed)return null;PSStackToTree.#Be(a);return a}static#Be(e){const t=new Map,visit=e=>{if(!e||e.type===pr||e.type===dr)return;const a=t.get(e)??0;t.set(e,a+1);if(!(a>0))switch(e.type){case gr:visit(e.operand);break;case br:visit(e.first);visit(e.second);break;case wr:visit(e.cond);visit(e.then);visit(e.otherwise)}};for(const t of e)visit(t);for(const[e,a]of t)if(a>1){e.shared=!0;e.sharedCount=a}}_evalBlock(e,t){this._evalBlockFrom(e.instructions,0,t)}_evalBlockFrom(e,t,a){for(let n=t;n<e.length&&!this._failed;n++){const t=e[n];switch(t.type){case cr:a.push(new PsConstNode(t.value));a.length>jr&&(this._failed=!0);break;case hr:this._evalOp(t.op,a);break;case ur:{if(a.length<1){this._failed=!0;break}const s=a.pop(),r=a.slice();this._evalBlock(t.then,a);if(this._failed)break;if(a.length===r.length)for(let e=0;e<a.length;e++)a[e]!==r[e]&&(a[e]=this._makeTernary(s,a[e],r[e]));else{if(a.length>r.length){if(s.type===dr){if(!s.value){a.length=0;a.push(...r)}break}const t=a.slice();this._evalBlockFrom(e,n+1,t);if(this._failed)break;const i=r;this._evalBlockFrom(e,n+1,i);if(this._failed)break;if(t.length!==i.length){const e=new PsConstNode(0);for(;t.length<i.length;)t.push(e);for(;i.length<t.length;)i.push(e)}a.length=0;for(let e=0;e<t.length;e++)a.push(this._makeTernary(s,t[e],i[e]));return}this._failed=!0}break}case mr:{if(a.length<1){this._failed=!0;break}const e=a.pop(),n=a.slice(),s=n.slice();this._evalBlock(t.then,s);if(this._failed)break;const r=n.slice();this._evalBlock(t.otherwise,r);if(this._failed)break;if(s.length!==r.length){const e=new PsConstNode(0);for(;s.length<r.length;)s.push(e);for(;r.length<s.length;)r.push(e)}a.length=0;for(let t=0;t<s.length;t++)a.push(this._makeTernary(e,s[t],r[t]));break}}}}_evalOp(e,t){if(PSStackToTree.#Ie.has(e)){if(t.length<2){this._failed=!0;return}const a=t.pop(),n=t.pop();t.push(this._makeBinary(e,a,n));return}if(PSStackToTree.#Fe.has(e)){if(t.length<1){this._failed=!0;return}t.push(this._makeUnary(e,t.pop()))}else switch(e){case sr.true:t.push(new PsConstNode(!0));t.length>jr&&(this._failed=!0);break;case sr.false:t.push(new PsConstNode(!1));t.length>jr&&(this._failed=!0);break;case sr.dup:if(t.length<1){this._failed=!0;break}t.push(t.at(-1));t.length>jr&&(this._failed=!0);break;case sr.exch:{if(t.length<2){this._failed=!0;break}const e=t.pop(),a=t.pop();t.push(e,a);break}case sr.pop:if(t.length<1){this._failed=!0;break}t.pop();break;case sr.copy:{if(t.length<1){this._failed=!0;break}const e=t.pop();if(e.type===dr){const a=0|e.value;if(0===a);else if(a<0||a>t.length)this._failed=!0;else{t.push(...t.slice(-a));t.length>jr&&(this._failed=!0)}}else this._failed=!0;break}case sr.index:{if(t.length<1){this._failed=!0;break}const e=t.pop();if(e.type===dr){const a=0|e.value;a<0||a>=t.length?this._failed=!0:t.push(t.at(-a-1))}else this._failed=!0;break}case sr.roll:{if(t.length<2){this._failed=!0;break}const e=t.pop(),a=t.pop();if(a.type===dr&&e.type===dr){const n=0|a.value;if(0===n);else if(n<0||n>t.length)this._failed=!0;else{const a=((0|e.value)%n+n)%n;if(a>0){const e=t.splice(-n,n);t.push(...e.slice(n-a),...e.slice(0,n-a))}}}else this._failed=!0;break}default:this._failed=!0}}_makeBinary(e,t,a){if(t.type===dr&&a.type===dr){const n=function _evalBinaryConst(e,t,a){switch(e){case sr.add:return t+a;case sr.sub:return t-a;case sr.mul:return t*a;case sr.div:return 0!==a?t/a:0;case sr.idiv:return 0!==a?Math.trunc(t/a):0;case sr.mod:return 0!==a?t-Math.trunc(t/a)*a:0;case sr.exp:{const e=t**a;return Number.isFinite(e)?e:void 0}case sr.atan:{let e=Math.atan2(t,a)*(180/Math.PI);e<0&&(e+=360);return e}case sr.eq:return t===a;case sr.ne:return t!==a;case sr.gt:return t>a;case sr.ge:return t>=a;case sr.lt:return t<a;case sr.le:return t<=a;case sr.and:return"boolean"==typeof t?t&&a:t&a|0;case sr.or:return"boolean"==typeof t?t||a:t|a|0;case sr.xor:return"boolean"==typeof t?t!==a:t^a|0;case sr.bitshift:return a>=0?t<<a|0:t>>-a|0;case sr.min:return Math.min(t,a);case sr.max:return Math.max(t,a);default:return}}(e,a.value,t.value);if(void 0!==n)return new PsConstNode(n)}if(_nodesEqual(t,a))switch(e){case sr.sub:return new PsConstNode(0);case sr.xor:return new PsConstNode(t.valueType!==ir&&0);case sr.and:case sr.or:case sr.min:case sr.max:return t;case sr.eq:case sr.ge:case sr.le:return new PsConstNode(!0);case sr.ne:case sr.gt:case sr.lt:return new PsConstNode(!1)}if(t.type===dr){const n=t.value;switch(e){case sr.add:case sr.sub:if(0===n)return a;break;case sr.mul:if(1===n)return a;if(0===n)return t;if(-1===n)return this._makeUnary(sr.neg,a);break;case sr.div:if(0!==n)return this._makeBinary(sr.mul,new PsConstNode(1/n),a);break;case sr.idiv:if(1===n)return a;break;case sr.exp:if(1===n)return a;if(-1===n)return this._makeBinary(sr.div,a,new PsConstNode(1));if(.5===n)return this._makeUnary(sr.sqrt,a);if(.25===n){const e=this._makeUnary(sr.sqrt,a);return this._makeUnary(sr.sqrt,e)}if(2===n)return this._makeBinary(sr.mul,a,a);if(3===n)return this._makeBinary(sr.mul,this._makeBinary(sr.mul,a,a),a);if(4===n){const e=this._makeBinary(sr.mul,a,a);return this._makeBinary(sr.mul,e,e)}if(0===n)return new PsConstNode(1);break;case sr.and:if(!0===n)return a;if(!1===n)return t;break;case sr.or:if(!1===n)return a;if(!0===n)return t;break;case sr.min:if(a.type===br&&a.op===sr.max&&a.first.type===dr&&a.first.value>=n)return t;break;case sr.max:if(a.type===br&&a.op===sr.min&&a.first.type===dr&&a.first.value<=n)return t}}if(a.type===dr){const n=a.value;switch(e){case sr.add:if(0===n)return t;break;case sr.sub:if(0===n)return this._makeUnary(sr.neg,t);break;case sr.mul:if(1===n)return t;if(0===n)return a;if(-1===n)return this._makeUnary(sr.neg,t);break;case sr.and:if(!0===n)return t;if(!1===n)return a;break;case sr.or:if(!1===n)return t;if(!0===n)return a}}return new PsBinaryNode(e,t,a,function _binaryValueType(e,t,a){switch(e){case sr.eq:case sr.ne:case sr.gt:case sr.ge:case sr.lt:case sr.le:return ir;case sr.and:case sr.or:case sr.xor:return t===a&&t!==or?t:or;default:return rr}}(e,t.valueType,a.valueType))}_makeUnary(e,t){if(t.type===dr){const a=function _evalUnaryConst(e,t){switch(e){case sr.abs:return Math.abs(t);case sr.neg:return-t;case sr.ceiling:return Math.ceil(t);case sr.floor:return Math.floor(t);case sr.round:return Math.round(t);case sr.truncate:return Math.trunc(t);case sr.sqrt:{const e=Math.sqrt(t);return Number.isFinite(e)?e:void 0}case sr.sin:return Math.sin(t%360*Math.PI/180);case sr.cos:return Math.cos(t%360*Math.PI/180);case sr.ln:{const e=Math.log(t);return Number.isFinite(e)?e:void 0}case sr.log:{const e=Math.log10(t);return Number.isFinite(e)?e:void 0}case sr.cvi:return Math.trunc(t);case sr.cvr:return t;case sr.not:return"boolean"==typeof t?!t:~t;default:return}}(e,t.value);if(void 0!==a)return new PsConstNode(a)}if(e===sr.not&&t.type===br){const e=PSStackToTree.#Re.get(t.op);if(void 0!==e)return new PsBinaryNode(e,t.first,t.second,ir)}if(e===sr.neg&&t.type===br&&t.op===sr.sub)return this._makeBinary(sr.sub,t.second,t.first);if(t.type===gr){if(e===sr.neg&&t.op===sr.neg||e===sr.not&&t.op===sr.not)return t.operand;if(e===sr.abs&&t.op===sr.neg)return this._makeUnary(sr.abs,t.operand);if(PSStackToTree.#Te.has(e)&&e===t.op)return t}return new PsUnaryNode(e,t,function _unaryValueType(e,t){return e===sr.not?t:rr}(e,t.valueType))}_makeTernary(e,t,a){if(e.type===dr)return e.value?t:a;if(_nodesEqual(t,a))return t;if(t.type===dr&&a.type===dr){if(!0===t.value&&!1===a.value)return e;if(!1===t.value&&!0===a.value)return this._makeUnary(sr.not,e)}if(e.type===br){const{op:n,first:s,second:r}=e;if(n===sr.gt||n===sr.ge){if(_nodesEqual(t,s)&&_nodesEqual(a,r))return this._makeBinary(sr.min,s,r);if(_nodesEqual(t,r)&&_nodesEqual(a,s))return this._makeBinary(sr.max,s,r)}else if(n===sr.lt||n===sr.le){if(_nodesEqual(t,s)&&_nodesEqual(a,r))return this._makeBinary(sr.max,s,r);if(_nodesEqual(t,r)&&_nodesEqual(a,s))return this._makeBinary(sr.min,s,r)}}return new PsTernaryNode(e,t,a,t.valueType===a.valueType?t.valueType:or)}}const kr=0,yr=1,qr=2,vr=3,Sr=4,Ar=5,xr=6,Cr=7,Ir=8,Fr=9,Tr=10,Rr=11,Or=12,Dr=13,Hr=14,Mr=15,Nr=16,Pr=17,Er=18,_r=19,zr=20,Lr=21,Ur=22,Wr=23,Xr=24,Kr=25,Gr=26,Vr=27,$r=28,Yr=29,Jr=30,Qr=31,Zr=32,ei=33,ti=34,ai=35,ni=36,si=37,ri=38,ii=39,oi=40,li=Math.PI/180,fi=180/Math.PI;class PsJsCompiler{static#De=new Float64Array(64);static#He=new Float64Array(64);constructor(e,t){this.nIn=e.length>>1;this.nOut=t.length>>1;this.range=t;this.ir=[];this._tmpMap=new Map;this._nextTmp=0}_compileNode(e){if(e.shared){const t=this._tmpMap.get(e);if(void 0!==t){this.ir.push(oi,t);return!0}if(!this._compileNodeImpl(e))return!1;const a=this._nextTmp++;this._tmpMap.set(e,a);this.ir.push(ii,a);return!0}return this._compileNodeImpl(e)}_compileNodeImpl(e){switch(e.type){case pr:this.ir.push(kr,e.index);return!0;case dr:{const t=e.value;this.ir.push(yr,"boolean"==typeof t?Number(t):t);return!0}case gr:return this._compileUnary(e);case br:return this._compileBinary(e);case wr:return this._compileTernary(e);default:return!1}}_compileUnary(e){const{op:t,operand:a,valueType:n}=e;if(t===sr.cvr)return this._compileNode(a);if(!this._compileNode(a))return!1;switch(t){case sr.abs:this.ir.push(Ar);break;case sr.neg:this.ir.push(xr);break;case sr.ceiling:this.ir.push(Cr);break;case sr.floor:this.ir.push(Ir);break;case sr.round:this.ir.push(Fr);break;case sr.truncate:this.ir.push(Tr);break;case sr.sqrt:this.ir.push(Dr);break;case sr.sin:this.ir.push(Hr);break;case sr.cos:this.ir.push(Mr);break;case sr.ln:this.ir.push(Nr);break;case sr.log:this.ir.push(Pr);break;case sr.cvi:this.ir.push(Er);break;case sr.not:if(n===ir)this.ir.push(Rr);else{if(n!==rr)return!1;this.ir.push(Or)}break;default:return!1}return!0}_compileBinary(e){const{op:t,first:a,second:n}=e;if(t===sr.bitshift){if(a.type!==dr||!Number.isInteger(a.value)||!this._compileNode(n))return!1;this.ir.push(_r,a.value);return!0}if(!this._compileNode(n)||!this._compileNode(a))return!1;switch(t){case sr.add:this.ir.push(zr);break;case sr.sub:this.ir.push(Lr);break;case sr.mul:this.ir.push(Ur);break;case sr.div:this.ir.push(Wr);break;case sr.idiv:this.ir.push(Xr);break;case sr.mod:this.ir.push(Kr);break;case sr.exp:this.ir.push(Gr);break;case sr.eq:this.ir.push(Vr);break;case sr.ne:this.ir.push($r);break;case sr.gt:this.ir.push(Yr);break;case sr.ge:this.ir.push(Jr);break;case sr.lt:this.ir.push(Qr);break;case sr.le:this.ir.push(Zr);break;case sr.and:this.ir.push(ei);break;case sr.or:this.ir.push(ti);break;case sr.xor:this.ir.push(ai);break;case sr.atan:this.ir.push(ni);break;case sr.min:this.ir.push(si);break;case sr.max:this.ir.push(ri);break;default:return!1}return!0}_compileTernary(e){if(!this._compileNode(e.cond))return!1;this.ir.push(vr,0);const t=this.ir.length-1;if(!this._compileNode(e.then))return!1;this.ir.push(Sr,0);const a=this.ir.length-1;this.ir[t]=this.ir.length;if(!this._compileNode(e.otherwise))return!1;this.ir[a]=this.ir.length;return!0}compile(e){const t=(new PSStackToTree).evaluate(e,this.nIn);if(!t||t.length<this.nOut)return null;for(let e=0;e<this.nOut;e++){if(!this._compileNode(t[e]))return null;const a=this.range[2*e],n=this.range[2*e+1];this.ir.push(qr,e,a,n)}return new Float64Array(this.ir)}static execute(e,t,a,n,s){let r=0,i=0;const o=e.length,l=this.#De,f=this.#He;for(;r<o;)switch(0|e[r++]){case kr:l[i++]=t[a+(0|e[r++])];break;case yr:l[i++]=e[r++];break;case qr:{const t=0|e[r++],a=e[r++],o=e[r++];n[s+t]=MathClamp(l[--i],a,o);break}case vr:{const t=e[r++];0===l[--i]&&(r=t);break}case Sr:r=e[r];break;case Ar:l[i-1]=Math.abs(l[i-1]);break;case xr:l[i-1]=-l[i-1];break;case Cr:l[i-1]=Math.ceil(l[i-1]);break;case Ir:l[i-1]=Math.floor(l[i-1]);break;case Fr:l[i-1]=Math.floor(l[i-1]+.5);break;case Tr:l[i-1]=Math.trunc(l[i-1]);break;case Rr:l[i-1]=0!==l[i-1]?0:1;break;case Or:l[i-1]=~l[i-1];break;case Dr:l[i-1]=Math.sqrt(l[i-1]);break;case Hr:l[i-1]=Math.sin(l[i-1]%360*li);break;case Mr:l[i-1]=Math.cos(l[i-1]%360*li);break;case Nr:l[i-1]=Math.log(l[i-1]);break;case Pr:l[i-1]=Math.log10(l[i-1]);break;case Er:l[i-1]=0|Math.trunc(l[i-1]);break;case _r:{const t=e[r++],a=0|l[i-1];l[i-1]=t>0?a<<t:t<0?a>>-t:a;break}case zr:{const e=l[--i];l[i-1]+=e;break}case Lr:{const e=l[--i];l[i-1]-=e;break}case Ur:{const e=l[--i];l[i-1]*=e;break}case Wr:{const e=l[--i];l[i-1]=0!==e?l[i-1]/e:0;break}case Xr:{const e=l[--i];l[i-1]=0!==e?Math.trunc(l[i-1]/e):0;break}case Kr:{const e=l[--i];l[i-1]=0!==e?l[i-1]%e:0;break}case Gr:{const e=l[--i];l[i-1]**=e;break}case Vr:{const e=l[--i];l[i-1]=l[i-1]===e?1:0;break}case $r:{const e=l[--i];l[i-1]=l[i-1]!==e?1:0;break}case Yr:{const e=l[--i];l[i-1]=l[i-1]>e?1:0;break}case Jr:{const e=l[--i];l[i-1]=l[i-1]>=e?1:0;break}case Qr:{const e=l[--i];l[i-1]=l[i-1]<e?1:0;break}case Zr:{const e=l[--i];l[i-1]=l[i-1]<=e?1:0;break}case ei:{const e=0|l[--i];l[i-1]=(0|l[i-1])&e;break}case ti:{const e=0|l[--i];l[i-1]=0|l[i-1]|e;break}case ai:{const e=0|l[--i];l[i-1]=(0|l[i-1])^e;break}case ni:{const e=l[--i],t=Math.atan2(l[i-1],e)*fi;l[i-1]=t<0?t+360:t;break}case si:{const e=l[--i];l[i-1]=Math.min(l[i-1],e);break}case ri:{const e=l[--i];l[i-1]=Math.max(l[i-1],e);break}case ii:f[0|e[r++]]=l[i-1];break;case oi:l[i++]=f[0|e[r++]]}}}class PSStackBasedInterpreter{static#De=new Float64Array(100);static#Me=0;static#Ne(e){this.#Me<this.#De.length&&(this.#De[this.#Me++]=e)}static#Pe(e){const t=this.#De;switch(e){case sr.true:this.#Ne(1);break;case sr.false:this.#Ne(0);break;case sr.abs:t[this.#Me-1]=Math.abs(t[this.#Me-1]);break;case sr.neg:t[this.#Me-1]=-t[this.#Me-1];break;case sr.ceiling:t[this.#Me-1]=Math.ceil(t[this.#Me-1]);break;case sr.floor:t[this.#Me-1]=Math.floor(t[this.#Me-1]);break;case sr.round:t[this.#Me-1]=Math.floor(t[this.#Me-1]+.5);break;case sr.truncate:t[this.#Me-1]=Math.trunc(t[this.#Me-1]);break;case sr.sqrt:t[this.#Me-1]=Math.sqrt(t[this.#Me-1]);break;case sr.sin:t[this.#Me-1]=Math.sin(t[this.#Me-1]%360*li);break;case sr.cos:t[this.#Me-1]=Math.cos(t[this.#Me-1]%360*li);break;case sr.ln:t[this.#Me-1]=Math.log(t[this.#Me-1]);break;case sr.log:t[this.#Me-1]=Math.log10(t[this.#Me-1]);break;case sr.cvi:t[this.#Me-1]=0|Math.trunc(t[this.#Me-1]);break;case sr.cvr:break;case sr.not:{const e=t[this.#Me-1];t[this.#Me-1]=0===e||1===e?1-e:~e;break}case sr.add:{const e=t[--this.#Me];t[this.#Me-1]+=e;break}case sr.sub:{const e=t[--this.#Me];t[this.#Me-1]-=e;break}case sr.mul:{const e=t[--this.#Me];t[this.#Me-1]*=e;break}case sr.div:{const e=t[--this.#Me];t[this.#Me-1]=0!==e?t[this.#Me-1]/e:0;break}case sr.idiv:{const e=t[--this.#Me];t[this.#Me-1]=0!==e?Math.trunc(t[this.#Me-1]/e):0;break}case sr.mod:{const e=t[--this.#Me];t[this.#Me-1]=0!==e?t[this.#Me-1]%e:0;break}case sr.exp:{const e=t[--this.#Me];t[this.#Me-1]**=e;break}case sr.atan:{const e=t[--this.#Me],a=Math.atan2(t[this.#Me-1],e)*fi;t[this.#Me-1]=a<0?a+360:a;break}case sr.eq:{const e=t[--this.#Me];t[this.#Me-1]=t[this.#Me-1]===e?1:0;break}case sr.ne:{const e=t[--this.#Me];t[this.#Me-1]=t[this.#Me-1]!==e?1:0;break}case sr.gt:{const e=t[--this.#Me];t[this.#Me-1]=t[this.#Me-1]>e?1:0;break}case sr.ge:{const e=t[--this.#Me];t[this.#Me-1]=t[this.#Me-1]>=e?1:0;break}case sr.lt:{const e=t[--this.#Me];t[this.#Me-1]=t[this.#Me-1]<e?1:0;break}case sr.le:{const e=t[--this.#Me];t[this.#Me-1]=t[this.#Me-1]<=e?1:0;break}case sr.and:{const e=0|t[--this.#Me];t[this.#Me-1]=(0|t[this.#Me-1])&e;break}case sr.or:{const e=0|t[--this.#Me];t[this.#Me-1]=0|t[this.#Me-1]|e;break}case sr.xor:{const e=0|t[--this.#Me];t[this.#Me-1]=(0|t[this.#Me-1])^e;break}case sr.bitshift:{const e=0|t[--this.#Me],a=0|t[this.#Me-1];t[this.#Me-1]=e>0?a<<e:a>>-e;break}case sr.min:{const e=t[--this.#Me];t[this.#Me-1]=Math.min(t[this.#Me-1],e);break}case sr.max:{const e=t[--this.#Me];t[this.#Me-1]=Math.max(t[this.#Me-1],e);break}case sr.dup:this.#Ne(t[this.#Me-1]);break;case sr.exch:{const e=t[--this.#Me],a=t[--this.#Me];this.#Ne(e);this.#Ne(a);break}case sr.pop:this.#Me--;break;case sr.copy:{const e=Math.trunc(t[--this.#Me]),a=this.#Me-e;for(let n=0;n<e;n++)this.#Ne(t[a+n]);break}case sr.index:{const e=Math.trunc(t[--this.#Me]);this.#Ne(t[this.#Me-1-e]);break}case sr.roll:{const e=Math.trunc(t[--this.#Me]),a=Math.trunc(t[--this.#Me]);if(a>1&&0!==e){const n=(e%a+a)%a;if(0!==n){const e=this.#Me-a,s=t.slice(e,this.#Me);for(let r=0;r<a;r++)t[e+r]=s[(r-n+a)%a]}}break}}}static#Ee(e){for(const t of e)switch(t.type){case cr:this.#Ne(t.value);break;case hr:this.#Pe(t.op);break;case ur:0!==this.#De[--this.#Me]&&this.#Ee(t.then.instructions);break;case mr:0!==this.#De[--this.#Me]?this.#Ee(t.then.instructions):this.#Ee(t.otherwise.instructions)}}static build(e,t,a){const n=t.length>>1,s=a.length>>1,{instructions:r}=e.body;return(e,t,i,o)=>{this.#Me=0;for(let a=0;a<n;a++)this.#Ne(e[t+a]);this.#Ee(r);const l=this.#Me-s;for(let e=0;e<s;e++){const t=l+e>=0?this.#De[l+e]:0;i[o+e]=MathClamp(t,a[2*e],a[2*e+1])}}}}const ci={if:4,else:5,end:11,select:27,call:16,local_get:32,local_set:33,local_tee:34,i32_const:65,i32_eqz:69,i32_and:113,i32_or:114,i32_xor:115,i32_shl:116,i32_shr_s:117,i32_trunc_f64_s:170,f64_const:68,f64_eq:97,f64_ne:98,f64_lt:99,f64_gt:100,f64_le:101,f64_ge:102,f64_abs:153,f64_neg:154,f64_ceil:155,f64_floor:156,f64_trunc:157,f64_nearest:158,f64_sqrt:159,f64_add:160,f64_sub:161,f64_mul:162,f64_div:163,f64_min:164,f64_max:165,f64_convert_i32_s:183,f64_store:57},hi=124,ui=1,mi=2,pi=3,di=5,gi=7,bi=10;function unsignedLEB128(e){const t=[];do{let a=127&e;0!==(e>>>=7)&&(a|=128);t.push(a)}while(0!==e);return t}function encodeASCIIString(e){return[...unsignedLEB128(e.length),...stringToBytes(e)]}function section(e,t){return[e,...unsignedLEB128(t.length),...t]}function vec(e){const t=unsignedLEB128(e.length);for(const a of e)if("number"!=typeof a)for(const e of a)t.push(e);else t.push(a);return t}const wi=[["sin","Math","sin",[hi],[hi]],["cos","Math","cos",[hi],[hi]],["atan2","Math","atan2",[hi,hi],[hi]],["log","Math","log",[hi],[hi]],["log10","Math","log10",[hi],[hi]],["pow","Math","pow",[hi,hi],[hi]]],ji={Math:Object.fromEntries(wi.map(([e])=>[e,Math[e]]))};class PsWasmCompiler{static#_e=!1;static#ze=null;static#Le=null;static#Ue=0;static#We=0;static#Xe=null;static#Ke=null;static#Ge=null;static#Ve=null;static#$e=null;static#Ye=null;static#Je=null;static#Qe=null;static#Oe(){this.#ze=new Map([[sr.eq,ci.f64_eq],[sr.ne,ci.f64_ne],[sr.lt,ci.f64_lt],[sr.le,ci.f64_le],[sr.gt,ci.f64_gt],[sr.ge,ci.f64_ge]]);this.#Le=Object.create(null);for(let e=0;e<wi.length;e++)this.#Le[wi[e][0]]=e;this.#Ue=Math.PI/180;this.#We=180/Math.PI;this.#Xe=wi.map(([,,,e,t])=>[96,...vec(e),...vec(t)]);this.#Ke=new Uint8Array(section(mi,vec(wi.map(([,e,t],a)=>[...encodeASCIIString(e),...encodeASCIIString(t),0,...unsignedLEB128(a+1)]))));this.#Ge=new Uint8Array(section(pi,vec([[0]])));this.#Ve=new Uint8Array(section(di,vec([[0,1]])));this.#$e=new Uint8Array(section(gi,vec([[...encodeASCIIString("fn"),0,...unsignedLEB128(wi.length)],[...encodeASCIIString("mem"),2,0]])));this.#Ye=new Uint8Array([0,97,115,109,1,0,0,0]);const e=new ArrayBuffer(8);this.#Je=new DataView(e);this.#Qe=new Uint8Array(e);this.#_e=!0}constructor(e,t){PsWasmCompiler.#_e||PsWasmCompiler.#Oe();this._nIn=e.length>>1;this._nOut=t.length>>1;this._range=t;this._code=[];this._nextLocal=this._nIn;this._freeLocals=[];this._sharedLocals=new Map}_allocLocal(){return this._freeLocals.pop()??this._nextLocal++}_releaseLocal(e){this._freeLocals.push(e)}_emitULEB128(e){do{let t=127&e;0!==(e>>>=7)&&(t|=128);this._code.push(t)}while(0!==e)}_emitSLEB128(e){for(;;){const t=127&e;if(0===(e>>=7)&&!(64&t)||-1===e&&64&t){this._code.push(t);return}this._code.push(128|t)}}_emitF64Const(e){this._code.push(ci.f64_const);PsWasmCompiler.#Je.setFloat64(0,e,!0);for(let e=0;e<8;e++)this._code.push(PsWasmCompiler.#Qe[e])}_emitLocalGet(e){this._code.push(ci.local_get);this._emitULEB128(e)}_emitLocalSet(e){this._code.push(ci.local_set);this._emitULEB128(e)}_emitLocalTee(e){this._code.push(ci.local_tee);this._emitULEB128(e)}_compileNode(e){if(e.shared){const t=this._sharedLocals.get(e);if(void 0!==t){this._emitLocalGet(t.local);0===--t.remaining&&this._releaseLocal(t.local);return!0}if(!this._compileNodeImpl(e))return!1;const a=this._allocLocal();this._sharedLocals.set(e,{local:a,remaining:e.sharedCount-1});this._emitLocalTee(a);return!0}return this._compileNodeImpl(e)}_compileNodeImpl(e){switch(e.type){case pr:this._emitLocalGet(e.index);return!0;case dr:{let t=e.value;"boolean"==typeof t&&(t=t?1:0);this._emitF64Const(t);return!0}case gr:return this._compileUnaryNode(e);case br:return this._compileBinaryNode(e);case wr:return this._compileTernaryNode(e);default:return!1}}_compileSinCosNode(e){const t=this._allocLocal();try{if(!this._compileNode(e.operand))return!1;const a=this._code;this._emitLocalSet(t);this._emitLocalGet(t);this._emitLocalGet(t);this._emitF64Const(360);a.push(ci.f64_div,ci.f64_trunc);this._emitF64Const(360);a.push(ci.f64_mul,ci.f64_sub);this._emitF64Const(PsWasmCompiler.#Ue);a.push(ci.f64_mul,ci.call);this._emitULEB128(PsWasmCompiler.#Le[e.op===sr.sin?"sin":"cos"]);return!0}finally{this._releaseLocal(t)}}_compileUnaryNode(e){const t=this._code;if(e.op===sr.sin||e.op===sr.cos)return this._compileSinCosNode(e);if(e.op===sr.not){if(e.valueType===ir){if(!this._compileNodeAsBoolI32(e.operand))return!1;t.push(ci.i32_eqz,ci.f64_convert_i32_s);return!0}if(e.valueType===rr){if(!this._compileNode(e.operand))return!1;t.push(ci.i32_trunc_f64_s,ci.i32_const,127,ci.i32_xor,ci.f64_convert_i32_s);return!0}return!1}if(!this._compileNode(e.operand))return!1;switch(e.op){case sr.abs:t.push(ci.f64_abs);break;case sr.neg:t.push(ci.f64_neg);break;case sr.sqrt:t.push(ci.f64_sqrt);break;case sr.floor:t.push(ci.f64_floor);break;case sr.ceiling:t.push(ci.f64_ceil);break;case sr.round:this._emitF64Const(.5);t.push(ci.f64_add,ci.f64_floor);break;case sr.truncate:t.push(ci.f64_trunc);break;case sr.cvi:t.push(ci.i32_trunc_f64_s,ci.f64_convert_i32_s);break;case sr.cvr:break;case sr.ln:t.push(ci.call);this._emitULEB128(PsWasmCompiler.#Le.log);break;case sr.log:t.push(ci.call);this._emitULEB128(PsWasmCompiler.#Le.log10);break;default:return!1}return!0}_compileSafeDivNode(e,t){const a=this._allocLocal();try{if(!this._compileNode(t)||!this._compileNode(e))return!1;const n=this._code;this._emitLocalTee(a);n.push(ci.f64_div);this._emitF64Const(0);this._emitLocalGet(a);this._emitF64Const(0);n.push(ci.f64_ne,ci.select);return!0}finally{this._releaseLocal(a)}}_compileSafeIdivNode(e,t){const a=this._allocLocal();try{if(!this._compileNode(t)||!this._compileNode(e))return!1;const n=this._code;this._emitLocalTee(a);n.push(ci.f64_div,ci.f64_trunc);this._emitF64Const(0);this._emitLocalGet(a);this._emitF64Const(0);n.push(ci.f64_ne,ci.select);return!0}finally{this._releaseLocal(a)}}_compileBitshiftNode(e,t){if(e.type!==dr||!Number.isInteger(e.value)||!this._compileNode(t))return!1;const a=this._code;a.push(ci.i32_trunc_f64_s);const n=e.value;if(n>0){a.push(ci.i32_const);this._emitSLEB128(n);a.push(ci.i32_shl)}else if(n<0){a.push(ci.i32_const);this._emitSLEB128(-n);a.push(ci.i32_shr_s)}a.push(ci.f64_convert_i32_s);return!0}_compileModNode(e,t){if(e.type===dr&&0===e.value){if(!this._compileNode(t))return!1;this._code.push(ci.drop);this._emitF64Const(0);return!0}const a=this._allocLocal();try{if(!this._compileNode(t))return!1;this._emitLocalTee(a);const n=this._code;if(e.type===dr){this._emitLocalGet(a);this._emitF64Const(e.value);n.push(ci.f64_div,ci.f64_trunc);this._emitF64Const(e.value);n.push(ci.f64_mul,ci.f64_sub)}else{const t=this._allocLocal();try{if(!this._compileNode(e))return!1;this._emitLocalSet(t);this._emitLocalGet(a);this._emitLocalGet(t);n.push(ci.f64_div,ci.f64_trunc);this._emitLocalGet(t);n.push(ci.f64_mul,ci.f64_sub);this._emitF64Const(0);this._emitLocalGet(t);this._emitF64Const(0);n.push(ci.f64_ne,ci.select)}finally{this._releaseLocal(t)}}return!0}finally{this._releaseLocal(a)}}_compileAtanNode(e,t){const a=this._allocLocal();try{if(!this._compileNode(t)||!this._compileNode(e))return!1;const n=this._code;n.push(ci.call);this._emitULEB128(PsWasmCompiler.#Le.atan2);this._emitF64Const(PsWasmCompiler.#We);n.push(ci.f64_mul);this._emitLocalTee(a);this._emitF64Const(0);n.push(ci.f64_lt,ci.if,hi);this._emitLocalGet(a);this._emitF64Const(360);n.push(ci.f64_add,ci.else);this._emitLocalGet(a);n.push(ci.end);return!0}finally{this._releaseLocal(a)}}_compileBitwiseNode(e,t,a){if(!this._compileBitwiseOperandI32(a)||!this._compileBitwiseOperandI32(t))return!1;const n=this._code;switch(e){case sr.and:n.push(ci.i32_and);break;case sr.or:n.push(ci.i32_or);break;case sr.xor:n.push(ci.i32_xor);break;default:return!1}n.push(ci.f64_convert_i32_s);return!0}_compileBitwiseOperandI32(e){if(e.valueType===ir)return this._compileNodeAsBoolI32(e);if(!this._compileNode(e))return!1;this._code.push(ci.i32_trunc_f64_s);return!0}_compileStandardBinaryNode(e,t,a){if(t!==a||t.type===pr||t.type===dr||t.shared){if(!this._compileNode(a)||!this._compileNode(t))return!1}else{const e=this._allocLocal();try{if(!this._compileNode(t))return!1;this._emitLocalTee(e);this._emitLocalGet(e)}finally{this._releaseLocal(e)}}const n=this._code;switch(e){case sr.add:n.push(ci.f64_add);break;case sr.sub:n.push(ci.f64_sub);break;case sr.mul:n.push(ci.f64_mul);break;case sr.exp:n.push(ci.call);this._emitULEB128(PsWasmCompiler.#Le.pow);break;case sr.eq:n.push(ci.f64_eq,ci.f64_convert_i32_s);break;case sr.ne:n.push(ci.f64_ne,ci.f64_convert_i32_s);break;case sr.lt:n.push(ci.f64_lt,ci.f64_convert_i32_s);break;case sr.le:n.push(ci.f64_le,ci.f64_convert_i32_s);break;case sr.gt:n.push(ci.f64_gt,ci.f64_convert_i32_s);break;case sr.ge:n.push(ci.f64_ge,ci.f64_convert_i32_s);break;case sr.min:n.push(ci.f64_min);break;case sr.max:n.push(ci.f64_max);break;default:return!1}return!0}_compileBinaryNode(e){const{op:t,first:a,second:n}=e;return t===sr.bitshift?this._compileBitshiftNode(a,n):t===sr.div?this._compileSafeDivNode(a,n):t===sr.idiv?this._compileSafeIdivNode(a,n):t===sr.mod?this._compileModNode(a,n):t===sr.atan?this._compileAtanNode(a,n):t===sr.and||t===sr.or||t===sr.xor?this._compileBitwiseNode(t,a,n):this._compileStandardBinaryNode(t,a,n)}_compileNodeAsBoolI32(e){if(e.type===br){const t=PsWasmCompiler.#ze.get(e.op);if(void 0!==t){if(!this._compileNode(e.second)||!this._compileNode(e.first))return!1;this._code.push(t);return!0}if(e.valueType===ir&&(e.op===sr.and||e.op===sr.or||e.op===sr.xor)){if(!this._compileNodeAsBoolI32(e.second)||!this._compileNodeAsBoolI32(e.first))return!1;switch(e.op){case sr.and:this._code.push(ci.i32_and);break;case sr.or:this._code.push(ci.i32_or);break;case sr.xor:this._code.push(ci.i32_xor)}return!0}}if(e.type===gr&&e.op===sr.not&&e.valueType===ir){if(!this._compileNodeAsBoolI32(e.operand))return!1;this._code.push(ci.i32_eqz);return!0}if(!this._compileNode(e))return!1;if(e.valueType===ir)this._code.push(ci.i32_trunc_f64_s);else{this._emitF64Const(0);this._code.push(ci.f64_ne)}return!0}_compileTernaryNode(e){if(!this._compileNodeAsBoolI32(e.cond))return!1;this._code.push(ci.if,hi);if(!this._compileNode(e.then))return!1;this._code.push(ci.else);if(!this._compileNode(e.otherwise))return!1;this._code.push(ci.end);return!0}compile(e){const t=(new PSStackToTree).evaluate(e,this._nIn);if(!t||t.length<this._nOut)return null;const a=this._code;for(let e=0;e<this._nOut;e++){const n=this._range[2*e],s=this._range[2*e+1];a.push(ci.i32_const);this._emitSLEB128(8*e);if(!this._compileNode(t[e]))return null;this._emitF64Const(s);a.push(ci.f64_min);this._emitF64Const(n);a.push(ci.f64_max,ci.f64_store,3,0)}a.push(ci.end);const n=this._nIn,s=this._nextLocal-n,r=[96,...vec(Array(n).fill(hi)),...vec([])],i=new Uint8Array(section(ui,vec([r,...PsWasmCompiler.#Xe]))),o=vec(s>0?[[...unsignedLEB128(s),hi]]:[]),l=o.length+a.length,f=new Uint8Array(section(bi,vec([[...unsignedLEB128(l),...o,...a]]))),c=PsWasmCompiler.#Ye,h=PsWasmCompiler.#Ke,u=PsWasmCompiler.#Ge,m=PsWasmCompiler.#Ve,p=PsWasmCompiler.#$e,d=c.length+i.length+h.length+u.length+m.length+p.length+f.length,g=new Uint8Array(d);let b=0;g.set(c,b);b+=c.length;g.set(i,b);b+=i.length;g.set(h,b);b+=h.length;g.set(u,b);b+=u.length;g.set(m,b);b+=m.length;g.set(p,b);b+=p.length;g.set(f,b);return g}}function buildPostScriptWasmFunction(e,t,a){const n=function compilePostScriptToWasm(e,t,a){return new PsWasmCompiler(t,a).compile(parsePostScriptFunction(e))}(e,t,a);if(!n)return null;try{return function _makeWrapper(e,t,a){const{fn:n,mem:s}=e,r=new Float64Array(s.buffer,0,a);let i;switch(a){case 1:i=(e,t)=>{e[t]=r[0]};break;case 2:i=(e,t)=>{e[t]=r[0];e[t+1]=r[1]};break;case 3:i=(e,t)=>{e[t]=r[0];e[t+1]=r[1];e[t+2]=r[2]};break;case 4:i=(e,t)=>{e[t]=r[0];e[t+1]=r[1];e[t+2]=r[2];e[t+3]=r[3]};break;default:i=(e,t)=>{for(let n=0;n<a;n++)e[t+n]=r[n]}}switch(t){case 1:return(e,t,a,s)=>{n(e[t]);i(a,s)};case 2:return(e,t,a,s)=>{n(e[t],e[t+1]);i(a,s)};case 3:return(e,t,a,s)=>{n(e[t],e[t+1],e[t+2]);i(a,s)};case 4:return(e,t,a,s)=>{n(e[t],e[t+1],e[t+2],e[t+3]);i(a,s)};default:{const e=new Float64Array(t);return(a,s,r,o)=>{for(let n=0;n<t;n++)e[n]=a[s+n];n(...e);i(r,o)}}}}(new WebAssembly.Instance(new WebAssembly.Module(n),ji).exports,t.length>>1,a.length>>1)}catch{return null}}class BaseLocalCache{constructor(e){this._onlyRefs=!0===e?.onlyRefs;if(!this._onlyRefs){this._nameRefMap=new Map;this._imageMap=new Map}this._imageCache=new RefMap}getByName(e){this._onlyRefs&&unreachable("Should not call `getByName` method.");const t=this._nameRefMap.get(e);return t?this.getByRef(t):this._imageMap.get(e)||null}getByRef(e){return this._imageCache.get(e)||null}set(e,t,a){unreachable("Abstract method `set` called.")}}class LocalImageCache extends BaseLocalCache{set(e,t=null,a){if("string"!=typeof e)throw new Error('LocalImageCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(e,t);this._imageCache.put(t,a)}else this._imageMap.has(e)||this._imageMap.set(e,a)}}class LocalColorSpaceCache extends BaseLocalCache{set(e=null,t=null,a){if("string"!=typeof e&&!t)throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.');if(t){if(this._imageCache.has(t))return;null!==e&&this._nameRefMap.set(e,t);this._imageCache.put(t,a)}else this._imageMap.has(e)||this._imageMap.set(e,a)}}class LocalFunctionCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error('LocalFunctionCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,a)}}class LocalGStateCache extends BaseLocalCache{set(e,t=null,a){if("string"!=typeof e)throw new Error('LocalGStateCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(e,t);this._imageCache.put(t,a)}else this._imageMap.has(e)||this._imageMap.set(e,a)}}class LocalTilingPatternCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error('LocalTilingPatternCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,a)}}class RegionalImageCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error('RegionalImageCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,a)}}class GlobalColorSpaceCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error('GlobalColorSpaceCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,a)}clear(){this._imageCache.clear()}}class GlobalImageCache{static NUM_PAGES_THRESHOLD=2;static MIN_IMAGES_TO_CACHE=10;static MAX_BYTE_SIZE=5e7;#Ze=new RefSet;constructor(){this._refCache=new RefMap;this._imageCache=new RefMap}get#et(){let e=0;for(const t of this._imageCache)e+=t.byteSize;return e}get#tt(){return this._imageCache.size>=GlobalImageCache.MIN_IMAGES_TO_CACHE&&this.#et>=GlobalImageCache.MAX_BYTE_SIZE}shouldCache(e,t){const a=this._refCache.getOrPutComputed(e,makeSet);a.add(t);return!(a.size<GlobalImageCache.NUM_PAGES_THRESHOLD)&&!(!this._imageCache.has(e)&&this.#tt)}addDecodeFailed(e){this.#Ze.put(e)}hasDecodeFailed(e){return this.#Ze.has(e)}addByteSize(e,t){const a=this._imageCache.get(e);a&&(a.byteSize||(a.byteSize=t))}getData(e,t){const a=this._refCache.get(e);if(!a||a.size<GlobalImageCache.NUM_PAGES_THRESHOLD)return null;const n=this._imageCache.get(e);if(!n)return null;a.add(t);return n}setData(e,t){if(!this._refCache.has(e))throw new Error('GlobalImageCache.setData - expected "shouldCache" to have been called.');this._imageCache.has(e)||(this.#tt?warn("GlobalImageCache.setData - cache limit reached."):this._imageCache.put(e,t))}clear(e=!1){if(!e){this.#Ze.clear();this._refCache.clear()}this._imageCache.clear()}}const ki=0,yi=2,qi=3,vi=4;class PDFFunctionFactory{static#T=!0;static setOptions({useWasm:e}){this.#T=e}constructor({xref:e}){this.xref=e}get useWasm(){return PDFFunctionFactory.#T}create(e,t=!1){let a,n;e instanceof Ref?a=e:e instanceof Dict?a=e.objId:e instanceof BaseStream&&(a=e.dict?.objId);if(a){const e=this._localFunctionCache.getByRef(a);if(e)return e}const s=this.xref.fetchIfRef(e);if(Array.isArray(s)){if(!t)throw new Error('PDFFunctionFactory.create - expected "parseArray" argument.');n=PDFFunction.parseArray(this,s)}else n=PDFFunction.parse(this,s);a&&this._localFunctionCache.set(null,a,n);return n}get _localFunctionCache(){return shadow(this,"_localFunctionCache",new LocalFunctionCache)}}function toNumberArray(e){return Array.isArray(e)?isNumberArray(e,null)?e:e.map(e=>+e):null}function setArity(e,t,a){e.numInputs=t;e.numOutputs=a;return e}function interpolate(e,t,a,n,s){return t===a?n:n+(s-n)/(a-t)*(e-t)}class PDFFunction{static MAX_MULTILINEAR_INPUTS=8;static getSampleArray(e,t,a,n){let s=t;for(const t of e)s*=t;const r=new Array(s);let i=0,o=0;const l=1/(2**a-1),f=n.getBytes((s*a+7)/8);let c=0;for(let e=0;e<s;e++){for(;i<a;){o<<=8;o|=f[c++];i+=8}i-=a;r[e]=(o>>i)*l;o&=(1<<i)-1}return r}static parse(e,t){const a=t.dict||t,n=a.get("FunctionType");switch(n){case ki:return this.constructSampled(e,t,a);case yi:return this.constructInterpolated(e,a);case qi:return this.constructStitched(e,a);case vi:return this.constructPostScript(e,t,a)}throw new FormatError(`Unknown function type: ${n}`)}static parseArray(e,t){const{xref:a}=e,n=[];for(const s of t)n.push(this.parse(e,a.fetchIfRef(s)));if(1===n.length)return n[0];const s=n[0]?.numInputs??0;if(n.some(e=>e.numInputs!==s||1!==e.numOutputs))throw new FormatError("Invalid array of functions.");return setArity(function(e,t,a,s){for(let r=0,i=n.length;r<i;r++)n[r](e,t,a,s+r)},s,n.length)}static constructSampled(e,t,a){const n=toNumberArray(a.getArray("Domain")),s=toNumberArray(a.getArray("Range"));if(!n||!s)throw new FormatError("No domain or range");const r=n.length/2,i=s.length/2,o=toNumberArray(a.getArray("Size")),l=a.get("BitsPerSample"),f=a.get("Order")||1;1!==f&&info("No support for cubic spline interpolation: "+f);let c=toNumberArray(a.getArray("Encode"));if(!c){c=[];for(let e=0;e<r;++e)c.push(0,o[e]-1)}const h=toNumberArray(a.getArray("Decode"))||s,u=this.getSampleArray(o,i,l,t),m=r>PDFFunction.MAX_MULTILINEAR_INPUTS,p=new Float64Array(r),d=new Float64Array(r),g=new Float64Array(r),b=m?new Uint32Array(r):null,w=m?r+1:1<<r,j=new Uint32Array(w),k=new Float64Array(w);return setArity(function constructSampledFn(e,t,a,l){let f=0,w=i,y=0;for(let a=0;a<r;++a){const s=n[2*a],r=n[2*a+1];let i=interpolate(MathClamp(e[t+a],s,r),s,r,c[2*a],c[2*a+1]);const l=o[a];i=MathClamp(i,0,l-1);const h=Math.floor(i);f+=h*w;if(i!==h){p[y]=w;d[y]=h+1-i;g[y]=i-h;y++}w*=l}j[0]=f;k[0]=1;let q=1;if(m){if(y>0){for(let e=0;e<y;e++){const t=g[e];let a=e;for(;a>0&&g[b[a-1]]<t;a--)b[a]=b[a-1];b[a]=e}k[0]=d[b[0]];for(let e=0;e<y;e++){const t=b[e];j[e+1]=j[e]+p[t];k[e+1]=e+1<y?g[t]-g[b[e+1]]:g[t]}q=y+1}}else for(let e=0;e<y;e++){const t=p[e],a=d[e],n=g[e];for(let e=0;e<q;e++){j[q+e]=j[e]+t;k[q+e]=k[e]*n;k[e]*=a}q<<=1}for(let e=0;e<i;++e){let t=0;for(let a=0;a<q;a++)t+=u[j[a]+e]*k[a];t=interpolate(t,0,1,h[2*e],h[2*e+1]);a[l+e]=MathClamp(t,s[2*e],s[2*e+1])}},r,i)}static constructInterpolated(e,t){const a=toNumberArray(t.getArray("Domain")),n=toNumberArray(t.getArray("C0"))||[0],s=toNumberArray(t.getArray("C1"))||[1],r=t.get("N"),i=[];for(let e=0,t=n.length;e<t;++e)i.push(s[e]-n[e]);const o=i.length;return setArity(function constructInterpolatedFn(e,t,a,s){const l=1===r?e[t]:e[t]**r;for(let e=0;e<o;++e)a[s+e]=n[e]+l*i[e]},a?a.length/2:1,o)}static constructStitched(e,t){const a=toNumberArray(t.getArray("Domain"));if(!a)throw new FormatError("No domain");const n=a.length/2;if(1!==n)throw new FormatError("Bad domain for stitched function");const{xref:s}=e,r=[];for(const a of t.get("Functions"))r.push(this.parse(e,s.fetchIfRef(a)));const i=r[0]?.numOutputs??0;if(0===r.length||r.some(e=>1!==e.numInputs||e.numOutputs!==i))throw new FormatError("Incompatible sub-functions for stitched function");const o=toNumberArray(t.getArray("Bounds")),l=toNumberArray(t.getArray("Encode")),f=new Float32Array(1);return setArity(function constructStitchedFn(e,t,n,s){const i=MathClamp(e[t],a[0],a[1]),c=o.length;let h;for(h=0;h<c&&!(i<o[h]);++h);const u=h>0?o[h-1]:a[0],m=h<c?o[h]:a[1];f[0]=interpolate(i,u,m,l[2*h],l[2*h+1]);r[h](f,0,n,s)},n,i)}static constructPostScript(e,t,a){const n=toNumberArray(a.getArray("Domain")),s=toNumberArray(a.getArray("Range"));if(!n)throw new FormatError("No domain.");if(!s)throw new FormatError("No range.");const r=t.getString(),i=n.length/2,o=s.length/2;try{if(e.useWasm){const e=buildPostScriptWasmFunction(r,n,s);if(e)return setArity(e,i,o)}}catch{}warn("Failed to compile PostScript function to wasm, falling back to JS");return setArity(function buildPostScriptJsFunction(e,t,a,n=!1){const s=parsePostScriptFunction(e),r=!n&&new PsJsCompiler(t,a).compile(s);return r?(e,t,a,n)=>{PsJsCompiler.execute(r,e,t,a,n)}:PSStackBasedInterpreter.build(s,t,a)}(r,n,s),i,o)}}function isPDFFunction(e){let t;if(e instanceof Dict)t=e;else{if(!(e instanceof BaseStream))return!1;t=e.dict}return t.has("FunctionType")}function textSinkWrapper(e){const t=e?null:Promise.resolve();return{enqueueInvoked:!1,enqueue(t,a){this.enqueueInvoked=!0;e?.enqueue(t,a)},get desiredSize(){return e?.desiredSize??100},get ready(){return e?.ready??t}}}function _parseVisibilityExpression(e,t,a,n){if(++a>10){warn("Visibility expression is too deeply nested");return}const s=t.length,r=e.fetchIfRef(t[0]);if(!(s<2)&&r instanceof Name){switch(r.name){case"And":case"Or":case"Not":n.push(r.name);break;default:warn(`Invalid operator ${r.name} in visibility expression`);return}for(let r=1;r<s;r++){const s=t[r],i=e.fetchIfRef(s);if(Array.isArray(i)){const t=[];n.push(t);_parseVisibilityExpression(e,i,a,t)}else s instanceof Ref&&n.push(s.toString())}}else warn("Invalid visibility expression")}function parseMarkedContentProps(e,t,a){let n;if(t instanceof Name){n=a.get("Properties").get(t.name)}else{if(!(t instanceof Dict))throw new FormatError("Optional content properties malformed.");n=t}const s=n.get("Type")?.name;if("OCG"===s)return{type:s,id:n.objId};if("OCMD"===s){const t=n.get("VE");if(Array.isArray(t)){const a=[];_parseVisibilityExpression(e,t,0,a);if(a.length>0)return{type:"OCMD",expression:a}}const a=n.get("OCGs");if(Array.isArray(a)||a instanceof Dict){const e=[];if(Array.isArray(a))for(const t of a)e.push(t.toString());else e.push(a.objId);const t=n.get("P");return{type:s,ids:e,policy:t instanceof Name?t.name:null,expression:null}}if(a instanceof Ref)return{type:s,id:a.toString()}}return null}const Si=["BN","BN","BN","BN","BN","BN","BN","BN","BN","S","B","S","WS","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","B","B","B","S","WS","ON","ON","ET","ET","ET","ON","ON","ON","ON","ON","ES","CS","ES","CS","CS","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","CS","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","BN","BN","BN","BN","BN","BN","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","CS","ON","ET","ET","ET","ET","ON","ON","ON","ON","L","ON","ON","BN","ON","ON","ET","ET","EN","EN","ON","L","ON","ON","ON","EN","L","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L"],Ai=["AN","AN","AN","AN","AN","AN","ON","ON","AL","ET","ET","AL","CS","AL","ON","ON","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AN","AN","AN","AN","AN","AN","AN","AN","AN","AN","ET","AN","AN","AL","AL","AL","NSM","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AN","ON","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","NSM","NSM","ON","NSM","NSM","NSM","NSM","AL","AL","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","AL","AL","AL","AL","AL","AL"];function isOdd(e){return!!(1&e)}function isEven(e){return!(1&e)}function findUnequal(e,t,a){let n,s;for(n=t,s=e.length;n<s;++n)if(e[n]!==a)return n;return n}function reverseValues(e,t,a){for(let n=t,s=a-1;n<s;++n,--s){const t=e[n];e[n]=e[s];e[s]=t}}function createBidiText(e,t,a=!1){let n="ltr";a?n="ttb":t||(n="rtl");return{str:e,dir:n}}const xi=[],Ci=[];function bidi(e,t=-1,a=!1){let n=!0;const s=e.length;if(0===s||a)return createBidiText(e,n,a);xi.length=s;Ci.length=s;let r,i,o=0;for(r=0;r<s;++r){xi[r]=e.charAt(r);const t=e.charCodeAt(r);let a="L";if(t<=255)a=Si[t];else if(1424<=t&&t<=1524)a="R";else if(1536<=t&&t<=1791){a=Ai[255&t];a||warn("Bidi: invalid Unicode character "+t.toString(16))}else(1792<=t&&t<=2220||64336<=t&&t<=65023||65136<=t&&t<=65279)&&(a="AL");"R"!==a&&"AL"!==a&&"AN"!==a||o++;Ci[r]=a}if(0===o){n=!0;return createBidiText(e,n)}if(-1===t)if(o/s<.3&&s>4){n=!0;t=0}else{n=!1;t=1}const l=[];for(r=0;r<s;++r)l[r]=t;const f=isOdd(t)?"R":"L",c=f,h=c;let u,m=c;for(r=0;r<s;++r)"NSM"===Ci[r]?Ci[r]=m:m=Ci[r];m=c;for(r=0;r<s;++r){u=Ci[r];"EN"===u?Ci[r]="AL"===m?"AN":"EN":"R"!==u&&"L"!==u&&"AL"!==u||(m=u)}for(r=0;r<s;++r){u=Ci[r];"AL"===u&&(Ci[r]="R")}for(r=1;r<s-1;++r){"ES"===Ci[r]&&"EN"===Ci[r-1]&&"EN"===Ci[r+1]&&(Ci[r]="EN");"CS"!==Ci[r]||"EN"!==Ci[r-1]&&"AN"!==Ci[r-1]||Ci[r+1]!==Ci[r-1]||(Ci[r]=Ci[r-1])}for(r=0;r<s;++r)if("EN"===Ci[r]){for(let e=r-1;e>=0&&"ET"===Ci[e];--e)Ci[e]="EN";for(let e=r+1;e<s&&"ET"===Ci[e];++e)Ci[e]="EN"}for(r=0;r<s;++r){u=Ci[r];"WS"!==u&&"ES"!==u&&"ET"!==u&&"CS"!==u||(Ci[r]="ON")}m=c;for(r=0;r<s;++r){u=Ci[r];"EN"===u?Ci[r]="L"===m?"L":"EN":"R"!==u&&"L"!==u||(m=u)}for(r=0;r<s;++r)if("ON"===Ci[r]){const e=findUnequal(Ci,r+1,"ON");let t=c;for(let e=r-1;e>=0;e--){const a=Ci[e];if("L"===a){t="L";break}if("R"===a||"EN"===a||"AN"===a){t="R";break}}let a=h;for(let t=e;t<s;t++){const e=Ci[t];if("L"===e){a="L";break}if("R"===e||"EN"===e||"AN"===e){a="R";break}}t===a&&Ci.fill(t,r,e);r=e-1}for(r=0;r<s;++r)"ON"===Ci[r]&&(Ci[r]=f);for(r=0;r<s;++r){u=Ci[r];isEven(l[r])?"R"===u?l[r]+=1:"AN"!==u&&"EN"!==u||(l[r]+=2):"L"!==u&&"AN"!==u&&"EN"!==u||(l[r]+=1)}let p,d=-1,g=99;for(r=0,i=l.length;r<i;++r){p=l[r];d<p&&(d=p);g>p&&isOdd(p)&&(g=p)}for(p=d;p>=g;--p){let e=-1;for(r=0,i=l.length;r<i;++r)if(l[r]<p){if(e>=0){reverseValues(xi,e,r);e=-1}}else e<0&&(e=r);e>=0&&reverseValues(xi,e,l.length)}for(r=0,i=xi.length;r<i;++r){const e=xi[r];"<"!==e&&">"!==e||(xi[r]="")}return createBidiText(xi.join(""),n)}const Ii={style:"normal",weight:"normal"},Fi={style:"normal",weight:"500"},Ti={style:"normal",weight:"bold"},Ri={style:"italic",weight:"normal"},Oi={style:"italic",weight:"bold"},Bi=new Map([["Times-Roman",{local:["Times New Roman","Times-Roman","Times","Liberation Serif","Nimbus Roman","Nimbus Roman L","Tinos","Thorndale","TeX Gyre Termes","FreeSerif","Linux Libertine O","Libertinus Serif","PT Astra Serif","DejaVu Serif","Bitstream Vera Serif","Ubuntu"],style:Ii,ultimate:"serif"}],["Times-Bold",{alias:"Times-Roman",style:Ti,ultimate:"serif"}],["Times-Italic",{alias:"Times-Roman",style:Ri,ultimate:"serif"}],["Times-BoldItalic",{alias:"Times-Roman",style:Oi,ultimate:"serif"}],["Helvetica",{local:["Helvetica","Helvetica Neue","Arial","Arial Nova","Liberation Sans","Arimo","Nimbus Sans","Nimbus Sans L","A030","TeX Gyre Heros","FreeSans","DejaVu Sans","Albany","Bitstream Vera Sans","Arial Unicode MS","Microsoft Sans Serif","Apple Symbols","Cantarell"],path:"LiberationSans-Regular.ttf",style:Ii,ultimate:"sans-serif"}],["Helvetica-Bold",{alias:"Helvetica",path:"LiberationSans-Bold.ttf",style:Ti,ultimate:"sans-serif"}],["Helvetica-Oblique",{alias:"Helvetica",path:"LiberationSans-Italic.ttf",style:Ri,ultimate:"sans-serif"}],["Helvetica-BoldOblique",{alias:"Helvetica",path:"LiberationSans-BoldItalic.ttf",style:Oi,ultimate:"sans-serif"}],["Courier",{local:["Courier","Courier New","Liberation Mono","Nimbus Mono","Nimbus Mono L","Cousine","Cumberland","TeX Gyre Cursor","FreeMono","Linux Libertine Mono O","Libertinus Mono"],style:Ii,ultimate:"monospace"}],["Courier-Bold",{alias:"Courier",style:Ti,ultimate:"monospace"}],["Courier-Oblique",{alias:"Courier",style:Ri,ultimate:"monospace"}],["Courier-BoldOblique",{alias:"Courier",style:Oi,ultimate:"monospace"}],["ArialBlack",{local:["Arial Black"],style:{style:"normal",weight:"900"},fallback:"Helvetica-Bold"}],["ArialBlack-Bold",{alias:"ArialBlack"}],["ArialBlack-Italic",{alias:"ArialBlack",style:{style:"italic",weight:"900"},fallback:"Helvetica-BoldOblique"}],["ArialBlack-BoldItalic",{alias:"ArialBlack-Italic"}],["ArialNarrow",{local:["Arial Narrow","Liberation Sans Narrow","Helvetica Condensed","Nimbus Sans Narrow","TeX Gyre Heros Cn"],style:Ii,fallback:"Helvetica"}],["ArialNarrow-Bold",{alias:"ArialNarrow",style:Ti,fallback:"Helvetica-Bold"}],["ArialNarrow-Italic",{alias:"ArialNarrow",style:Ri,fallback:"Helvetica-Oblique"}],["ArialNarrow-BoldItalic",{alias:"ArialNarrow",style:Oi,fallback:"Helvetica-BoldOblique"}],["Calibri",{local:["Calibri","Carlito"],style:Ii,fallback:"Helvetica"}],["Calibri-Bold",{alias:"Calibri",style:Ti,fallback:"Helvetica-Bold"}],["Calibri-Italic",{alias:"Calibri",style:Ri,fallback:"Helvetica-Oblique"}],["Calibri-BoldItalic",{alias:"Calibri",style:Oi,fallback:"Helvetica-BoldOblique"}],["Wingdings",{local:["Wingdings","URW Dingbats"],style:Ii}],["Wingdings-Regular",{alias:"Wingdings"}],["Wingdings-Bold",{alias:"Wingdings"}],["ËÎÌå",{local:["SimSun","SimSun Regular","NSimSun"],style:Ii,ultimate:"serif"}],["ºÚÌå",{local:["SimHei","SimHei Regular"],style:Ii,ultimate:"sans-serif"}],["¿¬Ìå",{local:["KaiTi","SimKai","SimKai Regular"],style:Ii,ultimate:"sans-serif"}],["·ÂËÎ",{local:["FangSong","SimFang","SimFang Regular"],style:Ii,ultimate:"serif"}],["¿¬Ìå_GB2312",{alias:"¿¬Ìå"}],["·ÂËÎ_GB2312",{alias:"·ÂËÎ"}],["Á¥Êé",{local:["SimLi","SimLi Regular"],style:Ii,ultimate:"serif"}],["ÐÂËÎ",{alias:"ËÎÌå"}],["HeiseiMin-W3",{local:["Hiragino Mincho ProN","Hiragino Mincho Pro","Yu Mincho","YuMincho","Source Han Serif JP","Noto Serif JP","Noto Serif CJK JP","IPAexMincho","IPAMincho","Takao Mincho","MS Mincho","MS PMincho"],style:Ii,ultimate:"serif"}],["HeiseiKakuGo-W5",{local:["Hiragino Kaku Gothic ProN","Hiragino Kaku Gothic Pro","Hiragino Sans","Yu Gothic","YuGothic","Source Han Sans JP","Noto Sans JP","Noto Sans CJK JP","IPAexGothic","IPAGothic","Takao Gothic","Meiryo","MS Gothic","MS PGothic"],style:Fi,ultimate:"sans-serif"}],["HeiseiMin-W3-Acro",{alias:"HeiseiMin-W3"}],["HeiseiKakuGo-W5-Acro",{alias:"HeiseiKakuGo-W5"}],["KozMinPro-Regular",{alias:"HeiseiMin-W3"}],["KozMinProVI-Regular",{alias:"HeiseiMin-W3"}],["KozMinPr6N-Regular",{alias:"HeiseiMin-W3"}],["KozGoPro-Regular",{alias:"HeiseiKakuGo-W5"}],["KozGoProVI-Regular",{alias:"HeiseiKakuGo-W5"}],["KozGoPr6N-Regular",{alias:"HeiseiKakuGo-W5"}],["STSong-Light",{local:["STSong","Songti SC","Source Han Serif SC","Source Han Serif CN","Noto Serif SC","Noto Serif CJK SC","AR PL UMing CN","SimSun","NSimSun"],style:Ii,ultimate:"serif"}],["STHeiti-Regular",{local:["STHeiti","Heiti SC","PingFang SC","Source Han Sans SC","Source Han Sans CN","Noto Sans SC","Noto Sans CJK SC","Microsoft YaHei","SimHei","WenQuanYi Zen Hei"],style:Ii,ultimate:"sans-serif"}],["STSongStd-Light",{alias:"STSong-Light"}],["AdobeSongStd-Light",{alias:"STSong-Light"}],["AdobeHeitiStd-Regular",{alias:"STHeiti-Regular"}],["AdobeKaitiStd-Regular",{alias:"¿¬Ìå"}],["AdobeFangsongStd-Regular",{alias:"·ÂËÎ"}],["MSung-Light",{local:["Songti TC","LiSong Pro","Source Han Serif TC","Source Han Serif TW","Noto Serif TC","Noto Serif CJK TC","AR PL UMing TW","PMingLiU","MingLiU","MingLiU_HKSCS"],style:Ii,ultimate:"serif"}],["MHei-Medium",{local:["Heiti TC","STHeiti","Source Han Sans TC","Source Han Sans TW","Noto Sans TC","Noto Sans CJK TC","PingFang TC","Microsoft JhengHei"],style:Fi,ultimate:"sans-serif"}],["MSungStd-Light",{alias:"MSung-Light"}],["AdobeMingStd-Light",{alias:"MSung-Light"}],["HYSMyeongJo-Medium",{local:["AppleMyungjo","Source Han Serif KR","Noto Serif KR","Noto Serif CJK KR","Nanum Myeongjo","Batang"],style:Fi,ultimate:"serif"}],["HYGoThic-Medium",{local:["Apple SD Gothic Neo","AppleGothic","Source Han Sans KR","Noto Sans KR","Noto Sans CJK KR","Nanum Gothic","Malgun Gothic","Dotum","Gulim"],style:Fi,ultimate:"sans-serif"}],["HYSMyeongJoStd-Medium",{alias:"HYSMyeongJo-Medium"}],["AdobeMyungjoStd-Medium",{alias:"HYSMyeongJo-Medium"}],["HYGoThic-Bold",{alias:"HYGoThic-Medium",style:Ti}],["AdobeGothicStd-Bold",{alias:"HYGoThic-Medium",style:Ti}]]),Di=new Map([["Arial-Black","ArialBlack"]]);function getFamilyName(e){const t=new Set(["thin","extralight","ultralight","demilight","semilight","light","book","regular","normal","medium","demibold","semibold","bold","extrabold","ultrabold","black","heavy","extrablack","ultrablack","roman","italic","oblique","ultracondensed","extracondensed","condensed","semicondensed","normal","semiexpanded","expanded","extraexpanded","ultraexpanded","bolditalic"]);return e.split(/[- ,+]+/g).filter(e=>!t.has(e.toLowerCase())).join(" ")}function generateFont({alias:e,local:t,path:a,fallback:n,style:s,ultimate:r},i,o,l=!0,f=!0,c=""){const h={style:null,ultimate:null};if(t){const e=c?` ${c}`:"";for(const a of t)i.push(`local(${a}${e})`)}if(e){const t=Bi.get(e),r=c||function getStyleToAppend(e){switch(e){case Ti:return"Bold";case Ri:return"Italic";case Oi:return"Bold Italic";default:if("bold"===e?.weight)return"Bold";if("italic"===e?.style)return"Italic"}return""}(s);Object.assign(h,generateFont(t,i,o,l&&!n,f&&!a,r))}s&&(h.style=s);r&&(h.ultimate=r);if(l&&n){const e=Bi.get(n),{ultimate:t}=generateFont(e,i,o,l,f&&!a,c);h.ultimate||=t}f&&a&&o&&i.push(`url(${o}${a})`);return h}function getFontSubstitution(e,t,a,n,s,r){if(n.startsWith("InvalidPDFjsFont_"))return null;"TrueType"!==r&&"Type1"!==r||!/^[A-Z]{6}\+/.test(n)||(n=n.slice(7));const i=n=normalizeFontName(n);let o=e.get(i);if(o)return o;let l=Bi.get(n);if(!l)for(const[e,t]of Di)if(n.startsWith(e)){n=`${t}${n.substring(e.length)}`;l=Bi.get(n);break}let f=!1;if(!l){l=Bi.get(s);f=!0}const c=`${t.getDocId()}_s${t.createFontId()}`;if(!l){if(!validateFontName(n)){warn(`Cannot substitute the font because of its name: ${n}`);e.set(i,null);return null}const t=/bold/i.test(n),a=/oblique|italic/i.test(n),s=t&&a&&Oi||t&&Ti||a&&Ri||Ii;o={css:`"${getFamilyName(n)}",${c}`,guessFallback:!0,loadedName:c,baseFontName:n,src:`local(${n})`,style:s};e.set(i,o);return o}const h=[];f&&validateFontName(n)&&h.push(`local(${n})`);const{style:u,ultimate:m}=generateFont(l,h,a),p=null===m,d=p?"":`,${m}`;o={css:`"${getFamilyName(n)}",${c}${d}`,guessFallback:p,loadedName:c,baseFontName:n,src:h.join(","),style:u};e.set(i,o);return o}const Hi=3285377520,Mi=4294901760,Ni=65535;class MurmurHash3_64{constructor(e){this.h1=e?4294967295&e:Hi;this.h2=e?4294967295&e:Hi}update(e){let t,a;if("string"==typeof e){t=new Uint8Array(2*e.length);a=0;for(let n=0,s=e.length;n<s;n++){const s=e.charCodeAt(n);if(s<=255)t[a++]=s;else{t[a++]=s>>>8;t[a++]=255&s}}}else{if(!ArrayBuffer.isView(e))throw new Error("Invalid data format, must be a string or TypedArray.");t=e.slice();a=t.byteLength}const n=a>>2,s=a-4*n,r=new Uint32Array(t.buffer,0,n);let i=0,o=0,l=this.h1,f=this.h2;const c=3432918353,h=461845907,u=11601,m=13715;for(let e=0;e<n;e++)if(1&e){i=r[e];i=i*c&Mi|i*u&Ni;i=i<<15|i>>>17;i=i*h&Mi|i*m&Ni;l^=i;l=l<<13|l>>>19;l=5*l+3864292196}else{o=r[e];o=o*c&Mi|o*u&Ni;o=o<<15|o>>>17;o=o*h&Mi|o*m&Ni;f^=o;f=f<<13|f>>>19;f=5*f+3864292196}i=0;switch(s){case 3:i^=t[4*n+2]<<16;case 2:i^=t[4*n+1]<<8;case 1:i^=t[4*n];i=i*c&Mi|i*u&Ni;i=i<<15|i>>>17;i=i*h&Mi|i*m&Ni;1&n?l^=i:f^=i}this.h1=l;this.h2=f}hexdigest(){let e=this.h1,t=this.h2;e^=t>>>1;e=3981806797*e&Mi|36045*e&Ni;t=4283543511*t&Mi|(2950163797*(t<<16|e>>>16)&Mi)>>>16;e^=t>>>1;e=444984403*e&Mi|60499*e&Ni;t=3301882366*t&Mi|(3120437893*(t<<16|e>>>16)&Mi)>>>16;e^=t>>>1;return(e>>>0).toString(16).padStart(8,"0")+(t>>>0).toString(16).padStart(8,"0")}}class PDFImage{constructor({xref:e,res:t,image:a,isInline:n=!1,smask:s=null,mask:r=null,isMask:i=!1,pdfFunctionFactory:o,globalColorSpaceCache:l,localColorSpaceCache:f}){this.image=a;const c=a.dict,h=c.get("F","Filter");let u;if(h instanceof Name)u=h.name;else if(Array.isArray(h)){const t=e.fetchIfRef(h[0]);t instanceof Name&&(u=t.name)}switch(u){case"JPXDecode":({width:a.width,height:a.height,componentsCount:a.numComps,bitsPerComponent:a.bitsPerComponent}=JpxImage.parseImageProperties(a.stream));a.stream.reset();const e=ImageResizer.getReducePowerForJPX(a.width,a.height,a.numComps);this.jpxDecoderOptions={numComponents:0,isIndexedColormap:!1,smaskInData:c.get("SMaskInData")>=1,reducePower:e};if(e){const t=2**e;a.width=Math.ceil(a.width/t);a.height=Math.ceil(a.height/t)}break;case"JBIG2Decode":a.bitsPerComponent=1;a.numComps=1}let m=c.get("W","Width"),p=c.get("H","Height");if(Number.isInteger(a.width)&&a.width>0&&Number.isInteger(a.height)&&a.height>0&&(a.width!==m||a.height!==p)){warn("PDFImage - using the Width/Height of the image data, rather than the image dictionary.");m=a.width;p=a.height}else{const e="number"==typeof m&&m>0,t="number"==typeof p&&p>0;if(!e||!t){if(!a.fallbackDims)throw new FormatError(`Invalid image width: ${m} or height: ${p}`);warn("PDFImage - using the Width/Height of the parent image, for SMask/Mask data.");e||(m=a.fallbackDims.width);t||(p=a.fallbackDims.height)}}this.width=m;this.height=p;this.interpolate=c.get("I","Interpolate");this.imageMask=c.get("IM","ImageMask")||!1;this.matte=c.get("Matte")||!1;let d=a.bitsPerComponent;if(!d){d=c.get("BPC","BitsPerComponent");if(!d){if(!this.imageMask)throw new FormatError(`Bits per component missing in image: ${this.imageMask}`);d=1}}this.bpc=d;if(this.imageMask)this.numComps=1;else{let s=c.getRaw("CS")||c.getRaw("ColorSpace");const r=!!s;if(this.jpxDecoderOptions?.smaskInData&&2===c.get("SMaskInData")){this.jpxPremultiplied=!0;if(this.matte){const a=ColorSpaceUtils.parse({cs:r?s:Name.get("DeviceRGB"),xref:e,resources:n?t:null,pdfFunctionFactory:o,globalColorSpaceCache:l,localColorSpaceCache:f});this.preblendMatte=a.getRgb(this.matte,0)}}if(r)this.jpxDecoderOptions?.smaskInData&&(s=Name.get("DeviceRGBA"));else if(this.jpxDecoderOptions)s=Name.get("DeviceRGBA");else switch(a.numComps){case 1:s=Name.get("DeviceGray");break;case 3:s=Name.get("DeviceRGB");break;case 4:s=Name.get("DeviceCMYK");break;default:throw new Error(`Images with ${a.numComps} color components not supported.`)}this.colorSpace=ColorSpaceUtils.parse({cs:s,xref:e,resources:n?t:null,pdfFunctionFactory:o,globalColorSpaceCache:l,localColorSpaceCache:f});this.numComps=this.colorSpace.numComps;if(this.jpxDecoderOptions){this.jpxDecoderOptions.numComponents=r?this.numComps:0;this.jpxDecoderOptions.isIndexedColormap="Indexed"===this.colorSpace.name}}this.decode=c.getArray("D","Decode");this.needsDecode=!1;if(this.decode&&(this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode,d)||i&&!ColorSpace.isDefaultDecode(this.decode,1))){this.needsDecode=!0;const e=(1<<d)-1;this.decodeCoefficients=[];this.decodeAddends=[];const t="Indexed"===this.colorSpace?.name;for(let a=0,n=0;a<this.decode.length;a+=2,++n){const s=this.decode[a],r=this.decode[a+1];this.decodeCoefficients[n]=t?(r-s)/e:r-s;this.decodeAddends[n]=t?s:e*s}}if(s){s.fallbackDims??={width:m,height:p};this.smask=new PDFImage({xref:e,res:t,image:s,isInline:n,pdfFunctionFactory:o,globalColorSpaceCache:l,localColorSpaceCache:f})}else if(r)if(r instanceof BaseStream){if(r.dict.get("IM","ImageMask")){r.fallbackDims??={width:m,height:p};this.mask=new PDFImage({xref:e,res:t,image:r,isInline:n,isMask:!0,pdfFunctionFactory:o,globalColorSpaceCache:l,localColorSpaceCache:f})}else warn("Ignoring /Mask in image without /ImageMask.")}else this.mask=r}static async buildImage({xref:e,res:t,image:a,isInline:n=!1,pdfFunctionFactory:s,globalColorSpaceCache:r,localColorSpaceCache:i}){const o=a;let l=null,f=null;const c=a.dict.get("SMask"),h=a.dict.get("Mask");c?c instanceof BaseStream?l=c:warn("Unsupported /SMask format."):h&&(h instanceof BaseStream||Array.isArray(h)?f=h:warn("Unsupported /Mask format."));return new PDFImage({xref:e,res:t,image:o,isInline:n,smask:l,mask:f,pdfFunctionFactory:s,globalColorSpaceCache:r,localColorSpaceCache:i})}static async createMask({image:e,isOffscreenCanvasSupported:t=!1}){const{dict:a}=e,n=a.get("W","Width"),s=a.get("H","Height"),r=a.get("I","Interpolate"),i=a.getArray("D","Decode"),o=i?.[0]>0,l=(n+7>>3)*s,f=await e.getImageData(l),c=1===n&&1===s&&o===(0===f.length||!!(128&f[0]));if(c)return{isSingleOpaquePixel:c};if(t){if(ImageResizer.needsToBeResized(n,s)){const e=new Uint8ClampedArray(n*s*4);convertBlackAndWhiteToRGBA({src:f,dest:e,width:n,height:s,nonBlackColor:0,inverseDecode:o});return ImageResizer.createImage({kind:T,data:e,width:n,height:s,interpolate:r})}const e=new OffscreenCanvas(n,s),t=e.getContext("2d"),a=t.createImageData(n,s);convertBlackAndWhiteToRGBA({src:f,dest:a.data,width:n,height:s,nonBlackColor:0,inverseDecode:o});t.putImageData(a,0,0);return{data:null,width:n,height:s,interpolate:r,bitmap:e.transferToImageBitmap()}}const h=f.byteLength;let u;if(e instanceof DecodeStream&&(!o||l===h))u=f;else if(o){u=new Uint8Array(l);u.set(f);u.fill(255,h)}else u=new Uint8Array(f);if(o)for(let e=0;e<h;e++)u[e]^=255;return{data:u,width:n,height:s,interpolate:r}}get drawWidth(){return Math.max(this.width,this.smask?.width||0,this.mask?.width||0)}get drawHeight(){return Math.max(this.height,this.smask?.height||0,this.mask?.height||0)}decodeBuffer(e){const t=this.bpc,a=this.numComps,n=this.decodeAddends,s=this.decodeCoefficients,r=(1<<t)-1;let i,o;if(1===t){for(i=0,o=e.length;i<o;i++)e[i]=+!e[i];return}let l=0;for(i=0,o=this.width*this.height;i<o;i++)for(let t=0;t<a;t++){e[l]=MathClamp(n[t]+e[l]*s[t],0,r);l++}}getComponents(e){const t=this.bpc;if(8===t)return e;const a=this.width,n=this.height,s=this.numComps,r=a*n*s;let i,o=0;i=t<=8?new Uint8Array(r):t<=16?new Uint16Array(r):new Uint32Array(r);const l=a*s,f=(1<<t)-1;let c,h=0;if(1===t){let t,a,s;for(let r=0;r<n;r++){a=h+(-8&l);s=h+l;for(;h<a;){c=e[o++];i[h]=c>>7&1;i[h+1]=c>>6&1;i[h+2]=c>>5&1;i[h+3]=c>>4&1;i[h+4]=c>>3&1;i[h+5]=c>>2&1;i[h+6]=c>>1&1;i[h+7]=1&c;h+=8}if(h<s){c=e[o++];t=128;for(;h<s;){i[h++]=+!!(c&t);t>>=1}}}}else{let a=0;c=0;for(h=0;h<r;++h){if(h%l===0){c=0;a=0}for(;a<t;){c=c<<8|e[o++];a+=8}const n=a-t;i[h]=MathClamp(c>>n,0,f);c&=(1<<n)-1;a=n}}return i}async fillOpacity(e,t,a,n,s){let r;if(this.smask)r=(e,n)=>this.smask.fillGrayBuffer(e,{...n,destWidth:t,destHeight:a});else if(this.mask)if(this.mask instanceof PDFImage)r=(e,n)=>this.mask.fillGrayBuffer(e,{...n,invertOutput:!0,destWidth:t,destHeight:a});else{if(!Array.isArray(this.mask))throw new FormatError("Unknown mask format.");r=(e,{maxRows:a,offset:n,stride:r})=>{for(let i=0,o=t*a;i<o;++i){let t=0;const a=i*this.numComps;for(let e=0;e<this.numComps;++e){const n=s[a+e],r=2*e;if(n<this.mask[r]||n>this.mask[r+1]){t=255;break}}e[i*r+n]=t}}}else r=(e,{maxRows:a,offset:n,stride:s})=>{for(let r=0,i=t*a;r<i;++r)e[r*s+n]=255};await r(e,{maxRows:n,offset:3,stride:4})}static#at(e,t,a,n,s){for(let r=0;r<t;r+=4){const t=e[r+3];if(0===t){e[r]=255;e[r+1]=255;e[r+2]=255;continue}const i=255/t;e[r]=(e[r]-a)*i+a;e[r+1]=(e[r+1]-n)*i+n;e[r+2]=(e[r+2]-s)*i+s}}undoPreblend(e,t,a){const n=this.smask?.matte;if(!n)return;const s=this.colorSpace.getRgb(n,0);PDFImage.#at(e,t*a*4,s[0],s[1],s[2])}async createImageData(e=!1,t=!1){const a=this.drawWidth,n=this.drawHeight,s={width:a,height:n,interpolate:this.interpolate,kind:0,data:null},r=this.numComps,i=this.width,o=this.height,l=this.bpc,f=i*r*l+7>>3,c=t&&ImageResizer.needsToBeResized(a,n);if(!this.smask&&!this.mask&&"DeviceRGBA"===this.colorSpace.name){s.kind=T;const e=s.data=await this.getImageBytes(o*i*4,{internal:t&&c});if(this.jpxPremultiplied){const t=this.preblendMatte;PDFImage.#at(e,e.length,t?.[0]??0,t?.[1]??0,t?.[2]??0)}return t?c?ImageResizer.createImage(s,!1):this.createBitmap(T,a,n,e):s}if(!e&&!this.smask&&!this.mask){let e;"DeviceGray"===this.colorSpace.name&&1===l?e=C:"DeviceRGB"!==this.colorSpace.name||8!==l||this.needsDecode||(e=F);if(e&&a===i&&n===o){const r=await this.#nt(i,o);if(r)return r;const l=await this.getImageBytes(o*f,{internal:t&&c});if(t)return c?ImageResizer.createImage({data:l,kind:e,width:a,height:n,interpolate:this.interpolate},this.needsDecode):this.createBitmap(e,i,o,l);s.kind=e;s.data=l;if(this.needsDecode){assert(e===C,"PDFImage.createImageData: The image must be grayscale.");const t=s.data;for(let e=0,a=t.length;e<a;e++)t[e]^=255}return s}if(this.image instanceof JpegStream&&!this.needsDecode){let e=!1;switch(this.colorSpace.name){case"DeviceGray":case"DeviceRGB":case"DeviceCMYK":e=!0}if(e){if(t){const e=await this.#nt(a,n);if(e)return e}let e=o*f;if(t&&!c){switch(this.colorSpace.name){case"DeviceGray":e*=4;break;case"DeviceRGB":e=e/3*4}const t=await this.getImageBytes(e,{drawWidth:a,drawHeight:n,forceRGBA:!0,internal:!0});return this.createBitmap(T,a,n,t)}"DeviceGray"===this.colorSpace.name&&(e*=3);s.kind=F;s.data=await this.getImageBytes(e,{drawWidth:a,drawHeight:n,forceRGB:!0,internal:c});return c?ImageResizer.createImage(s):s}}}const h=await this.getImageBytes(o*f,{internal:!0}),u=0|h.length/f*n/o,m=this.getComponents(h);let p,d,g,b,w,j;if(t&&!c){g=new OffscreenCanvas(a,n);b=g.getContext("2d");w=b.createImageData(a,n);j=w.data}s.kind=T;if(e||this.smask||this.mask){t&&!c||(j=new Uint8ClampedArray(a*n*4));p=1;d=!0;await this.fillOpacity(j,a,n,u,m)}else{if(!t||c){s.kind=F;j=new Uint8ClampedArray(a*n*3);p=0}else{new Uint32Array(j.buffer).fill(FeatureTest.isLittleEndian?4278190080:255);p=1}d=!1}this.needsDecode&&this.decodeBuffer(m);this.colorSpace.fillRgb(j,i,o,a,n,u,l,m,p);d&&this.undoPreblend(j,a,u);if(t&&!c){b.putImageData(w,0,0);return{data:null,width:a,height:n,bitmap:g.transferToImageBitmap(),interpolate:this.interpolate}}s.data=j;return c?ImageResizer.createImage(s):s}async fillGrayBuffer(e,{destWidth:t,destHeight:a,invertOutput:n,maxRows:s,offset:r=0,stride:i=1}={}){const o=this.numComps;if(1!==o)throw new FormatError(`Reading gray scale from a color image: ${o}`);const l=this.width,f=this.height,c=this.bpc,h=l*o*c+7>>3,u=await this.getImageBytes(f*h,{internal:!0}),m=this.getComponents(u),p=t??l,d=a??f,g=p!==l||d!==f,b=void 0===s?d:Math.min(d,s);let w=l,j=0,k=null;if(g){w=p;j=f/d;const e=l/p;k=new Uint32Array(p);for(let t=0;t<p;t++)k[t]=Math.floor(t*e)}const y=n?255:0;if(1===c){if(k){const t=k;let a=r;if(this.needsDecode)for(let n=0;n<b;n++){const s=Math.floor(n*j)*l;for(let n=0;n<w;n++){e[a]=m[s+t[n]]-1&255^y;a+=i}}else for(let n=0;n<b;n++){const s=Math.floor(n*j)*l;for(let n=0;n<w;n++){e[a]=255&-m[s+t[n]]^y;a+=i}}}else{const t=w*b;if(this.needsDecode)for(let a=0;a<t;++a)e[a*i+r]=m[a]-1&255^y;else for(let a=0;a<t;++a)e[a*i+r]=255&-m[a]^y}return}this.needsDecode&&this.decodeBuffer(m);const q=255/((1<<c)-1);if(k){const t=k;let a=r;for(let n=0;n<b;n++){const s=Math.floor(n*j)*l;for(let n=0;n<w;n++){e[a]=q*m[s+t[n]]^y;a+=i}}}else{const t=w*b;for(let a=0;a<t;++a)e[a*i+r]=q*m[a]^y}}createBitmap(e,t,a,n){const s=new OffscreenCanvas(t,a),r=s.getContext("2d");let i;if(e===T)i=new ImageData(n,t,a);else{i=r.createImageData(t,a);convertToRGBA({kind:e,src:n,dest:new Uint32Array(i.data.buffer),width:t,height:a,inverseDecode:this.needsDecode})}r.putImageData(i,0,0);return{data:null,width:t,height:a,bitmap:s.transferToImageBitmap(),interpolate:this.interpolate}}async#nt(e,t){const a=await this.image.getTransferableImage(e,t);return a?{data:null,width:a.displayWidth??e,height:a.displayHeight??t,bitmap:a,interpolate:this.interpolate}:null}async getImageBytes(e,{drawWidth:t,drawHeight:a,forceRGBA:n=!1,forceRGB:s=!1,internal:r=!1}){this.image.reset();this.image.drawWidth=t||this.width;this.image.drawHeight=a||this.height;this.image.forceRGBA=!!n;this.image.forceRGB=!!s;const i=await this.image.getImageData(e,this.jpxDecoderOptions);if(r||this.image instanceof DecodeStream)return i;assert(i instanceof Uint8Array,'PDFImage.getImageBytes: Unsupported "imageBytes" type.');return new Uint8Array(i)}}const Pi=Object.freeze({maxImageSize:-1,disableFontFace:!1,ignoreErrors:!1,isOffscreenCanvasSupported:!1,isImageDecoderSupported:!1,canvasMaxAreaInBytes:-1,fontExtraProperties:!1,useSystemFonts:!0,useWasm:!0,useWorkerFetch:!0,cMapUrl:null,cMapPacked:!0,iccUrl:null,standardFontDataUrl:null,wasmUrl:null,hasGPU:!1}),Ei=1,_i=2,zi=Promise.resolve(),argIsDict=e=>e instanceof Dict;function normalizeBlendMode(e,t=!1){if(Array.isArray(e)){for(const t of e){const e=normalizeBlendMode(t,!0);if(e)return e}warn(`Unsupported blend mode Array: ${e}`);return"source-over"}if(e instanceof Name){switch(e.name){case"Normal":case"Compatible":return"source-over";case"Multiply":return"multiply";case"Screen":return"screen";case"Overlay":return"overlay";case"Darken":return"darken";case"Lighten":return"lighten";case"ColorDodge":return"color-dodge";case"ColorBurn":return"color-burn";case"HardLight":return"hard-light";case"SoftLight":return"soft-light";case"Difference":return"difference";case"Exclusion":return"exclusion";case"Hue":return"hue";case"Saturation":return"saturation";case"Color":return"color";case"Luminosity":return"luminosity"}warn(`Unsupported blend mode: ${e.name}`)}return t?null:"source-over"}function addCachedImageOps(e,{objId:t,fn:a,args:n,optionalContent:s,hasMask:r}){t&&e.addDependency(t);e.addImageOps(a,n,s,r);a===Nt&&n[0]?.count>0&&n[0].count++}class TimeSlotManager{static TIME_SLOT_DURATION_MS=20;static CHECK_TIME_EVERY=100;constructor(){this.reset()}check(){if(++this.checked<TimeSlotManager.CHECK_TIME_EVERY)return!1;this.checked=0;return this.endTime<=Date.now()}reset(){this.endTime=Date.now()+TimeSlotManager.TIME_SLOT_DURATION_MS;this.checked=0}}class PartialEvaluator{constructor({xref:e,handler:t,pageIndex:a,pageProxyId:n=null,idFactory:s,fontCache:r,builtInCMapCache:i,standardFontDataCache:o,globalColorSpaceCache:l,globalImageCache:f,systemFontCache:c,options:h=null}){this.xref=e;this.handler=t;this.pageIndex=a;this.pageProxyId=n;this.idFactory=s;this.fontCache=r;this.builtInCMapCache=i;this.standardFontDataCache=o;this.globalColorSpaceCache=l;this.globalImageCache=f;this.systemFontCache=c;this.options=h||Pi;this.type3FontRefs=null;this._regionalImageCache=new RegionalImageCache;this._fetchBuiltInCMapBound=this.fetchBuiltInCMap.bind(this)}get _pdfFunctionFactory(){return shadow(this,"_pdfFunctionFactory",new PDFFunctionFactory({xref:this.xref}))}get parsingType3Font(){return!!this.type3FontRefs}clone(e=null){const t=Object.create(this);t.options=Object.assign(Object.create(null),this.options,e);return t}hasBlendModes(e,t){if(!(e instanceof Dict))return!1;if(e.objId&&t.has(e.objId))return!1;const a=new RefSet(t);e.objId&&a.put(e.objId);const n=[e],s=this.xref;for(;n.length;){const e=n.shift(),t=e.get("ExtGState");if(t instanceof Dict)for(let e of t.getRawValues()){if(e instanceof Ref){if(a.has(e))continue;try{e=s.fetch(e)}catch(t){a.put(e);info(`hasBlendModes - ignoring ExtGState: "${t}".`);continue}}if(!(e instanceof Dict))continue;e.objId&&a.put(e.objId);const t=e.get("BM");if(t instanceof Name){if("Normal"!==t.name)return!0}else if(void 0!==t&&Array.isArray(t))for(const e of t)if(e instanceof Name&&"Normal"!==e.name)return!0}const r=e.get("XObject");if(r instanceof Dict)for(let e of r.getRawValues()){if(e instanceof Ref){if(a.has(e))continue;try{e=s.fetch(e)}catch(t){a.put(e);info(`hasBlendModes - ignoring XObject: "${t}".`);continue}}if(!(e instanceof BaseStream))continue;e.dict.objId&&a.put(e.dict.objId);const t=e.dict.get("Resources");if(t instanceof Dict&&(!t.objId||!a.has(t.objId))){n.push(t);t.objId&&a.put(t.objId)}}}for(const e of a)t.put(e);return!1}async fetchBuiltInCMap(e){const t=this.builtInCMapCache.get(e);if(t)return t;let a;a=this.options.useWorkerFetch?{cMapData:await fetchBinaryData(`${this.options.cMapUrl}${e}.bcmap`),isCompressed:!0}:{cMapData:await this.handler.sendWithPromise("FetchBinaryData",{kind:"cMapUrl",filename:`${e}${this.options.cMapPacked?".bcmap":""}`}),isCompressed:this.options.cMapPacked};this.builtInCMapCache.set(e,a);return a}async fetchStandardFontData(e){const t=this.standardFontDataCache.get(e);if(t)return new Stream(t);if(this.options.useSystemFonts&&"Symbol"!==e&&"ZapfDingbats"!==e)return null;const a=zn()[e];let n;try{n=this.options.useWorkerFetch?await fetchBinaryData(`${this.options.standardFontDataUrl}${a}`):await this.handler.sendWithPromise("FetchBinaryData",{kind:"standardFontDataUrl",filename:a})}catch(e){warn(e);return null}this.standardFontDataCache.set(e,n);return new Stream(n)}async buildFormXObject(e,t,a,n,s,r,i,o){const{dict:l}=t,f=lookupMatrix(l.getArray("Matrix"),null),c=lookupNormalRect(l.getArray("BBox"),null);let h,u,m=c&&new Float32Array(c);m?.some(e=>!isFinite(e))&&(m=null);l.has("OC")&&(h=await this.parseMarkedContentProps(l.get("OC"),e));void 0!==h&&n.addOp(Ct,["OC",h]);const p=l.get("Group");let d;const g=[f&&new Float32Array(f),!p&&m||null],b=l.get("Resources");if(p){u={matrix:f,bbox:m,smask:a,isolated:!1,knockout:!1,needsIsolation:!1,hasSoftMask:!1,isGray:!1};let t=null;if(isName(p.get("S"),"Transparency")){u.isolated=p.get("I")||!1;u.knockout=p.get("K")||!1;if(p.has("CS")){const a=this._getColorSpace(p.getRaw("CS"),e,i);t=a instanceof ColorSpace?a:await this._handleColorSpace(a)}}u.isGray=1===t?.numComps;if(a?.backdrop){t||=ColorSpaceUtils.rgb;a.backdrop=t.getRgbHex(a.backdrop,0)}else"Luminosity"===a?.subtype&&(a.backdrop="#000000");d=new CheckedOperatorList}else{d=n;n.addOp(Rt,g)}await this.getOperatorList({stream:t,task:s,resources:b instanceof Dict?b:e,operatorList:d,initialState:r,prevRefs:o});if(p){u.needsIsolation=d.needsIsolation||!!a;u.hasSoftMask=d.hasSoftMask||!!a;n.addOp(Bt,[u]);n.addOp(Rt,g);n.addOpList(d);n.addOp(Ot,[]);n.addOp(Dt,[u])}else n.addOp(Ot,[]);void 0!==h&&n.addOp(It,[])}_sendImgData(e,t,a=!1){const n=t?[t.bitmap||t.data.buffer]:null;return this.parsingType3Font||a?this.handler.send("commonobj",[e,"Image",t],n):this.handler.send("obj",[e,this.pageProxyId,"Image",t],n)}async buildPaintImageXObject({resources:e,image:t,isInline:a=!1,operatorList:n,cacheKey:s,localImageCache:r,localColorSpaceCache:i}){const{maxImageSize:o,ignoreErrors:l,isOffscreenCanvasSupported:f}=this.options,{dict:c}=t,h=c.objId,u=c.get("W","Width"),m=c.get("H","Height");if(!u||"number"!=typeof u||!m||"number"!=typeof m){warn("Image dimensions are missing, or not numbers.");return}if(-1!==o&&u*m>o){const e="Image exceeded maximum allowed size and was removed.";if(!l)throw new Error(e);warn(e);return}let p;c.has("OC")&&(p=await this.parseMarkedContentProps(c.get("OC"),e));let d,g,b;if(c.get("IM","ImageMask")||!1){d=await PDFImage.createMask({image:t,isOffscreenCanvasSupported:f&&!this.parsingType3Font});if(d.isSingleOpaquePixel){g=Wt;b=[];n.addImageOps(g,b,p);if(s){const e={fn:g,args:b,optionalContent:p};r.set(s,h,e);h&&this._regionalImageCache.set(null,h,e)}return}if(this.parsingType3Font){b=function compileType3Glyph({data:e,width:t,height:a}){if(t>1e3||a>1e3)return null;const n=new Uint8Array([0,2,4,0,1,0,5,4,8,10,0,8,0,2,1,0]),s=t+1,r=new Uint8Array(s*(a+1));let i,o,l;const f=t+7&-8,c=new Uint8Array(f*a);let h=0;for(const t of e){let e=128;for(;e>0;){c[h++]=t&e?0:255;e>>=1}}let u=0;h=0;if(0!==c[h]){r[0]=1;++u}for(o=1;o<t;o++){if(c[h]!==c[h+1]){r[o]=c[h]?2:1;++u}h++}if(0!==c[h]){r[o]=2;++u}for(i=1;i<a;i++){h=i*f;l=i*s;if(c[h-f]!==c[h]){r[l]=c[h]?1:8;++u}let e=(c[h]?4:0)+(c[h-f]?8:0);for(o=1;o<t;o++){e=(e>>2)+(c[h+1]?4:0)+(c[h-f+1]?8:0);if(n[e]){r[l+o]=n[e];++u}h++}if(c[h-f]!==c[h]){r[l+o]=c[h]?2:4;++u}if(u>1e3)return null}h=f*(a-1);l=i*s;if(0!==c[h]){r[l]=8;++u}for(o=1;o<t;o++){if(c[h]!==c[h+1]){r[l+o]=c[h]?4:8;++u}h++}if(0!==c[h]){r[l+o]=4;++u}if(u>1e3)return null;const m=new Int32Array([0,s,-1,0,-s,0,0,0,1]),p=[],{a:d,b:g,c:b,d:w,e:j,f:k}=(new DOMMatrix).scaleSelf(1/t,-1/a).translateSelf(0,-a);for(i=0;u&&i<=a;i++){let e=i*s;const a=e+t;for(;e<a&&!r[e];)e++;if(e===a)continue;let n=e%s,o=i;p.push($t,d*n+b*o+j,g*n+w*o+k);const l=e;let f=r[e];do{const t=m[f];do{e+=t}while(!r[e]);const a=r[e];if(5!==a&&10!==a){f=a;r[e]=0}else{f=a&51*f>>4;r[e]&=f>>2|f<<2}n=e%s;o=e/s|0;p.push(Yt,d*n+b*o+j,g*n+w*o+k);r[e]||--u}while(l!==e);--i}return[Vt,[new Float32Array(p)],new Float32Array([0,0,t,a])]}(d);if(b){n.addImageOps(Xt,b,p);return}warn("Cannot compile Type3 glyph.");n.addImageOps(Nt,[d],p);return}const e=`mask_${this.idFactory.createObjId()}`;n.addDependency(e);d.dataLen=d.bitmap?d.width*d.height*4:d.data.length;this._sendImgData(e,d);g=Nt;b=[{data:e,width:d.width,height:d.height,interpolate:d.interpolate,count:1}];n.addImageOps(g,b,p);if(s){const t={objId:e,fn:g,args:b,optionalContent:p};r.set(s,h,t);h&&this._regionalImageCache.set(null,h,t)}return}const w=c.has("SMask")||c.has("Mask");if(a&&u+m<200&&!w){try{const s=new PDFImage({xref:this.xref,res:e,image:t,isInline:a,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:i});d=await s.createImageData(!0,!1);n.addImageOps(_t,[d],p)}catch(e){const t=`Unable to decode inline image: "${e}".`;if(!l)throw new Error(t);warn(t)}return}let j=`img_${this.idFactory.createObjId()}`,k=!1,y=null;if(this.parsingType3Font)j=`${this.idFactory.getDocId()}_type3_${j}`;else if(s&&h){k=this.globalImageCache.shouldCache(h,this.pageIndex);if(k){assert(!a,"Cannot cache an inline image globally.");j=`${this.idFactory.getDocId()}_${j}`}}n.addDependency(j);g=Et;b=[j,u,m];n.addImageOps(g,b,p,w);if(k){y={objId:j,fn:g,args:b,optionalContent:p,hasMask:w,byteSize:0};if(this.globalImageCache.hasDecodeFailed(h)){this.globalImageCache.setData(h,y);this._sendImgData(j,null,k);return}if(u*m>25e4||w){const e=await this.handler.sendWithPromise("commonobj",[j,"CopyLocalImage",{imageRef:h}]);if(e){this.globalImageCache.setData(h,y);this.globalImageCache.addByteSize(h,e);return}}}PDFImage.buildImage({xref:this.xref,res:e,image:t,isInline:a,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:i}).then(async e=>{d=await e.createImageData(!1,f);d.dataLen=d.bitmap?d.width*d.height*4:d.data.length;d.ref=h;k&&this.globalImageCache.addByteSize(h,d.dataLen);return this._sendImgData(j,d,k)}).catch(e=>{warn(`Unable to decode image "${j}": "${e}".`);h&&this.globalImageCache.addDecodeFailed(h);return this._sendImgData(j,null,k)});if(s){const e={objId:j,fn:g,args:b,optionalContent:p,hasMask:w};r.set(s,h,e);if(h){this._regionalImageCache.set(null,h,e);if(k){assert(y,"The global cache-data must be available.");this.globalImageCache.setData(h,y)}}}}#st(e){const t=this._pdfFunctionFactory.create(e),a=new Float32Array(1);return Uint8Array.from({length:256},(e,n)=>{a[0]=n/255;t(a,0,a,0);return 255*a[0]|0})}handleSMask(e,t,a,n,s,r,i){const o=e.get("G"),l={subtype:e.get("S").name,backdrop:e.get("BC")},f=e.get("TR");isPDFFunction(f)&&(l.transferMap=this.#st(f));return this.buildFormXObject(t,o,l,a,n,s.state.clone({newPath:!0}),r,i)}handleTransferFunction(e){let t;if(Array.isArray(e))t=e.length>1&&e.every(t=>t===e[0])?[e[0]]:e;else{if(!isPDFFunction(e))return null;t=[e]}const a=[];let n=0,s=0;for(const e of t){const t=this.xref.fetchIfRef(e);n++;if(isName(t,"Identity"))a.push(null);else{if(!isPDFFunction(t))return null;a.push(this.#st(t));s++}}return 1!==n&&4!==n||0===s?null:a}handleTilingType(e,t,a,n,s,r,i,o,l){const f=new CheckedOperatorList,c=Dict.merge({xref:this.xref,dictArray:[s.get("Resources"),a]});return this.getOperatorList({stream:n,task:i,resources:c,operatorList:f,prevRefs:l}).then(function(){const a=f.getIR(),{needsIsolation:n}=f,i=getTilingPatternIR(a,s,t,n);r.addDependencies(f.dependencies);r.addOp(e,i);s.objId&&o.set(null,s.objId,{operatorListIR:a,needsIsolation:n,dict:s})}).catch(e=>{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`handleTilingType - ignoring pattern: "${e}".`)}})}async handleSetFont(e,t,a,n,s,r,i=null,o=null,l=null){const f=t?.[0]instanceof Name?t[0].name:null,c=await this.loadFont(f,a,e,s,i,o,l);c.font.isType3Font&&n.addDependencies(c.type3Dependencies);r.font=c.font;c.send(this.handler);return c.loadedName}handleText(e,t){const a=t.font,n=a.charsToGlyphs(e);if(a.data){(!!(t.textRenderingMode&x)||"Pattern"===t.fillColorSpace.name||"Pattern"===t.strokeColorSpace.name||a.disableFontFace)&&PartialEvaluator.buildFontPaths(a,n,this.handler,this.options)}return n}ensureStateFont(e){if(e.font)return;const t=new FormatError("Missing setFont (Tf) operator before text rendering operator.");if(!this.options.ignoreErrors)throw t;warn(`ensureStateFont: "${t}".`)}async setGState({resources:e,gState:t,operatorList:a,cacheKey:n,task:s,stateManager:r,localGStateCache:i,localColorSpaceCache:o,seenRefs:l}){const f=t.objId;let c=!0;const h=[];let u=Promise.resolve();for(const[n,i]of t)switch(n){case"Type":break;case"LW":if("number"!=typeof i){warn(`Invalid LW (line width): ${i}`);break}h.push([n,Math.abs(i)]);break;case"LC":case"LJ":case"ML":case"D":case"RI":case"FL":case"CA":case"ca":h.push([n,i]);break;case"Font":c=!1;u=u.then(()=>this.handleSetFont(e,null,i[0],a,s,r.state,null,null,l).then(function(e){a.addDependency(e);h.push([n,[e,i[1]]])}));break;case"BM":h.push([n,normalizeBlendMode(i)]);break;case"SMask":if(isName(i,"None")){h.push([n,!1]);break}if(i instanceof Dict){c=!1;u=u.then(()=>this.handleSMask(i,e,a,s,r,o,l));h.push([n,!0])}else warn("Unsupported SMask type");break;case"TR":if(t.has("TR2"))break;case"TR2":{const e=this.handleTransferFunction(i);h.push(["TR",e]);break}case"OP":case"op":case"OPM":case"BG":case"BG2":case"UCR":case"UCR2":case"HT":case"SM":case"SA":case"AIS":case"TK":info("graphic state operator "+n);break;default:info("Unknown graphic state operator "+n)}await u;h.length>0&&a.addOp(ke,[h]);c&&i.set(n,f,h)}loadFont(e,t,a,n,s=null,r=null,i=null){const errorFont=async()=>new TranslatedFont({loadedName:"g_font_error",font:new ErrorFont(`Font "${e}" is not available.`),dict:t});let o;if(t)t instanceof Ref&&(o=t);else{const t=a.get("Font");t&&(o=t.getRaw(e))}if(o){if(this.type3FontRefs?.has(o))return errorFont();if(this.fontCache.has(o))return this.fontCache.get(o);try{t=this.xref.fetchIfRef(o)}catch(e){warn(`loadFont - lookup failed: "${e}".`)}}if(!(t instanceof Dict)){if(!this.options.ignoreErrors&&!this.parsingType3Font){warn(`Font "${e}" is not available.`);return errorFont()}warn(`Font "${e}" is not available -- attempting to fallback to a default font.`);t=s||PartialEvaluator.fallbackFontDict}if(t.cacheKey&&this.fontCache.has(t.cacheKey))return this.fontCache.get(t.cacheKey);const{promise:l,resolve:f}=Promise.withResolvers();let c;try{c=this.preEvaluateFont(t);c.cssFontInfo=r}catch(e){warn(`loadFont - preEvaluateFont failed: "${e}".`);return errorFont()}const{descriptor:h,hash:u}=c,m=o instanceof Ref;let p;if(u&&h instanceof Dict){const e=h.fontAliases||=Object.create(null);if(e[u]){const t=e[u].aliasRef;if(m&&t&&this.fontCache.has(t)){this.fontCache.putAlias(o,t);return this.fontCache.get(o)}}else e[u]={fontID:this.idFactory.createFontId()};m&&(e[u].aliasRef=o);p=e[u].fontID}else p=this.idFactory.createFontId();assert(p?.startsWith("f"),'The "fontID" must be (correctly) defined.');if(m)this.fontCache.put(o,l);else{t.cacheKey=`cacheKey_${p}`;this.fontCache.put(t.cacheKey,l)}t.loadedName=`${this.idFactory.getDocId()}_${p}`;this.translateFont(c).then(async e=>{const s=new TranslatedFont({loadedName:t.loadedName,font:e,dict:t});if(e.isType3Font)try{await s.loadType3Data(this,a,n,i)}catch(e){throw new Error(`Type3 font load error: ${e}`)}f(s)}).catch(e=>{warn(`loadFont - translateFont failed: "${e}".`);f(new TranslatedFont({loadedName:t.loadedName,font:new ErrorFont(e?.message),dict:t}))});return l}buildPath(e,t,a){const{pathMinMax:n,pathBuffer:s}=a;switch(0|e){case Te:{const e=a.currentPointX=t[0],r=a.currentPointY=t[1],i=t[2],o=t[3],l=e+i,f=r+o;0===i||0===o?s.push($t,e,r,Yt,l,f,Zt):s.push($t,e,r,Yt,l,r,Yt,l,f,Yt,e,f,Zt);Util.rectBoundingBox(e,r,l,f,n);break}case Se:{const e=a.currentPointX=t[0],r=a.currentPointY=t[1];s.push($t,e,r);Util.pointBoundingBox(e,r,n);break}case Ae:{const e=a.currentPointX=t[0],r=a.currentPointY=t[1];s.push(Yt,e,r);Util.pointBoundingBox(e,r,n);break}case xe:{const e=a.currentPointX,r=a.currentPointY,[i,o,l,f,c,h]=t;a.currentPointX=c;a.currentPointY=h;s.push(Jt,i,o,l,f,c,h);Util.bezierBoundingBox(e,r,i,o,l,f,c,h,n);break}case Ce:{const e=a.currentPointX,r=a.currentPointY,[i,o,l,f]=t;a.currentPointX=l;a.currentPointY=f;s.push(Jt,e,r,i,o,l,f);Util.bezierBoundingBox(e,r,e,r,i,o,l,f,n);break}case Ie:{const e=a.currentPointX,r=a.currentPointY,[i,o,l,f]=t;a.currentPointX=l;a.currentPointY=f;s.push(Jt,i,o,l,f,l,f);Util.bezierBoundingBox(e,r,i,o,l,f,l,f,n);break}case Fe:s.push(Zt)}}_getColorSpace(e,t,a){return ColorSpaceUtils.parse({cs:e,xref:this.xref,resources:t,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:a,asyncIfNotCached:!0})}async _handleColorSpace(e){try{return await e}catch(e){if(e instanceof AbortException)return null;if(this.options.ignoreErrors){warn(`_handleColorSpace - ignoring ColorSpace: "${e}".`);return null}throw e}}parseShading({shading:e,resources:t,localColorSpaceCache:a,localShadingPatternCache:n}){let s,r=n.get(e);if(r)return r;try{s=Pattern.parseShading(e,this.xref,t,this._pdfFunctionFactory,this.globalColorSpaceCache,a).getIR()}catch(t){if(t instanceof AbortException)return null;if(this.options.ignoreErrors){warn(`parseShading - ignoring shading: "${t}".`);n.set(e,null);return null}throw t}r=`pattern_${this.idFactory.createObjId()}`;this.parsingType3Font&&(r=`${this.idFactory.getDocId()}_type3_${r}`);n.set(e,r);if(this.parsingType3Font){const e=function compilePatternInfo(e){let t,a=null,n=[],s=[],r=[],i=null,o=null;switch(e[0]){case"RadialAxial":t="axial"===e[1]?1:2;a=e[2];r=e[3];1===t?n.push(...e[4],...e[5]):n.push(e[4][0],e[4][1],e[6],e[5][0],e[5][1],e[7]);break;case"Mesh":t=3;i=e[1];n=e[2];s=e[3];a=e[6];o=e[7];break;default:throw new Error(`Unsupported pattern type: ${e[0]}`)}const l=Math.floor(n.length/2),f=Math.floor(s.length/4),c=r.length,h=new ArrayBuffer(20+8*l+4*f+8*c+(a?16:0)+(o?3:0)),u=new DataView(h),m=new Uint8Array(h);u.setUint8(PATTERN_INFO.KIND,t);u.setUint8(PATTERN_INFO.HAS_BBOX,a?1:0);u.setUint8(PATTERN_INFO.HAS_BACKGROUND,o?1:0);u.setUint8(PATTERN_INFO.SHADING_TYPE,i);u.setUint32(PATTERN_INFO.N_COORD,l,!0);u.setUint32(PATTERN_INFO.N_COLOR,f,!0);u.setUint32(PATTERN_INFO.N_STOP,c,!0);u.setUint32(PATTERN_INFO.N_FIGURES,0,!0);let p=20;new Float32Array(h,p,2*l).set(n);p+=8*l;m.set(s,p);p+=4*f;for(const[e,t]of r){u.setFloat32(p,e,!0);p+=4;u.setUint32(p,parseInt(t.slice(1),16),!0);p+=4}if(a)for(const e of a){u.setFloat32(p,e,!0);p+=4}o&&m.set(o,p);return h}(s);this.handler.send("commonobj",[r,"Pattern",e],[e])}else this.handler.send("obj",[r,this.pageProxyId,"Pattern",s]);return r}handleColorN(e,t,a,n,s,r,i,o,l,f,c){const h=a.pop();if(h instanceof Name){const u=s.getRaw(h.name),m=u instanceof Ref&&l.getByRef(u);if(m)try{const s=n.base?n.base.getRgbHex(a,0):null,r=getTilingPatternIR(m.operatorListIR,m.dict,s,m.needsIsolation);e.addOp(t,r);return}catch{}const p=this.xref.fetchIfRef(u);if(p){const s=p instanceof BaseStream?p.dict:p,h=s.get("PatternType");if(h===Ei){const o=n.base?n.base.getRgbHex(a,0):null;return this.handleTilingType(t,o,r,p,s,e,i,l,c)}if(h===_i){const a=s.get("Shading"),n=this.parseShading({shading:a,resources:r,localColorSpaceCache:o,localShadingPatternCache:f});if(n){const a=lookupMatrix(s.getArray("Matrix"),null);e.addOp(t,["Shading",n,a])}return}throw new FormatError(`Unknown PatternType: ${h}`)}}throw new FormatError(`Unknown PatternName: ${h}`)}async parseMarkedContentProps(e,t){return parseMarkedContentProps(this.xref,e,t)}async getOperatorList({stream:e,task:a,resources:n,operatorList:s,initialState:r=null,fallbackFontDict:i=null,prevRefs:o=null}){if(e.isAsync){const t=await e.asyncGetBytes();t&&(e=new Stream(t,0,t.length,e.dict))}const l=e.dict?.objId,f=new RefSet(o);if(l){if(o?.has(l))throw new Error(`getOperatorList - ignoring circular reference: ${l}`);f.put(l)}n||=Dict.empty;r||=new EvalState;if(!s)throw new Error('getOperatorList: missing "operatorList" parameter');const c=this,h=this.xref,u=new LocalImageCache,m=new LocalColorSpaceCache,p=new LocalGStateCache,d=new LocalTilingPatternCache,g=new Map,b=n.get("XObject")||Dict.empty,w=n.get("Pattern")||Dict.empty,j=new StateManager(r),k=new EvaluatorPreprocessor(e,h,j),y=new TimeSlotManager;let q=0;function closePendingRestoreOPS(e){for(let e=0,t=k.savedStatesDepth;e<t;e++)s.addOp(qe,[])}function closePendingMarkedContentOPS(){for(;q>0;q--)s.addOp(It,[])}return new Promise(function promiseBody(e,r){const next=function(t){Promise.all([t,s.ready]).then(function(){try{promiseBody(e,r)}catch(e){r(e)}},r)};a.ensureNotTerminated();y.reset();const o={};let l,v,S,x;for(;!(l=y.check());){o.args=null;if(!k.read(o))break;let e=o.args,r=o.fn;switch(0|r){case vt:x=e[0]instanceof Name;S=e[0].name;if(x){const t=u.getByName(S);if(t){addCachedImageOps(s,t);e=null;continue}}next(new Promise(function(e,t){if(!x)throw new FormatError("XObject must be referred to by name.");let r=b.getRaw(S);if(r instanceof Ref){const t=u.getByRef(r)||c._regionalImageCache.getByRef(r)||c.globalImageCache.getData(r,c.pageIndex);if(t){addCachedImageOps(s,t);e();return}r=h.fetch(r)}if(!(r instanceof BaseStream))throw new FormatError("XObject should be a stream");const i=r.dict.get("Subtype");if(!(i instanceof Name))throw new FormatError("XObject should have a Name subtype");if("Form"!==i.name)if("Image"!==i.name){if("PS"!==i.name)throw new FormatError(`Unhandled XObject subtype ${i.name}`);info("Ignored XObject subtype PS");e()}else c.buildPaintImageXObject({resources:n,image:r,operatorList:s,cacheKey:S,localImageCache:u,localColorSpaceCache:m}).then(e,t);else{j.save();c.buildFormXObject(n,r,null,s,a,j.state.clone({newPath:!0}),m,f).then(function(){j.restore();e()},t)}}).catch(e=>{if(!(e instanceof AbortException)){if(!c.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring XObject: "${e}".`)}}));return;case Ve:const o=e[1];next(c.handleSetFont(n,e,null,s,a,j.state,i,null,f).then(function(e){s.addDependency(e);s.addOp(Ve,[e,o])}));return;case qt:const l=e[0].cacheKey;if(l){const t=u.getByName(l);if(t){addCachedImageOps(s,t);e=null;continue}}next(c.buildPaintImageXObject({resources:n,image:e[0],isInline:!0,operatorList:s,cacheKey:l,localImageCache:u,localColorSpaceCache:m}));return;case tt:if(!j.state.font){c.ensureStateFont(j.state);continue}e[0]=c.handleText(e[0],j.state);break;case at:if(!j.state.font){c.ensureStateFont(j.state);continue}const k=[],y=j.state;for(const t of e[0])"string"==typeof t?k.push(...c.handleText(t,y)):"number"==typeof t&&k.push(t);e[0]=k;r=tt;break;case nt:if(!j.state.font){c.ensureStateFont(j.state);continue}s.addOp(et);e[0]=c.handleText(e[0],j.state);r=tt;break;case st:if(!j.state.font){c.ensureStateFont(j.state);continue}s.addOp(et);s.addOp(Xe,[e.shift()]);s.addOp(We,[e.shift()]);e[0]=c.handleText(e[0],j.state);r=tt;break;case $e:j.state.textRenderingMode=e[0];break;case lt:{const t=c._getColorSpace(e[0],n,m);if(t instanceof ColorSpace){j.state.fillColorSpace=t;continue}next(c._handleColorSpace(t).then(e=>{j.state.fillColorSpace=e||ColorSpaceUtils.gray}));return}case ot:{const t=c._getColorSpace(e[0],n,m);if(t instanceof ColorSpace){j.state.strokeColorSpace=t;continue}next(c._handleColorSpace(t).then(e=>{j.state.strokeColorSpace=e||ColorSpaceUtils.gray}));return}case ht:if(!isNumberArray(e,null))continue;v=j.state.fillColorSpace;e=[v.getRgbHex(e,0)];r=gt;break;case ft:if(!isNumberArray(e,null))continue;v=j.state.strokeColorSpace;e=[v.getRgbHex(e,0)];r=dt;break;case pt:if(!isNumberArray(e,null))continue;j.state.fillColorSpace=ColorSpaceUtils.gray;e=[ColorSpaceUtils.gray.getRgbHex(e,0)];r=gt;break;case mt:if(!isNumberArray(e,null))continue;j.state.strokeColorSpace=ColorSpaceUtils.gray;e=[ColorSpaceUtils.gray.getRgbHex(e,0)];r=dt;break;case wt:if(!isNumberArray(e,null))continue;j.state.fillColorSpace=ColorSpaceUtils.cmyk;e=[ColorSpaceUtils.cmyk.getRgbHex(e,0)];r=gt;break;case bt:if(!isNumberArray(e,null))continue;j.state.strokeColorSpace=ColorSpaceUtils.cmyk;e=[ColorSpaceUtils.cmyk.getRgbHex(e,0)];r=dt;break;case gt:if(!isNumberArray(e,null))continue;j.state.fillColorSpace=ColorSpaceUtils.rgb;e=[ColorSpaceUtils.rgb.getRgbHex(e,0)];break;case dt:if(!isNumberArray(e,null))continue;j.state.strokeColorSpace=ColorSpaceUtils.rgb;e=[ColorSpaceUtils.rgb.getRgbHex(e,0)];break;case ut:v=j.state.patternFillColorSpace;if(!v){if(isNumberArray(e,null)){e=[ColorSpaceUtils.gray.getRgbHex(e,0)];r=gt;break}e=[];r=Gt;break}if("Pattern"===v.name){if(!Array.isArray(e))continue;next(c.handleColorN(s,ut,e,v,w,n,a,m,d,g,f));return}if(!isNumberArray(e,null))continue;e=[v.getRgbHex(e,0)];r=gt;break;case ct:v=j.state.patternStrokeColorSpace;if(!v){if(isNumberArray(e,null)){e=[ColorSpaceUtils.gray.getRgbHex(e,0)];r=dt;break}e=[];r=Kt;break}if("Pattern"===v.name){if(!Array.isArray(e))continue;next(c.handleColorN(s,ct,e,v,w,n,a,m,d,g,f));return}if(!isNumberArray(e,null))continue;e=[v.getRgbHex(e,0)];r=dt;break;case jt:let C;try{const t=n.get("Shading");if(!t)throw new FormatError("No shading resource found");C=t.get(e[0].name);if(!C)throw new FormatError("No shading object found")}catch(e){if(e instanceof AbortException)continue;if(c.options.ignoreErrors){warn(`getOperatorList - ignoring Shading: "${e}".`);continue}throw e}const F=c.parseShading({shading:C,resources:n,localColorSpaceCache:m,localShadingPatternCache:g});if(!F)continue;e=[F];r=jt;break;case ke:x=e[0]instanceof Name;S=e[0].name;if(x){const t=p.getByName(S);if(t){t.length>0&&s.addOp(ke,[t]);e=null;continue}}next(new Promise(function(e,t){if(!x)throw new FormatError("GState must be referred to by name.");const r=n.get("ExtGState");if(!(r instanceof Dict))throw new FormatError("ExtGState should be a dictionary.");const i=r.get(S);if(!(i instanceof Dict))throw new FormatError("GState should be a dictionary.");c.setGState({resources:n,gState:i,operatorList:s,cacheKey:S,task:a,stateManager:j,localGStateCache:p,localColorSpaceCache:m,seenRefs:f}).then(e,t)}).catch(e=>{if(!(e instanceof AbortException)){if(!c.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring ExtGState: "${e}".`)}}));return;case me:{const[t]=e;if("number"!=typeof t){warn(`Invalid setLineWidth: ${t}`);continue}e[0]=Math.abs(t);break}case be:{const t=e[1];if("number"!=typeof t){warn(`Invalid setDash: ${t}`);continue}const a=e[0];if(!Array.isArray(a)){warn(`Invalid setDash: ${a}`);continue}a.some(e=>"number"!=typeof e)&&(e[0]=a.filter(e=>"number"==typeof e));break}case Se:case Ae:case xe:case Ce:case Ie:case Fe:case Te:c.buildPath(r,e,j.state);continue;case Re:case Oe:case Be:case De:case He:case Me:case Ne:case Pe:case Ee:{const{state:{pathBuffer:e,pathMinMax:a}}=j;r!==Oe&&r!==Ne&&r!==Pe||e.push(Zt);if(0===e.length)s.addOp(Xt,[r,[null],null]);else{s.addOp(Xt,[r,[new Float32Array(e)],a.slice()]);e.length=0;a.set(t,0)}continue}case Ze:s.addOp(r,[new Float32Array(e)]);continue;case St:case At:case Ft:case Tt:continue;case Ct:q++;if(!(e[0]instanceof Name)){warn(`Expected name for beginMarkedContentProps arg0=${e[0]}`);s.addOp(Ct,["OC",null]);continue}if("OC"===e[0].name){next(c.parseMarkedContentProps(e[1],n).then(e=>{s.addOp(Ct,["OC",e])}).catch(e=>{if(!(e instanceof AbortException)){if(!c.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring beginMarkedContentProps: "${e}".`);s.addOp(Ct,["OC",null])}}));return}e=[e[0].name,e[1]instanceof Dict?e[1].get("MCID"):null];break;case xt:if(e?.some(argIsDict)){warn(`getOperatorList - ignoring operator: ${r}`);continue}q++;break;case It:if(e?.some(argIsDict)){warn(`getOperatorList - ignoring operator: ${r}`);continue}if(0===q)continue;q--;break;default:if(e?.some(argIsDict)){warn(`getOperatorList - ignoring operator: ${r}`);continue}}s.addOp(r,e)}if(l)next(zi);else{closePendingMarkedContentOPS();closePendingRestoreOPS();e()}}).catch(e=>{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring errors during "${a.name}" task: "${e}".`);closePendingMarkedContentOPS();closePendingRestoreOPS()}})}async getTextContent({stream:e,task:t,resources:a,stateManager:s=null,includeMarkedContent:r=!1,sink:i,seenStyles:o=new Set,viewBox:l,lang:f=null,disableNormalization:c=!1,keepWhiteSpace:h=!1,prevRefs:u=null,intersector:m=null}){if(e.isAsync){const t=await e.asyncGetBytes();t&&(e=new Stream(t,0,t.length,e.dict))}i??=textSinkWrapper(null);const p=e.dict?.objId,d=new RefSet(u);if(p){if(u?.has(p))throw new Error(`getTextContent - ignoring circular reference: ${p}`);d.put(p)}a||=Dict.empty;s||=new StateManager(new TextState);let g=0,b=null;const w={items:[],styles:Object.create(null),lang:f},j={initialized:!1,str:[],totalWidth:0,totalHeight:0,width:0,height:0,vertical:!1,prevTransform:null,prevTextRise:0,textAdvanceScale:0,spaceInFlowMin:0,spaceInFlowMax:0,trackingSpaceMin:1/0,negativeSpaceMax:-1/0,notASpace:-1/0,transform:null,fontName:null,hasEOL:!1},k=[" "," "];let y=0;function saveLastChar(e){const t=(y+1)%2,a=" "!==k[y]&&" "===k[t];k[y]=e;y=t;return!h&&a}function shouldAddWhitepsace(){return!h&&" "!==k[y]&&" "===k[(y+1)%2]}function resetLastChars(){k[0]=k[1]=" ";y=0}const q=this,v=this.xref,S=[];let x=null;const C=new LocalImageCache,F=new LocalGStateCache,T=new EvaluatorPreprocessor(e,v,s);let R,O;function pushWhitespace({width:e=0,height:t=0,transform:a=j.prevTransform,fontName:n=j.fontName}){m?.addExtraChar(" ");w.items.push({str:" ",dir:"ltr",width:e,height:t,transform:a,fontName:n,hasEOL:!1})}function getCurrentTextTransform(){const e=R.font,t=[R.fontSize*R.textHScale,0,0,R.fontSize,0,R.textRise];if(e.isType3Font&&(R.fontSize<=1||e.isCharBBox)&&!isArrayEqual(R.fontMatrix,n)){const a=e.bbox[3]-e.bbox[1];a>0&&(t[3]*=a*R.fontMatrix[3])}return Util.transform(R.ctm,Util.transform(R.textMatrix,t))}function ensureTextContentItem(){if(j.initialized)return j;const{font:e,loadedName:t}=R;if(!o.has(t)){o.add(t);w.styles[t]={fontFamily:e.fallbackName,ascent:e.ascent,descent:e.descent,vertical:e.vertical};if(q.options.fontExtraProperties&&e.systemFontInfo){const a=w.styles[t];a.fontSubstitution=e.systemFontInfo.css;a.fontSubstitutionLoadedName=e.systemFontInfo.loadedName}}j.fontName=t;const a=j.transform=getCurrentTextTransform();if(e.vertical){j.width=j.totalWidth=Math.hypot(a[0],a[1]);j.height=j.totalHeight=0;j.vertical=!0}else{j.width=j.totalWidth=0;j.height=j.totalHeight=Math.hypot(a[2],a[3]);j.vertical=!1}const n=Math.hypot(R.textLineMatrix[0],R.textLineMatrix[1]),s=Math.hypot(R.ctm[0],R.ctm[1]);j.textAdvanceScale=s*n;const{fontSize:r}=R;j.trackingSpaceMin=.102*r;j.notASpace=.03*r;j.negativeSpaceMax=-.2*r;j.spaceInFlowMin=.102*r;j.spaceInFlowMax=.6*r;j.hasEOL=!1;j.initialized=!0;return j}function updateAdvanceScale(){if(!j.initialized)return;const e=Math.hypot(R.textLineMatrix[0],R.textLineMatrix[1]),t=Math.hypot(R.ctm[0],R.ctm[1])*e;if(t!==j.textAdvanceScale){if(j.vertical){j.totalHeight+=j.height*j.textAdvanceScale;j.height=0}else{j.totalWidth+=j.width*j.textAdvanceScale;j.width=0}j.textAdvanceScale=t}}function runBidiTransform(e){let t=e.str.join("");c||(t=function normalizeUnicode(e){if(!sa){sa=/([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu;ra=new Map([["ſt","ſt"]])}return e.replaceAll(sa,(e,t,a)=>t?t.normalize("NFKC"):ra.get(a))}(t));const a=bidi(t,-1,e.vertical);return{str:a.str,dir:a.dir,width:Math.abs(e.totalWidth),height:Math.abs(e.totalHeight),transform:e.transform,fontName:e.fontName,hasEOL:e.hasEOL}}async function handleSetFont(e,s){const r=await q.loadFont(e,s,a,t,null,null,d);R.loadedName=r.loadedName;R.font=r.font;R.fontMatrix=r.font.fontMatrix||n}function applyInverseRotation(e,t,a){const n=Math.hypot(a[0],a[1]);return[(a[0]*e+a[1]*t)/n,(a[2]*e+a[3]*t)/n]}function compareWithLastPosition(e){const t=getCurrentTextTransform();let a=t[4],n=t[5];if(R.font?.vertical){if(a<l[0]||a>l[2]||n+e<l[1]||n>l[3])return!1}else if(a+e<l[0]||a>l[2]||n<l[1]||n>l[3])return!1;if(!R.font||!j.prevTransform)return!0;let s=j.prevTransform[4],r=j.prevTransform[5];if(s===a&&r===n)return!0;let i=-1;t[0]&&0===t[1]&&0===t[2]?i=t[0]>0?0:180:t[1]&&0===t[0]&&0===t[3]&&(i=t[1]>0?90:270);switch(i){case 0:break;case 90:[a,n]=[n,a];[s,r]=[r,s];break;case 180:[a,n,s,r]=[-a,-n,-s,-r];break;case 270:[a,n]=[-n,-a];[s,r]=[-r,-s];break;default:[a,n]=applyInverseRotation(a,n,t);[s,r]=applyInverseRotation(s,r,j.prevTransform)}if(R.font.vertical){const e=(r-n)/j.textAdvanceScale,t=a-s,i=Math.sign(j.height||j.totalHeight);if(e<i*j.negativeSpaceMax){if(Math.abs(t)>.5*j.width){appendEOL();return!0}resetLastChars();flushTextContentItem();return!0}if(Math.abs(t)>j.width){appendEOL();return!0}e<=i*j.notASpace&&resetLastChars();if(e<=i*j.trackingSpaceMin)if(shouldAddWhitepsace()){resetLastChars();flushTextContentItem();pushWhitespace({height:Math.abs(e)})}else j.height+=e;else if(!addFakeSpaces(e,j.prevTransform,i))if(0===j.str.length){resetLastChars();pushWhitespace({height:Math.abs(e)})}else j.height+=e;Math.abs(t)>.25*j.width&&flushTextContentItem();return!0}const o=(a-s)/j.textAdvanceScale,f=n-r,c=Math.sign(j.width||j.totalWidth);if(o<c*j.negativeSpaceMax){if(Math.abs(f)>.5*j.height){appendEOL();return!0}resetLastChars();flushTextContentItem();return!0}const h=R.textRise-j.prevTextRise,u=0===h?f:f-t[3]/R.fontSize*h;if(Math.abs(u)>j.height){appendEOL();return!0}o<=c*j.notASpace&&resetLastChars();if(o<=c*j.trackingSpaceMin)if(shouldAddWhitepsace()){resetLastChars();flushTextContentItem();pushWhitespace({width:Math.abs(o)})}else j.width+=o;else if(!addFakeSpaces(o,j.prevTransform,c))if(0===j.str.length){resetLastChars();pushWhitespace({width:Math.abs(o)})}else j.width+=o;Math.abs(f)>.25*j.height&&flushTextContentItem();return!0}function buildTextContentItem({chars:e,extraSpacing:t}){if(O!==R&&(O.fontSize!==R.fontSize||O.fontName!==R.fontName&&(O.font.name!==R.font.name||O.font.vertical!==R.font.vertical))){flushTextContentItem();O=R.clone()}const a=R.font,n=a.vertical?-R.charSpacing:R.charSpacing;if(!e){const e=n+t;e&&(a.vertical?R.translateTextMatrix(0,-e):R.translateTextMatrix(e*R.textHScale,0));h&&compareWithLastPosition(0);return}const s=a.charsToGlyphs(e),r=R.fontMatrix[0]*R.fontSize;for(let e=0,i=s.length;e<i;e++){const o=s[e],{category:l,originalCharCode:f}=o;if(l.isInvisibleFormatMark)continue;let c=n+(e+1===i?t:0);let u=(a.vertical?o.vmetric[0]:o.width)*r;32===f&&(c+=R.wordSpacing);if(!h&&l.isWhitespace){if(a.vertical){c+=-u;R.translateTextMatrix(0,-c)}else{c+=u;R.translateTextMatrix(c*R.textHScale,0)}saveLastChar(" ");continue}if(!l.isZeroWidthDiacritic&&!compareWithLastPosition(u)){a.vertical?R.translateTextMatrix(0,u):R.translateTextMatrix(u*R.textHScale,0);continue}const p=ensureTextContentItem();l.isZeroWidthDiacritic&&(u=0);if(a.vertical){m?.addGlyph(getCurrentTextTransform(),0,u,o.unicode);R.translateTextMatrix(0,u);u=Math.abs(u);p.height+=u}else{u*=R.textHScale;m?.addGlyph(getCurrentTextTransform(),u,0,o.unicode);R.translateTextMatrix(u,0);p.width+=u}if(u){p.prevTransform=getCurrentTextTransform();p.prevTextRise=R.textRise}const d=o.unicode;if(saveLastChar(d)){p.str.push(" ");m?.addExtraChar(" ")}m||p.str.push(d);c&&(a.vertical?R.translateTextMatrix(0,-c):R.translateTextMatrix(c*R.textHScale,0))}}function appendEOL(){m?.addExtraChar("\n");resetLastChars();if(j.initialized){j.hasEOL=!0;flushTextContentItem()}else w.items.push({str:"",dir:"ltr",width:0,height:0,transform:getCurrentTextTransform(),fontName:R.loadedName,hasEOL:!0})}function addFakeSpaces(e,t,a){if(a*j.spaceInFlowMin<=e&&e<=a*j.spaceInFlowMax){if(j.initialized){resetLastChars();j.str.push(" ");m?.addExtraChar(" ")}return!1}const n=j.fontName;let s=0;if(j.vertical){s=e;e=0}flushTextContentItem();resetLastChars();pushWhitespace({width:Math.abs(e),height:Math.abs(s),transform:t||getCurrentTextTransform(),fontName:n});return!0}function flushTextContentItem(){if(j.initialized&&j.str){j.vertical?j.totalHeight+=j.height*j.textAdvanceScale:j.totalWidth+=j.width*j.textAdvanceScale;w.items.push(runBidiTransform(j));j.initialized=!1;j.str.length=0}}function closePendingMarkedContentItems(e=0){if(r&&!(g<=e)){flushTextContentItem();for(;g>e;g--)w.items.push({type:"endMarkedContent"})}}function enqueueChunk(e=!1){const t=w.items.length;if(0!==t&&!(e&&t<10)){i.enqueue(w,t);w.items=[];w.styles=Object.create(null)}}const D=new TimeSlotManager;return new Promise(function promiseBody(e,n){const next=function(t){enqueueChunk(!0);Promise.all([t,i.ready]).then(function(){try{promiseBody(e,n)}catch(e){n(e)}},n)};t.ensureNotTerminated();D.reset();const u={};let m,p,j,k=[];for(;!(m=D.check());){k.length=0;u.args=k;if(!T.read(u))break;R=s.state;O||=R.clone();const e=u.fn;k=u.args;switch(0|e){case Ve:const e=k[0].name,n=k[1];if(R.font&&e===R.fontName&&n===R.fontSize)break;R.fontName=e;R.fontSize=n;next(handleSetFont(e,null));return;case Ye:R.textRise=k[0];break;case Ke:R.textHScale=k[0]/100;break;case Ge:R.leading=k[0];break;case Je:R.translateTextLineMatrix(k[0],k[1]);R.textMatrix=R.textLineMatrix.slice();break;case Qe:R.leading=-k[1];R.translateTextLineMatrix(k[0],k[1]);R.textMatrix=R.textLineMatrix.slice();break;case et:R.carriageReturn();break;case Ze:R.setTextMatrix(k[0],k[1],k[2],k[3],k[4],k[5]);R.setTextLineMatrix(k[0],k[1],k[2],k[3],k[4],k[5]);updateAdvanceScale();break;case We:R.charSpacing=k[0];break;case Xe:R.wordSpacing=k[0];break;case Le:R.textMatrix=ga.slice();R.textLineMatrix=ga.slice();b=g;break;case Ue:if(null!==b){closePendingMarkedContentItems(b);b=null}break;case at:if(!s.state.font){q.ensureStateFont(s.state);continue}const u=(R.font.vertical?1:-1)*R.fontSize/1e3;for(const e of k[0])if("string"==typeof e)S.push(e);else if("number"==typeof e&&0!==e){const t=S.join("");S.length=0;buildTextContentItem({chars:t,extraSpacing:e*u})}if(S.length>0){const e=S.join("");S.length=0;buildTextContentItem({chars:e,extraSpacing:0})}break;case tt:if(!s.state.font){q.ensureStateFont(s.state);continue}buildTextContentItem({chars:k[0],extraSpacing:0});break;case nt:if(!s.state.font){q.ensureStateFont(s.state);continue}R.carriageReturn();buildTextContentItem({chars:k[0],extraSpacing:0});break;case st:if(!s.state.font){q.ensureStateFont(s.state);continue}R.wordSpacing=k[0];R.charSpacing=k[1];R.carriageReturn();buildTextContentItem({chars:k[2],extraSpacing:0});break;case vt:flushTextContentItem();x??=a.get("XObject")||Dict.empty;j=k[0]instanceof Name;p=k[0].name;if(j&&C.getByName(p))break;next(new Promise(function(e,n){if(!j)throw new FormatError("XObject must be referred to by name.");let u=x.getRaw(p);if(u instanceof Ref){if(C.getByRef(u)){e();return}if(q.globalImageCache.getData(u,q.pageIndex)){e();return}u=v.fetch(u)}if(!(u instanceof BaseStream))throw new FormatError("XObject should be a stream");const{dict:m}=u,g=m.get("Subtype");if(!(g instanceof Name))throw new FormatError("XObject should have a Name subtype");if("Form"!==g.name){C.set(p,m.objId,!0);e();return}const b=s.state.clone(),w=new StateManager(b),k=lookupMatrix(m.getArray("Matrix"),null);k&&w.transform(k);const y=m.get("Resources");enqueueChunk();const S=textSinkWrapper(i);q.getTextContent({stream:u,task:t,resources:y instanceof Dict?y:a,stateManager:w,includeMarkedContent:r,sink:S,seenStyles:o,viewBox:l,lang:f,disableNormalization:c,keepWhiteSpace:h,prevRefs:d}).then(function(){S.enqueueInvoked||C.set(p,m.objId,!0);e()},n)}).catch(e=>{if(!(e instanceof AbortException)){if(!q.options.ignoreErrors)throw e;warn(`getTextContent - ignoring XObject: "${e}".`)}}));return;case ke:j=k[0]instanceof Name;p=k[0].name;if(j&&F.getByName(p))break;next(new Promise(function(e,t){if(!j)throw new FormatError("GState must be referred to by name.");const n=a.get("ExtGState");if(!(n instanceof Dict))throw new FormatError("ExtGState should be a dictionary.");const s=n.get(p);if(!(s instanceof Dict))throw new FormatError("GState should be a dictionary.");const r=s.get("Font");if(r){flushTextContentItem();R.fontName=null;R.fontSize=r[1];handleSetFont(null,r[0]).then(e,t)}else{F.set(p,s.objId,!0);e()}}).catch(e=>{if(!(e instanceof AbortException)){if(!q.options.ignoreErrors)throw e;warn(`getTextContent - ignoring ExtGState: "${e}".`)}}));return;case xt:flushTextContentItem();if(r){g++;w.items.push({type:"beginMarkedContent",tag:k[0]instanceof Name?k[0].name:null})}break;case Ct:flushTextContentItem();if(r){g++;const e=k[1]instanceof Dict?k[1].get("MCID"):null;w.items.push({type:"beginMarkedContentProps",id:Number.isInteger(e)?`${q.idFactory.getPageObjId()}_mc${e}`:null,tag:k[0]instanceof Name?k[0].name:null})}break;case It:flushTextContentItem();if(r){if(0===g)break;g--;w.items.push({type:"endMarkedContent"})}}if(w.items.length>=i.desiredSize){m=!0;break}}if(m)next(zi);else{flushTextContentItem();closePendingMarkedContentItems();enqueueChunk();e()}}).catch(e=>{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`getTextContent - ignoring errors during "${t.name}" task: "${e}".`);flushTextContentItem();closePendingMarkedContentItems();enqueueChunk()}})}async extractDataStructures(e,t){const a=this.xref;let n;const s=this.readToUnicode(t.toUnicode);if(t.composite){const a=e.get("CIDSystemInfo");a instanceof Dict&&!t.cidSystemInfo&&(t.cidSystemInfo={registry:stringToPDFString(a.get("Registry")),ordering:stringToPDFString(a.get("Ordering")),supplement:a.get("Supplement")});try{const t=e.get("CIDToGIDMap");t instanceof BaseStream&&(n=t.getBytes())}catch(e){if(!this.options.ignoreErrors)throw e;warn(`extractDataStructures - ignoring CIDToGIDMap data: "${e}".`)}}const r=new Map;let i,o=null;if(e.has("Encoding")){i=e.get("Encoding");if(i instanceof Dict){o=i.get("BaseEncoding");o=o instanceof Name?o.name:null;if(i.has("Differences")){const e=i.get("Differences");let t=0;for(const n of e){const e=a.fetchIfRef(n);if("number"==typeof e)t=e;else{if(!(e instanceof Name))throw new FormatError(`Invalid entry in 'Differences' array: ${e}`);r.set(t++,e.name)}}}}else if(i instanceof Name)o=i.name;else{const e="Encoding is not a Name nor a Dict";if(!this.options.ignoreErrors)throw new FormatError(e);warn(e)}"MacRomanEncoding"!==o&&"MacExpertEncoding"!==o&&"WinAnsiEncoding"!==o&&(o=null)}const l=!t.file||t.isInternalFont,f=Wn()[t.name];o&&l&&f&&(o=null);if("WinAnsiEncoding"===o&&l&&t.name?.charCodeAt(0)>=183){const e=t.name;if(["ËÎÌå","ºÚÌå","¿¬Ìå","·ÂËÎ","¿¬Ìå_GB2312","·ÂËÎ_GB2312","Á¥Êé","ÐÂËÎ","·ÂËÎÌå","С±êËÎ"].includes(e)){o=null;t.defaultEncoding="Adobe-GB1-UCS2";t.composite=!0;t.cidEncoding=Name.get("GBK-EUC-H");const e=await CMapFactory.create({encoding:t.cidEncoding,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null});t.cMap=e;t.vertical=t.cMap.vertical;t.cidSystemInfo={registry:"Adobe",ordering:"GB1",supplement:0}}}if(o)t.defaultEncoding=getEncoding(o);else{let e=!!(t.flags&An);const a=!!(t.flags&xn);if("TrueType"===t.type&&e&&a&&r.size){t.flags&=~An;e=!1}i=mn;"TrueType"!==t.type||a||(i=pn);if(e||f){i=un;l&&(/Symbol/i.test(t.name)?i=dn:/Dingbats/i.test(t.name)?i=gn:/Wingdings/i.test(t.name)&&(i=pn))}t.defaultEncoding=i}t.differences=r;t.baseEncodingName=o;t.hasEncoding=!!o||!!r.size;t.dict=e;t.toUnicode=await s;const c=await this.buildToUnicode(t);t.toUnicode=c;n&&(t.cidToGidMap=this.readCidToGidMap(n,c));return t}_simpleFontToUnicode(e,t=!1){assert(!e.composite,"Must be a simple font.");const a=new Map,n=e.defaultEncoding.slice(),s=e.baseEncodingName;for(const[t,a]of e.differences)".notdef"!==a&&(n[t]=a);const r=bn();for(const i in n){let o=n[i];if(""===o)continue;let l=r[o];if(void 0!==l){a.set(+i,String.fromCharCode(l));continue}let f=0;switch(o[0]){case"G":3===o.length&&(f=parseInt(o.substring(1),16));break;case"g":5===o.length&&(f=parseInt(o.substring(1),16));break;case"C":case"c":if(o.length>=3&&o.length<=4){const a=o.substring(1);if(t){f=parseInt(a,16);break}f=+a;if(Number.isNaN(f)&&Number.isInteger(parseInt(a,16)))return this._simpleFontToUnicode(e,!0)}break;case"u":l=getUnicodeForGlyph(o,r);-1!==l&&(f=l);break;default:switch(o){case"f_h":case"f_t":case"T_h":a.set(+i,o.replaceAll("_",""));continue}}if(f>0&&f<=1114111&&Number.isInteger(f)){if(s&&f===+i){const e=getEncoding(s);if(e&&(o=e[i])){a.set(+i,String.fromCharCode(r[o]));continue}}a.set(+i,String.fromCodePoint(f))}}return a}async buildToUnicode(e){e.hasIncludedToUnicodeMap=!!e.toUnicode?.size;if(e.hasIncludedToUnicodeMap){!e.composite&&e.hasEncoding&&(e.fallbackToUnicode=this._simpleFontToUnicode(e));return e.toUnicode}if(!e.composite)return new ToUnicodeMap(this._simpleFontToUnicode(e));if(e.cMap.builtInCMap&&!(e.cMap instanceof IdentityCMap)||"Adobe"===e.cidSystemInfo?.registry&&("GB1"===e.cidSystemInfo.ordering||"CNS1"===e.cidSystemInfo.ordering||"Japan1"===e.cidSystemInfo.ordering||"Korea1"===e.cidSystemInfo.ordering)){const{registry:t,ordering:a}=e.cidSystemInfo,n=Name.get(`${t}-${a}-UCS2`),s=await CMapFactory.create({encoding:n,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null}),r=new Map,i=[];e.cMap.forEach((e,t)=>{if(t>65535)throw new FormatError("Max size of CID is 65,535");const a=s.lookup(t);if(a){i.length=0;for(let e=0,t=a.length;e<t;e+=2)i.push((a.charCodeAt(e)<<8)+a.charCodeAt(e+1));r.set(e,String.fromCharCode(...i))}});return new ToUnicodeMap(r)}return new IdentityToUnicodeMap(e.firstChar,e.lastChar)}async readToUnicode(e){if(!e)return null;if(e instanceof Name){const t=await CMapFactory.create({encoding:e,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null});return t instanceof IdentityCMap?new IdentityToUnicodeMap(0,65535):new ToUnicodeMap(t.getMap())}if(e instanceof BaseStream)try{const t=await CMapFactory.create({encoding:e,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null});if(t instanceof IdentityCMap)return new IdentityToUnicodeMap(0,65535);const a=new Map;t.forEach((e,t)=>{if("number"==typeof t){a.set(e,String.fromCodePoint(t));return}t.length%2!=0&&(t="\0"+t);const n=[];for(let e=0;e<t.length;e+=2){const a=t.charCodeAt(e)<<8|t.charCodeAt(e+1);if(55296!=(63488&a)){n.push(a);continue}e+=2;const s=t.charCodeAt(e)<<8|t.charCodeAt(e+1);n.push(((1023&a)<<10)+(1023&s)+65536)}a.set(e,String.fromCodePoint(...n))});return new ToUnicodeMap(a)}catch(e){if(e instanceof AbortException)return null;if(this.options.ignoreErrors){warn(`readToUnicode - ignoring ToUnicode data: "${e}".`);return null}throw e}return null}readCidToGidMap(e,t){const a=new Map;for(let n=0,s=e.length;n<s;n++){const s=e[n++]<<8|e[n],r=n>>1;(0!==s||t.has(r))&&a.set(r,s)}return a}extractWidths(e,t,a){const n=this.xref;let s=[],r=0;const i=[];let o;if(a.composite){const t=e.get("DW");r="number"==typeof t?Math.ceil(t):1e3;const l=e.get("W");if(Array.isArray(l))for(let e=0,t=l.length;e<t;e++){let t=n.fetchIfRef(l[e++]);if(!Number.isInteger(t))break;const a=n.fetchIfRef(l[e]);if(Array.isArray(a))for(const e of a){const a=n.fetchIfRef(e);"number"==typeof a&&(s[t]=a);t++}else{if(!Number.isInteger(a))break;{const r=n.fetchIfRef(l[++e]);if("number"!=typeof r)continue;for(let e=t;e<=a;e++)s[e]=r}}}if(a.vertical){const t=e.getArray("DW2");let a=isNumberArray(t,2)?t:[880,-1e3];o=[a[1],.5*r,a[0]];a=e.get("W2");if(Array.isArray(a))for(let e=0,t=a.length;e<t;e++){let t=n.fetchIfRef(a[e++]);if(!Number.isInteger(t))break;const s=n.fetchIfRef(a[e]);if(Array.isArray(s))for(let e=0,a=s.length;e<a;e++){const a=[n.fetchIfRef(s[e++]),n.fetchIfRef(s[e++]),n.fetchIfRef(s[e])];isNumberArray(a,null)&&(i[t]=a);t++}else{if(!Number.isInteger(s))break;{const r=[n.fetchIfRef(a[++e]),n.fetchIfRef(a[++e]),n.fetchIfRef(a[++e])];if(!isNumberArray(r,null))continue;for(let e=t;e<=s;e++)i[e]=r}}}}}else{const i=e.get("Widths");if(Array.isArray(i)){let e=a.firstChar;for(const t of i){const a=n.fetchIfRef(t);"number"==typeof a&&(s[e]=a);e++}const o=t.get("MissingWidth");r="number"==typeof o?o:0}else{const t=e.get("BaseFont");if(t instanceof Name){const e=this.getBaseFontMetrics(t.name);s=this.buildCharCodeToWidth(e.widths,a);r=e.defaultWidth}}}let l=!0,f=r;for(const e in s){const t=s[e];if(t)if(f){if(f!==t){l=!1;break}}else f=t}l?a.flags|=vn:a.flags&=~vn;a.defaultWidth=r;a.widths=s;a.defaultVMetrics=o;a.vmetrics=i}isSerifFont(e){const t=e.split("-",1)[0];return t in Un()||/serif/i.test(t)}getBaseFontMetrics(e){let t=0,a=Object.create(null),n=!1,s=normalizeFontName(e);s=_n()[s]||s;const r=Qn(),i=r[s]??r[this.isSerifFont(e)?"Times-Roman":"Helvetica"];if("number"==typeof i){t=i;n=!0}else a=i();return{defaultWidth:t,monospace:n,widths:a}}buildCharCodeToWidth(e,t){const a=Object.create(null),n=t.differences,s=t.defaultEncoding;for(let t=0;t<256;t++){const r=n.has(t)&&e[n.get(t)]||t in s&&e[s[t]];r&&(a[t]=r)}return a}preEvaluateFont(e){const t=e;let a=e.get("Subtype");if(!(a instanceof Name))throw new FormatError("invalid font Subtype");let n,s=!1;if("Type0"===a.name){const t=e.get("DescendantFonts");if(!t)throw new FormatError("Descendant fonts are not specified");if(!((e=Array.isArray(t)?this.xref.fetchIfRef(t[0]):t)instanceof Dict))throw new FormatError("Descendant font is not a dictionary.");a=e.get("Subtype");if(!(a instanceof Name))throw new FormatError("invalid font Subtype");s=!0}let r=e.get("FirstChar");Number.isInteger(r)||(r=0);let i=e.get("LastChar");Number.isInteger(i)||(i=s?65535:255);const o=e.get("FontDescriptor"),l=e.get("ToUnicode")||t.get("ToUnicode");if(o){n=new MurmurHash3_64;const o=t.getRaw("Encoding");if(o instanceof Name)n.update(o.name);else if(o instanceof Ref)n.update(o.toString());else if(o instanceof Dict)for(const e of o.getRawValues())if(e instanceof Name)n.update(e.name);else if(e instanceof Ref)n.update(e.toString());else if(Array.isArray(e)){const t=e.length,a=new Array(t);for(let n=0;n<t;n++){const t=e[n];t instanceof Name?a[n]=t.name:("number"==typeof t||t instanceof Ref)&&(a[n]=t.toString())}n.update(a.join())}n.update(`${r}-${i}`);if(l instanceof BaseStream){const e=l.stream||l,t=e.buffer?new Uint8Array(e.buffer.buffer,0,e.bufferLength):new Uint8Array(e.bytes.buffer,e.start,e.end-e.start);n.update(t)}else l instanceof Name&&n.update(l.name);const f=e.get("Widths")||t.get("Widths");if(Array.isArray(f)){const e=[];for(const t of f)("number"==typeof t||t instanceof Ref)&&e.push(t.toString());n.update(e.join())}if(s){n.update("compositeFont");const a=e.get("W")||t.get("W");if(Array.isArray(a)){const e=[];for(const t of a)if("number"==typeof t||t instanceof Ref)e.push(t.toString());else if(Array.isArray(t)){const a=[];for(const e of t)("number"==typeof e||e instanceof Ref)&&a.push(e.toString());e.push(`[${a.join()}]`)}n.update(e.join())}const s=e.getRaw("CIDToGIDMap")||t.getRaw("CIDToGIDMap");s instanceof Name?n.update(s.name):s instanceof Ref?n.update(s.toString()):s instanceof BaseStream&&n.update(s.peekBytes())}if("Type3"===a.name){const e=t.get("CharProcs");if(e instanceof Dict)for(const[t,a]of e.getRawEntries())n.update(a instanceof Ref?`${t}\0${a}`:t)}}return{descriptor:o,dict:e,baseDict:t,composite:s,type:a.name,firstChar:r,lastChar:i,toUnicode:l,hash:n?n.hexdigest():""}}async translateFont({descriptor:e,dict:t,baseDict:a,composite:s,type:r,firstChar:i,lastChar:o,toUnicode:l,cssFontInfo:f}){const c="Type3"===r;if(!e)if(c)e=Dict.empty;else{if(!s){let e=t.get("BaseFont");if(!(e instanceof Name))throw new FormatError("Base font is not specified");e=normalizeFontName(e.name);const n=this.getBaseFontMetrics(e),s=e.split("-",1)[0],f=(this.isSerifFont(s)?Sn:0)|(n.monospace?vn:0)|(Wn()[s]?An:xn),h={type:r,name:e,loadedName:a.loadedName,systemFontInfo:null,widths:n.widths,defaultWidth:n.defaultWidth,isSimulatedFlags:!0,flags:f,firstChar:i,lastChar:o,toUnicode:l,xHeight:0,capHeight:0,italicAngle:0,isType3Font:c},u=t.get("Widths"),m=getStandardFontName(e);let p=null;if(m){p=await this.fetchStandardFontData(m);h.isInternalFont=!!p}!h.isInternalFont&&this.options.useSystemFonts&&(h.systemFontInfo=getFontSubstitution(this.systemFontCache,this.idFactory,this.options.standardFontDataUrl,e,m,r));const d=await this.extractDataStructures(t,h);if(Array.isArray(u)){const e=[];let t=i;for(const a of u){const n=this.xref.fetchIfRef(a);"number"==typeof n&&(e[t]=n);t++}d.widths=e}else d.widths=this.buildCharCodeToWidth(n.widths,d);return new Font(e,p,d,this.options)}e=Dict.empty}let h=e.get("FontName"),u=t.get("BaseFont");"string"==typeof h&&(h=Name.get(h));"string"==typeof u&&(u=Name.get(u));const m=h?.name,p=u?.name;if(c)m||(h=Name.get(r));else if(m!==p){info(`The FontDescriptor's FontName is "${m}" but should be the same as the Font's BaseFont "${p}".`);m&&p&&(p.startsWith(m)||!isKnownFontName(m)&&isKnownFontName(p))&&(h=null);h||=u}if(!(h instanceof Name))throw new FormatError("invalid font name");let d,g,b,w,j,k;try{for(const t of["FontFile","FontFile2","FontFile3"]){d=e.get(t);if(d){g=t;break}}if(d){if(!(d instanceof BaseStream))throw new FormatError("FontFile should be a stream");if(d.isAsync){const e=await d.asyncGetBytes();e&&(d=new Stream(e,0,e.length,d.dict))}if(d.isEmpty)throw new FormatError("FontFile is empty")}}catch(e){if(!this.options.ignoreErrors)throw e;warn(`translateFont - fetching "${h.name}" font file: "${e}".`);d=null}let y=!1,q=null,v=null;if(d){if(d.dict){const e=d.dict.get("Subtype");e instanceof Name&&(b=e.name);w=d.dict.get("Length1");j=d.dict.get("Length2");k=d.dict.get("Length3")}}else if(f){const e=getXfaFontName(h.name);if(e){f.fontFamily=`${f.fontFamily}-PdfJS-XFA`;f.metrics=e.metrics||null;q=e.factors||null;d=await this.fetchStandardFontData(e.name);y=!!d;a=t=getXfaFontDict(h.name);s=!0}}else if(!c){const e=getStandardFontName(h.name);if(e){d=await this.fetchStandardFontData(e);y=!!d}!y&&this.options.useSystemFonts&&(v=getFontSubstitution(this.systemFontCache,this.idFactory,this.options.standardFontDataUrl,h.name,e,r))}const S=lookupMatrix(t.getArray("FontMatrix"),n),x=lookupNormalRect(e.getArray("FontBBox")||t.getArray("FontBBox"),c?[0,0,0,0]:void 0);let C=e.get("Ascent");"number"!=typeof C&&(C=void 0);let F=e.get("Descent");"number"!=typeof F&&(F=void 0);let T=e.get("XHeight");"number"!=typeof T&&(T=0);let R=e.get("CapHeight");"number"!=typeof R&&(R=0);let O=e.get("Flags");Number.isInteger(O)||(O=0);let D=e.get("ItalicAngle");"number"!=typeof D&&(D=0);const H={type:r,name:h.name,subtype:b,file:d,fontFileN:g,length1:w,length2:j,length3:k,isInternalFont:y,loadedName:a.loadedName,composite:s,fixedPitch:!1,fontMatrix:S,firstChar:i,lastChar:o,toUnicode:l,bbox:x,ascent:C,descent:F,xHeight:T,capHeight:R,flags:O,italicAngle:D,isType3Font:c,cssFontInfo:f,scaleFactors:q,systemFontInfo:v};if(s){const e=a.get("Encoding");e instanceof Name&&(H.cidEncoding=e.name);const t=await CMapFactory.create({encoding:e,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null});H.cMap=t;H.vertical=H.cMap.vertical}const M=await this.extractDataStructures(t,H);this.extractWidths(t,e,M);const N=new Font(h.name,d,M,this.options);if(N.missingFile&&!N.systemFontInfo&&!c&&this.options.useSystemFonts){const e=getStandardFontName(h.name),t=getFontSubstitution(this.systemFontCache,this.idFactory,this.options.standardFontDataUrl,h.name,e,r);if(t){if(t.guessFallback){t.guessFallback=!1;t.css+=`,${N.fallbackName}`}N.systemFontInfo=t}}return N}static buildFontPaths(e,t,a,n){function buildPath(t){const s=`${e.loadedName}_path_${t}`;try{const n=e.renderer.getPath(t);if(!n)return;a.send("commonobj",[s,"FontPath",n],[n])}catch(e){if(n.ignoreErrors){warn(`buildFontPaths - ignoring ${s} glyph: "${e}".`);return}throw e}}for(const e of t){buildPath(e.fontChar);const t=e.accent;t?.fontChar&&buildPath(t.fontChar)}}static get fallbackFontDict(){const e=new Dict;e.set("BaseFont",Name.get("Helvetica"));e.set("Type",Name.get("FallbackType"));e.set("Subtype",Name.get("FallbackType"));e.set("Encoding",Name.get("WinAnsiEncoding"));return shadow(this,"fallbackFontDict",e)}}class TranslatedFont{#rt=!1;#it=null;constructor({loadedName:e,font:t,dict:a}){this.loadedName=e;this.font=t;this.dict=a;this.type3Dependencies=t.isType3Font?new Set:null}send(e){if(this.#rt)return;this.#rt=!0;const t=this.font.exportData(),a=t.buffer?[t.buffer]:null;e.send("commonobj",[this.loadedName,"Font",t],a)}fallback(e,t){if(this.font.data){this.font.disableFontFace=!0;PartialEvaluator.buildFontPaths(this.font,this.font.glyphCacheValues,e,t)}}async loadType3Data(e,t,a,n=null){if(this.#it)return this.#it;const{dict:s,font:r,type3Dependencies:i}=this;assert(r.isType3Font,"Must be a Type3 font.");const{promise:o,resolve:l}=Promise.withResolvers();this.#it=o;const f=e.clone({ignoreErrors:!1}),c=new RefSet(e.type3FontRefs);s.objId&&c.put(s.objId);f.type3FontRefs=c;const h=s.get("CharProcs"),u=s.get("Resources")||t,m=new Map,[p,d,g,b]=r.bbox,w=Math.hypot(g-p,b-d);for(const e of h.getKeys())try{const t=new OperatorList;await f.getOperatorList({stream:h.get(e),task:a,resources:u,operatorList:t,prevRefs:n});switch(t.fnArray[0]){case it:this.#ot(t,w);break;case rt:w||this.#lt(t)}m.set(e,t.getIR());for(const e of t.dependencies)i.add(e)}catch{warn(`Type3 font resource "${e}" is not available.`);m.set(e,(new OperatorList).getIR())}r.charProcOperatorList=m;if(this._bbox){r.isCharBBox=!0;r.bbox=this._bbox}l();return this.#it}#ot(e,a=NaN){const n=Util.normalizeRect(e.argsArray[0].slice(2)),s=n[2]-n[0],r=n[3]-n[1],i=Math.hypot(s,r);if(0===s||0===r){e.fnArray.splice(0,1);e.argsArray.splice(0,1)}else if(0===a||Math.round(i/a)>=10){this._bbox??=t.slice();Util.rectBoundingBox(...n,this._bbox)}let o=0,l=e.length;for(;o<l;){switch(e.fnArray[o]){case it:break;case ot:case lt:case ft:case ct:case ht:case ut:case mt:case pt:case dt:case gt:case bt:case wt:case jt:case we:e.fnArray.splice(o,1);e.argsArray.splice(o,1);l--;continue;case ke:const[t]=e.argsArray[o];let a=0,n=t.length;for(;a<n;){const[e]=t[a];switch(e){case"TR":case"TR2":case"HT":case"BG":case"BG2":case"UCR":case"UCR2":t.splice(a,1);n--;continue}a++}}o++}}#lt(e){let a=1;const n=e.length;for(;a<n;){if(e.fnArray[a]===Xt){const n=e.argsArray[a][2];this._bbox??=t.slice();Util.rectBoundingBox(...n,this._bbox)}a++}}}class StateManager{constructor(e=new EvalState){this.state=e;this.stateStack=[]}save(){const e=this.state;this.stateStack.push(this.state);this.state=e.clone()}restore(){const e=this.stateStack.pop();e&&(this.state=e)}transform(e){this.state.ctm=Util.transform(this.state.ctm,e)}}class TextState{ctm=new Float32Array(ga);fontName=null;fontSize=0;loadedName=null;font=null;fontMatrix=n;textMatrix=ga.slice();textLineMatrix=ga.slice();charSpacing=0;wordSpacing=0;leading=0;textHScale=1;textRise=0;setTextMatrix(e,t,a,n,s,r){const i=this.textMatrix;i[0]=e;i[1]=t;i[2]=a;i[3]=n;i[4]=s;i[5]=r}setTextLineMatrix(e,t,a,n,s,r){const i=this.textLineMatrix;i[0]=e;i[1]=t;i[2]=a;i[3]=n;i[4]=s;i[5]=r}translateTextMatrix(e,t){const a=this.textMatrix;a[4]=a[0]*e+a[2]*t+a[4];a[5]=a[1]*e+a[3]*t+a[5]}translateTextLineMatrix(e,t){const a=this.textLineMatrix;a[4]=a[0]*e+a[2]*t+a[4];a[5]=a[1]*e+a[3]*t+a[5]}carriageReturn(){this.translateTextLineMatrix(0,-this.leading);this.textMatrix=this.textLineMatrix.slice()}clone(){const e=Object.assign(Object.create(this),this);e.textMatrix=this.textMatrix.slice();e.textLineMatrix=this.textLineMatrix.slice();e.fontMatrix=this.fontMatrix.slice();return e}}class EvalState{ctm=new Float32Array(ga);font=null;textRenderingMode=S;_fillColorSpace=ColorSpaceUtils.gray;_strokeColorSpace=ColorSpaceUtils.gray;patternFillColorSpace=null;patternStrokeColorSpace=null;currentPointX=0;currentPointY=0;pathMinMax=a.slice();pathBuffer=[];get fillColorSpace(){return this._fillColorSpace}set fillColorSpace(e){this._fillColorSpace=this.patternFillColorSpace=e}get strokeColorSpace(){return this._strokeColorSpace}set strokeColorSpace(e){this._strokeColorSpace=this.patternStrokeColorSpace=e}clone({newPath:e=!1}={}){const t=Object.create(this);if(e){t.pathBuffer=[];t.pathMinMax=a.slice()}return t}}class EvaluatorPreprocessor{static get opMap(){return shadow(this,"opMap",Object.assign(Object.create(null),{w:{id:me,numArgs:1,variableArgs:!1},J:{id:pe,numArgs:1,variableArgs:!1},j:{id:de,numArgs:1,variableArgs:!1},M:{id:ge,numArgs:1,variableArgs:!1},d:{id:be,numArgs:2,variableArgs:!1},ri:{id:we,numArgs:1,variableArgs:!1},i:{id:je,numArgs:1,variableArgs:!1},gs:{id:ke,numArgs:1,variableArgs:!1},q:{id:ye,numArgs:0,variableArgs:!1},Q:{id:qe,numArgs:0,variableArgs:!1},cm:{id:ve,numArgs:6,variableArgs:!1},m:{id:Se,numArgs:2,variableArgs:!1},l:{id:Ae,numArgs:2,variableArgs:!1},c:{id:xe,numArgs:6,variableArgs:!1},v:{id:Ce,numArgs:4,variableArgs:!1},y:{id:Ie,numArgs:4,variableArgs:!1},h:{id:Fe,numArgs:0,variableArgs:!1},re:{id:Te,numArgs:4,variableArgs:!1},S:{id:Re,numArgs:0,variableArgs:!1},s:{id:Oe,numArgs:0,variableArgs:!1},f:{id:Be,numArgs:0,variableArgs:!1},F:{id:Be,numArgs:0,variableArgs:!1},"f*":{id:De,numArgs:0,variableArgs:!1},B:{id:He,numArgs:0,variableArgs:!1},"B*":{id:Me,numArgs:0,variableArgs:!1},b:{id:Ne,numArgs:0,variableArgs:!1},"b*":{id:Pe,numArgs:0,variableArgs:!1},n:{id:Ee,numArgs:0,variableArgs:!1},W:{id:_e,numArgs:0,variableArgs:!1},"W*":{id:ze,numArgs:0,variableArgs:!1},BT:{id:Le,numArgs:0,variableArgs:!1},ET:{id:Ue,numArgs:0,variableArgs:!1},Tc:{id:We,numArgs:1,variableArgs:!1},Tw:{id:Xe,numArgs:1,variableArgs:!1},Tz:{id:Ke,numArgs:1,variableArgs:!1},TL:{id:Ge,numArgs:1,variableArgs:!1},Tf:{id:Ve,numArgs:2,variableArgs:!1},Tr:{id:$e,numArgs:1,variableArgs:!1},Ts:{id:Ye,numArgs:1,variableArgs:!1},Td:{id:Je,numArgs:2,variableArgs:!1},TD:{id:Qe,numArgs:2,variableArgs:!1},Tm:{id:Ze,numArgs:6,variableArgs:!1},"T*":{id:et,numArgs:0,variableArgs:!1},Tj:{id:tt,numArgs:1,variableArgs:!1},TJ:{id:at,numArgs:1,variableArgs:!1},"'":{id:nt,numArgs:1,variableArgs:!1},'"':{id:st,numArgs:3,variableArgs:!1},d0:{id:rt,numArgs:2,variableArgs:!1},d1:{id:it,numArgs:6,variableArgs:!1},CS:{id:ot,numArgs:1,variableArgs:!1},cs:{id:lt,numArgs:1,variableArgs:!1},SC:{id:ft,numArgs:4,variableArgs:!0},SCN:{id:ct,numArgs:33,variableArgs:!0},sc:{id:ht,numArgs:4,variableArgs:!0},scn:{id:ut,numArgs:33,variableArgs:!0},G:{id:mt,numArgs:1,variableArgs:!1},g:{id:pt,numArgs:1,variableArgs:!1},RG:{id:dt,numArgs:3,variableArgs:!1},rg:{id:gt,numArgs:3,variableArgs:!1},K:{id:bt,numArgs:4,variableArgs:!1},k:{id:wt,numArgs:4,variableArgs:!1},sh:{id:jt,numArgs:1,variableArgs:!1},BI:{id:kt,numArgs:0,variableArgs:!1},ID:{id:yt,numArgs:0,variableArgs:!1},EI:{id:qt,numArgs:1,variableArgs:!1},Do:{id:vt,numArgs:1,variableArgs:!1},MP:{id:St,numArgs:1,variableArgs:!1},DP:{id:At,numArgs:2,variableArgs:!1},BMC:{id:xt,numArgs:1,variableArgs:!1},BDC:{id:Ct,numArgs:2,variableArgs:!1},EMC:{id:It,numArgs:0,variableArgs:!1},BX:{id:Ft,numArgs:0,variableArgs:!1},EX:{id:Tt,numArgs:0,variableArgs:!1},BM:null,BD:null,true:null,fa:null,fal:null,fals:null,false:null,nu:null,nul:null,null:null}))}static MAX_INVALID_PATH_OPS=10;constructor(e,t,a=new StateManager){this.parser=new Parser({lexer:new Lexer(e,EvaluatorPreprocessor.opMap),xref:t});this.stateManager=a;this.nonProcessedArgs=[];this._isPathOp=!1;this._numInvalidPathOPS=0}get savedStatesDepth(){return this.stateManager.stateStack.length}read(e){let t=e.args;for(;;){const a=this.parser.getObj();if(a instanceof Cmd){const n=a.cmd,s=EvaluatorPreprocessor.opMap[n];if(!s){warn(`Unknown command "${n}".`);continue}const r=s.id,i=s.numArgs;let o=null!==t?t.length:0;this._isPathOp||(this._numInvalidPathOPS=0);this._isPathOp=r>=Se&&r<=Ee;if(s.variableArgs)o>i&&info(`Command ${n}: expected [0, ${i}] args, but received ${o} args.`);else{if(o!==i){const e=this.nonProcessedArgs;for(;o>i;){e.push(t.shift());o--}for(;o<i&&0!==e.length;){null===t&&(t=[]);t.unshift(e.pop());o++}}if(o<i){const e=`command ${n}: expected ${i} args, but received ${o} args.`;if(this._isPathOp&&++this._numInvalidPathOPS>EvaluatorPreprocessor.MAX_INVALID_PATH_OPS)throw new FormatError(`Invalid ${e}`);warn(`Skipping ${e}`);null!==t&&(t.length=0);continue}}this.preprocessCommand(r,t);e.fn=r;e.args=t;return!0}if(a===oa)return!1;if(null!==a){null===t&&(t=[]);t.push(a);if(t.length>33)throw new FormatError("Too many arguments")}}}preprocessCommand(e,t){switch(0|e){case ye:this.stateManager.save();break;case qe:this.stateManager.restore();break;case ve:this.stateManager.transform(t)}}}class DefaultAppearanceEvaluator extends EvaluatorPreprocessor{constructor(e){super(new StringStream(e))}parse(){const e={fn:0,args:[]},t={fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3)};try{for(;;){e.args.length=0;if(!this.read(e))break;if(0!==this.savedStatesDepth)continue;const{fn:a,args:n}=e;switch(0|a){case Ve:const[e,a]=n;e instanceof Name&&(t.fontName=e.name);"number"==typeof a&&a>0&&(t.fontSize=a);break;case gt:ColorSpaceUtils.rgb.getRgbItem(n,0,t.fontColor,0);break;case pt:ColorSpaceUtils.gray.getRgbItem(n,0,t.fontColor,0);break;case wt:ColorSpaceUtils.cmyk.getRgbItem(n,0,t.fontColor,0)}}}catch(e){warn(`parseDefaultAppearance - ignoring errors: "${e}".`)}return t}}function parseDefaultAppearance(e){return new DefaultAppearanceEvaluator(e).parse()}class AppearanceStreamEvaluator extends EvaluatorPreprocessor{constructor(e,t,a){super(e);this.stream=e;this.xref=t;this.globalColorSpaceCache=a;this.resources=e.dict?.get("Resources")}parse(){const e={fn:0,args:[]};let t={scaleFactor:1,fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3),fillColorSpace:ColorSpaceUtils.gray},a=!1;const n=[];try{for(;;){e.args.length=0;if(a||!this.read(e))break;const{fn:s,args:r}=e;switch(0|s){case ye:n.push({scaleFactor:t.scaleFactor,fontSize:t.fontSize,fontName:t.fontName,fontColor:t.fontColor.slice(),fillColorSpace:t.fillColorSpace});break;case qe:t=n.pop()||t;break;case Ze:const e=Util.transform(this.stateManager.state.ctm,r);t.scaleFactor*=Math.hypot(e[0],e[1]);break;case Ve:const[s,i]=r;s instanceof Name&&(t.fontName=s.name);"number"==typeof i&&i>0&&(t.fontSize=i);break;case lt:t.fillColorSpace=ColorSpaceUtils.parse({cs:r[0],xref:this.xref,resources:this.resources,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:this._localColorSpaceCache});break;case ht:t.fillColorSpace.getRgbItem(r,0,t.fontColor,0);break;case gt:ColorSpaceUtils.rgb.getRgbItem(r,0,t.fontColor,0);break;case pt:ColorSpaceUtils.gray.getRgbItem(r,0,t.fontColor,0);break;case wt:ColorSpaceUtils.cmyk.getRgbItem(r,0,t.fontColor,0);break;case tt:case at:case nt:case st:t.fontSize*=t.scaleFactor;a=!0}}}catch(e){warn(`parseAppearanceStream - ignoring errors: "${e}".`)}this.stream.reset();delete t.scaleFactor;delete t.fillColorSpace;return t}get _localColorSpaceCache(){return shadow(this,"_localColorSpaceCache",new LocalColorSpaceCache)}get _pdfFunctionFactory(){return shadow(this,"_pdfFunctionFactory",new PDFFunctionFactory({xref:this.xref}))}}function getPdfColor(e,t){if(e[0]===e[1]&&e[1]===e[2]){return`${numberToString(e[0]/255)} ${t?"g":"G"}`}return Array.from(e,e=>numberToString(e/255)).join(" ")+" "+(t?"rg":"RG")}class FakeUnicodeFont{static#ft=1;constructor(e,t){this.xref=e;this.widths=null;this.firstChar=1/0;this.lastChar=-1/0;this.fontFamily=t;const a=new OffscreenCanvas(1,1);this.ctxMeasure=a.getContext("2d",{willReadFrequently:!0});this.fontName=Name.get(`InvalidPDFjsFont_${t}_${FakeUnicodeFont.#ft++}`)}get fontDescriptorRef(){if(!FakeUnicodeFont._fontDescriptorRef){const e=new Dict(this.xref);e.setIfName("Type","FontDescriptor");e.set("FontName",this.fontName);e.set("FontFamily","MyriadPro Regular");e.set("FontBBox",[0,0,0,0]);e.setIfName("FontStretch","Normal");e.set("FontWeight",400);e.set("ItalicAngle",0);FakeUnicodeFont._fontDescriptorRef=this.xref.getNewPersistentRef(e)}return FakeUnicodeFont._fontDescriptorRef}get descendantFontRef(){const e=new Dict(this.xref);e.set("BaseFont",this.fontName);e.setIfName("Type","Font");e.setIfName("Subtype","CIDFontType0");e.setIfName("CIDToGIDMap","Identity");e.set("FirstChar",this.firstChar);e.set("LastChar",this.lastChar);e.set("FontDescriptor",this.fontDescriptorRef);e.set("DW",1e3);const t=[],a=[...this.widths].sort();let n=null,s=null;for(const[e,r]of a)if(n)if(e===n+s.length)s.push(r);else{t.push(n,s);n=e;s=[r]}else{n=e;s=[r]}n&&t.push(n,s);e.set("W",t);const r=new Dict(this.xref);r.set("Ordering","Identity");r.set("Registry","Adobe");r.set("Supplement",0);e.set("CIDSystemInfo",r);return this.xref.getNewPersistentRef(e)}get baseFontRef(){const e=new Dict(this.xref);e.set("BaseFont",this.fontName);e.setIfName("Type","Font");e.setIfName("Subtype","Type0");e.setIfName("Encoding","Identity-H");e.set("DescendantFonts",[this.descendantFontRef]);e.setIfName("ToUnicode","Identity-H");return this.xref.getNewPersistentRef(e)}get resources(){const e=new Dict(this.xref),t=new Dict(this.xref);t.set(this.fontName.name,this.baseFontRef);e.set("Font",t);return e}_createContext(){this.widths=new Map;this.ctxMeasure.font=`1000px ${this.fontFamily}`;return this.ctxMeasure}createFontResources(e){const t=this._createContext();for(const a of e.split(/\r\n?|\n/))for(const e of a.split("")){const a=e.charCodeAt(0);if(this.widths.has(a))continue;const n=t.measureText(e),s=Math.ceil(n.width);this.widths.set(a,s);this.firstChar=Math.min(a,this.firstChar);this.lastChar=Math.max(a,this.lastChar)}return this.resources}static getFirstPositionInfo(e,t,a){const[n,s,r,i]=e;let o=r-n,l=i-s;t%180!=0&&([o,l]=[l,o]);const f=1.35*a;return{coords:[0,l+.35*a-f],bbox:[0,0,o,l],matrix:0!==t?getRotationMatrix(t,l,f):void 0}}createAppearance(e,t,a,n,s,r){const i=this._createContext(),o=[];let l=-1/0;for(const t of e.split(/\r\n?|\n/)){o.push(t);const e=i.measureText(t).width;l=Math.max(l,e);for(const e of codePointIter(t)){const t=String.fromCodePoint(e);let a=this.widths.get(e);if(void 0===a){const n=i.measureText(t);a=Math.ceil(n.width);this.widths.set(e,a);this.firstChar=Math.min(e,this.firstChar);this.lastChar=Math.max(e,this.lastChar)}}}l*=n/1e3;const[f,c,h,u]=t;let m=h-f,p=u-c;a%180!=0&&([m,p]=[p,m]);const d=l>m?m/l:1;let g=1;const b=1.35*n,w=.35*n,j=b*o.length;j>p&&(g=p/j);const k=n*Math.min(d,g),y=["q",`0 0 ${numberToString(m)} ${numberToString(p)} re W n`,"BT",`1 0 0 1 0 ${numberToString(p+w)} Tm 0 Tc ${getPdfColor(s,!0)}`,`/${this.fontName.name} ${numberToString(k)} Tf`],{resources:q}=this;if(1!==(r="number"==typeof r&&r>=0&&r<=1?r:1)){y.push("/R0 gs");const e=new Dict(this.xref),t=new Dict(this.xref);t.set("ca",r);t.set("CA",r);t.setIfName("Type","ExtGState");e.set("R0",t);q.set("ExtGState",e)}const v=numberToString(b);for(const e of o)y.push(`0 -${v} Td <${stringToUTF16HexString(e)}> Tj`);y.push("ET","Q");const S=y.join("\n"),x=new Dict(this.xref);x.setIfName("Subtype","Form");x.setIfName("Type","XObject");x.set("BBox",[0,0,m,p]);x.set("Length",S.length);x.set("Resources",q);if(a){const e=getRotationMatrix(a,m,p);x.set("Matrix",e)}return new StringStream(S,x)}}const Wi=["m/d","m/d/yy","mm/dd/yy","mm/yy","d-mmm","d-mmm-yy","dd-mmm-yy","yy-mm-dd","mmm-yy","mmmm-yy","mmm d, yyyy","mmmm d, yyyy","m/d/yy h:MM tt","m/d/yy HH:MM"],Xi=["HH:MM","h:MM tt","HH:MM:ss","h:MM:ss tt"];class NameOrNumberTree{constructor(e,t,a){this.root=e;this.xref=t;this._type=a}getAll(e=!1){const t=new Map;if(!this.root)return t;const a=this.xref,n=new RefSet;this.root instanceof Ref&&n.put(this.root);const s=[this.root];for(const r of s){const i=a.fetchIfRef(r);if(!(i instanceof Dict))continue;if(i.has("Kids")){const e=i.get("Kids");if(!Array.isArray(e))continue;for(const t of e){if(t instanceof Ref){if(n.has(t))throw new FormatError(`Duplicate entry in "${this._type}" tree.`);n.put(t)}s.push(t)}continue}const o=i.get(this._type);if(Array.isArray(o))for(let n=0,s=o.length;n<s;n+=2)t.set(e?o[n]:a.fetchIfRef(o[n]),e?o[n+1]:a.fetchIfRef(o[n+1]))}return t}getRaw(e){if(!this.root)return null;const t=this.xref;let a=t.fetchIfRef(this.root),n=0;for(;a.has("Kids");){if(++n>10){warn(`Search depth limit reached for "${this._type}" tree.`);return null}const s=a.get("Kids");if(!Array.isArray(s))return null;let r=0,i=s.length-1;for(;r<=i;){const n=r+i>>1,o=t.fetchIfRef(s[n]),l=o.get("Limits");if(e<t.fetchIfRef(l[0]))i=n-1;else{if(!(e>t.fetchIfRef(l[1]))){a=o;break}r=n+1}}if(r>i)return null}const s=a.get(this._type);if(Array.isArray(s)){let a=0,n=s.length-2;for(;a<=n;){const r=a+n>>1,i=r+(1&r),o=t.fetchIfRef(s[i]);if(e<o)n=i-2;else{if(!(e>o))return s[i+1];a=i+2}}}return null}get(e){return this.xref.fetchIfRef(this.getRaw(e))}}class NameTree extends NameOrNumberTree{constructor(e,t){super(e,t,"Names")}}class NumberTree extends NameOrNumberTree{constructor(e,t){super(e,t,"Nums")}}function clearGlobalCaches(){!function clearPatternCaches(){Ja?.clear()}();!function clearPrimitiveCaches(){la.clear();fa.clear();ca.clear()}();!function clearUnicodeCaches(){qn.clear()}();WasmImage.cleanup()}class FileSpec{constructor(e){if(e instanceof Dict){this.root=e;e.has("RF")&&warn("Related file specifications are not supported")}}get filename(){const e=FileSpec.pickPlatformItem(this.root);return e&&"string"==typeof e?stringToPDFString(e,!0).replaceAll("\\\\","\\").replaceAll("\\/","/").replaceAll("\\","/"):""}get description(){const e=this.root?.get("Desc");return e&&"string"==typeof e?stringToPDFString(e):""}get serializable(){const{filename:e,description:t}=this;return{rawFilename:e,filename:(a=e,a.substring(a.lastIndexOf("/")+1))||"unnamed",description:t};var a}static pickPlatformItem(e,t=!1){if(e instanceof Dict)for(const a of["UF","F","Unix","Mac","DOS"])if(e.has(a))return t?e.getRaw(a):e.get(a);return null}static hasEmbeddedFile(e){return this.pickPlatformItem(e.get("EF"))instanceof BaseStream}static readContent(e){if(!(e instanceof Dict))return null;const t=this.pickPlatformItem(e.get("EF"));if(!(t instanceof BaseStream)){warn("Embedded file specification points to non-existing/invalid content");return null}return this.readStreamContent(t)}static readStreamContent(e){const t=e.dict?.xref?.encrypt;if(null===t?.encryptionKey)throw new PasswordException("No password given",ea);return e.getBytes()}}const Ki=0,Gi=-2,Vi=-3,$i=-4,Yi=-5,Ji=-6,Qi=-9;function isWhitespace(e,t){const a=e[t];return" "===a||"\n"===a||"\r"===a||"\t"===a}class XMLParserBase{static get _entityRegex(){return shadow(this,"_entityRegex",/&(?:#x([^;&]+)|#([^;&]+)|([^;&]+));/g)}_resolveEntities(e){return e.replaceAll(XMLParserBase._entityRegex,(e,t,a,n)=>{if(t||a){const n=t?parseInt(t,16):parseInt(a,10);return n>=0&&n<=1114111?String.fromCodePoint(n):e}switch(n){case"lt":return"<";case"gt":return">";case"amp":return"&";case"quot":return'"';case"apos":return"'"}return this.onResolveEntity(n)})}_parseContent(e,t){const a=[];let n=t;function skipWs(){for(;n<e.length&&isWhitespace(e,n);)++n}for(;n<e.length&&!isWhitespace(e,n)&&">"!==e[n]&&"/"!==e[n];)++n;const s=e.substring(t,n);skipWs();for(;n<e.length&&">"!==e[n]&&"/"!==e[n]&&"?"!==e[n];){skipWs();let t="",s="";for(;n<e.length&&!isWhitespace(e,n)&&"="!==e[n];){t+=e[n];++n}skipWs();if("="!==e[n])return null;++n;skipWs();const r=e[n];if('"'!==r&&"'"!==r)return null;const i=e.indexOf(r,++n);if(i<0)return null;s=e.substring(n,i);a.push({name:t,value:this._resolveEntities(s)});n=i+1;skipWs()}return{name:s,attributes:a,parsed:n-t}}_parseProcessingInstruction(e,t){let a=t;for(;a<e.length&&!isWhitespace(e,a)&&">"!==e[a]&&"?"!==e[a]&&"/"!==e[a];)++a;const n=e.substring(t,a);!function skipWs(){for(;a<e.length&&isWhitespace(e,a);)++a}();const s=a;for(;a<e.length&&("?"!==e[a]||">"!==e[a+1]);)++a;return{name:n,value:e.substring(s,a),parsed:a-t}}parseXml(e){let t=0;for(;t<e.length;){let a=t;if("<"===e[t]){++a;let t;switch(e[a]){case"/":++a;t=e.indexOf(">",a);if(t<0){this.onError(Qi);return}this.onEndElement(e.substring(a,t));a=t+1;break;case"?":++a;const n=this._parseProcessingInstruction(e,a);if("?>"!==e.substring(a+n.parsed,a+n.parsed+2)){this.onError(Vi);return}this.onPi(n.name,n.value);a+=n.parsed+2;break;case"!":if("--"===e.substring(a+1,a+3)){t=e.indexOf("--\x3e",a+3);if(t<0){this.onError(Yi);return}this.onComment(e.substring(a+3,t));a=t+3}else if("[CDATA["===e.substring(a+1,a+8)){t=e.indexOf("]]>",a+8);if(t<0){this.onError(Gi);return}this.onCdata(e.substring(a+8,t));a=t+3}else{if("DOCTYPE"!==e.substring(a+1,a+8)){this.onError(Ji);return}{const n=e.indexOf("[",a+8);let s=!1;t=e.indexOf(">",a+8);if(t<0){this.onError($i);return}if(n>0&&t>n){t=e.indexOf("]>",a+8);if(t<0){this.onError($i);return}s=!0}const r=e.substring(a+8,t+(s?1:0));this.onDoctype(r);a=t+(s?2:1)}}break;default:const s=this._parseContent(e,a);if(null===s){this.onError(Ji);return}let r=!1;if("/>"===e.substring(a+s.parsed,a+s.parsed+2))r=!0;else if(">"!==e.substring(a+s.parsed,a+s.parsed+1)){this.onError(Qi);return}this.onBeginElement(s.name,s.attributes,r);a+=s.parsed+(r?2:1)}}else{for(;a<e.length&&"<"!==e[a];)a++;const n=e.substring(t,a);this.onText(this._resolveEntities(n))}t=a}}onResolveEntity(e){return`&${e};`}onPi(e,t){}onComment(e){}onCdata(e){}onDoctype(e){}onText(e){}onBeginElement(e,t,a){}onEndElement(e){}onError(e){}}class SimpleDOMNode{constructor(e,t){this.nodeName=e;this.nodeValue=t;Object.defineProperty(this,"parentNode",{value:null,writable:!0})}get firstChild(){return this.childNodes?.[0]}get nextSibling(){const e=this.parentNode.childNodes;if(!e)return;const t=e.indexOf(this);return-1===t?void 0:e[t+1]}get textContent(){return this.childNodes?this.childNodes.map(e=>e.textContent).join(""):this.nodeValue||""}get children(){return this.childNodes||[]}hasChildNodes(){return this.childNodes?.length>0}searchNode(e,t){if(t>=e.length)return this;const a=e[t];if(a.name.startsWith("#")&&t<e.length-1)return this.searchNode(e,t+1);const n=[];let s=this;for(;;){if(a.name===s.nodeName){if(0!==a.pos){if(0===n.length)return null;{const[r]=n.pop();let i=0;for(const n of r.childNodes)if(a.name===n.nodeName){if(i===a.pos)return n.searchNode(e,t+1);i++}return s.searchNode(e,t+1)}}{const a=s.searchNode(e,t+1);if(null!==a)return a}}if(s.childNodes?.length>0){n.push([s,0]);s=s.childNodes[0]}else{if(0===n.length)return null;for(;0!==n.length;){const[e,t]=n.pop(),a=t+1;if(a<e.childNodes.length){n.push([e,a]);s=e.childNodes[a];break}}if(0===n.length)return null}}}dump(e){if("#text"!==this.nodeName){e.push(`<${this.nodeName}`);if(this.attributes)for(const t of this.attributes)e.push(` ${t.name}="${encodeToXmlString(t.value)}"`);if(this.hasChildNodes()){e.push(">");for(const t of this.childNodes)t.dump(e);e.push(`</${this.nodeName}>`)}else this.nodeValue?e.push(`>${encodeToXmlString(this.nodeValue)}</${this.nodeName}>`):e.push("/>")}else e.push(encodeToXmlString(this.nodeValue))}}class SimpleXMLParser extends XMLParserBase{constructor({hasAttributes:e=!1,lowerCaseName:t=!1}){super();this._currentFragment=null;this._stack=null;this._errorCode=Ki;this._hasAttributes=e;this._lowerCaseName=t}parseFromString(e){this._currentFragment=[];this._stack=[];this._errorCode=Ki;this.parseXml(e);if(this._errorCode!==Ki)return;const[t]=this._currentFragment;return t?{documentElement:t}:void 0}onText(e){if(function isWhitespaceString(e){for(let t=0,a=e.length;t<a;t++)if(!isWhitespace(e,t))return!1;return!0}(e))return;const t=new SimpleDOMNode("#text",e);this._currentFragment.push(t)}onCdata(e){const t=new SimpleDOMNode("#text",e);this._currentFragment.push(t)}onBeginElement(e,t,a){this._lowerCaseName&&(e=e.toLowerCase());const n=new SimpleDOMNode(e);n.childNodes=[];this._hasAttributes&&(n.attributes=t);this._currentFragment.push(n);if(!a){this._stack.push(this._currentFragment);this._currentFragment=n.childNodes}}onEndElement(e){this._currentFragment=this._stack.pop()||[];const t=this._currentFragment.at(-1);if(!t)return null;for(const e of t.childNodes)e.parentNode=t;return t}onError(e){this._errorCode=e}}class MetadataParser{constructor(e){e=this._repair(e);const t=new SimpleXMLParser({lowerCaseName:!0}).parseFromString(e);this._metadataMap=new Map;this._data=e;t&&this._parse(t)}_repair(e){return e.replace(/^[^<]+/,"").replaceAll(/>\\376\\377([^<]+)/g,function(e,t){const a=t.replaceAll(/\\([0-3])([0-7])([0-7])/g,(e,t,a,n)=>String.fromCharCode(64*t+8*a+1*n)).replaceAll(/&(amp|apos|gt|lt|quot);/g,function(e,t){switch(t){case"amp":return"&";case"apos":return"'";case"gt":return">";case"lt":return"<";case"quot":return'"'}throw new Error(`_repair: ${t} isn't defined.`)}),n=[">"];for(let e=0,t=a.length;e<t;e+=2){const t=256*a.charCodeAt(e)+a.charCodeAt(e+1);t>=32&&t<127&&60!==t&&62!==t&&38!==t?n.push(String.fromCharCode(t)):n.push("&#x"+(65536+t).toString(16).substring(1)+";")}return n.join("")})}_getSequence(e){const t=e.nodeName;return"rdf:bag"!==t&&"rdf:seq"!==t&&"rdf:alt"!==t?null:e.childNodes.filter(e=>"rdf:li"===e.nodeName)}_parseArray(e){if(!e.hasChildNodes())return;const[t]=e.childNodes,a=this._getSequence(t)||[];this._metadataMap.set(e.nodeName,a.map(e=>e.textContent.trim()))}_parse(e){let t=e.documentElement;if("rdf:rdf"!==t.nodeName){t=t.firstChild;for(;t&&"rdf:rdf"!==t.nodeName;)t=t.nextSibling}if(t&&"rdf:rdf"===t.nodeName&&t.hasChildNodes())for(const e of t.childNodes)if("rdf:description"===e.nodeName)for(const t of e.childNodes){const e=t.nodeName;switch(e){case"#text":continue;case"dc:creator":case"dc:subject":this._parseArray(t);continue}this._metadataMap.set(e,t.textContent.trim())}}get serializable(){return{parsedData:this._metadataMap,rawData:this._data}}}function getSoundFormat(e){if(!e||e.has("CO"))return null;const t=e.get("R");if(!Number.isInteger(t)||t<=0)return null;const a=e.get("C")??1;if(!Number.isInteger(a)||a<1||a>2)return null;const n=e.get("B")??8;if(8!==n&&16!==n)return null;const s=e.get("E");let r="Raw";void 0!==s&&(r=s instanceof Name?s.name:null);return"Raw"!==r&&"Signed"!==r?null:{channels:a,sampleRate:t,bitsPerSample:n,encoding:r}}const Zi=[["RowSpan","rowSpan"],["ColSpan","colSpan"]],eo=1,to=2,ao=3,no=4,so=5;class StructTreeRoot{kidRefToPosition=void 0;parentTree=null;roleMap=new Map;structParentIds=null;constructor(e,t,a){this.xref=e;this.dict=t;this.ref=a instanceof Ref?a:null;const n=t.get("RoleMap");if(n instanceof Dict)for(const[e,t]of n)t instanceof Name&&this.roleMap.set(e,t.name);const s=t.getRaw("ParentTree");s&&(this.parentTree=new NumberTree(s,e))}getKidPosition(e){if(void 0===this.kidRefToPosition){const e=this.dict.get("K");if(Array.isArray(e)){const t=this.kidRefToPosition=new Map;for(let a=0,n=e.length;a<n;a++){const n=e[a];n&&t.set(n.toString(),a)}}else this.kidRefToPosition=e instanceof Dict?new Map([[e.objId,0]]):e?null:new Map}return this.kidRefToPosition?this.kidRefToPosition.get(e)??NaN:-1}#ct(e,t,a,n){e instanceof Ref&&!(t<0)&&(this.structParentIds??=new RefMap).getOrPutComputed(e,makeArr).push([t,a,n])}addAnnotationIdToPage(e,t,a){this.#ct(e,t,no,a instanceof Ref?a.toString():null)}static async canCreateStructureTree({catalogRef:e,pdfManager:t,newAnnotationsByPage:a}){if(!(e instanceof Ref)){warn("Cannot save the struct tree: no catalog reference.");return!1}let n=0,s=!0;for(const[e,r]of a){const{ref:a}=await t.getPage(e);if(!(a instanceof Ref)){warn(`Cannot save the struct tree: page ${e} has no ref.`);s=!0;break}for(const e of r)if(e.accessibilityData?.type){e.parentTreeId=n++;s=!1}}if(s){for(const e of a.values())for(const t of e)delete t.parentTreeId;return!1}return!0}static async createStructureTree({newAnnotationsByPage:e,xref:t,catalogRef:a,pdfManager:n,changes:s}){const r=await n.ensureCatalog("cloneDict"),i=new RefMap;i.put(a,r);const o=t.getNewTemporaryRef();r.set("StructTreeRoot",o);const l=new Dict(t);l.set("Type",Name.get("StructTreeRoot"));const f=t.getNewTemporaryRef();l.set("ParentTree",f);const c=[];l.set("K",c);i.put(o,l);const h=new Dict(t),u=[];h.set("Nums",u);const m=await this.#ht({newAnnotationsByPage:e,structTreeRootRef:o,structTreeRoot:null,kids:c,nums:u,xref:t,pdfManager:n,changes:s,cache:i});l.set("ParentTreeNextKey",m);i.put(f,h);for(const[e,t]of i.items())s.put(e,{data:t})}async canUpdateStructTree({pdfManager:e,newAnnotationsByPage:t}){if(!this.ref){warn("Cannot update the struct tree: no root reference.");return!1}let a=this.dict.get("ParentTreeNextKey");if(!Number.isInteger(a)||a<0){warn("Cannot update the struct tree: invalid next key.");return!1}const n=this.dict.get("ParentTree");if(!(n instanceof Dict)){warn("Cannot update the struct tree: ParentTree isn't a dict.");return!1}const s=n.get("Nums");if(!Array.isArray(s)){warn("Cannot update the struct tree: nums isn't an array.");return!1}const r=new NumberTree(n,this.xref);for(const a of t.keys()){const{pageDict:t}=await e.getPage(a);if(!t.has("StructParents"))continue;const n=t.get("StructParents");if(!Number.isInteger(n)||!Array.isArray(r.get(n))){warn(`Cannot save the struct tree: page ${a} has a wrong id.`);return!1}}let i=!0;for(const[n,s]of t){const{pageDict:t}=await e.getPage(n);StructTreeRoot.#ut({elements:s,xref:this.xref,pageDict:t,numberTree:r});for(const e of s)if(e.accessibilityData?.type){e.accessibilityData.structParent>=0||(e.parentTreeId=a++);i=!1}}if(i){for(const e of t.values())for(const t of e){delete t.parentTreeId;delete t.structTreeParent}return!1}return!0}async updateStructureTree({newAnnotationsByPage:e,pdfManager:t,changes:a}){const{ref:n,xref:s}=this,r=this.dict.clone(),i=new RefMap;i.put(n,r);let o,l=r.getRaw("ParentTree");if(l instanceof Ref)o=s.fetch(l);else{o=l;l=s.getNewTemporaryRef();r.set("ParentTree",l)}o=o.clone();i.put(l,o);let f=o.getRaw("Nums"),c=null;if(f instanceof Ref){c=f;f=s.fetch(c)}f=f.slice();c||o.set("Nums",f);const h=await StructTreeRoot.#ht({newAnnotationsByPage:e,structTreeRootRef:n,structTreeRoot:this,kids:null,nums:f,xref:s,pdfManager:t,changes:a,cache:i});if(-1!==h){r.set("ParentTreeNextKey",h);c&&i.put(c,f);for(const[e,t]of i.items())a.put(e,{data:t})}}static async#ht({newAnnotationsByPage:e,structTreeRootRef:t,structTreeRoot:a,kids:n,nums:s,xref:r,pdfManager:i,changes:o,cache:l}){const f=Name.get("OBJR");let c,h=-1;for(const[u,m]of e){const e=await i.getPage(u),{ref:p}=e,d=p instanceof Ref;for(const{accessibilityData:i,ref:g,parentTreeId:b,structTreeParent:w}of m){if(!i?.type)continue;const{structParent:m}=i;if(a&&Number.isInteger(m)&&m>=0){let t=(c||=new Map).get(u);if(void 0===t){t=new StructTreePage(a,e.pageDict).collectObjects(p);c.set(u,t)}const n=t?.get(m);if(n){const e=r.fetch(n).clone();StructTreeRoot.#mt(e,i);o.put(n,{data:e});continue}}h=Math.max(h,b);const j=r.getNewTemporaryRef(),k=new Dict(r);StructTreeRoot.#mt(k,i);await this.#pt({structTreeParent:w,tagDict:k,newTagRef:j,structTreeRootRef:t,fallbackKids:n,xref:r,cache:l});const y=new Dict(r);k.set("K",y);y.set("Type",f);d&&y.set("Pg",p);y.set("Obj",g);l.put(j,k);s.push(b,j)}}return h+1}static#mt(e,{type:t,title:a,lang:n,alt:s,expanded:r,actualText:i}){e.set("S",Name.get(t));a&&e.set("T",stringToAsciiOrUTF16BE(a));n&&e.set("Lang",stringToAsciiOrUTF16BE(n));s&&e.set("Alt",stringToAsciiOrUTF16BE(s));r&&e.set("E",stringToAsciiOrUTF16BE(r));i&&e.set("ActualText",stringToAsciiOrUTF16BE(i))}static#ut({elements:e,xref:t,pageDict:a,numberTree:n}){const s=new Map;for(const t of e)if(t.structTreeParentId){const e=parseInt(t.structTreeParentId.split("_mc")[1],10);s.getOrInsertComputed(e,makeArr).push(t)}const r=a.get("StructParents");if(!Number.isInteger(r))return;const i=n.get(r),updateElement=(e,a,n)=>{const r=s.get(e);if(r){const e=a.getRaw("P"),s=t.fetchIfRef(e);if(e instanceof Ref&&s instanceof Dict){const e={ref:n,dict:a};for(const t of r)t.structTreeParent=e}return!0}return!1};for(const e of i){if(!(e instanceof Ref))continue;const a=t.fetch(e),n=a.get("K");if(Number.isInteger(n))updateElement(n,a,e);else if(Array.isArray(n))for(let s of n){s=t.fetchIfRef(s);if(Number.isInteger(s)&&updateElement(s,a,e))break;if(!(s instanceof Dict))continue;if(!isName(s.get("Type"),"MCR"))break;const n=s.get("MCID");if(Number.isInteger(n)&&updateElement(n,a,e))break}}}static async#pt({structTreeParent:e,tagDict:t,newTagRef:a,structTreeRootRef:n,fallbackKids:s,xref:r,cache:i}){let o,l=null;if(e){({ref:l}=e);o=e.dict.getRaw("P")||n}else o=n;t.set("P",o);const f=r.fetchIfRef(o);if(!f){s.push(a);return}const c=i.getOrPutComputed(o,()=>f.clone()),h=c.getRaw("K");let u=h instanceof Ref?i.get(h):null;if(!u){u=r.fetchIfRef(h);u=Array.isArray(u)?u.slice():[h];const e=r.getNewTemporaryRef();c.set("K",e);i.put(e,u)}const m=u.indexOf(l);u.splice(m>=0?m+1:u.length,0,a)}}class StructElementNode{constructor(e,t){this.tree=e;this.xref=e.xref;this.dict=t;this.kids=[];this.parseKids()}get role(){const e=this.dict.get("S"),t=e instanceof Name?e.name:"",{root:a}=this.tree;return a.roleMap.get(t)??t}get mathML(){let e=this.dict.get("AF")||[];Array.isArray(e)||(e=[e]);for(let t of e){t=this.xref.fetchIfRef(t);if(!isDict(t,"Filespec")||!isName(t.get("AFRelationship"),"Supplement"))continue;const e=FileSpec.pickPlatformItem(t.get("EF"));if(e instanceof BaseStream&&isDict(e.dict,"EmbeddedFile")&&isName(e.dict.get("Subtype"),"application/mathml+xml"))return stringToUTF8String(e.getString())}for(const e of this.attributes)if(isName(e.get("O"),"MSFT_Office")){const t=e.get("MSFT_MathML");return t?stringToPDFString(t):null}return null}#dt(e,t){const a=[e],n=new RefSet;for(;a.length>0;){if((e=a.pop())instanceof Ref){if(n.has(e))continue;n.put(e);e=this.xref.fetch(e)}e instanceof BaseStream&&(e=e.dict);if(e instanceof Dict)t.push(e);else if(Array.isArray(e))for(let t=e.length-1;t>=0;t--)Number.isInteger(e[t])||a.push(e[t])}}get attributes(){const e=[],t=this.dict.getArray("C");if(void 0!==t){const a=this.tree.rootDict?.get("ClassMap");if(a instanceof Dict)for(const n of Array.isArray(t)?t:[t])n instanceof Name&&this.#dt(a.getRaw(n.name),e)}this.#dt(this.dict.getRaw("A"),e);return shadow(this,"attributes",e)}get tableAttributes(){const{role:e}=this;if("Table"!==e&&"TH"!==e&&"TD"!==e)return null;const t=new Map;for(const a of this.attributes)if(isName(a.get("O"),"Table"))if("Table"!==e){for(const[e,n]of Zi){if(!a.has(e))continue;const s=a.get(e);Number.isInteger(s)&&s>1?t.set(n,s):t.delete(n)}if(a.has("Headers")){t.delete("headers");const e=a.getArray("Headers");if(Array.isArray(e)){const a=e.filter(e=>"string"==typeof e).map(stringToPDFString);a.length>0&&t.set("headers",a)}}if("TH"===e&&a.has("Scope")){t.delete("scope");const e=a.get("Scope");e instanceof Name&&["Row","Column","Both"].includes(e.name)&&t.set("scope",e.name)}if("TH"===e&&a.has("Short")){t.delete("short");const e=a.get("Short");"string"==typeof e&&e&&t.set("short",stringToPDFString(e))}}else if(a.has("Summary")){const e=a.get("Summary");"string"==typeof e&&e?t.set("summary",stringToPDFString(e)):t.delete("summary")}return t.size?t:null}parseKids(){let e=null;const t=this.dict.getRaw("Pg");t instanceof Ref&&(e=t.toString());const a=this.dict.get("K");if(Array.isArray(a))for(const t of a){const a=this.parseKid(e,this.xref.fetchIfRef(t));a&&this.kids.push(a)}else{const t=this.parseKid(e,a);t&&this.kids.push(t)}}parseKid(e,t){if(Number.isInteger(t))return this.tree.pageDict.objId!==e?null:new StructElement({type:eo,mcid:t,pageObjId:e});if(!(t instanceof Dict))return null;const a=t.getRaw("Pg");a instanceof Ref&&(e=a.toString());const n=t.get("Type")instanceof Name?t.get("Type").name:null;if("MCR"===n){if(this.tree.pageDict.objId!==e)return null;const a=t.getRaw("Stm");return new StructElement({type:to,refObjId:a instanceof Ref?a.toString():null,pageObjId:e,mcid:t.get("MCID")})}if("OBJR"===n){if(this.tree.pageDict.objId!==e)return null;const a=t.getRaw("Obj");return new StructElement({type:ao,refObjId:a instanceof Ref?a.toString():null,pageObjId:e})}return new StructElement({type:so,dict:t})}}class StructElement{constructor({type:e,dict:t=null,mcid:a=null,pageObjId:n=null,refObjId:s=null}){this.type=e;this.dict=t;this.mcid=a;this.pageObjId=n;this.refObjId=s;this.parentNode=null}}class StructTreePage{constructor(e,t){this.root=e;this.xref=e?.xref??null;this.rootDict=e?.dict??null;this.pageDict=t;this.nodes=[]}collectObjects(e){if(!(this.root&&this.rootDict&&e instanceof Ref))return null;const t=this.rootDict.get("ParentTree");if(!t)return null;const a=this.root.structParentIds?.get(e);if(!a)return null;const n=new Map,s=new NumberTree(t,this.xref);for(const[e]of a){const t=s.getRaw(e);t instanceof Ref&&n.set(e,t)}return n}parse(e){if(!(this.root&&this.rootDict&&e instanceof Ref))return;const{parentTree:t}=this.root;if(!t)return;const a=this.pageDict.get("StructParents"),n=this.root.structParentIds?.get(e);if(!Number.isInteger(a)&&!n)return;const s=new Map;if(Number.isInteger(a)){const e=t.get(a);if(Array.isArray(e))for(const t of e)t instanceof Ref&&this.addNode(this.xref.fetch(t),s)}if(n)for(const[e,a,r]of n){const n=t.get(e);if(!n)continue;const i=this.addNode(this.xref.fetchIfRef(n),s);if(i&&r)for(const e of i.kids)e.type===ao&&e.refObjId===r&&(e.type=a)}}addNode(e,t,a=0){if(a>40){warn("StructTree MAX_DEPTH reached.");return null}if(!(e instanceof Dict))return null;if(t.has(e))return t.get(e);const n=new StructElementNode(this,e);t.set(e,n);switch(n.role){case"L":case"LBody":case"LI":case"Table":case"THead":case"TBody":case"TFoot":case"TR":for(const e of n.kids)e.type===so&&this.addNode(e.dict,t,a-1)}const s=e.get("P");if(!(s instanceof Dict)||isName(s.get("Type"),"StructTreeRoot")){this.addTopLevelNode(e,n)||t.delete(e);return n}const r=this.addNode(s,t,a+1);if(!r)return n;let i=!1;for(const t of r.kids)if(t.type===so&&t.dict===e){t.parentNode=n;i=!0}i||t.delete(e);return n}addTopLevelNode(e,t){const a=this.root.getKidPosition(e.objId);if(isNaN(a))return!1;-1!==a&&(this.nodes[a]=t);return!0}get serializable(){function nodeToSerializable(e,t,a=0){if(a>40){warn("StructTree too deep to be fully serialized.");return}const n=Object.create(null);n.role=e.role;n.children=[];t.children.push(n);let s=e.dict.get("Alt");"string"!=typeof s&&(s=e.dict.get("ActualText"));"string"==typeof s&&(n.alt=stringToPDFString(s));const r=e.dict.get("ID");"TH"===n.role&&"string"==typeof r&&r&&(n.structId=stringToPDFString(r));e.tableAttributes?.forEach((e,t)=>{n[t]=e});if("Formula"===n.role)try{const{mathML:t}=e;t&&(n.mathML=t)}catch(e){if(e instanceof MissingDataException)throw e;warn(`Ignoring mathML: "${e}".`)}let i=null,o=null;for(const t of e.attributes){i=lookupNormalRect(t.getArray("BBox"),i);const e=t.get("Width"),a=t.get("Height");"number"==typeof e&&e>0&&"number"==typeof a&&a>0&&(o=[0,0,e,a])}(i||o)&&(n.bbox=i??o);const l=e.dict.get("Lang");"string"==typeof l&&(n.lang=stringToPDFString(l));for(const t of e.kids){const e=t.type===so?t.parentNode:null;e?nodeToSerializable(e,n,a+1):t.type===eo||t.type===to?n.children.push({type:"content",id:`p${t.pageObjId}_mc${t.mcid}`}):t.type===ao?n.children.push({type:"object",id:t.refObjId}):t.type===no&&n.children.push({type:"annotation",id:`pdfjs_internal_id_${t.refObjId}`})}}const e=Object.create(null);e.children=[];e.role="Root";for(const t of this.nodes)t&&nodeToSerializable(t,e);return e}}const ro=function _isValidExplicitDest(e,t,a){if(!Array.isArray(a)||a.length<2)return!1;const[n,s,...r]=a;if(!e(n)&&!Number.isInteger(n))return!1;if(!t(s))return!1;const i=r.length;let o=!0;switch(s.name){case"XYZ":if(i<2||i>3)return!1;break;case"Fit":case"FitB":return 0===i;case"FitH":case"FitBH":case"FitV":case"FitBV":if(i>1)return!1;break;case"FitR":if(4!==i)return!1;o=!1;break;default:return!1}for(const e of r)if(!("number"==typeof e||o&&null===e))return!1;return!0}.bind(null,e=>e instanceof Ref,isName);function fetchDest(e){e instanceof Dict&&(e=e.get("D"));return ro(e)?e:null}function fetchRemoteDest(e){let t=e.get("D");if(t){t instanceof Name&&(t=t.name);if("string"==typeof t)return stringToPDFString(t,!0);if(ro(t))return JSON.stringify(t)}return null}class Catalog{#gt=null;#bt=new RefMap;#wt=new Map;#jt=new Set;#kt=null;builtInCMapCache=new Map;fontCache=new RefMap;globalColorSpaceCache=new GlobalColorSpaceCache;globalImageCache=new GlobalImageCache;nonBlendModesSet=new RefSet;pageDictCache=new RefMap;pageIndexCache=new RefMap;pageKidsCountCache=new RefMap;standardFontDataCache=new Map;systemFontCache=new Map;constructor(e,t){this.pdfManager=e;this.xref=t;this.#kt=t.getCatalogObj();if(!(this.#kt instanceof Dict))throw new FormatError("Catalog object is not a dictionary.");this.toplevelPagesDict}cloneDict(){return this.#kt.clone()}getAttachmentIdForAnnotation(e,t=!1){let a=this.#bt.get(e);if(!a){const t=`attachmentRef:${e.toString()}`;a=t;let n=1;for(;this.#wt.has(a)||this.attachments?.has(a);)a=`${t}-${n++}`;this.#bt.put(e,a);this.#wt.set(a,e)}t&&this.#jt.add(a);return a}get version(){const e=this.#kt.get("Version");if(e instanceof Name){if(pa.test(e.name))return shadow(this,"version",e.name);warn(`Invalid PDF catalog version: ${e.name}`)}return shadow(this,"version",null)}get lang(){const e=this.#kt.get("Lang");return shadow(this,"lang",e&&"string"==typeof e?stringToPDFString(e):null)}get needsRendering(){return shadow(this,"needsRendering",!0===this.#kt.get("NeedsRendering"))}get collection(){let e=null;try{const t=this.#kt.get("Collection");t instanceof Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof MissingDataException)throw e;info("Cannot fetch Collection entry; assuming no collection is present.")}return shadow(this,"collection",e)}get acroForm(){let e=null;try{const t=this.#kt.get("AcroForm");t instanceof Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof MissingDataException)throw e;info("Cannot fetch AcroForm entry; assuming no forms are present.")}return shadow(this,"acroForm",e)}get acroFormRef(){const e=this.#kt.getRaw("AcroForm");return shadow(this,"acroFormRef",e instanceof Ref?e:null)}get metadata(){const e=this.#kt.getRaw("Metadata");if(!(e instanceof Ref))return shadow(this,"metadata",null);let t=null;try{const a=this.xref.fetch(e,!this.xref.encrypt?.encryptMetadata);if(a instanceof BaseStream&&isDict(a.dict,"Metadata")&&isName(a.dict.get("Subtype"),"XML")){const e=stringToUTF8String(a.getString());e&&(t=new MetadataParser(e).serializable)}}catch(e){if(e instanceof MissingDataException)throw e;info(`Skipping invalid Metadata: "${e}".`)}return shadow(this,"metadata",t)}get markInfo(){let e=null;try{e=this.#yt()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read mark info.")}return shadow(this,"markInfo",e)}#yt(){const e=this.#kt.get("MarkInfo");if(!(e instanceof Dict))return null;const t=new Map;for(const a of["Marked","UserProperties","Suspects"]){const n=e.get(a);t.set(a,!0===n)}return t}get hasStructTree(){return this.#kt.has("StructTreeRoot")}get structTreeRoot(){let e=null;try{e=this.#qt()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable read to structTreeRoot info.")}return shadow(this,"structTreeRoot",e)}#qt(){const e=this.#kt.getRaw("StructTreeRoot"),t=this.xref.fetchIfRef(e);return t instanceof Dict?new StructTreeRoot(this.xref,t,e):null}get toplevelPagesDict(){const e=this.#kt.get("Pages");if(!(e instanceof Dict))throw new FormatError("Invalid top-level pages dictionary.");return shadow(this,"toplevelPagesDict",e)}get documentOutline(){let e=null;try{e=this.#vt()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read document outline.")}return shadow(this,"documentOutline",e)}#vt(e={}){let t=this.#kt.get("Outlines");if(!(t instanceof Dict))return null;t=t.getRaw("First");if(!(t instanceof Ref))return null;const a={items:[]},n=[{obj:t,parent:a}],s=new RefSet;s.put(t);const r=this.xref,i=new Uint8ClampedArray(3);for(;n.length>0;){const a=n.shift(),o=r.fetchIfRef(a.obj);if(null===o)continue;o.has("Title")||warn("Invalid outline item encountered.");const l={url:null,dest:null,action:null};Catalog.parseDestDictionary({destDict:o,resultObj:l,docBaseUrl:this.baseUrl,docAttachments:this.attachments});const f=o.get("Title"),c=o.get("F")||0,h=o.getArray("C"),u=o.get("Count");let m=i;!isNumberArray(h,3)||0===h[0]&&0===h[1]&&0===h[2]||(m=ColorSpaceUtils.rgb.getRgb(h,0));const p={action:l.action,attachmentId:l.attachmentId,attachment:l.attachment,dest:l.dest,url:l.url,unsafeUrl:l.unsafeUrl,newWindow:l.newWindow,setOCGState:l.setOCGState,title:"string"==typeof f?stringToPDFString(f):"",color:m,count:Number.isInteger(u)?u:void 0,bold:!!(2&c),italic:!!(1&c),items:[]};e.keepRawDict&&(p.rawDict=o);a.parent.items.push(p);t=o.getRaw("First");if(t instanceof Ref&&!s.has(t)){n.push({obj:t,parent:p});s.put(t)}t=o.getRaw("Next");if(t instanceof Ref&&!s.has(t)){n.push({obj:t,parent:a.parent});s.put(t)}}return a.items.length>0?a.items:null}get documentOutlineForEditor(){let e=null;try{e=this.#vt({keepRawDict:!0})}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read document outline.")}return shadow(this,"documentOutlineForEditor",e)}get permissions(){let e=null;try{e=this.#St()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read permissions.")}return shadow(this,"permissions",e)}#St(){const e=this.xref.trailer.get("Encrypt");if(!(e instanceof Dict))return null;let t=e.get("P");if("number"!=typeof t)return null;t+=2**32;const a=new Set;for(const e of Object.values(k))t&e&&a.add(e);return a}get optionalContentConfig(){let e=null;try{const t=this.#kt.get("OCProperties");if(!t)return shadow(this,"optionalContentConfig",null);const a=t.get("D");if(!a)return shadow(this,"optionalContentConfig",null);const n=t.get("OCGs");if(!Array.isArray(n))return shadow(this,"optionalContentConfig",null);const s=new RefMap;for(const e of n)e instanceof Ref&&!s.has(e)&&s.put(e,this.#At(e));e=this.#xt(a,s)}catch(e){if(e instanceof MissingDataException)throw e;warn(`Unable to read optional content config: ${e}`)}return shadow(this,"optionalContentConfig",e)}#At(e){const t=this.xref.fetch(e),a={id:e.toString(),name:null,intent:null,usage:{print:null,view:null},rbGroups:[]},n=t.get("Name");"string"==typeof n&&(a.name=stringToPDFString(n));let s=t.getArray("Intent");Array.isArray(s)||(s=[s]);s.every(e=>e instanceof Name)&&(a.intent=s.map(e=>e.name));const r=t.get("Usage");if(!(r instanceof Dict))return a;const i=a.usage,o=r.get("Print");if(o instanceof Dict){const e=o.get("PrintState");if(e instanceof Name)switch(e.name){case"ON":case"OFF":i.print={printState:e.name}}}const l=r.get("View");if(l instanceof Dict){const e=l.get("ViewState");if(e instanceof Name)switch(e.name){case"ON":case"OFF":i.view={viewState:e.name}}}return a}#xt(e,t){function parseOnOff(e){const a=[];if(Array.isArray(e))for(const n of e)n instanceof Ref&&t.has(n)&&a.push(n.toString());return a}function parseOrder(e,a=0){if(!Array.isArray(e))return null;const s=[];for(const r of e){if(r instanceof Ref&&t.has(r)){n.put(r);s.push(r.toString());continue}const e=parseNestedOrder(r,a);e&&s.push(e)}if(a>0)return s;const r=[];for(const[e]of t.items())n.has(e)||r.push(e.toString());r.length&&s.push({name:null,order:r});return s}function parseNestedOrder(e,t){if(++t>s){warn("parseNestedOrder - reached MAX_NESTED_LEVELS.");return null}const n=a.fetchIfRef(e);if(!Array.isArray(n))return null;const r=a.fetchIfRef(n[0]);if("string"!=typeof r)return null;const i=parseOrder(n.slice(1),t);return i?.length?{name:stringToPDFString(r),order:i}:null}const a=this.xref,n=new RefSet,s=10;!function parseRBGroups(e){if(Array.isArray(e))for(const n of e){const e=a.fetchIfRef(n);if(!Array.isArray(e)||!e.length)continue;const s=new Set;for(const a of e)if(a instanceof Ref&&t.has(a)&&!s.has(a.toString())){s.add(a.toString());t.get(a).rbGroups.push(s)}}}(e.get("RBGroups"));return{name:"string"==typeof e.get("Name")?stringToPDFString(e.get("Name")):null,creator:"string"==typeof e.get("Creator")?stringToPDFString(e.get("Creator")):null,baseState:e.get("BaseState")instanceof Name?e.get("BaseState").name:null,on:parseOnOff(e.get("ON")),off:parseOnOff(e.get("OFF")),order:parseOrder(e.get("Order")),groups:[...t]}}setActualNumPages(e=null){this.#gt=e}get hasActualNumPages(){return null!==this.#gt}get _pagesCount(){const e=this.toplevelPagesDict.get("Count");if(!Number.isInteger(e))throw new FormatError("Page count in top-level pages dictionary is not an integer.");return shadow(this,"_pagesCount",e)}get numPages(){return this.#gt??this._pagesCount}get destinations(){const e=new Map;for(const t of this.#Ct())if(t instanceof NameTree)for(const[a,n]of t.getAll()){const t=fetchDest(n);t&&e.set(stringToPDFString(a,!0),t)}else if(t instanceof Dict)for(const[a,n]of t){const t=fetchDest(n);t&&e.getOrInsert(stringToPDFString(a,!0),t)}return shadow(this,"destinations",e)}getDestination(e){if(Object.hasOwn(this,"destinations"))return this.destinations.get(e)??null;for(const t of this.#Ct())if(t instanceof NameTree||t instanceof Dict){const a=fetchDest(t.get(e));if(a)return a}return this.destinations.get(e)??null}#Ct(){const e=this.#kt.get("Names"),t=[];e?.has("Dests")&&t.push(new NameTree(e.getRaw("Dests"),this.xref));this.#kt.has("Dests")&&t.push(this.#kt.get("Dests"));return t}get rawPageLabels(){const e=this.#kt.getRaw("PageLabels");if(!e)return null;return new NumberTree(e,this.xref).getAll()}get pageLabels(){let e=null;try{e=this.#It()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read page labels.")}return shadow(this,"pageLabels",e)}#It(){const e=this.rawPageLabels;if(!e)return null;const t=new Array(this.numPages);let a=null,n="",s="",r=1;for(let i=0,o=this.numPages;i<o;i++){const o=e.get(i);if(void 0!==o){if(!(o instanceof Dict))throw new FormatError("PageLabel is not a dictionary.");if(o.has("Type")&&!isName(o.get("Type"),"PageLabel"))throw new FormatError("Invalid type in PageLabel dictionary.");if(o.has("S")){const e=o.get("S");if(!(e instanceof Name))throw new FormatError("Invalid style in PageLabel dictionary.");a=e.name}else a=null;if(o.has("P")){const e=o.get("P");if("string"!=typeof e)throw new FormatError("Invalid prefix in PageLabel dictionary.");n=stringToPDFString(e)}else n="";if(o.has("St")){const e=o.get("St");if(!(Number.isInteger(e)&&e>=1))throw new FormatError("Invalid start in PageLabel dictionary.");r=e}else r=1}switch(a){case"D":s=r;break;case"R":case"r":s=toRomanNumerals(r,"r"===a);break;case"A":case"a":const e=26,t=r-1;s=String.fromCharCode(a.charCodeAt(0)+t%e).repeat(Math.floor(t/e)+1);break;default:if(a)throw new FormatError(`Invalid style "${a}" in PageLabel dictionary.`);s=""}t[i]=n+s;r++}return t}get pageLayout(){const e=this.#kt.get("PageLayout");let t="";if(e instanceof Name)switch(e.name){case"SinglePage":case"OneColumn":case"TwoColumnLeft":case"TwoColumnRight":case"TwoPageLeft":case"TwoPageRight":t=e.name}return shadow(this,"pageLayout",t)}get pageMode(){const e=this.#kt.get("PageMode");let t="UseNone";if(e instanceof Name)switch(e.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"FullScreen":case"UseOC":case"UseAttachments":t=e.name}return shadow(this,"pageMode",t)}get viewerPreferences(){const e=this.#kt.get("ViewerPreferences");if(!(e instanceof Dict))return shadow(this,"viewerPreferences",null);let t=null;for(const[a,n]of e){let e;switch(a){case"HideToolbar":case"HideMenubar":case"HideWindowUI":case"FitWindow":case"CenterWindow":case"DisplayDocTitle":case"PickTrayByPDFSize":"boolean"==typeof n&&(e=n);break;case"NonFullScreenPageMode":if(n instanceof Name)switch(n.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"UseOC":e=n.name;break;default:e="UseNone"}break;case"Direction":if(n instanceof Name)switch(n.name){case"L2R":case"R2L":e=n.name;break;default:e="L2R"}break;case"ViewArea":case"ViewClip":case"PrintArea":case"PrintClip":if(n instanceof Name)switch(n.name){case"MediaBox":case"CropBox":case"BleedBox":case"TrimBox":case"ArtBox":e=n.name;break;default:e="CropBox"}break;case"PrintScaling":if(n instanceof Name)switch(n.name){case"None":case"AppDefault":e=n.name;break;default:e="AppDefault"}break;case"Duplex":if(n instanceof Name)switch(n.name){case"Simplex":case"DuplexFlipShortEdge":case"DuplexFlipLongEdge":e=n.name;break;default:e="None"}break;case"PrintPageRange":Array.isArray(n)&&n.length%2==0&&n.every((e,t,a)=>Number.isInteger(e)&&e>0&&(0===t||e>=a[t-1])&&e<=this.numPages)&&(e=n);break;case"NumCopies":Number.isInteger(n)&&n>0&&(e=n);break;default:warn(`Ignoring non-standard key in ViewerPreferences: ${a}.`);continue}void 0!==e?(t??=new Map).set(a,e):warn(`Bad value, for key "${a}", in ViewerPreferences: ${n}.`)}return shadow(this,"viewerPreferences",t)}get openAction(){const e=this.#kt.get("OpenAction"),t=new Map;if(e instanceof Dict){const a=new Dict(this.xref);a.set("A",e);const n={url:null,dest:null,action:null};Catalog.parseDestDictionary({destDict:a,resultObj:n});Array.isArray(n.dest)?t.set("dest",n.dest):n.action&&t.set("action",n.action)}else ro(e)&&t.set("dest",e);return shadow(this,"openAction",t.size?t:null)}get attachments(){const e=this.#kt.get("Names");let t=null;if(e instanceof Dict&&e.has("EmbeddedFiles")){const a=new NameTree(e.getRaw("EmbeddedFiles"),this.xref);for(const[e,n]of a.getAll())(t??=new Map).set(stringToPDFString(e,!0),new FileSpec(n).serializable)}return shadow(this,"attachments",t)}#Ft(e){const t=this.#kt.get("Names");if(t instanceof Dict&&t.has("EmbeddedFiles")){const a=new NameTree(t.getRaw("EmbeddedFiles"),this.xref);for(const[t,n]of a.getAll())if(stringToPDFString(t,!0)===e)return FileSpec.readContent(n)}}attachmentContent(e){const t=this.#Ft(e);if(void 0!==t)return t;const a=this.#wt.get(e);if(a){const t=this.xref.fetch(a);if(t instanceof BaseStream){const a=FileSpec.readStreamContent(t);return this.#jt.has(e)?function soundStreamToWav(e,t){const a=getSoundFormat(e.dict);if(!a)return null;const{channels:n,sampleRate:s,bitsPerSample:r,encoding:i}=a,o=n*(r>>3),l=t.length-t.length%o;if(0===l)return null;const f=new Uint8Array(44+l),c=new DataView(f.buffer);f.set(stringToBytes("RIFF"),0);c.setUint32(4,36+l,!0);f.set(stringToBytes("WAVE"),8);f.set(stringToBytes("fmt "),12);c.setUint32(16,16,!0);c.setUint16(20,1,!0);c.setUint16(22,n,!0);c.setUint32(24,s,!0);c.setUint32(28,s*o,!0);c.setUint16(32,o,!0);c.setUint16(34,r,!0);f.set(stringToBytes("data"),36);c.setUint32(40,l,!0);if(16===r){const e="Signed"===i;for(let a=0;a<l;a+=2){let n=t[a]<<8|t[a+1];e?n>=32768&&(n-=65536):n-=32768;c.setInt16(44+a,n,!0)}}else if("Signed"===i)for(let e=0;e<l;e++)f[44+e]=t[e]+128&255;else f.set(t.subarray(0,l),44);return f}(t,a)??a:a}return t instanceof Dict?FileSpec.readContent(t):null}return null}get rawEmbeddedFiles(){const e=this.#kt.get("Names");if(!(e instanceof Dict&&e.has("EmbeddedFiles")))return null;return new NameTree(e.getRaw("EmbeddedFiles"),this.xref).getAll(!0)}get xfaImages(){const e=this.#kt.get("Names");let t=null;if(e instanceof Dict&&e.has("XFAImages")){const a=new NameTree(e.getRaw("XFAImages"),this.xref);for(const[e,n]of a.getAll())if(n instanceof BaseStream){t??=new Map;t.set(stringToPDFString(e,!0),n.getBytes())}}return shadow(this,"xfaImages",t)}#Tt(){const e=this.#kt.get("Names");let t=null;function appendIfJavaScriptDict(e,a){if(!(a instanceof Dict&&isName(a.get("S"),"JavaScript")))return;let n=a.get("JS");if(n instanceof BaseStream)n=n.getString();else if("string"!=typeof n)return;n=stringToPDFString(n,!0).replaceAll("\0","");n&&(t??=new Map).set(e,n)}if(e instanceof Dict&&e.has("JavaScript")){const t=new NameTree(e.getRaw("JavaScript"),this.xref);for(const[e,a]of t.getAll())appendIfJavaScriptDict(stringToPDFString(e,!0),a)}const a=this.#kt.get("OpenAction");a&&appendIfJavaScriptDict("OpenAction",a);return t}get jsActions(){const e=this.#Tt();let t=collectActions(this.xref,this.#kt,le);if(e){t??=new Map;for(const[a,n]of e)t.getOrInsertComputed(a,makeArr).push(n)}return shadow(this,"jsActions",t)}async cleanup(e=!1){clearGlobalCaches();this.globalColorSpaceCache.clear();this.globalImageCache.clear(e);this.pageKidsCountCache.clear();this.pageIndexCache.clear();this.pageDictCache.clear();this.nonBlendModesSet.clear();for(const{dict:e}of await Promise.all(this.fontCache))delete e.cacheKey;this.fontCache.clear();this.builtInCMapCache.clear();this.standardFontDataCache.clear();this.systemFontCache.clear()}async getPageDict(e){const t=[this.toplevelPagesDict],a=new RefSet,n=this.#kt.getRaw("Pages");n instanceof Ref&&a.put(n);const s=this.xref,r=this.pageKidsCountCache,i=this.pageIndexCache,o=this.pageDictCache;let l=0;for(;t.length;){const n=t.pop();if(n instanceof Ref){const f=r.get(n);if(f>=0&&l+f<=e){l+=f;continue}if(a.has(n))throw new FormatError("Pages tree contains circular reference.");a.put(n);const c=await(o.get(n)||s.fetchAsync(n));if(c instanceof Dict){let t=c.getRaw("Type");t instanceof Ref&&(t=await s.fetchAsync(t));if(isName(t,"Page")||!c.has("Kids")){r.has(n)||r.put(n,1);i.has(n)||i.put(n,l);if(l===e)return[c,n];l++;continue}}t.push(c);continue}if(!(n instanceof Dict))throw new FormatError("Page dictionary kid reference points to wrong type of object.");const{objId:f}=n;let c=n.getRaw("Count");c instanceof Ref&&(c=await s.fetchAsync(c));if(Number.isInteger(c)&&c>=0){f&&!r.has(f)&&r.put(f,c);if(l+c<=e){l+=c;continue}}let h=n.getRaw("Kids");h instanceof Ref&&(h=await s.fetchAsync(h));if(!Array.isArray(h)){let t=n.getRaw("Type");t instanceof Ref&&(t=await s.fetchAsync(t));if(isName(t,"Page")||!n.has("Kids")){if(l===e)return[n,null];l++;continue}throw new FormatError("Page dictionary kids object is not an array.")}for(let e=h.length-1;e>=0;e--){const a=h[e];t.push(a);n===this.toplevelPagesDict&&a instanceof Ref&&!o.has(a)&&o.put(a,s.fetchAsync(a))}}throw new Error(`Page index ${e} not found.`)}async getAllPageDicts(e=!1){const{ignoreErrors:t}=this.pdfManager.evaluatorOptions,a=[{currentNode:this.toplevelPagesDict,posInKids:0}],n=new RefSet,s=this.#kt.getRaw("Pages");s instanceof Ref&&n.put(s);const r=new Map,i=this.xref,o=this.pageIndexCache;let l=0;function addPageDict(e,t){t&&!o.has(t)&&o.put(t,l);r.set(l++,[e,t])}function addPageError(a){if(a instanceof XRefEntryException&&!e)throw a;if(e&&t&&0===l){warn(`getAllPageDicts - Skipping invalid first page: "${a}".`);a=Dict.empty}r.set(l++,[a,null])}for(;a.length>0;){const e=a.at(-1),{currentNode:t,posInKids:s}=e;let r=t.getRaw("Kids");if(r instanceof Ref)try{r=await i.fetchAsync(r)}catch(e){addPageError(e);break}if(!Array.isArray(r)){let e=t.getRaw("Type");if(e instanceof Ref)try{e=await i.fetchAsync(e)}catch(e){addPageError(e);break}if(isName(e,"Page")||!t.has("Kids")){addPageDict(t,null);break}addPageError(new FormatError("Page dictionary kids object is not an array."));break}if(s>=r.length){a.pop();continue}const o=r[s];let l;if(o instanceof Ref){if(n.has(o)){addPageError(new FormatError("Pages tree contains circular reference."));break}n.put(o);try{l=await i.fetchAsync(o)}catch(e){addPageError(e);break}}else l=o;if(!(l instanceof Dict)){addPageError(new FormatError("Page dictionary kid reference points to wrong type of object."));break}let f=l.getRaw("Type");if(f instanceof Ref)try{f=await i.fetchAsync(f)}catch(e){addPageError(e);break}isName(f,"Page")||!l.has("Kids")?addPageDict(l,o instanceof Ref?o:null):a.push({currentNode:l,posInKids:0});e.posInKids++}return r}async getPageIndex(e){const t=this.pageIndexCache.get(e);if(void 0!==t)return t;const a=this.xref;let n=0,s=e;const r=new RefSet;r.put(e);for(;;){const t=await a.fetchAsync(s);if(isRefsEqual(s,e)&&!isDict(t,"Page")&&!(t instanceof Dict&&!t.has("Type")&&t.has("Contents")))throw new FormatError("The reference does not point to a /Page dictionary.");if(!t)break;if(!(t instanceof Dict))throw new FormatError("Node must be a dictionary.");const i=t.getRaw("Parent");if(i instanceof Ref){if(r.has(i))throw new FormatError("Pages tree contains circular reference.");r.put(i)}const o=await t.getAsync("Parent");if(!o)break;if(!(o instanceof Dict))throw new FormatError("Parent must be a dictionary.");const l=await o.getAsync("Kids");if(!l)break;if(!Array.isArray(l))throw new FormatError("Kids must be an array.");const f=[];let c=!1;for(const e of l){if(!(e instanceof Ref))throw new FormatError("Kid must be a reference.");if(isRefsEqual(e,s)){c=!0;break}f.push(a.fetchAsync(e).then(e=>{if(!(e instanceof Dict))throw new FormatError("Kid node must be a dictionary.");if(e.has("Count")){const t=e.get("Count");if(Number.isInteger(t)&&t>=0){n+=t;return}throw new FormatError("Count must be a (positive) integer.")}n++}))}if(!c)throw new FormatError("Kid reference not found in parent's kids.");await Promise.all(f);s=i}this.pageIndexCache.put(e,n);return n}get baseUrl(){const e=this.#kt.get("URI");if(e instanceof Dict){const t=e.get("Base");if("string"==typeof t){const e=createValidAbsoluteUrl(t,null,{tryConvertEncoding:!0});if(e)return shadow(this,"baseUrl",e.href)}}return shadow(this,"baseUrl",this.pdfManager.docBaseUrl)}static#Rt(e,t){const a=e.fetchIfRef(t);if(!(a instanceof Dict))return null;let n=null;const s=a.getRaw("Pg");s instanceof Ref&&(n=s);if(!n){const s=[a],r=new RefSet;r.put(t);for(;s.length>0&&!n;){let t,a=s.shift().getRaw("K");if(a instanceof Ref){if(r.has(a))continue;r.put(a);a=e.fetch(a)}if(Array.isArray(a))t=a;else{if(!a)continue;t=[a]}for(const a of t){if(a instanceof Ref){if(r.has(a))continue;r.put(a)}const t=e.fetchIfRef(a);if(!(t instanceof Dict))continue;const i=t.getRaw("Pg");if(i instanceof Ref){n=i;break}s.push(t)}}}if(!n){const t=40;let s=a;for(let a=0;a<t;a++){const t=s.getRaw("P");if(!(t instanceof Ref))break;const a=e.fetch(t);if(!(a instanceof Dict)||isName(a.get("Type"),"StructTreeRoot"))break;const r=a.getRaw("Pg");if(r instanceof Ref){n=r;break}s=a}}if(!n)return null;let r=null,i=null;const o=a.get("A");if(o instanceof Dict){const e=lookupRect(o.getArray("BBox"),null);if(e){r=e[0];i=e[3]}}return[n,{name:"XYZ"},r,i,null]}static parseDestDictionary({destDict:e,resultObj:t,docBaseUrl:a=null,docAttachments:n=null}){if(!(e instanceof Dict)){warn("parseDestDictionary: `destDict` must be a dictionary.");return}let s,r,i=e.get("A");if(!(i instanceof Dict))if(e.has("Dest"))i=e.get("Dest");else{i=e.get("AA");i instanceof Dict&&(i.has("D")?i=i.get("D"):i.has("U")&&(i=i.get("U")))}if(i instanceof Dict){const e=i.get("S");if(!(e instanceof Name)){warn("parseDestDictionary: Invalid type in Action dictionary.");return}const a=e.name;switch(a){case"ResetForm":const e=i.get("Flags"),o=!(1&("number"==typeof e?e:0)),l=[],f=[];for(const e of i.get("Fields")||[])e instanceof Ref?f.push(e.toString()):"string"==typeof e&&l.push(stringToPDFString(e));t.resetForm={fields:l,refs:f,include:o};break;case"URI":s=i.get("URI");s instanceof Name&&(s="/"+s.name);break;case"GoTo":r=i.get("D");break;case"Launch":case"GoToR":const c=i.get("F");if(c instanceof Dict)s=new FileSpec(c).filename;else{if("string"!=typeof c)break;s=c}const h=fetchRemoteDest(i);h&&(s=s.split("#",1)[0]+"#"+h);const u=i.get("NewWindow");"boolean"==typeof u&&(t.newWindow=u);break;case"GoToE":const m=i.get("T");let p=null;if(m instanceof Dict){const e=m.get("R"),t=m.get("N");isName(e,"C")&&"string"==typeof t&&(p=stringToPDFString(t,!0))}if(n&&p){t.attachmentId=p;t.attachment=n.get(p);const e=fetchRemoteDest(i);e&&(t.attachmentDest=e)}else warn('parseDestDictionary - unimplemented "GoToE" action.');break;case"Named":const d=i.get("N");d instanceof Name&&(t.action=d.name);break;case"SetOCGState":const g=i.get("State"),b=i.get("PreserveRB");if(!Array.isArray(g)||0===g.length)break;const w=[];for(const e of g)if(e instanceof Name)switch(e.name){case"ON":case"OFF":case"Toggle":w.push(e.name)}else e instanceof Ref&&w.push(e.toString());if(w.length!==g.length)break;t.setOCGState={state:w,preserveRB:!1!==b};break;case"JavaScript":const j=i.get("JS");let k;j instanceof BaseStream?k=j.getString():"string"==typeof j&&(k=j);const y=k&&recoverJsURL(stringToPDFString(k,!0));if(y){s=y.url;t.newWindow=y.newWindow;break}default:if("JavaScript"===a||"SubmitForm"===a)break;warn(`parseDestDictionary - unsupported action: "${a}".`)}}else e.has("Dest")&&(r=e.get("Dest"));if("string"==typeof s){const e=createValidAbsoluteUrl(s,a,{addDefaultProtocol:!0,tryConvertEncoding:!0});e&&(t.url=e.href);t.unsafeUrl=s}if(r){r instanceof Name&&(r=r.name);"string"==typeof r?t.dest=stringToPDFString(r,!0):ro(r)&&(t.dest=r)}if(!(t.dest||t.url||t.action||t.attachment||t.setOCGState||t.resetForm)){const a=e.getRaw("SE");if(a instanceof Ref)try{const n=Catalog.#Rt(e.xref,a);n&&(t.dest=n)}catch(e){if(e instanceof MissingDataException)throw e;info("SE parsing failed.")}}}}function createImageDict(e,t,a,n){const s=new Dict(e);s.set("Type",Name.get("XObject"));s.set("Subtype",Name.get("Image"));s.set("BitsPerComponent",8);s.setIfName("ColorSpace",n);s.set("Width",t);s.set("Height",a);return s}function createRawImage(e,t){return new Stream(e,0,e.length,t)}function paethPredictor(e,t,a){const n=e+t-a,s=Math.abs(n-e),r=Math.abs(n-t),i=Math.abs(n-a);return s<=r&&s<=i?e:r<=i?t:a}async function createPNGLikeImage(e,t,a,n){const s=e.length/(t*a);let r;if("function"==typeof CompressionStream)try{const n=function applyPNGOptimumFilter(e,t,a,n){const s=t*n,r=new Uint8Array(a*(s+1)),i=[new Uint8Array(s),new Uint8Array(s),new Uint8Array(s),new Uint8Array(s),new Uint8Array(s)];for(let t=0;t<a;t++){const a=t*s,o=a-s,l=[0,0,0,0,0];for(let r=0;r<s;r++){const s=a+r,f=e[s],c=r>=n?e[s-n]:0,h=t>0?e[o+r]:0,u=t>0&&r>=n?e[o+r-n]:0;i[0][r]=f;i[1][r]=f-c&255;i[2][r]=f-h&255;i[3][r]=f-(c+h>>1)&255;i[4][r]=f-paethPredictor(c,h,u)&255;for(let e=0;e<5;e++){const t=i[e][r];l[e]+=t<128?t:256-t}}let f=0;for(let e=1;e<5;e++)l[e]<l[f]&&(f=e);const c=t*(s+1);r[c]=f;r.set(i[f],c+1)}return r}(e,t,a,s);r=await async function deflate(e){const t=new CompressionStream("deflate"),a=t.writable.getWriter(),n=(async()=>{try{await a.ready;await a.write(e);await a.ready;await a.close()}catch(e){await a.abort(e).catch(()=>{});throw e}})(),[s]=await Promise.all([new Response(t.readable).bytes(),n.then(()=>null)]);return s}(n)}catch{}if(!r)return createRawImage(e,n);n.setIfName("Filter","FlateDecode");const i=new Dict(n.xref);i.set("Predictor",15);i.set("Columns",t);i.set("Colors",s);i.set("BitsPerComponent",8);n.set("DecodeParms",i);return createRawImage(r,n)}async function createImage(e,t,{closeBitmap:a=!1}={}){const{width:n,height:s}=e;if(!Number.isInteger(n)||!Number.isInteger(s)||n<=0||s<=0){a&&e.close?.();throw new Error(`createImage: invalid bitmap dimensions ${n}x${s}`)}const r=new OffscreenCanvas(n,s),i=r.getContext("2d",{alpha:!0,willReadFrequently:!0});let o;try{i.drawImage(e,0,0);o=i.getImageData(0,0,n,s).data}finally{a&&e.close?.()}const l=new Uint32Array(o.buffer,o.byteOffset,o.byteLength>>2),f=FeatureTest.isLittleEndian,c=f?16777215:4294967040,h=new Set;let u=!1,m=!0;for(const e of l){if(255!=(f?e>>>24:255&e)){u=!0;break}if(m){h.add((e&c)>>>0);if(h.size>16384){m=!1;h.clear()}}}u&&(m=!0);const p=createImageDict(t,n,s,"DeviceRGB");let d,g=null;if(m){const e=new Uint8Array(n*s*3);for(let t=0,a=0,n=o.length;t<n;t+=4,a+=3){e[a]=o[t];e[a+1]=o[t+1];e[a+2]=o[t+2]}d=createPNGLikeImage(e,n,s,p);g=createRawImage(e,createImageDict(t,n,s,"DeviceRGB"))}else{p.setIfName("Filter","DCTDecode");d=r.convertToBlob({type:"image/jpeg",quality:1}).then(e=>e.bytes()).then(e=>createRawImage(e,p))}let b=Promise.resolve(null),w=null;if(u){const e=new Uint8Array(l.length);if(f)for(let t=0,a=l.length;t<a;t++)e[t]=l[t]>>>24;else for(let t=0,a=l.length;t<a;t++)e[t]=255&l[t];const a=createImageDict(t,n,s,"DeviceGray"),r=createImageDict(t,n,s,"DeviceGray");b=createPNGLikeImage(e,n,s,a);w=createRawImage(e,r)}const[j,k]=await Promise.all([d,b]);return{imageStream:j,imageRenderStream:g,smaskStream:k,smaskRenderStream:w,width:n,height:s}}function mayHaveChildren(e){return e instanceof Ref||e instanceof Dict||e instanceof BaseStream||Array.isArray(e)}function addChildren(e,t){if(e instanceof Dict)e=e.getRawValues();else if(e instanceof BaseStream)e=e.dict.getRawValues();else if(!Array.isArray(e))return;for(const a of e)mayHaveChildren(a)&&t.push(a)}class ObjectLoader{refSet=new RefSet;constructor(e,t,a){this.dict=e;this.keys=t;this.xref=a}async load(){const{keys:e,dict:t}=this,a=[];for(const n of e){const e=t.getRaw(n);void 0!==e&&a.push(e)}await this.#Ot(a);this.refSet=null}async#Ot(e){const t=[],a=[];for(;e.length;){let n=e.pop();if(n instanceof Ref){if(this.refSet.has(n))continue;try{this.refSet.put(n);n=this.xref.fetch(n)}catch(e){if(!(e instanceof MissingDataException)){warn(`ObjectLoader.#walk - requesting all data: "${e}".`);await this.xref.stream.manager.requestAllChunks();return}t.push(n);a.push({begin:e.begin,end:e.end})}}if(n instanceof BaseStream){const e=n.getBaseStreams();if(e){let s=!1;for(const t of e)if(!t.isDataLoaded){s=!0;a.push({begin:t.start,end:t.end})}s&&t.push(n)}}addChildren(n,e)}if(a.length){await this.xref.stream.manager.requestRanges(a);for(const e of t)e instanceof Ref&&this.refSet.remove(e);await this.#Ot(t)}}static async load(e,t,a){if(a.stream.isDataLoaded)return;const n=new ObjectLoader(e,t,a);await n.load()}}const io=Symbol(),oo=Symbol(),lo=Symbol(),fo=Symbol(),co=Symbol(),ho=Symbol(),uo=Symbol(),mo=Symbol(),po=Symbol(),go=Symbol("content"),bo=Symbol("data"),wo=Symbol(),jo=Symbol("extra"),ko=Symbol(),yo=Symbol(),qo=Symbol(),vo=Symbol(),So=Symbol(),Ao=Symbol(),xo=Symbol(),Co=Symbol(),Io=Symbol(),Fo=Symbol(),Ro=Symbol(),Oo=Symbol(),Bo=Symbol(),Do=Symbol(),Ho=Symbol(),Mo=Symbol(),No=Symbol(),Po=Symbol(),Eo=Symbol(),_o=Symbol(),zo=Symbol(),Lo=Symbol(),Uo=Symbol(),Wo=Symbol(),Xo=Symbol(),Ko=Symbol(),Go=Symbol(),Vo=Symbol(),$o=Symbol(),Yo=Symbol(),Jo=Symbol(),Qo=Symbol(),Zo=Symbol("namespaceId"),el=Symbol("nodeName"),tl=Symbol(),al=Symbol(),nl=Symbol(),sl=Symbol(),rl=Symbol(),il=Symbol(),ol=Symbol(),ll=Symbol(),fl=Symbol("root"),cl=Symbol(),hl=Symbol(),ul=Symbol(),ml=Symbol(),pl=Symbol(),dl=Symbol(),gl=Symbol(),bl=Symbol(),wl=Symbol(),jl=Symbol(),kl=Symbol(),yl=Symbol("uid"),ql=Symbol(),vl={config:{id:0,check:e=>e.startsWith("http://www.xfa.org/schema/xci/")},connectionSet:{id:1,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-connection-set/")},datasets:{id:2,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-data/")},form:{id:3,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-form/")},localeSet:{id:4,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-locale-set/")},pdf:{id:5,check:e=>"http://ns.adobe.com/xdp/pdf/"===e},signature:{id:6,check:e=>"http://www.w3.org/2000/09/xmldsig#"===e},sourceSet:{id:7,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-source-set/")},stylesheet:{id:8,check:e=>"http://www.w3.org/1999/XSL/Transform"===e},template:{id:9,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-template/")},xdc:{id:10,check:e=>e.startsWith("http://www.xfa.org/schema/xdc/")},xdp:{id:11,check:e=>"http://ns.adobe.com/xdp/"===e},xfdf:{id:12,check:e=>"http://ns.adobe.com/xfdf/"===e},xhtml:{id:13,check:e=>"http://www.w3.org/1999/xhtml"===e},xmpmeta:{id:14,check:e=>"http://ns.adobe.com/xmpmeta/"===e}},Sl={pt:e=>e,cm:e=>e/2.54*72,mm:e=>e/25.4*72,in:e=>72*e,px:e=>e},Al=/([+-]?\d+\.?\d*)(.*)/;function stripQuotes(e){return e.startsWith("'")||e.startsWith('"')?e.slice(1,-1):e}function getInteger({data:e,defaultValue:t,validate:a}){if(!e)return t;e=e.trim();const n=parseInt(e,10);return!isNaN(n)&&a(n)?n:t}function getFloat({data:e,defaultValue:t,validate:a}){if(!e)return t;e=e.trim();const n=parseFloat(e);return!isNaN(n)&&a(n)?n:t}function getKeyword({data:e,defaultValue:t,validate:a}){return e&&a(e=e.trim())?e:t}function getStringOption(e,t){return getKeyword({data:e,defaultValue:t[0],validate:e=>t.includes(e)})}function getMeasurement(e,t="0"){t||="0";if(!e)return getMeasurement(t);const a=e.trim().match(Al);if(!a)return getMeasurement(t);const[,n,s]=a,r=parseFloat(n);if(isNaN(r))return getMeasurement(t);if(0===r)return 0;const i=Sl[s];return i?i(r):r}function getRatio(e){if(!e)return{num:1,den:1};const t=e.split(":",2).map(e=>parseFloat(e.trim())).filter(e=>!isNaN(e));1===t.length&&t.push(1);if(0===t.length)return{num:1,den:1};const[a,n]=t;return{num:a,den:n}}function getRelevant(e){return e?e.trim().split(/\s+/).map(e=>({excluded:"-"===e[0],viewname:e.substring(1)})):[]}class HTMLResult{static get FAILURE(){return shadow(this,"FAILURE",new HTMLResult(!1,null,null,null))}static get EMPTY(){return shadow(this,"EMPTY",new HTMLResult(!0,null,null,null))}constructor(e,t,a,n){this.success=e;this.html=t;this.bbox=a;this.breakNode=n}isBreak(){return!!this.breakNode}static breakNode(e){return new HTMLResult(!1,null,null,e)}static success(e,t=null){return new HTMLResult(!0,e,t,null)}}class FontFinder{constructor(e){this.fonts=new Map;this.cache=new Map;this.warned=new Set;this.defaultFont=null;this.add(e)}add(e,t=null){for(const t of e)this.addPdfFont(t);for(const e of this.fonts.values())e.regular||=e.italic||e.bold||e.bolditalic;if(!t||0===t.size)return;const a=this.fonts.get("PdfJS-Fallback-PdfJS-XFA");for(const e of t)this.fonts.set(e,a)}addPdfFont(e){const t=e.cssFontInfo,a=t.fontFamily,n=this.fonts.getOrInsertComputed(a,makeObj);this.defaultFont??=n;let s="";const r=parseFloat(t.fontWeight);0!==parseFloat(t.italicAngle)?s=r>=700?"bolditalic":"italic":r>=700&&(s="bold");if(!s){(e.name.includes("Bold")||e.psName?.includes("Bold"))&&(s="bold");(e.name.includes("Italic")||e.name.endsWith("It")||e.psName?.includes("Italic")||e.psName?.endsWith("It"))&&(s+="italic")}s||="regular";n[s]=e}getDefault(){return this.defaultFont}find(e,t=!0){let a=this.fonts.get(e)||this.cache.get(e);if(a)return a;const n=/[,\-_ ]|bolditalic|bold|italic|regular|it/gi;let s=e.replaceAll(n,"");a=this.fonts.get(s);if(a){this.cache.set(e,a);return a}s=s.toLowerCase();const r=[];for(const[e,t]of this.fonts)e.replaceAll(n,"").toLowerCase().startsWith(s)&&r.push(t);if(0===r.length)for(const e of this.fonts.values())e.regular.name?.replaceAll(n,"").toLowerCase().startsWith(s)&&r.push(e);if(0===r.length){s=s.replaceAll(/psmt|mt/gi,"");for(const[e,t]of this.fonts)e.replaceAll(n,"").toLowerCase().startsWith(s)&&r.push(t)}if(0===r.length)for(const e of this.fonts.values())e.regular.name?.replaceAll(n,"").toLowerCase().startsWith(s)&&r.push(e);if(r.length>=1){1!==r.length&&t&&warn(`XFA - Too many choices to guess the correct font: ${e}`);this.cache.set(e,r[0]);return r[0]}if(t&&!this.warned.has(e)){this.warned.add(e);warn(`XFA - Cannot find the font: ${e}`)}return null}}function selectFont(e,t){return"italic"===e.posture?"bold"===e.weight?t.bolditalic:t.italic:"bold"===e.weight?t.bold:t.regular}class FontInfo{constructor(e,t,a,n){this.lineHeight=a;this.paraMargin=t||{top:0,bottom:0,left:0,right:0};if(!e){[this.pdfFont,this.xfaFont]=this.defaultFont(n);return}this.xfaFont={typeface:e.typeface,posture:e.posture,weight:e.weight,size:e.size,letterSpacing:e.letterSpacing};const s=n.find(e.typeface);if(s){this.pdfFont=selectFont(e,s);this.pdfFont||([this.pdfFont,this.xfaFont]=this.defaultFont(n))}else[this.pdfFont,this.xfaFont]=this.defaultFont(n)}defaultFont(e){const t=e.find("Helvetica",!1)||e.find("Myriad Pro",!1)||e.find("Arial",!1)||e.getDefault();if(t?.regular){const e=t.regular;return[e,{typeface:e.cssFontInfo.fontFamily,posture:"normal",weight:"normal",size:10,letterSpacing:0}]}return[null,{typeface:"Courier",posture:"normal",weight:"normal",size:10,letterSpacing:0}]}}class FontSelector{constructor(e,t,a,n){this.fontFinder=n;this.stack=[new FontInfo(e,t,a,n)]}pushData(e,t,a){const n=this.stack.at(-1);for(const t of["typeface","posture","weight","size","letterSpacing"])e[t]||=n.xfaFont[t];for(const e of["top","bottom","left","right"])isNaN(t[e])&&(t[e]=n.paraMargin[e]);const s=new FontInfo(e,t,a||n.lineHeight,this.fontFinder);s.pdfFont||=n.pdfFont;this.stack.push(s)}popFont(){this.stack.pop()}topFont(){return this.stack.at(-1)}}class TextMeasure{constructor(e,t,a,n){this.glyphs=[];this.fontSelector=new FontSelector(e,t,a,n);this.extraHeight=0}pushData(e,t,a){this.fontSelector.pushData(e,t,a)}popFont(e){return this.fontSelector.popFont()}addPara(){const e=this.fontSelector.topFont();this.extraHeight+=e.paraMargin.top+e.paraMargin.bottom}addString(e){if(!e)return;const t=this.fontSelector.topFont(),a=t.xfaFont.size;if(t.pdfFont){const n=t.xfaFont.letterSpacing,s=t.pdfFont,r=s.lineHeight||1.2,i=t.lineHeight||Math.max(1.2,r)*a,o=r-(void 0===s.lineGap?.2:s.lineGap),l=Math.max(1,o)*a,f=a/1e3,c=s.defaultWidth||s.charsToGlyphs(" ")[0].width;for(const t of e.split(/[\u2029\n]/)){const e=s.encodeString(t).join(""),a=s.charsToGlyphs(e);for(const e of a){const t=e.width||c;this.glyphs.push([t*f+n,i,l,e.unicode,!1])}this.glyphs.push([0,0,0,"\n",!0])}this.glyphs.pop();return}for(const t of e.split(/[\u2029\n]/)){for(const e of t.split(""))this.glyphs.push([a,1.2*a,a,e,!1]);this.glyphs.push([0,0,0,"\n",!0])}this.glyphs.pop()}compute(e){let t=-1,a=0,n=0,s=0,r=0,i=0,o=!1,l=!0;for(let f=0,c=this.glyphs.length;f<c;f++){const[c,h,u,m,p]=this.glyphs[f],d=" "===m,g=l?u:h;if(p){n=Math.max(n,r);r=0;s+=i;i=g;t=-1;a=0;l=!1}else if(d)if(r+c>e){n=Math.max(n,r);r=0;s+=i;i=g;t=-1;a=0;o=!0;l=!1}else{i=Math.max(g,i);a=r;r+=c;t=f}else if(r+c>e){s+=i;i=g;if(-1!==t){f=t;n=Math.max(n,a);r=0;t=-1;a=0}else{n=Math.max(n,r);r=c}o=!0;l=!1}else{r+=c;i=Math.max(g,i)}}n=Math.max(n,r);s+=i+this.extraHeight;return{width:1.02*n,height:s,isBroken:o}}}const xl=/^[^.[]+/,Cl=/^[^\]]+/,Il=0,Fl=1,Tl=2,Rl=3,Bl=4,Dl=new Map([["$data",(e,t)=>e.datasets?e.datasets.data:e],["$record",(e,t)=>(e.datasets?e.datasets.data:e)[Oo]()[0]],["$template",(e,t)=>e.template],["$connectionSet",(e,t)=>e.connectionSet],["$form",(e,t)=>e.form],["$layout",(e,t)=>e.layout],["$host",(e,t)=>e.host],["$dataWindow",(e,t)=>e.dataWindow],["$event",(e,t)=>e.event],["!",(e,t)=>e.datasets],["$xfa",(e,t)=>e],["xfa",(e,t)=>e],["$",(e,t)=>t]]),Hl=new WeakMap;function parseIndex(e){return"*"===(e=e.trim())?1/0:parseInt(e,10)||0}function parseExpression(e,t,a=!0){let n=e.match(xl);if(!n)return null;let[s]=n;const r=[{name:s,cacheName:"."+s,index:0,js:null,formCalc:null,operator:Il}];let i=s.length;for(;i<e.length;){const o=i;if("["===e.charAt(i++)){n=e.slice(i).match(Cl);if(!n){warn("XFA - Invalid index in SOM expression");return null}r.at(-1).index=parseIndex(n[0]);i+=n[0].length+1;continue}let l;switch(e.charAt(i)){case".":if(!t)return null;i++;l=Fl;break;case"#":i++;l=Tl;break;case"[":if(a){warn("XFA - SOM expression contains a FormCalc subexpression which is not supported for now.");return null}l=Rl;break;case"(":if(a){warn("XFA - SOM expression contains a JavaScript subexpression which is not supported for now.");return null}l=Bl;break;default:l=Il}n=e.slice(i).match(xl);if(!n)break;[s]=n;i+=s.length;r.push({name:s,cacheName:e.slice(o,i),operator:l,index:0,js:null,formCalc:null})}return r}function searchNode(e,t,a,n=!0,s=!0){const r=parseExpression(a,n);if(!r)return null;const i=Dl.get(r[0].name);let o,l=0;if(i){o=!0;e=[i(e,t)];l=1}else{o=null===t;e=[t||e]}for(let a=r.length;l<a;l++){const{name:a,cacheName:n,operator:i,index:f}=r[l],c=[];for(const t of e){if(!t.isXFAObject)continue;let e,r;if(s){r=Hl.getOrInsertComputed(t,makeMap);e=r.get(n)}if(!e){switch(i){case Il:e=t[xo](a,!1);break;case Fl:e=t[xo](a,!0);break;case Tl:e=t[Ao](a);e=e.isXFAObjectArray?e.children:[e]}s&&r.set(n,e)}e.length>0&&c.push(e)}if(0===c.length&&!o&&0===l){const a=t[Mo]();if(!(t=a))return null;l=-1;e=[t];continue}e=isFinite(f)?c.filter(e=>f<e.length).map(e=>e[f]):c.flat()}return 0===e.length?null:e}function createDataNode(e,t,a){const n=parseExpression(a);if(!n||n.some(e=>e.operator===Fl))return null;const s=Dl.get(n[0].name);let r=0;if(s){e=s(e,t);r=1}else e=t||e;for(let t=n.length;r<t;r++){const{name:t,operator:a,index:s}=n[r];if(!isFinite(s)){n[r].index=0;return e.createNodes(n.slice(r))}let i;switch(a){case Il:i=e[xo](t,!1);break;case Fl:i=e[xo](t,!0);break;case Tl:i=e[Ao](t);i=i.isXFAObjectArray?i.children:[i]}if(0===i.length)return e.createNodes(n.slice(r));if(!(s<i.length)){n[r].index=s-i.length;return e.createNodes(n.slice(r))}{const t=i[s];if(!t.isXFAObject){warn("XFA - Cannot create a node.");return null}e=t}}return null}const Ml=Symbol(),Nl=Symbol(),Pl=Symbol(),El=Symbol("_children"),_l=Symbol(),zl=Symbol(),Ll=Symbol(),Wl=Symbol(),Xl=Symbol(),Kl=Symbol(),Gl=Symbol(),Vl=Symbol(),$l=Symbol(),Yl=Symbol("parent"),Jl=Symbol(),Ql=Symbol(),Zl=Symbol();let ef=0;const tf=vl.datasets.id;class XFAObject{constructor(e,t,a=!1){this[Zo]=e;this[el]=t;this[Gl]=a;this[Yl]=null;this[El]=[];this[yl]=`${t}${ef++}`;this[Po]=null}get isXFAObject(){return!0}get isXFAObjectArray(){return!1}createNodes(e){let t=this,a=null;for(const{name:n,index:s}of e){for(let e=0,r=isFinite(s)?s:0;e<=r;e++){const e=t[Zo]===tf?-1:t[Zo];a=new XmlObject(e,n);t[lo](a)}t=a}return a}[al](e){if(!this[Gl]||!this[nl](e))return!1;const t=e[el],a=this[t];if(!(a instanceof XFAObjectArray)){null!==a&&this[ll](a);this[t]=e;this[lo](e);return!0}if(a.push(e)){this[lo](e);return!0}let n="";this.id?n=` (id: ${this.id})`:this.name&&(n=` (name: ${this.name} ${this.h.value})`);warn(`XFA - node "${this[el]}"${n} has already enough "${t}"!`);return!1}[nl](e){return Object.hasOwn(this,e[el])&&e[Zo]===this[Zo]}[Go](){return!1}[io](){return!1}[Uo](){return!1}[Wo](){return!1}[il](){this.para&&this[No]()[jo].paraStack.pop()}[ol](){this[No]()[jo].paraStack.push(this.para)}[ul](e){this.id&&this[Zo]===vl.template.id&&e.set(this.id,this)}[No](){return this[Po].template}[Vo](){return!1}[$o](){return!1}[lo](e){e[Yl]=this;this[El].push(e);!e[Po]&&this[Po]&&(e[Po]=this[Po])}[ll](e){const t=this[El].indexOf(e);this[El].splice(t,1)}[Eo](){return Object.hasOwn(this,"value")}[pl](e){}[sl](e){}[ko](){}[co](e){delete this[Gl];if(this[uo]){e.clean(this[uo]);delete this[uo]}}[zo](e){return this[El].indexOf(e)}[Lo](e,t){t[Yl]=this;this[El].splice(e,0,t);!t[Po]&&this[Po]&&(t[Po]=this[Po])}[Yo](){return!this.name}[Qo](){return""}[gl](){return 0===this[El].length?this[go]:this[El].map(e=>e[gl]()).join("")}get[Pl](){const e=Object.getPrototypeOf(this);if(!e._attributes){const t=e._attributes=new Set;for(const e of Object.getOwnPropertyNames(this)){if(null===this[e]||this[e]instanceof XFAObject||this[e]instanceof XFAObjectArray)break;t.add(e)}}return shadow(this,Pl,e._attributes)}[Ko](e){let t=this;for(;t;){if(t===e)return!0;t=t[Mo]()}return!1}[Mo](){return this[Yl]}[Ho](){return this[Mo]()}[wo](){const e=Object.create(null);this[go]&&(e.$content=this[go]);for(const t of Object.getOwnPropertyNames(this)){const a=this[t];null!==a&&(a instanceof XFAObject?e[t]=a[wo]():a instanceof XFAObjectArray?a.isEmpty()||(e[t]=a.dump()):e[t]=a)}return e}[kl](){return null}[wl](){return HTMLResult.EMPTY}*[Bo](){for(const e of this[Oo]())yield e}*[Wl](e,t){for(const a of this[Bo]())if(!e||t===e.has(a[el])){const e=this[So](),t=a[wl](e);t.success||(this[jo].failingNode=a);yield t}}[yo](){return null}[oo](e,t){this[jo].children.push(e)}[So](){}[fo]({filter:e=null,include:t=!0}){if(this[jo].generator){const e=this[So](),t=this[jo].failingNode[wl](e);if(!t.success)return t;t.html&&this[oo](t.html,t.bbox);delete this[jo].failingNode}else this[jo].generator=this[Wl](e,t);for(;;){const e=this[jo].generator.next();if(e.done)break;const t=e.value;if(!t.success)return t;t.html&&this[oo](t.html,t.bbox)}this[jo].generator=null;return HTMLResult.EMPTY}[ml](e){this[Ql]=new Set(Object.keys(e))}[Kl](e){const t=this[Pl],a=this[Ql];return e.keys().filter(e=>t.has(e)&&!a.has(e)).toArray()}[cl](e,t=new Set){for(const a of this[El])a[Jl](e,t)}[Jl](e,t){const a=this[Xl](e,t);a?this[Ml](a,e,t):this[cl](e,t)}[Xl](e,t){const{use:a,usehref:n}=this;if(!a&&!n)return null;let s=null,r=null,i=null,o=a;if(n){o=n;n.startsWith("#som(")&&n.endsWith(")")?r=n.slice(5,-1):n.startsWith(".#som(")&&n.endsWith(")")?r=n.slice(6,-1):n.startsWith("#")?i=n.slice(1):n.startsWith(".#")&&(i=n.slice(2))}else a.startsWith("#")?i=a.slice(1):r=a;this.use=this.usehref="";if(i)s=e.get(i);else{s=searchNode(e.get(fl),this,r,!0,!1);s&&=s[0]}if(!s){warn(`XFA - Invalid prototype reference: ${o}.`);return null}if(s[el]!==this[el]){warn(`XFA - Incompatible prototype: ${s[el]} !== ${this[el]}.`);return null}if(t.has(s)){warn("XFA - Cycle detected in prototypes use.");return null}t.add(s);const l=s[Xl](e,t);l&&s[Ml](l,e,t);s[cl](e,t);t.delete(s);return s}[Ml](e,t,a){if(a.has(e)){warn("XFA - Cycle detected in prototypes use.");return}!this[go]&&e[go]&&(this[go]=e[go]);new Set(a).add(e);for(const t of this[Kl](e[Ql])){this[t]=e[t];this[Ql]&&this[Ql].add(t)}for(const n of Object.getOwnPropertyNames(this)){if(this[Pl].has(n))continue;const s=this[n],r=e[n];if(s instanceof XFAObjectArray){for(const e of s[El])e[Jl](t,a);for(let n=s[El].length,i=r[El].length;n<i;n++){const r=e[El][n][mo]();if(!s.push(r))break;r[Yl]=this;this[El].push(r);r[Jl](t,a)}}else if(null===s){if(null!==r){const e=r[mo]();e[Yl]=this;this[n]=e;this[El].push(e);e[Jl](t,a)}}else{s[cl](t,a);r&&s[Ml](r,t,a)}}}static[_l](e){return Array.isArray(e)?e.map(e=>XFAObject[_l](e)):"object"==typeof e&&null!==e?Object.assign({},e):e}[mo](){const e=Object.create(Object.getPrototypeOf(this));for(const t of Object.getOwnPropertySymbols(this))try{e[t]=this[t]}catch{shadow(e,t,this[t])}e[yl]=`${e[el]}${ef++}`;e[El]=[];for(const t of Object.getOwnPropertyNames(this)){if(this[Pl].has(t)){e[t]=XFAObject[_l](this[t]);continue}const a=this[t];e[t]=a instanceof XFAObjectArray?new XFAObjectArray(a[Vl]):null}for(const t of this[El]){const a=t[el],n=t[mo]();e[El].push(n);n[Yl]=e;null===e[a]?e[a]=n:e[a][El].push(n)}return e}[Oo](e=null){return e?this[El].filter(t=>t[el]===e):this[El]}[Ao](e){return this[e]}[xo](e,t,a=!0){return Array.from(this[Co](e,t,a))}*[Co](e,t,a=!0){if("parent"!==e){for(const a of this[El]){a[el]===e&&(yield a);a.name===e&&(yield a);(t||a[Yo]())&&(yield*a[Co](e,t,!1))}a&&this[Pl].has(e)&&(yield new XFAAttribute(this,e,this[e]))}else yield this[Yl]}}class XFAObjectArray{constructor(e=1/0){this[Vl]=e;this[El]=[]}get isXFAObject(){return!1}get isXFAObjectArray(){return!0}push(e){if(this[El].length<=this[Vl]){this[El].push(e);return!0}warn(`XFA - node "${e[el]}" accepts no more than ${this[Vl]} children`);return!1}isEmpty(){return 0===this[El].length}dump(){return 1===this[El].length?this[El][0][wo]():this[El].map(e=>e[wo]())}[mo](){const e=new XFAObjectArray(this[Vl]);e[El]=this[El].map(e=>e[mo]());return e}get children(){return this[El]}clear(){this[El].length=0}}class XFAAttribute{constructor(e,t,a){this[Yl]=e;this[el]=t;this[go]=a;this[po]=!1;this[yl]="attribute"+ef++}[Mo](){return this[Yl]}[Xo](){return!0}[Io](){return this[go].trim()}[pl](e){e=e.value||"";this[go]=e.toString()}[gl](){return this[go]}[Ko](e){return this[Yl]===e||this[Yl][Ko](e)}}class XmlObject extends XFAObject{constructor(e,t,a={}){super(e,t);this[go]="";this[zl]=null;if("#text"!==t){const e=new Map;this[Nl]=e;for(const[t,n]of Object.entries(a))e.set(t,new XFAAttribute(this,t,n));if(Object.hasOwn(a,tl)){const e=a[tl].xfa.dataNode;void 0!==e&&("dataGroup"===e?this[zl]=!1:"dataValue"===e&&(this[zl]=!0))}}this[po]=!1}[jl](e){const t=this[el];if("#text"===t){e.push(encodeToXmlString(this[go]));return}const a=utf8StringToString(t),n=this[Zo]===tf?"xfa:":"";e.push(`<${n}${a}`);for(const[t,a]of this[Nl]){const n=utf8StringToString(t);e.push(` ${n}="${encodeToXmlString(a[go])}"`)}null!==this[zl]&&(this[zl]?e.push(' xfa:dataNode="dataValue"'):e.push(' xfa:dataNode="dataGroup"'));if(this[go]||0!==this[El].length){e.push(">");if(this[go])"string"==typeof this[go]?e.push(encodeToXmlString(this[go])):this[go][jl](e);else for(const t of this[El])t[jl](e);e.push(`</${n}${a}>`)}else e.push("/>")}[al](e){if(this[go]){const e=new XmlObject(this[Zo],"#text");this[lo](e);e[go]=this[go];this[go]=""}this[lo](e);return!0}[sl](e){this[go]+=e}[ko](){if(this[go]&&this[El].length>0){const e=new XmlObject(this[Zo],"#text");this[lo](e);e[go]=this[go];delete this[go]}}[wl](){return"#text"===this[el]?HTMLResult.success({name:"#text",value:this[go]}):HTMLResult.EMPTY}[vo](){return this[Nl]}[Ao](e){const t=this[Nl].get(e);return void 0!==t?t:this[Oo](e)}*[Co](e,t){const a=this[Nl].get(e);a&&(yield a);for(const a of this[El]){a[el]===e&&(yield a);t&&(yield*a[Co](e,t))}}*[qo](e,t){const a=this[Nl].get(e);!a||t&&a[po]||(yield a);for(const a of this[El])yield*a[qo](e,t)}*[Ro](e,t,a){for(const n of this[El]){n[el]!==e||a&&n[po]||(yield n);t&&(yield*n[Ro](e,t,a))}}[Xo](){return null===this[zl]?0===this[El].length||this[El][0][Zo]===vl.xhtml.id:this[zl]}[Io](){return null===this[zl]?0===this[El].length?this[go].trim():this[El][0][Zo]===vl.xhtml.id?this[El][0][gl]().trim():null:this[go].trim()}[pl](e){e=e.value||"";this[go]=e.toString()}[wo](e=!1){const t=Object.create(null);e&&(t.$ns=this[Zo]);this[go]&&(t.$content=this[go]);t.$name=this[el];t.children=[];for(const a of this[El])t.children.push(a[wo](e));t.attributes=Object.create(null);for(const[e,a]of this[Nl])t.attributes[e]=a[go];return t}}class ContentObject extends XFAObject{constructor(e,t){super(e,t);this[go]=""}[sl](e){this[go]+=e}[ko](){}}class OptionObject extends ContentObject{constructor(e,t,a){super(e,t);this[$l]=a}[ko](){this[go]=getKeyword({data:this[go],defaultValue:this[$l][0],validate:e=>this[$l].includes(e)})}[co](e){super[co](e);delete this[$l]}}class StringObject extends ContentObject{[ko](){this[go]=this[go].trim()}}class IntegerObject extends ContentObject{constructor(e,t,a,n){super(e,t);this[Ll]=a;this[Zl]=n}[ko](){this[go]=getInteger({data:this[go],defaultValue:this[Ll],validate:this[Zl]})}[co](e){super[co](e);delete this[Ll];delete this[Zl]}}class Option01 extends IntegerObject{constructor(e,t){super(e,t,0,e=>1===e)}}class Option10 extends IntegerObject{constructor(e,t){super(e,t,1,e=>0===e)}}function measureToString(e){return"string"==typeof e?"0px":Number.isInteger(e)?`${e}px`:`${e.toFixed(2)}px`}const af={anchorType(e,t){const a=e[Ho]();if(a&&(!a.layout||"position"===a.layout)){"transform"in t||(t.transform="");switch(e.anchorType){case"bottomCenter":t.transform+="translate(-50%, -100%)";break;case"bottomLeft":t.transform+="translate(0,-100%)";break;case"bottomRight":t.transform+="translate(-100%,-100%)";break;case"middleCenter":t.transform+="translate(-50%,-50%)";break;case"middleLeft":t.transform+="translate(0,-50%)";break;case"middleRight":t.transform+="translate(-100%,-50%)";break;case"topCenter":t.transform+="translate(-50%,0)";break;case"topRight":t.transform+="translate(-100%,0)"}}},dimensions(e,t){const a=e[Ho]();let n=e.w;const s=e.h;if(a.layout?.includes("row")){const t=a[jo],s=e.colSpan;let r;if(-1===s){r=Math.sumPrecise(t.columnWidths.slice(t.currentColumn));t.currentColumn=0}else{r=Math.sumPrecise(t.columnWidths.slice(t.currentColumn,t.currentColumn+s));t.currentColumn=(t.currentColumn+e.colSpan)%t.columnWidths.length}isNaN(r)||(n=e.w=r)}t.width=""!==n?measureToString(n):"auto";t.height=""!==s?measureToString(s):"auto"},position(e,t){const a=e[Ho]();if(!a?.layout||"position"===a.layout){t.position="absolute";t.left=measureToString(e.x);t.top=measureToString(e.y)}},rotate(e,t){if(e.rotate){"transform"in t||(t.transform="");t.transform+=`rotate(-${e.rotate}deg)`;t.transformOrigin="top left"}},presence(e,t){switch(e.presence){case"invisible":t.visibility="hidden";break;case"hidden":case"inactive":t.display="none"}},hAlign(e,t){if("para"===e[el])switch(e.hAlign){case"justifyAll":t.textAlign="justify-all";break;case"radix":t.textAlign="left";break;default:t.textAlign=e.hAlign}else switch(e.hAlign){case"left":t.alignSelf="start";break;case"center":t.alignSelf="center";break;case"right":t.alignSelf="end"}},margin(e,t){e.margin&&(t.margin=e.margin[kl]().margin)}};function setMinMaxDimensions(e,t){if("position"===e[Ho]().layout){e.minW>0&&(t.minWidth=measureToString(e.minW));e.maxW>0&&(t.maxWidth=measureToString(e.maxW));e.minH>0&&(t.minHeight=measureToString(e.minH));e.maxH>0&&(t.maxHeight=measureToString(e.maxH))}}function layoutText(e,t,a,n,s,r){const i=new TextMeasure(t,a,n,s);"string"==typeof e?i.addString(e):e[rl](i);return i.compute(r)}function layoutNode(e,t){let a=null,n=null,s=!1;if((!e.w||!e.h)&&e.value){let r=0,i=0;if(e.margin){r=e.margin.leftInset+e.margin.rightInset;i=e.margin.topInset+e.margin.bottomInset}let o=null,l=null;if(e.para){l=Object.create(null);o=""===e.para.lineHeight?null:e.para.lineHeight;l.top=""===e.para.spaceAbove?0:e.para.spaceAbove;l.bottom=""===e.para.spaceBelow?0:e.para.spaceBelow;l.left=""===e.para.marginLeft?0:e.para.marginLeft;l.right=""===e.para.marginRight?0:e.para.marginRight}let f=e.font;if(!f){const t=e[No]();let a=e[Mo]();for(;a&&a!==t;){if(a.font){f=a.font;break}a=a[Mo]()}}const c=(e.w||t.width)-r,h=e[Po].fontFinder;if(e.value.exData&&e.value.exData[go]&&"text/html"===e.value.exData.contentType){const t=layoutText(e.value.exData[go],f,l,o,h,c);n=t.width;a=t.height;s=t.isBroken}else{const t=e.value[gl]();if(t){const e=layoutText(t,f,l,o,h,c);n=e.width;a=e.height;s=e.isBroken}}null===n||e.w||(n+=r);null===a||e.h||(a+=i)}return{w:n,h:a,isBroken:s}}function computeBbox(e,t,a){let n;if(""!==e.w&&""!==e.h)n=[e.x,e.y,e.w,e.h];else{if(!a)return null;let s=e.w;if(""===s){if(0===e.maxW){const t=e[Ho]();s="position"===t.layout&&""!==t.w?0:e.minW}else s=Math.min(e.maxW,a.width);t.attributes.style.width=measureToString(s)}let r=e.h;if(""===r){if(0===e.maxH){const t=e[Ho]();r="position"===t.layout&&""!==t.h?0:e.minH}else r=Math.min(e.maxH,a.height);t.attributes.style.height=measureToString(r)}n=[e.x,e.y,s,r]}return n}function fixDimensions(e){const t=e[Ho]();if(t.layout?.includes("row")){const a=t[jo],n=e.colSpan;let s;s=-1===n?Math.sumPrecise(a.columnWidths.slice(a.currentColumn)):Math.sumPrecise(a.columnWidths.slice(a.currentColumn,a.currentColumn+n));isNaN(s)||(e.w=s)}t.layout&&"position"!==t.layout&&(e.x=e.y=0);"table"===e.layout&&""===e.w&&Array.isArray(e.columnWidths)&&(e.w=Math.sumPrecise(e.columnWidths))}function layoutClass(e){switch(e.layout){case"position":default:return"xfaPosition";case"lr-tb":return"xfaLrTb";case"rl-row":return"xfaRlRow";case"rl-tb":return"xfaRlTb";case"row":return"xfaRow";case"table":return"xfaTable";case"tb":return"xfaTb"}}function toStyle(e,...t){const a=Object.create(null);for(const n of t){const t=e[n];if(null!==t)if(Object.hasOwn(af,n))af[n](e,a);else if(t instanceof XFAObject){const e=t[kl]();e?Object.assign(a,e):warn(`(DEBUG) - XFA - style for ${n} not implemented yet`)}}return a}function createWrapper(e,t){const{attributes:a}=t,{style:n}=a,s={name:"div",attributes:{class:["xfaWrapper"],style:Object.create(null)},children:[]};a.class.push("xfaWrapped");if(e.border){const{widths:a,insets:r}=e.border[jo];let i,o,l=r[0],f=r[3];const c=r[0]+r[2],h=r[1]+r[3];switch(e.border.hand){case"even":l-=a[0]/2;f-=a[3]/2;i=`calc(100% + ${(a[1]+a[3])/2-h}px)`;o=`calc(100% + ${(a[0]+a[2])/2-c}px)`;break;case"left":l-=a[0];f-=a[3];i=`calc(100% + ${a[1]+a[3]-h}px)`;o=`calc(100% + ${a[0]+a[2]-c}px)`;break;case"right":i=h?`calc(100% - ${h}px)`:"100%";o=c?`calc(100% - ${c}px)`:"100%"}const u=["xfaBorder"];isPrintOnly(e.border)&&u.push("xfaPrintOnly");const m={name:"div",attributes:{class:u,style:{top:`${l}px`,left:`${f}px`,width:i,height:o}},children:[]};for(const e of["border","borderWidth","borderColor","borderRadius","borderStyle"])if(void 0!==n[e]){m.attributes.style[e]=n[e];delete n[e]}s.children.push(m,t)}else s.children.push(t);for(const e of["background","backgroundClip","top","left","width","height","minWidth","minHeight","maxWidth","maxHeight","transform","transformOrigin","visibility"])if(void 0!==n[e]){s.attributes.style[e]=n[e];delete n[e]}s.attributes.style.position="absolute"===n.position?"absolute":"relative";delete n.position;if(n.alignSelf){s.attributes.style.alignSelf=n.alignSelf;delete n.alignSelf}return s}function fixTextIndent(e){const t=getMeasurement(e.textIndent,"0px");if(t>=0)return;const a="padding"+("left"===("right"===e.textAlign?"right":"left")?"Left":"Right"),n=getMeasurement(e[a],"0px");e[a]=n-t+"px"}function setAccess(e,t){switch(e.access){case"nonInteractive":t.push("xfaNonInteractive");break;case"readOnly":t.push("xfaReadOnly");break;case"protected":t.push("xfaDisabled")}}function isPrintOnly(e){return e.relevant.length>0&&!e.relevant[0].excluded&&"print"===e.relevant[0].viewname}function getCurrentPara(e){const t=e[No]()[jo].paraStack;return t.length?t.at(-1):null}function setPara(e,t,a){if(a.attributes.class?.includes("xfaRich")){if(t){""===e.h&&(t.height="auto");""===e.w&&(t.width="auto")}const n=getCurrentPara(e);if(n){const e=a.attributes.style;e.display="flex";e.flexDirection="column";switch(n.vAlign){case"top":e.justifyContent="start";break;case"bottom":e.justifyContent="end";break;case"middle":e.justifyContent="center"}const t=n[kl]();for(const[a,n]of Object.entries(t))a in e||(e[a]=n)}}}function setFontFamily(e,t,a,n){if(!a){delete n.fontFamily;return}const s=stripQuotes(e.typeface);n.fontFamily=serializeFontFamily(s);const r=a.find(s);if(r){const{fontFamily:a}=r.regular.cssFontInfo;a!==s&&(n.fontFamily=serializeFontFamily(a));const i=getCurrentPara(t);if(i&&""!==i.lineHeight)return;if(n.lineHeight)return;const o=selectFont(e,r);o&&(n.lineHeight=Math.max(1.2,o.lineHeight))}}function fixURL(e){const t=createValidAbsoluteUrl(e,null,{addDefaultProtocol:!0,tryConvertEncoding:!0});return t?t.href:null}function createLine(e,t){return{name:"div",attributes:{class:["lr-tb"===e.layout?"xfaLr":"xfaRl"]},children:t}}function flushHTML(e){if(!e[jo])return null;const t={name:"div",attributes:e[jo].attributes,children:e[jo].children};if(e[jo].failingNode){const a=e[jo].failingNode[yo]();a&&(e.layout.endsWith("-tb")?t.children.push(createLine(e,[a])):t.children.push(a))}return 0===t.children.length?null:t}function addHTML(e,t,a){const n=e[jo],s=n.availableSpace,[r,i,o,l]=a;switch(e.layout){case"position":n.width=Math.max(n.width,r+o);n.height=Math.max(n.height,i+l);n.children.push(t);break;case"lr-tb":case"rl-tb":if(!n.line||1===n.attempt){n.line=createLine(e,[]);n.children.push(n.line);n.numberInLine=0}n.numberInLine+=1;n.line.children.push(t);if(0===n.attempt){n.currentWidth+=o;n.height=Math.max(n.height,n.prevHeight+l)}else{n.currentWidth=o;n.prevHeight=n.height;n.height+=l;n.attempt=0}n.width=Math.max(n.width,n.currentWidth);break;case"rl-row":case"row":{n.children.push(t);n.width+=o;n.height=Math.max(n.height,l);const e=measureToString(n.height);for(const t of n.children)t.attributes.style.height=e;break}case"table":case"tb":n.width=MathClamp(o,n.width,s.width);n.height+=l;n.children.push(t)}}function getAvailableSpace(e){const t=e[jo].availableSpace,a=e.margin?e.margin.topInset+e.margin.bottomInset:0,n=e.margin?e.margin.leftInset+e.margin.rightInset:0;switch(e.layout){case"lr-tb":case"rl-tb":return 0===e[jo].attempt?{width:t.width-n-e[jo].currentWidth,height:t.height-a-e[jo].prevHeight}:{width:t.width-n,height:t.height-a-e[jo].height};case"rl-row":case"row":return{width:Math.sumPrecise(e[jo].columnWidths.slice(e[jo].currentColumn)),height:t.height-n};case"table":case"tb":return{width:t.width-n,height:t.height-a-e[jo].height};default:return t}}function checkDimensions(e,t){if(null===e[No]()[jo].firstUnsplittable||0===e.w||0===e.h)return!0;const a=e[Ho](),n=a[jo]?.attempt||0,[,s,r,i]=function getTransformedBBox(e){let t,a,n=""===e.w?NaN:e.w,s=""===e.h?NaN:e.h,[r,i]=[0,0];switch(e.anchorType||""){case"bottomCenter":[r,i]=[n/2,s];break;case"bottomLeft":[r,i]=[0,s];break;case"bottomRight":[r,i]=[n,s];break;case"middleCenter":[r,i]=[n/2,s/2];break;case"middleLeft":[r,i]=[0,s/2];break;case"middleRight":[r,i]=[n,s/2];break;case"topCenter":[r,i]=[n/2,0];break;case"topRight":[r,i]=[n,0]}switch(e.rotate||0){case 0:[t,a]=[-r,-i];break;case 90:[t,a]=[-i,r];[n,s]=[s,-n];break;case 180:[t,a]=[r,i];[n,s]=[-n,-s];break;case 270:[t,a]=[i,-r];[n,s]=[-s,n]}return[e.x+t+Math.min(0,n),e.y+a+Math.min(0,s),Math.abs(n),Math.abs(s)]}(e);switch(a.layout){case"lr-tb":case"rl-tb":return 0===n?e[No]()[jo].noLayoutFailure?""!==e.w?Math.round(r-t.width)<=2:t.width>2:!(""!==e.h&&Math.round(i-t.height)>2)&&(""!==e.w?Math.round(r-t.width)<=2||0===a[jo].numberInLine&&t.height>2:t.width>2):!!e[No]()[jo].noLayoutFailure||!(""!==e.h&&Math.round(i-t.height)>2)&&((""===e.w||Math.round(r-t.width)<=2||!a[$o]())&&t.height>2);case"table":case"tb":return!!e[No]()[jo].noLayoutFailure||(""===e.h||e[Vo]()?(""===e.w||Math.round(r-t.width)<=2||!a[$o]())&&t.height>2:Math.round(i-t.height)<=2);case"position":if(e[No]()[jo].noLayoutFailure||""===e.h||Math.round(i+s-t.height)<=2)return!0;return i+s>e[No]()[jo].currentContentArea.h;case"rl-row":case"row":return!!e[No]()[jo].noLayoutFailure||(""===e.h||Math.round(i-t.height)<=2);default:return!0}}const nf=vl.template.id,sf=/^H(\d+)$/,rf=new Set(["image/gif","image/jpeg","image/jpg","image/pjpeg","image/png","image/apng","image/x-png","image/bmp","image/x-ms-bmp","image/tiff","image/tif","application/octet-stream"]),of=[[[66,77],"image/bmp"],[[255,216,255],"image/jpeg"],[[73,73,42,0],"image/tiff"],[[77,77,0,42],"image/tiff"],[[71,73,70,56,57,97],"image/gif"],[[137,80,78,71,13,10,26,10],"image/png"]];function getBorderDims(e){if(!e||!e.border)return{w:0,h:0};const t=e.border[Fo]();return t?{w:t.widths[0]+t.widths[2]+t.insets[0]+t.insets[2],h:t.widths[1]+t.widths[3]+t.insets[1]+t.insets[3]}:{w:0,h:0}}function hasMargin(e){return e.margin&&(e.margin.topInset||e.margin.rightInset||e.margin.bottomInset||e.margin.leftInset)}function _setValue(e,t){if(!e.value){const t=new Value({});e[lo](t);e.value=t}e.value[pl](t)}function*getContainedChildren(e){for(const t of e[Oo]())t instanceof SubformSet?yield*t[Bo]():yield t}function isRequired(e){return"error"===e.validate?.nullTest}function setTabIndex(e){for(;e;){if(!e.traversal){e[dl]=e[Mo]()[dl];return}if(e[dl])return;let t=null;for(const a of e.traversal[Oo]())if("next"===a.operation){t=a;break}if(!t||!t.ref){e[dl]=e[Mo]()[dl];return}const a=e[No]();e[dl]=++a[dl];const n=a[hl](t.ref,e);if(!n)return;e=n[0]}}function applyAssist(e,t){const a=e.assist;if(a){const e=a[wl]();e&&(t.title=e);const n=a.role.match(sf);if(n){const e="heading",a=n[1];t.role=e;t["aria-level"]=a}}if("table"===e.layout)t.role="table";else if("row"===e.layout)t.role="row";else{const a=e[Mo]();"row"===a.layout&&(t.role="TH"===a.assist?.role?"columnheader":"cell")}}function ariaLabel(e){if(!e.assist)return null;const t=e.assist;return t.speak&&""!==t.speak[go]?t.speak[go]:t.toolTip?t.toolTip[go]:null}function valueToHtml(e){return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:Object.create(null)},children:[{name:"span",attributes:{style:Object.create(null)},value:e}]})}function setFirstUnsplittable(e){const t=e[No]();if(null===t[jo].firstUnsplittable){t[jo].firstUnsplittable=e;t[jo].noLayoutFailure=!0}}function unsetFirstUnsplittable(e){const t=e[No]();t[jo].firstUnsplittable===e&&(t[jo].noLayoutFailure=!1)}function handleBreak(e){if(e[jo])return!1;e[jo]=Object.create(null);if("auto"===e.targetType)return!1;const t=e[No]();let a=null;if(e.target){a=t[hl](e.target,e[Mo]());if(!a)return!1;a=a[0]}const{currentPageArea:n,currentContentArea:s}=t[jo];if("pageArea"===e.targetType){a instanceof PageArea||(a=null);if(e.startNew){e[jo].target=a||n;return!0}if(a&&a!==n){e[jo].target=a;return!0}return!1}a instanceof ContentArea||(a=null);const r=a&&a[Mo]();let i,o=r;if(e.startNew)if(a){const e=r.contentArea.children,t=e.indexOf(s),n=e.indexOf(a);-1!==t&&t<n&&(o=null);i=n-1}else i=n.contentArea.children.indexOf(s);else{if(!a||a===s)return!1;i=r.contentArea.children.indexOf(a)-1;o=r===n?null:r}e[jo].target=o;e[jo].index=i;return!0}function handleOverflow(e,t,a){const n=e[No](),s=n[jo].noLayoutFailure,r=t[Ho];t[Ho]=()=>e;n[jo].noLayoutFailure=!0;const i=t[wl](a);e[oo](i.html,i.bbox);n[jo].noLayoutFailure=s;t[Ho]=r}class AppearanceFilter extends StringObject{constructor(e){super(nf,"appearanceFilter");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Arc extends XFAObject{constructor(e){super(nf,"arc",!0);this.circular=getInteger({data:e.circular,defaultValue:0,validate:e=>1===e});this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.startAngle=getFloat({data:e.startAngle,defaultValue:0,validate:e=>!0});this.sweepAngle=getFloat({data:e.sweepAngle,defaultValue:360,validate:e=>!0});this.use=e.use||"";this.usehref=e.usehref||"";this.edge=null;this.fill=null}[wl](){const e=this.edge||new Edge({}),t=e[kl](),a=Object.create(null);"visible"===this.fill?.presence?Object.assign(a,this.fill[kl]()):a.fill="transparent";a.strokeWidth=measureToString("visible"===e.presence?e.thickness:0);a.stroke=t.color;let n;const s={xmlns:r,style:{width:"100%",height:"100%",overflow:"visible"}};if(360===this.sweepAngle)n={name:"ellipse",attributes:{xmlns:r,cx:"50%",cy:"50%",rx:"50%",ry:"50%",style:a}};else{const e=this.startAngle*Math.PI/180,t=this.sweepAngle*Math.PI/180,i=this.sweepAngle>180?1:0,[o,l,f,c]=[50*(1+Math.cos(e)),50*(1-Math.sin(e)),50*(1+Math.cos(e+t)),50*(1-Math.sin(e+t))];n={name:"path",attributes:{xmlns:r,d:`M ${o} ${l} A 50 50 0 ${i} 0 ${f} ${c}`,vectorEffect:"non-scaling-stroke",style:a}};Object.assign(s,{viewBox:"0 0 100 100",preserveAspectRatio:"none"})}const i={name:"svg",children:[n],attributes:s};if(hasMargin(this[Mo]()[Mo]()))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[i]});i.attributes.style.position="absolute";return HTMLResult.success(i)}}class Area extends XFAObject{constructor(e){super(nf,"area",!0);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.id=e.id||"";this.name=e.name||"";this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.desc=null;this.extras=null;this.area=new XFAObjectArray;this.draw=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}*[Bo](){yield*getContainedChildren(this)}[Yo](){return!0}[Wo](){return!0}[oo](e,t){const[a,n,s,r]=t;this[jo].width=Math.max(this[jo].width,a+s);this[jo].height=Math.max(this[jo].height,n+r);this[jo].children.push(e)}[So](){return this[jo].availableSpace}[wl](e){const t=toStyle(this,"position"),a={style:t,id:this[yl],class:["xfaArea"]};isPrintOnly(this)&&a.class.push("xfaPrintOnly");this.name&&(a.xfaName=this.name);const n=[];this[jo]={children:n,width:0,height:0,availableSpace:e};const s=this[fo]({filter:new Set(["area","draw","field","exclGroup","subform","subformSet"]),include:!0});if(!s.success){if(s.isBreak())return s;delete this[jo];return HTMLResult.FAILURE}t.width=measureToString(this[jo].width);t.height=measureToString(this[jo].height);const r={name:"div",attributes:a,children:n},i=[this.x,this.y,this[jo].width,this[jo].height];delete this[jo];return HTMLResult.success(r,i)}}class Assist extends XFAObject{constructor(e){super(nf,"assist",!0);this.id=e.id||"";this.role=e.role||"";this.use=e.use||"";this.usehref=e.usehref||"";this.speak=null;this.toolTip=null}[wl](){return this.toolTip?.[go]||null}}class Barcode extends XFAObject{constructor(e){super(nf,"barcode",!0);this.charEncoding=getKeyword({data:e.charEncoding?e.charEncoding.toLowerCase():"",defaultValue:"",validate:e=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\d{2}/)});this.checksum=getStringOption(e.checksum,["none","1mod10","1mod10_1mod11","2mod10","auto"]);this.dataColumnCount=getInteger({data:e.dataColumnCount,defaultValue:-1,validate:e=>e>=0});this.dataLength=getInteger({data:e.dataLength,defaultValue:-1,validate:e=>e>=0});this.dataPrep=getStringOption(e.dataPrep,["none","flateCompress"]);this.dataRowCount=getInteger({data:e.dataRowCount,defaultValue:-1,validate:e=>e>=0});this.endChar=e.endChar||"";this.errorCorrectionLevel=getInteger({data:e.errorCorrectionLevel,defaultValue:-1,validate:e=>e>=0&&e<=8});this.id=e.id||"";this.moduleHeight=getMeasurement(e.moduleHeight,"5mm");this.moduleWidth=getMeasurement(e.moduleWidth,"0.25mm");this.printCheckDigit=getInteger({data:e.printCheckDigit,defaultValue:0,validate:e=>1===e});this.rowColumnRatio=getRatio(e.rowColumnRatio);this.startChar=e.startChar||"";this.textLocation=getStringOption(e.textLocation,["below","above","aboveEmbedded","belowEmbedded","none"]);this.truncate=getInteger({data:e.truncate,defaultValue:0,validate:e=>1===e});this.type=getStringOption(e.type?e.type.toLowerCase():"",["aztec","codabar","code2of5industrial","code2of5interleaved","code2of5matrix","code2of5standard","code3of9","code3of9extended","code11","code49","code93","code128","code128a","code128b","code128c","code128sscc","datamatrix","ean8","ean8add2","ean8add5","ean13","ean13add2","ean13add5","ean13pwcd","fim","logmars","maxicode","msi","pdf417","pdf417macro","plessey","postauscust2","postauscust3","postausreplypaid","postausstandard","postukrm4scc","postusdpbc","postusimb","postusstandard","postus5zip","qrcode","rfid","rss14","rss14expanded","rss14limited","rss14stacked","rss14stackedomni","rss14truncated","telepen","ucc128","ucc128random","ucc128sscc","upca","upcaadd2","upcaadd5","upcapwcd","upce","upceadd2","upceadd5","upcean2","upcean5","upsmaxicode"]);this.upsMode=getStringOption(e.upsMode,["usCarrier","internationalCarrier","secureSymbol","standardSymbol"]);this.use=e.use||"";this.usehref=e.usehref||"";this.wideNarrowRatio=getRatio(e.wideNarrowRatio);this.encrypt=null;this.extras=null}}class Bind extends XFAObject{constructor(e){super(nf,"bind",!0);this.match=getStringOption(e.match,["once","dataRef","global","none"]);this.ref=e.ref||"";this.picture=null}}class BindItems extends XFAObject{constructor(e){super(nf,"bindItems");this.connection=e.connection||"";this.labelRef=e.labelRef||"";this.ref=e.ref||"";this.valueRef=e.valueRef||""}}class Bookend extends XFAObject{constructor(e){super(nf,"bookend");this.id=e.id||"";this.leader=e.leader||"";this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||""}}class BooleanElement extends Option01{constructor(e){super(nf,"boolean");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[wl](e){return valueToHtml(1===this[go]?"1":"0")}}class Border extends XFAObject{constructor(e){super(nf,"border",!0);this.break=getStringOption(e.break,["close","open"]);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.corner=new XFAObjectArray(4);this.edge=new XFAObjectArray(4);this.extras=null;this.fill=null;this.margin=null}[Fo](){if(!this[jo]){const e=this.edge.children.slice();if(e.length<4){const t=e.at(-1)||new Edge({});for(let a=e.length;a<4;a++)e.push(t)}const t=e.map(e=>e.thickness),a=[0,0,0,0];if(this.margin){a[0]=this.margin.topInset;a[1]=this.margin.rightInset;a[2]=this.margin.bottomInset;a[3]=this.margin.leftInset}this[jo]={widths:t,insets:a,edges:e}}return this[jo]}[kl](){const{edges:e}=this[Fo](),t=e.map(e=>{const t=e[kl]();t.color||="#000000";return t}),a=Object.create(null);this.margin&&Object.assign(a,this.margin[kl]());"visible"===this.fill?.presence&&Object.assign(a,this.fill[kl]());if(this.corner.children.some(e=>0!==e.radius)){const e=this.corner.children.map(e=>e[kl]());if(2===e.length||3===e.length){const t=e.at(-1);for(let a=e.length;a<4;a++)e.push(t)}a.borderRadius=e.map(e=>e.radius).join(" ")}switch(this.presence){case"invisible":case"hidden":a.borderStyle="";break;case"inactive":a.borderStyle="none";break;default:a.borderStyle=t.map(e=>e.style).join(" ")}a.borderWidth=t.map(e=>e.width).join(" ");a.borderColor=t.map(e=>e.color).join(" ");return a}}class Break extends XFAObject{constructor(e){super(nf,"break",!0);this.after=getStringOption(e.after,["auto","contentArea","pageArea","pageEven","pageOdd"]);this.afterTarget=e.afterTarget||"";this.before=getStringOption(e.before,["auto","contentArea","pageArea","pageEven","pageOdd"]);this.beforeTarget=e.beforeTarget||"";this.bookendLeader=e.bookendLeader||"";this.bookendTrailer=e.bookendTrailer||"";this.id=e.id||"";this.overflowLeader=e.overflowLeader||"";this.overflowTarget=e.overflowTarget||"";this.overflowTrailer=e.overflowTrailer||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class BreakAfter extends XFAObject{constructor(e){super(nf,"breakAfter",!0);this.id=e.id||"";this.leader=e.leader||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.target=e.target||"";this.targetType=getStringOption(e.targetType,["auto","contentArea","pageArea"]);this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||"";this.script=null}}class BreakBefore extends XFAObject{constructor(e){super(nf,"breakBefore",!0);this.id=e.id||"";this.leader=e.leader||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.target=e.target||"";this.targetType=getStringOption(e.targetType,["auto","contentArea","pageArea"]);this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||"";this.script=null}[wl](e){this[jo]={};return HTMLResult.FAILURE}}class Button extends XFAObject{constructor(e){super(nf,"button",!0);this.highlight=getStringOption(e.highlight,["inverted","none","outline","push"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[wl](e){const t=this[Mo]()[Mo](),a={name:"button",attributes:{id:this[yl],class:["xfaButton"],style:{}},children:[]};for(const e of t.event.children){if("click"!==e.activity||!e.script)continue;const t=recoverJsURL(e.script[go]);if(!t)continue;const n=fixURL(t.url);n&&a.children.push({name:"a",attributes:{id:"link"+this[yl],href:n,newWindow:t.newWindow,class:["xfaLink"],style:{}},children:[]})}return HTMLResult.success(a)}}class Calculate extends XFAObject{constructor(e){super(nf,"calculate",!0);this.id=e.id||"";this.override=getStringOption(e.override,["disabled","error","ignore","warning"]);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.message=null;this.script=null}}class Caption extends XFAObject{constructor(e){super(nf,"caption",!0);this.id=e.id||"";this.placement=getStringOption(e.placement,["left","bottom","inline","right","top"]);this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.reserve=Math.ceil(getMeasurement(e.reserve));this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.font=null;this.margin=null;this.para=null;this.value=null}[pl](e){_setValue(this,e)}[Fo](e){if(!this[jo]){let{width:t,height:a}=e;switch(this.placement){case"left":case"right":case"inline":t=this.reserve<=0?t:this.reserve;break;case"top":case"bottom":a=this.reserve<=0?a:this.reserve}this[jo]=layoutNode(this,{width:t,height:a})}return this[jo]}[wl](e){if(!this.value)return HTMLResult.EMPTY;this[ol]();const t=this.value[wl](e).html;if(!t){this[il]();return HTMLResult.EMPTY}const a=this.reserve;if(this.reserve<=0){const{w:t,h:a}=this[Fo](e);switch(this.placement){case"left":case"right":case"inline":this.reserve=t;break;case"top":case"bottom":this.reserve=a}}const n=[];"string"==typeof t?n.push({name:"#text",value:t}):n.push(t);const s=toStyle(this,"font","margin","visibility");switch(this.placement){case"left":case"right":this.reserve>0&&(s.width=measureToString(this.reserve));break;case"top":case"bottom":this.reserve>0&&(s.height=measureToString(this.reserve))}setPara(this,null,t);this[il]();this.reserve=a;return HTMLResult.success({name:"div",attributes:{style:s,class:["xfaCaption"]},children:n})}}class Certificate extends StringObject{constructor(e){super(nf,"certificate");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Certificates extends XFAObject{constructor(e){super(nf,"certificates",!0);this.credentialServerPolicy=getStringOption(e.credentialServerPolicy,["optional","required"]);this.id=e.id||"";this.url=e.url||"";this.urlPolicy=e.urlPolicy||"";this.use=e.use||"";this.usehref=e.usehref||"";this.encryption=null;this.issuers=null;this.keyUsage=null;this.oids=null;this.signing=null;this.subjectDNs=null}}class CheckButton extends XFAObject{constructor(e){super(nf,"checkButton",!0);this.id=e.id||"";this.mark=getStringOption(e.mark,["default","check","circle","cross","diamond","square","star"]);this.shape=getStringOption(e.shape,["square","round"]);this.size=getMeasurement(e.size,"10pt");this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[wl](e){const t=toStyle(this,"margin"),a=measureToString(this.size);t.width=t.height=a;let n,s,r;const i=this[Mo]()[Mo](),o=i.items.children.length&&i.items.children[0][wl]().html||[],l={on:(void 0!==o[0]?o[0]:"on").toString(),off:(void 0!==o[1]?o[1]:"off").toString()},f=(i.value?.[gl]()||"off")===l.on||void 0,c=i[Ho](),h=i[yl];let u;if(c instanceof ExclGroup){r=c[yl];n="radio";s="xfaRadio";u=c[bo]?.[yl]||c[yl]}else{n="checkbox";s="xfaCheckbox";u=i[bo]?.[yl]||i[yl]}const m={name:"input",attributes:{class:[s],style:t,fieldId:h,dataId:u,type:n,checked:f,xfaOn:l.on,xfaOff:l.off,"aria-label":ariaLabel(i),"aria-required":!1}};r&&(m.attributes.name=r);if(isRequired(i)){m.attributes["aria-required"]=!0;m.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[m]})}}class ChoiceList extends XFAObject{constructor(e){super(nf,"choiceList",!0);this.commitOn=getStringOption(e.commitOn,["select","exit"]);this.id=e.id||"";this.open=getStringOption(e.open,["userControl","always","multiSelect","onEntry"]);this.textEntry=getInteger({data:e.textEntry,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[wl](e){const t=toStyle(this,"border","margin"),a=this[Mo]()[Mo](),n={fontSize:`calc(${a.font?.size||10}px * var(--total-scale-factor))`},s=[];if(a.items.children.length>0){const e=a.items;let t=0,r=0;if(2===e.children.length){t=e.children[0].save;r=1-t}const i=e.children[t][wl]().html,o=e.children[r][wl]().html;let l=!1;const f=a.value?.[gl]()||"";for(let e=0,t=i.length;e<t;e++){const t={name:"option",attributes:{value:o[e]||i[e],style:n},value:i[e]};o[e]===f&&(t.attributes.selected=l=!0);s.push(t)}l||s.splice(0,0,{name:"option",attributes:{hidden:!0,selected:!0},value:" "})}const r={class:["xfaSelect"],fieldId:a[yl],dataId:a[bo]?.[yl]||a[yl],style:t,"aria-label":ariaLabel(a),"aria-required":!1};if(isRequired(a)){r["aria-required"]=!0;r.required=!0}"multiSelect"===this.open&&(r.multiple=!0);return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[{name:"select",children:s,attributes:r}]})}}class Color extends XFAObject{constructor(e){super(nf,"color",!0);this.cSpace=getStringOption(e.cSpace,["SRGB"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.value=e.value?function getColor(e,t=[0,0,0]){let[a,n,s]=t;if(!e)return{r:a,g:n,b:s};const r=e.split(",",3).map(e=>{e=parseInt(e.trim(),10);return isNaN(e)?0:MathClamp(e,0,255)});if(r.length<3)return{r:a,g:n,b:s};[a,n,s]=r;return{r:a,g:n,b:s}}(e.value):"";this.extras=null}[Eo](){return!1}[kl](){return this.value?Util.makeHexColor(this.value.r,this.value.g,this.value.b):null}}class Comb extends XFAObject{constructor(e){super(nf,"comb");this.id=e.id||"";this.numberOfCells=getInteger({data:e.numberOfCells,defaultValue:0,validate:e=>e>=0});this.use=e.use||"";this.usehref=e.usehref||""}}class Connect extends XFAObject{constructor(e){super(nf,"connect",!0);this.connection=e.connection||"";this.id=e.id||"";this.ref=e.ref||"";this.usage=getStringOption(e.usage,["exportAndImport","exportOnly","importOnly"]);this.use=e.use||"";this.usehref=e.usehref||"";this.picture=null}}class ContentArea extends XFAObject{constructor(e){super(nf,"contentArea",!0);this.h=getMeasurement(e.h);this.id=e.id||"";this.name=e.name||"";this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.w=getMeasurement(e.w);this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.desc=null;this.extras=null}[wl](e){const t={left:measureToString(this.x),top:measureToString(this.y),width:measureToString(this.w),height:measureToString(this.h)},a=["xfaContentarea"];isPrintOnly(this)&&a.push("xfaPrintOnly");return HTMLResult.success({name:"div",children:[],attributes:{style:t,class:a,id:this[yl]}})}}class Corner extends XFAObject{constructor(e){super(nf,"corner",!0);this.id=e.id||"";this.inverted=getInteger({data:e.inverted,defaultValue:0,validate:e=>1===e});this.join=getStringOption(e.join,["square","round"]);this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.radius=getMeasurement(e.radius);this.stroke=getStringOption(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]);this.thickness=getMeasurement(e.thickness,"0.5pt");this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[kl](){const e=toStyle(this,"visibility");e.radius=measureToString("square"===this.join?0:this.radius);return e}}class DateElement extends ContentObject{constructor(e){super(nf,"date");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[ko](){const e=this[go].trim();this[go]=e?new Date(e):null}[wl](e){return valueToHtml(this[go]?this[go].toString():"")}}class DateTime extends ContentObject{constructor(e){super(nf,"dateTime");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[ko](){const e=this[go].trim();this[go]=e?new Date(e):null}[wl](e){return valueToHtml(this[go]?this[go].toString():"")}}class DateTimeEdit extends XFAObject{constructor(e){super(nf,"dateTimeEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.picker=getStringOption(e.picker,["host","none"]);this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.comb=null;this.extras=null;this.margin=null}[wl](e){const t=toStyle(this,"border","font","margin"),a=this[Mo]()[Mo](),n={name:"input",attributes:{type:"text",fieldId:a[yl],dataId:a[bo]?.[yl]||a[yl],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(a),"aria-required":!1}};if(isRequired(a)){n.attributes["aria-required"]=!0;n.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[n]})}}class Decimal extends ContentObject{constructor(e){super(nf,"decimal");this.fracDigits=getInteger({data:e.fracDigits,defaultValue:2,validate:e=>!0});this.id=e.id||"";this.leadDigits=getInteger({data:e.leadDigits,defaultValue:-1,validate:e=>!0});this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[ko](){const e=parseFloat(this[go].trim());this[go]=isNaN(e)?null:e}[wl](e){return valueToHtml(null!==this[go]?this[go].toString():"")}}class DefaultUi extends XFAObject{constructor(e){super(nf,"defaultUi",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class Desc extends XFAObject{constructor(e){super(nf,"desc",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}}class DigestMethod extends OptionObject{constructor(e){super(nf,"digestMethod",["","SHA1","SHA256","SHA512","RIPEMD160"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class DigestMethods extends XFAObject{constructor(e){super(nf,"digestMethods",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.digestMethod=new XFAObjectArray}}class Draw extends XFAObject{constructor(e){super(nf,"draw",!0);this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.rotate=getInteger({data:e.rotate,defaultValue:0,validate:e=>e%90==0});this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.border=null;this.caption=null;this.desc=null;this.extras=null;this.font=null;this.keep=null;this.margin=null;this.para=null;this.traversal=null;this.ui=null;this.value=null;this.setProperty=new XFAObjectArray}[pl](e){_setValue(this,e)}[wl](e){setTabIndex(this);if("hidden"===this.presence||"inactive"===this.presence)return HTMLResult.EMPTY;fixDimensions(this);this[ol]();const t=this.w,a=this.h,{w:n,h:s,isBroken:r}=layoutNode(this,e);if(n&&""===this.w){if(r&&this[Ho]()[$o]()){this[il]();return HTMLResult.FAILURE}this.w=n}s&&""===this.h&&(this.h=s);setFirstUnsplittable(this);if(!checkDimensions(this,e)){this.w=t;this.h=a;this[il]();return HTMLResult.FAILURE}unsetFirstUnsplittable(this);const i=toStyle(this,"font","hAlign","dimensions","position","presence","rotate","anchorType","border","margin");setMinMaxDimensions(this,i);if(i.margin){i.padding=i.margin;delete i.margin}const o=["xfaDraw"];this.font&&o.push("xfaFont");isPrintOnly(this)&&o.push("xfaPrintOnly");const l={style:i,id:this[yl],class:o};this.name&&(l.xfaName=this.name);const f={name:"div",attributes:l,children:[]};applyAssist(this,l);const c=computeBbox(this,f,e),h=this.value?this.value[wl](e).html:null;if(null===h){this.w=t;this.h=a;this[il]();return HTMLResult.success(createWrapper(this,f),c)}f.children.push(h);setPara(this,i,h);this.w=t;this.h=a;this[il]();return HTMLResult.success(createWrapper(this,f),c)}}class Edge extends XFAObject{constructor(e){super(nf,"edge",!0);this.cap=getStringOption(e.cap,["square","butt","round"]);this.id=e.id||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.stroke=getStringOption(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]);this.thickness=getMeasurement(e.thickness,"0.5pt");this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[kl](){const e=toStyle(this,"visibility");Object.assign(e,{linecap:this.cap,width:measureToString(this.thickness),color:this.color?this.color[kl]():"#000000",style:""});if("visible"!==this.presence)e.style="none";else switch(this.stroke){case"solid":e.style="solid";break;case"dashDot":case"dashDotDot":case"dashed":e.style="dashed";break;case"dotted":e.style="dotted";break;case"embossed":e.style="ridge";break;case"etched":e.style="groove";break;case"lowered":e.style="inset";break;case"raised":e.style="outset"}return e}}class Encoding extends OptionObject{constructor(e){super(nf,"encoding",["adbe.x509.rsa_sha1","adbe.pkcs7.detached","adbe.pkcs7.sha1"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Encodings extends XFAObject{constructor(e){super(nf,"encodings",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.encoding=new XFAObjectArray}}class Encrypt extends XFAObject{constructor(e){super(nf,"encrypt",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=null}}class EncryptData extends XFAObject{constructor(e){super(nf,"encryptData",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["encrypt","decrypt"]);this.target=e.target||"";this.use=e.use||"";this.usehref=e.usehref||"";this.filter=null;this.manifest=null}}class Encryption extends XFAObject{constructor(e){super(nf,"encryption",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class EncryptionMethod extends OptionObject{constructor(e){super(nf,"encryptionMethod",["","AES256-CBC","TRIPLEDES-CBC","AES128-CBC","AES192-CBC"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class EncryptionMethods extends XFAObject{constructor(e){super(nf,"encryptionMethods",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.encryptionMethod=new XFAObjectArray}}class Event extends XFAObject{constructor(e){super(nf,"event",!0);this.activity=getStringOption(e.activity,["click","change","docClose","docReady","enter","exit","full","indexChange","initialize","mouseDown","mouseEnter","mouseExit","mouseUp","postExecute","postOpen","postPrint","postSave","postSign","postSubmit","preExecute","preOpen","prePrint","preSave","preSign","preSubmit","ready","validationState"]);this.id=e.id||"";this.listen=getStringOption(e.listen,["refOnly","refAndDescendents"]);this.name=e.name||"";this.ref=e.ref||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.encryptData=null;this.execute=null;this.script=null;this.signData=null;this.submit=null}}class ExData extends ContentObject{constructor(e){super(nf,"exData");this.contentType=e.contentType||"";this.href=e.href||"";this.id=e.id||"";this.maxLength=getInteger({data:e.maxLength,defaultValue:-1,validate:e=>e>=-1});this.name=e.name||"";this.rid=e.rid||"";this.transferEncoding=getStringOption(e.transferEncoding,["none","base64","package"]);this.use=e.use||"";this.usehref=e.usehref||""}[Uo](){return"text/html"===this.contentType}[al](e){if("text/html"===this.contentType&&e[Zo]===vl.xhtml.id){this[go]=e;return!0}if("text/xml"===this.contentType){this[go]=e;return!0}return!1}[wl](e){return"text/html"===this.contentType&&this[go]?this[go][wl](e):HTMLResult.EMPTY}}class ExObject extends XFAObject{constructor(e){super(nf,"exObject",!0);this.archive=e.archive||"";this.classId=e.classId||"";this.codeBase=e.codeBase||"";this.codeType=e.codeType||"";this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.exObject=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}}class ExclGroup extends XFAObject{constructor(e){super(nf,"exclGroup",!0);this.access=getStringOption(e.access,["open","nonInteractive","protected","readOnly"]);this.accessKey=e.accessKey||"";this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.layout=getStringOption(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]);this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.border=null;this.calculate=null;this.caption=null;this.desc=null;this.extras=null;this.margin=null;this.para=null;this.traversal=null;this.validate=null;this.connect=new XFAObjectArray;this.event=new XFAObjectArray;this.field=new XFAObjectArray;this.setProperty=new XFAObjectArray}[Wo](){return!0}[Eo](){return!0}[pl](e){for(const t of this.field.children){if(!t.value){const e=new Value({});t[lo](e);t.value=e}t.value[pl](e)}}[$o](){return this.layout.endsWith("-tb")&&0===this[jo].attempt&&this[jo].numberInLine>0||this[Mo]()[$o]()}[Vo](){const e=this[Ho]();if(!e[Vo]())return!1;if(void 0!==this[jo]._isSplittable)return this[jo]._isSplittable;if("position"===this.layout||this.layout.includes("row")){this[jo]._isSplittable=!1;return!1}if(e.layout?.endsWith("-tb")&&0!==e[jo].numberInLine)return!1;this[jo]._isSplittable=!0;return!0}[yo](){return flushHTML(this)}[oo](e,t){addHTML(this,e,t)}[So](){return getAvailableSpace(this)}[wl](e){setTabIndex(this);if("hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return HTMLResult.EMPTY;fixDimensions(this);const t=[],a={id:this[yl],class:[]};setAccess(this,a.class);this[jo]||=Object.create(null);Object.assign(this[jo],{children:t,attributes:a,attempt:0,line:null,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});const n=this[Vo]();n||setFirstUnsplittable(this);if(!checkDimensions(this,e))return HTMLResult.FAILURE;const s=new Set(["field"]);if(this.layout.includes("row")){const e=this[Ho]().columnWidths;if(Array.isArray(e)&&e.length>0){this[jo].columnWidths=e;this[jo].currentColumn=0}}const r=toStyle(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),i=["xfaExclgroup"],o=layoutClass(this);o&&i.push(o);isPrintOnly(this)&&i.push("xfaPrintOnly");a.style=r;a.class=i;this.name&&(a.xfaName=this.name);this[ol]();const l="lr-tb"===this.layout||"rl-tb"===this.layout,f=l?2:1;for(;this[jo].attempt<f;this[jo].attempt++){l&&1===this[jo].attempt&&(this[jo].numberInLine=0);const e=this[fo]({filter:s,include:!0});if(e.success)break;if(e.isBreak()){this[il]();return e}if(l&&0===this[jo].attempt&&0===this[jo].numberInLine&&!this[No]()[jo].noLayoutFailure){this[jo].attempt=f;break}}this[il]();n||unsetFirstUnsplittable(this);if(this[jo].attempt===f){n||delete this[jo];return HTMLResult.FAILURE}let c=0,h=0;if(this.margin){c=this.margin.leftInset+this.margin.rightInset;h=this.margin.topInset+this.margin.bottomInset}const u=Math.max(this[jo].width+c,this.w||0),m=Math.max(this[jo].height+h,this.h||0),p=[this.x,this.y,u,m];""===this.w&&(r.width=measureToString(u));""===this.h&&(r.height=measureToString(m));const d={name:"div",attributes:a,children:t};applyAssist(this,a);delete this[jo];return HTMLResult.success(createWrapper(this,d),p)}}class Execute extends XFAObject{constructor(e){super(nf,"execute");this.connection=e.connection||"";this.executeType=getStringOption(e.executeType,["import","remerge"]);this.id=e.id||"";this.runAt=getStringOption(e.runAt,["client","both","server"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Extras extends XFAObject{constructor(e){super(nf,"extras",!0);this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.extras=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}}class Field extends XFAObject{constructor(e){super(nf,"field",!0);this.access=getStringOption(e.access,["open","nonInteractive","protected","readOnly"]);this.accessKey=e.accessKey||"";this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.rotate=getInteger({data:e.rotate,defaultValue:0,validate:e=>e%90==0});this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.border=null;this.calculate=null;this.caption=null;this.desc=null;this.extras=null;this.font=null;this.format=null;this.items=new XFAObjectArray(2);this.keep=null;this.margin=null;this.para=null;this.traversal=null;this.ui=null;this.validate=null;this.value=null;this.bindItems=new XFAObjectArray;this.connect=new XFAObjectArray;this.event=new XFAObjectArray;this.setProperty=new XFAObjectArray}[Wo](){return!0}[pl](e){_setValue(this,e)}[wl](e){setTabIndex(this);if(!this.ui){this.ui=new Ui({});this.ui[Po]=this[Po];this[lo](this.ui);let e;switch(this.items.children.length){case 0:e=new TextEdit({});this.ui.textEdit=e;break;case 1:e=new CheckButton({});this.ui.checkButton=e;break;case 2:e=new ChoiceList({});this.ui.choiceList=e}this.ui[lo](e)}if(!this.ui||"hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return HTMLResult.EMPTY;this.caption&&delete this.caption[jo];this[ol]();const t=this.caption?this.caption[wl](e).html:null,a=this.w,n=this.h;let s=0,r=0;if(this.margin){s=this.margin.leftInset+this.margin.rightInset;r=this.margin.topInset+this.margin.bottomInset}let i=null;if(""===this.w||""===this.h){let t=null,a=null,n=0,o=0;if(this.ui.checkButton)n=o=this.ui.checkButton.size;else{const{w:t,h:a}=layoutNode(this,e);if(null!==t){n=t;o=a}else o=function fonts_getMetrics(e,t=!1){let a=null;if(e){const t=stripQuotes(e.typeface),n=e[Po].fontFinder.find(t);a=selectFont(e,n)}if(!a)return{lineHeight:12,lineGap:2,lineNoGap:10};const n=e.size||10,s=a.lineHeight?Math.max(t?0:1.2,a.lineHeight):1.2,r=void 0===a.lineGap?.2:a.lineGap;return{lineHeight:s*n,lineGap:r*n,lineNoGap:Math.max(1,s-r)*n}}(this.font,!0).lineNoGap}i=getBorderDims(this.ui[Fo]());n+=i.w;o+=i.h;if(this.caption){const{w:s,h:r,isBroken:i}=this.caption[Fo](e);if(i&&this[Ho]()[$o]()){this[il]();return HTMLResult.FAILURE}t=s;a=r;switch(this.caption.placement){case"left":case"right":case"inline":t+=n;break;case"top":case"bottom":a+=o}}else{t=n;a=o}if(t&&""===this.w){t+=s;this.w=Math.min(this.maxW<=0?1/0:this.maxW,this.minW+1<t?t:this.minW)}if(a&&""===this.h){a+=r;this.h=Math.min(this.maxH<=0?1/0:this.maxH,this.minH+1<a?a:this.minH)}}this[il]();fixDimensions(this);setFirstUnsplittable(this);if(!checkDimensions(this,e)){this.w=a;this.h=n;this[il]();return HTMLResult.FAILURE}unsetFirstUnsplittable(this);const o=toStyle(this,"font","dimensions","position","rotate","anchorType","presence","margin","hAlign");setMinMaxDimensions(this,o);const l=["xfaField"];this.font&&l.push("xfaFont");isPrintOnly(this)&&l.push("xfaPrintOnly");const f={style:o,id:this[yl],class:l};if(o.margin){o.padding=o.margin;delete o.margin}setAccess(this,l);this.name&&(f.xfaName=this.name);const c=[],h={name:"div",attributes:f,children:c};applyAssist(this,f);const u=this.border?this.border[kl]():null,m=computeBbox(this,h,e),p=this.ui[wl]().html;if(!p){Object.assign(o,u);return HTMLResult.success(createWrapper(this,h),m)}this[dl]&&(p.children?.[0]?p.children[0].attributes.tabindex=this[dl]:p.attributes.tabindex=this[dl]);p.attributes.style||=Object.create(null);let d=null;if(this.ui.button){1===p.children.length&&([d]=p.children.splice(0,1));Object.assign(p.attributes.style,u)}else Object.assign(o,u);c.push(p);if(this.value)if(this.ui.imageEdit)p.children.push(this.value[wl]().html);else if(!this.ui.button){let e="";if(this.value.exData)e=this.value.exData[gl]();else if(this.value.text)e=this.value.text[Fo]();else{const t=this.value[wl]().html;null!==t&&(e=t.children[0].value)}this.ui.textEdit&&this.value.text?.maxChars&&(p.children[0].attributes.maxLength=this.value.text.maxChars);if(e){if(this.ui.numericEdit){e=parseFloat(e);e=isNaN(e)?"":e.toString()}"textarea"===p.children[0].name?p.children[0].attributes.textContent=e:p.children[0].attributes.value=e}}if(!this.ui.imageEdit&&p.children?.[0]&&this.h){i||=getBorderDims(this.ui[Fo]());if(this.caption&&["top","bottom"].includes(this.caption.placement)){let t=this.caption.reserve;t<=0&&(t=this.caption[Fo](e).h);const a=this.h-t-r-i.h;p.children[0].attributes.style.height=measureToString(a)}else p.children[0].attributes.style.height="100%"}d&&p.children.push(d);if(!t){p.attributes.class&&p.attributes.class.push("xfaLeft");this.w=a;this.h=n;return HTMLResult.success(createWrapper(this,h),m)}if(this.ui.button){o.padding&&delete o.padding;"div"===t.name&&(t.name="span");p.children.push(t);return HTMLResult.success(h,m)}this.ui.checkButton&&(t.attributes.class[0]="xfaCaptionForCheckButton");p.attributes.class||=[];p.children.splice(0,0,t);switch(this.caption.placement){case"left":case"inline":p.attributes.class.push("xfaLeft");break;case"right":p.attributes.class.push("xfaRight");break;case"top":p.attributes.class.push("xfaTop");break;case"bottom":p.attributes.class.push("xfaBottom")}this.w=a;this.h=n;return HTMLResult.success(createWrapper(this,h),m)}}class Fill extends XFAObject{constructor(e){super(nf,"fill",!0);this.id=e.id||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null;this.linear=null;this.pattern=null;this.radial=null;this.solid=null;this.stipple=null}[kl](){const e=this[Mo](),t=e[Mo]()[Mo](),a=Object.create(null);let n="color",s=n;if(e instanceof Border){n="background-color";s="background";t instanceof Ui&&(a.backgroundColor="white")}if(e instanceof Rectangle||e instanceof Arc){n=s="fill";a.fill="white"}for(const e of Object.getOwnPropertyNames(this)){if("extras"===e||"color"===e)continue;const t=this[e];if(!(t instanceof XFAObject))continue;const r=t[kl](this.color);r&&(a[r.startsWith("#")?n:s]=r);return a}if(this.color?.value){const e=this.color[kl]();a[e.startsWith("#")?n:s]=e}return a}}class Filter extends XFAObject{constructor(e){super(nf,"filter",!0);this.addRevocationInfo=getStringOption(e.addRevocationInfo,["","required","optional","none"]);this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.version=getInteger({data:this.version,defaultValue:5,validate:e=>e>=1&&e<=5});this.appearanceFilter=null;this.certificates=null;this.digestMethods=null;this.encodings=null;this.encryptionMethods=null;this.handler=null;this.lockDocument=null;this.mdp=null;this.reasons=null;this.timeStamp=null}}class Float extends ContentObject{constructor(e){super(nf,"float");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[ko](){const e=parseFloat(this[go].trim());this[go]=isNaN(e)?null:e}[wl](e){return valueToHtml(null!==this[go]?this[go].toString():"")}}class template_Font extends XFAObject{constructor(e){super(nf,"font",!0);this.baselineShift=getMeasurement(e.baselineShift);this.fontHorizontalScale=getFloat({data:e.fontHorizontalScale,defaultValue:100,validate:e=>e>=0});this.fontVerticalScale=getFloat({data:e.fontVerticalScale,defaultValue:100,validate:e=>e>=0});this.id=e.id||"";this.kerningMode=getStringOption(e.kerningMode,["none","pair"]);this.letterSpacing=getMeasurement(e.letterSpacing,"0");this.lineThrough=getInteger({data:e.lineThrough,defaultValue:0,validate:e=>1===e||2===e});this.lineThroughPeriod=getStringOption(e.lineThroughPeriod,["all","word"]);this.overline=getInteger({data:e.overline,defaultValue:0,validate:e=>1===e||2===e});this.overlinePeriod=getStringOption(e.overlinePeriod,["all","word"]);this.posture=getStringOption(e.posture,["normal","italic"]);this.size=getMeasurement(e.size,"10pt");this.typeface=e.typeface||"Courier";this.underline=getInteger({data:e.underline,defaultValue:0,validate:e=>1===e||2===e});this.underlinePeriod=getStringOption(e.underlinePeriod,["all","word"]);this.use=e.use||"";this.usehref=e.usehref||"";this.weight=getStringOption(e.weight,["normal","bold"]);this.extras=null;this.fill=null}[co](e){super[co](e);this[Po].usedTypefaces.add(this.typeface)}[kl](){const e=toStyle(this,"fill"),t=e.color;if(t)if("#000000"===t)delete e.color;else if(!t.startsWith("#")){e.background=t;e.backgroundClip="text";e.color="transparent"}this.baselineShift&&(e.verticalAlign=measureToString(this.baselineShift));e.fontKerning="none"===this.kerningMode?"none":"normal";e.letterSpacing=measureToString(this.letterSpacing);if(0!==this.lineThrough){e.textDecoration="line-through";2===this.lineThrough&&(e.textDecorationStyle="double")}if(0!==this.overline){e.textDecoration="overline";2===this.overline&&(e.textDecorationStyle="double")}e.fontStyle=this.posture;e.fontSize=measureToString(.99*this.size);setFontFamily(this,this,this[Po].fontFinder,e);if(0!==this.underline){e.textDecoration="underline";2===this.underline&&(e.textDecorationStyle="double")}e.fontWeight=this.weight;return e}}class Format extends XFAObject{constructor(e){super(nf,"format",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.picture=null}}class Handler extends StringObject{constructor(e){super(nf,"handler");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Hyphenation extends XFAObject{constructor(e){super(nf,"hyphenation");this.excludeAllCaps=getInteger({data:e.excludeAllCaps,defaultValue:0,validate:e=>1===e});this.excludeInitialCap=getInteger({data:e.excludeInitialCap,defaultValue:0,validate:e=>1===e});this.hyphenate=getInteger({data:e.hyphenate,defaultValue:0,validate:e=>1===e});this.id=e.id||"";this.pushCharacterCount=getInteger({data:e.pushCharacterCount,defaultValue:3,validate:e=>e>=0});this.remainCharacterCount=getInteger({data:e.remainCharacterCount,defaultValue:3,validate:e=>e>=0});this.use=e.use||"";this.usehref=e.usehref||"";this.wordCharacterCount=getInteger({data:e.wordCharacterCount,defaultValue:7,validate:e=>e>=0})}}class Image extends StringObject{constructor(e){super(nf,"image");this.aspect=getStringOption(e.aspect,["fit","actual","height","none","width"]);this.contentType=e.contentType||"";this.href=e.href||"";this.id=e.id||"";this.name=e.name||"";this.transferEncoding=getStringOption(e.transferEncoding,["base64","none","package"]);this.use=e.use||"";this.usehref=e.usehref||""}[wl](){if(this.contentType&&!rf.has(this.contentType.toLowerCase()))return HTMLResult.EMPTY;let e=this[Po].images?.get(this.href);if(!e&&(this.href||!this[go]))return HTMLResult.EMPTY;e||"base64"!==this.transferEncoding||(e=Uint8Array.fromBase64(this[go]));if(!e)return HTMLResult.EMPTY;if(!this.contentType){for(const[t,a]of of)if(e.length>t.length&&t.every((t,a)=>t===e[a])){this.contentType=a;break}if(!this.contentType)return HTMLResult.EMPTY}const t=new Blob([e],{type:this.contentType});let a;switch(this.aspect){case"fit":case"actual":break;case"height":a={height:"100%",objectFit:"fill"};break;case"none":a={width:"100%",height:"100%",objectFit:"fill"};break;case"width":a={width:"100%",objectFit:"fill"}}const n=this[Mo]();return HTMLResult.success({name:"img",attributes:{class:["xfaImage"],style:a,src:URL.createObjectURL(t),alt:n?ariaLabel(n[Mo]()):null}})}}class ImageEdit extends XFAObject{constructor(e){super(nf,"imageEdit",!0);this.data=getStringOption(e.data,["link","embed"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[wl](e){return"embed"===this.data?HTMLResult.success({name:"div",children:[],attributes:{}}):HTMLResult.EMPTY}}class Integer extends ContentObject{constructor(e){super(nf,"integer");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[ko](){const e=parseInt(this[go].trim(),10);this[go]=isNaN(e)?null:e}[wl](e){return valueToHtml(null!==this[go]?this[go].toString():"")}}class Issuers extends XFAObject{constructor(e){super(nf,"issuers",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class Items extends XFAObject{constructor(e){super(nf,"items",!0);this.id=e.id||"";this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.ref=e.ref||"";this.save=getInteger({data:e.save,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}[wl](){const e=[];for(const t of this[Oo]())e.push(t[gl]());return HTMLResult.success(e)}}class Keep extends XFAObject{constructor(e){super(nf,"keep",!0);this.id=e.id||"";const t=["none","contentArea","pageArea"];this.intact=getStringOption(e.intact,t);this.next=getStringOption(e.next,t);this.previous=getStringOption(e.previous,t);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class KeyUsage extends XFAObject{constructor(e){super(nf,"keyUsage");const t=["","yes","no"];this.crlSign=getStringOption(e.crlSign,t);this.dataEncipherment=getStringOption(e.dataEncipherment,t);this.decipherOnly=getStringOption(e.decipherOnly,t);this.digitalSignature=getStringOption(e.digitalSignature,t);this.encipherOnly=getStringOption(e.encipherOnly,t);this.id=e.id||"";this.keyAgreement=getStringOption(e.keyAgreement,t);this.keyCertSign=getStringOption(e.keyCertSign,t);this.keyEncipherment=getStringOption(e.keyEncipherment,t);this.nonRepudiation=getStringOption(e.nonRepudiation,t);this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Line extends XFAObject{constructor(e){super(nf,"line",!0);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.slope=getStringOption(e.slope,["\\","/"]);this.use=e.use||"";this.usehref=e.usehref||"";this.edge=null}[wl](){const e=this[Mo]()[Mo](),t=this.edge||new Edge({}),a=t[kl](),n=Object.create(null),s="visible"===t.presence?t.thickness:0;n.strokeWidth=measureToString(s);n.stroke=a.color;let i,o,l,f,c="100%",h="100%";if(e.w<=s){[i,o,l,f]=["50%",0,"50%","100%"];c=n.strokeWidth}else if(e.h<=s){[i,o,l,f]=[0,"50%","100%","50%"];h=n.strokeWidth}else"\\"===this.slope?[i,o,l,f]=[0,0,"100%","100%"]:[i,o,l,f]=[0,"100%","100%",0];const u={name:"svg",children:[{name:"line",attributes:{xmlns:r,x1:i,y1:o,x2:l,y2:f,style:n}}],attributes:{xmlns:r,width:c,height:h,style:{overflow:"visible"}}};if(hasMargin(e))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[u]});u.attributes.style.position="absolute";return HTMLResult.success(u)}}class Linear extends XFAObject{constructor(e){super(nf,"linear",!0);this.id=e.id||"";this.type=getStringOption(e.type,["toRight","toBottom","toLeft","toTop"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[kl](e){e=e?e[kl]():"#FFFFFF";return`linear-gradient(${this.type.replace(/([RBLT])/," $1").toLowerCase()}, ${e}, ${this.color?this.color[kl]():"#000000"})`}}class LockDocument extends ContentObject{constructor(e){super(nf,"lockDocument");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}[ko](){this[go]=getStringOption(this[go],["auto","0","1"])}}class Manifest extends XFAObject{constructor(e){super(nf,"manifest",!0);this.action=getStringOption(e.action,["include","all","exclude"]);this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.ref=new XFAObjectArray}}class Margin extends XFAObject{constructor(e){super(nf,"margin",!0);this.bottomInset=getMeasurement(e.bottomInset,"0");this.id=e.id||"";this.leftInset=getMeasurement(e.leftInset,"0");this.rightInset=getMeasurement(e.rightInset,"0");this.topInset=getMeasurement(e.topInset,"0");this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[kl](){return{margin:measureToString(this.topInset)+" "+measureToString(this.rightInset)+" "+measureToString(this.bottomInset)+" "+measureToString(this.leftInset)}}}class Mdp extends XFAObject{constructor(e){super(nf,"mdp");this.id=e.id||"";this.permissions=getInteger({data:e.permissions,defaultValue:2,validate:e=>1===e||3===e});this.signatureType=getStringOption(e.signatureType,["filler","author"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Medium extends XFAObject{constructor(e){super(nf,"medium");this.id=e.id||"";this.imagingBBox=function getBBox(e){const t=-1;if(!e)return{x:t,y:t,width:t,height:t};const a=e.split(",",4).map(e=>getMeasurement(e.trim(),"-1"));if(a.length<4||a[2]<0||a[3]<0)return{x:t,y:t,width:t,height:t};const[n,s,r,i]=a;return{x:n,y:s,width:r,height:i}}(e.imagingBBox);this.long=getMeasurement(e.long);this.orientation=getStringOption(e.orientation,["portrait","landscape"]);this.short=getMeasurement(e.short);this.stock=e.stock||"";this.trayIn=getStringOption(e.trayIn,["auto","delegate","pageFront"]);this.trayOut=getStringOption(e.trayOut,["auto","delegate"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Message extends XFAObject{constructor(e){super(nf,"message",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.text=new XFAObjectArray}}class NumericEdit extends XFAObject{constructor(e){super(nf,"numericEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.comb=null;this.extras=null;this.margin=null}[wl](e){const t=toStyle(this,"border","font","margin"),a=this[Mo]()[Mo](),n={name:"input",attributes:{type:"text",fieldId:a[yl],dataId:a[bo]?.[yl]||a[yl],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(a),"aria-required":!1}};if(isRequired(a)){n.attributes["aria-required"]=!0;n.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[n]})}}class Occur extends XFAObject{constructor(e){super(nf,"occur",!0);this.id=e.id||"";this.initial=""!==e.initial?getInteger({data:e.initial,defaultValue:"",validate:e=>!0}):"";this.max=""!==e.max?getInteger({data:e.max,defaultValue:-1,validate:e=>!0}):"";this.min=""!==e.min?getInteger({data:e.min,defaultValue:1,validate:e=>!0}):"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[co](){const e=this[Mo](),t=this.min;""===this.min&&(this.min=e instanceof PageArea||e instanceof PageSet?0:1);""===this.max&&(this.max=""===t?e instanceof PageArea||e instanceof PageSet?-1:1:this.min);-1!==this.max&&this.max<this.min&&(this.max=this.min);""===this.initial&&(this.initial=e instanceof Template?1:this.min)}}class Oid extends StringObject{constructor(e){super(nf,"oid");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Oids extends XFAObject{constructor(e){super(nf,"oids",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.oid=new XFAObjectArray}}class Overflow extends XFAObject{constructor(e){super(nf,"overflow");this.id=e.id||"";this.leader=e.leader||"";this.target=e.target||"";this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||""}[Fo](){if(!this[jo]){const e=this[Mo](),t=this[No](),a=t[hl](this.target,e),n=t[hl](this.leader,e),s=t[hl](this.trailer,e);this[jo]={target:a?.[0]||null,leader:n?.[0]||null,trailer:s?.[0]||null,addLeader:!1,addTrailer:!1}}return this[jo]}}class PageArea extends XFAObject{constructor(e){super(nf,"pageArea",!0);this.blankOrNotBlank=getStringOption(e.blankOrNotBlank,["any","blank","notBlank"]);this.id=e.id||"";this.initialNumber=getInteger({data:e.initialNumber,defaultValue:1,validate:e=>!0});this.name=e.name||"";this.numbered=getInteger({data:e.numbered,defaultValue:1,validate:e=>!0});this.oddOrEven=getStringOption(e.oddOrEven,["any","even","odd"]);this.pagePosition=getStringOption(e.pagePosition,["any","first","last","only","rest"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.desc=null;this.extras=null;this.medium=null;this.occur=null;this.area=new XFAObjectArray;this.contentArea=new XFAObjectArray;this.draw=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.subform=new XFAObjectArray}[Jo](){if(!this[jo]){this[jo]={numberOfUse:0};return!0}return!this.occur||-1===this.occur.max||this[jo].numberOfUse<this.occur.max}[ho](){delete this[jo]}[Do](){this[jo]||={numberOfUse:0};const e=this[Mo]();if("orderedOccurrence"===e.relation&&this[Jo]()){this[jo].numberOfUse+=1;return this}return e[Do]()}[So](){return this[jo].space||{width:0,height:0}}[wl](){this[jo]||={numberOfUse:1};const e=[];this[jo].children=e;const t=Object.create(null);if(this.medium&&this.medium.short&&this.medium.long){t.width=measureToString(this.medium.short);t.height=measureToString(this.medium.long);this[jo].space={width:this.medium.short,height:this.medium.long};if("landscape"===this.medium.orientation){const e=t.width;t.width=t.height;t.height=e;this[jo].space={width:this.medium.long,height:this.medium.short}}}else warn("XFA - No medium specified in pageArea: please file a bug.");this[fo]({filter:new Set(["area","draw","field","subform"]),include:!0});this[fo]({filter:new Set(["contentArea"]),include:!0});return HTMLResult.success({name:"div",children:e,attributes:{class:["xfaPage"],id:this[yl],style:t,xfaName:this.name}})}}class PageSet extends XFAObject{constructor(e){super(nf,"pageSet",!0);this.duplexImposition=getStringOption(e.duplexImposition,["longEdge","shortEdge"]);this.id=e.id||"";this.name=e.name||"";this.relation=getStringOption(e.relation,["orderedOccurrence","duplexPaginated","simplexPaginated"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.occur=null;this.pageArea=new XFAObjectArray;this.pageSet=new XFAObjectArray}[ho](){for(const e of this.pageArea.children)e[ho]();for(const e of this.pageSet.children)e[ho]()}[Jo](){return!this.occur||-1===this.occur.max||this[jo].numberOfUse<this.occur.max}[Do](){this[jo]||={numberOfUse:1,pageIndex:-1,pageSetIndex:-1};if("orderedOccurrence"===this.relation){if(this[jo].pageIndex+1<this.pageArea.children.length){this[jo].pageIndex+=1;return this.pageArea.children[this[jo].pageIndex][Do]()}if(this[jo].pageSetIndex+1<this.pageSet.children.length){this[jo].pageSetIndex+=1;return this.pageSet.children[this[jo].pageSetIndex][Do]()}if(this[Jo]()){this[jo].numberOfUse+=1;this[jo].pageIndex=-1;this[jo].pageSetIndex=-1;return this[Do]()}const e=this[Mo]();if(e instanceof PageSet)return e[Do]();this[ho]();return this[Do]()}const e=this[No]()[jo].pageNumber,t=e%2==0?"even":"odd",a=0===e?"first":"rest";let n=this.pageArea.children.find(e=>e.oddOrEven===t&&e.pagePosition===a);if(n)return n;n=this.pageArea.children.find(e=>"any"===e.oddOrEven&&e.pagePosition===a);if(n)return n;n=this.pageArea.children.find(e=>"any"===e.oddOrEven&&"any"===e.pagePosition);return n??this.pageArea.children[0]}}class Para extends XFAObject{constructor(e){super(nf,"para",!0);this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.lineHeight=e.lineHeight?getMeasurement(e.lineHeight,"0pt"):"";this.marginLeft=e.marginLeft?getMeasurement(e.marginLeft,"0pt"):"";this.marginRight=e.marginRight?getMeasurement(e.marginRight,"0pt"):"";this.orphans=getInteger({data:e.orphans,defaultValue:0,validate:e=>e>=0});this.preserve=e.preserve||"";this.radixOffset=e.radixOffset?getMeasurement(e.radixOffset,"0pt"):"";this.spaceAbove=e.spaceAbove?getMeasurement(e.spaceAbove,"0pt"):"";this.spaceBelow=e.spaceBelow?getMeasurement(e.spaceBelow,"0pt"):"";this.tabDefault=e.tabDefault?getMeasurement(this.tabDefault):"";this.tabStops=(e.tabStops||"").trim().split(/\s+/).map((e,t)=>t%2==1?getMeasurement(e):e);this.textIndent=e.textIndent?getMeasurement(e.textIndent,"0pt"):"";this.use=e.use||"";this.usehref=e.usehref||"";this.vAlign=getStringOption(e.vAlign,["top","bottom","middle"]);this.widows=getInteger({data:e.widows,defaultValue:0,validate:e=>e>=0});this.hyphenation=null}[kl](){const e=toStyle(this,"hAlign");""!==this.marginLeft&&(e.paddingLeft=measureToString(this.marginLeft));""!==this.marginRight&&(e.paddingRight=measureToString(this.marginRight));""!==this.spaceAbove&&(e.paddingTop=measureToString(this.spaceAbove));""!==this.spaceBelow&&(e.paddingBottom=measureToString(this.spaceBelow));if(""!==this.textIndent){e.textIndent=measureToString(this.textIndent);fixTextIndent(e)}this.lineHeight>0&&(e.lineHeight=measureToString(this.lineHeight));""!==this.tabDefault&&(e.tabSize=measureToString(this.tabDefault));this.tabStops.length;this.hyphenatation&&Object.assign(e,this.hyphenatation[kl]());return e}}class PasswordEdit extends XFAObject{constructor(e){super(nf,"passwordEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.passwordChar=e.passwordChar||"*";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}}class template_Pattern extends XFAObject{constructor(e){super(nf,"pattern",!0);this.id=e.id||"";this.type=getStringOption(e.type,["crossHatch","crossDiagonal","diagonalLeft","diagonalRight","horizontal","vertical"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[kl](e){e=e?e[kl]():"#FFFFFF";const t=this.color?this.color[kl]():"#000000",a="repeating-linear-gradient",n=`${e},${e} 5px,${t} 5px,${t} 10px`;switch(this.type){case"crossHatch":return`${a}(to top,${n}) ${a}(to right,${n})`;case"crossDiagonal":return`${a}(45deg,${n}) ${a}(-45deg,${n})`;case"diagonalLeft":return`${a}(45deg,${n})`;case"diagonalRight":return`${a}(-45deg,${n})`;case"horizontal":return`${a}(to top,${n})`;case"vertical":return`${a}(to right,${n})`}return""}}class Picture extends StringObject{constructor(e){super(nf,"picture");this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Proto extends XFAObject{constructor(e){super(nf,"proto",!0);this.appearanceFilter=new XFAObjectArray;this.arc=new XFAObjectArray;this.area=new XFAObjectArray;this.assist=new XFAObjectArray;this.barcode=new XFAObjectArray;this.bindItems=new XFAObjectArray;this.bookend=new XFAObjectArray;this.boolean=new XFAObjectArray;this.border=new XFAObjectArray;this.break=new XFAObjectArray;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.button=new XFAObjectArray;this.calculate=new XFAObjectArray;this.caption=new XFAObjectArray;this.certificate=new XFAObjectArray;this.certificates=new XFAObjectArray;this.checkButton=new XFAObjectArray;this.choiceList=new XFAObjectArray;this.color=new XFAObjectArray;this.comb=new XFAObjectArray;this.connect=new XFAObjectArray;this.contentArea=new XFAObjectArray;this.corner=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.dateTimeEdit=new XFAObjectArray;this.decimal=new XFAObjectArray;this.defaultUi=new XFAObjectArray;this.desc=new XFAObjectArray;this.digestMethod=new XFAObjectArray;this.digestMethods=new XFAObjectArray;this.draw=new XFAObjectArray;this.edge=new XFAObjectArray;this.encoding=new XFAObjectArray;this.encodings=new XFAObjectArray;this.encrypt=new XFAObjectArray;this.encryptData=new XFAObjectArray;this.encryption=new XFAObjectArray;this.encryptionMethod=new XFAObjectArray;this.encryptionMethods=new XFAObjectArray;this.event=new XFAObjectArray;this.exData=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.execute=new XFAObjectArray;this.extras=new XFAObjectArray;this.field=new XFAObjectArray;this.fill=new XFAObjectArray;this.filter=new XFAObjectArray;this.float=new XFAObjectArray;this.font=new XFAObjectArray;this.format=new XFAObjectArray;this.handler=new XFAObjectArray;this.hyphenation=new XFAObjectArray;this.image=new XFAObjectArray;this.imageEdit=new XFAObjectArray;this.integer=new XFAObjectArray;this.issuers=new XFAObjectArray;this.items=new XFAObjectArray;this.keep=new XFAObjectArray;this.keyUsage=new XFAObjectArray;this.line=new XFAObjectArray;this.linear=new XFAObjectArray;this.lockDocument=new XFAObjectArray;this.manifest=new XFAObjectArray;this.margin=new XFAObjectArray;this.mdp=new XFAObjectArray;this.medium=new XFAObjectArray;this.message=new XFAObjectArray;this.numericEdit=new XFAObjectArray;this.occur=new XFAObjectArray;this.oid=new XFAObjectArray;this.oids=new XFAObjectArray;this.overflow=new XFAObjectArray;this.pageArea=new XFAObjectArray;this.pageSet=new XFAObjectArray;this.para=new XFAObjectArray;this.passwordEdit=new XFAObjectArray;this.pattern=new XFAObjectArray;this.picture=new XFAObjectArray;this.radial=new XFAObjectArray;this.reason=new XFAObjectArray;this.reasons=new XFAObjectArray;this.rectangle=new XFAObjectArray;this.ref=new XFAObjectArray;this.script=new XFAObjectArray;this.setProperty=new XFAObjectArray;this.signData=new XFAObjectArray;this.signature=new XFAObjectArray;this.signing=new XFAObjectArray;this.solid=new XFAObjectArray;this.speak=new XFAObjectArray;this.stipple=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray;this.subjectDN=new XFAObjectArray;this.subjectDNs=new XFAObjectArray;this.submit=new XFAObjectArray;this.text=new XFAObjectArray;this.textEdit=new XFAObjectArray;this.time=new XFAObjectArray;this.timeStamp=new XFAObjectArray;this.toolTip=new XFAObjectArray;this.traversal=new XFAObjectArray;this.traverse=new XFAObjectArray;this.ui=new XFAObjectArray;this.validate=new XFAObjectArray;this.value=new XFAObjectArray;this.variables=new XFAObjectArray}}class Radial extends XFAObject{constructor(e){super(nf,"radial",!0);this.id=e.id||"";this.type=getStringOption(e.type,["toEdge","toCenter"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[kl](e){e=e?e[kl]():"#FFFFFF";const t=this.color?this.color[kl]():"#000000";return`radial-gradient(circle at center, ${"toEdge"===this.type?`${e},${t}`:`${t},${e}`})`}}class Reason extends StringObject{constructor(e){super(nf,"reason");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Reasons extends XFAObject{constructor(e){super(nf,"reasons",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.reason=new XFAObjectArray}}class Rectangle extends XFAObject{constructor(e){super(nf,"rectangle",!0);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.corner=new XFAObjectArray(4);this.edge=new XFAObjectArray(4);this.fill=null}[wl](){const e=this.edge.children.length?this.edge.children[0]:new Edge({}),t=e[kl](),a=Object.create(null);"visible"===this.fill?.presence?Object.assign(a,this.fill[kl]()):a.fill="transparent";a.strokeWidth=measureToString("visible"===e.presence?e.thickness:0);a.stroke=t.color;const n=(this.corner.children.length?this.corner.children[0]:new Corner({}))[kl](),s={name:"svg",children:[{name:"rect",attributes:{xmlns:r,width:"100%",height:"100%",x:0,y:0,rx:n.radius,ry:n.radius,style:a}}],attributes:{xmlns:r,style:{overflow:"visible"},width:"100%",height:"100%"}};if(hasMargin(this[Mo]()[Mo]()))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[s]});s.attributes.style.position="absolute";return HTMLResult.success(s)}}class RefElement extends StringObject{constructor(e){super(nf,"ref");this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Script extends StringObject{constructor(e){super(nf,"script");this.binding=e.binding||"";this.contentType=e.contentType||"";this.id=e.id||"";this.name=e.name||"";this.runAt=getStringOption(e.runAt,["client","both","server"]);this.use=e.use||"";this.usehref=e.usehref||""}}class SetProperty extends XFAObject{constructor(e){super(nf,"setProperty");this.connection=e.connection||"";this.ref=e.ref||"";this.target=e.target||""}}class SignData extends XFAObject{constructor(e){super(nf,"signData",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["sign","clear","verify"]);this.ref=e.ref||"";this.target=e.target||"";this.use=e.use||"";this.usehref=e.usehref||"";this.filter=null;this.manifest=null}}class Signature extends XFAObject{constructor(e){super(nf,"signature",!0);this.id=e.id||"";this.type=getStringOption(e.type,["PDF1.3","PDF1.6"]);this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.filter=null;this.manifest=null;this.margin=null}}class Signing extends XFAObject{constructor(e){super(nf,"signing",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class Solid extends XFAObject{constructor(e){super(nf,"solid",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[kl](e){return e?e[kl]():"#FFFFFF"}}class Speak extends StringObject{constructor(e){super(nf,"speak");this.disable=getInteger({data:e.disable,defaultValue:0,validate:e=>1===e});this.id=e.id||"";this.priority=getStringOption(e.priority,["custom","caption","name","toolTip"]);this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Stipple extends XFAObject{constructor(e){super(nf,"stipple",!0);this.id=e.id||"";this.rate=getInteger({data:e.rate,defaultValue:50,validate:e=>e>=0&&e<=100});this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[kl](e){const t=this.rate/100;return Util.makeHexColor(Math.round(e.value.r*(1-t)+this.value.r*t),Math.round(e.value.g*(1-t)+this.value.g*t),Math.round(e.value.b*(1-t)+this.value.b*t))}}class Subform extends XFAObject{constructor(e){super(nf,"subform",!0);this.access=getStringOption(e.access,["open","nonInteractive","protected","readOnly"]);this.allowMacro=getInteger({data:e.allowMacro,defaultValue:0,validate:e=>1===e});this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.columnWidths=(e.columnWidths||"").trim().split(/\s+/).map(e=>"-1"===e?-1:getMeasurement(e));this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.layout=getStringOption(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]);this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.mergeMode=getStringOption(e.mergeMode,["consumeData","matchTemplate"]);this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.restoreState=getStringOption(e.restoreState,["manual","auto"]);this.scope=getStringOption(e.scope,["name","none"]);this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.bookend=null;this.border=null;this.break=null;this.calculate=null;this.desc=null;this.extras=null;this.keep=null;this.margin=null;this.occur=null;this.overflow=null;this.pageSet=null;this.para=null;this.traversal=null;this.validate=null;this.variables=null;this.area=new XFAObjectArray;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.connect=new XFAObjectArray;this.draw=new XFAObjectArray;this.event=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.proto=new XFAObjectArray;this.setProperty=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}[Ho](){const e=this[Mo]();return e instanceof SubformSet?e[Ho]():e}[Wo](){return!0}[$o](){return this.layout.endsWith("-tb")&&0===this[jo].attempt&&this[jo].numberInLine>0||this[Mo]()[$o]()}*[Bo](){yield*getContainedChildren(this)}[yo](){return flushHTML(this)}[oo](e,t){addHTML(this,e,t)}[So](){return getAvailableSpace(this)}[Vo](){const e=this[Ho]();if(!e[Vo]())return!1;if(void 0!==this[jo]._isSplittable)return this[jo]._isSplittable;if("position"===this.layout||this.layout.includes("row")){this[jo]._isSplittable=!1;return!1}if(this.keep&&"none"!==this.keep.intact){this[jo]._isSplittable=!1;return!1}if(e.layout?.endsWith("-tb")&&0!==e[jo].numberInLine)return!1;this[jo]._isSplittable=!0;return!0}[wl](e){setTabIndex(this);if(this.break){if("auto"!==this.break.after||""!==this.break.afterTarget){const e=new BreakAfter({targetType:this.break.after,target:this.break.afterTarget,startNew:this.break.startNew.toString()});e[Po]=this[Po];this[lo](e);this.breakAfter.push(e)}if("auto"!==this.break.before||""!==this.break.beforeTarget){const e=new BreakBefore({targetType:this.break.before,target:this.break.beforeTarget,startNew:this.break.startNew.toString()});e[Po]=this[Po];this[lo](e);this.breakBefore.push(e)}if(""!==this.break.overflowTarget){const e=new Overflow({target:this.break.overflowTarget,leader:this.break.overflowLeader,trailer:this.break.overflowTrailer});e[Po]=this[Po];this[lo](e);this.overflow.push(e)}this[ll](this.break);this.break=null}if("hidden"===this.presence||"inactive"===this.presence)return HTMLResult.EMPTY;(this.breakBefore.children.length>1||this.breakAfter.children.length>1)&&warn("XFA - Several breakBefore or breakAfter in subforms: please file a bug.");if(this.breakBefore.children.length>=1){const e=this.breakBefore.children[0];if(handleBreak(e))return HTMLResult.breakNode(e)}if(this[jo]?.afterBreakAfter)return HTMLResult.EMPTY;fixDimensions(this);const t=[],a={id:this[yl],class:[]};setAccess(this,a.class);this[jo]||=Object.create(null);Object.assign(this[jo],{children:t,line:null,attributes:a,attempt:0,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});const n=this[No](),s=n[jo].noLayoutFailure,r=this[Vo]();r||setFirstUnsplittable(this);if(!checkDimensions(this,e))return HTMLResult.FAILURE;const i=new Set(["area","draw","exclGroup","field","subform","subformSet"]);if(this.layout.includes("row")){const e=this[Ho]().columnWidths;if(Array.isArray(e)&&e.length>0){this[jo].columnWidths=e;this[jo].currentColumn=0}}const o=toStyle(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),l=["xfaSubform"],f=layoutClass(this);f&&l.push(f);a.style=o;a.class=l;this.name&&(a.xfaName=this.name);if(this.overflow){const t=this.overflow[Fo]();if(t.addLeader){t.addLeader=!1;handleOverflow(this,t.leader,e)}}this[ol]();const c="lr-tb"===this.layout||"rl-tb"===this.layout,h=c?2:1;for(;this[jo].attempt<h;this[jo].attempt++){c&&1===this[jo].attempt&&(this[jo].numberInLine=0);const e=this[fo]({filter:i,include:!0});if(e.success)break;if(e.isBreak()){this[il]();return e}if(c&&0===this[jo].attempt&&0===this[jo].numberInLine&&!n[jo].noLayoutFailure){this[jo].attempt=h;break}}this[il]();r||unsetFirstUnsplittable(this);n[jo].noLayoutFailure=s;if(this[jo].attempt===h){this.overflow&&(this[No]()[jo].overflowNode=this.overflow);r||delete this[jo];return HTMLResult.FAILURE}if(this.overflow){const t=this.overflow[Fo]();if(t.addTrailer){t.addTrailer=!1;handleOverflow(this,t.trailer,e)}}let u=0,m=0;if(this.margin){u=this.margin.leftInset+this.margin.rightInset;m=this.margin.topInset+this.margin.bottomInset}const p=Math.max(this[jo].width+u,this.w||0),d=Math.max(this[jo].height+m,this.h||0),g=[this.x,this.y,p,d];""===this.w&&(o.width=measureToString(p));""===this.h&&(o.height=measureToString(d));if(("0px"===o.width||"0px"===o.height)&&0===t.length)return HTMLResult.EMPTY;const b={name:"div",attributes:a,children:t};applyAssist(this,a);const w=HTMLResult.success(createWrapper(this,b),g);if(this.breakAfter.children.length>=1){const e=this.breakAfter.children[0];if(handleBreak(e)){this[jo].afterBreakAfter=w;return HTMLResult.breakNode(e)}}delete this[jo];return w}}class SubformSet extends XFAObject{constructor(e){super(nf,"subformSet",!0);this.id=e.id||"";this.name=e.name||"";this.relation=getStringOption(e.relation,["ordered","choice","unordered"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.bookend=null;this.break=null;this.desc=null;this.extras=null;this.occur=null;this.overflow=null;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}*[Bo](){yield*getContainedChildren(this)}[Ho](){let e=this[Mo]();for(;!(e instanceof Subform);)e=e[Mo]();return e}[Wo](){return!0}}class SubjectDN extends ContentObject{constructor(e){super(nf,"subjectDN");this.delimiter=e.delimiter||",";this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[ko](){this[go]=new Map(this[go].split(this.delimiter).map(e=>{(e=e.split("=",2))[0]=e[0].trim();return e}))}}class SubjectDNs extends XFAObject{constructor(e){super(nf,"subjectDNs",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.subjectDN=new XFAObjectArray}}class Submit extends XFAObject{constructor(e){super(nf,"submit",!0);this.embedPDF=getInteger({data:e.embedPDF,defaultValue:0,validate:e=>1===e});this.format=getStringOption(e.format,["xdp","formdata","pdf","urlencoded","xfd","xml"]);this.id=e.id||"";this.target=e.target||"";this.textEncoding=getKeyword({data:e.textEncoding?e.textEncoding.toLowerCase():"",defaultValue:"",validate:e=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\d{2}/)});this.use=e.use||"";this.usehref=e.usehref||"";this.xdpContent=e.xdpContent||"";this.encrypt=null;this.encryptData=new XFAObjectArray;this.signData=new XFAObjectArray}}class Template extends XFAObject{constructor(e){super(nf,"template",!0);this.baseProfile=getStringOption(e.baseProfile,["full","interactiveForms"]);this.extras=null;this.subform=new XFAObjectArray}[ko](){0===this.subform.children.length&&warn("XFA - No subforms in template node.");this.subform.children.length>=2&&warn("XFA - Several subforms in template node: please file a bug.");this[dl]=5e3}[Vo](){return!0}[hl](e,t){return e.startsWith("#")?[this[_o].get(e.slice(1))]:searchNode(this,t,e,!0,!0)}*[bl](){if(!this.subform.children.length)return HTMLResult.success({name:"div",children:[]});this[jo]={overflowNode:null,firstUnsplittable:null,currentContentArea:null,currentPageArea:null,noLayoutFailure:!1,pageNumber:1,pagePosition:"first",oddOrEven:"odd",blankOrNotBlank:"nonBlank",paraStack:[]};const e=this.subform.children[0];e.pageSet[ho]();const t=e.pageSet.pageArea.children,a={name:"div",children:[]};let n=null,s=null,r=null;if(e.breakBefore.children.length>=1){s=e.breakBefore.children[0];r=s.target}else if(e.subform.children.length>=1&&e.subform.children[0].breakBefore.children.length>=1){s=e.subform.children[0].breakBefore.children[0];r=s.target}else if(e.break?.beforeTarget){s=e.break;r=s.beforeTarget}else if(e.subform.children.length>=1&&e.subform.children[0].break?.beforeTarget){s=e.subform.children[0].break;r=s.beforeTarget}if(s){const e=this[hl](r,s[Mo]());if(e instanceof PageArea){n=e;s[jo]={}}}n||=t[0];n[jo]={numberOfUse:1};const i=n[Mo]();i[jo]={numberOfUse:1,pageIndex:i.pageArea.children.indexOf(n),pageSetIndex:0};let o,l=null,f=null,c=!0,h=0,u=0;for(;;){if(c)h=0;else{a.children.pop();if(3===++h){warn("XFA - Something goes wrong: please file a bug.");return a}}o=null;this[jo].currentPageArea=n;const t=n[wl]().html;a.children.push(t);if(l){this[jo].noLayoutFailure=!0;t.children.push(l[wl](n[jo].space).html);l=null}if(f){this[jo].noLayoutFailure=!0;t.children.push(f[wl](n[jo].space).html);f=null}const s=n.contentArea.children,r=t.children.filter(e=>e.attributes.class.includes("xfaContentarea"));c=!1;this[jo].firstUnsplittable=null;this[jo].noLayoutFailure=!1;const flush=t=>{const a=e[yo]();if(a){c||=a.children?.length>0;r[t].children.push(a)}};for(let t=u,n=s.length;t<n;t++){const n=this[jo].currentContentArea=s[t],i={width:n.w,height:n.h};u=0;if(l){r[t].children.push(l[wl](i).html);l=null}if(f){r[t].children.push(f[wl](i).html);f=null}const h=e[wl](i);if(h.success){if(h.html){c||=h.html.children?.length>0;r[t].children.push(h.html)}else!c&&a.children.length>1&&a.children.pop();return a}if(h.isBreak()){const e=h.breakNode;flush(t);if("auto"===e.targetType)continue;if(e.leader){l=this[hl](e.leader,e[Mo]());l=l?l[0]:null}if(e.trailer){f=this[hl](e.trailer,e[Mo]());f=f?f[0]:null}if("pageArea"===e.targetType){o=e[jo].target;t=1/0}else if(e[jo].target){o=e[jo].target;u=e[jo].index+1;t=1/0}else t=e[jo].index;continue}if(this[jo].overflowNode){const e=this[jo].overflowNode;this[jo].overflowNode=null;const a=e[Fo](),n=a.target;a.addLeader=null!==a.leader;a.addTrailer=null!==a.trailer;flush(t);const r=t;t=1/0;if(n instanceof PageArea)o=n;else if(n instanceof ContentArea){const e=s.indexOf(n);if(-1!==e)e>r?t=e-1:u=e;else{o=n[Mo]();u=o.contentArea.children.indexOf(n)}}continue}flush(t)}this[jo].pageNumber+=1;o&&(o[Jo]()?o[jo].numberOfUse+=1:o=null);n=o||n[Do]();yield null}}}class Text extends ContentObject{constructor(e){super(nf,"text");this.id=e.id||"";this.maxChars=getInteger({data:e.maxChars,defaultValue:0,validate:e=>e>=0});this.name=e.name||"";this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}[io](){return!0}[al](e){if(e[Zo]===vl.xhtml.id){this[go]=e;return!0}warn(`XFA - Invalid content in Text: ${e[el]}.`);return!1}[sl](e){this[go]instanceof XFAObject||super[sl](e)}[ko](){"string"==typeof this[go]&&(this[go]=this[go].replaceAll("\r\n","\n"))}[Fo](){return"string"==typeof this[go]?this[go].split(/[\u2029\u2028\n]/).filter(Boolean).join("\n"):this[go][gl]()}[wl](e){if("string"==typeof this[go]){const e=valueToHtml(this[go]).html;if(this[go].includes("\u2029")){e.name="div";e.children=[];this[go].split("\u2029").map(e=>e.split(/[\u2028\n]/).flatMap(e=>[{name:"span",value:e},{name:"br"}])).forEach(t=>{e.children.push({name:"p",children:t})})}else if(/[\u2028\n]/.test(this[go])){e.name="div";e.children=[];this[go].split(/[\u2028\n]/).forEach(t=>{e.children.push({name:"span",value:t},{name:"br"})})}return HTMLResult.success(e)}return this[go][wl](e)}}class TextEdit extends XFAObject{constructor(e){super(nf,"textEdit",!0);this.allowRichText=getInteger({data:e.allowRichText,defaultValue:0,validate:e=>1===e});this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.multiLine=getInteger({data:e.multiLine,defaultValue:"",validate:e=>0===e||1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.vScrollPolicy=getStringOption(e.vScrollPolicy,["auto","off","on"]);this.border=null;this.comb=null;this.extras=null;this.margin=null}[wl](e){const t=toStyle(this,"border","font","margin");let a;const n=this[Mo]()[Mo]();""===this.multiLine&&(this.multiLine=n instanceof Draw?1:0);a=1===this.multiLine?{name:"textarea",attributes:{dataId:n[bo]?.[yl]||n[yl],fieldId:n[yl],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(n),"aria-required":!1}}:{name:"input",attributes:{type:"text",dataId:n[bo]?.[yl]||n[yl],fieldId:n[yl],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(n),"aria-required":!1}};if(isRequired(n)){a.attributes["aria-required"]=!0;a.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[a]})}}class Time extends StringObject{constructor(e){super(nf,"time");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[ko](){const e=this[go].trim();this[go]=e?new Date(e):null}[wl](e){return valueToHtml(this[go]?this[go].toString():"")}}class TimeStamp extends XFAObject{constructor(e){super(nf,"timeStamp");this.id=e.id||"";this.server=e.server||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class ToolTip extends StringObject{constructor(e){super(nf,"toolTip");this.id=e.id||"";this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Traversal extends XFAObject{constructor(e){super(nf,"traversal",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.traverse=new XFAObjectArray}}class Traverse extends XFAObject{constructor(e){super(nf,"traverse",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["next","back","down","first","left","right","up"]);this.ref=e.ref||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.script=null}get name(){return this.operation}[Yo](){return!1}}class Ui extends XFAObject{constructor(e){super(nf,"ui",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.picture=null;this.barcode=null;this.button=null;this.checkButton=null;this.choiceList=null;this.dateTimeEdit=null;this.defaultUi=null;this.imageEdit=null;this.numericEdit=null;this.passwordEdit=null;this.signature=null;this.textEdit=null}[Fo](){if(void 0===this[jo]){for(const e of Object.getOwnPropertyNames(this)){if("extras"===e||"picture"===e)continue;const t=this[e];if(t instanceof XFAObject){this[jo]=t;return t}}this[jo]=null}return this[jo]}[wl](e){const t=this[Fo]();return t?t[wl](e):HTMLResult.EMPTY}}class Validate extends XFAObject{constructor(e){super(nf,"validate",!0);this.formatTest=getStringOption(e.formatTest,["warning","disabled","error"]);this.id=e.id||"";this.nullTest=getStringOption(e.nullTest,["disabled","error","warning"]);this.scriptTest=getStringOption(e.scriptTest,["error","disabled","warning"]);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.message=null;this.picture=null;this.script=null}}class Value extends XFAObject{constructor(e){super(nf,"value",!0);this.id=e.id||"";this.override=getInteger({data:e.override,defaultValue:0,validate:e=>1===e});this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.arc=null;this.boolean=null;this.date=null;this.dateTime=null;this.decimal=null;this.exData=null;this.float=null;this.image=null;this.integer=null;this.line=null;this.rectangle=null;this.text=null;this.time=null}[pl](e){const t=this[Mo]();if(t instanceof Field&&t.ui?.imageEdit){if(!this.image){this.image=new Image({});this[lo](this.image)}this.image[go]=e[go];return}const a=e[el];if(null===this[a]){for(const e of Object.getOwnPropertyNames(this)){const t=this[e];if(t instanceof XFAObject){this[e]=null;this[ll](t)}}this[e[el]]=e;this[lo](e)}else this[a][go]=e[go]}[gl](){if(this.exData)return"string"==typeof this.exData[go]?this.exData[go].trim():this.exData[go][gl]().trim();for(const e of Object.getOwnPropertyNames(this)){if("image"===e)continue;const t=this[e];if(t instanceof XFAObject)return(t[go]||"").toString().trim()}return null}[wl](e){for(const t of Object.getOwnPropertyNames(this)){const a=this[t];if(a instanceof XFAObject)return a[wl](e)}return HTMLResult.EMPTY}}class Variables extends XFAObject{constructor(e){super(nf,"variables",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.manifest=new XFAObjectArray;this.script=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}[Yo](){return!0}}class TemplateNamespace{static[ql](e,t){if(Object.hasOwn(TemplateNamespace,e)){const a=TemplateNamespace[e](t);a[ml](t);return a}}static appearanceFilter(e){return new AppearanceFilter(e)}static arc(e){return new Arc(e)}static area(e){return new Area(e)}static assist(e){return new Assist(e)}static barcode(e){return new Barcode(e)}static bind(e){return new Bind(e)}static bindItems(e){return new BindItems(e)}static bookend(e){return new Bookend(e)}static boolean(e){return new BooleanElement(e)}static border(e){return new Border(e)}static break(e){return new Break(e)}static breakAfter(e){return new BreakAfter(e)}static breakBefore(e){return new BreakBefore(e)}static button(e){return new Button(e)}static calculate(e){return new Calculate(e)}static caption(e){return new Caption(e)}static certificate(e){return new Certificate(e)}static certificates(e){return new Certificates(e)}static checkButton(e){return new CheckButton(e)}static choiceList(e){return new ChoiceList(e)}static color(e){return new Color(e)}static comb(e){return new Comb(e)}static connect(e){return new Connect(e)}static contentArea(e){return new ContentArea(e)}static corner(e){return new Corner(e)}static date(e){return new DateElement(e)}static dateTime(e){return new DateTime(e)}static dateTimeEdit(e){return new DateTimeEdit(e)}static decimal(e){return new Decimal(e)}static defaultUi(e){return new DefaultUi(e)}static desc(e){return new Desc(e)}static digestMethod(e){return new DigestMethod(e)}static digestMethods(e){return new DigestMethods(e)}static draw(e){return new Draw(e)}static edge(e){return new Edge(e)}static encoding(e){return new Encoding(e)}static encodings(e){return new Encodings(e)}static encrypt(e){return new Encrypt(e)}static encryptData(e){return new EncryptData(e)}static encryption(e){return new Encryption(e)}static encryptionMethod(e){return new EncryptionMethod(e)}static encryptionMethods(e){return new EncryptionMethods(e)}static event(e){return new Event(e)}static exData(e){return new ExData(e)}static exObject(e){return new ExObject(e)}static exclGroup(e){return new ExclGroup(e)}static execute(e){return new Execute(e)}static extras(e){return new Extras(e)}static field(e){return new Field(e)}static fill(e){return new Fill(e)}static filter(e){return new Filter(e)}static float(e){return new Float(e)}static font(e){return new template_Font(e)}static format(e){return new Format(e)}static handler(e){return new Handler(e)}static hyphenation(e){return new Hyphenation(e)}static image(e){return new Image(e)}static imageEdit(e){return new ImageEdit(e)}static integer(e){return new Integer(e)}static issuers(e){return new Issuers(e)}static items(e){return new Items(e)}static keep(e){return new Keep(e)}static keyUsage(e){return new KeyUsage(e)}static line(e){return new Line(e)}static linear(e){return new Linear(e)}static lockDocument(e){return new LockDocument(e)}static manifest(e){return new Manifest(e)}static margin(e){return new Margin(e)}static mdp(e){return new Mdp(e)}static medium(e){return new Medium(e)}static message(e){return new Message(e)}static numericEdit(e){return new NumericEdit(e)}static occur(e){return new Occur(e)}static oid(e){return new Oid(e)}static oids(e){return new Oids(e)}static overflow(e){return new Overflow(e)}static pageArea(e){return new PageArea(e)}static pageSet(e){return new PageSet(e)}static para(e){return new Para(e)}static passwordEdit(e){return new PasswordEdit(e)}static pattern(e){return new template_Pattern(e)}static picture(e){return new Picture(e)}static proto(e){return new Proto(e)}static radial(e){return new Radial(e)}static reason(e){return new Reason(e)}static reasons(e){return new Reasons(e)}static rectangle(e){return new Rectangle(e)}static ref(e){return new RefElement(e)}static script(e){return new Script(e)}static setProperty(e){return new SetProperty(e)}static signData(e){return new SignData(e)}static signature(e){return new Signature(e)}static signing(e){return new Signing(e)}static solid(e){return new Solid(e)}static speak(e){return new Speak(e)}static stipple(e){return new Stipple(e)}static subform(e){return new Subform(e)}static subformSet(e){return new SubformSet(e)}static subjectDN(e){return new SubjectDN(e)}static subjectDNs(e){return new SubjectDNs(e)}static submit(e){return new Submit(e)}static template(e){return new Template(e)}static text(e){return new Text(e)}static textEdit(e){return new TextEdit(e)}static time(e){return new Time(e)}static timeStamp(e){return new TimeStamp(e)}static toolTip(e){return new ToolTip(e)}static traversal(e){return new Traversal(e)}static traverse(e){return new Traverse(e)}static ui(e){return new Ui(e)}static validate(e){return new Validate(e)}static value(e){return new Value(e)}static variables(e){return new Variables(e)}}const lf=vl.datasets.id;function createText(e){const t=new Text({});t[go]=e;return t}class Binder{constructor(e){this.root=e;this.datasets=e.datasets;this.data=e.datasets?.data||new XmlObject(lf,"data");this.emptyMerge=0===this.data[Oo]().length;this.root.form=this.form=e.template[mo]()}_isConsumeData(){return!this.emptyMerge&&this._mergeMode}_isMatchTemplate(){return!this._isConsumeData()}bind(){this._bindElement(this.form,this.data);return this.form}getData(){return this.data}_bindValue(e,t,a){e[bo]=t;if(e[Eo]())if(t[Xo]()){const a=t[Io]();e[pl](createText(a))}else if(e instanceof Field&&"multiSelect"===e.ui?.choiceList?.open){const a=t[Oo]().map(e=>e[go].trim()).join("\n");e[pl](createText(a))}else this._isConsumeData()&&warn("XFA - Nodes haven't the same type.");else!t[Xo]()||this._isMatchTemplate()?this._bindElement(e,t):warn("XFA - Nodes haven't the same type.")}_findDataByNameToConsume(e,t,a,n){if(!e)return null;let s,r;for(let n=0;n<3;n++){s=a[Ro](e,!1,!0);for(;;){r=s.next().value;if(!r)break;if(t===r[Xo]())return r}if(a[Zo]===lf&&"data"===a[el])break;a=a[Mo]()}if(!n)return null;s=this.data[Ro](e,!0,!1);r=s.next().value;if(r)return r;s=this.data[qo](e,!0);r=s.next().value;return r?.[Xo]()?r:null}_setProperties(e,t){if(Object.hasOwn(e,"setProperty"))for(const{ref:a,target:n,connection:s}of e.setProperty.children){if(s)continue;if(!a)continue;const r=searchNode(this.root,t,a,!1,!1);if(!r){warn(`XFA - Invalid reference: ${a}.`);continue}const[i]=r;if(!i[Ko](this.data)){warn("XFA - Invalid node: must be a data node.");continue}const o=searchNode(this.root,e,n,!1,!1);if(!o){warn(`XFA - Invalid target: ${n}.`);continue}const[l]=o;if(!l[Ko](e)){warn("XFA - Invalid target: must be a property or subproperty.");continue}const f=l[Mo]();if(l instanceof SetProperty||f instanceof SetProperty){warn("XFA - Invalid target: cannot be a setProperty or one of its properties.");continue}if(l instanceof BindItems||f instanceof BindItems){warn("XFA - Invalid target: cannot be a bindItems or one of its properties.");continue}const c=i[gl](),h=l[el];if(l instanceof XFAAttribute){const e=Object.create(null);e[h]=c;const t=Reflect.construct(Object.getPrototypeOf(f).constructor,[e]);f[h]=t[h];continue}if(Object.hasOwn(l,go)){l[bo]=i;l[go]=c;l[ko]()}else warn("XFA - Invalid node to use in setProperty")}}_bindItems(e,t){if(!Object.hasOwn(e,"items")||!Object.hasOwn(e,"bindItems")||e.bindItems.isEmpty())return;for(const t of e.items.children)e[ll](t);e.items.clear();const a=new Items({}),n=new Items({});e[lo](a);e.items.push(a);e[lo](n);e.items.push(n);for(const{ref:s,labelRef:r,valueRef:i,connection:o}of e.bindItems.children){if(o)continue;if(!s)continue;const e=searchNode(this.root,t,s,!1,!1);if(e)for(const t of e){if(!t[Ko](this.datasets)){warn(`XFA - Invalid ref (${s}): must be a datasets child.`);continue}const e=searchNode(this.root,t,r,!0,!1);if(!e){warn(`XFA - Invalid label: ${r}.`);continue}const[o]=e;if(!o[Ko](this.datasets)){warn("XFA - Invalid label: must be a datasets child.");continue}const l=searchNode(this.root,t,i,!0,!1);if(!l){warn(`XFA - Invalid value: ${i}.`);continue}const[f]=l;if(!f[Ko](this.datasets)){warn("XFA - Invalid value: must be a datasets child.");continue}const c=createText(o[gl]()),h=createText(f[gl]());a[lo](c);a.text.push(c);n[lo](h);n.text.push(h)}else warn(`XFA - Invalid reference: ${s}.`)}}_bindOccurrences(e,t,a){let n;if(t.length>1){n=e[mo]();n[ll](n.occur);n.occur=null}this._bindValue(e,t[0],a);this._setProperties(e,t[0]);this._bindItems(e,t[0]);if(1===t.length)return;const s=e[Mo](),r=e[el],i=s[zo](e);for(let e=1,o=t.length;e<o;e++){const o=t[e],l=n[mo]();s[r].push(l);s[Lo](i+e,l);this._bindValue(l,o,a);this._setProperties(l,o);this._bindItems(l,o)}}_createOccurrences(e){if(!this.emptyMerge)return;const{occur:t}=e;if(!t||t.initial<=1)return;const a=e[Mo](),n=e[el];if(!(a[n]instanceof XFAObjectArray))return;let s;s=e.name?a[n].children.filter(t=>t.name===e.name).length:a[n].children.length;const r=a[zo](e)+1,i=t.initial-s;if(i){const t=e[mo]();t[ll](t.occur);t.occur=null;a[n].push(t);a[Lo](r,t);for(let e=1;e<i;e++){const s=t[mo]();a[n].push(s);a[Lo](r+e,s)}}}_getOccurInfo(e){const{name:t,occur:a}=e;if(!a||!t)return[1,1];const n=-1===a.max?1/0:a.max;return[a.min,n]}_setAndBind(e,t){this._setProperties(e,t);this._bindItems(e,t);this._bindElement(e,t)}_bindElement(e,t){const a=[];this._createOccurrences(e);for(const n of e[Oo]()){if(n[bo])continue;if(void 0===this._mergeMode&&"subform"===n[el]){this._mergeMode="consumeData"===n.mergeMode;const e=t[Oo]();if(e.length>0)this._bindOccurrences(n,[e[0]],null);else if(this.emptyMerge){const e=t[Zo]===lf?-1:t[Zo],a=n[bo]=new XmlObject(e,n.name||"root");t[lo](a);this._bindElement(n,a)}continue}if(!n[Wo]())continue;let e=!1,s=null,r=null,i=null;if(n.bind){switch(n.bind.match){case"none":this._setAndBind(n,t);continue;case"global":e=!0;break;case"dataRef":if(!n.bind.ref){warn(`XFA - ref is empty in node ${n[el]}.`);this._setAndBind(n,t);continue}r=n.bind.ref}n.bind.picture&&(s=n.bind.picture[go])}const[o,l]=this._getOccurInfo(n);if(r){i=searchNode(this.root,t,r,!0,!1);if(null===i){i=createDataNode(this.data,t,r);if(!i)continue;this._isConsumeData()&&(i[po]=!0);this._setAndBind(n,i);continue}this._isConsumeData()&&(i=i.filter(e=>!e[po]));i.length>l?i=i.slice(0,l):0===i.length&&(i=null);i&&this._isConsumeData()&&i.forEach(e=>{e[po]=!0})}else{if(!n.name){this._setAndBind(n,t);continue}if(this._isConsumeData()){const a=[];for(;a.length<l;){const s=this._findDataByNameToConsume(n.name,n[Eo](),t,e);if(!s)break;s[po]=!0;a.push(s)}i=a.length>0?a:null}else{i=t[Ro](n.name,!1,this.emptyMerge).next().value;if(!i){if(0===o){a.push(n);continue}const e=t[Zo]===lf?-1:t[Zo];i=n[bo]=new XmlObject(e,n.name);this.emptyMerge&&(i[po]=!0);t[lo](i);this._setAndBind(n,i);continue}this.emptyMerge&&(i[po]=!0);i=[i]}}i?this._bindOccurrences(n,i,s):o>0?this._setAndBind(n,t):a.push(n)}a.forEach(e=>e[Mo]()[ll](e))}}class DataHandler{constructor(e,t){this.data=t;this.dataset=e.datasets||null}serialize(e){const t=[[-1,this.data[Oo]()]];for(;t.length>0;){const a=t.at(-1),[n,s]=a;if(n+1===s.length){t.pop();continue}const r=s[++a[0]],i=e.get(r[yl]);if(i)r[pl](i);else{const t=r[vo]();for(const a of t.values()){const t=e.get(a[yl]);if(t){a[pl](t);break}}}const o=r[Oo]();o.length>0&&t.push([-1,o])}const a=['<xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">'];if(this.dataset)for(const e of this.dataset[Oo]())"data"!==e[el]&&e[jl](a);this.data[jl](a);a.push("</xfa:datasets>");return a.join("")}}const ff=vl.config.id;class Acrobat extends XFAObject{constructor(e){super(ff,"acrobat",!0);this.acrobat7=null;this.autoSave=null;this.common=null;this.validate=null;this.validateApprovalSignatures=null;this.submitUrl=new XFAObjectArray}}class Acrobat7 extends XFAObject{constructor(e){super(ff,"acrobat7",!0);this.dynamicRender=null}}class ADBE_JSConsole extends OptionObject{constructor(e){super(ff,"ADBE_JSConsole",["delegate","Enable","Disable"])}}class ADBE_JSDebugger extends OptionObject{constructor(e){super(ff,"ADBE_JSDebugger",["delegate","Enable","Disable"])}}class AddSilentPrint extends Option01{constructor(e){super(ff,"addSilentPrint")}}class AddViewerPreferences extends Option01{constructor(e){super(ff,"addViewerPreferences")}}class AdjustData extends Option10{constructor(e){super(ff,"adjustData")}}class AdobeExtensionLevel extends IntegerObject{constructor(e){super(ff,"adobeExtensionLevel",0,e=>e>=1&&e<=8)}}class Agent extends XFAObject{constructor(e){super(ff,"agent",!0);this.name=e.name?e.name.trim():"";this.common=new XFAObjectArray}}class AlwaysEmbed extends ContentObject{constructor(e){super(ff,"alwaysEmbed")}}class Amd extends StringObject{constructor(e){super(ff,"amd")}}class config_Area extends XFAObject{constructor(e){super(ff,"area");this.level=getInteger({data:e.level,defaultValue:0,validate:e=>e>=1&&e<=3});this.name=getStringOption(e.name,["","barcode","coreinit","deviceDriver","font","general","layout","merge","script","signature","sourceSet","templateCache"])}}class Attributes extends OptionObject{constructor(e){super(ff,"attributes",["preserve","delegate","ignore"])}}class AutoSave extends OptionObject{constructor(e){super(ff,"autoSave",["disabled","enabled"])}}class Base extends StringObject{constructor(e){super(ff,"base")}}class BatchOutput extends XFAObject{constructor(e){super(ff,"batchOutput");this.format=getStringOption(e.format,["none","concat","zip","zipCompress"])}}class BehaviorOverride extends ContentObject{constructor(e){super(ff,"behaviorOverride")}[ko](){this[go]=new Map(this[go].trim().split(/\s+/).filter(e=>e.includes(":")).map(e=>e.split(":",2)))}}class Cache extends XFAObject{constructor(e){super(ff,"cache",!0);this.templateCache=null}}class Change extends Option01{constructor(e){super(ff,"change")}}class Common extends XFAObject{constructor(e){super(ff,"common",!0);this.data=null;this.locale=null;this.localeSet=null;this.messaging=null;this.suppressBanner=null;this.template=null;this.validationMessaging=null;this.versionControl=null;this.log=new XFAObjectArray}}class Compress extends XFAObject{constructor(e){super(ff,"compress");this.scope=getStringOption(e.scope,["imageOnly","document"])}}class CompressLogicalStructure extends Option01{constructor(e){super(ff,"compressLogicalStructure")}}class CompressObjectStream extends Option10{constructor(e){super(ff,"compressObjectStream")}}class Compression extends XFAObject{constructor(e){super(ff,"compression",!0);this.compressLogicalStructure=null;this.compressObjectStream=null;this.level=null;this.type=null}}class Config extends XFAObject{constructor(e){super(ff,"config",!0);this.acrobat=null;this.present=null;this.trace=null;this.agent=new XFAObjectArray}}class Conformance extends OptionObject{constructor(e){super(ff,"conformance",["A","B"])}}class ContentCopy extends Option01{constructor(e){super(ff,"contentCopy")}}class Copies extends IntegerObject{constructor(e){super(ff,"copies",1,e=>e>=1)}}class Creator extends StringObject{constructor(e){super(ff,"creator")}}class CurrentPage extends IntegerObject{constructor(e){super(ff,"currentPage",0,e=>e>=0)}}class Data extends XFAObject{constructor(e){super(ff,"data",!0);this.adjustData=null;this.attributes=null;this.incrementalLoad=null;this.outputXSL=null;this.range=null;this.record=null;this.startNode=null;this.uri=null;this.window=null;this.xsl=null;this.excludeNS=new XFAObjectArray;this.transform=new XFAObjectArray}}class Debug extends XFAObject{constructor(e){super(ff,"debug",!0);this.uri=null}}class DefaultTypeface extends ContentObject{constructor(e){super(ff,"defaultTypeface");this.writingScript=getStringOption(e.writingScript,["*","Arabic","Cyrillic","EastEuropeanRoman","Greek","Hebrew","Japanese","Korean","Roman","SimplifiedChinese","Thai","TraditionalChinese","Vietnamese"])}}class Destination extends OptionObject{constructor(e){super(ff,"destination",["pdf","pcl","ps","webClient","zpl"])}}class DocumentAssembly extends Option01{constructor(e){super(ff,"documentAssembly")}}class Driver extends XFAObject{constructor(e){super(ff,"driver",!0);this.name=e.name?e.name.trim():"";this.fontInfo=null;this.xdc=null}}class DuplexOption extends OptionObject{constructor(e){super(ff,"duplexOption",["simplex","duplexFlipLongEdge","duplexFlipShortEdge"])}}class DynamicRender extends OptionObject{constructor(e){super(ff,"dynamicRender",["forbidden","required"])}}class Embed extends Option01{constructor(e){super(ff,"embed")}}class config_Encrypt extends Option01{constructor(e){super(ff,"encrypt")}}class config_Encryption extends XFAObject{constructor(e){super(ff,"encryption",!0);this.encrypt=null;this.encryptionLevel=null;this.permissions=null}}class EncryptionLevel extends OptionObject{constructor(e){super(ff,"encryptionLevel",["40bit","128bit"])}}class Enforce extends StringObject{constructor(e){super(ff,"enforce")}}class Equate extends XFAObject{constructor(e){super(ff,"equate");this.force=getInteger({data:e.force,defaultValue:1,validate:e=>0===e});this.from=e.from||"";this.to=e.to||""}}class EquateRange extends XFAObject{constructor(e){super(ff,"equateRange");this.from=e.from||"";this.to=e.to||"";this._unicodeRange=e.unicodeRange||""}get unicodeRange(){const e=[],t=/U\+([0-9a-fA-F]+)/,a=this._unicodeRange;for(let n of a.split(",").map(e=>e.trim()).filter(Boolean)){n=n.split("-",2).map(e=>{const a=e.match(t);return a?parseInt(a[1],16):0});1===n.length&&n.push(n[0]);e.push(n)}return shadow(this,"unicodeRange",e)}}class Exclude extends ContentObject{constructor(e){super(ff,"exclude")}[ko](){this[go]=this[go].trim().split(/\s+/).filter(e=>e&&["calculate","close","enter","exit","initialize","ready","validate"].includes(e))}}class ExcludeNS extends StringObject{constructor(e){super(ff,"excludeNS")}}class FlipLabel extends OptionObject{constructor(e){super(ff,"flipLabel",["usePrinterSetting","on","off"])}}class config_FontInfo extends XFAObject{constructor(e){super(ff,"fontInfo",!0);this.embed=null;this.map=null;this.subsetBelow=null;this.alwaysEmbed=new XFAObjectArray;this.defaultTypeface=new XFAObjectArray;this.neverEmbed=new XFAObjectArray}}class FormFieldFilling extends Option01{constructor(e){super(ff,"formFieldFilling")}}class GroupParent extends StringObject{constructor(e){super(ff,"groupParent")}}class IfEmpty extends OptionObject{constructor(e){super(ff,"ifEmpty",["dataValue","dataGroup","ignore","remove"])}}class IncludeXDPContent extends StringObject{constructor(e){super(ff,"includeXDPContent")}}class IncrementalLoad extends OptionObject{constructor(e){super(ff,"incrementalLoad",["none","forwardOnly"])}}class IncrementalMerge extends Option01{constructor(e){super(ff,"incrementalMerge")}}class Interactive extends Option01{constructor(e){super(ff,"interactive")}}class Jog extends OptionObject{constructor(e){super(ff,"jog",["usePrinterSetting","none","pageSet"])}}class LabelPrinter extends XFAObject{constructor(e){super(ff,"labelPrinter",!0);this.name=getStringOption(e.name,["zpl","dpl","ipl","tcpl"]);this.batchOutput=null;this.flipLabel=null;this.fontInfo=null;this.xdc=null}}class Layout extends OptionObject{constructor(e){super(ff,"layout",["paginate","panel"])}}class Level extends IntegerObject{constructor(e){super(ff,"level",0,e=>e>0)}}class Linearized extends Option01{constructor(e){super(ff,"linearized")}}class Locale extends StringObject{constructor(e){super(ff,"locale")}}class LocaleSet extends StringObject{constructor(e){super(ff,"localeSet")}}class Log extends XFAObject{constructor(e){super(ff,"log",!0);this.mode=null;this.threshold=null;this.to=null;this.uri=null}}class MapElement extends XFAObject{constructor(e){super(ff,"map",!0);this.equate=new XFAObjectArray;this.equateRange=new XFAObjectArray}}class MediumInfo extends XFAObject{constructor(e){super(ff,"mediumInfo",!0);this.map=null}}class config_Message extends XFAObject{constructor(e){super(ff,"message",!0);this.msgId=null;this.severity=null}}class Messaging extends XFAObject{constructor(e){super(ff,"messaging",!0);this.message=new XFAObjectArray}}class Mode extends OptionObject{constructor(e){super(ff,"mode",["append","overwrite"])}}class ModifyAnnots extends Option01{constructor(e){super(ff,"modifyAnnots")}}class MsgId extends IntegerObject{constructor(e){super(ff,"msgId",1,e=>e>=1)}}class NameAttr extends StringObject{constructor(e){super(ff,"nameAttr")}}class NeverEmbed extends ContentObject{constructor(e){super(ff,"neverEmbed")}}class NumberOfCopies extends IntegerObject{constructor(e){super(ff,"numberOfCopies",null,e=>e>=2&&e<=5)}}class OpenAction extends XFAObject{constructor(e){super(ff,"openAction",!0);this.destination=null}}class Output extends XFAObject{constructor(e){super(ff,"output",!0);this.to=null;this.type=null;this.uri=null}}class OutputBin extends StringObject{constructor(e){super(ff,"outputBin")}}class OutputXSL extends XFAObject{constructor(e){super(ff,"outputXSL",!0);this.uri=null}}class Overprint extends OptionObject{constructor(e){super(ff,"overprint",["none","both","draw","field"])}}class Packets extends StringObject{constructor(e){super(ff,"packets")}[ko](){"*"!==this[go]&&(this[go]=this[go].trim().split(/\s+/).filter(e=>["config","datasets","template","xfdf","xslt"].includes(e)))}}class PageOffset extends XFAObject{constructor(e){super(ff,"pageOffset");this.x=getInteger({data:e.x,defaultValue:"useXDCSetting",validate:e=>!0});this.y=getInteger({data:e.y,defaultValue:"useXDCSetting",validate:e=>!0})}}class PageRange extends StringObject{constructor(e){super(ff,"pageRange")}[ko](){const e=this[go].trim().split(/\s+/).map(e=>parseInt(e,10)),t=[];for(let a=0,n=e.length;a<n;a+=2)t.push(e.slice(a,a+2));this[go]=t}}class Pagination extends OptionObject{constructor(e){super(ff,"pagination",["simplex","duplexShortEdge","duplexLongEdge"])}}class PaginationOverride extends OptionObject{constructor(e){super(ff,"paginationOverride",["none","forceDuplex","forceDuplexLongEdge","forceDuplexShortEdge","forceSimplex"])}}class Part extends IntegerObject{constructor(e){super(ff,"part",1,e=>!1)}}class Pcl extends XFAObject{constructor(e){super(ff,"pcl",!0);this.name=e.name||"";this.batchOutput=null;this.fontInfo=null;this.jog=null;this.mediumInfo=null;this.outputBin=null;this.pageOffset=null;this.staple=null;this.xdc=null}}class Pdf extends XFAObject{constructor(e){super(ff,"pdf",!0);this.name=e.name||"";this.adobeExtensionLevel=null;this.batchOutput=null;this.compression=null;this.creator=null;this.encryption=null;this.fontInfo=null;this.interactive=null;this.linearized=null;this.openAction=null;this.pdfa=null;this.producer=null;this.renderPolicy=null;this.scriptModel=null;this.silentPrint=null;this.submitFormat=null;this.tagged=null;this.version=null;this.viewerPreferences=null;this.xdc=null}}class Pdfa extends XFAObject{constructor(e){super(ff,"pdfa",!0);this.amd=null;this.conformance=null;this.includeXDPContent=null;this.part=null}}class Permissions extends XFAObject{constructor(e){super(ff,"permissions",!0);this.accessibleContent=null;this.change=null;this.contentCopy=null;this.documentAssembly=null;this.formFieldFilling=null;this.modifyAnnots=null;this.plaintextMetadata=null;this.print=null;this.printHighQuality=null}}class PickTrayByPDFSize extends Option01{constructor(e){super(ff,"pickTrayByPDFSize")}}class config_Picture extends StringObject{constructor(e){super(ff,"picture")}}class PlaintextMetadata extends Option01{constructor(e){super(ff,"plaintextMetadata")}}class Presence extends OptionObject{constructor(e){super(ff,"presence",["preserve","dissolve","dissolveStructure","ignore","remove"])}}class Present extends XFAObject{constructor(e){super(ff,"present",!0);this.behaviorOverride=null;this.cache=null;this.common=null;this.copies=null;this.destination=null;this.incrementalMerge=null;this.layout=null;this.output=null;this.overprint=null;this.pagination=null;this.paginationOverride=null;this.script=null;this.validate=null;this.xdp=null;this.driver=new XFAObjectArray;this.labelPrinter=new XFAObjectArray;this.pcl=new XFAObjectArray;this.pdf=new XFAObjectArray;this.ps=new XFAObjectArray;this.submitUrl=new XFAObjectArray;this.webClient=new XFAObjectArray;this.zpl=new XFAObjectArray}}class Print extends Option01{constructor(e){super(ff,"print")}}class PrintHighQuality extends Option01{constructor(e){super(ff,"printHighQuality")}}class PrintScaling extends OptionObject{constructor(e){super(ff,"printScaling",["appdefault","noScaling"])}}class PrinterName extends StringObject{constructor(e){super(ff,"printerName")}}class Producer extends StringObject{constructor(e){super(ff,"producer")}}class Ps extends XFAObject{constructor(e){super(ff,"ps",!0);this.name=e.name||"";this.batchOutput=null;this.fontInfo=null;this.jog=null;this.mediumInfo=null;this.outputBin=null;this.staple=null;this.xdc=null}}class Range extends ContentObject{constructor(e){super(ff,"range")}[ko](){this[go]=this[go].split(",",2).map(e=>e.split("-").map(e=>parseInt(e.trim(),10))).filter(e=>e.every(e=>!isNaN(e))).map(e=>{1===e.length&&e.push(e[0]);return e})}}class Record extends ContentObject{constructor(e){super(ff,"record")}[ko](){this[go]=this[go].trim();const e=parseInt(this[go],10);!isNaN(e)&&e>=0&&(this[go]=e)}}class Relevant extends ContentObject{constructor(e){super(ff,"relevant")}[ko](){this[go]=this[go].trim().split(/\s+/)}}class Rename extends ContentObject{constructor(e){super(ff,"rename")}[ko](){this[go]=this[go].trim();(this[go].toLowerCase().startsWith("xml")||/[\p{L}_][\p{L}\d._\p{M}-]*/u.test(this[go]))&&warn("XFA - Rename: invalid XFA name")}}class RenderPolicy extends OptionObject{constructor(e){super(ff,"renderPolicy",["server","client"])}}class RunScripts extends OptionObject{constructor(e){super(ff,"runScripts",["both","client","none","server"])}}class config_Script extends XFAObject{constructor(e){super(ff,"script",!0);this.currentPage=null;this.exclude=null;this.runScripts=null}}class ScriptModel extends OptionObject{constructor(e){super(ff,"scriptModel",["XFA","none"])}}class Severity extends OptionObject{constructor(e){super(ff,"severity",["ignore","error","information","trace","warning"])}}class SilentPrint extends XFAObject{constructor(e){super(ff,"silentPrint",!0);this.addSilentPrint=null;this.printerName=null}}class Staple extends XFAObject{constructor(e){super(ff,"staple");this.mode=getStringOption(e.mode,["usePrinterSetting","on","off"])}}class StartNode extends StringObject{constructor(e){super(ff,"startNode")}}class StartPage extends IntegerObject{constructor(e){super(ff,"startPage",0,e=>!0)}}class SubmitFormat extends OptionObject{constructor(e){super(ff,"submitFormat",["html","delegate","fdf","xml","pdf"])}}class SubmitUrl extends StringObject{constructor(e){super(ff,"submitUrl")}}class SubsetBelow extends IntegerObject{constructor(e){super(ff,"subsetBelow",100,e=>e>=0&&e<=100)}}class SuppressBanner extends Option01{constructor(e){super(ff,"suppressBanner")}}class Tagged extends Option01{constructor(e){super(ff,"tagged")}}class config_Template extends XFAObject{constructor(e){super(ff,"template",!0);this.base=null;this.relevant=null;this.startPage=null;this.uri=null;this.xsl=null}}class Threshold extends OptionObject{constructor(e){super(ff,"threshold",["trace","error","information","warning"])}}class To extends OptionObject{constructor(e){super(ff,"to",["null","memory","stderr","stdout","system","uri"])}}class TemplateCache extends XFAObject{constructor(e){super(ff,"templateCache");this.maxEntries=getInteger({data:e.maxEntries,defaultValue:5,validate:e=>e>=0})}}class Trace extends XFAObject{constructor(e){super(ff,"trace",!0);this.area=new XFAObjectArray}}class Transform extends XFAObject{constructor(e){super(ff,"transform",!0);this.groupParent=null;this.ifEmpty=null;this.nameAttr=null;this.picture=null;this.presence=null;this.rename=null;this.whitespace=null}}class Type extends OptionObject{constructor(e){super(ff,"type",["none","ascii85","asciiHex","ccittfax","flate","lzw","runLength","native","xdp","mergedXDP"])}}class Uri extends StringObject{constructor(e){super(ff,"uri")}}class config_Validate extends OptionObject{constructor(e){super(ff,"validate",["preSubmit","prePrint","preExecute","preSave"])}}class ValidateApprovalSignatures extends ContentObject{constructor(e){super(ff,"validateApprovalSignatures")}[ko](){this[go]=this[go].trim().split(/\s+/).filter(e=>["docReady","postSign"].includes(e))}}class ValidationMessaging extends OptionObject{constructor(e){super(ff,"validationMessaging",["allMessagesIndividually","allMessagesTogether","firstMessageOnly","noMessages"])}}class Version extends OptionObject{constructor(e){super(ff,"version",["1.7","1.6","1.5","1.4","1.3","1.2"])}}class VersionControl extends XFAObject{constructor(e){super(ff,"VersionControl");this.outputBelow=getStringOption(e.outputBelow,["warn","error","update"]);this.sourceAbove=getStringOption(e.sourceAbove,["warn","error"]);this.sourceBelow=getStringOption(e.sourceBelow,["update","maintain"])}}class ViewerPreferences extends XFAObject{constructor(e){super(ff,"viewerPreferences",!0);this.ADBE_JSConsole=null;this.ADBE_JSDebugger=null;this.addViewerPreferences=null;this.duplexOption=null;this.enforce=null;this.numberOfCopies=null;this.pageRange=null;this.pickTrayByPDFSize=null;this.printScaling=null}}class WebClient extends XFAObject{constructor(e){super(ff,"webClient",!0);this.name=e.name?e.name.trim():"";this.fontInfo=null;this.xdc=null}}class Whitespace extends OptionObject{constructor(e){super(ff,"whitespace",["preserve","ltrim","normalize","rtrim","trim"])}}class Window extends ContentObject{constructor(e){super(ff,"window")}[ko](){const e=this[go].split(",",2).map(e=>parseInt(e.trim(),10));if(e.some(e=>isNaN(e)))this[go]=[0,0];else{1===e.length&&e.push(e[0]);this[go]=e}}}class Xdc extends XFAObject{constructor(e){super(ff,"xdc",!0);this.uri=new XFAObjectArray;this.xsl=new XFAObjectArray}}class Xdp extends XFAObject{constructor(e){super(ff,"xdp",!0);this.packets=null}}class Xsl extends XFAObject{constructor(e){super(ff,"xsl",!0);this.debug=null;this.uri=null}}class Zpl extends XFAObject{constructor(e){super(ff,"zpl",!0);this.name=e.name?e.name.trim():"";this.batchOutput=null;this.flipLabel=null;this.fontInfo=null;this.xdc=null}}class ConfigNamespace{static[ql](e,t){return Object.hasOwn(ConfigNamespace,e)?ConfigNamespace[e](t):void 0}static acrobat(e){return new Acrobat(e)}static acrobat7(e){return new Acrobat7(e)}static ADBE_JSConsole(e){return new ADBE_JSConsole(e)}static ADBE_JSDebugger(e){return new ADBE_JSDebugger(e)}static addSilentPrint(e){return new AddSilentPrint(e)}static addViewerPreferences(e){return new AddViewerPreferences(e)}static adjustData(e){return new AdjustData(e)}static adobeExtensionLevel(e){return new AdobeExtensionLevel(e)}static agent(e){return new Agent(e)}static alwaysEmbed(e){return new AlwaysEmbed(e)}static amd(e){return new Amd(e)}static area(e){return new config_Area(e)}static attributes(e){return new Attributes(e)}static autoSave(e){return new AutoSave(e)}static base(e){return new Base(e)}static batchOutput(e){return new BatchOutput(e)}static behaviorOverride(e){return new BehaviorOverride(e)}static cache(e){return new Cache(e)}static change(e){return new Change(e)}static common(e){return new Common(e)}static compress(e){return new Compress(e)}static compressLogicalStructure(e){return new CompressLogicalStructure(e)}static compressObjectStream(e){return new CompressObjectStream(e)}static compression(e){return new Compression(e)}static config(e){return new Config(e)}static conformance(e){return new Conformance(e)}static contentCopy(e){return new ContentCopy(e)}static copies(e){return new Copies(e)}static creator(e){return new Creator(e)}static currentPage(e){return new CurrentPage(e)}static data(e){return new Data(e)}static debug(e){return new Debug(e)}static defaultTypeface(e){return new DefaultTypeface(e)}static destination(e){return new Destination(e)}static documentAssembly(e){return new DocumentAssembly(e)}static driver(e){return new Driver(e)}static duplexOption(e){return new DuplexOption(e)}static dynamicRender(e){return new DynamicRender(e)}static embed(e){return new Embed(e)}static encrypt(e){return new config_Encrypt(e)}static encryption(e){return new config_Encryption(e)}static encryptionLevel(e){return new EncryptionLevel(e)}static enforce(e){return new Enforce(e)}static equate(e){return new Equate(e)}static equateRange(e){return new EquateRange(e)}static exclude(e){return new Exclude(e)}static excludeNS(e){return new ExcludeNS(e)}static flipLabel(e){return new FlipLabel(e)}static fontInfo(e){return new config_FontInfo(e)}static formFieldFilling(e){return new FormFieldFilling(e)}static groupParent(e){return new GroupParent(e)}static ifEmpty(e){return new IfEmpty(e)}static includeXDPContent(e){return new IncludeXDPContent(e)}static incrementalLoad(e){return new IncrementalLoad(e)}static incrementalMerge(e){return new IncrementalMerge(e)}static interactive(e){return new Interactive(e)}static jog(e){return new Jog(e)}static labelPrinter(e){return new LabelPrinter(e)}static layout(e){return new Layout(e)}static level(e){return new Level(e)}static linearized(e){return new Linearized(e)}static locale(e){return new Locale(e)}static localeSet(e){return new LocaleSet(e)}static log(e){return new Log(e)}static map(e){return new MapElement(e)}static mediumInfo(e){return new MediumInfo(e)}static message(e){return new config_Message(e)}static messaging(e){return new Messaging(e)}static mode(e){return new Mode(e)}static modifyAnnots(e){return new ModifyAnnots(e)}static msgId(e){return new MsgId(e)}static nameAttr(e){return new NameAttr(e)}static neverEmbed(e){return new NeverEmbed(e)}static numberOfCopies(e){return new NumberOfCopies(e)}static openAction(e){return new OpenAction(e)}static output(e){return new Output(e)}static outputBin(e){return new OutputBin(e)}static outputXSL(e){return new OutputXSL(e)}static overprint(e){return new Overprint(e)}static packets(e){return new Packets(e)}static pageOffset(e){return new PageOffset(e)}static pageRange(e){return new PageRange(e)}static pagination(e){return new Pagination(e)}static paginationOverride(e){return new PaginationOverride(e)}static part(e){return new Part(e)}static pcl(e){return new Pcl(e)}static pdf(e){return new Pdf(e)}static pdfa(e){return new Pdfa(e)}static permissions(e){return new Permissions(e)}static pickTrayByPDFSize(e){return new PickTrayByPDFSize(e)}static picture(e){return new config_Picture(e)}static plaintextMetadata(e){return new PlaintextMetadata(e)}static presence(e){return new Presence(e)}static present(e){return new Present(e)}static print(e){return new Print(e)}static printHighQuality(e){return new PrintHighQuality(e)}static printScaling(e){return new PrintScaling(e)}static printerName(e){return new PrinterName(e)}static producer(e){return new Producer(e)}static ps(e){return new Ps(e)}static range(e){return new Range(e)}static record(e){return new Record(e)}static relevant(e){return new Relevant(e)}static rename(e){return new Rename(e)}static renderPolicy(e){return new RenderPolicy(e)}static runScripts(e){return new RunScripts(e)}static script(e){return new config_Script(e)}static scriptModel(e){return new ScriptModel(e)}static severity(e){return new Severity(e)}static silentPrint(e){return new SilentPrint(e)}static staple(e){return new Staple(e)}static startNode(e){return new StartNode(e)}static startPage(e){return new StartPage(e)}static submitFormat(e){return new SubmitFormat(e)}static submitUrl(e){return new SubmitUrl(e)}static subsetBelow(e){return new SubsetBelow(e)}static suppressBanner(e){return new SuppressBanner(e)}static tagged(e){return new Tagged(e)}static template(e){return new config_Template(e)}static templateCache(e){return new TemplateCache(e)}static threshold(e){return new Threshold(e)}static to(e){return new To(e)}static trace(e){return new Trace(e)}static transform(e){return new Transform(e)}static type(e){return new Type(e)}static uri(e){return new Uri(e)}static validate(e){return new config_Validate(e)}static validateApprovalSignatures(e){return new ValidateApprovalSignatures(e)}static validationMessaging(e){return new ValidationMessaging(e)}static version(e){return new Version(e)}static versionControl(e){return new VersionControl(e)}static viewerPreferences(e){return new ViewerPreferences(e)}static webClient(e){return new WebClient(e)}static whitespace(e){return new Whitespace(e)}static window(e){return new Window(e)}static xdc(e){return new Xdc(e)}static xdp(e){return new Xdp(e)}static xsl(e){return new Xsl(e)}static zpl(e){return new Zpl(e)}}const cf=vl.connectionSet.id;class ConnectionSet extends XFAObject{constructor(e){super(cf,"connectionSet",!0);this.wsdlConnection=new XFAObjectArray;this.xmlConnection=new XFAObjectArray;this.xsdConnection=new XFAObjectArray}}class EffectiveInputPolicy extends XFAObject{constructor(e){super(cf,"effectiveInputPolicy");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class EffectiveOutputPolicy extends XFAObject{constructor(e){super(cf,"effectiveOutputPolicy");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Operation extends StringObject{constructor(e){super(cf,"operation");this.id=e.id||"";this.input=e.input||"";this.name=e.name||"";this.output=e.output||"";this.use=e.use||"";this.usehref=e.usehref||""}}class RootElement extends StringObject{constructor(e){super(cf,"rootElement");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class SoapAction extends StringObject{constructor(e){super(cf,"soapAction");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class SoapAddress extends StringObject{constructor(e){super(cf,"soapAddress");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class connection_set_Uri extends StringObject{constructor(e){super(cf,"uri");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class WsdlAddress extends StringObject{constructor(e){super(cf,"wsdlAddress");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class WsdlConnection extends XFAObject{constructor(e){super(cf,"wsdlConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.effectiveInputPolicy=null;this.effectiveOutputPolicy=null;this.operation=null;this.soapAction=null;this.soapAddress=null;this.wsdlAddress=null}}class XmlConnection extends XFAObject{constructor(e){super(cf,"xmlConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.uri=null}}class XsdConnection extends XFAObject{constructor(e){super(cf,"xsdConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.rootElement=null;this.uri=null}}class ConnectionSetNamespace{static[ql](e,t){return Object.hasOwn(ConnectionSetNamespace,e)?ConnectionSetNamespace[e](t):void 0}static connectionSet(e){return new ConnectionSet(e)}static effectiveInputPolicy(e){return new EffectiveInputPolicy(e)}static effectiveOutputPolicy(e){return new EffectiveOutputPolicy(e)}static operation(e){return new Operation(e)}static rootElement(e){return new RootElement(e)}static soapAction(e){return new SoapAction(e)}static soapAddress(e){return new SoapAddress(e)}static uri(e){return new connection_set_Uri(e)}static wsdlAddress(e){return new WsdlAddress(e)}static wsdlConnection(e){return new WsdlConnection(e)}static xmlConnection(e){return new XmlConnection(e)}static xsdConnection(e){return new XsdConnection(e)}}const hf=vl.datasets.id;class datasets_Data extends XmlObject{constructor(e){super(hf,"data",e)}[Go](){return!0}}class Datasets extends XFAObject{constructor(e){super(hf,"datasets",!0);this.data=null;this.Signature=null}[al](e){const t=e[el];("data"===t&&e[Zo]===hf||"Signature"===t&&e[Zo]===vl.signature.id)&&(this[t]=e);this[lo](e)}}class DatasetsNamespace{static[ql](e,t){return Object.hasOwn(DatasetsNamespace,e)?DatasetsNamespace[e](t):void 0}static datasets(e){return new Datasets(e)}static data(e){return new datasets_Data(e)}}const uf=vl.localeSet.id;class CalendarSymbols extends XFAObject{constructor(e){super(uf,"calendarSymbols",!0);this.name="gregorian";this.dayNames=new XFAObjectArray(2);this.eraNames=null;this.meridiemNames=null;this.monthNames=new XFAObjectArray(2)}}class CurrencySymbol extends StringObject{constructor(e){super(uf,"currencySymbol");this.name=getStringOption(e.name,["symbol","isoname","decimal"])}}class CurrencySymbols extends XFAObject{constructor(e){super(uf,"currencySymbols",!0);this.currencySymbol=new XFAObjectArray(3)}}class DatePattern extends StringObject{constructor(e){super(uf,"datePattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class DatePatterns extends XFAObject{constructor(e){super(uf,"datePatterns",!0);this.datePattern=new XFAObjectArray(4)}}class DateTimeSymbols extends ContentObject{constructor(e){super(uf,"dateTimeSymbols")}}class Day extends StringObject{constructor(e){super(uf,"day")}}class DayNames extends XFAObject{constructor(e){super(uf,"dayNames",!0);this.abbr=getInteger({data:e.abbr,defaultValue:0,validate:e=>1===e});this.day=new XFAObjectArray(7)}}class Era extends StringObject{constructor(e){super(uf,"era")}}class EraNames extends XFAObject{constructor(e){super(uf,"eraNames",!0);this.era=new XFAObjectArray(2)}}class locale_set_Locale extends XFAObject{constructor(e){super(uf,"locale",!0);this.desc=e.desc||"";this.name="isoname";this.calendarSymbols=null;this.currencySymbols=null;this.datePatterns=null;this.dateTimeSymbols=null;this.numberPatterns=null;this.numberSymbols=null;this.timePatterns=null;this.typeFaces=null}}class locale_set_LocaleSet extends XFAObject{constructor(e){super(uf,"localeSet",!0);this.locale=new XFAObjectArray}}class Meridiem extends StringObject{constructor(e){super(uf,"meridiem")}}class MeridiemNames extends XFAObject{constructor(e){super(uf,"meridiemNames",!0);this.meridiem=new XFAObjectArray(2)}}class Month extends StringObject{constructor(e){super(uf,"month")}}class MonthNames extends XFAObject{constructor(e){super(uf,"monthNames",!0);this.abbr=getInteger({data:e.abbr,defaultValue:0,validate:e=>1===e});this.month=new XFAObjectArray(12)}}class NumberPattern extends StringObject{constructor(e){super(uf,"numberPattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class NumberPatterns extends XFAObject{constructor(e){super(uf,"numberPatterns",!0);this.numberPattern=new XFAObjectArray(4)}}class NumberSymbol extends StringObject{constructor(e){super(uf,"numberSymbol");this.name=getStringOption(e.name,["decimal","grouping","percent","minus","zero"])}}class NumberSymbols extends XFAObject{constructor(e){super(uf,"numberSymbols",!0);this.numberSymbol=new XFAObjectArray(5)}}class TimePattern extends StringObject{constructor(e){super(uf,"timePattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class TimePatterns extends XFAObject{constructor(e){super(uf,"timePatterns",!0);this.timePattern=new XFAObjectArray(4)}}class TypeFace extends XFAObject{constructor(e){super(uf,"typeFace",!0);this.name=""|e.name}}class TypeFaces extends XFAObject{constructor(e){super(uf,"typeFaces",!0);this.typeFace=new XFAObjectArray}}class LocaleSetNamespace{static[ql](e,t){return Object.hasOwn(LocaleSetNamespace,e)?LocaleSetNamespace[e](t):void 0}static calendarSymbols(e){return new CalendarSymbols(e)}static currencySymbol(e){return new CurrencySymbol(e)}static currencySymbols(e){return new CurrencySymbols(e)}static datePattern(e){return new DatePattern(e)}static datePatterns(e){return new DatePatterns(e)}static dateTimeSymbols(e){return new DateTimeSymbols(e)}static day(e){return new Day(e)}static dayNames(e){return new DayNames(e)}static era(e){return new Era(e)}static eraNames(e){return new EraNames(e)}static locale(e){return new locale_set_Locale(e)}static localeSet(e){return new locale_set_LocaleSet(e)}static meridiem(e){return new Meridiem(e)}static meridiemNames(e){return new MeridiemNames(e)}static month(e){return new Month(e)}static monthNames(e){return new MonthNames(e)}static numberPattern(e){return new NumberPattern(e)}static numberPatterns(e){return new NumberPatterns(e)}static numberSymbol(e){return new NumberSymbol(e)}static numberSymbols(e){return new NumberSymbols(e)}static timePattern(e){return new TimePattern(e)}static timePatterns(e){return new TimePatterns(e)}static typeFace(e){return new TypeFace(e)}static typeFaces(e){return new TypeFaces(e)}}const mf=vl.signature.id;class signature_Signature extends XFAObject{constructor(e){super(mf,"signature",!0)}}class SignatureNamespace{static[ql](e,t){return Object.hasOwn(SignatureNamespace,e)?SignatureNamespace[e](t):void 0}static signature(e){return new signature_Signature(e)}}const pf=vl.stylesheet.id;class Stylesheet extends XFAObject{constructor(e){super(pf,"stylesheet",!0)}}class StylesheetNamespace{static[ql](e,t){return Object.hasOwn(StylesheetNamespace,e)?StylesheetNamespace[e](t):void 0}static stylesheet(e){return new Stylesheet(e)}}const df=vl.xdp.id;class xdp_Xdp extends XFAObject{constructor(e){super(df,"xdp",!0);this.uuid=e.uuid||"";this.timeStamp=e.timeStamp||"";this.config=null;this.connectionSet=null;this.datasets=null;this.localeSet=null;this.stylesheet=new XFAObjectArray;this.template=null}[nl](e){const t=vl[e[el]];return t&&e[Zo]===t.id}}class XdpNamespace{static[ql](e,t){return Object.hasOwn(XdpNamespace,e)?XdpNamespace[e](t):void 0}static xdp(e){return new xdp_Xdp(e)}}const gf=vl.xhtml.id,bf=Symbol(),wf=new Set(["color","font","font-family","font-size","font-stretch","font-style","font-weight","margin","margin-bottom","margin-left","margin-right","margin-top","letter-spacing","line-height","orphans","page-break-after","page-break-before","page-break-inside","tab-interval","tab-stop","text-align","text-decoration","text-indent","vertical-align","widows","kerning-mode","xfa-font-horizontal-scale","xfa-font-vertical-scale","xfa-spacerun","xfa-tab-stops"]),jf=new Map([["page-break-after","breakAfter"],["page-break-before","breakBefore"],["page-break-inside","breakInside"],["kerning-mode",e=>"none"===e?"none":"normal"],["xfa-font-horizontal-scale",e=>`scaleX(${Math.max(0,parseInt(e,10)/100).toFixed(2)})`],["xfa-font-vertical-scale",e=>`scaleY(${Math.max(0,parseInt(e,10)/100).toFixed(2)})`],["xfa-spacerun",""],["xfa-tab-stops",""],["font-size",(e,t)=>measureToString(.99*(e=t.fontSize=Math.abs(getMeasurement(e))))],["letter-spacing",e=>measureToString(getMeasurement(e))],["line-height",e=>measureToString(getMeasurement(e))],["margin",e=>measureToString(getMeasurement(e))],["margin-bottom",e=>measureToString(getMeasurement(e))],["margin-left",e=>measureToString(getMeasurement(e))],["margin-right",e=>measureToString(getMeasurement(e))],["margin-top",e=>measureToString(getMeasurement(e))],["text-indent",e=>measureToString(getMeasurement(e))],["font-family",e=>e],["vertical-align",e=>measureToString(getMeasurement(e))]]),kf=/\s+/g,yf=/[\r\n]+/g,qf=/\r\n?/g;function mapStyle(e,t,a){const n=Object.create(null);if(!e)return n;const s=Object.create(null);for(const[t,a]of e.split(";").map(e=>e.split(":",2))){const e=jf.get(t);if(""===e)continue;let r=a;e&&(r="string"==typeof e?e:e(a,s));t.endsWith("scale")?n.transform=n.transform?`${n[t]} ${r}`:r:n[t.replaceAll(/-([a-z])/gi,(e,t)=>t.toUpperCase())]=r}n.fontFamily&&setFontFamily({typeface:n.fontFamily,weight:n.fontWeight||"normal",posture:n.fontStyle||"normal",size:s.fontSize||0},t,t[Po].fontFinder,n);if(a&&n.verticalAlign&&"0px"!==n.verticalAlign&&n.fontSize){const e=.583,t=.333,a=getMeasurement(n.fontSize);n.fontSize=measureToString(a*e);n.verticalAlign=measureToString(Math.sign(getMeasurement(n.verticalAlign))*a*t)}a&&n.fontSize&&(n.fontSize=`calc(${n.fontSize} * var(--total-scale-factor))`);fixTextIndent(n);return n}const vf=new Set(["body","html"]);class XhtmlObject extends XmlObject{constructor(e,t){super(gf,t);this[bf]=!1;this.style=e.style||""}[co](e){super[co](e);this.style=function checkStyle(e){return e.style?e.style.split(";").filter(e=>!!e.trim()).map(e=>e.split(":",2).map(e=>e.trim())).filter(([t,a])=>{"font-family"===t&&e[Po].usedTypefaces.add(a);return wf.has(t)}).map(e=>e.join(":")).join(";"):""}(this)}[io](){return!vf.has(this[el])}[sl](e,t=!1){if(t)this[bf]=!0;else{e=e.replaceAll(yf,"");this.style.includes("xfa-spacerun:yes")||(e=e.replaceAll(kf," "))}e&&(this[go]+=e)}[rl](e,t=!0){const a=Object.create(null),n={top:NaN,bottom:NaN,left:NaN,right:NaN};let s=null;for(const[e,t]of this.style.split(";").map(e=>e.split(":",2)))switch(e){case"font-family":a.typeface=stripQuotes(t);break;case"font-size":a.size=getMeasurement(t);break;case"font-weight":a.weight=t;break;case"font-style":a.posture=t;break;case"letter-spacing":a.letterSpacing=getMeasurement(t);break;case"margin":const e=t.split(/ \t/).map(getMeasurement);switch(e.length){case 1:n.top=n.bottom=n.left=n.right=e[0];break;case 2:n.top=n.bottom=e[0];n.left=n.right=e[1];break;case 3:n.top=e[0];n.bottom=e[2];n.left=n.right=e[1];break;case 4:n.top=e[0];n.left=e[1];n.bottom=e[2];n.right=e[3]}break;case"margin-top":n.top=getMeasurement(t);break;case"margin-bottom":n.bottom=getMeasurement(t);break;case"margin-left":n.left=getMeasurement(t);break;case"margin-right":n.right=getMeasurement(t);break;case"line-height":s=getMeasurement(t)}e.pushData(a,n,s);if(this[go])e.addString(this[go]);else for(const t of this[Oo]())"#text"!==t[el]?t[rl](e):e.addString(t[go]);t&&e.popFont()}[wl](e){const t=[];this[jo]={children:t};this[fo]({});if(0===t.length&&!this[go])return HTMLResult.EMPTY;let a;a=this[bf]?this[go]?this[go].replaceAll(qf,"\n"):void 0:this[go]||void 0;return HTMLResult.success({name:this[el],attributes:{href:this.href,style:mapStyle(this.style,this,this[bf])},children:t,value:a})}}class A extends XhtmlObject{constructor(e){super(e,"a");this.href=fixURL(e.href)||""}}class B extends XhtmlObject{constructor(e){super(e,"b")}[rl](e){e.pushFont({weight:"bold"});super[rl](e);e.popFont()}}class Body extends XhtmlObject{constructor(e){super(e,"body")}[wl](e){const t=super[wl](e),{html:a}=t;if(!a)return HTMLResult.EMPTY;a.name="div";a.attributes.class=["xfaRich"];return t}}class Br extends XhtmlObject{constructor(e){super(e,"br")}[gl](){return"\n"}[rl](e){e.addString("\n")}[wl](e){return HTMLResult.success({name:"br"})}}class Html extends XhtmlObject{constructor(e){super(e,"html")}[wl](e){const t=[];this[jo]={children:t};this[fo]({});if(0===t.length)return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},value:this[go]||""});if(1===t.length){const e=t[0];if(e.attributes?.class.includes("xfaRich"))return HTMLResult.success(e)}return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},children:t})}}class I extends XhtmlObject{constructor(e){super(e,"i")}[rl](e){e.pushFont({posture:"italic"});super[rl](e);e.popFont()}}class Li extends XhtmlObject{constructor(e){super(e,"li")}}class Ol extends XhtmlObject{constructor(e){super(e,"ol")}}class P extends XhtmlObject{constructor(e){super(e,"p")}[rl](e){super[rl](e,!1);e.addString("\n");e.addPara();e.popFont()}[gl](){return this[Mo]()[Oo]().at(-1)===this?super[gl]():super[gl]()+"\n"}}class Span extends XhtmlObject{constructor(e){super(e,"span")}}class Sub extends XhtmlObject{constructor(e){super(e,"sub")}}class Sup extends XhtmlObject{constructor(e){super(e,"sup")}}class Ul extends XhtmlObject{constructor(e){super(e,"ul")}}class XhtmlNamespace{static[ql](e,t){return Object.hasOwn(XhtmlNamespace,e)?XhtmlNamespace[e](t):void 0}static a(e){return new A(e)}static b(e){return new B(e)}static body(e){return new Body(e)}static br(e){return new Br(e)}static html(e){return new Html(e)}static i(e){return new I(e)}static li(e){return new Li(e)}static ol(e){return new Ol(e)}static p(e){return new P(e)}static span(e){return new Span(e)}static sub(e){return new Sub(e)}static sup(e){return new Sup(e)}static ul(e){return new Ul(e)}}const Sf={config:ConfigNamespace,connection:ConnectionSetNamespace,datasets:DatasetsNamespace,localeSet:LocaleSetNamespace,signature:SignatureNamespace,stylesheet:StylesheetNamespace,template:TemplateNamespace,xdp:XdpNamespace,xhtml:XhtmlNamespace};class UnknownNamespace{constructor(e){this.namespaceId=e}[ql](e,t){return new XmlObject(this.namespaceId,e,t)}}class Root extends XFAObject{constructor(e){super(-1,"root",Object.create(null));this.element=null;this[_o]=e}[al](e){this.element=e;return!0}[ko](){super[ko]();if(this.element.template instanceof Template){this[_o].set(fl,this.element);this.element.template[cl](this[_o]);this.element.template[_o]=this[_o]}}}class Empty extends XFAObject{constructor(){super(-1,"",Object.create(null))}[al](e){return!1}}class Builder{constructor(e=null){this._namespaceStack=[];this._nsAgnosticLevel=0;this._namespacePrefixes=new Map;this._namespaces=new Map;this._nextNsId=Math.max(...Object.values(vl).map(({id:e})=>e));this._currentNamespace=e||new UnknownNamespace(++this._nextNsId)}buildRoot(e){return new Root(e)}build({nsPrefix:e,name:t,attributes:a,namespace:n,prefixes:s}){const r=null!==n;if(r){this._namespaceStack.push(this._currentNamespace);this._currentNamespace=this._searchNamespace(n)}s&&this._addNamespacePrefix(s);if(Object.hasOwn(a,tl)){const e=Sf.datasets,t=a[tl];let n=null;for(const[a,s]of Object.entries(t)){if(this._getNamespaceToUse(a)===e){n={xfa:s};break}}n?a[tl]=n:delete a[tl]}const i=this._getNamespaceToUse(e),o=i?.[ql](t,a)||new Empty;o[Go]()&&this._nsAgnosticLevel++;(r||s||o[Go]())&&(o[uo]={hasNamespace:r,prefixes:s,nsAgnostic:o[Go]()});return o}isNsAgnostic(){return this._nsAgnosticLevel>0}_searchNamespace(e){let t=this._namespaces.get(e);if(t)return t;for(const[a,{check:n}]of Object.entries(vl))if(n(e)){t=Sf[a];if(t){this._namespaces.set(e,t);return t}break}t=new UnknownNamespace(++this._nextNsId);this._namespaces.set(e,t);return t}_addNamespacePrefix(e){for(const{prefix:t,value:a}of e){const e=this._searchNamespace(a);this._namespacePrefixes.getOrInsertComputed(t,makeArr).push(e)}}_getNamespaceToUse(e){if(!e)return this._currentNamespace;const t=this._namespacePrefixes.get(e);if(t?.length>0)return t.at(-1);warn(`Unknown namespace prefix: ${e}.`);return null}clean(e){const{hasNamespace:t,prefixes:a,nsAgnostic:n}=e;t&&(this._currentNamespace=this._namespaceStack.pop());a?.forEach(({prefix:e})=>{this._namespacePrefixes.get(e).pop()});n&&this._nsAgnosticLevel--}}class XFAParser extends XMLParserBase{constructor(e=null,t=!1){super();this._builder=new Builder(e);this._stack=[];this._globalData={usedTypefaces:new Set};this._ids=new Map;this._current=this._builder.buildRoot(this._ids);this._errorCode=Ki;this._whiteRegex=/^\s+$/;this._nbsps=/\xa0+/g;this._richText=t}parse(e){this.parseXml(e);if(this._errorCode===Ki){this._current[ko]();return this._current.element}}onText(e){e=e.replace(this._nbsps,e=>e.slice(1)+" ");this._richText||this._current[io]()?this._current[sl](e,this._richText):this._whiteRegex.test(e)||this._current[sl](e.trim())}onCdata(e){this._current[sl](e)}_mkAttributes(e,t){let a=null,n=null;const s=Object.create({});for(const{name:r,value:i}of e)if("xmlns"===r)a?warn(`XFA - multiple namespace definition in <${t}>`):a=i;else if(r.startsWith("xmlns:")){const e=r.substring(6);n??=[];n.push({prefix:e,value:i})}else{const e=r.indexOf(":");if(-1===e)s[r]=i;else{const t=s[tl]??=Object.create(null),[a,n]=[r.slice(0,e),r.slice(e+1)];(t[a]||=Object.create(null))[n]=i}}return[a,n,s]}_getNameAndPrefix(e,t){const a=e.indexOf(":");return-1===a?[e,null]:[e.substring(a+1),t?"":e.substring(0,a)]}onBeginElement(e,t,a){const[n,s,r]=this._mkAttributes(t,e),[i,o]=this._getNameAndPrefix(e,this._builder.isNsAgnostic()),l=this._builder.build({nsPrefix:o,name:i,attributes:r,namespace:n,prefixes:s});l[Po]=this._globalData;if(a){l[ko]();this._current[al](l)&&l[ul](this._ids);l[co](this._builder)}else{this._stack.push(this._current);this._current=l}}onEndElement(e){const t=this._current;if(t[Uo]()&&"string"==typeof t[go]){const e=new XFAParser;e._globalData=this._globalData;const a=e.parse(t[go]);t[go]=null;t[al](a)}t[ko]();this._current=this._stack.pop();this._current[al](t)&&t[ul](this._ids);t[co](this._builder)}onError(e){this._errorCode=e}}class XFAFactory{constructor(e){try{this.root=(new XFAParser).parse(XFAFactory._createDocument(e));const t=new Binder(this.root);this.form=t.bind();this.dataHandler=new DataHandler(this.root,t.getData());this.form[Po].template=this.form}catch(e){warn(`XFA - an error occurred during parsing and binding: ${e}`)}}isValid(){return!(!this.root||!this.form)}_createPagesHelper(){const e=this.form[bl]();return new Promise((t,a)=>{const nextIteration=()=>{try{const a=e.next();a.done?t(a.value):setTimeout(nextIteration,0)}catch(e){a(e)}};setTimeout(nextIteration,0)})}async _createPages(){try{this.pages=await this._createPagesHelper();this.dims=this.pages.children.map(e=>{const{width:t,height:a}=e.attributes.style;return[0,0,parseInt(t,10),parseInt(a,10)]})}catch(e){warn(`XFA - an error occurred during layout: ${e}`)}}getBoundingBox(e){return this.dims[e]}async getNumPages(){this.pages||await this._createPages();return this.dims.length}setImages(e){this.form[Po].images=e}setFonts(e){this.form[Po].fontFinder=new FontFinder(e);const t=[];for(let e of this.form[Po].usedTypefaces){e=stripQuotes(e);this.form[Po].fontFinder.find(e)||t.push(e)}return t.length>0?t:null}appendFonts(e,t){this.form[Po].fontFinder.add(e,t)}async getPages(){this.pages||await this._createPages();const e=this.pages;this.pages=null;return e}serializeData(e){return this.dataHandler.serialize(e)}static _createDocument(e){return e.get("/xdp:xdp")?e.values().join(""):e.get("xdp:xdp")}static getRichTextAsHtml(e){if(!e||"string"!=typeof e)return null;try{let t=new XFAParser(XhtmlNamespace,!0).parse(e);if(!["body","xhtml"].includes(t[el])){const e=XhtmlNamespace.body({});e[lo](t);t=e}const a=t[wl]();if(!a.success)return null;const{html:n}=a,{attributes:s}=n;if(s){s.class&&=s.class.filter(e=>!e.startsWith("xfa"));s.dir="auto"}return{html:n,str:t[gl]()}}catch(e){warn(`XFA - an error occurred during parsing of rich text: ${e}`)}return null}}class AnnotationFactory{static createGlobals(e){return Promise.all([e.ensureCatalog("acroForm"),e.ensureDoc("xfaDatasets"),e.ensureCatalog("structTreeRoot"),e.ensureCatalog("baseUrl"),e.ensureCatalog("attachments"),e.ensureCatalog("globalColorSpaceCache")]).then(([t,a,n,s,r,i])=>({pdfManager:e,catalog:e.pdfDocument.catalog,acroForm:t instanceof Dict?t:Dict.empty,xfaDatasets:a,structTreeRoot:n,baseUrl:s,attachments:r,globalColorSpaceCache:i}),e=>{warn(`createGlobals: "${e}".`);return null})}static async create(e,t,a,n,s,r,i,o){const l=s?await this._getPageIndex(e,t,a.pdfManager):null;return a.pdfManager.ensure(this,"_create",[e,t,a,n,s,r,i,l,o])}static _create(e,t,a,n,s=!1,r=null,i=null,o=null,l=null){const f=e.fetchIfRef(t);if(!(f instanceof Dict))return;let c=f.get("Subtype");c=c instanceof Name?c.name:null;if(i&&!i.has(R[c?.toUpperCase()]))return null;const{acroForm:h,pdfManager:u}=a,m=t instanceof Ref?t.toString():`annot_${n.createObjId()}`,p={xref:e,ref:t,dict:f,subtype:c,id:m,annotationGlobals:a,collectFields:s,orphanFields:r,needAppearances:!s&&!0===h.get("NeedAppearances"),pageIndex:o,evaluatorOptions:u.evaluatorOptions,pageRef:l};switch(c){case"Link":return new LinkAnnotation(p);case"Text":return new TextAnnotation(p);case"Widget":let e=getInheritableProperty({dict:f,key:"FT"});e=e instanceof Name?e.name:null;switch(e){case"Tx":return new TextWidgetAnnotation(p);case"Btn":return new ButtonWidgetAnnotation(p);case"Ch":return new ChoiceWidgetAnnotation(p);case"Sig":return new SignatureWidgetAnnotation(p)}warn(`Unimplemented widget field type "${e}", falling back to base field type.`);return new WidgetAnnotation(p);case"Popup":return new PopupAnnotation(p);case"FreeText":return new FreeTextAnnotation(p);case"Line":return new LineAnnotation(p);case"Square":return new SquareAnnotation(p);case"Circle":return new CircleAnnotation(p);case"PolyLine":return new PolylineAnnotation(p);case"Polygon":return new PolygonAnnotation(p);case"Caret":return new CaretAnnotation(p);case"Ink":return new InkAnnotation(p);case"Highlight":return new HighlightAnnotation(p);case"Underline":return new UnderlineAnnotation(p);case"Squiggly":return new SquigglyAnnotation(p);case"StrikeOut":return new StrikeOutAnnotation(p);case"Stamp":return new StampAnnotation(p);case"FileAttachment":return new FileAttachmentAnnotation(p);case"RichMedia":return new RichMediaAnnotation(p);case"Screen":return new ScreenAnnotation(p);case"Sound":return new SoundAnnotation(p);default:s||warn(c?`Unimplemented annotation type "${c}", falling back to base annotation.`:"Annotation is missing the required /Subtype.");return new Annotation(p)}}static async _getPageIndex(e,t,a){try{const n=await e.fetchIfRefAsync(t);if(!(n instanceof Dict))return-1;const s=n.getRaw("P");if(s instanceof Ref)try{return await a.ensureCatalog("getPageIndex",[s])}catch(e){info(`_getPageIndex -- not a valid page reference: "${e}".`)}if(n.has("Kids"))return-1;const r=await a.ensureDoc("numPages");for(let e=0;e<r;e++){const n=await a.getPage(e),s=await a.ensure(n,"annotations");for(const a of s)if(a instanceof Ref&&isRefsEqual(a,t))return e}}catch(e){warn(`_getPageIndex: "${e}".`)}return-1}static generateImages(e,t,a){if(!a){warn("generateImages: OffscreenCanvas is not supported, cannot save or print some annotations with images.");return null}let n;for(const{bitmapId:a,bitmap:s}of e)if(s){n||=new Map;n.set(a,createImage(s,t))}return n}static getPrintData(e){throw new Error("Not implemented: getPrintData")}static async saveNewAnnotations(e,t,a,n,s,r){let i;const o=[],{isOffscreenCanvasSupported:l}=e.options;for(const f of n)if(!f.deleted)switch(f.annotationType){case d:if(!f.appearanceRef&&!i){const e=new Dict(t);e.setIfName("BaseFont","Helvetica");e.setIfName("Type","Font");e.setIfName("Subtype","Type1");e.setIfName("Encoding","WinAnsiEncoding");i=t.getNewTemporaryRef();r.put(i,{data:e})}o.push(FreeTextAnnotation.createNewAnnotation(t,f,r,{evaluator:e,task:a,baseFontRef:i}));break;case g:f.quadPoints?o.push(HighlightAnnotation.createNewAnnotation(t,f,r)):o.push(InkAnnotation.createNewAnnotation(t,f,r));break;case w:o.push(InkAnnotation.createNewAnnotation(t,f,r));break;case b:const n=l?await(s?.get(f.bitmapId)):null;if(n?.imageStream){const{imageStream:e,smaskStream:a}=n;if(a){const n=t.getNewTemporaryRef();r.put(n,{data:a});e.dict.set("SMask",n)}const s=n.imageRef=t.getNewTemporaryRef();r.put(s,{data:e});n.imageStream=null;n.imageRenderStream=null;n.smaskStream=null;n.smaskRenderStream=null}o.push(StampAnnotation.createNewAnnotation(t,f,r,{image:n}));break;case j:o.push(StampAnnotation.createNewAnnotation(t,f,r,{}))}return{annotations:(await Promise.all(o)).flat()}}static async printNewAnnotations(e,t,a,n,s){if(!n)return null;const{options:r,xref:i}=t,o=[];for(const l of n)if(!l.deleted)switch(l.annotationType){case d:o.push(FreeTextAnnotation.createNewPrintAnnotation(e,i,l,{evaluator:t,task:a,evaluatorOptions:r}));break;case g:l.quadPoints?o.push(HighlightAnnotation.createNewPrintAnnotation(e,i,l,{evaluatorOptions:r})):o.push(InkAnnotation.createNewPrintAnnotation(e,i,l,{evaluatorOptions:r}));break;case w:o.push(InkAnnotation.createNewPrintAnnotation(e,i,l,{evaluatorOptions:r}));break;case b:const n=r.isOffscreenCanvasSupported?await(s?.get(l.bitmapId)):null;if(n?.imageStream){const{imageStream:e,imageRenderStream:t,smaskStream:a,smaskRenderStream:s}=n,r=t||new JpegStream(e,e.length);(a||s)&&r.dict.set("SMask",s||a);n.imageRef=r;n.imageStream=null;n.imageRenderStream=null;n.smaskStream=null;n.smaskRenderStream=null}o.push(StampAnnotation.createNewPrintAnnotation(e,i,l,{image:n,evaluatorOptions:r}));break;case j:o.push(StampAnnotation.createNewPrintAnnotation(e,i,l,{evaluatorOptions:r}))}return Promise.all(o)}}function getRgbColor(e,t=new Uint8ClampedArray(3)){if(!Array.isArray(e))return t;const a=t||new Uint8ClampedArray(3);switch(e.length){case 0:return null;case 1:ColorSpaceUtils.gray.getRgbItem(e,0,a,0);return a;case 3:ColorSpaceUtils.rgb.getRgbItem(e,0,a,0);return a;case 4:ColorSpaceUtils.cmyk.getRgbItem(e,0,a,0);return a;default:return t}}function getPdfColorArray(e,t=null){return e&&Array.from(e,e=>e/255)||t}function getQuadPoints(e,t){const a=e.getArray("QuadPoints");if(!isNumberArray(a,null)||0===a.length||a.length%8>0)return null;const n=new Float32Array(a.length);for(let e=0,s=a.length;e<s;e+=8){const[s,r,i,o,l,f,c,h]=a.slice(e,e+8),u=Math.min(s,i,l,c),m=Math.max(s,i,l,c),p=Math.min(r,o,f,h),d=Math.max(r,o,f,h);if(null!==t&&(u<t[0]||m>t[2]||p<t[1]||d>t[3]))return null;n.set([u,d,m,d,u,p,m,p],e)}return n}function getTransformMatrix(e,t,n){const s=a.slice();Util.axialAlignedBoundingBox(t,n,s);const[r,i,o,l]=s;if(r===o||i===l)return[1,0,0,1,e[0],e[1]];const f=(e[2]-e[0])/(o-r),c=(e[3]-e[1])/(l-i);return[f,0,0,c,e[0]-r*f,e[1]-i*c]}function writeLineToCurveToAppearance(e,t,a=!1){t.push(`${numberToString(e[4])} ${numberToString(e[5])} m`);for(let a=6,n=e.length;a<n;a+=6)if(isNaN(e[a]))t.push(`${numberToString(e[a+4])} ${numberToString(e[a+5])} l`);else{const n=e.slice(a,a+6);t.push(`${n.map(numberToString).join(" ")} c`)}a&&6===e.length&&t.push(`${numberToString(e[4])} ${numberToString(e[5])} l`)}class Annotation{appearance=null;_oc=void 0;constructor(e){const{annotationGlobals:t,dict:a,orphanFields:n,ref:s,subtype:r,xref:i}=e,o=n?.get(s);o&&a.set("Parent",o);this.setTitle(a.get("T"));this.setContents(a.get("Contents"));this.setModificationDate(a.get("M"));this.setFlags(a.get("F"));this.setRectangle(a.getArray("Rect"));this.setColor(a.getArray("C"));this.setBorderStyle(a);this.setAppearance(a);this.#Bt(i,a);const l=a.get("MK");this.setBorderAndBackgroundColors(l);this.setRotation(l,a);this.ref=e.ref instanceof Ref?e.ref:null;this._streams=[];this.appearance&&this._streams.push(this.appearance);const f=!!(this.flags&U),c=!!(this.flags&W);this.data={annotationType:R[r?.toUpperCase()],annotationFlags:this.flags,borderStyle:this.borderStyle,color:this.color,backgroundColor:this.backgroundColor,borderColor:this.borderColor,rotation:this.rotation,contentsObj:this._contents,hasAppearance:!!this.appearance,id:e.id,modificationDate:this.modificationDate,oc:this._oc,rect:this.rectangle,subtype:r,hasOwnCanvas:!1,noRotate:!!(this.flags&z),noHTML:f&&c,isEditable:!1,structParent:-1};if(t.structTreeRoot){let n=a.get("StructParent");this.data.structParent=n=Number.isInteger(n)&&n>=0?n:-1;t.structTreeRoot.addAnnotationIdToPage(e.pageRef,n,this.ref)}if(e.collectFields){const t=a.get("Kids");if(Array.isArray(t)){const e=[];for(const a of t)a instanceof Ref&&e.push(a.toString());0!==e.length&&(this.data.kidIds=e)}this.data.actions=collectActions(i,a,oe);this.data.fieldName=this._constructFieldName(a);this.data.pageIndex=e.pageIndex}const h=a.get("IT");h instanceof Name&&(this.data.it=h.name);this._isOffscreenCanvasSupported=e.evaluatorOptions.isOffscreenCanvasSupported;this._fallbackFontDict=null;this._needAppearances=!1}_getOperatorListNoAppearance(){return{opList:new OperatorList,separateForm:!1,separateCanvas:!1}}_hasFlag(e,t){return!!(e&t)}_buildFlags(e,t){let{flags:a}=this;if(void 0===e){if(void 0===t)return;return t?a&~_:a&~E|_}if(e){a|=_;return t?a&~L|E:a&~E|L}a&=~(E|L);return t?a&~_:a|_}_isViewable(e){return!this._hasFlag(e,N)&&!this._hasFlag(e,L)}_isPrintable(e){return this._hasFlag(e,_)&&!this._hasFlag(e,E)&&!this._hasFlag(e,N)}mustBeViewed(e,t){const a=e?.get(this.data.id)?.noView;return void 0!==a?!a:this.viewable&&!this._hasFlag(this.flags,E)}mustBePrinted(e){const t=e?.get(this.data.id)?.noPrint;return void 0!==t?!t:this.printable}mustBeViewedWhenEditing(e,t=null){return e?!this.data.isEditable:!t?.has(this.data.id)}get viewable(){return null!==this.data.quadPoints&&(0===this.flags||this._isViewable(this.flags))}get printable(){return null!==this.data.quadPoints&&0!==this.flags&&this._isPrintable(this.flags)}_parseStringHelper(e){const t="string"==typeof e?stringToPDFString(e):"";return{str:t,dir:t&&"rtl"===bidi(t).dir?"rtl":"ltr"}}setDefaultAppearance(e){const{dict:t,annotationGlobals:a}=e,n=getInheritableProperty({dict:t,key:"DA"})||a.acroForm.get("DA");this._defaultAppearance="string"==typeof n?n:"";this.data.defaultAppearanceData=parseDefaultAppearance(this._defaultAppearance)}setTitle(e){this._title=this._parseStringHelper(e)}setContents(e){this._contents=this._parseStringHelper(e)}setModificationDate(e){this.modificationDate="string"==typeof e?e:null}setFlags(e){this.flags=Number.isInteger(e)&&e>0?e:0;this.flags&N&&"Annotation"!==this.constructor.name&&(this.flags^=N)}hasFlag(e){return this._hasFlag(this.flags,e)}setRectangle(e){this.rectangle=lookupNormalRect(e,[0,0,0,0])}setColor(e){this.color=getRgbColor(e)}setLineEndings(e){this.lineEndings=["None","None"];if(Array.isArray(e)&&2===e.length)for(let t=0;t<2;t++){const a=e[t];if(a instanceof Name)switch(a.name){case"None":continue;case"Square":case"Circle":case"Diamond":case"OpenArrow":case"ClosedArrow":case"Butt":case"ROpenArrow":case"RClosedArrow":case"Slash":this.lineEndings[t]=a.name;continue}warn(`Ignoring invalid lineEnding: ${a}`)}}setRotation(e,t){this.rotation=0;let a=e instanceof Dict?e.get("R")||0:t.get("Rotate")||0;if(Number.isInteger(a)&&0!==a){a%=360;a<0&&(a+=360);a%90==0&&(this.rotation=a)}}setBorderAndBackgroundColors(e){if(e instanceof Dict){this.borderColor=getRgbColor(e.getArray("BC"),null);this.backgroundColor=getRgbColor(e.getArray("BG"),null)}else this.borderColor=this.backgroundColor=null}setBorderStyle(e){this.borderStyle=new AnnotationBorderStyle;if(e instanceof Dict)if(e.has("BS")){const t=e.get("BS");if(t instanceof Dict){const e=t.get("Type");if(!e||isName(e,"Border")){this.borderStyle.setWidth(t.get("W"),this.rectangle);this.borderStyle.setStyle(t.get("S"));this.borderStyle.setDashArray(t.getArray("D"))}}}else if(e.has("Border")){const t=e.getArray("Border");if(Array.isArray(t))if(t.length>=3){this.borderStyle.setHorizontalCornerRadius(t[0]);this.borderStyle.setVerticalCornerRadius(t[1]);this.borderStyle.setWidth(t[2],this.rectangle);4===t.length&&this.borderStyle.setDashArray(t[3],!0)}else 0===t.length&&this.borderStyle.setWidth(0)}else this.borderStyle.setWidth(0)}setAppearance(e){const t=e.get("AP");if(!(t instanceof Dict))return;const a=t.get("N");if(a instanceof BaseStream){this.appearance=a;return}if(!(a instanceof Dict))return;const n=e.get("AS");if(!(n instanceof Name))return;const s=a.get(n.name);s instanceof BaseStream&&(this.appearance=s)}#Bt(e,t){if(t.has("OC"))try{this._oc=parseMarkedContentProps(e,t.get("OC"),null)}catch(e){if(e instanceof MissingDataException)throw e;warn(`#setOptionalContent: ${e}`)}}async loadResources(e,t){const a=await t.dict.getAsync("Resources");a&&await ObjectLoader.load(a,e,a.xref);return a}get _ownCanvasRequiresForms(){return!1}async getOperatorList(e,t,a,n){const{hasOwnCanvas:s,id:r,rect:i}=this.data;let l=this.appearance;const f=!!(s&&a&o&&(!this._ownCanvasRequiresForms||a&c));if(f&&(0===this.width||0===this.height)){this.data.hasOwnCanvas=!1;return this._getOperatorListNoAppearance()}if(!l){if(!f)return this._getOperatorListNoAppearance();l=new StringStream("",new Dict)}const h=l.dict,u=await this.loadResources(ba,l),m=lookupRect(h.getArray("BBox"),[0,0,this.width,this.height]),p=lookupMatrix(h.getArray("Matrix"),ga),d=getTransformMatrix(i,m,p),g=new OperatorList,b=this._oc;void 0!==b&&g.addOp(Ct,["OC",b]);g.addOp(Ht,[r,i,d,p,f]);await e.getOperatorList({stream:l,task:t,resources:u,operatorList:g,fallbackFontDict:this._fallbackFontDict});g.addOp(Mt,[]);void 0!==b&&g.addOp(It,[]);this.reset();return{opList:g,separateForm:!1,separateCanvas:f}}async save(e,t,a,n){return null}get overlaysTextContent(){return!1}get hasTextContent(){return!1}async extractTextContent(e,t,a){if(!this.appearance)return;const n=await this.loadResources(wa,this.appearance),s=[],r=[];let i=1/0,o=1/0,l=null;const f={desiredSize:Math.Infinity,ready:!0,enqueue(e,t){for(const t of e.items)if(void 0!==t.str){i=Math.min(i,t.transform[4]);o=Math.min(o,t.transform[5]);r.push(t.str);if(t.hasEOL){s.push(r.join("").trimEnd());r.length=0}}}};await e.getTextContent({stream:this.appearance,task:t,resources:n,includeMarkedContent:!0,keepWhiteSpace:!0,sink:f,viewBox:a});this.reset();i!==1/0&&(l=[i,o]);r.length&&s.push(r.join("").trimEnd());if(s.length>1||s[0]){const e=this.appearance.dict,t=lookupRect(e.getArray("BBox"),null),a=lookupMatrix(e.getArray("Matrix"),null);this.data.textPosition=this._transformPoint(l,t,a);this.data.textContent=s}}_transformPoint(e,t,a){const{rect:n}=this.data;t||=[0,0,1,1];a||=[1,0,0,1,0,0];const s=getTransformMatrix(n,t,a);s[4]-=n[0];s[5]-=n[1];const r=e.slice();Util.applyTransform(r,s);Util.applyTransform(r,a);return r}getFieldObject(){return this.data.kidIds?{id:this.data.id,actions:this.data.actions,name:this.data.fieldName,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,type:"",kidIds:this.data.kidIds,page:this.data.pageIndex,rotation:this.rotation}:null}reset(){for(const e of this._streams)e.reset()}_constructFieldName(e){if(!e.has("T")&&!e.has("Parent")){warn("Unknown field name, falling back to empty field name.");return""}if(!e.has("Parent"))return stringToPDFString(e.get("T"));const t=[];e.has("T")&&t.unshift(stringToPDFString(e.get("T")));let a=e;const n=new RefSet;e.objId&&n.put(e.objId);for(;a.has("Parent");){a=a.get("Parent");if(!(a instanceof Dict)||a.objId&&n.has(a.objId))break;a.objId&&n.put(a.objId);a.has("T")&&t.unshift(stringToPDFString(a.get("T")))}return t.join(".")}_getAttachmentId(e,t,a,n=!1){if(e instanceof Dict){t instanceof Ref||(t=FileSpec.pickPlatformItem(e.get("EF"),!0));return t instanceof Ref?a.catalog.getAttachmentIdForAnnotation(t,n):void 0}}get width(){return this.data.rect[2]-this.data.rect[0]}get height(){return this.data.rect[3]-this.data.rect[1]}}class AnnotationBorderStyle{width=1;rawWidth=1;style=ae;dashArray=[3];horizontalCornerRadius=0;verticalCornerRadius=0;setWidth(e,t=[0,0,0,0]){if(e instanceof Name)this.width=0;else if("number"==typeof e){if(e>0){this.rawWidth=e;const a=(t[2]-t[0])/2,n=(t[3]-t[1])/2;if(a>0&&n>0&&(e>a||e>n)){warn(`AnnotationBorderStyle.setWidth - ignoring width: ${e}`);e=1}}this.width=e}}setStyle(e){if(e instanceof Name)switch(e.name){case"S":this.style=ae;break;case"D":this.style=ne;break;case"B":this.style=se;break;case"I":this.style=re;break;case"U":this.style=ie}}setDashArray(e,t=!1){if(Array.isArray(e)){let a=!0,n=!0;for(const t of e){if(!(+t>=0)){a=!1;break}t>0&&(n=!1)}if(0===e.length||a&&!n){this.dashArray=e;t&&this.setStyle(Name.get("D"))}else this.width=0}else e&&(this.width=0)}setHorizontalCornerRadius(e){Number.isInteger(e)&&(this.horizontalCornerRadius=e)}setVerticalCornerRadius(e){Number.isInteger(e)&&(this.verticalCornerRadius=e)}}class MarkupAnnotation extends Annotation{constructor(e){super(e);const{dict:t}=e;if(t.has("IRT")){const e=t.getRaw("IRT");this.data.inReplyTo=e instanceof Ref?e.toString():null;const a=t.get("RT");this.data.replyType=a instanceof Name?a.name:D}let a=null;if(this.data.replyType===O){const e=t.get("IRT");this.setTitle(e.get("T"));this.data.titleObj=this._title;this.setContents(e.get("Contents"));this.data.contentsObj=this._contents;if(e.has("CreationDate")){this.setCreationDate(e.get("CreationDate"));this.data.creationDate=this.creationDate}else this.data.creationDate=null;if(e.has("M")){this.setModificationDate(e.get("M"));this.data.modificationDate=this.modificationDate}else this.data.modificationDate=null;a=e.getRaw("Popup");if(e.has("C")){this.setColor(e.getArray("C"));this.data.color=this.color}else this.data.color=null}else{this.data.titleObj=this._title;this.setCreationDate(t.get("CreationDate"));this.data.creationDate=this.creationDate;a=t.getRaw("Popup");t.has("C")||(this.data.color=null)}this.data.popupRef=a instanceof Ref?a.toString():null;t.has("RC")&&(this.data.richText=XFAFactory.getRichTextAsHtml(t.get("RC")))}setCreationDate(e){this.creationDate="string"==typeof e?e:null}_setDefaultAppearance({xref:e,extra:a,strokeColor:n,fillColor:s,blendMode:r,strokeAlpha:i,fillAlpha:o,pointsCallback:l}){const f=this.data.rect=t.slice(),c=["q"];a&&c.push(a);n&&c.push(`${n[0]} ${n[1]} ${n[2]} RG`);s&&c.push(`${s[0]} ${s[1]} ${s[2]} rg`);const h=this.data.quadPoints||Float32Array.from([this.rectangle[0],this.rectangle[3],this.rectangle[2],this.rectangle[3],this.rectangle[0],this.rectangle[1],this.rectangle[2],this.rectangle[1]]);for(let e=0,t=h.length;e<t;e+=8){const t=l(c,h.subarray(e,e+8));Util.rectBoundingBox(...t,f)}c.push("Q");const u=new Dict(e),m=new Dict(e);m.setIfName("Subtype","Form");const p=new StringStream(c.join(" "),m);u.set("Fm0",p);const d=new Dict(e);r&&d.setIfName("BM",r);d.setIfNumber("CA",i);d.setIfNumber("ca",o);const g=new Dict(e);g.set("GS0",d);const b=new Dict(e);b.set("ExtGState",g);b.set("XObject",u);const w=new Dict(e);w.set("Resources",b);w.set("BBox",f);this.appearance=new StringStream("/GS0 gs /Fm0 Do",w);this._streams.push(this.appearance,p)}static async createNewAnnotation(e,t,a,n){const s=t.ref||=e.getNewTemporaryRef(),r=await this.createNewAppearanceStream(t,e,n);let i=t.appearanceRef??null;r&&a.put(i=e.getNewTemporaryRef(),{data:r});const o=this.createNewDict(t,e,{apRef:i});Number.isInteger(t.parentTreeId)&&o.set("StructParent",t.parentTreeId);a.put(s,{data:o});const l={ref:s},{popup:f}=t;if(f){if(f.deleted){o.delete("Popup");o.delete("Contents");o.delete("RC");return l}const t=f.ref||=e.getNewTemporaryRef();f.parent=s;const n=PopupAnnotation.createNewDict(f,e);a.put(t,{data:n});o.setIfDefined("Contents",stringToAsciiOrUTF16BE(f.contents));o.set("Popup",t);return[l,{ref:t}]}return l}static async createNewPrintAnnotation(e,t,a,n){const s=await this.createNewAppearanceStream(a,t,n),r=this.createNewDict(a,t,s?{ap:s}:{}),i=new this.prototype.constructor({dict:r,xref:t,annotationGlobals:e,evaluatorOptions:n.evaluatorOptions});a.ref&&(i.ref=i.refToReplace=a.ref);return i}}class WidgetAnnotation extends Annotation{constructor(e){super(e);const{dict:t,xref:a,annotationGlobals:n}=e,s=this.data;this._needAppearances=e.needAppearances;void 0===s.fieldName&&(s.fieldName=this._constructFieldName(t));void 0===s.actions&&(s.actions=collectActions(a,t,oe));let r=getInheritableProperty({dict:t,key:"V",getArray:!0});s.fieldValue=this._decodeFormValue(r);const i=getInheritableProperty({dict:t,key:"DV",getArray:!0});s.defaultFieldValue=this._decodeFormValue(i);if(void 0===r&&n.xfaDatasets){const e=this._title.str;if(e){this._hasValueFromXFA=!0;s.fieldValue=r=n.xfaDatasets.getValue(e)}}void 0===r&&null!==s.defaultFieldValue&&(s.fieldValue=s.defaultFieldValue);s.alternativeText=stringToPDFString(t.get("TU")||"");this.setDefaultAppearance(e);s.hasAppearance||=this._needAppearances&&void 0!==s.fieldValue&&null!==s.fieldValue;const o=getInheritableProperty({dict:t,key:"FT"});s.fieldType=o instanceof Name?o.name:null;const l=getInheritableProperty({dict:t,key:"DR"}),f=n.acroForm.get("DR"),c=this.appearance?.dict.get("Resources");this._fieldResources={localResources:l,acroFormResources:f,appearanceResources:c,mergedResources:Dict.merge({xref:a,dictArray:[l,c,f],mergeSubDicts:!0})};s.fieldFlags=getInheritableProperty({dict:t,key:"Ff"});(!Number.isInteger(s.fieldFlags)||s.fieldFlags<0)&&(s.fieldFlags=0);s.password=this.hasFieldFlag(V);s.readOnly=this.hasFieldFlag(X);s.required=this.hasFieldFlag(K);s.hidden=this._hasFlag(s.annotationFlags,E)||this._hasFlag(s.annotationFlags,L)}_decodeFormValue(e){if(Array.isArray(e)){const t=e.map(e=>this._decodeFormValue(e)).filter(e=>null!==e);return t.length>0?t:null}return e instanceof Name?e.name:"string"==typeof e?stringToPDFString(e):null}hasFieldFlag(e){return!!(this.data.fieldFlags&e)}_isViewable(e){return!0}mustBeViewed(e,t){return t?this.viewable:super.mustBeViewed(e,t)&&!this._hasFlag(this.flags,L)}getRotationMatrix(e){let t=e?.get(this.data.id)?.rotation;void 0===t&&(t=this.rotation);return 0===t?ga:getRotationMatrix(t,this.width,this.height)}getBorderAndBackgroundAppearances(e){let t=e?.get(this.data.id)?.rotation;void 0===t&&(t=this.rotation);if(!this.backgroundColor&&!this.borderColor)return"";const a=0===t||180===t?`0 0 ${this.width} ${this.height} re`:`0 0 ${this.height} ${this.width} re`;let n="";this.backgroundColor&&(n=`${getPdfColor(this.backgroundColor,!0)} ${a} f `);if(this.borderColor){n+=`${this.borderStyle.width||1} w ${getPdfColor(this.borderColor,!1)} ${a} S `}return n}async getOperatorList(e,t,a,n){if(a&c&&!(this instanceof SignatureWidgetAnnotation)&&!this.data.noHTML&&!this.data.hasOwnCanvas){const e=this._getOperatorListNoAppearance();e.separateForm=!0;return e}if(!this._hasText)return super.getOperatorList(e,t,a,n);const s=!!(this.data.hasOwnCanvas&&a&o);if(s&&(0===this.width||0===this.height)){this.data.hasOwnCanvas=!1;return this._getOperatorListNoAppearance()}const r=await this._getAppearance(e,t,a,n);if(this.appearance&&null===r)return super.getOperatorList(e,t,a,n);const i=new OperatorList;if(!this._defaultAppearance||null===r)return{opList:i,separateForm:!1,separateCanvas:!1};const l=[0,0,this.width,this.height],f=getTransformMatrix(this.data.rect,l,[1,0,0,1,0,0]),h=this._oc;void 0!==h&&i.addOp(Ct,["OC",h]);i.addOp(Ht,[this.data.id,this.data.rect,f,this.getRotationMatrix(n),s]);const u=new StringStream(r);await e.getOperatorList({stream:u,task:t,resources:this._fieldResources.mergedResources,operatorList:i});i.addOp(Mt,[]);void 0!==h&&i.addOp(It,[]);return{opList:i,separateForm:!1,separateCanvas:s}}_getMKDict(e){const t=new Dict(null);e&&t.set("R",e);t.setIfArray("BC",getPdfColorArray(this.borderColor));t.setIfArray("BG",getPdfColorArray(this.backgroundColor));return t.size>0?t:null}amendSavedDict(e,t){}setValue(e,t,a,n){const{dict:s,ref:r}=function getParentToUpdate(e,t,a){const n=new RefSet,s=e,r={dict:null,ref:null};for(;e instanceof Dict&&!n.has(t);){n.put(t);if(e.has("T"))break;if(!((t=e.getRaw("Parent"))instanceof Ref))return r;e=a.fetch(t)}if(e instanceof Dict&&e!==s){r.dict=e;r.ref=t}return r}(e,this.ref,a);if(s){if(!n.has(r)){const e=s.clone();e.set("V",t);n.put(r,{data:e});return e}}else e.set("V",t);return null}async save(e,t,a,n){const s=a?.get(this.data.id),r=this._buildFlags(s?.noView,s?.noPrint);let i=s?.value,o=s?.rotation;if(i===this.data.fieldValue||void 0===i){if(!this._hasValueFromXFA&&void 0===o&&void 0===r)return;i||=this.data.fieldValue}if(void 0===o&&!this._hasValueFromXFA&&Array.isArray(i)&&Array.isArray(this.data.fieldValue)&&isArrayEqual(i,this.data.fieldValue)&&void 0===r)return;void 0===o&&(o=this.rotation);let l=null;if(!this._needAppearances){l=await this._getAppearance(e,t,f,a);if(null===l&&void 0===r)return}let c=!1;if(l?.needAppearances){c=!0;l=null}const{xref:h}=e,u=h.fetchIfRef(this.ref);if(!(u instanceof Dict))return;const m=new Dict(h);for(const[e,t]of u.getRawEntries())"AP"!==e&&m.set(e,t);if(void 0!==r){m.set("F",r);if(null===l&&!c){const e=u.getRaw("AP");e&&m.set("AP",e)}}const p={path:this.data.fieldName,value:i},d=this.setValue(m,Array.isArray(i)?i.map(stringToAsciiOrUTF16BE):stringToAsciiOrUTF16BE(i),h,n);this.amendSavedDict(a,d||m);const g=this._getMKDict(o);g&&m.set("MK",g);n.put(this.ref,{data:m,xfa:p,needAppearances:c});if(null!==l){const e=h.getNewTemporaryRef(),t=new Dict(h);m.set("AP",t);t.set("N",e);const s=this._getSaveFieldResources(h),r=new Dict(h);r.setIfName("Subtype","Form");r.set("Resources",s);const i=o%180==0?[0,0,this.width,this.height]:[0,0,this.height,this.width];r.set("BBox",i);const f=new StringStream(l,r),c=this.getRotationMatrix(a);c!==ga&&r.set("Matrix",c);n.put(e,{data:f,xfa:null,needAppearances:!1})}m.set("M",`D:${getModificationDate()}`)}async _getAppearance(e,t,a,n){if(this.data.password)return null;const r=n?.get(this.data.id);let i,o;if(r){i=r.formattedValue||r.value;o=r.rotation}if(void 0===o&&void 0===i&&!this._needAppearances&&(!this._hasValueFromXFA||this.appearance))return null;const l=this.getBorderAndBackgroundAppearances(n);if(void 0===i){i=this.data.fieldValue;if(!i)return`/Tx BMC q ${l}Q EMC`}Array.isArray(i)&&1===i.length&&(i=i[0]);assert("string"==typeof i,"Expected `value` to be a string.");i=i.trimEnd();if(this.data.combo){const e=this.data.options.find(({exportValue:e})=>i===e);i=e?.displayValue||i}if(""===i)return`/Tx BMC q ${l}Q EMC`;void 0===o&&(o=this.rotation);let c,h=-1;if(this.data.multiLine){c=i.split(/\r\n?|\n/).map(e=>e.normalize("NFC"));h=c.length}else c=[i.replace(/\r\n?|\n/,"").normalize("NFC")];let{width:u,height:m}=this;90!==o&&270!==o||([u,m]=[m,u]);this._defaultAppearance||(this.data.defaultAppearanceData=parseDefaultAppearance(this._defaultAppearance="/Helvetica 0 Tf 0 g"));if(!this.data.defaultAppearanceData.fontSize&&(u<=4||m<=2))return`/Tx BMC q ${l}Q EMC`;let p,d,g,b=await WidgetAnnotation._getFontData(e,t,this.data.defaultAppearanceData,this._fieldResources.mergedResources);const w=[];let j=!1;for(const e of c){const t=b.encodeString(e);t.length>1&&(j=!0);w.push(t.join(""))}if(j&&a&f)return{needAppearances:!0};if(j&&this._isOffscreenCanvasSupported){const a=this.data.comb?"monospace":"sans-serif",n=new FakeUnicodeFont(e.xref,a),s=n.createFontResources(c.join("")),r=s.getRaw("Font");if(this._fieldResources.mergedResources.has("Font")){const e=this._fieldResources.mergedResources.get("Font");for(const[t,a]of r.getRawEntries())e.set(t,a)}else this._fieldResources.mergedResources.set("Font",r);const o=n.fontName.name;b=await WidgetAnnotation._getFontData(e,t,{fontName:o,fontSize:0},s);for(let e=0,t=w.length;e<t;e++)w[e]=stringToUTF16String(c[e]);const l=Object.assign(Object.create(null),this.data.defaultAppearanceData);this.data.defaultAppearanceData.fontSize=0;this.data.defaultAppearanceData.fontName=o;[p,d,g]=this._computeFontSize(m-2,u-4,i,b,h);this.data.defaultAppearanceData=l}else{this._isOffscreenCanvasSupported||warn("_getAppearance: OffscreenCanvas is not supported, annotation may not render correctly.");[p,d,g]=this._computeFontSize(m-2,u-4,i,b,h)}let k=b.descent;k=isNaN(k)?s*g:Math.max(s*g,Math.abs(k)*d);const y=Math.min(Math.floor((m-d)/2),1),q=this.data.textAlignment;let{ascent:v,descent:S}=b;if(isNaN(v)||isNaN(S)||!v&&!S){v=1;S=.35}else S=Math.abs(S);const x=(m-(v+S)*d)/2+S*d;if(this.data.multiLine)return this._getMultilineAppearance(p,w,b,d,u,m,q,2,y,k,g,n);if(this.data.comb)return this._getCombAppearance(p,b,w[0],d,u,x,q,"rtl"===bidi(c[0]).dir,n);const C=x;if(0===q||q>2)return`/Tx BMC q ${l}BT `+p+` 1 0 0 1 ${numberToString(2)} ${numberToString(C)} Tm (${escapeString(w[0])}) Tj ET Q EMC`;return`/Tx BMC q ${l}BT `+p+` 1 0 0 1 0 0 Tm ${this._renderText(w[0],b,d,u,q,{shift:0},2,C)} ET Q EMC`}static async _getFontData(e,t,a,n){const s=new OperatorList,r={font:null,clone(){return this}},{fontName:i,fontSize:o}=a;await e.handleSetFont(n,[i&&Name.get(i),o],null,s,t,r,null);return r.font}_getTextWidth(e,t){return Math.sumPrecise(t.charsToGlyphs(e).map(e=>e.width))/1e3}_computeFontSize(e,t,a,n,s){let{fontSize:r}=this.data.defaultAppearanceData;const i=1.35*(r||12);let o=Math.round(e/i);if(!r){const roundWithTwoDigits=e=>Math.floor(100*e)/100;if(-1===s){const s=this._getTextWidth(a,n);r=roundWithTwoDigits(Math.min(e/1.35,t/s));o=1}else{const i=a.split(/\r\n?|\n/),l=[];for(const e of i){const t=n.encodeString(e).join(""),a=n.charsToGlyphs(t),s=n.getCharPositions(t);l.push({line:t,glyphs:a,positions:s})}const isTooBig=a=>{let s=0;for(const r of l){s+=this._splitLine(null,n,a,t,r).length*a;if(s>e)return!0}return!1};o=Math.max(o,s);const getFontSize=t=>roundWithTwoDigits(e/t/1.35);if(e>0&&isTooBig(getFontSize(o))){let e=o,t=2*o;for(;isTooBig(getFontSize(t));){e=t;t*=2}for(;t-e>1;){const a=Math.floor((e+t)/2);isTooBig(getFontSize(a))?e=a:t=a}o=t}r=getFontSize(o)}const{fontName:i,fontColor:l}=this.data.defaultAppearanceData;this._defaultAppearance=function createDefaultAppearance({fontSize:e,fontName:t,fontColor:a}){return`/${escapePDFName(t)} ${e} Tf ${getPdfColor(a,!0)}`}({fontSize:r,fontName:i,fontColor:l})}return[this._defaultAppearance,r,e/o]}_renderText(e,t,a,n,s,r,i,o){let l;if(1===s){l=(n-this._getTextWidth(e,t)*a)/2}else if(2===s){l=n-this._getTextWidth(e,t)*a-i}else l=i;const f=numberToString(l-r.shift);r.shift=l;return`${f} ${o=numberToString(o)} Td (${escapeString(e)}) Tj`}_getSaveFieldResources(e){const{localResources:t,appearanceResources:a,acroFormResources:n}=this._fieldResources,s=this.data.defaultAppearanceData?.fontName;if(!s)return t||Dict.empty;for(const e of[t,a])if(e instanceof Dict){const t=e.get("Font");if(t instanceof Dict&&t.has(s))return e}if(n instanceof Dict){const a=n.get("Font");if(a instanceof Dict&&a.has(s)){const n=new Dict(e);n.set(s,a.getRaw(s));const r=new Dict(e);r.set("Font",n);return Dict.merge({xref:e,dictArray:[r,t],mergeSubDicts:!0})}}return t||Dict.empty}getFieldObject(){return null}}class TextWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);const{annotationGlobals:t,dict:a}=e;if(a.has("PMD")){this.flags|=E;this.data.hidden=!0;warn("Barcodes are not supported")}this.data.hasOwnCanvas=this.data.readOnly&&!this.data.noHTML;this._hasText=!0;"string"!=typeof this.data.fieldValue&&(this.data.fieldValue="");const getAlignment=e=>Number.isInteger(e)&&e>=0&&e<=2?e:null;this.data.textAlignment=getAlignment(getInheritableProperty({dict:a,key:"Q"}))??getAlignment(t.acroForm.get("Q"))??null;let n=getInheritableProperty({dict:a,key:"MaxLen"});(!Number.isInteger(n)||n<0)&&(n=0);this.data.maxLen=n;this.data.multiLine=this.hasFieldFlag(G);this.data.comb=this.hasFieldFlag(te)&&!this.data.multiLine&&!this.data.password&&!this.hasFieldFlag(Q)&&0!==this.data.maxLen;this.data.doNotScroll=this.hasFieldFlag(ee);const{actions:s}=this.data;if(!s)return;const r=/^AF(Date|Time)_(?:Keystroke|Format)(?:Ex)?\(['"]?([^'"]+)['"]?\);$/;let i=!1;const o=s.get("Format"),l=s.get("Keystroke");(1===o?.length&&1===l?.length&&r.test(o[0])&&r.test(l[0])||0===o?.length&&1===l?.length&&r.test(l[0])||0===l?.length&&1===o?.length&&r.test(o[0]))&&(i=!0);const f=[];o&&f.push(...o);l&&f.push(...l);if(i){s.delete("Keystroke");s.set("Format",f)}for(const e of f){const t=e.match(r);if(!t)continue;const a="Date"===t[1];let n=t[2];const s=parseInt(n,10);isNaN(s)||Math.floor(Math.log10(s))+1!==t[2].length||(n=(a?Wi:Xi)[s]??n);this.data.datetimeFormat=n;if(!i)break;if(a){if(/HH|MM|ss|h/.test(n)){this.data.datetimeType="datetime-local";this.data.timeStep=/ss/.test(n)?1:60}else this.data.datetimeType="date";break}this.data.datetimeType="time";this.data.timeStep=/ss/.test(n)?1:60;break}}get hasTextContent(){return!!this.appearance&&!this._needAppearances}_getCombAppearance(e,t,a,n,s,r,i,o,l){const f=s/this.data.maxLen,c=this.getBorderAndBackgroundAppearances(l),h=t.getCharPositions(a).map(([e,s])=>{const r=a.substring(e,s);return{glyph:r,width:this._getTextWidth(r,t)*n}});o&&h.reverse();const u=f*h.length;let m=0;1===i?m+=Math.floor((s-u)/(2*f))*f:2===i&&(m+=s-u);const p=[];let d=0;for(let e=0,t=h.length;e<t;e++){const{glyph:t,width:a}=h[e],n=0===e?(f-a)/2:f+(d-a)/2;p.push(`${numberToString(n)} 0 Td (${escapeString(t)}) Tj`);d=a}const g=p.join(" ");return`/Tx BMC q ${c}BT `+e+` 1 0 0 1 ${numberToString(m)} ${numberToString(r)} Tm ${g} ET Q EMC`}_getMultilineAppearance(e,t,a,n,s,r,i,o,l,f,c,h){const u=[],m=s-2*o,p={shift:0};for(let e=0,r=t.length;e<r;e++){const r=t[e],h=this._splitLine(r,a,n,m);for(let t=0,r=h.length;t<r;t++){const r=h[t],m=0===e&&0===t?-l-(c-f):-c;u.push(this._renderText(r,a,n,s,i,p,o,m))}}const d=this.getBorderAndBackgroundAppearances(h),g=u.join("\n");return`/Tx BMC q ${d}BT `+e+` 1 0 0 1 0 ${numberToString(r)} Tm ${g} ET Q EMC`}_splitLine(e,t,a,n,s={}){e=s.line||e;const r=s.glyphs||t.charsToGlyphs(e);if(r.length<=1)return[e];const i=s.positions||t.getCharPositions(e),o=a/1e3,l=[];let f=-1,c=-1,h=-1,u=0,m=0;for(let t=0,a=r.length;t<a;t++){const[a,s]=i[t],p=r[t],d=p.width*o;if(" "===p.unicode)if(m+d>n){l.push(e.substring(u,a));u=a;m=d;f=-1;h=-1}else{m+=d;f=a;c=s;h=t}else if(m+d>n)if(-1!==f){l.push(e.substring(u,c));u=c;t=h+1;f=-1;m=0}else{l.push(e.substring(u,a));u=a;m=d}else m+=d}u<e.length&&l.push(e.substring(u));return l}async extractTextContent(e,t,a){await super.extractTextContent(e,t,a);const n=this.data.textContent;if(!n)return;const s=n.join("\n");if(s===this.data.fieldValue)return;const r=s.replaceAll(/([.*+?^${}()|[\]\\])|(\s+)/g,(e,t)=>t?`\\${t}`:"\\s+");new RegExp(`^\\s*${r}\\s*$`).test(this.data.fieldValue)&&(this.data.textContent=this.data.fieldValue.split("\n"))}getFieldObject(){return{id:this.data.id,value:this.data.fieldValue,defaultValue:this.data.defaultFieldValue||"",multiline:this.data.multiLine,password:this.data.password,charLimit:this.data.maxLen,comb:this.data.comb,editable:!this.data.readOnly,hidden:this.data.hidden,name:this.data.fieldName,rect:this.data.rect,actions:this.data.actions,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,datetimeFormat:this.data.datetimeFormat,hasDatetimeHTML:!!this.data.datetimeType,type:"text"}}}class ButtonWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);this.checkedAppearance=null;this.uncheckedAppearance=null;const t=this.hasFieldFlag($),a=this.hasFieldFlag(Y);this.data.checkBox=!t&&!a;this.data.radioButton=t&&!a;this.data.pushButton=a;this.data.isTooltipOnly=!1;this.data.hasOwnCanvas=!0;this.data.noHTML=!1;this.data.checkBox?this._processCheckBox(e):this.data.radioButton?this._processRadioButton(e):this.data.pushButton?this._processPushButton(e):warn("Invalid field flags for button widget annotation")}get _ownCanvasRequiresForms(){return this.data.checkBox||this.data.radioButton}#Dt(e,t,a,n,s,r){if(!r)return this._getOperatorListNoAppearance();const i=this.appearance,o=lookupMatrix(r.dict.getArray("Matrix"),ga);s&&r.dict.set("Matrix",this.getRotationMatrix(n));this.appearance=r;const l=super.getOperatorList(e,t,a,n);this.appearance=i;r.dict.set("Matrix",o);return l}async getOperatorList(e,t,a,n){if(this.data.pushButton)return super.getOperatorList(e,t,a,!1,n);if(a&o&&a&c&&(this.data.checkBox||this.data.radioButton)){const setCanvasName=(e,t)=>{const a=e.fnArray.indexOf(Ht);-1!==a&&e.argsArray[a].push(t)},s=await this.#Dt(e,t,a,n,null,this.checkedAppearance);setCanvasName(s.opList,"checked");const r=await this.#Dt(e,t,a,n,null,this.uncheckedAppearance);setCanvasName(r.opList,"unchecked");s.opList.addOpList(r.opList);s.separateForm||=r.separateForm;s.separateCanvas||=r.separateCanvas;return s}let s=null,r=null;if(n){const e=n.get(this.data.id);s=e?e.value:null;r=e?e.rotation:null}if(null===s&&this.appearance)return super.getOperatorList(e,t,a,n);s??=this.data.checkBox?this.data.fieldValue===this.data.exportValue:this.data.fieldValue===this.data.buttonValue;return this.#Dt(e,t,a,n,r,s?this.checkedAppearance:this.uncheckedAppearance)}async save(e,t,a,n){this.data.checkBox?this._saveCheckbox(e,t,a,n):this.data.radioButton&&this._saveRadioButton(e,t,a,n)}async _saveCheckbox(e,t,a,n){if(!a)return;const s=a.get(this.data.id),r=this._buildFlags(s?.noView,s?.noPrint);let i=s?.rotation,o=s?.value;if(void 0===i&&void 0===r){if(void 0===o)return;if(this.data.fieldValue===this.data.exportValue===o)return}let l=e.xref.fetchIfRef(this.ref);if(!(l instanceof Dict))return;l=l.clone();void 0===i&&(i=this.rotation);void 0===o&&(o=this.data.fieldValue===this.data.exportValue);const f={path:this.data.fieldName,value:o?this.data.exportValue:""},c=Name.get(o?this._onStateName:"Off");this.setValue(l,c,e.xref,n);l.set("AS",c);l.set("M",`D:${getModificationDate()}`);void 0!==r&&l.set("F",r);const h=this._getMKDict(i);h&&l.set("MK",h);n.put(this.ref,{data:l,xfa:f,needAppearances:!1})}async _saveRadioButton(e,t,a,n){if(!a)return;const s=a.get(this.data.id),r=this._buildFlags(s?.noView,s?.noPrint);let i=s?.rotation,o=s?.value;if(void 0===i&&void 0===r){if(void 0===o)return;if(this.data.fieldValue===this.data.buttonValue===o)return}let l=e.xref.fetchIfRef(this.ref);if(!(l instanceof Dict))return;l=l.clone();void 0===o&&(o=this.data.fieldValue===this.data.buttonValue);void 0===i&&(i=this.rotation);const f={path:this.data.fieldName,value:o?this.data.buttonValue:""},c=Name.get(o?this._onStateName:"Off");o&&this.setValue(l,c,e.xref,n);l.set("AS",c);l.set("M",`D:${getModificationDate()}`);void 0!==r&&l.set("F",r);const h=this._getMKDict(i);h&&l.set("MK",h);n.put(this.ref,{data:l,xfa:f,needAppearances:!1})}_getDefaultCheckedAppearance(e,t){const{width:a,height:n}=this,s=[0,0,a,n],r=.8*Math.min(a,n);let i,o;if("check"===t){i={width:.755*r,height:.705*r};o="3"}else if("disc"===t){i={width:.791*r,height:.705*r};o="l"}else unreachable(`_getDefaultCheckedAppearance - unsupported type: ${t}`);const l=`q BT /PdfJsZaDb ${r} Tf 0 g ${numberToString((a-i.width)/2)} ${numberToString((n-i.height)/2)} Td (${o}) Tj ET Q`,f=new Dict(e.xref);f.set("FormType",1);f.setIfName("Subtype","Form");f.setIfName("Type","XObject");f.set("BBox",s);f.set("Matrix",[1,0,0,1,0,0]);f.set("Length",l.length);const c=new Dict(e.xref),h=new Dict(e.xref);h.set("PdfJsZaDb",this.fallbackFontDict);c.set("Font",h);f.set("Resources",c);this.checkedAppearance=new StringStream(l,f);this._streams.push(this.checkedAppearance)}_getOnStateName(e){const t=e.get("AP");if(!(t instanceof Dict))return null;const a=t.get("N");if(!(a instanceof Dict))return null;for(const e of a.getKeys())if("Off"!==e)return e;return null}_getExportValueForOptIndex(e,t,a){if(Number.isInteger(e)&&e>=0&&e<t.length){const n=this._decodeFormValue(a.fetchIfRef(t[e]));if("string"==typeof n)return n}return null}_getOptInfo(e,t,a,n){if(!Array.isArray(a))return null;const s=new Map;let r=null;const i=e.get("Parent"),o=i instanceof Dict?i.get("Kids"):null;if(Array.isArray(o))for(let t=0,i=Math.min(o.length,a.length);t<i;t++){const a=o[t];a instanceof Ref&&isRefsEqual(a,this.ref)&&(r=t);const i=n.fetchIfRef(a);if(!(i instanceof Dict))continue;i===e&&(r=t);const l=this._getOnStateName(i);"string"!=typeof l||s.has(l)||s.set(l,t)}else if(1===a.length&&"string"==typeof t){r=0;s.set(t,0)}return{currentIndex:r,opt:a,stateToIndex:s}}_getExportValue(e,t,a){if(!t||"string"!=typeof e||"Off"===e)return e;if(e===this._onStateName){const e=this._getExportValueForOptIndex(t.currentIndex,t.opt,a);if(null!==e)return e}if(t.stateToIndex.has(e)){const n=this._getExportValueForOptIndex(t.stateToIndex.get(e),t.opt,a);if(null!==n)return n}const n=parseInt(e,10);return Number.isInteger(n)&&String(n)===e&&this._getExportValueForOptIndex(n,t.opt,a)||e}_processCheckBox(e){const t=e.dict.get("AP");let a=t instanceof Dict?t.get("N"):null;a instanceof Dict||(a=null);const n=this._decodeFormValue(e.dict.get("AS"));"string"==typeof n&&(this.data.fieldValue=n);const s=null!==this.data.fieldValue&&"Off"!==this.data.fieldValue?this.data.fieldValue:"Yes",r=a?[...a.getKeys()]:[];if(0===r.length)r.push("Off",s);else if(1===r.length)"Off"===r[0]?r.push(s):r.unshift("Off");else if(r.includes(s)){r.length=0;r.push("Off",s)}else{const e=r.find(e=>"Off"!==e);r.length=0;r.push("Off",e)}const i=r[1];this._onStateName=i;const o=getInheritableProperty({dict:e.dict,key:"Opt"}),l=this._getOptInfo(e.dict,i,o,e.xref);this.data.exportValue=this._getExportValue(i,l,e.xref);r.includes(this.data.fieldValue)||this.data.fieldValue===this.data.exportValue||(this.data.fieldValue="Off");this.data.fieldValue=this._getExportValue(this.data.fieldValue,l,e.xref);this.data.defaultFieldValue=this._getExportValue(this.data.defaultFieldValue,l,e.xref);const f=a?.get(i);this.checkedAppearance=f instanceof BaseStream?f:null;const c=a?.get("Off");this.uncheckedAppearance=c instanceof BaseStream?c:null;this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(e,"check");this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance);this._fallbackFontDict=this.fallbackFontDict;null===this.data.defaultFieldValue&&(this.data.defaultFieldValue="Off")}_processRadioButton(e){this.data.buttonValue=null;const t=e.dict.get("Parent");if(t instanceof Dict){this.parent=e.dict.getRaw("Parent");const a=t.get("V");a instanceof Name&&(this.data.fieldValue=this._decodeFormValue(a))}const a=e.dict.get("AP");if(!(a instanceof Dict))return;const n=a.get("N");if(!(n instanceof Dict))return;let s=null;for(const e of n.getKeys())if("Off"!==e){s=e;break}this._onStateName=s;const r=getInheritableProperty({dict:e.dict,key:"Opt"}),i=this._getOptInfo(e.dict,s,r,e.xref);this.data.buttonValue=this._getExportValue(s,i,e.xref);this.data.fieldValue=this._getExportValue(this.data.fieldValue,i,e.xref);this.data.defaultFieldValue=this._getExportValue(this.data.defaultFieldValue,i,e.xref);const o=n.get(s);this.checkedAppearance=o instanceof BaseStream?o:null;const l=n.get("Off");this.uncheckedAppearance=l instanceof BaseStream?l:null;this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(e,"disc");this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance);this._fallbackFontDict=this.fallbackFontDict;null===this.data.defaultFieldValue&&(this.data.defaultFieldValue="Off")}_processPushButton(e){const{dict:t,annotationGlobals:a}=e;if(t.has("A")||t.has("AA")||this.data.alternativeText){this.data.isTooltipOnly=!t.has("A")&&!t.has("AA");Catalog.parseDestDictionary({destDict:t,resultObj:this.data,docBaseUrl:a.baseUrl,docAttachments:a.attachments})}else warn("Push buttons without action dictionaries are not supported")}getFieldObject(){let e,t="button";if(this.data.checkBox){t="checkbox";e=this.data.exportValue}else if(this.data.radioButton){t="radiobutton";e=this.data.buttonValue}return{id:this.data.id,value:this.data.fieldValue||"Off",defaultValue:this.data.defaultFieldValue,exportValues:e,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,hidden:this.data.hidden,actions:this.data.actions,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:t}}get fallbackFontDict(){const e=new Dict;e.setIfName("BaseFont","ZapfDingbats");e.setIfName("Type","FallbackType");e.setIfName("Subtype","FallbackType");e.setIfName("Encoding","ZapfDingbatsEncoding");return shadow(this,"fallbackFontDict",e)}}class ChoiceWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.indices=t.getArray("I");this.hasIndices=Array.isArray(this.indices)&&this.indices.length>0;this.data.options=[];const n=getInheritableProperty({dict:t,key:"Opt"});if(Array.isArray(n))for(let e=0,t=n.length;e<t;e++){const t=a.fetchIfRef(n[e]),s=Array.isArray(t);this.data.options[e]={exportValue:this._decodeFormValue(s?a.fetchIfRef(t[0]):t),displayValue:this._decodeFormValue(s?a.fetchIfRef(t[1]):t)}}if(this.hasIndices){this.data.fieldValue=[];const e=this.data.options.length;for(const t of this.indices)Number.isInteger(t)&&t>=0&&t<e&&this.data.fieldValue.push(this.data.options[t].exportValue)}else"string"==typeof this.data.fieldValue?this.data.fieldValue=[this.data.fieldValue]:this.data.fieldValue||=[];0===this.data.options.length&&this.data.fieldValue.length>0&&(this.data.options=this.data.fieldValue.map(e=>({exportValue:e,displayValue:e})));this.data.combo=this.hasFieldFlag(J);this.data.multiSelect=this.hasFieldFlag(Z);this._hasText=!0}getFieldObject(){const e=this.data.combo?"combobox":"listbox",t=this.data.fieldValue.length>0?this.data.fieldValue[0]:null;return{id:this.data.id,value:t,defaultValue:this.data.defaultFieldValue,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,numItems:this.data.fieldValue.length,multipleSelection:this.data.multiSelect,hidden:this.data.hidden,actions:this.data.actions,items:this.data.options,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:e}}amendSavedDict(e,t){if(!this.hasIndices)return;let a=e?.get(this.data.id)?.value;Array.isArray(a)||(a=[a]);const n=[],{options:s}=this.data;for(let e=0,t=0,r=s.length;e<r;e++)if(s[e].exportValue===a[t]){n.push(e);t+=1}t.set("I",n)}async _getAppearance(e,t,a,n){if(this.data.combo)return super._getAppearance(e,t,a,n);let s,r;const i=n?.get(this.data.id);if(i){r=i.rotation;s=i.value}if(void 0===r&&void 0===s&&!this._needAppearances)return null;void 0===s?s=this.data.fieldValue:Array.isArray(s)||(s=[s]);let{width:o,height:l}=this;90!==r&&270!==r||([o,l]=[l,o]);const f=this.data.options.length,c=[];for(let e=0;e<f;e++){const{exportValue:t}=this.data.options[e];s.includes(t)&&c.push(e)}this._defaultAppearance||(this.data.defaultAppearanceData=parseDefaultAppearance(this._defaultAppearance="/Helvetica 0 Tf 0 g"));const h=await WidgetAnnotation._getFontData(e,t,this.data.defaultAppearanceData,this._fieldResources.mergedResources);let u,{fontSize:m}=this.data.defaultAppearanceData;if(m)u=this._defaultAppearance;else{const e=(l-1)/f;let t,a=-1;for(const{displayValue:e}of this.data.options){const n=this._getTextWidth(e,h);if(n>a){a=n;t=e}}[u,m]=this._computeFontSize(e,o-4,t,h,-1)}const p=1.35*m,d=(p-m)/2,g=Math.floor(l/p);let b=0;if(c.length>0){const e=Math.min(...c);b=MathClamp(Math.max(...c)-g+1,0,e)}const w=Math.min(b+g+1,f),j=["/Tx BMC q",`1 1 ${o} ${l} re W n`];if(c.length){j.push("0.600006 0.756866 0.854904 rg");for(const e of c)b<=e&&e<w&&j.push(`1 ${l-(e-b+1)*p} ${o} ${p} re f`)}j.push("BT",u,`1 0 0 1 0 ${l} Tm`);const k={shift:0};for(let e=b;e<w;e++){const{displayValue:t}=this.data.options[e],a=e===b?d:0;j.push(this._renderText(t,h,m,o,0,k,2,-p+a))}j.push("ET Q EMC");return j.join("\n")}}class SignatureWidgetAnnotation extends WidgetAnnotation{_hasValueFromXFA=!1;constructor(e){super(e);this.data.fieldValue=null;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!this.data.hasOwnCanvas}getFieldObject(){return{id:this.data.id,value:null,page:this.data.pageIndex,type:"signature"}}}class TextAnnotation extends MarkupAnnotation{constructor(e){super(e);this.data.noRotate=!0;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;const{dict:t}=e;if(this.data.hasAppearance)this.data.name="NoIcon";else{this.data.rect[1]=this.data.rect[3]-22;this.data.rect[2]=this.data.rect[0]+22;this.data.name=t.has("Name")?t.get("Name").name:"Note"}if(t.has("State")){this.data.state=t.get("State")||null;this.data.stateModel=t.get("StateModel")||null}else{this.data.state=null;this.data.stateModel=null}}}class LinkAnnotation extends Annotation{constructor(e){super(e);const{dict:t,annotationGlobals:a}=e;this.data.noHTML=!1;const n=getQuadPoints(t,this.rectangle);n&&(this.data.quadPoints=n);this.data.borderColor||=this.data.color;Catalog.parseDestDictionary({destDict:t,resultObj:this.data,docBaseUrl:a.baseUrl,docAttachments:a.attachments})}get overlaysTextContent(){return!0}}class PopupAnnotation extends Annotation{constructor(e){super(e);const{dict:t}=e;this.data.noHTML=!1;0!==this.width&&0!==this.height||(this.data.rect=null);let a=t.get("Parent");if(!a){warn("Popup annotation has a missing or invalid parent annotation.");return}this.data.parentRect=lookupNormalRect(a.getArray("Rect"),null);this.data.creationDate=a.get("CreationDate")||"";isName(a.get("RT"),O)&&(a=a.get("IRT"));if(a.has("M")){this.setModificationDate(a.get("M"));this.data.modificationDate=this.modificationDate}else this.data.modificationDate=null;if(a.has("C")){this.setColor(a.getArray("C"));this.data.color=this.color}else this.data.color=null;if(!this.viewable){const e=a.get("F");this._isViewable(e)&&this.setFlags(e)}this.setTitle(a.get("T"));this.data.titleObj=this._title;this.setContents(a.get("Contents"));this.data.contentsObj=this._contents;a.has("RC")&&(this.data.richText=XFAFactory.getRichTextAsHtml(a.get("RC")));this.data.open=!!t.get("Open")}static createNewDict(e,t,a){const{oldAnnotation:n,rect:s,parent:r}=e,i=n||new Dict(t);i.setIfNotExists("Type",Name.get("Annot"));i.setIfNotExists("Subtype",Name.get("Popup"));i.setIfNotExists("Open",!1);i.setIfArray("Rect",s);i.set("Parent",r);return i}static async createNewAppearanceStream(e,t,a){return null}}class FreeTextAnnotation extends MarkupAnnotation{constructor(e){super(e);this.data.hasOwnCanvas=this.data.noRotate;this.data.isEditable=!this.data.noHTML;this.data.noHTML=!1;const{annotationGlobals:t,xref:a}=e;this.setDefaultAppearance(e);this._hasAppearance=!!this.appearance;if(this._hasAppearance){const{fontColor:e,fontSize:n}=function parseAppearanceStream(e,t,a){return new AppearanceStreamEvaluator(e,t,a).parse()}(this.appearance,a,t.globalColorSpaceCache);this.data.defaultAppearanceData.fontColor=e;this.data.defaultAppearanceData.fontSize=n||10}else{this.data.defaultAppearanceData.fontSize||=10;const{fontColor:t,fontSize:n}=this.data.defaultAppearanceData;if(this._contents.str){this.data.textContent=this._contents.str.split(/\r\n?|\n/).map(e=>e.trimEnd());const{coords:e,bbox:t,matrix:a}=FakeUnicodeFont.getFirstPositionInfo(this.rectangle,this.rotation,n);this.data.textPosition=this._transformPoint(e,t,a)}if(this._isOffscreenCanvasSupported){const s=e.dict.get("CA"),r=new FakeUnicodeFont(a,"sans-serif");this.appearance=r.createAppearance(this._contents.str,this.rectangle,this.rotation,n,t,s);this._streams.push(this.appearance)}else warn("FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly.")}}get hasTextContent(){return this._hasAppearance}static createNewDict(e,t,{apRef:a,ap:n}){const{color:s,date:r,fontSize:i,oldAnnotation:o,rect:l,rotation:f,user:c,value:h}=e,u=o||new Dict(t);u.setIfNotExists("Type",Name.get("Annot"));u.setIfNotExists("Subtype",Name.get("FreeText"));u.set(o?"M":"CreationDate",`D:${getModificationDate(r)}`);o&&u.delete("RC");u.setIfArray("Rect",l);const m=`/Helv ${i} Tf ${getPdfColor(s,!0)}`;u.set("DA",m);u.setIfDefined("Contents",stringToAsciiOrUTF16BE(h));u.setIfNotExists("F",4);u.setIfNotExists("Border",[0,0,0]);u.setIfNumber("Rotate",f);u.setIfDefined("T",stringToAsciiOrUTF16BE(c));if(a||n){const e=new Dict(t);u.set("AP",e);e.set("N",a||n)}return u}static getPrintData({color:e,fontSize:t,rect:a,rotation:n,value:s}){throw new Error("Not implemented: getPrintData")}static async createNewAppearanceStream(e,t,a){const{baseFontRef:n,evaluator:s,task:r}=a,{color:i,fontSize:o,rect:l,rotation:f,value:c}=e;if(!i)return null;const h=new Dict(t),u=new Dict(t);if(n)u.set("Helv",n);else{const e=new Dict(t);e.setIfName("BaseFont","Helvetica");e.setIfName("Type","Font");e.setIfName("Subtype","Type1");e.setIfName("Encoding","WinAnsiEncoding");u.set("Helv",e)}h.set("Font",u);const m=await WidgetAnnotation._getFontData(s,r,{fontName:"Helv",fontSize:o},h),[p,d,g,b]=l;let w=g-p,j=b-d;f%180!=0&&([w,j]=[j,w]);const k=c.split("\n"),y=o/1e3;let q=-1/0;const v=[];for(let e of k){const t=m.encodeString(e);if(t.length>1)return null;e=t.join("");v.push(e);let a=0;const n=m.charsToGlyphs(e);for(const e of n)a+=e.width*y;q=Math.max(q,a)}const S=q>w?w/q:1;let x=1;const C=1.35*o,F=1*o,T=C*k.length;T>j&&(x=j/T);const R=o*Math.min(S,x);let O,D,H;switch(f){case 0:H=[1,0,0,1];D=[l[0],l[1],w,j];O=[l[0],l[3]-F];break;case 90:H=[0,1,-1,0];D=[l[1],-l[2],w,j];O=[l[1],-l[0]-F];break;case 180:H=[-1,0,0,-1];D=[-l[2],-l[3],w,j];O=[-l[2],-l[1]-F];break;case 270:H=[0,-1,1,0];D=[-l[3],l[0],w,j];O=[-l[3],l[2]-F]}const M=["q",`${H.join(" ")} 0 0 cm`,`${D.join(" ")} re W n`,"BT",`${getPdfColor(i,!0)}`,`0 Tc /Helv ${numberToString(R)} Tf`];M.push(`${O.join(" ")} Td (${escapeString(v[0])}) Tj`);const N=numberToString(C);for(let e=1,t=v.length;e<t;e++){const t=v[e];M.push(`0 -${N} Td (${escapeString(t)}) Tj`)}M.push("ET","Q");const E=M.join("\n"),_=new Dict(t);_.set("FormType",1);_.setIfName("Subtype","Form");_.setIfName("Type","XObject");_.set("BBox",l);_.set("Resources",h);_.set("Matrix",[1,0,0,1,-l[0],-l[1]]);return new StringStream(E,_)}}class LineAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;const n=lookupRect(t.getArray("L"),[0,0,0,0]);this.data.lineCoordinates=Util.normalizeRect(n);this.setLineEndings(t.getArray("LE"));this.data.lineEndings=this.lineEndings;if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),s=t.get("CA"),r=getPdfColorArray(getRgbColor(t.getArray("IC"),null)),i=r?s:null,o=this.borderStyle.width||1,l=2*o,f=[this.data.lineCoordinates[0]-l,this.data.lineCoordinates[1]-l,this.data.lineCoordinates[2]+l,this.data.lineCoordinates[3]+l];Util.intersect(this.rectangle,f)||(this.rectangle=f);this._setDefaultAppearance({xref:a,extra:`${o} w`,strokeColor:e,fillColor:r,strokeAlpha:s,fillAlpha:i,pointsCallback:(e,t)=>{e.push(`${n[0]} ${n[1]} m`,`${n[2]} ${n[3]} l`,"S");return[t[0]-o,t[7]-o,t[2]+o,t[3]+o]}})}}}class SquareAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),n=t.get("CA"),s=getPdfColorArray(getRgbColor(t.getArray("IC"),null)),r=s?n:null;if(0===this.borderStyle.width&&!s)return;this._setDefaultAppearance({xref:a,extra:`${this.borderStyle.width} w`,strokeColor:e,fillColor:s,strokeAlpha:n,fillAlpha:r,pointsCallback:(e,t)=>{const a=t[4]+this.borderStyle.width/2,n=t[5]+this.borderStyle.width/2,r=t[6]-t[4]-this.borderStyle.width,i=t[3]-t[7]-this.borderStyle.width;e.push(`${a} ${n} ${r} ${i} re`);s?e.push("B"):e.push("S");return[t[0],t[7],t[2],t[3]]}})}}}class CircleAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),n=t.get("CA"),s=getPdfColorArray(getRgbColor(t.getArray("IC"),null)),r=s?n:null;if(0===this.borderStyle.width&&!s)return;const i=4/3*Math.tan(Math.PI/8);this._setDefaultAppearance({xref:a,extra:`${this.borderStyle.width} w`,strokeColor:e,fillColor:s,strokeAlpha:n,fillAlpha:r,pointsCallback:(e,t)=>{const a=t[0]+this.borderStyle.width/2,n=t[1]-this.borderStyle.width/2,r=t[6]-this.borderStyle.width/2,o=t[7]+this.borderStyle.width/2,l=a+(r-a)/2,f=n+(o-n)/2,c=(r-a)/2*i,h=(o-n)/2*i;e.push(`${l} ${o} m`,`${l+c} ${o} ${r} ${f+h} ${r} ${f} c`,`${r} ${f-h} ${l+c} ${n} ${l} ${n} c`,`${l-c} ${n} ${a} ${f-h} ${a} ${f} c`,`${a} ${f+h} ${l-c} ${o} ${l} ${o} c`,"h");s?e.push("B"):e.push("S");return[t[0],t[7],t[2],t[3]]}})}}}class PolylineAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:a,xref:n}=e;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;this.data.vertices=null;if(!(this instanceof PolygonAnnotation)){this.setLineEndings(a.getArray("LE"));this.data.lineEndings=this.lineEndings}const s=a.getArray("Vertices");if(!isNumberArray(s,null))return;const r=this.data.vertices=Float32Array.from(s);if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),s=a.get("CA");let i,o=getRgbColor(a.getArray("IC"),null);o&&=getPdfColorArray(o);i=o?this.color?o.every((t,a)=>t===e[a])?"f":"B":"f":"S";const l=this.borderStyle.width||1,f=2*l,c=t.slice();for(let e=0,t=r.length;e<t;e+=2)Util.rectBoundingBox(r[e]-f,r[e+1]-f,r[e]+f,r[e+1]+f,c);Util.intersect(this.rectangle,c)||(this.rectangle=c);this._setDefaultAppearance({xref:n,extra:`${l} w`,strokeColor:e,strokeAlpha:s,fillColor:o,fillAlpha:o?s:null,pointsCallback:(e,t)=>{for(let t=0,a=r.length;t<a;t+=2)e.push(`${r[t]} ${r[t+1]} ${0===t?"m":"l"}`);e.push(i);return[t[0],t[7],t[2],t[3]]}})}}}class PolygonAnnotation extends PolylineAnnotation{}class CaretAnnotation extends MarkupAnnotation{}class InkAnnotation extends MarkupAnnotation{constructor(e){super(e);this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;const{dict:a,xref:n}=e;this.data.inkLists=[];this.data.isEditable=!this.data.noHTML;this.data.noHTML=!1;this.data.opacity=a.get("CA")||1;const s=a.getArray("InkList");if(Array.isArray(s)){for(const e of s){if(!Array.isArray(e))continue;const t=new Float32Array(e.length);this.data.inkLists.push(t);for(let a=0,s=e.length;a<s;a+=2){const s=n.fetchIfRef(e[a]),r=n.fetchIfRef(e[a+1]);if("number"==typeof s&&"number"==typeof r){t[a]=s;t[a+1]=r}}}if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),s=a.get("CA"),r=this.borderStyle.width||1,i=2*r,o=t.slice();for(const e of this.data.inkLists)for(let t=0,a=e.length;t<a;t+=2)Util.rectBoundingBox(e[t]-i,e[t+1]-i,e[t]+i,e[t+1]+i,o);Util.intersect(this.rectangle,o)||(this.rectangle=o);this._setDefaultAppearance({xref:n,extra:`${r} w`,strokeColor:e,strokeAlpha:s,pointsCallback:(e,t)=>{for(const t of this.data.inkLists){for(let a=0,n=t.length;a<n;a+=2)e.push(`${t[a]} ${t[a+1]} ${0===a?"m":"l"}`);e.push("S")}return[t[0],t[7],t[2],t[3]]}})}}}static createNewDict(e,t,{apRef:a,ap:n}){const{oldAnnotation:s,color:r,date:i,opacity:o,paths:l,outlines:f,rect:c,rotation:h,thickness:u,user:m}=e,p=s||new Dict(t);p.setIfNotExists("Type",Name.get("Annot"));p.setIfNotExists("Subtype",Name.get("Ink"));p.set(s?"M":"CreationDate",`D:${getModificationDate(i)}`);p.setIfArray("Rect",c);p.setIfArray("InkList",f?.points||l?.points);p.setIfNotExists("F",4);p.setIfNumber("Rotate",h);p.setIfDefined("T",stringToAsciiOrUTF16BE(m));f&&p.setIfName("IT","InkHighlight");if(u>0){const e=new Dict(t);p.set("BS",e);e.set("W",u)}p.setIfArray("C",getPdfColorArray(r));p.setIfNumber("CA",o);if(n||a){const e=new Dict(t);p.set("AP",e);e.set("N",a||n)}return p}static async createNewAppearanceStream(e,t,a){if(e.outlines)return this.createNewAppearanceStreamForHighlight(e,t,a);const{color:n,rect:s,paths:r,thickness:i,opacity:o}=e;if(!n)return null;const l=[`${i} w 1 J 1 j`,`${getPdfColor(n,!1)}`];1!==o&&l.push("/R0 gs");for(const e of r.lines)writeLineToCurveToAppearance(e,l,!0);l.push("S");const f=l.join("\n"),c=new Dict(t);c.set("FormType",1);c.setIfName("Subtype","Form");c.setIfName("Type","XObject");c.set("BBox",s);c.set("Length",f.length);if(1!==o){const e=new Dict(t),a=new Dict(t),n=new Dict(t);n.set("CA",o);n.setIfName("Type","ExtGState");a.set("R0",n);e.set("ExtGState",a);c.set("Resources",e)}return new StringStream(f,c)}static async createNewAppearanceStreamForHighlight(e,t,a){const{color:n,rect:s,outlines:{outline:r},opacity:i}=e;if(!n)return null;const o=[`${getPdfColor(n,!0)}`,"/R0 gs"];writeLineToCurveToAppearance(r,o);o.push("h f");const l=o.join("\n"),f=new Dict(t);f.set("FormType",1);f.setIfName("Subtype","Form");f.setIfName("Type","XObject");f.set("BBox",s);f.set("Length",l.length);const c=new Dict(t),h=new Dict(t);c.set("ExtGState",h);f.set("Resources",c);const u=new Dict(t);h.set("R0",u);u.setIfName("BM","Multiply");if(1!==i){u.set("ca",i);u.setIfName("Type","ExtGState")}return new StringStream(l,f)}}class HighlightAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.isEditable=!this.data.noHTML;this.data.noHTML=!1;this.data.opacity=t.get("CA")||1;if(this.data.quadPoints=getQuadPoints(t,null)){if(!this.appearance){const e=getPdfColorArray(this.color,[1,1,0]),n=t.get("CA");this._setDefaultAppearance({xref:a,fillColor:e,blendMode:"Multiply",fillAlpha:n,pointsCallback:(e,t)=>{e.push(`${t[0]} ${t[1]} m`,`${t[2]} ${t[3]} l`,`${t[6]} ${t[7]} l`,`${t[4]} ${t[5]} l`,"f");return[t[0],t[7],t[2],t[3]]}})}}else this.data.popupRef=null}get overlaysTextContent(){return!0}static createNewDict(e,t,{apRef:a,ap:n}){const{color:s,date:r,oldAnnotation:i,opacity:o,rect:l,rotation:f,user:c,quadPoints:h}=e,u=i||new Dict(t);u.setIfNotExists("Type",Name.get("Annot"));u.setIfNotExists("Subtype",Name.get("Highlight"));u.set(i?"M":"CreationDate",`D:${getModificationDate(r)}`);u.setIfArray("Rect",l);u.setIfNotExists("F",4);u.setIfNotExists("Border",[0,0,0]);u.setIfNumber("Rotate",f);u.setIfArray("QuadPoints",h);u.setIfArray("C",getPdfColorArray(s));u.setIfNumber("CA",o);u.setIfDefined("T",stringToAsciiOrUTF16BE(c));if(a||n){const e=new Dict(t);u.set("AP",e);e.set("N",a||n)}return u}static async createNewAppearanceStream(e,t,a){const{color:n,rect:s,outlines:r,opacity:i}=e;if(!n)return null;const o=[`${getPdfColor(n,!0)}`,"/R0 gs"],l=[];for(const e of r){l.length=0;l.push(`${numberToString(e[0])} ${numberToString(e[1])} m`);for(let t=2,a=e.length;t<a;t+=2)l.push(`${numberToString(e[t])} ${numberToString(e[t+1])} l`);l.push("h");o.push(l.join("\n"))}o.push("f*");const f=o.join("\n"),c=new Dict(t);c.set("FormType",1);c.setIfName("Subtype","Form");c.setIfName("Type","XObject");c.set("BBox",s);c.set("Length",f.length);const h=new Dict(t),u=new Dict(t);h.set("ExtGState",u);c.set("Resources",h);const m=new Dict(t);u.set("R0",m);m.setIfName("BM","Multiply");if(1!==i){m.set("ca",i);m.setIfName("Type","ExtGState")}return new StringStream(f,c)}}class UnderlineAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;if(this.data.quadPoints=getQuadPoints(t,null)){if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),n=t.get("CA");this._setDefaultAppearance({xref:a,extra:"[] 0 d 0.571 w",strokeColor:e,strokeAlpha:n,pointsCallback:(e,t)=>{e.push(`${t[4]} ${t[5]+1.3} m`,`${t[6]} ${t[7]+1.3} l`,"S");return[t[0],t[7],t[2],t[3]]}})}}else this.data.popupRef=null}get overlaysTextContent(){return!0}}class SquigglyAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;if(this.data.quadPoints=getQuadPoints(t,null)){if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),n=t.get("CA");this._setDefaultAppearance({xref:a,extra:"[] 0 d 1 w",strokeColor:e,strokeAlpha:n,pointsCallback:(e,t)=>{const a=(t[1]-t[5])/6;let n=a,s=t[4];const r=t[5],i=t[6];e.push(`${s} ${r+n} m`);do{s+=2;n=0===n?a:0;e.push(`${s} ${r+n} l`)}while(s<i);e.push("S");return[t[4],r-2*a,i,r+2*a]}})}}else this.data.popupRef=null}get overlaysTextContent(){return!0}}class StrikeOutAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;if(this.data.quadPoints=getQuadPoints(t,null)){if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),n=t.get("CA");this._setDefaultAppearance({xref:a,extra:"[] 0 d 1 w",strokeColor:e,strokeAlpha:n,pointsCallback:(e,t)=>{e.push((t[0]+t[4])/2+" "+(t[1]+t[5])/2+" m",(t[2]+t[6])/2+" "+(t[3]+t[7])/2+" l","S");return[t[0],t[7],t[2],t[3]]}})}}else this.data.popupRef=null}get overlaysTextContent(){return!0}}class StampAnnotation extends MarkupAnnotation{#Ht=null;constructor(e){super(e);this.data.hasOwnCanvas=this.data.noRotate;this.data.isEditable=!this.data.noHTML;this.data.noHTML=!1}mustBeViewedWhenEditing(e,t=null){if(e){if(!this.data.isEditable)return!0;this.#Ht??=this.data.hasOwnCanvas;this.data.hasOwnCanvas=!0;return!0}if(null!==this.#Ht){this.data.hasOwnCanvas=this.#Ht;this.#Ht=null}return!t?.has(this.data.id)}static createNewDict(e,t,{apRef:a,ap:n}){const{date:s,oldAnnotation:r,rect:i,rotation:o,user:l}=e,f=r||new Dict(t);f.setIfNotExists("Type",Name.get("Annot"));f.setIfNotExists("Subtype",Name.get("Stamp"));f.set(r?"M":"CreationDate",`D:${getModificationDate(s)}`);f.setIfArray("Rect",i);f.setIfNotExists("F",4);f.setIfNotExists("Border",[0,0,0]);f.setIfNumber("Rotate",o);f.setIfDefined("T",stringToAsciiOrUTF16BE(l));if(a||n){const e=new Dict(t);f.set("AP",e);e.set("N",a||n)}return f}static async#Mt(e,t){const{areContours:a,color:n,rect:s,lines:r,thickness:i}=e;if(!n)return null;const o=[`${i} w 1 J 1 j`,`${getPdfColor(n,a)}`];for(const e of r)writeLineToCurveToAppearance(e,o,!0);o.push(a?"F":"S");const l=o.join("\n"),f=new Dict(t);f.set("FormType",1);f.setIfName("Subtype","Form");f.setIfName("Type","XObject");f.set("BBox",s);f.set("Length",l.length);return new StringStream(l,f)}static async createNewAppearanceStream(e,t,a){if(e.oldAnnotation)return null;if(e.isSignature)return this.#Mt(e,t);const{rotation:n}=e,{imageRef:s,width:r,height:i}=a.image,o=new Dict(t),l=new Dict(t);o.set("XObject",l);l.set("Im0",s);const f=`q ${r} 0 0 ${i} 0 0 cm /Im0 Do Q`,c=new Dict(t);c.set("FormType",1);c.setIfName("Subtype","Form");c.setIfName("Type","XObject");c.set("BBox",[0,0,r,i]);c.set("Resources",o);if(n){const e=getRotationMatrix(n,r,i);c.set("Matrix",e)}return new StringStream(f,c)}}class FileAttachmentAnnotation extends MarkupAnnotation{constructor(e){super(e);const{annotationGlobals:t,dict:a}=e,n=a.get("FS");this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;this.data.fileId=this._getAttachmentId(n,a.getRaw("FS"),t);this.data.file=new FileSpec(n).serializable;const s=a.get("Name");this.data.name=s instanceof Name?stringToPDFString(s.name):"PushPin";const r=a.get("ca");this.data.fillAlpha="number"==typeof r&&r>=0&&r<=1?r:null}}class MediaAnnotation extends Annotation{static#Nt=/^(?:video|audio)\/[a-z0-9][\w!#$&^.+-]{0,126}$/i;static#Pt=/^(?:video|audio)\/[a-z0-9][\w!#$&^.+-]{0,126}(?: *; *[a-z0-9][\w!#$&^.+-]{0,126} *= *(?:[-!#$%&'*+.^\x60{|}~\w]+|"(?:[\x20\x21\x23-\x5b\x5d-\x7e]|\\[\x20-\x7e])*"))* *$/i;constructor(e){super(e);this.data.noHTML=!0}_setMediaData({assetRef:e,assetDict:t,filename:a,contentType:n,wrapSound:s=!1},r){this.data.noHTML=!1;this.data.richMedia={fileId:this._getAttachmentId(t,e,r,s),filename:a,contentType:n}}static _getContentType(e,t,a=null,n=!1){if("string"==typeof a&&(n?MediaAnnotation.#Nt:MediaAnnotation.#Pt).test(a))return a;const s=FileSpec.pickPlatformItem(e.get("EF")),r=s instanceof BaseStream?s.dict?.get("Subtype"):null;if(r instanceof Name&&MediaAnnotation.#Nt.test(r.name))return r.name;const i=t.lastIndexOf(".")+1;switch(i>0&&t.substring(i).toLowerCase()){case"mp4":case"m4v":return"video/mp4";case"webm":return"video/webm";case"ogv":return"video/ogg";case"mov":return"video/quicktime";case"mp3":return"audio/mpeg";case"m4a":return"audio/mp4";case"wav":return"audio/wav";case"oga":case"ogg":return"audio/ogg";default:return null}}}class RichMediaAnnotation extends MediaAnnotation{constructor(e){super(e);const{dict:t,xref:a,annotationGlobals:n}=e,s=t.get("RichMediaContent");if(!(s instanceof Dict))return;const r=RichMediaAnnotation.#Et(s,a);r?this._setMediaData(r,n):warn("RichMedia annotation has no playable asset.")}static#Et(e,t){const a=e.get("Configurations");if(!Array.isArray(a))return null;for(const e of a){const a=t.fetchIfRef(e);if(!(a instanceof Dict))continue;const n=a.get("Instances");if(Array.isArray(n))for(const e of n){const a=t.fetchIfRef(e);if(!(a instanceof Dict))continue;if(isName(a.get("Subtype"),"Flash"))continue;const n=a.getRaw("Asset"),s=t.fetchIfRef(n);if(!(s instanceof Dict))continue;if(!FileSpec.hasEmbeddedFile(s))continue;const{filename:r}=new FileSpec(s).serializable,i=MediaAnnotation._getContentType(s,r);if(i)return{assetRef:n instanceof Ref?n:null,assetDict:s,filename:r,contentType:i}}}return null}}class ScreenAnnotation extends MediaAnnotation{constructor(e){super(e);const{dict:t,xref:a,annotationGlobals:n}=e,s=ScreenAnnotation.#Et(t,a);s&&this._setMediaData(s,n)}static#Et(e,t){for(const a of this.#_t(e)){const e=this.#zt(a.get("R"),t,new RefSet);if(e)return e}return null}static*#_t(e){const t=e.get("A");this.#Lt(t)&&(yield t);const a=e.get("AA");if(a instanceof Dict)for(const[,e]of a)this.#Lt(e)&&(yield e)}static#Lt(e){if(!(e instanceof Dict&&isName(e.get("S"),"Rendition")))return!1;const t=e.get("OP");return void 0===t||t===H||t===M}static#zt(e,t,a){if(!(e instanceof Dict))return null;const n=e.get("S");if(isName(n,"MR"))return this.#Ut(e.get("C"),t);if(isName(n,"SR")){const n=e.get("R");if(Array.isArray(n))for(const e of n){if(e instanceof Ref){if(a.has(e))continue;a.put(e)}const n=this.#zt(t.fetchIfRef(e),t,a);if(n)return n}}return null}static#Ut(e,t){if(!(e instanceof Dict&&isName(e.get("S"),"MCD")))return null;const a=e.getRaw("D"),n=t.fetchIfRef(a),s=e.get("CT");let r,i,o="string"==typeof s?s:null,l=!1;if(n instanceof BaseStream){r=n.dict;const t=e.get("N");i="string"==typeof t?stringToPDFString(t):"";if(!o){const e=n.dict.get("Subtype");if(e instanceof Name){o=e.name;l=!0}}}else{if(!(n instanceof Dict))return null;if(!FileSpec.hasEmbeddedFile(n))return null;r=n;({filename:i}=new FileSpec(n).serializable)}const f=MediaAnnotation._getContentType(r,i,o,l);return f?{assetRef:a instanceof Ref?a:null,assetDict:r,filename:i,contentType:f}:null}}class SoundAnnotation extends MediaAnnotation{constructor(e){super(e);const{dict:t,xref:a,annotationGlobals:n}=e,s=t.getRaw("Sound");if(!(s instanceof Ref))return;let r;try{r=a.fetch(s)}catch(e){if(e instanceof MissingDataException)throw e;warn(`SoundAnnotation: "${e}".`);return}r instanceof BaseStream&&getSoundFormat(r.dict)&&this._setMediaData({assetRef:s,assetDict:r.dict,filename:"sound.wav",contentType:"audio/wav",wrapSound:!0},n)}}const Af={get r(){return shadow(this,"r",new Uint8Array([7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21]))},get k(){return shadow(this,"k",new Int32Array([-680876936,-389564586,606105819,-1044525330,-176418897,1200080426,-1473231341,-45705983,1770035416,-1958414417,-42063,-1990404162,1804603682,-40341101,-1502002290,1236535329,-165796510,-1069501632,643717713,-373897302,-701558691,38016083,-660478335,-405537848,568446438,-1019803690,-187363961,1163531501,-1444681467,-51403784,1735328473,-1926607734,-378558,-2022574463,1839030562,-35309556,-1530992060,1272893353,-155497632,-1094730640,681279174,-358537222,-722521979,76029189,-640364487,-421815835,530742520,-995338651,-198630844,1126891415,-1416354905,-57434055,1700485571,-1894986606,-1051523,-2054922799,1873313359,-30611744,-1560198380,1309151649,-145523070,-1120210379,718787259,-343485551]))}};function calculateMD5(e,t,a){let n=1732584193,s=-271733879,r=-1732584194,i=271733878;const o=a+72&-64,l=new Uint8Array(o);let f,c;for(f=0;f<a;++f)l[f]=e[t++];l[f++]=128;const h=o-8;f<h&&(f=h);l[f++]=a<<3&255;l[f++]=a>>5&255;l[f++]=a>>13&255;l[f++]=a>>21&255;l[f++]=a>>>29&255;f+=3;const u=new Int32Array(16),{k:m,r:p}=Af;for(f=0;f<o;){for(c=0;c<16;++c,f+=4)u[c]=l[f]|l[f+1]<<8|l[f+2]<<16|l[f+3]<<24;let e,t,a=n,o=s,h=r,d=i;for(c=0;c<64;++c){if(c<16){e=o&h|~o&d;t=c}else if(c<32){e=d&o|~d&h;t=5*c+1&15}else if(c<48){e=o^h^d;t=3*c+5&15}else{e=h^(o|~d);t=7*c&15}const n=d,s=a+e+m[c]+u[t]|0,r=p[c];d=h;h=o;o=o+(s<<r|s>>>32-r)|0;a=n}n=n+a|0;s=s+o|0;r=r+h|0;i=i+d|0}return new Uint8Array([255&n,n>>8&255,n>>16&255,n>>>24&255,255&s,s>>8&255,s>>16&255,s>>>24&255,255&r,r>>8&255,r>>16&255,r>>>24&255,255&i,i>>8&255,i>>16&255,i>>>24&255])}function decodeString(e){try{return stringToUTF8String(e)}catch(t){warn(`UTF-8 decoding failed: "${t}".`);return e}}class DatasetXMLParser extends SimpleXMLParser{node=null;onEndElement(e){const t=super.onEndElement(e);if(t&&"xfa:datasets"===e){this.node=t;throw new Error("Aborting DatasetXMLParser.")}}}class DatasetReader{constructor(e){if(e.datasets)this.node=new SimpleXMLParser({hasAttributes:!0}).parseFromString(e.datasets).documentElement;else{const t=new DatasetXMLParser({hasAttributes:!0});try{t.parseFromString(e["xdp:xdp"])}catch{}this.node=t.node}}getValue(e){if(!this.node||!e)return"";const t=this.node.searchNode(parseXFAPath(e),0);if(!t)return"";const a=t.firstChild;return"value"===a?.nodeName?t.children.map(e=>decodeString(e.textContent)):decodeString(t.textContent)}}class SingleIntersector{#Wt;minX=1/0;minY=1/0;maxX=-1/0;maxY=-1/0;#Xt=null;#Kt=[];#Gt=[];#Vt=-1;#$t=!1;constructor(e){this.#Wt=e;const t=e.data.quadPoints;if(t){for(let e=0,a=t.length;e<a;e+=8){this.minX=Math.min(this.minX,t[e]);this.maxX=Math.max(this.maxX,t[e+2]);this.minY=Math.min(this.minY,t[e+5]);this.maxY=Math.max(this.maxY,t[e+1])}t.length>8&&(this.#Xt=t)}else[this.minX,this.minY,this.maxX,this.maxY]=e.data.rect}#Yt(e,t){if(this.minX>=e||this.maxX<=e||this.minY>=t||this.maxY<=t)return!1;const a=this.#Xt;if(!a)return!0;if(this.#Vt>=0){const n=this.#Vt;if(!(a[n]>=e||a[n+2]<=e||a[n+5]>=t||a[n+1]<=t))return!0;this.#Vt=-1}for(let n=0,s=a.length;n<s;n+=8)if(!(a[n]>=e||a[n+2]<=e||a[n+5]>=t||a[n+1]<=t)){this.#Vt=n;return!0}return!1}addGlyph(e,t,a){if(!this.#Yt(e,t)){this.disableExtraChars();return!1}if(this.#Gt.length>0){this.#Kt.push(this.#Gt.join(""));this.#Gt.length=0}this.#Kt.push(a);this.#$t=!0;return!0}addExtraChar(e){this.#$t&&this.#Gt.push(e)}disableExtraChars(){if(this.#$t){this.#$t=!1;this.#Gt.length=0}}setText(){this.#Wt.data.overlaidText=this.#Kt.join("")}}const xf=64;class Intersector{#Jt=[];#Qt=[];#Zt;#ea;#ta;#aa;#na;#sa;constructor(e){let t=1/0,a=1/0,n=-1/0,s=-1/0;const r=this.#Jt;for(const i of e){if(!i.data.quadPoints&&!i.data.rect)continue;const e=new SingleIntersector(i);r.push(e);t=Math.min(t,e.minX);a=Math.min(a,e.minY);n=Math.max(n,e.maxX);s=Math.max(s,e.maxY)}this.#Zt=t;this.#ta=a;this.#ea=n;this.#aa=s;this.#na=63/(n-t);this.#sa=63/(s-a);for(const e of r){const t=this.#ra(e.minX,e.minY),a=this.#ra(e.maxX,e.maxY),n=(a-t)%xf,s=Math.floor((a-t)/xf);for(let a=t;a<=t+s*xf;a+=xf)for(let t=0;t<=n;t++)(this.#Qt[a+t]??=[]).push(e)}}#ra(e,t){return Math.floor((e-this.#Zt)*this.#na)+Math.floor((t-this.#ta)*this.#sa)*xf}addGlyph(e,t,a,n){const s=e[4]+t/2,r=e[5]+a/2;if(s<this.#Zt||r<this.#ta||s>this.#ea||r>this.#aa)return;const i=this.#Qt[this.#ra(s,r)];if(i)for(const e of i)e.addGlyph(s,r,n)}addExtraChar(e){for(const t of this.#Jt)t.addExtraChar(e)}setText(){for(const e of this.#Jt)e.setText()}}class Word64{constructor(e,t){this.high=0|e;this.low=0|t}and(e){this.high&=e.high;this.low&=e.low}xor(e){this.high^=e.high;this.low^=e.low}shiftRight(e){this.low=this.low>>>e|this.high<<32-e;this.high=this.high>>>e|0}rotateRight(e){let t,a;if(32&e){a=this.low;t=this.high}else{t=this.low;a=this.high}e&=31;this.low=t>>>e|a<<32-e;this.high=a>>>e|t<<32-e}not(){this.high=~this.high;this.low=~this.low}add(e){const t=(this.low>>>0)+(e.low>>>0);let a=(this.high>>>0)+(e.high>>>0);t>4294967295&&(a+=1);this.low=0|t;this.high=0|a}copyTo(e,t){e[t]=this.high>>>24&255;e[t+1]=this.high>>16&255;e[t+2]=this.high>>8&255;e[t+3]=255&this.high;e[t+4]=this.low>>>24&255;e[t+5]=this.low>>16&255;e[t+6]=this.low>>8&255;e[t+7]=255&this.low}assign(e){this.high=e.high;this.low=e.low}}const Cf={get k(){return shadow(this,"k",[new Word64(1116352408,3609767458),new Word64(1899447441,602891725),new Word64(3049323471,3964484399),new Word64(3921009573,2173295548),new Word64(961987163,4081628472),new Word64(1508970993,3053834265),new Word64(2453635748,2937671579),new Word64(2870763221,3664609560),new Word64(3624381080,2734883394),new Word64(310598401,1164996542),new Word64(607225278,1323610764),new Word64(1426881987,3590304994),new Word64(1925078388,4068182383),new Word64(2162078206,991336113),new Word64(2614888103,633803317),new Word64(3248222580,3479774868),new Word64(3835390401,2666613458),new Word64(4022224774,944711139),new Word64(264347078,2341262773),new Word64(604807628,2007800933),new Word64(770255983,1495990901),new Word64(1249150122,1856431235),new Word64(1555081692,3175218132),new Word64(1996064986,2198950837),new Word64(2554220882,3999719339),new Word64(2821834349,766784016),new Word64(2952996808,2566594879),new Word64(3210313671,3203337956),new Word64(3336571891,1034457026),new Word64(3584528711,2466948901),new Word64(113926993,3758326383),new Word64(338241895,168717936),new Word64(666307205,1188179964),new Word64(773529912,1546045734),new Word64(1294757372,1522805485),new Word64(1396182291,2643833823),new Word64(1695183700,2343527390),new Word64(1986661051,1014477480),new Word64(2177026350,1206759142),new Word64(2456956037,344077627),new Word64(2730485921,1290863460),new Word64(2820302411,3158454273),new Word64(3259730800,3505952657),new Word64(3345764771,106217008),new Word64(3516065817,3606008344),new Word64(3600352804,1432725776),new Word64(4094571909,1467031594),new Word64(275423344,851169720),new Word64(430227734,3100823752),new Word64(506948616,1363258195),new Word64(659060556,3750685593),new Word64(883997877,3785050280),new Word64(958139571,3318307427),new Word64(1322822218,3812723403),new Word64(1537002063,2003034995),new Word64(1747873779,3602036899),new Word64(1955562222,1575990012),new Word64(2024104815,1125592928),new Word64(2227730452,2716904306),new Word64(2361852424,442776044),new Word64(2428436474,593698344),new Word64(2756734187,3733110249),new Word64(3204031479,2999351573),new Word64(3329325298,3815920427),new Word64(3391569614,3928383900),new Word64(3515267271,566280711),new Word64(3940187606,3454069534),new Word64(4118630271,4000239992),new Word64(116418474,1914138554),new Word64(174292421,2731055270),new Word64(289380356,3203993006),new Word64(460393269,320620315),new Word64(685471733,587496836),new Word64(852142971,1086792851),new Word64(1017036298,365543100),new Word64(1126000580,2618297676),new Word64(1288033470,3409855158),new Word64(1501505948,4234509866),new Word64(1607167915,987167468),new Word64(1816402316,1246189591)])}};function ch(e,t,a,n,s){e.assign(t);e.and(a);s.assign(t);s.not();s.and(n);e.xor(s)}function maj(e,t,a,n,s){e.assign(t);e.and(a);s.assign(t);s.and(n);e.xor(s);s.assign(a);s.and(n);e.xor(s)}function sigma(e,t,a){e.assign(t);e.rotateRight(28);a.assign(t);a.rotateRight(34);e.xor(a);a.assign(t);a.rotateRight(39);e.xor(a)}function sigmaPrime(e,t,a){e.assign(t);e.rotateRight(14);a.assign(t);a.rotateRight(18);e.xor(a);a.assign(t);a.rotateRight(41);e.xor(a)}function littleSigma(e,t,a){e.assign(t);e.rotateRight(1);a.assign(t);a.rotateRight(8);e.xor(a);a.assign(t);a.shiftRight(7);e.xor(a)}function littleSigmaPrime(e,t,a){e.assign(t);e.rotateRight(19);a.assign(t);a.rotateRight(61);e.xor(a);a.assign(t);a.shiftRight(6);e.xor(a)}function calculateSHA512(e,t,a,n=!1){let s,r,i,o,l,f,c,h;if(n){s=new Word64(3418070365,3238371032);r=new Word64(1654270250,914150663);i=new Word64(2438529370,812702999);o=new Word64(355462360,4144912697);l=new Word64(1731405415,4290775857);f=new Word64(2394180231,1750603025);c=new Word64(3675008525,1694076839);h=new Word64(1203062813,3204075428)}else{s=new Word64(1779033703,4089235720);r=new Word64(3144134277,2227873595);i=new Word64(1013904242,4271175723);o=new Word64(2773480762,1595750129);l=new Word64(1359893119,2917565137);f=new Word64(2600822924,725511199);c=new Word64(528734635,4215389547);h=new Word64(1541459225,327033209)}const u=128*Math.ceil((a+17)/128),m=new Uint8Array(u);let p,d;for(p=0;p<a;++p)m[p]=e[t++];m[p++]=128;const g=u-16;p<g&&(p=g);p+=11;m[p++]=a>>>29&255;m[p++]=a>>21&255;m[p++]=a>>13&255;m[p++]=a>>5&255;m[p++]=a<<3&255;const b=new Array(80);for(p=0;p<80;p++)b[p]=new Word64(0,0);const{k:w}=Cf;let j=new Word64(0,0),k=new Word64(0,0),y=new Word64(0,0),q=new Word64(0,0),v=new Word64(0,0),S=new Word64(0,0),x=new Word64(0,0),C=new Word64(0,0);const F=new Word64(0,0),T=new Word64(0,0),R=new Word64(0,0),O=new Word64(0,0);let D,H;for(p=0;p<u;){for(d=0;d<16;++d){b[d].high=m[p]<<24|m[p+1]<<16|m[p+2]<<8|m[p+3];b[d].low=m[p+4]<<24|m[p+5]<<16|m[p+6]<<8|m[p+7];p+=8}for(d=16;d<80;++d){D=b[d];littleSigmaPrime(D,b[d-2],O);D.add(b[d-7]);littleSigma(R,b[d-15],O);D.add(R);D.add(b[d-16])}j.assign(s);k.assign(r);y.assign(i);q.assign(o);v.assign(l);S.assign(f);x.assign(c);C.assign(h);for(d=0;d<80;++d){F.assign(C);sigmaPrime(R,v,O);F.add(R);ch(R,v,S,x,O);F.add(R);F.add(w[d]);F.add(b[d]);sigma(T,j,O);maj(R,j,k,y,O);T.add(R);D=C;C=x;x=S;S=v;q.add(F);v=q;q=y;y=k;k=j;D.assign(F);D.add(T);j=D}s.add(j);r.add(k);i.add(y);o.add(q);l.add(v);f.add(S);c.add(x);h.add(C)}if(n){H=new Uint8Array(48);s.copyTo(H,0);r.copyTo(H,8);i.copyTo(H,16);o.copyTo(H,24);l.copyTo(H,32);f.copyTo(H,40)}else{H=new Uint8Array(64);s.copyTo(H,0);r.copyTo(H,8);i.copyTo(H,16);o.copyTo(H,24);l.copyTo(H,32);f.copyTo(H,40);c.copyTo(H,48);h.copyTo(H,56)}return H}function calculateSHA384(e,t,a){return calculateSHA512(e,t,a,!0)}const If={get k(){return shadow(this,"k",[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298])}};function rotr(e,t){return e>>>t|e<<32-t}function calculate_sha256_ch(e,t,a){return e&t^~e&a}function calculate_sha256_maj(e,t,a){return e&t^e&a^t&a}function calculate_sha256_sigma(e){return rotr(e,2)^rotr(e,13)^rotr(e,22)}function calculate_sha256_sigmaPrime(e){return rotr(e,6)^rotr(e,11)^rotr(e,25)}function calculate_sha256_littleSigma(e){return rotr(e,7)^rotr(e,18)^e>>>3}function calculate_sha256_littleSigmaPrime(e){return rotr(e,17)^rotr(e,19)^e>>>10}function calculateSHA256(e,t,a){let n=1779033703,s=3144134277,r=1013904242,i=2773480762,o=1359893119,l=2600822924,f=528734635,c=1541459225;const h=64*Math.ceil((a+9)/64),u=new Uint8Array(h);let m,p;for(m=0;m<a;++m)u[m]=e[t++];u[m++]=128;const d=h-8;m<d&&(m=d);m+=3;u[m++]=a>>>29&255;u[m++]=a>>21&255;u[m++]=a>>13&255;u[m++]=a>>5&255;u[m++]=a<<3&255;const g=new Uint32Array(64),{k:b}=If;for(m=0;m<h;){for(p=0;p<16;++p){g[p]=u[m]<<24|u[m+1]<<16|u[m+2]<<8|u[m+3];m+=4}for(p=16;p<64;++p)g[p]=calculate_sha256_littleSigmaPrime(g[p-2])+g[p-7]+calculate_sha256_littleSigma(g[p-15])+g[p-16]|0;let e,t,a=n,h=s,d=r,w=i,j=o,k=l,y=f,q=c;for(p=0;p<64;++p){e=q+calculate_sha256_sigmaPrime(j)+calculate_sha256_ch(j,k,y)+b[p]+g[p];t=calculate_sha256_sigma(a)+calculate_sha256_maj(a,h,d);q=y;y=k;k=j;j=w+e|0;w=d;d=h;h=a;a=e+t|0}n=n+a|0;s=s+h|0;r=r+d|0;i=i+w|0;o=o+j|0;l=l+k|0;f=f+y|0;c=c+q|0}return new Uint8Array([n>>24&255,n>>16&255,n>>8&255,255&n,s>>24&255,s>>16&255,s>>8&255,255&s,r>>24&255,r>>16&255,r>>8&255,255&r,i>>24&255,i>>16&255,i>>8&255,255&i,o>>24&255,o>>16&255,o>>8&255,255&o,l>>24&255,l>>16&255,l>>8&255,255&l,f>>24&255,f>>16&255,f>>8&255,255&f,c>>24&255,c>>16&255,c>>8&255,255&c])}class DecryptStream extends DecodeStream{#ia=null;constructor(e,t,a){super(t);this.stream=e;this.dict=e.dict;this.decrypt=a}readBlock(){let e=this.#ia??this.stream.getBytes(512);if(!e.length){this.eof=!0;return}this.#ia=this.stream.getBytes(512);const t=this.#ia.length>0;e=(0,this.decrypt)(e,!t);const a=this.bufferLength,n=a+e.length;this.ensureBuffer(n).set(e,a);this.bufferLength=n}getOriginalStream(){return this}}const Ff=new Set([160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8239,8287,12288]),Tf=new Set([173,847,6150,6155,6156,6157,8203,8204,8205,8288,65024,65025,65026,65027,65028,65029,65030,65031,65032,65033,65034,65035,65036,65037,65038,65039,65279]);class ARCFourCipher{a=0;b=0;constructor(e){const t=Uint8Array.from({length:256},(e,t)=>t),a=e.length;for(let n=0,s=0;n<256;++n){const r=t[n];s=s+r+e[n%a]&255;t[n]=t[s];t[s]=r}this.s=t}encryptBlock(e){let t=this.a,a=this.b;const n=this.s,s=e.length,r=new Uint8Array(s);for(let i=0;i<s;++i){t=t+1&255;const s=n[t];a=a+s&255;const o=n[a];n[t]=o;n[a]=s;r[i]=e[i]^n[s+o&255]}this.a=t;this.b=a;return r}decryptBlock(e){return this.encryptBlock(e)}encrypt(e){return this.encryptBlock(e)}}class NullCipher{decryptBlock(e){return e}encrypt(e){return e}}class AESBaseCipher{_s=new Uint8Array([99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]);_inv_s=new Uint8Array([82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125]);_mix=new Uint32Array([0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,3678124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,2640243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,3501741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,4169408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,1615861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,3043140495,2673705150,2438237621,2203032232,2370213795]);_mixCol=Uint8Array.from({length:256},(e,t)=>t<128?t<<1:t<<1^27);constructor(){this.buffer=new Uint8Array(16);this.bufferPosition=0}_expandKey(e){unreachable("Cannot call `_expandKey` on the base class")}_decrypt(e,t){let a,n,s;const r=new Uint8Array(16);r.set(e);for(let e=0,a=this._keySize;e<16;++e,++a)r[e]^=t[a];for(let e=this._cyclesOfRepetition-1;e>=1;--e){a=r[13];r[13]=r[9];r[9]=r[5];r[5]=r[1];r[1]=a;a=r[14];n=r[10];r[14]=r[6];r[10]=r[2];r[6]=a;r[2]=n;a=r[15];n=r[11];s=r[7];r[15]=r[3];r[11]=a;r[7]=n;r[3]=s;for(let e=0;e<16;++e)r[e]=this._inv_s[r[e]];for(let a=0,n=16*e;a<16;++a,++n)r[a]^=t[n];for(let e=0;e<16;e+=4){const t=this._mix[r[e]],n=this._mix[r[e+1]],s=this._mix[r[e+2]],i=this._mix[r[e+3]];a=t^n>>>8^n<<24^s>>>16^s<<16^i>>>24^i<<8;r[e]=a>>>24&255;r[e+1]=a>>16&255;r[e+2]=a>>8&255;r[e+3]=255&a}}a=r[13];r[13]=r[9];r[9]=r[5];r[5]=r[1];r[1]=a;a=r[14];n=r[10];r[14]=r[6];r[10]=r[2];r[6]=a;r[2]=n;a=r[15];n=r[11];s=r[7];r[15]=r[3];r[11]=a;r[7]=n;r[3]=s;for(let e=0;e<16;++e){r[e]=this._inv_s[r[e]];r[e]^=t[e]}return r}_encrypt(e,t){const a=this._s;let n,s,r;const i=new Uint8Array(16);i.set(e);for(let e=0;e<16;++e)i[e]^=t[e];for(let e=1;e<this._cyclesOfRepetition;e++){for(let e=0;e<16;++e)i[e]=a[i[e]];r=i[1];i[1]=i[5];i[5]=i[9];i[9]=i[13];i[13]=r;r=i[2];s=i[6];i[2]=i[10];i[6]=i[14];i[10]=r;i[14]=s;r=i[3];s=i[7];n=i[11];i[3]=i[15];i[7]=r;i[11]=s;i[15]=n;for(let e=0;e<16;e+=4){const t=i[e],a=i[e+1],s=i[e+2],r=i[e+3];n=t^a^s^r;i[e]^=n^this._mixCol[t^a];i[e+1]^=n^this._mixCol[a^s];i[e+2]^=n^this._mixCol[s^r];i[e+3]^=n^this._mixCol[r^t]}for(let a=0,n=16*e;a<16;++a,++n)i[a]^=t[n]}for(let e=0;e<16;++e)i[e]=a[i[e]];r=i[1];i[1]=i[5];i[5]=i[9];i[9]=i[13];i[13]=r;r=i[2];s=i[6];i[2]=i[10];i[6]=i[14];i[10]=r;i[14]=s;r=i[3];s=i[7];n=i[11];i[3]=i[15];i[7]=r;i[11]=s;i[15]=n;for(let e=0,a=this._keySize;e<16;++e,++a)i[e]^=t[a];return i}_decryptBlock2(e,t){const a=e.length;let n=this.buffer,s=this.bufferPosition;const r=[];let i=this.iv;for(let t=0;t<a;++t){n[s]=e[t];++s;if(s<16)continue;const a=this._decrypt(n,this._key);for(let e=0;e<16;++e)a[e]^=i[e];i=n;r.push(a);n=new Uint8Array(16);s=0}this.buffer=n;this.bufferLength=s;this.iv=i;if(0===r.length)return new Uint8Array(0);let o=16*r.length;if(t){const e=r.at(-1);let t=e[15];if(t<=16){for(let a=15,n=16-t;a>=n;--a)if(e[a]!==t){t=0;break}o-=t;r[r.length-1]=e.subarray(0,16-t)}}const l=new Uint8Array(o);for(let e=0,t=0,a=r.length;e<a;++e,t+=16)l.set(r[e],t);return l}decryptBlock(e,t,a=null){const n=e.length,s=this.buffer;let r=this.bufferPosition;if(a)this.iv=a;else{for(let t=0;r<16&&t<n;++t,++r)s[r]=e[t];if(r<16){this.bufferLength=r;return new Uint8Array(0)}this.iv=s;e=e.subarray(16)}this.buffer=new Uint8Array(16);this.bufferLength=0;this.decryptBlock=this._decryptBlock2;return this.decryptBlock(e,t)}encrypt(e,t){const a=e.length;let n=this.buffer,s=this.bufferPosition;const r=[];t||=new Uint8Array(16);for(let i=0;i<a;++i){n[s]=e[i];++s;if(s<16)continue;for(let e=0;e<16;++e)n[e]^=t[e];const a=this._encrypt(n,this._key);t=a;r.push(a);n=new Uint8Array(16);s=0}this.buffer=n;this.bufferLength=s;this.iv=t;if(0===r.length)return new Uint8Array(0);const i=16*r.length,o=new Uint8Array(i);for(let e=0,t=0,a=r.length;e<a;++e,t+=16)o.set(r[e],t);return o}}class AES128Cipher extends AESBaseCipher{_rcon=new Uint8Array([141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141]);constructor(e){super();this._cyclesOfRepetition=10;this._keySize=160;this._key=this._expandKey(e)}_expandKey(e){const t=this._s,a=this._rcon,n=new Uint8Array(176);n.set(e);for(let e=16,s=1;e<176;++s){let r=n[e-3],i=n[e-2],o=n[e-1],l=n[e-4];r=t[r];i=t[i];o=t[o];l=t[l];r^=a[s];for(let t=0;t<4;++t){n[e]=r^=n[e-16];e++;n[e]=i^=n[e-16];e++;n[e]=o^=n[e-16];e++;n[e]=l^=n[e-16];e++}}return n}}class AES256Cipher extends AESBaseCipher{constructor(e){super();this._cyclesOfRepetition=14;this._keySize=224;this._key=this._expandKey(e)}_expandKey(e){const t=this._s,a=new Uint8Array(240);a.set(e);let n,s,r,i,o=1;for(let e=32,l=1;e<240;++l){if(e%32==16){n=t[n];s=t[s];r=t[r];i=t[i]}else if(e%32==0){n=a[e-3];s=a[e-2];r=a[e-1];i=a[e-4];n=t[n];s=t[s];r=t[r];i=t[i];n^=o;(o<<=1)>=256&&(o=255&(27^o))}for(let t=0;t<4;++t){a[e]=n^=a[e-32];e++;a[e]=s^=a[e-32];e++;a[e]=r^=a[e-32];e++;a[e]=i^=a[e-32];e++}}return a}}class PDFBase{_hash(e,t,a){unreachable("Abstract method `_hash` called")}checkOwnerPassword(e,t,a,n){const s=new Uint8Array(e.length+56);s.set(e,0);s.set(t,e.length);s.set(a,e.length+t.length);return isArrayEqual(this._hash(e,s,a),n)}checkUserPassword(e,t,a){const n=new Uint8Array(e.length+8);n.set(e,0);n.set(t,e.length);return isArrayEqual(this._hash(e,n,[]),a)}getOwnerKey(e,t,a,n){const s=new Uint8Array(e.length+56);s.set(e,0);s.set(t,e.length);s.set(a,e.length+t.length);const r=this._hash(e,s,a);return new AES256Cipher(r).decryptBlock(n,!1,new Uint8Array(16))}getUserKey(e,t,a){const n=new Uint8Array(e.length+8);n.set(e,0);n.set(t,e.length);const s=this._hash(e,n,[]);return new AES256Cipher(s).decryptBlock(a,!1,new Uint8Array(16))}}class PDF17 extends PDFBase{_hash(e,t,a){return calculateSHA256(t,0,t.length)}}class PDF20 extends PDFBase{_hash(e,t,a){let n=calculateSHA256(t,0,t.length).subarray(0,32),s=[0],r=0;for(;r<64||s.at(-1)>r-32;){const t=e.length+n.length+a.length,i=new Uint8Array(t);let o=0;i.set(e,o);o+=e.length;i.set(n,o);o+=n.length;i.set(a,o);const l=new Uint8Array(64*t);for(let e=0,a=0;e<64;e++,a+=t)l.set(i,a);s=new AES128Cipher(n.subarray(0,16)).encrypt(l,n.subarray(16,32));const f=Math.sumPrecise(s.slice(0,16))%3;0===f?n=calculateSHA256(s,0,s.length):1===f?n=calculateSHA384(s,0,s.length):2===f&&(n=calculateSHA512(s,0,s.length));r++}return n.subarray(0,32)}}class CipherTransform{#oa=new Map;embeddedFilterName=null;constructor(e,t=null,a=null){this.resolveCipher=e;this.streamFilterName=a;this.stringFilterName=t}#la(e=null){const t=e instanceof Name?e.name:"__default__";return this.#oa.getOrInsertComputed(t,()=>this.resolveCipher(e))}createStream(e,t,a=null){const n=this.embeddedFilterName&&isDict(e.dict,"EmbeddedFile")?this.embeddedFilterName:this.streamFilterName,s=new(this.#la(a||n));return new DecryptStream(e,t,function cipherTransformDecryptStream(e,t){return s.decryptBlock(e,t)})}decryptString(e){const t=new(this.#la(this.stringFilterName));let a=stringToBytes(e);a=t.decryptBlock(a,!0);return bytesToString(a)}encryptString(e){const t=new(this.#la(this.stringFilterName));if(t instanceof AESBaseCipher){const a=16-e.length%16;e+=String.fromCharCode(a).repeat(a);const n=new Uint8Array(16);crypto.getRandomValues(n);let s=stringToBytes(e);s=t.encrypt(s,n);const r=new Uint8Array(16+s.length);r.set(n);r.set(s,16);return bytesToString(r)}let a=stringToBytes(e);a=t.encrypt(a);return bytesToString(a)}}function utf8PasswordToBytes(e){try{e=utf8StringToString(e)}catch{warn("CipherTransformFactory: Unable to convert UTF8 encoded password.")}return stringToBytes(e)}class CipherTransformFactory{#fa;static get _defaultPasswordBytes(){return shadow(this,"_defaultPasswordBytes",new Uint8Array([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]))}#ca(e,t,a,n,s,r,i,o,l,f,c,h){if(t){const e=Math.min(127,t.length);t=t.subarray(0,e)}else t=[];const u=6===e?new PDF20:new PDF17;return u.checkUserPassword(t,o,i)?u.getUserKey(t,l,c):t.length&&u.checkOwnerPassword(t,n,r,a)?u.getOwnerKey(t,s,r,f):null}#ha(e,t,a,n,s,r,i,o){const l=40+a.length+e.length,f=new Uint8Array(l);let c,h,u=0;if(t){h=Math.min(32,t.length);for(;u<h;++u)f[u]=t[u]}c=0;for(;u<32;)f[u++]=CipherTransformFactory._defaultPasswordBytes[c++];f.set(a,u);u+=a.length;f[u++]=255&s;f[u++]=s>>8&255;f[u++]=s>>16&255;f[u++]=s>>>24&255;f.set(e,u);u+=e.length;if(r>=4&&!o){f.fill(255,u,u+4);u+=4}let m=calculateMD5(f,0,u);const p=i>>3;if(r>=3)for(c=0;c<50;++c)m=calculateMD5(m,0,p);const d=m.subarray(0,p);let g,b;if(r>=3){u=0;f.set(CipherTransformFactory._defaultPasswordBytes,u);u+=32;f.set(e,u);u+=e.length;g=new ARCFourCipher(d);b=g.encryptBlock(calculateMD5(f,0,u));h=d.length;const t=new Uint8Array(h);for(c=1;c<=19;++c){for(let e=0;e<h;++e)t[e]=d[e]^c;g=new ARCFourCipher(t);b=g.encryptBlock(b)}}else{g=new ARCFourCipher(d);b=g.encryptBlock(CipherTransformFactory._defaultPasswordBytes)}return b.every((e,t)=>n[t]===e)?d:null}#ua(e,t,a,n){const s=new Uint8Array(32);let r=0;const i=Math.min(32,e.length);for(;r<i;++r)s[r]=e[r];let o=0;for(;r<32;)s[r++]=CipherTransformFactory._defaultPasswordBytes[o++];let l=calculateMD5(s,0,r);const f=n>>3;if(a>=3)for(o=0;o<50;++o)l=calculateMD5(l,0,l.length);let c,h;if(a>=3){h=t;const e=new Uint8Array(f);for(o=19;o>=0;o--){for(let t=0;t<f;++t)e[t]=l[t]^o;c=new ARCFourCipher(e);h=c.encryptBlock(h)}}else{c=new ARCFourCipher(l.subarray(0,f));h=c.encryptBlock(t)}return h}#ma(e,t,a,n=!1){const s=a.length,r=new Uint8Array(s+9);r.set(a);let i=s;r[i++]=255&e;r[i++]=e>>8&255;r[i++]=e>>16&255;r[i++]=255&t;r[i++]=t>>8&255;if(n){r[i++]=115;r[i++]=65;r[i++]=108;r[i++]=84}return calculateMD5(r,0,i).subarray(0,Math.min(s+5,16))}constructor(e,t,a){const n=e.get("Filter");if(!isName(n,"Standard"))throw new FormatError("unknown encryption method");this.filterName=n.name;this.dict=e;this.#fa=t;const s=e.get("V");if(!Number.isInteger(s)||1!==s&&2!==s&&4!==s&&5!==s)throw new FormatError("unsupported encryption algorithm");this.algorithm=s;let r=e.get("Length");if(!r)if(s<=3)r=40;else{const t=e.get("CF"),a=e.get("StmF");if(t instanceof Dict&&a instanceof Name){t.suppressEncryption=!0;const e=t.get(a.name);r=e?.get("Length")||128;r<40&&(r<<=3)}}if(!Number.isInteger(r)||r<40||r%8!=0)throw new FormatError("invalid key length");let i=null,o=Name.get("Identity"),l=Name.get("Identity"),f=o;if(s>=4){i=e.get("CF");i instanceof Dict&&(i.suppressEncryption=!0);o=e.get("StmF")||Name.get("Identity");l=e.get("StrF")||Name.get("Identity");f=e.get("EFF")||o}this.cf=i;this.stmf=o;this.strf=l;this.eff=f;const c=stringToBytes(e.get("O")),h=stringToBytes(e.get("U")),u=c.subarray(0,32),m=h.subarray(0,32),p=e.get("P"),d=e.get("R"),g=(4===s||5===s)&&!1!==e.get("EncryptMetadata");this.encryptMetadata=g;const b=stringToBytes(t);let w,j,k;if(a)if(6===d){const e=function saslPrep(e){let t="";for(const a of e){const e=a.codePointAt(0);Ff.has(e)?t+=" ":Tf.has(e)||(t+=a)}return t.normalize("NFKC")}(a);w=utf8PasswordToBytes(e);e!==a&&(j=utf8PasswordToBytes(a))}else w=5===s?utf8PasswordToBytes(a):stringToBytes(a);if(5!==s)k=this.#ha(b,w,u,m,p,d,r,g);else{const t=c.subarray(32,40),a=c.subarray(40,48),n=h.subarray(0,48),s=h.subarray(32,40),r=h.subarray(40,48),i=stringToBytes(e.get("OE")),o=stringToBytes(e.get("UE")),l=stringToBytes(e.get("Perms"));for(const e of j?[w,j]:[w]){k=this.#ca(d,e,u,t,a,n,m,s,r,i,o,l);if(k)break}}if(!k){if(!a){if(this.algorithm>=4&&isName(this.stmf,"Identity")&&isName(this.strf,"Identity")){const e=this.cf?.get(this.eff.name),t=e?.get("AuthEvent");if(isName(t,"EFOpen")){this.encryptionKey=null;return}}throw new PasswordException("No password given",ea)}const e=this.#ua(w,u,d,r);k=this.#ha(b,e,u,m,p,d,r,g)}if(!k)throw new PasswordException("Incorrect Password",ta);if(4===s&&k.length<16){this.encryptionKey=new Uint8Array(16);this.encryptionKey.set(k)}else this.encryptionKey=k}setPassword(e){const t=new CipherTransformFactory(this.dict,this.#fa,e);this.encryptionKey=t.encryptionKey}createCipherTransform(e,t){if(4===this.algorithm||5===this.algorithm){const a=new CipherTransform(a=>{if(!(a instanceof Name))throw new FormatError("Invalid crypt filter name.");const n=this.cf.get(a.name),s=n?.get("CFM");if(!s||"None"===s.name)return NullCipher;if(!this.encryptionKey)throw new PasswordException("No password given",ea);if(5===this.algorithm||"AESV3"===s.name)return AES256Cipher.bind(null,this.encryptionKey);if("V2"===s.name)return ARCFourCipher.bind(null,this.#ma(e,t,this.encryptionKey,!1));if("AESV2"===s.name)return AES128Cipher.bind(null,this.#ma(e,t,this.encryptionKey,!0));throw new FormatError("Unknown crypto method")},this.strf,this.stmf);a.embeddedFilterName=this.eff;return a}return new CipherTransform(()=>ARCFourCipher.bind(null,this.#ma(e,t,this.encryptionKey,!1)))}}class XRef{#pa=new Map;#da=[];#ga=null;#ba=null;#wa=!1;#ja=new RefSet;#ka=null;#ya=new Set;#qa=!0;#va=new Set;constructor(e,t){this.stream=e;this.pdfManager=t}getNewPersistentRef(e){null===this.#ga&&(this.#ga=this.#da.length||1);const t=this.#ga++;this.#pa.set(t,e);return Ref.get(t,0)}getNewTemporaryRef(){if(null===this.#ba){this.#ba=this.#da.length||1;if(this.#ga){this.#ka=new Map;for(let e=this.#ba;e<this.#ga;e++){this.#ka.set(e,this.#pa.get(e));this.#pa.delete(e)}}}return Ref.get(this.#ba++,0)}resetNewTemporaryRef(){this.#ba=null;if(this.#ka)for(const[e,t]of this.#ka)this.#pa.set(e,t);this.#ka=null}setStartXRef(e){this.startXRefQueue=[e]}parse(e=!1){this.#wa=e;let t,a,n;if(e){warn("Indexing all PDF objects");t=this.indexObjects()}else t=this.readXRef();t.assignXref(this);this.trailer=t;try{a=t.get("Encrypt")}catch(e){if(e instanceof MissingDataException)throw e;warn(`XRef.parse - Invalid "Encrypt" reference: "${e}".`)}if(a instanceof Dict){const e=t.get("ID"),n=e?.length?e[0]:"";a.suppressEncryption=!0;this.encrypt=new CipherTransformFactory(a,n,this.pdfManager.password)}try{n=t.get("Root")}catch(e){if(e instanceof MissingDataException)throw e;warn(`XRef.parse - Invalid "Root" reference: "${e}".`)}if(n instanceof Dict)try{if(n.get("Pages")instanceof Dict){this.root=n;return}}catch(e){if(e instanceof MissingDataException)throw e;warn(`XRef.parse - Invalid "Pages" reference: "${e}".`)}if(!e)throw new XRefParseException;throw new InvalidPDFException("Invalid Root reference.")}processXRefTable(e){this._tableState??={entryNum:0,streamPos:e.lexer.stream.pos,parserBuf1:e.buf1,parserBuf2:e.buf2};if(!isCmd(this.readXRefTable(e),"trailer"))throw new FormatError("Invalid XRef table: could not find trailer dictionary");let t=e.getObj();t instanceof BaseStream&&(t=t.dict);if(!(t instanceof Dict))throw new FormatError("Invalid XRef table: could not parse trailer dictionary");delete this._tableState;return t}readXRefTable(e){const t=e.lexer.stream,a=this._tableState;t.pos=a.streamPos;e.buf1=a.parserBuf1;e.buf2=a.parserBuf2;let n;for(;;){if(!("firstEntryNum"in a)||!("entryCount"in a)){if(isCmd(n=e.getObj(),"trailer"))break;a.firstEntryNum=n;a.entryCount=e.getObj()}let s=a.firstEntryNum;const r=a.entryCount;if(!Number.isInteger(s)||!Number.isInteger(r))throw new FormatError("Invalid XRef table: wrong types in subsection header");for(let n=a.entryNum;n<r;n++){a.streamPos=t.pos;a.entryNum=n;a.parserBuf1=e.buf1;a.parserBuf2=e.buf2;const i={offset:e.getObj(),gen:e.getObj(),free:!1,uncompressed:!1},o=e.getObj();if(o instanceof Cmd)switch(o.cmd){case"f":i.free=!0;break;case"n":i.uncompressed=!0}if(!Number.isInteger(i.offset)||!Number.isInteger(i.gen)||!i.free&&!i.uncompressed)throw new FormatError(`Invalid entry in XRef subsection: ${s}, ${r}`);0===n&&i.free&&1===s&&(s=0);this.#da[s+n]??=i}a.entryNum=0;a.streamPos=t.pos;a.parserBuf1=e.buf1;a.parserBuf2=e.buf2;delete a.firstEntryNum;delete a.entryCount}if(this.#da[0]&&!this.#da[0].free)throw new FormatError("Invalid XRef table: unexpected first object");return n}processXRefStream(e){if(!("streamState"in this)){const{dict:t,pos:a}=e,n=t.get("W"),s=t.get("Index")||[0,t.get("Size")];this.streamState={entryRanges:s,byteWidths:n,entryNum:0,streamPos:a}}this.readXRefStream(e);delete this.streamState;return e.dict}readXRefStream(e){const t=this.streamState;e.pos=t.streamPos;const[a,n,s]=t.byteWidths,r=t.entryRanges;for(;r.length>0;){const[i,o]=r;if(!Number.isInteger(i)||!Number.isInteger(o))throw new FormatError(`Invalid XRef range fields: ${i}, ${o}`);if(![a,n,s].every(e=>Number.isInteger(e)&&e>=0)||a+n+s===0)throw new FormatError(`Invalid XRef entry fields length: ${i}, ${o}`);for(let r=t.entryNum;r<o;++r){t.entryNum=r;t.streamPos=e.pos;let o=0,l=0,f=0;for(let t=0;t<a;++t){const t=e.getByte();if(-1===t)throw new FormatError("Invalid XRef byteWidths 'type'.");o=o<<8|t}0===a&&(o=1);for(let t=0;t<n;++t){const t=e.getByte();if(-1===t)throw new FormatError("Invalid XRef byteWidths 'offset'.");l=l<<8|t}for(let t=0;t<s;++t){const t=e.getByte();if(-1===t)throw new FormatError("Invalid XRef byteWidths 'generation'.");f=f<<8|t}const c={offset:l,gen:f,free:!1,uncompressed:!1};switch(o){case 0:c.free=!0;break;case 1:c.uncompressed=!0;break;case 2:break;default:throw new FormatError(`Invalid XRef entry type: ${o}`)}this.#da[i+r]??=c}t.entryNum=0;t.streamPos=e.pos;r.splice(0,2)}}indexObjects(){function readToken(e,t){let a="",n=e[t];for(;10!==n&&13!==n&&60!==n&&!(++t>=e.length);){a+=String.fromCharCode(n);n=e[t]}return a}function skipUntil(e,t,a){const n=a.length,s=e.length;let r=0;for(;t<s;){let s=0;for(;s<n&&e[t+s]===a[s];)++s;if(s>=n)break;t++;r++}return r}const e=/\b(endobj|\d+\s+\d+\s+obj|xref|trailer\s*<<)\b/g,t=/\b(startxref|\d+\s+\d+\s+obj)\b/g,a=/^(\d+)\s+(\d+)\s+obj\b/,n=new Uint8Array([116,114,97,105,108,101,114]),s=new Uint8Array([115,116,97,114,116,120,114,101,102]),r=new Uint8Array([47,88,82,101,102]);this.#da.length=0;this.#pa.clear();const i=this.stream;i.pos=0;const o=i.getBytes(),l=bytesToString(o),f=o.length;let c=i.start;const h=[],u=[];for(;c<f;){let m=o[c];if(9===m||10===m||13===m||32===m){++c;continue}if(37===m){do{++c;if(c>=f)break;m=o[c]}while(10!==m&&13!==m);continue}const p=readToken(o,c);let d;if(p.startsWith("xref")&&(4===p.length||/\s/.test(p[4]))){c+=skipUntil(o,c,n);h.push(c);c+=skipUntil(o,c,s)}else if(d=a.exec(p)){const t=0|d[1],a=0|d[2],n=c+p.length;let s,h=!1;if(this.#da[t]){if(this.#da[t].gen===a)try{new Parser({lexer:new Lexer(i.makeSubStream(n))}).getObj();h=!0}catch(e){e instanceof ParserEOFException?warn(`indexObjects -- checking object (${p}): "${e}".`):h=!0}}else h=!0;h&&(this.#da[t]={offset:c-i.start,gen:a,free:!1,uncompressed:!0});e.lastIndex=n;const m=e.exec(l);if(m){s=e.lastIndex+1-c;if("endobj"!==m[1]){warn(`indexObjects: Found "${m[1]}" inside of another "obj", caused by missing "endobj" -- trying to recover.`);s-=m[1].length+1}}else s=f-c;const g=o.subarray(c,c+s),b=skipUntil(g,0,r);if(b<s&&g[b+5]<64){u.push(c-i.start);this.#va.add(c-i.start)}c+=s}else if(p.startsWith("trailer")&&(7===p.length||/\s/.test(p[7]))){h.push(c);const e=c+p.length;let a;t.lastIndex=e;const n=t.exec(l);if(n){a=t.lastIndex+1-c;if("startxref"!==n[1]){warn(`indexObjects: Found "${n[1]}" after "trailer", caused by missing "startxref" -- trying to recover.`);a-=n[1].length+1}}else a=f-c;c+=a}else c+=p.length+1}for(const e of u){this.startXRefQueue.push(e);this.readXRef(!0)}const m=[];let p,d,g=!1;for(const e of h){i.pos=e;const t=new Parser({lexer:new Lexer(i),xref:this,allowStreams:!0,recoveryMode:!0});if(!isCmd(t.getObj(),"trailer"))continue;const a=t.getObj();if(a instanceof Dict){m.push(a);a.has("Encrypt")&&(g=!0)}}for(const e of[...m,"genFallback",...m]){if("genFallback"===e){if(!d)break;this._generationFallback=!0;continue}let t=!1;try{const a=e.get("Root");if(!(a instanceof Dict))continue;const n=a.get("Pages");if(!(n instanceof Dict))continue;const s=n.get("Count");Number.isInteger(s)&&(t=!0)}catch(e){d=e;continue}if(t&&(!g||e.has("Encrypt"))&&e.has("ID"))return e;p=e}if(p)return p;if(this.topDict)return this.topDict;if(!m.length)for(const e in this.#da){const t=this.#da[e];if(!t)continue;const a=Ref.get(parseInt(e,10),t.gen);let n;try{n=this.fetch(a)}catch{continue}n instanceof BaseStream&&(n=n.dict);if(n instanceof Dict&&n.has("Root"))return n}throw new InvalidPDFException("Invalid PDF structure.")}readXRef(e=!1){const t=this.stream,a=new Set;for(;this.startXRefQueue.length;){try{const e=this.startXRefQueue[0];if(a.has(e)){warn("readXRef - skipping XRef table since it was already parsed.");this.startXRefQueue.shift();continue}a.add(e);t.pos=e+t.start;const n=new Parser({lexer:new Lexer(t),xref:this,allowStreams:!0});let s,r=n.getObj();if(isCmd(r,"xref")){s=this.processXRefTable(n);this.topDict||=s;r=s.get("XRefStm");if(Number.isInteger(r)&&!this.#va.has(r)){this.#va.add(r);this.startXRefQueue.push(r)}}else{if(!Number.isInteger(r))throw new FormatError("Invalid XRef stream header");if(!(Number.isInteger(n.getObj())&&isCmd(n.getObj(),"obj")&&(r=n.getObj())instanceof BaseStream))throw new FormatError("Invalid XRef stream");s=this.processXRefStream(r);this.topDict||=s;if(!s)throw new FormatError("Failed to read XRef stream")}this.#ya.add(e);r=s.get("Prev");Number.isInteger(r)?this.startXRefQueue.push(r):r instanceof Ref&&this.startXRefQueue.push(r.num)}catch(e){if(e instanceof MissingDataException)throw e;this.#qa=!1;info("(while reading XRef): "+e)}this.startXRefQueue.shift()}if(this.topDict)return this.topDict;if(!e)throw new XRefParseException}countUpdatesAfter(e){if(this.#wa||!this.#qa)return null;const t=e-this.stream.start;let a=0;for(const e of this.#ya)e>=t&&!this.#va.has(e)&&a++;return a}getEntry(e){const t=this.#da[e];return t&&!t.free&&t.offset?t:null}fetchIfRef(e,t=!1){return e instanceof Ref?this.fetch(e,t):e}fetch(e,t=!1){if(!(e instanceof Ref))throw new Error("ref object is not a reference");const a=e.num,n=this.#pa.get(a);if(void 0!==n){n instanceof Dict&&!n.objId&&(n.objId=e.toString());return n}let s=this.getEntry(a);if(null===s)return s;if(this.#ja.has(e)){this.#ja.remove(e);warn(`Ignoring circular reference: ${e}.`);return ia}this.#ja.put(e);try{s=s.uncompressed?this.fetchUncompressed(e,s,t):this.fetchCompressed(e,s,t);this.#ja.remove(e)}catch(t){this.#ja.remove(e);throw t}s instanceof Dict?s.objId=e.toString():s instanceof BaseStream&&(s.dict.objId=e.toString());return s}fetchUncompressed(e,t,a=!1){const n=e.gen;let s=e.num;if(t.gen!==n){const r=`Inconsistent generation in XRef: ${e}`;if(this._generationFallback&&t.gen<n){warn(r);return this.fetchUncompressed(Ref.get(s,t.gen),t,a)}throw new XRefEntryException(r)}const r=this.stream.makeSubStream(t.offset+this.stream.start),i=new Parser({lexer:new Lexer(r),xref:this,allowStreams:!0}),o=i.getObj(),l=i.getObj(),f=i.getObj();if(o!==s||l!==n||!(f instanceof Cmd))throw new XRefEntryException(`Bad (uncompressed) XRef entry: ${e}`);if("obj"!==f.cmd){if(f.cmd.startsWith("obj")){s=parseInt(f.cmd.substring(3),10);if(!Number.isNaN(s))return s}throw new XRefEntryException(`Bad (uncompressed) XRef entry: ${e}`)}(t=this.encrypt&&!a?i.getObj(this.encrypt.createCipherTransform(s,n)):i.getObj())instanceof BaseStream||this.#pa.set(s,t);return t}fetchCompressed(e,t,a=!1){const n=t.offset,s=this.fetch(Ref.get(n,0));if(!(s instanceof BaseStream))throw new FormatError("bad ObjStm stream");const r=s.dict.get("First"),i=s.dict.get("N");if(!Number.isInteger(r)||!Number.isInteger(i))throw new FormatError("invalid first and n parameters for ObjStm stream");let o=new Parser({lexer:new Lexer(s),xref:this,allowStreams:!0});const l=new Array(i),f=new Array(i);for(let e=0;e<i;++e){const t=o.getObj();if(!Number.isInteger(t))throw new FormatError(`invalid object number in the ObjStm stream: ${t}`);const a=o.getObj();if(!Number.isInteger(a))throw new FormatError(`invalid object offset in the ObjStm stream: ${a}`);l[e]=t;const s=this.getEntry(t);s?.offset===n&&s.gen!==e&&(s.gen=e);f[e]=a}const c=(s.start||0)+r,h=new Array(i);for(let e=0;e<i;++e){const t=e<i-1?f[e+1]-f[e]:void 0;if(t<0)throw new FormatError("Invalid offset in the ObjStm stream.");o=new Parser({lexer:new Lexer(s.makeSubStream(c+f[e],t,s.dict)),xref:this,allowStreams:!0});const a=o.getObj();h[e]=a;if(a instanceof BaseStream)continue;const r=l[e],u=this.#da[r];u&&u.offset===n&&u.gen===e&&this.#pa.set(r,a)}if(void 0===(t=h[t.gen]))throw new XRefEntryException(`Bad (compressed) XRef entry: ${e}`);return t}async fetchIfRefAsync(e,t){return e instanceof Ref?this.fetchAsync(e,t):e}async fetchAsync(e,t){try{return this.fetch(e,t)}catch(a){if(!(a instanceof MissingDataException))throw a;await this.pdfManager.requestRange(a.begin,a.end);return this.fetchAsync(e,t)}}getCatalogObj(){return this.root}}const Rf=[0,0,612,792];class Page{#Sa=null;constructor({pdfManager:e,xref:t,pageIndex:a,pageDict:n,ref:s,globalIdFactory:r,fontCache:i,builtInCMapCache:o,standardFontDataCache:l,globalColorSpaceCache:f,globalImageCache:c,systemFontCache:h,nonBlendModesSet:u,xfaFactory:m}){this.pdfManager=e;this.pageIndex=a;this.pageDict=n;this.xref=t;this.ref=s;this.fontCache=i;this.builtInCMapCache=o;this.standardFontDataCache=l;this.globalColorSpaceCache=f;this.globalImageCache=c;this.systemFontCache=h;this.nonBlendModesSet=u;this.evaluatorOptions=e.evaluatorOptions;this.xfaFactory=m;const p={obj:0};this._localIdFactory=class extends r{static createObjId(){return`p${a}_${++p.obj}`}static getPageObjId(){return`p${s.toString()}`}}}_createPartialEvaluator(e,t=this.pageIndex,a=null){return new PartialEvaluator({xref:this.xref,handler:e,pageIndex:t,pageProxyId:a,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalColorSpaceCache:this.globalColorSpaceCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions})}#Aa(e,t=!1){const a=getInheritableProperty({dict:this.pageDict,key:e,getArray:t,stopWhenFound:!1});return Array.isArray(a)?1!==a.length&&a[0]instanceof Dict?Dict.merge({xref:this.xref,dictArray:a}):a[0]:a}get content(){return this.pageDict.getArray("Contents")}get resources(){const e=this.#Aa("Resources");return shadow(this,"resources",e instanceof Dict?e:Dict.empty)}getBoundingBox(e){if(this.xfaData)return this.xfaData.bbox;const t=lookupNormalRect(this.#Aa(e,!0),null);if(t){if(t[2]-t[0]>0&&t[3]-t[1]>0)return t;warn(`Empty, or invalid, /${e} entry.`)}return null}get mediaBox(){return shadow(this,"mediaBox",this.getBoundingBox("MediaBox")||Rf)}get cropBox(){return shadow(this,"cropBox",this.getBoundingBox("CropBox")||this.mediaBox)}get userUnit(){const e=this.pageDict.get("UserUnit");return shadow(this,"userUnit","number"==typeof e&&e>0?e:1)}get view(){const{cropBox:e,mediaBox:t}=this;if(e!==t&&!isArrayEqual(e,t)){const a=Util.intersect(e,t);if(a&&a[2]-a[0]>0&&a[3]-a[1]>0)return shadow(this,"view",a);warn("Empty /CropBox and /MediaBox intersection.")}return shadow(this,"view",t)}get rotate(){let e=this.#Aa("Rotate")||0;e%90!=0?e=0:e>=360?e%=360:e<0&&(e=(e%360+360)%360);return shadow(this,"rotate",e)}#xa(e,t){if(!this.evaluatorOptions.ignoreErrors)throw e;warn(`getContentStream - ignoring sub-stream (${t}): "${e}".`)}async getContentStream(){const e=await this.pdfManager.ensure(this,"content");if(e instanceof BaseStream&&!e.isImageStream){if(e.isAsync){const t=await e.asyncGetBytes();if(t)return new Stream(t,0,t.length,e.dict)}return e}if(Array.isArray(e)){const t=[];for(let a=0,n=e.length;a<n;a++){const n=e[a];n instanceof BaseStream&&n.isAsync&&t.push(n.asyncGetBytes().then(t=>{t&&(e[a]=new Stream(t,0,t.length,n.dict))}))}t.length>0&&await Promise.all(t);return new StreamsSequenceStream(e,this.#xa.bind(this))}return new NullStream}get xfaData(){return shadow(this,"xfaData",this.xfaFactory?{bbox:this.xfaFactory.getBoundingBox(this.pageIndex)}:null)}async#Ca(e,t,a){const n=[];for(const s of e){if(!s.id)continue;const e=Ref.fromString(s.id);if(e)if(s.deleted){t.put(e);if(s.popupRef){const e=Ref.fromString(s.popupRef);e&&t.put(e)}}else{if(s.popup?.deleted){const e=Ref.fromString(s.popupRef);e&&t.put(e)}a?.put(e);s.ref=e;n.push(this.xref.fetchAsync(e).then(e=>{e instanceof Dict&&(s.oldAnnotation=e.clone())},()=>{warn(`Cannot fetch \`oldAnnotation\` for: ${e}.`)}));delete s.id}else warn(`A non-linked annotation cannot be modified: ${s.id}`)}await Promise.all(n)}async saveNewAnnotations(e,t,a,n,s){if(this.xfaFactory)throw new Error("XFA: Cannot save new annotations.");const r=this._createPartialEvaluator(e),i=new RefSet,o=new RefSet;await this.#Ca(a,i,o);const l=this.pageDict,f=this.annotations.filter(e=>!(e instanceof Ref&&i.has(e))),c=await AnnotationFactory.saveNewAnnotations(r,this.xref,t,a,n,s);for(const{ref:e}of c.annotations)e instanceof Ref&&!o.has(e)&&f.push(e);const h=l.clone();h.set("Annots",f);s.put(this.ref,{data:h});for(const e of i)s.put(e,{data:null})}async save(e,t,a,n){const s=this._createPartialEvaluator(e),r=await this._parsedAnnotations,i=[];for(const e of r)i.push(e.save(s,t,a,n).catch(e=>{warn(`save - ignoring annotation data during "${t.name}" task: "${e}".`);return null}));return Promise.all(i)}async loadResources(e){await(this.#Sa??=this.pdfManager.ensure(this,"resources"));await ObjectLoader.load(this.resources,e,this.xref)}async#Ia(e,t){const a=e?.get("Resources");if(!(a instanceof Dict&&a.size))return this.resources;await ObjectLoader.load(a,t,this.xref);return Dict.merge({xref:this.xref,dictArray:[a,this.resources],mergeSubDicts:!0})}async getOperatorList({handler:e,sink:t,task:a,intent:n,cacheKey:s,pageIndex:r=this.pageIndex,pageProxyId:f=null,annotationStorage:m=null,modifiedIds:d=null}){const g=this.getContentStream(),b=this.loadResources(ba),w=this._createPartialEvaluator(e,r,f),j=this.xfaFactory?null:getNewAnnotationsMap(m),k=j?.get(this.pageIndex);let y=Promise.resolve(null),q=null;if(k){const e=this.pdfManager.ensureDoc("annotationGlobals");let t;const n=new Set;for(const{bitmapId:e,bitmap:t}of k)!e||t||n.has(e)||n.add(e);const{isOffscreenCanvasSupported:s}=this.evaluatorOptions;if(n.size>0){const e=k.slice();for(const[t,a]of m)t.startsWith(p)&&a.bitmap&&n.has(a.bitmapId)&&e.push(a);t=AnnotationFactory.generateImages(e,this.xref,s)}else t=AnnotationFactory.generateImages(k,this.xref,s);q=new RefSet;y=Promise.all([e,this.#Ca(k,q,null)]).then(([e])=>e?AnnotationFactory.printNewAnnotations(e,w,a,k,t):null)}const v=Promise.all([g,b]).then(async([r])=>{const i=await this.#Ia(r.dict,ba),o=new OperatorList(n,t);e.send("StartRenderPage",{transparency:w.hasBlendModes(i,this.nonBlendModesSet),pageProxyId:f,cacheKey:s});await w.getOperatorList({stream:r,task:a,resources:i,operatorList:o});return o});let[S,x,C]=await Promise.all([v,this._parsedAnnotations,y]);if(C){x=x.filter(e=>!(e.ref&&q.has(e.ref)));for(let e=0,t=C.length;e<t;e++){const a=C[e];if(a.refToReplace){const n=x.findIndex(e=>e.ref&&isRefsEqual(e.ref,a.refToReplace));if(n>=0){x.splice(n,1,a);C.splice(e--,1);t--}}}x=x.concat(C)}if(0===x.length||n&h){S.flush(!0);return}const F=!!(n&c),T=!!(n&u),R=!!(n&i),O=!!(n&o),D=!!(n&l),H=[];for(const e of x)(R||O&&e.mustBeViewed(m,F)&&e.mustBeViewedWhenEditing(T,d)||D&&e.mustBePrinted(m))&&H.push(e.getOperatorList(w,a,n,m).catch(e=>{warn(`getOperatorList - ignoring annotation data during "${a.name}" task: "${e}".`);return{opList:null,separateForm:!1,separateCanvas:!1}}));const M=await Promise.all(H);let N=!1,E=!1;for(const{opList:e,separateForm:t,separateCanvas:a}of M){S.addOpList(e);N||=t;E||=a}S.flush(!0,{form:N,canvas:E})}async extractTextContent({handler:e,task:t,includeMarkedContent:a,disableNormalization:n,sink:s,intersector:r=null}){const i=this.getContentStream(),o=this.loadResources(wa),l=this.pdfManager.ensureCatalog("lang"),[f,,c]=await Promise.all([i,o,l]),h=await this.#Ia(f.dict,wa);return this._createPartialEvaluator(e).getTextContent({stream:f,task:t,resources:h,includeMarkedContent:a,disableNormalization:n,sink:s,viewBox:this.view,lang:c,intersector:r})}async getStructTree(){const e=await this.pdfManager.ensureCatalog("structTreeRoot");if(!e)return null;await this._parsedAnnotations;try{const t=await this.pdfManager.ensure(this,"_parseStructTree",[e]);return await this.pdfManager.ensure(t,"serializable")}catch(e){warn(`getStructTree: "${e}".`);return null}}_parseStructTree(e){const t=new StructTreePage(e,this.pageDict);t.parse(this.ref);return t}async getAnnotationsData(e,t,a){const n=await this._parsedAnnotations;if(0===n.length)return n;const s=[],r=[];let f;const c=!!(a&i),h=!!(a&o),u=!!(a&l),m=[];for(const a of n){const n=c||h&&a.viewable;(n||u&&a.printable)&&s.push(a.data);if(a.hasTextContent&&n){f??=this._createPartialEvaluator(e);r.push(a.extractTextContent(f,t,[-1/0,-1/0,1/0,1/0]).catch(e=>{warn(`getAnnotationsData - ignoring textContent during "${t.name}" task: "${e}".`)}))}else a.overlaysTextContent&&n&&m.push(a)}if(m.length>0){const a=new Intersector(m);r.push(this.extractTextContent({handler:e,task:t,includeMarkedContent:!1,disableNormalization:!1,sink:null,intersector:a}).then(()=>{a.setText()}))}await Promise.all(r);return s}get annotations(){const e=this.#Aa("Annots");return shadow(this,"annotations",Array.isArray(e)?e:[])}get _parsedAnnotations(){return shadow(this,"_parsedAnnotations",this.pdfManager.ensure(this,"annotations").then(async e=>{if(0===e.length)return e;const[t,a]=await Promise.all([this.pdfManager.ensureDoc("annotationGlobals"),this.pdfManager.ensureDoc("fieldObjects")]);if(!t)return[];const n=a?.orphanFields,s=[];for(const a of e)s.push(AnnotationFactory.create(this.xref,a,t,this._localIdFactory,!1,n,null,this.ref).catch(e=>{warn(`_parsedAnnotations: "${e}".`);return null}));const r=[];let i,o;for(const e of await Promise.all(s))e&&(e instanceof WidgetAnnotation?(o||=[]).push(e):e instanceof PopupAnnotation?(i||=[]).push(e):r.push(e));o&&r.push(...o);i&&r.push(...i);return r}))}get jsActions(){return shadow(this,"jsActions",collectActions(this.xref,this.pageDict,fe))}async collectAnnotationsByType(e,t,a,n,s){const{pageIndex:r}=this;if(Object.hasOwn(this,"_parsedAnnotations")){const e=await this._parsedAnnotations;for(const{data:t}of e)if(!a||a.has(t.annotationType)){t.pageIndex=r;n.push(Promise.resolve(t))}return}const i=await this.pdfManager.ensure(this,"annotations");let o;for(const l of i)n.push(AnnotationFactory.create(this.xref,l,s,this._localIdFactory,!1,null,a,this.ref).then(async a=>{if(!a)return null;a.data.pageIndex=r;if(a.hasTextContent&&a.viewable){o??=this._createPartialEvaluator(e);await a.extractTextContent(o,t,[-1/0,-1/0,1/0,1/0])}return a.data}).catch(e=>{warn(`collectAnnotationsByType: "${e}".`);return null}))}}const Of=new Uint8Array([37,80,68,70,45]),Bf=new Uint8Array([115,116,97,114,116,120,114,101,102]),Df=new Uint8Array([101,110,100,111,98,106]);function find(e,t,a=1024,n=!1){const s=t.length,r=e.peekBytes(a),i=r.length-s;if(i<=0)return!1;if(n){const a=s-1;let n=r.length-1;for(;n>=a;){let i=0;for(;i<s&&r[n-i]===t[a-i];)i++;if(i>=s){e.pos+=n-a;return!0}n--}}else{let a=0;for(;a<=i;){let n=0;for(;n<s&&r[a+n]===t[n];)n++;if(n>=s){e.pos+=a;return!0}a++}}return!1}class PDFDocument{#Fa=new Map;#Ta=null;#Ra=null;constructor(e,t){if(t.length<=0)throw new InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes.");this.pdfManager=e;this.stream=t;this.xref=new XRef(t,e);const a={font:0};this._globalIdFactory=class{static getDocId(){return`g_${e.docId}`}static createFontId(){return"f"+ ++a.font}static createObjId(){unreachable("Abstract method `createObjId` called.")}static getPageObjId(){unreachable("Abstract method `getPageObjId` called.")}}}parse(e){this.xref.parse(e);this.catalog=new Catalog(this.pdfManager,this.xref)}get linearization(){let e=null;try{e=Linearization.create(this.stream)}catch(e){if(e instanceof MissingDataException)throw e;info(e)}return shadow(this,"linearization",e)}get startXRef(){const e=this.stream;let t=0;if(this.linearization){e.reset();if(find(e,Df)){e.skip(6);let a=e.peekByte();for(;isWhiteSpace(a);){e.pos++;a=e.peekByte()}t=e.pos-e.start}}else{const a=1024,n=Bf.length;let s=!1,r=e.end;for(;!s&&r>0;){r-=a-n;r<0&&(r=0);e.pos=r;s=find(e,Bf,a,!0)}if(s){e.skip(9);let a;do{a=e.getByte()}while(isWhiteSpace(a));let n="";for(;a>=32&&a<=57;){n+=String.fromCharCode(a);a=e.getByte()}t=parseInt(n,10);isNaN(t)&&(t=0)}}return shadow(this,"startXRef",t)}checkHeader(){const e=this.stream;e.reset();if(!find(e,Of))return;e.moveStart();e.skip(Of.length);let t,a="";for(;(t=e.getByte())>32&&a.length<7;)a+=String.fromCharCode(t);pa.test(a)?this.#Ra=a:warn(`Invalid PDF header version: ${a}`)}parseStartXRef(){this.xref.setStartXRef(this.startXRef)}get numPages(){let e=0;e=this.catalog.hasActualNumPages?this.catalog.numPages:this.xfaFactory?this.xfaFactory.getNumPages():this.linearization?this.linearization.numPages:this.catalog.numPages;return shadow(this,"numPages",e)}#Oa(e,t=0){return!!Array.isArray(e)&&e.every(e=>{if(!((e=this.xref.fetchIfRef(e))instanceof Dict))return!1;if(e.has("Kids")){if(++t>10){warn("#hasOnlyDocumentSignatures: maximum recursion depth reached");return!1}return this.#Oa(e.get("Kids"),t)}const a=isName(getInheritableProperty({dict:e,key:"FT"}),"Sig"),n=e.get("Rect"),s=Array.isArray(n)&&n.every(e=>0===e);return a&&s})}get _xfaStreams(){const{acroForm:e}=this.catalog;if(!e)return null;const t=e.get("XFA"),a=new Map(["xdp:xdp","template","datasets","config","connectionSet","localeSet","stylesheet","/xdp:xdp"].map(e=>[e,null]));if(t instanceof BaseStream&&!t.isEmpty){a.set("xdp:xdp",t);return a}if(!Array.isArray(t)||0===t.length)return null;for(let e=0,n=t.length;e<n;e+=2){let s;s=0===e?"xdp:xdp":e===n-2?"/xdp:xdp":t[e];if(!a.has(s))continue;const r=this.xref.fetchIfRef(t[e+1]);r instanceof BaseStream&&!r.isEmpty&&a.set(s,r)}return a}get xfaDatasets(){const e=this._xfaStreams;if(!e)return shadow(this,"xfaDatasets",null);for(const t of["datasets","xdp:xdp"]){const a=e.get(t);if(a)try{const e=stringToUTF8String(a.getString());return shadow(this,"xfaDatasets",new DatasetReader({[t]:e}))}catch{warn("XFA - Invalid utf-8 string.");break}}return shadow(this,"xfaDatasets",null)}get xfaData(){const e=this._xfaStreams;if(!e)return null;const t=new Map;for(const[a,n]of e)if(n)try{t.set(a,stringToUTF8String(n.getString()))}catch{warn("XFA - Invalid utf-8 string.");return null}return t}get xfaFactory(){let e;this.pdfManager.enableXfa&&this.catalog.needsRendering&&this.formInfo.hasXfa&&!this.formInfo.hasAcroForm&&(e=this.xfaData);return shadow(this,"xfaFactory",e?new XFAFactory(e):null)}get isPureXfa(){return!!this.xfaFactory&&this.xfaFactory.isValid()}get htmlForXfa(){return this.xfaFactory?this.xfaFactory.getPages():null}async#Ba(){const e=await this.pdfManager.ensureCatalog("xfaImages");e&&this.xfaFactory.setImages(e)}async#Da(e,t){const a=await this.pdfManager.ensureCatalog("acroForm");if(!a)return;const n=await a.getAsync("DR");if(!(n instanceof Dict))return;await ObjectLoader.load(n,["Font"],this.xref);const s=n.get("Font");if(!(s instanceof Dict))return;const r=Object.assign(Object.create(null),this.pdfManager.evaluatorOptions,{useSystemFonts:!1}),{builtInCMapCache:i,fontCache:o,standardFontDataCache:l}=this.catalog,f=new PartialEvaluator({xref:this.xref,handler:e,pageIndex:-1,idFactory:this._globalIdFactory,fontCache:o,builtInCMapCache:i,standardFontDataCache:l,options:r}),c=new OperatorList,h=[],u={get font(){return h.at(-1)},set font(e){h.push(e)},clone(){return this}},parseFont=(e,a,s)=>f.handleSetFont(n,[Name.get(e),1],null,c,t,u,a,s).catch(e=>{warn(`loadXfaFonts: "${e}".`);return null}),m=[];for(const[e,t]of s){const a=t.get("FontDescriptor");if(!(a instanceof Dict))continue;const n={fontFamily:normalizeCSSFontFamily(a.get("FontFamily")),fontWeight:a.get("FontWeight"),italicAngle:-a.get("ItalicAngle")};validateCSSFont(n)&&m.push(parseFont(e,null,n))}await Promise.all(m);const p=this.xfaFactory.setFonts(h);if(!p)return;r.ignoreErrors=!0;m.length=0;h.length=0;const d=new Set;for(const e of p)getXfaFontName(`${e}-Regular`)||d.add(e);d.size&&p.push("PdfJS-Fallback");for(const e of p)if(!d.has(e))for(const t of[{name:"Regular",fontWeight:400,italicAngle:0},{name:"Bold",fontWeight:700,italicAngle:0},{name:"Italic",fontWeight:400,italicAngle:12},{name:"BoldItalic",fontWeight:700,italicAngle:12}]){const a=`${e}-${t.name}`;m.push(parseFont(a,getXfaFontDict(a),{fontFamily:e,fontWeight:t.fontWeight,italicAngle:t.italicAngle}))}await Promise.all(m);this.xfaFactory.appendFonts(h,d)}loadXfaResources(e,t){return Promise.all([this.#Da(e,t).catch(()=>{}),this.#Ba()])}serializeXfaData(e){return this.xfaFactory?this.xfaFactory.serializeData(e):null}get version(){return this.catalog.version||this.#Ra}get formInfo(){const e={hasFields:!1,hasAcroForm:!1,hasXfa:!1,hasSignatures:!1},{acroForm:t}=this.catalog;if(!t)return shadow(this,"formInfo",e);try{const a=t.get("Fields"),n=Array.isArray(a)&&a.length>0;e.hasFields=n;const s=t.get("XFA");e.hasXfa=Array.isArray(s)&&s.length>0||s instanceof BaseStream&&!s.isEmpty;const r=!!(1&t.get("SigFlags")),i=r&&this.#Oa(a);e.hasAcroForm=n&&!i;e.hasSignatures=r}catch(e){if(e instanceof MissingDataException)throw e;warn(`Cannot fetch form information: "${e}".`)}return shadow(this,"formInfo",e)}get documentInfo(){const{catalog:e,formInfo:t,xref:a}=this,n={PDFFormatVersion:this.version,Language:e.lang,EncryptFilterName:a.encrypt?.filterName??null,IsLinearized:!!this.linearization,IsAcroFormPresent:t.hasAcroForm,IsXFAPresent:t.hasXfa,IsCollectionPresent:!!e.collection,IsSignaturesPresent:t.hasSignatures};let s;try{s=a.trailer.get("Info")}catch(e){if(e instanceof MissingDataException)throw e;info("The document information dictionary is invalid.")}if(!(s instanceof Dict))return shadow(this,"documentInfo",n);for(const[e,t]of s){switch(e){case"Title":case"Author":case"Subject":case"Keywords":case"Creator":case"Producer":case"CreationDate":case"ModDate":if("string"==typeof t){n[e]=stringToPDFString(t);continue}break;case"Trapped":if(t instanceof Name){n[e]=t;continue}break;default:let a;switch(typeof t){case"string":a=stringToPDFString(t);break;case"number":case"boolean":a=t;break;default:if(t instanceof Name){a=t;break}warn(`Bad value, for custom key "${e}", in Info: ${t}.`);continue}(n.Custom??=new Map).set(e,a);continue}warn(`Bad value, for key "${e}", in Info: ${t}.`)}return shadow(this,"documentInfo",n)}get fingerprints(){const e="\0".repeat(16);function validate(t){return"string"==typeof t&&16===t.length&&t!==e}const t=this.xref.trailer.get("ID");let a,n;if(Array.isArray(t)&&validate(t[0])){a=stringToBytes(t[0]);t[1]!==t[0]&&validate(t[1])&&(n=stringToBytes(t[1]))}else a=calculateMD5(this.stream.getByteRange(0,1024),0,1024);return shadow(this,"fingerprints",[a.toHex(),n?.toHex()??null])}async#Ha(e){const{catalog:t,linearization:a,xref:n}=this,s=Ref.get(a.objectNumberFirst,0);try{const e=await n.fetchAsync(s);if(e instanceof Dict){let a=e.getRaw("Type");a instanceof Ref&&(a=await n.fetchAsync(a));if(isName(a,"Page")||!e.has("Type")&&!e.has("Kids")&&e.has("Contents")){t.pageKidsCountCache.has(s)||t.pageKidsCountCache.put(s,1);t.pageIndexCache.has(s)||t.pageIndexCache.put(s,0);return[e,s]}}throw new FormatError("The Linearization dictionary doesn't point to a valid Page dictionary.")}catch(a){warn(`_getLinearizationPage: "${a.message}".`);return t.getPageDict(e)}}getPage(e){const t=this.#Fa.get(e);if(t)return t;const{catalog:a,linearization:n,xfaFactory:s}=this;let r;r=s?Promise.resolve([Dict.empty,null]):n?.pageFirst===e?this.#Ha(e):a.getPageDict(e);r=r.then(([t,n])=>new Page({pdfManager:this.pdfManager,xref:this.xref,pageIndex:e,pageDict:t,ref:n,globalIdFactory:this._globalIdFactory,fontCache:a.fontCache,builtInCMapCache:a.builtInCMapCache,standardFontDataCache:a.standardFontDataCache,globalColorSpaceCache:a.globalColorSpaceCache,globalImageCache:a.globalImageCache,systemFontCache:a.systemFontCache,nonBlendModesSet:a.nonBlendModesSet,xfaFactory:s}));this.#Fa.set(e,r);return r}async checkFirstPage(e=!1){if(!e)try{await this.getPage(0)}catch(e){if(e instanceof XRefEntryException){this.#Fa.delete(0);await this.cleanup();throw new XRefParseException}}}async checkLastPage(e=!1){const{catalog:t,pdfManager:a}=this;t.setActualNumPages();let n;try{await Promise.all([a.ensureDoc("xfaFactory"),a.ensureDoc("linearization"),a.ensureCatalog("numPages")]);if(this.xfaFactory)return;n=this.linearization?this.linearization.numPages:t.numPages;if(!Number.isInteger(n))throw new FormatError("Page count is not an integer.");if(n<=1)return;await this.getPage(n-1)}catch(s){this.#Fa.delete(n-1);await this.cleanup();if(s instanceof XRefEntryException&&!e)throw new XRefParseException;warn(`checkLastPage - invalid /Pages tree /Count: ${n}.`);let r;try{r=await t.getAllPageDicts(e)}catch(a){if(a instanceof XRefEntryException&&!e)throw new XRefParseException;t.setActualNumPages(1);return}for(const[e,[n,s]]of r){let r;if(n instanceof Error){r=Promise.reject(n);r.catch(()=>{})}else r=Promise.resolve(new Page({pdfManager:a,xref:this.xref,pageIndex:e,pageDict:n,ref:s,globalIdFactory:this._globalIdFactory,fontCache:t.fontCache,builtInCMapCache:t.builtInCMapCache,standardFontDataCache:t.standardFontDataCache,globalColorSpaceCache:this.globalColorSpaceCache,globalImageCache:t.globalImageCache,systemFontCache:t.systemFontCache,nonBlendModesSet:t.nonBlendModesSet,xfaFactory:null}));this.#Fa.set(e,r)}t.setActualNumPages(r.size)}}async fontFallback(e,t){const{catalog:a,pdfManager:n}=this;for(const s of await Promise.all(a.fontCache))if(s.loadedName===e){s.fallback(t,n.evaluatorOptions);return}}async cleanup(e=!1){return this.catalog?this.catalog.cleanup(e):clearGlobalCaches()}async#Ma(e,t,a,n,s,r,i){const{xref:o}=this;if(!(a instanceof Ref)||r.has(a))return;r.put(a);const l=await o.fetchAsync(a);if(!(l instanceof Dict))return;let f=await l.getAsync("Subtype");f=f instanceof Name?f.name:null;if("Link"===f)return;if(l.has("T")){const t=stringToPDFString(await l.getAsync("T"));e=""===e?t:`${e}.${t}`}else{let a=l;const n=new RefSet;for(;;){a=a.getRaw("Parent")||t;if(a instanceof Ref){if(r.has(a)||n.has(a))break;n.put(a);a=await o.fetchAsync(a)}if(!(a instanceof Dict))break;if(a.has("T")){const t=stringToPDFString(await a.getAsync("T"));e=""===e?t:`${e}.${t}`;break}}}t&&!l.has("Parent")&&isName(l.get("Subtype"),"Widget")&&i.put(a,t);n.getOrInsertComputed(e,makeArr).push(AnnotationFactory.create(o,a,s,null,!0,i,null,null).then(e=>e?.getFieldObject()).catch(e=>{warn(`#collectFieldObjects: "${e}".`);return null}));if(!l.has("Kids"))return;const c=await l.getAsync("Kids");if(Array.isArray(c))for(const t of c)await this.#Ma(e,a,t,n,s,r,i)}get fieldObjects(){return shadow(this,"fieldObjects",this.pdfManager.ensureDoc("formInfo").then(async e=>{if(!e.hasFields)return null;const t=await this.annotationGlobals;if(!t)return null;const{acroForm:a}=t,n=new RefSet,s=new Map,r=new Map,i=new RefMap;for(const e of a.get("Fields"))await this.#Ma("",null,e,r,t,n,i);const o=[];for(const[e,t]of r)o.push(Promise.all(t).then(t=>{(t=t.filter(Boolean)).length>0&&s.set(e,t)}));await Promise.all(o);return{allFields:s.size?s:null,orphanFields:i}}))}async#Na(e,t,a){if(Array.isArray(e))for(const n of e){if(n instanceof Ref){if(a.has(n))continue;a.put(n)}const e=await this.xref.fetchIfRefAsync(n);if(e instanceof Dict){if(isName(await e.getAsync("FT"),"Sig")){const a=await e.getAsync("V");if(a instanceof Dict){const s=await this.#Pa(e,a,n);s&&t.push(s)}}e.has("Kids")&&await this.#Na(await e.getAsync("Kids"),t,a)}}}async#Ea(e,t){try{return this.stream.getByteRange(e,t)}catch(a){if(!(a instanceof MissingDataException))throw a;await this.pdfManager.requestRange(e,t);return this.#Ea(e,t)}}async#_a(e,t){if(t>0)return!1;const a=this.stream.end;for(let t=e;t<a;t+=65536){const e=Math.min(t+65536,a),n=await this.#Ea(t,e);for(const e of n)if(0!==e&&9!==e&&10!==e&&12!==e&&13!==e&&32!==e)return!1}return!0}async#Pa(e,t,a){const n=await t.getAsync("ByteRange");if(!Array.isArray(n)||4!==n.length||n.some(e=>!Number.isInteger(e)||e<0))return null;const[s,r,i,o]=n,l=this.stream.end||0;if(0!==s||r<=0||s+r>i||i+o>l||0===l)return null;const f=await t.getAsync("Contents");if("string"!=typeof f||0===f.length)return null;const[c,h,u,m,p,d,g,b]=await Promise.all([t.getAsync("Filter"),t.getAsync("SubFilter"),e.getAsync("T"),t.getAsync("Name"),t.getAsync("Reason"),t.getAsync("Location"),t.getAsync("ContactInfo"),t.getAsync("M")]),w=c instanceof Name?c.name:null,j=h instanceof Name?h.name:null;let k=null;"adbe.pkcs7.detached"===j?k=0:"adbe.pkcs7.sha1"===j&&(k=1);return{id:`${a instanceof Ref?a.toString():"inline"}:${s}-${r}-${i}-${o}`,fieldName:"string"==typeof u?stringToPDFString(u):"",signerName:"string"==typeof m?stringToPDFString(m):null,reason:"string"==typeof p?stringToPDFString(p):null,location:"string"==typeof d?stringToPDFString(d):null,contactInfo:"string"==typeof g?stringToPDFString(g):null,signingTime:"string"==typeof b?b:null,filter:w,subFilter:j,signatureType:k,byteRange:n,pkcs7:stringToBytes(f),revisionIndex:0,parentId:null}}get signatures(){return shadow(this,"signatures",this.pdfManager.ensureDoc("formInfo").then(async e=>{if(!e.hasSignatures||!e.hasFields)return null;const t=await this.annotationGlobals;if(!t)return null;const a=t.acroForm.get("Fields"),n=[];await this.#Na(a,n,new RefSet);await Promise.all(n.map(async e=>{const t=e.byteRange[2]+e.byteRange[3];e.modificationsAfterSignature=this.xref.countUpdatesAfter(t);e.coversWholeDocument=await this.#_a(t,e.modificationsAfterSignature)}));n.sort((e,t)=>t.byteRange[2]+t.byteRange[3]-(e.byteRange[2]+e.byteRange[3]));for(let e=0,t=n.length;e<t;e++){const t=n[e];t.revisionIndex=e;for(let a=e-1;a>=0;a--){const e=n[a];if(e.byteRange[2]+e.byteRange[3]>t.byteRange[2]+t.byteRange[3]){t.parentId=e.id;break}}}const s=new Map,r=n.map(e=>{const{pkcs7:t,...a}=e;s.set(e.id,{byteRange:e.byteRange,pkcs7:t});return a});this.#Ta=s;return r.length?r:null}))}async getSignatureData(e){await this.signatures;const t=this.#Ta?.get(e);if(!t)return null;const{byteRange:a,pkcs7:n}=t,[s,r,i,o]=a;return{data:await Promise.all([this.#Ea(s,s+r),this.#Ea(i,i+o)]),pkcs7:n}}get hasJSActions(){return shadow(this,"hasJSActions",Promise.all([this.pdfManager.ensureCatalog("jsActions"),this.pdfManager.ensureDoc("fieldObjects")]).then(([e,t])=>!!e||!!t?.allFields&&t.allFields.values().some(e=>e.some(e=>null!==e.actions))))}get calculationOrderIds(){const e=this.catalog.acroForm?.get("CO");if(!Array.isArray(e)||0===e.length)return shadow(this,"calculationOrderIds",null);const t=[];for(const a of e)a instanceof Ref&&t.push(a.toString());return shadow(this,"calculationOrderIds",t.length?t:null)}get annotationGlobals(){return shadow(this,"annotationGlobals",AnnotationFactory.createGlobals(this.pdfManager))}async toJSObject(e,t=!0){throw new Error("Not implemented: toJSObject")}}class BasePdfManager{constructor({docBaseUrl:e,docId:t,enableXfa:a,evaluatorOptions:n,handler:s,password:r}){this._docBaseUrl=function parseDocBaseUrl(e){if(e){const t=createValidAbsoluteUrl(e);if(t)return t.href;warn(`Invalid absolute docBaseUrl: "${e}".`)}return null}(e);this._docId=t;this._password=r;this.enableXfa=a;n.isOffscreenCanvasSupported&&=FeatureTest.isOffscreenCanvasSupported;n.isImageDecoderSupported&&=FeatureTest.isImageDecoderSupported;this.evaluatorOptions=Object.freeze(n);ImageResizer.setOptions(n);JpegStream.setOptions(n);OperatorList.setOptions(n);const i={...n,handler:s};IccColorSpace.setOptions(i);CmykICCBasedCS.setOptions(i);PDFFunctionFactory.setOptions(i);Pattern.setOptions(i);WasmImage.setOptions(i)}get docId(){return this._docId}get password(){return this._password}get docBaseUrl(){return this._docBaseUrl}ensureDoc(e,t){return this.ensure(this.pdfDocument,e,t)}ensureCatalog(e,t){return this.ensure(this.pdfDocument.catalog,e,t)}async initDocument(e){await this.ensureDoc("checkHeader");await this.ensureDoc("parseStartXRef");await this.ensureDoc("parse",[e]);await this.ensureDoc("checkFirstPage",[e]);await this.ensureDoc("checkLastPage",[e])}getPage(e){return this.pdfDocument.getPage(e)}fontFallback(e,t){return this.pdfDocument.fontFallback(e,t)}cleanup(e=!1){return this.pdfDocument.cleanup(e)}async ensure(e,t,a){unreachable("Abstract method `ensure` called")}requestRange(e,t){unreachable("Abstract method `requestRange` called")}requestLoadedStream(e=!1){unreachable("Abstract method `requestLoadedStream` called")}sendProgressiveData(e){unreachable("Abstract method `sendProgressiveData` called")}updatePassword(e){this._password=e;this.pdfDocument.xref.encrypt?.setPassword(e)}terminate(e){unreachable("Abstract method `terminate` called")}}class LocalPdfManager extends BasePdfManager{constructor(e){super(e);const t=new Stream(e.source);this.pdfDocument=new PDFDocument(this,t);this._loadedStreamPromise=Promise.resolve(t)}async ensure(e,t,a){const n=e[t];return"function"==typeof n?n.apply(e,a):n}requestLoadedStream(e=!1){return this._loadedStreamPromise}terminate(e){}}class NetworkPdfManager extends BasePdfManager{constructor(e){super(e);this.streamManager=new ChunkedStreamManager(e.source,{msgHandler:e.handler,length:e.length,disableAutoFetch:e.disableAutoFetch,rangeChunkSize:e.rangeChunkSize});this.pdfDocument=new PDFDocument(this,this.streamManager.getStream())}async ensure(e,t,a){try{const n=e[t];return"function"==typeof n?await n.apply(e,a):n}catch(n){if(!(n instanceof MissingDataException))throw n;await this.requestRange(n.begin,n.end);return this.ensure(e,t,a)}}requestRange(e,t){return this.streamManager.requestRange(e,t)}requestLoadedStream(e=!1){return this.streamManager.requestAllChunks(e)}sendProgressiveData(e){this.streamManager.onReceiveData({chunk:e})}terminate(e){this.streamManager.abort(e)}}const Hf=1,Mf=2,Nf=1,Pf=2,Ef=3,_f=4,zf=5,Lf=6,Uf=7,Wf=8;function onFn(){}function wrapReason(e){if(e instanceof AbortException||e instanceof InvalidPDFException||e instanceof PasswordException||e instanceof ResponseException||e instanceof UnknownErrorException)return e;e instanceof Error||"object"==typeof e&&null!==e||unreachable('wrapReason: Expected "reason" to be a (possibly cloned) Error.');switch(e.name){case"AbortException":return new AbortException(e.message);case"InvalidPDFException":return new InvalidPDFException(e.message);case"PasswordException":return new PasswordException(e.message,e.code);case"ResponseException":return new ResponseException(e.message,e.status,e.missing);case"UnknownErrorException":return new UnknownErrorException(e.message,e.details)}return new UnknownErrorException(e.message,e.toString())}class MessageHandler{#za=new Map;#La=new Map;#Ua=1;#Wa;#Xa=new AbortController;#Ka;#Ga=new Map;#Va=1;#$a=new Map;#Ya;constructor(e,t,a){this.#Ka=e;this.#Ya=t;this.#Wa=a;a.addEventListener("message",this.#Ja.bind(this),{signal:this.#Xa.signal})}#Ja({data:e}){if(e.targetName!==this.#Ka)return;if(e.stream){this.#Qa(e);return}if(e.callback){const{callbackId:t,callback:a}=e,n=this.#La.get(t);if(!n)throw new Error(`Cannot resolve callback ${t}`);this.#La.delete(t);if(a===Hf)n.resolve(e.data);else{if(a!==Mf)throw new Error("Unexpected callback case");n.reject(wrapReason(e.reason))}return}const t=this.#za.get(e.action);if(!t)throw new Error(`Unknown action from worker: ${e.action}`);if(e.callbackId){const a=this.#Ka,n=e.sourceName,s=this.#Wa;Promise.try(t,e.data).then(t=>{s.postMessage({sourceName:a,targetName:n,callback:Hf,callbackId:e.callbackId,data:t})},t=>{s.postMessage({sourceName:a,targetName:n,callback:Mf,callbackId:e.callbackId,reason:wrapReason(t)})});return}e.streamId?this.#Za(e):t(e.data)}on(e,t){const a=this.#za;if(a.has(e))throw new Error(`There is already a "${e}" handler.`);a.set(e,t)}send(e,t,a){this.#Wa.postMessage({sourceName:this.#Ka,targetName:this.#Ya,action:e,data:t},a)}sendWithPromise(e,t,a){const n=this.#Ua++,s=Promise.withResolvers();this.#La.set(n,s);try{this.#Wa.postMessage({sourceName:this.#Ka,targetName:this.#Ya,action:e,callbackId:n,data:t},a)}catch(e){s.reject(e)}return s.promise}sendWithStream(e,t,a,n){const s=this.#Va++,r=this.#Ka,i=this.#Ya,o=this.#Wa;return new ReadableStream({start:a=>{const l=Promise.withResolvers();this.#Ga.set(s,{controller:a,startCall:l,pullCall:null,cancelCall:null,isClosed:!1});o.postMessage({sourceName:r,targetName:i,action:e,streamId:s,data:t,desiredSize:a.desiredSize},n);return l.promise},pull:e=>{const t=Promise.withResolvers();this.#Ga.get(s).pullCall=t;o.postMessage({sourceName:r,targetName:i,stream:Lf,streamId:s,desiredSize:e.desiredSize});return t.promise},cancel:e=>{assert(e instanceof Error,"cancel must have a valid reason");const t=Promise.withResolvers();this.#Ga.get(s).cancelCall=t;this.#Ga.get(s).isClosed=!0;o.postMessage({sourceName:r,targetName:i,stream:Nf,streamId:s,reason:wrapReason(e)});return t.promise}},a)}#Za(e){const t=e.streamId,a=this.#Ka,n=e.sourceName,s=this.#Wa,r=this.#$a,i=this.#za.get(e.action),o={enqueue(e,r=1,i){if(this.isCancelled)return;const o=this.desiredSize;this.desiredSize-=r;if(o>0&&this.desiredSize<=0){this.sinkCapability=Promise.withResolvers();this.ready=this.sinkCapability.promise}s.postMessage({sourceName:a,targetName:n,stream:_f,streamId:t,chunk:e},i)},close(){if(!this.isCancelled){this.isCancelled=!0;s.postMessage({sourceName:a,targetName:n,stream:Ef,streamId:t});r.delete(t)}},error(e){assert(e instanceof Error,"error must have a valid reason");if(!this.isCancelled){this.isCancelled=!0;s.postMessage({sourceName:a,targetName:n,stream:zf,streamId:t,reason:wrapReason(e)})}},sinkCapability:Promise.withResolvers(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:e.desiredSize,ready:null};o.sinkCapability.resolve();o.ready=o.sinkCapability.promise;r.set(t,o);Promise.try(i,e.data,o).then(()=>{s.postMessage({sourceName:a,targetName:n,stream:Wf,streamId:t,success:!0})},e=>{s.postMessage({sourceName:a,targetName:n,stream:Wf,streamId:t,reason:wrapReason(e)})})}#Qa(e){const t=e.streamId,a=this.#Ka,n=e.sourceName,s=this.#Wa,r=this.#Ga.get(t),i=this.#$a.get(t);switch(e.stream){case Wf:e.success?r.startCall.resolve():r.startCall.reject(wrapReason(e.reason));break;case Uf:e.success?r.pullCall.resolve():r.pullCall.reject(wrapReason(e.reason));break;case Lf:if(!i){s.postMessage({sourceName:a,targetName:n,stream:Uf,streamId:t,success:!0});break}i.desiredSize<=0&&e.desiredSize>0&&i.sinkCapability.resolve();i.desiredSize=e.desiredSize;Promise.try(i.onPull||onFn).then(()=>{s.postMessage({sourceName:a,targetName:n,stream:Uf,streamId:t,success:!0})},e=>{s.postMessage({sourceName:a,targetName:n,stream:Uf,streamId:t,reason:wrapReason(e)})});break;case _f:assert(r,"enqueue should have stream controller");if(r.isClosed)break;r.controller.enqueue(e.chunk);break;case Ef:assert(r,"close should have stream controller");if(r.isClosed)break;r.isClosed=!0;r.controller.close();this.#en(r,t);break;case zf:assert(r,"error should have stream controller");r.controller.error(wrapReason(e.reason));this.#en(r,t);break;case Pf:e.success?r.cancelCall.resolve():r.cancelCall.reject(wrapReason(e.reason));this.#en(r,t);break;case Nf:if(!i)break;const o=wrapReason(e.reason);Promise.try(i.onCancel||onFn,o).then(()=>{s.postMessage({sourceName:a,targetName:n,stream:Pf,streamId:t,success:!0})},e=>{s.postMessage({sourceName:a,targetName:n,stream:Pf,streamId:t,reason:wrapReason(e)})});i.sinkCapability.reject(o);i.isCancelled=!0;this.#$a.delete(t);break;default:throw new Error("Unexpected stream case")}}async#en(e,t){await Promise.allSettled([e.startCall?.promise,e.pullCall?.promise,e.cancelCall?.promise]);this.#Ga.delete(t)}destroy(){this.#Xa?.abort();this.#Xa=null}}new Set(["BDC","BMC","DP","EMC","MP"]);async function writeObject(e,t,a,{encrypt:n=null,encryptRef:s=null}){const r=n&&s!==e?n.createCipherTransform(e.num,e.gen):null;a.push(`${e.num} ${e.gen} obj\n`);await writeValue(t,a,r);a.push("\nendobj\n")}async function writeDict(e,t,a){t.push("<<");for(const[n,s]of e.getRawEntries()){t.push(` /${escapePDFName(n)} `);await writeValue(s,t,a)}t.push(">>")}async function writeValue(e,t,a){if(e instanceof Name)t.push(`/${escapePDFName(e.name)}`);else if(e instanceof Ref)t.push(`${e.num} ${e.gen} R`);else if(Array.isArray(e)||ArrayBuffer.isView(e))await async function writeArray(e,t,a){t.push("[");for(let n=0,s=e.length;n<s;n++){await writeValue(e[n],t,a);n<s-1&&t.push(" ")}t.push("]")}(e,t,a);else if("string"==typeof e){a&&(e=a.encryptString(e));t.push(`(${escapeString(e)})`)}else"number"==typeof e?t.push(function numberToPDFString(e){if(Number.isInteger(e)&&Math.abs(e)>=1e21)return BigInt(e).toString();const t=e.toFixed(10);let a=t.length;for(;"0"===t[a-1];)a--;"."===t[a-1]&&a--;return t.slice(0,a)}(e)):"boolean"==typeof e?t.push(e.toString()):e instanceof Dict?await writeDict(e,t,a):e instanceof BaseStream?await async function writeStream(e,t,a){(e=e.getOriginalStream()).reset();let n=e.getBytes();const{dict:s}=e,[r,i]=await Promise.all([s.getAsync("Filter"),s.getAsync("DecodeParms")]),o=Array.isArray(r)?await s.xref.fetchIfRefAsync(r[0]):r,l=isName(o,"FlateDecode"),f=isName(o,"DCTDecode")||isName(o,"JPXDecode")||isName(o,"JBIG2Decode")||isName(o,"CCITTFaxDecode")||isName(o,"LZWDecode");if(!(l||f||isName(o,"BrotliDecode"))&&n.length>=256)try{const e=new CompressionStream("deflate"),t=e.writable.getWriter();await t.ready;t.write(n).then(async()=>{await t.ready;await t.close()}).catch(()=>{});n=await new Response(e.readable).bytes();let a,o;if(r){if(!l){a=Array.isArray(r)?[Name.get("FlateDecode"),...r]:[Name.get("FlateDecode"),r];i&&(o=Array.isArray(i)?[null,...i]:[null,i])}}else a=Name.get("FlateDecode");a&&s.set("Filter",a);o&&s.set("DecodeParms",o)}catch(e){info(`writeStream - cannot compress data: "${e}".`)}let c=bytesToString(n);a&&(c=a.encryptString(c));s.set("Length",c.length);await writeDict(s,t,a);t.push(" stream\n",c,"\nendstream")}(e,t,a):null===e?t.push("null"):warn(`Unhandled value in writer: ${typeof e}, please file a bug.`)}function writeInt(e,t,a,n){for(let s=t+a-1;s>a-1;s--){n[s]=255&e;e>>=8}return a+t}function writeString(e,t,a){const n=e.length;for(let s=0;s<n;s++)a[t+s]=255&e.charCodeAt(s);return t+n}function updateXFA({xfaData:e,xfaDatasetsRef:t,changes:a,xref:n}){if(null===e){e=function writeXFADataForAcroform(e,t){const a=new SimpleXMLParser({hasAttributes:!0}).parseFromString(e);for(const{xfa:e}of t){if(!e)continue;const{path:t,value:n}=e;if(!t||null===n)continue;const s=parseXFAPath(t);let r=a.documentElement.searchNode(s,0);!r&&s.length>1&&(r=a.documentElement.searchNode([s.at(-1)],0));r?r.childNodes=Array.isArray(n)?n.map(e=>new SimpleDOMNode("value",e)):[new SimpleDOMNode("#text",n)]:warn(`Node not found for path: ${t}`)}const n=[];a.documentElement.dump(n);return n.join("")}(n.fetchIfRef(t).getString(),a)}const s=new StringStream(e,new Dict(n));s.dict.setIfName("Type","EmbeddedFile");a.put(t,{data:s})}function getIndexes(e){const t=[];for(const{ref:a}of e)a.num===t.at(-2)+t.at(-1)?t[t.length-1]+=1:t.push(a.num,1);return t}function computeIDs(e,t,a){if(Array.isArray(t.fileIds)&&t.fileIds.length>0){const n=function computeMD5(e,t){const a=Math.floor(Date.now()/1e3),n=t.filename||"",s=[a.toString(),n,e.toString(),...t.infoMap.values()],r=Math.sumPrecise(s.map(e=>e.length)),i=new Uint8Array(r);let o=0;for(const e of s)o=writeString(e,o,i);return bytesToString(calculateMD5(i,0,i.length))}(e,t);a.set("ID",[t.fileIds[0]||n,n])}}async function incrementalUpdate({originalData:e,xrefInfo:t,changes:a,xref:n=null,hasXfa:s=!1,xfaDatasetsRef:r=null,hasXfaDatasetsEntry:i=!1,needAppearances:o,acroFormRef:l=null,acroForm:f=null,xfaData:c=null,useXrefStream:h=!1}){await async function updateAcroform({xref:e,acroForm:t,acroFormRef:a,hasXfa:n,hasXfaDatasetsEntry:s,xfaDatasetsRef:r,needAppearances:i,changes:o}){!n||s||r||warn("XFA - Cannot save it");if(!i&&(!n||!r||s))return;const l=t.clone();if(n&&!s){const e=t.get("XFA").slice();e.splice(2,0,"datasets");e.splice(3,0,r);l.set("XFA",e)}i&&l.set("NeedAppearances",!0);o.put(a,{data:l})}({xref:n,acroForm:f,acroFormRef:l,hasXfa:s,hasXfaDatasetsEntry:i,xfaDatasetsRef:r,needAppearances:o,changes:a});s&&updateXFA({xfaData:c,xfaDatasetsRef:r,changes:a,xref:n});const u=function getTrailerDict(e,t,a){const n=new Dict(null);n.setIfDefined("Prev",e?.startXRef);const s=e.newRef;if(a){t.put(s,{data:""});n.set("Size",s.num+1);n.setIfName("Type","XRef")}else n.set("Size",s.num);n.setIfDefined("Root",e?.rootRef);n.setIfDefined("Info",e?.infoRef);n.setIfDefined("Encrypt",e?.encryptRef);return n}(t,a,h),m=[],p=await async function writeChanges(e,t,a=[]){const n=[];for(const[s,{data:r,objStreamRef:i,index:o}]of e.items())if(i)n.push({ref:s,data:r,objStreamRef:i,index:o});else if(null!==r&&"string"!=typeof r){await writeObject(s,r,a,t);n.push({ref:s,data:a.join("")});a.length=0}else n.push({ref:s,data:r});return n.sort((e,t)=>e.ref.num-t.ref.num)}(a,n,m);let d=e.length;const g=e.at(-1);if(10!==g&&13!==g){m.push("\n");d+=1}for(const{data:e}of p)null!==e&&m.push(e);await(h?async function getXRefStreamTable(e,t,a,n,s){const r=[];let i=0,o=0;for(const{ref:e,data:n,objStreamRef:s,index:l}of a){let a;i=Math.max(i,t);if(s){a=l;r.push([2,s.num,a])}else if(null!==n){a=Math.min(e.gen,65535);r.push([1,t,a]);t+=n.length}else{a=Math.min(e.gen+1,65535);r.push([0,0,a])}o=Math.max(o,a)}n.set("Index",getIndexes(a));const l=[1,getSizeInBytes(i),getSizeInBytes(o)];n.set("W",l);computeIDs(t,e,n);const f=Math.sumPrecise(l),c=new Uint8Array(f*r.length),h=new Stream(c);h.dict=n;let u=0;for(const[e,t,a]of r){u=writeInt(e,l[0],u,c);u=writeInt(t,l[1],u,c);u=writeInt(a,l[2],u,c)}await writeObject(e.newRef,h,s,{});s.push("startxref\n",t.toString(),"\n%%EOF\n")}(t,d,p,u,m):async function getXRefTable(e,t,a,n,s){s.push("xref\n");const r=getIndexes(a);let i=0;for(const{ref:e,data:n}of a){if(e.num===r[i]){s.push(`${r[i]} ${r[i+1]}\n`);i+=2}if(null!==n){s.push(`${t.toString().padStart(10,"0")} ${Math.min(e.gen,65535).toString().padStart(5,"0")} n\r\n`);t+=n.length}else s.push(`0000000000 ${Math.min(e.gen+1,65535).toString().padStart(5,"0")} f\r\n`)}computeIDs(t,e,n);s.push("trailer\n");await writeDict(n,s,null);s.push("\nstartxref\n",t.toString(),"\n%%EOF\n")}(t,d,p,u,m));const b=e.length+Math.sumPrecise(m.map(e=>e.length)),w=new Uint8Array(b);w.set(e);let j=e.length;for(const e of m)j=writeString(e,j,w);return w}class PageData{constructor(e,t){this.page=e;this.documentData=t;this.annotations=null;this.pointingNamedDestinations=null;this.copyLevel=0;t.pagesMap.put(e.ref,this)}}class DocumentData{constructor(e){this.document=e;this.destinations=null;this.pageLabels=null;this.pagesMap=new RefMap;this.oldRefMapping=new RefMap;this.dedupNamedDestinations=new Map;this.usedNamedDestinations=new Set;this.postponedRefCopies=new RefMap;this.resourceStreamPromises=new Map;this.usedStructParents=new Set;this.oldStructParentMapping=new Map;this.structTreeRoot=null;this.parentTree=null;this.idTree=null;this.roleMap=null;this.classMap=null;this.namespaces=null;this.structTreeAF=null;this.structTreePronunciationLexicon=[];this.acroForm=null;this.acroFormDefaultAppearance="";this.acroFormDefaultResources=null;this.acroFormQ=0;this.hasSignatureAnnotations=!1;this.fieldToParent=new RefMap;this.outline=null;this.embeddedFiles=null}}class XRefWrapper{constructor(e,t){this.entries=e;this._getNewRef=t}getNewTemporaryRef(){return this._getNewRef()}countUpdatesAfter(e){return null}fetchIfRef(e){return e instanceof Ref?this.fetch(e):e}fetch(e){if(!(e instanceof Ref))throw new Error("ref object is not a reference");return this.entries[e.num]}async fetchIfRefAsync(e){return e instanceof Ref?this.fetchAsync(e):e}async fetchAsync(e){return this.fetch(e)}}class PDFEditor{isSingleFile=!1;#tn=null;#an=null;#nn=new Map;currentDocument=null;oldPages=[];newPages=[];xref=[null];xrefWrapper=new XRefWrapper(this.xref,()=>this.newRef);newRefCount=1;namesDict=null;version="1.7";pageLabels=null;namedDestinations=new Map;parentTree=new Map;structTreeKids=[];idTree=new Map;classMap=new Dict;roleMap=new Dict;namespaces=new Map;structTreeAF=[];structTreePronunciationLexicon=[];fields=[];acroFormDefaultAppearance="";acroFormDefaultResources=null;acroFormNeedAppearances=!1;acroFormSigFlags=0;acroFormCalculationOrder=null;acroFormQ=0;outlineItems=null;embeddedFiles=new Map;constructor({useObjectStreams:e=!0,title:t="",author:a=""}={}){[this.rootRef,this.rootDict]=this.newDict;[this.infoRef,this.infoDict]=this.newDict;[this.pagesRef,this.pagesDict]=this.newDict;this.useObjectStreams=e;this.objStreamRefs=e?new Set:null;this.title=t;this.author=a}get newRef(){return Ref.get(this.newRefCount++,0)}get newDict(){const e=this.newRef;return[e,this.xref[e.num]=new Dict]}async#sn(e,t){const a=this.newRef;this.xref[a.num]=await this.#rn(e,!0,t);return a}cloneDict(e){const t=e.clone();t.xref=this.xrefWrapper;return t}async#rn(e,t,a,n=new RefSet){if(e instanceof Ref){const{currentDocument:{fieldToParent:t,oldRefMapping:s}}=this,r=s.get(e);if(r)return r;const i=e;e=await a.fetchAsync(i);const o=s.get(i);if(o)return o;if("number"==typeof e)return e;if(e instanceof BaseStream&&this.#in(e.dict))return this.#on(i,e,a,n);const l=this.newRef;s.put(i,l);let f=!0;if(t.has(i)&&e instanceof Dict){(e=this.cloneDict(e)).delete("Parent");f=!1}this.xref[l.num]=await this.#rn(e,f,a,n);return l}const s=[],{currentDocument:{postponedRefCopies:r}}=this;if(Array.isArray(e)){t&&(e=e.slice());for(let t=0,i=e.length;t<i;t++){const i=e[t]instanceof Ref&&r.get(e[t]);i?i.push(a=>e[t]=a):s.push(this.#rn(e[t],!0,a,n).then(a=>e[t]=a))}await Promise.all(s);return e}let i;if(e instanceof BaseStream){({dict:i}=e=e.getOriginalStream().clone());i.xref=this.xrefWrapper}else if(e instanceof Dict){t&&((e=e.clone()).xref=this.xrefWrapper);i=e}if(i){for(const[e,t]of i.getRawEntries()){const o=t instanceof Ref&&r.get(t);o?o.push(t=>i.set(e,t)):s.push(this.#rn(t,!0,a,n).then(t=>i.set(e,t)))}await Promise.all(s)}return e}#in(e){const t=e.get("Subtype");return isName(t,"Image")||e.has("Length1")||isName(t,"Type1C")||isName(t,"CIDFontType0C")||isName(t,"OpenType")}#ln(e){const t=e.getOriginalStream();t.reset();return t.getBytes()}async#fn(e){const t=[];await writeValue(e,t,null);return t.join("")}#cn(e,t){const a=256,{length:n}=t,s=new MurmurHash3_64;s.update(e);s.update(`#${n}`);if(n<=1024)s.update(t);else{const e=Math.floor((n-a)/3);for(let r=0;r<4;r++){const i=Math.min(r*e,n-a);s.update(t.subarray(i,i+a))}}return s.hexdigest()}async#on(e,t,a,n){const{currentDocument:{oldRefMapping:s,resourceStreamPromises:r}}=this;if(n.has(e))return s.getOrPutComputed(e,()=>this.newRef);const i=e.toString(),o=r.get(i);if(o)return o;const l=new RefSet(n);l.put(e);const f=Promise.resolve().then(async()=>{const n=await this.#rn(t,!0,a,l),r=s.get(e);if(r){this.xref[r.num]=n;return r}const i=await this.#hn(n);s.put(e,i);return i});r.set(i,f);try{return await f}finally{r.get(i)===f&&r.delete(i)}}async#hn(e){const t=await this.#fn(e.dict),a=this.#ln(e),n=this.#cn(t,a),s=this.#nn.getOrInsertComputed(n,makeArr);for(const e of s)if(e.dictStr===t&&isArrayEqual(this.#ln(e.stream),a))return e.ref;const r=this.newRef;this.xref[r.num]=e;s.push({ref:r,dictStr:t,stream:e});return r}async#un(e,t){if(e instanceof Ref){const a=await t.fetchAsync(e);return Array.isArray(a)?a:[e]}return Array.isArray(e)?e:[e]}async#mn(e,t,a,n,s,r,i,o=new RefSet){const{currentDocument:{pagesMap:l,oldRefMapping:f}}=this,c=t.getRaw("Pg");if(c instanceof Ref&&!l.has(c))return null;const h=t.getRaw("K");if(h instanceof Ref&&o.has(h))return null;const u=await this.#un(h,a),m=[],p=[];for(let t of u){const c=t instanceof Ref?t:null;if(c){if(o.has(c))continue;o.put(c);t=await a.fetchAsync(c)}if("number"==typeof t){m.push(t);continue}if(!(t instanceof Dict))continue;const h=t.getRaw("Pg");if(h instanceof Ref&&!l.has(h))continue;const u=t.get("Type");if(!u||isName(u,"StructElem")){let e=!1;if(c&&n.has(c)){if(!isName(t.get("S"),"Link"))continue;e=!0}const l=await this.#mn(c,t,a,n,s,r,i,o);if(l){p.push(m.length);m.push(l);c&&f.put(c,l);e&&this.xref[l.num].setIfName("S","Span")}continue}if(isName(u,"OBJR")){if(!c)continue;const n=t.getRaw("Obj");if(n instanceof Ref&&!f.get(n))continue;const s=f.get(c)||await this.#rn(c,!0,a),r=this.xref[s.num].getRaw("Obj");if(r instanceof Ref){const t=this.xref[r.num];if(t instanceof Dict&&!t.has("StructParent")&&e){const a=this.parentTree.size;this.parentTree.set(a,[f,e]);t.set("StructParent",a)}}m.push(s);continue}if(isName(u,"MCR")){const e=await this.#rn(c||t,!0,a);m.push(e);continue}if(c){const e=await this.#rn(c,!0,a);m.push(e)}}if(0!==u.length&&0===m.length)return null;const d=this.newRef,g=this.xref[d.num]=this.cloneDict(t);g.delete("ID");g.delete("C");g.delete("K");g.delete("P");g.delete("S");await this.#rn(g,!1,a);const b=t.get("C");if(b instanceof Name){const e=r.get(b.name);g.set("C",e?Name.get(e):b)}else if(Array.isArray(b)){const e=[];for(const t of b)if(t instanceof Name){const a=r.get(t.name);e.push(a?Name.get(a):t)}g.set("C",e)}const w=t.get("S");if(w instanceof Name){const e=i.get(w.name);g.set("S",e?Name.get(e):w)}const j=t.get("ID");if("string"==typeof j){const e=stringToPDFString(j,!1),t=s.get(e);g.set("ID",t?stringToAsciiOrUTF16BE(t):j)}let k=g.get("A");if(k){Array.isArray(k)||(k=[k]);for(let e of k){e=this.xrefWrapper.fetchIfRef(e);if(e instanceof Dict&&(isName(e.get("O"),"Table")&&e.has("Headers"))){const t=this.xrefWrapper.fetchIfRef(e.getRaw("Headers"));if(Array.isArray(t))for(let e=0,a=t.length;e<a;e++){const a=this.xrefWrapper.fetchIfRef(t[e]);if("string"!=typeof a)continue;const n=s.get(stringToPDFString(a,!1));n&&(t[e]=n)}}}}for(const e of p){const t=m[e];this.xref[t.num].set("P",d)}1===m.length?g.set("K",m[0]):m.length>1&&g.set("K",m);return d}#pn({document:e,includePages:t,excludePages:a}){if(!e)return[];const compile=e=>{if(!e?.length)return null;const t=new Set,a=[];for(const n of e)Array.isArray(n)?a.push(n):t.add(n);return{indices:t,ranges:a}},matches=(e,{indices:t,ranges:a})=>t.has(e)||a.some(([t,a])=>e>=t&&e<=a),n=compile(t),s=compile(a),r=[];for(let t=0,a=e.numPages;t<a;t++)s&&matches(t,s)||n&&!matches(t,n)||r.push(t);return r}#dn(e){const t=new Array(e.length),a=[],n=[];for(let s=0;s<e.length;s++){const r=e[s];let i;if(r.image)i=t[s]=1;else{if(!r.document){t[s]=0;continue}i=t[s]=this.#pn(r).length}if(!r.pageIndices)if(void 0===r.insertAfter)for(let e=0;e<i;e++)a.push(s);else n.push({i:s,insertAfter:r.insertAfter,count:i})}if(0===n.length)return e;const hasContent=e=>!(!e.document&&!e.image);for(let a=0;a<e.length;a++){const n=e[a];if(hasContent(n)&&n.pageIndices&&n.pageIndices.length<t[a])throw new Error("extractPages: partial pageIndices cannot be combined with insertAfter entries.")}n.sort((e,t)=>e.insertAfter-t.insertAfter||e.i-t.i);if(0===a.length&&e.some(e=>hasContent(e)&&e.pageIndices)){const t=e.slice();let a=-1;for(const t of e)if(hasContent(t)&&t.pageIndices)for(const e of t.pageIndices)e>a&&(a=e);let s=0;for(const{i:e,insertAfter:r,count:i}of n){const n=Math.min(Math.max(r,-1)+s,a);for(let e=0;e<t.length;e++){const a=t[e];hasContent(a)&&a.pageIndices&&!a.pageIndices.every(e=>e<=n)&&(t[e]={...a,pageIndices:a.pageIndices.map(e=>e>n?e+i:e)})}const o=[];for(let e=0;e<i;e++)o.push(n+1+e);const l={...t[e],pageIndices:o};delete l.insertAfter;t[e]=l;s+=i;a+=i}return t}let s=0;for(const{i:e,insertAfter:t,count:r}of n){const n=Math.max(t,-1)+1+s;a.splice(n,0,...new Array(r).fill(e));s+=r}const r=new Array(e.length);for(let e=0;e<a.length;e++){const t=a[e];(r[t]||=[]).push(e)}return e.map((e,t)=>{if(!hasContent(e)||e.pageIndices)return e;const a={...e,pageIndices:r[t]||[]};delete a.insertAfter;return a})}async extractPages(e,t,a,n,s){this.#an=a;e=this.#dn(e);const r=[];let i=0;const reservePageSlot=e=>{if(!Number.isInteger(e)||e<0)throw new Error("extractPages: invalid page index.");if(void 0!==this.oldPages[e])throw new Error("extractPages: overlapping pageIndices.");this.oldPages[e]=null},o=[];t&&(this.#tn={handler:n,task:s,newAnnotationsByPage:getNewAnnotationsMap(t),imagesPromises:AnnotationFactory.generateImages(t.values(),this.xrefWrapper,!0)});const l=[];for(const t of e){const{document:e,image:a,includePages:n,excludePages:s,pageIndices:f}=t;if(a){if(f){i=-1;if(f.length>1)throw new Error("extractPages: too many pageIndices.")}let e;if(f?.length)e=f[0];else if(-1!==i)e=i++;else for(e=0;void 0!==this.oldPages[e];e++);reservePageSlot(e);l.push({image:a,slot:e});continue}if(!e)continue;f&&(i=-1);const c=this.#pn({document:e,includePages:n,excludePages:s});if(f&&f.length>c.length)throw new Error("extractPages: too many pageIndices.");const h=new DocumentData(e);o.push(h);r.push(this.#gn(h));let u=0;for(const t of c){let a;f&&(a=f[u++]);if(void 0===a)if(-1!==i)a=i++;else for(a=0;void 0!==this.oldPages[a];a++);reservePageSlot(a);r.push(e.getPage(t).then(e=>{this.oldPages[a]=new PageData(e,h)}))}}await Promise.all(r);if(0===this.oldPages.length)throw new Error("extractPages: nothing to extract.");const f=new Map,c=new Set;for(let e=0,t=this.oldPages.length;e<t;e++){const t=this.oldPages[e];if(void 0===t)throw new Error("extractPages: sparse pageIndices.");if(t){const{page:e}=t,a=f.get(e)??0;f.set(e,a+1);t.copyLevel=a;c.add(t.documentData.document)}}this.isSingleFile=1===c.size;r.length=0;this.#bn(o);this.#wn(o);this.#jn();for(const e of this.oldPages)e&&r.push(this.#kn(e));await Promise.all(r);this.#yn();this.#qn(o);const h=new Map;for(const e of l)h.set(e.slot,e);const u=h.size>0?this.#vn():null;for(let e=0,t=this.oldPages.length;e<t;e++){const t=h.get(e);this.newPages[e]=t?await this.#Sn(t.image,u):await this.#An(e,null)}this.#xn(o);await this.#Cn(o);await this.#In(o);this.#Fn(o);await this.#Tn(o);return this.writePDF()}async#gn(e){const{document:{pdfManager:t,xref:a}}=e;await Promise.all([t.ensureCatalog("destinations").then(t=>e.destinations=t),t.ensureCatalog("rawPageLabels").then(t=>e.pageLabels=t),t.ensureCatalog("structTreeRoot").then(t=>e.structTreeRoot=t),t.ensureCatalog("acroForm").then(t=>e.acroForm=t),t.ensureCatalog("documentOutlineForEditor").then(t=>e.outline=t),t.ensureCatalog("rawEmbeddedFiles").then(t=>e.embeddedFiles=t)]);const n=e.structTreeRoot;if(n){const t=n.dict,s=t.get("ParentTree");if(s){const t=new NumberTree(s,a);e.parentTree=t.getAll(!0)}const r=t.get("IDTree");if(r){const t=new NameTree(r,a);e.idTree=t.getAll(!0)}e.roleMap=t.get("RoleMap")||null;e.classMap=t.get("ClassMap")||null;let i=t.get("Namespaces")||null;i&&!Array.isArray(i)&&(i=[i]);e.namespaces=i;e.structTreeAF=t.get("AF")||null;e.structTreePronunciationLexicon=t.get("PronunciationLexicon")||null}}async#kn(e){const{page:{xref:t,annotations:a},documentData:{pagesMap:n,destinations:s,usedNamedDestinations:r,fieldToParent:i}}=e;if(!a)return;const o=[];let l=[],f=0,{hasSignatureAnnotations:c}=e.documentData;for(const e of a){const a=f++;o.push(t.fetchIfRefAsync(e).then(async t=>{if(!isName(t.get("Subtype"),"Link")){if(isName(t.get("Subtype"),"Widget")){c||=isName(getInheritableProperty({dict:t,key:"FT"}),"Sig");const a=t.getRaw("Parent")||null;i.put(e,a)}l[a]=e;return}const o=t.get("A");if(o instanceof Dict&&!isName(o.get("S"),"GoTo")){l[a]=e;return}const f=o instanceof Dict?o.get("D"):t.get("Dest");if(f&&(!Array.isArray(f)||f[0]instanceof Ref&&!n.has(f[0]))){if(f instanceof Name||"string"==typeof f){const t=stringToPDFString(f instanceof Name?f.name:f,!0);if(s.has(t)){l[a]=e;r.add(t)}}}else l[a]=e}))}await Promise.all(o);l=l.filter(Boolean);e.annotations=l.length>0?l:null;e.documentData.hasSignatureAnnotations||=c}#qn(e){for(const{postponedRefCopies:t,pagesMap:a}of e)for(const e of a.keys())t.put(e,[])}#xn(e){for(const{postponedRefCopies:t,oldRefMapping:a}of e){for(const[e,n]of t.items()){const t=a.get(e);for(const e of n)e(t)}t.clear()}}#Rn(e,t,a=new RefSet){if(e instanceof Ref){if(!a.has(e)){a.put(e);this.#Rn(this.xref[e.num],t,a)}return}if(Array.isArray(e)){for(const n of e)this.#Rn(n,t,a);return}let n;e instanceof BaseStream?({dict:n}=e):e instanceof Dict&&(n=e);if(n){t(n);for(const e of n.getRawValues())this.#Rn(e,t,a)}}async#Cn(e){let t=0;const{parentTree:a}=this;for(let e=0,n=this.newPages.length;e<n;e++){if(!this.oldPages[e])continue;const{documentData:{parentTree:n,oldRefMapping:s,oldStructParentMapping:r,usedStructParents:i,document:{xref:o}}}=this.oldPages[e];if(!n)continue;const l=this.newPages[e],f=this.xref[l.num],c=new RefSet;c.put(l);this.#Rn(f,e=>{const l=e.get("StructParent")??e.get("StructParents");if("number"!=typeof l)return;i.add(l);let f=n.get(l);const c=f instanceof Ref?f:null;if(c){const e=o.fetch(c);Array.isArray(e)&&(f=e)}Array.isArray(f)&&f.every(e=>null===e)&&(f=null);if(!f){e.has("StructParent")?e.delete("StructParent"):e.delete("StructParents");return}let h=r.get(l);if(void 0===h){h=t++;r.set(l,h);a.set(h,[s,f])}e.has("StructParent")?e.set("StructParent",h):e.set("StructParents",h)},c)}const{structTreeKids:n,idTree:s,classMap:r,roleMap:i,namespaces:o,structTreeAF:l,structTreePronunciationLexicon:f}=this;for(const t of e){const{document:{xref:e},oldRefMapping:a,parentTree:c,usedStructParents:h,structTreeRoot:u,idTree:m,classMap:p,roleMap:d,namespaces:g,structTreeAF:b,structTreePronunciationLexicon:w}=t;if(!u)continue;this.currentDocument=t;const j=new RefSet;for(const[e,t]of c||[])!h.has(e)&&t instanceof Ref&&j.put(t);const k=new Map;for(const[e,t]of m||[]){let a=e;if(s.has(e))for(let t=1;;t++){const n=`${e}_${t}`;if(!s.has(n)){k.set(e,n);a=n;break}}s.set(a,t)}const y=new Map;if(p?.size>0)for(let[t,a]of p){a=await this.#rn(a,!0,e);if(r.has(t))for(let e=1;;e++){const a=`${t}_${e}`;if(!r.has(a)){y.set(t,a);t=a;break}}r.set(t,a)}const q=new Map;if(d?.size>0)for(const[e,t]of d){const a=i.get(e);if(a){if(a!==t)for(let a=1;;a++){const n=`${e}_${a}`;if(!i.has(n)){q.set(e,n);i.set(n,t);break}}}else i.set(e,t)}if(g?.length>0)for(const t of g){const a=await e.fetchIfRefAsync(t);let n=a.get("NS");if(!n||o.has(n))continue;n=stringToPDFString(n,!1);const s=await this.#rn(a,!0,e);o.set(n,s)}if(b)for(const t of b)l.push(await this.#rn(t,!0,e));if(w)for(const t of w)f.push(await this.#rn(t,!0,e));const v=u.dict.getRaw("K");if(!v)continue;const S=await this.#un(v,e);for(let t of S){const s=t instanceof Ref?t:null;t=await e.fetchIfRefAsync(t);if(!(t instanceof Dict))continue;let r=!1;if(s&&j.has(s)){if(!isName(t.get("S"),"Link"))continue;r=!0}const i=await this.#mn(s,t,e,j,k,y,q);if(i){n.push(i);s&&a.put(s,i);r&&this.xref[i.num].setIfName("S","Span")}}for(const[e,t]of m||[]){const n=t instanceof Ref&&a.get(t),r=k.get(e)||e;n?s.set(r,n):s.delete(r)}}for(const[e,[t,n]]of a){if(!n){a.delete(e);continue}if(!Array.isArray(n)){const s=t.get(n);void 0===s?a.delete(e):a.set(e,s);continue}const s=n.map(e=>e instanceof Ref&&t.get(e)||null);0===s.length||s.every(e=>null===e)?a.delete(e):a.set(e,s)}this.currentDocument=null}#bn(e){for(const t of e){if(!t.destinations)continue;const{destinations:e,pagesMap:a}=t,n=t.destinations=new Map;for(const[t,s]of e){const e=s[0],r=e instanceof Ref&&a.get(e);if(r){(r.pointingNamedDestinations||=new Set).add(t);n.set(t,s)}}}}#yn(){const{namedDestinations:e}=this,getUniqueDestinationName=t=>{if(!e.has(t))return t;for(let a=1;;a++){const n=`${t}_${a}`;if(!e.has(n))return n}};for(let t=0,a=this.oldPages.length;t<a;t++){const a=this.oldPages[t];if(!a)continue;const{documentData:{destinations:n,dedupNamedDestinations:s,usedNamedDestinations:r}}=a;let{pointingNamedDestinations:i}=a;if(i){a.pointingNamedDestinations=i=i.intersection(r);for(const a of i){if(!r.has(a))continue;const i=n.get(a).slice();if(!e.has(a)){e.set(a,i);continue}const o=getUniqueDestinationName(`${a}_p${t+1}`);s.set(a,o);e.set(o,i)}}}}#On(e,t){if(0===t.size)return;const fixDestination=(e,a,n)=>{"string"==typeof n&&e.set(a,t.get(stringToPDFString(n,!0))||n)};for(const t of e){const e=this.xref[t.num];if(!isName(e.get("Subtype"),"Link"))continue;const a=e.get("A");if(a instanceof Dict&&a.has("D")){const e=a.get("D");fixDestination(a,"D",e);continue}const n=e.get("Dest");fixDestination(e,"Dest",n)}}#wn(e){const collect=(e,t,a)=>{for(const n of e){"string"==typeof n.dest&&t?.has(n.dest)&&a.add(n.dest);n.items.length>0&&collect(n.items,t,a)}};for(const t of e){const{outline:e,destinations:a,usedNamedDestinations:n}=t;e?.length&&collect(e,a,n)}}#Bn(e,t){const{dest:a,action:n,url:s,unsafeUrl:r,attachment:i,setOCGState:o}=e;if(n||s||r||i||o)return!0;if(!a)return!1;if("string"==typeof a){const e=t.dedupNamedDestinations.get(a)||a;return this.namedDestinations.has(e)}return Array.isArray(a)&&a[0]instanceof Ref&&!!t.oldRefMapping.get(a[0])}#Dn(e,t){const a=[];for(const n of e){const e=this.#Dn(n.items,t),s=this.#Bn(n,t);(s||e.length>0)&&a.push({...n,dest:s?n.dest:null,rawDict:s?n.rawDict:null,items:e,_documentData:t})}return a}#Fn(e){const t=[];for(const a of e){const{outline:e}=a;e?.length&&t.push(...this.#Dn(e,a))}this.outlineItems=t.length>0?t:null}async#Hn(e,t){const{dest:a,rawDict:n}=t,s=t._documentData;if(a){if("string"==typeof a){const t=s.dedupNamedDestinations.get(a)||a;e.set("Dest",stringToAsciiOrUTF16BE(t))}else if(Array.isArray(a)){const t=a.slice();t[0]instanceof Ref&&(t[0]=s.oldRefMapping.get(t[0])||t[0]);e.set("Dest",t)}return}const r=n?.get("A");if(r instanceof Dict){this.currentDocument=s;const t=await this.#sn(r,s.document.xref);this.currentDocument=null;e.set("A",t)}}async#Mn(){const{outlineItems:e}=this;if(!e?.length)return;const[t,a]=this.newDict;a.setIfName("Type","Outlines");const assignRefs=e=>{for(const t of e){[t._ref]=this.newDict;t.items.length>0&&assignRefs(t.items)}};assignRefs(e);const fillItems=async(e,t)=>{let a=0;for(let n=0;n<e.length;n++){const s=e[n],r=this.xref[s._ref.num];r.set("Title",stringToAsciiOrUTF16BE(s.title));r.set("Parent",t);n>0&&r.set("Prev",e[n-1]._ref);n<e.length-1&&r.set("Next",e[n+1]._ref);if(s.items.length>0){r.set("First",s.items[0]._ref);r.set("Last",s.items.at(-1)._ref);const e=await fillItems(s.items,s._ref);void 0!==s.count&&r.set("Count",s.count<0?-e:e);a+=void 0!==s.count&&s.count<0?1:e+1}else a+=1;await this.#Hn(r,s);const i=(s.bold?2:0)|(s.italic?1:0);0!==i&&r.set("F",i);!s.color||0===s.color[0]&&0===s.color[1]&&0===s.color[2]||r.set("C",[s.color[0]/255,s.color[1]/255,s.color[2]/255])}return a},n=await fillItems(e,t);a.set("First",e[0]._ref);a.set("Last",e.at(-1)._ref);a.set("Count",n);this.rootDict.set("Outlines",t)}async#In(e){this.#Nn(e);this.#Pn(e);this.#En(e);await this.#_n(e);const t=this.fields;for(const a of e){let e=a.acroForm?.get("Fields")||null;!e&&a.fieldToParent.size>0&&(e=this.#zn(a.fieldToParent,a.document.xref));if(Array.isArray(e)&&e.length>0){this.currentDocument=a;await this.#Ln(t,e);this.currentDocument=null}}this.#Un(e)}#En(e){let t=0,a=null;for(const n of e){const e=n.acroForm?.get("Q");if("number"==typeof e&&0!==e)if(a?.acroFormQ>0)n.acroFormQ=e;else if(0!==t){if(e!==t){a.acroFormQ||=t;n.acroFormQ=e;t=0}}else{t=e;a=n}}t>0&&(this.acroFormQ=t)}#Nn(e){let t=0,a=!1;for(const n of e){if(!n.acroForm)continue;const e=n.acroForm.get("SigFlags");"number"==typeof e&&n.hasSignatureAnnotations&&(t|=e);!0===n.acroForm.get("NeedAppearances")&&(a=!0)}this.acroFormSigFlags=t;this.acroFormNeedAppearances=a}#Un(e){const t=[];for(const a of e){const e=a.acroForm?.get("CO")||null;if(!Array.isArray(e))continue;const{oldRefMapping:n}=a;for(const a of e){const e=a instanceof Ref&&n.get(a);e&&t.push(e)}}this.acroFormCalculationOrder=t.length>0?t:null}#Pn(e){let t=null,a=null;for(const n of e){const e=n.acroForm?.get("DA")||null;if(e&&"string"==typeof e)if(a?.acroFormDefaultAppearance)n.acroFormDefaultAppearance=e;else if(t){if(e!==t){a.acroFormDefaultAppearance||=t;n.acroFormDefaultAppearance=e;t=null}}else{t=e;a=n}}t&&(this.acroFormDefaultAppearance=t)}async#_n(e){let t=null,a=null,n=null;for(const s of e){const e=s.acroForm?.get("DR")||null;if(e&&e instanceof Dict)if(n?.acroFormDefaultResources)s.acroFormDefaultResources=e;else if(t){if(!deepCompare(t,e)){n.acroFormDefaultResources||=t;s.acroFormDefaultResources=e;t=null;a=null}}else{t=e;a=s.acroForm.getRaw("DR");n=s}}if(t){this.currentDocument=n;this.acroFormDefaultResources=await this.#rn(a,!0,n.document.xref);this.currentDocument=null}}#zn(e,t){const a=[],n=new RefSet;for(const[s,r]of e.items()){if(!r){a.push(s);continue}let e=r,i=r;const o=new RefSet;for(;;){if(e instanceof Ref){if(o.has(e))break;o.put(e)}const a=t.fetchIfRef(e);if(!(a instanceof Dict))break;e=a.getRaw("Parent")||null;if(!e)break;i=e}if(i instanceof Ref&&!n.has(i)){a.push(i);n.put(i)}}return a}async#Ln(e,t){const a=new RefSet,n=[{kids:t,newKids:e,pos:0,oldParentRef:null,parentRef:null,parent:null}],{document:{xref:s},oldRefMapping:r,fieldToParent:i,acroFormDefaultAppearance:o,acroFormDefaultResources:l,acroFormQ:f}=this.currentDocument,c=[],h=[];for(;n.length>0;){const e=n.at(-1),{kids:t,newKids:u,parent:m,pos:p}=e;if(p===t.length){n.pop();if(0===u.length||!m)continue;const t=this.xref[e.parentRef.num]=this.cloneDict(m);t.delete("Parent");t.delete("Kids");await this.#rn(t,!1,s);t.set("Kids",u);if(n.length>0){const a=n.at(-1);if(!a.parentRef&&a.oldParentRef){const e=a.parentRef=this.newRef;t.set("Parent",e);r.put(a.oldParentRef,e)}a.newKids.push(e.parentRef)}continue}const d=t[e.pos++];if(!(d instanceof Ref)||a.has(d))continue;a.put(d);const g=s.fetchIfRef(d);if(!(g instanceof Dict))continue;if(g.has("Kids")){const e=g.get("Kids");if(!Array.isArray(e))continue;n.push({kids:e,newKids:[],pos:0,oldParentRef:d,parentRef:null,parent:g});continue}if(!i.has(d))continue;const b=r.get(d);if(!b)continue;u.push(b);if(!e.parentRef&&e.oldParentRef){e.parentRef=this.newRef;r.put(e.oldParentRef,e.parentRef)}const w=this.xref[b.num];e.parentRef&&w.set("Parent",e.parentRef);o&&!w.has("DA")&&c.push(w);l&&!w.has("Kids")&&w.get("AP")instanceof Dict&&h.push(w);f&&!w.has("Q")&&w.set("Q",f)}for(const e of c){if(!isName(getInheritableProperty({dict:e,key:"FT"}),"Tx"))continue;getInheritableProperty({dict:e,key:"DA"})||e.set("DA",o)}const u=new Map,fixAppearanceResources=async e=>{let t=e.dict.getRaw("Resources");t&&=this.xrefWrapper.fetchIfRef(t);if(!(t instanceof Dict)){const t=await u.getOrInsertComputed(l,()=>this.#sn(l,s));e.dict.set("Resources",t);return}for(const[e,a]of l.getRawEntries()){if(t.has(e))continue;let n=a;a instanceof Ref?n=await this.#rn(a,!0,s):(a instanceof Dict||a instanceof BaseStream||Array.isArray(a))&&(n=await u.getOrInsertComputed(a,()=>this.#sn(a,s)));t.set(e,n)}};for(const e of h){const t=e.get("AP");for(const[,e]of t)if(e instanceof BaseStream)await fixAppearanceResources(e);else if(e instanceof Dict)for(const[,t]of e)t instanceof BaseStream&&await fixAppearanceResources(t)}}async#jn(){if(!this.isSingleFile)return;const e=this.oldPages.find(e=>!!e);if(!e)return;const{documentData:{document:t,pageLabels:a}}=e;if(!a)return;const n=t.numPages,s=new Map,r=new Set(this.oldPages.filter(Boolean).map(({page:{pageIndex:e}})=>e));let i=null,o=-1;for(let e=0;e<n;e++){const t=a.get(e);if(t){i=t;o=i.has("St")?e:-1}if(r.has(e)){if(-1!==o){const t=i.get("St");i=this.cloneDict(i);i.set("St",t+(e-o));o=-1}s.set(e,i)}}const defaultLabel=e=>{const t=new Dict;t.setIfName("S","D");t.set("St",e+1);return t};i=null;const l=this.pageLabels=[];for(let e=0,t=this.oldPages.length;e<t;e++){const t=this.oldPages[e],a=t&&s.get(t.page.pageIndex)||defaultLabel(e);if(a!==i){i=a;l.push([e,i])}}}async#An(e){const{page:t,documentData:a,annotations:n,pointingNamedDestinations:s,copyLevel:r}=this.oldPages[e];this.currentDocument=a;const{dedupNamedDestinations:i,oldRefMapping:o}=a,{xref:l,rotate:f,mediaBox:c,resources:h,ref:u}=t,m=this.newRef,p=this.xref[m.num]=this.cloneDict(t.pageDict);o.put(u,m);if(s)for(const e of s){const t=i.get(e)||e;this.namedDestinations.get(t)[0]=m}for(const e of["Rotate","MediaBox","CropBox","BleedBox","TrimBox","ArtBox","Resources","Annots","Parent","UserUnit"])p.delete(e);const d=this.newRefCount;await this.#rn(p,!1,l);p.set("Rotate",f);p.set("MediaBox",c);for(const e of["CropBox","BleedBox","TrimBox","ArtBox"]){const a=t.getBoundingBox(e);a?.some((e,t)=>e!==c[t])&&p.set(e,a)}const g=t.userUnit;1!==g&&p.set("UserUnit",g);p.setIfDict("Resources",await this.#rn(h,!0,l));let b=null;if(n){const e=await this.#rn(n,!0,l);this.#On(e,i);Array.isArray(e)&&e.length>0&&(b=e)}const w=a.document===this.#an?this.#tn?.newAnnotationsByPage?.get(t.pageIndex)?.filter(({copyLevel:e})=>(e??0)===r):null;if(w?.length){const{handler:e,task:a,imagesPromises:n}=this.#tn,s=new RefMap,r=await AnnotationFactory.saveNewAnnotations(t._createPartialEvaluator(e),this.xrefWrapper,a,w,n,s);for(const[e,{data:t}]of s.items())this.xref[e.num]=t;b||=[];for(const{ref:e}of r.annotations)b.push(e)}p.setIfArray("Annots",b);if(this.useObjectStreams){const e=this.newRefCount,t=[];for(let a=d;a<e;a++){this.xref[a]instanceof BaseStream||t.push(Ref.get(a,0))}for(let e=0;e<t.length;e+=65535){const a=this.newRef;this.objStreamRefs.add(a.num);this.xref[a.num]=t.slice(e,e+65535)}}this.currentDocument=null;return m}#vn(){const e=new Map;for(const t of this.oldPages){if(!t)continue;const{page:a}=t,[n,s,r,i]=a.view;let o=r-n,l=i-s;if(o<=0||l<=0)continue;a.rotate%180!=0&&([o,l]=[l,o]);const f=`${o}x${l}`,c=e.get(f);c?c.count++:e.set(f,{width:o,height:l,count:1})}if(0===e.size){const[,,e,t]=Rf;return{width:e,height:t}}let t=null;for(const a of e.values())(!t||a.count>t.count||a.count===t.count&&a.width*a.height>t.width*t.height)&&(t=a);return{width:t.width,height:t.height}}async#Sn(e,t){const{width:a,height:n}=t,s=.1*a,r=Math.max(1,a-2*s),i=Math.max(1,n-2*s),o=this.newRefCount,{imageStream:l,smaskStream:f,width:c,height:h}=await createImage(e,this.xrefWrapper,{closeBitmap:!0}),u=Math.min(r/c,i/h),m=c*u,p=h*u,d=(a-m)/2,g=(n-p)/2;if(f){const e=this.newRef;this.xref[e.num]=f;l.dict.set("SMask",e)}const b=this.newRef;this.xref[b.num]=l;const w=new Dict(this.xrefWrapper);w.set("Im0",b);const j=new Dict(this.xrefWrapper);j.set("XObject",w);j.set("ProcSet",[Name.get("PDF"),Name.get("ImageC")]);const k=`q ${numberToString(m)} 0 0 ${numberToString(p)} ${numberToString(d)} ${numberToString(g)} cm /Im0 Do Q`,y=new StringStream(k,new Dict(this.xrefWrapper)),q=this.newRef;this.xref[q.num]=y;const v=this.newRef,S=this.xref[v.num]=new Dict(this.xrefWrapper);S.setIfName("Type","Page");S.set("MediaBox",[0,0,a,n]);S.set("Resources",j);S.set("Contents",q);if(this.useObjectStreams){const e=this.newRefCount,t=[];for(let a=o;a<e;a++){this.xref[a]instanceof BaseStream||t.push(Ref.get(a,0))}for(let e=0;e<t.length;e+=65535){const a=this.newRef;this.objStreamRefs.add(a.num);this.xref[a.num]=t.slice(e,e+65535)}}return v}#Wn(){const{newPages:e,rootDict:t,pagesRef:a,pagesDict:n}=this;t.set("Pages",a);n.setIfName("Type","Pages");n.set("Count",e.length);const s=[{dict:n,kids:e,parentRef:a}];for(;s.length>0;){const{dict:e,kids:t,parentRef:a}=s.pop();if(t.length<=16){e.set("Kids",t);for(const e of t)this.xref[e.num].set("Parent",a);continue}const n=Math.max(16,Math.ceil(t.length/16)),r=[];for(let e=0;e<t.length;e+=n)r.push(t.slice(e,e+n));const i=[];e.set("Kids",i);for(const e of r){const[t,n]=this.newDict;i.push(t);n.setIfName("Type","Pages");n.set("Parent",a);n.set("Count",e.length);s.push({dict:n,kids:e,parentRef:t})}}}#Xn(e,t){const a=e.sort(t?([e],[t])=>e<t?-1:e>t?1:0:([e],[t])=>e-t),[n,s]=this.newDict,r=[{dict:s,entries:a,isRoot:!0}],i=t?"Names":"Nums";for(;r.length>0;){const{dict:e,entries:t,isRoot:a}=r.pop();if(t.length<=64){a||e.set("Limits",[t[0][0],t.at(-1)[0]]);e.set(i,t.flat());continue}const n=[],s=Math.max(64,Math.ceil(t.length/64));for(let e=0;e<t.length;e+=s)n.push(t.slice(e,e+s));const o=[];e.set("Kids",o);for(const e of n){const[t,a]=this.newDict;o.push(t);a.set("Limits",[e[0][0],e.at(-1)[0]]);r.push({dict:a,entries:e})}}return n}#Kn(){const{pageLabels:e}=this;if(!e?.length)return;const{rootDict:t}=this,a=this.#Xn(this.pageLabels,!1);t.set("PageLabels",a)}async#Tn(e){const{embeddedFiles:t}=this;for(const a of e){const{embeddedFiles:e,document:{xref:n}}=a;if(e?.size){this.currentDocument=a;for(const[a,s]of e){let e=a;if(t.has(e)){const n=stringToPDFString(a,!0);for(let a=1;;a++){const s=stringToAsciiOrUTF16BE(`${n}_${a}`);if(!t.has(s)){e=s;break}}}t.set(e,await this.#rn(s,!0,n))}this.currentDocument=null}}}#Gn(){const{embeddedFiles:e}=this;if(0!==e.size){if(!this.namesDict){[this.namesRef,this.namesDict]=this.newDict;this.rootDict.set("Names",this.namesRef)}this.namesDict.set("EmbeddedFiles",this.#Xn(Array.from(e.entries()),!0))}}#Vn(){const{namedDestinations:e}=this;if(0!==e.size){if(!this.namesDict){[this.namesRef,this.namesDict]=this.newDict;this.rootDict.set("Names",this.namesRef)}this.namesDict.set("Dests",this.#Xn(Array.from(e,([e,t])=>[stringToAsciiOrUTF16BE(e),t]),!0))}}#$n(){const{structTreeKids:e}=this;if(!e?.length)return;const{rootDict:t}=this,a=this.newRef,n=this.xref[a.num]=new Dict;n.setIfName("Type","StructTreeRoot");n.setIfArray("K",e);for(const t of e){const e=this.xref[t.num],n=e.get("Type");n&&!isName(n,"StructElem")||e.set("P",a)}if(this.parentTree.size>0){const e=this.#Xn(Array.from(this.parentTree.entries()),!1);this.xref[e.num].setIfName("Type","ParentTree");n.set("ParentTree",e);let t=0;for(const e of this.parentTree.keys())t=Math.max(t,e+1);n.set("ParentTreeNextKey",t)}if(this.idTree.size>0){const e=this.#Xn(Array.from(this.idTree.entries()),!0);this.xref[e.num].setIfName("Type","IDTree");n.set("IDTree",e)}if(this.classMap.size>0){const e=this.newRef;this.xref[e.num]=this.classMap;n.set("ClassMap",e)}if(this.roleMap.size>0){const e=this.newRef;this.xref[e.num]=this.roleMap;n.set("RoleMap",e)}if(this.namespaces.size>0){const e=this.newRef;this.xref[e.num]=Array.from(this.namespaces.values());n.set("Namespaces",e)}if(this.structTreeAF.length>0){const e=this.newRef;this.xref[e.num]=this.structTreeAF;n.set("AF",e)}if(this.structTreePronunciationLexicon.length>0){const e=this.newRef;this.xref[e.num]=this.structTreePronunciationLexicon;n.set("PronunciationLexicon",e)}t.set("StructTreeRoot",a)}#Yn(){if(0===this.fields.length)return;const{rootDict:e}=this,t=this.newRef,a=this.xref[t.num]=new Dict;e.set("AcroForm",t);a.set("Fields",this.fields);this.acroFormNeedAppearances&&a.set("NeedAppearances",!0);this.acroFormSigFlags>0&&a.set("SigFlags",this.acroFormSigFlags);a.setIfArray("CO",this.acroFormCalculationOrder);a.setIfDefined("DR",this.acroFormDefaultResources);this.acroFormDefaultAppearance&&a.set("DA",this.acroFormDefaultAppearance);this.acroFormQ>0&&a.set("Q",this.acroFormQ)}async#Jn(){const{rootDict:e}=this;e.setIfName("Type","Catalog");e.setIfName("Version",this.version);this.#Yn();this.#Wn();this.#Kn();this.#Gn();this.#Vn();this.#$n();await this.#Mn()}#Qn(){const e=new Map;if(this.isSingleFile){const t=this.oldPages.find(e=>!!e),{xref:{trailer:a}}=t.documentData.document,n=a.get("Info");for(const[t,a]of n||[])"string"==typeof a&&e.set(t,stringToPDFString(a))}e.delete("ModDate");e.set("CreationDate",getModificationDate());e.set("Creator","PDF.js");e.set("Producer","Firefox");this.author&&e.set("Author",this.author);this.title&&e.set("Title",this.title);for(const[t,a]of e)this.infoDict.set(t,stringToAsciiOrUTF16BE(a));return e}async#Zn(){if(!this.isSingleFile)return[null,null,null];const e=this.oldPages.find(e=>!!e),{documentData:t}=e,{document:{xref:{trailer:a,encrypt:n}}}=t;if(!a.has("Encrypt"))return[null,null,null];const s=a.get("Encrypt");if(!(s instanceof Dict))return[null,null,null];this.currentDocument=t;const r=[await this.#sn(s,a.xref),n,a.get("ID")];this.currentDocument=null;return r}async#es(){const e=new RefMap;e.put(Ref.get(0,65535),{data:null});for(let t=1,a=this.xref.length;t<a;t++)this.objStreamRefs?.has(t)?await this.#ts(Ref.get(t,0),this.xref[t],e):e.put(Ref.get(t,0),{data:this.xref[t]});return[e,this.newRef]}async#ts(e,t,a){const n=[""],s=[];let r=0;const i=[];for(let o=0,l=t.length;o<l;o++){const l=t[o];a.put(l,{data:null,objStreamRef:e,index:o});s.push(`${l.num} ${r}`);const f=this.xref[l.num];await writeValue(f,i,null);const c=i.join("");i.length=0;n.push(c);r+=c.length+1}n[0]=s.join("\n");const o=new Dict;o.setIfName("Type","ObjStm");o.set("N",t.length);o.set("First",n[0].length+1);const l=new StringStream(n.join("\n"),o);a.put(e,{data:l})}async writePDF(){await this.#Jn();const e=this.#Qn(),[t,a,n]=await this.#Zn(),[s,r]=await this.#es();return incrementalUpdate({originalData:stringToBytes(`%PDF-${this.version}\n%úÞúÎ`),changes:s,xrefInfo:{startXRef:null,rootRef:this.rootRef,infoRef:this.infoRef,encryptRef:t,newRef:r,fileIds:n||[null,null],infoMap:e},useXrefStream:this.useObjectStreams,xref:{encrypt:a,encryptRef:t}})}}class BasePDFStream{#as=null;#ns=null;_fullReader=null;_rangeReaders=new Set;_source=null;constructor(e,t,a){this._source=e;this.#as=t;this.#ns=a}get _progressiveDataLength(){return this._fullReader?._loaded??0}getFullReader(){assert(!this._fullReader,"BasePDFStream.getFullReader can only be called once.");return this._fullReader=new this.#as(this)}getRangeReader(e,t){if(t<=this._progressiveDataLength)return null;const a=new this.#ns(this,e,t);this._rangeReaders.add(a);return a}cancelAllRequests(e){this._fullReader?.cancel(e);for(const t of new Set(this._rangeReaders))t.cancel(e)}}class BasePDFStreamReader{onProgress=null;_contentLength=0;_filename=null;_headersCapability=Promise.withResolvers();_isRangeSupported=!1;_isStreamingSupported=!1;_loaded=0;_stream=null;constructor(e){this._stream=e}_callOnProgress(){this.onProgress?.({loaded:this._loaded,total:this._contentLength})}get headersReady(){return this._headersCapability.promise}get filename(){return this._filename}get contentLength(){return this._contentLength}get isRangeSupported(){return this._isRangeSupported}get isStreamingSupported(){return this._isStreamingSupported}async read(){unreachable("Abstract method `read` called")}cancel(e){unreachable("Abstract method `cancel` called")}}class BasePDFStreamRangeReader{_stream=null;constructor(e,t,a){this._stream=e}async read(){unreachable("Abstract method `read` called")}cancel(e){unreachable("Abstract method `cancel` called")}}class PDFWorkerStream extends BasePDFStream{constructor(e){super(e,PDFWorkerStreamReader,PDFWorkerStreamRangeReader)}}class PDFWorkerStreamReader extends BasePDFStreamReader{_reader=null;constructor(e){super(e);const{msgHandler:t}=e._source,a=t.sendWithStream("GetReader");this._reader=a.getReader();t.sendWithPromise("ReaderHeadersReady").then(e=>{this._contentLength=e.contentLength;this._isStreamingSupported=e.isStreamingSupported;this._isRangeSupported=e.isRangeSupported;this._headersCapability.resolve()},this._headersCapability.reject)}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e.buffer,done:!1}}cancel(e){this._reader.cancel(e)}}class PDFWorkerStreamRangeReader extends BasePDFStreamRangeReader{_reader=null;constructor(e,t,a){super(e,t,a);const{msgHandler:n}=e._source,s=n.sendWithStream("GetRangeReader",{begin:t,end:a});this._reader=s.getReader()}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e.buffer,done:!1}}cancel(e){this._reader.cancel(e)}}class WorkerTask{#ss=Promise.withResolvers();terminated=!1;constructor(e){this.name=e}get finished(){return this.#ss.promise}finish(){this.#ss.resolve()}terminate(){this.terminated=!0}ensureNotTerminated(){if(this.terminated)throw new Error("Worker task was terminated")}}class WorkerMessageHandler{static{"undefined"==typeof window&&!e&&"undefined"!=typeof self&&"function"==typeof self.postMessage&&"onmessage"in self&&this.initializeFromPort(self)}static setup(e,t){e.on("configure",e=>{!function setVerbosityLevel(e){Number.isInteger(e)&&(aa=e)}(e.verbosity)});e.on("GetDocRequest",e=>this.createDocumentHandler(e,t))}static createDocumentHandler(e,t){let a,n=!1,s=null;const r=new Set,{docId:i,apiVersion:o}=e,l="6.4.299";if(o!==l)throw new Error(`The API version "${o}" does not match the Worker version "${l}".`);const buildMsg=(e,t)=>`The \`${e}.prototype\` contains unexpected enumerable property "${t}", thus breaking e.g. \`for...in\` iteration of ${e}s.`;for(const e in{})throw new Error(buildMsg("Object",e));for(const e in[])throw new Error(buildMsg("Array",e));const f=i+"_worker";let c=new MessageHandler(f,i,t);function ensureNotTerminated(){if(n)throw new Error("Worker was terminated")}function startWorkerTask(e){r.add(e)}function finishWorkerTask(e){e.finish();r.delete(e)}async function loadDocument(e){await a.initDocument(e);const t=await a.ensureDoc("isPureXfa");if(t){const e=new WorkerTask("loadXfaResources");startWorkerTask(e);await a.ensureDoc("loadXfaResources",[c,e]);finishWorkerTask(e)}const[n,s]=await Promise.all([a.ensureDoc("numPages"),a.ensureDoc("fingerprints")]);return{numPages:n,fingerprints:s,htmlForXfa:t?await a.ensureDoc("htmlForXfa"):null}}async function getPassword(e){const t=new WorkerTask(`PasswordException: response ${e.code}`);startWorkerTask(t);try{return(await c.sendWithPromise("PasswordRequest",e)).password}finally{Promise.resolve().then(()=>{finishWorkerTask(t)})}}function setupDoc(e){function onSuccess(e){ensureNotTerminated();c.send("GetDoc",{pdfInfo:e})}function onFailure(e){n||(e instanceof PasswordException?getPassword(e).then(e=>{a.updatePassword(e);pdfManagerReady()}).catch(()=>{c.send("DocException",e)}):c.send("DocException",wrapReason(e)))}function pdfManagerReady(){ensureNotTerminated();loadDocument(!1).then(onSuccess,function(e){ensureNotTerminated();e instanceof XRefParseException?a.requestLoadedStream().then(function(){ensureNotTerminated();loadDocument(!0).then(onSuccess,onFailure)},onFailure):onFailure(e)})}ensureNotTerminated();(async function getPdfManager({data:e,password:t,disableAutoFetch:a,rangeChunkSize:n,docBaseUrl:r,enableXfa:o,evaluatorOptions:l}){const f={source:null,disableAutoFetch:a,docBaseUrl:r,docId:i,enableXfa:o,evaluatorOptions:l,handler:c,length:0,password:t,rangeChunkSize:n};if(e){f.source=e;return new LocalPdfManager(f)}const h=new PDFWorkerStream({msgHandler:c}),u=h.getFullReader(),{promise:m,resolve:p,reject:d}=Promise.withResolvers();let g,b=[];s=e=>h.cancelAllRequests(e);u.headersReady.then(()=>{if(u.isRangeSupported){f.source=h;f.length=u.contentLength;f.disableAutoFetch||=u.isStreamingSupported;g=new NetworkPdfManager(f);for(const e of b)g.sendProgressiveData(e);b=null;p(g);s=null}}).catch(e=>{d(e);s=null});(async function readData(){let e=0;for(;;){const{value:t,done:a}=await u.read();ensureNotTerminated();if(a)break;e+=t.byteLength;u.isStreamingSupported||c.send("DocProgress",{loaded:e,total:u.contentLength});g?g.sendProgressiveData(t):b.push(t)}if(!g){f.source=arrayBuffersToBytes(b);b=null;g=new LocalPdfManager(f);p(g)}s=null})().catch(e=>{d(e);s=null});return m})(e).then(function(e){if(n){e.terminate(new AbortException("Worker was terminated."));throw new Error("Worker was terminated")}a=e;a.requestLoadedStream(!0).then(e=>{c.send("DataLoaded",{length:e.bytes.byteLength})},()=>{})}).then(pdfManagerReady,onFailure)}c.on("GetPage",async function({pageIndex:e}){const t=await a.getPage(e),[n,s,r,i]=await Promise.all([a.ensure(t,"rotate"),a.ensure(t,"ref"),a.ensure(t,"userUnit"),a.ensure(t,"view")]);return{rotate:n,ref:s,refStr:s?.toString()??null,userUnit:r,view:i}});c.on("GetPageIndex",function({num:e,gen:t}){return a.ensureCatalog("getPageIndex",[Ref.get(e,t)])});c.on("GetDestinations",function(){return a.ensureCatalog("destinations")});c.on("GetDestination",function({id:e}){return a.ensureCatalog("getDestination",[e])});c.on("GetPageLabels",function(){return a.ensureCatalog("pageLabels")});c.on("GetPageLayout",function(){return a.ensureCatalog("pageLayout")});c.on("GetPageMode",function(){return a.ensureCatalog("pageMode")});c.on("GetViewerPreferences",function(){return a.ensureCatalog("viewerPreferences")});c.on("GetOpenAction",function(){return a.ensureCatalog("openAction")});c.on("GetAttachments",function(){return a.ensureCatalog("attachments")});c.on("GetAttachmentContent",async function(e){let t;for(;;){const n=t?await getPassword(t):null;try{n&&a.updatePassword(n);return await a.ensureCatalog("attachmentContent",[e])}catch(e){if(e instanceof PasswordException){t=e;continue}throw e}}});c.on("GetDocJSActions",function(){return a.ensureCatalog("jsActions")});c.on("GetPageJSActions",async function({pageIndex:e}){const t=await a.getPage(e);return a.ensure(t,"jsActions")});c.on("GetAnnotationsByType",async function({types:e,pageIndexesToSkip:t}){const[n,s]=await Promise.all([a.ensureDoc("numPages"),a.ensureDoc("annotationGlobals")]);if(!s)return null;const r=[],i=[];let o=null;try{for(let l=0;l<n;l++)if(!t?.has(l)){if(!o){o=new WorkerTask("GetAnnotationsByType");startWorkerTask(o)}r.push(a.getPage(l).then(t=>t.collectAnnotationsByType(c,o,e,i,s)))}await Promise.all(r);return(await Promise.all(i)).filter(Boolean)}finally{o&&finishWorkerTask(o)}});c.on("GetOutline",function(){return a.ensureCatalog("documentOutline")});c.on("GetOptionalContentConfig",function(){return a.ensureCatalog("optionalContentConfig")});c.on("GetPermissions",function(){return a.ensureCatalog("permissions")});c.on("GetMetadata",function(){return Promise.all([a.ensureDoc("documentInfo"),a.ensureCatalog("metadata"),a.ensureCatalog("hasStructTree")])});c.on("GetMarkInfo",function(){return a.ensureCatalog("markInfo")});c.on("GetData",async function(){return(await a.requestLoadedStream()).bytes});c.on("GetAnnotations",async function({pageIndex:e,intent:t}){const n=await a.getPage(e),s=new WorkerTask(`GetAnnotations: page ${e}`);startWorkerTask(s);try{return await n.getAnnotationsData(c,s,t)}finally{finishWorkerTask(s)}});c.on("GetFieldObjects",async function(){const e=await a.ensureDoc("fieldObjects");return e?.allFields||null});c.on("GetSignatures",function(){return a.ensureDoc("signatures")});c.on("GetSignatureData",function(e){return a.ensureDoc("getSignatureData",[e])});c.on("HasJSActions",function(){return a.ensureDoc("hasJSActions")});c.on("GetCalculationOrderIds",function(){return a.ensureDoc("calculationOrderIds")});c.on("ExtractPages",async function({pageInfos:e,annotationStorage:t}){if(!e){warn("extractPages: nothing to extract.");return null}Array.isArray(e)||(e=[e]);let n,s=0;for(const t of e)if(!t.image)if(null===t.document)t.document=a.pdfDocument;else if(ArrayBuffer.isView(t.document)){const e=new LocalPdfManager({source:t.document,docId:`${i}_extractPages_${s++}`,handler:c,password:t.password??null,evaluatorOptions:Object.assign({},a.evaluatorOptions)});let n=!1,r=!0;for(;;)try{await e.requestLoadedStream();await e.initDocument(n);break}catch(t){if(t instanceof XRefParseException){if(!1===n){n=!0;continue}r=!1;warn("extractPages: XRefParseException.")}else if(t instanceof PasswordException)try{const a=await getPassword(t);e.updatePassword(a)}catch{r=!1;warn("extractPages: invalid password.")}else{r=!1;warn("extractPages: invalid document.")}if(!r)break}r||(t.document=null);if(await e.ensureDoc("isPureXfa")){t.document=null;warn("extractPages does not support pure XFA documents.")}else t.document=e.pdfDocument}else warn("extractPages: invalid document.");try{const s=new PDFEditor;n=new WorkerTask(`ExtractPages: ${e.length} page(s)`);startWorkerTask(n);return await s.extractPages(e,t,a.pdfDocument,c,n)}catch(e){warn(`extractPages: "${e}".`);return null}finally{n&&finishWorkerTask(n)}});c.on("SaveDocument",async function({isPureXfa:e,numPages:t,annotationStorage:n,supportsPrintToPDF:s,filename:r}){const i=[a.requestLoadedStream(),a.ensureCatalog("acroForm"),a.ensureCatalog("acroFormRef"),a.ensureDoc("startXRef"),a.ensureDoc("xref"),a.ensureCatalog("structTreeRoot")],o=new RefMap,l=[],f=e?null:getNewAnnotationsMap(n),[h,u,m,p,d,g]=await Promise.all(i),b=d.trailer.getRaw("Root")||null;let w;if(f){g?await g.canUpdateStructTree({pdfManager:a,newAnnotationsByPage:f})&&(w=g):await StructTreeRoot.canCreateStructureTree({catalogRef:b,pdfManager:a,newAnnotationsByPage:f})&&(w=null);const e=AnnotationFactory.generateImages(n.values(),d,a.evaluatorOptions.isOffscreenCanvasSupported),t=void 0===w?l:[];for(const[n,s]of f)t.push(a.getPage(n).then(t=>{const a=new WorkerTask(`Save (editor): page ${n}`);startWorkerTask(a);return t.saveNewAnnotations(c,a,s,e,o).finally(()=>{finishWorkerTask(a)})}));null===w?l.push(Promise.all(t).then(()=>StructTreeRoot.createStructureTree({newAnnotationsByPage:f,xref:d,catalogRef:b,pdfManager:a,changes:o}))):w&&l.push(Promise.all(t).then(()=>w.updateStructureTree({newAnnotationsByPage:f,pdfManager:a,changes:o})))}if(e)l.push(a.ensureDoc("serializeXfaData",[n]));else for(let e=0;e<t;e++)l.push(a.getPage(e).then(function(t){const a=new WorkerTask(`Save: page ${e}`);startWorkerTask(a);return t.save(c,a,n,o).finally(()=>{finishWorkerTask(a)})}));const j=await Promise.all(l);let k=null;if(e){k=j[0];if(!k)return h.bytes}else if(0===o.size)return h.bytes;const y=m&&u instanceof Dict&&o.values().some(e=>e.needAppearances),q=u instanceof Dict&&u.get("XFA")||null;let v=null,S=!1;if(Array.isArray(q)){for(let e=0,t=q.length;e<t;e+=2)if("datasets"===q[e]){v=q[e+1];S=!0}null===v&&(v=d.getNewTemporaryRef())}else q&&warn("Unsupported XFA type.");let x=Object.create(null);if(d.trailer){const e=new Map,t=d.trailer.get("Info")||null;if(t instanceof Dict)for(const[a,n]of t)"string"==typeof n&&e.set(a,stringToPDFString(n));x={rootRef:b,encryptRef:d.trailer.getRaw("Encrypt")||null,newRef:d.getNewTemporaryRef(),infoRef:d.trailer.getRaw("Info")||null,infoMap:e,fileIds:d.trailer.get("ID")||null,startXRef:p,filename:r}}return incrementalUpdate({originalData:h.bytes,xrefInfo:x,changes:o,xref:d,hasXfa:!!q,xfaDatasetsRef:v,hasXfaDatasetsEntry:S,needAppearances:y,acroFormRef:m,acroForm:u,xfaData:k,useXrefStream:isDict(d.topDict,"XRef")}).finally(()=>{d.resetNewTemporaryRef()})});c.on("GetOperatorList",function({pageId:e,pageIndex:t,pageProxyId:n,intent:s,cacheKey:r,annotationStorage:i,modifiedIds:o},l){a.getPage(e).then(function(e){const a=new WorkerTask(`GetOperatorList: page ${t}`);startWorkerTask(a);e.getOperatorList({handler:c,sink:l,task:a,intent:s,cacheKey:r,annotationStorage:i,modifiedIds:o,pageIndex:t,pageProxyId:n}).then(()=>{l.close()},e=>{a.terminated||l.error(e)}).finally(()=>{finishWorkerTask(a)})})});c.on("GetTextContent",function({pageId:e,pageIndex:t,includeMarkedContent:n,disableNormalization:s},r){a.getPage(e).then(function(e){const a=new WorkerTask("GetTextContent: page "+t);startWorkerTask(a);e.extractTextContent({handler:c,task:a,sink:r,includeMarkedContent:n,disableNormalization:s}).then(()=>{r.close()},e=>{a.terminated||r.error(e)}).finally(()=>{finishWorkerTask(a)})})});c.on("GetStructTree",async function({pageIndex:e}){const t=await a.getPage(e);return a.ensure(t,"getStructTree")});c.on("FontFallback",function({id:e}){return a.fontFallback(e,c)});c.on("Cleanup",function(){return a.cleanup(!0)});c.on("Terminate",async function(){n=!0;const e=[];if(a){a.terminate(new AbortException("Worker was terminated."));const t=a.cleanup();e.push(t);a=null}else clearGlobalCaches();s?.(new AbortException("Worker was terminated."));for(const t of r){e.push(t.finished);t.terminate()}await Promise.all(e);c.destroy();c=null});c.on("Ready",function(){setupDoc(e);e=null});return f}static initializeFromPort(e){const t=new MessageHandler("worker","main",e);this.setup(t,e);const a=new Uint8Array;t.send("ready",a,[a.buffer])}}globalThis.pdfjsWorker={WorkerMessageHandler};export{WorkerMessageHandler};
\ No newline at end of file
modified apps/web/src/app/(public)/about/page.tsx +146 −45
@@ -1,55 +1,156 @@
1 import type { Metadata } from "next"; 1 import type { Metadata } from "next";
2 import Link from "next/link"; 2 import Link from "next/link";
3+import { SectionHeading } from "@/components/SectionHeading";
3 4
4 export const metadata: Metadata = { title: "About", alternates: { canonical: "/about" } }; 5 export const metadata: Metadata = { title: "About", alternates: { canonical: "/about" } };
5 6
7+const SECTIONS: Array<{
8+ id: string;
9+ eyebrow: string;
10+ title: string;
11+ body: string[];
12+ aside?: Array<[string, string]>;
13+}> = [
14+ {
15+ id: "mission",
16+ eyebrow: "01 · Mission",
17+ title: "A library of research whose every claim can be checked.",
18+ body: [
19+ "AutoScholar is a research-producing startup and a public library of original working papers produced by an autonomous, auditable AI research workflow. It is not a chatbot, an essay generator or a subscription for spun articles. The product is a steadily growing body of research whose every release carries its own evidence: sources, code, data, build logs and provenance.",
20+ ],
21+ },
22+ {
23+ id: "why",
24+ eyebrow: "02 · Why autonomous research",
25+ title: "Research that is reproducible by construction.",
26+ body: [
27+ "When the entire path from question to manuscript is executed by software under fixed rules, that path can be recorded, hashed and replayed. A reader does not have to trust a narrative; they can inspect the frozen brief, the verified bibliography, the executed code and the gate-by-gate verification that preceded release.",
28+ "The aim is not volume. It is a transparent process whose outputs can be audited far more cheaply than a traditional paper, and corrected or retracted publicly when they are wrong.",
29+ ],
30+ },
31+ {
32+ id: "quality",
33+ eyebrow: "03 · Quality",
34+ title: "Deterministic gates decide, not the model.",
35+ body: [
36+ "Each run passes an independent automated review and then a set of server-side checks that never read the model's own assessment: citation verification against scholarly registries, tracing of every reported number to stored results, data provenance and licences, PDF health and embedded fonts, disclosure statements, review resolution and a scan for secrets. Any hard failure blocks publication.",
37+ ],
38+ aside: [
39+ ["Hard gates", "16"],
40+ ["Human peer review", "none — stated on every paper"],
41+ ["Corrections", "versioned and public"],
42+ ],
43+ },
44+ {
45+ id: "maclustr",
46+ eyebrow: "04 · AutoScholar and MacLustr",
47+ title: "The institution and its compute.",
48+ body: [
49+ "AutoScholar is the research institution. MacLustr is its compute infrastructure: a private cluster of Apple Silicon Macs on which every run executes in its own isolated workspace under a dedicated low-privilege identity. MacLustr is credited on every paper as infrastructure, never as an author.",
50+ ],
51+ },
52+ {
53+ id: "transparency",
54+ eyebrow: "05 · Transparency and limits",
55+ title: "What these papers are, and are not.",
56+ body: [
57+ "AutoScholar working papers are AI-generated preprints. They are not peer reviewed by humans, carry no editorial board, invented authors or affiliations, and are not registered with a DOI agency. Automated review is critique, not validation. We publish no view counts, citation counts or ratings we cannot verify.",
58+ "Research planning, source retrieval, code, analysis, writing and automated review are performed by Claude models accessed through the Anthropic API and orchestrated by AutoScholar's own software with enforced permissions and budgets.",
59+ ],
60+ },
61+ {
62+ id: "founder",
63+ eyebrow: "06 · The founder's role",
64+ title: "One administrator, in the loop where it matters.",
65+ body: [
66+ "AutoScholar is operated by a single founder and administrator. They write the research briefs, set budgets and publication policy, review gate outcomes and quality reports, and can approve, correct or retract any paper. Nothing in the public library is edited by hand: changes go through versioned publication.",
67+ ],
68+ },
69+ {
70+ id: "future",
71+ eyebrow: "07 · Directions",
72+ title: "Where the foundry goes next.",
73+ body: [
74+ "Broader discipline coverage with mode-specific evidence requirements, stronger reproduction (clean re-execution of every analysis across workers), external replication challenges, and richer machine-readable provenance so that other systems can verify AutoScholar papers without trusting AutoScholar.",
75+ ],
76+ },
77+];
78+
6 export default function AboutPage() { 79 export default function AboutPage() {
7 return ( 80 return (
8− <div className="prose-paper mx-auto max-w-3xl"> 81+ <div>
9− <p className="eyebrow" style={{ fontFamily: "var(--font-sans)" }}> 82+ <section className="border-b hairline" style={{ background: "var(--bg-muted)" }}>
10− About 83+ <div className="container-x section-tight">
11− </p> 84+ <div className="max-w-3xl">
12− <h1>AutoScholar.ai</h1> 85+ <p className="eyebrow">About</p>
13− <p> 86+ <h1 className="title-1 mt-2">AutoScholar.ai, an autonomous research foundry</h1>
14− AutoScholar is a research-producing startup and a public library of original working papers produced 87+ <p className="lede mt-4">
15− by an autonomous, auditable AI research workflow. The product is not a chatbot, an essay generator or 88+ From research instructions to verifiable working papers, across every legitimate academic
16− a subscription for spun articles. It is a steadily growing body of research whose every release 89+ discipline.
17− carries its own evidence. 90+ </p>
18− </p> 91+ </div>
19− <h2>What we are</h2> 92+ <nav aria-label="Sections" className="mt-8 flex gap-2 overflow-x-auto pb-1">
20− <p> 93+ {SECTIONS.map((s) => (
21− A one-person founder operation with an automated research pipeline. A single administrator writes 94+ <a key={s.id} href={`#${s.id}`} className="chip no-underline">
22− research instructions, launches runs on our compute infrastructure, and the platform plans, 95+ {s.eyebrow.split("·")[1]?.trim()}
23− investigates the literature, executes analyses or proofs, writes a LaTeX manuscript, subjects it to an 96+ </a>
24− independent automated critical review, rebuilds and verifies the result, and publishes it only when 97+ ))}
25− deterministic quality gates pass. 98+ </nav>
26− </p> 99+ </div>
27− <h2>What we are not</h2> 100+ </section>
28− <ul> 101+ <div className="container-x">
29− <li> 102+ {SECTIONS.map((s, i) => (
30− We are not a journal. AutoScholar working papers are preprints; they are{" "} 103+ <section
31− <strong>not peer reviewed</strong> by humans. 104+ key={s.id}
32− </li> 105+ id={s.id}
33− <li> 106+ aria-labelledby={`${s.id}-h`}
34− We do not have an editorial board, invented authors or academic affiliations. The byline of every 107+ className={`section-tight grid gap-6 lg:grid-cols-12 ${i > 0 ? "border-t hairline" : ""}`}
35− paper is “AutoScholar — AI-generated research”. 108+ >
36− </li> 109+ <div className="lg:col-span-4">
37− <li>We do not register DOIs. Papers are identified by stable AutoScholar working-paper numbers.</li> 110+ <p className="eyebrow">{s.eyebrow}</p>
38− <li>We do not report view counts, citation counts or ratings that we cannot verify.</li> 111+ <h2 id={`${s.id}-h`} className="title-2 mt-2">
39− </ul> 112+ {s.title}
40− <h2>Automation disclosure</h2> 113+ </h2>
41− <p> 114+ </div>
42− Research planning, source retrieval, code, analysis, writing and automated review are performed by 115+ <div className="lg:col-span-7 lg:col-start-6">
43− large language models (Claude, via the Anthropic API) orchestrated by platform software with enforced 116+ <div className="prose-editorial dropcap-off">
44− permissions and budgets. Humans set the research questions, configure policies, review gate outcomes, 117+ {s.body.map((p) => (
45− and can correct or retract any paper. See the <Link href="/methodology">methodology</Link> and{" "} 118+ <p key={p.slice(0, 40)}>{p}</p>
46− <Link href="/transparency">transparency</Link> pages. 119+ ))}
47− </p> 120+ </div>
48− <h2>Infrastructure</h2> 121+ {s.aside && (
49− <p> 122+ <dl className="mt-4 grid grid-cols-3 gap-3 border-t pt-4 hairline">
50− Research is computed on MacLustr, an Apple Silicon research compute infrastructure. See{" "} 123+ {s.aside.map(([k, v]) => (
51− <Link href="/infrastructure">Powered by MacLustr</Link>. 124+ <div key={k}>
52− </p> 125+ <dt className="label">{k}</dt>
126+ <dd className="mt-1 text-sm">{v}</dd>
127+ </div>
128+ ))}
129+ </dl>
130+ )}
131+ {s.id === "quality" && (
132+ <p className="mt-4 text-sm">
133+ <Link href="/transparency">All gates are listed on the transparency page →</Link>
134+ </p>
135+ )}
136+ {s.id === "maclustr" && (
137+ <p className="mt-4 text-sm">
138+ <Link href="/infrastructure">Powered by MacLustr →</Link>
139+ </p>
140+ )}
141+ </div>
142+ </section>
143+ ))}
144+ <section className="section-tight border-t hairline">
145+ <SectionHeading
146+ eyebrow="Read"
147+ title="Start with the methodology"
148+ more={{ href: "/methodology", label: "Methodology" }}
149+ >
150+ The eleven-stage pipeline, research modes and standards, in detail.
151+ </SectionHeading>
152+ </section>
153+ </div>
53 </div> 154 </div>
54 ); 155 );
55 } 156 }
modified apps/web/src/app/(public)/infrastructure/page.tsx +95 −44
@@ -1,57 +1,108 @@
1 import type { Metadata } from "next"; 1 import type { Metadata } from "next";
2+import { ClusterMotif, MacLustrInfrastructure } from "@/components/MacLustrInfrastructure";
3+import { SectionHeading } from "@/components/SectionHeading";
2 4
3 export const metadata: Metadata = { 5 export const metadata: Metadata = {
4 title: "Infrastructure — Powered by MacLustr", 6 title: "Infrastructure — Powered by MacLustr",
5 alternates: { canonical: "/infrastructure" }, 7 alternates: { canonical: "/infrastructure" },
6 }; 8 };
7 9
10+const LAYERS: Array<[string, string, string]> = [
11+ [
12+ "Ingress",
13+ "MacLustr Tunnel",
14+ "Public HTTPS terminates on a gateway and reaches the control plane over an encrypted private link. Worker APIs are never reachable from the public side.",
15+ ],
16+ [
17+ "Control plane",
18+ "Web, API, scheduler",
19+ "PostgreSQL holds projects, frozen instructions, runs, leases, events, artifacts and papers. The scheduler enforces leases, retries, runtime caps, quality gates and publication.",
20+ ],
21+ [
22+ "Workers",
23+ "Apple Silicon nodes",
24+ "Each worker runs as a dedicated low-privilege user, polls the control plane outbound only, and executes one research session at a time in a fresh workspace.",
25+ ],
26+ [
27+ "Sandbox",
28+ "Seatbelt + egress allow-list",
29+ "Commands run under an OS sandbox: writes confined to the workspace, sensitive paths unreadable, network limited to allow-listed scholarly, data and package hosts.",
30+ ],
31+ [
32+ "Artifact store",
33+ "Hashed, versioned, write-once",
34+ "Every file is SHA-256 hashed when written. Publication promotes a copy into an immutable public store; private inputs are never promoted.",
35+ ],
36+];
37+
8 export default function InfrastructurePage() { 38 export default function InfrastructurePage() {
9 return ( 39 return (
10− <div className="mx-auto max-w-3xl"> 40+ <div>
11− <p className="eyebrow">Powered by MacLustr</p> 41+ <section className="border-b hairline" style={{ background: "var(--bg-muted)" }}>
12− <h1 className="serif mt-1 text-3xl font-semibold">Research computed on MacLustr</h1> 42+ <div className="container-x section-tight grid items-center gap-10 lg:grid-cols-12">
13− <p className="muted mt-3 leading-relaxed"> 43+ <div className="max-w-2xl lg:col-span-7">
14− AutoScholar is the research startup. MacLustr is its compute infrastructure: a private cluster of 44+ <p className="eyebrow">Powered by MacLustr</p>
15− Apple Silicon Macs operated as a research compute fabric, with a control plane that schedules work, 45+ <h1 className="title-1 mt-2">Research computed on MacLustr</h1>
16− isolates each study and records what happened. 46+ <p className="lede mt-4">
17− </p> 47+ AutoScholar is the research institution. MacLustr is its compute infrastructure: a private
18− <div className="mt-8 grid gap-4 sm:grid-cols-2"> 48+ cluster of Apple Silicon Macs operated as a research compute fabric, with a control plane that
19− {[ 49+ schedules work, isolates each study and records what happened.
20− [ 50+ </p>
21− "Apple Silicon nodes", 51+ </div>
22− "Research jobs run on Apple Silicon Mac nodes with unified memory, well suited to numerical work, local model inference and LaTeX builds.", 52+ <div className="lg:col-span-5">
23− ], 53+ <ClusterMotif className="mx-auto w-full max-w-sm" />
24− [
25− "Isolated per-run workspaces",
26− "Each run executes under a dedicated low-privilege service identity in a fresh workspace with OS-enforced sandboxing, restricted egress, and time, disk, memory and budget limits.",
27− ],
28− [
29− "Durable scheduling",
30− "A durable queue with leases, heartbeats and fencing tokens means a run survives page reloads, network blips and worker restarts. Expired workers can never publish stale results.",
31− ],
32− [
33− "Evidence first",
34− "Every artifact is hashed and versioned on write. Publication is a separate service the research agent cannot call.",
35− ],
36− ].map(([h, p]) => (
37− <div key={h} className="surface p-5">
38− <h2 className="serif text-lg font-semibold">{h}</h2>
39− <p className="muted mt-2 text-sm leading-relaxed">{p}</p>
40 </div> 54 </div>
41− ))} 55+ </div>
42− </div> 56+ </section>
43− <h2 className="serif mt-12 text-xl font-semibold">What we publish about the infrastructure</h2> 57+
44− <p className="muted mt-2 text-sm leading-relaxed"> 58+ <section className="container-x section-tight" aria-labelledby="arch">
45− We credit MacLustr on every paper and describe its design honestly. We do not publish node names, 59+ <SectionHeading
46− addresses, capacities beyond what is measured, customer information or network topology. Claims about 60+ eyebrow="Architecture"
47− hardware or performance are limited to what the current inventory and measurements support. 61+ title="From the public page to the sandbox"
48− </p> 62+ id="arch"
49− <h2 className="serif mt-10 text-xl font-semibold">Model execution</h2> 63+ tone="sci"
50− <p className="muted mt-2 text-sm leading-relaxed"> 64+ >
51− Research runs use the Claude Agent SDK with API-key authentication. The platform records model 65+ Five layers; each one narrows what the next can do.
52− identifiers, token usage and cost estimates per stage; these appear in each paper’s provenance panel 66+ </SectionHeading>
53− where disclosure is appropriate. 67+ <ol className="mt-8 grid gap-3 md:grid-cols-5">
54− </p> 68+ {LAYERS.map(([k, name, p], i) => (
69+ <li key={k} className="surface relative p-4">
70+ <span className="mono-id">{String(i + 1).padStart(2, "0")}</span>
71+ <p className="label mt-2">{k}</p>
72+ <p className="title-3 mt-1">{name}</p>
73+ <p className="muted mt-2 text-xs leading-relaxed">{p}</p>
74+ </li>
75+ ))}
76+ </ol>
77+ </section>
78+
79+ <section className="container-x section-tight">
80+ <MacLustrInfrastructure full />
81+ </section>
82+
83+ <section
84+ className="container-x section-tight border-t hairline grid gap-10 lg:grid-cols-2"
85+ aria-labelledby="claims"
86+ >
87+ <div>
88+ <h2 id="claims" className="title-2">
89+ What we publish about the infrastructure
90+ </h2>
91+ <p className="muted mt-3 text-sm leading-relaxed">
92+ We credit MacLustr on every paper and describe its design honestly. We do not publish node names,
93+ addresses, capacities beyond what is measured, customer information or network topology. Claims
94+ about hardware or performance are limited to what the current inventory and measurements support.
95+ </p>
96+ </div>
97+ <div>
98+ <h2 className="title-2">Model execution</h2>
99+ <p className="muted mt-3 text-sm leading-relaxed">
100+ Research runs use the Claude Agent SDK with API-key authentication. The platform records model
101+ identifiers, token usage and cost estimates per stage; these appear in each paper's provenance
102+ panel where disclosure is appropriate.
103+ </p>
104+ </div>
105+ </section>
55 </div> 106 </div>
56 ); 107 );
57 } 108 }
modified apps/web/src/app/(public)/layout.tsx +1 −1
@@ -9,7 +9,7 @@ export default function PublicLayout({ children }: { children: ReactNode }) {
9 Skip to content 9 Skip to content
10 </a> 10 </a>
11 <SiteHeader /> 11 <SiteHeader />
12− <main id="main" className="container-x py-10"> 12+ <main id="main" className="min-w-0">
13 {children} 13 {children}
14 </main> 14 </main>
15 <SiteFooter /> 15 <SiteFooter />
modified apps/web/src/app/(public)/legal/privacy/page.tsx +18 −16
@@ -2,22 +2,24 @@ import type { Metadata } from "next";
2 export const metadata: Metadata = { title: "Privacy", alternates: { canonical: "/legal/privacy" } }; 2 export const metadata: Metadata = { title: "Privacy", alternates: { canonical: "/legal/privacy" } };
3 export default function Privacy() { 3 export default function Privacy() {
4 return ( 4 return (
5− <div className="prose-paper mx-auto max-w-3xl"> 5+ <div className="container-x section-tight">
6− <h1>Privacy</h1> 6+ <div className="prose-paper container-reading">
7− <p> 7+ <h1>Privacy</h1>
8− Reading the library requires no account and no cookies for visitors. We keep standard server logs (IP 8+ <p>
9− address, user agent, requested URL, timestamp) for security and operations for a limited period. We do 9+ Reading the library requires no account and no cookies for visitors. We keep standard server logs
10− not use third-party analytics, advertising or tracking. 10+ (IP address, user agent, requested URL, timestamp) for security and operations for a limited period.
11− </p> 11+ We do not use third-party analytics, advertising or tracking.
12− <p> 12+ </p>
13− The private administration area sets a session cookie for its single administrator. Research 13+ <p>
14− instructions, run logs and artifacts are stored privately until a paper is published; published 14+ The private administration area sets a session cookie for its single administrator. Research
15− bundles are public and permanent, with private provenance elements redacted. 15+ instructions, run logs and artifacts are stored privately until a paper is published; published
16− </p> 16+ bundles are public and permanent, with private provenance elements redacted.
17− <p> 17+ </p>
18− Questions about this policy can be sent to the operator through the contact details published on the 18+ <p>
19− About page when available. 19+ Questions about this policy can be sent to the operator through the contact details published on the
20− </p> 20+ About page when available.
21+ </p>
22+ </div>
21 </div> 23 </div>
22 ); 24 );
23 } 25 }
modified apps/web/src/app/(public)/legal/research-disclaimer/page.tsx +25 −22
@@ -5,28 +5,31 @@ export const metadata: Metadata = {
5 }; 5 };
6 export default function Disclaimer() { 6 export default function Disclaimer() {
7 return ( 7 return (
8− <div className="prose-paper mx-auto max-w-3xl"> 8+ <div className="container-x section-tight">
9− <h1>Research and AI disclaimer</h1> 9+ <div className="prose-paper container-reading">
10− <p> 10+ <h1>Research and AI disclaimer</h1>
11− <strong> 11+ <p>
12− Every AutoScholar paper is an AI-generated working paper. It has not been peer reviewed. 12+ <strong>
13− </strong>{" "} 13+ Every AutoScholar paper is an AI-generated working paper. It has not been peer reviewed.
14− It is a preprint produced by an autonomous workflow using large language models, verified by automated 14+ </strong>{" "}
15− checks that test structure, traceability and consistency, not truth. 15+ It is a preprint produced by an autonomous workflow using large language models, verified by
16− </p> 16+ automated checks that test structure, traceability and consistency, not truth.
17− <p> 17+ </p>
18− Nothing on this site is medical, legal, financial or engineering advice. Results may contain errors, 18+ <p>
19− including errors that the automated gates cannot detect. Readers who rely on a result should reproduce 19+ Nothing on this site is medical, legal, financial or engineering advice. Results may contain errors,
20− it from the released code and data and consult qualified humans. 20+ including errors that the automated gates cannot detect. Readers who rely on a result should
21− </p> 21+ reproduce it from the released code and data and consult qualified humans.
22− <p> 22+ </p>
23− No paper carries a DOI, a human author, an institutional affiliation, an ethics approval or a claim of 23+ <p>
24− peer review unless such a fact is explicitly and verifiably stated on the paper page. Any such 24+ No paper carries a DOI, a human author, an institutional affiliation, an ethics approval or a claim
25− statement elsewhere is false. 25+ of peer review unless such a fact is explicitly and verifiably stated on the paper page. Any such
26− </p> 26+ statement elsewhere is false.
27− <p> 27+ </p>
28− MacLustr is credited as compute infrastructure. It is not a coauthor and does not endorse any result. 28+ <p>
29− </p> 29+ MacLustr is credited as compute infrastructure. It is not a coauthor and does not endorse any
30+ result.
31+ </p>
32+ </div>
30 </div> 33 </div>
31 ); 34 );
32 } 35 }
modified apps/web/src/app/(public)/legal/terms/page.tsx +23 −20
@@ -2,26 +2,29 @@ import type { Metadata } from "next";
2 export const metadata: Metadata = { title: "Terms of use", alternates: { canonical: "/legal/terms" } }; 2 export const metadata: Metadata = { title: "Terms of use", alternates: { canonical: "/legal/terms" } };
3 export default function Terms() { 3 export default function Terms() {
4 return ( 4 return (
5− <div className="prose-paper mx-auto max-w-3xl"> 5+ <div className="container-x section-tight">
6− <h1>Terms of use</h1> 6+ <div className="prose-paper container-reading">
7− <p> 7+ <h1>Terms of use</h1>
8− AutoScholar working papers and their accompanying artifacts are provided as is, without warranty of 8+ <p>
9− any kind. Licences for paper text, code and data are stated separately on each paper page when they 9+ AutoScholar working papers and their accompanying artifacts are provided as is, without warranty of
10− were part of the research; where no licence is stated, all rights are reserved. 10+ any kind. Licences for paper text, code and data are stated separately on each paper page when they
11− </p> 11+ were part of the research; where no licence is stated, all rights are reserved.
12− <p> 12+ </p>
13− You may read, download and cite papers. Citation guidance is provided on each paper page. You may not 13+ <p>
14− misrepresent an AutoScholar working paper as a peer-reviewed publication or as the work of a human 14+ You may read, download and cite papers. Citation guidance is provided on each paper page. You may
15− author. 15+ not misrepresent an AutoScholar working paper as a peer-reviewed publication or as the work of a
16− </p> 16+ human author.
17− <p> 17+ </p>
18− The site, its API and its feeds may be rate-limited. Automated access must respect robots directives. 18+ <p>
19− We may correct or retract papers at any time; corrections and retractions are public and permanent. 19+ The site, its API and its feeds may be rate-limited. Automated access must respect robots
20− </p> 20+ directives. We may correct or retract papers at any time; corrections and retractions are public and
21− <p> 21+ permanent.
22− These terms do not create any legal guarantee of accuracy, fitness for a purpose or regulatory 22+ </p>
23− compliance. 23+ <p>
24− </p> 24+ These terms do not create any legal guarantee of accuracy, fitness for a purpose or regulatory
25+ compliance.
26+ </p>
27+ </div>
25 </div> 28 </div>
26 ); 29 );
27 } 30 }
modified apps/web/src/app/(public)/methodology/page.tsx +113 −60
@@ -1,72 +1,125 @@
1−import { STAGES } from "@autoscholar/schemas"; 1+import { RESEARCH_MODE_LABELS } from "@autoscholar/schemas";
2 import type { Metadata } from "next"; 2 import type { Metadata } from "next";
3+import Link from "next/link";
4+import { ResearchPipeline } from "@/components/ResearchPipeline";
5+import { SectionHeading } from "@/components/SectionHeading";
3 6
4 export const metadata: Metadata = { title: "Methodology", alternates: { canonical: "/methodology" } }; 7 export const metadata: Metadata = { title: "Methodology", alternates: { canonical: "/methodology" } };
5 8
6−const DETAILS: Record<string, string> = { 9+const MODES: Record<string, string> = {
7− preflight: 10+ empirical:
8− "The frozen research instruction is parsed; scientific scope, feasibility, restricted or regulated activities, missing inputs and budgets are assessed. Unsafe or impossible studies are rejected with reasons.", 11+ "Real, licensed data with provenance; executed analysis; robustness checks; every reported number traced.",
9− framing: 12+ computational:
10− "A precise question, hypotheses or propositions, the intended contribution and a discipline-appropriate methodology are recorded, with evaluation criteria fixed before any test is run and honest null-result pathways identified.", 13+ "Executable benchmark with baselines, seeds and ablations; logs and metrics regenerable by script.",
11− literature: 14+ theoretical: "Formal statements, complete derivations or proofs, and a documented counterexample search.",
12− "Real scholarly registries (Crossref, OpenAlex, arXiv, PubMed, Semantic Scholar as applicable) are searched. Each reference is verified by identifier before it can be cited; a claim-to-source map is built. No reference is cited merely because a model believes it exists.",
13− design:
14− "Depending on the mode: genuine, legally usable data with documented provenance and licence; formal definitions and planned derivations; benchmark environments with baselines, seeds and leakage controls; or a search protocol with inclusion criteria. Synthetic simulations are labelled as synthetic.",
15− execute:
16− "Real code, experiments, simulations, formal checks or substantive qualitative work are executed in an isolated workspace. Environment, versions, seeds, commands and outputs are logged, including failures and negative findings.",
17− robustness:
18− "Sensitivity analyses, alternative specifications, stronger baselines, stress tests, proof checks or counterexample searches are run, and results that weaken the contribution are reported.",
19− manuscript:
20− "A LaTeX manuscript is generated from the recorded results with a real BibTeX database; every reported number must derive from stored artifacts.",
21 review: 15 review:
22− "A separate review context that did not author the manuscript critiques novelty, validity, evidence, mathematics, statistics, references, ethics and writing. A response-to-review document records revisions. This is automated critique, not human peer review.", 16+ "Search strings, dates and counts; screening records; a verified bibliography of at least ten sources.",
23− reproduction: 17+ experimental:
24− "Scripts are re-executed and the PDF is rebuilt in a clean environment. Tables, figures, arithmetic, citation identifiers, fonts and build health are checked; representative pages are inspected.", 18+ "Protocol, observed-versus-synthetic labelling and uncertainty; human approval before release.",
25− quality: 19+ humanities: "Primary-source provenance and quoted evidence with locators for interpretive claims.",
26− "Deterministic gates run on the control plane, independent of the authoring model. A hard failure blocks publication regardless of any review score.",
27− publication:
28− "A permanent paper number is allocated, artifacts are promoted with their digests, and the paper, feed and sitemap are updated transactionally. Automatic release requires every hard gate to pass; sensitive modes require human approval.",
29 }; 20 };
30 21
31 export default function MethodologyPage() { 22 export default function MethodologyPage() {
32 return ( 23 return (
33− <div className="mx-auto max-w-3xl"> 24+ <div>
34− <p className="eyebrow">Methodology</p> 25+ <section className="border-b hairline" style={{ background: "var(--bg-muted)" }}>
35− <h1 className="serif mt-1 text-3xl font-semibold">How a working paper is produced</h1> 26+ <div className="container-x section-tight">
36− <p className="muted mt-3"> 27+ <div className="max-w-3xl">
37− Production is a durable state machine of stages with evidence requirements, not a single enormous 28+ <p className="eyebrow">Methodology</p>
38− prompt and not a cast of fictional named agents. The platform policy controls permissions, sandboxes, 29+ <h1 className="title-1 mt-2">How a working paper is produced</h1>
39− budgets and publication; the uploaded research instruction controls only the academic task. 30+ <p className="lede mt-4">
40− </p> 31+ Production is a durable state machine of stages with evidence requirements. Research runs on an
41− <ol className="mt-8 space-y-6"> 32+ isolated worker; verification and publication are decided on the control plane by deterministic
42− {STAGES.map((s) => ( 33+ gates.
43− <li key={s.key} className="grid gap-2 border-t pt-4 hairline sm:grid-cols-[4rem_1fr]"> 34+ </p>
44− <span className="font-mono text-sm subtle">Stage {s.index}</span> 35+ </div>
45− <div> 36+ <ul className="mt-8 grid gap-3 sm:grid-cols-3">
46− <h2 className="serif text-lg font-semibold">{s.name}</h2> 37+ {[
47− <p className="muted mt-1 text-sm leading-relaxed">{DETAILS[s.key]}</p> 38+ [
48− </div> 39+ "Two halves",
49− </li> 40+ "Stages 0–8 run on a MacLustr worker in a sandbox; 9–10 run on the control plane.",
50− ))} 41+ ],
51− </ol> 42+ [
52− <h2 className="serif mt-12 text-xl font-semibold">Research modes</h2> 43+ "Fixed policy",
53− <p className="muted mt-2 text-sm"> 44+ "Permissions, budgets and publishing are platform policy. The uploaded brief controls only the science.",
54− Empirical, computational, theoretical, review, experimental and humanities modes each carry their own 45+ ],
55− required artifacts and checks. Mixed-mode studies are allowed; a template never forces an experiment 46+ [
56− or a dataset that does not belong. Human participants, clinical interventions or biosafety-relevant 47+ "Evidence, not prose",
57− work are out of scope unless documented approvals exist; otherwise work is restricted to lawful 48+ "Each stage must leave specific artifacts behind. Missing evidence blocks publication.",
58− literature, public data, mathematics and simulations. 49+ ],
59− </p> 50+ ].map(([h, p]) => (
60− <h2 className="serif mt-10 text-xl font-semibold">Research standards</h2> 51+ <li key={h} className="surface p-4">
61− <ul className="muted mt-2 list-disc space-y-1 pl-5 text-sm"> 52+ <p className="title-3">{h}</p>
62− <li>Length is not quality. A concise correct result outranks a long decorated one.</li> 53+ <p className="muted mt-1 text-sm leading-relaxed">{p}</p>
63− <li> 54+ </li>
64− No invented references, datasets, results, proofs, significance, approvals, affiliations, identities 55+ ))}
65− or reproducibility claims. 56+ </ul>
66− </li> 57+ </div>
67− <li>No silent re-specification until a desired p-value appears; negative findings are preserved.</li> 58+ </section>
68− <li>All external content is untrusted data; it cannot alter platform rules.</li> 59+
69− </ul> 60+ <section className="container-x section-tight" aria-labelledby="stages">
61+ <SectionHeading eyebrow="Pipeline" title="Eleven stages" id="stages">
62+ Open any stage for its inputs, outputs and verification requirements.
63+ </SectionHeading>
64+ <div className="mt-8 max-w-3xl">
65+ <ResearchPipeline expandFirst />
66+ </div>
67+ </section>
68+
69+ <section className="container-x section-tight border-t hairline" aria-labelledby="modes">
70+ <SectionHeading
71+ eyebrow="Research modes"
72+ title="Methodology follows the question"
73+ id="modes"
74+ tone="sci"
75+ >
76+ Each mode carries its own required artifacts and checks. Mixed-mode studies are allowed; a template
77+ never forces an experiment or a dataset that does not belong.
78+ </SectionHeading>
79+ <ul className="mt-8 grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
80+ {Object.entries(RESEARCH_MODE_LABELS).map(([k, label]) => (
81+ <li key={k} className="surface p-5">
82+ <p className="title-3">{label}</p>
83+ <p className="muted mt-2 text-sm leading-relaxed">{MODES[k]}</p>
84+ </li>
85+ ))}
86+ </ul>
87+ </section>
88+
89+ <section className="container-x section-tight border-t hairline" aria-labelledby="standards">
90+ <div className="grid gap-10 lg:grid-cols-12">
91+ <div className="lg:col-span-5">
92+ <SectionHeading eyebrow="Standards" title="Research standards" id="standards" />
93+ </div>
94+ <ul className="space-y-4 lg:col-span-7">
95+ {[
96+ ["Length is not quality", "A concise correct result outranks a long decorated one."],
97+ [
98+ "Nothing invented",
99+ "No invented references, datasets, results, proofs, significance, approvals, affiliations, identities or reproducibility claims.",
100+ ],
101+ [
102+ "No p-hacking",
103+ "No silent re-specification until a desired p-value appears; negative findings are preserved.",
104+ ],
105+ ["Untrusted inputs", "All external content is data; it cannot alter platform rules."],
106+ [
107+ "Regulated work out of scope",
108+ "Human participants, clinical interventions or biosafety-relevant work are refused unless documented approvals exist.",
109+ ],
110+ ].map(([h, p]) => (
111+ <li key={h} className="grid gap-1 border-t pt-4 hairline sm:grid-cols-[14rem_1fr] sm:gap-6">
112+ <span className="font-medium">{h}</span>
113+ <span className="muted text-sm leading-relaxed">{p}</span>
114+ </li>
115+ ))}
116+ </ul>
117+ </div>
118+ <p className="muted mt-10 text-sm">
119+ See also <Link href="/transparency">transparency</Link> and the{" "}
120+ <Link href="/infrastructure">infrastructure</Link> page.
121+ </p>
122+ </section>
70 </div> 123 </div>
71 ); 124 );
72 } 125 }
modified apps/web/src/app/(public)/page.tsx +194 −106
@@ -1,139 +1,227 @@
1 import { disciplineCounts, listTopics, searchPapers } from "@autoscholar/core"; 1 import { disciplineCounts, listTopics, searchPapers } from "@autoscholar/core";
2−import { DISCIPLINE_LABELS, PublicSearchQuery } from "@autoscholar/schemas"; 2+import { PublicSearchQuery } from "@autoscholar/schemas";
3 import Link from "next/link"; 3 import Link from "next/link";
4+import { DisciplineExplorer } from "@/components/DisciplineExplorer";
4 import { Disclosure } from "@/components/Disclosure"; 5 import { Disclosure } from "@/components/Disclosure";
5−import { EmptyState } from "@/components/EmptyState"; 6+import { EmptyResearchState } from "@/components/EmptyState";
7+import { IconArrow } from "@/components/Icons";
8+import { ClusterMotif, MacLustrInfrastructure } from "@/components/MacLustrInfrastructure";
6 import { PaperCard } from "@/components/PaperCard"; 9 import { PaperCard } from "@/components/PaperCard";
7−import { t } from "@/lib/i18n"; 10+import { PipelineStrip } from "@/components/ResearchPipeline";
11+import { SectionHeading } from "@/components/SectionHeading";
8 import { db } from "@/lib/server/db"; 12 import { db } from "@/lib/server/db";
9 13
10 export const dynamic = "force-dynamic"; 14 export const dynamic = "force-dynamic";
11 15
16+/** Editorial hero motif: a vector "evidence ledger" — abstract, built from no data. */
17+function HeroMotif() {
18+ const rows = Array.from({ length: 8 }, (_, i) => i);
19+ return (
20+ <svg
21+ viewBox="0 0 360 300"
22+ className="h-auto w-full"
23+ role="img"
24+ aria-label="Abstract illustration of a verified research ledger"
25+ >
26+ <defs>
27+ <linearGradient id="hg" x1="0" x2="1">
28+ <stop offset="0" stopColor="var(--sci)" />
29+ <stop offset="1" stopColor="var(--accent)" />
30+ </linearGradient>
31+ </defs>
32+ <rect x="18" y="14" width="324" height="272" rx="14" fill="var(--bg-elev)" stroke="var(--line)" />
33+ <rect x="18" y="14" width="324" height="40" rx="14" fill="var(--bg-muted)" />
34+ <text x="36" y="39" fontFamily="var(--font-mono)" fontSize="11" fill="var(--fg-subtle)">
35+ AS-WP-2026-····
36+ </text>
37+ <circle cx="318" cy="34" r="5" fill="url(#hg)" />
38+ {rows.map((i) => {
39+ const y = 74 + i * 22;
40+ const w = [180, 230, 140, 210, 170, 240, 120, 200][i] ?? 160;
41+ const ok = i !== 6;
42+ return (
43+ <g key={i}>
44+ <text x="36" y={y + 4} fontFamily="var(--font-mono)" fontSize="9" fill="var(--fg-subtle)">
45+ {String(i).padStart(2, "0")}
46+ </text>
47+ <rect
48+ x="60"
49+ y={y - 5}
50+ width={w}
51+ height="10"
52+ rx="5"
53+ fill={i % 3 === 0 ? "var(--sci-soft)" : "var(--bg-muted)"}
54+ />
55+ <rect
56+ x="60"
57+ y={y - 5}
58+ width={Math.round(w * 0.55)}
59+ height="10"
60+ rx="5"
61+ fill={i % 3 === 0 ? "var(--sci)" : "var(--line-strong)"}
62+ opacity={i % 3 === 0 ? 0.55 : 0.9}
63+ />
64+ <path
65+ d={ok ? `M304 ${y - 2} l4 4 7-8` : `M304 ${y - 4} l8 8 m0 -8 l-8 8`}
66+ stroke={ok ? "var(--color-ok-500)" : "var(--color-danger-500)"}
67+ strokeWidth="1.6"
68+ fill="none"
69+ strokeLinecap="round"
70+ />
71+ </g>
72+ );
73+ })}
74+ <path d="M36 270 H324" stroke="var(--line)" />
75+ <text x="36" y="262" fontFamily="var(--font-mono)" fontSize="9" fill="var(--fg-subtle)">
76+ sha256 · verified · gates 16/16
77+ </text>
78+ </svg>
79+ );
80+}
81+
12 export default async function Home() { 82 export default async function Home() {
13 const d = db(); 83 const d = db();
14 const latest = await searchPapers(d, PublicSearchQuery.parse({ pageSize: "7" })); 84 const latest = await searchPapers(d, PublicSearchQuery.parse({ pageSize: "7" }));
15 const [featured, ...recent] = latest.items; 85 const [featured, ...recent] = latest.items;
16 const counts = await disciplineCounts(d); 86 const counts = await disciplineCounts(d);
17 const topics = await listTopics(d); 87 const topics = await listTopics(d);
88+ const total = counts.reduce((n, c) => n + c.n, 0);
89+
18 return ( 90 return (
19− <div className="space-y-20"> 91+ <div>
20− <section className="grid gap-10 md:grid-cols-12 md:items-end"> 92+ {/* Hero */}
21− <div className="md:col-span-8"> 93+ <section className="container-x section-tight relative">
22− <p className="eyebrow">Autonomous Research Foundry</p> 94+ <div className="grid items-center gap-10 lg:grid-cols-12 lg:gap-12">
23− <h1 className="serif mt-3 text-4xl font-semibold leading-[1.1] tracking-tight sm:text-5xl lg:text-6xl"> 95+ <div className="reveal lg:col-span-7">
24− From research instructions to verifiable working papers. 96+ <p className="eyebrow">Autonomous Research Foundry</p>
25− </h1> 97+ <h1 className="display mt-4 max-w-[13ch]">Research you can check, not just read.</h1>
26− <p className="muted mt-6 max-w-2xl text-lg leading-relaxed"> 98+ <p className="lede mt-5">
27− AutoScholar is a research-producing startup and a public library of original, AI-executed working 99+ AutoScholar is a library of original working papers produced by an autonomous, auditable
28− papers across disciplines. Each paper is produced by an auditable autonomous workflow, checked by 100+ research pipeline. Every release ships its sources, code, data and build evidence.
29− deterministic quality gates, and released with its evidence: sources, code, data, build logs and 101+ </p>
30− provenance. 102+ <div className="mt-7 flex flex-wrap gap-3">
31− </p> 103+ <Link href="/research" className="btn btn-primary">
32− <div className="mt-8 flex flex-wrap gap-3"> 104+ Browse the library <IconArrow size={16} />
33− <Link href="/research" className="btn btn-primary"> 105+ </Link>
34− Browse the library 106+ <Link href="/methodology" className="btn">
35− </Link> 107+ How papers are produced
36− <Link href="/methodology" className="btn"> 108+ </Link>
37− How papers are produced 109+ </div>
38− </Link> 110+ <dl className="mt-8 grid max-w-md grid-cols-3 gap-4 border-t pt-5 hairline">
111+ <div>
112+ <dt className="label">Papers</dt>
113+ <dd className="serif mt-1 text-2xl">{total}</dd>
114+ </div>
115+ <div>
116+ <dt className="label">Hard gates</dt>
117+ <dd className="serif mt-1 text-2xl">16</dd>
118+ </div>
119+ <div>
120+ <dt className="label">Stages</dt>
121+ <dd className="serif mt-1 text-2xl">11</dd>
122+ </div>
123+ </dl>
39 </div> 124 </div>
125+ <div className="reveal reveal-2 lg:col-span-5">
126+ <HeroMotif />
127+ </div>
128+ </div>
129+ <div className="mt-8">
130+ <Disclosure compact />
40 </div> 131 </div>
41− <aside className="surface p-5 text-sm md:col-span-4">
42− <p className="eyebrow">Powered by MacLustr</p>
43− <p className="muted mt-2">
44− {t("footer.credit")} Every run executes in an isolated workspace with enforced budgets, and
45− nothing is published unless every hard gate passes.
46− </p>
47− <Link href="/infrastructure" className="mt-3 inline-block">
48− About the infrastructure →
49− </Link>
50− </aside>
51 </section> 132 </section>
52 133
53− <section aria-labelledby="latest"> 134+ {/* Featured + latest */}
54− <div className="flex items-end justify-between gap-4"> 135+ <section className="container-x section-tight" aria-labelledby="latest">
55− <div> 136+ <SectionHeading
56− <p className="eyebrow">Library</p> 137+ eyebrow="Library"
57− <h2 id="latest" className="serif mt-1 text-2xl font-semibold"> 138+ title="Latest working papers"
58− New releases 139+ id="latest"
59− </h2> 140+ more={{ href: "/research", label: "All papers" }}
60− </div> 141+ >
61− <Link href="/research" className="text-sm"> 142+ Newest releases first. Each paper lists its verified references, artifacts and provenance.
62− All working papers → 143+ </SectionHeading>
63− </Link> 144+ <div className="mt-8">
64− </div>
65− <div className="mt-6">
66 {!featured ? ( 145 {!featured ? (
67− <EmptyState title="No working papers have been released yet.">{t("library.empty")}</EmptyState> 146+ <EmptyResearchState />
68 ) : ( 147 ) : (
69− <div className="grid gap-4 md:grid-cols-12"> 148+ <div className="space-y-6">
70− <div className="md:col-span-7"> 149+ <PaperCard p={featured} featured />
71− <PaperCard p={featured} featured /> 150+ {recent.length > 0 && (
72− </div> 151+ <ul className="grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
73− <div className="grid gap-4 md:col-span-5"> 152+ {recent.slice(0, 6).map((p, i) => (
74− {recent.slice(0, 3).map((p) => ( 153+ <li key={p.publicId}>
75− <PaperCard key={p.publicId} p={p} /> 154+ <PaperCard p={p} index={i} />
76− ))} 155+ </li>
77− </div> 156+ ))}
78− {recent.slice(3).map((p) => ( 157+ </ul>
79− <div key={p.publicId} className="md:col-span-4"> 158+ )}
80− <PaperCard p={p} />
81− </div>
82− ))}
83 </div> 159 </div>
84 )} 160 )}
85 </div> 161 </div>
86− <div className="mt-6"> 162+ </section>
87− <Disclosure /> 163+
164+ {/* Disciplines */}
165+ <section className="container-x section-tight" aria-labelledby="subjects">
166+ <SectionHeading
167+ eyebrow="Subject explorer"
168+ title="Disciplines"
169+ id="subjects"
170+ tone="sci"
171+ more={{ href: "/topics", label: "All topics" }}
172+ >
173+ Every legitimate academic discipline is in scope. Methodology follows the question.
174+ </SectionHeading>
175+ <div className="mt-8">
176+ <DisciplineExplorer counts={counts} topics={topics} />
88 </div> 177 </div>
89 </section> 178 </section>
90 179
91− <section aria-labelledby="subjects"> 180+ {/* Process */}
92− <p className="eyebrow">Subject explorer</p> 181+ <section className="section-tight" aria-labelledby="process" style={{ background: "var(--bg-muted)" }}>
93− <h2 id="subjects" className="serif mt-1 text-2xl font-semibold"> 182+ <div className="container-x">
94− Disciplines 183+ <SectionHeading
95− </h2> 184+ eyebrow="Process"
96− <ul className="mt-6 grid gap-2 sm:grid-cols-2 lg:grid-cols-3"> 185+ title="Eleven stages, two independent halves"
97− {Object.entries(DISCIPLINE_LABELS).map(([slug, name]) => { 186+ id="process"
98− const n = counts.find((c) => c.discipline === slug)?.n ?? 0; 187+ more={{ href: "/methodology", label: "Full methodology" }}
99− const topic = topics.find((x) => x.slug === slug); 188+ >
100− return ( 189+ Research runs on an isolated MacLustr worker; verification and publication run on the control
101− <li key={slug}> 190+ plane, where deterministic gates decide — never the model.
102− <Link 191+ </SectionHeading>
103− href={topic ? `/topics/${slug}` : `/research?discipline=${slug}`} 192+ <div className="mt-8">
104− className="surface flex items-center justify-between px-4 py-3 text-sm no-underline hover:bg-[var(--bg-muted)]" 193+ <PipelineStrip />
105− > 194+ </div>
106− <span>{name}</span> 195+ <ul className="mt-8 grid gap-6 md:grid-cols-3">
107− <span className="subtle font-mono text-xs"> 196+ {[
108− {n} {n === 1 ? "paper" : "papers"} 197+ [
109− </span> 198+ "Integrity before throughput",
110− </Link> 199+ "No paper is released unless its central claims trace to verified sources or executed artifacts and its PDF rebuilds from the released LaTeX.",
200+ ],
201+ [
202+ "Evidence travels with the paper",
203+ "Manuscript source, verified bibliography, code and data when part of the study, reproducibility notes and a redacted provenance record.",
204+ ],
205+ [
206+ "Honest about what this is",
207+ "AI-generated working papers, not peer-reviewed articles. Automated review is critique, not validation. Corrections and retractions are public and permanent.",
208+ ],
209+ ].map(([h, p]) => (
210+ <li key={h} className="border-t pt-4 hairline">
211+ <h3 className="title-3">{h}</h3>
212+ <p className="muted mt-2 text-sm leading-relaxed">{p}</p>
111 </li> 213 </li>
112− ); 214+ ))}
113− })} 215+ </ul>
114− </ul> 216+ </div>
115 </section> 217 </section>
116 218
117− <section className="grid gap-6 md:grid-cols-3"> 219+ {/* Infrastructure */}
118− {[ 220+ <section className="container-x section-tight">
119− [ 221+ <MacLustrInfrastructure />
120− "Scientific integrity before throughput", 222+ <div className="sr-only">
121− "No paper is published automatically unless its central claims trace to verified sources or executed artifacts, its citations resolve, and its PDF builds from the released LaTeX source.", 223+ <ClusterMotif />
122− ], 224+ </div>
123− [
124− "Evidence travels with the paper",
125− "Each release ships the manuscript source, verified bibliography, code and data when they were part of the study, a reproducibility note, and a redacted provenance record.",
126− ],
127− [
128− "Honest about what this is",
129− "These are AI-generated working papers, not peer-reviewed articles. Automated review is critique, not validation. Corrections and retractions are public and permanent.",
130− ],
131− ].map(([h, p]) => (
132− <div key={h} className="border-t pt-4 hairline">
133− <h3 className="serif text-lg font-semibold">{h}</h3>
134− <p className="muted mt-2 text-sm leading-relaxed">{p}</p>
135− </div>
136− ))}
137 </section> 225 </section>
138 </div> 226 </div>
139 ); 227 );
modified apps/web/src/app/(public)/research/[slug]/page.tsx +430 −487
@@ -4,14 +4,17 @@ import { publicArtifactKey } from "@autoscholar/storage";
4 import type { Metadata } from "next"; 4 import type { Metadata } from "next";
5 import Link from "next/link"; 5 import Link from "next/link";
6 import { notFound } from "next/navigation"; 6 import { notFound } from "next/navigation";
7−import { CopyButton } from "@/components/CopyButton"; 7+import { CitationPanel } from "@/components/CitationPanel";
8 import { Disclosure } from "@/components/Disclosure"; 8 import { Disclosure } from "@/components/Disclosure";
9+import { IconCode, IconData, IconDoc, IconDownload } from "@/components/Icons";
10+import { MathText } from "@/components/MathText";
9 import { PaperCard } from "@/components/PaperCard"; 11 import { PaperCard } from "@/components/PaperCard";
10−import { PdfViewer } from "@/components/PdfViewer"; 12+import { PaperReader } from "@/components/PaperReader";
11−import { StatusBadge } from "@/components/StatusBadge"; 13+import { PublicationMetadata } from "@/components/PublicationMetadata";
12−import { Tabs } from "@/components/Tabs"; 14+import { ResearchProvenance } from "@/components/ResearchProvenance";
13−import { disciplineLabel, fmtBytes, fmtDate, modeLabel, shortHash } from "@/lib/format"; 15+import { ScientificFigure } from "@/components/ScientificFigure";
14−import { t } from "@/lib/i18n"; 16+import { SectionHeading } from "@/components/SectionHeading";
17+import { disciplineLabel, fmtBytes, fmtDate, shortHash } from "@/lib/format";
15 import { db, storage } from "@/lib/server/db"; 18 import { db, storage } from "@/lib/server/db";
16 19
17 export const dynamic = "force-dynamic"; 20 export const dynamic = "force-dynamic";
@@ -61,11 +64,15 @@ type ArtifactEntry = {
61 }; 64 };
62 function Dl({ a }: { a: ArtifactEntry }) { 65 function Dl({ a }: { a: ArtifactEntry }) {
63 return ( 66 return (
64− <li className="flex items-center justify-between gap-3 py-1.5 text-sm"> 67+ <li className="flex items-center justify-between gap-3 border-b py-2 text-sm last:border-0 hairline">
65− <a href={`${a.publicPath}?download=1`} className="font-mono text-xs break-all"> 68+ <a
69+ href={`${a.publicPath}?download=1`}
70+ className="min-w-0 truncate font-mono text-xs no-underline hover:underline"
71+ title={a.path}
72+ >
66 {a.path} 73 {a.path}
67 </a> 74 </a>
68− <span className="subtle whitespace-nowrap text-xs"> 75+ <span className="subtle flex-none text-[11px]">
69 {fmtBytes(a.bytes)} · {shortHash(a.sha256, 8)} 76 {fmtBytes(a.bytes)} · {shortHash(a.sha256, 8)}
70 </span> 77 </span>
71 </li> 78 </li>
@@ -96,6 +103,7 @@ export default async function PaperPage({ params }: { params: Promise<{ slug: st
96 const figures = set.filter((a) => a.kind === "figure" && /\.(png|svg)$/i.test(a.path)); 103 const figures = set.filter((a) => a.kind === "figure" && /\.(png|svg)$/i.test(a.path));
97 const pdfFigures = set.filter((a) => a.kind === "figure" && /\.pdf$/i.test(a.path)); 104 const pdfFigures = set.filter((a) => a.kind === "figure" && /\.pdf$/i.test(a.path));
98 const tex = set.filter((a) => a.kind === "manuscript" && /\.(tex|bib|cls|sty)$/i.test(a.path)); 105 const tex = set.filter((a) => a.kind === "manuscript" && /\.(tex|bib|cls|sty)$/i.test(a.path));
106+ const mainTex = set.find((a) => a.path === "manuscript/main.tex") ?? tex[0];
99 const code = set.filter((a) => a.kind === "code"); 107 const code = set.filter((a) => a.kind === "code");
100 const data = set.filter((a) => a.kind === "data"); 108 const data = set.filter((a) => a.kind === "data");
101 const results = set.filter((a) => a.kind === "result" || a.kind === "table"); 109 const results = set.filter((a) => a.kind === "result" || a.kind === "table");
@@ -146,520 +154,455 @@ export default async function PaperPage({ params }: { params: Promise<{ slug: st
146 version: v.versionNo, 154 version: v.versionNo,
147 ...(p.retraction ? { creativeWorkStatus: "Retracted" } : {}), 155 ...(p.retraction ? { creativeWorkStatus: "Retracted" } : {}),
148 }; 156 };
157+ const verifiedLabel = qa.gates
158+ ? `${qa.gates.filter((g) => g.status === "pass").length}/${qa.gates.filter((g) => g.status !== "skip").length} gates`
159+ : undefined;
160+ const contributions = Array.isArray(meta.contributions) ? (meta.contributions as string[]) : [];
161+ const sections: Array<[string, string]> = [
162+ ["Methods", typeof meta.methods === "string" ? meta.methods : ""],
163+ ["Main results", typeof meta.mainResults === "string" ? meta.mainResults : ""],
164+ ["Limitations", typeof meta.limitations === "string" ? meta.limitations : ""],
165+ ].filter(([, v]) => v) as Array<[string, string]>;
166+ const downloads = withdrawn
167+ ? []
168+ : [
169+ { href: `${v.pdfPublicPath}?download=1`, label: "PDF", icon: <IconDoc size={16} />, primary: true },
170+ ...(mainTex
171+ ? [
172+ {
173+ href: `${mainTex.publicPath}?download=1`,
174+ label: "LaTeX source",
175+ icon: <span className="font-mono text-[11px]">TeX</span>,
176+ },
177+ ]
178+ : []),
179+ ...(code.length
180+ ? [{ href: "#artifacts", label: `Code (${code.length})`, icon: <IconCode size={16} /> }]
181+ : []),
182+ ...(data.length
183+ ? [{ href: "#artifacts", label: `Data (${data.length})`, icon: <IconData size={16} /> }]
184+ : []),
185+ ];
149 return ( 186 return (
150− <article className="space-y-10"> 187+ <article className="pb-20 lg:pb-0">
151 {/* biome-ignore lint/security/noDangerouslySetInnerHtml: JSON-LD built from server data */} 188 {/* biome-ignore lint/security/noDangerouslySetInnerHtml: JSON-LD built from server data */}
152 <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} /> 189 <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} />
153− {p.retraction && ( 190+
154− <div 191+ {/* Publication header */}
155− role="alert" 192+ <div style={{ background: "var(--bg-muted)" }} className="border-b hairline">
156− className="rounded-md border p-4" 193+ <div className="container-x py-8 sm:py-12">
157− style={{ 194+ {p.retraction && (
158− borderColor: "var(--color-danger-500)", 195+ <div
159− background: "color-mix(in oklab, var(--color-danger-500) 8%, transparent)", 196+ role="alert"
160− }} 197+ className="mb-6 rounded-lg border p-4"
161− > 198+ style={{
162− <p className="font-semibold"> 199+ borderColor: "var(--color-danger-500)",
163− This working paper was retracted on {fmtDate(p.retraction.retractedAt)}. 200+ background: "color-mix(in oklab, var(--color-danger-500) 8%, transparent)",
164− </p> 201+ }}
165− <p className="mt-1 text-sm">{p.retraction.notice}</p> 202+ >
166− {withdrawn && ( 203+ <p className="font-semibold">
167− <p className="muted mt-1 text-sm"> 204+ This working paper was retracted on {fmtDate(p.retraction.retractedAt)}.
168− Its artifacts have been withdrawn from delivery. This page remains as a permanent record. 205+ </p>
169− </p> 206+ <p className="mt-1 text-sm">{p.retraction.notice}</p>
170− )} 207+ {withdrawn && (
171− </div> 208+ <p className="muted mt-1 text-sm">
172− )} 209+ Its artifacts have been withdrawn from delivery. This page remains as a permanent record.
173− <header className="grid gap-6 md:grid-cols-12"> 210+ </p>
174− <div className="md:col-span-8"> 211+ )}
175− <div className="flex flex-wrap items-center gap-2 text-xs">
176− <span className="font-mono">{p.paper.publicId}</span>
177− <span className="subtle">·</span>
178− <span>Version {v.versionNo}</span>
179− <StatusBadge status={p.paper.status} />
180− {p.paper.synthetic && <span className="badge">staging sample — not a real paper</span>}
181− </div>
182− <h1 className="serif mt-3 text-3xl font-semibold leading-tight sm:text-4xl">{v.title}</h1>
183− <p className="mt-4 text-sm">
184− <span className="font-medium">{t("byline")}</span>
185− <span className="muted"> · Research computed on MacLustr</span>
186− </p>
187− <dl className="muted mt-4 grid grid-cols-2 gap-x-6 gap-y-1 text-sm sm:grid-cols-4">
188− <div>
189− <dt className="label">Released</dt>
190− <dd>{fmtDate(p.paper.firstPublishedAt)}</dd>
191− </div>
192− <div>
193− <dt className="label">Revised</dt>
194− <dd>{fmtDate(v.publishedAt)}</dd>
195− </div>
196− <div>
197− <dt className="label">Subject</dt>
198− <dd>
199− <Link href={`/research?discipline=${p.paper.discipline}`}>
200− {disciplineLabel(p.paper.discipline)}
201− </Link>
202− </dd>
203 </div> 212 </div>
204− <div> 213+ )}
205− <dt className="label">Methodology</dt> 214+ <div className="grid gap-8 lg:grid-cols-12">
206− <dd>{modeLabel(p.paper.researchMode)}</dd> 215+ <div className="lg:col-span-8">
216+ <PublicationMetadata
217+ publicId={p.paper.publicId}
218+ versionNo={v.versionNo}
219+ status={p.paper.status}
220+ synthetic={p.paper.synthetic}
221+ title={v.title}
222+ discipline={p.paper.discipline}
223+ mode={p.paper.researchMode}
224+ firstPublishedAt={p.paper.firstPublishedAt}
225+ revisedAt={v.publishedAt}
226+ keywords={v.keywords}
227+ verified={verifiedLabel}
228+ />
207 </div> 229 </div>
208− </dl> 230+ <aside className="lg:col-span-4" aria-label="Downloads">
209− <ul className="mt-4 flex flex-wrap gap-2" aria-label="Keywords"> 231+ <div className="surface p-4">
210− {v.keywords.map((k) => ( 232+ <p className="label mb-3">Artifacts</p>
211− <li key={k}> 233+ {downloads.length === 0 ? (
212− <Link href={`/research?q=${encodeURIComponent(k)}`} className="badge no-underline"> 234+ <p className="muted text-sm">Artifacts withdrawn.</p>
213− {k} 235+ ) : (
214− </Link> 236+ <ul className="grid grid-cols-2 gap-2 lg:grid-cols-1 [&>li:only-child]:col-span-2">
215− </li> 237+ {downloads.map((dl) => (
216− ))} 238+ <li key={dl.label}>
217− </ul> 239+ <a
240+ className={`btn w-full justify-between ${dl.primary ? "btn-primary" : ""}`}
241+ href={dl.href}
242+ >
243+ <span className="inline-flex items-center gap-2">
244+ {dl.icon}
245+ {dl.label}
246+ </span>
247+ <IconDownload size={14} />
248+ </a>
249+ </li>
250+ ))}
251+ </ul>
252+ )}
253+ <div className="mt-4">
254+ <Disclosure compact />
255+ </div>
256+ </div>
257+ </aside>
258+ </div>
218 </div> 259 </div>
219− <aside className="surface p-4 text-sm md:col-span-4"> 260+ </div>
220− <p className="label mb-2">Downloads</p> 261+
221− {withdrawn ? ( 262+ <div className="container-x">
222− <p className="muted">Artifacts withdrawn.</p> 263+ {/* Abstract + findings */}
223− ) : ( 264+ <section aria-labelledby="abstract" className="section-tight grid gap-10 lg:grid-cols-12">
224− <ul className="space-y-2"> 265+ <div className="lg:col-span-8">
225− <li> 266+ <h2 id="abstract" className="eyebrow">
226− <a className="btn btn-primary w-full" href={`${v.pdfPublicPath}?download=1`}> 267+ Abstract
227− PDF 268+ </h2>
228− </a> 269+ <MathText text={v.abstract} className="prose-editorial dropcap mt-3" />
229− </li> 270+ {contributions.length > 0 && (
230− {tex.length > 0 && ( 271+ <div className="mt-10">
231− <li> 272+ <h2 className="eyebrow">Key findings</h2>
232− <a 273+ <ol className="mt-3 space-y-3">
233− className="btn w-full" 274+ {contributions.map((c, i) => (
234− href={`${set.find((a) => a.path === "manuscript/main.tex")?.publicPath ?? tex[0]!.publicPath}?download=1`} 275+ <li key={c} className="grid grid-cols-[2rem_1fr] gap-3">
235− > 276+ <span className="serif mt-0.5 text-xl" style={{ color: "var(--accent)" }}>
236− LaTeX source 277+ {i + 1}
237− </a> 278+ </span>
238− </li> 279+ <MathText text={c} className="prose-paper" />
239− )} 280+ </li>
240− {code.length > 0 && ( 281+ ))}
282+ </ol>
283+ </div>
284+ )}
285+ {sections.map(([h, body]) => (
286+ <div key={h} className="mt-10">
287+ <h2 className="eyebrow">{h}</h2>
288+ <MathText text={body} className="prose-paper mt-3" />
289+ </div>
290+ ))}
291+ </div>
292+ <div className="space-y-4 lg:col-span-4">
293+ <div className="surface-muted p-4 text-sm">
294+ <p className="label mb-2">Research status</p>
295+ <ul className="space-y-1.5">
296+ <li>AutoScholar working paper (preprint)</li>
297+ <li>Produced autonomously by an AI research workflow</li>
241 <li> 298 <li>
242− <a className="btn w-full" href="#code"> 299+ Automated critical review; <strong>not</strong> human peer review
243− Code ({code.length} files)
244− </a>
245 </li> 300 </li>
246− )}
247− {data.length > 0 && (
248 <li> 301 <li>
249− <a className="btn w-full" href="#data"> 302+ Deterministic quality gates:{" "}
250− Data ({data.length} files) 303+ {qa.gates
251− </a> 304+ ? `${qa.gates.filter((g) => g.status === "pass").length}/${qa.gates.filter((g) => g.status !== "skip").length} passed`
305+ : "see provenance"}
252 </li> 306 </li>
253− )} 307+ <li>DOI: none (not registered)</li>
254− </ul> 308+ </ul>
255− )} 309+ </div>
256− <div className="mt-4"> 310+ {p.summary.topics.length > 0 && (
257− <Disclosure compact /> 311+ <div className="surface-muted p-4 text-sm">
312+ <p className="label mb-2">Topics</p>
313+ <ul className="flex flex-wrap gap-1.5">
314+ {p.summary.topics.map((x) => (
315+ <li key={x.slug}>
316+ <Link
317+ href={`/topics/${x.slug}`}
318+ className="chip no-underline"
319+ style={{ minHeight: "1.75rem" }}
320+ >
321+ {x.name}
322+ </Link>
323+ </li>
324+ ))}
325+ </ul>
326+ </div>
327+ )}
328+ <nav aria-label="On this page" className="surface-muted hidden p-4 text-sm lg:block">
329+ <p className="label mb-2">On this page</p>
330+ <ul className="space-y-1.5">
331+ {[
332+ ["#abstract", "Abstract"],
333+ !withdrawn && ["#pdf", "Read the paper"],
334+ (figures.length || pdfFigures.length) && ["#figures", "Figures"],
335+ bib.length && ["#refs", "References"],
336+ (code.length || data.length || results.length) && ["#artifacts", "Code and data"],
337+ ["#provenance", "Provenance"],
338+ ["#cite", "Cite"],
339+ ["#history", "Versions"],
340+ ]
341+ .filter(Boolean)
342+ .map((x) => {
343+ const [href, label] = x as [string, string];
344+ return (
345+ <li key={href}>
346+ <a href={href} className="muted no-underline hover:text-[var(--fg)]">
347+ {label}
348+ </a>
349+ </li>
350+ );
351+ })}
352+ </ul>
353+ </nav>
258 </div> 354 </div>
259− </aside> 355+ </section>
260− </header> 356+
357+ {/* Reader */}
358+ {!withdrawn && (
359+ <section aria-labelledby="pdf" className="section-tight border-t hairline">
360+ <SectionHeading eyebrow="Manuscript" title="Read the paper" id="pdf">
361+ Rendered from the released PDF. Use the arrow keys or the controls to turn pages; full-screen is
362+ available.
363+ </SectionHeading>
364+ <div className="mt-6">
365+ <PaperReader
366+ src={v.pdfPublicPath}
367+ title={`${p.paper.publicId} v${v.versionNo} — ${v.title}`}
368+ downloadHref={`${v.pdfPublicPath}?download=1`}
369+ versionLabel={`v${v.versionNo}`}
370+ />
371+ </div>
372+ </section>
373+ )}
261 374
262− <section aria-labelledby="abstract" className="grid gap-8 md:grid-cols-12"> 375+ {/* Figures */}
263− <div className="md:col-span-8"> 376+ {(figures.length > 0 || pdfFigures.length > 0) && (
264− <h2 id="abstract" className="serif text-xl font-semibold"> 377+ <section aria-labelledby="figures" className="section-tight border-t hairline">
265− Abstract 378+ <SectionHeading eyebrow="Evidence" title="Figures" id="figures" tone="sci">
266− </h2> 379+ Figures are the actual files produced by the study, served from the immutable artifact store.
267− <p className="prose-paper mt-3">{v.abstract}</p> 380+ </SectionHeading>
268− {Array.isArray(meta.contributions) && (meta.contributions as string[]).length > 0 && ( 381+ <ul className="mt-6 grid gap-5 md:grid-cols-2">
269− <> 382+ {figures.map((f, i) => {
270− <h2 className="serif mt-8 text-xl font-semibold">Key contributions</h2> 383+ const vec = pdfFigures.find(
271− <ol className="prose-paper mt-3 list-decimal pl-5"> 384+ (x) => x.path.replace(/\.pdf$/i, "") === f.path.replace(/\.(png|svg)$/i, ""),
272− {(meta.contributions as string[]).map((c) => ( 385+ );
273− <li key={c}>{c}</li> 386+ return (
387+ <li key={f.path}>
388+ <ScientificFigure
389+ src={f.publicPath}
390+ path={f.path}
391+ bytes={f.bytes}
392+ index={i + 1}
393+ vector={vec ? { href: vec.publicPath, bytes: vec.bytes } : undefined}
394+ />
395+ </li>
396+ );
397+ })}
398+ {pdfFigures
399+ .filter(
400+ (f) =>
401+ !figures.some(
402+ (x) => x.path.replace(/\.(png|svg)$/i, "") === f.path.replace(/\.pdf$/i, ""),
403+ ),
404+ )
405+ .map((f) => (
406+ <li key={f.path} className="surface p-4 text-sm">
407+ <a href={`${f.publicPath}?download=1`} className="font-mono text-xs">
408+ {f.path.replace("results/figures/", "")}
409+ </a>{" "}
410+ <span className="subtle">(vector PDF, {fmtBytes(f.bytes)})</span>
411+ </li>
274 ))} 412 ))}
275− </ol>
276− </>
277− )}
278− {typeof meta.methods === "string" && meta.methods && (
279− <>
280− <h2 className="serif mt-8 text-xl font-semibold">Methods</h2>
281− <p className="prose-paper mt-3">{meta.methods}</p>
282− </>
283− )}
284− {typeof meta.mainResults === "string" && meta.mainResults && (
285− <>
286− <h2 className="serif mt-8 text-xl font-semibold">Main results</h2>
287− <p className="prose-paper mt-3">{meta.mainResults}</p>
288− </>
289− )}
290− {typeof meta.limitations === "string" && meta.limitations && (
291− <>
292− <h2 className="serif mt-8 text-xl font-semibold">Limitations</h2>
293− <p className="prose-paper mt-3">{meta.limitations}</p>
294− </>
295− )}
296− </div>
297− <div className="space-y-4 md:col-span-4">
298− <div className="surface p-4 text-sm">
299− <p className="label mb-2">Research status</p>
300− <ul className="space-y-1">
301− <li>AutoScholar working paper (preprint)</li>
302− <li>Produced autonomously by an AI research workflow</li>
303− <li>
304− Automated critical review; <strong>not</strong> human peer review
305− </li>
306− <li>
307− Deterministic quality gates:{" "}
308− {qa.gates
309− ? `${qa.gates.filter((g) => g.status === "pass").length}/${qa.gates.filter((g) => g.status !== "skip").length} passed`
310− : "see provenance"}
311− </li>
312− <li>DOI: none (not registered)</li>
313 </ul> 413 </ul>
314− </div> 414+ </section>
315− {p.summary.topics.length > 0 && ( 415+ )}
316− <div className="surface p-4 text-sm"> 416+
317− <p className="label mb-2">Topics</p> 417+ {/* References */}
318− <ul className="flex flex-wrap gap-2"> 418+ {bib.length > 0 && (
319− {p.summary.topics.map((x) => ( 419+ <section aria-labelledby="refs" className="section-tight border-t hairline">
320− <li key={x.slug}> 420+ <SectionHeading eyebrow="Bibliography" title={`References (${bib.length})`} id="refs">
321− <Link href={`/topics/${x.slug}`} className="badge no-underline"> 421+ Every reference was verified against a scholarly registry before publication; identifiers link
322− {x.name} 422+ to the source of record.
323− </Link> 423+ </SectionHeading>
424+ <ol className="mt-6 grid gap-x-10 gap-y-3 text-sm md:grid-cols-2">
425+ {bib.map((b, i) => {
426+ const f = b.fields;
427+ const href = f.doi
428+ ? `https://doi.org/${f.doi.replace(/^https?:\/\/doi\.org\//, "")}`
429+ : (f.url ?? (f.eprint ? `https://arxiv.org/abs/${f.eprint}` : undefined));
430+ return (
431+ <li
432+ key={b.key}
433+ id={`ref-${b.key}`}
434+ className="grid grid-cols-[2rem_1fr] gap-2 border-b pb-3 hairline"
435+ >
436+ <span className="subtle font-mono text-xs">[{i + 1}]</span>
437+ <span className="min-w-0">
438+ <span>{f.author ? `${f.author.replace(/\s+and\s+/g, ", ")}. ` : ""}</span>
439+ {f.year && <span>({f.year}). </span>}
440+ <span className="italic">{f.title?.replace(/[{}]/g, "")}</span>
441+ {f.journal && <span>. {f.journal}</span>}
442+ {f.booktitle && <span>. In {f.booktitle}</span>}
443+ {f.volume && <span>, {f.volume}</span>}
444+ {f.pages && <span>, {f.pages}</span>}.{" "}
445+ {href && (
446+ <a href={href} rel="noopener noreferrer" className="break-all font-mono text-xs">
447+ {f.doi
448+ ? `doi:${f.doi.replace(/^https?:\/\/doi\.org\//, "")}`
449+ : f.eprint
450+ ? `arXiv:${f.eprint}`
451+ : "link"}
452+ </a>
453+ )}
454+ </span>
324 </li> 455 </li>
456+ );
457+ })}
458+ </ol>
459+ </section>
460+ )}
461+
462+ {/* Artifacts */}
463+ {(code.length > 0 || data.length > 0 || results.length > 0) && (
464+ <section id="artifacts" aria-labelledby="artifacts-h" className="section-tight border-t hairline">
465+ <SectionHeading
466+ eyebrow="Reproducibility"
467+ title="Code, data and results"
468+ id="artifacts-h"
469+ tone="sci"
470+ >
471+ Only files that were part of the study are listed. Each download carries its SHA-256 digest.
472+ </SectionHeading>
473+ <div className="mt-6 grid gap-5 lg:grid-cols-3">
474+ {[
475+ ["Code", code, <IconCode key="c" size={16} />],
476+ ["Data", data, <IconData key="d" size={16} />],
477+ ["Results and tables", results, <IconDoc key="r" size={16} />],
478+ ]
479+ .filter(([, list]) => (list as ArtifactEntry[]).length > 0)
480+ .map(([label, list, icon]) => (
481+ <div key={label as string} className="surface p-4">
482+ <p className="label mb-1 flex items-center gap-2">
483+ {icon as React.ReactNode} {label as string} ({(list as ArtifactEntry[]).length})
484+ </p>
485+ <ul className="max-h-80 overflow-auto">
486+ {(list as ArtifactEntry[]).map((a) => (
487+ <Dl key={a.path} a={a} />
488+ ))}
489+ </ul>
490+ </div>
325 ))} 491 ))}
326− </ul>
327 </div> 492 </div>
328− )} 493+ </section>
329− </div> 494+ )}
330− </section>
331 495
332− {!withdrawn && ( 496+ {/* Provenance */}
333− <section aria-labelledby="pdf"> 497+ <section id="provenance" aria-labelledby="provenance-h" className="section-tight border-t hairline">
334− <h2 id="pdf" className="serif text-xl font-semibold"> 498+ <SectionHeading eyebrow="Transparent record" title="Research provenance" id="provenance-h">
335− Read the paper 499+ How this paper was made: models, instruction digest, pipeline stages, verification policy and
336− </h2> 500+ every gate result.
337− <div className="mt-3"> 501+ </SectionHeading>
338− <PdfViewer 502+ <div className="mt-6">
339− src={v.pdfPublicPath} 503+ <ResearchProvenance prov={prov} qa={qa} texReleased={tex.length > 0} meta={meta} />
340− title={`${p.paper.publicId} v${v.versionNo} — ${v.title}`}
341− downloadHref={`${v.pdfPublicPath}?download=1`}
342− />
343 </div> 504 </div>
344 </section> 505 </section>
345− )}
346 506
347− {(figures.length > 0 || pdfFigures.length > 0) && ( 507+ {/* Cite */}
348− <section aria-labelledby="figures"> 508+ <section aria-labelledby="cite" className="section-tight border-t hairline">
349− <h2 id="figures" className="serif text-xl font-semibold"> 509+ <SectionHeading eyebrow="Citation" title="Cite this working paper" id="cite" />
350− Figures 510+ <div className="mt-6 max-w-3xl">
351− </h2> 511+ <CitationPanel
352− <ul className="mt-3 grid gap-4 sm:grid-cols-2"> 512+ slug={p.paper.slug}
353− {figures.map((f) => ( 513+ bibtex={bibtexFor(cite)}
354− <li key={f.path} className="surface p-3"> 514+ ris={risFor(cite)}
355− {/* biome-ignore lint/performance/noImgElement: artifact images are served immutable from this origin */} 515+ plain={plainCitationFor(cite)}
356− <img 516+ />
357− src={f.publicPath} 517+ </div>
358− alt={f.path.split("/").pop() ?? "figure"}
359− className="w-full"
360− loading="lazy"
361− />
362− <p className="subtle mt-2 font-mono text-xs">{f.path.replace("results/figures/", "")}</p>
363− </li>
364− ))}
365− {pdfFigures.map((f) => (
366− <li key={f.path} className="surface p-3 text-sm">
367− <a href={`${f.publicPath}?download=1`}>{f.path.replace("results/figures/", "")}</a>{" "}
368− <span className="subtle">(vector PDF, {fmtBytes(f.bytes)})</span>
369− </li>
370− ))}
371− </ul>
372 </section> 518 </section>
373− )}
374 519
375− {bib.length > 0 && ( 520+ {/* History */}
376− <section aria-labelledby="refs"> 521+ <section
377− <h2 id="refs" className="serif text-xl font-semibold"> 522+ aria-labelledby="history"
378− References ({bib.length}) 523+ className="section-tight grid gap-8 border-t hairline md:grid-cols-2"
379− </h2> 524+ >
380− <p className="muted mt-1 text-xs"> 525+ <div>
381− Every reference was verified against a scholarly registry before publication; identifiers link to 526+ <h2 id="history" className="title-2">
382− the source of record. 527+ Version history
383− </p> 528+ </h2>
384− <ol className="mt-3 space-y-2 text-sm"> 529+ <ol className="mt-4 space-y-2 text-sm">
385− {bib.map((b) => { 530+ {p.versions.map((x) => (
386− const f = b.fields; 531+ <li key={x.id} className="surface flex items-start justify-between gap-3 p-3">
387− const href = f.doi 532+ <div>
388− ? `https://doi.org/${f.doi.replace(/^https?:\/\/doi\.org\//, "")}` 533+ <span className="font-medium">Version {x.versionNo}</span>{" "}
389− : (f.url ?? (f.eprint ? `https://arxiv.org/abs/${f.eprint}` : undefined)); 534+ <span className="muted">· {fmtDate(x.publishedAt)}</span>
390− return ( 535+ <p className="muted mt-1">{x.changelog}</p>
391− <li key={b.key} id={`ref-${b.key}`} className="border-b pb-2 hairline"> 536+ </div>
392− <span>{f.author ? `${f.author.replace(/\s+and\s+/g, ", ")}. ` : ""}</span> 537+ {!withdrawn && (
393− {f.year && <span>({f.year}). </span>} 538+ <a className="btn btn-sm" href={`${x.pdfPublicPath}?download=1`}>
394− <span className="italic">{f.title?.replace(/[{}]/g, "")}</span> 539+ PDF v{x.versionNo}
395− {f.journal && <span>. {f.journal}</span>}
396− {f.booktitle && <span>. In {f.booktitle}</span>}
397− {f.volume && <span>, {f.volume}</span>}
398− {f.pages && <span>, {f.pages}</span>}.{" "}
399− {href && (
400− <a href={href} rel="noopener noreferrer" className="font-mono text-xs break-all">
401− {f.doi ? `doi:${f.doi}` : href}
402 </a> 540 </a>
403 )} 541 )}
404 </li> 542 </li>
405− ); 543+ ))}
406− })} 544+ </ol>
407− </ol> 545+ </div>
408− </section> 546+ <div>
409− )} 547+ <h2 className="title-2">Corrections and notices</h2>
410− 548+ {p.corrections.length === 0 && !p.retraction ? (
411− {(code.length > 0 || data.length > 0 || results.length > 0) && ( 549+ <p className="muted mt-4 text-sm">No corrections have been issued.</p>
412− <section aria-labelledby="repro" className="grid gap-6 md:grid-cols-3"> 550+ ) : (
413− <h2 id="repro" className="serif text-xl font-semibold md:col-span-3"> 551+ <ul className="mt-4 space-y-2 text-sm">
414− Code, data and results 552+ {p.corrections.map((c) => (
415− </h2> 553+ <li key={c.id} className="surface p-3">
416− {code.length > 0 && ( 554+ <span className="font-medium">
417− <div id="code" className="surface p-4"> 555+ Correction v{c.fromVersionNo} → v{c.toVersionNo}
418− <p className="label mb-1">Code</p> 556+ </span>{" "}
419− <ul> 557+ <span className="muted">· {fmtDate(c.createdAt)}</span>
420− {code.map((a) => ( 558+ <p className="mt-1">{c.notice}</p>
421− <Dl key={a.path} a={a} /> 559+ </li>
422− ))}
423− </ul>
424− </div>
425− )}
426− {data.length > 0 && (
427− <div id="data" className="surface p-4">
428− <p className="label mb-1">Data</p>
429− <ul>
430− {data.map((a) => (
431− <Dl key={a.path} a={a} />
432− ))}
433− </ul>
434− </div>
435− )}
436− {results.length > 0 && (
437− <div className="surface p-4">
438− <p className="label mb-1">Results and tables</p>
439− <ul>
440− {results.map((a) => (
441− <Dl key={a.path} a={a} />
442 ))} 560 ))}
561+ {p.retraction && (
562+ <li className="surface p-3">
563+ <span className="font-medium">Retraction</span>{" "}
564+ <span className="muted">· {fmtDate(p.retraction.retractedAt)}</span>
565+ <p className="mt-1">{p.retraction.notice}</p>
566+ </li>
567+ )}
443 </ul> 568 </ul>
444− </div> 569+ )}
445− )} 570+ </div>
446 </section> 571 </section>
447− )}
448 572
449− <section aria-labelledby="reproducibility" className="grid gap-6 md:grid-cols-2"> 573+ {p.related.length > 0 && (
450− <div> 574+ <section aria-labelledby="related" className="section-tight border-t hairline">
451− <h2 id="reproducibility" className="serif text-xl font-semibold"> 575+ <SectionHeading eyebrow="Related" title="Related working papers" id="related">
452− Reproducibility 576+ Selected by shared discipline or keywords recorded in verified metadata.
453− </h2> 577+ </SectionHeading>
454− <dl className="mt-3 grid grid-cols-[max-content_1fr] gap-x-4 gap-y-1 text-sm"> 578+ <ul className="mt-6 grid gap-4 md:grid-cols-2">
455− <dt className="label">Data availability</dt> 579+ {p.related.map((r) => (
456− <dd>{(meta.dataAvailability as string) || "Not applicable or not stated."}</dd> 580+ <li key={r.publicId}>
457− <dt className="label">Code availability</dt> 581+ <PaperCard p={r} />
458− <dd>{(meta.codeAvailability as string) || "Not applicable or not stated."}</dd>
459− <dt className="label">Ethics</dt>
460− <dd>
461− {(meta.ethics as string) ||
462− "No restricted activities; public data, mathematics or simulations only."}
463− </dd>
464− <dt className="label">Toolchain</dt>
465− <dd className="font-mono text-xs">
466− {prov.toolchain && Object.keys(prov.toolchain as object).length
467− ? Object.entries(prov.toolchain as Record<string, string>)
468− .map(([k, val]) => `${k} ${val}`)
469− .join(" · ")
470− : "not recorded"}
471− </dd>
472− <dt className="label">LaTeX source</dt>
473− <dd>
474− {tex.length
475− ? "Released; the PDF was rebuilt from it in a clean environment during verification."
476− : "Not released."}
477− </dd>
478− <dt className="label">Verified</dt>
479− <dd>
480− {qa.evaluatedAt ? `${fmtDate(qa.evaluatedAt)} under quality policy ${qa.policyVersion}` : "—"}
481− </dd>
482− </dl>
483− {qa.warnings && qa.warnings.length > 0 && (
484− <details className="mt-3 text-sm">
485− <summary className="cursor-pointer">
486− Non-blocking warnings recorded at verification ({qa.warnings.length})
487− </summary>
488− <ul className="muted mt-2 list-disc pl-5">
489− {qa.warnings.map((w) => (
490− <li key={w}>{w}</li>
491− ))}
492− </ul>
493− </details>
494− )}
495− </div>
496− <div>
497− <h2 className="serif text-xl font-semibold">Provenance</h2>
498− <dl className="mt-3 grid grid-cols-[max-content_1fr] gap-x-4 gap-y-1 text-sm">
499− <dt className="label">Model</dt>
500− <dd className="font-mono text-xs">{String(prov.model ?? "—")}</dd>
501− <dt className="label">Reviewer model</dt>
502− <dd className="font-mono text-xs">{String(prov.reviewerModel ?? "—")}</dd>
503− <dt className="label">Instruction version</dt>
504− <dd className="font-mono text-xs">
505− v{String(prov.instructionVersion ?? "?")} · {shortHash(prov.instructionSha256 as string)}
506− </dd>
507− <dt className="label">Manifest digest</dt>
508− <dd className="font-mono text-xs">{shortHash(prov.manifestSha256 as string)}</dd>
509− <dt className="label">Execution</dt>
510− <dd className="text-xs">
511− {prov.startedAt
512− ? `${fmtDate(prov.startedAt as string)} → ${prov.completedAt ? fmtDate(prov.completedAt as string) : "?"}`
513− : "—"}{" "}
514− · {String(prov.infrastructure ?? "MacLustr")}
515− </dd>
516− <dt className="label">Quality gates</dt>
517− <dd>
518− {qa.gates && qa.gates.length > 0 ? (
519− <details className="text-xs">
520− <summary className="cursor-pointer">{qa.gates.length} gates evaluated</summary>
521− <ul className="mt-1 space-y-0.5">
522− {qa.gates.map((g) => (
523− <li key={g.gate}>
524− <StatusBadge status={g.status} /> <span className="font-mono">{g.gate}</span>{" "}
525− <span className="muted">— {g.message}</span>
526− </li>
527− ))}
528− </ul>
529− </details>
530− ) : (
531− "—"
532− )}
533− </dd>
534− </dl>
535− <p className="subtle mt-2 text-xs">
536− Artifact digests (SHA-256) are listed with each download; the full list is in
537− provenance/checksums.sha256.
538− </p>
539− </div>
540− </section>
541−
542− <section aria-labelledby="cite">
543− <h2 id="cite" className="serif text-xl font-semibold">
544− Cite this working paper
545− </h2>
546− <div className="mt-3">
547− <Tabs
548− tabs={[
549− {
550− label: "BibTeX",
551− content: (
552− <div>
553− <pre className="surface overflow-auto p-4 text-xs">{bibtexFor(cite)}</pre>
554− <div className="mt-2 flex gap-2">
555− <CopyButton text={bibtexFor(cite)} />
556− <a className="btn btn-sm" href={`/research/${p.paper.slug}/cite.bib`}>
557− Download .bib
558− </a>
559− </div>
560− </div>
561− ),
562− },
563− {
564− label: "RIS",
565− content: (
566− <div>
567− <pre className="surface overflow-auto p-4 text-xs">{risFor(cite)}</pre>
568− <div className="mt-2 flex gap-2">
569− <CopyButton text={risFor(cite)} />
570− <a className="btn btn-sm" href={`/research/${p.paper.slug}/cite.ris`}>
571− Download .ris
572− </a>
573− </div>
574− </div>
575− ),
576− },
577− {
578− label: "Plain text",
579− content: (
580− <div>
581− <p className="surface p-4 text-sm">{plainCitationFor(cite)}</p>
582− <div className="mt-2 flex gap-2">
583− <CopyButton text={plainCitationFor(cite)} />
584− <a className="btn btn-sm" href={`/research/${p.paper.slug}/cite.txt`}>
585− Download .txt
586− </a>
587− </div>
588− </div>
589− ),
590− },
591− ]}
592− />
593− </div>
594− </section>
595−
596− <section aria-labelledby="history" className="grid gap-6 md:grid-cols-2">
597− <div>
598− <h2 id="history" className="serif text-xl font-semibold">
599− Version history
600− </h2>
601− <ol className="mt-3 space-y-2 text-sm">
602− {p.versions.map((x) => (
603− <li key={x.id} className="surface flex items-start justify-between gap-3 p-3">
604− <div>
605− <span className="font-medium">Version {x.versionNo}</span>{" "}
606− <span className="muted">· {fmtDate(x.publishedAt)}</span>
607− <p className="muted mt-1">{x.changelog}</p>
608− </div>
609− {!withdrawn && (
610− <a className="btn btn-sm" href={`${x.pdfPublicPath}?download=1`}>
611− PDF v{x.versionNo}
612− </a>
613− )}
614− </li>
615− ))}
616− </ol>
617− </div>
618− <div>
619− <h2 className="serif text-xl font-semibold">Corrections and notices</h2>
620− {p.corrections.length === 0 && !p.retraction ? (
621− <p className="muted mt-3 text-sm">No corrections have been issued.</p>
622− ) : (
623− <ul className="mt-3 space-y-2 text-sm">
624− {p.corrections.map((c) => (
625− <li key={c.id} className="surface p-3">
626− <span className="font-medium">
627− Correction v{c.fromVersionNo} → v{c.toVersionNo}
628− </span>{" "}
629− <span className="muted">· {fmtDate(c.createdAt)}</span>
630− <p className="mt-1">{c.notice}</p>
631 </li> 582 </li>
632 ))} 583 ))}
633− {p.retraction && (
634− <li className="surface p-3">
635− <span className="font-medium">Retraction</span>{" "}
636− <span className="muted">· {fmtDate(p.retraction.retractedAt)}</span>
637− <p className="mt-1">{p.retraction.notice}</p>
638− </li>
639− )}
640 </ul> 584 </ul>
641− )} 585+ </section>
586+ )}
587+ <div className="pb-6">
588+ <Disclosure />
642 </div> 589 </div>
643− </section> 590+ </div>
644 591
645− {p.related.length > 0 && ( 592+ {/* mobile sticky action bar */}
646− <section aria-labelledby="related"> 593+ {!withdrawn && (
647− <h2 id="related" className="serif text-xl font-semibold"> 594+ <div className="mobile-bar flex items-center gap-2 lg:hidden">
648− Related working papers 595+ <span className="mono-id min-w-0 flex-1 truncate">
649− </h2> 596+ {p.paper.publicId} · v{v.versionNo}
650− <p className="muted mt-1 text-xs"> 597+ </span>
651− Selected by shared discipline or keywords recorded in verified metadata. 598+ <a href="#pdf" className="btn btn-sm">
652− </p> 599+ Read
653− <ul className="mt-3 grid gap-4 md:grid-cols-2"> 600+ </a>
654− {p.related.map((r) => ( 601+ <a href={`${v.pdfPublicPath}?download=1`} className="btn btn-primary btn-sm">
655− <li key={r.publicId}> 602+ <IconDownload size={14} /> PDF
656− <PaperCard p={r} /> 603+ </a>
657− </li> 604+ </div>
658− ))}
659− </ul>
660− </section>
661 )} 605 )}
662− <Disclosure />
663 </article> 606 </article>
664 ); 607 );
665 } 608 }
modified apps/web/src/app/(public)/research/page.tsx +44 −33
@@ -2,10 +2,10 @@ import { listSeries, searchPapers } from "@autoscholar/core";
2 import { PublicSearchQuery } from "@autoscholar/schemas"; 2 import { PublicSearchQuery } from "@autoscholar/schemas";
3 import type { Metadata } from "next"; 3 import type { Metadata } from "next";
4 import { Disclosure } from "@/components/Disclosure"; 4 import { Disclosure } from "@/components/Disclosure";
5−import { EmptyState } from "@/components/EmptyState"; 5+import { EmptyResearchState, EmptyState } from "@/components/EmptyState";
6+import { FilterSidebar, LibraryFilters } from "@/components/LibraryFilters";
6 import { Pagination } from "@/components/Pagination"; 7 import { Pagination } from "@/components/Pagination";
7 import { PaperCard } from "@/components/PaperCard"; 8 import { PaperCard } from "@/components/PaperCard";
8−import { SearchFilters } from "@/components/SearchFilters";
9 import { t } from "@/lib/i18n"; 9 import { t } from "@/lib/i18n";
10 import { db } from "@/lib/server/db"; 10 import { db } from "@/lib/server/db";
11 11
@@ -38,45 +38,56 @@ export default async function ResearchPage({
38 }; 38 };
39 const anyFilter = Object.keys(raw).some((k) => !["page", "sort", "pageSize"].includes(k)); 39 const anyFilter = Object.keys(raw).some((k) => !["page", "sort", "pageSize"].includes(k));
40 return ( 40 return (
41− <div className="space-y-6"> 41+ <div className="container-x section-tight">
42− <header> 42+ <header className="max-w-2xl">
43 <p className="eyebrow">Library</p> 43 <p className="eyebrow">Library</p>
44− <h1 className="serif mt-1 text-3xl font-semibold">Working papers</h1> 44+ <h1 className="title-1 mt-2">Working papers</h1>
45− <p className="muted mt-2 max-w-2xl text-sm"> 45+ <p className="muted mt-2 text-sm leading-relaxed">
46− Search titles, abstracts, keywords and verified metadata. Filter by discipline, methodology, series, 46+ Search titles, abstracts, keywords and verified metadata. Every entry is an AI-generated working
47− availability of code and data, and publication status. 47+ paper with its evidence attached.
48 </p> 48 </p>
49 </header> 49 </header>
50− <SearchFilters q={raw} series={series} />
51 {!parsed.success && ( 50 {!parsed.success && (
52− <p role="alert" className="text-sm" style={{ color: "var(--color-danger-500)" }}> 51+ <p role="alert" className="mt-4 text-sm" style={{ color: "var(--color-danger-500)" }}>
53 Some filters were invalid and have been ignored. 52 Some filters were invalid and have been ignored.
54 </p> 53 </p>
55 )} 54 )}
56− <div className="flex items-center justify-between text-sm"> 55+ <div className="mt-6 grid gap-8 lg:grid-cols-12">
57− <p className="muted" aria-live="polite"> 56+ <div className="lg:col-span-9 lg:col-start-4 lg:row-start-1">
58− {res.total === 0 ? "No results" : `${res.total} ${res.total === 1 ? "paper" : "papers"}`} 57+ <LibraryFilters q={raw} series={series} total={res.total} />
59− {raw.q ? ` for “${raw.q}”` : ""} 58+ </div>
60− </p> 59+ <aside
61− <Pagination page={res.page} pageSize={res.pageSize} total={res.total} hrefFor={hrefFor} /> 60+ className="hidden lg:col-span-3 lg:col-start-1 lg:row-span-2 lg:row-start-1 lg:block"
62− </div> 61+ aria-label="Filters"
63− {res.items.length === 0 ? ( 62+ >
64− <EmptyState title={anyFilter ? t("search.empty") : "No working papers yet."}> 63+ <FilterSidebar q={raw} series={series} />
65− {anyFilter ? <a href="/research">Clear all filters</a> : t("library.empty")} 64+ </aside>
66− </EmptyState> 65+ <div className="lg:col-span-9 lg:col-start-4">
67− ) : ( 66+ {res.items.length === 0 ? (
68− <ul className="grid gap-4 md:grid-cols-2"> 67+ anyFilter ? (
69− {res.items.map((p) => ( 68+ <EmptyState title={t("search.empty")}>
70− <li key={p.publicId}> 69+ <a href="/research">Clear all filters</a>
71− <PaperCard p={p} /> 70+ </EmptyState>
72− </li> 71+ ) : (
73− ))} 72+ <EmptyResearchState />
74− </ul> 73+ )
75− )} 74+ ) : (
76− <div className="flex justify-end"> 75+ <ul className="border-t hairline">
77− <Pagination page={res.page} pageSize={res.pageSize} total={res.total} hrefFor={hrefFor} /> 76+ {res.items.map((p, i) => (
77+ <li key={p.publicId}>
78+ <PaperCard p={p} variant="row" index={i} />
79+ </li>
80+ ))}
81+ </ul>
82+ )}
83+ <div className="mt-6 flex items-center justify-between gap-4">
84+ <Pagination page={res.page} pageSize={res.pageSize} total={res.total} hrefFor={hrefFor} />
85+ </div>
86+ <div className="mt-8">
87+ <Disclosure compact />
88+ </div>
89+ </div>
78 </div> 90 </div>
79− <Disclosure compact />
80 </div> 91 </div>
81 ); 92 );
82 } 93 }
modified apps/web/src/app/(public)/series/page.tsx +6 −6
@@ -10,10 +10,10 @@ export const metadata: Metadata = { title: "Working-paper series", alternates: {
10 export default async function SeriesPage() { 10 export default async function SeriesPage() {
11 const rows = await listSeries(db()); 11 const rows = await listSeries(db());
12 return ( 12 return (
13− <div className="space-y-8"> 13+ <div className="container-x section-tight space-y-8">
14− <header> 14+ <header className="max-w-2xl">
15 <p className="eyebrow">Collections</p> 15 <p className="eyebrow">Collections</p>
16− <h1 className="serif mt-1 text-3xl font-semibold">Working-paper series</h1> 16+ <h1 className="title-1 mt-2">Working-paper series</h1>
17 <p className="muted mt-2 max-w-2xl text-sm"> 17 <p className="muted mt-2 max-w-2xl text-sm">
18 Papers are numbered in a stable series (AS-WP-YEAR-NNNN). Numbers are allocated inside the 18 Papers are numbered in a stable series (AS-WP-YEAR-NNNN). Numbers are allocated inside the
19 publication transaction and never reused, even after a retraction. 19 publication transaction and never reused, even after a retraction.
@@ -24,14 +24,14 @@ export default async function SeriesPage() {
24 ) : ( 24 ) : (
25 <ul className="grid gap-3 md:grid-cols-2"> 25 <ul className="grid gap-3 md:grid-cols-2">
26 {rows.map((s) => ( 26 {rows.map((s) => (
27− <li key={s.id} className="surface p-5"> 27+ <li key={s.id} className="surface card-link relative p-6">
28 <Link 28 <Link
29 href={`/research?series=${s.slug}`} 29 href={`/research?series=${s.slug}`}
30− className="serif text-lg font-semibold no-underline hover:underline" 30+ className="title-2 no-underline after:absolute after:inset-0 hover:underline"
31 > 31 >
32 {s.name} 32 {s.name}
33 </Link> 33 </Link>
34− <p className="subtle mt-1 font-mono text-xs"> 34+ <p className="mono-id mt-2">
35 {s.paperCount} {s.paperCount === 1 ? "paper" : "papers"} 35 {s.paperCount} {s.paperCount === 1 ? "paper" : "papers"}
36 </p> 36 </p>
37 {s.description && <p className="muted mt-2 text-sm">{s.description}</p>} 37 {s.description && <p className="muted mt-2 text-sm">{s.description}</p>}
modified apps/web/src/app/(public)/topics/[slug]/page.tsx +11 −7
@@ -58,8 +58,8 @@ export default async function TopicPage({ params }: { params: Promise<{ slug: st
58 })) 58 }))
59 .sort((a, b) => b.firstPublishedAt.localeCompare(a.firstPublishedAt)); 59 .sort((a, b) => b.firstPublishedAt.localeCompare(a.firstPublishedAt));
60 return ( 60 return (
61− <div className="space-y-8"> 61+ <div className="container-x section-tight space-y-8">
62− <header> 62+ <header className="max-w-2xl">
63 <p className="eyebrow"> 63 <p className="eyebrow">
64 <Link href="/topics">Topics</Link> 64 <Link href="/topics">Topics</Link>
65 {parent && ( 65 {parent && (
@@ -69,13 +69,17 @@ export default async function TopicPage({ params }: { params: Promise<{ slug: st
69 </> 69 </>
70 )} 70 )}
71 </p> 71 </p>
72− <h1 className="serif mt-1 text-3xl font-semibold">{topic.name}</h1> 72+ <h1 className="title-1 mt-2">{topic.name}</h1>
73 {topic.description && <p className="muted mt-2 max-w-2xl text-sm">{topic.description}</p>} 73 {topic.description && <p className="muted mt-2 max-w-2xl text-sm">{topic.description}</p>}
74 {children.length > 0 && ( 74 {children.length > 0 && (
75 <ul className="mt-3 flex flex-wrap gap-1.5" aria-label="Subfields"> 75 <ul className="mt-3 flex flex-wrap gap-1.5" aria-label="Subfields">
76 {children.map((c) => ( 76 {children.map((c) => (
77 <li key={c.id}> 77 <li key={c.id}>
78− <Link href={`/topics/${c.slug}`} className="badge no-underline"> 78+ <Link
79+ href={`/topics/${c.slug}`}
80+ className="chip no-underline"
81+ style={{ minHeight: "1.75rem" }}
82+ >
79 {c.name} 83 {c.name}
80 </Link> 84 </Link>
81 </li> 85 </li>
@@ -88,10 +92,10 @@ export default async function TopicPage({ params }: { params: Promise<{ slug: st
88 Papers appear here once they pass every quality gate. 92 Papers appear here once they pass every quality gate.
89 </EmptyState> 93 </EmptyState>
90 ) : ( 94 ) : (
91− <ul className="grid gap-4 md:grid-cols-2"> 95+ <ul className="border-t hairline">
92− {items.map((p) => ( 96+ {items.map((p, i) => (
93 <li key={p.publicId}> 97 <li key={p.publicId}>
94− <PaperCard p={p} /> 98+ <PaperCard p={p} variant="row" index={i} />
95 </li> 99 </li>
96 ))} 100 ))}
97 </ul> 101 </ul>
modified apps/web/src/app/(public)/topics/page.tsx +12 −11
@@ -15,11 +15,11 @@ export default async function TopicsPage() {
15 const topics = await listTopics(db()); 15 const topics = await listTopics(db());
16 const roots = topics.filter((t) => !t.parentId); 16 const roots = topics.filter((t) => !t.parentId);
17 return ( 17 return (
18− <div className="space-y-8"> 18+ <div className="container-x section-tight space-y-8">
19− <header> 19+ <header className="max-w-2xl">
20 <p className="eyebrow">Browse</p> 20 <p className="eyebrow">Browse</p>
21− <h1 className="serif mt-1 text-3xl font-semibold">Scientific disciplines</h1> 21+ <h1 className="title-1 mt-2">Scientific disciplines</h1>
22− <p className="muted mt-2 max-w-2xl text-sm"> 22+ <p className="muted mt-2 text-sm leading-relaxed">
23 Every legitimate academic discipline is in scope. Methodology follows the question: econometrics is 23 Every legitimate academic discipline is in scope. Methodology follows the question: econometrics is
24 never imposed on a proof, and a literature review never pretends to be an experiment. 24 never imposed on a proof, and a literature review never pretends to be an experiment.
25 </p> 25 </p>
@@ -31,14 +31,11 @@ export default async function TopicsPage() {
31 {roots.map((t) => { 31 {roots.map((t) => {
32 const children = topics.filter((c) => c.parentId === t.id); 32 const children = topics.filter((c) => c.parentId === t.id);
33 return ( 33 return (
34− <li key={t.id} className="surface p-4"> 34+ <li key={t.id} className="surface card-link relative p-5">
35− <Link 35+ <Link href={`/topics/${t.slug}`} className="title-3 no-underline hover:underline">
36− href={`/topics/${t.slug}`}
37− className="serif text-lg font-semibold no-underline hover:underline"
38− >
39 {t.name} 36 {t.name}
40 </Link> 37 </Link>
41− <p className="subtle mt-1 font-mono text-xs"> 38+ <p className="mono-id mt-1">
42 {t.paperCount} {t.paperCount === 1 ? "paper" : "papers"} 39 {t.paperCount} {t.paperCount === 1 ? "paper" : "papers"}
43 </p> 40 </p>
44 {t.description && <p className="muted mt-2 text-sm">{t.description}</p>} 41 {t.description && <p className="muted mt-2 text-sm">{t.description}</p>}
@@ -46,7 +43,11 @@ export default async function TopicsPage() {
46 <ul className="mt-3 flex flex-wrap gap-1.5"> 43 <ul className="mt-3 flex flex-wrap gap-1.5">
47 {children.map((c) => ( 44 {children.map((c) => (
48 <li key={c.id}> 45 <li key={c.id}>
49− <Link href={`/topics/${c.slug}`} className="badge no-underline"> 46+ <Link
47+ href={`/topics/${c.slug}`}
48+ className="chip no-underline"
49+ style={{ minHeight: "1.75rem" }}
50+ >
50 {c.name} 51 {c.name}
51 </Link> 52 </Link>
52 </li> 53 </li>
modified apps/web/src/app/(public)/transparency/page.tsx +86 −53
@@ -1,5 +1,6 @@
1 import type { Metadata } from "next"; 1 import type { Metadata } from "next";
2 import Link from "next/link"; 2 import Link from "next/link";
3+import { SectionHeading } from "@/components/SectionHeading";
3 4
4 export const metadata: Metadata = { title: "Transparency", alternates: { canonical: "/transparency" } }; 5 export const metadata: Metadata = { title: "Transparency", alternates: { canonical: "/transparency" } };
5 6
@@ -60,59 +61,91 @@ const SOFT_GATES = [
60 61
61 export default function TransparencyPage() { 62 export default function TransparencyPage() {
62 return ( 63 return (
63− <div className="mx-auto max-w-3xl"> 64+ <div>
64− <p className="eyebrow">Transparency</p> 65+ <section className="border-b hairline" style={{ background: "var(--bg-muted)" }}>
65− <h1 className="serif mt-1 text-3xl font-semibold">What you should know about these papers</h1> 66+ <div className="container-x section-tight max-w-none">
66− <h2 className="serif mt-8 text-xl font-semibold">Model disclosure</h2> 67+ <div className="max-w-3xl">
67− <p className="muted mt-2 text-sm leading-relaxed"> 68+ <p className="eyebrow">Transparency</p>
68− Papers are produced by Claude models accessed through the Anthropic API and orchestrated by 69+ <h1 className="title-1 mt-2">What you should know about these papers</h1>
69− AutoScholar's own software. The model used for research and the separate model used for automated 70+ <p className="lede mt-4">
70− review are recorded in each paper's provenance. Automated review scores are internal critique signals; 71+ Papers are produced by Claude models accessed through the Anthropic API and orchestrated by
71− they are <strong>not</strong> independent scientific validation and are never a substitute for human 72+ AutoScholar's own software. The research model and the separate review model are recorded in
72− peer review. 73+ each paper's provenance. Automated review scores are internal critique signals; they are{" "}
73− </p> 74+ <strong>not</strong> independent scientific validation and never a substitute for human peer
74− <h2 className="serif mt-8 text-xl font-semibold">Hard quality gates (block publication)</h2> 75+ review.
75− <ul className="mt-2 space-y-2 text-sm"> 76+ </p>
76− {HARD_GATES.map(([g, d]) => ( 77+ </div>
77− <li key={g} className="grid gap-1 sm:grid-cols-[14rem_1fr]"> 78+ </div>
78− <code className="text-xs">{g}</code> 79+ </section>
79− <span className="muted">{d}</span> 80+ <div className="container-x">
80− </li> 81+ <section className="section-tight" aria-labelledby="hard">
81− ))} 82+ <SectionHeading eyebrow="Hard gates" title="Checks that block publication" id="hard">
82− </ul> 83+ Computed on the server from stored artifacts. Any failure keeps the run private.
83− <h2 className="serif mt-8 text-xl font-semibold">Soft gates (recorded as warnings)</h2> 84+ </SectionHeading>
84− <p className="muted mt-2 text-sm"> 85+ <ol className="mt-8 grid gap-3 md:grid-cols-2">
85− <code className="text-xs">{SOFT_GATES.join(", ")}</code>. Warnings are shown on the paper page. 86+ {HARD_GATES.map(([g, d], i) => (
86− </p> 87+ <li key={g} className="surface grid grid-cols-[2.25rem_1fr] gap-3 p-4">
87− <h2 className="serif mt-8 text-xl font-semibold">Corrections and retractions</h2> 88+ <span className="mono-id pt-0.5">{String(i + 1).padStart(2, "0")}</span>
88− <p className="muted mt-2 text-sm leading-relaxed"> 89+ <span>
89− Published artifacts are never edited in place. A correction publishes a new version with a public 90+ <code className="text-xs" style={{ color: "var(--accent-strong)" }}>
90− notice and keeps every previous version downloadable. A retraction keeps a permanent tombstone page 91+ {g}
91− with the reason; artifacts may be withdrawn from delivery when legally or ethically required, while 92+ </code>
92− the record of their existence remains. 93+ <span className="muted mt-1 block text-sm leading-relaxed">{d}</span>
93− </p> 94+ </span>
94− <h2 className="serif mt-8 text-xl font-semibold">Limitations</h2> 95+ </li>
95− <ul className="muted mt-2 list-disc space-y-1 pl-5 text-sm"> 96+ ))}
96− <li> 97+ </ol>
97− Gates check structure, traceability and consistency; they cannot certify that a scientific 98+ </section>
98− conclusion is true. 99+ <section className="section-tight border-t hairline" aria-labelledby="soft">
99− </li> 100+ <SectionHeading eyebrow="Soft gates" title="Recorded as warnings" id="soft" tone="sci">
100− <li> 101+ Shown on the paper page under provenance; they never block release on their own.
101− Reference verification confirms a work exists and its metadata matches; it does not confirm that the 102+ </SectionHeading>
102− cited claim is faithfully represented. 103+ <ul className="mt-6 flex flex-wrap gap-2">
103− </li> 104+ {SOFT_GATES.map((g) => (
104− <li> 105+ <li key={g} className="chip">
105− Reproduction runs re-execute what the run itself produced; external data may have changed since 106+ <code className="text-[11px]">{g}</code>
106− acquisition. 107+ </li>
107− </li> 108+ ))}
108− <li> 109+ </ul>
109− Medically sensitive, high-risk or regulated topics require human approval before release and may be 110+ </section>
110− refused entirely. 111+ <section
111− </li> 112+ className="section-tight grid gap-10 border-t hairline lg:grid-cols-2"
112− </ul> 113+ aria-labelledby="corrections"
113− <p className="muted mt-8 text-sm"> 114+ >
114− See also the <Link href="/legal/research-disclaimer">research disclaimer</Link>. 115+ <div>
115− </p> 116+ <h2 id="corrections" className="title-2">
117+ Corrections and retractions
118+ </h2>
119+ <p className="muted mt-3 text-sm leading-relaxed">
120+ Published artifacts are never edited in place. A correction publishes a new version with a
121+ public notice and keeps every previous version downloadable. A retraction keeps a permanent
122+ tombstone page with the reason; artifacts may be withdrawn from delivery when legally or
123+ ethically required, while the record of their existence remains.
124+ </p>
125+ </div>
126+ <div>
127+ <h2 className="title-2">Limitations</h2>
128+ <ul className="muted mt-3 space-y-2 text-sm leading-relaxed">
129+ {[
130+ "Gates check structure, traceability and consistency; they cannot certify that a scientific conclusion is true.",
131+ "Reference verification confirms a work exists and its metadata matches; it does not confirm that the cited claim is faithfully represented.",
132+ "Reproduction runs re-execute what the run itself produced; external data may have changed since acquisition.",
133+ "Medically sensitive, high-risk or regulated topics require human approval before release and may be refused entirely.",
134+ ].map((l) => (
135+ <li key={l} className="flex gap-2">
136+ <span aria-hidden="true" style={{ color: "var(--accent)" }}>
137+ —
138+ </span>
139+ <span>{l}</span>
140+ </li>
141+ ))}
142+ </ul>
143+ <p className="muted mt-6 text-sm">
144+ See also the <Link href="/legal/research-disclaimer">research disclaimer</Link>.
145+ </p>
146+ </div>
147+ </section>
148+ </div>
116 </div> 149 </div>
117 ); 150 );
118 } 151 }
added apps/web/src/app/admin/(console)/AdminNav.tsx +95 −0
@@ -0,0 +1,95 @@
1+"use client";
2+import Link from "next/link";
3+import { usePathname } from "next/navigation";
4+import { useEffect, useState } from "react";
5+import { IconClose, IconMenu } from "@/components/Icons";
6+
7+/** Admin navigation: vertical list on desktop; on mobile a compact button opening a drawer. */
8+export function AdminNav({
9+ items,
10+ mobileOnly = false,
11+}: {
12+ items: Array<[string, string]>;
13+ mobileOnly?: boolean;
14+}) {
15+ const pathname = usePathname();
16+ const [open, setOpen] = useState(false);
17+ // biome-ignore lint/correctness/useExhaustiveDependencies: close on navigation
18+ useEffect(() => setOpen(false), [pathname]);
19+ useEffect(() => {
20+ if (!open) return;
21+ const onKey = (e: KeyboardEvent) => e.key === "Escape" && setOpen(false);
22+ document.addEventListener("keydown", onKey);
23+ const prev = document.body.style.overflow;
24+ document.body.style.overflow = "hidden";
25+ return () => {
26+ document.removeEventListener("keydown", onKey);
27+ document.body.style.overflow = prev;
28+ };
29+ }, [open]);
30+ const isCurrent = (href: string) => (href === "/admin" ? pathname === "/admin" : pathname.startsWith(href));
31+ const list = (
32+ <nav aria-label="Admin" className="flex flex-col gap-0.5 px-2 pb-2">
33+ {items.map(([href, label]) => (
34+ <Link
35+ key={href}
36+ href={href}
37+ aria-current={isCurrent(href) ? "page" : undefined}
38+ className="nav-link flex min-h-10 items-center text-sm md:min-h-9"
39+ >
40+ {label}
41+ </Link>
42+ ))}
43+ </nav>
44+ );
45+ if (!mobileOnly) return list;
46+ return (
47+ <div className="md:hidden">
48+ <button
49+ type="button"
50+ className="btn-icon"
51+ aria-label={open ? "Close admin menu" : "Open admin menu"}
52+ aria-expanded={open}
53+ aria-controls="admin-drawer"
54+ onClick={() => setOpen((v) => !v)}
55+ >
56+ {open ? <IconClose /> : <IconMenu />}
57+ </button>
58+ {open && (
59+ <>
60+ <button
61+ type="button"
62+ className="drawer-backdrop"
63+ aria-label="Close admin menu"
64+ onClick={() => setOpen(false)}
65+ />
66+ <div
67+ id="admin-drawer"
68+ role="dialog"
69+ aria-modal="true"
70+ aria-label="Admin navigation"
71+ className="drawer-panel"
72+ >
73+ <div className="flex items-center justify-between px-2">
74+ <span className="eyebrow">Admin</span>
75+ <button
76+ type="button"
77+ className="btn-icon"
78+ aria-label="Close admin menu"
79+ onClick={() => setOpen(false)}
80+ >
81+ <IconClose />
82+ </button>
83+ </div>
84+ <div className="mt-3">{list}</div>
85+ <div className="mt-4 px-2">
86+ <Link href="/" className="text-xs">
87+ ← Public site
88+ </Link>
89+ </div>
90+ </div>
91+ </>
92+ )}
93+ </div>
94+ );
95+}
modified apps/web/src/app/admin/(console)/layout.tsx +48 −39
@@ -3,19 +3,20 @@ import { redirect } from "next/navigation";
3 import type { ReactNode } from "react"; 3 import type { ReactNode } from "react";
4 import { ThemeToggle } from "@/components/ThemeToggle"; 4 import { ThemeToggle } from "@/components/ThemeToggle";
5 import { currentSession } from "@/lib/server/session"; 5 import { currentSession } from "@/lib/server/session";
6+import { AdminNav } from "./AdminNav";
6 import { LogoutButton } from "./LogoutButton"; 7 import { LogoutButton } from "./LogoutButton";
7 8
8−const NAV: Array<[string, string]> = [ 9+export const NAV: Array<[string, string, string]> = [
9− ["/admin", "Overview"], 10+ ["/admin", "Overview", "⌂"],
10− ["/admin/new", "New research"], 11+ ["/admin/new", "New research", "+"],
11− ["/admin/projects", "Projects"], 12+ ["/admin/projects", "Projects", "▤"],
12− ["/admin/runs", "Runs"], 13+ ["/admin/runs", "Runs", "▶"],
13− ["/admin/maclustr", "MacLustr"], 14+ ["/admin/maclustr", "MacLustr", "◧"],
14− ["/admin/manuscripts", "Manuscripts"], 15+ ["/admin/manuscripts", "Manuscripts", "¶"],
15− ["/admin/quality", "Quality"], 16+ ["/admin/quality", "Quality", "✓"],
16− ["/admin/publications", "Publications"], 17+ ["/admin/publications", "Publications", "⊕"],
17− ["/admin/templates", "Templates"], 18+ ["/admin/templates", "Templates", "≡"],
18− ["/admin/settings", "Settings & security"], 19+ ["/admin/settings", "Settings & security", "⚙"],
19 ]; 20 ];
20 21
21 export default async function ConsoleLayout({ children }: { children: ReactNode }) { 22 export default async function ConsoleLayout({ children }: { children: ReactNode }) {
@@ -23,44 +24,52 @@ export default async function ConsoleLayout({ children }: { children: ReactNode
23 if (!sess) redirect("/admin/login"); 24 if (!sess) redirect("/admin/login");
24 if (sess.mustChangePassword) redirect("/admin/change-password"); 25 if (sess.mustChangePassword) redirect("/admin/change-password");
25 return ( 26 return (
26− <div className="min-h-dvh md:grid md:grid-cols-[14rem_1fr]"> 27+ <div className="min-h-dvh md:grid md:grid-cols-[15rem_1fr]">
27 <a href="#admin-main" className="skip-link"> 28 <a href="#admin-main" className="skip-link">
28 Skip to content 29 Skip to content
29 </a> 30 </a>
30 <aside 31 <aside
31− className="border-b hairline md:border-r md:border-b-0" 32+ className="sticky top-0 z-30 border-b hairline md:h-dvh md:overflow-y-auto md:border-r md:border-b-0"
32− style={{ background: "var(--bg-muted)" }} 33+ style={{ background: "var(--bg-muted)", paddingTop: "var(--safe-t)" }}
33 > 34 >
34− <div className="flex items-center justify-between px-4 py-3"> 35+ <div className="flex items-center justify-between gap-2 px-4 py-3">
35− <Link href="/admin" className="serif font-semibold no-underline"> 36+ <Link href="/admin" className="flex items-center gap-2 no-underline">
36− AutoScholar <span className="subtle text-xs">admin</span> 37+ <span
37− </Link> 38+ aria-hidden="true"
38− <ThemeToggle /> 39+ className="grid h-7 w-7 place-items-center rounded-md text-[11px] font-semibold"
39− </div> 40+ style={{ background: "var(--fg)", color: "var(--bg)", fontFamily: "var(--font-serif)" }}
40− <nav aria-label="Admin" className="flex gap-1 overflow-x-auto px-2 pb-2 md:flex-col md:pb-4">
41− {NAV.map(([href, label]) => (
42− <Link
43− key={href}
44− href={href}
45− className="whitespace-nowrap rounded-md px-2 py-1.5 text-sm no-underline hover:bg-[var(--bg-elev)]"
46 > 41 >
47− {label} 42+ As
48− </Link> 43+ </span>
49− ))} 44+ <span className="serif font-medium">
50− </nav> 45+ AutoScholar <span className="subtle text-xs font-normal">admin</span>
51− <div className="muted hidden px-4 pb-4 text-xs md:block"> 46+ </span>
52− Signed in as <strong>{sess.username}</strong> 47+ </Link>
53− <div className="mt-2"> 48+ <div className="flex items-center gap-1">
54− <LogoutButton /> 49+ <ThemeToggle />
50+ <AdminNav items={NAV.map(([href, label]) => [href, label])} mobileOnly />
55 </div> 51 </div>
56− <div className="mt-3"> 52+ </div>
57− <Link href="/" className="text-xs"> 53+ <div className="hidden md:block">
58− ← Public site 54+ <AdminNav items={NAV.map(([href, label]) => [href, label])} />
59− </Link> 55+ <div className="muted mt-4 border-t px-4 py-4 text-xs hairline">
56+ Signed in as <strong>{sess.username}</strong>
57+ <div className="mt-2">
58+ <LogoutButton />
59+ </div>
60+ <div className="mt-3">
61+ <Link href="/" className="text-xs">
62+ ← Public site
63+ </Link>
64+ </div>
60 </div> 65 </div>
61 </div> 66 </div>
62 </aside> 67 </aside>
63− <main id="admin-main" className="min-w-0 px-4 py-6 sm:px-6 lg:px-8"> 68+ <main
69+ id="admin-main"
70+ className="min-w-0 px-4 py-6 sm:px-6 lg:px-8"
71+ style={{ paddingBottom: "calc(1.5rem + var(--safe-b))" }}
72+ >
64 {children} 73 {children}
65 </main> 74 </main>
66 </div> 75 </div>
modified apps/web/src/app/admin/(console)/maclustr/page.tsx +2 −2
@@ -14,7 +14,7 @@ export default async function MacLustrPage() {
14 <div className="space-y-6"> 14 <div className="space-y-6">
15 <header> 15 <header>
16 <p className="eyebrow">Compute</p> 16 <p className="eyebrow">Compute</p>
17− <h1 className="serif mt-1 text-2xl font-semibold">MacLustr workers</h1> 17+ <h1 className="title-2 mt-1">MacLustr workers</h1>
18 <p className="muted mt-1 text-sm"> 18 <p className="muted mt-1 text-sm">
19 Authenticated worker telemetry. Workers connect outbound over the private network; nothing here is 19 Authenticated worker telemetry. Workers connect outbound over the private network; nothing here is
20 exposed publicly. 20 exposed publicly.
@@ -37,7 +37,7 @@ export default async function MacLustrPage() {
37 <section key={w.id} className="surface p-4" aria-labelledby={`w-${w.id}`}> 37 <section key={w.id} className="surface p-4" aria-labelledby={`w-${w.id}`}>
38 <div className="flex flex-wrap items-start justify-between gap-3"> 38 <div className="flex flex-wrap items-start justify-between gap-3">
39 <div> 39 <div>
40− <h2 id={`w-${w.id}`} className="serif text-lg font-semibold"> 40+ <h2 id={`w-${w.id}`} className="title-3">
41 {w.name} <StatusBadge status={w.status} /> 41 {w.name} <StatusBadge status={w.status} />
42 </h2> 42 </h2>
43 <p className="muted text-xs"> 43 <p className="muted text-xs">
modified apps/web/src/app/admin/(console)/manuscripts/page.tsx +2 −2
@@ -57,7 +57,7 @@ export default async function ManuscriptsPage({ searchParams }: { searchParams:
57 <div className="space-y-6"> 57 <div className="space-y-6">
58 <header> 58 <header>
59 <p className="eyebrow">Output</p> 59 <p className="eyebrow">Output</p>
60− <h1 className="serif mt-1 text-2xl font-semibold">Manuscripts</h1> 60+ <h1 className="title-2 mt-1">Manuscripts</h1>
61 <p className="muted mt-1 text-sm"> 61 <p className="muted mt-1 text-sm">
62 Draft and final PDFs with metadata and review findings, from private run artifacts. 62 Draft and final PDFs with metadata and review findings, from private run artifacts.
63 </p> 63 </p>
@@ -85,7 +85,7 @@ export default async function ManuscriptsPage({ searchParams }: { searchParams:
85 {cur && ( 85 {cur && (
86 <div className="space-y-4 lg:col-span-9"> 86 <div className="space-y-4 lg:col-span-9">
87 <div className="flex flex-wrap items-center justify-between gap-2"> 87 <div className="flex flex-wrap items-center justify-between gap-2">
88− <h2 className="serif text-lg font-semibold">{(meta?.title as string) ?? cur.run.title}</h2> 88+ <h2 className="title-3">{(meta?.title as string) ?? cur.run.title}</h2>
89 <div className="flex gap-2"> 89 <div className="flex gap-2">
90 <Link href={`/admin/runs/${cur.run.id}`} className="btn btn-sm"> 90 <Link href={`/admin/runs/${cur.run.id}`} className="btn btn-sm">
91 Run 91 Run
modified apps/web/src/app/admin/(console)/new/NewResearchForm.tsx +5 −5
@@ -166,7 +166,7 @@ export function NewResearchForm({ projects, templates, initialTemplate, initialP
166 <div className="grid gap-6 lg:grid-cols-12"> 166 <div className="grid gap-6 lg:grid-cols-12">
167 <section className="space-y-4 lg:col-span-7"> 167 <section className="space-y-4 lg:col-span-7">
168 <div className="surface p-4"> 168 <div className="surface p-4">
169− <h2 className="serif text-lg font-semibold">1. Research instruction (CLAUDE.md)</h2> 169+ <h2 className="title-3">1. Research instruction (CLAUDE.md)</h2>
170 <div className="mt-3 flex flex-wrap items-center gap-3 text-sm"> 170 <div className="mt-3 flex flex-wrap items-center gap-3 text-sm">
171 <label className="btn cursor-pointer"> 171 <label className="btn cursor-pointer">
172 Upload .md / .txt 172 Upload .md / .txt
@@ -226,7 +226,7 @@ export function NewResearchForm({ projects, templates, initialTemplate, initialP
226 </p> 226 </p>
227 </div> 227 </div>
228 <div className="surface p-4"> 228 <div className="surface p-4">
229− <h2 className="serif text-lg font-semibold">2. Project</h2> 229+ <h2 className="title-3">2. Project</h2>
230 <div className="mt-3 grid gap-3 sm:grid-cols-2"> 230 <div className="mt-3 grid gap-3 sm:grid-cols-2">
231 <label className="text-sm"> 231 <label className="text-sm">
232 Existing project 232 Existing project
@@ -286,7 +286,7 @@ export function NewResearchForm({ projects, templates, initialTemplate, initialP
286 </div> 286 </div>
287 {v && ( 287 {v && (
288 <div className="surface p-4" aria-live="polite"> 288 <div className="surface p-4" aria-live="polite">
289− <h2 className="serif text-lg font-semibold">Preflight — instruction v{uploaded?.version}</h2> 289+ <h2 className="title-3">Preflight — instruction v{uploaded?.version}</h2>
290 <p className="font-mono text-xs break-all"> 290 <p className="font-mono text-xs break-all">
291 sha256 {v.sha256} · {v.byteSize} bytes 291 sha256 {v.sha256} · {v.byteSize} bytes
292 </p> 292 </p>
@@ -316,7 +316,7 @@ export function NewResearchForm({ projects, templates, initialTemplate, initialP
316 </section> 316 </section>
317 <section className="space-y-4 lg:col-span-5"> 317 <section className="space-y-4 lg:col-span-5">
318 <div className="surface p-4"> 318 <div className="surface p-4">
319− <h2 className="serif text-lg font-semibold">3. Run configuration</h2> 319+ <h2 className="title-3">3. Run configuration</h2>
320 <div className="mt-3 grid gap-3"> 320 <div className="mt-3 grid gap-3">
321 <label className="text-sm"> 321 <label className="text-sm">
322 Working title 322 Working title
@@ -450,7 +450,7 @@ export function NewResearchForm({ projects, templates, initialTemplate, initialP
450 </div> 450 </div>
451 </div> 451 </div>
452 <div className="surface p-4"> 452 <div className="surface p-4">
453− <h2 className="serif text-lg font-semibold">4. Launch</h2> 453+ <h2 className="title-3">4. Launch</h2>
454 <dl className="muted mt-2 grid grid-cols-[max-content_1fr] gap-x-3 gap-y-1 text-xs"> 454 <dl className="muted mt-2 grid grid-cols-[max-content_1fr] gap-x-3 gap-y-1 text-xs">
455 <dt>Model</dt> 455 <dt>Model</dt>
456 <dd className="font-mono">{defaults.model}</dd> 456 <dd className="font-mono">{defaults.model}</dd>
modified apps/web/src/app/admin/(console)/new/page.tsx +1 −1
@@ -31,7 +31,7 @@ export default async function NewResearch({
31 <div className="space-y-6"> 31 <div className="space-y-6">
32 <header> 32 <header>
33 <p className="eyebrow">Launch</p> 33 <p className="eyebrow">Launch</p>
34− <h1 className="serif mt-1 text-2xl font-semibold">New research</h1> 34+ <h1 className="title-2 mt-1">New research</h1>
35 <p className="muted mt-1 max-w-2xl text-sm"> 35 <p className="muted mt-1 max-w-2xl text-sm">
36 Upload or paste the paper-specific CLAUDE.md. The platform validates it, freezes it as an immutable 36 Upload or paste the paper-specific CLAUDE.md. The platform validates it, freezes it as an immutable
37 version, builds a server-side manifest and launches an idempotent run on a MacLustr worker. 37 version, builds a server-side manifest and launches an idempotent run on a MacLustr worker.
modified apps/web/src/app/admin/(console)/page.tsx +124 −54
@@ -1,5 +1,6 @@
1 import { listRuns, listWorkers, overviewCounts } from "@autoscholar/core"; 1 import { listRuns, listWorkers, overviewCounts } from "@autoscholar/core";
2 import { papers, securityEvents } from "@autoscholar/db"; 2 import { papers, securityEvents } from "@autoscholar/db";
3+import { STAGES } from "@autoscholar/schemas";
3 import { desc, sql } from "drizzle-orm"; 4 import { desc, sql } from "drizzle-orm";
4 import Link from "next/link"; 5 import Link from "next/link";
5 import { StatusBadge } from "@/components/StatusBadge"; 6 import { StatusBadge } from "@/components/StatusBadge";
@@ -14,43 +15,107 @@ export default async function Overview() {
14 const workers = await listWorkers(d); 15 const workers = await listWorkers(d);
15 const [pubs] = await d.select({ n: sql<number>`count(*)::int` }).from(papers); 16 const [pubs] = await d.select({ n: sql<number>`count(*)::int` }).from(papers);
16 const alerts = await d.select().from(securityEvents).orderBy(desc(securityEvents.createdAt)).limit(8); 17 const alerts = await d.select().from(securityEvents).orderBy(desc(securityEvents.createdAt)).limit(8);
17− const recent = await listRuns(d, { limit: 8 }); 18+ const recent = await listRuns(d, { limit: 10 });
18− const tiles: Array<[string, number]> = [ 19+ const active = recent.filter((r) =>
19− ["Running", (counts.byStatus.running ?? 0) + (counts.byStatus.provisioning ?? 0)], 20+ ["running", "provisioning", "queued", "retrying", "quality_check", "publishing"].includes(r.status),
20− ["Queued", (counts.byStatus.queued ?? 0) + (counts.byStatus.retrying ?? 0)], 21+ );
21− ["Blocked", (counts.byStatus.quality_failed ?? 0) + (counts.byStatus.awaiting_approval ?? 0)], 22+ const tiles: Array<[string, number, string]> = [
22− ["Completed", counts.byStatus.published ?? 0], 23+ [
23− ["Failed", (counts.byStatus.failed ?? 0) + (counts.byStatus.cancelled ?? 0)], 24+ "Running",
25+ (counts.byStatus.running ?? 0) + (counts.byStatus.provisioning ?? 0),
26+ "var(--color-info-500)",
27+ ],
28+ ["Queued", (counts.byStatus.queued ?? 0) + (counts.byStatus.retrying ?? 0), "var(--fg-muted)"],
29+ [
30+ "Needs attention",
31+ (counts.byStatus.quality_failed ?? 0) + (counts.byStatus.awaiting_approval ?? 0),
32+ "var(--color-warn-500)",
33+ ],
34+ ["Published", counts.byStatus.published ?? 0, "var(--color-ok-500)"],
35+ [
36+ "Failed / cancelled",
37+ (counts.byStatus.failed ?? 0) + (counts.byStatus.cancelled ?? 0),
38+ "var(--color-danger-500)",
39+ ],
24 ]; 40 ];
25 const online = workers.filter((w) => w.status === "online" || w.status === "draining"); 41 const online = workers.filter((w) => w.status === "online" || w.status === "draining");
26 return ( 42 return (
27− <div className="space-y-8"> 43+ <div className="space-y-6">
28 <header className="flex flex-wrap items-end justify-between gap-3"> 44 <header className="flex flex-wrap items-end justify-between gap-3">
29 <div> 45 <div>
30 <p className="eyebrow">Command center</p> 46 <p className="eyebrow">Command center</p>
31− <h1 className="serif mt-1 text-2xl font-semibold">Overview</h1> 47+ <h1 className="title-2 mt-1">Overview</h1>
32 </div> 48 </div>
33 <Link href="/admin/new" className="btn btn-primary"> 49 <Link href="/admin/new" className="btn btn-primary">
34 New research 50 New research
35 </Link> 51 </Link>
36 </header> 52 </header>
37− <section aria-label="Job counts" className="grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-6"> 53+
38− {tiles.map(([l, n]) => ( 54+ <section aria-label="Job counts" className="grid grid-cols-2 gap-3 sm:grid-cols-3 xl:grid-cols-6">
55+ {tiles.map(([l, n, c]) => (
39 <div key={l} className="surface p-4"> 56 <div key={l} className="surface p-4">
40 <p className="label">{l}</p> 57 <p className="label">{l}</p>
41− <p className="serif mt-1 text-2xl">{n}</p> 58+ <p className="serif mt-1 text-3xl" style={{ color: n > 0 ? c : undefined }}>
59+ {n}
60+ </p>
42 </div> 61 </div>
43 ))} 62 ))}
44 <div className="surface p-4"> 63 <div className="surface p-4">
45 <p className="label">Provider spend</p> 64 <p className="label">Provider spend</p>
46− <p className="serif mt-1 text-2xl">{fmtUsd(counts.totalCostUsd)}</p> 65+ <p className="serif mt-1 text-3xl">{fmtUsd(counts.totalCostUsd)}</p>
47 <p className="subtle text-xs">client-side estimate</p> 66 <p className="subtle text-xs">client-side estimate</p>
48 </div> 67 </div>
49 </section> 68 </section>
50− <section className="grid gap-6 lg:grid-cols-2"> 69+
70+ {active.length > 0 && (
71+ <section className="surface p-4" aria-labelledby="active">
72+ <h2 id="active" className="title-3">
73+ Active research
74+ </h2>
75+ <ul className="mt-3 divide-y hairline">
76+ {active.map((r) => {
77+ const idx = STAGES.findIndex((s) => s.key === r.currentStage);
78+ const pct = Math.max(4, Math.round(((idx + 1) / STAGES.length) * 100));
79+ return (
80+ <li key={r.id} className="grid gap-2 py-3 sm:grid-cols-12 sm:items-center">
81+ <div className="min-w-0 sm:col-span-5">
82+ <Link
83+ href={`/admin/runs/${r.id}`}
84+ className="block truncate font-medium no-underline hover:underline"
85+ >
86+ {r.title}
87+ </Link>
88+ <p className="subtle mt-0.5 font-mono text-[11px]">{r.id}</p>
89+ </div>
90+ <div className="sm:col-span-4">
91+ <div className="flex items-center justify-between text-xs">
92+ <span className="font-mono">{r.currentStage ?? "—"}</span>
93+ <span className="subtle">{idx >= 0 ? `${idx + 1}/${STAGES.length}` : ""}</span>
94+ </div>
95+ <div className="mt-1 h-1.5 rounded-full" style={{ background: "var(--bg-muted)" }}>
96+ <div
97+ className="h-1.5 rounded-full"
98+ style={{ width: `${pct}%`, background: "var(--sci)" }}
99+ />
100+ </div>
101+ </div>
102+ <div className="flex items-center justify-between gap-2 text-xs sm:col-span-3 sm:justify-end">
103+ <StatusBadge status={r.status} />
104+ <span className="subtle">
105+ {fmtUsd(r.totalCostUsd)} · {ago(r.updatedAt)}
106+ </span>
107+ </div>
108+ </li>
109+ );
110+ })}
111+ </ul>
112+ </section>
113+ )}
114+
115+ <section className="grid gap-4 lg:grid-cols-2">
51 <div className="surface p-4"> 116 <div className="surface p-4">
52 <div className="flex items-center justify-between"> 117 <div className="flex items-center justify-between">
53− <h2 className="serif text-lg font-semibold">MacLustr workers</h2> 118+ <h2 className="title-3">MacLustr workers</h2>
54 <Link href="/admin/maclustr" className="text-xs"> 119 <Link href="/admin/maclustr" className="text-xs">
55 Details 120 Details
56 </Link> 121 </Link>
@@ -79,16 +144,16 @@ export default async function Overview() {
79 </div> 144 </div>
80 <div className="surface p-4"> 145 <div className="surface p-4">
81 <div className="flex items-center justify-between"> 146 <div className="flex items-center justify-between">
82− <h2 className="serif text-lg font-semibold">Security alerts</h2> 147+ <h2 className="title-3">Security alerts</h2>
83 <Link href="/admin/settings" className="text-xs"> 148 <Link href="/admin/settings" className="text-xs">
84 Audit log 149 Audit log
85 </Link> 150 </Link>
86 </div> 151 </div>
87− <ul className="mt-3 space-y-1 text-xs"> 152+ <ul className="mt-3 space-y-1.5 text-xs">
88 {alerts.length === 0 && <li className="muted">No security events recorded.</li>} 153 {alerts.length === 0 && <li className="muted">No security events recorded.</li>}
89 {alerts.map((a) => ( 154 {alerts.map((a) => (
90 <li key={a.id} className="flex justify-between gap-2"> 155 <li key={a.id} className="flex justify-between gap-2">
91− <span> 156+ <span className="min-w-0 truncate">
92 <span className="font-mono">{a.kind}</span>{" "} 157 <span className="font-mono">{a.kind}</span>{" "}
93 <span className="muted">{JSON.stringify(a.detail).slice(0, 80)}</span> 158 <span className="muted">{JSON.stringify(a.detail).slice(0, 80)}</span>
94 </span> 159 </span>
@@ -98,50 +163,55 @@ export default async function Overview() {
98 </ul> 163 </ul>
99 </div> 164 </div>
100 </section> 165 </section>
166+
101 <section className="surface p-4"> 167 <section className="surface p-4">
102 <div className="flex items-center justify-between"> 168 <div className="flex items-center justify-between">
103− <h2 className="serif text-lg font-semibold">Recent runs</h2> 169+ <h2 className="title-3">Recent runs</h2>
104 <Link href="/admin/runs" className="text-xs"> 170 <Link href="/admin/runs" className="text-xs">
105 All runs 171 All runs
106 </Link> 172 </Link>
107 </div> 173 </div>
108− <table className="table mt-3"> 174+ <div className="table-wrap mt-3">
109− <thead> 175+ <table className="table">
110− <tr> 176+ <thead>
111− <th>Title</th>
112− <th>Status</th>
113− <th>Stage</th>
114− <th>Attempt</th>
115− <th>Cost</th>
116− <th>Updated</th>
117− </tr>
118− </thead>
119− <tbody>
120− {recent.length === 0 && (
121 <tr> 177 <tr>
122− <td colSpan={6} className="muted py-6 text-center"> 178+ <th>Title</th>
123− No runs yet. Upload a research instruction to start. 179+ <th>Status</th>
124− </td> 180+ <th>Stage</th>
125− </tr> 181+ <th>Attempt</th>
126− )} 182+ <th>Cost</th>
127− {recent.map((r) => ( 183+ <th>Updated</th>
128− <tr key={r.id}>
129− <td>
130− <Link href={`/admin/runs/${r.id}`}>{r.title}</Link>
131− </td>
132− <td>
133− <StatusBadge status={r.status} />
134− </td>
135− <td className="font-mono text-xs">{r.currentStage ?? "—"}</td>
136− <td>
137− {r.currentAttemptNo}/{r.maxAttempts}
138− </td>
139− <td>{fmtUsd(r.totalCostUsd)}</td>
140− <td className="subtle text-xs">{ago(r.updatedAt)}</td>
141 </tr> 184 </tr>
142− ))} 185+ </thead>
143− </tbody> 186+ <tbody>
144− </table> 187+ {recent.length === 0 && (
188+ <tr>
189+ <td colSpan={6} className="muted py-6 text-center">
190+ No runs yet. Upload a research instruction to start.
191+ </td>
192+ </tr>
193+ )}
194+ {recent.map((r) => (
195+ <tr key={r.id}>
196+ <td className="max-w-[18rem]">
197+ <Link href={`/admin/runs/${r.id}`} className="block truncate">
198+ {r.title}
199+ </Link>
200+ </td>
201+ <td>
202+ <StatusBadge status={r.status} />
203+ </td>
204+ <td className="font-mono text-xs">{r.currentStage ?? "—"}</td>
205+ <td>
206+ {r.currentAttemptNo}/{r.maxAttempts}
207+ </td>
208+ <td>{fmtUsd(r.totalCostUsd)}</td>
209+ <td className="subtle text-xs">{ago(r.updatedAt)}</td>
210+ </tr>
211+ ))}
212+ </tbody>
213+ </table>
214+ </div>
145 </section> 215 </section>
146 </div> 216 </div>
147 ); 217 );
modified apps/web/src/app/admin/(console)/projects/[id]/page.tsx +3 −3
@@ -37,14 +37,14 @@ export default async function ProjectDetail({
37 <p className="eyebrow"> 37 <p className="eyebrow">
38 <Link href="/admin/projects">Projects</Link> 38 <Link href="/admin/projects">Projects</Link>
39 </p> 39 </p>
40− <h1 className="serif mt-1 text-2xl font-semibold">{data.project.title}</h1> 40+ <h1 className="title-2 mt-1">{data.project.title}</h1>
41 <p className="muted text-sm"> 41 <p className="muted text-sm">
42 {disciplineLabel(data.project.discipline)} · {data.project.description || "no description"} 42 {disciplineLabel(data.project.discipline)} · {data.project.description || "no description"}
43 </p> 43 </p>
44 </header> 44 </header>
45 <div className="grid gap-6 lg:grid-cols-12"> 45 <div className="grid gap-6 lg:grid-cols-12">
46 <section className="surface p-4 lg:col-span-4"> 46 <section className="surface p-4 lg:col-span-4">
47− <h2 className="serif text-lg font-semibold">Instruction versions</h2> 47+ <h2 className="title-3">Instruction versions</h2>
48 <ul className="mt-2 space-y-2 text-sm"> 48 <ul className="mt-2 space-y-2 text-sm">
49 {data.versions.length === 0 && <li className="muted">None uploaded.</li>} 49 {data.versions.length === 0 && <li className="muted">None uploaded.</li>}
50 {data.versions.map((iv) => ( 50 {data.versions.map((iv) => (
@@ -83,7 +83,7 @@ export default async function ProjectDetail({
83 {selected ? ( 83 {selected ? (
84 <div className="space-y-3"> 84 <div className="space-y-3">
85 <div className="flex flex-wrap items-center justify-between gap-2"> 85 <div className="flex flex-wrap items-center justify-between gap-2">
86− <h2 className="serif text-lg font-semibold">Instruction v{selected.version} (immutable)</h2> 86+ <h2 className="title-3">Instruction v{selected.version} (immutable)</h2>
87 <span className="font-mono text-xs break-all">{selected.sha256}</span> 87 <span className="font-mono text-xs break-all">{selected.sha256}</span>
88 </div> 88 </div>
89 {selected.frontmatter && ( 89 {selected.frontmatter && (
modified apps/web/src/app/admin/(console)/projects/page.tsx +1 −1
@@ -12,7 +12,7 @@ export default async function ProjectsPage() {
12 <header className="flex items-end justify-between"> 12 <header className="flex items-end justify-between">
13 <div> 13 <div>
14 <p className="eyebrow">Research</p> 14 <p className="eyebrow">Research</p>
15− <h1 className="serif mt-1 text-2xl font-semibold">Projects</h1> 15+ <h1 className="title-2 mt-1">Projects</h1>
16 </div> 16 </div>
17 <Link href="/admin/new" className="btn btn-primary"> 17 <Link href="/admin/new" className="btn btn-primary">
18 New research 18 New research
modified apps/web/src/app/admin/(console)/publications/page.tsx +3 −3
@@ -19,10 +19,10 @@ export default async function PublicationsPage() {
19 <div className="space-y-8"> 19 <div className="space-y-8">
20 <header> 20 <header>
21 <p className="eyebrow">Release</p> 21 <p className="eyebrow">Release</p>
22− <h1 className="serif mt-1 text-2xl font-semibold">Publications</h1> 22+ <h1 className="title-2 mt-1">Publications</h1>
23 </header> 23 </header>
24 <section className="surface p-4"> 24 <section className="surface p-4">
25− <h2 className="serif text-lg font-semibold">Awaiting release</h2> 25+ <h2 className="title-3">Awaiting release</h2>
26 <table className="table mt-2"> 26 <table className="table mt-2">
27 <thead> 27 <thead>
28 <tr> 28 <tr>
@@ -65,7 +65,7 @@ export default async function PublicationsPage() {
65 </table> 65 </table>
66 </section> 66 </section>
67 <section className="surface p-4"> 67 <section className="surface p-4">
68− <h2 className="serif text-lg font-semibold">Published papers</h2> 68+ <h2 className="title-3">Published papers</h2>
69 <table className="table mt-2"> 69 <table className="table mt-2">
70 <thead> 70 <thead>
71 <tr> 71 <tr>
modified apps/web/src/app/admin/(console)/quality/[runId]/page.tsx +5 −5
@@ -57,7 +57,7 @@ export default async function QualityDetail({ params }: { params: Promise<{ runI
57 <p className="eyebrow"> 57 <p className="eyebrow">
58 <Link href="/admin/quality">Quality</Link> 58 <Link href="/admin/quality">Quality</Link>
59 </p> 59 </p>
60− <h1 className="serif mt-1 text-2xl font-semibold">{data.run.title}</h1> 60+ <h1 className="title-2 mt-1">{data.run.title}</h1>
61 <p className="muted flex items-center gap-2 text-sm"> 61 <p className="muted flex items-center gap-2 text-sm">
62 <StatusBadge status={data.run.status} /> policy {data.run.qualityPolicyVersion} ·{" "} 62 <StatusBadge status={data.run.status} /> policy {data.run.qualityPolicyVersion} ·{" "}
63 <Link href={`/admin/runs/${runId}`}>run</Link> ·{" "} 63 <Link href={`/admin/runs/${runId}`}>run</Link> ·{" "}
@@ -73,7 +73,7 @@ export default async function QualityDetail({ params }: { params: Promise<{ runI
73 const g = gates.filter((x) => x.evaluationId === id); 73 const g = gates.filter((x) => x.evaluationId === id);
74 return ( 74 return (
75 <section key={id} className="surface p-4" aria-labelledby={`e-${id}`}> 75 <section key={id} className="surface p-4" aria-labelledby={`e-${id}`}>
76− <h2 id={`e-${id}`} className="serif text-lg font-semibold"> 76+ <h2 id={`e-${id}`} className="title-3">
77 Evaluation {i === 0 ? "(latest)" : ""}{" "} 77 Evaluation {i === 0 ? "(latest)" : ""}{" "}
78 <span className="subtle font-mono text-xs"> 78 <span className="subtle font-mono text-xs">
79 {id.slice(0, 8)} · {fmtDateTime(g[0]?.createdAt)} 79 {id.slice(0, 8)} · {fmtDateTime(g[0]?.createdAt)}
@@ -130,7 +130,7 @@ export default async function QualityDetail({ params }: { params: Promise<{ runI
130 })} 130 })}
131 {findings.length > 0 && ( 131 {findings.length > 0 && (
132 <section className="surface p-4"> 132 <section className="surface p-4">
133− <h2 className="serif text-lg font-semibold">Reviewer findings</h2> 133+ <h2 className="title-3">Reviewer findings</h2>
134 <ul className="mt-2 space-y-2 text-sm"> 134 <ul className="mt-2 space-y-2 text-sm">
135 {findings.map((f) => ( 135 {findings.map((f) => (
136 <li key={f.id}> 136 <li key={f.id}>
@@ -146,7 +146,7 @@ export default async function QualityDetail({ params }: { params: Promise<{ runI
146 </section> 146 </section>
147 )} 147 )}
148 <section className="surface p-4"> 148 <section className="surface p-4">
149− <h2 className="serif text-lg font-semibold">Publication decisions</h2> 149+ <h2 className="title-3">Publication decisions</h2>
150 {decisions.length === 0 ? ( 150 {decisions.length === 0 ? (
151 <p className="muted text-sm">None.</p> 151 <p className="muted text-sm">None.</p>
152 ) : ( 152 ) : (
@@ -167,7 +167,7 @@ export default async function QualityDetail({ params }: { params: Promise<{ runI
167 </section> 167 </section>
168 {data.run.status === "quality_failed" && ( 168 {data.run.status === "quality_failed" && (
169 <section className="surface p-4"> 169 <section className="surface p-4">
170− <h2 className="serif text-lg font-semibold">Authorized override</h2> 170+ <h2 className="title-3">Authorized override</h2>
171 {blocked.length > 0 ? ( 171 {blocked.length > 0 ? (
172 <p className="text-sm" style={{ color: "var(--color-danger-500)" }}> 172 <p className="text-sm" style={{ color: "var(--color-danger-500)" }}>
173 Cannot override: scientific blockers failed ({blocked.map((b) => b.gate).join(", ")}). Fix the 173 Cannot override: scientific blockers failed ({blocked.map((b) => b.gate).join(", ")}). Fix the
modified apps/web/src/app/admin/(console)/quality/page.tsx +1 −1
@@ -22,7 +22,7 @@ export default async function QualityIndex() {
22 <div className="space-y-6"> 22 <div className="space-y-6">
23 <header> 23 <header>
24 <p className="eyebrow">Gates</p> 24 <p className="eyebrow">Gates</p>
25− <h1 className="serif mt-1 text-2xl font-semibold">Quality</h1> 25+ <h1 className="title-2 mt-1">Quality</h1>
26 <p className="muted mt-1 text-sm"> 26 <p className="muted mt-1 text-sm">
27 Deterministic gate outcomes computed on the control plane. Overrides are limited to soft/structural 27 Deterministic gate outcomes computed on the control plane. Overrides are limited to soft/structural
28 gates and are recorded with a rationale. 28 gates and are recorded with a rationale.
modified apps/web/src/app/admin/(console)/runs/[id]/page.tsx +7 −7
@@ -44,7 +44,7 @@ export default async function RunDetail({ params }: { params: Promise<{ id: stri
44 <p className="eyebrow"> 44 <p className="eyebrow">
45 <Link href="/admin/runs">Runs</Link> 45 <Link href="/admin/runs">Runs</Link>
46 </p> 46 </p>
47− <h1 className="serif mt-1 text-2xl font-semibold">{run.title}</h1> 47+ <h1 className="title-2 mt-1">{run.title}</h1>
48 <p className="muted mt-1 flex flex-wrap items-center gap-2 text-sm"> 48 <p className="muted mt-1 flex flex-wrap items-center gap-2 text-sm">
49 <StatusBadge status={run.status} /> 49 <StatusBadge status={run.status} />
50 <span> 50 <span>
@@ -74,7 +74,7 @@ export default async function RunDetail({ params }: { params: Promise<{ id: stri
74 </section> 74 </section>
75 75
76 <section aria-labelledby="stages"> 76 <section aria-labelledby="stages">
77− <h2 id="stages" className="serif text-lg font-semibold"> 77+ <h2 id="stages" className="title-3">
78 Stage progress 78 Stage progress
79 </h2> 79 </h2>
80 <ol className="mt-2 grid gap-1 sm:grid-cols-2 lg:grid-cols-4 xl:grid-cols-6"> 80 <ol className="mt-2 grid gap-1 sm:grid-cols-2 lg:grid-cols-4 xl:grid-cols-6">
@@ -101,7 +101,7 @@ export default async function RunDetail({ params }: { params: Promise<{ id: stri
101 101
102 <div className="grid gap-6 lg:grid-cols-12"> 102 <div className="grid gap-6 lg:grid-cols-12">
103 <section className="lg:col-span-7" aria-labelledby="timeline"> 103 <section className="lg:col-span-7" aria-labelledby="timeline">
104− <h2 id="timeline" className="serif text-lg font-semibold"> 104+ <h2 id="timeline" className="title-3">
105 Timeline 105 Timeline
106 </h2> 106 </h2>
107 <LiveTimeline 107 <LiveTimeline
@@ -112,7 +112,7 @@ export default async function RunDetail({ params }: { params: Promise<{ id: stri
112 </section> 112 </section>
113 <div className="space-y-6 lg:col-span-5"> 113 <div className="space-y-6 lg:col-span-5">
114 <section className="surface p-4"> 114 <section className="surface p-4">
115− <h2 className="serif text-lg font-semibold">Artifacts ({latestArtifacts.size})</h2> 115+ <h2 className="title-3">Artifacts ({latestArtifacts.size})</h2>
116 {latestArtifacts.size === 0 ? ( 116 {latestArtifacts.size === 0 ? (
117 <p className="muted mt-2 text-sm">No artifacts uploaded yet.</p> 117 <p className="muted mt-2 text-sm">No artifacts uploaded yet.</p>
118 ) : ( 118 ) : (
@@ -132,7 +132,7 @@ export default async function RunDetail({ params }: { params: Promise<{ id: stri
132 )} 132 )}
133 </section> 133 </section>
134 <section className="surface p-4"> 134 <section className="surface p-4">
135− <h2 className="serif text-lg font-semibold">Attempts</h2> 135+ <h2 className="title-3">Attempts</h2>
136 <ul className="mt-2 space-y-1 text-xs"> 136 <ul className="mt-2 space-y-1 text-xs">
137 {attempts.map((a) => ( 137 {attempts.map((a) => (
138 <li key={a.id} className="flex justify-between gap-2"> 138 <li key={a.id} className="flex justify-between gap-2">
@@ -154,7 +154,7 @@ export default async function RunDetail({ params }: { params: Promise<{ id: stri
154 </ul> 154 </ul>
155 </section> 155 </section>
156 <section className="surface p-4"> 156 <section className="surface p-4">
157− <h2 className="serif text-lg font-semibold">Immutable manifest</h2> 157+ <h2 className="title-3">Immutable manifest</h2>
158 <dl className="mt-2 grid grid-cols-[max-content_1fr] gap-x-3 gap-y-0.5 text-xs"> 158 <dl className="mt-2 grid grid-cols-[max-content_1fr] gap-x-3 gap-y-0.5 text-xs">
159 {Object.entries(manifest).map(([k, v]) => ( 159 {Object.entries(manifest).map(([k, v]) => (
160 <div key={k} className="contents"> 160 <div key={k} className="contents">
@@ -168,7 +168,7 @@ export default async function RunDetail({ params }: { params: Promise<{ id: stri
168 </section> 168 </section>
169 {gates.length > 0 && ( 169 {gates.length > 0 && (
170 <section className="surface p-4"> 170 <section className="surface p-4">
171− <h2 className="serif text-lg font-semibold">Latest quality evaluation</h2> 171+ <h2 className="title-3">Latest quality evaluation</h2>
172 <p className="muted text-xs"> 172 <p className="muted text-xs">
173 {gates.filter((g) => g.status === "pass").length} pass ·{" "} 173 {gates.filter((g) => g.status === "pass").length} pass ·{" "}
174 {gates.filter((g) => g.status === "fail").length} fail ·{" "} 174 {gates.filter((g) => g.status === "fail").length} fail ·{" "}
modified apps/web/src/app/admin/(console)/runs/page.tsx +66 −44
@@ -30,9 +30,9 @@ export default async function RunsPage({ searchParams }: { searchParams: Promise
30 <header className="flex flex-wrap items-end justify-between gap-3"> 30 <header className="flex flex-wrap items-end justify-between gap-3">
31 <div> 31 <div>
32 <p className="eyebrow">Orchestration</p> 32 <p className="eyebrow">Orchestration</p>
33− <h1 className="serif mt-1 text-2xl font-semibold">Runs</h1> 33+ <h1 className="title-2 mt-1">Runs</h1>
34 </div> 34 </div>
35− <nav aria-label="Filter" className="flex gap-1"> 35+ <nav aria-label="Filter" className="flex flex-wrap gap-1">
36 {[ 36 {[
37 ["", "All"], 37 ["", "All"],
38 ["active", "Active"], 38 ["active", "Active"],
@@ -49,50 +49,72 @@ export default async function RunsPage({ searchParams }: { searchParams: Promise
49 ))} 49 ))}
50 </nav> 50 </nav>
51 </header> 51 </header>
52− <table className="table"> 52+ <ul className="divide-y hairline md:hidden">
53− <thead> 53+ {runs.length === 0 && <li className="muted py-8 text-center text-sm">No runs match.</li>}
54− <tr> 54+ {runs.map((r) => (
55− <th>Title</th> 55+ <li key={r.id} className="py-3">
56− <th>Mode</th> 56+ <Link href={`/admin/runs/${r.id}`} className="block font-medium no-underline hover:underline">
57− <th>Status</th> 57+ {r.title}
58− <th>Stage</th> 58+ </Link>
59− <th>Attempt</th> 59+ <div className="mt-1 flex flex-wrap items-center gap-2 text-xs">
60− <th>Cost</th> 60+ <StatusBadge status={r.status} />
61− <th>Auto-publish</th> 61+ <span className="font-mono">{r.currentStage ?? "—"}</span>
62− <th>Updated</th> 62+ <span className="muted">{modeLabel(r.researchMode)}</span>
63− </tr> 63+ <span className="muted">
64− </thead>
65− <tbody>
66− {runs.length === 0 && (
67− <tr>
68− <td colSpan={8} className="muted py-8 text-center">
69− No runs match.
70− </td>
71− </tr>
72− )}
73− {runs.map((r) => (
74− <tr key={r.id}>
75− <td>
76− <Link href={`/admin/runs/${r.id}`}>{r.title}</Link>
77− <p className="subtle font-mono text-[10px]">{r.id}</p>
78− </td>
79− <td>{modeLabel(r.researchMode)}</td>
80− <td>
81− <StatusBadge status={r.status} />
82− </td>
83− <td className="font-mono text-xs">{r.currentStage ?? "—"}</td>
84− <td>
85 {r.currentAttemptNo}/{r.maxAttempts} 64 {r.currentAttemptNo}/{r.maxAttempts}
86− </td> 65+ </span>
87− <td> 66+ <span className="muted">{fmtUsd(r.totalCostUsd)}</span>
88− {fmtUsd(r.totalCostUsd)} <span className="subtle text-xs">/ {fmtUsd(r.maxBudgetUsd)}</span> 67+ <span className="subtle">{ago(r.updatedAt)}</span>
89− </td> 68+ </div>
90− <td>{r.autoPublish ? "yes" : "no"}</td> 69+ </li>
91− <td className="subtle text-xs">{ago(r.updatedAt)}</td> 70+ ))}
71+ </ul>
72+ <div className="table-wrap hidden md:block">
73+ <table className="table">
74+ <thead>
75+ <tr>
76+ <th>Title</th>
77+ <th>Mode</th>
78+ <th>Status</th>
79+ <th>Stage</th>
80+ <th>Attempt</th>
81+ <th>Cost</th>
82+ <th>Auto-publish</th>
83+ <th>Updated</th>
92 </tr> 84 </tr>
93− ))} 85+ </thead>
94− </tbody> 86+ <tbody>
95− </table> 87+ {runs.length === 0 && (
88+ <tr>
89+ <td colSpan={8} className="muted py-8 text-center">
90+ No runs match.
91+ </td>
92+ </tr>
93+ )}
94+ {runs.map((r) => (
95+ <tr key={r.id}>
96+ <td>
97+ <Link href={`/admin/runs/${r.id}`}>{r.title}</Link>
98+ <p className="subtle font-mono text-[10px]">{r.id}</p>
99+ </td>
100+ <td>{modeLabel(r.researchMode)}</td>
101+ <td>
102+ <StatusBadge status={r.status} />
103+ </td>
104+ <td className="font-mono text-xs">{r.currentStage ?? "—"}</td>
105+ <td>
106+ {r.currentAttemptNo}/{r.maxAttempts}
107+ </td>
108+ <td>
109+ {fmtUsd(r.totalCostUsd)} <span className="subtle text-xs">/ {fmtUsd(r.maxBudgetUsd)}</span>
110+ </td>
111+ <td>{r.autoPublish ? "yes" : "no"}</td>
112+ <td className="subtle text-xs">{ago(r.updatedAt)}</td>
113+ </tr>
114+ ))}
115+ </tbody>
116+ </table>
117+ </div>
96 </div> 118 </div>
97 ); 119 );
98 } 120 }
modified apps/web/src/app/admin/(console)/settings/SettingsControls.tsx +1 −1
@@ -22,7 +22,7 @@ export function SettingsControls({
22 }; 22 };
23 return ( 23 return (
24 <section className="surface p-4"> 24 <section className="surface p-4">
25− <h2 className="serif text-lg font-semibold">Emergency controls</h2> 25+ <h2 className="title-3">Emergency controls</h2>
26 <div className="mt-3 grid gap-3 sm:grid-cols-2"> 26 <div className="mt-3 grid gap-3 sm:grid-cols-2">
27 <label className="flex items-start gap-2 text-sm"> 27 <label className="flex items-start gap-2 text-sm">
28 <input 28 <input
modified apps/web/src/app/admin/(console)/settings/page.tsx +3 −3
@@ -18,7 +18,7 @@ export default async function SettingsPage() {
18 <div className="space-y-8"> 18 <div className="space-y-8">
19 <header> 19 <header>
20 <p className="eyebrow">Founder controls</p> 20 <p className="eyebrow">Founder controls</p>
21− <h1 className="serif mt-1 text-2xl font-semibold">Settings & security</h1> 21+ <h1 className="title-2 mt-1">Settings & security</h1>
22 </header> 22 </header>
23 <SettingsControls 23 <SettingsControls
24 settings={{ 24 settings={{
@@ -28,7 +28,7 @@ export default async function SettingsPage() {
28 }} 28 }}
29 /> 29 />
30 <section className="surface p-4"> 30 <section className="surface p-4">
31− <h2 className="serif text-lg font-semibold">Environment and providers</h2> 31+ <h2 className="title-3">Environment and providers</h2>
32 <dl className="mt-2 grid grid-cols-2 gap-x-6 gap-y-1 text-xs sm:grid-cols-4"> 32 <dl className="mt-2 grid grid-cols-2 gap-x-6 gap-y-1 text-xs sm:grid-cols-4">
33 <dt className="muted">Publishing (env)</dt> 33 <dt className="muted">Publishing (env)</dt>
34 <dd>{env.PUBLISHING_ENABLED === 1 ? "enabled" : "DISABLED"}</dd> 34 <dd>{env.PUBLISHING_ENABLED === 1 ? "enabled" : "DISABLED"}</dd>
@@ -61,7 +61,7 @@ export default async function SettingsPage() {
61 </dl> 61 </dl>
62 </section> 62 </section>
63 <section className="surface p-4"> 63 <section className="surface p-4">
64− <h2 className="serif text-lg font-semibold">Audit log (latest 100)</h2> 64+ <h2 className="title-3">Audit log (latest 100)</h2>
65 <table className="table mt-2"> 65 <table className="table mt-2">
66 <thead> 66 <thead>
67 <tr> 67 <tr>
modified apps/web/src/app/admin/(console)/templates/page.tsx +2 −2
@@ -15,7 +15,7 @@ export default async function TemplatesPage({ searchParams }: { searchParams: Pr
15 <div className="space-y-6"> 15 <div className="space-y-6">
16 <header> 16 <header>
17 <p className="eyebrow">Starters</p> 17 <p className="eyebrow">Starters</p>
18− <h1 className="serif mt-1 text-2xl font-semibold">Research instruction templates</h1> 18+ <h1 className="title-2 mt-1">Research instruction templates</h1>
19 <p className="muted mt-1 text-sm"> 19 <p className="muted mt-1 text-sm">
20 Discipline presets synced from research/templates. Preview, then prefill the launch form and edit 20 Discipline presets synced from research/templates. Preview, then prefill the launch form and edit
21 before freezing. 21 before freezing.
@@ -45,7 +45,7 @@ export default async function TemplatesPage({ searchParams }: { searchParams: Pr
45 {cur && ( 45 {cur && (
46 <div className="space-y-3 lg:col-span-9"> 46 <div className="space-y-3 lg:col-span-9">
47 <div className="flex items-center justify-between"> 47 <div className="flex items-center justify-between">
48− <h2 className="serif text-lg font-semibold">{cur.name}</h2> 48+ <h2 className="title-3">{cur.name}</h2>
49 <Link href={`/admin/new?template=${cur.slug}`} className="btn btn-primary btn-sm"> 49 <Link href={`/admin/new?template=${cur.slug}`} className="btn btn-primary btn-sm">
50 Use this template 50 Use this template
51 </Link> 51 </Link>
modified apps/web/src/app/admin/change-password/page.tsx +1 −1
@@ -37,7 +37,7 @@ export default function ChangePasswordPage() {
37 return ( 37 return (
38 <main className="mx-auto flex min-h-dvh max-w-sm flex-col justify-center px-4"> 38 <main className="mx-auto flex min-h-dvh max-w-sm flex-col justify-center px-4">
39 <p className="eyebrow">Security</p> 39 <p className="eyebrow">Security</p>
40− <h1 className="serif mt-1 text-2xl font-semibold">Set a new password</h1> 40+ <h1 className="title-2 mt-1">Set a new password</h1>
41 <p className="muted mt-1 text-sm"> 41 <p className="muted mt-1 text-sm">
42 The bootstrap password only works once. Choose at least 12 characters with three character classes; it 42 The bootstrap password only works once. Choose at least 12 characters with three character classes; it
43 must not be a well-known password or contain your username. 43 must not be a well-known password or contain your username.
modified apps/web/src/app/admin/login/page.tsx +67 −31
@@ -38,39 +38,75 @@ export default function LoginPage() {
38 router.refresh(); 38 router.refresh();
39 } 39 }
40 return ( 40 return (
41− <main className="mx-auto flex min-h-dvh max-w-sm flex-col justify-center px-4"> 41+ <main className="grid min-h-dvh lg:grid-cols-2">
42− <p className="eyebrow">AutoScholar</p> 42+ <section
43− <h1 className="serif mt-1 text-2xl font-semibold">Administrator sign-in</h1> 43+ className="hidden items-end p-10 lg:flex"
44− <p className="muted mt-1 text-sm">Private research command center. There is no public registration.</p> 44+ style={{ background: "var(--color-ink-900)", color: "#efeadf" }}
45− <form onSubmit={submit} className="mt-6 space-y-4" aria-describedby={err ? "login-error" : undefined}> 45+ >
46− <div> 46+ <div className="max-w-md">
47− <label htmlFor="username" className="label mb-1"> 47+ <p className="eyebrow" style={{ color: "#e8a885" }}>
48− Username 48+ AutoScholar · research command center
49− </label> 49+ </p>
50− <input id="username" name="username" autoComplete="username" required className="input" /> 50+ <p className="title-1 mt-3">Upload a brief. Launch on MacLustr. Publish when every gate passes.</p>
51+ <p className="mt-4 text-sm" style={{ color: "#b5ac9c" }}>
52+ Private administration. There is no public registration.
53+ </p>
51 </div> 54 </div>
52− <div> 55+ </section>
53− <label htmlFor="password" className="label mb-1"> 56+ <section
54− Password 57+ className="flex flex-col justify-center px-6 py-12 sm:px-12"
55− </label> 58+ style={{ paddingBottom: "calc(3rem + var(--safe-b))" }}
56− <input 59+ >
57− id="password" 60+ <div className="mx-auto w-full max-w-sm">
58− name="password" 61+ <span
59− type="password" 62+ aria-hidden="true"
60− autoComplete="current-password" 63+ className="grid h-9 w-9 place-items-center rounded-md text-xs font-semibold"
61− required 64+ style={{ background: "var(--fg)", color: "var(--bg)", fontFamily: "var(--font-serif)" }}
62− className="input" 65+ >
63− /> 66+ As
67+ </span>
68+ <h1 className="title-2 mt-5">Administrator sign-in</h1>
69+ <p className="muted mt-1 text-sm">Private research command center.</p>
70+ <form
71+ onSubmit={submit}
72+ className="mt-6 space-y-4"
73+ aria-describedby={err ? "login-error" : undefined}
74+ >
75+ <div>
76+ <label htmlFor="username" className="label mb-1">
77+ Username
78+ </label>
79+ <input id="username" name="username" autoComplete="username" required className="input" />
80+ </div>
81+ <div>
82+ <label htmlFor="password" className="label mb-1">
83+ Password
84+ </label>
85+ <input
86+ id="password"
87+ name="password"
88+ type="password"
89+ autoComplete="current-password"
90+ required
91+ className="input"
92+ />
93+ </div>
94+ {err && (
95+ <p
96+ id="login-error"
97+ role="alert"
98+ className="text-sm"
99+ style={{ color: "var(--color-danger-500)" }}
100+ >
101+ {err}
102+ </p>
103+ )}
104+ <button type="submit" className="btn btn-primary w-full" disabled={busy}>
105+ {busy ? "Signing in…" : "Sign in"}
106+ </button>
107+ </form>
64 </div> 108 </div>
65− {err && ( 109+ </section>
66− <p id="login-error" role="alert" className="text-sm" style={{ color: "var(--color-danger-500)" }}>
67− {err}
68− </p>
69− )}
70− <button type="submit" className="btn btn-primary w-full" disabled={busy}>
71− {busy ? "Signing in…" : "Sign in"}
72− </button>
73− </form>
74 </main> 110 </main>
75 ); 111 );
76 } 112 }
modified apps/web/src/app/globals.css +655 −71
@@ -2,72 +2,112 @@
2 2
3 @custom-variant dark (&:where(.dark, .dark *)); 3 @custom-variant dark (&:where(.dark, .dark *));
4 4
5+/* ───────────────────────────── Design tokens ─────────────────────────────
6+ Palette: graphite ink · warm ivory · muted stone · oxide accent (terracotta
7+ evolved toward a deeper, print-like oxide red) · cobalt as the scientific
8+ secondary for visualizations and interactive states. Light and dark are
9+ tuned separately (dark is not an inversion). */
5 @theme { 10 @theme {
6− --font-serif: var(--font-source-serif), "Iowan Old Style", "Palatino Linotype", Georgia, serif; 11+ --font-serif: var(--font-newsreader), "Iowan Old Style", "Palatino Linotype", Georgia, serif;
7− --font-sans: var(--font-inter), ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif; 12+ --font-sans: var(--font-geist), ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
8− --font-mono: var(--font-jetbrains), ui-monospace, SFMono-Regular, Menlo, monospace; 13+ --font-mono: var(--font-geist-mono), ui-monospace, SFMono-Regular, Menlo, monospace;
9 14
10− --color-ivory-50: #fdfcf9; 15+ --color-ivory-50: #fcfbf7;
11− --color-ivory-100: #f8f5ee; 16+ --color-ivory-100: #f6f3eb;
12− --color-ivory-200: #efe9dc; 17+ --color-ivory-200: #ece7da;
13− --color-stone-100: #e8e4da; 18+ --color-stone-100: #e6e1d6;
14− --color-stone-200: #d6d0c3; 19+ --color-stone-200: #d3ccbd;
15− --color-stone-300: #b9b2a3; 20+ --color-stone-300: #b3aa98;
16− --color-stone-400: #8f887a; 21+ --color-stone-400: #8a8273;
17− --color-stone-500: #6b6557; 22+ --color-stone-500: #67604f;
18− --color-stone-600: #4e4a40; 23+ --color-stone-600: #4a453a;
19− --color-ink-700: #35322b; 24+ --color-ink-700: #33302a;
20− --color-ink-800: #24221d; 25+ --color-ink-800: #23211c;
21− --color-ink-900: #171612; 26+ --color-ink-900: #16150f;
22− --color-ink-950: #0f0e0c; 27+ --color-ink-950: #0d0d0a;
23− --color-accent-400: #c0613a; 28+ --color-oxide-400: #c25d33;
24− --color-accent-500: #a84f2a; 29+ --color-oxide-500: #a84a25;
25− --color-accent-600: #8d401f; 30+ --color-oxide-600: #8a3a1a;
26− --color-accent-700: #6f3217; 31+ --color-oxide-700: #6b2c12;
32+ --color-cobalt-400: #4f7fd1;
33+ --color-cobalt-500: #2f5fb3;
34+ --color-cobalt-600: #244a8d;
27 --color-ok-500: #2f6f4e; 35 --color-ok-500: #2f6f4e;
28 --color-warn-500: #9a6b12; 36 --color-warn-500: #9a6b12;
29 --color-danger-500: #a2342f; 37 --color-danger-500: #a2342f;
30− --color-info-500: #2f5a8a; 38+ --color-info-500: #2f5fb3;
39+ --color-accent-500: #a84a25;
40+
41+ --breakpoint-xs: 30rem;
31 } 42 }
32 43
33 :root { 44 :root {
34 --bg: var(--color-ivory-50); 45 --bg: var(--color-ivory-50);
35 --bg-elev: #ffffff; 46 --bg-elev: #ffffff;
36 --bg-muted: var(--color-ivory-100); 47 --bg-muted: var(--color-ivory-100);
48+ --bg-sunken: var(--color-ivory-200);
37 --fg: var(--color-ink-900); 49 --fg: var(--color-ink-900);
38 --fg-muted: var(--color-stone-500); 50 --fg-muted: var(--color-stone-500);
39− --fg-subtle: var(--color-stone-500); 51+ --fg-subtle: #6e6758;
40 --line: var(--color-stone-200); 52 --line: var(--color-stone-200);
41 --line-strong: var(--color-stone-300); 53 --line-strong: var(--color-stone-300);
42− --accent: var(--color-accent-500); 54+ --accent: var(--color-oxide-500);
55+ --accent-strong: var(--color-oxide-600);
56+ --accent-soft: color-mix(in oklab, var(--color-oxide-500) 10%, transparent);
43 --accent-fg: #ffffff; 57 --accent-fg: #ffffff;
44− --ring: var(--color-accent-500); 58+ --sci: var(--color-cobalt-500);
59+ --sci-soft: color-mix(in oklab, var(--color-cobalt-500) 10%, transparent);
60+ --ring: var(--color-oxide-500);
61+ --shadow-1: 0 1px 2px rgb(22 21 15 / 0.05), 0 1px 1px rgb(22 21 15 / 0.03);
62+ --shadow-2: 0 10px 30px -12px rgb(22 21 15 / 0.18), 0 2px 6px -2px rgb(22 21 15 / 0.06);
63+ --radius: 0.75rem;
64+ --header-h: 3.5rem;
65+ --safe-t: env(safe-area-inset-top, 0px);
66+ --safe-b: env(safe-area-inset-bottom, 0px);
67+ --safe-l: env(safe-area-inset-left, 0px);
68+ --safe-r: env(safe-area-inset-right, 0px);
45 color-scheme: light; 69 color-scheme: light;
46 } 70 }
47 71
48 .dark { 72 .dark {
49 --bg: var(--color-ink-950); 73 --bg: var(--color-ink-950);
50− --bg-elev: var(--color-ink-900); 74+ --bg-elev: #15140f;
51− --bg-muted: var(--color-ink-800); 75+ --bg-muted: #1c1b16;
52− --fg: var(--color-ivory-100); 76+ --bg-sunken: #0a0a08;
53− --fg-muted: var(--color-stone-300); 77+ --fg: #efeadf;
54− --fg-subtle: var(--color-stone-400); 78+ --fg-muted: #b5ac9c;
55− --line: #2e2b25; 79+ --fg-subtle: #87806f;
56− --line-strong: #46423a; 80+ --line: #2c2a23;
57− --accent: #d47a52; 81+ --line-strong: #44403a;
58− --accent-fg: var(--color-ink-950); 82+ --accent: #d8784d;
59− --ring: #d47a52; 83+ --accent-strong: #e58a60;
84+ --accent-soft: color-mix(in oklab, #d8784d 14%, transparent);
85+ --accent-fg: #15140f;
86+ --sci: #7ea3e6;
87+ --sci-soft: color-mix(in oklab, #7ea3e6 14%, transparent);
88+ --ring: #d8784d;
89+ --shadow-1: 0 1px 2px rgb(0 0 0 / 0.5);
90+ --shadow-2: 0 14px 40px -14px rgb(0 0 0 / 0.7);
60 color-scheme: dark; 91 color-scheme: dark;
61 } 92 }
62 93
94+/* ───────────────────────────── Base ───────────────────────────── */
63 @layer base { 95 @layer base {
64 html { 96 html {
65 background: var(--bg); 97 background: var(--bg);
66 color: var(--fg); 98 color: var(--fg);
67 font-family: var(--font-sans); 99 font-family: var(--font-sans);
100+ font-size: 16px;
68 -webkit-font-smoothing: antialiased; 101 -webkit-font-smoothing: antialiased;
69 text-rendering: optimizeLegibility; 102 text-rendering: optimizeLegibility;
70 scroll-behavior: smooth; 103 scroll-behavior: smooth;
104+ scroll-padding-top: calc(var(--header-h) + 1rem);
105+ overflow-x: clip;
106+ }
107+ body {
108+ min-height: 100dvh;
109+ overflow-x: clip;
110+ line-height: 1.55;
71 } 111 }
72 @media (prefers-reduced-motion: reduce) { 112 @media (prefers-reduced-motion: reduce) {
73 html { 113 html {
@@ -77,46 +117,166 @@
77 *, 117 *,
78 *::before, 118 *::before,
79 *::after { 119 *::after {
80− animation-duration: 0.001ms; 120+ animation-duration: 0.001ms !important;
81− transition-duration: 0.001ms; 121+ animation-iteration-count: 1 !important;
122+ transition-duration: 0.001ms !important;
82 } 123 }
83 } 124 }
84− body {
85− min-height: 100dvh;
86− }
87 ::selection { 125 ::selection {
88− background: color-mix(in oklab, var(--accent) 25%, transparent); 126+ background: color-mix(in oklab, var(--accent) 28%, transparent);
89 } 127 }
90 :focus-visible { 128 :focus-visible {
91 outline: 2px solid var(--ring); 129 outline: 2px solid var(--ring);
92 outline-offset: 2px; 130 outline-offset: 2px;
93− border-radius: 2px; 131+ border-radius: 3px;
94 } 132 }
95 h1, 133 h1,
96 h2, 134 h2,
97 h3, 135 h3,
98 .serif { 136 .serif {
99 font-family: var(--font-serif); 137 font-family: var(--font-serif);
100− letter-spacing: -0.01em; 138+ letter-spacing: -0.012em;
139+ text-wrap: balance;
140+ font-feature-settings:
141+ "kern",
142+ "liga",
143+ "onum" 0;
144+ }
145+ p {
146+ text-wrap: pretty;
101 } 147 }
102 a { 148 a {
103 text-underline-offset: 3px; 149 text-underline-offset: 3px;
150+ text-decoration-thickness: 1px;
151+ }
152+ a:not([class]) {
153+ color: var(--accent);
154+ text-decoration: underline;
104 } 155 }
105 code, 156 code,
106 kbd, 157 kbd,
107 pre { 158 pre {
108 font-family: var(--font-mono); 159 font-family: var(--font-mono);
160+ font-feature-settings: "liga" 0;
161+ }
162+ img,
163+ svg,
164+ video,
165+ canvas {
166+ max-width: 100%;
167+ height: auto;
168+ }
169+ button,
170+ input,
171+ select,
172+ textarea {
173+ font: inherit;
174+ color: inherit;
175+ }
176+ summary {
177+ cursor: pointer;
178+ list-style: none;
179+ }
180+ summary::-webkit-details-marker {
181+ display: none;
182+ }
183+ table {
184+ border-collapse: collapse;
185+ }
186+ [hidden] {
187+ display: none;
188+ }
189+ /* grid/flex children default to min-width:auto, which lets long mono strings push layouts wider than the viewport */
190+ .grid > *,
191+ .flex > * {
192+ min-width: 0;
193+ }
194+ .surface,
195+ .surface-flat,
196+ .surface-muted {
197+ min-width: 0;
198+ overflow-wrap: anywhere;
109 } 199 }
110 } 200 }
111 201
202+/* ───────────────────────────── Components ───────────────────────────── */
112 @layer components { 203 @layer components {
204+ /* layout */
113 .container-x { 205 .container-x {
114− @apply mx-auto w-full max-w-6xl px-4 sm:px-6 lg:px-8; 206+ @apply mx-auto w-full max-w-7xl;
207+ padding-left: max(1rem, var(--safe-l));
208+ padding-right: max(1rem, var(--safe-r));
209+ }
210+ @media (min-width: 40rem) {
211+ .container-x {
212+ padding-left: max(1.5rem, var(--safe-l));
213+ padding-right: max(1.5rem, var(--safe-r));
214+ }
115 } 215 }
116− .surface { 216+ @media (min-width: 64rem) {
117− background: var(--bg-elev); 217+ .container-x {
118− border: 1px solid var(--line); 218+ padding-left: max(2.5rem, var(--safe-l));
119− border-radius: 0.75rem; 219+ padding-right: max(2.5rem, var(--safe-r));
220+ }
221+ }
222+ .container-narrow {
223+ @apply mx-auto w-full max-w-3xl;
224+ }
225+ .container-reading {
226+ @apply mx-auto w-full max-w-[42rem];
227+ }
228+ .section {
229+ @apply py-12 sm:py-16 lg:py-24;
230+ }
231+ .section-tight {
232+ @apply py-8 sm:py-12 lg:py-16;
233+ }
234+
235+ /* type scale (clamp between phone and desktop) */
236+ .display {
237+ font-family: var(--font-serif);
238+ font-weight: 500;
239+ font-size: clamp(2.125rem, 1.4rem + 3.3vw, 4.25rem);
240+ line-height: 1.02;
241+ letter-spacing: -0.022em;
242+ }
243+ .title-1 {
244+ font-family: var(--font-serif);
245+ font-weight: 500;
246+ font-size: clamp(1.75rem, 1.3rem + 1.9vw, 2.75rem);
247+ line-height: 1.1;
248+ letter-spacing: -0.018em;
249+ }
250+ .title-2 {
251+ font-family: var(--font-serif);
252+ font-weight: 500;
253+ font-size: clamp(1.375rem, 1.15rem + 1vw, 1.875rem);
254+ line-height: 1.18;
255+ }
256+ .title-3 {
257+ font-family: var(--font-serif);
258+ font-weight: 500;
259+ font-size: clamp(1.125rem, 1.05rem + 0.35vw, 1.3rem);
260+ line-height: 1.3;
261+ }
262+ .lede {
263+ font-size: clamp(1rem, 0.95rem + 0.3vw, 1.1875rem);
264+ line-height: 1.55;
265+ color: var(--fg-muted);
266+ max-width: 38rem;
267+ text-wrap: pretty;
268+ }
269+ .eyebrow {
270+ font-family: var(--font-sans);
271+ @apply text-[11px] font-semibold uppercase tracking-[0.16em];
272+ color: var(--accent);
273+ }
274+ .eyebrow-sci {
275+ color: var(--sci);
276+ }
277+ .label {
278+ @apply block text-[11px] font-medium uppercase tracking-[0.12em];
279+ color: var(--fg-subtle);
120 } 280 }
121 .muted { 281 .muted {
122 color: var(--fg-muted); 282 color: var(--fg-muted);
@@ -127,14 +287,95 @@
127 .hairline { 287 .hairline {
128 border-color: var(--line); 288 border-color: var(--line);
129 } 289 }
290+ .rule {
291+ height: 1px;
292+ background: var(--line);
293+ }
294+ .rule-ornament {
295+ display: flex;
296+ align-items: center;
297+ gap: 0.75rem;
298+ color: var(--fg-subtle);
299+ }
300+ .rule-ornament::before,
301+ .rule-ornament::after {
302+ content: "";
303+ flex: 1;
304+ height: 1px;
305+ background: var(--line);
306+ }
307+
308+ /* surfaces */
309+ .surface {
310+ background: var(--bg-elev);
311+ border: 1px solid var(--line);
312+ border-radius: var(--radius);
313+ box-shadow: var(--shadow-1);
314+ }
315+ .surface-flat {
316+ background: var(--bg-elev);
317+ border: 1px solid var(--line);
318+ border-radius: var(--radius);
319+ }
320+ .surface-muted {
321+ background: var(--bg-muted);
322+ border: 1px solid var(--line);
323+ border-radius: var(--radius);
324+ }
325+ .surface-ink {
326+ background: var(--color-ink-900);
327+ color: #efeadf;
328+ border-radius: var(--radius);
329+ }
330+ .dark .surface-ink {
331+ background: #0a0a08;
332+ border: 1px solid var(--line);
333+ }
334+ .card-link {
335+ transition:
336+ transform 220ms cubic-bezier(0.2, 0.7, 0.2, 1),
337+ box-shadow 220ms cubic-bezier(0.2, 0.7, 0.2, 1),
338+ border-color 220ms;
339+ }
340+ @media (hover: hover) {
341+ .card-link:hover {
342+ transform: translateY(-2px);
343+ box-shadow: var(--shadow-2);
344+ border-color: var(--line-strong);
345+ }
346+ }
347+ .paper-ruled {
348+ background-image: linear-gradient(var(--line) 1px, transparent 1px);
349+ background-size: 100% 1.65rem;
350+ background-position: 0 0.4rem;
351+ }
352+
353+ /* controls — 44px minimum touch targets on coarse pointers */
130 .btn { 354 .btn {
131− @apply inline-flex items-center justify-center gap-2 rounded-md px-3.5 py-2 text-sm font-medium transition-colors; 355+ @apply inline-flex items-center justify-center gap-2 rounded-lg px-3.5 text-sm font-medium;
356+ min-height: 2.5rem;
132 border: 1px solid var(--line-strong); 357 border: 1px solid var(--line-strong);
133 background: var(--bg-elev); 358 background: var(--bg-elev);
134 color: var(--fg); 359 color: var(--fg);
360+ text-decoration: none;
361+ transition:
362+ background 150ms,
363+ border-color 150ms,
364+ color 150ms,
365+ transform 150ms;
366+ white-space: nowrap;
367+ }
368+ @media (pointer: coarse) {
369+ .btn {
370+ min-height: 2.75rem;
371+ }
135 } 372 }
136 .btn:hover { 373 .btn:hover {
137 background: var(--bg-muted); 374 background: var(--bg-muted);
375+ border-color: var(--line-strong);
376+ }
377+ .btn:active {
378+ transform: translateY(1px);
138 } 379 }
139 .btn:disabled { 380 .btn:disabled {
140 opacity: 0.5; 381 opacity: 0.5;
@@ -146,45 +387,214 @@
146 border-color: transparent; 387 border-color: transparent;
147 } 388 }
148 .btn-primary:hover { 389 .btn-primary:hover {
149− background: color-mix(in oklab, var(--accent) 88%, black); 390+ background: var(--accent-strong);
391+ }
392+ .btn-ghost {
393+ border-color: transparent;
394+ background: transparent;
395+ }
396+ .btn-ghost:hover {
397+ background: var(--bg-muted);
150 } 398 }
151 .btn-danger { 399 .btn-danger {
152 color: var(--color-danger-500); 400 color: var(--color-danger-500);
153 border-color: color-mix(in oklab, var(--color-danger-500) 40%, transparent); 401 border-color: color-mix(in oklab, var(--color-danger-500) 40%, transparent);
154 } 402 }
155 .btn-sm { 403 .btn-sm {
156− @apply px-2.5 py-1.5 text-xs; 404+ @apply px-2.5 text-xs;
405+ min-height: 2rem;
406+ }
407+ @media (pointer: coarse) {
408+ .btn-sm {
409+ min-height: 2.5rem;
410+ }
411+ }
412+ .btn-icon {
413+ @apply inline-flex items-center justify-center rounded-lg;
414+ width: 2.5rem;
415+ height: 2.5rem;
416+ border: 1px solid transparent;
417+ color: var(--fg-muted);
418+ background: transparent;
419+ transition:
420+ background 150ms,
421+ color 150ms;
422+ }
423+ .btn-icon:hover {
424+ background: var(--bg-muted);
425+ color: var(--fg);
157 } 426 }
158 .input { 427 .input {
159− @apply w-full rounded-md px-3 py-2 text-sm; 428+ @apply w-full rounded-lg px-3 text-sm;
429+ min-height: 2.5rem;
160 background: var(--bg-elev); 430 background: var(--bg-elev);
161 border: 1px solid var(--line-strong); 431 border: 1px solid var(--line-strong);
162 color: var(--fg); 432 color: var(--fg);
433+ transition:
434+ border-color 150ms,
435+ box-shadow 150ms;
436+ }
437+ @media (pointer: coarse) {
438+ .input {
439+ min-height: 2.75rem;
440+ font-size: 16px; /* avoids iOS zoom on focus */
441+ }
163 } 442 }
164 .input:focus { 443 .input:focus {
444+ outline: none;
165 border-color: var(--accent); 445 border-color: var(--accent);
446+ box-shadow: 0 0 0 3px var(--accent-soft);
166 } 447 }
167− .label { 448+ textarea.input {
168− @apply block text-xs font-medium uppercase tracking-wide; 449+ min-height: 8rem;
450+ padding-top: 0.6rem;
451+ line-height: 1.5;
452+ }
453+ select.input {
454+ appearance: none;
455+ padding-right: 2.25rem;
456+ background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'><path fill='none' stroke='%238a8273' stroke-width='1.5' d='M2.5 4.5 6 8l3.5-3.5'/></svg>");
457+ background-repeat: no-repeat;
458+ background-position: right 0.75rem center;
459+ }
460+ .chip {
461+ @apply inline-flex items-center gap-1.5 rounded-full px-3 text-xs font-medium;
462+ min-height: 2rem;
463+ border: 1px solid var(--line-strong);
464+ background: var(--bg-elev);
465+ color: var(--fg);
466+ text-decoration: none;
467+ white-space: nowrap;
468+ }
469+ .chip-active {
470+ border-color: var(--accent);
471+ background: var(--accent-soft);
472+ color: var(--accent-strong);
473+ }
474+ .badge {
475+ @apply inline-flex items-center rounded-full px-2 py-0.5 text-[11px] font-medium uppercase tracking-[0.08em];
476+ border: 1px solid var(--line-strong);
169 color: var(--fg-muted); 477 color: var(--fg-muted);
478+ white-space: nowrap;
170 } 479 }
171− .eyebrow { 480+ .badge-accent {
172− @apply text-xs font-semibold uppercase tracking-[0.14em]; 481+ border-color: color-mix(in oklab, var(--accent) 45%, transparent);
173− color: var(--accent); 482+ color: var(--accent-strong);
483+ background: var(--accent-soft);
174 } 484 }
485+ .badge-sci {
486+ border-color: color-mix(in oklab, var(--sci) 45%, transparent);
487+ color: var(--sci);
488+ background: var(--sci-soft);
489+ }
490+ .kbd {
491+ @apply inline-flex items-center rounded px-1.5 py-0.5 text-[11px];
492+ border: 1px solid var(--line-strong);
493+ color: var(--fg-muted);
494+ font-family: var(--font-mono);
495+ }
496+ .mono-id {
497+ font-family: var(--font-mono);
498+ font-size: 0.75rem;
499+ letter-spacing: 0.02em;
500+ color: var(--fg-muted);
501+ }
502+
503+ /* header */
504+ .site-header {
505+ position: sticky;
506+ top: 0;
507+ z-index: 40;
508+ padding-top: var(--safe-t);
509+ background: color-mix(in oklab, var(--bg) 82%, transparent);
510+ backdrop-filter: saturate(160%) blur(14px);
511+ -webkit-backdrop-filter: saturate(160%) blur(14px);
512+ border-bottom: 1px solid transparent;
513+ transition:
514+ border-color 200ms,
515+ box-shadow 200ms;
516+ }
517+ .site-header[data-scrolled="true"] {
518+ border-bottom-color: var(--line);
519+ box-shadow: 0 1px 0 color-mix(in oklab, var(--line) 60%, transparent);
520+ }
521+ .nav-link {
522+ @apply rounded-md px-2.5 py-1.5 text-sm;
523+ color: var(--fg-muted);
524+ text-decoration: none;
525+ transition:
526+ color 150ms,
527+ background 150ms;
528+ }
529+ .nav-link:hover,
530+ .nav-link[aria-current="page"] {
531+ color: var(--fg);
532+ background: var(--bg-muted);
533+ }
534+ .drawer-backdrop {
535+ position: fixed;
536+ inset: 0;
537+ z-index: 50;
538+ background: color-mix(in oklab, var(--color-ink-950) 45%, transparent);
539+ backdrop-filter: blur(2px);
540+ animation: fade-in 180ms ease-out;
541+ }
542+ .drawer-panel {
543+ position: fixed;
544+ top: 0;
545+ right: 0;
546+ bottom: 0;
547+ z-index: 51;
548+ width: min(22rem, 88vw);
549+ background: var(--bg);
550+ border-left: 1px solid var(--line);
551+ padding: calc(var(--safe-t) + 0.75rem) max(1rem, var(--safe-r)) calc(var(--safe-b) + 1rem) 1rem;
552+ overflow-y: auto;
553+ animation: slide-in-right 240ms cubic-bezier(0.2, 0.7, 0.2, 1);
554+ box-shadow: var(--shadow-2);
555+ }
556+ .sheet-panel {
557+ position: fixed;
558+ left: 0;
559+ right: 0;
560+ bottom: 0;
561+ z-index: 51;
562+ max-height: min(88dvh, 100dvh - var(--safe-t) - 2rem);
563+ background: var(--bg);
564+ border-top: 1px solid var(--line);
565+ border-radius: 1.25rem 1.25rem 0 0;
566+ padding: 0.5rem max(1rem, var(--safe-r)) calc(var(--safe-b) + 1rem) max(1rem, var(--safe-l));
567+ overflow-y: auto;
568+ animation: slide-in-up 260ms cubic-bezier(0.2, 0.7, 0.2, 1);
569+ box-shadow: var(--shadow-2);
570+ }
571+ .sheet-handle {
572+ width: 2.5rem;
573+ height: 0.3rem;
574+ border-radius: 999px;
575+ background: var(--line-strong);
576+ margin: 0.25rem auto 0.75rem;
577+ }
578+
579+ /* prose for paper content */
175 .prose-paper { 580 .prose-paper {
176 font-family: var(--font-serif); 581 font-family: var(--font-serif);
177− font-size: 1.0625rem; 582+ font-size: clamp(1rem, 0.96rem + 0.2vw, 1.125rem);
178− line-height: 1.7; 583+ line-height: 1.65;
584+ font-feature-settings: "kern", "liga";
179 } 585 }
180 .prose-paper p { 586 .prose-paper p {
181 margin: 0 0 1em; 587 margin: 0 0 1em;
182 } 588 }
589+ .prose-paper p:last-child {
590+ margin-bottom: 0;
591+ }
183 .prose-paper h1, 592 .prose-paper h1,
184 .prose-paper h2, 593 .prose-paper h2,
185 .prose-paper h3 { 594 .prose-paper h3 {
186− margin: 1.5em 0 0.5em; 595+ margin: 1.6em 0 0.5em;
187− line-height: 1.25; 596+ line-height: 1.2;
597+ font-weight: 500;
188 } 598 }
189 .prose-paper h1 { 599 .prose-paper h1 {
190 font-size: 1.6rem; 600 font-size: 1.6rem;
@@ -201,11 +611,11 @@
201 margin: 0 0 1em; 611 margin: 0 0 1em;
202 } 612 }
203 .prose-paper li { 613 .prose-paper li {
204− margin: 0.25em 0; 614+ margin: 0.3em 0;
205 } 615 }
206 .prose-paper code { 616 .prose-paper code {
207 font-family: var(--font-mono); 617 font-family: var(--font-mono);
208− font-size: 0.85em; 618+ font-size: 0.82em;
209 background: var(--bg-muted); 619 background: var(--bg-muted);
210 padding: 0.1em 0.35em; 620 padding: 0.1em 0.35em;
211 border-radius: 4px; 621 border-radius: 4px;
@@ -245,18 +655,66 @@
245 color: var(--accent); 655 color: var(--accent);
246 text-decoration: underline; 656 text-decoration: underline;
247 } 657 }
658+ .prose-editorial {
659+ font-family: var(--font-serif);
660+ font-size: clamp(1.0625rem, 1rem + 0.3vw, 1.2rem);
661+ line-height: 1.6;
662+ }
663+ .prose-editorial p {
664+ margin: 0 0 1.1em;
665+ }
666+ .prose-editorial p:first-of-type::first-letter {
667+ font-size: 3.1em;
668+ float: left;
669+ line-height: 0.82;
670+ padding: 0.08em 0.1em 0 0;
671+ font-weight: 500;
672+ color: var(--accent);
673+ }
674+ .dropcap-off p:first-of-type::first-letter {
675+ all: unset;
676+ }
677+
678+ /* math */
679+ .math-inline,
680+ .math-display {
681+ font-size: 1.02em;
682+ }
683+ .math-display {
684+ display: block;
685+ overflow-x: auto;
686+ overflow-y: hidden;
687+ padding: 0.4rem 0;
688+ -webkit-overflow-scrolling: touch;
689+ }
690+ .math-display .katex-display {
691+ margin: 0.25rem 0;
692+ }
693+
694+ /* tables */
248 .table { 695 .table {
249 @apply w-full text-sm; 696 @apply w-full text-sm;
250 } 697 }
251 .table th { 698 .table th {
252− @apply text-left text-xs font-semibold uppercase tracking-wide py-2 pr-4; 699+ @apply text-left text-[11px] font-semibold uppercase tracking-[0.1em] py-2 pr-4;
253− color: var(--fg-muted); 700+ color: var(--fg-subtle);
254 border-bottom: 1px solid var(--line-strong); 701 border-bottom: 1px solid var(--line-strong);
702+ white-space: nowrap;
255 } 703 }
256 .table td { 704 .table td {
257− @apply py-2 pr-4 align-top; 705+ @apply py-2.5 pr-4 align-top;
258 border-bottom: 1px solid var(--line); 706 border-bottom: 1px solid var(--line);
259 } 707 }
708+ .table tbody tr:hover td {
709+ background: color-mix(in oklab, var(--bg-muted) 60%, transparent);
710+ }
711+ .table-wrap {
712+ overflow-x: auto;
713+ -webkit-overflow-scrolling: touch;
714+ margin-inline: -0.25rem;
715+ padding-inline: 0.25rem;
716+ }
717+
260 .skip-link { 718 .skip-link {
261 position: absolute; 719 position: absolute;
262 left: -999px; 720 left: -999px;
@@ -270,13 +728,139 @@
270 .skip-link:focus { 728 .skip-link:focus {
271 left: 0; 729 left: 0;
272 } 730 }
273− .rule { 731+
274− height: 1px; 732+ /* skeletons */
275− background: var(--line); 733+ .skeleton {
734+ position: relative;
735+ overflow: hidden;
736+ background: var(--bg-muted);
737+ border-radius: 6px;
276 } 738 }
277− .badge { 739+ .skeleton::after {
278− @apply inline-flex items-center rounded-full px-2 py-0.5 text-[11px] font-medium uppercase tracking-wide; 740+ content: "";
741+ position: absolute;
742+ inset: 0;
743+ background: linear-gradient(
744+ 90deg,
745+ transparent,
746+ color-mix(in oklab, var(--bg-elev) 70%, transparent),
747+ transparent
748+ );
749+ animation: shimmer 1.4s infinite;
750+ }
751+
752+ /* motion */
753+ .reveal {
754+ animation: rise-in 480ms cubic-bezier(0.2, 0.7, 0.2, 1) both;
755+ }
756+ .reveal-2 {
757+ animation-delay: 80ms;
758+ }
759+ .reveal-3 {
760+ animation-delay: 160ms;
761+ }
762+ .reveal-4 {
763+ animation-delay: 240ms;
764+ }
765+
766+ /* pipeline timeline */
767+ .pipeline {
768+ position: relative;
769+ }
770+ .pipeline::before {
771+ content: "";
772+ position: absolute;
773+ left: 1.1rem;
774+ top: 1.25rem;
775+ bottom: 1.25rem;
776+ width: 1px;
777+ background: linear-gradient(var(--line-strong), var(--line) 60%, transparent);
778+ }
779+ .pipeline-node {
780+ position: relative;
781+ width: 2.25rem;
782+ height: 2.25rem;
783+ border-radius: 999px;
784+ display: inline-flex;
785+ align-items: center;
786+ justify-content: center;
787+ font-family: var(--font-mono);
788+ font-size: 0.8rem;
279 border: 1px solid var(--line-strong); 789 border: 1px solid var(--line-strong);
280− color: var(--fg-muted); 790+ background: var(--bg-elev);
791+ color: var(--fg);
792+ flex: none;
793+ }
794+ .pipeline-node[data-tone="worker"] {
795+ border-color: color-mix(in oklab, var(--sci) 55%, transparent);
796+ color: var(--sci);
281 } 797 }
798+ .pipeline-node[data-tone="control"] {
799+ border-color: color-mix(in oklab, var(--accent) 55%, transparent);
800+ color: var(--accent-strong);
801+ }
802+
803+ /* sticky action bar on mobile paper page */
804+ .mobile-bar {
805+ position: fixed;
806+ left: 0;
807+ right: 0;
808+ bottom: 0;
809+ z-index: 30;
810+ padding: 0.5rem max(1rem, var(--safe-r)) calc(var(--safe-b) + 0.5rem) max(1rem, var(--safe-l));
811+ background: color-mix(in oklab, var(--bg) 88%, transparent);
812+ backdrop-filter: blur(12px);
813+ -webkit-backdrop-filter: blur(12px);
814+ border-top: 1px solid var(--line);
815+ }
816+}
817+
818+@keyframes fade-in {
819+ from {
820+ opacity: 0;
821+ }
822+ to {
823+ opacity: 1;
824+ }
825+}
826+@keyframes slide-in-right {
827+ from {
828+ transform: translateX(24px);
829+ opacity: 0;
830+ }
831+ to {
832+ transform: translateX(0);
833+ opacity: 1;
834+ }
835+}
836+@keyframes slide-in-up {
837+ from {
838+ transform: translateY(32px);
839+ opacity: 0;
840+ }
841+ to {
842+ transform: translateY(0);
843+ opacity: 1;
844+ }
845+}
846+@keyframes rise-in {
847+ from {
848+ transform: translateY(10px);
849+ }
850+ to {
851+ transform: translateY(0);
852+ }
853+}
854+@keyframes shimmer {
855+ from {
856+ transform: translateX(-100%);
857+ }
858+ to {
859+ transform: translateX(100%);
860+ }
861+}
862+
863+/* KaTeX stylesheet is imported from the package in the root layout; dark-mode colours inherit via currentColor. */
864+.katex {
865+ color: inherit;
282 } 866 }
modified apps/web/src/app/layout.tsx +12 −1
@@ -1,7 +1,8 @@
1−import type { Metadata } from "next"; 1+import type { Metadata, Viewport } from "next";
2 import type { ReactNode } from "react"; 2 import type { ReactNode } from "react";
3 import { ThemeScript } from "@/components/ThemeScript"; 3 import { ThemeScript } from "@/components/ThemeScript";
4 import { mono, sans, serif } from "@/lib/fonts"; 4 import { mono, sans, serif } from "@/lib/fonts";
5+import "katex/dist/katex.min.css";
5 import "./globals.css"; 6 import "./globals.css";
6 7
7 const base = process.env.APP_BASE_URL ?? "http://localhost:8470"; 8 const base = process.env.APP_BASE_URL ?? "http://localhost:8470";
@@ -19,6 +20,16 @@ export const metadata: Metadata = {
19 }, 20 },
20 }; 21 };
21 22
23+export const viewport: Viewport = {
24+ width: "device-width",
25+ initialScale: 1,
26+ viewportFit: "cover",
27+ themeColor: [
28+ { media: "(prefers-color-scheme: light)", color: "#fcfbf7" },
29+ { media: "(prefers-color-scheme: dark)", color: "#0d0d0a" },
30+ ],
31+};
32+
22 export default function RootLayout({ children }: { children: ReactNode }) { 33 export default function RootLayout({ children }: { children: ReactNode }) {
23 return ( 34 return (
24 <html 35 <html
modified apps/web/src/app/not-found.tsx +5 −5
@@ -2,14 +2,14 @@ import Link from "next/link";
2 2
3 export default function NotFound() { 3 export default function NotFound() {
4 return ( 4 return (
5− <main className="container-x py-24 text-center"> 5+ <main className="container-x flex min-h-[60dvh] flex-col items-center justify-center py-24 text-center">
6− <p className="eyebrow">404</p> 6+ <p className="mono-id">404</p>
7− <h1 className="serif mt-2 text-3xl">This page does not exist.</h1> 7+ <h1 className="title-1 mt-3">This page does not exist.</h1>
8− <p className="muted mt-3"> 8+ <p className="muted mt-3 max-w-md text-sm leading-relaxed">
9 The paper or page you requested could not be found. Retracted papers keep a public tombstone, so a 9 The paper or page you requested could not be found. Retracted papers keep a public tombstone, so a
10 missing page was never published here. 10 missing page was never published here.
11 </p> 11 </p>
12− <Link href="/research" className="btn mt-6"> 12+ <Link href="/research" className="btn btn-primary mt-6">
13 Browse the library 13 Browse the library
14 </Link> 14 </Link>
15 </main> 15 </main>
added apps/web/src/components/CitationPanel.tsx +40 −0
@@ -0,0 +1,40 @@
1+import { CopyButton } from "./CopyButton";
2+import { Tabs } from "./Tabs";
3+
4+/** CitationPanel — BibTeX / RIS / plain text with copy and download. Content is computed server-side. */
5+export function CitationPanel({
6+ slug,
7+ bibtex,
8+ ris,
9+ plain,
10+}: {
11+ slug: string;
12+ bibtex: string;
13+ ris: string;
14+ plain: string;
15+}) {
16+ const panel = (text: string, ext: string, pre = true) => (
17+ <div>
18+ {pre ? (
19+ <pre className="surface-muted max-h-72 overflow-auto p-4 text-[12px] leading-relaxed">{text}</pre>
20+ ) : (
21+ <p className="surface-muted prose-paper p-4 text-sm">{text}</p>
22+ )}
23+ <div className="mt-2 flex gap-2">
24+ <CopyButton text={text} />
25+ <a className="btn btn-sm" href={`/research/${slug}/cite.${ext}`}>
26+ Download .{ext}
27+ </a>
28+ </div>
29+ </div>
30+ );
31+ return (
32+ <Tabs
33+ tabs={[
34+ { label: "BibTeX", content: panel(bibtex, "bib") },
35+ { label: "RIS", content: panel(ris, "ris") },
36+ { label: "Plain text", content: panel(plain, "txt", false) },
37+ ]}
38+ />
39+ );
40+}
added apps/web/src/components/DisciplineExplorer.tsx +74 −0
@@ -0,0 +1,74 @@
1+import { DISCIPLINE_LABELS } from "@autoscholar/schemas";
2+import Link from "next/link";
3+
4+const GLYPH: Record<string, string> = {
5+ economics: "∂",
6+ finance: "σ",
7+ mathematics: "∀",
8+ statistics: "Σ",
9+ "computer-science": "λ",
10+ physics: "ℏ",
11+ chemistry: "⚛",
12+ biology: "𝔹",
13+ medicine: "℞",
14+ engineering: "⚙",
15+ "earth-sciences": "⊕",
16+ "social-sciences": "§",
17+ psychology: "ψ",
18+ humanities: "¶",
19+ law: "⚖",
20+ education: "∞",
21+ interdisciplinary: "⋈",
22+};
23+
24+/** DisciplineExplorer — subject navigation from real counts (zero is shown as zero). */
25+export function DisciplineExplorer({
26+ counts,
27+ topics,
28+ compact = false,
29+}: {
30+ counts: Array<{ discipline: string; n: number }>;
31+ topics: Array<{ slug: string }>;
32+ compact?: boolean;
33+}) {
34+ const entries = Object.entries(DISCIPLINE_LABELS).map(([slug, name]) => ({
35+ slug,
36+ name,
37+ n: counts.find((c) => c.discipline === slug)?.n ?? 0,
38+ href: topics.some((t) => t.slug === slug) ? `/topics/${slug}` : `/research?discipline=${slug}`,
39+ }));
40+ const sorted = [...entries].sort((a, b) => b.n - a.n || a.name.localeCompare(b.name));
41+ return (
42+ <ul
43+ className={`grid gap-2 ${compact ? "grid-cols-2 sm:grid-cols-3" : "grid-cols-2 sm:grid-cols-3 lg:grid-cols-4"}`}
44+ >
45+ {sorted.map((d) => (
46+ <li key={d.slug}>
47+ <Link
48+ href={d.href}
49+ className="surface card-link flex min-h-[4.25rem] items-center gap-3 px-3.5 py-3 text-sm no-underline"
50+ aria-label={`${d.name}: ${d.n} ${d.n === 1 ? "paper" : "papers"}`}
51+ >
52+ <span
53+ aria-hidden="true"
54+ className="grid h-9 w-9 flex-none place-items-center rounded-md text-base"
55+ style={{
56+ background: d.n > 0 ? "var(--sci-soft)" : "var(--bg-muted)",
57+ color: d.n > 0 ? "var(--sci)" : "var(--fg-subtle)",
58+ fontFamily: "var(--font-serif)",
59+ }}
60+ >
61+ {GLYPH[d.slug] ?? "·"}
62+ </span>
63+ <span className="min-w-0">
64+ <span className="block truncate font-medium">{d.name}</span>
65+ <span className="subtle block font-mono text-[11px]">
66+ {d.n} {d.n === 1 ? "paper" : "papers"}
67+ </span>
68+ </span>
69+ </Link>
70+ </li>
71+ ))}
72+ </ul>
73+ );
74+}
modified apps/web/src/components/EmptyState.tsx +40 −2
@@ -1,10 +1,48 @@
1+import Link from "next/link";
1 import type { ReactNode } from "react"; 2 import type { ReactNode } from "react";
2 3
3 export function EmptyState({ title, children }: { title: string; children?: ReactNode }) { 4 export function EmptyState({ title, children }: { title: string; children?: ReactNode }) {
4 return ( 5 return (
5− <div className="surface px-6 py-12 text-center"> 6+ <div className="surface-muted px-6 py-12 text-center">
6− <p className="serif text-lg">{title}</p> 7+ <p className="title-3">{title}</p>
7 {children && <div className="muted mt-2 text-sm">{children}</div>} 8 {children && <div className="muted mt-2 text-sm">{children}</div>}
8 </div> 9 </div>
9 ); 10 );
10 } 11 }
12+
13+/** EmptyResearchState — the library before the first paper passes every gate. Honest, no placeholders. */
14+export function EmptyResearchState({
15+ title = "No working papers have been released yet.",
16+ showPipeline = true,
17+}: {
18+ title?: string;
19+ showPipeline?: boolean;
20+}) {
21+ return (
22+ <div className="surface-muted paper-ruled relative overflow-hidden px-6 py-14 text-center sm:py-20">
23+ <div className="mx-auto max-w-md">
24+ <div
25+ aria-hidden="true"
26+ className="mx-auto mb-5 grid h-12 w-12 place-items-center rounded-full border text-lg"
27+ style={{
28+ borderColor: "var(--line-strong)",
29+ background: "var(--bg-elev)",
30+ fontFamily: "var(--font-serif)",
31+ }}
32+ >
33+ ∅
34+ </div>
35+ <p className="title-2">{title}</p>
36+ <p className="muted mt-3 text-sm leading-relaxed">
37+ A paper appears here only after a run has executed its research, passed an automated critical review
38+ and cleared every deterministic quality gate. Nothing is seeded, mocked or back-dated.
39+ </p>
40+ {showPipeline && (
41+ <Link href="/methodology" className="btn mt-6">
42+ How papers are produced
43+ </Link>
44+ )}
45+ </div>
46+ </div>
47+ );
48+}
added apps/web/src/components/HeaderChrome.tsx +140 −0
@@ -0,0 +1,140 @@
1+"use client";
2+import Link from "next/link";
3+import { usePathname } from "next/navigation";
4+import { type ReactNode, useEffect, useRef, useState } from "react";
5+import { IconArrow, IconClose, IconMenu } from "./Icons";
6+
7+/** Client shell for the header: scroll shadow, current-page marking and the accessible mobile drawer. */
8+export function HeaderChrome({
9+ links,
10+ children,
11+}: {
12+ links: Array<{ href: string; label: string }>;
13+ children: ReactNode;
14+}) {
15+ const [scrolled, setScrolled] = useState(false);
16+ const [open, setOpen] = useState(false);
17+ const pathname = usePathname();
18+ const panel = useRef<HTMLDivElement>(null);
19+ const opener = useRef<HTMLButtonElement>(null);
20+
21+ useEffect(() => {
22+ const onScroll = () => setScrolled(window.scrollY > 4);
23+ onScroll();
24+ window.addEventListener("scroll", onScroll, { passive: true });
25+ return () => window.removeEventListener("scroll", onScroll);
26+ }, []);
27+ // biome-ignore lint/correctness/useExhaustiveDependencies: close the drawer on navigation
28+ useEffect(() => {
29+ setOpen(false);
30+ }, [pathname]);
31+ useEffect(() => {
32+ if (!open) return;
33+ const prev = document.body.style.overflow;
34+ document.body.style.overflow = "hidden";
35+ const first = panel.current?.querySelector<HTMLElement>("a,button");
36+ first?.focus();
37+ const onKey = (e: KeyboardEvent) => {
38+ if (e.key === "Escape") setOpen(false);
39+ if (e.key === "Tab" && panel.current) {
40+ const f = [
41+ ...panel.current.querySelectorAll<HTMLElement>("a,button,input,[tabindex]:not([tabindex='-1'])"),
42+ ];
43+ if (f.length === 0) return;
44+ const a = f[0]!;
45+ const b = f[f.length - 1]!;
46+ if (e.shiftKey && document.activeElement === a) {
47+ e.preventDefault();
48+ b.focus();
49+ } else if (!e.shiftKey && document.activeElement === b) {
50+ e.preventDefault();
51+ a.focus();
52+ }
53+ }
54+ };
55+ document.addEventListener("keydown", onKey);
56+ return () => {
57+ document.body.style.overflow = prev;
58+ document.removeEventListener("keydown", onKey);
59+ opener.current?.focus();
60+ };
61+ }, [open]);
62+
63+ return (
64+ <header className="site-header" data-scrolled={scrolled}>
65+ <div className="relative">
66+ {children}
67+ <button
68+ ref={opener}
69+ type="button"
70+ className="btn-icon absolute right-[max(1rem,env(safe-area-inset-right))] top-1/2 -translate-y-1/2 lg:hidden"
71+ style={{ right: "calc(max(1rem, env(safe-area-inset-right)) + 5.5rem)" }}
72+ aria-label={open ? "Close menu" : "Open menu"}
73+ aria-expanded={open}
74+ aria-controls="mobile-nav"
75+ onClick={() => setOpen((v) => !v)}
76+ >
77+ {open ? <IconClose /> : <IconMenu />}
78+ </button>
79+ </div>
80+ {open && (
81+ <>
82+ <button
83+ type="button"
84+ className="drawer-backdrop lg:hidden"
85+ aria-label="Close menu"
86+ onClick={() => setOpen(false)}
87+ />
88+ <div
89+ ref={panel}
90+ id="mobile-nav"
91+ role="dialog"
92+ aria-modal="true"
93+ aria-label="Site navigation"
94+ className="drawer-panel lg:hidden"
95+ >
96+ <div className="flex items-center justify-between">
97+ <span className="eyebrow">Navigate</span>
98+ <button
99+ type="button"
100+ className="btn-icon"
101+ aria-label="Close menu"
102+ onClick={() => setOpen(false)}
103+ >
104+ <IconClose />
105+ </button>
106+ </div>
107+ <form action="/research" method="get" role="search" className="mt-4">
108+ <label htmlFor="drawer-q" className="sr-only">
109+ Search the library
110+ </label>
111+ <input
112+ id="drawer-q"
113+ name="q"
114+ type="search"
115+ placeholder="Search papers, keywords, IDs"
116+ className="input"
117+ />
118+ </form>
119+ <nav aria-label="Primary mobile" className="mt-4 flex flex-col">
120+ {links.map((l) => (
121+ <Link
122+ key={l.href}
123+ href={l.href}
124+ aria-current={pathname === l.href ? "page" : undefined}
125+ className="flex items-center justify-between border-b py-3.5 text-base no-underline hairline"
126+ >
127+ <span>{l.label}</span>
128+ <IconArrow size={16} className="subtle" />
129+ </Link>
130+ ))}
131+ </nav>
132+ <p className="subtle mt-6 text-xs leading-relaxed">
133+ AI-generated working papers; not formally peer reviewed. Research computed on MacLustr.
134+ </p>
135+ </div>
136+ </>
137+ )}
138+ </header>
139+ );
140+}
added apps/web/src/components/Icons.tsx +108 −0
@@ -0,0 +1,108 @@
1+/* biome-ignore-all lint/a11y/noSvgWithoutTitle: decorative icons are aria-hidden; labels live on the controls */
2+import type { SVGProps } from "react";
3+
4+type P = SVGProps<SVGSVGElement> & { size?: number };
5+const base = (size = 18) => ({
6+ width: size,
7+ height: size,
8+ viewBox: "0 0 24 24",
9+ fill: "none",
10+ stroke: "currentColor",
11+ strokeWidth: 1.6,
12+ strokeLinecap: "round" as const,
13+ strokeLinejoin: "round" as const,
14+ "aria-hidden": true,
15+});
16+export const IconSearch = ({ size, ...p }: P) => (
17+ <svg {...base(size)} {...p}>
18+ <circle cx="11" cy="11" r="7" />
19+ <path d="m20 20-3.5-3.5" />
20+ </svg>
21+);
22+export const IconMenu = ({ size, ...p }: P) => (
23+ <svg {...base(size)} {...p}>
24+ <path d="M4 7h16M4 12h16M4 17h16" />
25+ </svg>
26+);
27+export const IconClose = ({ size, ...p }: P) => (
28+ <svg {...base(size)} {...p}>
29+ <path d="M6 6l12 12M18 6 6 18" />
30+ </svg>
31+);
32+export const IconArrow = ({ size, ...p }: P) => (
33+ <svg {...base(size)} {...p}>
34+ <path d="M5 12h14M13 6l6 6-6 6" />
35+ </svg>
36+);
37+export const IconSun = ({ size, ...p }: P) => (
38+ <svg {...base(size)} {...p}>
39+ <circle cx="12" cy="12" r="4" />
40+ <path d="M12 2v2m0 16v2M2 12h2m16 0h2M4.9 4.9l1.4 1.4m11.4 11.4 1.4 1.4M4.9 19.1l1.4-1.4m11.4-11.4 1.4-1.4" />
41+ </svg>
42+);
43+export const IconMoon = ({ size, ...p }: P) => (
44+ <svg {...base(size)} {...p}>
45+ <path d="M20 14.5A8 8 0 0 1 9.5 4a8 8 0 1 0 10.5 10.5Z" />
46+ </svg>
47+);
48+export const IconFilter = ({ size, ...p }: P) => (
49+ <svg {...base(size)} {...p}>
50+ <path d="M4 6h16M7 12h10M10 18h4" />
51+ </svg>
52+);
53+export const IconDownload = ({ size, ...p }: P) => (
54+ <svg {...base(size)} {...p}>
55+ <path d="M12 4v11m0 0 4-4m-4 4-4-4M5 20h14" />
56+ </svg>
57+);
58+export const IconExpand = ({ size, ...p }: P) => (
59+ <svg {...base(size)} {...p}>
60+ <path d="M4 9V4h5M20 15v5h-5M4 4l6 6m10 10-6-6" />
61+ </svg>
62+);
63+export const IconChevron = ({ size, ...p }: P) => (
64+ <svg {...base(size)} {...p}>
65+ <path d="m9 6 6 6-6 6" />
66+ </svg>
67+);
68+export const IconCheck = ({ size, ...p }: P) => (
69+ <svg {...base(size)} {...p}>
70+ <path d="m5 12 4.5 4.5L19 7" />
71+ </svg>
72+);
73+export const IconDoc = ({ size, ...p }: P) => (
74+ <svg {...base(size)} {...p}>
75+ <path d="M7 3h7l5 5v13H7z" />
76+ <path d="M14 3v5h5M9 13h6M9 17h6" />
77+ </svg>
78+);
79+export const IconCode = ({ size, ...p }: P) => (
80+ <svg {...base(size)} {...p}>
81+ <path d="m8 8-4 4 4 4m8-8 4 4-4 4m-6 2 4-12" />
82+ </svg>
83+);
84+export const IconData = ({ size, ...p }: P) => (
85+ <svg {...base(size)} {...p}>
86+ <ellipse cx="12" cy="6" rx="7" ry="3" />
87+ <path d="M5 6v6c0 1.7 3.1 3 7 3s7-1.3 7-3V6M5 12v6c0 1.7 3.1 3 7 3s7-1.3 7-3v-6" />
88+ </svg>
89+);
90+export const IconShield = ({ size, ...p }: P) => (
91+ <svg {...base(size)} {...p}>
92+ <path d="M12 3 5 6v6c0 4.5 3 7.5 7 9 4-1.5 7-4.5 7-9V6z" />
93+ <path d="m9 12 2 2 4-4" />
94+ </svg>
95+);
96+export const IconCpu = ({ size, ...p }: P) => (
97+ <svg {...base(size)} {...p}>
98+ <rect x="6" y="6" width="12" height="12" rx="2" />
99+ <rect x="10" y="10" width="4" height="4" />
100+ <path d="M9 2v4m6-4v4M9 18v4m6-4v4M2 9h4m-4 6h4m12-6h4m-4 6h4" />
101+ </svg>
102+);
103+export const IconClock = ({ size, ...p }: P) => (
104+ <svg {...base(size)} {...p}>
105+ <circle cx="12" cy="12" r="9" />
106+ <path d="M12 7v5l3 2" />
107+ </svg>
108+);
added apps/web/src/components/LibraryFilters.tsx +341 −0
@@ -0,0 +1,341 @@
1+"use client";
2+import { DISCIPLINE_LABELS, RESEARCH_MODE_LABELS } from "@autoscholar/schemas";
3+import Link from "next/link";
4+import { useEffect, useRef, useState } from "react";
5+import { IconClose, IconFilter, IconSearch } from "./Icons";
6+
7+type Q = Record<string, string | undefined>;
8+const FILTER_KEYS = ["discipline", "mode", "series", "status", "from", "to", "code", "data"] as const;
9+
10+function hrefWithout(q: Q, key: string) {
11+ const u = new URLSearchParams();
12+ for (const [k, v] of Object.entries(q)) if (v && k !== key && k !== "page") u.set(k, v);
13+ const s = u.toString();
14+ return s ? `/research?${s}` : "/research";
15+}
16+
17+function Fields({
18+ q,
19+ series,
20+ idPrefix,
21+}: {
22+ q: Q;
23+ series: Array<{ slug: string; name: string }>;
24+ idPrefix: string;
25+}) {
26+ const id = (s: string) => `${idPrefix}-${s}`;
27+ return (
28+ <div className="grid gap-4">
29+ <div>
30+ <label htmlFor={id("discipline")} className="label mb-1">
31+ Discipline
32+ </label>
33+ <select id={id("discipline")} name="discipline" defaultValue={q.discipline ?? ""} className="input">
34+ <option value="">All disciplines</option>
35+ {Object.entries(DISCIPLINE_LABELS).map(([k, v]) => (
36+ <option key={k} value={k}>
37+ {v}
38+ </option>
39+ ))}
40+ </select>
41+ </div>
42+ <div>
43+ <label htmlFor={id("mode")} className="label mb-1">
44+ Methodology
45+ </label>
46+ <select id={id("mode")} name="mode" defaultValue={q.mode ?? ""} className="input">
47+ <option value="">All methodologies</option>
48+ {Object.entries(RESEARCH_MODE_LABELS).map(([k, v]) => (
49+ <option key={k} value={k}>
50+ {v}
51+ </option>
52+ ))}
53+ </select>
54+ </div>
55+ <div className="grid grid-cols-2 gap-3">
56+ <div>
57+ <label htmlFor={id("series")} className="label mb-1">
58+ Series
59+ </label>
60+ <select id={id("series")} name="series" defaultValue={q.series ?? ""} className="input">
61+ <option value="">All</option>
62+ {series.map((s) => (
63+ <option key={s.slug} value={s.slug}>
64+ {s.name}
65+ </option>
66+ ))}
67+ </select>
68+ </div>
69+ <div>
70+ <label htmlFor={id("status")} className="label mb-1">
71+ Status
72+ </label>
73+ <select id={id("status")} name="status" defaultValue={q.status ?? ""} className="input">
74+ <option value="">Any</option>
75+ <option value="published">Published</option>
76+ <option value="corrected">Corrected</option>
77+ <option value="retracted">Retracted</option>
78+ </select>
79+ </div>
80+ </div>
81+ <div className="grid grid-cols-2 gap-3">
82+ <div>
83+ <label htmlFor={id("from")} className="label mb-1">
84+ From
85+ </label>
86+ <input id={id("from")} name="from" type="date" defaultValue={q.from ?? ""} className="input" />
87+ </div>
88+ <div>
89+ <label htmlFor={id("to")} className="label mb-1">
90+ To
91+ </label>
92+ <input id={id("to")} name="to" type="date" defaultValue={q.to ?? ""} className="input" />
93+ </div>
94+ </div>
95+ <fieldset>
96+ <legend className="label mb-2">Availability</legend>
97+ <div className="flex gap-5">
98+ <label className="flex min-h-10 items-center gap-2 text-sm">
99+ <input
100+ type="checkbox"
101+ name="code"
102+ value="1"
103+ defaultChecked={q.code === "1"}
104+ className="h-4 w-4"
105+ />{" "}
106+ Code
107+ </label>
108+ <label className="flex min-h-10 items-center gap-2 text-sm">
109+ <input
110+ type="checkbox"
111+ name="data"
112+ value="1"
113+ defaultChecked={q.data === "1"}
114+ className="h-4 w-4"
115+ />{" "}
116+ Data
117+ </label>
118+ </div>
119+ </fieldset>
120+ </div>
121+ );
122+}
123+
124+/** Active-filter chips (applied filters); each chip removes its own filter. */
125+export function ActiveFilters({ q, series }: { q: Q; series: Array<{ slug: string; name: string }> }) {
126+ const labels: Array<[string, string]> = [];
127+ if (q.discipline)
128+ labels.push(["discipline", (DISCIPLINE_LABELS as Record<string, string>)[q.discipline] ?? q.discipline]);
129+ if (q.mode) labels.push(["mode", (RESEARCH_MODE_LABELS as Record<string, string>)[q.mode] ?? q.mode]);
130+ if (q.series) labels.push(["series", series.find((s) => s.slug === q.series)?.name ?? q.series]);
131+ if (q.status) labels.push(["status", q.status]);
132+ if (q.from) labels.push(["from", `from ${q.from}`]);
133+ if (q.to) labels.push(["to", `to ${q.to}`]);
134+ if (q.code === "1") labels.push(["code", "has code"]);
135+ if (q.data === "1") labels.push(["data", "has data"]);
136+ if (labels.length === 0) return null;
137+ return (
138+ <ul className="flex flex-wrap items-center gap-2" aria-label="Applied filters">
139+ {labels.map(([k, l]) => (
140+ <li key={k}>
141+ <Link
142+ href={hrefWithout(q, k)}
143+ className="chip chip-active no-underline"
144+ aria-label={`Remove filter ${l}`}
145+ >
146+ {l} <IconClose size={12} />
147+ </Link>
148+ </li>
149+ ))}
150+ <li>
151+ <Link
152+ href={q.q ? `/research?q=${encodeURIComponent(q.q)}` : "/research"}
153+ className="chip no-underline"
154+ >
155+ Clear all
156+ </Link>
157+ </li>
158+ </ul>
159+ );
160+}
161+
162+/**
163+ * LibraryFilters — search bar + sort on every width; facet sidebar on desktop, bottom-sheet on mobile with an
164+ * active-filter count. Plain GET form so it works without JavaScript.
165+ */
166+export function LibraryFilters({
167+ q,
168+ series,
169+ total,
170+}: {
171+ q: Q;
172+ series: Array<{ slug: string; name: string }>;
173+ total: number;
174+}) {
175+ const [open, setOpen] = useState(false);
176+ const active = FILTER_KEYS.filter((k) => q[k]).length;
177+ const sheet = useRef<HTMLDivElement>(null);
178+ useEffect(() => {
179+ if (!open) return;
180+ const prev = document.body.style.overflow;
181+ document.body.style.overflow = "hidden";
182+ sheet.current?.querySelector<HTMLElement>("select,input,button")?.focus();
183+ const onKey = (e: KeyboardEvent) => e.key === "Escape" && setOpen(false);
184+ document.addEventListener("keydown", onKey);
185+ return () => {
186+ document.body.style.overflow = prev;
187+ document.removeEventListener("keydown", onKey);
188+ };
189+ }, [open]);
190+ const hidden = (prefix: string) => (
191+ <>
192+ {q.q && <input type="hidden" name="q" value={q.q} />}
193+ {q.sort && <input type="hidden" name="sort" value={q.sort} />}
194+ <span className="sr-only">{prefix}</span>
195+ </>
196+ );
197+ return (
198+ <search>
199+ {/* search + sort row */}
200+ <form
201+ method="get"
202+ action="/research"
203+ className="flex flex-col gap-2 sm:flex-row sm:items-center"
204+ aria-label="Search the library"
205+ >
206+ {FILTER_KEYS.map((k) => q[k] && <input key={k} type="hidden" name={k} value={q[k]} />)}
207+ <div className="relative flex-1">
208+ <label htmlFor="q" className="sr-only">
209+ Search
210+ </label>
211+ <IconSearch
212+ size={18}
213+ className="pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 subtle"
214+ />
215+ <input
216+ id="q"
217+ name="q"
218+ type="search"
219+ defaultValue={q.q ?? ""}
220+ placeholder="Search titles, abstracts, keywords or paper IDs"
221+ className="input pl-10"
222+ enterKeyHint="search"
223+ />
224+ </div>
225+ <div className="flex gap-2">
226+ <label htmlFor="sort" className="sr-only">
227+ Sort
228+ </label>
229+ <select
230+ id="sort"
231+ name="sort"
232+ defaultValue={q.sort ?? "date"}
233+ className="input w-auto min-w-[8.5rem]"
234+ >
235+ <option value="date">Newest first</option>
236+ <option value="relevance">Most relevant</option>
237+ <option value="title">Title A–Z</option>
238+ </select>
239+ <button type="submit" className="btn btn-primary">
240+ Search
241+ </button>
242+ <button
243+ type="button"
244+ className="btn lg:hidden"
245+ aria-expanded={open}
246+ aria-controls="filter-sheet"
247+ onClick={() => setOpen(true)}
248+ >
249+ <IconFilter size={16} /> Filters
250+ {active > 0 && (
251+ <span
252+ className="ml-1 grid h-5 min-w-5 place-items-center rounded-full px-1 text-[11px]"
253+ style={{ background: "var(--accent)", color: "var(--accent-fg)" }}
254+ >
255+ {active}
256+ </span>
257+ )}
258+ </button>
259+ </div>
260+ </form>
261+ <div className="mt-3 flex flex-wrap items-center justify-between gap-3">
262+ <ActiveFilters q={q} series={series} />
263+ <p className="muted text-sm" aria-live="polite">
264+ {total === 0 ? "No results" : `${total} ${total === 1 ? "paper" : "papers"}`}
265+ {q.q ? ` for “${q.q}”` : ""}
266+ </p>
267+ </div>
268+
269+ {/* mobile bottom sheet */}
270+ {open && (
271+ <>
272+ <button
273+ type="button"
274+ className="drawer-backdrop lg:hidden"
275+ aria-label="Close filters"
276+ onClick={() => setOpen(false)}
277+ />
278+ <div
279+ ref={sheet}
280+ id="filter-sheet"
281+ role="dialog"
282+ aria-modal="true"
283+ aria-label="Filters"
284+ className="sheet-panel lg:hidden"
285+ >
286+ <div className="sheet-handle" aria-hidden="true" />
287+ <div className="flex items-center justify-between">
288+ <p className="title-3">Filters</p>
289+ <button
290+ type="button"
291+ className="btn-icon"
292+ aria-label="Close filters"
293+ onClick={() => setOpen(false)}
294+ >
295+ <IconClose />
296+ </button>
297+ </div>
298+ <form method="get" action="/research" className="mt-4" aria-label="Filter the library (mobile)">
299+ {hidden("Filters")}
300+ <Fields q={q} series={series} idPrefix="sheet" />
301+ <div className="sticky bottom-0 mt-5 flex gap-2 bg-[var(--bg)] pt-3">
302+ <button type="submit" className="btn btn-primary flex-1">
303+ Show results
304+ </button>
305+ <Link href={q.q ? `/research?q=${encodeURIComponent(q.q)}` : "/research"} className="btn">
306+ Reset
307+ </Link>
308+ </div>
309+ </form>
310+ </div>
311+ </>
312+ )}
313+ </search>
314+ );
315+}
316+
317+/** Desktop facet sidebar (plain GET form). Rendered in the library's left column. */
318+export function FilterSidebar({ q, series }: { q: Q; series: Array<{ slug: string; name: string }> }) {
319+ return (
320+ <form
321+ method="get"
322+ action="/research"
323+ className="surface-flat sticky top-[calc(var(--header-h)+1rem)] p-5"
324+ aria-label="Filter the library"
325+ id="filter-sidebar"
326+ >
327+ {q.q && <input type="hidden" name="q" value={q.q} />}
328+ {q.sort && <input type="hidden" name="sort" value={q.sort} />}
329+ <p className="label mb-4">Refine</p>
330+ <Fields q={q} series={series} idPrefix="side" />
331+ <div className="mt-5 flex gap-2">
332+ <button type="submit" className="btn btn-primary flex-1">
333+ Apply
334+ </button>
335+ <Link href={q.q ? `/research?q=${encodeURIComponent(q.q)}` : "/research"} className="btn">
336+ Reset
337+ </Link>
338+ </div>
339+ </form>
340+ );
341+}
added apps/web/src/components/MacLustrInfrastructure.tsx +179 −0
@@ -0,0 +1,179 @@
1+import Link from "next/link";
2+import { IconArrow, IconCpu, IconShield } from "./Icons";
3+
4+const FACTS: Array<[string, string, "cpu" | "shield" | "layers" | "db"]> = [
5+ [
6+ "Apple Silicon nodes",
7+ "Research jobs run on a private cluster of Apple Silicon Macs with unified memory, suited to numerical work and LaTeX builds.",
8+ "cpu",
9+ ],
10+ [
11+ "Isolated per-run workspaces",
12+ "Each run executes under a dedicated low-privilege service identity with OS-enforced sandboxing (Seatbelt), hostname-allowlisted egress and budgets for time, disk and spend.",
13+ "shield",
14+ ],
15+ [
16+ "Durable scheduling",
17+ "A PostgreSQL-backed queue with leases, heartbeats and fencing tokens: runs survive reloads, network blips and worker restarts; stale workers can never publish.",
18+ "layers",
19+ ],
20+ [
21+ "Evidence first",
22+ "Every artifact is hashed on write and versioned. Publication is a separate service the research agent cannot call.",
23+ "db",
24+ ],
25+];
26+
27+function Glyph({ k }: { k: "cpu" | "shield" | "layers" | "db" }) {
28+ if (k === "cpu") return <IconCpu />;
29+ if (k === "shield") return <IconShield />;
30+ if (k === "layers")
31+ return (
32+ <svg
33+ width="18"
34+ height="18"
35+ viewBox="0 0 24 24"
36+ fill="none"
37+ stroke="currentColor"
38+ strokeWidth="1.6"
39+ strokeLinecap="round"
40+ strokeLinejoin="round"
41+ aria-hidden="true"
42+ >
43+ <path d="m12 4 8 4-8 4-8-4z" />
44+ <path d="m4 12 8 4 8-4M4 16l8 4 8-4" />
45+ </svg>
46+ );
47+ return (
48+ <svg
49+ width="18"
50+ height="18"
51+ viewBox="0 0 24 24"
52+ fill="none"
53+ stroke="currentColor"
54+ strokeWidth="1.6"
55+ strokeLinecap="round"
56+ strokeLinejoin="round"
57+ aria-hidden="true"
58+ >
59+ <rect x="4" y="4" width="16" height="16" rx="2" />
60+ <path d="M4 10h16M10 10v10" />
61+ </svg>
62+ );
63+}
64+
65+/** Abstract, data-free motif: a schematic of a control plane dispatching to isolated nodes. */
66+export function ClusterMotif({ className = "" }: { className?: string }) {
67+ const nodes: Array<[number, number]> = [
68+ [40, 30],
69+ [120, 22],
70+ [200, 34],
71+ [280, 26],
72+ [60, 110],
73+ [150, 118],
74+ [240, 106],
75+ [100, 190],
76+ [190, 196],
77+ [280, 184],
78+ ];
79+ return (
80+ <svg
81+ viewBox="0 0 320 220"
82+ className={className}
83+ role="img"
84+ aria-label="Schematic of a control plane dispatching isolated research runs to compute nodes"
85+ >
86+ <defs>
87+ <linearGradient id="mg" x1="0" x2="1" y1="0" y2="1">
88+ <stop offset="0" stopColor="var(--sci)" stopOpacity="0.9" />
89+ <stop offset="1" stopColor="var(--accent)" stopOpacity="0.9" />
90+ </linearGradient>
91+ </defs>
92+ {nodes.map(([x, y]) => (
93+ <line
94+ key={`l-${x}-${y}`}
95+ x1="160"
96+ y1="110"
97+ x2={x}
98+ y2={y}
99+ stroke="var(--line-strong)"
100+ strokeWidth="1"
101+ strokeDasharray="2 3"
102+ />
103+ ))}
104+ {nodes.map(([x, y], i) => (
105+ <g key={`n-${x}-${y}`}>
106+ <rect
107+ x={x - 11}
108+ y={y - 11}
109+ width="22"
110+ height="22"
111+ rx="5"
112+ fill="var(--bg-elev)"
113+ stroke="var(--line-strong)"
114+ />
115+ <rect
116+ x={x - 5}
117+ y={y - 5}
118+ width="10"
119+ height="10"
120+ rx="2"
121+ fill={i % 3 === 0 ? "url(#mg)" : "var(--line-strong)"}
122+ />
123+ </g>
124+ ))}
125+ <circle cx="160" cy="110" r="17" fill="var(--bg-elev)" stroke="url(#mg)" strokeWidth="1.5" />
126+ <circle cx="160" cy="110" r="5" fill="url(#mg)" />
127+ </svg>
128+ );
129+}
130+
131+/** MacLustrInfrastructure — factual compute-credit section. */
132+export function MacLustrInfrastructure({ full = false }: { full?: boolean }) {
133+ return (
134+ <section aria-labelledby="maclustr" className="surface-ink overflow-hidden">
135+ <div className="grid gap-8 p-6 sm:p-8 lg:grid-cols-12 lg:p-12">
136+ <div className="lg:col-span-7">
137+ <p className="eyebrow" style={{ color: "#e8a885" }}>
138+ Powered by MacLustr
139+ </p>
140+ <h2 id="maclustr" className="title-1 mt-2">
141+ Research computed on MacLustr, an Apple Silicon research compute infrastructure.
142+ </h2>
143+ <p className="mt-4 max-w-xl text-sm leading-relaxed" style={{ color: "#c9c2b4" }}>
144+ AutoScholar is the research institution; MacLustr is the private cluster it runs on. Every study
145+ executes in its own sandboxed workspace, under budgets enforced outside the model, with every
146+ artifact hashed the moment it is written.
147+ </p>
148+ <ul className="mt-6 grid gap-4 sm:grid-cols-2">
149+ {FACTS.map(([h, p, k]) => (
150+ <li key={h} className="flex gap-3">
151+ <span className="mt-0.5 flex-none" style={{ color: "#e8a885" }}>
152+ <Glyph k={k} />
153+ </span>
154+ <span>
155+ <span className="block text-sm font-medium">{h}</span>
156+ <span className="mt-1 block text-xs leading-relaxed" style={{ color: "#b5ac9c" }}>
157+ {p}
158+ </span>
159+ </span>
160+ </li>
161+ ))}
162+ </ul>
163+ {!full && (
164+ <Link
165+ href="/infrastructure"
166+ className="btn mt-7"
167+ style={{ background: "transparent", color: "#efeadf", borderColor: "#46423a" }}
168+ >
169+ About the infrastructure <IconArrow size={16} />
170+ </Link>
171+ )}
172+ </div>
173+ <div className="hidden items-center lg:col-span-5 lg:flex">
174+ <ClusterMotif className="w-full opacity-90" />
175+ </div>
176+ </div>
177+ </section>
178+ );
179+}
added apps/web/src/components/MathText.tsx +17 −0
@@ -0,0 +1,17 @@
1+import { renderMath } from "@/lib/math";
2+
3+/** Server component: plain text with inline/display TeX rendered through KaTeX; everything else escaped. */
4+export function MathText({
5+ text,
6+ as: Tag = "p",
7+ className = "",
8+}: {
9+ text: string;
10+ as?: "p" | "span" | "div" | "li";
11+ className?: string;
12+}) {
13+ const { html, hasMath } = renderMath(text);
14+ if (!hasMath) return <Tag className={className}>{text}</Tag>;
15+ // biome-ignore lint/security/noDangerouslySetInnerHtml: output of renderMath (escaped text + KaTeX markup)
16+ return <Tag className={className} dangerouslySetInnerHTML={{ __html: html }} />;
17+}
modified apps/web/src/components/PaperCard.tsx +155 −16
@@ -1,36 +1,175 @@
1 import type { PublicPaperSummary } from "@autoscholar/schemas"; 1 import type { PublicPaperSummary } from "@autoscholar/schemas";
2 import Link from "next/link"; 2 import Link from "next/link";
3 import { disciplineLabel, fmtDate, modeLabel } from "@/lib/format"; 3 import { disciplineLabel, fmtDate, modeLabel } from "@/lib/format";
4+import { IconArrow, IconCode, IconData, IconDoc } from "./Icons";
4 import { StatusBadge } from "./StatusBadge"; 5 import { StatusBadge } from "./StatusBadge";
5 6
6−export function PaperCard({ p, featured = false }: { p: PublicPaperSummary; featured?: boolean }) { 7+function Avail({ p }: { p: PublicPaperSummary }) {
8+ const items: Array<[boolean, string, React.ReactNode]> = [
9+ [true, "PDF", <IconDoc key="pdf" size={14} />],
10+ [
11+ p.hasLatex,
12+ "LaTeX",
13+ <span key="tex" className="font-mono text-[10px]">
14+ TeX
15+ </span>,
16+ ],
17+ [p.hasCode, "Code", <IconCode key="code" size={14} />],
18+ [p.hasData, "Data", <IconData key="data" size={14} />],
19+ ];
7 return ( 20 return (
8− <article className={`surface flex flex-col gap-3 p-5 ${featured ? "md:p-7" : ""}`}> 21+ <ul className="flex items-center gap-2" aria-label="Available artifacts">
9− <div className="flex flex-wrap items-center gap-2 text-xs"> 22+ {items
10− <span className="font-mono subtle">{p.publicId}</span> 23+ .filter(([ok]) => ok)
11− <span className="subtle">·</span> 24+ .map(([, label, icon]) => (
12− <span className="muted">{disciplineLabel(p.discipline)}</span> 25+ <li
13− <span className="subtle">·</span> 26+ key={label}
14− <span className="muted">{modeLabel(p.researchMode)}</span> 27+ className="subtle inline-flex items-center gap-1 text-[11px]"
28+ title={`${label} available`}
29+ >
30+ {icon}
31+ <span className="sr-only sm:not-sr-only">{label}</span>
32+ </li>
33+ ))}
34+ </ul>
35+ );
36+}
37+
38+/** ResearchPaperCard — premium publication card. `variant="row"` is denser for lists; `featured` is the editorial lead. */
39+export function PaperCard({
40+ p,
41+ featured = false,
42+ variant = "card",
43+ index,
44+}: {
45+ p: PublicPaperSummary;
46+ featured?: boolean;
47+ variant?: "card" | "row";
48+ index?: number;
49+}) {
50+ const href = `/research/${p.slug}`;
51+ const delay = index !== undefined ? `reveal reveal-${Math.min(4, (index % 4) + 1)}` : "";
52+ if (featured) {
53+ return (
54+ <article
55+ className={`surface card-link relative grid gap-6 p-6 sm:p-8 lg:grid-cols-12 lg:p-10 ${delay}`}
56+ >
57+ <div className="lg:col-span-8">
58+ <div className="flex flex-wrap items-center gap-x-3 gap-y-1.5">
59+ <span className="mono-id">{p.publicId}</span>
60+ <span className="badge badge-accent">Featured</span>
61+ <span className="muted text-xs">
62+ {disciplineLabel(p.discipline)} · {modeLabel(p.researchMode)}
63+ </span>
64+ {p.status !== "published" && <StatusBadge status={p.status} />}
65+ {p.synthetic && <span className="badge">staging sample</span>}
66+ </div>
67+ <h3 className="title-1 mt-4">
68+ <Link href={href} className="no-underline after:absolute after:inset-0 hover:underline">
69+ {p.title}
70+ </Link>
71+ </h3>
72+ <p className="prose-paper muted mt-4 line-clamp-4 text-[1.02rem]">{p.abstract}</p>
73+ </div>
74+ <div className="flex flex-col justify-between gap-4 border-t pt-4 hairline lg:col-span-4 lg:border-l lg:border-t-0 lg:pl-8 lg:pt-0">
75+ <dl className="grid grid-cols-2 gap-x-4 gap-y-3 text-sm lg:grid-cols-1">
76+ <div>
77+ <dt className="label">Released</dt>
78+ <dd className="mt-0.5">{fmtDate(p.firstPublishedAt)}</dd>
79+ </div>
80+ <div>
81+ <dt className="label">Version</dt>
82+ <dd className="mt-0.5">v{p.versionNo}</dd>
83+ </div>
84+ <div className="col-span-2 lg:col-span-1">
85+ <dt className="label">Keywords</dt>
86+ <dd className="mt-1 flex flex-wrap gap-1.5">
87+ {p.keywords.slice(0, 5).map((k) => (
88+ <span key={k} className="badge normal-case tracking-normal">
89+ {k}
90+ </span>
91+ ))}
92+ </dd>
93+ </div>
94+ </dl>
95+ <div className="flex items-center justify-between gap-3">
96+ <Avail p={p} />
97+ <span
98+ className="inline-flex items-center gap-1 text-sm font-medium"
99+ style={{ color: "var(--accent-strong)" }}
100+ >
101+ Read <IconArrow size={16} />
102+ </span>
103+ </div>
104+ </div>
105+ </article>
106+ );
107+ }
108+ if (variant === "row") {
109+ return (
110+ <article
111+ className={`group relative grid gap-3 border-b py-5 hairline sm:grid-cols-12 sm:gap-6 ${delay}`}
112+ >
113+ <div className="sm:col-span-3">
114+ <p className="mono-id">{p.publicId}</p>
115+ <p className="muted mt-1 text-xs">
116+ {fmtDate(p.firstPublishedAt)} · v{p.versionNo}
117+ </p>
118+ <p className="muted mt-1 text-xs">
119+ {disciplineLabel(p.discipline)} · {modeLabel(p.researchMode)}
120+ </p>
121+ </div>
122+ <div className="min-w-0 sm:col-span-9">
123+ <div className="flex flex-wrap items-center gap-2">
124+ {p.status !== "published" && <StatusBadge status={p.status} />}
125+ {p.synthetic && <span className="badge">staging sample</span>}
126+ </div>
127+ <h3 className="title-3 mt-1">
128+ <Link href={href} className="no-underline after:absolute after:inset-0 group-hover:underline">
129+ {p.title}
130+ </Link>
131+ </h3>
132+ <p className="muted mt-2 line-clamp-2 text-sm leading-relaxed">{p.abstract}</p>
133+ <div className="mt-3 flex flex-wrap items-center justify-between gap-2">
134+ <ul className="flex flex-wrap gap-1.5">
135+ {p.keywords.slice(0, 4).map((k) => (
136+ <li key={k} className="badge normal-case tracking-normal">
137+ {k}
138+ </li>
139+ ))}
140+ </ul>
141+ <Avail p={p} />
142+ </div>
143+ </div>
144+ </article>
145+ );
146+ }
147+ return (
148+ <article className={`surface card-link relative flex h-full flex-col gap-3 p-5 ${delay}`}>
149+ <div className="flex flex-wrap items-center gap-x-2 gap-y-1 text-xs">
150+ <span className="mono-id">{p.publicId}</span>
151+ <span className="muted">
152+ {disciplineLabel(p.discipline)} · {modeLabel(p.researchMode)}
153+ </span>
15 {p.status !== "published" && <StatusBadge status={p.status} />} 154 {p.status !== "published" && <StatusBadge status={p.status} />}
16 {p.synthetic && <span className="badge">staging sample</span>} 155 {p.synthetic && <span className="badge">staging sample</span>}
17 </div> 156 </div>
18− <h3 className={`serif font-semibold leading-snug ${featured ? "text-2xl" : "text-lg"}`}> 157+ <h3 className="title-3">
19− <Link href={`/research/${p.slug}`} className="no-underline hover:underline"> 158+ <Link href={href} className="no-underline after:absolute after:inset-0 hover:underline">
20 {p.title} 159 {p.title}
21 </Link> 160 </Link>
22 </h3> 161 </h3>
23 <p className="muted line-clamp-3 text-sm leading-relaxed">{p.abstract}</p> 162 <p className="muted line-clamp-3 text-sm leading-relaxed">{p.abstract}</p>
24− <div className="mt-auto flex flex-wrap items-center justify-between gap-2 pt-1 text-xs"> 163+ <div className="mt-auto flex items-center justify-between gap-2 pt-2 text-xs">
25 <span className="subtle"> 164 <span className="subtle">
26 {fmtDate(p.firstPublishedAt)} · v{p.versionNo} 165 {fmtDate(p.firstPublishedAt)} · v{p.versionNo}
27 </span> 166 </span>
28− <span className="flex gap-2 subtle"> 167+ <Avail p={p} />
29− {p.hasLatex && <span title="LaTeX source available">TeX</span>}
30− {p.hasCode && <span title="Code available">Code</span>}
31− {p.hasData && <span title="Data available">Data</span>}
32− </span>
33 </div> 168 </div>
34 </article> 169 </article>
35 ); 170 );
36 } 171 }
172+export { PaperCard as ResearchPaperCard };
173+export function FeaturedPaper({ p }: { p: PublicPaperSummary }) {
174+ return <PaperCard p={p} featured />;
175+}
added apps/web/src/components/PaperReader.tsx +197 −0
@@ -0,0 +1,197 @@
1+"use client";
2+import { useCallback, useEffect, useRef, useState } from "react";
3+import { IconChevron, IconDownload, IconExpand } from "./Icons";
4+
5+type PdfDoc = { numPages: number; getPage: (n: number) => Promise<PdfPage>; destroy?: () => Promise<void> };
6+type PdfPage = {
7+ getViewport: (o: { scale: number }) => { width: number; height: number };
8+ render: (o: { canvasContext: CanvasRenderingContext2D; viewport: { width: number; height: number } }) => {
9+ promise: Promise<void>;
10+ cancel: () => void;
11+ };
12+};
13+
14+/**
15+ * PaperReader — pdf.js-based reader: page navigation, zoom-to-width, full-screen, download, keyboard support,
16+ * loading and error states, native/mobile fallback. The worker is loaded from this origin (CSP-safe).
17+ */
18+export function PaperReader({
19+ src,
20+ title,
21+ downloadHref,
22+ versionLabel,
23+}: {
24+ src: string;
25+ title: string;
26+ downloadHref: string;
27+ versionLabel: string;
28+}) {
29+ const [doc, setDoc] = useState<PdfDoc | null>(null);
30+ const [page, setPage] = useState(1);
31+ const [state, setState] = useState<"loading" | "ready" | "error">("loading");
32+ const [fs, setFs] = useState(false);
33+ const canvas = useRef<HTMLCanvasElement>(null);
34+ const wrap = useRef<HTMLDivElement>(null);
35+ const root = useRef<HTMLElement>(null);
36+ const renderTask = useRef<{ cancel: () => void } | null>(null);
37+
38+ useEffect(() => {
39+ let cancelled = false;
40+ let loaded: PdfDoc | null = null;
41+ (async () => {
42+ try {
43+ const pdfjs = await import("pdfjs-dist");
44+ pdfjs.GlobalWorkerOptions.workerSrc = "/pdf.worker.min.mjs";
45+ const task = pdfjs.getDocument({ url: src, disableAutoFetch: true });
46+ const d = (await task.promise) as unknown as PdfDoc;
47+ if (cancelled) return;
48+ loaded = d;
49+ setDoc(d);
50+ setState("ready");
51+ } catch {
52+ if (!cancelled) setState("error");
53+ }
54+ })();
55+ return () => {
56+ cancelled = true;
57+ loaded?.destroy?.().catch(() => {});
58+ };
59+ }, [src]);
60+
61+ const render = useCallback(async () => {
62+ if (!doc || !canvas.current || !wrap.current) return;
63+ renderTask.current?.cancel();
64+ const p = await doc.getPage(page);
65+ const width = wrap.current.clientWidth;
66+ const base = p.getViewport({ scale: 1 });
67+ const scale = width / base.width;
68+ const dpr = Math.min(window.devicePixelRatio || 1, 2);
69+ const vp = p.getViewport({ scale: scale * dpr });
70+ const c = canvas.current;
71+ c.width = vp.width;
72+ c.height = vp.height;
73+ c.style.width = `${vp.width / dpr}px`;
74+ c.style.height = `${vp.height / dpr}px`;
75+ const ctx = c.getContext("2d");
76+ if (!ctx) return;
77+ const t = p.render({ canvasContext: ctx, viewport: vp });
78+ renderTask.current = t;
79+ await t.promise.catch(() => {});
80+ }, [doc, page]);
81+
82+ useEffect(() => {
83+ render();
84+ const ro = new ResizeObserver(() => render());
85+ if (wrap.current) ro.observe(wrap.current);
86+ return () => ro.disconnect();
87+ }, [render]);
88+
89+ useEffect(() => {
90+ const onFs = () => setFs(!!document.fullscreenElement);
91+ document.addEventListener("fullscreenchange", onFs);
92+ return () => document.removeEventListener("fullscreenchange", onFs);
93+ }, []);
94+
95+ const n = doc?.numPages ?? 0;
96+ const go = (p: number) => setPage(Math.min(Math.max(1, p), Math.max(1, n)));
97+ const onKey = (e: React.KeyboardEvent) => {
98+ if (e.key === "ArrowRight" || e.key === "PageDown") go(page + 1);
99+ if (e.key === "ArrowLeft" || e.key === "PageUp") go(page - 1);
100+ };
101+ const toggleFs = async () => {
102+ if (document.fullscreenElement) await document.exitFullscreen();
103+ else await root.current?.requestFullscreen?.().catch(() => {});
104+ };
105+
106+ return (
107+ <figure
108+ ref={root}
109+ className={`surface overflow-hidden ${fs ? "bg-[var(--bg)]" : ""}`}
110+ aria-label={`PDF reader: ${title}`}
111+ >
112+ <div className="flex flex-wrap items-center justify-between gap-2 border-b px-3 py-2 text-xs hairline">
113+ <div className="flex items-center gap-1">
114+ <button
115+ type="button"
116+ className="btn-icon h-9 w-9"
117+ aria-label="Previous page"
118+ onClick={() => go(page - 1)}
119+ disabled={page <= 1}
120+ >
121+ <IconChevron size={16} className="rotate-180" />
122+ </button>
123+ <span className="tabular-nums">
124+ <label htmlFor="pdf-page" className="sr-only">
125+ Page
126+ </label>
127+ <input
128+ id="pdf-page"
129+ type="number"
130+ min={1}
131+ max={Math.max(1, n)}
132+ value={page}
133+ onChange={(e) => go(Number(e.target.value) || 1)}
134+ className="input inline-block h-8 w-14 px-2 text-center"
135+ style={{ minHeight: "2rem", fontSize: "0.8rem" }}
136+ />{" "}
137+ <span className="muted">/ {n || "…"}</span>
138+ </span>
139+ <button
140+ type="button"
141+ className="btn-icon h-9 w-9"
142+ aria-label="Next page"
143+ onClick={() => go(page + 1)}
144+ disabled={!n || page >= n}
145+ >
146+ <IconChevron size={16} />
147+ </button>
148+ </div>
149+ <div className="flex items-center gap-1">
150+ <span className="badge hidden sm:inline-flex">{versionLabel}</span>
151+ <a className="btn-icon h-9 w-9" href={downloadHref} aria-label="Download PDF">
152+ <IconDownload size={16} />
153+ </a>
154+ <button
155+ type="button"
156+ className="btn-icon h-9 w-9"
157+ aria-label={fs ? "Exit full screen" : "Full screen"}
158+ onClick={toggleFs}
159+ >
160+ <IconExpand size={16} />
161+ </button>
162+ </div>
163+ </div>
164+ {/* biome-ignore lint/a11y/noNoninteractiveTabindex: keyboard paging on the reader surface */}
165+ <div
166+ ref={wrap}
167+ className={`relative overflow-auto ${fs ? "h-[calc(100dvh-3rem)]" : "max-h-[78dvh]"}`}
168+ style={{ background: "var(--bg-sunken)" }}
169+ tabIndex={0}
170+ onKeyDown={onKey}
171+ >
172+ {state === "loading" && (
173+ <div className="p-6">
174+ <div className="skeleton mx-auto aspect-[1/1.3] w-full max-w-2xl" aria-label="Loading PDF" />
175+ </div>
176+ )}
177+ {state === "error" && (
178+ <div className="p-6 text-sm">
179+ <p className="muted">The PDF could not be rendered in this browser.</p>
180+ <a className="btn mt-3" href={downloadHref}>
181+ Download the PDF
182+ </a>
183+ </div>
184+ )}
185+ <canvas
186+ ref={canvas}
187+ className={`mx-auto block ${state === "ready" ? "" : "hidden"}`}
188+ aria-label={`Page ${page} of ${title}`}
189+ />
190+ </div>
191+ <figcaption className="subtle flex items-center justify-between gap-3 px-3 py-2 text-xs">
192+ <span className="truncate">{title}</span>
193+ <span className="hidden sm:inline">← → to turn pages</span>
194+ </figcaption>
195+ </figure>
196+ );
197+}
modified apps/web/src/components/PdfViewer.tsx +11 −14
@@ -1,26 +1,23 @@
1+import { PaperReader } from "./PaperReader";
2+
3+/** Kept for backward compatibility: delegates to the pdf.js PaperReader. */
1 export function PdfViewer({ 4 export function PdfViewer({
2 src, 5 src,
3 title, 6 title,
4 downloadHref, 7 downloadHref,
8+ versionLabel = "",
5 }: { 9 }: {
6 src: string; 10 src: string;
7 title: string; 11 title: string;
8 downloadHref?: string; 12 downloadHref?: string;
13+ versionLabel?: string;
9 }) { 14 }) {
10 return ( 15 return (
11− <figure className="surface overflow-hidden"> 16+ <PaperReader
12− <object data={src} type="application/pdf" className="h-[70vh] w-full" aria-label={`PDF: ${title}`}> 17+ src={src}
13− <div className="p-6 text-sm"> 18+ title={title}
14− <p className="muted">Your browser cannot display PDFs inline.</p> 19+ downloadHref={downloadHref ?? `${src}?download=1`}
15− <a className="btn mt-3" href={downloadHref ?? src}> 20+ versionLabel={versionLabel}
16− Download the PDF 21+ />
17− </a>
18− </div>
19− </object>
20− <figcaption className="subtle flex items-center justify-between px-4 py-2 text-xs">
21− <span>{title}</span>
22− <a href={downloadHref ?? `${src}?download=1`}>Download PDF</a>
23− </figcaption>
24− </figure>
25 ); 22 );
26 } 23 }
added apps/web/src/components/PublicationMetadata.tsx +85 −0
@@ -0,0 +1,85 @@
1+import Link from "next/link";
2+import { disciplineLabel, fmtDate, modeLabel } from "@/lib/format";
3+import { t } from "@/lib/i18n";
4+import { StatusBadge } from "./StatusBadge";
5+
6+/** PublicationMetadata — consistent academic header block for a paper. */
7+export function PublicationMetadata({
8+ publicId,
9+ versionNo,
10+ status,
11+ synthetic,
12+ title,
13+ discipline,
14+ mode,
15+ firstPublishedAt,
16+ revisedAt,
17+ keywords,
18+ verified,
19+}: {
20+ publicId: string;
21+ versionNo: number;
22+ status: string;
23+ synthetic: boolean;
24+ title: string;
25+ discipline: string;
26+ mode: string;
27+ firstPublishedAt: string | Date;
28+ revisedAt: string | Date;
29+ keywords: string[];
30+ verified?: string;
31+}) {
32+ return (
33+ <header>
34+ <div className="flex flex-wrap items-center gap-x-3 gap-y-1.5">
35+ <span className="mono-id">{publicId}</span>
36+ <span className="muted text-xs">Version {versionNo}</span>
37+ <StatusBadge status={status} />
38+ {verified && <StatusBadge status="verified" label={verified} />}
39+ {synthetic && <span className="badge">staging sample — not a real paper</span>}
40+ </div>
41+ <h1 className="title-1 mt-4 max-w-4xl">{title}</h1>
42+ <p className="mt-4 text-sm">
43+ <span className="font-medium">{t("byline")}</span>
44+ <span className="muted"> · Research computed on MacLustr</span>
45+ </p>
46+ <dl className="mt-5 grid grid-cols-2 gap-x-6 gap-y-3 text-sm sm:grid-cols-4">
47+ <div>
48+ <dt className="label">Released</dt>
49+ <dd className="mt-0.5">{fmtDate(firstPublishedAt)}</dd>
50+ </div>
51+ <div>
52+ <dt className="label">Revised</dt>
53+ <dd className="mt-0.5">{fmtDate(revisedAt)}</dd>
54+ </div>
55+ <div>
56+ <dt className="label">Discipline</dt>
57+ <dd className="mt-0.5">
58+ <Link href={`/research?discipline=${discipline}`} className="no-underline hover:underline">
59+ {disciplineLabel(discipline)}
60+ </Link>
61+ </dd>
62+ </div>
63+ <div>
64+ <dt className="label">Methodology</dt>
65+ <dd className="mt-0.5">{modeLabel(mode)}</dd>
66+ </div>
67+ </dl>
68+ {keywords.length > 0 && (
69+ <ul className="mt-4 flex flex-wrap gap-1.5" aria-label="Keywords">
70+ {keywords.map((k) => (
71+ <li key={k}>
72+ <Link
73+ href={`/research?q=${encodeURIComponent(k)}`}
74+ className="chip no-underline"
75+ style={{ minHeight: "1.75rem" }}
76+ >
77+ {k}
78+ </Link>
79+ </li>
80+ ))}
81+ </ul>
82+ )}
83+ </header>
84+ );
85+}
added apps/web/src/components/ResearchPipeline.tsx +195 −0
@@ -0,0 +1,195 @@
1+import { STAGES } from "@autoscholar/schemas";
2+import { IconChevron } from "./Icons";
3+
4+export type StageDoc = {
5+ summary: string;
6+ detail: string;
7+ inputs?: string;
8+ outputs?: string;
9+ verification?: string;
10+ where: "worker" | "control";
11+};
12+
13+export const STAGE_DOCS: Record<string, StageDoc> = {
14+ preflight: {
15+ where: "worker",
16+ summary: "The frozen brief is checked for scope, feasibility and restricted activities.",
17+ detail:
18+ "The research instruction is parsed exactly as uploaded. Scientific scope, feasibility within the budget, regulated or restricted activities, missing inputs and unsupported claims are assessed. Unsafe or impossible studies are rejected with written reasons and are never retried.",
19+ inputs: "Frozen CLAUDE.md, immutable run manifest",
20+ outputs: "plan/feasibility.json, initial research plan",
21+ verification: "Infeasible → run fails safely",
22+ },
23+ framing: {
24+ where: "worker",
25+ summary: "Question, hypotheses, contribution and evaluation criteria are fixed before any test.",
26+ detail:
27+ "A precise question, falsifiable hypotheses or propositions, the intended contribution and a discipline-appropriate methodology are recorded. Evaluation metrics, proof obligations or inclusion criteria are pre-registered, together with failure modes and an honest null-result pathway.",
28+ outputs: "plan/research-plan.md with a pre-registration section",
29+ },
30+ literature: {
31+ where: "worker",
32+ summary: "Real registries are searched; every citation is verified by identifier before use.",
33+ detail:
34+ "Crossref, OpenAlex, arXiv, PubMed and Semantic Scholar are queried as the discipline requires. A source enters the bibliography only through the verification tool, which resolves its DOI, arXiv id or PMID and generates the BibTeX from the registry record. A claim-to-source map links background claims to verified keys.",
35+ outputs: "sources/sources.json, references.bib, source-map.json",
36+ verification: "Unverified references cannot be cited",
37+ },
38+ design: {
39+ where: "worker",
40+ summary: "Data, proofs, benchmarks or search protocols are set up with provenance.",
41+ detail:
42+ "Depending on the mode: legally usable data with licence, timestamp and SHA-256; formal definitions and planned derivations; benchmark environments with baselines, seeds and leakage controls; or a search protocol with inclusion criteria. Simulations are labelled synthetic wherever they appear.",
43+ outputs: "data/manifest.json, code/ environment lock, formal setup",
44+ },
45+ execute: {
46+ where: "worker",
47+ summary: "Code, experiments, derivations or qualitative work actually run in the sandbox.",
48+ detail:
49+ "Analyses execute in an isolated workspace with recorded environment, versions, seeds, commands and outputs. Failures and negative results are kept; specifications are not re-run until a desired result appears. Every number destined for the manuscript is registered for later tracing.",
50+ outputs: "results/metrics.json, experiment-log.jsonl, tables and figures",
51+ },
52+ robustness: {
53+ where: "worker",
54+ summary: "The result is attacked: alternatives, sensitivity, stronger baselines, counterexamples.",
55+ detail:
56+ "Mode-specific checks — alternative specifications, held-out tests, placebo tests, relaxed assumptions, counterexample searches — are run and reported, including those that weaken the contribution.",
57+ outputs: "results/robustness.md",
58+ },
59+ manuscript: {
60+ where: "worker",
61+ summary: "A LaTeX working paper is written from recorded results and built with tectonic.",
62+ detail:
63+ "The manuscript uses the AutoScholar class and the platform-generated bibliography. Every reported number must derive from stored artifacts; disclosures are inserted by the class. The platform rebuilds the PDF itself and returns build errors for repair.",
64+ outputs: "manuscript/main.tex, main.pdf, metadata.json",
65+ },
66+ review: {
67+ where: "worker",
68+ summary: "A separate referee session critiques the paper; it can only write under review/.",
69+ detail:
70+ "An independent review context that did not author the manuscript examines novelty, validity, evidence traceability, mathematics, statistics, references, ethics and writing, and records findings with severities. This is automated critique, not human peer review.",
71+ outputs: "review/review-1.md, review-1.json",
72+ verification: "Open blockers stop publication",
73+ },
74+ reproduction: {
75+ where: "worker",
76+ summary: "Findings are addressed; the analysis is re-executed and the PDF rebuilt in a clean copy.",
77+ detail:
78+ "The platform re-runs code/reproduce.sh under a sandbox profile, compares regenerated metrics with the reported ones and rebuilds the PDF from source. Page previews are inspected; the author session repairs layout defects and writes a point-by-point response to the review.",
79+ outputs: "results/reproduction.json, review/revisions.md, checksums",
80+ },
81+ quality: {
82+ where: "control",
83+ summary: "Deterministic gates decide on the control plane — never from model text.",
84+ detail:
85+ "Sixteen gates check completeness, digests, PDF health, disclosures, citation verification, claim tracing, result consistency, data provenance, execution evidence, review state and secrets. Any hard failure blocks publication regardless of review scores.",
86+ verification: "Hard gates block; soft gates warn",
87+ },
88+ publication: {
89+ where: "control",
90+ summary: "A permanent number is allocated and artifacts are promoted in one transaction.",
91+ detail:
92+ "AS-WP-YEAR-NNNN is allocated inside the transaction that creates the public version; artifacts are copied with their digests, the feed and sitemap update, and the page goes live. Sensitive modes and disciplines wait for human approval.",
93+ outputs: "Public paper page, PDF, source, code, data, provenance",
94+ },
95+};
96+
97+/** ResearchPipeline — vertical timeline with progressive disclosure (details/summary, no JS required). */
98+export function ResearchPipeline({
99+ expandFirst = false,
100+ compact = false,
101+}: {
102+ expandFirst?: boolean;
103+ compact?: boolean;
104+}) {
105+ return (
106+ <ol className="pipeline space-y-2">
107+ {STAGES.map((s, i) => {
108+ const d = STAGE_DOCS[s.key];
109+ if (!d) return null;
110+ return (
111+ <li key={s.key} className="relative flex gap-4">
112+ <span className="pipeline-node" data-tone={d.where} aria-hidden="true">
113+ {String(s.index).padStart(2, "0")}
114+ </span>
115+ <details
116+ className="group min-w-0 flex-1 rounded-lg border hairline bg-[var(--bg-elev)]"
117+ open={expandFirst && i === 0}
118+ >
119+ <summary className="flex items-start justify-between gap-3 px-4 py-3">
120+ <span className="min-w-0">
121+ <span className="flex flex-wrap items-center gap-2">
122+ <span className="title-3">{s.name}</span>
123+ <span className={`badge ${d.where === "control" ? "badge-accent" : "badge-sci"}`}>
124+ {d.where === "control" ? "control plane" : "MacLustr worker"}
125+ </span>
126+ </span>
127+ {!compact && <span className="muted mt-1 block text-sm leading-relaxed">{d.summary}</span>}
128+ </span>
129+ <IconChevron
130+ size={16}
131+ className="mt-1 flex-none subtle transition-transform group-open:rotate-90"
132+ />
133+ </summary>
134+ <div className="border-t px-4 py-4 hairline">
135+ <p className="muted text-sm leading-relaxed">{d.detail}</p>
136+ <dl className="mt-3 grid gap-2 text-xs sm:grid-cols-3">
137+ {d.inputs && (
138+ <div>
139+ <dt className="label">Inputs</dt>
140+ <dd className="mt-0.5 font-mono">{d.inputs}</dd>
141+ </div>
142+ )}
143+ {d.outputs && (
144+ <div>
145+ <dt className="label">Outputs</dt>
146+ <dd className="mt-0.5 font-mono">{d.outputs}</dd>
147+ </div>
148+ )}
149+ {d.verification && (
150+ <div>
151+ <dt className="label">Verification</dt>
152+ <dd className="mt-0.5">{d.verification}</dd>
153+ </div>
154+ )}
155+ </dl>
156+ </div>
157+ </details>
158+ </li>
159+ );
160+ })}
161+ </ol>
162+ );
163+}
164+
165+/** Compact horizontal overview of the pipeline for the homepage. */
166+export function PipelineStrip() {
167+ const groups: Array<[string, string[]]> = [
168+ ["Plan", ["preflight", "framing"]],
169+ ["Investigate", ["literature", "design"]],
170+ ["Execute", ["execute", "robustness"]],
171+ ["Write & review", ["manuscript", "review", "reproduction"]],
172+ ["Verify & release", ["quality", "publication"]],
173+ ];
174+ return (
175+ <ol className="grid gap-3 sm:grid-cols-2 lg:grid-cols-5">
176+ {groups.map(([g, keys], i) => (
177+ <li key={g} className="surface relative p-4">
178+ <span className="mono-id">{String(i + 1).padStart(2, "0")}</span>
179+ <p className="title-3 mt-1">{g}</p>
180+ <ul className="muted mt-2 space-y-1 text-xs">
181+ {keys.map((k) => {
182+ const s = STAGES.find((x) => x.key === k)!;
183+ return (
184+ <li key={k} className="flex items-baseline gap-2">
185+ <span className="subtle font-mono text-[10px]">{s.index}</span>
186+ <span>{s.name}</span>
187+ </li>
188+ );
189+ })}
190+ </ul>
191+ </li>
192+ ))}
193+ </ol>
194+ );
195+}
added apps/web/src/components/ResearchProvenance.tsx +154 −0
@@ -0,0 +1,154 @@
1+import { STAGES } from "@autoscholar/schemas";
2+import { fmtDate, shortHash } from "@/lib/format";
3+import { IconChevron } from "./Icons";
4+import { StatusBadge } from "./StatusBadge";
5+
6+type Gate = { gate: string; status: string; severity: string; message: string };
7+
8+/** ResearchProvenance — expandable, verifiable record: stages, models, hashes, gates, warnings. */
9+export function ResearchProvenance({
10+ prov,
11+ qa,
12+ texReleased,
13+ meta,
14+}: {
15+ prov: Record<string, unknown>;
16+ qa: { gates?: Gate[]; warnings?: string[]; policyVersion?: string; evaluatedAt?: string };
17+ texReleased: boolean;
18+ meta: Record<string, unknown>;
19+}) {
20+ const gates = qa.gates ?? [];
21+ const passed = gates.filter((g) => g.status === "pass").length;
22+ const counted = gates.filter((g) => g.status !== "skip").length;
23+ const stagesDone = (prov.stagesCompleted as string[] | undefined) ?? [];
24+ const toolchain = (prov.toolchain as Record<string, string> | undefined) ?? {};
25+ const Row = ({ k, v, mono = false }: { k: string; v: React.ReactNode; mono?: boolean }) => (
26+ <div className="grid grid-cols-[9rem_1fr] gap-x-3 border-b py-2 text-sm last:border-0 hairline sm:grid-cols-[11rem_1fr]">
27+ <dt className="label pt-0.5">{k}</dt>
28+ <dd className={`min-w-0 break-words ${mono ? "font-mono text-xs" : ""}`}>{v}</dd>
29+ </div>
30+ );
31+ return (
32+ <div className="surface overflow-hidden">
33+ <div className="grid gap-4 border-b p-5 hairline sm:grid-cols-3">
34+ <div>
35+ <p className="label">Quality gates</p>
36+ <p className="serif mt-1 text-2xl">{counted ? `${passed}/${counted}` : "—"}</p>
37+ <p className="subtle text-xs">
38+ {qa.evaluatedAt ? `verified ${fmtDate(qa.evaluatedAt)}` : "not recorded"}
39+ </p>
40+ </div>
41+ <div>
42+ <p className="label">Stages completed</p>
43+ <p className="serif mt-1 text-2xl">
44+ {stagesDone.length ? `${stagesDone.length}/${STAGES.length - 2}` : "—"}
45+ </p>
46+ <p className="subtle text-xs">on the research worker</p>
47+ </div>
48+ <div>
49+ <p className="label">Policy</p>
50+ <p className="serif mt-1 text-2xl">{qa.policyVersion ?? "—"}</p>
51+ <p className="subtle text-xs">deterministic, server-side</p>
52+ </div>
53+ </div>
54+ <dl className="px-5 py-2">
55+ <Row k="Research model" v={String(prov.model ?? "—")} mono />
56+ <Row k="Reviewer model" v={String(prov.reviewerModel ?? "—")} mono />
57+ <Row
58+ k="Instruction"
59+ v={`v${String(prov.instructionVersion ?? "?")} · ${shortHash(prov.instructionSha256 as string)}`}
60+ mono
61+ />
62+ <Row k="Manifest digest" v={shortHash(prov.manifestSha256 as string, 16)} mono />
63+ <Row
64+ k="Execution"
65+ v={
66+ prov.startedAt
67+ ? `${fmtDate(prov.startedAt as string)} → ${prov.completedAt ? fmtDate(prov.completedAt as string) : "?"} · ${String(prov.infrastructure ?? "MacLustr")}`
68+ : "—"
69+ }
70+ />
71+ <Row
72+ k="Toolchain"
73+ v={
74+ Object.keys(toolchain).length
75+ ? Object.entries(toolchain)
76+ .map(([k, v]) => `${k} ${v}`)
77+ .join(" · ")
78+ : "not recorded"
79+ }
80+ mono
81+ />
82+ <Row
83+ k="LaTeX source"
84+ v={
85+ texReleased
86+ ? "Released; the PDF was rebuilt from it in a clean environment during verification."
87+ : "Not released."
88+ }
89+ />
90+ <Row k="Data availability" v={(meta.dataAvailability as string) || "Not applicable or not stated."} />
91+ <Row k="Code availability" v={(meta.codeAvailability as string) || "Not applicable or not stated."} />
92+ <Row
93+ k="Ethics"
94+ v={
95+ (meta.ethics as string) ||
96+ "No restricted activities; public data, mathematics or simulations only."
97+ }
98+ />
99+ </dl>
100+ {stagesDone.length > 0 && (
101+ <div className="border-t px-5 py-4 hairline">
102+ <p className="label mb-2">Pipeline record</p>
103+ <ol className="flex flex-wrap gap-1.5">
104+ {STAGES.map((s) => {
105+ const done =
106+ stagesDone.includes(s.key) || (s.key === "quality" && counted > 0) || s.key === "publication";
107+ return (
108+ <li key={s.key} className={`badge ${done ? "badge-sci" : ""}`} title={s.name}>
109+ {s.index} {s.name}
110+ </li>
111+ );
112+ })}
113+ </ol>
114+ </div>
115+ )}
116+ {gates.length > 0 && (
117+ <details className="group border-t hairline">
118+ <summary className="flex items-center justify-between px-5 py-3 text-sm">
119+ <span>Gate-by-gate evidence ({gates.length})</span>
120+ <IconChevron size={16} className="subtle transition-transform group-open:rotate-90" />
121+ </summary>
122+ <ul className="space-y-1.5 px-5 pb-4 text-xs">
123+ {gates.map((g) => (
124+ <li key={g.gate} className="grid grid-cols-[auto_1fr] items-start gap-2">
125+ <StatusBadge status={g.status} />
126+ <span>
127+ <span className="font-mono">{g.gate}</span> <span className="subtle">({g.severity})</span>
128+ <span className="muted"> — {g.message}</span>
129+ </span>
130+ </li>
131+ ))}
132+ </ul>
133+ </details>
134+ )}
135+ {qa.warnings && qa.warnings.length > 0 && (
136+ <details className="group border-t hairline">
137+ <summary className="flex items-center justify-between px-5 py-3 text-sm">
138+ <span>Non-blocking warnings recorded at verification ({qa.warnings.length})</span>
139+ <IconChevron size={16} className="subtle transition-transform group-open:rotate-90" />
140+ </summary>
141+ <ul className="muted list-disc space-y-1 px-5 pb-4 pl-9 text-xs">
142+ {qa.warnings.map((w) => (
143+ <li key={w}>{w}</li>
144+ ))}
145+ </ul>
146+ </details>
147+ )}
148+ <p className="subtle border-t px-5 py-3 text-xs hairline">
149+ Artifact digests (SHA-256) accompany every download; the complete list is in
150+ provenance/checksums.sha256.
151+ </p>
152+ </div>
153+ );
154+}
added apps/web/src/components/ScientificFigure.tsx +52 −0
@@ -0,0 +1,52 @@
1+import { fmtBytes } from "@/lib/format";
2+
3+/** ScientificFigure — a real research figure served from the immutable artifact store. */
4+export function ScientificFigure({
5+ src,
6+ path,
7+ bytes,
8+ index,
9+ vector,
10+}: {
11+ src: string;
12+ path: string;
13+ bytes: number;
14+ index: number;
15+ vector?: { href: string; bytes: number };
16+}) {
17+ const name = path.replace(/^results\/figures\//, "");
18+ return (
19+ <figure className="surface overflow-hidden">
20+ <a
21+ href={src}
22+ className="block bg-white p-3"
23+ target="_blank"
24+ rel="noopener noreferrer"
25+ aria-label={`Open figure ${index}: ${name}`}
26+ >
27+ {/* biome-ignore lint/performance/noImgElement: artifact images are served immutable from this origin */}
28+ <img
29+ src={src}
30+ alt={`Figure ${index}: ${name}`}
31+ className="mx-auto max-h-[28rem] w-auto"
32+ loading="lazy"
33+ decoding="async"
34+ />
35+ </a>
36+ <figcaption className="flex flex-wrap items-center justify-between gap-2 border-t px-3 py-2 text-xs hairline">
37+ <span>
38+ <span className="font-medium">Figure {index}.</span> <span className="muted font-mono">{name}</span>
39+ </span>
40+ <span className="subtle">
41+ {fmtBytes(bytes)}
42+ {vector && (
43+ <>
44+ {" · "}
45+ <a href={`${vector.href}?download=1`}>vector PDF ({fmtBytes(vector.bytes)})</a>
46+ </>
47+ )}
48+ </span>
49+ </figcaption>
50+ </figure>
51+ );
52+}
added apps/web/src/components/SectionHeading.tsx +36 −0
@@ -0,0 +1,36 @@
1+import Link from "next/link";
2+import type { ReactNode } from "react";
3+import { IconArrow } from "./Icons";
4+
5+export function SectionHeading({
6+ eyebrow,
7+ title,
8+ id,
9+ children,
10+ more,
11+ tone = "accent",
12+}: {
13+ eyebrow?: string;
14+ title: ReactNode;
15+ id?: string;
16+ children?: ReactNode;
17+ more?: { href: string; label: string };
18+ tone?: "accent" | "sci";
19+}) {
20+ return (
21+ <div className="flex flex-wrap items-end justify-between gap-x-6 gap-y-3">
22+ <div className="min-w-0">
23+ {eyebrow && <p className={`eyebrow ${tone === "sci" ? "eyebrow-sci" : ""}`}>{eyebrow}</p>}
24+ <h2 id={id} className="title-2 mt-1.5">
25+ {title}
26+ </h2>
27+ {children && <p className="muted mt-2 max-w-xl text-sm leading-relaxed">{children}</p>}
28+ </div>
29+ {more && (
30+ <Link href={more.href} className="btn btn-ghost btn-sm -mr-2">
31+ {more.label} <IconArrow size={14} />
32+ </Link>
33+ )}
34+ </div>
35+ );
36+}
modified apps/web/src/components/SiteFooter.tsx +55 −47
@@ -1,58 +1,66 @@
1 import Link from "next/link"; 1 import Link from "next/link";
2 import { t } from "@/lib/i18n"; 2 import { t } from "@/lib/i18n";
3+import { Wordmark } from "./SiteHeader";
4+
5+const COLS: Array<[string, Array<[string, string]>]> = [
6+ [
7+ "Library",
8+ [
9+ ["/research", "Working papers"],
10+ ["/topics", "Topics"],
11+ ["/series", "Series"],
12+ ["/feed.xml", "RSS feed"],
13+ ["/feed.atom", "Atom feed"],
14+ ],
15+ ],
16+ [
17+ "Institution",
18+ [
19+ ["/about", "About"],
20+ ["/methodology", "Methodology"],
21+ ["/infrastructure", "Infrastructure"],
22+ ["/transparency", "Transparency"],
23+ ],
24+ ],
25+ [
26+ "Legal",
27+ [
28+ ["/legal/privacy", "Privacy"],
29+ ["/legal/terms", "Terms"],
30+ ["/legal/research-disclaimer", "Research disclaimer"],
31+ ],
32+ ],
33+];
3 34
4 export function SiteFooter() { 35 export function SiteFooter() {
5 return ( 36 return (
6− <footer className="mt-20 border-t hairline"> 37+ <footer className="mt-16 border-t hairline sm:mt-24" style={{ paddingBottom: "var(--safe-b)" }}>
7− <div className="container-x grid gap-8 py-12 md:grid-cols-4"> 38+ <div className="container-x grid gap-10 py-12 md:grid-cols-12 lg:py-16">
8− <div className="md:col-span-2"> 39+ <div className="md:col-span-5">
9− <p className="serif text-lg font-semibold">AutoScholar.ai</p> 40+ <Wordmark />
10− <p className="muted mt-1 max-w-md text-sm"> 41+ <p className="muted mt-3 max-w-sm text-sm leading-relaxed">
11 Autonomous Research Foundry. From research instructions to verifiable working papers. 42 Autonomous Research Foundry. From research instructions to verifiable working papers.
12 </p> 43 </p>
13− <p className="mt-4 text-sm"> 44+ <div className="surface-muted mt-5 max-w-sm p-4">
14− <span className="eyebrow">Powered by MacLustr</span> 45+ <p className="eyebrow">Powered by MacLustr</p>
15− <br /> 46+ <p className="muted mt-1 text-sm">{t("footer.credit")}</p>
16− <span className="muted">{t("footer.credit")}</span> 47+ </div>
17− </p>
18− </div>
19− <div>
20− <p className="label mb-2">Library</p>
21− <ul className="space-y-1 text-sm">
22− <li>
23− <Link href="/research">Working papers</Link>
24− </li>
25− <li>
26− <Link href="/topics">Topics</Link>
27− </li>
28− <li>
29− <Link href="/series">Series</Link>
30− </li>
31− <li>
32− <Link href="/feed.xml">RSS feed</Link> · <Link href="/feed.atom">Atom</Link>
33− </li>
34− </ul>
35 </div> 48 </div>
36− <div> 49+ <div className="grid grid-cols-2 gap-8 sm:grid-cols-3 md:col-span-7">
37− <p className="label mb-2">Organisation</p> 50+ {COLS.map(([h, items]) => (
38− <ul className="space-y-1 text-sm"> 51+ <div key={h}>
39− <li> 52+ <p className="label mb-3">{h}</p>
40− <Link href="/about">About</Link> 53+ <ul className="space-y-2 text-sm">
41− </li> 54+ {items.map(([href, label]) => (
42− <li> 55+ <li key={href}>
43− <Link href="/methodology">Methodology</Link> 56+ <Link href={href} className="muted no-underline hover:text-[var(--fg)]">
44− </li> 57+ {label}
45− <li> 58+ </Link>
46− <Link href="/infrastructure">Infrastructure</Link> 59+ </li>
47− </li> 60+ ))}
48− <li> 61+ </ul>
49− <Link href="/transparency">Transparency</Link> 62+ </div>
50− </li> 63+ ))}
51− <li>
52− <Link href="/legal/privacy">Privacy</Link> · <Link href="/legal/terms">Terms</Link> ·{" "}
53− <Link href="/legal/research-disclaimer">Research disclaimer</Link>
54− </li>
55− </ul>
56 </div> 64 </div>
57 </div> 65 </div>
58 <div className="border-t hairline"> 66 <div className="border-t hairline">
modified apps/web/src/components/SiteHeader.tsx +57 −25
@@ -1,8 +1,10 @@
1 import Link from "next/link"; 1 import Link from "next/link";
2 import { t } from "@/lib/i18n"; 2 import { t } from "@/lib/i18n";
3+import { HeaderChrome } from "./HeaderChrome";
4+import { IconSearch } from "./Icons";
3 import { ThemeToggle } from "./ThemeToggle"; 5 import { ThemeToggle } from "./ThemeToggle";
4 6
5−const NAV = [ 7+export const NAV = [
6 ["/research", "nav.research"], 8 ["/research", "nav.research"],
7 ["/topics", "nav.topics"], 9 ["/topics", "nav.topics"],
8 ["/series", "nav.series"], 10 ["/series", "nav.series"],
@@ -12,38 +14,68 @@ const NAV = [
12 ["/about", "nav.about"], 14 ["/about", "nav.about"],
13 ] as const; 15 ] as const;
14 16
15−export function SiteHeader() { 17+export function Wordmark({ className = "" }: { className?: string }) {
16 return ( 18 return (
17− <header 19+ <Link
18− className="sticky top-0 z-40 border-b hairline backdrop-blur" 20+ href="/"
19− style={{ background: "color-mix(in oklab, var(--bg) 88%, transparent)" }} 21+ className={`flex items-center gap-2 no-underline ${className}`}
22+ aria-label="AutoScholar.ai home"
20 > 23 >
21− <div className="container-x flex h-14 items-center justify-between gap-4"> 24+ <span
22− <Link href="/" className="flex items-baseline gap-2 no-underline"> 25+ aria-hidden="true"
23− <span className="serif text-lg font-semibold tracking-tight">AutoScholar</span> 26+ className="grid h-7 w-7 place-items-center rounded-md text-[11px] font-semibold tracking-tight"
24− <span className="subtle text-xs">.ai</span> 27+ style={{ background: "var(--fg)", color: "var(--bg)", fontFamily: "var(--font-serif)" }}
25− </Link> 28+ >
26− <nav aria-label="Primary" className="hidden items-center gap-5 md:flex"> 29+ As
27− {NAV.map(([href, key]) => ( 30+ </span>
28− <Link key={href} href={href} className="muted text-sm hover:text-[var(--fg)]"> 31+ <span className="serif text-[1.15rem] font-medium tracking-tight">
29− {t(key)} 32+ AutoScholar<span className="subtle text-xs font-normal">.ai</span>
33+ </span>
34+ </Link>
35+ );
36+}
37+
38+/** Compact sticky header: one row on every width; drawer + search on mobile, inline nav on desktop. */
39+export function SiteHeader() {
40+ const links = NAV.map(([href, key]) => ({ href, label: t(key) }));
41+ return (
42+ <HeaderChrome links={links}>
43+ <div
44+ className="container-x flex items-center justify-between gap-3"
45+ style={{ height: "var(--header-h)" }}
46+ >
47+ <Wordmark />
48+ <nav aria-label="Primary" className="hidden items-center gap-0.5 lg:flex">
49+ {links.map((l) => (
50+ <Link key={l.href} href={l.href} className="nav-link">
51+ {l.label}
30 </Link> 52 </Link>
31 ))} 53 ))}
32 </nav> 54 </nav>
33− <div className="flex items-center gap-2"> 55+ <div className="flex items-center gap-1">
34− <Link href="/research" className="btn btn-sm md:hidden"> 56+ <form action="/research" method="get" role="search" className="relative hidden md:block">
35− {t("nav.research")} 57+ <label htmlFor="header-q" className="sr-only">
58+ Search the library
59+ </label>
60+ <IconSearch
61+ size={16}
62+ className="pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 subtle"
63+ />
64+ <input
65+ id="header-q"
66+ name="q"
67+ type="search"
68+ placeholder="Search papers"
69+ className="input h-9 w-44 pl-8 text-xs xl:w-56"
70+ style={{ minHeight: "2.25rem" }}
71+ />
72+ </form>
73+ <Link href="/research" className="btn-icon md:hidden" aria-label="Search the library">
74+ <IconSearch />
36 </Link> 75 </Link>
37 <ThemeToggle label={t("theme.toggle")} /> 76 <ThemeToggle label={t("theme.toggle")} />
38 </div> 77 </div>
39 </div> 78 </div>
40− <nav aria-label="Secondary" className="container-x flex gap-4 overflow-x-auto py-2 md:hidden"> 79+ </HeaderChrome>
41− {NAV.slice(1).map(([href, key]) => (
42− <Link key={href} href={href} className="muted whitespace-nowrap text-xs">
43− {t(key)}
44− </Link>
45− ))}
46− </nav>
47− </header>
48 ); 80 );
49 } 81 }
modified apps/web/src/components/StatusBadge.tsx +7 −3
@@ -31,18 +31,22 @@ const COLORS: Record<string, string> = {
31 blocker: "var(--color-danger-500)", 31 blocker: "var(--color-danger-500)",
32 major: "var(--color-warn-500)", 32 major: "var(--color-warn-500)",
33 minor: "var(--color-stone-500)", 33 minor: "var(--color-stone-500)",
34+ verified: "var(--color-ok-500)",
34 }; 35 };
36+const LIVE = new Set(["running", "provisioning", "publishing", "quality_check", "cancelling", "online"]);
35 37
36−export function StatusBadge({ status }: { status: string }) { 38+/** Research/verification/publication status pill (ResearchStatusBadge). */
39+export function StatusBadge({ status, label }: { status: string; label?: string }) {
37 const c = COLORS[status] ?? "var(--color-stone-500)"; 40 const c = COLORS[status] ?? "var(--color-stone-500)";
38 return ( 41 return (
39 <span className="badge" style={{ color: c, borderColor: `color-mix(in oklab, ${c} 45%, transparent)` }}> 42 <span className="badge" style={{ color: c, borderColor: `color-mix(in oklab, ${c} 45%, transparent)` }}>
40 <span 43 <span
41 aria-hidden="true" 44 aria-hidden="true"
42− className="mr-1 inline-block h-1.5 w-1.5 rounded-full" 45+ className={`mr-1.5 inline-block h-1.5 w-1.5 rounded-full ${LIVE.has(status) ? "animate-pulse" : ""}`}
43 style={{ background: c }} 46 style={{ background: c }}
44 /> 47 />
45− {status.replace(/_/g, " ")} 48+ {label ?? status.replace(/_/g, " ")}
46 </span> 49 </span>
47 ); 50 );
48 } 51 }
52+export { StatusBadge as ResearchStatusBadge };
modified apps/web/src/components/ThemeToggle.tsx +3 −2
@@ -1,5 +1,6 @@
1 "use client"; 1 "use client";
2 import { useEffect, useState } from "react"; 2 import { useEffect, useState } from "react";
3+import { IconMoon, IconSun } from "./Icons";
3 4
4 export function ThemeToggle({ label = "Toggle colour scheme" }: { label?: string }) { 5 export function ThemeToggle({ label = "Toggle colour scheme" }: { label?: string }) {
5 const [dark, setDark] = useState<boolean | null>(null); 6 const [dark, setDark] = useState<boolean | null>(null);
@@ -22,10 +23,10 @@ export function ThemeToggle({ label = "Toggle colour scheme" }: { label?: string
22 onClick={toggle} 23 onClick={toggle}
23 aria-label={label} 24 aria-label={label}
24 aria-pressed={dark === true} 25 aria-pressed={dark === true}
25− className="btn btn-sm" 26+ className="btn-icon"
26 title={label} 27 title={label}
27 > 28 >
28− <span aria-hidden="true">{dark ? "☾" : "☼"}</span> 29+ {dark ? <IconSun /> : <IconMoon />}
29 </button> 30 </button>
30 ); 31 );
31 } 32 }
modified apps/web/src/lib/fonts.ts +9 −11
@@ -1,16 +1,14 @@
1−import { Inter, JetBrains_Mono, Source_Serif_4 } from "next/font/google"; 1+import { Geist, Geist_Mono, Newsreader } from "next/font/google";
2 2
3−export const serif = Source_Serif_4({ 3+/** Editorial serif for titles and paper prose: static instances (not the 2×140 KB variable files) keep LCP low. */
4+export const serif = Newsreader({
4 subsets: ["latin"], 5 subsets: ["latin"],
5− variable: "--font-source-serif", 6+ variable: "--font-newsreader",
6− display: "swap",
7− weight: ["400", "500", "600", "700"],
8− style: ["normal", "italic"],
9−});
10−export const sans = Inter({ subsets: ["latin"], variable: "--font-inter", display: "swap" });
11−export const mono = JetBrains_Mono({
12− subsets: ["latin"],
13− variable: "--font-jetbrains",
14 display: "swap", 7 display: "swap",
15 weight: ["400", "500"], 8 weight: ["400", "500"],
9+ style: ["normal", "italic"],
16 }); 10 });
11+/** Interface sans for navigation, controls, tables and metadata. */
12+export const sans = Geist({ subsets: ["latin"], variable: "--font-geist", display: "swap", weight: ["400", "500", "600"] });
13+/** Monospace for paper identifiers, hashes and execution data. */
14+export const mono = Geist_Mono({ subsets: ["latin"], variable: "--font-geist-mono", display: "swap", weight: ["400", "500"] });
added apps/web/src/lib/math.ts +36 −0
@@ -0,0 +1,36 @@
1+import katex from "katex";
2+
3+/**
4+ * Renders $…$ / $$…$$ / \( \) / \[ \] segments of a plain-text field (abstracts, findings) to KaTeX HTML.
5+ * Text outside math is HTML-escaped. Used on the server only; output is trusted markup built from escaped input.
6+ */
7+export function renderMath(text: string): { html: string; hasMath: boolean } {
8+ const esc = (s: string) => s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
9+ const re = /\$\$([\s\S]+?)\$\$|\\\[([\s\S]+?)\\\]|\\\(([\s\S]+?)\\\)|\$([^$\n]+?)\$/g;
10+ let out = "";
11+ let last = 0;
12+ let hasMath = false;
13+ for (const m of text.matchAll(re)) {
14+ const idx = m.index ?? 0;
15+ out += esc(text.slice(last, idx));
16+ const display = m[1] !== undefined || m[2] !== undefined;
17+ const src = (m[1] ?? m[2] ?? m[3] ?? m[4] ?? "").trim();
18+ try {
19+ const html = katex.renderToString(src, {
20+ displayMode: display,
21+ throwOnError: false,
22+ output: "htmlAndMathml",
23+ strict: "ignore",
24+ });
25+ out += display
26+ ? `<span class="math-display">${html}</span>`
27+ : `<span class="math-inline">${html}</span>`;
28+ hasMath = true;
29+ } catch {
30+ out += esc(m[0]);
31+ }
32+ last = idx + m[0].length;
33+ }
34+ out += esc(text.slice(last));
35+ return { html: out, hasMath };
36+}
added docs/DESIGN_SYSTEM.md +38 −0
@@ -0,0 +1,38 @@
1+# AutoScholar.ai design system (redesign, 2026-10-30)
2+
3+## Audit of the previous UI (evidence: `tests/e2e/screenshots/redesign/before/*`)
4+- Mobile header used two rows (logo + Research button + theme toggle, then a scrolling secondary nav) and consumed ~110 px before content.
5+- 19 px horizontal overflow on every page at 768 px (container padding + `max-w-6xl` grid gaps); the mobile hero headline (~3 rem) and a 5-line lede dominated the first screen.
6+- `/research` stacked ten form fields vertically before the first result (results below the fold on every phone).
7+- `/methodology` listed eleven identical heading/paragraph blocks; `/about` was a serif essay with no structure.
8+- The paper page used a native `<object>` PDF embed (no navigation, no mobile fallback beyond a link), `details` for provenance, and small-text metadata.
9+- Admin: dense but unstructured on mobile; tables overflowed inside cards.
10+
11+## Direction
12+A digital research institute: academic credibility (serif titles, numbered references, verified-status badges), editorial sophistication (distinct compositions per page, hairline rules, measured whitespace) and product craftsmanship (compact controls, 44 px touch targets, skeletons, subtle motion).
13+
14+## Typography
15+- Serif **Newsreader** (static 400/500 + italics) — display, titles, paper prose. Interface sans **Geist**; mono **Geist Mono** for identifiers, hashes, execution data. All self-hosted through `next/font` (CSP `font-src 'self'`).
16+- Scale (CSS `clamp`): `.display` 2.125→4.25 rem, `.title-1` 1.75→2.75, `.title-2` 1.375→1.875, `.title-3` 1.125→1.3, `.lede` 1→1.19 rem; body 16 px / 1.55; `.prose-paper` 1→1.125 rem / 1.65; `.prose-editorial` with a drop cap for abstracts.
17+- Labels: `.eyebrow` (11 px, 0.16 em tracking, accent) and `.label` (11 px, subtle).
18+
19+## Colour
20+Tokens in `apps/web/src/app/globals.css` (`@theme` + `:root`/`.dark`): graphite ink (`#16150f`…`#0d0d0a`), warm ivory (`#fcfbf7`, `#f6f3eb`, `#ece7da`), stone neutrals, **oxide** accent (`#a84a25`, evolved terracotta) and **cobalt** scientific secondary (`#2f5fb3`) for visualizations and pipeline markers. Semantic ok/warn/danger/info. Dark theme is tuned separately (warmer ink surfaces, lifted accents `#d8784d` / `#7ea3e6`), not inverted. `--fg-subtle` meets 4.5:1 on both themes (axe-verified).
21+
22+## Layout
23+`.container-x` (max 80 rem, safe-area-aware padding), `.container-narrow` (48 rem), `.container-reading` (42 rem), `.section` / `.section-tight` vertical rhythm, 12-column grids for editorial pages, `.rule`, `.rule-ornament`. Grid/flex children get `min-width: 0` so long identifiers never widen the viewport; `html, body { overflow-x: clip }`.
24+
25+## Surfaces & controls
26+`.surface` (elevated card, shadow-1), `.surface-flat`, `.surface-muted`, `.surface-ink` (MacLustr section), `.card-link` (hover lift, hover-only), `.btn` / `.btn-primary` / `.btn-ghost` / `.btn-sm` / `.btn-icon` (≥ 44 px on coarse pointers), `.input` (16 px on iOS to avoid zoom), `.chip` / `.chip-active`, `.badge` / `.badge-accent` / `.badge-sci`, `.kbd`, `.mono-id`, `.table` + `.table-wrap`, `.skeleton`.
27+
28+## Navigation
29+`site-header` (sticky, blur, scroll shadow, safe-area top padding): wordmark · desktop nav (≥ lg) · header search (≥ md) · search icon (mobile) · theme toggle · drawer button (< lg). Drawer: `role=dialog`, focus trap, Escape, body scroll lock, closes on navigation. Admin uses the same pattern (`AdminNav`).
30+
31+## Motion
32+`rise-in` (transform only, 480 ms) for cards, `slide-in-right`/`slide-in-up` for drawer and sheet, `shimmer` for skeletons, pulse on live status dots. Everything collapses to ~0 ms under `prefers-reduced-motion`.
33+
34+## Components (`apps/web/src/components`)
35+ResearchPaperCard/PaperCard (card · row · featured), FeaturedPaper, DisciplineExplorer, ResearchPipeline (+ PipelineStrip, STAGE_DOCS), ResearchStatusBadge/StatusBadge, ScientificFigure, PaperReader (pdf.js: paging, zoom-to-width, full-screen, keyboard, download, loading/error/fallback), PublicationMetadata, CitationPanel, ResearchProvenance, MacLustrInfrastructure (+ ClusterMotif), EmptyResearchState, LibraryFilters (search row, ActiveFilters chips, FilterSidebar, mobile bottom sheet), SectionHeading, MathText (KaTeX, server-rendered; display math scrolls horizontally), Icons, SiteHeader/HeaderChrome, SiteFooter, ThemeToggle.
36+
37+## Mobile rules
38+`viewport-fit=cover`; `env(safe-area-inset-*)` on header, drawer, sheet, footer, mobile action bar; `dvh` for full-height regions; no fixed widths; `.mobile-bar` on the paper page keeps Read/PDF reachable above the iOS toolbar.
added docs/REDESIGN_REPORT.md +38 −0
@@ -0,0 +1,38 @@
1+# Visual redesign report — AutoScholar.ai (2026-10-30)
2+
3+Branch `redesign` (worktree `~/Desktop/Cluster/autoscholar-redesign`). Scope: `apps/web` UI only; APIs, auth, server helpers, packages and services untouched.
4+
5+## Audit findings (before)
6+See docs/DESIGN_SYSTEM.md §Audit and `tests/e2e/screenshots/redesign/before/` (375/390/430/768/1024/1440, full-page and above-the-fold). Measured: 19 px horizontal overflow at 768 px on all pages; two-row mobile header; results below the fold on `/research` at every phone width; identical stage blocks on `/methodology`; prose-only `/about`.
7+
8+## What changed
9+- **Design system**: new tokens (graphite/ivory/stone, oxide accent, cobalt scientific secondary), separate dark theme, fluid type scale, surfaces, controls, chips, badges, skeletons, motion with reduced-motion support, safe-area and `dvh` handling. Fonts: Newsreader + Geist + Geist Mono, self-hosted.
10+- **Header**: one compact row on every width; accessible drawer (dialog, focus trap, Escape, scroll lock) with search; desktop inline nav + search field; sticky with scroll shadow; `aria-current` on the current page.
11+- **Homepage**: new hero ("Research you can check, not just read") with an abstract evidence-ledger motif, real counts only (papers from the DB, gate and stage counts from the code), featured paper + latest grid, discipline explorer with live counts, pipeline strip, principles, MacLustr section with a cluster motif, honest empty state.
12+- **Library**: search + sort row; desktop facet sidebar; mobile filter bottom sheet with active-filter count and removable chips; dense publication rows (ID, date, version, discipline, type, title, excerpt, keywords, PDF/TeX/code/data indicators, status). Plain GET forms (work without JS).
13+- **Paper page**: PublicationMetadata header on a muted band with the artifacts panel; abstract with drop cap and KaTeX; numbered key findings; methods/results/limitations; "on this page" nav; pdf.js **PaperReader** (page navigation, zoom-to-width, full-screen, download, keyboard paging, loading/error/fallback, version pill); figures as ScientificFigure cards; two-column numbered references; code/data/results panels; **ResearchProvenance** (gates summary, stages, models, digests, gate-by-gate evidence, warnings); CitationPanel; version history and notices; related papers; mobile sticky Read/PDF bar.
14+- **Supporting pages**: Methodology (intro band, three principles, vertical timeline with progressive disclosure, modes grid, standards list), About (seven numbered editorial sections with in-page nav), Infrastructure (hero + motif, five-layer architecture, MacLustr section), Transparency (numbered hard gates grid, soft-gate chips, corrections/limitations), Topics/Series (card links), legal pages (reading column), 404.
15+- **Admin**: responsive shell (sidebar on desktop, compact top bar + drawer on mobile), split-screen login, overview with status tiles, active-research progress bars, worker and security panels, horizontally scrollable tables, mobile run cards. No logic or security changes.
16+
17+## Verification
18+- `pnpm --filter @autoscholar/web build` ✓ · `tsc --noEmit` 0 errors · `pnpm exec biome check .` clean.
19+- Playwright e2e (existing 25 tests, selectors kept): **25/25 passed** against the redesigned build (axe wcag2a/aa on 11 pages: 0 serious/critical; dark mode; keyboard; search/filters/empty state; paper page, PDF route, citations, JSON-LD; feeds/sitemap/robots/headers; all admin security assertions).
20+- Overflow check (`tests/e2e/shots.mjs`): no horizontal overflow at 375/390/430/768/1024/1440 on home, research, methodology, about, paper, infrastructure (before: +19 px at 768 on every page).
21+- Lighthouse 12 (Playwright Chromium, mobile emulation, simulated slow 4G):
22+
23+| Page | Perf | A11y | Best practices | SEO | LCP | CLS | TBT | FCP |
24+|---|---|---|---|---|---|---|---|---|
25+| `/` | 93 | 100 | 96 | 63* | 3.2 s | 0 | 20 ms | 0.9 s |
26+| `/research` | 92 | 98 | 93 | 66* | 3.4 s | 0 | 10 ms | 0.9 s |
27+| `/research/[slug]` | 92 | 100 | 96 | 54* | 3.4 s | 0 | 10 ms | 0.9 s |
28+| `/` desktop preset | 100 | — | — | — | 0.7 s | 0 | 0 ms | — |
29+
30+\* SEO fails only `is-crawlable` because the local build runs with `STAGING_MODE=1` (noindex). Mobile LCP is above the 2.5 s target under Lighthouse's throttling because of the serif web font swap (see UI-NOTES.md for options); CLS and TBT/INP targets are met.
31+
32+## Screenshots
33+`tests/e2e/screenshots/redesign/before/` and `.../after/` — `{home,research,methodology,about,paper,infrastructure}-{375,390,430,768,1024,1440}.png` (full page) and `-fold.png` (first screen), plus `admin-{overview,runs,new,maclustr}-{width}.png`.
34+
35+## Open issues
36+- Mobile-simulated LCP (font swap) — see UI-NOTES.md.
37+- Route-level `loading.tsx` skeletons were removed (they broke 404 status codes); skeleton styles remain for in-page Suspense use.
38+- No real paper existed locally during the redesign; the staging sample exercises every component, but figure galleries, references and code/data panels should be reviewed once a real paper is published.
modified pnpm-lock.yaml +28 −0
@@ -62,12 +62,18 @@ importers:
62 drizzle-orm: 62 drizzle-orm:
63 specifier: ^0.45.0 63 specifier: ^0.45.0
64 version: 0.45.4(@opentelemetry/api@1.10.0)(@types/pg@8.23.1)(pg@8.23.1) 64 version: 0.45.4(@opentelemetry/api@1.10.0)(@types/pg@8.23.1)(pg@8.23.1)
65+ katex:
66+ specifier: ^0.16.47
67+ version: 0.16.47
65 marked: 68 marked:
66 specifier: ^16.0.0 69 specifier: ^16.0.0
67 version: 16.4.2 70 version: 16.4.2
68 next: 71 next:
69 specifier: ^16.4.0 72 specifier: ^16.4.0
70 version: 16.4.3(@opentelemetry/api@1.10.0)(@playwright/test@1.64.1)(@types/node@24.19.2)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) 73 version: 16.4.3(@opentelemetry/api@1.10.0)(@playwright/test@1.64.1)(@types/node@24.19.2)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)
74+ pdfjs-dist:
75+ specifier: ^6.4.299
76+ version: 6.4.299
71 react: 77 react:
72 specifier: ^19.3.0 78 specifier: ^19.3.0
73 version: 19.3.1 79 version: 19.3.1
@@ -84,6 +90,9 @@ importers:
84 '@tailwindcss/postcss': 90 '@tailwindcss/postcss':
85 specifier: ^4.1.0 91 specifier: ^4.1.0
86 version: 4.3.3 92 version: 4.3.3
93+ '@types/katex':
94+ specifier: ^0.16.8
95+ version: 0.16.8
87 '@types/react': 96 '@types/react':
88 specifier: ^19.2.0 97 specifier: ^19.2.0
89 version: 19.3.0 98 version: 19.3.0
@@ -1596,6 +1605,9 @@ packages:
1596 '@types/estree@1.0.10': 1605 '@types/estree@1.0.10':
1597 resolution: {integrity: sha512-lTyOMnOcmRBzdCv6/4zUZCrEhV0xrqQiUZBZtVcbmLHBXKLnN8q89v/wKRF/Q0HbwVsqbIG3o5HDoFl9sduM+g==} 1606 resolution: {integrity: sha512-lTyOMnOcmRBzdCv6/4zUZCrEhV0xrqQiUZBZtVcbmLHBXKLnN8q89v/wKRF/Q0HbwVsqbIG3o5HDoFl9sduM+g==}
1598 1607
1608+ '@types/katex@0.16.8':
1609+ resolution: {integrity: sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==}
1610+
1599 '@types/node@24.19.2': 1611 '@types/node@24.19.2':
1600 resolution: {integrity: sha512-93d49wCWJkCyN87MxLpNN6KXPCwFw7bVUg79mGUV1OS40JGWwVCr8n61DXCSqz7CV6/VfPkb7xec7uP2M+QHWQ==} 1612 resolution: {integrity: sha512-93d49wCWJkCyN87MxLpNN6KXPCwFw7bVUg79mGUV1OS40JGWwVCr8n61DXCSqz7CV6/VfPkb7xec7uP2M+QHWQ==}
1601 1613
@@ -1703,6 +1715,10 @@ packages:
1703 client-only@0.0.1: 1715 client-only@0.0.1:
1704 resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 1716 resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
1705 1717
1718+ commander@8.3.0:
1719+ resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
1720+ engines: {node: '>= 12'}
1721+
1706 content-disposition@2.0.1: 1722 content-disposition@2.0.1:
1707 resolution: {integrity: sha512-e+H0ZXHSWYrENhQzw1LPuP4oF5MzVKmDU6d3hxlvaPEYLLg62MxtQNPRx4SYSuYJSBUgnQIG4HIN2tEtNv7Dog==} 1723 resolution: {integrity: sha512-e+H0ZXHSWYrENhQzw1LPuP4oF5MzVKmDU6d3hxlvaPEYLLg62MxtQNPRx4SYSuYJSBUgnQIG4HIN2tEtNv7Dog==}
1708 engines: {node: '>=18'} 1724 engines: {node: '>=18'}
@@ -2075,6 +2091,10 @@ packages:
2075 json-schema-typed@8.0.2: 2091 json-schema-typed@8.0.2:
2076 resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} 2092 resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==}
2077 2093
2094+ katex@0.16.47:
2095+ resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==}
2096+ hasBin: true
2097+
2078 launder@1.7.2: 2098 launder@1.7.2:
2079 resolution: {integrity: sha512-DLg3HPnHUfBi5/MxMLmJD12dmlMpFEC2HgMW6vkZ/9JR0RU00kXoRGvDxAvFmdO0o610OA77i4FgNTLucmhDVg==} 2099 resolution: {integrity: sha512-DLg3HPnHUfBi5/MxMLmJD12dmlMpFEC2HgMW6vkZ/9JR0RU00kXoRGvDxAvFmdO0o610OA77i4FgNTLucmhDVg==}
2080 2100
@@ -3531,6 +3551,8 @@ snapshots:
3531 3551
3532 '@types/estree@1.0.10': {} 3552 '@types/estree@1.0.10': {}
3533 3553
3554+ '@types/katex@0.16.8': {}
3555+
3534 '@types/node@24.19.2': 3556 '@types/node@24.19.2':
3535 dependencies: 3557 dependencies:
3536 undici-types: 7.24.6 3558 undici-types: 7.24.6
@@ -3652,6 +3674,8 @@ snapshots:
3652 3674
3653 client-only@0.0.1: {} 3675 client-only@0.0.1: {}
3654 3676
3677+ commander@8.3.0: {}
3678+
3655 content-disposition@2.0.1: {} 3679 content-disposition@2.0.1: {}
3656 3680
3657 content-type@1.0.5: {} 3681 content-type@1.0.5: {}
@@ -3995,6 +4019,10 @@ snapshots:
3995 4019
3996 json-schema-typed@8.0.2: {} 4020 json-schema-typed@8.0.2: {}
3997 4021
4022+ katex@0.16.47:
4023+ dependencies:
4024+ commander: 8.3.0
4025+
3998 launder@1.7.2: 4026 launder@1.7.2:
3999 dependencies: 4027 dependencies:
4000 dayjs: 1.11.23 4028 dayjs: 1.11.23
added tests/e2e/overflow.mjs +8 −0
@@ -0,0 +1,8 @@
1+import { chromium, devices } from "@playwright/test";
2+const b = await chromium.launch(); const ctx = await b.newContext({ ...devices["iPhone 14"], viewport: { width: 390, height: 844 } }); const page = await ctx.newPage();
3+for (const path of ["/", "/research", "/research/as-wp-2026-0000-staging-sample"]) {
4+ await page.goto("http://localhost:8471" + path, { waitUntil: "networkidle" });
5+ const r = await page.evaluate(() => { const vw = document.documentElement.clientWidth; const out = []; for (const el of document.querySelectorAll("body *")) { const r = el.getBoundingClientRect(); if (r.right > vw + 1 && r.width > 40) out.push(`${el.tagName.toLowerCase()}.${(el.className && typeof el.className === "string" ? el.className.split(" ").slice(0,3).join(".") : "")} right=${Math.round(r.right)} w=${Math.round(r.width)}`); } return { sw: document.documentElement.scrollWidth, vw, out: out.slice(0, 8) }; });
6+ console.log(path, JSON.stringify(r));
7+}
8+await b.close();
added tests/e2e/screenshots/admin-new-desktop.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/admin-overview-mobile.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/home-desktop.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/home-mobile.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/home-tablet.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/paper-desktop.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/paper-mobile.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/paper-tablet.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/about-1024-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/about-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/about-1440-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/about-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/about-375-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/about-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/about-390-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/about-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/about-430-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/about-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/about-768-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/about-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-maclustr-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-maclustr-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-maclustr-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-maclustr-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-maclustr-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-maclustr-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-new-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-new-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-new-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-new-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-new-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-new-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-overview-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-overview-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-overview-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-overview-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-overview-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-overview-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-runs-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-runs-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-runs-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-runs-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-runs-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/admin-runs-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/home-1024-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/home-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/home-1440-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/home-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/home-375-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/home-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/home-390-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/home-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/home-430-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/home-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/home-768-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/home-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/infrastructure-1024-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/infrastructure-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/infrastructure-1440-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/infrastructure-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/infrastructure-375-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/infrastructure-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/infrastructure-390-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/infrastructure-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/infrastructure-430-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/infrastructure-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/infrastructure-768-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/infrastructure-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/methodology-1024-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/methodology-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/methodology-1440-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/methodology-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/methodology-375-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/methodology-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/methodology-390-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/methodology-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/methodology-430-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/methodology-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/methodology-768-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/methodology-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/paper-1024-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/paper-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/paper-1440-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/paper-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/paper-375-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/paper-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/paper-390-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/paper-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/paper-430-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/paper-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/paper-768-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/paper-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/research-1024-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/research-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/research-1440-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/research-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/research-375-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/research-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/research-390-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/research-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/research-430-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/research-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/research-768-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/after/research-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/about-1024-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/about-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/about-1440-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/about-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/about-375-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/about-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/about-390-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/about-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/about-430-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/about-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/about-768-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/about-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-maclustr-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-maclustr-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-maclustr-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-maclustr-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-maclustr-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-maclustr-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-new-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-new-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-new-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-new-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-new-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-new-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-overview-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-overview-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-overview-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-overview-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-overview-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-overview-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-runs-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-runs-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-runs-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-runs-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-runs-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/admin-runs-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/home-1024-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/home-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/home-1440-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/home-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/home-375-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/home-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/home-390-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/home-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/home-430-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/home-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/home-768-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/home-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/infrastructure-1024-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/infrastructure-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/infrastructure-1440-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/infrastructure-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/infrastructure-375-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/infrastructure-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/infrastructure-390-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/infrastructure-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/infrastructure-430-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/infrastructure-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/infrastructure-768-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/infrastructure-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/methodology-1024-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/methodology-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/methodology-1440-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/methodology-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/methodology-375-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/methodology-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/methodology-390-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/methodology-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/methodology-430-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/methodology-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/methodology-768-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/methodology-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/paper-1024-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/paper-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/paper-1440-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/paper-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/paper-375-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/paper-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/paper-390-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/paper-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/paper-430-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/paper-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/paper-768-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/paper-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/research-1024-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/research-1024.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/research-1440-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/research-1440.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/research-375-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/research-375.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/research-390-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/research-390.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/research-430-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/research-430.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/research-768-fold.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/redesign/before/research-768.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/research-desktop.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/research-mobile.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/research-tablet.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/topics-desktop.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/topics-mobile.png +0 −0

Binary file not shown.

added tests/e2e/screenshots/topics-tablet.png +0 −0

Binary file not shown.

added tests/e2e/shots.mjs +57 −0
@@ -0,0 +1,57 @@
1+// Usage: node tests/e2e/shots.mjs <before|after> [baseURL]
2+
3+import { mkdirSync } from "node:fs";
4+import { chromium, devices } from "@playwright/test";
5+
6+const phase = process.argv[2] ?? "after";
7+const base = process.argv[3] ?? "http://localhost:8471";
8+const out = `tests/e2e/screenshots/redesign/${phase}`;
9+mkdirSync(out, { recursive: true });
10+const widths = [375, 390, 430, 768, 1024, 1440];
11+const pages = [
12+ ["home", "/"],
13+ ["research", "/research"],
14+ ["methodology", "/methodology"],
15+ ["about", "/about"],
16+ ["paper", "/research/as-wp-2026-0000-staging-sample"],
17+ ["infrastructure", "/infrastructure"],
18+];
19+const browser = await chromium.launch();
20+const pw = process.env.ADMIN_PASSWORD;
21+for (const w of widths) {
22+ const mobile = w <= 430;
23+ const ctx = await browser.newContext({
24+ ...(mobile ? devices["iPhone 14"] : {}),
25+ viewport: { width: w, height: mobile ? 844 : 900 },
26+ deviceScaleFactor: 2,
27+ });
28+ const page = await ctx.newPage();
29+ for (const [name, path] of pages) {
30+ await page.goto(base + path, { waitUntil: "networkidle" });
31+ await page.screenshot({ path: `${out}/${name}-${w}.png`, fullPage: true });
32+ await page.screenshot({ path: `${out}/${name}-${w}-fold.png`, fullPage: false });
33+ const overflow = await page.evaluate(
34+ () => document.documentElement.scrollWidth - document.documentElement.clientWidth,
35+ );
36+ if (overflow > 0) console.log(`OVERFLOW ${name}@${w}: +${overflow}px`);
37+ }
38+ if (pw) {
39+ const r = await page.request.post(base + "/api/admin/auth/login", {
40+ data: { username: "admin", password: pw },
41+ });
42+ if (r.ok()) {
43+ for (const [name, path] of [
44+ ["admin-overview", "/admin"],
45+ ["admin-runs", "/admin/runs"],
46+ ["admin-new", "/admin/new"],
47+ ["admin-maclustr", "/admin/maclustr"],
48+ ]) {
49+ await page.goto(base + path, { waitUntil: "networkidle" });
50+ await page.screenshot({ path: `${out}/${name}-${w}.png`, fullPage: true });
51+ }
52+ } else console.log("admin login failed", r.status());
53+ }
54+ await ctx.close();
55+}
56+await browser.close();
57+console.log("done", phase);
58
Menu

Theme