PageSourceSearch

https://fasteoox.vercel.app/_next/static/chunks/37424505.285f7f899fcd287e.js

js fasteoox.vercel.app collected 2026-10-03 06:56:57 UTC 390,847 bytes, 2,805 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5679],{94189:(t,r,i)=>{i.r(r),i.d(r,{InferenceSession:()=>B,TRACE:()=>C,TRACE_FUNC_BEGIN:()=>A,TRACE_FUNC_END:()=>O,Tensor:()=>E,default:()=>lP,env:()=>c,registerBackend:()=>s});var a,n,s,o,u,l,d,p,c,h,f,m,g,y,_,b,$,v,w,x,k,S,T,I,E,C,z,A,O,R,B,N=Object.defineProperty,M=Object.getOwnPropertyDescriptor,D=Object.getOwnPropertyNames,P=Object.prototype.hasOwnProperty,U=(t=>"u">typeof require?require:"u">typeof Proxy?new Proxy(t,{get:(t,r)=>("u">typeof require?require:t)[r]}):t)(function(t){if("u">typeof require)return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')}),q=(t,r)=>()=>(t&&(r=t(t=0)),r),W=(t,r)=>{for(var i in r)N(t,i,{get:r[i],enumerable:!0})},L=(t,r,i,a)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let n of D(r))P.call(t,n)||n===i||N(t,n,{get:()=>r[n],enumerable:!(a=M(r,n))||a.enumerable});return t},V=t=>L(N({},"__esModule",{value:!0}),t),G=q(()=>{a=new Map,n=[],s=(t,r,i)=>{if(r&&"function"==typeof r.init&&"function"==typeof r.createInferenceSessionHandler){let s=a.get(t);if(void 0===s)a.set(t,{backend:r,priority:i});else{if(s.priority>i)return;if(s.priority===i&&s.backend!==r)throw Error(`cannot register backend "${t}" using priority ${i}`)}if(i>=0){let r=n.indexOf(t);-1!==r&&n.splice(r,1);for(let r=0;r<n.length;r++)if(a.get(n[r]).priority<=i)return void n.splice(r,0,t);n.push(t)}return}throw TypeError("not a valid backend")},o=async t=>{let r=a.get(t);if(!r)return"backend not found.";if(r.initialized)return r.backend;if(r.aborted)return r.error;{let i=!!r.initPromise;try{return i||(r.initPromise=r.backend.init(t)),await r.initPromise,r.initialized=!0,r.backend}catch(t){return i||(r.error=`${t}`,r.aborted=!0),r.error}finally{delete r.initPromise}}},u=async t=>{let r=t.executionProviders||[],i=r.map(t=>"string"==typeof t?t:t.name),a=0===i.length?n:i,s,u=[],l=new Set;for(let t of a){let r=await o(t);"string"==typeof r?u.push({name:t,err:r}):(s||(s=r),s===r&&l.add(t))}if(!s)throw Error(`no available backend found. ERR: ${u.map(t=>`[${t.name}] ${t.err}`).join(", ")}`);for(let{name:t,err:r}of u)i.includes(t)&&console.warn(`removing requested execution provider "${t}" from session options because it is not available: ${r}`);let d=r.filter(t=>l.has("string"==typeof t?t:t.name));return[s,new Proxy(t,{get:(t,r)=>"executionProviders"===r?d:Reflect.get(t,r)})]}}),H=q(()=>{G()}),F=q(()=>{l="1.22.0"}),j=q(()=>{F(),d="warning",Object.defineProperty(p={wasm:{},webgl:{},webgpu:{},versions:{common:l},set logLevel(e){if(void 0!==e){if("string"!=typeof e||-1===["verbose","info","warning","error","fatal"].indexOf(e))throw Error(`Unsupported logging level: ${e}`);d=e}},get logLevel(){return d}},"logLevel",{enumerable:!0})}),K=q(()=>{j(),c=p}),Z=q(()=>{h=(t,r)=>{let i="u">typeof document?document.createElement("canvas"):new OffscreenCanvas(1,1);i.width=t.dims[3],i.height=t.dims[2];let a=i.getContext("2d");if(null!=a){let n,s;r?.tensorLayout!==void 0&&"NHWC"===r.tensorLayout?(n=t.dims[2],s=t.dims[3]):(n=t.dims[3],s=t.dims[2]);let o=r?.format!==void 0?r.format:"RGB",u=r?.norm,l,d;void 0===u||void 0===u.mean?l=[255,255,255,255]:"number"==typeof u.mean?l=[u.mean,u.mean,u.mean,u.mean]:(l=[u.mean[0],u.mean[1],u.mean[2],0],void 0!==u.mean[3]&&(l[3]=u.mean[3])),void 0===u||void 0===u.bias?d=[0,0,0,0]:"number"==typeof u.bias?d=[u.bias,u.bias,u.bias,u.bias]:(d=[u.bias[0],u.bias[1],u.bias[2],0],void 0!==u.bias[3]&&(d[3]=u.bias[3]));let p=s*n,c=0,h=p,f=2*p,m=-1;"RGBA"===o?(c=0,h=p,f=2*p,m=3*p):"RGB"===o?(c=0,h=p,f=2*p):"RBG"===o&&(c=0,f=p,h=2*p);for(let r=0;r<s;r++)for(let i=0;i<n;i++)a.fillStyle="rgba("+(t.data[c++]-d[0])*l[0]+","+(t.data[h++]-d[1])*l[1]+","+(t.data[f++]-d[2])*l[2]+","+(-1===m?255:(t.data[m++]-d[3])*l[3])+")",a.fillRect(i,r,1,1);if("toDataURL"in i)return i.toDataURL();throw Error("toDataURL is not supported")}throw Error("Can not access image data")},f=(t,r)=>{let i="u">typeof document?document.createElement("canvas").getContext("2d"):new OffscreenCanvas(1,1).getContext("2d"),a;if(null!=i){let n,s,o;r?.tensorLayout!==void 0&&"NHWC"===r.tensorLayout?(n=t.dims[2],s=t.dims[1],o=t.dims[3]):(n=t.dims[3],s=t.dims[2],o=t.dims[1]);let u=void 0!==r&&void 0!==r.format?r.format:"RGB",l=r?.norm,d,p;void 0===l||void 0===l.mean?d=[255,255,255,255]:"number"==typeof l.mean?d=[l.mean,l.mean,l.mean,l.mean]:(d=[l.mean[0],l.mean[1],l.mean[2],255],void 0!==l.mean[3]&&(d[3]=l.mean[3])),void 0===l||void 0===l.bias?p=[0,0,0,0]:"number"==typeof l.bias?p=[l.bias,l.bias,l.bias,l.bias]:(p=[l.bias[0],l.bias[1],l.bias[2],0],void 0!==l.bias[3]&&(p[3]=l.bias[3]));let c=s*n;if(void 0!==r&&(void 0!==r.format&&4===o&&"RGBA"!==r.format||3===o&&"RGB"!==r.format&&"BGR"!==r.format))throw Error("Tensor format doesn't match input tensor dims");let h=0,f=1,m=2,g=3,y=0,_=c,b=2*c,$=-1;"RGBA"===u?(y=0,_=c,b=2*c,$=3*c):"RGB"===u?(y=0,_=c,b=2*c):"RBG"===u&&(y=0,b=c,_=2*c),a=i.createImageData(n,s);for(let r=0;r<s*n;h+=4,f+=4,m+=4,g+=4,r++)a.data[h]=(t.data[y++]-p[0])*d[0],a.data[f]=(t.data[_++]-p[1])*d[1],a.data[m]=(t.data[b++]-p[2])*d[2],a.data[g]=-1===$?255:(t.data[$++]-p[3])*d[3]}else throw Error("Can not access image data");return a}}),Q=q(()=>{J(),m=(t,r)=>{if(void 0===t)throw Error("Image buffer must be defined");if(void 0===r.height||void 0===r.width)throw Error("Image height and width must be defined");if("NHWC"===r.tensorLayout)throw Error("NHWC Tensor layout is not supported yet");let{height:i,width:a}=r,n=r.norm??{mean:255,bias:0},s,o;s="number"==typeof n.mean?[n.mean,n.mean,n.mean,n.mean]:[n.mean[0],n.mean[1],n.mean[2],n.mean[3]??255],o="number"==typeof n.bias?[n.bias,n.bias,n.bias,n.bias]:[n.bias[0],n.bias[1],n.bias[2],n.bias[3]??0];let u=void 0!==r.format?r.format:"RGBA",l=void 0!==r.tensorFormat&&void 0!==r.tensorFormat?r.tensorFormat:"RGB",d=i*a,p=new Float32Array("RGBA"===l?4*d:3*d),c=4,h=0,f=1,m=2,g=3,y=0,_=d,b=2*d,$=-1;"RGB"===u&&(c=3,h=0,f=1,m=2,g=-1),"RGBA"===l?$=3*d:"RBG"===l?(y=0,b=d,_=2*d):"BGR"===l&&(b=0,_=d,y=2*d);for(let r=0;r<d;r++,h+=c,m+=c,f+=c,g+=c)p[y++]=(t[h]+o[0])/s[0],p[_++]=(t[f]+o[1])/s[1],p[b++]=(t[m]+o[2])/s[2],-1!==$&&-1!==g&&(p[$++]=(t[g]+o[3])/s[3]);return"RGBA"===l?new I("float32",p,[1,4,i,a]):new I("float32",p,[1,3,i,a])},g=async(t,r)=>{let i="u">typeof HTMLImageElement&&t instanceof HTMLImageElement,a="u">typeof ImageData&&t instanceof ImageData,n="u">typeof ImageBitmap&&t instanceof ImageBitmap,s="string"==typeof t,o,u=r??{},l=()=>{if("u">typeof document)return document.createElement("canvas");if("u">typeof OffscreenCanvas)return new OffscreenCanvas(1,1);throw Error("Canvas is not supported")},d=t=>"u">typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||t instanceof OffscreenCanvas?t.getContext("2d"):null;if(i){let i=l();i.width=t.width,i.height=t.height;let a=d(i);if(null!=a){let i=t.height,n=t.width;if(void 0!==r&&void 0!==r.resizedHeight&&void 0!==r.resizedWidth&&(i=r.resizedHeight,n=r.resizedWidth),void 0!==r){if(u=r,void 0!==r.tensorFormat)throw Error("Image input config format must be RGBA for HTMLImageElement");
1u.tensorFormat="RGBA",u.height=i,u.width=n}else u.tensorFormat="RGBA",u.height=i,u.width=n;a.drawImage(t,0,0),o=a.getImageData(0,0,n,i).data}else throw Error("Can not access image data")}else if(a){let i,a;if(void 0!==r&&void 0!==r.resizedWidth&&void 0!==r.resizedHeight?(i=r.resizedHeight,a=r.resizedWidth):(i=t.height,a=t.width),void 0!==r&&(u=r),u.format="RGBA",u.height=i,u.width=a,void 0!==r){let r=l();r.width=a,r.height=i;let n=d(r);if(null!=n)n.putImageData(t,0,0),o=n.getImageData(0,0,a,i).data;else throw Error("Can not access image data")}else o=t.data}else if(n){if(void 0===r)throw Error("Please provide image config with format for Imagebitmap");let i=l();i.width=t.width,i.height=t.height;let a=d(i);if(null!=a){let r=t.height,i=t.width;return a.drawImage(t,0,0,i,r),o=a.getImageData(0,0,i,r).data,u.height=r,u.width=i,m(o,u)}throw Error("Can not access image data")}else{if(s)return new Promise((r,i)=>{let a=l(),n=d(a);if(!t||!n)return i();let s=new Image;s.crossOrigin="Anonymous",s.src=t,s.onload=()=>{a.width=s.width,a.height=s.height,n.drawImage(s,0,0,a.width,a.height);let t=n.getImageData(0,0,a.width,a.height);u.height=a.height,u.width=a.width,r(m(t.data,u))}});throw Error("Input data provided is not supported - aborted tensor creation")}if(void 0!==o)return m(o,u);throw Error("Input data provided is not supported - aborted tensor creation")},y=(t,r)=>{let{width:i,height:a,download:n,dispose:s}=r;return new I({location:"texture",type:"float32",texture:t,dims:[1,a,i,4],download:n,dispose:s})},_=(t,r)=>{let{dataType:i,dims:a,download:n,dispose:s}=r;return new I({location:"gpu-buffer",type:i??"float32",gpuBuffer:t,dims:a,download:n,dispose:s})},b=(t,r)=>{let{dataType:i,dims:a,download:n,dispose:s}=r;return new I({location:"ml-tensor",type:i??"float32",mlTensor:t,dims:a,download:n,dispose:s})},$=(t,r,i)=>new I({location:"cpu-pinned",type:t,data:r,dims:i??[r.length]})}),X=q(()=>{v=new Map([["float32",Float32Array],["uint8",Uint8Array],["int8",Int8Array],["uint16",Uint16Array],["int16",Int16Array],["int32",Int32Array],["bool",Uint8Array],["float64",Float64Array],["uint32",Uint32Array],["int4",Uint8Array],["uint4",Uint8Array]]),w=new Map([[Float32Array,"float32"],[Uint8Array,"uint8"],[Int8Array,"int8"],[Uint16Array,"uint16"],[Int16Array,"int16"],[Int32Array,"int32"],[Float64Array,"float64"],[Uint32Array,"uint32"]]),x=!1,k=()=>{if(!x){x=!0;let t="u">typeof BigInt64Array&&BigInt64Array.from,r="u">typeof BigUint64Array&&BigUint64Array.from,i=globalThis.Float16Array,a="u">typeof i&&i.from;t&&(v.set("int64",BigInt64Array),w.set(BigInt64Array,"int64")),r&&(v.set("uint64",BigUint64Array),w.set(BigUint64Array,"uint64")),a?(v.set("float16",i),w.set(i,"float16")):v.set("float16",Uint16Array)}}}),Y=q(()=>{J(),S=t=>{let r=1;for(let i=0;i<t.length;i++){let a=t[i];if("number"!=typeof a||!Number.isSafeInteger(a))throw TypeError(`dims[${i}] must be an integer, got: ${a}`);if(a<0)throw RangeError(`dims[${i}] must be a non-negative integer, got: ${a}`);r*=a}return r},T=(t,r)=>{switch(t.location){case"cpu":return new I(t.type,t.data,r);case"cpu-pinned":return new I({location:"cpu-pinned",data:t.data,type:t.type,dims:r});case"texture":return new I({location:"texture",texture:t.texture,type:t.type,dims:r});case"gpu-buffer":return new I({location:"gpu-buffer",gpuBuffer:t.gpuBuffer,type:t.type,dims:r});case"ml-tensor":return new I({location:"ml-tensor",mlTensor:t.mlTensor,type:t.type,dims:r});default:throw Error(`tensorReshape: tensor location ${t.location} is not supported`)}}}),J=q(()=>{Z(),Q(),X(),Y(),I=class{constructor(t,r,i){let a,n;if(k(),"object"==typeof t&&"location"in t)switch(this.dataLocation=t.location,a=t.type,n=t.dims,t.location){case"cpu-pinned":{let r=v.get(a);if(!r)throw TypeError(`unsupported type "${a}" to create tensor from pinned buffer`);if(!(t.data instanceof r))throw TypeError(`buffer should be of type ${r.name}`);this.cpuData=t.data;break}case"texture":if("float32"!==a)throw TypeError(`unsupported type "${a}" to create tensor from texture`);this.gpuTextureData=t.texture,this.downloader=t.download,this.disposer=t.dispose;break;case"gpu-buffer":if("float32"!==a&&"float16"!==a&&"int32"!==a&&"int64"!==a&&"uint32"!==a&&"uint8"!==a&&"bool"!==a&&"uint4"!==a&&"int4"!==a)throw TypeError(`unsupported type "${a}" to create tensor from gpu buffer`);this.gpuBufferData=t.gpuBuffer,this.downloader=t.download,this.disposer=t.dispose;break;case"ml-tensor":if("float32"!==a&&"float16"!==a&&"int32"!==a&&"int64"!==a&&"uint32"!==a&&"uint64"!==a&&"int8"!==a&&"uint8"!==a&&"bool"!==a&&"uint4"!==a&&"int4"!==a)throw TypeError(`unsupported type "${a}" to create tensor from MLTensor`);this.mlTensorData=t.mlTensor,this.downloader=t.download,this.disposer=t.dispose;break;default:throw Error(`Tensor constructor: unsupported location '${this.dataLocation}'`)}else{let s,o;
1if("string"==typeof t)if(a=t,o=i,"string"===t){if(!Array.isArray(r))throw TypeError("A string tensor's data must be a string array.");s=r}else{let i=v.get(t);if(void 0===i)throw TypeError(`Unsupported tensor type: ${t}.`);if(Array.isArray(r)){if("float16"===t&&i===Uint16Array||"uint4"===t||"int4"===t)throw TypeError(`Creating a ${t} tensor from number array is not supported. Please use ${i.name} as data.`);s="uint64"===t||"int64"===t?i.from(r,BigInt):i.from(r)}else if(r instanceof i)s=r;else if(r instanceof Uint8ClampedArray)if("uint8"===t)s=Uint8Array.from(r);else throw TypeError("A Uint8ClampedArray tensor's data must be type of uint8");else if("float16"===t&&r instanceof Uint16Array&&i!==Uint16Array)s=new globalThis.Float16Array(r.buffer,r.byteOffset,r.length);else throw TypeError(`A ${a} tensor's data must be type of ${i}`)}else if(o=r,Array.isArray(t)){if(0===t.length)throw TypeError("Tensor type cannot be inferred from an empty array.");let r=typeof t[0];if("string"===r)a="string",s=t;else if("boolean"===r)a="bool",s=Uint8Array.from(t);else throw TypeError(`Invalid element type of data array: ${r}.`)}else if(t instanceof Uint8ClampedArray)a="uint8",s=Uint8Array.from(t);else{let r=w.get(t.constructor);if(void 0===r)throw TypeError(`Unsupported type for tensor data: ${t.constructor}.`);a=r,s=t}if(void 0===o)o=[s.length];else if(!Array.isArray(o))throw TypeError("A tensor's dims must be a number array");n=o,this.cpuData=s,this.dataLocation="cpu"}let s=S(n);if(this.cpuData&&s!==this.cpuData.length&&("uint4"!==a&&"int4"!==a||Math.ceil(s/2)!==this.cpuData.length))throw Error(`Tensor's size(${s}) does not match data length(${this.cpuData.length}).`);this.type=a,this.dims=n,this.size=s}static async fromImage(t,r){return g(t,r)}static fromTexture(t,r){return y(t,r)}static fromGpuBuffer(t,r){return _(t,r)}static fromMLTensor(t,r){return b(t,r)}static fromPinnedBuffer(t,r,i){return $(t,r,i)}toDataURL(t){return h(this,t)}toImageData(t){return f(this,t)}get data(){if(this.ensureValid(),!this.cpuData)throw Error("The data is not on CPU. Use `getData()` to download GPU data to CPU, or use `texture` or `gpuBuffer` property to access the GPU data directly.");return this.cpuData}get location(){return this.dataLocation}get texture(){if(this.ensureValid(),!this.gpuTextureData)throw Error("The data is not stored as a WebGL texture.");return this.gpuTextureData}get gpuBuffer(){if(this.ensureValid(),!this.gpuBufferData)throw Error("The data is not stored as a WebGPU buffer.");return this.gpuBufferData}get mlTensor(){if(this.ensureValid(),!this.mlTensorData)throw Error("The data is not stored as a WebNN MLTensor.");return this.mlTensorData}async getData(t){switch(this.ensureValid(),this.dataLocation){case"cpu":case"cpu-pinned":return this.data;case"texture":case"gpu-buffer":case"ml-tensor":if(!this.downloader)throw Error("The current tensor is not created with a specified data downloader.");if(this.isDownloading)throw Error("The current tensor is being downloaded.");try{this.isDownloading=!0;let r=await this.downloader();return this.downloader=void 0,this.dataLocation="cpu",this.cpuData=r,t&&this.disposer&&(this.disposer(),this.disposer=void 0),r}finally{this.isDownloading=!1}default:throw Error(`cannot get data from location: ${this.dataLocation}`)}}dispose(){if(this.isDownloading)throw Error("The current tensor is being downloaded.");this.disposer&&(this.disposer(),this.disposer=void 0),this.cpuData=void 0,this.gpuTextureData=void 0,this.gpuBufferData=void 0,this.mlTensorData=void 0,this.downloader=void 0,this.isDownloading=void 0,this.dataLocation="none"}ensureValid(){if("none"===this.dataLocation)throw Error("The tensor is disposed.")}reshape(t){if(this.ensureValid(),this.downloader||this.disposer)throw Error("Cannot reshape a tensor that owns GPU resource.");return T(this,t)}}}),ee=q(()=>{J(),E=I}),et=q(()=>{j(),C=(t,r)=>{(typeof p.trace>"u"?p.wasm.trace:p.trace)&&console.timeStamp(`${t}::ORT::${r}`)},z=(t,r)=>{let i=Error().stack?.split(/\r\n|\r|\n/g)||[],a=!1;for(let n=0;n<i.length;n++){if(a&&!i[n].includes("TRACE_FUNC")){let a=`FUNC_${t}::${i[n].trim().split(" ")[1]}`;r&&(a+=`::${r}`),C("CPU",a);return}i[n].includes("TRACE_FUNC")&&(a=!0)}},A=t=>{(typeof p.trace>"u"?p.wasm.trace:p.trace)&&z("BEGIN",t)},O=t=>{(typeof p.trace>"u"?p.wasm.trace:p.trace)&&z("END",t)}}),er=q(()=>{G(),ee(),et(),R=class t{constructor(t){this.handler=t}async run(t,r,i){A();let a={},n={};if("object"!=typeof t||null===t||t instanceof E||Array.isArray(t))throw TypeError("'feeds' must be an object that use input names as keys and OnnxValue as corresponding values.");let s=!0;if("object"==typeof r){if(null===r)throw TypeError("Unexpected argument[1]: cannot be null.");if(r instanceof E)throw TypeError("'fetches' cannot be a Tensor");if(Array.isArray(r)){if(0===r.length)throw TypeError("'fetches' cannot be an empty array.");
1for(let t of(s=!1,r)){if("string"!=typeof t)throw TypeError("'fetches' must be a string array or an object.");if(-1===this.outputNames.indexOf(t))throw RangeError(`'fetches' contains invalid output name: ${t}.`);a[t]=null}if("object"==typeof i&&null!==i)n=i;else if("u">typeof i)throw TypeError("'options' must be an object.")}else{let t=!1,o=Object.getOwnPropertyNames(r);for(let i of this.outputNames)if(-1!==o.indexOf(i)){let n=r[i];(null===n||n instanceof E)&&(t=!0,s=!1,a[i]=n)}if(t){if("object"==typeof i&&null!==i)n=i;else if("u">typeof i)throw TypeError("'options' must be an object.")}else n=r}}else if("u">typeof r)throw TypeError("Unexpected argument[1]: must be 'fetches' or 'options'.");for(let r of this.inputNames)if(typeof t[r]>"u")throw Error(`input '${r}' is missing in 'feeds'.`);if(s)for(let t of this.outputNames)a[t]=null;let o=await this.handler.run(t,a,n),u={};for(let t in o)if(Object.hasOwnProperty.call(o,t)){let r=o[t];r instanceof E?u[t]=r:u[t]=new E(r.type,r.data,r.dims)}return O(),u}async release(){return this.handler.dispose()}static async create(r,i,a,n){A();let s,o={};if("string"==typeof r){if(s=r,"object"==typeof i&&null!==i)o=i;else if("u">typeof i)throw TypeError("'options' must be an object.")}else if(r instanceof Uint8Array){if(s=r,"object"==typeof i&&null!==i)o=i;else if("u">typeof i)throw TypeError("'options' must be an object.")}else if(r instanceof ArrayBuffer||"u">typeof SharedArrayBuffer&&r instanceof SharedArrayBuffer){let t=0,u=r.byteLength;if("object"==typeof i&&null!==i)o=i;else if("number"==typeof i){if(!Number.isSafeInteger(t=i))throw RangeError("'byteOffset' must be an integer.");if(t<0||t>=r.byteLength)throw RangeError(`'byteOffset' is out of range [0, ${r.byteLength}).`);if(u=r.byteLength-t,"number"==typeof a){if(!Number.isSafeInteger(u=a))throw RangeError("'byteLength' must be an integer.");if(u<=0||t+u>r.byteLength)throw RangeError(`'byteLength' is out of range (0, ${r.byteLength-t}].`);if("object"==typeof n&&null!==n)o=n;else if("u">typeof n)throw TypeError("'options' must be an object.")}else if("u">typeof a)throw TypeError("'byteLength' must be a number.")}else if("u">typeof i)throw TypeError("'options' must be an object.");s=new Uint8Array(r,t,u)}else throw TypeError("Unexpected argument[0]: must be 'path' or 'buffer'.");let[l,d]=await u(o),p=await l.createInferenceSessionHandler(s,d);return O(),new t(p)}startProfiling(){this.handler.startProfiling()}endProfiling(){this.handler.endProfiling()}get inputNames(){return this.handler.inputNames}get outputNames(){return this.handler.outputNames}get inputMetadata(){return this.handler.inputMetadata}get outputMetadata(){return this.handler.outputMetadata}}}),ei=q(()=>{er(),B=R}),ea=q(()=>{}),en=q(()=>{}),es=q(()=>{}),eo=q(()=>{}),eu={};W(eu,{InferenceSession:()=>B,TRACE:()=>C,TRACE_FUNC_BEGIN:()=>A,TRACE_FUNC_END:()=>O,Tensor:()=>E,env:()=>c,registerBackend:()=>s});var el=q(()=>{H(),K(),ei(),ee(),ea(),en(),et(),es(),eo()}),ed=q(()=>{}),ep={};W(ep,{default:()=>ef});var ec,eh,ef,em=q(()=>{lz(),oG(),oV(),ec="ort-wasm-proxy-worker",(eh=globalThis.self?.name===ec)&&(self.onmessage=t=>{let{type:r,in:i}=t.data;try{switch(r){case"init-wasm":eq(i.wasm).then(()=>{u6(i).then(()=>{postMessage({type:r})},t=>{postMessage({type:r,err:t})})},t=>{postMessage({type:r,err:t})});break;case"init-ep":{let{epName:t,env:a}=i;u5(a,t).then(()=>{postMessage({type:r})},t=>{postMessage({type:r,err:t})});break}case"copy-from":{let{buffer:t}=i,a=lt(t);postMessage({type:r,out:a});break}case"create":{let{model:t,options:a}=i;lr(t,a).then(t=>{postMessage({type:r,out:t})},t=>{postMessage({type:r,err:t})});break}case"release":li(i),postMessage({type:r});break;case"run":{let{sessionId:t,inputIndices:a,inputs:n,outputIndices:s,options:o}=i;ln(t,a,n,s,Array(s.length).fill(null),o).then(t=>{t.some(t=>"cpu"!==t[3])?postMessage({type:r,err:"Proxy does not support non-cpu tensor location."}):postMessage({type:r,out:t},lo([...n,...t]))},t=>{postMessage({type:r,err:t})});break}case"end-profiling":ls(i),postMessage({type:r})}}catch(t){postMessage({type:r,err:t})}}),ef=eh?null:t=>new Worker(t??ew,{type:"module",name:ec})}),eg={};W(eg,{default:()=>eb});var ey,e_,eb,e$,ev,ew,ex,ek,eS,eT,eI,eE,eC,ez,eA,eO,eR,eB,eN,eM,eD,eP,eU,eq,eW,eL,eV,eG,eH,eF,ej,eK,eZ,eQ,eX,eY,eJ,e0,e2,e1,e3,e4,e8,e6,e5,e7,e9,te,tt,tr,ti,ta,tn,ts,to,tu,tl,td,tp,tc,th,tf,tm,tg,ty,t_,tb,t$,tv,tw,tx,tk,tS,tT,tI,tE,tC,tz,tA,tO,tR,tB,tN,tM,tD,tP,tU,tq,tW,tL,tV,tG,tH,tF,tj,tK,tZ,tQ,tX,tY,tJ,t0,t2,t1,t3,t4,t8,t6,t5,t7,t9,re,rt,rr,ri,ra,rn,rs,ro,ru,rl,rd,rp,rc,rh,rf,rm,rg,ry,r_,rb,r$,rv,rw,rx,rk,rS,rT,rI,rE,rC,rz,rA,rO,rR,rB,rN,rM,rD,rP,rU,rq,rW,rL,rV,rG,rH,rF,rj,rK,rZ,rQ,rX,rY,rJ,r0,r2,r1,r3,r4,r8,r6,r5,r7,r9,ie,it,ir,ii,ia,is,io,iu,il,id,ip,ic,ih,im,ig,iy,i_,ib,i$,iv,iw,ix,ik,iS,iT,iI,iE,iC,iz,iA,iO,iR,iB,iN,iM,iD,iP,iU,iq,iW,iL,iV,iG,iH,iF,ij,iK,iZ,iQ,iX,iY,iJ,i0,i2,i1,i3,i4,i8,i6,i5,i7,i9,ae,at,ar,ai,aa,an,as,ao,au,al,ad,ap,ac,ah,af,am,ag,ay,a_,ab,a$,av,aw,ax,ak,aS,aT,aI,aE,aC,az,aA,aO,aR,aB,aN,aM,aD,aP,aU,aq,aW,aL,aV,aG,aH,aF,aj,aK,aZ,aQ,aX,aY,aJ,a0,a2,a1,a3,a4,a8,a6,a5,a7,a9,ne,nt,nr,ni,na,nn,ns,no,nu,nl,nd,np,nc,nh,nf,nm,ng,ny,n_,nb,n$,nv,nw,nx,nk,nS,nT,nI,nE,nC,nz,nA,nO,nR,nB,nN,nM,nD,nP,nU,nq,nW,nL,nV,nG,nH,nF,nj,nK,nZ,nQ,nX,nY,nJ,n0,n2,n1,n3,n4,n8,n6,n5,n7,n9,se,st,sr,si,sa,sn,ss,so,su,sl,sd,sp,sc,sh,sf,sm,sg,sy,s_,sb,s$,sv,sw,sx,sk,sS,sT,sI,sE,sC,sz,sA,sO,sR,s
1B,sN,sM,sD,sP,sU,sq,sW,sL,sV,sG,sH,sF,sj,sK,sZ,sQ,sX,sY,sJ,s0,s2,s1,s3,s4,s8,s6,s5,s7,s9,oe,ot,or,oi,oa,on,os,oo,ou,ol,od,op,oc,oh,of,om,og,oy,o_,ob,o$,ov,ow,ox,ok,oS,oT,oI,oE,oC,oz,oA,oO,oR,oB,oN,oM,oD,oP,oU,oq,oW,oL=q(()=>{ey="file:///vercel/path0/node_modules/onnxruntime-web/dist/ort.webgpu.bundle.min.mjs",eb=e_=async function(t={}){var r,a,n=new Promise((t,i)=>{r=t,a=i}),s="object"==typeof window,o="u">typeof WorkerGlobalScope,u=o&&self.name?.startsWith("em-pthread");t.mountExternalData=(r,i)=>{r.startsWith("./")&&(r=r.substring(2)),(t.Fb||(t.Fb=new Map)).set(r,i)},t.unmountExternalData=()=>{delete t.Fb};var l=globalThis.SharedArrayBuffer??new WebAssembly.Memory({initial:0,maximum:0,qc:!0}).buffer.constructor;let d=r=>async(...i)=>{try{if(t.Gb)throw Error("Session already started");let a=t.Gb={ec:i[0],errors:[]},n=await r(...i);if(t.Gb!==a)throw Error("Session mismatch");t.Kb?.flush();let s=a.errors;if(0<s.length){let t=await Promise.all(s);if(t=t.filter(t=>t),0<t.length)throw Error(t.join(`
2`))}return n}finally{t.Gb=null}};t.jsepInit=(r,i)=>{if("webgpu"===r){[t.Kb,t.Vb,t.Zb,t.Lb,t.Yb,t.kb,t.$b,t.bc,t.Wb,t.Xb,t.ac]=i;let r=t.Kb;t.jsepRegisterBuffer=(t,i,a,n)=>r.registerBuffer(t,i,a,n),t.jsepGetBuffer=t=>r.getBuffer(t),t.jsepCreateDownloader=(t,i,a)=>r.createDownloader(t,i,a),t.jsepOnCreateSession=t=>{r.onCreateSession(t)},t.jsepOnReleaseSession=t=>{r.onReleaseSession(t)},t.jsepOnRunStart=t=>r.onRunStart(t),t.cc=(t,i)=>{r.upload(t,i)}}else if("webnn"===r){let r=i[0];[t.oc,t.Ob,t.webnnEnsureTensor,t.Pb,t.webnnDownloadTensor]=i.slice(1),t.webnnReleaseTensorId=t.Ob,t.webnnUploadTensor=t.Pb,t.webnnOnRunStart=t=>r.onRunStart(t),t.webnnOnRunEnd=r.onRunEnd.bind(r),t.webnnRegisterMLContext=(t,i)=>{r.registerMLContext(t,i)},t.webnnOnReleaseSession=t=>{r.onReleaseSession(t)},t.webnnCreateMLTensorDownloader=(t,i)=>r.createMLTensorDownloader(t,i),t.webnnRegisterMLTensor=(t,i,a,n)=>r.registerMLTensor(t,i,a,n),t.webnnCreateMLContext=t=>r.createMLContext(t),t.webnnRegisterMLConstant=(i,a,n,s,o,u)=>r.registerMLConstant(i,a,n,s,o,t.Fb,u),t.webnnRegisterGraphInput=r.registerGraphInput.bind(r),t.webnnIsGraphInput=r.isGraphInput.bind(r),t.webnnRegisterGraphOutput=r.registerGraphOutput.bind(r),t.webnnIsGraphOutput=r.isGraphOutput.bind(r),t.webnnCreateTemporaryTensor=r.createTemporaryTensor.bind(r),t.webnnIsGraphInputOutputTypeSupported=r.isGraphInputOutputTypeSupported.bind(r)}};let p=()=>{let r=(t,r,i)=>(...a)=>{let n=tO,s=r?.();a=t(...a);let o=r?.();return s!==o&&(t=o,i(s),r=i=null),tO!=n?new Promise((t,r)=>{tP={resolve:t,reject:r}}):a};(()=>{for(let i of["_OrtAppendExecutionProvider","_OrtCreateSession","_OrtRun","_OrtRunWithBinding","_OrtBindInput"])t[i]=r(t[i],()=>t[i],r=>t[i]=r)})(),void 0!==d&&(t._OrtRun=d(t._OrtRun),t._OrtRunWithBinding=d(t._OrtRunWithBinding)),p=void 0};t.asyncInit=()=>{p?.()};var c,h,f=Object.assign({},t),m=(t,r)=>{throw r},g="";(s||o)&&(o?g=self.location.href:"u">typeof document&&document.currentScript&&(g=document.currentScript.src),ey&&(g=ey),g=g.startsWith("blob:")?"":g.slice(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1),o&&(h=t=>{var r=new XMLHttpRequest;return r.open("GET",t,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),c=async t=>{if(M(t))return new Promise((r,i)=>{var a=new XMLHttpRequest;a.open("GET",t,!0),a.responseType="arraybuffer",a.onload=()=>{200==a.status||0==a.status&&a.response?r(a.response):i(a.status)},a.onerror=i,a.send(null)});var r=await fetch(t,{credentials:"same-origin"});if(r.ok)return r.arrayBuffer();throw Error(r.status+" : "+r.url)});var y=console.log.bind(console),_=console.error.bind(console),b=y,$=_;Object.assign(t,f),f=null;var v,w,x,k,S,T,I,E,C,z,A,O,R,B=t.wasmBinary,N=!1,M=t=>t.startsWith("file://");function D(){return v.buffer!=k.buffer&&j(),k}function P(){return v.buffer!=k.buffer&&j(),S}function U(){return v.buffer!=k.buffer&&j(),T}function q(){return v.buffer!=k.buffer&&j(),I}function W(){return v.buffer!=k.buffer&&j(),E}function L(){return v.buffer!=k.buffer&&j(),C}function V(){return v.buffer!=k.buffer&&j(),z}function G(){return v.buffer!=k.buffer&&j(),R}if(u){let r=function(i){try{var a=i.data,n=a.Cb;if("load"===n){let i=[];for(let n of(self.onmessage=t=>i.push(t),self.startWorker=()=>{for(let t of(postMessage({Cb:"loaded"}),i))r(t);self.onmessage=r},a.Sb))t[n]&&!t[n].proxy||(t[n]=(...t)=>{postMessage({Cb:"callHandler",Rb:n,args:t})},"print"==n&&(b=t[n]),"printErr"==n&&($=t[n]));v=a.lc,j(),H(a.mc)}else if("run"===n){ew(a.Bb),rZ(a.Bb,0,0,1,0,0),eb(),t_(a.Bb),F||(rH(),F=!0);try{ex(a.hc,a.Ib)}catch(t){if("unwind"!=t)throw t}}else"setimmediate"!==a.target&&("checkMailbox"===n?F&&tb():n&&($(`worker: received unknown command ${n}`),$(a)))}catch(t){throw rQ(),t}};var H,F=!1;$=function(...t){console.error(t=t.join(" "))},self.alert=function(...t){postMessage({Cb:"alert",text:t.join(" "),jc:rF()})},self.onunhandledrejection=t=>{throw t.reason||t},self.onmessage=r}function j(){var r=v.buffer;t.HEAP8=k=new Int8Array(r),t.HEAP16=T=new Int16Array(r),t.HEAPU8=S=new Uint8Array(r),t.HEAPU16=I=new Uint16Array(r),t.HEAP32=E=new Int32Array(r),t.HEAPU32
vendor: 22,669 bytes, line 2
2=C=new Uint32Array(r),t.HEAPF32=z=new Float32Array(r),t.HEAPF64=R=new Float64Array(r),t.HEAP64=A=new BigInt64Array(r),t.HEAPU64=O=new BigUint64Array(r)}function K(){u?startWorker(t):rL.Da()}u||(v=new WebAssembly.Memory({initial:256,maximum:65536,shared:!0}),j());var Z,Q=0,X=null;function Y(){if(0==--Q&&X){var t=X;X=null,t()}}function J(t){throw $(t="Aborted("+t+")"),N=!0,t=new WebAssembly.RuntimeError(t+". Build with -sASSERTIONS for more info."),a(t),t}function ee(){return{a:{L:ei,Aa:er,b:eS,$:eI,A:eA,pa:eO,X:eN,Z:eM,qa:eD,na:eP,ga:eU,ma:eq,J:eW,Y:eL,V:eV,oa:eG,W:eH,va:eK,E:e2,Q:e3,O:tt,D:ti,v:ta,r:tn,P:ts,z:tf,R:tm,ja:tg,T:t$,aa:tw,M:tx,F:tk,ia:t_,sa:tS,t:tE,Ca:tC,w:tW,o:tV,m:tF,c:e6,Ba:tj,n:tZ,j:tJ,u:t0,p:t2,f:t1,s:t3,l:t4,e:t8,k:t6,h:t5,g:t7,d:t9,da:re,ea:ra,fa:rn,ba:rs,ca:ro,N:rd,xa:rp,ua:rh,i:rg,C:ry,G:r_,ta:rc,x:rb,ra:r$,U:rv,q:rl,y:rw,K:rx,S:rk,za:rE,ya:rC,ka:rR,la:rB,_:ec,B:rN,I:rM,ha:rD,H:rU,a:v,wa:ed}}}var et={840156:(r,i,a,n,s)=>{if(void 0===t||!t.Fb)return 1;if((r=ez(Number(r>>>0))).startsWith("./")&&(r=r.substring(2)),!(r=t.Fb.get(r)))return 2;if(i=Number(i>>>0),a=Number(a>>>0),n=Number(n>>>0),i+a>r.byteLength)return 3;try{let o=r.subarray(i,i+a);switch(s){case 0:P().set(o,n>>>0);break;case 1:t.nc?t.nc(n,o):t.cc(n,o);break;default:return 4}return 0}catch{return 4}},840980:(r,i,a)=>{t.Pb(r,P().subarray(i>>>0,i+a>>>0))},841044:()=>t.oc(),841086:r=>{t.Ob(r)},841123:()=>{t.Wb()},841154:()=>{t.Xb()},841183:()=>{t.ac()},841208:r=>t.Vb(r),841241:r=>t.Zb(r),841273:(r,i,a)=>{t.Lb(Number(r),Number(i),Number(a),!0)},841336:(r,i,a)=>{t.Lb(Number(r),Number(i),Number(a))},841393:()=>"u">typeof wasmOffsetConverter,841450:r=>{t.kb("Abs",r,void 0)},841501:r=>{t.kb("Neg",r,void 0)},841552:r=>{t.kb("Floor",r,void 0)},841605:r=>{t.kb("Ceil",r,void 0)},841657:r=>{t.kb("Reciprocal",r,void 0)},841715:r=>{t.kb("Sqrt",r,void 0)},841767:r=>{t.kb("Exp",r,void 0)},841818:r=>{t.kb("Erf",r,void 0)},841869:r=>{t.kb("Sigmoid",r,void 0)},841924:(r,i,a)=>{t.kb("HardSigmoid",r,{alpha:i,beta:a})},842003:r=>{t.kb("Log",r,void 0)},842054:r=>{t.kb("Sin",r,void 0)},842105:r=>{t.kb("Cos",r,void 0)},842156:r=>{t.kb("Tan",r,void 0)},842207:r=>{t.kb("Asin",r,void 0)},842259:r=>{t.kb("Acos",r,void 0)},842311:r=>{t.kb("Atan",r,void 0)},842363:r=>{t.kb("Sinh",r,void 0)},842415:r=>{t.kb("Cosh",r,void 0)},842467:r=>{t.kb("Asinh",r,void 0)},842520:r=>{t.kb("Acosh",r,void 0)},842573:r=>{t.kb("Atanh",r,void 0)},842626:r=>{t.kb("Tanh",r,void 0)},842678:r=>{t.kb("Not",r,void 0)},842729:(r,i,a)=>{t.kb("Clip",r,{min:i,max:a})},842798:r=>{t.kb("Clip",r,void 0)},842850:(r,i)=>{t.kb("Elu",r,{alpha:i})},842908:r=>{t.kb("Gelu",r,void 0)},842960:r=>{t.kb("Relu",r,void 0)},843012:(r,i)=>{t.kb("LeakyRelu",r,{alpha:i})},843076:(r,i)=>{t.kb("ThresholdedRelu",r,{alpha:i})},843146:(r,i)=>{t.kb("Cast",r,{to:i})},843204:r=>{t.kb("Add",r,void 0)},843255:r=>{t.kb("Sub",r,void 0)},843306:r=>{t.kb("Mul",r,void 0)},843357:r=>{t.kb("Div",r,void 0)},843408:r=>{t.kb("Pow",r,void 0)},843459:r=>{t.kb("Equal",r,void 0)},843512:r=>{t.kb("Greater",r,void 0)},843567:r=>{t.kb("GreaterOrEqual",r,void 0)},843629:r=>{t.kb("Less",r,void 0)},843681:r=>{t.kb("LessOrEqual",r,void 0)},843740:(r,i,a,n,s)=>{t.kb("ReduceMean",r,{keepDims:!!i,noopWithEmptyAxes:!!a,axes:n?Array.from(W().subarray(Number(n)>>>0,Number(s)>>>0)):[]})},843915:(r,i,a,n,s)=>{t.kb("ReduceMax",r,{keepDims:!!i,noopWithEmptyAxes:!!a,axes:n?Array.from(W().subarray(Number(n)>>>0,Number(s)>>>0)):[]})},844089:(r,i,a,n,s)=>{t.kb("ReduceMin",r,{keepDims:!!i,noopWithEmptyAxes:!!a,axes:n?Array.from(W().subarray(Number(n)>>>0,Number(s)>>>0)):[]})},844263:(r,i,a,n,s)=>{t.kb("ReduceProd",r,{keepDims:!!i,noopWithEmptyAxes:!!a,axes:n?Array.from(W().subarray(Number(n)>>>0,Number(s)>>>0)):[]})},844438:(r,i,a,n,s)=>{t.kb("ReduceSum",r,{keepDims:!!i,noopWithEmptyAxes:!!a,axes:n?Array.from(W().subarray(Number(n)>>>0,Number(s)>>>0)):[]})},844612:(r,i,a,n,s)=>{t.kb("ReduceL1",r,{keepDims:!!i,noopWithEmptyAxes:!!a,axes:n?Array.from(W().subarray(Number(n)>>>0,Number(s)>>>0)):[]})},844785:(r,i,a,n,s)=>{t.kb("ReduceL2",r,{keepDims:!!i,noopWithEmptyAxes:!!a,axes:n?Array.from(W().subarray(Number(n)>>>0,Number(s)>>>0)):[]})},844958:(r,i,a,n,s)=>{t.kb("ReduceLogSum",r,{keepDims:!!i,noopWithEmptyAxes:!!a,axes:n?Array.from(W().subarray(Number(n)>>>0,Number(s)>>>0)):[]})},845135:(r,i,a,n,s)=>{t.kb("ReduceSumSquare",r,{keepDims:!!i,noopWithEmptyAxes:!!a,axes:n?Array.from(W().subarray(Number(n)>>>0,Number(s)>>>0)):[]})},845315:(r,i,a,n,s)=>{t.kb("ReduceLogSumExp",r,{keepDims:!!i,noopWithEmptyAxes:!!a,axes:n?Array.from(W().subarray(Number(n)>>>0,Number(s)>>>0)):[]})},845495:r=>{t.kb("Where",r,void 0)},845548:(r,i,a)=>{t.kb("Transpose",r,{perm:i?Array.from(W().subarray(Number(i)>>>0,Number(a)>>>0)):[]})},845672:(r,i,a,n)=>{t.kb("DepthToSpace",r,{blocksize:i,mode:ez(a),format:n?"NHWC":"NCHW"})},845805:(r,i,a,n)=>{t.kb("DepthToSpace",r,{blocksize:i,mode:ez(a),format:n?"NHWC":"NCHW"})},845938:(r,i,a,n,s,o,u,l,d,p,c,h,f,m,g)=>{t.kb("ConvTranspose",r,{format:d?"NHWC":"NCHW",autoPad:i,dilations:[a],group:n,kernelShape:[s],pads:[o,u],strides:[l],wIsConst:()=>!!D()[p>>>0],outputPadding:c?Array.from(W().subarray(Number(c)>>>0,Number(h)>>>0)):[],outputShape:f?Array.from(W().subarray(Number(f)>>>0,Number(m)>>>0)):[],activation:ez(g)})},846371:(r,i,a,n,s,o,u,l,d,p,c,h,f,m)=>{t.kb("ConvTranspose",r,{format:l?"NHWC":"NCHW",autoPad:i,dilations:Array.from(W().subarray(Number(a)>>>0,2+(Number(a)>>>0)>>>0)),group:n,kernelShape:Array.from(W().subarray(Number(s)>>>0,2+(Number(s)>>>0)>>>0)),pads:Array.from(W().subarray(Number(o)>>>0,4+(Number(o)>>>0)>>>0)),strides:Array.from(W().subarray(Number(u)>>>0,2+(Number(u)>>>0)>>>0)),wIsConst:()=>!!D()[d>>>0],outputPadding:p?Array.from(W().subarray(Number(p)>>>0,Number(c)>>>0)):[],outputShape:h?Array.from(W().subarray(Number(h)>>>0,Number(f)>>>0)):[],activation:ez(m)})},847032:(r,i,a,n,s,o,u,l,d,p,c,h,f,m,g)=>{t.kb("ConvTranspose",r,{format:d?"NHWC":"NCHW",autoPad:i,dilations:[a],group:n,kernelShape:[s],pads:[o,u],strides:[l],wIsConst:()=>!!D()[p>>>0],outputPadding:c?Array.from(W().subarray(Number(c)>>>0,Number(h)>>>0)):[],outputShape:f?Array.from(W().subarray(Number(f)>>>0,Number(m)>>>0)):[],activation:ez(g)})},847465:(r,i,a,n,s,o,u,l,d,p,c,h,f,m)=>{t.kb("ConvTranspose",r,{format:l?"NHWC":"NCHW",autoPad:i,dilations:Array.from(W().subarray(Number(a)>>>0,2+(Number(a)>>>0)>>>0)),group:n,kernelShape:Array.from(W().subarray(Number(s)>>>0,2+(Number(s)>>>0)>>>0)),pads:Array.from(W().subarray(Number(o)>>>0,4+(Number(o)>>>0)>>>0)),strides:Array.from(W().subarray(Number(u)>>>0,2+(Number(u)>>>0)>>>0)),wIsConst:()=>!!D()[d>>>0],outputPadding:p?Array.from(W().subarray(Number(p)>>>0,Number(c)>>>0)):[],outputShape:h?Array.from(W().subarray(Number(h)>>>0,Number(f)>>>0)):[],activation:ez(m)})},848126:(r,i)=>{t.kb("GlobalAveragePool",r,{format:i?"NHWC":"NCHW"})},848217:(r,i,a,n,s,o,u,l,d,p,c,h,f,m)=>{t.kb("AveragePool",r,{format:m?"NHWC":"NCHW",auto_pad:i,ceil_mode:a,count_include_pad:n,storage_order:s,dilations:o?Array.from(W().subarray(Number(o)>>>0,Number(u)>>>0)):[],kernel_shape:l?Array.from(W().subarray(Number(l)>>>0,Number(d)>>>0)):[],pads:p?Array.from(W().subarray(Number(p)>>>0,Number(c)>>>0)):[],strides:h?Array.from(W().subarray(Number(h)>>>0,Number(f)>>>0)):[]})},848696:(r,i)=>{t.kb("GlobalAveragePool",r,{format:i?"NHWC":"NCHW"})},848787:(r,i,a,n,s,o,u,l,d,p,c,h,f,m)=>{t.kb("AveragePool",r,{format:m?"NHWC":"NCHW",auto_pad:i,ceil_mode:a,count_include_pad:n,storage_order:s,dilations:o?Array.from(W().subarray(Number(o)>>>0,Number(u)>>>0)):[],kernel_shape:l?Array.from(W().subarray(Number(l)>>>0,Number(d)>>>0)):[],pads:p?Array.from(W().subarray(Number(p)>>>0,Number(c)>>>0)):[],strides:h?Array.from(W().subarray(Number(h)>>>0,Number(f)>>>0)):[]})},849266:(r,i)=>{t.kb("GlobalMaxPool",r,{format:i?"NHWC":"NCHW"})},849353:(r,i,a,n,s,o,u,l,d,p,c,h,f,m)=>{t.kb("MaxPool",r,{format:m?"NHWC":"NCHW",auto_pad:i,ceil_mode:a,count_include_pad:n,storage_order:s,dilations:o?Array.from(W().subarray(Number(o)>>>0,Number(u)>>>0)):[],kernel_shape:l?Array.from(W().subarray(Number(l)>>>0,Number(d)>>>0)):[],pads:p?Array.from(W().subarray(Number(p)>>>0,Number(c)>>>0)):[],strides:h?Array.from(W().subarray(Number(h)>>>0,Number(f)>>>0)):[]})},849828:(r,i)=>{t.kb("GlobalMaxPool",r,{format:i?"NHWC":"NCHW"})},849915:(r,i,a,n,s,o,u,l,d,p,c,h,f,m)=>{t.kb("MaxPool",r,{format:m?"NHWC":"NCHW",auto_pad:i,ceil_mode:a,count_include_pad:n,storage_order:s,dilations:o?Array.from(W().subarray(Number(o)>>>0,Number(u)>>>0)):[],kernel_shape:l?Array.from(W().subarray(Number(l)>>>0,Number(d)>>>0)):[],pads:p?Array.from(W().subarray(Number(p)>>>0,Number(c)>>>0)):[],strides:h?Array.from(W().subarray(Number(h)>>>0,Number(f)>>>0)):[]})},850390:(r,i,a,n,s)=>{t.kb("Gemm",r,{alpha:i,beta:a,transA:n,transB:s})},850494:r=>{t.kb("MatMul",r,void 0)},850548:(r,i,a,n)=>{t.kb("ArgMax",r,{keepDims:!!i,selectLastIndex:!!a,axis:n})},850656:(r,i,a,n)=>{t.kb("ArgMin",r,{keepDims:!!i,selectLastIndex:!!a,axis:n})},850764:(r,i)=>{t.kb("Softmax",r,{axis:i})},850827:(r,i)=>{t.kb("Concat",r,{axis:i})},850887:(r,i,a,n,s)=>{t.kb("Split",r,{axis:i,numOutputs:a,splitSizes:n?Array.from(W().subarray(Number(n)>>>0,Number(s)>>>0)):[]})},851043:r=>{t.kb("Expand",r,void 0)},851097:(r,i)=>{t.kb("Gather",r,{axis:Number(i)})},851168:(r,i)=>{t.kb("GatherElements",r,{axis:Number(i)})},851247:(r,i)=>{t.kb("GatherND",r,{batch_dims:Number(i)})},851326:(r,i,a,n,s,o,u,l,d,p,c)=>{t.kb("Resize",r,{antialias:i,axes:a?Array.from(W().subarray(Number(a)>>>0,Number(n)>>>0)):[],coordinateTransformMode:ez(s),cubicCoeffA:o,excludeOutside:u,extrapolationValue:l,keepAspectRatioPolicy:ez(d),mode:ez(p),nearestMode:ez(c)})},851688:(r,i,a,n,s,o,u)=>{t.kb("Slice",r,{starts:i?Array.from(W().subarray(Number(i)>>>0,Number(a)>>>0)):[],ends:n?Array.from(W().subarray(Number(n)>>>0,Number(s)>>>0)):[],axes:o?Array.from(W().subarray(Number(o)>>>0,Number(u)>>>0)):[]})},851952:r=>{t.kb("Tile",r,void 0)},852004:(r,i,a)=>{t.kb("InstanceNormalization",r,{epsilon:i,format:a?"NHWC":"NCHW"})},852118:(r,i,a)=>{t.kb("InstanceNormalization",r,{epsilon:i,format:a?"NHWC":"NCHW"})},852232:r=>{t.kb("Range",r,void 0)},852285:(r,i)=>{t.kb("Einsum",r,{equation:ez(i)})},852366:(r,i,a,n,s)=>{t.kb("Pad",r,{mode:i,value:a,pads:n?Array.from(W().subarray(Number(n)>>>0,Number(s)>>>0)):[]})},852509:(r,i,a,n,s,o)=>{t.kb("BatchNormalization",r,{epsilon:i,momentum:a,spatial:!!s,trainingMode:!!n,format:o?"NHWC":"NCHW"})},852678:(r,i,a,n,s,o)=>{t.kb("BatchNormalization",r,{epsilon:i,momentum:a,spatial:!!s,trainingMode:!!n,format:o?"NHWC":"NCHW"})},852847:(r,i,a)=>{t.kb("CumSum",r,{exclusive:Number(i),reverse:Number(a)})},852944:(r,i,a)=>{t.kb("DequantizeLinear",r,{axis:i,blockSize:a})},853034:(r,i,a,n,s)=>{t.kb("GridSample",r,{align_corners:i,mode:ez(a),padding_mode:ez(n),format:s?"NHWC":"NCHW"})},853204:(r,i,a,n,s)=>{t.kb("GridSample",r,{align_corners:i,mode:ez(a),padding_mode:ez(n),format:s?"NHWC":"NCHW"})},853374:(r,i)=>{t.kb("ScatterND",r,{reduction:ez(i)})},853459:(r,i,a,n,s,o,u,l,d)=>{t.kb("Attention",r,{numHeads:i,isUnidirectional:a,maskFilterValue:n,scale:s,doRotary:o,qkvHiddenSizes:u?Array.from(W().subarray(Number(l)>>>0,Number(l)+u>>>0)):[],pastPresentShareBuffer:!!d})},853731:r=>{t.kb("BiasAdd",r,void 0)},853786:r=>{t.kb("BiasSplitGelu",r,void 0)},853847:r=>{t.kb("FastGelu",r,void 0)},853903:(r,i,a,n,s,o,u,l,d,p,c,h,f,m,g,y)=>{t.kb("Conv",r,{format:h?"NHWC":"NCHW",auto_pad:i,dilations:a?Array.from(W().subarray(Number(a)>>>0,Number(n)>>>0)):[],group:s,kernel_shape:o?Array.from(W().subarray(Number(o)>>>0,Number(u)>>>0)):[],pads:l?Array.from(W().subarray(Number(l)>>>0,Number(d)>>>0)):[],strides:p?Array.from(W().subarray(Number(p)>>>0,Number(c)>>>0)):[],w_is_const:()=>!!D()[Number(f)>>>0],activation:ez(m),activation_params:g?Array.from(V().subarray(Number(g)>>>0,Number(y)>>>0)):[]})},854487:r=>{t.kb("Gelu",r,void 0)},854539:(r,i,a,n,s,o,u,l,d)=>{t.kb("GroupQueryAttention",r,{numHeads:i,kvNumHeads:a,scale:n,softcap:s,doRotary:o,rotaryInterleaved:u,smoothSoftmax:l,localWindowSize:d})},854756:(r,i,a,n)=>{t.kb("LayerNormalization",r,{axis:i,epsilon:a,simplified:!!n})},854867:(r,i,a,n)=>{t.kb("LayerNormalization",r,{axis:i,epsilon:a,simplified:!!n})},854978:(r,i,a,n,s,o)=>{t.kb("MatMulNBits",r,{k:i,n:a,accuracyLevel:n,bits:s,blockSize:o})},855105:(r,i,a,n,s,o)=>{t.kb("MultiHeadAttention",r,{numHeads:i,isUnidirectional:a,maskFilterValue:n,scale:s,doRotary:o})},855264:(r,i)=>{t.kb("QuickGelu",r,{alpha:i})},855328:(r,i,a,n,s)=>{t.kb("RotaryEmbedding",r,{interleaved:!!i,numHeads:a,rotaryEmbeddingDim:n,scale:s})},855467:(r,i,a)=>{t.kb("SkipLayerNormalization",r,{epsilon:i,simplified:!!a})},855569:(r,i,a)=>{t.kb("SkipLayerNormalization",r,{epsilon:i,simplified:!!a})},855671:(r,i,a,n)=>{t.kb("GatherBlockQuantized",r,{gatherAxis:i,quantizeAxis:a,blockSize:n})},855792:r=>{t.$b(r)},855826:(r,i)=>t.bc(Number(r),Number(i),t.Gb.ec,t.Gb.errors)};function er(r,i,a){return tq(async()=>{await t.Yb(Number(r),Number(i),Number(a))})}function ei(){return"u">typeof wasmOffsetConverter}class ea{name="ExitStatus";constructor(t){this.message=`Program terminated with exit(${t})`,this.status=t}}var en=t=>{t.terminate(),t.onmessage=()=>{}},es=[],eo=t=>{0==eh.length&&(ev(),e$(eh[0]));var r=eh.pop();if(!r)return 6;ef.push(r),eg[t.Bb]=r,r.Bb=t.Bb;var i={Cb:"run",hc:t.fc,Ib:t.Ib,Bb:t.Bb};return r.postMessage(i,t.Nb),0},eu=0,el=(t,r,...i)=>{for(var a=2*i.length,n=r8(),s=r4(8*a),o=s>>>3,u=0;u<i.length;u++){var l=i[u];"bigint"==typeof l?(A[o+2*u]=1n,A[o+2*u+1]=l):(A[o+2*u]=0n,G()[o+2*u+1>>>0]=l)}return t=rX(t,0,a,s,r),r3(n),t};function ed(t){if(u)return el(0,1,t);if(x=t,!(0<eu)){for(var r of ef)en(r);for(r of eh)en(r);eh=[],ef=[],eg={},N=!0}m(0,new ea(t))}function ep(t){if(u)return el(1,0,t);ec(t)}var ec=t=>{if(x=t,u)throw ep(t),"unwind";ed(t)},eh=[],ef=[],em=[],eg={},e_=t=>{var r=t.Bb;delete eg[r],eh.push(t),ef.splice(ef.indexOf(t),1),t.Bb=0,rY(r)};function eb(){em.forEach(t=>t())}var e$=r=>new Promise(i=>{r.onmessage=a=>{var n=(a=a.data).Cb;if(a.Hb&&a.Hb!=rF()){var s=eg[a.Hb];s?s.postMessage(a,a.Nb):$(`Internal error! Worker sent a message "${n}" to target pthread ${a.Hb}, but that thread no longer exists!`)}else"checkMailbox"===n?tb():"spawnThread"===n?eo(a):"cleanupThread"===n?e_(eg[a.ic]):"loaded"===n?(r.loaded=!0,i(r)):"alert"===n?alert(`Thread ${a.jc}: ${a.text}`):"setimmediate"===a.target?r.postMessage(a):"callHandler"===n?t[a.Rb](...a.args):n&&$(`worker sent an unknown command ${n}`)},r.onerror=t=>{throw $(`worker sent an error! ${t.filename}:${t.lineno}: ${t.message}`),t};var a,n=[];for(a of[])t.propertyIsEnumerable(a)&&n.push(a);r.postMessage({Cb:"load",Sb:n,lc:v,mc:w})});function ev(){var t=new Worker((URL,new i.U(i(39819))),{type:"module",workerData:"em-pthread",name:"em-pthread"});eh.push(t)}var ew=t=>{j();var r=L()[t+52>>>2>>>0];t=L()[t+56>>>2>>>0],r1(r,r-t),r3(r)},ex=(t,r)=>{eu=0,t=r6(t,r),0<eu?x=t:rJ(t)};class ek{constructor(t){this.Jb=t-24}}function eS(t,r,i){var a=new ek(t>>>=0);throw r>>>=0,i>>>=0,L()[a.Jb+16>>>2>>>0]=0,L()[a.Jb+4>>>2>>>0]=r,L()[a.Jb+8>>>2>>>0]=i,t}function eT(t,r,i,a){return u?el(2,1,t,r,i,a):eI(t,r,i,a)}function eI(t,r,i,a){if(t>>>=0,i>>>=0,a>>>=0,void 0===l)return 6;var n=[];return u&&0===n.length?eT(t,r>>>=0,i,a):(t={fc:i,Bb:t,Ib:a,Nb:n},u?(t.Cb="spawnThread",postMessage(t,n),0):eo(t))}var eE="u">typeof TextDecoder?new TextDecoder:void 0,eC=(t,r=0,i=NaN)=>{var a=(r>>>=0)+i;for(i=r;t[i]&&!(i>=a);)++i;if(16<i-r&&t.buffer&&eE)return eE.decode(t.buffer instanceof ArrayBuffer?t.subarray(r,i):t.slice(r,i));for(a="";r<i;){var n=t[r++];if(128&n){var s=63&t[r++];if((224&n)==192)a+=String.fromCharCode((31&n)<<6|s);else{var o=63&t[r++];65536>(n=(240&n)==224?(15&n)<<12|s<<6|o:(7&n)<<18|s<<12|o<<6|63&t[r++])?a+=String.fromCharCode(n):(n-=65536,a+=String.fromCharCode(55296|n>>10,56320|1023&n))}}else a+=String.fromCharCode(n)}return a},ez=(t,r)=>(t>>>=0)?eC(P(),t,r):"";function eA(t,r,i){return u?el(3,1,t,r,i):0}function eO(t,r){if(u)return el(4,1,t,r)}var eR=t=>{for(var r=0,i=0;i<t.length;++i){var a=t.charCodeAt(i);127>=a?r++:2047>=a?r+=2:55296<=a&&57343>=a?(r+=4,++i):r+=3}return r},eB=(t,r,i)=>{var a=P();if(r>>>=0,0<i){var n=r;i=r+i-1;for(var s=0;s<t.length;++s){var o=t.charCodeAt(s);if(55296<=o&&57343>=o&&(o=65536+((1023&o)<<10)|1023&t.charCodeAt(++s)),127>=o){if(r>=i)break;a[r++>>>0]=o}else{if(2047>=o){if(r+1>=i)break;a[r++>>>0]=192|o>>6}else{if(65535>=o){if(r+2>=i)break;a[r++>>>0]=224|o>>12}else{if(r+3>=i)break;a[r++>>>0]=240|o>>18,a[r++>>>0]=128|o>>12&63}a[r++>>>0]=128|o>>6&63}a[r++>>>0]=128|63&o}}a[r>>>0]=0,t=r-n}else t=0;return t};function eN(t,r){if(u)return el(5,1,t,r)}function eM(t,r,i){if(u)return el(6,1,t,r,i)}function eD(t,r,i){return u?el(7,1,t,r,i):0}function eP(t,r){if(u)return el(8,1,t,r)}function eU(t,r,i){if(u)return el(9,1,t,r,i)}function eq(t,r,i,a){if(u)return el(10,1,t,r,i,a)}function eW(t,r,i,a){if(u)return el(11,1,t,r,i,a)}function eL(t,r,i,a){if(u)return el(12,1,t,r,i,a)}function eV(t){if(u)return el(13,1,t)}function eG(t,r){if(u)return el(14,1,t,r)}function eH(t,r,i){if(u)return el(15,1,t,r,i)}var eF,ej,eK=()=>J(""),eZ=t=>{for(var r="";P()[t>>>0];)r+=eF[P()[t++>>>0]];return r},eQ={},eX={},eY={};function eJ(t,r,i={}){return function(t,r,i={}){var a=r.name;if(!t)throw new ej(`type "${a}" must have a positive integer typeid pointer`);if(eX.hasOwnProperty(t)){if(i.Tb)return;throw new ej(`Cannot register type '${a}' twice`)}eX[t]=r,delete eY[t],eQ.hasOwnProperty(t)&&(r=eQ[t],delete eQ[t],r.forEach(t=>t()))}(t,r,i)}var e0=(t,r,i)=>{switch(r){case 1:return i?t=>D()[t>>>0]:t=>P()[t>>>0];case 2:return i?t=>U()[t>>>1>>>0]:t=>q()[t>>>1>>>0];case 4:return i?t=>W()[t>>>2>>>0]:t=>L()[t>>>2>>>0];case 8:return i?t=>A[t>>>3]:t=>O[t>>>3];default:throw TypeError(`invalid integer width (${r}): ${t}`)}};function e2(t,r,i){i>>>=0,eJ(t>>>=0,{name:r=eZ(r>>>0),fromWireType:t=>t,toWireType:function(t,r){if("bigint"!=typeof r&&"number"!=typeof r)throw r=null===r?"null":"object"==(t=typeof r)||"array"===t||"function"===t?r.toString():""+r,TypeError(`Cannot convert "${r}" to ${this.name}`);return"number"==typeof r&&(r=BigInt(r)),r},Db:e1,readValueFromPointer:e0(r,i,-1==r.indexOf("u")),Eb:null})}var e1=8;function e3(t,r,i,a){eJ(t>>>=0,{name:r=eZ(r>>>0),fromWireType:function(t){return!!t},toWireType:function(t,r){return r?i:a},Db:e1,readValueFromPointer:function(t){return this.fromWireType(P()[t>>>0])},Eb:null})}var e4=[],e8=[];function e6(t){9<(t>>>=0)&&0==--e8[t+1]&&(e8[t]=void 0,e4.push(t))}var e5=t=>{if(!t)throw new ej("Cannot use deleted val. handle = "+t);return e8[t]},e7=t=>{switch(t){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:let r=e4.pop()||e8.length;return e8[r]=t,e8[r+1]=1,r}};function e9(t){return this.fromWireType(L()[t>>>2>>>0])}var te={name:"emscripten::val",fromWireType:t=>{var r=e5(t);return e6(t),r},toWireType:(t,r)=>e7(r),Db:8,readValueFromPointer:e9,Eb:null};function tt(t){return eJ(t>>>0,te)}var tr=(t,r)=>{switch(r){case 4:return function(t){return this.fromWireType(V()[t>>>2>>>0])};case 8:return function(t){return this.fromWireType(G()[t>>>3>>>0])};default:throw TypeError(`invalid float width (${r}): ${t}`)}};function ti(t,r,i){i>>>=0,eJ(t>>>=0,{name:r=eZ(r>>>0),fromWireType:t=>t,toWireType:(t,r)=>r,Db:e1,readValueFromPointer:tr(r,i),Eb:null})}function ta(t,r,i,a,n){if(t>>>=0,i>>>=0,r=eZ(r>>>0),-1===n&&(n=0xffffffff),n=t=>t,0===a){var s=32-8*i;n=t=>t<<s>>>s}var o=r.includes("unsigned")?function(t,r){return r>>>0}:function(t,r){return r};eJ(t,{name:r,fromWireType:n,toWireType:o,Db:e1,readValueFromPointer:e0(r,i,0!==a),Eb:null})}function tn(t,r,i){function a(t){var r=L()[t>>>2>>>0];return t=L()[t+4>>>2>>>0],new n(D().buffer,t,r)}var n=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][r];eJ(t>>>=0,{name:i=eZ(i>>>0),fromWireType:a,Db:e1,readValueFromPointer:a},{Tb:!0})}function ts(t,r){eJ(t>>>=0,{name:r=eZ(r>>>0),fromWireType:function(t){for(var r,i=L()[t>>>2>>>0],a=t+4,n=a,s=0;s<=i;++s){var o=a+s;s!=i&&0!=P()[o>>>0]||(n=ez(n,o-n),void 0===r?r=n:(r+="\0",r+=n),n=o+1)}return rj(t),r},toWireType:function(t,r){r instanceof ArrayBuffer&&(r=new Uint8Array(r));var i="string"==typeof r;if(!(i||r instanceof Uint8Array||r instanceof Uint8ClampedArray||r instanceof Int8Array))throw new ej("Cannot pass non-string to std::string");var a=i?eR(r):r.length,n=rK(4+a+1),s=n+4;if(L()[n>>>2>>>0]=a,i)eB(r,s,a+1);else if(i)for(i=0;i<a;++i){var o=r.charCodeAt(i);if(255<o)throw rj(n),new ej("String has UTF-16 code units that do not fit in 8 bits");P()[s+i>>>0]=o}else for(i=0;i<a;++i)P()[s+i>>>0]=r[i];return null!==t&&t.push(rj,n),n},Db:e1,readValueFromPointer:e9,Eb(t){rj(t)}})}var to="u">typeof TextDecoder?new TextDecoder("utf-16le"):void 0,tu=(t,r)=>{for(var i=t>>1,a=i+r/2;!(i>=a)&&q()[i>>>0];)++i;if(32<(i<<=1)-t&&to)return to.decode(P().slice(t,i));for(i="",a=0;!(a>=r/2);++a){var n=U()[t+2*a>>>1>>>0];if(0==n)break;i+=String.fromCharCode(n)}return i},tl=(t,r,i)=>{if(2>(i??=0x7fffffff))return 0;var a=r;i=(i-=2)<2*t.length?i/2:t.length;for(var n=0;n<i;++n){var s=t.charCodeAt(n);U()[r>>>1>>>0]=s,r+=2}return U()[r>>>1>>>0]=0,r-a},td=t=>2*t.length,tp=(t,r)=>{for(var i=0,a="";!(i>=r/4);){var n=W()[t+4*i>>>2>>>0];if(0==n)break;++i,65536<=n?(n-=65536,a+=String.fromCharCode(55296|n>>10,56320|1023&n)):a+=String.fromCharCode(n)}return a},tc=(t,r,i)=>{if(r>>>=0,4>(i??=0x7fffffff))return 0;var a=r;i=a+i-4;for(var n=0;n<t.length;++n){var s=t.charCodeAt(n);if(55296<=s&&57343>=s&&(s=65536+((1023&s)<<10)|1023&t.charCodeAt(++n)),W()[r>>>2>>>0]=s,(r+=4)+4>i)break}return W()[r>>>2>>>0]=0,r-a},th=t=>{for(var r=0,i=0;i<t.length;++i){var a=t.charCodeAt(i);55296<=a&&57343>=a&&++i,r+=4}return r};function tf(t,r,i){if(t>>>=0,r>>>=0,i=eZ(i>>>=0),2===r)var a=tu,n=tl,s=td,o=t=>q()[t>>>1>>>0];else 4===r&&(a=tp,n=tc,s=th,o=t=>L()[t>>>2>>>0]);eJ(t,{name:i,fromWireType:t=>{for(var i,n=L()[t>>>2>>>0],s=t+4,u=0;u<=n;++u){var l=t+4+u*r;u!=n&&0!=o(l)||(s=a(s,l-s),void 0===i?i=s:(i+="\0",i+=s),s=l+r)}return rj(t),i},toWireType:(t,a)=>{if("string"!=typeof a)throw new ej(`Cannot pass non-string to C++ string type ${i}`);var o=s(a),u=rK(4+o+r);return L()[u>>>2>>>0]=o/r,n(a,u+4,o+r),null!==t&&t.push(rj,u),u},Db:e1,readValueFromPointer:e9,Eb(t){rj(t)}})}function tm(t,r){eJ(t>>>=0,{Ub:!0,name:r=eZ(r>>>0),Db:0,fromWireType:()=>{},toWireType:()=>{}})}function tg(t){rZ(t>>>0,!o,1,!s,131072,!1),eb()}var ty=t=>{if(!N)try{if(t(),!(0<eu))try{u?rJ(x):ec(x)}catch(t){t instanceof ea||"unwind"==t||m(0,t)}}catch(t){t instanceof ea||"unwind"==t||m(0,t)}};function t_(t){t>>>=0,"function"==typeof Atomics.kc&&(Atomics.kc(W(),t>>>2,t).value.then(tb),t+=128,Atomics.store(W(),t>>>
22,1))}var tb=()=>{var t=rF();t&&(t_(t),ty(r2))};function t$(t,r){(t>>>=0)==r>>>0?setTimeout(tb):u?postMessage({Hb:t,Cb:"checkMailbox"}):(t=eg[t])&&t.postMessage({Cb:"checkMailbox"})}var tv=[];function tw(t,r,i,a,n){for(r>>>=0,tv.length=a/=2,i=n>>>0>>>3,n=0;n<a;n++)tv[n]=A[i+2*n]?A[i+2*n+1]:G()[i+2*n+1>>>0];return(r?et[r]:rV[t])(...tv)}var tx=()=>{eu=0};function tk(t){t>>>=0,u?postMessage({Cb:"cleanupThread",ic:t}):e_(eg[t])}function tS(t){}var tT=(t,r)=>{var i=eX[t];if(void 0===i)throw i=eZ(t=rG(t)),rj(t),new ej(`${r} has unknown type ${i}`);return i},tI=(t,r,i)=>{var a=[];return t=t.toWireType(a,i),a.length&&(L()[r>>>2>>>0]=e7(a)),t};function tE(t,r,i){return r>>>=0,i>>>=0,t=e5(t>>>0),tI(r=tT(r,"emval::as"),i,t)}function tC(t,r){return r>>>=0,t=e5(t>>>0),(r=tT(r,"emval::as")).toWireType(null,t)}var tz=t=>{try{t()}catch(t){J(t)}},tA=0,tO=null,tR=0,tB=[],tN={},tM={},tD=0,tP=null,tU=[];function tq(t){return function(t){if(!N){if(0===tA){var r,i,a,n=!1,s=!1;t((t=0)=>{if(!N&&(tR=t,n=!0,s)){tA=2,tz(()=>r9(tO)),"u">typeof MainLoop&&MainLoop.Qb&&MainLoop.resume(),t=!1;try{var r,i=(r=rL[tM[r=W()[tO+8>>>2>>>0]]],--eu,r())}catch(r){i=r,t=!0}var a=!1;if(!tO){var o=tP;o&&(tP=null,(t?o.reject:o.resolve)(i),a=!0)}if(t&&!a)throw i}}),s=!0,n||(tA=1,i=(r=rK(65548))+12,L()[r>>>2>>>0]=i,L()[r+4>>>2>>>0]=i+65536,void 0===(a=tN[i=tB[0]])&&(a=tD++,tN[i]=a,tM[a]=i),i=a,W()[r+8>>>2>>>0]=i,tO=r,"u">typeof MainLoop&&MainLoop.Qb&&MainLoop.pause(),tz(()=>r5(tO)))}else 2===tA?(tA=0,tz(ie),rj(tO),tO=null,tU.forEach(ty)):J(`invalid state: ${tA}`);return tR}}(r=>{t().then(r)})}function tW(t){return t>>>=0,tq(async()=>e7(await e5(t)))}var tL=[];function tV(t,r,i,a){return i>>>=0,a>>>=0,(t=tL[t>>>0])(null,r=e5(r>>>0),i,a)}var tG={},tH=t=>{var r=tG[t];return void 0===r?eZ(t):r};function tF(t,r,i,a,n){return i>>>=0,a>>>=0,n>>>=0,(t=tL[t>>>0])(r=e5(r>>>0),r[i=tH(i)],a,n)}function tj(t,r){return r>>>=0,(t=e5(t>>>0))==e5(r)}var tK=()=>"object"==typeof globalThis?globalThis:Function("return this")();function tZ(t){return 0==(t>>>=0)?e7(tK()):(t=tH(t),e7(tK()[t]))}var tQ=t=>{var r=tL.length;return tL.push(t),r},tX=(t,r)=>{for(var i=Array(t),a=0;a<t;++a)i[a]=tT(L()[r+4*a>>>2>>>0],"parameter "+a);return i},tY=(t,r)=>Object.defineProperty(r,"name",{value:t});function tJ(t,r,i){var a=(r=tX(t,r>>>0)).shift();t--;var n=`return function (obj, func, destructorsRef, args) {
3`,s=0,o=[];0===i&&o.push("obj");for(var u=["retType"],l=[a],d=0;d<t;++d)o.push("arg"+d),u.push("argType"+d),l.push(r[d]),n+=`  var arg${d} = argType${d}.readValueFromPointer(args${s?"+"+s:""});
4`,s+=r[d].Db;return n+=`  var rv = ${1===i?"new func":"func.call"}(${o.join(", ")});
5`,a.Ub||(u.push("emval_returnValue"),l.push(tI),n+=`  return emval_returnValue(retType, destructorsRef, rv);
6`),u.push(n+`};
7`),t=(function(t){var r=Function;if(!(r instanceof Function))throw TypeError(`new_ called with constructor type ${typeof r} which is not a function`);var i=tY(r.name||"unknownFunctionName",function(){});return i.prototype=r.prototype,i=new i,(t=r.apply(i,t))instanceof Object?t:i})(u)(...l),tQ(tY(i=`methodCaller<(${r.map(t=>t.name).join(", ")}) => ${a.name}>`,t))}function t0(r){return e7(t[r=tH(r>>>0)])}function t2(t,r){return r>>>=0,e7((t=e5(t>>>0))[r=e5(r)])}function t1(t){9<(t>>>=0)&&(e8[t+1]+=1)}function t3(){return e7([])}function t4(t){t=e5(t>>>0);for(var r=Array(t.length),i=0;i<t.length;i++)r[i]=t[i];return e7(r)}function t8(t){return e7(tH(t>>>0))}function t6(){return e7({})}function t5(t){for(var r=e5(t>>>=0);r.length;){var i=r.pop();r.pop()(i)}e6(t)}function t7(t,r,i){r>>>=0,i>>>=0,t=e5(t>>>0),r=e5(r),i=e5(i),t[r]=i}function t9(t,r){return r>>>=0,e7(t=(t=tT(t>>>0,"_emval_take_value")).readValueFromPointer(r))}function re(t,r){t=-0x20000000000000>t||0x20000000000000<t?NaN:Number(t),r>>>=0,t=new Date(1e3*t),W()[r>>>2>>>0]=t.getUTCSeconds(),W()[r+4>>>2>>>0]=t.getUTCMinutes(),W()[r+8>>>2>>>0]=t.getUTCHours(),W()[r+12>>>2>>>0]=t.getUTCDate(),W()[r+16>>>2>>>0]=t.getUTCMonth(),W()[r+20>>>2>>>0]=t.getUTCFullYear()-1900,W()[r+24>>>2>>>0]=t.getUTCDay(),t=(t.getTime()-Date.UTC(t.getUTCFullYear(),0,1,0,0,0,0))/864e5|0,W()[r+28>>>2>>>0]=t}var rt=t=>t%4==0&&(t%100!=0||t%400==0),rr=[0,31,60,91,121,152,182,213,244,274,305,335],ri=[0,31,59,90,120,151,181,212,243,273,304,334];function ra(t,r){t=-0x20000000000000>t||0x20000000000000<t?NaN:Number(t),r>>>=0,t=new Date(1e3*t),W()[r>>>2>>>0]=t.getSeconds(),W()[r+4>>>2>>>0]=t.getMinutes(),W()[r+8>>>2>>>0]=t.getHours(),W()[r+12>>>2>>>0]=t.getDate(),W()[r+16>>>2>>>0]=t.getMonth(),W()[r+20>>>2>>>0]=t.getFullYear()-1900,W()[r+24>>>2>>>0]=t.getDay();var i=(rt(t.getFullYear())?rr:ri)[t.getMonth()]+t.getDate()-1|0;W()[r+28>>>2>>>0]=i,W()[r+36>>>2>>>0]=-60*t.getTimezoneOffset(),i=new Date(t.getFullYear(),6,1).getTimezoneOffset();var a=new Date(t.getFullYear(),0,1).getTimezoneOffset();t=0|(i!=a&&t.getTimezoneOffset()==Math.min(a,i)),W()[r+32>>>2>>>0]=t}function rn(t){t>>>=0;var r=new Date(W()[t+20>>>2>>>0]+1900,W()[t+16>>>2>>>0],W()[t+12>>>2>>>0],W()[t+8>>>2>>>0],W()[t+4>>>2>>>0],W()[t>>>2>>>0],0),i=W()[t+32>>>2>>>0],a=r.getTimezoneOffset(),n=new Date(r.getFullYear(),6,1).getTimezoneOffset(),s=new Date(r.getFullYear(),0,1).getTimezoneOffset(),o=Math.min(s,n);return 0>i?W()[t+32>>>2>>>0]=+(n!=s&&o==a):0<i!=(o==a)&&(n=Math.max(s,n),r.setTime(r.getTime()+6e4*((0<i?o:n)-a))),W()[t+24>>>2>>>0]=r.getDay(),i=(rt(r.getFullYear())?rr:ri)[r.getMonth()]+r.getDate()-1|0,W()[t+28>>>2>>>0]=i,W()[t>>>2>>>0]=r.getSeconds(),W()[t+4>>>2>>>0]=r.getMinutes(),W()[t+8>>>2>>>0]=r.getHours(),W()[t+12>>>2>>>0]=r.getDate(),W()[t+16>>>2>>>0]=r.getMonth(),W()[t+20>>>2>>>0]=r.getYear(),BigInt(isNaN(t=r.getTime())?-1:t/1e3)}function rs(t,r,i,a,n,s,o){return u?el(16,1,t,r,i,a,n,s,o):-52}function ro(t,r,i,a,n,s){if(u)return el(17,1,t,r,i,a,n,s)}var ru={},rl=()=>performance.timeOrigin+performance.now();function rd(t,r){if(u)return el(18,1,t,r);if(ru[t]&&(clearTimeout(ru[t].id),delete ru[t]),!r)return 0;var i=setTimeout(()=>{delete ru[t],ty(()=>r0(t,performance.timeOrigin+performance.now()))},r);return ru[t]={id:i,rc:r},0}function rp(t,r,i,a){t>>>=0,r>>>=0,i>>>=0,a>>>=0;var n=new Date().getFullYear(),s=new Date(n,0,1).getTimezoneOffset(),o=Math.max(s,n=new Date(n,6,1).getTimezoneOffset());L()[t>>>2>>>0]=60*o,W()[r>>>2>>>0]=+(s!=n),t=(r=t=>{var r=Math.abs(t);return`UTC${0<=t?"-":"+"}${String(Math.floor(r/60)).padStart(2,"0")}${String(r%60).padStart(2,"0")}`})(s),r=r(n),n<s?(eB(t,i,17),eB(r,a,17)):(eB(t,a,17),eB(r,i,17))}var rc=()=>Date.now();function rh(t,r,i){return 0<=t&&3>=t?(t=0===t?Date.now():performance.timeOrigin+performance.now(),A[i>>>0>>>3]=BigInt(Math.round(1e6*t)),0):28}var rf=[],rm=(t,r)=>{rf.length=0;for(var i;i=P()[t++>>>0];){var a=105!=i;r+=(a&=112!=i)&&r%8?4:0,rf.push(112==i?L()[r>>>2>>>0]:106==i?A[r>>>3]:105==i?W()[r>>>2>>>0]:G()[r>>>3>>>
70]),r+=a?8:4}return rf};function rg(t,r,i){return t>>>=0,r=rm(r>>>0,i>>>0),et[t](...r)}function ry(t,r,i){return t>>>=0,r=rm(r>>>0,i>>>0),et[t](...r)}var r_=()=>{};function rb(t,r){return $(ez(t>>>0,r>>>0))}var r$=()=>{throw eu+=1,"unwind"};function rv(){return 0xffff0000}var rw=()=>navigator.hardwareConcurrency;function rx(){return J("Cannot use emscripten_pc_get_function without -sUSE_OFFSET_CONVERTER"),0}function rk(t){t>>>=0;var r=P().length;if(t<=r||0xffff0000<t)return!1;for(var i=1;4>=i;i*=2){var a=r*(1+.2/i);a=Math.min(a,t+0x6000000);e:{a=(Math.min(0xffff0000,65536*Math.ceil(Math.max(t,a)/65536))-v.buffer.byteLength+65535)/65536|0;try{v.grow(a),j();var n=1;break e}catch{}n=void 0}if(n)return!0}return!1}var rS=()=>(J("Cannot use convertFrameToPC (needed by __builtin_return_address) without -sUSE_OFFSET_CONVERTER"),0),rT={},rI=t=>{t.forEach(t=>{var r=rS();r&&(rT[r]=t)})};function rE(){var t=Error().stack.toString().split(`
8`);return"Error"==t[0]&&t.shift(),rI(t),rT.Mb=rS(),rT.dc=t,rT.Mb}function rC(t,r,i){if(t>>>=0,r>>>=0,rT.Mb==t)var a=rT.dc;else"Error"==(a=Error().stack.toString().split(`
9`))[0]&&a.shift(),rI(a);for(var n=3;a[n]&&rS()!=t;)++n;for(t=0;t<i&&a[t+n];++t)W()[r+4*t>>>2>>>0]=rS();return t}var rz,rA={},rO=()=>{if(!rz){var t,r={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:"./this.program"};for(t in rA)void 0===rA[t]?delete r[t]:r[t]=rA[t];var i=[];for(t in r)i.push(`${t}=${r[t]}`);rz=i}return rz};function rR(t,r){if(u)return el(19,1,t,r);t>>>=0,r>>>=0;var i=0;return rO().forEach((a,n)=>{var s=r+i;for(n=L()[t+4*n>>>2>>>0]=s,s=0;s<a.length;++s)D()[n++>>>0]=a.charCodeAt(s);D()[n>>>0]=0,i+=a.length+1}),0}function rB(t,r){if(u)return el(20,1,t,r);t>>>=0,r>>>=0;var i=rO();L()[t>>>2>>>0]=i.length;var a=0;return i.forEach(t=>a+=t.length+1),L()[r>>>2>>>0]=a,0}function rN(t){return u?el(21,1,t):52}function rM(t,r,i,a){return u?el(22,1,t,r,i,a):52}function rD(t,r,i,a){return u?el(23,1,t,r,i,a):70}var rP=[null,[],[]];function rU(t,r,i,a){if(u)return el(24,1,t,r,i,a);r>>>=0,i>>>=0,a>>>=0;for(var n=0,s=0;s<i;s++){var o=L()[r>>>2>>>0],l=L()[r+4>>>2>>>0];r+=8;for(var d=0;d<l;d++){var p=P()[o+d>>>0],c=rP[t];0===p||10===p?((1===t?b:$)(eC(c)),c.length=0):c.push(p)}n+=l}return L()[a>>>2>>>0]=n,0}u||function(){for(var r=t.numThreads-1;r--;)ev();es.unshift(()=>{var t;Q++,t=()=>Y(),u?t():Promise.all(eh.map(e$)).then(t)})}();for(var rq=Array(256),rW=0;256>rW;++rW)rq[rW]=String.fromCharCode(rW);eF=rq,ej=t.BindingError=class extends Error{constructor(t){super(t),this.name="BindingError"}},t.InternalError=class extends Error{constructor(t){super(t),this.name="InternalError"}},e8.push(0,1,void 0,1,null,1,!0,1,!1,1),t.count_emval_handles=()=>e8.length/2-5-e4.length;var rL,rV=[ed,ep,eT,eA,eO,eN,eM,eD,eP,eU,eq,eW,eL,eV,eG,eH,rs,ro,rd,rR,rB,rN,rM,rD,rU];!async function(){function r(t,r){var i,a,n;return rL=t.exports,i=rL=function(){var t={};for(let[r,i]of Object.entries(rL))t[r]="function"==typeof i?(...t)=>{tB.push(r);try{return i(...t)}finally{N||(tB.pop(),tO&&1===tA&&0===tB.length&&(tA=0,eu+=1,tz(r7),"u">typeof Fibers&&Fibers.sc()))}}:i;return t}(),a=t=>r=>t(r)>>>0,n=t=>()=>t()>>>0,(i=Object.assign({},i)).Ea=a(i.Ea),i.gb=n(i.gb),i.ib=a(i.ib),i.ub=a(i.ub),i.vb=n(i.vb),i.__cxa_get_exception_ptr=a(i.__cxa_get_exception_ptr),rL=i,em.push(rL.jb),w=r,Y(),rL}Q++;var n=ee();if(t.instantiateWasm)return new Promise(i=>{t.instantiateWasm(n,(t,a)=>{r(t,a),i(t.exports)})});if(u)return new Promise(t=>{H=i=>{t(r(new WebAssembly.Instance(i,ee()),i))}});Z??=t.locateFile?t.locateFile?t.locateFile("ort-wasm-simd-threaded.jsep.wasm",g):g+"ort-wasm-simd-threaded.jsep.wasm":new i.U(i(47759)).href;try{var s=await async function(t){if(!B&&"function"==typeof WebAssembly.instantiateStreaming&&!M(Z))try{var r=fetch(Z,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(r,t)}catch(t){$(`wasm streaming compile failed: ${t}`),$("falling back to ArrayBuffer instantiation")}return async function(t,r){try{var i=await async function(t){if(!B)try{var r=await c(t);return new Uint8Array(r)}catch{}if(t==Z&&B)t=new Uint8Array(B);else{if(!h)throw"both async and sync fetching of the wasm failed";t=h(t)}return t}(t);return await WebAssembly.instantiate(i,r)}catch(t){$(`failed to asynchronously prepare wasm: ${t}`),J(t)}}(Z,t)}(n);r(s.instance,s.module)}catch(t){return a(t),Promise.reject(t)}}();var rG=t=>(rG=rL.Ea)(t),rH=()=>(rH=rL.Fa)();t._OrtInit=(r,i)=>
vendor: 2,669 bytes, line 9
9(t._OrtInit=rL.Ga)(r,i),t._OrtGetLastError=(r,i)=>(t._OrtGetLastError=rL.Ha)(r,i),t._OrtCreateSessionOptions=(r,i,a,n,s,o,u,l,d,p)=>(t._OrtCreateSessionOptions=rL.Ia)(r,i,a,n,s,o,u,l,d,p),t._OrtAppendExecutionProvider=(r,i,a,n,s)=>(t._OrtAppendExecutionProvider=rL.Ja)(r,i,a,n,s),t._OrtAddFreeDimensionOverride=(r,i,a)=>(t._OrtAddFreeDimensionOverride=rL.Ka)(r,i,a),t._OrtAddSessionConfigEntry=(r,i,a)=>(t._OrtAddSessionConfigEntry=rL.La)(r,i,a),t._OrtReleaseSessionOptions=r=>(t._OrtReleaseSessionOptions=rL.Ma)(r),t._OrtCreateSession=(r,i,a)=>(t._OrtCreateSession=rL.Na)(r,i,a),t._OrtReleaseSession=r=>(t._OrtReleaseSession=rL.Oa)(r),t._OrtGetInputOutputCount=(r,i,a)=>(t._OrtGetInputOutputCount=rL.Pa)(r,i,a),t._OrtGetInputOutputMetadata=(r,i,a,n)=>(t._OrtGetInputOutputMetadata=rL.Qa)(r,i,a,n),t._OrtFree=r=>(t._OrtFree=rL.Ra)(r),t._OrtCreateTensor=(r,i,a,n,s,o)=>(t._OrtCreateTensor=rL.Sa)(r,i,a,n,s,o),t._OrtGetTensorData=(r,i,a,n,s)=>(t._OrtGetTensorData=rL.Ta)(r,i,a,n,s),t._OrtReleaseTensor=r=>(t._OrtReleaseTensor=rL.Ua)(r),t._OrtCreateRunOptions=(r,i,a,n)=>(t._OrtCreateRunOptions=rL.Va)(r,i,a,n),t._OrtAddRunConfigEntry=(r,i,a)=>(t._OrtAddRunConfigEntry=rL.Wa)(r,i,a),t._OrtReleaseRunOptions=r=>(t._OrtReleaseRunOptions=rL.Xa)(r),t._OrtCreateBinding=r=>(t._OrtCreateBinding=rL.Ya)(r),t._OrtBindInput=(r,i,a)=>(t._OrtBindInput=rL.Za)(r,i,a),t._OrtBindOutput=(r,i,a,n)=>(t._OrtBindOutput=rL._a)(r,i,a,n),t._OrtClearBoundOutputs=r=>(t._OrtClearBoundOutputs=rL.$a)(r),t._OrtReleaseBinding=r=>(t._OrtReleaseBinding=rL.ab)(r),t._OrtRunWithBinding=(r,i,a,n,s)=>(t._OrtRunWithBinding=rL.bb)(r,i,a,n,s),t._OrtRun=(r,i,a,n,s,o,u,l)=>(t._OrtRun=rL.cb)(r,i,a,n,s,o,u,l),t._OrtEndProfiling=r=>(t._OrtEndProfiling=rL.db)(r),t._JsepOutput=(r,i,a)=>(t._JsepOutput=rL.eb)(r,i,a),t._JsepGetNodeName=r=>(t._JsepGetNodeName=rL.fb)(r);var rF=()=>(rF=rL.gb)(),rj=t._free=r=>(rj=t._free=rL.hb)(r),rK=t._malloc=r=>(rK=t._malloc=rL.ib)(r),rZ=(t,r,i,a,n,s)=>(rZ=rL.lb)(t,r,i,a,n,s),rQ=()=>(rQ=rL.mb)(),rX=(t,r,i,a,n)=>(rX=rL.nb)(t,r,i,a,n),rY=t=>(rY=rL.ob)(t),rJ=t=>(rJ=rL.pb)(t),r0=(t,r)=>(r0=rL.qb)(t,r),r2=()=>(r2=rL.rb)(),r1=(t,r)=>(r1=rL.sb)(t,r),r3=t=>(r3=rL.tb)(t),r4=t=>(r4=rL.ub)(t),r8=()=>(r8=rL.vb)(),r6=t.dynCall_ii=(r,i)=>(r6=t.dynCall_ii=rL.wb)(r,i),r5=t=>(r5=rL.xb)(t),r7=()=>(r7=rL.yb)(),r9=t=>(r9=rL.zb)(t),ie=()=>(ie=rL.Ab)();return t.stackSave=()=>r8(),t.stackRestore=t=>r3(t),t.stackAlloc=t=>r4(t),t.setValue=function(t,r,i="i8"){switch(i.endsWith("*")&&(i="*"),i){case"i1":case"i8":D()[t>>>0]=r;break;case"i16":U()[t>>>1>>>0]=r;break;case"i32":W()[t>>>2>>>0]=r;break;case"i64":A[t>>>3]=BigInt(r);break;case"float":V()[t>>>2>>>0]=r;break;case"double":G()[t>>>3>>>
90]=r;break;case"*":L()[t>>>2>>>0]=r;break;default:J(`invalid type for setValue: ${i}`)}},t.getValue=function(t,r="i8"){switch(r.endsWith("*")&&(r="*"),r){case"i1":case"i8":return D()[t>>>0];case"i16":return U()[t>>>1>>>0];case"i32":return W()[t>>>2>>>0];case"i64":return A[t>>>3];case"float":return V()[t>>>2>>>0];case"double":return G()[t>>>3>>>0];case"*":return L()[t>>>2>>>0];default:J(`invalid type for getValue: ${r}`)}},t.UTF8ToString=ez,t.stringToUTF8=eB,t.lengthBytesUTF8=eR,function i(){if(0<Q)X=i;else if(u)r(t),K();else{for(;0<es.length;)es.shift()(t);0<Q?X=i:(t.calledRun=!0,N||(K(),r(t)))}}(),t.PTR_SIZE=4,n},globalThis.self?.name?.startsWith("em-pthread")&&e_()}),oV=q(()=>{ed(),e$=typeof location>"u"?void 0:location.origin,ew=(ev=!0,URL,new URL(new i.U(i(39819)).href,e$).href),ex=()=>{if(ew&&!ew.startsWith("blob:"))return ew.substring(0,ew.lastIndexOf("/")+1)},ek=(t,r)=>{try{let i=r??ew;return(i?new URL(t,i):new URL(t)).origin===e$}catch{return!1}},eS=(t,r)=>{let i=r??ew;try{return(i?new URL(t,i):new URL(t)).href}catch{return}},eT=(t,r)=>`${r??"./"}${t}`,eI=async t=>{let r=await (await fetch(t,{credentials:"same-origin"})).blob();return URL.createObjectURL(r)},eE=async t=>(await import(t)).default,eC=(em(),V(ep)).default,ez=async()=>{if(!ew)throw Error("Failed to load proxy worker: cannot determine the script source URL.");if(ek(ew))return[void 0,eC()];let t=await eI(ew);return[t,eC(t)]},eA=(oL(),V(eg)).default,eO=async(t,r,i)=>{if(!t&&!r&&eA&&ew&&ek(ew))return[void 0,eA];{let a="ort-wasm-simd-threaded.jsep.mjs",n=t??eS(a,r),s=i&&n&&!ek(n,r),o=s?await eI(n):n??eT(a,r);return[s?o:void 0,await eE(o)]}}}),oG=q(()=>{oV(),eB=!1,eN=!1,eM=!1,eD=()=>{if(typeof SharedArrayBuffer>"u")return!1;try{return"u">typeof MessageChannel&&new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]))}catch{return!1}},eP=()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,30,1,28,0,65,0,253,15,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,186,1,26,11]))}catch{return!1}},eU=()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,19,1,17,0,65,1,253,15,65,2,253,15,65,3,253,15,253,147,2,11]))}catch{return!1}},eq=async t=>{if(eB)return Promise.resolve();if(eN)throw Error("multiple calls to 'initializeWebAssembly()' detected.");if(eM)throw Error("previous call to 'initializeWebAssembly()' failed.");eN=!0;let r=t.initTimeout,i=t.numThreads;if(!1!==t.simd){if("relaxed"===t.simd){if(!eU())throw Error("Relaxed WebAssembly SIMD is not supported in the current environment.")}else if(!eP())throw Error("WebAssembly SIMD is not supported in the current environment.")}let a=eD();i>1&&!a&&("u">typeof self&&!self.crossOriginIsolated&&console.warn("env.wasm.numThreads is set to "+i+", but this will not work unless you enable crossOriginIsolated mode. See https://web.dev/cross-origin-isolation-guide/ for more info."),console.warn("WebAssembly multi-threading is not supported in the current environment. Falling back to single-threading."),t.numThreads=i=1);let n=t.wasmPaths,s="string"==typeof n?n:void 0,o=n?.mjs,u=o?.href??o,l=n?.wasm,d=l?.href??l,p=t.wasmBinary,[c,h]=await eO(u,s,i>1),f=!1,m=[];if(r>0&&m.push(new Promise(t=>{setTimeout(()=>{f=!0,t()},r)})),m.push(new Promise((t,r)=>{let a={numThreads:i};if(p)a.wasmBinary=p;else if(d||s)a.locateFile=t=>d??s+t;else if(u&&0!==u.indexOf("blob:"))a.locateFile=t=>new URL(t,u).href;else if(c){let t=ex();t&&(a.locateFile=r=>t+r)}h(a).then(r=>{eN=!1,eB=!0,eR=r,t(),c&&URL.revokeObjectURL(c)},t=>{eN=!1,eM=!0,r(t)})})),await Promise.race(m),f)throw Error(`WebAssembly backend initializing failed due to timeout: ${r}ms`)},eW=()=>{if(eB&&eR)return eR;throw Error("WebAssembly is not initialized yet.")}}),oH=q(()=>{oG(),eL=(t,r)=>{let i=eW(),a=i.lengthBytesUTF8(t)+1,n=i._malloc(a);return i.stringToUTF8(t,n,a),r.push(n),n},eV=(t,r,i,a)=>{if("object"==typeof t&&null!==t){if(i.has(t))throw Error("Circular reference in options");
9i.add(t)}Object.entries(t).forEach(([t,n])=>{let s=r?r+t:t;if("object"==typeof n)eV(n,s+".",i,a);else if("string"==typeof n||"number"==typeof n)a(s,n.toString());else if("boolean"==typeof n)a(s,n?"1":"0");else throw Error(`Can't handle extra config type: ${typeof n}`)})},eG=t=>{let r=eW(),i=r.stackSave();try{let i=r.PTR_SIZE,a=r.stackAlloc(2*i);r._OrtGetLastError(a,a+i);let n=Number(r.getValue(a,4===i?"i32":"i64")),s=r.getValue(a+i,"*"),o=s?r.UTF8ToString(s):"";throw Error(`${t} ERROR_CODE: ${n}, ERROR_MESSAGE: ${o}`)}finally{r.stackRestore(i)}}}),oF=q(()=>{oG(),oH(),eH=t=>{let r=eW(),i=0,a=[],n=t||{};try{if(t?.logSeverityLevel===void 0)n.logSeverityLevel=2;else if("number"!=typeof t.logSeverityLevel||!Number.isInteger(t.logSeverityLevel)||t.logSeverityLevel<0||t.logSeverityLevel>4)throw Error(`log serverity level is not valid: ${t.logSeverityLevel}`);if(t?.logVerbosityLevel===void 0)n.logVerbosityLevel=0;else if("number"!=typeof t.logVerbosityLevel||!Number.isInteger(t.logVerbosityLevel))throw Error(`log verbosity level is not valid: ${t.logVerbosityLevel}`);t?.terminate===void 0&&(n.terminate=!1);let s=0;return t?.tag!==void 0&&(s=eL(t.tag,a)),i=r._OrtCreateRunOptions(n.logSeverityLevel,n.logVerbosityLevel,!!n.terminate,s),0===i&&eG("Can't create run options."),t?.extra!==void 0&&eV(t.extra,"",new WeakSet,(t,n)=>{let s=eL(t,a),o=eL(n,a);0!==r._OrtAddRunConfigEntry(i,s,o)&&eG(`Can't set a run config entry: ${t} - ${n}.`)}),[i,a]}catch(t){throw 0!==i&&r._OrtReleaseRunOptions(i),a.forEach(t=>r._free(t)),t}}}),oj=q(()=>{oG(),oH(),eF=t=>{switch(t){case"disabled":return 0;case"basic":return 1;case"extended":return 2;case"all":return 99;default:throw Error(`unsupported graph optimization level: ${t}`)}},ej=t=>{switch(t){case"sequential":return 0;case"parallel":return 1;default:throw Error(`unsupported execution mode: ${t}`)}},eK=t=>{t.extra||(t.extra={}),t.extra.session||(t.extra.session={});let r=t.extra.session;r.use_ort_model_bytes_directly||(r.use_ort_model_bytes_directly="1"),t.executionProviders&&t.executionProviders.some(t=>("string"==typeof t?t:t.name)==="webgpu")&&(t.enableMemPattern=!1)},eZ=(t,r,i,a)=>{let n=eL(r,a),s=eL(i,a);0!==eW()._OrtAddSessionConfigEntry(t,n,s)&&eG(`Can't set a session config entry: ${r} - ${i}.`)},eQ=async(t,r,i)=>{for(let a of r){let r="string"==typeof a?a:a.name,n=[];switch(r){case"webnn":if(r="WEBNN","string"!=typeof a){let r=a?.deviceType;r&&eZ(t,"deviceType",r,i)}break;case"webgpu":if(r="JS","string"!=typeof a&&a?.preferredLayout){if("NCHW"!==a.preferredLayout&&"NHWC"!==a.preferredLayout)throw Error(`preferredLayout must be either 'NCHW' or 'NHWC': ${a.preferredLayout}`);eZ(t,"preferredLayout",a.preferredLayout,i)}break;case"wasm":case"cpu":continue;default:throw Error(`not supported execution provider: ${r}`)}let s=eL(r,i),o=n.length,u=0,l=0;if(o>0){u=eW()._malloc(o*eW().PTR_SIZE),i.push(u),l=eW()._malloc(o*eW().PTR_SIZE),i.push(l);for(let t=0;t<o;t++)eW().setValue(u+t*eW().PTR_SIZE,n[t][0],"*"),eW().setValue(l+t*eW().PTR_SIZE,n[t][1],"*")}await eW()._OrtAppendExecutionProvider(t,s,u,l,o)!==0&&eG(`Can't append execution provider: ${r}.`)}},eX=async t=>{let r=eW(),i=0,a=[],n=t||{};eK(n);try{let t=eF(n.graphOptimizationLevel??"all"),s=ej(n.executionMode??"sequential"),o="string"==typeof n.logId?eL(n.logId,a):0,u=n.logSeverityLevel??2;if(!Number.isInteger(u)||u<0||u>4)throw Error(`log serverity level is not valid: ${u}`);let l=n.logVerbosityLevel??0;if(!Number.isInteger(l)||l<0||l>4)throw Error(`log verbosity level is not valid: ${l}`);let d="string"==typeof n.optimizedModelFilePath?eL(n.optimizedModelFilePath,a):0;if(i=r._OrtCreateSessionOptions(t,!!n.enableCpuMemArena,!!n.enableMemPattern,s,!!n.enableProfiling,0,o,u,l,d),0===i&&eG("Can't create session options."),n.executionProviders&&await eQ(i,n.executionProviders,a),void 0!==n.enableGraphCapture){if("boolean"!=typeof n.enableGraphCapture)throw Error(`enableGraphCapture must be a boolean value: ${n.enableGraphCapture}`);eZ(i,"enableGraphCapture",n.enableGraphCapture.toString(),a)}if(n.freeDimensionOverrides)for(let[t,s]of Object.entries(n.freeDimensionOverrides)){if("string"!=typeof t)throw Error(`free dimension override name must be a string: ${t}`);if("number"!=typeof s||!Number.isInteger(s)||s<0)throw Error(`free dimension override value must be a non-negative integer: ${s}`);let n=eL(t,a);0!==r._OrtAddFreeDimensionOverride(i,n,s)&&eG(`Can't set a free dimension override: ${t} - ${s}.`)}return void 0!==n.extra&&eV(n.extra,"",new WeakSet,(t,r)=>{eZ(i,t,r,a)}),[i,a]}catch(t){throw 0!==i&&0!==r._OrtReleaseSessionOptions(i)&&eG("Can't release session options."),a.forEach(t=>r._free(t)),t}}}),oK=q(()=>{eY=t=>{switch(t){case"int8":return 3;case"uint8":return 2;case"bool":return 9;
9case"int16":return 5;case"uint16":return 4;case"int32":return 6;case"uint32":return 12;case"float16":return 10;case"float32":return 1;case"float64":return 11;case"string":return 8;case"int64":return 7;case"uint64":return 13;case"int4":return 22;case"uint4":return 21;default:throw Error(`unsupported data type: ${t}`)}},eJ=t=>{switch(t){case 3:return"int8";case 2:return"uint8";case 9:return"bool";case 5:return"int16";case 4:return"uint16";case 6:return"int32";case 12:return"uint32";case 10:return"float16";case 1:return"float32";case 11:return"float64";case 8:return"string";case 7:return"int64";case 13:return"uint64";case 22:return"int4";case 21:return"uint4";default:throw Error(`unsupported data type: ${t}`)}},e0=(t,r)=>{let i=[-1,4,1,1,2,2,4,8,-1,1,2,8,4,8,-1,-1,-1,-1,-1,-1,-1,.5,.5][t],a="number"==typeof r?r:r.reduce((t,r)=>t*r,1);return i>0?Math.ceil(a*i):void 0},e2=t=>{switch(t){case"float16":return"u">typeof Float16Array&&Float16Array.from?Float16Array:Uint16Array;case"float32":return Float32Array;case"uint8":case"bool":return Uint8Array;case"int8":return Int8Array;case"uint16":return Uint16Array;case"int16":return Int16Array;case"int32":return Int32Array;case"float64":return Float64Array;case"uint32":return Uint32Array;case"int64":return BigInt64Array;case"uint64":return BigUint64Array;default:throw Error(`unsupported type: ${t}`)}},e1=t=>{switch(t){case"verbose":return 0;case"info":return 1;case"warning":return 2;case"error":return 3;case"fatal":return 4;default:throw Error(`unsupported logging level: ${t}`)}},e3=t=>"float32"===t||"float16"===t||"int32"===t||"int64"===t||"uint32"===t||"uint8"===t||"bool"===t||"uint4"===t||"int4"===t,e4=t=>"float32"===t||"float16"===t||"int32"===t||"int64"===t||"uint32"===t||"uint64"===t||"int8"===t||"uint8"===t||"bool"===t||"uint4"===t||"int4"===t,e8=t=>{switch(t){case"none":return 0;case"cpu":return 1;case"cpu-pinned":return 2;case"texture":return 3;case"gpu-buffer":return 4;case"ml-tensor":return 5;default:throw Error(`unsupported data location: ${t}`)}}}),oZ=q(()=>{ed(),e6=async t=>{if("string"!=typeof t)return t instanceof Blob?new Uint8Array(await t.arrayBuffer()):t instanceof Uint8Array?t:new Uint8Array(t);{let r=await fetch(t);if(!r.ok)throw Error(`failed to load external data file: ${t}`);let i=r.headers.get("Content-Length"),a=i?parseInt(i,10):0;if(a<0x40000000)return new Uint8Array(await r.arrayBuffer());{if(!r.body)throw Error(`failed to load external data file: ${t}, no response body.`);let i=r.body.getReader(),n;try{n=new ArrayBuffer(a)}catch(t){if(t instanceof RangeError){let t=Math.ceil(a/65536);n=new WebAssembly.Memory({initial:t,maximum:t}).buffer}else throw t}let s=0;for(;;){let{done:t,value:r}=await i.read();if(t)break;let a=r.byteLength;new Uint8Array(n,s,a).set(r),s+=a}return new Uint8Array(n,0,a)}}}}),oQ=q(()=>{oK(),e5=["V","I","W","E","F"],e7=(t,r)=>{console.log(`[${e5[t]},${new Date().toISOString()}]${r}`)},tt=(t,r)=>{e9=t,te=r},tr=(t,r)=>{let i=e1(t);i>=e1(e9)&&e7(i,"function"==typeof r?r():r)},ti=(...t)=>{te&&tr(...t)}}),oX=q(()=>{ta=class{static calcMatMulShape(t,r){return t[1]!==r[0]?void 0:[t[0],r[1]]}},tn=class{static calcShape(t,r,i=!1){let a=t.length,n=r.length;if(0===a)return r;if(0===n)return t;let s=Math.max(t.length,r.length),o=Array(s);if(i){if(a<2||n<2)return;let i=ta.calcMatMulShape([t[a-2],t[a-1]],[r[n-2],r[n-1]]);if(void 0===i)return;[o[s-2],o[s-1]]=i}for(let u=i?3:1;u<=s;u++){let i=a-u<0?1:t[a-u],l=n-u<0?1:r[n-u];if(i!==l&&i>1&&l>1)return;let d=Math.max(i,l);if(i&&l)o[s-u]=Math.max(i,l);else{if(d>1)return;o[s-u]=0}}return o}static isValidBroadcast(t,r){let i=t.length,a=r.length;if(i>a)return!1;for(let n=1;n<=i;n++)if(1!==t[i-n]&&t[i-n]!==r[a-n])return!1;return!0}},ts=class t{static size(r){return t.getSizeFromDimensionRange(r,0,r.length)}static convertShape(t,r=4){let i=t.length;if(0===i)return[];let a=Array(i),n=i-1;for(;n>=0;){if(t[n]%r==0){a[n]=t[n]/r;break}if(r%t[n]!=0)throw Error("cannot convert shape");a[n]=1,r/=t[n],n--}for(n--;n>=0;n--)a[n]=t[n];return a}static sizeFromDimension(r,i){if(i<0||i>r.length)throw Error(`invalid dimension of ${i} for sizeFromDimension as Tensor has ${r.length} dimensions.`);return t.getSizeFromDimensionRange(r,i,r.length)}static sizeToDimension(r,i){if(i<0||i>r.length)throw Error(`invalid dimension of ${i} for sizeToDimension as Tensor has ${r.length} dimensions.`);return t.getSizeFromDimensionRange(r,0,i)}static getSizeFromDimensionRange(t,r,i){let a=1;for(let n=r;n<i;n++){if(t[n]<0)throw Error("cannot get valid size from specified dimension range. Most likely the range contains 
9negative values in them.");a*=Number(t[n])}return a}static computeStrides(t){let r=t.length;if(0===r)return[];if(1===r)return[1];let i=Array(r);i[r-1]=1,i[r-2]=t[r-1];for(let a=r-3;a>=0;--a)i[a]=i[a+1]*t[a+1];return i}static normalizeAxis(t,r){if(t<-r&&t>=r)throw Error("unsupported axis for this operation.");return t<0?t+r:t}static normalizeAxes(t,r){return t.map(i=>this.normalizeAxis(i,r??t.length))}static sortBasedOnPerm(t,r){return r?r.map(r=>t[r]):t.slice().reverse()}static padShape(t,r){let i=t.length;return t.map((t,a)=>t+r[a]+r[a+i])}static areEqual(t,r){return t.length===r.length&&t.every((t,i)=>t===r[i])}},to=class t{static adjustPoolAttributes(t,r,i,a,n,s){if(!t&&i.length!==r.length-2)throw Error("length of specified kernel shapes should be 2 less than length of input dimensions");if(t)for(let t=0;t<r.length-2;t++)t>=i.length?i.push(r[t+2]):i[t]=r[t+2];for(let t=0;t<i.length;t++)if(t<a.length){if(a[t]<0)throw Error("strides should be greater than or equal to 1")}else a.push(1);for(let t=0;t<i.length;t++)if(t<n.length){if(n[t]<0)throw Error("dilations should be greater than or equal to 1")}else n.push(1);for(let t=0;t<2*i.length;t++)if(t<s.length){if(s[t]<0)throw Error("pad should be greater than or equal to 1")}else s.push(0);for(let t=0;t<i.length;t++){if(i[t]<=0)throw Error("kernel shapes need to be greater than 0");if(s[t]>=i[t]||s[t+i.length]>=i[t])throw Error("pads should be smaller than kernel")}}static adjustPadsBasedOnAutoPad(r,i,a,n,s,o,u){if(u){if(s.length!==2*(r.length-2))throw Error("length of pads should be twice the length of data dimensions");if(i.length!==r.length-2)throw Error("length of strides should be the length of data dimensions");if(n.length!==r.length-2)throw Error("length of kernel shapes should be the length of data dimensions");for(let l=0;l<r.length-2;l++)t.adjustPadAndReturnShape(r[l+(o?1:2)],i[l],a[l],n[l],s,l,l+r.length-2,u)}}static computePoolOutputShape(r,i,a,n,s,o,u){if(i.length<=0)throw Error("input shape must be of size greater than 0");let l=[i[0],i[1]];return t.computeShapeHelper(r,i,l,a,n,s,o,u),l}static computeConvOutputShape(r,i,a,n,s,o,u){if(r.length<=0||i.length<=0)throw Error("invalid input tensor dims or invalid filter tensor dims");let l=[r[0],i[0]];return t.computeShapeHelper(!1,r,l,a,n,s,o,u),l}static computeShapeHelper(r,i,a,n,s,o,u,l){if(r)for(let t=0;t<i.length-2;t++)a.push(1);else for(let r=0;r<i.length-2;r++)a.push(t.adjustPadAndReturnShape(i[r+2],n[r],s[r],o[r],u,r,r+i.length-2,l))}static adjustPadAndReturnShape(t,r,i,a,n,s,o,u){let l=i*(a-1)+1;if(!u||"NOTSET"===u)return Math.floor((t+n[s]+n[o]-l)/r+1);switch(u){case"VALID":return n[s]=0,n[o]=0,Math.floor((t-l)/r+1);case"SAME_LOWER":case"SAME_UPPER":if(1!==i)throw Error("Dilation not supported for SAME_UPPER or SAME_LOWER");{let i=((t+r-1)/r-1)*r+a-t;return n[s]=Math.floor("SAME_LOWER"===u?(i+1)/2:i/2),n[o]=i-n[s],Math.floor((t+i-a)/r+1)}default:throw Error("Unsupported AutoPad type")}}},tu=class{static getShapeOfGemmResult(t,r,i,a,n){let s,o,u;if(2!==t.length||2!==i.length)throw Error("shape need to be of size 2");r?(s=t[1],o=t[0]):(s=t[0],o=t[1]);let l=-1;if(a?(u=i[0],l=1):(u=i[1],l=0),i[l]!==o)throw Error("dimension mismatch");if(s<=0||u<=0||o<=0)throw Error("invalid shape specified");if(n&&!tn.isValidBroadcast(n,[s,u]))throw Error("gemm: invalid bias shape for broadcast");return[s,u,o]}},tl=-34028234663852886e22,td=34028234663852886e22}),oY=q(()=>{oK(),tp=(t,r)=>new(e2(r))(t)}),oJ=q(()=>{oK(),oQ(),tc=new Map([["float32",32],["float16",16],["int32",32],["uint32",32],["int64",64],["uint64",64],["int8",8],["uint8",8],["int4",4],["uint4",4]]),th=(t,r)=>{if("int32"===r)return t;let i=tc.get(r);if(!i)throw Error(`WebNN backend does not support data type: ${r}`);let a=i/8;if(t.byteLength%a!=0)throw Error(`Invalid Uint8Array length - must be a multiple of ${a}.`);let n=t.byteLength/a,s=new(e2(r))(t.buffer,t.byteOffset,n);switch(r){case"int64":case"uint64":{let t=new Int32Array(n);for(let r=0;r<n;r++){let i=s[r];if(i>2147483647n||i<-2147483648n)throw Error("Can not convert int64 data to int32 - value out of range.");t[r]=Number(i)}return new Uint8Array(t.buffer)}case"int8":case"uint8":case"uint32":if("uint32"===r&&s.some(t=>t>0x7fffffff))throw Error("Can not convert uint32 data to int32 - value out of range.");return new Uint8Array(Int32Array.from(s,Number).buffer);default:throw Error(`Unsupported data conversion from ${r} to 'int32'`)}},tf=(t,r)=>{if("int32"===r)return t;if(t.byteLength%4!=0)throw Error("Invalid Uint8Array length - must be a multiple of 4 (int32).");let i=t.byteLength/4,a=new Int32Array(t.buffer,t.byteOffset,i);switch(r){case"int64":return new Uint8Array(BigInt64Array.from(a,BigInt).buffer);case"uint64":if(a.some(t=>t<0))throw Error("Can not convert int32 data to uin64 - negative value found.");return new Uint8Array(BigUint64Array.from(a,BigInt).buffer);case"int8":if(a.some(t=>t<-128||t>127))throw Error("Can not convert int32 data to int8 - value out of range.");return new Uint8Array(Int8Array.from(a,Number).buffer);case"uint8":if(a.some(t=>t<0||t>255))throw Error("Can not convert int32 data to uint8 - value out of range.");return Uint8Array.from(a,Number);case"uint32":if(a.some(t=>t<0))throw Error("Can not convert int32 data to uint32 - negative value found.");return new Uint8Array(Uint32Array.from(a,Number).buffer);default:throw Error(`Unsupported data conversion from 'int32' to ${r}`)}},tm=1,tg=()=>tm++,ty=new Map([["int8","int32"],["uint8","int32"],["uint32","int32"],["int64","int32"]]),t_=(t,r)=>{let i=tc.get(t);if(!i)throw Error(`WebNN backend does not support data type: ${t}`);return r.length>0?Math.ceil(r.reduce((t,r)=>t*r)*i/8):0},tb=class{constructor(t){this.isDataConverted=!1;let{sessionId:r,context:i,tensor:a,dataType:n,shape:s,fallbackDataType:o}=t;this.sessionId=r,this.mlContext=i,this.mlTensor=a,this.dataType=n,this.tensorShape=s,this.fallbackDataType=o}get tensor(){return this.mlTensor}get type(){return this.dataType}get fallbackType(){return this.fallbackDataType}get shape(){return this.tensorShape}get byteLength(){return t_(this.dataType,this.tensorShape)}destroy(){ti("verbose",()=>"[WebNN] TensorWrapper.destroy"),this.mlTensor.destroy()}write(t){this.mlContext.writeTensor(this.mlTensor,t)}async read(t){if(!this.fallbackDataType)return t?this.mlContext.readTensor(this.mlTensor,t):this.mlContext.readTensor(this.mlTensor);
9{let r=tf(new Uint8Array(await this.mlContext.readTensor(this.mlTensor)),this.dataType);return t?void(t instanceof ArrayBuffer?new Uint8Array(t):new Uint8Array(t.buffer,t.byteOffset,t.byteLength)).set(r):r.buffer}}canReuseTensor(t,r,i){return this.mlContext===t&&this.dataType===r&&this.tensorShape.length===i.length&&this.tensorShape.every((t,r)=>t===i[r])}setIsDataConverted(t){this.isDataConverted=t}},t$=class{constructor(t,r){this.tensorManager=t,this.wrapper=r}get tensorWrapper(){return this.wrapper}releaseTensor(){this.tensorWrapper&&(this.tensorManager.releaseTensor(this.tensorWrapper),this.wrapper=void 0)}async ensureTensor(t,r,i,a){let n=this.tensorManager.getMLContext(t),s;if(!n.opSupportLimits().input.dataTypes.includes(r)){if(!(s=ty.get(r))||!n.opSupportLimits().input.dataTypes.includes(s))throw Error(`WebNN backend does not support data type: ${r}`);ti("verbose",()=>`[WebNN] TensorIdTracker.ensureTensor: fallback dataType from ${r} to ${s}`)}if(this.wrapper){if(this.wrapper.canReuseTensor(n,r,i))return this.wrapper.tensor;if(a){if(this.wrapper.byteLength!==t_(r,i))throw Error("Unable to copy data to tensor with different size.");this.activeUpload=new Uint8Array(await this.wrapper.read())}this.tensorManager.releaseTensor(this.wrapper)}let o=typeof MLTensorUsage>"u"?void 0:MLTensorUsage.READ|MLTensorUsage.WRITE;return this.wrapper=await this.tensorManager.getCachedTensor(t,r,i,o,!0,!0,s),a&&this.activeUpload&&(this.wrapper.write(this.activeUpload),this.activeUpload=void 0),this.wrapper.tensor}upload(t){let r=t;if(this.wrapper){if(this.wrapper.fallbackType)if("int32"===this.wrapper.fallbackType)r=th(t,this.wrapper.type),this.wrapper.setIsDataConverted(!0);else throw Error(`Unsupported fallback data type: ${this.wrapper.fallbackType}`);if(t.byteLength===this.wrapper.byteLength)return void this.wrapper.write(r);ti("verbose",()=>"Data size does not match tensor size. Releasing tensor."),this.releaseTensor()}this.activeUpload?this.activeUpload.set(r):this.activeUpload=new Uint8Array(r)}async download(t){if(this.activeUpload){let r=this.wrapper?.isDataConverted?tf(this.activeUpload,this.wrapper?.type):this.activeUpload;return t?void(t instanceof ArrayBuffer?new Uint8Array(t).set(r):new Uint8Array(t.buffer,t.byteOffset,t.byteLength).set(r)):r.buffer}if(!this.wrapper)throw Error("Tensor has not been created.");return t?this.wrapper.read(t):this.wrapper.read()}},tv=class{constructor(t){this.backend=t,this.tensorTrackersById=new Map,this.freeTensors=[],this.externalTensors=new Set}getMLContext(t){let r=this.backend.getMLContext(t);if(!r)throw Error("MLContext not found for session.");return r}reserveTensorId(){let t=tg();return this.tensorTrackersById.set(t,new t$(this)),t}releaseTensorId(t){let r=this.tensorTrackersById.get(t);r&&(this.tensorTrackersById.delete(t),r.tensorWrapper&&this.releaseTensor(r.tensorWrapper))}async ensureTensor(t,r,i,a,n){ti("verbose",()=>`[WebNN] TensorManager.ensureTensor {tensorId: ${r}, dataType: ${i}, shape: ${a}, copyOld: ${n}}`);let s=this.tensorTrackersById.get(r);if(!s)throw Error("Tensor not found.");return s.ensureTensor(t,i,a,n)}upload(t,r){let i=this.tensorTrackersById.get(t);if(!i)throw Error("Tensor not found.");i.upload(r)}async download(t,r){ti("verbose",()=>`[WebNN] TensorManager.download {tensorId: ${t}, dstBuffer: ${r?.byteLength}}`);let i=this.tensorTrackersById.get(t);if(!i)throw Error("Tensor not found.");return i.download(r)}releaseTensorsForSession(t){for(let r of this.freeTensors)r.sessionId===t&&r.destroy();this.freeTensors=this.freeTensors.filter(r=>r.sessionId!==t)}registerTensor(t,r,i,a){let n=this.getMLContext(t),s=tg(),o=new tb({sessionId:t,context:n,tensor:r,dataType:i,shape:a});return this.tensorTrackersById.set(s,new t$(this,o)),this.externalTensors.add(o),s}async getCachedTensor(t,r,i,a,n,s,o){let u=this.getMLContext(t);for(let[a,n]of this.freeTensors.entries())if(n.canReuseTensor(u,r,i)){ti("verbose",()=>`[WebNN] Reusing tensor {dataType: ${r}, ${o?`fallbackDataType: ${o},`:""} shape: ${i}`);let n=this.freeTensors.splice(a,1)[0];return n.sessionId=t,n}ti("verbose",()=>`[WebNN] MLContext.createTensor {dataType: ${r}, ${o?`fallbackDataType: ${o},`:""} shape: ${i}}`);let l=await u.createTensor({dataType:o??r,shape:i,dimensions:i,usage:a,writable:n,readable:s});return new tb({sessionId:t,context:u,tensor:l,dataType:r,shape:i,fallbackDataType:o})}releaseTensor(t){this.externalTensors.has(t)&&this.externalTensors.delete(t),this.freeTensors.push(t)}},tw=(...t)=>new tv(...t)}),o0=q(()=>{oK(),oG(),oY(),oJ(),oQ(),tx=new Map([[1,"float32"],[10,"float16"],[6,"int32"],[12,"uint32"],[7,"int64"],[13,"uint64"],[22,"int4"],[21,"uint4"],[3,"int8"],[2,"uint8"],[9,"uint8"]]),tk=(t,r)=>{if(t===r)return!0;
9if(void 0===t||void 0===r)return!1;let i=Object.keys(t).sort(),a=Object.keys(r).sort();return i.length===a.length&&i.every((i,n)=>i===a[n]&&t[i]===r[i])},tS=class{constructor(t){this.tensorManager=tw(this),this.mlContextBySessionId=new Map,this.sessionIdsByMLContext=new Map,this.mlContextCache=[],this.sessionGraphInputs=new Map,this.sessionGraphOutputs=new Map,this.temporaryGraphInputs=[],this.temporaryGraphOutputs=[],this.temporarySessionTensorIds=new Map,tt(t.logLevel,!!t.debug)}get currentSessionId(){if(void 0===this.activeSessionId)throw Error("No active session");return this.activeSessionId}onRunStart(t){ti("verbose",()=>`[WebNN] onRunStart {sessionId: ${t}}`),this.activeSessionId=t}onRunEnd(t){ti("verbose",()=>`[WebNN] onRunEnd {sessionId: ${t}}`);let r=this.temporarySessionTensorIds.get(t);if(r){for(let t of r)ti("verbose",()=>`[WebNN] releasing temporary tensor {tensorId: ${t}}`),this.tensorManager.releaseTensorId(t);this.temporarySessionTensorIds.delete(t),this.activeSessionId=void 0}}async createMLContext(t){if(t instanceof GPUDevice){let r=this.mlContextCache.findIndex(r=>r.gpuDevice===t);if(-1!==r)return this.mlContextCache[r].mlContext;{let r=await navigator.ml.createContext(t);return this.mlContextCache.push({gpuDevice:t,mlContext:r}),r}}if(void 0===t){let t=this.mlContextCache.findIndex(t=>void 0===t.options&&void 0===t.gpuDevice);if(-1!==t)return this.mlContextCache[t].mlContext;{let t=await navigator.ml.createContext();return this.mlContextCache.push({mlContext:t}),t}}let r=this.mlContextCache.findIndex(r=>tk(r.options,t));if(-1!==r)return this.mlContextCache[r].mlContext;{let r=await navigator.ml.createContext(t);return this.mlContextCache.push({options:t,mlContext:r}),r}}registerMLContext(t,r){this.mlContextBySessionId.set(t,r);let i=this.sessionIdsByMLContext.get(r);i||(i=new Set,this.sessionIdsByMLContext.set(r,i)),i.add(t),this.temporaryGraphInputs.length>0&&(this.sessionGraphInputs.set(t,this.temporaryGraphInputs),this.temporaryGraphInputs=[]),this.temporaryGraphOutputs.length>0&&(this.sessionGraphOutputs.set(t,this.temporaryGraphOutputs),this.temporaryGraphOutputs=[])}onReleaseSession(t){this.sessionGraphInputs.delete(t),this.sessionGraphOutputs.delete(t);let r=this.mlContextBySessionId.get(t);if(!r)return;this.tensorManager.releaseTensorsForSession(t),this.mlContextBySessionId.delete(t);let i=this.sessionIdsByMLContext.get(r);if(i.delete(t),0===i.size){this.sessionIdsByMLContext.delete(r);let t=this.mlContextCache.findIndex(t=>t.mlContext===r);-1!==t&&this.mlContextCache.splice(t,1)}}getMLContext(t){return this.mlContextBySessionId.get(t)}reserveTensorId(){return this.tensorManager.reserveTensorId()}releaseTensorId(t){ti("verbose",()=>`[WebNN] releaseTensorId {tensorId: ${t}}`),this.tensorManager.releaseTensorId(t)}async ensureTensor(t,r,i,a,n){let s=tx.get(i);if(!s)throw Error(`Unsupported ONNX data type: ${i}`);return this.tensorManager.ensureTensor(t??this.currentSessionId,r,s,a,n)}async createTemporaryTensor(t,r,i){ti("verbose",()=>`[WebNN] createTemporaryTensor {onnxDataType: ${r}, shape: ${i}}`);let a=tx.get(r);if(!a)throw Error(`Unsupported ONNX data type: ${r}`);let n=this.tensorManager.reserveTensorId();await this.tensorManager.ensureTensor(t,n,a,i,!1);let s=this.temporarySessionTensorIds.get(t);return s?s.push(n):this.temporarySessionTensorIds.set(t,[n]),n}uploadTensor(t,r){if(!eW().shouldTransferToMLTensor)throw Error("Trying to upload to a MLTensor while shouldTransferToMLTensor is false");ti("verbose",()=>`[WebNN] uploadTensor {tensorId: ${t}, data: ${r.byteLength}}`),this.tensorManager.upload(t,r)}async downloadTensor(t,r){return this.tensorManager.download(t,r)}createMLTensorDownloader(t,r){return async()=>{let i=await this.tensorManager.download(t);return tp(i,r)}}registerMLTensor(t,r,i,a){let n=tx.get(i);if(!n)throw Error(`Unsupported ONNX data type: ${i}`);let s=this.tensorManager.registerTensor(t,r,n,a);return ti("verbose",()=>`[WebNN] registerMLTensor {tensor: ${r}, dataType: ${n}, dimensions: ${a}} -> {tensorId: ${s}}`),s}registerMLConstant(t,r,i,a,n,s,o=!1){if(!s)throw Error("External mounted files are not available.");let u=t;t.startsWith("./")&&(u=t.substring(2));let l=s.get(u);if(!l)throw Error(`File with name ${u} not found in preloaded files.`);if(r+i>l.byteLength)throw Error("Out of bounds: data offset and length exceed the external file data size.");let d=l.slice(r,r+i).buffer,p;switch(n.dataType){case"float32":p=new Float32Array(d);break;case"float16":p="u">typeof Float16Array&&Float16Array.from?new Float16Array(d):new Uint16Array(d);break;case"int32":p=new Int32Array(d);break;case"uint32":p=new Uint32Array(d);break;case"int64":o?(p=new Int32Array(th(new Uint8Array(d),"int64").buffer),n.dataType="int32"):p=new BigInt64Array(d);break;case"uint64":p=new BigUint64Array(d);break;case"int8":p=new Int8Array(d);break;case"int4":case"uint4":case"uint8":p=new Uint8Array(d);break;default:throw Error(`Unsupported data type: ${n.dataType} in creating WebNN Constant from external data.`)}return ti("verbose",()=>`[WebNN] registerMLConstant {dataType: ${n.dataType}, shape: ${n.shape}}} ${o?"(Note: it was int64 data type and registered to int32 as workaround)":""}`),a.constant(n,p)}registerGraphInput(t){this.temporaryGraphInputs.push(t)}registerGraphOutput(t){this.temporaryGraphOutputs.push(t)}isGraphInput(t,r){let i=this.sessionGraphInputs.get(t);return!!i&&i.includes(r)}isGraphOutput(t,r){let i=this.sessionGraphOutputs.get(t);return!!i&&i.includes(r)}isGraphInputOutputTypeSupported(t,r,i=!0){let a=this.mlContextBySessionId.get(t),n=tx.get(eY(r));return!(typeof n>"u")&&(i?!!a?.opSupportLimits().input.dataTypes.includes(n):!!a?.opSupportLimits().output.dataTypes.includes(n))}flush(){}}}),o2=q(()=>{}),o1=q(()=>{oQ(),o2(),tT=new Map([[64,250],[128,200],[256,200],[512,200],[2048,230],[4096,200
9],[8192,50],[16384,50],[32768,50],[65536,50],[131072,50],[262144,50],[524288,50],[1048576,50],[2097152,30],[4194304,20],[8388608,10],[0xc00000,10],[0x1000000,10],[0x1900000,15],[0x2000000,22],[0x2a30000,2],[0x3840000,6],[0x4000000,6],[0x8000000,6],[0xa000000,6]]),tI=[],tE=t=>16*Math.ceil(Number(t)/16),tC=t=>{for(let r=0;r<tI.length;r++){let i=tI[r];if(t<=i)return i}return 16*Math.ceil(t/16)},tz=1,tA=()=>tz++,tO=async(t,r,i,a)=>{let n=tE(i),s=t.device.createBuffer({size:n,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});try{let o=t.getCommandEncoder();t.endComputePass(),o.copyBufferToBuffer(r,0,s,0,n),t.flush(),await s.mapAsync(GPUMapMode.READ);let u=s.getMappedRange();if(!a)return new Uint8Array(u.slice(0,i));{let t=a();return t.set(new Uint8Array(u,0,i)),t}}finally{s.destroy()}},tR=class{constructor(t){for(let[r]of(this.backend=t,this.storageCache=new Map,this.freeBuffers=new Map,this.freeUniformBuffers=new Map,this.buffersPending=[],this.capturedPendingBuffers=new Map,tT))tI.push(r),this.freeBuffers.set(r,[]),this.freeUniformBuffers.set(r,[]);this.sessionCount=0}upload(t,r){let i=r.buffer,a=r.byteOffset,n=r.byteLength,s=tE(n),o=this.storageCache.get(t);if(!o)throw Error("gpu data for uploading does not exist");if(Number(o.originalSize)!==n)throw Error(`inconsistent data size. gpu data size=${o.originalSize}, data size=${n}`);let u=this.backend.device.createBuffer({mappedAtCreation:!0,size:s,usage:GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC});new Uint8Array(u.getMappedRange()).set(new Uint8Array(i,a,n)),u.unmap();let l=this.backend.device.createCommandEncoder();l.copyBufferToBuffer(u,0,o.gpuData.buffer,0,s),this.backend.device.queue.submit([l.finish()]),u.destroy(),ti("verbose",()=>`[WebGPU] GpuDataManager.upload(id=${t})`)}memcpy(t,r){let i=this.storageCache.get(t);if(!i)throw Error("source gpu data for memcpy does not exist");let a=this.storageCache.get(r);if(!a)throw Error("destination gpu data for memcpy does not exist");if(i.originalSize!==a.originalSize)throw Error("inconsistent source and destination gpu data size");let n=tE(i.originalSize),s=this.backend.getCommandEncoder();this.backend.endComputePass(),s.copyBufferToBuffer(i.gpuData.buffer,0,a.gpuData.buffer,0,n)}registerExternalBuffer(t,r,i){let a;if(i){if(a=i[0],t===i[1])return ti("verbose",()=>`[WebGPU] GpuDataManager.registerExternalBuffer(size=${r}) => id=${a}, buffer is the same, skip.`),a;if(this.backend.capturedCommandList.has(this.backend.currentSessionId))throw Error(`Registering a different external buffer under graph capture mode is not supported yet.
10             Please use the previous external buffer!`)}else a=tA();return this.storageCache.set(a,{gpuData:{id:a,type:0,buffer:t},originalSize:r}),ti("verbose",()=>`[WebGPU] GpuDataManager.registerExternalBuffer(size=${r}) => id=${a}, registered.`),a}unregisterExternalBuffer(t){void 0!==t&&(this.storageCache.delete(t),ti("verbose",()=>`[WebGPU] GpuDataManager.unregisterExternalBuffer() => id=${t}`))}create(t,r=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST){let i=tC(t),a,n=(r&GPUBufferUsage.STORAGE)===GPUBufferUsage.STORAGE,s=(r&GPUBufferUsage.UNIFORM)===GPUBufferUsage.UNIFORM;if(n||s){let t=(n?this.freeBuffers:this.freeUniformBuffers).get(i);a=t&&t.length>0?t.pop():this.backend.device.createBuffer({size:i,usage:r})}else a=this.backend.device.createBuffer({size:i,usage:r});let o={id:tA(),type:0,buffer:a};return this.storageCache.set(o.id,{gpuData:o,originalSize:Number(t)}),ti("verbose",()=>`[WebGPU] GpuDataManager.create(size=${t}) => id=${o.id}`),o}get(t){return this.storageCache.get(t)?.gpuData}release(t){let r="bigint"==typeof t?Number(t):t,i=this.storageCache.get(r);if(!i){if(0===this.storageCache.size)return 0;throw Error("releasing data does not exist")}return ti("verbose",()=>`[WebGPU] GpuDataManager.release(id=${r}), gpuDataId=${i.gpuData.id}`),this.storageCache.delete(r),this.buffersPending.push(i.gpuData.buffer),i.originalSize}async download(t,r){let i=this.storageCache.get(Number(t));if(!i)throw Error("data does not exist");await tO(this.backend,i.gpuData.buffer,i.originalSize,r)}refreshPendingBuffers(){if(0!==this.buffersPending.length)if("default"===this.backend.sessionStatus){for(let t of this.buffersPending){let r=tT.get(t.size);if((t.usage&GPUBufferUsage.STORAGE)===GPUBufferUsage.STORAGE){let i=this.freeBuffers.get(t.size)||[];void 0===r||i.length>=r?t.destroy():i.push(t)}
10else if((t.usage&GPUBufferUsage.UNIFORM)===GPUBufferUsage.UNIFORM){let i=this.freeUniformBuffers.get(t.size)||[];void 0===r||i.length>=r?t.destroy():i.push(t)}else t.destroy()}this.buffersPending=[]}else{let t=this.capturedPendingBuffers.get(this.backend.currentSessionId);for(let r of(t||(t=[],this.capturedPendingBuffers.set(this.backend.currentSessionId,t)),this.buffersPending))t.push(r);this.buffersPending=[]}}dispose(){this.freeBuffers.forEach(t=>{t.forEach(t=>{t.destroy()})}),this.freeUniformBuffers.forEach(t=>{t.forEach(t=>{t.destroy()})}),this.storageCache.forEach(t=>{t.gpuData.buffer.destroy()}),this.capturedPendingBuffers.forEach(t=>{t.forEach(t=>{t.destroy()})}),this.storageCache=new Map,this.freeBuffers=new Map,this.freeUniformBuffers=new Map,this.capturedPendingBuffers=new Map}onCreateSession(){this.sessionCount+=1}onReleaseSession(t){let r=this.capturedPendingBuffers.get(t);r&&(r.forEach(t=>{t.destroy()}),this.capturedPendingBuffers.delete(t)),this.sessionCount-=1,0===this.sessionCount&&(ti("warning",()=>"[WebGPU] Clearing webgpu buffer cache"),this.storageCache.forEach(t=>{t.gpuData.buffer.destroy()}),this.storageCache=new Map)}},tB=(...t)=>new tR(...t)}),o3=q(()=>{tN=class{constructor(t){Object.assign(this,t)}get cacheKey(){return this.key||(this.key=Object.getOwnPropertyNames(this).sort().map(t=>`${this[t]}`).join(";")),this.key}},tM=t=>new tN(t)}),o4=q(()=>{oK(),oX(),tD=64,tP=(t,r)=>{if(3===r)throw Error("vec3 has same alignment as vec4, use vec4 instead");switch(Number(t)){case 10:return r>1?`vec${r}<f16>`:"f16";case 1:return r>1?`vec${r}<f32>`:"f32";case 6:return r>1?`vec${r}<i32>`:"i32";case 12:return r>1?`vec${r}<u32>`:"u32";case 7:if(r>1)throw Error("currently not supported vecX of uint64 yet");return["vec2<u32>","i32"];case 13:if(r>1)throw Error("currently not supported vecX of uint64 yet");return["vec2<u32>","u32"];case 9:if(4!==r)throw Error("bool must be vec4");return["u32","vec4<bool>"];case 22:return"i32";case 21:return"u32";default:throw Error(`Unknown data type: ${t}`)}},tU=(t,r=1)=>{let i=tP(t,r);return"string"==typeof i?i:i[0]},tq=(t,r=1)=>{let i=tP(t,r);return"string"==typeof i?i:i[1]},tW=(...t)=>{let r=[];return t.forEach(t=>{0!==t.length&&r.push({type:12,data:t},{type:12,data:ts.computeStrides(t)})}),r},tL=t=>t%4==0?4:t%2==0?2:1,tV=(t="f32",r,i="0")=>r&&1!==r?`vec${r}<${t}>(${i})`:`${t}(${i})`,tG=(t,r,i)=>"f32"===t?i:1===r?`f32(${i})`:`vec${r}<f32>(${i})`,tH=(t,r)=>4===r?`(${t}.x + ${t}.y + ${t}.z + ${t}.w)`:2===r?`(${t}.x + ${t}.y)`:3===r?`(${t}.x + ${t}.y + ${t}.z)`:t,tF=(t,r,i,a)=>t.startsWith("uniforms.")&&i>4?"string"==typeof r?"f16"===a?`${t}[(${r}) / 8][(${r}) % 8 / 4][(${r}) % 8 % 4]`:`${t}[(${r}) / 4][(${r}) % 4]`:"f16"===a?`${t}[${Math.floor(r/8)}][${Math.floor(r%8/4)}][${r%8%4}]`:`${t}[${Math.floor(r/4)}][${r%4}]`:i>1?`${t}[${r}]`:t,tj=(t,r,i,a,n)=>{let s="number"==typeof i,o=s?i:i.length,u=[...Array(o).keys()],l=o<2?"u32":o<=4?`vec${o}<u32>`:`array<u32, ${o}>`,d=tP(r,n),p="string"==typeof d?d:d[1],c={indices:l,value:p,storage:"string"==typeof d?d:d[0],tensor:r},h=t=>"string"==typeof t?t:`${t}u`,f={offsetToIndices:!1,indicesToOffset:!1,broadcastedIndicesToOffset:!1,set:!1,setByIndices:!1,get:!1,getByIndices:!1},m=s?"uniforms.":"",g=`${m}${t}_shape`,y=`${m}${t}_strides`,_="";for(let t=0;t<o-1;t++)_+=`
11    let dim${t} = current / ${tF(y,t,o)};
12    let rest${t} = current % ${tF(y,t,o)};
13    indices[${t}] = dim${t};
14    current = rest${t};
15    `;_+=`indices[${o-1}] = current;`;let b=o<2?"":`
16  fn o2i_${t}(offset: u32) -> ${c.indices} {
17    var indices: ${c.indices};
18    var current = offset;
19    ${_}
20    return indices;
21  }`,$=[];if(o>=2)for(let t=o-1;t>=0;t--)$.push(`${tF(y,t,o)} * (indices[${t}])`);let v=o<2?"":`
22  fn i2o_${t}(indices: ${c.indices}) -> u32 {
23    return ${$.join("+")};
24  }`,w=(...t)=>0===o?"0u":`${c.indices}(${t.map(h).join(",")})`,x=(t,r)=>o<2?`${t}`:`${tF(t,r,o)}`,k={},S=(r,i)=>(()=>{if(c.storage===c.value)return`${t}[${r}]=${i};`;if("vec2<u32>"===c.storage&&"i32"===c.value)return`${t}[${r}]=vec2<u32>(u32(${i}), select(0u, 0xFFFFFFFFu, ${i} < 0));`;if("vec2<u32>"===c.storage&&"u32"===c.value)return`${t}[${r}]=vec2<u32>(u32(${i}), 0u);`;if("u32"===c.storage&&"vec4<bool>"===c.value)return`${t}[${r}]=dot(vec4<u32>(0x1, 0x100, 0x10000, 0x1000000), vec4<u32>(${i}));`;throw Error(`not supported combination of storage type ${c.storage} and value type ${c.value} yet`)})(),T=r=>(()=>
24{if(c.storage===c.value)return`${t}[${r}]`;if("vec2<u32>"===c.storage&&"i32"===c.value)return`i32(${t}[${r}].x)`;if("vec2<u32>"===c.storage&&"u32"===c.value)return`u32(${t}[${r}].x)`;if("u32"===c.storage&&"vec4<bool>"===c.value)return`vec4<bool>(bool(${t}[${r}] & 0xFFu), bool(${t}[${r}] & 0xFF00u), bool(${t}[${r}] & 0xFF0000u), bool(${t}[${r}] & 0xFF000000u))`;throw Error(`not supported combination of storage type ${c.storage} and value type ${c.value} yet`)})(),I=o<2?"":`
25  fn get_${t}ByIndices(indices: ${c.indices}) -> ${p} {
26    return ${T(`i2o_${t}(indices)`)};
27  }`,E=o<2?"":(()=>{let r=u.map(t=>`d${t}: u32`).join(", "),i=u.map(t=>`d${t}`).join(", ");return`
28  fn get_${t}(${r}) -> ${p} {
29    return get_${t}ByIndices(${w(i)});
30  }`})(),C=o<2?"":`
31  fn set_${t}ByIndices(indices: ${c.indices}, value: ${p}) {
32    ${S(`i2o_${t}(indices)`,"value")}
33  }`,z=o<2?"":(()=>{let r=u.map(t=>`d${t}: u32`).join(", "),i=u.map(t=>`d${t}`).join(", ");return`
34  fn set_${t}(${r}, value: ${p}) {
35    set_${t}ByIndices(${w(i)}, value);
36  }`})();return{impl:()=>{let t=[],r=!1;return f.offsetToIndices&&(t.push(b),r=!0),f.indicesToOffset&&(t.push(v),r=!0),f.broadcastedIndicesToOffset&&(Object.values(k).forEach(r=>t.push(r)),r=!0),f.set&&(t.push(z),r=!0),f.setByIndices&&(t.push(C),r=!0),f.get&&(t.push(E),r=!0),f.getByIndices&&(t.push(I),r=!0),!s&&r&&t.unshift(`const ${g} = ${c.indices}(${i.join(",")});`,`const ${y} = ${c.indices}(${ts.computeStrides(i).join(",")});`),t.join(`
37`)},type:c,offsetToIndices:r=>(f.offsetToIndices=!0,o<2?r:`o2i_${t}(${r})`),indicesToOffset:r=>(f.indicesToOffset=!0,o<2?r:`i2o_${t}(${r})`),broadcastedIndicesToOffset:(r,i)=>{f.broadcastedIndicesToOffset=!0;let a=`${i.name}broadcastedIndicesTo${t}Offset`;if(a in k)return`${a}(${r})`;let n=[];for(let t=o-1;t>=0;t--){let r=i.indicesGet("outputIndices",t+i.rank-o);n.push(`${x(y,t)} * (${r} % ${x(g,t)})`)}return k[a]=`fn ${a}(outputIndices: ${i.type.indices}) -> u32 {
38             return ${n.length>0?n.join("+"):"0u"};
39           }`,`${a}(${r})`},indices:w,indicesGet:x,indicesSet:(t,r,i)=>o<2?`${t}=${i};`:`${tF(t,r,o)}=${i};`,set:(...r)=>{if(r.length!==o+1)throw Error(`indices length must be ${o}`);let i=r[o];if("string"!=typeof i)throw Error("value must be string");let a=r.slice(0,o).map(h).join(",");return 0===o?S("0u",i):1===o?S(a[0],i):(f.set=!0,f.setByIndices=!0,f.indicesToOffset=!0,`set_${t}(${a}, ${i})`)},setByOffset:S,setByIndices:(r,i)=>o<2?S(r,i):(f.setByIndices=!0,f.indicesToOffset=!0,`set_${t}ByIndices(${r}, ${i});`),get:(...r)=>{if(r.length!==o)throw Error(`indices length must be ${o}`);let i=r.map(h).join(",");return 0===o?T("0u"):1===o?T(i[0]):(f.get=!0,f.getByIndices=!0,f.indicesToOffset=!0,`get_${t}(${i})`)},getByOffset:T,getByIndices:r=>o<2?T(r):(f.getByIndices=!0,f.indicesToOffset=!0,`get_${t}ByIndices(${r})`),usage:a,name:t,strides:y,shape:g,rank:o}},tK=(t,r,i,a=1)=>tj(t,r,i,"input",a),tZ=(t,r,i,a=1)=>tj(t,r,i,"output",a),tQ=(t,r,i)=>tj(t,r,i,"atomicOutput",1),tX=(t,r,i,a=1)=>tj(t,r,i,"internal",a),tY=class{constructor(t,r){this.normalizedDispatchGroup=t,this.limits=r,this.internalVariables=[],this.variables=[],this.uniforms=[],this.variableIndex=0}guardAgainstOutOfBoundsWorkgroupSizes(t){return`if (global_idx >= ${"number"==typeof t?`${t}u`:t}) { return; }`}mainStart(t=tD){let r="number"==typeof t?t:t[0],i="number"==typeof t?1:t[1],a="number"==typeof t?1:t[2];if(r>this.limits.maxComputeWorkgroupSizeX||i>this.limits.maxComputeWorkgroupSizeY||a>this.limits.maxComputeWorkgroupSizeZ)throw Error(`workgroup size [${r}, ${i}, ${a}] exceeds the maximum workgroup size [${this.limits.maxComputeWorkgroupSizeX}, ${this.limits.maxComputeWorkgroupSizeY}, ${this.limits.maxComputeWorkgroupSizeZ}].`);if(r*i*a>this.limits.maxComputeInvocationsPerWorkgroup)throw Error(`workgroup size [${r}, ${i}, ${a}] exceeds the maximum workgroup invocations ${this.limits.maxComputeInvocationsPerWorkgroup}.`);let n=1===this.normalizedDispatchGroup[1]&&1===this.normalizedDispatchGroup[2],s=n?`@builtin(global_invocation_id) global_id : vec3<u32>,
40    @builtin(workgroup_id) workgroup_id : vec3<u32>,
41    @builtin(local_invocation_index) local_idx : u32,
42    @builtin(local_invocation_id) local_id : vec3<u32>`:`@builtin(global_invocation_id) global_id : vec3<u32>,
43                                             @builtin(local_invocation_id) local_id : vec3<u32>,
44    @builtin(local_invocation_index) local_idx : u32,
45    @builtin(workgroup_id) workgroup_id : vec3<u32>,
46    @builtin(num_workgroups) num_workgroups : vec3<u32>`,o=n?`let global_idx = global_id.x;
47         let workgroup_index = workgroup_id.x;`:`let workgroup_index = workgroup_id.z * num_workgroups[0] * num_workgroups[1] +
48             workgroup_id.y * num_workgroups[0] + workgroup_id.x;
49         let global_idx = workgroup_index * ${r*i*a}u + local_idx;`;return`@compute @workgroup_size(${r}, ${i}, ${a})
50  fn main(${s}) {
51    ${o}
52  `}appendVariableUniforms(t){0!==t.rank&&(t.shape.startsWith("uniforms.")&&this.uniforms.push({name:t.shape.replace("uniforms.",""),type:"u32",length:t.rank}),t.strides.startsWith("uniforms.")&&this.uniforms.push({name:t.strides.replace("uniforms.",""),type:"u32",length:t.rank}))}declareVariable(t,r){if("internal"===t.usage)throw Error("cannot use internal variable with declareVariable(). use registerInternalVariables() instead.");this.variables.push(t),this.appendVariableUniforms(t);let i="input"===t.usage?"read":"read_write",a="atomicOutput"===t.usage?"atomic<i32>":t.type.storage;return`@group(0) @binding(${r}) var<storage, ${i}> ${t.name}: array<${a}>;`}declareVariables(...t){return t.map(t=>this.declareVariable(t,this.variableIndex++)).join(`
53`)}registerInternalVariable(t){if("internal"!==t.usage)throw Error("cannot use input or output variable with registerInternalVariable(). use declareVariables() instead.");this.internalVariables.push(t),this.appendVariableUniforms(t)}registerInternalVariables(...t){return t.forEach(t=>this.registerInternalVariable(t)),this}registerUniform(t,r,i=1){return this.uniforms.push({name:t,type:r,length:i}),this}registerUniforms(t){return this.uniforms=this.uniforms.concat(t),this}uniformDeclaration(){if(0===this.uniforms.length)return"";let t=[];for(let{name:r,type:i,length:a}of this.uniforms)if(a&&a>4)"f16"===i?t.push(`@align(16) ${r}:array<mat2x4<${i}>, ${Math.ceil(a/8)}>`):t.push(`${r}:array<vec4<${i}>, ${Math.ceil(a/4)}>`);else{let n=null==a||1===a?i:`vec${a}<${i}>`;t.push(`${r}:${n}`)}return`
54      struct Uniforms { ${t.join(", ")} };
55      @group(0) @binding(${this.variableIndex}) var<uniform> uniforms: Uniforms;`}get additionalImplementations(){return this.uniformDeclaration()+this.variables.map(t=>t.impl()).join(`
56`)+this.internalVariables.map(t=>t.impl()).join(`
57`)}get variablesInfo(){if(0===this.uniforms.length)return;let t=t=>[12,10,1,6][["u32","f16","f32","i32"].indexOf(t)];return this.uniforms.map(r=>[t(r.type),r.length??1])}},tJ=(t,r)=>new tY(t,r)}),o8=q(()=>{oK(),oX(),o3(),o4(),t0=(t,r)=>{if(!t||1!==t.length)throw Error("Transpose requires 1 input.");if(0!==r.length&&r.length!==t[0].dims.length)throw Error(`perm size ${r.length} does not match input rank ${t[0].dims.length}`)},t2=(t,r)=>0!==r.length?r:[...Array(t).keys()].reverse(),t1=(t,r)=>ts.sortBasedOnPerm(t,t2(t.length,r)),t3=(t,r,i,a)=>{let n=`fn perm(i: ${a.type.indices}) -> ${i.type.indices} {
58    var a: ${i.type.indices};`;for(let i=0;i<r;++i)n+=`a[${t[i]}]=i[${i}];`;return n+"return a;}"},t4=(t,r)=>{let i=[],a=[];for(let n=0;n<t.length;++n)1!==t[n]&&i.push(t[n]),1!==t[r[n]]&&a.push(r[n]);return{newShape:i,newPerm:a}},t8=(t,r)=>{let i=0;for(let a=0;a<t.length;
58++a)if(1!==r[t[a]]){if(t[a]<i)return!1;i=t[a]}return!0},t6=(t,r)=>{let i=t.dataType,a=t.dims.length,n=t2(a,r),s=t1(t.dims,n),o=t.dims,u=s,l;if(a<2||t8(n,t.dims))return{name:"TransposeCopy",shaderCache:{inputDependencies:["type"]},getRunData:()=>{let r=ts.size(s);return{outputs:[{dims:s,dataType:t.dataType}],dispatchGroup:{x:Math.ceil(r/64/4)},programUniforms:[{type:12,data:Math.ceil(r/4)}]}},getShaderSource:t=>{let r=tK("input",i,o,4),a=tZ("output",i,u,4);return`
59  ${t.registerUniform("output_size","u32").declareVariables(r,a)}
60  ${t.mainStart()}
61    ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
62    output[global_idx] = input[global_idx];
63  }`}};let{newShape:d,newPerm:p}=t4(t.dims,n),c=ts.areEqual(p,[2,3,1]),h=ts.areEqual(p,[3,1,2]);return 2===d.length||c||h?(u=[(o=c?[d[0],d[1]*d[2]]:h?[d[0]*d[1],d[2]]:d)[1],o[0]],{name:"TransposeShared",shaderCache:{inputDependencies:["type"]},getRunData:()=>{let r=ts.size(s);return{outputs:[{dims:s,dataType:t.dataType}],dispatchGroup:{x:Math.ceil(u[1]/16),y:Math.ceil(u[0]/16)},programUniforms:[{type:12,data:r},...tW(o,u)]}},getShaderSource:t=>{let r=tK("a",i,o.length),a=tZ("output",i,u.length);return`
64  ${t.registerUniform("output_size","u32").declareVariables(r,a)}
65  var<workgroup> tile : array<array<${a.type.value}, 17>, 16>;
66  ${t.mainStart([16,16,1])}
67    let stride = (uniforms.output_shape[1] - 1) / 16 + 1;
68    let workgroup_id_x = workgroup_index % stride;
69    let workgroup_id_y = workgroup_index / stride;
70    let input_col = workgroup_id_y * 16u + local_id.x;
71    let input_row = workgroup_id_x * 16u + local_id.y;
72    if (input_row < uniforms.a_shape[0] && input_col < uniforms.a_shape[1]) {
73      tile[local_id.y][local_id.x] = ${r.getByIndices(`${r.type.indices}(input_row, input_col)`)};
74    }
75    workgroupBarrier();
76
77    let output_col = workgroup_id_x * 16u + local_id.x;
78    let output_row = workgroup_id_y * 16u + local_id.y;
79    if (output_row < uniforms.output_shape[0] && output_col < uniforms.output_shape[1]) {
80      ${a.setByIndices(`${a.type.indices}(output_row, output_col)`,"tile[local_id.x][local_id.y]")}
81    }
82  }`}}):{name:"Transpose",shaderCache:{hint:`${r}`,inputDependencies:["rank"]},getRunData:()=>{let r=ts.size(s);return{outputs:[{dims:s,dataType:t.dataType}],dispatchGroup:{x:Math.ceil(r/64)},programUniforms:[{type:12,data:r},...tW(o,u)]}},getShaderSource:t=>{let r=tK("a",i,o.length),s=tZ("output",i,u.length);return`
83  ${t.registerUniform("output_size","u32").declareVariables(r,s)}
84
85  ${t3(n,a,r,s)}
86
87  ${t.mainStart()}
88    ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
89
90    let indices = ${s.offsetToIndices("global_idx")};
91    let aIndices = perm(indices);
92
93    ${s.setByOffset("global_idx",r.getByIndices("aIndices"))}
94  }`}}},t5=(t,r)=>{t0(t.inputs,r.perm),t.compute(t6(t.inputs[0],r.perm))},t7=t=>tM({perm:t.perm})}),o6=q(()=>{oK(),oX(),o4(),o5(),o8(),t9={max:"select(bestValue, candidate, candidate > bestValue)",min:"select(bestValue, candidate, candidate < bestValue)",mean:"bestValue + candidate",sum:"bestValue + candidate",prod:"bestValue * candidate",sumSquare:"bestValue + candidate * candidate",logSumExp:"bestValue + exp(candidate)",l1:"bestValue + abs(candidate)",l2:"bestValue + candidate * candidate",logSum:"bestValue + candidate"},re={max:"select(bestValue, candidate, candidate > bestValue)",min:"select(bestValue, candidate, candidate < bestValue)",mean:"bestValue + candidate",sum:"bestValue + candidate",prod:"bestValue * candidate",sumSquare:"bestValue + candidate",logSumExp:"bestValue + candidate",l1:"bestValue + candidate",l2:"bestValue + candidate",logSum:"bestValue + candidate"},rt={max:"_A[offset]",min:"_A[offset]",mean:"0",sum:"0",prod:"1",sumSquare:"0",logSumExp:"0",l1:"0",l2:"0",logSum:"0"},rr={max:"bestValue",min:"bestValue",sum:"bestValue",prod:"bestValue",sumSquare:"bestValue",logSumExp:"log(bestValue)",l1:"bestValue",l2:"sqrt(bestValue)",logSum:"log(bestValue)"},ri=(t,r)=>{let i=[];for(let a=r-t;a<r;++a)i.push(a);return i},ra=(t,r)=>{let i=[],a=t.length;for(let n=0;n<a;n++)-1===r.indexOf(n)&&i.push(t[n]);return[i,r.map(r=>t[r])]},rn=(t,r)=>{let i=t.length+r.length,a=[],n=0;for(let s=0;s<i;s++)-1===r.indexOf(s)?a.push(t[n++]):a.push(1);return a},rs=(t,r)=>{for(let i=0;i<t.length;++i)if(t[t.length-i-1]!==r-1-i)return!1;return!0},ro=(t,r)=>{let i=[];if(!rs(t,r)){for(let a=0;a<r;++a)-1===t.indexOf(a)&&i.push(a);t.forEach(t=>i.push(t))}return i},ru=(t,r,i,a,n,s,o)=>{let u=i[0].dims,l=ts.size(s),d=ts.size(o),p=tK("_A",i[0].dataType,u),c=tZ("output",n,s),h=64;1===l&&(h=256);let f=`
95          var<workgroup> aBestValues : array<f32, ${h}>;
96       `;return{name:t,shaderCache:{hint:`${r};${h}`,inputDependencies:["type"]},getShaderSource:t=>`
97        ${t.registerUniform("reduceSize","u32").declareVariables(p,c)}
98        ${f}
99        fn DIV_CEIL(a : u32, b : u32) -> u32 {
100          return ((a - 1u) / b + 1u);
101         }
102         ${t.mainStart(h)}
103
104          let outputIndex = global_idx / ${h};
105          let offset = outputIndex * uniforms.reduceSize;
106
107          var bestValue = f32(${rt[a]});
108          let Length = uniforms.reduceSize;
109          for (var k = local_idx; k < Length; k = k + ${h}) {
110           let candidate = f32(${p.getByOffset("offset + k")});
111           bestValue = ${t9[a]};
112          }
113          aBestValues[local_idx] = bestValue;
114          workgroupBarrier();
115
116         var reduceSize = min(Length, ${h}u);
117         for (var currentSize = reduceSize / 2u; reduceSize > 1u;
118             currentSize = reduceSize / 2u) {
119           let interval = DIV_CEIL(reduceSize, 2u);
120           if (local_idx < currentSize) {
121            let candidate = aBestValues[local_idx + interval];
122            bestValue = ${re[a]};
123            aBestValues[local_idx] = bestValue;
124           }
125           reduceSize = interval;
126           workgroupBarrier();
127         }
128
129         if (local_idx == 0u) {
130          ${c.setByOffset("outputIndex",`${"mean"===a?`${c.type.storage}(bestValue / f32(uniforms.reduceSize))`:`${c.type.storage}(${rr[a]})`}`)};
131         }
132        }`,getRunData:()=>({outputs:[{dims:s,dataType:n}],dispatchGroup:{x:l},programUniforms:[{type:12,data:d}]})}},rl=(t,r,i,a)=>{let n=1===t.inputs.length?i:rx(t.inputs,i),s=n.axes;0!==s.length||n.noopWithEmptyAxes||(s=t.inputs[0].dims.map((t,r)=>r));let o=ts.normalizeAxes(s,t.inputs[0].dims.length),u=o,l=t.inputs[0],d=ro(u,t.inputs[0].dims.length);d.length>0&&(l=t.compute(t6(t.inputs[0],d),{inputs:[0],outputs:[-1]})[0],u=ri(u.length,l.dims.length));let[p,c]=ra(l.dims,u),h=p;n.keepDims&&(h=rn(p,o)),t.compute(ru(r,n.cacheKey,[l],a,t.inputs[0].dataType,h,c),{inputs:[l]})},rd=(t,r)=>{rl(t,"ReduceMeanShared",r,"mean")},rp=(t,r)=>{rl(t,"ReduceL1Shared",r,"l1")},rc=(t,r)=>{rl(t,"ReduceL2Shared",r,"l2")},rh=(t,r)=>{rl(t,"ReduceLogSumExpShared",r,"logSumExp")},rf=(t,r)=>{rl(t,"ReduceMaxShared",r,"max")},rm=(t,r)=>{rl(t,"ReduceMinShared",r,"min")},rg=(t,r)=>{rl(t,"ReduceProdShared",r,"prod")},ry=(t,r)=>{rl(t,"ReduceSumShared",r,"sum")},r_=(t,r)=>{rl(t,"ReduceSumSquareShared",r,"sumSquare")},rb=(t,r)=>{rl(t,"ReduceLogSumShared",r,"logSum")}}),o5=q(()=>{oK(),oX(),o3(),o4(),o6(),r$=t=>{if(!t||0===t.length||t.length>2)throw Error("Reduce op requires 1 or 2 inputs.");if(2===t.length&&1!==t[1].dims.length)throw Error("Invalid axes input dims.")},rv=t=>["","",`var value = ${t.getByIndices("input_indices")};`,""],rw=(t,r,i,a,n,s,o=!1,u=!1)=>{let l=[],d=i[0].dims,p=d.length,c=ts.normalizeAxes(n,p),h=!u&&0===c.length;d.forEach((t,r)=>{h||c.indexOf(r)>=0?o&&l.push(1):l.push(t)});let f=l.length,m=ts.size(l);return{name:t,shaderCache:r,getShaderSource:t=>{let r=[],n=tK("_A",i[0].dataType,p),u=tZ("output",s,f),l=a(n,u,c),m=l[2];for(let t=0,i=0;t<p;t++)h||c.indexOf(t)>=0?(o&&i++,m=`for(var j${t}: u32 = 0; j${t} < ${d[t]}; j${t}++) {
133                  ${l[2].includes("last_index")?`let last_index = j${t};`:""}
134                  ${n.indicesSet("input_indices",t,`j${t}`)}
135                  ${m}
136                }`):(r.push(`${n.indicesSet("input_indices",t,u.indicesGet("output_indices",i))};`),i++);return`
137
138        ${t.registerUniform("output_size","u32").declareVariables(n,u)}
139
140        ${t.mainStart()}
141          ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
142          var input_indices: ${n.type.indices};
143          let output_indices = ${u.offsetToIndices("global_idx")};
144
145          ${r.join(`
146`)}
147          ${l[0]}       // init ops for reduce max/min
148          ${l[1]}
149          ${m}
150          ${l[3]}
151          ${4===l.length?u.setByOffset("global_idx","value"):l.slice(4).join(`
152`)}
153        }`},getRunData:()=>({outputs:[{dims:l,dataType:s}],dispatchGroup:{x:Math.ceil(m/64)},programUniforms:[{type:12,data:m},...tW(d,l)]})}},rx=(t,r)=>{let i=[];return t[1].dims[0]>0&&t[1].getBigInt64Array().forEach(t=>i.push(Number(t))),tM({axes:i,keepDims:r.keepDims,noopWithEmptyAxes:r.noopWithEmptyAxes})},rk=(t,r,i,a)=>{let n=t.inputs,s=1===n.length?i:rx(n,i);t.compute(rw(r,{hint:s.cacheKey,inputDependencies:["rank"]},[n[0]],s.noopWithEmptyAxes&&0===s.axes.length?rv:a,s.axes,n[0].dataType,s.keepDims,s.noopWithEmptyAxes),{inputs:[0]})},rS=(t,r)=>{r$(t.inputs),rk(t,"ReduceLogSum",r,(t,r)=>[`var value = ${r.type.storage}(0);`,"",`value += ${t.getByIndices("input_indices")};`,"value = log(value);"])},rT=(t,r)=>{r$(t.inputs),rk(t,"ReduceL1",r,(t,r)=>[`var value = ${r.type.storage}(0);`,"",`value += abs(${t.getByIndices("input_indices")});`,""])},rI=(t,r)=>{r$(t.inputs),rk(t,"ReduceL2",r,(t,r)=>[`var t = ${r.type.value}(0); var value = ${r.type.value}(0);`,"",`t = ${t.getByIndices("input_indices")}; value += (t * t);`,"value = sqrt(value);"])},rE=(t,r)=>{r$(t.inputs),rk(t,"ReduceLogSumExp",r,(t,r)=>[`var value = ${r.type.storage}(0);`,"",`value += exp(${t.getByIndices("input_indices")});`,"value = log(value);"])},rC=(t,r)=>{r$(t.inputs),rk(t,"ReduceMax",r,(t,r,i)=>{let a=[];for(let r=0;r<t.rank;r++)(i.indexOf(r)>=0||0===i.length)&&a.push(t.indicesSet("input_indices",r,0));return[`${a.join(`
154`)}`,`var value = ${t.getByIndices("input_indices")};`,`value = max(value, ${t.getByIndices("input_indices")});`,""]})},rz=(t,r)=>{r$(t.inputs),rk(t,"ReduceMean",r,(r,i,a)=>{let n=1;for(let i=0;i<r.rank;i++)(a.indexOf(i)>=0||0===a.length)&&(n*=t.inputs[0].dims[i]);return["var sum = f32(0);","",`sum += f32(${r.getByIndices("input_indices")});`,`let value = ${i.type.value}(sum / ${n});`]})},rA=(t,r)=>{r$(t.inputs),rk(t,"ReduceMin",r,(t,r,i)=>{let a=[];for(let r=0;r<t.rank;r++)(i.indexOf(r)>=0||0===i.length)&&a.push(`input_indices[${r}] = 0;`);return[`${a.join(`
155`)}`,`var value = ${t.getByIndices("input_indices")};`,`value = min(value, ${t.getByIndices("input_indices")});`,""]})},rO=(t,r)=>{r$(t.inputs),rk(t,"ReduceProd",r,(t,r)=>[`var value = ${r.type.storage}(1);`,"",`value *= ${t.getByIndices("input_indices")};`,""])},rR=(t,r)=>{r$(t.inputs),rk(t,"ReduceSum",r,(t,r)=>[`var value = ${r.type.storage}(0);`,"",`value += ${t.getByIndices("input_indices")};`,""])},rB=(t,r)=>{r$(t.inputs),rk(t,"ReduceSumSquare",r,(t,r)=>[`var t = ${r.type.value}(0); var value = ${r.type.value}(0);`,"",`t = ${t.getByIndices("input_indices")}; value += t * t;`,""])},rN=(t,r,i)=>{if(0===r.length)return i;let a=1,n=1;for(let i=0;i<r.length;i++)-1===r.indexOf(i)?a*=t[i]:n*=t[i];return n<32&&a>1024},rM=(t,r)=>{rN(t.inputs[0].dims,r.axes,r.noopWithEmptyAxes)?rz(t,r):rd(t,r)},rD=(t,r)=>{rN(t.inputs[0].dims,r.axes,r.noopWithEmptyAxes)?rT(t,r):rp(t,r)},rP=(t,r)=>{rN(t.inputs[0].dims,r.axes,r.noopWithEmptyAxes)?rI(t,r):rc(t,r)},rU=(t,r)=>{rN(t.inputs[0].dims,r.axes,r.noopWithEmptyAxes)?rE(t,r):rh(t,r)},rq=(t,r)=>{rN(t.inputs[0].dims,r.axes,r.noopWithEmptyAxes)?rC(t,r):rf(t,r)},rW=(t,r)=>{rN(t.inputs[0].dims,r.axes,r.noopWithEmptyAxes)?rA(t,r):rm(t,r)},rL=(t,r)=>{rN(t.inputs[0].dims,r.axes,r.noopWithEmptyAxes)?rO(t,r):rg(t,r)},rV=(t,r)=>{rN(t.inputs[0].dims,r.axes,r.noopWithEmptyAxes)?rR(t,r):ry(t,r)},rG=(t,r)=>{rN(t.inputs[0].dims,r.axes,r.noopWithEmptyAxes)?rB(t,r):r_(t,r)},rH=(t,r)=>{rN(t.inputs[0].dims,r.axes,r.noopWithEmptyAxes)?rS(t,r):rb(t,r)}}),o7=q(()=>{oK(),o3(),o5(),rF=t=>{if(!t||0===t.length||t.length>2)throw Error("ArgMinMaxOp op requires 1 or 2 inputs.");if(1!==t[0].dataType)throw Error("Invalid input type.")},rj=(t,r)=>
155{rF(t.inputs),t.compute(rw("ArgMin",{hint:r.cacheKey,inputDependencies:["rank"]},[t.inputs[0]],(t,i,a)=>{let n=[];for(let r=0;r<t.rank;r++)(a.indexOf(r)>=0||0===a.length)&&n.push(`input_indices[${r}] = 0;`);return[`${n.join(`
156`)}`,`var value = ${t.getByIndices("input_indices")};
157var best_index : i32 = 0;`,`if (${t.getByIndices("input_indices")} ${r.selectLastIndex>0?"<=":"<"} value) {
158         value = ${t.getByIndices("input_indices")};
159         best_index = i32(last_index);
160       }`,"",i.setByOffset("global_idx","best_index")]},[r.axis],7,r.keepDims),{inputs:[0]})},rK=(t,r)=>{rF(t.inputs),t.compute(rw("argMax",{hint:r.cacheKey,inputDependencies:["rank"]},[t.inputs[0]],(t,i,a)=>{let n=[];for(let r=0;r<t.rank;r++)(a.indexOf(r)>=0||0===a.length)&&n.push(`input_indices[${r}] = 0;`);return[`${n.join(`
161`)}`,`var value = ${t.getByIndices("input_indices")};
162var best_index : i32 = 0;`,`if (${t.getByIndices("input_indices")} ${r.selectLastIndex>0?">=":">"} value) {
163         value = ${t.getByIndices("input_indices")};
164         best_index = i32(last_index);
165       }`,"",i.setByOffset("global_idx","best_index")]},[r.axis],7,r.keepDims),{inputs:[0]})},rZ=t=>tM(t)}),o9=q(()=>{oK(),oX(),o2(),o4(),rQ=(t,r)=>{let i=t[0],a=t[1],n=t[2],s=t[3],o=t[4],u=t[5];if(o&&u)throw Error("Attention cannot have both past and attention_bias");if(3!==i.dims.length)throw Error('Input "input" must have 3 dimensions');let l=i.dims[0],d=i.dims[1],p=i.dims[2];if(1!==n.dims.length)throw Error('Input "bias" is expected to have 1 dimensions');if(2!==a.dims.length)throw Error('Input "weights" is expected to have 2 dimensions');if(a.dims[0]!==p)throw Error("Input 1 dimension 0 should have same length as dimension 2 of input 0");if(n.dims[0]!==a.dims[1])throw Error('Input "bias" dimension 0 should have same length as dimension 1 of input "weights"');let c=n.dims[0]/3,h=c,f=h;if(r.qkvHiddenSizes.length>0){if(3!==r.qkvHiddenSizes.length)throw Error("qkv_hidden_sizes attribute should have 3 elements");for(let t of r.qkvHiddenSizes)if(t%r.numHeads!=0)throw Error("qkv_hidden_sizes should be divisible by num_heads");c=r.qkvHiddenSizes[0],h=r.qkvHiddenSizes[1],f=r.qkvHiddenSizes[2]}if(c!==h)throw Error("qkv_hidden_sizes first element should be same as the second");if(n.dims[0]!==c+h+f)throw Error('Input "bias" dimension 0 should have same length as sum of Q/K/V hidden sizes');let m=0;if(o){if(h!==f)throw Error('Input "past" expect k_hidden_size == v_hidden_size');if(5!==o.dims.length)throw Error('Input "past" must have 5 dimensions');if(2!==o.dims[0])throw Error('Input "past" first dimension must be 2');if(o.dims[1]!==l)throw Error('Input "past" second dimension must be batch_size');if(o.dims[2]!==r.numHeads)throw Error('Input "past" third dimension must be num_heads');if(o.dims[4]!==h/r.numHeads)throw Error('Input "past" fifth dimension must be k_hidden_size / num_heads');r.pastPresentShareBuffer||(m=o.dims[3])}let g=d+m;if(s)throw Error("Mask not supported");if(o)throw Error("past is not supported");if(u){if(4!==u.dims.length)throw Error('Input "attention_bias" must have 4 dimensions');if(u.dims[0]!==l||u.dims[1]!==r.numHeads||u.dims[2]!==d||u.dims[3]!==g)throw Error('Expect "attention_bias" shape (batch_size, num_heads, sequence_length, total_sequence_length)')}return{batchSize:l,sequenceLength:d,pastSequenceLength:m,kvSequenceLength:d,totalSequenceLength:g,maxSequenceLength:-1,inputHiddenSize:p,hiddenSize:c,vHiddenSize:f,headSize:Math.floor(c/r.numHeads),vHeadSize:Math.floor(f/r.numHeads),numHeads:r.numHeads,isUnidirectional:!1,pastPresentShareBuffer:!1,maskFilterValue:r.maskFilterValue,maskType:0,scale:r.scale,broadcastResPosBias:!1,passPastInKv:!1,qkvFormat:1}},rX=(t,r,i)=>r&&t?`
166      let total_sequence_length_input = u32(${r.getByOffset("0")});
167      let present_sequence_length = max(total_sequence_length_input, uniforms.past_sequence_length);
168      let is_subsequent_prompt: bool = sequence_length > 1 && sequence_length != total_sequence_length_input;
169      let is_first_prompt: bool = is_subsequent_prompt == false && sequence_length == total_sequence_length_input;
170      total_sequence_length = u32(${t?.getByOffset("batchIdx")}) + 1;
171      var past_sequence_length: u32 = 0;
172      if (is_first_prompt == false) {
173        past_sequence_length = total_sequence_length - sequence_length;
174      }
175       `:`
176    ${i?"let past_sequence_length = uniforms.past_sequence_length":""};
177    let present_sequence_length = total_sequence_length;
178    `,rY=(t,r,i,a,n,s,o,u)=>{let l=tL(o?1:s),d=64,p=s/l;p<64&&(d=32);let c=[{type:12,data:r},{type:12,data:i},{type:12,data:a},{type:12,data:n},{type:12,data:p},{type:12,data:Math.ceil(s/l/d)}],h=tU(t.dataType,l),f=tq(1,l),m=["type"];return o&&m.push("type"),u&&m.push("type"),{name:"AttentionProbsSoftmax",shaderCache:{hint:`${d};${h};${l}`,inputDependencies:m},getShaderSource:r=>{let i=tZ("x",t.dataType,t.dims,l),a=[i],n=o?tK("seq_lens",o.dataType,o.dims):void 0;n&&a.push(n);let s=u?tK("total_sequence_length_input",u.dataType,u.dims):void 0;s&&a.push(s);let p=tq(t.dataType);return`
179  var<workgroup> thread_max: array<f32, ${d}>;
180  var<workgroup> thread_sum: array<f32, ${d}>;
181  ${r.registerUniforms([{name:"batch_size",type:"u32"},{name:"num_heads",type:"u32"},{name:"past_sequence_length",type:"u32"},{name:"sequence_length",type:"u32"},{name:"total_sequence_length",type:"u32"},{name:"elements_per_thread",type:"u32"}]).declareVariables(...a)}
182  ${r.mainStart([d,1,1])}
183    let batchIdx = workgroup_id.z / uniforms.num_heads;
184    let headIdx = workgroup_id.z % uniforms.num_heads;
185    let sequence_length = uniforms.sequence_length;
186    var total_sequence_length = uniforms.total_sequence_length;
187    ${rX(n,s,!1)}
188    let local_offset = local_idx * uniforms.elements_per_thread;
189    let offset = (global_idx / ${d}) * uniforms.total_sequence_length + local_offset;
190    let seq_causal_length = ${o?"u32(past_sequence_length + workgroup_id.y + 1)":"total_sequence_length"};
191    var thread_max_vector = ${f}(-3.402823e+38f);
192    for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < seq_causal_length; i++) {
193      thread_max_vector = max(${f}(x[offset + i]), thread_max_vector);
194    }
195    thread_max[local_idx] = ${(()=>{switch(l){case 1:return"thread_max_vector";case 2:return"max(thread_max_vector.x, thread_max_vector.y)";case 4:return"max(max(thread_max_vector.x, thread_max_vector.y), max(thread_max_vector.z, thread_max_vector.w))";default:throw Error(`Unsupported components: ${l}`)}})()};
196    workgroupBarrier();
197
198    var max_value =  f32(-3.402823e+38f);
199    for (var i = 0u; i < ${d}; i++) {
200      max_value = max(thread_max[i], max_value);
201    }
202
203    var sum_vector = ${f}(0);
204    for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < seq_causal_length; i++) {
205      sum_vector += exp(${f}(x[offset + i]) - max_value);
206    }
207    thread_sum[local_idx] = ${(()=>{switch(l){case 1:return"sum_vector";case 2:return"sum_vector.x + sum_vector.y";case 4:return"sum_vector.x + sum_vector.y + sum_vector.z + sum_vector.w";default:throw Error(`Unsupported components: ${l}`)}})()};
208    workgroupBarrier();
209
210    var sum: f32 = 0;
211    for (var i = 0u; i < ${d}; i++) {
212      sum += thread_sum[i];
213    }
214
215    if (sum == 0) {
216      for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < seq_causal_length; i++) {
217        x[offset + i] = ${i.type.value}(${p}(1.0) / ${p}(seq_causal_length));
218      }
219    } else {
220      for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < seq_causal_length; i++) {
221        var f32input = ${f}(x[offset + i]);
222        x[offset + i] = ${i.type.value}(exp(f32input - max_value) / sum);
223      }
224    }
225      ${o?`
226        for (var total_seq_id: u32 = seq_causal_length; total_seq_id + local_offset < uniforms.total_sequence_length; total_seq_id++) {
227          x[offset + total_seq_id] = ${i.type.value}(${p}(0));
228        }`:""};
229  }`},getRunData:()=>({outputs:[],dispatchGroup:{x:1,y:n,z:r*i},programUniforms:c})}},rJ=(t,r,i,a,n,s,o,u,l)=>{let d=o+s.kvSequenceLength,p=[s.batchSize,s.numHeads,s.sequenceLength,d],c=t>1&&a,h=s.kvNumHeads?s.kvNumHeads:s.numHeads,f=c?[s.batchSize,h,d,s.headSize]:void 0,m=s.nReps?s.nReps:1,g=0===s.scale?1/Math.sqrt(s.headSize):s.scale,y=tL(s.headSize),_=s.headSize/y,b={x:Math.ceil(d/12),y:Math.ceil(s.sequenceLength/12),z:s.batchSize*s.numHeads},$=[{type:12,data:s.sequenceLength},{type:12,data:_},{type:12,data:d},{type:12,data:s.numHeads},{type:12,data:s.headSize},{type:1,data:g},{type:12,data:o},{type:12,data:s.kvSequenceLength},{type:12,data:m}],v=c&&a&&ts.size(a.dims)>0,w=["type","type"];v&&w.push("type"),n&&w.push("type"),u&&w.push("type"),l&&w.push("type");let x=[{dims:p,dataType:r.dataType,gpuDataType:0}];return c&&x.push({dims:f,dataType:r.dataType,gpuDataType:0}),{name:"AttentionProbs",shaderCache:{hint:`${y};${void 0!==n};${void 0!==a};${t}`,inputDependencies:w},getRunData:()=>({outputs:x,dispatchGroup:b,programUniforms:$}),getShaderSource:t=>{let s=tK("q",r.dataType,r.dims,y),o=[s,tK("key",i.dataType,i.dims,y)];if(v){let t=tK("past_key",a.dataType,a.dims,y);o.push(t)}n&&o.push(tK("attention_bias",n.dataType,n.dims));let d=u?tK("seq_lens",u.dataType,u.dims):void 0;d&&o.push(d);let h=l?tK("total_sequence_length_input",l.dataType,l.dims):void 0;h&&o.push(h);let g=tZ("output",r.dataType,p),_=[g];c&&_.push(tZ("present_key",r.dataType,f,y));let b=tq(1,y);return`
230  const TILE_SIZE = 12u;
231
232  var<workgroup> tileQ: array<${s.type.storage}, 144>;
233  var<workgroup> tileK: array<${s.type.storage}, 144>;
234  ${t.registerUniforms([{name:"M",type:"u32"},{name:"K",type:"u32"},{name:"N",type:"u32"},{name:"num_heads",type:"u32"},{name:"head_size",type:"u32"},{name:"alpha",type:"f32"},{name:"past_sequence_length",type:"u32"},{name:"kv_sequence_length",type:"u32"},{name:"n_reps",type:"u32"}]).declareVariables(...o,..._)}
235  ${t.mainStart([12,12,1])}
236    // x holds the N and y holds the M
237    let headIdx = workgroup_id.z % uniforms.num_heads;
238    let kvHeadIdx = ${1===m?"headIdx":"headIdx / uniforms.n_reps"};
239    let kv_num_heads = ${1===m?"uniforms.num_heads":"uniforms.num_heads / uniforms.n_reps"};
240    let batchIdx = workgroup_id.z / uniforms.num_heads;
241    let m = workgroup_id.y * TILE_SIZE;
242    let n = workgroup_id.x * TILE_SIZE;
243    let sequence_length = uniforms.M;
244    var total_sequence_length = uniforms.N;
245    ${rX(d,h,!0)}
246    let absKvHeadIdx = batchIdx * kv_num_heads + kvHeadIdx;
247    let qOffset = workgroup_id.z * uniforms.M * uniforms.K + m * uniforms.K;
248    ${v&&c?"let pastKeyOffset = absKvHeadIdx * uniforms.past_sequence_length * uniforms.K;":""};
249    let kOffset = absKvHeadIdx * uniforms.kv_sequence_length * uniforms.K;
250    ${c?"let presentKeyOffset = absKvHeadIdx * uniforms.N * uniforms.K;":""}
251    var value = ${b}(0);
252    for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) {
253      if (global_id.y < uniforms.M && w + local_id.x < uniforms.K) {
254        tileQ[TILE_SIZE * local_id.y + local_id.x] = q[qOffset + local_id.y * uniforms.K + w + local_id.x];
255      }
256      if (n + local_id.y < uniforms.N && w + local_id.x < uniforms.K) {
257        var idx = TILE_SIZE * local_id.y + local_id.x;
258      ${v&&c?`
259              if (n + local_id.y < past_sequence_length) {
260                tileK[idx] = past_key[pastKeyOffset + (n + local_id.y) * uniforms.K + w + local_id.x];
261              } else if (n + local_id.y - past_sequence_length < uniforms.kv_sequence_length) {
262                tileK[idx] = key[kOffset + (n + local_id.y - past_sequence_length) * uniforms.K + w + local_id.x];
263              }`:`
264          if (n + local_id.y < uniforms.kv_sequence_length) {
265            tileK[idx] = key[kOffset + (n + local_id.y) * uniforms.K + w + local_id.x];
266          }`}
267      ${c?`if (n + local_id.y < present_sequence_length) {
268        present_key[presentKeyOffset + (n + local_id.y) * uniforms.K + w + local_id.x] = tileK[idx];
269      }`:""}
270      }
271      workgroupBarrier();
272
273      for (var k: u32 = 0u; k < TILE_SIZE && w+k < uniforms.K; k++) {
274          value += ${b}(tileQ[TILE_SIZE * local_id.y + k] * tileK[TILE_SIZE * local_id.x + k]);
275      }
276
277      workgroupBarrier();
278    }
279
280    if (global_id.y < uniforms.M && global_id.x < total_sequence_length) {
281      let headOffset = workgroup_id.z * uniforms.M * uniforms.N;
282      let outputIdx = headOffset + global_id.y * uniforms.N + global_id.x;
283      var sum: f32 = ${(()=>{switch(y){case 1:return"value";case 2:return"value.x + value.y";case 4:return"value.x + value.y + value.z + value.w";default:throw Error(`Unsupported components: ${y}`)}})()};
284        output[outputIdx] = ${g.type.value} (sum * uniforms.alpha) + ${n?"attention_bias[outputIdx]":"0.0"};
285    }
286  }`}}},r0=(t,r,i,a,n,s,o,u)=>{let l=s+n.kvSequenceLength,d=n.nReps?n.nReps:1,p=n.vHiddenSize*d,c=t>1&&a,h=n.kvNumHeads?n.kvNumHeads:n.numHeads,f=c?[n.batchSize,h,l,n.headSize]:void 0,m=[n.batchSize,n.sequenceLength,p],g={x:Math.ceil(n.vHeadSize/12),y:Math.ceil(n.sequenceLength/12),z:n.batchSize*n.numHeads},y=[{type:12,data:n.sequenceLength},{type:12,data:l},{type:12,data:n.vHeadSize},{type:12,data:n.numHeads},{type:12,data:n.headSize},{type:12,data:p},{type:12,data:s},{type:12,data:n.kvSequenceLength},{type:12,data:d}],_=c&&a&&ts.size(a.dims)>0,b=["type","type"];
vendor: 4,336 bytes, lines 286-341
286_&&b.push("type"),o&&b.push("type"),u&&b.push("type");let $=[{dims:m,dataType:r.dataType,gpuDataType:0}];return c&&$.push({dims:f,dataType:r.dataType,gpuDataType:0}),{name:"AttentionScore",shaderCache:{hint:`${void 0!==a};${t}`,inputDependencies:b},getRunData:()=>({outputs:$,dispatchGroup:g,programUniforms:y}),getShaderSource:t=>{let n=tK("probs",r.dataType,r.dims),s=[n,tK("v",i.dataType,i.dims)];_&&s.push(tK("past_value",a.dataType,a.dims));let l=o?tK("seq_lens",o.dataType,o.dims):void 0;o&&s.push(l);let p=u?tK("total_sequence_length_input",u.dataType,u.dims):void 0;u&&s.push(p);let h=[tZ("output",r.dataType,m)];return c&&h.push(tZ("present_value",r.dataType,f)),`
287  const TILE_SIZE = 12u;
288  var<workgroup> tileQ: array<${n.type.value}, 144>;
289  var<workgroup> tileV: array<${n.type.value}, 144>;
290  ${t.registerUniforms([{name:"M",type:"u32"},{name:"K",type:"u32"},{name:"N",type:"u32"},{name:"num_heads",type:"u32"},{name:"head_size",type:"u32"},{name:"v_hidden_size",type:"u32"},{name:"past_sequence_length",type:"u32"},{name:"kv_sequence_length",type:"u32"},{name:"n_reps",type:"u32"}]).declareVariables(...s,...h)}
291  ${t.mainStart([12,12,1])}
292   let headIdx = workgroup_id.z % uniforms.num_heads;
293   let batchIdx = workgroup_id.z / uniforms.num_heads;
294   let kvHeadIdx = ${1===d?"headIdx":"headIdx / uniforms.n_reps"};
295   let kv_num_heads = ${1===d?"uniforms.num_heads":"uniforms.num_heads / uniforms.n_reps"};
296   let m = global_id.y;
297   let n = global_id.x;
298   let sequence_length = uniforms.M;
299   var total_sequence_length = uniforms.K;
300   ${rX(l,p,!0)}
301   let offsetA = workgroup_id.z * uniforms.M * uniforms.K + m * uniforms.K;
302   let absKvHeadIdx = batchIdx * kv_num_heads + kvHeadIdx; // kvHeadIdx is relative to the batch
303   ${_&&c?"let pastValueOffset = absKvHeadIdx * uniforms.N * uniforms.past_sequence_length + n;":""};
304   let vOffset = absKvHeadIdx * uniforms.N * uniforms.kv_sequence_length + n;
305   ${c?"let presentValueOffset = absKvHeadIdx * uniforms.N * uniforms.K + n;":""}
306   var value = ${n.type.storage}(0);
307   for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) {
308      if (m < uniforms.M && w + local_id.x < uniforms.K) {
309        tileQ[TILE_SIZE * local_id.y + local_id.x] = probs[offsetA + w + local_id.x];
310      }
311      if (n < uniforms.N && w + local_id.y < uniforms.K) {
312        var idx = TILE_SIZE * local_id.y + local_id.x;
313        ${_&&c?`
314        if (w + local_id.y < past_sequence_length) {
315          tileV[idx] = past_value[pastValueOffset + (w + local_id.y) * uniforms.N];
316        } else if (w + local_id.y - past_sequence_length < uniforms.kv_sequence_length) {
317          tileV[idx] = v[vOffset + (w + local_id.y - past_sequence_length) * uniforms.N];
318        }
319      `:`
320            if (w + local_id.y < uniforms.kv_sequence_length) {
321              tileV[idx] = v[vOffset + (w + local_id.y) * uniforms.N];
322            }`}
323        ${c?`
324            if (w + local_id.y < present_sequence_length) {
325          present_value[presentValueOffset + (w + local_id.y) * uniforms.N] = tileV[idx];
326        }`:""}
327      }
328     workgroupBarrier();
329     for (var k: u32 = 0u; k < TILE_SIZE && w+k < total_sequence_length; k++) {
330       value += tileQ[TILE_SIZE * local_id.y + k] * tileV[TILE_SIZE * k + local_id.x];
331     }
332     workgroupBarrier();
333   }
334
335   // we need to transpose output from BNSH_v to BSND_v
336   if (m < uniforms.M && n < uniforms.N) {
337     let outputIdx = batchIdx * uniforms.M * uniforms.v_hidden_size + m * uniforms.v_hidden_size
338       + headIdx * uniforms.N + n;
339     output[outputIdx] = value;
340   }
341  }`}}},r2=(t,r,i,a,n,s,o,u,l,d,p,c)=>{let h=Math.min(t.outputCount,1+ +!!o+ +!!u),f=h>1?d.pastSequenceLength:0,m=f+d.kvSequenceLength,g=l&&ts.size(l.dims)>0?l:void 0,y=[r,i];h>1&&o&&ts.size(o.dims)>0&&y.push(o),g&&y.push(g),p&&y.push(p),c&&y.push(c);let _=t.compute(rJ(h,r,i,o,g,d,f,p,c),{inputs:y,outputs:h>1?[-1,1]:[-1]})[0];t.compute(rY(_,d.batchSize,d.numHeads,f,d.sequenceLength,m,p,c),{inputs:p&&c?[_,p,c]:[_],outputs:[]});let b=[_,a];h>1&&u&&ts.size(u.dims)>0&&b.push(u),p&&b.push(p),c&&b.push(c),t.compute(r0(h,_,a,u,d,f,p,c),{inputs:b,outputs:h>1?[0,2]:[0]})},r1=(t,r)=>{let i=[r.batchSize,r.numHeads,r.sequenceLength,r.headSize],a=r.sequenceLength,n=r.inputHiddenSize,s=r.headSize,o={x:Math.ceil(r.headSize/12),y:Math.ceil(r.sequenceLength/12),z:r.batchSize*r.numHeads}
341,u=[t.inputs[0],t.inputs[1],t.inputs[2]],l=[{type:12,data:a},{type:12,data:n},{type:12,data:s},{type:12,data:r.numHeads},{type:12,data:r.headSize},{type:12,data:r.hiddenSize},{type:12,data:r.hiddenSize+r.hiddenSize+r.vHiddenSize}];return t.compute({name:"AttentionPrepare",shaderCache:{inputDependencies:["type","type","type"]},getRunData:()=>({outputs:[{dims:i,dataType:t.inputs[0].dataType,gpuDataType:0},{dims:i,dataType:t.inputs[0].dataType,gpuDataType:0},{dims:i,dataType:t.inputs[0].dataType,gpuDataType:0}],dispatchGroup:o,programUniforms:l}),getShaderSource:t=>{let r=tZ("output_q",u[0].dataType,i),a=tZ("output_k",u[0].dataType,i),n=tZ("output_v",u[0].dataType,i),s=tK("input",u[0].dataType,u[0].dims),o=tK("weight",u[1].dataType,u[1].dims),l=tK("bias",u[2].dataType,u[2].dims),d=s.type.storage;return`
342  const TILE_SIZE = 12u;
343  var<workgroup> tileInput: array<${d}, 144>;
344  var<workgroup> tileWeightQ: array<${d}, 144>;
345  var<workgroup> tileWeightK: array<${d}, 144>;
346  var<workgroup> tileWeightV: array<${d}, 144>;
347  ${t.registerUniforms([{name:"M",type:"u32"},{name:"K",type:"u32"},{name:"N",type:"u32"},{name:"num_heads",type:"u32"},{name:"head_size",type:"u32"},{name:"hidden_size",type:"u32"},{name:"ldb",type:"u32"}]).declareVariables(s,o,l,r,a,n)}
348  ${t.mainStart([12,12,1])}
349    let batchIndex = workgroup_id.z / uniforms.num_heads;
350    let headNumber = workgroup_id.z % uniforms.num_heads;
351    let m = global_id.y;
352    let n = global_id.x;
353
354    let inputOffset = batchIndex * (uniforms.M * uniforms.K) + m * uniforms.K;
355    let biasOffsetQ = headNumber * uniforms.head_size;
356    let biasOffsetK = uniforms.hidden_size + biasOffsetQ;
357    let biasOffsetV = uniforms.hidden_size + biasOffsetK;
358
359    var valueQ = ${d}(0);
360    var valueK = ${d}(0);
361    var valueV = ${d}(0);
362    for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) {
363      if (m < uniforms.M && w + local_id.x < uniforms.K) {
364        tileInput[TILE_SIZE * local_id.y + local_id.x] = input[inputOffset + w + local_id.x];
365      }
366      if (n < uniforms.N && w + local_id.y < uniforms.K) {
367        let offset = n + (w + local_id.y) * uniforms.ldb;
368        tileWeightQ[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetQ + offset];
369        tileWeightK[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetK + offset];
370        tileWeightV[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetV + offset];
371      }
372      workgroupBarrier();
373      for (var k: u32 = 0u; k<TILE_SIZE && w+k < uniforms.K; k++) {
374        let inputTileOffset = TILE_SIZE * local_id.y + k;
375        let weightTileOffset = TILE_SIZE * k + local_id.x;
376        valueQ += tileInput[inputTileOffset] * tileWeightQ[weightTileOffset];
377        valueK += tileInput[inputTileOffset] * tileWeightK[weightTileOffset];
378        valueV += tileInput[inputTileOffset] * tileWeightV[weightTileOffset];
379      }
380
381      workgroupBarrier();
382    }
383
384    let headOffset = (m * uniforms.N + n) % uniforms.head_size;
385    valueQ += bias[headOffset + biasOffsetQ];
386    valueK += bias[headOffset + biasOffsetK];
387    valueV += bias[headOffset + biasOffsetV];
388
389    let offset = workgroup_id.z * uniforms.M * uniforms.N;
390    if (m < uniforms.M && n < uniforms.N) {
391      let outputIdx = offset + m * uniforms.N + n;
392      output_q[outputIdx] = valueQ;
393      output_k[outputIdx] = valueK;
394      output_v[outputIdx] = valueV;
395    }
396  }`}},{inputs:u,outputs:[-1,-1,-1]})},r3=(t,r)=>{let i=rQ(t.inputs,r),[a,n,s]=r1(t,i);return r2(t,a,n,s,t.inputs[4],void 0,void 0,void 0,t.inputs[5],i)}}),ue=q(()=>{el(),oK(),oX(),o3(),o4(),r4=(t,r)=>{if(!t||5!==t.length)throw Error("BatchNormalization requires 5 inputs");let i=(t,r,i)=>{let a=r.length;if(a!==t.length)throw Error(`${i}: num dimensions != ${a}`);r.forEach((r,a)=>{if(r!==t[a])throw Error(`${i}: dim[${a}] do not match`)})};if(t[0].dims.length>1){let a="NHWC"===r.format?r.spatial?t[0].dims.slice(-1):t[0].dims.slice(-1).concat(t[0].dims.slice(1,t[0].dims.length-1)):t[0].dims.slice(1,r.spatial?2:void 0);i(t[1].dims,a,"Invalid input scale"),i(t[2].dims,a,"Invalid input B"),i(t[3].dims,a,"Invalid input mean"),i(t[4].dims,a,"Invalid input var")}else i(t[1].dims,[1],"Invalid input scale"),i(t[2].dims,[1],"Invalid input B"),i(t[3].dims,[1],"Invalid input mean"),i(t[4].dims,[1],"Invalid input var")},r8=(t,r)=>{let{epsilon:i,spatial:a,format:n}=r,s=t[0].dims,o=a?tL(s[s.length-1]):1,u="NHWC"===n&&s.length>1?o:1,l=ts.size(s)/o,d=a?s.length:s,p=tK("x",t[0].dataType,t[0].dims,o),c=tK("scale",t[1].dataType,t[1].dims,u),h=tK("bias",t[2].dataType,t[2].dims,u),f=tK("inputMean",t[3].dataType,t[3].dims,u),m=tK("inputVar",t[4].dataType,t[4].dims,u),g=tZ("y",t[0].dataType,d,o),y=()=>{let t="";if(a)t=`let cOffset = ${1===s.length?"0u":"NHWC"===n?`outputIndices[${s.length-1}] / ${o}`:"outputIndices[1]"};`;else if("NCHW"===n)t=`
397            ${g.indicesSet("outputIndices","0","0")}
398            let cOffset = ${g.indicesToOffset("outputIndices")};`;else{t=`var cIndices = ${c.type.indices}(0);
399                       cIndices[0] = outputIndices[${s.length-1}];`;for(let r=1;r<c.rank;r++)t+=`cIndices[${r}] = outputIndices[${r}];`;t+=`let cOffset = ${c.indicesToOffset("cIndices")};`}return t};return{name:"BatchNormalization",shaderCache:{hint:`${r.epsilon}_${r.format}_${a}_${o}`,inputDependencies:a?["rank","type","type","type","type"]:void 0},getShaderSource:t=>`
400  const epsilon = ${i};
401  ${t.registerUniform("outputSize","u32").declareVariables(p,c,h,f,m,g)}
402  ${t.mainStart()}
403  ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
404    var outputIndices = ${g.offsetToIndices(`global_idx * ${o}`)};
405    ${y()}
406    let scale = ${c.getByOffset("cOffset")};
407    let bias = ${h.getByOffset("cOffset")};
408    let inputMean = ${f.getByOffset("cOffset")};
409    let inputVar = ${m.getByOffset("cOffset")};
410    let x = ${p.getByOffset("global_idx")};
411    let value = (x - inputMean) * inverseSqrt(inputVar + epsilon) * scale + bias;
412    ${g.setByOffset("global_idx","value")}
413  }`,getRunData:()=>({outputs:[{dims:t[0].dims,dataType:t[0].dataType}],dispatchGroup:{x:Math.ceil(l/64)},programUniforms:a?[{type:12,data:l},...tW(s)]:[{type:12,data:l}]})}},r6=t=>tM(t),r5=(t,r)=>{let{inputs:i,outputCount:a}=t,n=r6({...r,outputCount:a});if(c.webgpu.validateInputContent&&r4(i,n),r.trainingMode)throw Error("BatchNormalization trainingMode is not supported yet.");t.compute(r8(i,n))}}),ut=q(()=>{oX(),o4(),r7=t=>{if(3!==t[0].dims.length)throw Error("input should have 3 dimensions");if(![320,640,1280].includes(t[0].dims[2]))throw Error("number of channels should be 320, 640 or 1280");if(1!==t[1].dims.length)throw Error("bias is expected to have 1 dimensions");if(t[0].dims[2]!==t[1].dims[0])throw Error("last dimension of input and bias are not the same")},r9=t=>{let r=t[0].dims,i=t[0].dims[2],a=ts.size(r)/4,n=t[0].dataType,s=tK("input",n,r,4),o=tK("bias",n,[i],4),u=tK("residual",n,r,4),l=tZ("output",n,r,4);return{name:"BiasAdd",getRunData:()=>({outputs:[{dims:r,dataType:t[0].dataType}],dispatchGroup:{x:Math.ceil(a/64)}}),getShaderSource:t=>`
414  const channels = ${i}u / 4;
415  ${t.declareVariables(s,o,u,l)}
416
417  ${t.mainStart()}
418    ${t.guardAgainstOutOfBoundsWorkgroupSizes(a)}
419    let value = ${s.getByOffset("global_idx")}
420      + ${o.getByOffset("global_idx % channels")} + ${u.getByOffset("global_idx")};
421    ${l.setByOffset("global_idx","value")}
422  }`}},ie=t=>{r7(t.inputs),t.compute(r9(t.inputs))}}),ur=q(()=>{oK(),oX(),o3(),o4(),it=(t,r,i,a,n,s,o)=>{let u=Math.ceil(r/4),l="";l="string"==typeof n?`${n}(a)`:n("a");let d=tK("inputData",i,[u],4),p=tZ("outputData",a,[u],4),c=[{name:"vec_size",type:"u32"}];return o&&c.push(...o),`
423      ${t.registerUniforms(c).declareVariables(d,p)}
424
425  ${s??""}
426
427  ${t.mainStart()}
428    ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")}
429
430    let a = ${d.getByOffset("global_idx")};
431    ${p.setByOffset("global_idx",l)}
432  }`},ir=(t,r,i,a,n,s=t.dataType,o,u)=>{let l=[{type:12,data:Math.ceil(ts.size(t.dims)/4)}];return o&&l.push(...o),{name:r,shaderCache:{hint:n,inputDependencies:["type"]},getShaderSource:r=>it(r,ts.size(t.dims),t.dataType,s,i,a,u),getRunData:r=>({outputs:[{dims:t.dims,dataType:s}],dispatchGroup:{x:Math.ceil(ts.size(r[0].dims)/64/4)},programUniforms:l})}},ii=t=>{t.compute(ir(t.inputs[0],"Abs","abs"))},ia=t=>{t.compute(ir(t.inputs[0],"Acos","acos"))},is=t=>{t.compute(ir(t.inputs[0],"Acosh","acosh"))},io=t=>{t.compute(ir(t.inputs[0],"Asin","asin"))},iu=t=>{t.compute(ir(t.inputs[0],"Asinh","asinh"))},il=t=>{t.compute(ir(t.inputs[0],"Atan","atan"))},id=t=>{t.compute(ir(t.inputs[0],"Atanh","atanh"))},ip=t=>tM(t),ic=(t,r)=>{let i;switch(r.to){case 10:i="vec4<f16>";break;case 1:i="vec4<f32>";break;case 12:i="vec4<u32>";break;case 6:i="vec4<i32>";break;case 9:i="vec4<bool>";break;default:throw RangeError(`not supported type (specified in attribute 'to' from 'Cast' operator): ${r.to}`)}t.compute(ir(t.inputs[0],"Cast",i,void 0,r.cacheKey,r.to))},ih=t=>{let r,i,a=t.length>=2&&0!==t[1].data,n=t.length>=3&&0!==t[2].data;switch(t[0].dataType){case 1:r=a?t[1].getFloat32Array()[0]:-34028234663852886e22,i=n?t[2].getFloat32Array()[0]:34028234663852886e22;break;case 10:r=a?t[1].getUint16Array()[0]:64511,i=n?t[2].getUint16Array()[0]:31743;break;default:throw Error("Unsupport data type")}return tM({min:r,max:i})},im=(t,r)=>{let i=r||ih(t.inputs),a=tq(t.inputs[0].dataType);t.compute(ir(t.inputs[0],"Clip",t=>`clamp(${t}, vec4<${a}>(uniforms.min), vec4<${a}>(uniforms.max))`,void 0,i.cacheKey,void 0,[{type:t.inputs[0].dataType,data:i.min},{type:t.inputs[0].dataType,data:i.max}],[{name:"min",type:a},{name:"max",type:a}]),{inputs:[0]})},ig=t=>{t.compute(ir(t.inputs[0],"Ceil","ceil"))},iy=t=>{t.compute(ir(t.inputs[0],"Cos","cos"))},i_=t=>{t.compute(ir(t.inputs[0],"Cosh","cosh"))},ib=t=>tM(t),i$=(t,r)=>{let i=tq(t.inputs[0].dataType);t.compute(ir(t.inputs[0],"Elu",t=>`elu_vf32(${t})`,`
433  const elu_alpha_ = ${i}(${r.alpha});
434
435  fn elu_f32(a: ${i}) -> ${i} {
436  return select((exp(a) - 1.0) * elu_alpha_, a, a >= 0.0);
437  }
438
439  fn elu_vf32(v: vec4<${i}>) -> vec4<${i}> {
440  return vec4(elu_f32(v.x), elu_f32(v.y), elu_f32(v.z), elu_f32(v.w));
441  }`,r.cacheKey))},iv=(t="f32")=>`
442const r0: ${t} = 0.3275911;
443const r1: ${t} = 0.254829592;
444const r2: ${t} = -0.284496736;
445const r3: ${t} = 1.421413741;
446const r4: ${t} = -1.453152027;
447const r5: ${t} = 1.061405429;
448
449fn erf_vf32(v: vec4<${t}>) -> vec4<${t}> {
450  let absv = abs(v);
451  let x = 1.0 / (1.0 + r0 * absv);
452  return sign(v) * (1.0 - ((((r5 * x + r4) * x + r3) * x + r2) * x + r1) * x * exp(-absv * absv));
453}`,iw=t=>{let r=tq(t.inputs[0].dataType);t.compute(ir(t.inputs[0],"Erf",t=>`erf_vf32(${t})`,iv(r)))},ix=t=>{t.compute(ir(t.inputs[0],"Exp","exp"))},ik=t=>{t.compute(ir(t.inputs[0],"Floor","floor"))},iS=t=>{let r=tq(t.inputs[0].dataType);t.compute(ir(t.inputs[0],"Gelu",t=>`0.5 * ${t} * (1.0 + erf_vf32(${t} * 0.7071067811865475))`,iv(r)))},iT=(t,r)=>{let i=tq(t.inputs[0].dataType);t.compute(ir(t.inputs[0],"LeakyRelu",t=>`select(leaky_relu_alpha_ * ${t}, ${t}, ${t} >= vec4<${i}>(0.0))`,`const leaky_relu_alpha_ = ${i}(${r.alpha});
453`,r.cacheKey))},iI=t=>{t.compute(ir(t.inputs[0],"Not",t=>`!${t}`))},iE=t=>{t.compute(ir(t.inputs[0],"Neg",t=>`-${t}`))},iC=t=>{t.compute(ir(t.inputs[0],"Reciprocal",t=>`1.0/${t}`))},iz=t=>{let r=tq(t.inputs[0].dataType);t.compute(ir(t.inputs[0],"Relu",t=>`select(vec4<${r}>(0.0), ${t}, ${t} > vec4<${r}>(0.0))`))},iA=t=>{t.compute(ir(t.inputs[0],"Sigmoid",t=>`(1.0 / (1.0 + exp(-${t})))`))},iO=t=>tM(t),iR=(t,r)=>{let i=tq(t.inputs[0].dataType);t.compute(ir(t.inputs[0],"HardSigmoid",t=>`max(vec4<${i}>(0.0), min(vec4<${i}>(1.0), ${r.alpha} * ${t} + vec4<${i}>(${r.beta})))`,void 0,r.cacheKey))},iB=t=>{t.compute(ir(t.inputs[0],"Sin","sin"))},iN=t=>{t.compute(ir(t.inputs[0],"Sinh","sinh"))},iM=t=>{t.compute(ir(t.inputs[0],"Sqrt","sqrt"))},iD=t=>{t.compute(ir(t.inputs[0],"Tan","tan"))},iP=t=>`sign(${t}) * (1 - exp(-2 * abs(${t}))) / (1 + exp(-2 * abs(${t})))`,iU=t=>{t.compute(ir(t.inputs[0],"Tanh",iP))},iq=(t="f32")=>`
454const fast_gelu_a: ${t} = 0.5;
455const fast_gelu_b: ${t} = 0.7978845608028654;
456const fast_gelu_c: ${t} = 0.035677408136300125;
457
458fn tanh_v(v: vec4<${t}>) -> vec4<${t}> {
459  return ${iP("v")};
460}
461`,iW=t=>`(fast_gelu_a + fast_gelu_a * tanh_v(${t} * (fast_gelu_c * ${t} * ${t} + fast_gelu_b))) * ${t}`,iL=t=>{let r=tq(t.inputs[0].dataType);t.compute(ir(t.inputs[0],"FastGelu",iW,iq(r),void 0,t.inputs[0].dataType))},iV=(t,r)=>{let i=tq(t.inputs[0].dataType);return t.compute(ir(t.inputs[0],"ThresholdedRelu",t=>`select(vec4<${i}>(0.0), ${t}, ${t} > thresholded_relu_alpha_)`,`const thresholded_relu_alpha_ = vec4<${i}>(${r.alpha});
461`,r.cacheKey)),0},iG=t=>{t.compute(ir(t.inputs[0],"Log","log"))},iH=(t,r)=>`
462const alpha = vec4<${t}>(${r});
463const one = ${t}(1.0);
464const zero = ${t}(0.0);
465
466fn quick_gelu_impl(x: vec4<${t}>) -> vec4<${t}> {
467  let v = x *alpha;
468  var x1 : vec4<${t}>;
469  for (var i = 0; i < 4; i = i + 1) {
470    if (v[i] >= zero) {
471      x1[i] = one / (one + exp(-v[i]));
472    } else {
473      x1[i] = one - one / (one + exp(v[i]));
474    }
475  }
476  return x * x1;
477}
478`,iF=t=>`quick_gelu_impl(${t})`,ij=(t,r)=>{let i=tq(t.inputs[0].dataType);t.compute(ir(t.inputs[0],"QuickGelu",iF,iH(i,r.alpha),r.cacheKey,t.inputs[0].dataType))}}),ui=q(()=>{oX(),o4(),ur(),iK=t=>{if(3!==t[0].dims.length)throw Error("input should have 3 dimensions");if(![2560,5120,10240].includes(t[0].dims[2]))throw Error("hidden state should be 2560, 5120 or 10240");if(1!==t[1].dims.length)throw Error("bias is expected to have 1 dimensions");if(t[0].dims[2]!==t[1].dims[0])throw Error("last dimension of input and bias are not the same")},iZ=t=>{let r=t[0].dims.slice();r[2]=r[2]/2;let i=tK("input",t[0].dataType,t[0].dims,4),a=tK("bias",t[0].dataType,[t[0].dims[2]],4),n=tZ("output",t[0].dataType,r,4),s=ts.size(r)/4,o=tU(t[0].dataType);return{name:"BiasSplitGelu",getRunData:()=>({outputs:[{dims:r,dataType:t[0].dataType}],dispatchGroup:{x:Math.ceil(s/64)}}),getShaderSource:r=>`
479  const M_SQRT2 = sqrt(2.0);
480  const halfChannels = ${t[0].dims[2]/4/2}u;
481
482  ${r.declareVariables(i,a,n)}
483
484  ${iv(o)}
485
486  ${r.mainStart()}
487    ${r.guardAgainstOutOfBoundsWorkgroupSizes(s)}
488    let biasIdx = global_idx % halfChannels;
489    let batchIndex = global_idx / halfChannels;
490    let inputOffset = biasIdx + batchIndex * halfChannels * 2;
491    let valueLeft = input[inputOffset] + bias[biasIdx];
492    let valueRight = input[inputOffset + halfChannels] + bias[biasIdx + halfChannels];
493    let geluRight = valueRight * 0.5 * (erf_vf32(valueRight / M_SQRT2) + 1);
494
495    ${n.setByOffset("global_idx","valueLeft * geluRight")}
496  }`}},iQ=t=>{iK(t.inputs),t.compute(iZ(t.inputs))}}),ua=q(()=>{oK(),oX(),o4(),iX=(t,r,i,a,n,s,o,u,l,d,p,c)=>{let h,f;"string"==typeof u?h=f=(t,r)=>`${u}((${t}),(${r}))`:"function"==typeof u?h=f=u:(h=u.scalar,f=u.vector);let m=tZ("outputData",p,a.length,4),g=tK("aData",l,r.length,4),y=tK("bData",d,i.length,4),_;if(n)if(s){let t=1===ts.size(r),a=1===ts.size(i),n=r.length>0&&r[r.length-1]%4==0,s=i.length>0&&i[i.length-1]%4==0;_=t||a?m.setByOffset("global_idx",f(t?`${g.type.value}(${g.getByOffset("0")}.x)`:g.getByOffset("global_idx"),a?`${y.type.value}(${y.getByOffset("0")}.x)`:y.getByOffset("global_idx"))):`
497            let outputIndices = ${m.offsetToIndices("global_idx * 4u")};
498            let offsetA = ${g.broadcastedIndicesToOffset("outputIndices",m)};
499            let offsetB = ${y.broadcastedIndicesToOffset("outputIndices",m)};
500            ${m.setByOffset("global_idx",f(o||n?g.getByOffset("offsetA / 4u"):`${g.type.value}(${g.getByOffset("offsetA / 4u")}[offsetA % 4u])`,o||s?y.getByOffset("offsetB / 4u"):`${y.type.value}(${y.getByOffset("offsetB / 4u")}[offsetB % 4u])`))}
501          `}else _=m.setByOffset("global_idx",f(g.getByOffset("global_idx"),y.getByOffset("global_idx")));else{if(!s)throw Error("no necessary to use scalar implementation for element-wise binary op implementation.");let t=(t,r,i="")=>{let a=`aData[indexA${r}][componentA${r}]`,n=`bData[indexB${r}][componentB${r}]`;return`
502            let outputIndices${r} = ${m.offsetToIndices(`global_idx * 4u + ${r}u`)};
503            let offsetA${r} = ${g.broadcastedIndicesToOffset(`outputIndices${r}`,m)};
504            let offsetB${r} = ${y.broadcastedIndicesToOffset(`outputIndices${r}`,m)};
505            let indexA${r} = offsetA${r} / 4u;
506            let indexB${r} = offsetB${r} / 4u;
507            let componentA${r} = offsetA${r} % 4u;
508            let componentB${r} = offsetB${r} % 4u;
509            ${t}[${r}] = ${i}(${h(a,n)});
510          `};_=9===p?`
511            var data = vec4<u32>(0);
512            ${t("data",0,"u32")}
513            ${t("data",1,"u32")}
514            ${t("data",2,"u32")}
515            ${t("data",3,"u32")}
516            outputData[global_idx] = dot(vec4<u32>(0x1, 0x100, 0x10000, 0x1000000), vec4<u32>(data));`:`
517            ${t("outputData[global_idx]",0)}
518            ${t("outputData[global_idx]",1)}
519            ${t("outputData[global_idx]",2)}
520            ${t("outputData[global_idx]",3)}
521          `}return`
522        ${t.registerUniform("vec_size","u32").declareVariables(g,y,m)}
523
524        ${c??""}
525
526        ${t.mainStart()}
527        ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")}
528        ${_}
529      }`},iY=(t,r,i,a,n,s,o=i.dataType)=>{let u=i.dims.map(t=>Number(t)??1),l=a.dims.map(t=>Number(t)??1),d=!ts.areEqual(u,l),p=u,c=ts.size(u),h=!1,f=!1,m=[d];if(d){let t=tn.calcShape(u,l,!1);if(!t)throw Error("Can't perform binary op on the given tensors");p=t.slice(),c=ts.size(p);let r=1===ts.size(u),i=1===ts.size(l),a=u.length>0&&u[u.length-1]%4==0,n=l.length>0&&l[l.length-1]%4==0;m.push(r),m.push(i),m.push(a),m.push(n);let s=1;for(let t=1;t<p.length;t++){let r=u[u.length-t];if(r===l[l.length-t])s*=r;else break}s%4==0?(f=!0,h=!0):(r||i||a||n)&&(h=!0)}else h=!0;return m.push(h),{name:t,shaderCache:{hint:r+m.map(t=>t.toString()).join("_"),inputDependencies:["rank","rank"]},getShaderSource:t=>iX(t,u,l,p,h,d,f,n,i.dataType,a.dataType,o,s),getRunData:()=>({outputs:[{dims:p,dataType:o}],dispatchGroup:{x:Math.ceil(c/64/4)},programUniforms:[{type:12,data:Math.ceil(ts.size(p)/4)},...tW(u,l,p)]})}},iJ=(t,r,i,a,n,s)=>
529{t.compute(iY(r,n??"",t.inputs[0],t.inputs[1],i,a,s))},i0=t=>{iJ(t,"Add",(t,r)=>`${t}+${r}`)},i2=t=>{iJ(t,"Div",(t,r)=>`${t}/${r}`)},i1=t=>{iJ(t,"Equal",{scalar:(t,r)=>`u32(${t}==${r})`,vector:(t,r)=>`vec4<u32>(${t}==${r})`},void 0,void 0,9)},i3=t=>{iJ(t,"Mul",(t,r)=>`${t}*${r}`)},i4=t=>{let r=tK("input",t.inputs[0].dataType,t.inputs[0].dims).type.value;iJ(t,"Pow",{scalar:(t,r)=>`pow_custom(${t},${r})`,vector:(t,r)=>`pow_vector_custom(${t},${r})`},`
530    fn pow_custom(a : ${r}, b : ${r}) -> ${r} {
531      if (b == ${r}(0.0)) {
532        return ${r}(1.0);
533      } else if (a < ${r}(0.0) && f32(b) != floor(f32(b))) {
534        return ${r}(pow(f32(a), f32(b))); // NaN
535      }
536      return select(sign(a), ${r}(1.0), round(f32(abs(b) % ${r}(2.0))) != 1.0) * ${r}(${"i32"===r?"round":""}(pow(f32(abs(a)), f32(b))));
537    }
538    fn pow_vector_custom(a : vec4<${r}>, b : vec4<${r}>) -> vec4<${r}> {
539      // TODO: implement vectorized pow
540      return vec4<${r}>(pow_custom(a.x, b.x), pow_custom(a.y, b.y), pow_custom(a.z, b.z), pow_custom(a.w, b.w));
541    }
542      `)},i8=t=>{iJ(t,"Sub",(t,r)=>`${t}-${r}`)},i6=t=>{iJ(t,"Greater",{scalar:(t,r)=>`u32(${t}>${r})`,vector:(t,r)=>`vec4<u32>(${t}>${r})`},void 0,void 0,9)},i5=t=>{iJ(t,"Less",{scalar:(t,r)=>`u32(${t}<${r})`,vector:(t,r)=>`vec4<u32>(${t}<${r})`},void 0,void 0,9)},i7=t=>{iJ(t,"GreaterOrEqual",{scalar:(t,r)=>`u32(${t}>=${r})`,vector:(t,r)=>`vec4<u32>(${t}>=${r})`},void 0,void 0,9)},i9=t=>{iJ(t,"LessOrEqual",{scalar:(t,r)=>`u32(${t}<=${r})`,vector:(t,r)=>`vec4<u32>(${t}<=${r})`},void 0,void 0,9)}}),un=q(()=>{oK(),oX(),o3(),o4(),ae=(t,r)=>{if(!t||t.length<1)throw Error("too few inputs");let i=t[0],a=i.dataType,n=i.dims.length;t.forEach((t,s)=>{if(0!==s){if(t.dataType!==a)throw Error("input tensors should be one type");if(t.dims.length!==n)throw Error("input tensors should have the same shape");t.dims.forEach((t,a)=>{if(a!==r&&t!==i.dims[a])throw Error("non concat dimensions must match")})}})},at=(t,r)=>`
543  fn calculateInputIndex(index: u32) -> u32 {
544    let sizeInConcatAxis = array<u32, ${t}u>(${r});
545    for (var i: u32 = 0u; i < ${t}; i += 1u ) {
546      if (index < sizeInConcatAxis[i]) {
547        return i;
548      }
549    }
550    return ${t}u;
551  }`,ar=(t,r)=>{let i=t.length,a=[];for(let n=0;n<i;++n){let s=r.setByOffset("global_idx",t[n].getByIndices("indices"));1===i?a.push(s):0===n?a.push(`if (inputIndex == ${n}u) { ${s} }`):n===i-1?a.push(`else { ${s} }`):a.push(`else if (inputIndex == ${n}) { ${s} }`)}return a.join(`
552`)},ai=(t,r,i,a)=>{let n=ts.size(i),s=Array(t.length),o=Array(t.length),u=0,l=[],d=[],p=[{type:12,data:n}];for(let i=0;i<t.length;++i)u+=t[i].dims[r],s[i]=u,d.push(t[i].dims.length),o[i]=tK(`input${i}`,a,d[i]),l.push("rank"),p.push({type:12,data:s[i]});for(let r=0;r<t.length;++r)p.push(...tW(t[r].dims));p.push(...tW(i));let c=tZ("output",a,i.length),h=c.indicesGet("indices",r),f=Array.from(Array(s.length).keys()).map(t=>`uniforms.sizeInConcatAxis${t}`).join(",");return{name:"Concat",shaderCache:{hint:`${r}`,inputDependencies:l},getRunData:()=>({outputs:[{dims:i,dataType:a}],dispatchGroup:{x:Math.ceil(n/64)},programUniforms:p}),getShaderSource:r=>`
553
554  ${(()=>{r.registerUniform("outputSize","u32");for(let i=0;i<t.length;i++)r.registerUniform(`sizeInConcatAxis${i}`,"u32");return r.declareVariables(...o,c)})()}
555
556  ${at(s.length,f)}
557
558  ${r.mainStart()}
559    ${r.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
560
561    var indices = ${c.offsetToIndices("global_idx")};
562
563    let inputIndex = calculateInputIndex(${h});
564    if (inputIndex != 0u) {
565      let sizeInConcatAxis = array<u32, ${s.length}u>(${f});
566      ${h} -= sizeInConcatAxis[inputIndex - 1u];
567    }
568
569    ${ar(o,c)}
570  }`}},aa=(t,r)=>{let i=t.inputs,a=i[0].dims,n=ts.normalizeAxis(r.axis,a.length);ae(i,n);let s=a.slice();s[n]=i.reduce((t,r)=>t+(r.dims.length>n?r.dims[n]:0),0);let o=i.filter(t=>ts.size(t.dims)>0);t.compute(ai(o,n,s,i[0].dataType),{inputs:o})},an=t=>tM({axis:t.axis})}),us=q(()=>{oK(),oX(),as=(t,r,i="f32")=>{switch(t.activation){case"Relu":return`value = max(value, ${r}(0.0));`;case"Sigmoid":return`value = (${r}(1.0) / (${r}(1.0) + exp(-value)));`;case"Clip":return`value = clamp(value, ${r}(${i}(uniforms.clip_min)), ${r}(${i}(uniforms.clip_max)));`;case"HardSigmoid":return`value = max(${r}(0.0), min(${r}(1.0), ${i}(uniforms.alpha) * value + ${i}(uniforms.beta)));`;case"LeakyRelu":return`value = select(${i}(uniforms.alpha) * value, value, value >= ${r}(0.0));`;case"Tanh":return`let e2x = exp(-2.0 * abs(value));
571              value = sign(value) * (1.0 - e2x) / (1.0 + e2x);
572        `;case"":return"";default:throw Error(`Unsupported activation ${t.activation}`)}},ao=(t,r)=>{"Clip"===t.activation?r.push({type:1,data:t.clipMax},{type:1,data:t.clipMin}):"HardSigmoid"===t.activation?r.push({type:1,data:t.alpha},{type:1,data:t.beta}):"LeakyRelu"===t.activation&&r.push({type:1,data:t.alpha})},au=(t,r)=>{"Clip"===t.activation?r.push({name:"clip_max",type:"f32"},{name:"clip_min",type:"f32"}):"HardSigmoid"===t.activation?r.push({name:"alpha",type:"f32"},{name:"beta",type:"f32"}):"LeakyRelu"===t.activation&&r.push({name:"alpha",type:"f32"})},al=t=>{let r=t?.activation||"";if("HardSigmoid"===r){let[i,a]=t?.activation_params||[.2,.5];return{activation:r,alpha:i,beta:a}}if("Clip"===r){let[i,a]=t?.activation_params||[tl,td];return{activation:r,clipMax:a,clipMin:i}}if("LeakyRelu"===r){let[i]=t?.activation_params||[.01];return{activation:r,alpha:i}}return{activation:r}}}),uo=q(()=>{ad=(t,r)=>{switch(t){case 1:return r;case 2:return`vec2<${r}>`;case 3:return`vec3<${r}>`;case 4:return`vec4<${r}>`;default:throw Error(`${t}-component is not supported.`)}},ap=t=>`
573      ${t?"value = value + getBiasByOutputCoords(coords);":""}
574      `}),uu=q(()=>{ac=t=>`
575fn getIndexFromCoords4D(coords : vec4<i32>, shape : vec4<i32>) -> i32 {
576  return dot(coords, vec4<i32>(
577      shape.y * shape.z * shape.w, shape.z * shape.w, shape.w, 1));
578}
579fn getOutputIndexFromCoords(coords : vec4<i32>) -> i32 {
580  return dot(coords, vec4<i32>(
581    i32(${t}.x), i32(${t}.y), i32(${t}.z), 1));
582}
583`}),ul=q(()=>
vendor: 7,794 bytes, lines 583-727
583{oK(),oX(),o4(),us(),ah=(t,r,i,a,n)=>{let s=a-i;return`
584      ${Array.from({length:i}).map((i,o)=>`
585      if (${tF(r.shape,o,r.rank)} != 1) {
586        ${r.indicesSet(t,o,tF(n,o+s,a))}
587      } else {
588        ${r.indicesSet(t,o,0)}
589      }`).join("")}
590`},af=(t,r,i,a,n=!1,s)=>{let o=t[0].dims,u=t[1].dims,l=o[o.length-2],d=u[u.length-1],p=o[o.length-1],c=tL(d),h=tL(p),f=tL(l),m=ts.size(i)/c/f,g=t.length>2,y=a?a.slice(0,-2):i.slice(0,-2),_=[ts.size(y),l,d],b=[{type:12,data:m},{type:12,data:l},{type:12,data:d},{type:12,data:p}];return ao(r,b),b.push(...tW(y,o,u)),g&&b.push(...tW(t[2].dims)),b.push(...tW(_)),{name:"MatMulNaive",shaderCache:{hint:`${r.activation};${c};${h};${f};${n}`,inputDependencies:g?["rank","rank","rank"]:["rank","rank"]},getRunData:()=>({outputs:[{dims:s?s(i):i,dataType:t[0].dataType}],dispatchGroup:{x:Math.ceil(m/64)},programUniforms:b}),getShaderSource:a=>{let s=tX("batch_dims",t[0].dataType,y.length),l=tK("a",t[0].dataType,o.length,h),d=tK("b",t[1].dataType,u.length,c),p=tZ("output",t[0].dataType,_.length,c),m=tU(p.type.tensor),b=as(r,p.type.value,m),$=[l,d],v="";if(g){let r=n?c:1;$.push(tK("bias",t[2].dataType,t[2].dims.length,r)),v=`${n?`value += bias[col / ${r}];`:`value += ${p.type.value}(bias[row + i]);`}`}let w=[{name:"output_size",type:"u32"},{name:"M",type:"u32"},{name:"N",type:"u32"},{name:"K",type:"u32"}];return au(r,w),`
591  ${a.registerUniforms(w).registerInternalVariables(s).declareVariables(...$,p)}
592  ${a.mainStart()}
593    ${a.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
594    let col = (global_idx % (uniforms.N / ${c})) * ${c};
595    var index1 = global_idx / (uniforms.N / ${c});
596    let stride1 = uniforms.M / ${f};
597    let row = (index1 % stride1) * ${f};
598    let batch = index1 / stride1;
599
600    ${2===i.length?"":`let batch_indices = ${s.offsetToIndices("batch")};`}
601
602    var a_indices: ${l.type.indices};
603    ${ah("a_indices",l,l.rank-2,s.rank,"batch_indices")}
604    ${l.indicesSet("a_indices",l.rank-2,0)}
605    ${l.indicesSet("a_indices",l.rank-1,0)}
606    let a_offset = ${l.indicesToOffset("a_indices")};
607
608    var b_indices: ${d.type.indices};
609    ${ah("b_indices",d,d.rank-2,s.rank,"batch_indices")}
610    ${d.indicesSet("b_indices",d.rank-2,0)}
611    ${d.indicesSet("b_indices",d.rank-1,0)}
612    let b_offset = ${d.indicesToOffset("b_indices")};
613    var values: array<${p.type.value}, ${f}>;
614    for (var k: u32 = 0u; k < uniforms.K; k = k + ${h}) {
615      ${(()=>{let t=`var a_data: ${l.type.value};`;for(let r=0;r<h;r++)t+=`
616              let b_data${r} = b[(b_offset + (k + ${r}) * uniforms.N + col) / ${c}];`;for(let r=0;r<f;r++){t+=`a_data = a[(a_offset + (row + ${r}) * uniforms.K + k) / ${h}];`;for(let i=0;i<h;i++)t+=`
617            values[${r}] = fma(${d.type.value}(a_data${1===h?"":`[${i}]`}), b_data${i}, values[${r}]);
618`}return t})()}
619    }
620    for (var i = 0u; i < ${f}u; i++) {
621      var value = values[i];
622      ${v}
623      ${b}
624      let cur_indices = ${p.type.indices}(batch, row + i, col);
625      let offset = ${p.indicesToOffset("cur_indices")};
626      ${p.setByOffset(`offset / ${c}`,"value")};
627    }
628  }
629  `}}}}),ud=q(()=>{oK(),oX(),o4(),us(),ul(),uo(),am=(t,r)=>t?`
630        mm_Asub[inputRow][inputCol] = mm_readA(batch,
631          kStart + inputRow,
632          globalRowStart / innerElementSize + inputCol${r?", batchIndices":""});
633        `:`
634        mm_Asub[inputRow][inputCol] = mm_readA(batch,
635          globalRow + innerRow,
636          kStart / innerElementSize + inputCol${r?", batchIndices":""});
637        `,ag=(t,r)=>t?`
638        let ACached0 = mm_Asub[k * innerElementSize][localRow];
639        let ACached1 = mm_Asub[k * innerElementSize + 1][localRow];
640        let ACached2 = mm_Asub[k * innerElementSize + 2][localRow];
641        ${3===r?"":"let ACached3 = mm_Asub[k * innerElementSize + 3][localRow];"}
642        for (var i = 0; i < rowPerThread; i = i + 1) {
643          acc[i] = BCached0 * ACached0[i] + acc[i];
644          acc[i] = BCached1 * ACached1[i] + acc[i];
645          acc[i] = BCached2 * ACached2[i] + acc[i];
646          ${3===r?"":"acc[i] = BCached3 * ACached3[i] + acc[i];"}
647        }`:`
648        for (var i = 0; i < rowPerThread; i = i + 1) {
649          let ACached = mm_Asub[tileRow + i][k];
650          acc[i] = BCached0 * ACached.x + acc[i];
651          acc[i] = BCached1 * ACached.y + acc[i];
652          acc[i] = BCached2 * ACached.z + acc[i];
653          ${3===r?"":"acc[i] = BCached3 * ACached.w + acc[i];"}
654        }`,ay=(t,r,i="f32",a,n=!1,s=32,o=!1,u=32)=>{let l=r[1]*t[1],d=r[0]*t[0],p=n?l:s,c=n?s:l,h=p/r[0],f=s/r[1];if(!((n&&4===h&&4===t[1]||!n&&(3===h||4===h))&&p%r[0]==0&&s%r[1]==0&&4===t[0]))throw Error(`If transposeA ${n} is true, innerElementSize ${h} and workPerThread[1] ${t[1]} must be 4.
655      Otherwise, innerElementSize ${h} must be 3 or 4.
656  tileAWidth ${p} must be divisible by workgroupSize[0]${r[0]}. tileInner ${s} must be divisible by workgroupSize[1] ${r[1]}. colPerThread ${t[0]} must be 4.`);return`
657var<workgroup> mm_Asub: array<array<vec${h}<${i}>, ${p/h}>, ${c}>;
658var<workgroup> mm_Bsub: array<array<vec4<${i}>, ${d/t[0]}>, ${s}>;
659
660const rowPerThread = ${t[1]};
661const colPerThread = ${t[0]};
662const innerElementSize = ${h};
663const tileInner = ${s};
664
665@compute @workgroup_size(${r[0]}, ${r[1]}, ${r[2]})
666fn main(@builtin(local_invocation_id) localId : vec3<u32>,
667        @builtin(global_invocation_id) globalId : vec3<u32>,
668        @builtin(workgroup_id) workgroupId : vec3<u32>) {
669  let localRow = i32(localId.y);
670  let tileRow = localRow * rowPerThread;
671  let tileCol = i32(localId.x);
672
673  let globalRow =i32(globalId.y) * rowPerThread;
674  let globalCol = i32(globalId.x);
675  let batch = ${o?"0":"i32(globalId.z)"};
676  ${a?`let batchIndices = ${a.offsetToIndices("u32(batch)")};`:""}
677  let globalRowStart = i32(workgroupId.y) * ${l};
678
679  let num_tiles = ${o?`${Math.ceil(u/s)}`:"(uniforms.dim_inner - 1) / tileInner + 1"};
680  var kStart = ${o?`i32(globalId.z) * ${u}`:"0"};
681
682  var acc: array<vec4<${i}>, rowPerThread>;
683
684  // Loop over shared dimension.
685  let tileRowB = localRow * ${f};
686  for (var t = 0; t < num_tiles; t = t + 1) {
687      // Load one tile of A into local memory.
688      for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {
689          let inputRow = tileRow + innerRow;
690          let inputCol = tileCol;
691          ${am(n,a)}
692      }
693
694      // Load one tile of B into local memory.
695      for (var innerRow = 0; innerRow < ${f}; innerRow = innerRow + 1) {
696          let inputRow = tileRowB + innerRow;
697          let inputCol = tileCol;
698          mm_Bsub[inputRow][inputCol] = mm_readB(batch, kStart + inputRow, globalCol${a?", batchIndices":""});
699      }
700      kStart = kStart + tileInner;
701      workgroupBarrier();
702
703      // Compute acc values for a single thread.
704      for (var k = 0; k < tileInner / innerElementSize; k = k + 1) {
705          let BCached0 = mm_Bsub[k * innerElementSize][tileCol];
706          let BCached1 = mm_Bsub[k * innerElementSize + 1][tileCol];
707          let BCached2 = mm_Bsub[k * innerElementSize + 2][tileCol];
708          ${3===h?"":"let BCached3 = mm_Bsub[k * innerElementSize + 3][tileCol];"}
709
710          ${ag(n,h)}
711      }
712
713      workgroupBarrier();
714  }
715
716  for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {
717      mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]);
718  }
719}`},a_=(t,r)=>t?`
720            mm_Asub[inputRow][inputCol] = mm_readA(batch,
721              kStart + inputRow,
722              globalRowStart + inputCol${r?", batchIndices":""});
723            `:`
724            mm_Asub[inputRow][inputCol] = mm_readA(batch,
725              globalRowStart + inputRow,
726              kStart + inputCol${r?", batchIndices":""});
727            `,ab=t=>t?"let ACached = mm_Asub[k][tileRow + innerRow];":"let ACached = mm_Asub[tileRow + innerRow][k];",a$=(t,r,i="f32",a,n=!1,s=32,o=!1,u=32,l=!1)=>
727{let d=t[1]*r[1],p=t[0]*r[0],c=n?d:s,h=n?s:d;if(h%r[1]!=0||c%r[0]!=0||s%r[1]!=0)throw Error(`tileAHight ${h} must be divisible by workgroupSize[1]${r[1]}, tileAWidth ${c} must be divisible by workgroupSize[0]${r[0]}, tileInner ${s} must be divisible by workgroupSize[1]${r[1]}`);let f=h/r[1],m=c/r[0],g=s/r[1],y=l?`
728    let localRow = i32(localId.y);
729    let localCol = i32(localId.x);
730    let globalRowStart = i32(workgroupId.y) * ${d};
731    let globalColStart = i32(workgroupId.x) * ${p};
732
733    // Loop over shared dimension.
734    for (var t = 0; t < num_tiles; t = t + 1) {
735      // Load one tile of A into local memory.
736      for (var inputRow = localRow; inputRow < ${h}; inputRow = inputRow + ${r[1]}) {
737        for (var inputCol = localCol; inputCol < ${c}; inputCol = inputCol + ${r[0]}) {
738          ${a_(n,a)}
739        }
740      }
741      // Load one tile of B into local memory.
742      for (var inputRow = localRow; inputRow < ${s}; inputRow = inputRow + ${r[1]}) {
743            for (var inputCol = localCol; inputCol < ${p}; inputCol = inputCol + ${r[0]}) {
744          mm_Bsub[inputRow][inputCol] = mm_readB(batch,
745            kStart + inputRow,
746            globalColStart + inputCol${a?", batchIndices":""});
747        }
748      }
749      kStart = kStart + tileInner;
750      workgroupBarrier();
751
752      // Compute acc values for a single thread.
753      var BCached : array<${i}, colPerThread>;
754      for (var k = 0; k < tileInner; k = k + 1) {
755        for (var inner = 0; inner < colPerThread; inner = inner + 1) {
756          BCached[inner] = mm_Bsub[k][localCol + inner * ${r[0]}];
757        }
758        for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {
759          let ACached = ${n?`mm_Asub[k][localRow + innerRow * ${r[1]}];`:`mm_Asub[localRow + innerRow * ${r[1]}][k];`}
760          for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {
761            acc[innerRow][innerCol] = acc[innerRow][innerCol] +
762                ACached * BCached[innerCol];
763          }
764        }
765      }
766      workgroupBarrier();
767    }
768    for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {
769      let gRow = globalRowStart + localRow + innerRow * ${r[1]};
770      for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {
771        let gCol = globalColStart + localCol + innerCol * ${r[0]};
772        mm_write(batch, gRow, gCol, acc[innerRow][innerCol]);
773      }
774    }
775    `:`
776let tileRow = i32(localId.y) * rowPerThread;
777let tileCol = i32(localId.x) * colPerThread;
778
779let globalRow = i32(globalId.y) * rowPerThread;
780let globalCol = i32(globalId.x) * colPerThread;
781let globalRowStart = i32(workgroupId.y) * ${d};
782
783let tileRowA = i32(localId.y) * ${f};
784let tileColA = i32(localId.x) * ${m};
785let tileRowB = i32(localId.y) * ${g};
786// Loop over shared dimension.
787for (var t = 0; t < num_tiles; t = t + 1) {
788  // Load one tile of A into local memory.
789  for (var innerRow = 0; innerRow < ${f}; innerRow = innerRow + 1) {
790    for (var innerCol = 0; innerCol < ${m}; innerCol = innerCol + 1) {
791      let inputRow = tileRowA + innerRow;
792      let inputCol = tileColA + innerCol;
793      ${a_(n,a)}
794    }
795  }
796
797  // Load one tile of B into local memory.
798  for (var innerRow = 0; innerRow < ${g}; innerRow = innerRow + 1) {
799    for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {
800      let inputRow = tileRowB + innerRow;
801      let inputCol = tileCol + innerCol;
802      mm_Bsub[inputRow][inputCol] = mm_readB(batch,
803        kStart + inputRow,
804        globalCol + innerCol${a?", batchIndices":""});
805    }
806  }
807  kStart = kStart + tileInner;
808  workgroupBarrier();
809
810  // Compute acc values for a single thread.
811  var BCached : array<${i}, colPerThread>;
812  for (var k = 0; k < tileInner; k = k + 1) {
813    for (var inner = 0; inner < colPerThread; inner = inner + 1) {
814      BCached[inner] = mm_Bsub[k][tileCol + inner];
815    }
816
817    for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {
818      ${ab(n)}
819      for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {
820        acc[innerRow][innerCol] = acc[innerRow][innerCol] + ACached * BCached[innerCol];
821      }
822    }
823  }
824
825  workgroupBarrier();
826}
827
828for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {
829  for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {
830    mm_write(batch, globalRow + innerRow, globalCol + innerCol,
831        acc[innerRow][innerCol]);
832  }
833}
834`;return`
835  var<workgroup> mm_Asub : array<array<${i}, ${c}>, ${h}>;
836  var<workgroup> mm_Bsub : array<array<${i}, ${p}>, ${s}>;
837  const rowPerThread = ${t[1]};
838  const colPerThread = ${t[0]};
839  const tileInner = ${s};
840
841@compute @workgroup_size(${r[0]}, ${r[1]}, ${r[2]})
842fn main(@builtin(local_invocation_id) localId : vec3<u32>,
843        @builtin(global_invocation_id) globalId : vec3<u32>,
844        @builtin(workgroup_id) workgroupId : vec3<u32>) {
845    let batch = ${o?"0":"i32(globalId.z)"};
846    ${a?`let batchIndices = ${a.offsetToIndices("u32(batch)")};`:""}
847    let num_tiles = ${o?`${Math.ceil(u/s)}`:"(uniforms.dim_inner - 1) / tileInner + 1"};
848    var kStart = ${o?`i32(globalId.z) * ${u}`:"0"};
849
850    var acc : array<array<${i}, colPerThread>, rowPerThread>;
851    ${y}
852  }
853`},av=(t,r,i,a,n=!1)=>{let[s,o,u,l]=a,d=tU(a[0].type.tensor);return`
854    fn mm_readA(batch: i32, row: i32, colIn: i32, batchIndices: ${s.type.indices}) -> ${ad(t,d)} {
855      var value = ${ad(t,d)}(0.0);
856      let col = colIn * ${t};
857      if(row < uniforms.dim_a_outer && col < uniforms.dim_inner)
858      {
859        var aIndices: ${o.type.indices};
860        ${ah("aIndices",o,o.rank-2,s.rank,"batchIndices")}
861        ${o.indicesSet("aIndices",o.rank-2,"u32(row)")}
862        ${o.indicesSet("aIndices",o.rank-1,"u32(colIn)")}
863        value = ${o.getByIndices("aIndices")};
864      }
865      return value;
866    }
867
868    fn mm_readB(batch: i32, row: i32, colIn: i32, batchIndices: ${s.type.indices}) -> ${ad(t,d)} {
869      var value = ${ad(t,d)}(0.0);
870      let col = colIn * ${t};
871      if(row < uniforms.dim_inner && col < uniforms.dim_b_outer)
872      {
873        var bIndices: ${u.type.indices};
874        ${ah("bIndices",u,u.rank-2,s.rank,"batchIndices")}
875        ${u.indicesSet("bIndices",u.rank-2,"u32(row)")}
876        ${u.indicesSet("bIndices",u.rank-1,"u32(colIn)")}
877        value = ${u.getByIndices("bIndices")};
878      }
879      return value;
880    }
881
882    fn mm_write(batch: i32, row: i32, colIn: i32, valueIn: ${ad(t,d)}) {
883      let col = colIn * ${t};
884      if (row < uniforms.dim_a_outer && col < uniforms.dim_b_outer) {
885        var value = valueIn;
886        let coords = vec3<i32>(batch, row, colIn);
887        ${r?`value = value + ${n?"bias[colIn]":`${ad(t,d)}(bias[row])`};`:""}
888        ${i}
889        ${l.setByIndices("vec3<u32>(coords)","value")}
890      }
891    }
892    `},aw=(t,r,i,a,n=!1,s)=>{let o=t[0].dims,u=t[1].dims,l=o.slice(0,-2),d=u.slice(0,-2),p=a?a.slice(0,-2):i.slice(0,-2),c=ts.size(p),h=o[o.length-2],f=o[o.length-1],m=u[u.length-1],g=f%4==0&&m%4==0,y=h<=8?[4,1,1]:[4,4,1],_=[8,8,1],b=[Math.ceil(m/_[0]/y[0]),Math.ceil(h/_[1]/y[1]),Math.ceil(c/_[2]/y[2])],$=g?4:1,v=[...l,h,f/$],w=v.length,x=[...d,f,m/$],k=x.length,S=[c,h,m/$],T=[{type:6,data:h},{type:6,data:m},{type:6,data:f}];ao(r,T),T.push(...tW(p,v,x));let I=["rank","rank"],E=t.length>2;return E&&(T.push(...tW(t[2].dims)),I.push("rank")),T.push(...tW(S)),{name:"MatMul",shaderCache:{hint:`${y};${r.activation};${g};${n}`,inputDependencies:I},getRunData:()=>({outputs:[{dims:s?s(i):i,dataType:t[0].dataType}],dispatchGroup:{x:b[0],y:b[1],z:b[2]},programUniforms:T}),getShaderSource:i=>{let a=p.length,s=tX("batchDims",t[0].dataType,a,1),o=tU(t[0].dataType),u=tK("a",t[0].dataType,w,$),l=tK("b",t[1].dataType,k,$),d=tZ("result",t[0].dataType,S.length,$),c=[u,l];if(E){let r=n?$:1;c.push(tK("bias",t[2].dataType,t[2].dims.length,r))}let h=[{name:"dim_a_outer",type:"i32"},{name:"dim_b_outer",type:"i32"},{name:"dim_inner",type:"i32"}];au(r,h);let f=tU(d.type.tensor),m=av($,E,as(r,d.type.value,f),[s,u,l,d],n);return`
893  ${i.registerUniforms(h).registerInternalVariables(s).declareVariables(...c,d)}
894  ${m}
895  ${g?ay(y,_,o,s):a$(y,_,o,s)}
896                   `}}}}),up=q(()=>{oK(),oQ(),o4(),us(),uo(),uu(),ud(),ax=(t,r,i,a,n=!1,s,o=4,u=4,l=4,d="f32")=>{let p=t=>{switch(t){case 1:return"return w[row * i32(uniforms.w_shape[3]) + colIn];";case 4:return"return w[row * i32(uniforms.w_shape[3]) / 4 + colIn];";default:throw Error(`innerElementSize ${t} is not supported.`)}},c=t?`
897    let coord = vec4<i32>(batch, xRow, xCol, xCh);
898    `:`
899    let coord = vec4<i32>(batch, xCh, xRow, xCol);
900    `,h=t?`
901    let coords = vec4<i32>(
902      batch,
903      row / outWidth,
904      row % outWidth,
905      col);
906    `:`
907    let coords = vec4<i32>(
908      batch,
909      row,
910      col / outWidth,
911      col % outWidth);
912    `,f=t?"row":"col",m=t?"col":"row",g=`
913    let inChannels = i32(uniforms.w_shape[2]);
914    let outWidth = ${t?"i32(uniforms.result_shape[2])":"i32(uniforms.result_shape[3])"};
915    let outRow = ${f} / outWidth;
916    let outCol = ${f} % outWidth;
917
918    let WRow = ${m} / (i32(uniforms.w_shape[1]) * inChannels);
919    let WCol = ${m} / inChannels % i32(uniforms.w_shape[1]);
920    let xRow = outRow * uniforms.stride[0] + uniforms.dilation[0] * WRow - uniforms.pad[0];
921    let xCol = outCol * uniforms.stride[1] + uniforms.dilation[1] * WCol - uniforms.pad[1];
922    let xCh = ${m} % inChannels;
923    var resData = ${ad(o,d)}(0.0);
924    // The bounds checking is always needed since we use it to pad zero for
925    // the 'same' padding type.
926    if (xRow >= 0 && xRow < ${t?"i32(uniforms.x_shape[1])":"i32(uniforms.x_shape[2])"} && xCol >= 0 && xCol < ${t?"i32(uniforms.x_shape[2])":"i32(uniforms.x_shape[3])"}) {
927      ${c}
928      let xIndex = getIndexFromCoords4D(coord, vec4<i32>(uniforms.x_shape));
929      ${(t=>{switch(t){case 1:return"resData = x[xIndex];";case 3:return`resData = vec3<${d}>(x[xIndex], x[xIndex + 1], x[xIndex + 2]);`;case 4:return"resData = x[xIndex / 4];";default:throw Error(`innerElementSize ${t} is not supported.`)}})(o)}
930    }
931    return resData;`,y=t?r&&a?`
932    let col = colIn * ${o};
933    ${g}`:`
934    let col = colIn * ${o};
935    if (row < uniforms.dim_a_outer && col < uniforms.dim_inner) {
936      ${g}
937    }
938    return ${ad(o,d)}(0.0);`:a&&i?`
939    let col = colIn * ${o};
940    ${g}`:`
941    let col = colIn * ${o};
942    if (row < uniforms.dim_inner && col < uniforms.dim_b_outer) {
943      ${g}
944    }
945    return ${ad(o,d)}(0.0);`,_=t?a&&i?p(u):`
946    let col = colIn * ${u};
947    if (row < uniforms.dim_inner && col < uniforms.dim_b_outer) {
948      ${p(u)}
949    }
950    return ${ad(u,d)}(0.0);`:`
951    let col = colIn * ${u};
952    if (row < uniforms.dim_inner && col < uniforms.dim_a_outer) {
953      ${p(u)}
954    }
955    return ${ad(u,d)}(0.0);`,b=ad(l,d),$=t?ad(o,d):ad(u,d),v=t?ad(u,d):ad(o,d),w=as(s,b,d);return`
956    fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${$} {
957      ${t?y:_}
958    }
959
960    fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${v} {
961      ${t?_:y}
962    }
963
964    fn mm_write(batch: i32, row : i32, colIn : i32, valueIn : ${b}) {
965      let col = colIn * ${l};
966      if (row < uniforms.dim_a_outer && col < uniforms.dim_b_outer)
967      {
968      var value = valueIn;
969      let outWidth = ${t?"i32(uniforms.result_shape[2])":"i32(uniforms.result_shape[3])"};
970      ${h}
971      ${ap(n)}
972      ${w}
973      setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);
974      }
975    }`},ak=(t,r,i,a,n,s,o,u,l)=>{let d="NHWC"===r.format,p=d?t[0].dims[3]:t[0].dims[1],c=i[0],h=d?i[2]:i[3],f=d?i[1]:i[2],m=d?i[3]:i[1],g=d&&(p%4==0||p%3==0)&&m%4==0,y=d?m:h*f,_=d?h*f:m,b=[8,8,1],$=a<=8?[4,1,1]:[4,4,1],v=[Math.ceil(y/b[0]/$[0]),Math.ceil(_/b[1]/$[1]),Math.ceil(c/b[2]/$[2])];ti("verbose",()=>`[conv2d_mm_webgpu] dispatch = ${v}`);let w=g?d&&p%4!=0?3:4:1,x=b[1]*$[1],k=b[0]*$[0],S=Math.max(b[0]*w,b[1]),T=a%x==0,I=n%k==0,E=s%S==0,C=g?[w,4,4]:[1,1,1],z=[{type:6,data:a},{type:6,data:n},{type:6,data:s},{type:6,data:[r.pads[0],r.pads[1]]},{type:6,data:r.strides},{type:6,data:r.dilations}];ao(r,z),z.push(...tW(t[0].dims,t[1].dims));let A=["rank","rank"];return o&&(z.push(...tW(t[2].dims)),A.push("rank")),z.push(...tW(i)),{name:"Conv2DMatMul",shaderCache:{hint:`${r.cacheKey};${w};${g};${T};${I};${E};${x};${k};${S}`,inputDependencies:A},getRunData:()=>({outputs:[{dims:l?l(i):i,dataType:t[0].dataType}],dispatchGroup:{x:v[0],y:v[1],z:v[2]},programUniforms:z}),getShaderSource:a=>{let n=[{name:"dim_a_outer",type:"i32"},{name:"dim_b_outer",type:"i32"},{name:"dim_inner",type:"i32"},{name:"pad",type:"i32",length:2},{name:"stride",type:"i32",length:2},{name:"dilation",type:"i32",length:2}];au(r,n);let s=g?4:1,l=tU(t[0].dataType),p=`
976      fn setOutputAtIndex(flatIndex : i32, value : ${g?`vec4<${l}>`:l}) {
977        result[flatIndex] = ${g?`vec4<${l}>`:l}(value);
978      }
979      fn setOutputAtCoords(d0 : i32, d1 : i32, d2 : i32, d3 : i32, value : ${g?`vec4<${l}>`:l}) {
980        let flatIndex = getOutputIndexFromCoords(vec4<i32>(d0, d1, d2, d3));
981        setOutputAtIndex(flatIndex ${g?"/ 4":""}, value);
982      }`,c=[tK("x",t[0].dataType,t[0].dims.length,3===w?1:w),tK("w",t[1].dataType,t[1].dims.length,s)],h=tZ("result",t[0].dataType,i.length,s);if(o){let r=tK("bias",t[2].dataType,t[2].dims.length,s);c.push(r),p+=`
983        fn getBiasByOutputCoords(coords : vec4<i32>) -> ${g?`vec4<${l}>`:l} {
984          return bias[coords.${d?"w":"y"}${g?"/ 4":""}];
985        }`}return`
986        ${ac("uniforms.result_strides")}
987        //struct Uniforms { xShape : vec4<i32>, wShape : vec4<i32>, outShape : vec4<i32>,
988        //  outShapeStrides: vec3<i32>, filterDims : vec2<i32>, pad : vec2<i32>, stride : vec2<i32>,
989        //  dilation : vec2<i32>, dimAOuter : i32, dimBOuter : i32, dimInner : i32 };
990        ${a.registerUniforms(n).declareVariables(...c,h)}
991        ${p}
992        ${ax(d,T,I,E,o,r,C[0],C[1],C[2],l)}
993        ${g?ay($,b,l,void 0,!d,S):a$($,b,l,void 0,!d,S,!1,void 0,u)}`}}}}),uc=q(()=>
993{oK(),oQ(),oX(),o4(),us(),uo(),aS=t=>{let r=1;for(let i=0;i<t.length;i++)r*=t[i];return r},aT=t=>"number"==typeof t?[t,t,t]:t,aI=(t,r)=>r<=1?t:t+(t-1)*(r-1),aE=(t,r,i,a=1)=>{let n=aI(r,a);return Math.floor((t[0]*(i-1)-i+n)/2)},aC=(t,r,i,a,n)=>{null==n&&(n=aE(t,r[0],a[0]));let s=[0,0,0,i];for(let i=0;i<3;i++)t[i]+2*n>=r[i]&&(s[i]=Math.trunc((t[i]-r[i]+2*n)/a[i]+1));return s},az=(t,r,i,a,n,s,o,u,l,d)=>{let p,c,h,f;if("VALID"===t&&(t=0),"number"==typeof t){p={top:t,bottom:t,left:t,right:t,front:t,back:t};let m=aC([r,i,a,1],[u,l,d],1,[n,s,o],t);c=m[0],h=m[1],f=m[2]}else if(Array.isArray(t)){if(!t.every((t,r,i)=>t===i[0]))throw Error(`Unsupported padding parameter: ${t}`);p={top:t[0],bottom:t[1],left:t[2],right:t[3],front:t[4],back:t[5]};let m=aC([r,i,a,1],[u,l,d],1,[n,s,o],t[0]);c=m[0],h=m[1],f=m[2]}else if("SAME_UPPER"===t){c=Math.ceil(r/n),h=Math.ceil(i/s),f=Math.ceil(a/o);let t=(c-1)*n+u-r,m=(h-1)*s+l-i,g=(f-1)*o+d-a,y=Math.floor(t/2),_=Math.floor(m/2),b=Math.floor(g/2);p={top:_,bottom:m-_,left:b,right:g-b,front:y,back:t-y}}else throw Error(`Unknown padding parameter: ${t}`);return{padInfo:p,outDepth:c,outHeight:h,outWidth:f}},aA=(t,r,i,a,n,s=!1,o="channelsLast")=>{let u,l,d,p,c;if("channelsLast"===o)[u,l,d,p,c]=t;else if("channelsFirst"===o)[u,c,l,d,p]=t;else throw Error(`Unknown dataFormat ${o}`);let[h,,f,m,g]=r,[y,_,b]=aT(i),[$,v,w]=aT(a),x=aI(f,$),k=aI(m,v),S=aI(g,w),{padInfo:T,outDepth:I,outHeight:E,outWidth:C}=az(n,l,d,p,y,_,b,x,k,S),z=s?h*c:h,A=[0,0,0,0,0];return"channelsFirst"===o?A=[u,z,I,E,C]:"channelsLast"===o&&(A=[u,I,E,C,z]),{batchSize:u,dataFormat:o,inDepth:l,inHeight:d,inWidth:p,inChannels:c,outDepth:I,outHeight:E,outWidth:C,outChannels:z,padInfo:T,strideDepth:y,strideHeight:_,strideWidth:b,filterDepth:f,filterHeight:m,filterWidth:g,effectiveFilterDepth:x,effectiveFilterHeight:k,effectiveFilterWidth:S,dilationDepth:$,dilationHeight:v,dilationWidth:w,inShape:t,outShape:A,filterShape:r}},aO=(t,r,i,a,n,s)=>{let o="channelsLast"===s,u=(o?t[0].dims[3]:t[0].dims[1],[Math.ceil(aS(({x:i.map((t,r)=>r)}).x.map(t=>i[t]))/64),1,1]);ti("verbose",()=>`[conv3d_naive_webgpu] dispatch = ${u}`);let l=[{type:12,data:ts.size(i)},{type:12,data:a},{type:12,data:n},{type:12,data:r.strides},{type:12,data:r.dilations}];ao(r,l),l.push(...tW(t[0].dims,t[1].dims));let d=["rank","rank"],p=3===t.length;return p&&(l.push(...tW(t[2].dims)),d.push("rank")),l.push(...tW(i)),{name:"Conv3DNaive",shaderCache:{hint:`${r.cacheKey};${o};1;${p}`,inputDependencies:d},getRunData:()=>({outputs:[{dims:i,dataType:t[0].dataType}],dispatchGroup:{x:u[0],y:u[1],z:u[2]},programUniforms:l}),getShaderSource:s=>{let u=[{name:"output_size",type:"u32"},{name:"filter_dims",type:"u32",length:a.length},{name:"pads",type:"u32",length:n.length},{name:"strides",type:"u32",length:r.strides.length},{name:"dilations",type:"u32",length:r.dilations.length}];au(r,u);let l=tU(t[0].dataType),d=tK("x",t[0].dataType,t[0].dims.length,1),c=tK("W",t[1].dataType,t[1].dims.length,1),h=[d,c],f=tZ("result",t[0].dataType,i.length,1),m="";if(p){let r=tK("bias",t[2].dataType,t[2].dims.length,1);h.push(r),m+=`
994        fn getBiasByOutputCoords(coords : array<u32, 5>) -> ${l} {
995          return bias[${o?tF("coords",4,5):tF("coords",1,5)}];
996        }`}let g=ad(1,l),y=as(r,g,l);return`
997            ${m}
998            fn getX(d0 : u32, d1 : u32, d2 : u32, d3 : u32, d4 : u32) -> f32 {
999              let aIndices = array<u32, 5>(d0, d1, d2, d3, d4);
1000              return ${d.getByIndices("aIndices")};
1001            }
1002            fn getW(d0 : u32, d1 : u32, d2 : u32, d3 : u32, d4 : u32) -> f32 {
1003              let aIndices = array<u32, 5>(d0, d1, d2, d3, d4);
1004              return ${c.getByIndices("aIndices")};
1005            }
1006          ${s.registerUniforms(u).declareVariables(...h,f)}
1007          ${s.mainStart()}
1008          ${s.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1009              let coords = ${f.offsetToIndices("global_idx")};
1010              let batch = ${tF("coords",0,d.rank)};
1011              let d2 = ${o?tF("coords",d.rank-1,d.rank):tF("coords",1,d.rank)};
1012              let xFRCCorner = vec3<u32>(${o?tF("coords",1,d.rank):tF("coords",2,d.rank)},
1013              ${o?tF("coords",2,d.rank):tF("coords",3,d.rank)},
1014              ${o?tF("coords",3,d.rank):tF("coords",4,d.rank)}) * uniforms.strides - uniforms.pads;
1015              let xFCorner = xFRCCorner.x;
1016              let xRCorner = xFRCCorner.y;
1017              let xCCorner = xFRCCorner.z;
1018              let xShapeY = ${o?tF("uniforms.x_shape",1,d.rank):tF("uniforms.x_shape",2,d.rank)};
1019              let xShapeZ = ${o?tF("uniforms.x_shape",2,d.rank):tF("uniforms.x_shape",3,d.rank)};
1020              let xShapeW = ${o?tF("uniforms.x_shape",3,d.rank):tF("uniforms.x_shape",4,d.rank)};
1021              let xShapeU = ${o?tF("uniforms.x_shape",4,d.rank):tF("uniforms.x_shape",1,d.rank)};
1022              let inputDepthNearestVec4 = (xShapeU / 4) * 4;
1023              let inputDepthVec4Remainder = xShapeU % 4;
1024
1025              var value = 0.0;
1026              for (var wF = 0u; wF < uniforms.filter_dims[0]; wF++) {
1027                let xF = xFCorner + wF * uniforms.dilations[0];
1028                if (xF < 0 || xF >= xShapeY) {
1029                  continue;
1030                }
1031
1032                for (var wR = 0u; wR < uniforms.filter_dims[1]; wR++) {
1033                  let xR = xRCorner + wR * uniforms.dilations[1];
1034                  if (xR < 0 || xR >= xShapeZ) {
1035                    continue;
1036                  }
1037
1038                  for (var wC = 0u; wC < uniforms.filter_dims[2]; wC++) {
1039                    let xC = xCCorner + wC * uniforms.dilations[2];
1040                    if (xC < 0 || xC >= xShapeW) {
1041                      continue;
1042                    }
1043
1044                    for (var d1 = 0u; d1 < inputDepthNearestVec4; d1 += 4) {
1045                      ${o?`let xValues = vec4<f32>(
1046                               getX(batch, xF, xR, xC, d1),
1047                               getX(batch, xF, xR, xC, d1 + 1),
1048                               getX(batch, xF, xR, xC, d1 + 2),
1049                               getX(batch, xF, xR, xC, d1 + 3));
1050                            `:`let xValues = vec4<f32>(
1051                               getX(batch, d1, xF, xR, xC),
1052                               getX(batch, d1 + 1, xF, xR, xC),
1053                               getX(batch, d1 + 2, xF, xR, xC),
1054                               getX(batch, d1 + 3, xF, xR, xC));
1055                            `}
1056                            let wValues = vec4<f32>(
1057                              getW(d2, d1, wF, wR, wC),
1058                              getW(d2, d1 + 1, wF, wR, wC),
1059                              getW(d2, d1 + 2, wF, wR, wC),
1060                              getW(d2, d1 + 3, wF, wR, wC));
1061                      value += dot(xValues, wValues);
1062                    }
1063                    if (inputDepthVec4Remainder == 1) {
1064                        ${o?`value += getX(batch, xF, xR, xC, inputDepthNearestVec4)
1065                          * getW(d2, inputDepthNearestVec4, wF, wR, wC);`:`value += getX(batch, inputDepthNearestVec4, xF, xR, xC)
1066                          * getW(d2, inputDepthNearestVec4, wF, wR, wC);`}
1067                    } else if (inputDepthVec4Remainder == 2) {
1068                      ${o?`let xValues = vec2<f32>(
1069                        getX(batch, xF, xR, xC, inputDepthNearestVec4),
1070                        getX(batch, xF, xR, xC, inputDepthNearestVec4 + 1));
1071                      `:`let xValues = vec2<f32>(
1072                        getX(batch, inputDepthNearestVec4, xF, xR, xC),
1073                        getX(batch, inputDepthNearestVec4 + 1, xF, xR, xC));
1074                    `}
1075                    let wValues = vec2<f32>(
1076                      getW(d2, inputDepthNearestVec4, wF, wR, wC),
1077                      getW(d2, inputDepthNearestVec4 + 1, wF, wR, wC));
1078                      value += dot(xValues, wValues);
1079                    } else if (inputDepthVec4Remainder == 3) {
1080                      ${o?`let xValues = vec3<f32>(
1081                        getX(batch, xF, xR, xC, inputDepthNearestVec4),
1082                        getX(batch, xF, xR, xC, inputDepthNearestVec4 + 1),
1083                        getX(batch, xF, xR, xC, inputDepthNearestVec4 + 2));
1084                      `:`let xValues = vec3<f32>(
1085                        getX(batch, inputDepthNearestVec4, xF, xR, xC),
1086                        getX(batch, inputDepthNearestVec4 + 1, xF, xR, xC),
1087                        getX(batch, inputDepthNearestVec4 + 2, xF, xR, xC));
1088                    `}
1089                    let wValues = vec3<f32>(
1090                      getW(d2, inputDepthNearestVec4, wF, wR, wC),
1091                      getW(d2, inputDepthNearestVec4 + 1, wF, wR, wC),
1092                      getW(d2, inputDepthNearestVec4 + 2, wF, wR, wC));
1093                      value += dot(xValues, wValues);
1094                    }
1095                  }
1096                }
1097              }
1098              ${p?"value = value + getBiasByOutputCoords(coords)":""};
1099              ${y}
1100              result[global_idx] = f32(value);
1101          }`}}}}),uh=q(()=>
vendor: 4,349 bytes, lines 1101-1163
1101{oK(),oX(),o4(),us(),aR=(t,r,i,a)=>{let n=t.length>2,s=n?"value += b[output_channel];":"",o=t[0].dims,u=t[1].dims,l="NHWC"===r.format,d=l?i[3]:i[1],p=d/r.group,c=l&&p>=4?tL(d):1,h=ts.size(i)/c,f=[{type:12,data:h},{type:12,data:r.dilations},{type:12,data:[r.strides[0],r.strides[1]]},{type:12,data:[r.pads[0],r.pads[1]]},{type:12,data:p}];return ao(r,f),f.push(...tW(o,[u[0],u[1],u[2],u[3]/c])),f.push(...tW([i[0],i[1],i[2],i[3]/c])),{name:"GroupedConv",shaderCache:{hint:`${r.cacheKey}_${c}`,inputDependencies:n?["rank","rank","rank"]:["rank","rank"]},getRunData:()=>({outputs:[{dims:a?a(i):i,dataType:t[0].dataType}],dispatchGroup:{x:Math.ceil(h/64)},programUniforms:f}),getShaderSource:a=>{let d=tZ("output",t[0].dataType,i.length,c),p=tU(d.type.tensor),h=as(r,d.type.value,p),f=tK("x",t[0].dataType,o.length),m=tK("w",t[1].dataType,u.length,c),g=[f,m];n&&g.push(tK("b",t[2].dataType,t[2].dims,c));let y=[{name:"output_size",type:"u32"},{name:"dilations",type:"u32",length:r.dilations.length},{name:"strides",type:"u32",length:2},{name:"pads",type:"u32",length:2},{name:"output_channels_per_group",type:"u32"}];au(r,y);let _=l?`
1102      for (var wHeight: u32 = 0u; wHeight < uniforms.w_shape[0]; wHeight++) {
1103        let xHeight = xRCCorner.x + wHeight * uniforms.dilations[0];
1104
1105        if (xHeight < 0u || xHeight >= uniforms.x_shape[1]) {
1106          continue;
1107        }
1108
1109        for (var wWidth: u32 = 0u; wWidth < uniforms.w_shape[1]; wWidth++) {
1110          let xWidth = xRCCorner.y + wWidth * uniforms.dilations[1];
1111          if (xWidth < 0u || xWidth >= uniforms.x_shape[2]) {
1112            continue;
1113          }
1114
1115          for (var wInChannel: u32 = 0u; wInChannel < uniforms.w_shape[2]; wInChannel++) {
1116            let input_channel = in_channel_offset + wInChannel;
1117            let xVal = ${f.get("batch","xHeight","xWidth","input_channel")};
1118            let wVal = ${m.get("wHeight","wWidth","wInChannel","output_channel")};
1119            value += xVal * wVal;
1120          }
1121        }
1122      }
1123      `:`
1124      for (var wInChannel: u32 = 0u; wInChannel < uniforms.w_shape[1]; wInChannel++) {
1125        let input_channel = in_channel_offset + wInChannel;
1126        for (var wHeight: u32 = 0u; wHeight < uniforms.w_shape[2]; wHeight++) {
1127          let xHeight = xRCCorner.x + wHeight * uniforms.dilations[0];
1128
1129          if (xHeight < 0u || xHeight >= uniforms.x_shape[2]) {
1130            continue;
1131          }
1132
1133          for (var wWidth: u32 = 0u; wWidth < uniforms.w_shape[3]; wWidth++) {
1134            let xWidth = xRCCorner.y + wWidth * uniforms.dilations[1];
1135            if (xWidth < 0u || xWidth >= uniforms.x_shape[3]) {
1136              continue;
1137            }
1138
1139            let xVal = ${f.get("batch","input_channel","xHeight","xWidth")};
1140            let wVal = ${m.get("output_channel","wInChannel","wHeight","wWidth")};
1141            value += xVal * wVal;
1142          }
1143        }
1144      }
1145      `;return`
1146  ${a.registerUniforms(y).declareVariables(...g,d)}
1147
1148  ${a.mainStart()}
1149    ${a.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1150
1151    let outputIndices = ${d.offsetToIndices("global_idx")};
1152    let batch: u32 = outputIndices[0];
1153    let output_channel: u32 = outputIndices[${l?3:1}];
1154    let xRCCorner: vec2<u32> = vec2<u32>(outputIndices[${l?1:2}], outputIndices[${l?2:3}]) * uniforms.strides - uniforms.pads;
1155    let group_id: u32 = output_channel * ${c} / uniforms.output_channels_per_group;
1156    var in_channel_offset = group_id * uniforms.w_shape[${l?2:1}];
1157
1158    var value: ${d.type.value} = ${d.type.value}(0);
1159    ${_}
1160    ${s}
1161    ${h}
1162    ${d.setByOffset("global_idx","value")}
1163  }`}}},aB=(t,r,i,a)=>{let n=t.length>2,s=tL(i[3]),o=tL(i[2]),u=ts.size(i)/s/o,l=[t[0].dims[0],t[0].dims[1],t[0].dims[2],t[0].dims[3]/s],d=[t[1].dims[0],t[1].dims[1],t[1].dims[2],t[1].dims[3]/s],p=[i[0],i[1],i[2],i[3]/s],c=[{type:12,data:u},{type:6,data:[r.strides[0],r.strides[1]]},{type:6,data:[r.pads[0],r.pads[1]]}];ao(r,c),c.push(...tW(l,d,p));let h=(o-1)*r.strides[1]+d[1];return{name:"GroupedConv-Vectorize",shaderCache:{hint:`${r.cacheKey};${s};${o};${h};${d[0]};${d[1]}`,inputDependencies:n?["rank","rank","type"]:["rank","rank"]},getRunData:()=>({outputs:[{dims:a?a(i):i,dataType:t[0].dataType}],dispatchGroup:{x:Math.ceil(u/64)},programUniforms:c}),getShaderSource:i=>{let a=tZ("output",t[0].dataType,p.length,s),u=tU(a.type.tensor),c=as(r,a.t
1163ype.value,u),f=tK("x",t[0].dataType,l.length,s),m=tK("w",t[1].dataType,d.length,s),g=[f,m];n&&g.push(tK("b",t[2].dataType,t[2].dims,s));let y=[{name:"output_size",type:"u32"},{name:"strides",type:"i32",length:2},{name:"pads",type:"i32",length:2}];return au(r,y),`
1164  ${i.registerUniforms(y).declareVariables(...g,a)}
1165  ${i.mainStart()}
1166    ${i.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1167    let width0 = uniforms.output_shape[3];
1168    let output_channel = global_idx % width0;
1169    var index1 = global_idx / width0;
1170    let width1 = uniforms.output_shape[2] / ${o}u;
1171    let col = (index1 % width1) * ${o}u;
1172    index1 = index1 / width1;
1173    let row = index1 % uniforms.output_shape[1];
1174    let batch = index1 / uniforms.output_shape[1];
1175
1176    let x_corner = vec2<i32>(i32(row), i32(col)) * uniforms.strides - uniforms.pads;
1177
1178    var x_vals: array<${f.type.value}, ${h}>;
1179    var values: array<${a.type.value}, ${o}>;
1180    let input_channel = output_channel;
1181    // Use constant instead of uniform can give better performance for w's height/width.
1182    for (var w_height: u32 = 0u; w_height < ${d[0]}; w_height++) {
1183      let x_height = x_corner.x + i32(w_height);
1184      if (x_height >= 0 && u32(x_height) < uniforms.x_shape[1]) {
1185        for (var i = 0; i < ${h}; i++) {
1186          let x_width = x_corner.y + i;
1187          if (x_width >= 0 && u32(x_width) < uniforms.x_shape[2]) {
1188            x_vals[i] = ${f.get("batch","u32(x_height)","u32(x_width)","input_channel")};
1189          } else {
1190            x_vals[i] = ${f.type.value}(0);
1191          }
1192        }
1193        for (var w_width: u32 = 0u; w_width < ${d[1]}; w_width++) {
1194          let w_val = ${m.get("w_height","w_width","0","output_channel")};
1195          for (var i = 0u; i < ${o}u; i++) {
1196            values[i] = fma(x_vals[i * u32(uniforms.strides[1]) + w_width], w_val, values[i]);
1197          }
1198        }
1199      }
1200    }
1201
1202    for (var i = 0u; i < ${o}u; i++) {
1203      var value = values[i];
1204      ${n?"value += b[output_channel];":""}
1205      ${c}
1206      ${a.set("batch","row","col + i","output_channel","value")};
1207    }
1208  }`}}}}),uf=q(()=>{oX(),up(),uc(),ud(),uh(),us(),ul(),o8(),aN=(t,r,i,a,n,s)=>{let o=t[0],u=t.slice(s?1:2,s?3:4),l=u.length,d=r[0],p=r.slice(2).map((t,r)=>t+(t-1)*(i[r]-1)),c=u.map((t,r)=>t+a[r]+a[r+l]).map((t,r)=>Math.floor((t-p[r]+n[r])/n[r]));return c.splice(0,0,o),c.splice(s?3:1,0,d),c},aM=[2,3,1,0],aD=(t,r)=>{if(!t||2!==t.length&&3!==t.length)throw Error("Conv requires 2 or 3 inputs");if(t[0].dims.length>5)throw Error("greater than 5D is not supported");if(t[0].dims.length!==t[1].dims.length)throw Error("filter does not have same dimension as input");if(t[0].dims["NHWC"===r.format?t[0].dims.length-1:1]!==t[1].dims[1]*r.group)throw Error("FILTER_IN_CHANNEL should be equal to DATA_CHANNEL");if(3===t.length&&(1!==t[2].dims.length||t[1].dims[0]!==t[2].dims[0]))throw Error("invalid bias");let i=t[0].dims.length-2;if(r.dilations.length!==i)throw Error(`dilations should be ${i}D`);if(r.strides.length!==i)throw Error(`strides should be ${i}D`);if(r.pads.length!==2*i)throw Error(`pads should be ${2*i}D`);if(0!==r.kernelShape.length&&r.kernelShape.length!==t[1].dims.length-2)throw Error("invalid kernel shape")},aP=(t,r)=>{let i=t.kernelShape.slice();i.length<r[1].dims.length-2&&i.push(...Array(r[1].dims.length-2-i.length).fill(0));for(let t=2;t<r[1].dims.length;++t)0===i[t-2]&&(i[t-2]=r[1].dims[t]);let a=t.pads.slice();to.adjustPadsBasedOnAutoPad(r[0].dims,t.strides,t.dilations,i,a,"NHWC"===t.format,t.autoPad);let n=Object.assign({},t);return Object.assign(n,{kernelShape:i,pads:a}),n},aU=t=>{let r=al(t),i=t.format;return{autoPad:["NOTSET","VALID","SAME_UPPER","SAME_LOWER"][t.auto_pad],format:i,dilations:t.dilations,group:t.group,kernelShape:t.kernel_shape,pads:t.pads,strides:t.strides,wIsConst:t.w_is_const(),...r,cacheKey:`${t.format};${r.activation};`}},aq=(t,r,i,a)=>{let n="NHWC"===i.format,s=aN(r[0].dims,r[1].dims,i.dilations,i.pads,i.strides,n);if(1!==i.group){let o=[r[0]];if(n){let a=t.kernelCustomData.wT??t.compute(t6(r[1],aM),{inputs:[1],outputs:[i.wIsConst?-2:-1]})[0];i.wIsConst&&!t.kernelCustomData.wT&&(t.kernelCustomData.wT=a),o.push(a)}else o.push(r[1]);3===r.length&&o.push(r[2]),!t.adapterInfo.isArchitecture("ampere")&&n&&r[1].dims[0]===i.group&&1===r[1].dims[1]&&1===i.dilations[0]&&1===i.dilations[1]?t.compute(aB(o,i,s,a),{inputs:o}):t.compute(aR(o,i,s,a),{inputs:o});return}let o=3===r.length,u=r[0].dims[n?1:2],l=r[0].dims[n?2:3],d=r[0].dims[n?3:1],p=r[1].dims[2],c=r[1].dims[3],h=s[n?1:2],f=s[n?2:3],m=s[n?3:1],g=n&&p===u&&c===l&&0===i.pads[0]&&0===i.pads[1];if(g||1===p&&1===c&&1===i.dilations[0]&&1===i.dilations[1]&&1===i.strides[0]&&1===i.strides[1]&&0===i.pads[0]&&0===i.pads[1]){let p=s[0],c,y,_,b
vendor: 6,074 bytes, lines 1208-1249
1208=[];if(n){let a=t.kernelCustomData.wT??t.compute(t6(r[1],aM),{inputs:[1],outputs:[i.wIsConst?-2:-1]})[0];if(i.wIsConst&&!t.kernelCustomData.wT&&(t.kernelCustomData.wT=a),g){let t=u*l*d;c=r[0].reshape([1,p,t]),y=a.reshape([1,t,m]),_=[1,p,m]}else c=r[0].reshape([p,u*l,d]),y=a.reshape([1,d,m]),_=[p,h*f,m];b.push(c),b.push(y)}else c=r[0].reshape([p,d,u*l]),y=r[1].reshape([1,m,d]),_=[p,m,h*f],b.push(y),b.push(c);o&&b.push(r[2]);let $=_[2],v=b[0].dims[b[0].dims.length-1];$<8&&v<8?t.compute(af(b,i,s,_,n,a),{inputs:b}):t.compute(aw(b,i,s,_,n,a),{inputs:b});return}let y=t.kernelCustomData.wT??t.compute(t6(r[1],aM),{inputs:[1],outputs:[i.wIsConst?-2:-1]})[0];i.wIsConst&&!t.kernelCustomData.wT&&(t.kernelCustomData.wT=y);let _=[r[0],y];o&&_.push(r[2]);let b=n?h*f:m,$=n?m:h*f,v=p*c*d;t.compute(ak(_,i,s,b,$,v,o,!0,a),{inputs:_})},aW=(t,r)=>{let i="NHWC"===r.format,a=[t.inputs[0].reshape(i?[t.inputs[0].dims[0],1,t.inputs[0].dims[1],t.inputs[0].dims[2]]:[t.inputs[0].dims[0],t.inputs[0].dims[1],1,t.inputs[0].dims[2]]),t.inputs[1].reshape([t.inputs[1].dims[0],t.inputs[1].dims[1],1,t.inputs[1].dims[2]])];3===t.inputs.length&&a.push(t.inputs[2]);let n=[0,r.pads[0],0,r.pads[1]],s=[1].concat(r.strides),o=[1].concat(r.dilations),u=[1].concat(r.kernelShape),l=aP({...r,pads:n,strides:s,dilations:o,kernelShape:u},a);aq(t,a,l,t=>i?[t[0],t[2],t[3]]:[t[0],t[1],t[3]])},aL=(t,r,i)=>{let a="NHWC"===i.format?"channelsLast":"channelsFirst",n=aP(i,r),s="NOTSET"===i.autoPad?i.pads:i.autoPad,o=aA(r[0].dims,r[1].dims,i.strides,i.dilations,s,!1,a);t.compute(aO(r,n,o.outShape,[o.filterDepth,o.filterHeight,o.filterWidth],[o.padInfo.front,o.padInfo.top,o.padInfo.left],a))},aV=(t,r)=>{if(aD(t.inputs,r),3===t.inputs[0].dims.length)aW(t,r);else if(5===t.inputs[0].dims.length)aL(t,t.inputs,r);else{let i=aP(r,t.inputs);aq(t,t.inputs,i)}}}),um=q(()=>{oK(),oQ(),oX(),o4(),aG=(t,r,i)=>{let a=t.length>2,n=r.outputShape,s="NHWC"===r.format,o=r.group,u=t[1].dims,l=u[2]/o,d=u[3],p=s?tL(l):1,c=s&&1===d&&l>=4,h=c?4*Math.floor(l/4):Math.floor(l/p)*p,f=l-h,m=s?tL(d):1,g=s?1===d?p:m:1,y=ts.size(n)/m,_=[Math.ceil(y/64),1,1];ti("verbose",()=>`[conv2d_backprop_webgpu] dispatch = ${_}`);let b=["rank","rank"],$=[r.strides[0],r.strides[1]],v=[r.kernelShape[s?1:2],r.kernelShape[s?2:3]],w=[r.dilations[0],r.dilations[1]],x=[v[0]+(r.dilations[0]<=1?0:(r.kernelShape[s?1:2]-1)*(r.dilations[0]-1)),v[1]+(r.dilations[1]<=1?0:(r.kernelShape[s?2:3]-1)*(r.dilations[1]-1))],k=[x[0]-1-Math.floor((r.pads[0]+r.pads[2])/2),x[1]-1-Math.floor((r.pads[1]+r.pads[3])/2)],S=[{type:12,data:y},{type:12,data:$},{type:12,data:v},{type:12,data:w},{type:12,data:x},{type:6,data:k},{type:12,data:h},{type:12,data:l},{type:12,data:d},...tW(t[0].dims,t[1].dims)];return a&&(S.push(...tW(t[2].dims)),b.push("rank")),S.push(...tW(n)),{name:"ConvTranspose2D",shaderCache:{hint:`${r.cacheKey};${p}${g}${m}${c}${f}`,inputDependencies:b},getRunData:()=>({dispatchGroup:{x:_[0],y:_[1],z:_[2]},outputs:[{dims:i?i(n):n,dataType:t[0].dataType}],programUniforms:S}),getShaderSource:r=>{let i=[{name:"output_size",type:"u32"},{name:"strides",type:"u32",length:$.length},{name:"filter_dims",type:"u32",length:v.length},{name:"dilations",type:"u32",length:v.length},{name:"effective_filter_dims",type:"u32",length:x.length},{name:"pads",type:"i32",length:k.length},{name:"input_channels_per_group_int",type:"u32"},{name:"input_channels_per_group",type:"u32"},{name:"output_channels_per_group",type:"u32"}],o=tU(t[0].dataType),u=s?1:2,l=s?2:3,d=s?3:1,h=tK("W",t[1].dataType,t[1].dims.length,g),y=tK("Dy",t[0].dataType,t[0].dims.length,p),_=[y,h];a&&_.push(tK("bias",t[2].dataType,[n[d]].length,m));let b=tZ("result",t[0].dataType,n.length,m),w=`
1209            let outputIndices = ${b.offsetToIndices(`global_idx * ${m}`)};
1210            let batch = ${b.indicesGet("outputIndices",0)};
1211            let d1 = ${b.indicesGet("outputIndices",d)};
1212            let r = ${b.indicesGet("outputIndices",u)};
1213            let c = ${b.indicesGet("outputIndices",l)};
1214            let dyCorner = vec2<i32>(i32(r), i32(c)) - uniforms.pads;
1215            let dyRCorner = dyCorner.x;
1216            let dyCCorner = dyCorner.y;
1217            let groupId = d1 / uniforms.output_channels_per_group;
1218            let wOutChannel = d1 - groupId * uniforms.output_channels_per_group;
1219            // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).
1220            // ? = to be determined. : = across all values in that axis.
1221            var dotProd = ${b.type.value}(0.0);
1222            var wR: u32 = 0;
1223            if (uniforms.dilations.x == 1) {
1224              // Minimum wR >= 0 that satisfies (dyRCorner + wR) % (uniforms.strides.x) == 0
1225              wR = u32(((dyRCorner + i32(uniforms.strides.x) - 1) / i32(uniforms.strides.x)) * i32(uniforms.strides.x) - dyRCorner);
1226            }
1227            for (; wR < uniforms.effective_filter_dims.x; wR = wR + 1) {
1228              if (wR % uniforms.dilations.x != 0) {
1229                continue;
1230              }
1231              let dyR = (${o}(dyRCorner) + ${o}(wR)) / ${o}(uniforms.strides[0]);
1232              let wRPerm = uniforms.filter_dims.x - 1 - wR / uniforms.dilations.x;
1233              if (dyR < 0.0 || dyR >= ${o}(uniforms.Dy_shape[${u}]) || fract(dyR) > 0.0 ||
1234                  wRPerm < 0) {
1235                continue;
1236              }
1237              let idyR: u32 = u32(dyR);
1238              var wC: u32 = 0;
1239              if (uniforms.dilations.y == 1) {
1240                // Minimum wC >= 0 that satisfies (dyCCorner + wC) % (uniforms.strides.y) == 0
1241                wC = u32(((dyCCorner + i32(uniforms.strides.y) - 1) / i32(uniforms.strides.y)) * i32(uniforms.strides.y) - dyCCorner);
1242              }
1243              for (; wC < uniforms.effective_filter_dims.y; wC = wC + 1) {
1244                if (wC % uniforms.dilations.y != 0) {
1245                  continue;
1246                }
1247                let dyC = (${o}(dyCCorner) + ${o}(wC)) / ${o}(uniforms.strides.y);
1248                let wCPerm = uniforms.filter_dims.y - 1 - wC / uniforms.dilations.y;
1249                if (dyC < 0.0 || dyC >= ${o}(uniforms.Dy_shape[${l}
1249]) ||
1250                    fract(dyC) > 0.0 || wCPerm < 0) {
1251                  continue;
1252                }
1253                let idyC: u32 = u32(dyC);
1254                var inputChannel = groupId * uniforms.input_channels_per_group;
1255                ${c?`
1256                var x_offset = ${y.indicesToOffset(`${y.type.indices}(batch, idyR, idyC, inputChannel)`)} / ${p};
1257                var w_offset = ${h.indicesToOffset(`${h.type.indices}(wRPerm, wCPerm, inputChannel, wOutChannel)`)} / ${g};
1258                  `:""}
1259                for (var d2: u32 = 0; d2 < uniforms.input_channels_per_group_int; d2 = d2 + ${c?4:p}) {
1260                  ${(()=>{let t="";if(c)4===p?t+=`
1261        let xValue = ${y.getByOffset("x_offset")};
1262        let wValue = ${h.getByOffset("w_offset")};
1263        dotProd = dotProd + dot(xValue, wValue);
1264        x_offset += 1u;
1265        w_offset += 1u;`:2===p?t+=`
1266          dotProd = dotProd + dot(vec4<${o}>(${y.getByOffset("x_offset")}, ${y.getByOffset("x_offset + 1u")}), vec4<${o}>(${h.getByOffset("w_offset")}, ${h.getByOffset("w_offset + 1u")}));
1267          x_offset += 2u;
1268          w_offset += 2u;`:1===p&&(t+=`
1269          dotProd = dotProd + dot(vec4<${o}>(${y.getByOffset("x_offset")}, ${y.getByOffset("x_offset + 1u")}, ${y.getByOffset("x_offset + 2u")}, ${y.getByOffset("x_offset + 3u")}), vec4<${o}>(${h.getByOffset("w_offset")}, ${h.getByOffset("w_offset + 1u")}, ${h.getByOffset("w_offset + 2u")}, ${h.getByOffset("w_offset + 3u")}));
1270          x_offset += 4u;
1271          w_offset += 4u;`);else if(t+=`
1272                  let xValue = ${s?y.getByOffset(`${y.indicesToOffset(`${y.type.indices}(batch, idyR, idyC, inputChannel)`)} / ${p}`):y.get("batch","inputChannel","idyR","idyC")};
1273        `,1===p)t+=`
1274          let w_offset = ${h.indicesToOffset(`${h.type.indices}(u32(wRPerm), u32(wCPerm), inputChannel, wOutChannel)`)};
1275          let wValue = ${h.getByOffset(`w_offset / ${g}`)};
1276          dotProd = dotProd + xValue * wValue;`;else for(let r=0;r<p;r++)t+=`
1277            let wValue${r} = ${h.getByOffset(`${h.indicesToOffset(`${h.type.indices}(u32(wRPerm), u32(wCPerm), inputChannel + ${r}, wOutChannel)`)} / ${g}`)};
1278            dotProd = dotProd + xValue[${r}] * wValue${r};`;return t})()}
1279                  inputChannel = inputChannel + ${c?4:p};
1280                }
1281                ${(()=>{if(0===f)return"";if(!c)throw Error(`packInputAs4 ${c} is not true.`);let t="";if(1===p){t+="dotProd = dotProd";for(let r=0;r<f;r++)t+=`
1282            + ${y.getByOffset(`x_offset + ${r}`)} * ${h.getByOffset(`w_offset + ${r}`)}`;t+=";"}else if(2===p){if(2!==f)throw Error(`Invalid inputChannelsRemainder ${f}.`);t+=`
1283          let xValue = ${y.getByOffset("x_offset")};
1284          let wValue = ${h.getByOffset("w_offset")};
1285          dotProd = dotProd + dot(xValue, wValue);`}return t})()}
1286                wC = wC + uniforms.strides.y - 1;
1287              }
1288              wR = wR + uniforms.strides[0] - 1;
1289            }
1290            let value = dotProd${a?` + bias[d1 / ${m}]`:""};
1291            ${b.setByOffset("global_idx","value")};
1292          `;return`
1293    ${r.registerUniforms(i).declareVariables(..._,b)}
1294      ${r.mainStart()}
1295      ${r.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")};
1296    ${w}}`}}}}),ug=q(()=>{um(),us(),o8(),aH=(t,r,i,a,n,s)=>(t-1)*r+i+(a-1)*n+1-s,aF=(t,r,i,a,n)=>{let s=Math.floor(t/2);"SAME_UPPER"===r?(i[a]=s,i[n]=t-s):"SAME_LOWER"===r&&(i[a]=t-s,i[n]=s)},aj=(t,r,i,a,n,s,o,u,l,d)=>{let p=t.length-2,c=0===d.length;l.length<p&&l.push(...Array(p-l.length).fill(0));let h=t[0],f=r[u?3:1]*n;for(let n=0,h=t.length-p-!!u;n<p;++n,++h){let u=t[h],f=c?u*o[n]:d[n];aF(aH(u,o[n],s[n],r[h],i[n],f),a,s,n,n+p),c&&d.push(o[n]*(u-1)+l[n]+(r[h]-1)*i[n]+1-s[n]-s[n+p])}d.splice(0,0,h),d.splice(u?3:1,0,f)},aK=(t,r)=>{let i=t.kernelShape.slice();if(0===t.kernelShape.length||0===t.kernelShape.reduce((t,r)=>t*r,1)){i.length=0;for(let t=2;t<r[1].dims.length;++t)i.push(r[1].dims[t])}let a="NHWC"===t.format;i.splice(0,0,r[1].dims[0]),i.splice(a?3:1,0,r[1].dims[1]);let n=t.pads.slice(),s=t.outputShape.slice(),o=t.outputPadding.slice(),u=r[0].dims,l=t.dilations.slice();0===l.reduce((t,r)=>t+r,0)&&(l=Array(r[0].dims.length-2).fill(1));let d=t.strides.slice();0===d.reduce((t,r)=>t+r,0)&&(d=Array(r[0].dims.length-2).fill(1)),aj(u,i,l,t.autoPad,t.group,n,d,a,o,s);let p=Object.assign({},t);return Object.assign(p,{kernelShape:i,pads:n,outputPadding:o,outputShape:s,dilations:l,strides:d}),p},aZ=t=>{let r=al(t),i=t.format,a=["NOTSET","VALID","SAME_UPPER","SAME_LOWER"][typeof t.autoPad>"u"?0:t.autoPad],n=t.dilations,s=t.group,o=t.kernelShape,u=t.pads,l=t.strides,d=t.wIsConst(
1296);return{autoPad:a,format:i,dilations:n,group:s,kernelShape:o,outputPadding:t.outputPadding,outputShape:t.outputShape,pads:u,strides:l,wIsConst:d,...r,cacheKey:`${t.format};${r.activation};`}},aQ=(t,r)=>{if(!t||2!==t.length&&3!==t.length)throw Error("Conv requires 2 or 3 inputs");if(4!==t[0].dims.length&&3!==t[0].dims.length)throw Error("currently only support 2-dimensional conv");if(t[0].dims.length!==t[1].dims.length)throw Error("filter does not have same dimension as input");if(t[0].dims["NHWC"===r.format?t[0].dims.length-1:1]!==t[1].dims[0])throw Error("FILTER_IN_CHANNEL should be equal to DATA_CHANNEL");let i=t[1].dims[1]*r.group;if(3===t.length&&(1!==t[2].dims.length||t[2].dims[0]!==i))throw Error("invalid bias");let a=t[0].dims.length-2;if(r.dilations.reduce((t,r)=>t+r,0)>0&&r.dilations.length!==a)throw Error(`dilations should be ${a}D`);if(r.strides.reduce((t,r)=>t+r,0)>0&&r.strides.length!==a)throw Error(`strides should be ${a}D`);if(r.pads.reduce((t,r)=>t+r,0)>0&&r.pads.length!==2*a)throw Error(`pads should be ${2*a}D`);if(r.outputPadding.length!==a&&0!==r.outputPadding.length)throw Error(`output_padding should be ${a}D`);if(r.kernelShape.reduce((t,r)=>t+r,0)>0&&0!==r.kernelShape.length&&r.kernelShape.length!==t[1].dims.length-2)throw Error("invalid kernel shape");if(0!==r.outputShape.length&&r.outputShape.length!==t[0].dims.length-2)throw Error("invalid output shape")},aX=(t,r,i,a)=>{let n=t.kernelCustomData.wT??t.compute(t6(r[1],[2,3,0,1]),{inputs:[1],outputs:[i.wIsConst?-2:-1]})[0];i.wIsConst&&!t.kernelCustomData.wT&&(t.kernelCustomData.wT=n);let s=[r[0],n];3===r.length&&s.push(r[2]),t.compute(aG(s,i,a),{inputs:s})},aY=(t,r)=>{let i="NHWC"===r.format,a=[t.inputs[0].reshape(i?[t.inputs[0].dims[0],1,t.inputs[0].dims[1],t.inputs[0].dims[2]]:[t.inputs[0].dims[0],t.inputs[0].dims[1],1,t.inputs[0].dims[2]]),t.inputs[1].reshape([t.inputs[1].dims[0],t.inputs[1].dims[1],1,t.inputs[1].dims[2]])];3===t.inputs.length&&a.push(t.inputs[2]);let n=r.kernelShape;(0===n.length||0===n[0])&&(n=[t.inputs[1].dims[2]]);let s=r.dilations;(0===s.length||0===s[0])&&(s=[1]);let o=r.strides;(0===o.length||0===o[0])&&(o=[1]);let u=r.pads;0===u.length&&(u=[0,0]),u=[0,u[0],0,u[1]],o=[1].concat(o),s=[1].concat(s),n=[1].concat(n);let l=r.outputPadding;l=[0].concat(l);let d=aK({...r,pads:u,strides:o,dilations:s,kernelShape:n,outputPadding:l},a);aX(t,a,d,t=>i?[t[0],t[2],t[3]]:[t[0],t[1],t[3]])},aJ=(t,r)=>{if(aQ(t.inputs,r),3===t.inputs[0].dims.length)aY(t,r);else{let i=aK(r,t.inputs);aX(t,t.inputs,i)}}}),uy=q(()=>{oK(),oX(),o3(),o4(),a0=(t,r,i,a)=>{let n=ts.size(r),s=r.length,o=tK("input",t,s),u=tZ("output",t,s),l=6===i.dataType?i.getInt32Array()[0]:Number(i.getBigInt64Array()[0]),d=ts.normalizeAxis(l,s);return{name:"CumSum",shaderCache:{hint:a.cacheKey,inputDependencies:["rank"]},getRunData:()=>({outputs:[{dims:r,dataType:t}],dispatchGroup:{x:Math.ceil(n/64)},programUniforms:[{type:12,data:n},{type:12,data:d},...tW(r,r)]}),getShaderSource:t=>{let r=` i32(${o.indicesGet("inputIndices","uniforms.axis")}) `,i=tF("uniforms.input_shape","uniforms.axis",s),n=a.reverse?r+(a.exclusive?" + 1":""):"0",l=a.reverse?i:r+(a.exclusive?"":" + 1");return`
1297                ${t.registerUniform("outputSize","u32").registerUniform("axis","u32").declareVariables(o,u)}
1298                ${t.mainStart()}
1299                  ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
1300                  var inputIndices = ${u.offsetToIndices("global_idx")};
1301                  var sum = ${u.type.value}(0);
1302                  let first : i32 = ${n};
1303                  let last : i32 = ${l};
1304                  for (var i : i32 = first; i < last; i++) {
1305                    ${o.indicesSet("inputIndices","uniforms.axis","u32(i)")};
1306                    sum = sum + ${o.getByIndices("inputIndices")};
1307                  }
1308                  ${u.setByOffset("global_idx","sum")};
1309                }`}}},a2=(t,r)=>{let i=t.inputs[0].dims,a=t.inputs[0].dataType,n=t.inputs[1];t.compute(a0(a,i,n,r),{inputs:[0]})},a1=t=>{let r=1===t.exclusive,i=1===t.reverse;return tM({exclusive:r,reverse:i})}}),u_=q(()=>{oK(),oX(),o3(),o4(),a3=t=>{if(!t||1!==t.length)throw Error("DepthToSpace requires 1 input.");if(4!==t[0].dims.length)throw Error("DepthToSpace requires 4D input.")},a4=(t,r,i,a)=>{let n=[];
1309n.push(`fn perm(i: ${a.type.indices}) -> ${i.type.indices} {
1310    var a: ${i.type.indices};`);for(let a=0;a<r;++a)n.push(i.indicesSet("a",t[a],`i[${a}]`));return n.push("return a;}"),n.join(`
1311`)},a8=(t,r)=>{let i,a,n,s,o,u,l="NHWC"===r.format,d=r.blocksize,p="DCR"===r.mode;l?([i,a,n,s]=t.dims,o=p?[i,a,n,d,d,s/d**2]:[i,a,n,s/d**2,d,d],u=p?[0,1,3,2,4,5]:[0,1,4,2,5,3]):([i,a,n,s]=[t.dims[0],t.dims[2],t.dims[3],t.dims[1]],o=p?[i,d,d,s/d**2,a,n]:[i,s/d**2,d,d,a,n],u=p?[0,3,4,1,5,2]:[0,1,4,2,5,3]);let c=t.reshape(o),h=c.dims.length,f=t.dataType,m=tK("a",f,h),g=tZ("output",f,h);return{name:"DepthToSpace",shaderCache:{hint:`${t.dims};${r.blocksize};${r.mode}`,inputDependencies:["rank"]},getRunData:t=>{let r=l?[i,a*d,n*d,s/d**2]:[i,s/d**2,a*d,n*d],o=ts.size(r),p=c.dims,h=ts.sortBasedOnPerm(p,u);return{outputs:[{dims:r,dataType:t[0].dataType}],dispatchGroup:{x:Math.ceil(o/64)},programUniforms:[{type:12,data:o},...tW(p,h)]}},getShaderSource:t=>`
1312  ${t.registerUniform("output_size","u32").declareVariables(m,g)}
1313
1314  ${a4(u,h,m,g)}
1315
1316  ${t.mainStart()}
1317    ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1318
1319    let indices = ${g.offsetToIndices("global_idx")};
1320    let aIndices = perm(indices);
1321
1322    ${g.setByOffset("global_idx",m.getByIndices("aIndices"))}
1323  }`}},a6=(t,r)=>{a3(t.inputs),t.compute(a8(t.inputs[0],r))},a5=t=>tM({blocksize:t.blocksize,mode:t.mode,format:t.format})}),ub=q(()=>{oK(),oX(),o3(),o4(),ne="^"+(a9="("+(a7="[a-zA-Z]|\\.\\.\\.")+")+")+"$",nt="^"+("("+a9+",)*")+a9+"$",nr=class{constructor(t=-1){this.symbolToIndices=new Map,this.inputIndex=t}addSymbol(t,r){let i=this.symbolToIndices.get(t);void 0===i?i=[r]:i.push(r),this.symbolToIndices.set(t,i)}},ni=class{constructor(t,r){this.equation=r,this.hasEllipsis=!1,this.symbolToInfo=new Map,this.lhs=[],this.outputDims=[];let[i,a]=r.includes("->")?r.split("->",2):[r,""];if(!i.match(RegExp(nt)))throw Error("Invalid LHS term");if(i.split(",").forEach((r,i)=>{let a=t[i].dims.slice();if(!r.match(RegExp(ne)))throw Error("Invalid LHS term");let n=this.processTerm(r,!0,a,i);this.lhs.push(n)}),""===a)a+=[...this.symbolToInfo.entries()].filter(([t,r])=>1===r.count||"..."===t).map(([t])=>t).join("");else if(!a.match(RegExp(a9)))throw Error("Invalid RHS");a.match(RegExp(a7,"g"))?.forEach(t=>{if("..."===t)this.outputDims=this.outputDims.concat(this.ellipsisDims);else{let r=this.symbolToInfo.get(t);if(void 0===r)throw Error("Invalid RHS symbol");this.outputDims.push(r.dimValue)}}),this.rhs=this.processTerm(a,!1,this.outputDims)}addSymbol(t,r,i){let a=this.symbolToInfo.get(t);if(void 0!==a){if(a.dimValue!==r&&1!==a.count)throw Error("Dimension mismatch");a.count++,a.inputIndices.push(i)}else a={count:1,dimValue:r,inputIndices:[i]};this.symbolToInfo.set(t,a)}processTerm(t,r,i,a=-1){let n=i.length,s=!1,o=[],u=0;if(!t.match(RegExp(ne))&&!r&&""!==t)throw Error("Invalid LHS term");let l=t.match(RegExp(a7,"g")),d=new nr(a);return l?.forEach((t,p)=>{if("..."===t){if(s)throw Error("Only one ellipsis is allowed per input term");s=!0;let t=n-l.length+1;if(t<0)throw Error("Ellipsis out of bounds");if(o=i.slice(u,u+t),this.hasEllipsis){if(this.ellipsisDims.length!==o.length||this.ellipsisDims.toString()!==o.toString())throw Error("Ellipsis dimensions mismatch")}else if(r)this.hasEllipsis=!0,this.ellipsisDims=o;else throw Error("Ellipsis must be specified in the LHS");for(let t=0;t<o.length;t++){let r=String.fromCharCode(48+t);d.addSymbol(r,p+t),this.addSymbol(r,i[u++],a)}}else d.addSymbol(t,p+(this.hasEllipsis?this.ellipsisDims.length-1:0)),this.addSymbol(t,i[u++],a)}),d}},na=t=>t+"_max",nn=(t,r,i,a)=>{let n=t.map(t=>t.length).map((t,i)=>tK(`input${i}`,r,t)),s=ts.size(a),o=tZ("output",r,a.length),u=[...i.symbolToInfo.keys()].filter(t=>!i.rhs.symbolToIndices.has(t));return{name:"Einsum",shaderCache:{hint:i.equation,inputDependencies:t.map(()=>"rank")},getRunData:()=>{let n=u.filter(t=>i.symbolToInfo.has(t)).map(t=>({type:12,data:i.symbolToInfo.get(t)?.dimValue||0}));n.push({type:12,data:s});let o=t.map((t,r)=>[...tW(t)]).reduce((t,r)=>t.concat(r),n);return o.push(...tW(a)),{outputs:[{dims:a,dataType:r}],dispatchGroup:{x:Math.ceil(s/64)},programUniforms:o}},getShaderSource:t=>{let r=[],a=[],s=[],l=[],d=[],p=i.symbolToInfo.size===i.rhs.symbolToIndices.size;i.symbolToInfo.forEach((t,u)=>{if(i.rhs.symbolToIndices.has(u)){let a=i.rhs.symbolToIndices.get(u)?.[0];void 0!==a&&i.lhs.forEach((i,s)=>{if(t.inputIndices.includes(s)){let t=i.symbolToIndices.get(u);if(void 0===t)throw Error("Invalid symbol error");t.forEach(t=>{r.push(`${n[s].indicesSet(`input${s}Indices`,t,o.indicesGet("outputIndices",a))}`)})}})}else i.lhs.forEach((r,i)=>{if(t.inputIndices.includes(i)){let t=r.symbolToIndices.get(u);if(void 0===t)throw Error("Invalid symbol error");t.forEach(t=>{a.push(`${n[i].indicesSet(`input${i}Indices`,t,`${u}`)}`)}),d.push(`prod *= ${n[i].getByIndices(`input${i}Indices`)};`)}}),s.push(`for(var ${u}: u32 = 0; ${u} < uniforms.${na(u)}; ${u}++) {`),l.push("}")});let c=p?[...r,`let sum = ${n.map((t,r)=>t.getByIndices(`input${r}Indices`)).join(" * ")};`]:[...r,"var sum = 0.0;",...s,...a,"var prod = 1.0;",...d,"sum += prod;",...l];return`
1324            ${t.registerUniforms(u.map(t=>({name:`${na(t)}`,type:"u32"}))).registerUniform("outputSize","u32").declareVariables(...n,o)}
1325
1326            ${t.mainStart()}
1327            ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
1328            var outputIndices = ${o.offsetToIndices("global_idx")};
1329            ${n.map((t,r)=>`var input${r}Indices: ${n[r].type.indices};`).join(`
1330`)}
1331            ${c.join(`
1332`)};
1333            ${o.setByOffset("global_idx","sum")};
1334          }`}}},ns=(t,r)=>
vendor: 4,874 bytes, lines 1334-1378
1334{let i=new ni(t.inputs,r.equation),a=i.outputDims,n=t.inputs.map((t,r)=>t.dims);t.compute(nn(n,t.inputs[0].dataType,i,a))},no=t=>{let r=t.equation.replace(/\s+/g,"");return tM({equation:r})}}),u$=q(()=>{oK(),oX(),o4(),nu=t=>{if(!t||2!==t.length)throw Error("Expand requires 2 input.");let r=t[0].dims,i=Array.from(t[1].getBigInt64Array(),Number),a=i.length<r.length?0:i.length-r.length,n=r.length<i.length?0:r.length-i.length;for(;a<i.length&&n<r.length;++a,++n)if(i[a]!==r[n]&&1!==i[a]&&1!==r[n])throw Error("Expand requires shape to be broadcastable to input")},nl=(t,r)=>{let i=t.length-r.length,a=[];for(let r=0;r<i;++r)a.push(t[r]);for(let n=0;n<r.length;++n)a.push(1===r[n]?t[n+i]:r[n]);return a},nd=(t,r)=>t.length>r.length?nl(t,r):nl(r,t),np=t=>{let r=t[0].dims,i=nd(r,Array.from(t[1].getBigInt64Array(),Number)),a=t[0].dataType,n=9===a||1===ts.size(r),s=9===a||r.length>0&&r[r.length-1]%4==0?4:1,o=n||i.length>0&&i[i.length-1]%4==0?4:1,u=Math.ceil(ts.size(i)/o),l=[{type:12,data:u},...tW(r,i)];return{name:"Expand",shaderCache:{hint:`${i.length};${s}${o}`,inputDependencies:["rank"]},getShaderSource:t=>{let n=tK("input",a,r.length,s),u=tZ("output",a,i.length,o),l;if(9===a){let t=(t,r,i="")=>`
1335          let outputIndices${r} = ${u.offsetToIndices(`outputOffset + ${r}u`)};
1336          let offset${r} = ${n.broadcastedIndicesToOffset(`outputIndices${r}`,u)};
1337          let index${r} = offset${r} / 4u;
1338          let component${r} = offset${r} % 4u;
1339          ${t}[${r}] = ${i}(${n.getByOffset(`index${r}`)}[component${r}]);
1340        `;l=`
1341        let outputOffset = global_idx * ${o};
1342        var data = vec4<u32>(0);
1343        ${t("data",0,"u32")}
1344        ${t("data",1,"u32")}
1345        ${t("data",2,"u32")}
1346        ${t("data",3,"u32")}
1347        ${u.setByOffset("global_idx","data")}
1348      }`}else l=`
1349        let outputIndices = ${u.offsetToIndices(`global_idx * ${o}`)};
1350        let inputOffset = ${n.broadcastedIndicesToOffset("outputIndices",u)};
1351        let data = ${u.type.value}(${n.getByOffset(`inputOffset / ${s}`)});
1352        ${u.setByOffset("global_idx","data")}
1353      }`;return`
1354    ${t.registerUniform("vec_size","u32").declareVariables(n,u)}
1355    ${t.mainStart()}
1356    ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")}
1357    ${l}`},getRunData:()=>({outputs:[{dims:i,dataType:t[0].dataType}],dispatchGroup:{x:Math.ceil(u/64)},programUniforms:l})}},nc=t=>{nu(t.inputs),t.compute(np(t.inputs),{inputs:[0]})}}),uv=q(()=>{oK(),oX(),o4(),ur(),nh=t=>{let r=t[0].dataType,i=ts.size(t[0].dims),a=ts.size(t[1].dims),n=a%4==0;return{name:"FastGeluWithBias",shaderCache:{hint:`${n}`,inputDependencies:["type","type"]},getShaderSource:t=>{let i=tK("x",r,[1],4),a=tK("bias",r,[1],4),s=tZ("y",r,[1],4),o=t=>`
1358      let bias${t}_offset: u32 = (global_idx * 4 + ${t}) % uniforms.bias_size;
1359      let bias${t} = ${a.getByOffset(`bias${t}_offset / 4`)}[bias${t}_offset % 4];`,u=n?`
1360      let bias = ${a.getByOffset("global_idx % (uniforms.bias_size / 4)")};`:`${o(0)}${o(1)}${o(2)}${o(3)}
1361      let bias = ${i.type.value}(bias0, bias1, bias2, bias3);`;return`${t.registerUniforms([{name:"output_vec_size",type:"u32"},{name:"bias_size",type:"u32"}]).declareVariables(i,a,s)}
1362
1363    ${iq(tq(r))}
1364
1365    ${t.mainStart(tD)}
1366      ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_vec_size")}
1367
1368      let x = ${i.getByOffset("global_idx")};
1369      ${u}
1370      let x_in = x + bias;
1371      ${s.setByOffset("global_idx",iW("x_in"))}
1372    }`},getRunData:t=>({outputs:[{dims:t[0].dims,dataType:t[0].dataType}],programUniforms:[{type:12,data:Math.ceil(i/4)},{type:12,data:a}],dispatchGroup:{x:Math.ceil(i/tD/4)}})}},nf=t=>{t.inputs.length<2||0===ts.size(t.inputs[1].dims)?iL(t):t.compute(nh(t.inputs))}}),uw=q(()=>{oK(),oX(),o3(),o4(),nm=t=>{if(!t||2!==t.length)throw Error("Gather requires 2 inputs.")},ng=(t,r)=>{let i=t[0].dims,a=t[1].dims,n=i.length,s=ts.normalizeAxis(r.axis,n),o=i.slice(0);o.splice(s,1,...a);let u=i[s],l=9===t[0].dataType?4:1,d=Math.ceil(ts.size(o)/l),p=[{type:12,data:d},{type:6,data:u},{type:12,data:s},...tW(t[0].dims,t[1].dims,o)];return{name:"Gather",shaderCache:{hint:r.cacheKey,inputDependencies:["rank","rank"]},getRunData:()=>({outputs:[{dims:o,dataType:t[0].dataType}],dispatchGroup:{x:Math.ceil(d/64)},programUniforms:p}),getShaderSource:r=>{let i=tK("data",t[0].dataType,t[0].dims.length,l),u=tK("inputIndices",t[1].dataType,t[1].dims.length),d=tZ("output",t[0].dataType,o.length,l),p=t=>{let r=a.length,l=`var indicesIndices${t}  = ${u.type.indices}(0);`;for(let i=0;i<r;i++)l+=`${r>1?`indicesIndices${t}[${i}]`:`indicesIndices${t}`} = ${o.length>1?`outputIndices${t}[uniforms.axis + ${i}]`:`outputIndices${t}`};`;l+=`
1373          var idx${t} = ${u.getByIndices(`indicesIndices${t}`)};
1374          if (idx${t} < 0) {
1375            idx${t} = idx${t} + uniforms.axisDimLimit;
1376          }
1377          var dataIndices${t} : ${i.type.indices};
1378        `;
1378for(let i=0,a=0;i<n;i++)i===s?(l+=`${n>1?`dataIndices${t}[${i}]`:`dataIndices${t}`} = u32(idx${t});`,a+=r):(l+=`${n>1?`dataIndices${t}[${i}]`:`dataIndices${t}`} = ${o.length>1?`outputIndices${t}[${a}]`:`outputIndices${t}`};`,a++);return l},c;if(9===t[0].dataType){let t=(t,r,a="")=>`
1379          let outputIndices${r} = ${d.offsetToIndices(`outputOffset + ${r}u`)};
1380          ${p(r)};
1381          let offset${r} = ${i.indicesToOffset(`dataIndices${r}`)};
1382          let index${r} = offset${r} / 4u;
1383          let component${r} = offset${r} % 4u;
1384          ${t}[${r}] = ${a}(${i.getByOffset(`index${r}`)}[component${r}]);
1385        `;c=`
1386        let outputOffset = global_idx * ${l};
1387        var value = vec4<u32>(0);
1388        ${t("value",0,"u32")}
1389        ${t("value",1,"u32")}
1390        ${t("value",2,"u32")}
1391        ${t("value",3,"u32")}
1392        ${d.setByOffset("global_idx","value")}
1393      `}else c=`
1394      let outputIndices = ${d.offsetToIndices("global_idx")};
1395      ${p("")};
1396      let value = ${i.getByIndices("dataIndices")};
1397      ${d.setByOffset("global_idx","value")};
1398      `;return`
1399      ${r.registerUniform("outputSize","u32").registerUniform("axisDimLimit","i32").registerUniform("axis","u32").declareVariables(i,u,d)}
1400      ${r.mainStart()}
1401        ${r.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
1402        ${c}
1403      }`}}},ny=t=>tM({axis:t.axis}),n_=(t,r)=>{nm(t.inputs),t.compute(ng(t.inputs,r))}}),ux=q(()=>{oK(),oX(),o4(),nb=(t,r,i,a,n,s,o,u,l)=>{let d=[{type:12,data:s},{type:12,data:a},{type:12,data:n},{type:12,data:i},{type:12,data:o},{type:12,data:u},{type:12,data:l}],p=[s];return d.push(...tW(r.dims,p)),t.compute({name:"computeSliceOffsets",shaderCache:{hint:`${n.length}_${i.length}`,inputDependencies:["rank"]},getRunData:()=>({outputs:[{dims:p,dataType:t.inputs[1].dataType}],dispatchGroup:{x:Math.ceil(s/64)},programUniforms:d}),getShaderSource:t=>{let a=tK("indices_data",r.dataType,r.dims.length),s=tZ("input_slice_offsets_data",12,1,1),o=[{name:"output_size",type:"u32"},{name:"batch_dims",type:"u32"},{name:"input_dims",type:"u32",length:n.length},{name:"sizes_from_slice_dims_data",type:"u32",length:i.length},{name:"num_slices_per_batch",type:"u32"},{name:"input_batch_stride",type:"u32"},{name:"num_slice_dims",type:"u32"}];return`
1404  ${t.registerUniforms(o).declareVariables(a,s)}
1405  ${t.mainStart()}
1406    ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1407    let batch_idx = global_idx / uniforms.num_slices_per_batch;
1408    let base_offset = batch_idx * uniforms.input_batch_stride;
1409
1410    let slice_indices_base_offset = global_idx * uniforms.num_slice_dims;
1411    var relative_slice_offset = 0;
1412    for (var dim_idx = 0u; dim_idx < uniforms.num_slice_dims; dim_idx ++) {
1413      var index = i32(indices_data[dim_idx + slice_indices_base_offset].x);
1414      let input_dim_idx = uniforms.batch_dims + dim_idx;
1415      if (index < 0) {
1416        ${1===n.length?"index += i32(uniforms.input_dims);":"index += i32(uniforms.input_dims[input_dim_idx]);"}
1417      }
1418      ${1===i.length?"relative_slice_offset += index * i32(uniforms.sizes_from_slice_dims_data);":"relative_slice_offset += index * i32(uniforms.sizes_from_slice_dims_data[dim_idx]);"}
1419    }
1420
1421    input_slice_offsets_data[global_idx] =  base_offset + u32(relative_slice_offset);
1422  }`}},{inputs:[r],outputs:[-1]})[0]},n$=(t,r)=>{let i=t.inputs,a=i[0].dims,n=i[0].dataType,s=i[1].dims,o=s[s.length-1],u=ts.sizeToDimension(s,s.length-1),l=ts.sizeFromDimension(a,r.batchDims+o),d=ts.sizeToDimension(a,r.batchDims),p=ts.sizeFromDimension(a,r.batchDims),c=Array(o),h=l;for(let t=0;t<o;++t)c[o-1-t]=h,h*=a[r.batchDims+o-1-t];let f=nb(t,i[1],c,r.batchDims,a,u,u/d,p,o),m=r.batchDims+o;if(m>a.length)throw Error("last dimension of indices must not be larger than rank of input tensor");let g=s.slice(0,-1).concat(a.slice(m)),y=ts.size(g),_=[{type:12,data:y},{type:12,data:l},...tW(i[0].dims,f.dims,g)];t.compute({name:"GatherND",shaderCache:{hint:r.cacheKey,inputDependencies:["rank","rank"]},getRunData:()=>({outputs:[{dims:g,dataType:n}],dispatchGroup:{x:Math.ceil(y/64)},programUniforms:_}),getShaderSource:t=>{let r=tK("data",i[0].dataType,i[0].dims.length),a=tK("slice_offsets",12,f.dims.length),n=tZ("output",i[0].dataType,g.length);return`
1423          ${t.registerUniform("output_size","u32").registerUniform("slice_size","u32").declareVariables(r,a,n)}
1424            ${t.mainStart()}
1425            ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1426          let slice_offset = slice_offsets[global_idx / uniforms.slice_size];
1427          output[global_idx] = data[u32(slice_offset) + global_idx % uniforms.slice_size];
1428        }`}},{inputs:[i[0],f]})},nv=t=>({batchDims:t.batch_dims,cacheKey:""})}),uk=q(()=>{oK(),oX(),o3(),o4(),nw=(t,r)=>{if(t.length<3||t.length>4)throw Error("GatherBlockQuantized requires 3 or 4 inputs.");let i=ts.normalizeAxis(r.quantizeAxis,t[0].dims.length),a=r.blockSize,n=t[0],s=t[2],o=4===t.length?t[3]:void 0;if(s.dims.length!==n.dims.length||!n.dims.map((t,r)=>r===i?Math.ceil(t/a)===s.dims[r]:t===s.dims[r]).reduce((t,r)=>t&&r,!0))throw Error("Scales must have the same rank as the input tensor and the dims should match except on gatherAxis.");if(o){if(o.dataType!==n.dataType)throw Error("Zero point must have the same data type as the input tensor.");if(o.dims.length!==s.dims.length||!o.dims.map((t,r)=>t===s.dims[r]).reduce((t,r)=>t&&r,!0))throw Error("Zero point must have the same rank as the input tensor and the dims should match except on quantizeAxis.")}},nx=(t,r)=>{let i=t[0].dims,a=t[1].dims,n=i.length,s=ts.normalizeAxis(r.gatherAxis,n),o=ts.normalizeAxis(r.quantizeAxis,n),u=i.slice(0);u.splice(s,1,...a);let l=ts.size(u),d=t[2].dataType,p=22===t[0].dataType,c=[{type:12,data:l},{type:12,data:o},{type:12,data:s},{type:12,data:r.blockSize},...tW(...t.map((t,r)=>t.dims),u)];return{name:"GatherBlockQuantized",shaderCache:{hint:`${r.cacheKey};${t.filter((t,r)=>1!==r).map(t=>t.dims.join("_")).join(";")}`,inputDependencies:Array.from({length:t.length},(t,r)=>"rank")},getRunData:()=>({outputs:[{dims:u,dataType:d}],dispatchGroup:{x:Math.ceil(l/64)},programUniforms:c}),getShaderSource:r=>{let n=tK("data",t[0].dataType,t[0].dims.length),o=tK("inputIndices",t[1].dataType,t[1].dims.length),l=tK("scales",t[2].dataType,t[2].dims.length),c=t.length>3?tK("zeroPoint",t[3].dataType,t[3].dims.length):void 0,h=tZ("output",d,u.length),f=[n,o,l];return c&&f.push(c),`
1429        ${r.registerUniforms([{name:"output_size",type:"u32"},{name:"quantize_axis",type:"u32"},{name:"gather_axis",type:"u32"},{name:"block_size",type:"u32"}]).declareVariables(...f,h)}
1430        ${r.mainStart()}
1431        let output_indices = ${h.offsetToIndices("global_idx")};
1432        var indices_indices = ${o.type.indices}(0);
1433        ${a.length>1?`
1434          for (var i: u32 = 0; i < ${a.length}; i++) {
1435            let index = ${h.indicesGet("output_indices","uniforms.gather_axis + i")};
1436            ${o.indicesSet("indices_indices","i","index")};
1437          }`:`indices_indices = ${h.indicesGet("output_indices","uniforms.gather_axis")};`};
1438        var data_indices = ${n.type.indices}(0);
1439        for (var i: u32 = 0; i < uniforms.gather_axis; i++) {
1440          let index = ${h.indicesGet("output_indices","i")};
1441          ${n.indicesSet("data_indices","i","index")};
1442        }
1443        var index_from_indices = ${o.getByIndices("indices_indices")};
1444        if (index_from_indices < 0) {
1445          index_from_indices += ${i[s]};
1446        }
1447        ${n.indicesSet("data_indices","uniforms.gather_axis","u32(index_from_indices)")};
1448        for (var i = uniforms.gather_axis + 1; i < ${u.length}; i++) {
1449          let index = ${h.indicesGet("output_indices",`i + ${a.length} - 1`)};
1450          ${n.indicesSet("data_indices","i","index")};
1451        }
1452        let data_offset = ${n.indicesToOffset("data_indices")};
1453        let data_index = data_offset % 8;
1454        // Convert 4-bit packed data to 8-bit packed data.
1455        let packed_4bit_quantized_data = ${n.getByOffset("data_offset / 8")};
1456        let packed_8bit_quantized_data = (packed_4bit_quantized_data >> (4 * (data_index % 2))) & 0x0f0f0f0f;
1457        let quantized_data_vec = ${p?"unpack4xI8":"unpack4xU8"}(u32(packed_8bit_quantized_data));
1458        let quantized_data = quantized_data_vec[data_index / 2];
1459        var scale_indices = data_indices;
1460        let quantize_axis_index = ${l.indicesGet("data_indices","uniforms.quantize_axis")} / uniforms.block_size;
1461        ${l.indicesSet("scale_indices","uniforms.quantize_axis","quantize_axis_index")};
1462        var scale = ${l.getByIndices("scale_indices")};
1463        ${c?`
1464              let zero_point_indices = scale_indices;
1465              let zero_point_offset = ${c.indicesToOffset("zero_point_indices")};
1466              let zero_point_index = zero_point_offset % 8;
1467              let packed_4bit_zero_points = ${c.getByOffset("zero_point_offset / 8")};
1468              let packed_8bit_zero_points = (packed_4bit_zero_points >> (4 * (zero_point_index % 2))) & 0x0f0f0f0f;
1469              let zero_point_vec = ${p?"unpack4xI8":"unpack4xU8"}(u32(packed_8bit_zero_points));
1470              let zero_point = zero_point_vec[zero_point_index / 2];`:"var zero_point = 0"};
1471        let dequantized_data = ${tq(d)}(quantized_data - zero_point) * scale;
1472        ${h.setByOffset("global_idx","dequantized_data")};
1473    }`}}},nk=(t,r)=>{nw(t.inputs,r),t.compute(nx(t.inputs,r))},nS=t=>tM({blockSize:t.blockSize,gatherAxis:t.gatherAxis,quantizeAxis:t.quantizeAxis})}),uS=q(()=>{oK(),oX(),o3(),o4(),nT=t=>
1473{if(!t||2!==t.length)throw Error("GatherElements requires 2 inputs.");if(t[0].dims.length<1)throw Error("GatherElements requires that the data input be rank >= 1.");if(t[0].dims.length!==t[1].dims.length)throw Error(`GatherElements requires that the data input and
1474                     indices input tensors be of same rank.`)},nI=(t,r)=>{let i=t[0].dims,a=t[0].dataType,n=i.length,s=t[1].dims,o=t[1].dataType,u=ts.normalizeAxis(r.axis,n),l=i[u],d=s.slice(0),p=ts.size(d),c=tK("input",a,n),h=tK("indicesInput",o,s.length),f=tZ("output",a,d.length),m=[{type:12,data:p},{type:6,data:l},{type:12,data:u}];return m.push(...tW(i,s,d)),{name:"GatherElements",shaderCache:{inputDependencies:["rank","rank"]},getRunData:()=>({outputs:[{dims:d,dataType:t[0].dataType}],dispatchGroup:{x:Math.ceil(p/64)},programUniforms:m}),getShaderSource:t=>`
1475      ${t.registerUniform("outputSize","u32").registerUniform("axisDimLimit","i32").registerUniform("axis","u32").declareVariables(c,h,f)}
1476      ${t.mainStart()}
1477      ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
1478
1479      let outputIndices = ${f.offsetToIndices("global_idx")};
1480
1481      var idx = ${h.getByOffset("global_idx")};
1482      if (idx < 0) {
1483        idx = idx + uniforms.axisDimLimit;
1484      }
1485      var inputIndices = ${c.type.indices}(outputIndices);
1486      ${c.indicesSet("inputIndices","uniforms.axis","u32(idx)")};
1487      let value = ${c.getByIndices("inputIndices")};
1488
1489      ${f.setByOffset("global_idx","value")};
1490  }`}},nE=t=>tM({axis:t.axis}),nC=(t,r)=>{nT(t.inputs),t.compute(nI(t.inputs,r))}}),uT=q(()=>{oK(),oX(),o4(),nz=t=>{if(!t)throw Error("Input is missing");if(t.length<2||t.length>3)throw Error("Invaid input number.");if(3===t.length&&t[2].dims.length>2)throw Error("Invalid input shape of C");if(t[0].dataType!==t[1].dataType||3===t.length&&t[0].dataType!==t[2].dataType)throw Error("Input types are mismatched")},nA=(t,r)=>{let i=t[0].dims.slice(),a=t[1].dims.slice(),[n,s,o]=tu.getShapeOfGemmResult(i,r.transA,a,r.transB,3===t.length?t[2].dims:void 0),u=[n,s];if(!u)throw Error("Can't use gemm on the given tensors");let l=Math.ceil(s/16),d=Math.ceil(n/16),p=(ts.size(u),[{type:12,data:l},{type:12,data:n},{type:12,data:s},{type:12,data:o},{type:1,data:r.alpha},{type:1,data:r.beta}]),c=["type","type"];return 3===t.length&&(p.push(...tW(t[2].dims)),c.push("rank")),p.push(...tW(u)),{name:"GemmShared",shaderCache:{hint:`${r.cacheKey}`,inputDependencies:c},getRunData:()=>({outputs:[{dims:u,dataType:t[0].dataType}],dispatchGroup:{x:l*d},programUniforms:p}),getShaderSource:i=>{let a=tK("a",t[0].dataType,t[0].dims),n=tK("b",t[1].dataType,t[1].dims),s=null,o=[a,n];3===t.length&&(s=tK("c",t[2].dataType,t[2].dims.length),o.push(s));let l=tZ("output",t[0].dataType,u.length);o.push(l);let d="",p="";r.transA&&r.transB?(p=`
1491      var col = tile_row_start + local_id.x;
1492      var row = k_start + local_id.y;
1493      if (col < uniforms.M && row < uniforms.K) {
1494        tile_a[local_id.y][local_id.x] = a[row * uniforms.M + col];
1495      } else {
1496        tile_a[local_id.y][local_id.x] = ${a.type.value}(0);
1497      }
1498
1499      col = k_start + local_id.x;
1500      row = tile_col_start + local_id.y;
1501      if (col < uniforms.K && row < uniforms.N) {
1502        tile_b[local_id.y][local_id.x] = b[row * uniforms.K + col];
1503      } else {
1504        tile_b[local_id.y][local_id.x] = ${n.type.value}(0);
1505      }
1506      `,d="value += tile_a[k][local_id.y] * tile_b[local_id.x][k];"):r.transA&&!r.transB?(p=`
1507      var col = tile_row_start + local_id.x;
1508      var row = k_start + local_id.y;
1509      if (col < uniforms.M && row < uniforms.K) {
1510        tile_a[local_id.y][local_id.x] = a[row * uniforms.M + col];
1511      } else {
1512        tile_a[local_id.y][local_id.x] = ${a.type.value}(0);
1513      }
1514
1515      col = tile_col_start + local_id.x;
1516      row = k_start + local_id.y;
1517      if (col < uniforms.N && row < uniforms.K) {
1518        tile_b[local_id.y][local_id.x] = b[row * uniforms.N + col];
1519      } else {
1520        tile_b[local_id.y][local_id.x] = ${n.type.value}(0);
1521      }
1522      `,d="value += tile_a[k][local_id.y] * tile_b[k][local_id.x];"):!r.transA&&r.transB?(p=`
1523      var col = k_start + local_id.x;
1524      var row = tile_row_start + local_id.y;
1525      if (col < uniforms.K && row < uniforms.M) {
1526        tile_a[local_id.y][local_id.x] = a[row * uniforms.K + col];
1527      } else {
1528        tile_a[local_id.y][local_id.x] = ${a.type.value}(0);
1529      }
1530
1531      col = k_start + local_id.x;
1532      row = tile_col_start + local_id.y;
1533      if (col < uniforms.K && row < uniforms.N) {
1534        tile_b[local_id.y][local_id.x] = b[row * uniforms.K + col];
1535      } else {
1536        tile_b[local_id.y][local_id.x] = ${n.type.value}(0);
1537      }
1538      `,d="value += tile_a[local_id.y][k] * tile_b[local_id.x][k];"):r.transA||r.transB||(p=`
1539      var col = k_start + local_id.x;
1540      var row = tile_row_start + local_id.y;
1541      if (col < uniforms.K && row < uniforms.M) {
1542        tile_a[local_id.y][local_id.x] = a[row * uniforms.K + col];
1543      } else {
1544        tile_a[local_id.y][local_id.x] = ${a.type.value}(0);
1545      }
1546
1547      col = tile_col_start + local_id.x;
1548      row = k_start + local_id.y;
1549      if (col < uniforms.N && row < uniforms.K) {
1550        tile_b[local_id.y][local_id.x] = b[row * uniforms.N + col];
1551      } else {
1552        tile_b[local_id.y][local_id.x] = ${n.type.value}(0);
1553      }
1554      `,d="value += tile_a[local_id.y][k] * tile_b[k][local_id.x];");let c=1===r.alpha?"":"value *= uniforms.alpha;";return`
1555  ${i.registerUniforms([{name:"num_tile_n",type:"u32"},{name:"M",type:"u32"},{name:"N",type:"u32"},{name:"K",type:"u32"},{name:"alpha",type:"f32"},{name:"beta",type:"f32"}]).declareVariables(...o)}
1556  var<workgroup> tile_a: array<array<${a.type.storage}, 16>, 16>;
1557  var<workgroup> tile_b: array<array<${n.type.storage}, 16>, 16>;
1558  ${i.mainStart([16,16,1])}
1559    let tile_col_start = (workgroup_index % uniforms.num_tile_n) * 16;
1560    let tile_row_start = (workgroup_index / uniforms.num_tile_n) * 16;
1561    let num_tiles = (uniforms.K - 1) / 16 + 1;
1562    var k_start = 0u;
1563    var value = ${l.type.value}(0);
1564    for (var t: u32 = 0u; t < num_tiles; t++) {
1565      ${p}
1566      k_start = k_start + 16;
1567      workgroupBarrier();
1568
1569      for (var k: u32 = 0u; k < 16; k++) {
1570        ${d}
1571      }
1572      workgroupBarrier();
1573    }
1574
1575    ${c}
1576    let m = tile_row_start + local_id.y;
1577    let n = tile_col_start + local_id.x;
1578    ${null!=s?`let cOffset = ${s.broadcastedIndicesToOffset("vec2(m, n)",l)}; value += ${l.type.value}(uniforms.beta) * ${s.getByOffset("cOffset")};`:""}
1579    if (m < uniforms.M && n < uniforms.N) {
1580      output[m * uniforms.N + n] = value;
1581    }
1582  }`}}},nO=t=>({transA:t.transA,transB:t.transB,alpha:t.alpha,beta:t.beta,cacheKey:`${t.transA};${t.transB};${1===t.alpha}`}),nR=(t,r)=>{nz(t.inputs),t.compute(nA(t.inputs,r))}}),uI=q(()=>{oK(),oX(),o3(),o4(),[nB,nN,nM,nD]=[0,1,2,3],nP=t=>{if(4!==t[0].dims.length)throw Error("only 4-D tensor is supported.");if(t[0].dims.length!==t[1].dims.length)throw Error("input dimensions must be equal to grid dimensions");if(t[0].dims.length-2!==t[1].dims[t[1].dims.length-1])throw Error(`last dimension of grid must be equal to ${t[0].dims.length-2}`);if(t[0].dims[0]!==t[1].dims[0])throw Error("grid batch size must match input batch size")},nU=`
1583  fn gs_get_cubic_coeffs(x: f32) -> vec4<f32> {
1584    let cubic_alpha = -0.75f;
1585    let x_abs = abs(x);
1586    var coeffs: vec4<f32>;
1587    coeffs[0] = (((cubic_alpha * (x_abs + 1) - 5 * cubic_alpha) * (x_abs + 1) + 8 * cubic_alpha) * (x_abs + 1) - 4 * cubic_alpha);
1588    coeffs[1] = (((cubic_alpha + 2) * x_abs - (cubic_alpha + 3)) * x_abs * x_abs + 1);
1589    coeffs[2] = (((cubic_alpha + 2) * (1 - x_abs) - (cubic_alpha + 3)) * (1 - x_abs) * (1 - x_abs) + 1);
1590    coeffs[3] = (((cubic_alpha * (2 - x_abs) - 5 * cubic_alpha) * (2 - x_abs) + 8 * cubic_alpha) * (2 - x_abs) - 4 * cubic_alpha);
1591    return coeffs;
1592  }
1593`,nq=t=>`
1594  fn gs_bicubic_interpolate(p: mat4x4<${t}>, x: f32, y: f32) -> ${t} {
1595    var v: vec4<f32>;
1596    var coeffs = gs_get_cubic_coeffs(x);
1597    for (var i = 0; i < 4; i++) {
1598      v[i] = coeffs[0] * p[i][0] + coeffs[1] * p[i][1] + coeffs[2] * p[i][2] + coeffs[3] * p[i][3];
1599    }
1600    coeffs = gs_get_cubic_coeffs(y);
1601    let pixel = ${t}(coeffs[0] * v[0] + coeffs[1] * v[1] + coeffs[2] * v[2] + coeffs[3] * v[3]);
1602    return pixel;
1603  }
1604`,nW=t=>`
1605  fn gs_denormalize(n: f32, length: i32) -> f32 {
1606    ${0===t.alignCorners?`
1607    // alignCorners: false => [-1, 1] to [-0.5, length - 0.5]
1608    return ((n + 1.0) * f32(length) - 1.0) / 2.0;
1609    `:`
1610    // alignCorners: true => [-1, 1] to [0, length - 1]
1611    return (n + 1.0) / 2.0 * (f32(length - 1));
1612    `}
1613  }
1614`,nL=t=>`
1615  ${"reflection"===t.paddingMode?`
1616      fn gs_reflect(x: i32, x_min: f32, x_max: f32) -> u32 {
1617        var dx = 0.0;
1618        var fx = f32(x);
1619        let range = x_max - x_min;
1620        if (fx < x_min) {
1621          dx = x_min - fx;
1622          let n = u32(dx / range);
1623          let r = dx - f32(n) * range;
1624          if (n % 2 == 0) {
1625            fx = x_min + r;
1626          } else {
1627            fx = x_max - r;
1628          }
1629        } else if (fx > x_max) {
1630          dx = fx - x_max;
1631          let n = u32(dx / range);
1632          let r = dx - f32(n) * range;
1633          if (n % 2 == 0) {
1634            fx = x_max - r;
1635          } else {
1636            fx = x_min + r;
1637          }
1638        }
1639        return u32(fx);
1640      }`:""}
1641`,nV=(t,r,i)=>`
1642  fn pixel_at_grid(r: i32, c: i32, H: i32, W: i32, batch: u32, channel: u32, border: vec4<f32>) -> ${r} {
1643     var pixel = ${r}(0);
1644     var indices = vec4<u32>(0);
1645     indices[${nB}] = batch;
1646     indices[${nN}] = channel;`+(()=>{switch(i.paddingMode){case"zeros":return`
1647          if (r >= 0 && r < H && c >=0 && c < W) {
1648            indices[${nM}] = u32(r);
1649            indices[${nD}] = u32(c);
1650          } else {
1651            return ${r}(0);
1652          }
1653        `;case"border":return`
1654          indices[${nM}] = u32(clamp(r, 0, H - 1));
1655          indices[${nD}] = u32(clamp(c, 0, W - 1));
1656        `;case"reflection":return`
1657          indices[${nM}] = gs_reflect(r, border[1], border[3]);
1658          indices[${nD}] = gs_reflect(c, border[0], border[2]);
1659        `;default:throw Error(`padding mode ${i.paddingMode} is not supported`)}})()+`
1660    return ${t.getByIndices("indices")};
1661  }
1662`,nG=(t,r,i)=>(()=>{switch(i.mode){case"nearest":return`
1663          let result = pixel_at_grid(i32(round(y)), i32(round(x)), H_in, W_in, indices[${nB}], indices[${nN}], border);
1664        `;case"bilinear":return`
1665          let x1 = i32(floor(x));
1666          let y1 = i32(floor(y));
1667          let x2 = x1 + 1;
1668          let y2 = y1 + 1;
1669
1670          let p11 = pixel_at_grid(y1, x1, H_in, W_in, indices[${nB}], indices[${nN}], border);
1671          let p12 = pixel_at_grid(y1, x2, H_in, W_in, indices[${nB}], indices[${nN}], border);
1672          let p21 = pixel_at_grid(y2, x1, H_in, W_in, indices[${nB}], indices[${nN}], border);
1673          let p22 = pixel_at_grid(y2, x2, H_in, W_in, indices[${nB}], indices[${nN}], border);
1674
1675          let dx2 = ${r}(f32(x2) - x);
1676          let dx1 = ${r}(x - f32(x1));
1677          let dy2 = ${r}(f32(y2) - y);
1678          let dy1 = ${r}(y - f32(y1));
1679          let result = dy2 * (dx2 * p11 + dx1 * p12) + dy1 * (dx2 * p21 + dx1 * p22);
1680        `;case"bicubic":return`
1681          let x0 = i32(floor(x)) - 1;
1682          let y0 = i32(floor(y)) - 1;
1683          var p: mat4x4<${r}>;
1684          for (var h = 0; h < 4; h++) {
1685            for (var w = 0; w < 4; w++) {
1686              p[h][w] = pixel_at_grid(h + y0, w + x0, H_in, W_in, indices[${nB}], indices[${nN}], border);
1687            }
1688          }
1689
1690          let dx = x - f32(x0 + 1);
1691          let dy = y - f32(y0 + 1);
1692          let result = gs_bicubic_interpolate(p, dx, dy);
1693        `;default:throw Error(`mode ${i.mode} is not supported`)}})()+`${t.setByOffset("global_idx","result")}`,nH=(t,r)=>{let i=tK("x",t[0].dataType,t[0].dims.length),a=[t[1].dims[0],t[1].dims[1],t[1].dims[2]],n=tK("grid",t[1].dataType,a.length,2),s=[t[0].dims[0],t[0].dims[1],t[1].dims[1],t[1].dims[2]];"NHWC"===r.format&&(s=[t[0].dims[0],t[1].dims[1],t[1].dims[2],t[0].dims[3]],[nB,nN,nM,nD]=[0,3,1,2]);let o=tZ("output",t[0].dataType,s.length),u=i.type.value,l=[{type:12,data:ts.size(s)},...tW(t[0].dims,a,s)];return{name:"GridSample",shaderCache:{hint:`${r.cacheKey}`,inputDependencies:["type","type"]},getRunData:t=>{let r=ts.size(s);return{outputs:[{dims:s,dataType:t[0].dataType}],dispatchGroup:{x:Math.ceil(r/64)},programUniforms:l}},getShaderSource:t=>`
1694  ${t.registerUniform("output_size","u32").declareVariables(i,n,o)}
1695  ${nU}
1696  ${nq(u)}
1697  ${nW(r)}
1698  ${nL(r)}
1699  ${nV(i,u,r)}
1700
1701  ${t.mainStart()}
1702    ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1703      let H_in = i32(uniforms.x_shape[${nM}]);
1704      let W_in = i32(uniforms.x_shape[${nD}]);
1705
1706      ${0===r.alignCorners?`
1707      let x_min = -0.5;
1708      let x_max = f32(W_in) - 0.5;
1709      let y_min = -0.5;
1710      let y_max = f32(H_in) - 0.5;
1711      `:`
1712      let x_min = 0.0;
1713      let x_max = f32(W_in) - 1.0;
1714      let y_min = 0.0;
1715      let y_max = f32(H_in) - 1.0;
1716      `};
1717      let border = vec4<f32>(x_min, y_min, x_max, y_max);
1718
1719      let indices = ${o.offsetToIndices("global_idx")};
1720      var grid_indices = vec3<u32>(indices[${nB}], indices[${nM}], indices[${nD}]);
1721      let nxy = ${n.getByIndices("grid_indices")};
1722      var x = gs_denormalize(f32(nxy[0]), W_in);
1723      var y = gs_denormalize(f32(nxy[1]), H_in);
1724
1725      ${nG(o,u,r)}
1726  }`}},nF=(t,r)=>{nP(t.inputs),t.compute(nH(t.inputs,r))},nj=t=>tM({alignCorners:t.align_corners,mode:t.mode,paddingMode:t.padding_mode,format:t.format})}),uE=q(()=>{oK(),oX(),o3(),o2(),o9(),o4(),o8(),nK=(t,r)=>t.length>r&&t[r].dims.length>0?t[r]:void 0,nZ=(t,r)=>{let i,a=t[0],n=nK(t,1),s=nK(t,2),o=nK(t,3),u=nK(t,4),l=nK(t,5),d=nK(t,6),p=nK(t,7);if(3!==a.dims.length&&5!==a.dims.length)throw Error("Input query is expected to have 3 or 5 dimensions");let c=a.dims[0],h=a.dims[1],f=3===a.dims.length?a.dims[2]:r.numHeads*a.dims[4],m=h,g=0,y=0,_=Math.floor(f/r.numHeads);if(d&&p&&ts.size(d.dims)&&ts.size(p.dims)){if(4!==d.dims.length)throw Error('Input "past_key" is expected to have 4 dimensions');if(d.dims[0]!==c||d.dims[1]!==r.numHeads||d.dims[3]!==_)throw Error('Input "past_key" shape (batch_size, num_heads, past_sequence_length, head_size)');if(p.dims[0]!==c||p.dims[1]!==r.numHeads||p.dims[3]!==_)throw Error('Input "past_value" shape (batch_size, num_heads, past_sequence_length, head_size)');if(d.dims[2]!==p.dims[2])throw Error('Input "past_key" and "past_value" shall have same dim 2 (past_sequence_length)');if(4!==p.dims.length)throw Error('Input "past_value" is expected to have 4 dimensions');g=d.dims[2],y=d.dims[2]}else if(d&&ts.size(d.dims)||p&&ts.size(p.dims))throw Error('Input "past_key" and "past_value" shall be both present or both absent');if(n&&ts.size(n.dims)>0){if(3!==a.dims.length)throw Error('Input "query" is expected to have 3 dimensions when key is given');if(n.dims.length<3||n.dims.length>5)throw Error('Input "key" is expected to have 3, 4, or 5 dimensions');if(a.dims[0]!==n.dims[0])throw Error('Input "query" and "key" shall have same dim 0 (batch size)');if(3===n.dims.length){if(n.dims[2]!==a.dims[2])throw Error('Input "query" and "key" shall have same dim 2 (hidden_size)');i=2,m=n.dims[1]}else if(5===n.dims.length){if(n.dims[2]!==r.numHeads||2!==n.dims[3]||n.dims[4]!==_)throw Error('Expect "key" shape (batch_size, kv_sequence_length, num_heads, 2, head_size) for packed kv');if(s)throw Error('Expect "value" be none when "key" has packed kv format.');i=5,m=n.dims[1]}else{if(n.dims[1]!==r.numHeads||n.dims[3]!==_)throw Error('Expect "key" shape (batch_size, num_heads, kv_sequence_length, head_size) for past_key');i=0,m=n.dims[2]}}else{if(5!==a.dims.length)throw Error('Input "query" is expected to have 5 dimensions when key is empty');if(a.dims[2]!==r.numHeads||3!==a.dims[3])throw Error('Expect "query" shape (batch_size, kv_sequence_length, num_heads, 3, head_size) for packed kv');i=3}if(o&&ts.size(o.dims)>0){if(1!==o.dims.length)throw Error('Input "bias" is expected to have 1 dimension');
1726if(n&&5===n.dims.length&&2===n.dims[3])throw Error("bias is not allowed for packed kv.")}let b=g+m,$=0;if(u&&ts.size(u.dims)>0){$=8;let t=u.dims;throw 1===t.length?t[0]===c?$=1:t[0]===3*c+2&&($=3):2===t.length&&t[0]===c&&t[1]===b&&($=5),8===$?Error('Input "key_padding_mask" shape shall be (batch_size) or (batch_size, total_sequence_length)'):Error("Mask not supported")}let v=!1,w=f;if(s&&ts.size(s.dims)>0){if(3!==s.dims.length&&4!==s.dims.length)throw Error('Input "value" is expected to have 3 or 4 dimensions');if(a.dims[0]!==s.dims[0])throw Error('Input "query" and "value" shall have same dim 0 (batch_size)');if(3===s.dims.length){if(m!==s.dims[1])throw Error('Input "key" and "value" shall have the same dim 1 (kv_sequence_length)');w=s.dims[2]}else{if(m!==s.dims[2])throw Error('Input "key" and "value" shall have the same dim 2 (kv_sequence_length)');w=s.dims[1]*s.dims[3],v=!0}}if(u&&ts.size(u.dims)>0)throw Error("Key padding mask is not supported");if(l&&ts.size(l.dims)>0){if(4!==l.dims.length)throw Error('Input "attention_bias" is expected to have 4 dimensions');if(l.dims[0]!==c||l.dims[1]!==r.numHeads||l.dims[2]!==h||l.dims[3]!==b)throw Error('Expect "attention_bias" shape (batch_size, num_heads, sequence_length, total_sequence_length)')}return{batchSize:c,sequenceLength:h,pastSequenceLength:g,kvSequenceLength:m,totalSequenceLength:b,maxSequenceLength:y,inputHiddenSize:0,hiddenSize:f,vHiddenSize:w,headSize:_,vHeadSize:Math.floor(w/r.numHeads),numHeads:r.numHeads,isUnidirectional:!1,pastPresentShareBuffer:!1,maskFilterValue:r.maskFilterValue,maskType:$,scale:r.scale,broadcastResPosBias:!1,passPastInKv:v,qkvFormat:i}},nQ=t=>tM({...t}),nX=tM({perm:[0,2,1,3]}),nY=(t,r,i,a,n,s,o)=>{let u=[a,n,s],l=ts.size(u),d=[{type:12,data:l},{type:12,data:o},{type:12,data:s}];return t.compute({name:"MultiHeadAttentionAddBias",shaderCache:{inputDependencies:["type","type"]},getRunData:()=>({outputs:[{dims:u,dataType:r.dataType,gpuDataType:0}],dispatchGroup:{x:Math.ceil(l/64)},programUniforms:d}),getShaderSource:t=>{let a=tZ("qkv_with_bias",r.dataType,u),n=tK("qkv",r.dataType,u),s=tK("bias",i.dataType,u);return`
1727  ${t.registerUniforms([{name:"output_size",type:"u32"},{name:"bias_offset",type:"u32"},{name:"hidden_size",type:"u32"}]).declareVariables(n,s,a)}
1728  ${t.mainStart()}
1729    ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1730    let bias_offset_idx = (global_idx % uniforms.hidden_size) + uniforms.bias_offset;
1731
1732    qkv_with_bias[global_idx] = qkv[global_idx] + bias[bias_offset_idx];
1733  }`}},{inputs:[r,i],outputs:[-1]})[0]},nJ=(t,r,i,a,n,s,o,u)=>{let l=s;if(!(o&&ts.size(o.dims)>0))return 3===s.dims.length&&(l=s.reshape([r,a,i,n])),1===i||1===a?l:t.compute(t6(l,nX.perm),{inputs:[l],outputs:[-1]})[0];if(1===a)throw Error("AddBiasReshape is not implemented. Please export your model with packed QKV or KV");return l=(l=nY(t,s,o,r,a,i*n,u)).reshape([r,a,i,n]),1===i||1===a?l:t.compute(t6(l,nX.perm),{inputs:[l],outputs:[-1]})[0]},n0=(t,r)=>{let i=nZ(t.inputs,r),a=t.inputs[0],n=nK(t.inputs,1),s=nK(t.inputs,2),o=nK(t.inputs,3),u=nK(t.inputs,4),l=nK(t.inputs,5),d=nK(t.inputs,6),p=nK(t.inputs,7);if(5===a.dims.length)throw Error("Packed QKV is not implemented");if(n?.dims.length===5)throw Error("Packed KV is not implemented");let c=n&&s&&4===n.dims.length&&4===s.dims.length,h=nJ(t,i.batchSize,i.numHeads,i.sequenceLength,i.headSize,a,o,0);if(c)return r2(t,h,n,s,u,void 0,d,p,l,i);if(!n||!s)throw Error("key and value must be provided");let f=nJ(t,i.batchSize,i.numHeads,i.kvSequenceLength,i.headSize,n,o,i.hiddenSize),m=nJ(t,i.batchSize,i.numHeads,i.kvSequenceLength,i.vHeadSize,s,o,2*i.hiddenSize);r2(t,h,f,m,u,void 0,d,p,l,i)}}),uC=q(()=>{oK(),oX(),o3(),o4(),n2=t=>{if(!t||t.length<1)throw Error("too few inputs")},n1=(t,r)=>{let i=[],a=r.numOutputs;return t[1].dims[0]>0&&(t[1].getBigInt64Array().forEach(t=>i.push(Number(t))),a=i.length),tM({numOutputs:a,axis:r.axis,splitSizes:i})},n3=t=>`
1734fn calculateOutputIndex(index: u32) -> u32 {
1735    for (var i: u32 = 0u; i < ${t}u; i += 1u ) {
1736    if (index < ${tF("uniforms.size_in_split_axis","i",t)}) {
1737        return i;
1738    }
1739    }
1740    return ${t}u;
1741}`,n4=t=>{let r=t.length,i=[];for(let a=0;a<r;++a){let n=t[a].setByIndices("indices","input[global_idx]");1===r?i.push(n):0===a?i.push(`if (output_number == ${a}u) { ${n} }`):a===r-1?i.push(`else { ${n} }`):i.push(`else if (output_number == ${a}) { ${n} }`)}return`
1742      fn writeBufferData(output_number: u32, indices: ${t[0].type.indices}, global_idx: u32) {
1743        ${i.join(`
1744`)}
1745      }`},n8=(t,r)=>{let i=t[0].dims,a=ts.size(i),n=t[0].dataType,s=ts.normalizeAxis(r.axis,i.length),o=Array(r.numOutputs),u=tK("input",n,i.length),l=Array(r.numOutputs),d=[],p=[],c=0,h=[{type:12,data:a}];for(let a=0;a<r.numOutputs;
1745a++){c+=r.splitSizes[a],l[a]=c;let u=i.slice();u[s]=r.splitSizes[a],p.push(u),o[a]=tZ(`output${a}`,n,u.length),d.push({dims:p[a],dataType:t[0].dataType})}return h.push({type:12,data:l},...tW(i,...p)),{name:"Split",shaderCache:{hint:r.cacheKey,inputDependencies:["rank"]},getShaderSource:t=>`
1746  ${t.registerUniform("input_size","u32").registerUniform("size_in_split_axis","u32",l.length).declareVariables(u,...o)}
1747  ${n3(l.length)}
1748  ${n4(o)}
1749
1750  ${t.mainStart()}
1751    ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.input_size")}
1752
1753    var indices = ${u.offsetToIndices("global_idx")};
1754    var index = ${u.indicesGet("indices",s)};
1755    let output_number = calculateOutputIndex(index);
1756    if (output_number != 0) {
1757      index -= ${tF("uniforms.size_in_split_axis","output_number - 1u",l.length)};
1758      ${u.indicesSet("indices",s,"index")};
1759    }
1760    writeBufferData(output_number, indices, global_idx);
1761  }`,getRunData:()=>({outputs:d,dispatchGroup:{x:Math.ceil(a/64)},programUniforms:h})}},n6=(t,r)=>{n2(t.inputs);let i=1===t.inputs.length?r:n1(t.inputs,r);t.compute(n8(t.inputs,i),{inputs:[0]})},n5=t=>{let r=t.axis,i=t.splitSizes,a=t.numOutputs<0?i.length:t.numOutputs;if(a!==i.length)throw Error("numOutputs and splitSizes lengh must be equal");return tM({axis:r,numOutputs:a,splitSizes:i})}}),uz=q(()=>{oK(),oX(),o3(),o4(),n7=(t,r)=>{let[i,a,n,s]=t,{numHeads:o,rotaryEmbeddingDim:u}=r;if(3!==i.dims.length&&4!==i.dims.length)throw Error(`Input 'x' is expected to have 3 or 4 dimensions, got ${i.dims.length}`);if(!ts.areEqual(a.dims,[])&&!ts.areEqual(a.dims,[1])&&2!==a.dims.length)throw Error(`Input 'position_ids' is expected to have 0, 1, or 2 dimensions, got ${a.dims.length}`);if(2!==n.dims.length)throw Error(`Input 'cos_cache' is expected to have 2 dimensions, got ${n.dims.length}`);if(2!==s.dims.length)throw Error(`Input 'sin_cache' is expected to have 2 dimensions, got ${s.dims.length}`);if(!ts.areEqual(n.dims,s.dims))throw Error("Inputs 'cos_cache' and 'sin_cache' are expected to have the same shape");if(u>0&&0===o)throw Error("num_heads must be provided if rotary_embedding_dim is specified");let l=i.dims[0],d=i.dims[i.dims.length-2],p=n.dims[0],c=ts.sizeFromDimension(i.dims,1)/d,h=0===u?2*n.dims[1]:c/o;if(u>h)throw Error("rotary_embedding_dim must be less than or equal to head_size");if(2===a.dims.length){if(l!==a.dims[0])throw Error(`Input 'position_ids' dimension 0 should be of size batch_size, got ${a.dims[0]}`);if(d!==a.dims[1])throw Error(`Input 'position_ids' dimension 1 should be of size sequence_length, got ${a.dims[1]}`)}if(h/2!==n.dims[1]&&u/2!==n.dims[1])throw Error(`Input 'cos_cache' dimension 1 should be same as head_size / 2 or rotary_embedding_dim / 2, got ${n.dims[1]}`);if(d>p)throw Error("Updating cos_cache and sin_cache in RotaryEmbedding is not currently supported")},n9=(t,r)=>{let{interleaved:i,numHeads:a,rotaryEmbeddingDim:n,scale:s}=r,o=t[0].dims[0],u=ts.sizeFromDimension(t[0].dims,1),l=t[0].dims[t[0].dims.length-2],d=u/l,p=t[2].dims[1],c=0===n?2*p:d/a,h=[o,l,d/c,c-p],f=ts.computeStrides(h),m=[{type:1,data:s},{type:12,data:h},{type:12,data:f},...3===t[0].dims.length?Array({type:12,data:[u,d,c,1]}):[],...4===t[0].dims.length?Array({type:12,data:[u,c,l*c,1]}):[],...tW(t[0].dims,t[1].dims,t[2].dims,t[3].dims,t[0].dims)];return{name:"RotaryEmbedding",shaderCache:{hint:tM({interleaved:i}).cacheKey,inputDependencies:["rank","rank","rank","rank"]},getShaderSource:r=>{let a=tK("input",t[0].dataType,t[0].dims.length),n=tK("position_ids",t[1].dataType,t[1].dims.length),s=tK("cos_cache",t[2].dataType,t[2].dims.length),o=tK("sin_cache",t[3].dataType,t[3].dims.length),u=tZ("output",t[0].dataType,t[0].dims.length);return r.registerUniforms([{name:"scale",type:"f32"},{name:"global_shape",type:"u32",length:h.length},{name:"global_strides",type:"u32",length:f.length},{name:"input_output_strides",type:"u32",length:f.length}]),`
1762        ${r.declareVariables(a,n,s,o,u)}
1763
1764        ${r.mainStart(tD)}
1765          let half_rotary_emb_dim = uniforms.${s.name}_shape[1];
1766          let bsnh = global_idx / uniforms.global_strides % uniforms.global_shape;
1767          let size = uniforms.global_shape[0] * uniforms.global_strides[0];
1768          ${r.guardAgainstOutOfBoundsWorkgroupSizes("size")}
1769
1770          if (bsnh[3] < half_rotary_emb_dim) {
1771            let position_ids_idx =
1772                ${n.broadcastedIndicesToOffset("bsnh.xy",tZ("",n.type.tensor,2))};
1773            let position_id =
1774                u32(${n.getByOffset("position_ids_idx")}) + select(0, bsnh[1], position_ids_idx == 0);
1775            let i = dot(bsnh, uniforms.input_output_strides) + select(0, bsnh[3], ${i});
1776            let j = i + select(half_rotary_emb_dim, 1, ${i});
1777            let re = ${a.getByOffset("i")} * ${s.get("position_id","bsnh[3]")} -
1778                ${a.getByOffset("j")} * ${o.get("position_id","bsnh[3]")};
1779            ${u.setByOffset("i","re")}
1780            let im = ${a.getByOffset("i")} * ${o.get("position_id","bsnh[3]")} +
1781                ${a.getByOffset("j")} * ${s.get("position_id","bsnh[3]")};
1782            ${u.setByOffset("j","im")}
1783          } else {
1784            let k = dot(bsnh, uniforms.input_output_strides) + half_rotary_emb_dim;
1785            ${u.setByOffset("k",a.getByOffset("k"))}
1786          }
1787        }`},getRunData:()=>({outputs:[{dims:t[0].dims,dataType:t[0].dataType}],dispatchGroup:{x:Math.ceil(ts.size(h)/tD)},programUniforms:m})}},se=(t,r)=>{n7(t.inputs,r),t.compute(n9(t.inputs,r))}}),uA=q(()=>{o3(),oK(),o9(),uE(),uC(),o8(),uz(),o4(),st=(t,r)=>{if(r.doRotary&&t.length<=7)throw Error("cos_cache and sin_cache inputs are required if do_rotary is specified");let i=t[0],a=t[1],n=t[2],s=t[3],o=t[4];if(0!==r.doRotary&&t.length<=7)throw Error("cos_cast and sin_cache are expected if do_rotary attribute is non-zero");if(-1!==r.localWindowSize)throw Error("Local attention is not supported");if(0!==r.softcap)throw Error("Softcap is not supported");if(0!==r.rotaryInterleaved)throw Error("Rotary interleaved is not supported");if(r.smoothSoftmax)throw Error("Smooth softmax is not supported");if(3!==i.dims.length&&5!==i.dims.length)throw Error("Input query is expected to have 3 or 5 dimensions");let u=i.dims[0],l=i.dims[1],d=3===i.dims.length?i.dims[2]:r.numHeads*i.dims[4],p=l,c=0,h=!a||0===a.dims.length,f=Math.floor(h?d/(r.numHeads+2*r.kvNumHeads):d/r.numHeads);h&&(d=f*r.numHeads);let m=s&&0!==s.dims.length,g=o&&0!==o.dims.length;if(m&&4===s.dims.length&&s.dims[0]===u&&s.dims[1]!==r.kvNumHeads&&s.dims[2]===r.kvNumHeads&&s.dims[3]===f)throw Error("BSNH pastKey/pastValue is not supported");if(m&&g){if(4!==s.dims.length)throw Error('Input "past_key" is expected to have 4 dimensions');if(4!==o.dims.length)throw Error('Input "past_value" is expected to have 4 dimensions');c=s.dims[2]}else if(m||g)throw Error('Input "past_key" and "past_value" shall be both present or both absent');let y=1;if(a&&a.dims.length>0){if(3!==i.dims.length)throw Error('Input "query" is expected to have 3 dimensions when key is given');if(a.dims.length<3||a.dims.length>5)throw Error('Input "key" is expected to have 3, 4, or 5 dimensions');if(i.dims[0]!==a.dims[0])throw Error('Input "query" and "key" shall have same dim 0 (batch size)');if(3===a.dims.length){if(i.dims[2]%a.dims[2]!=0)throw Error('Dimension 2 of "query" should be a multiple of "key"');p=a.dims[1]}else if(5===a.dims.length){if(a.dims[2]!==r.numHeads||2!==a.dims[3]||a.dims[4]!==f)throw Error('Expect "key" shape (batch_size, kv_sequence_length, num_heads, 2, head_size) for packed kv');if(n)throw Error('Expect "value" be none when "key" has packed kv format.');p=a.dims[1]}else{if(a.dims[1]!==r.numHeads||a.dims[3]!==f)throw Error('Expect "key" shape (batch_size, num_heads, kv_sequence_length, head_size) for past_key');p=a.dims[2]}}else{if(3!==i.dims.length&&5!==i.dims.length)throw Error('Input "query" is expected to have 3 or 5 dimensions when key is empty');if(5===i.dims.length&&(i.dims[2]!==r.numHeads||3!==i.dims[3]))throw Error('Expect "query" shape (batch_size, kv_sequence_length, num_heads, 3, head_size) for packed kv');y=3}let _=!1,b=r.kvNumHeads?f*r.kvNumHeads:d;if(n&&n.dims.length>0){if(3!==n.dims.length&&4!==n.dims.length)throw Error('Input "value" is expected to have 3 or 4 dimensions');if(i.dims[0]!==n.dims[0])throw Error('Input "query" and "value" shall have same dim 0 (batch_size)');if(3===n.dims.length){if(p!==n.dims[1])throw Error('Input "key" and "value" shall have the same dim 1 (kv_sequence_length)');b=n.dims[2]}else{if(p!==n.dims[2])throw Error('Input "past_key" and "past_value" shall have the same dim 2 (kv_sequence_length)');b=n.dims[1]*n.dims[3],_=!0}}let $=t.length>4?t[5]:void 0;if($&&1!==$.dims.length&&$.dims[0]!==u)throw Error('Input "seqlens" is expected to have 1 dimension and the same dim 0 as batch_size');return{batchSize:u,sequenceLength:l,pastSequenceLength:c,kvSequenceLength:p,totalSequenceLength:-1,maxSequenceLength:-1,inputHiddenSize:0,hiddenSize:d,vHiddenSize:b,headSize:f,vHeadSize:Math.floor(b/r.kvNumHeads),numHeads:r.numHeads,kvNumHeads:r.kvNumHeads,nReps:r.numHeads/r.kvNumHeads,pastPresentShareBuffer:!1,maskType:0,scale:r.scale,broadcastResPosBias:!1,passPastInKv:_,qkvFormat:y}},sr=tM({perm:[0,2,1,3]}),si=(t,r,i)=>{let a=r,n=i.kvNumHeads;return 3===r.dims.length&&0!==i.kvSequenceLength&&(a=r.reshape([i.batchSize,i.kvSequenceLength,n,i.headSize]),a=t.compute(t6(a,sr.perm),{inputs:[a],outputs:[-1]})[0]),a},sa=(t,r,i,a)=>{let n=[t*r],s=t*r,o=[{type:12,data:s},{type:12,data:r},{type:12,data:t}];return{name:"GeneratePositionIds",shaderCache:{hint:`${t};${r}`,inputDependencies:["type","type"]},getRunData:()=>({outputs:[{dims:n,dataType:7}],dispatchGroup:{x:Math.ceil(s/64)},programUniforms:o}),getShaderSource:t=>{let r=tK("seq_lens",i.dataType,i.dims),s=tK("total_seq_lens",a.dataType,a.dims),o=tZ("pos_ids",7,n);return`
1788  ${t.registerUniforms([{name:"output_size",type:"u32"},{name:"sequence_length",type:"u32"},{name:"batch_size",type:"u32"}]).declareVariables(r,s,o)}
1789  ${t.mainStart()}
1790    ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1791    let total_sequence_length = u32(${s.getByOffset("0")});
1792    let is_subsequent_prompt = uniforms.sequence_length > 1 && uniforms.sequence_length != total_sequence_length;
1793    let is_first_prompt = !is_subsequent_prompt && uniforms.sequence_length == total_sequence_length;
1794    let batch_idx = global_idx / uniforms.sequence_length;
1795    let sequence_idx = i32(global_idx % uniforms.sequence_length);
1796    var pos_id: i32 = 0;
1797    let seqlen = ${r.getByOffset("batch_idx")};
1798    let total_seqlen = seqlen + 1;
1799    if (is_first_prompt) {
1800      if (sequence_idx < total_seqlen) {
1801        pos_id = sequence_idx;
1802      } else {
1803        pos_id = 1;
1804      }
1805      ${o.setByOffset("global_idx","pos_id")}
1806    } else if (is_subsequent_prompt) {
1807      let past_seqlen = total_seqlen - i32(uniforms.sequence_length);
1808      if (past_seqlen + sequence_idx < total_seqlen) {
1809        pos_id = past_seqlen + sequence_idx;
1810      } else {
1811        pos_id = 1;
1812      }
1813      ${o.setByOffset("global_idx","pos_id")}
1814    } else if (global_idx < uniforms.batch_size) {
1815      ${o.setByOffset("global_idx","seqlen")}
1816    };
1817  }
1818  `}}},sn=(t,r)=>{let i=st(t.inputs,r);if(5===t.inputs[0].dims.length)throw Error("Packed QKV is not implemented");if(t.inputs[1]?.dims.length===5)throw Error("Packed KV is not implemented");
vendor: 4,511 bytes, lines 1818-1862
1818let a=t.inputs[0],n=t.inputs[1]&&t.inputs[1].dims.length>0?t.inputs[1]:void 0,s=t.inputs[2]&&t.inputs[2].dims.length>0?t.inputs[2]:void 0,o=t.inputs[3]&&0!==t.inputs[3].dims.length?t.inputs[3]:void 0,u=t.inputs[4]&&0!==t.inputs[4].dims.length?t.inputs[4]:void 0,l=t.inputs.length>4?t.inputs[5]:void 0,d=t.inputs.length>5?t.inputs[6]:void 0,p=i.kvNumHeads?i.kvNumHeads:i.numHeads,c=tM({axis:2,numOutputs:3,splitSizes:[i.numHeads*i.headSize,p*i.headSize,p*i.headSize]}),[h,f,m]=n||s?[a,n,s]:t.compute(n8([a],c),{inputs:[a],outputs:[-1,-1,-1]}),g,y;if(r.doRotary){let a=t.compute(sa(i.batchSize,i.sequenceLength,l,d),{inputs:[l,d],outputs:[-1]})[0],n=t.inputs[7],s=t.inputs[8],o=tM({interleaved:0!==r.rotaryInterleaved,numHeads:i.numHeads,rotaryEmbeddingDim:0,scale:r.scale}),u=[h,a,n,s],p=[-1];g=t.compute(n9(u,o),{inputs:u,outputs:p})[0],u.splice(0,1,f);let c=tM({interleaved:0!==r.rotaryInterleaved,numHeads:i.kvNumHeads,rotaryEmbeddingDim:0,scale:r.scale});y=t.compute(n9(u,c),{inputs:u,outputs:p})[0]}let _=nJ(t,i.batchSize,i.numHeads,i.sequenceLength,i.headSize,r.doRotary?g:h,void 0,0),b=si(t,r.doRotary?y:f,i),$=si(t,m,i);r2(t,_,b,$,void 0,void 0,o,u,void 0,i,l,d)}}),uO=q(()=>{oK(),oX(),o8(),o4(),ss=(t,r,i,a,n,s,o,u)=>{let l=tL(s),d=1===l?"f32":`vec${l}f`,p=1===l?"vec2f":`mat2x${l}f`,c=n*o,h=64;1===c&&(h=256);let f=[n,o,s/l],m=[n,o,2],g=[];return g.push(...tW(f,m)),t.compute({name:"InstanceNormComputeChannelScaleShift",shaderCache:{hint:`${l};${u};${h}`,inputDependencies:["rank","type","type"]},getRunData:()=>({outputs:[{dims:m,dataType:1}],dispatchGroup:{x:c},programUniforms:g}),getShaderSource:t=>{let n=tK("x",r.dataType,3,l),s=[n,tK("scale",i.dataType,i.dims),tK("bias",a.dataType,a.dims),tZ("output",1,3,2)];return`
1819  var<workgroup> workgroup_shared : array<${p}, ${h}>;
1820  const workgroup_size = ${h}u;
1821  ${t.declareVariables(...s)}
1822  ${t.mainStart(h)}
1823    let batch = workgroup_index / uniforms.x_shape[1];
1824    let channel = workgroup_index % uniforms.x_shape[1];
1825    let hight = uniforms.x_shape[2];
1826    // initialize workgroup memory
1827    var sum = ${d}(0);
1828    var squared_sum = ${d}(0);
1829    for (var h = local_idx; h < hight; h += workgroup_size) {
1830      let value = ${d}(${n.get("batch","channel","h")});
1831      sum += value;
1832      squared_sum += value * value;
1833    }
1834    workgroup_shared[local_idx] = ${p}(sum, squared_sum);
1835    workgroupBarrier();
1836
1837    for (var currSize = workgroup_size >> 1;  currSize > 0; currSize = currSize >> 1) {
1838      if (local_idx < currSize) {
1839        workgroup_shared[local_idx] = workgroup_shared[local_idx] + workgroup_shared[local_idx + currSize];
1840      }
1841      workgroupBarrier();
1842    }
1843    if (local_idx == 0) {
1844      let sum_final = ${tH("workgroup_shared[0][0]",l)} / f32(hight * ${l});
1845      let squared_sum_final = ${tH("workgroup_shared[0][1]",l)} / f32(hight * ${l});
1846
1847      let inv_std_dev = inverseSqrt(squared_sum_final - sum_final * sum_final + f32(${u}));
1848      let channel_scale = inv_std_dev * f32(scale[channel]);
1849      let channel_shift = f32(bias[channel]) - sum_final * channel_scale;
1850      output[workgroup_index] = vec2f(channel_scale, channel_shift);
1851    }
1852  }`}},{inputs:[r,i,a],outputs:[-1]})[0]},so=(t,r,i)=>{let a=r[0].dims,n=a[0],s=a[1],o=ts.sizeFromDimension(a,2),u=tL(o),l=ts.size(a)/u,d=ss(t,r[0],r[1],r[2],n,o,s,i.epsilon),p=[n,s,o/u],c=[n,s];t.compute({name:"InstanceNormalization",shaderCache:{hint:`${u}`,inputDependencies:["type","none"]},getRunData:()=>({outputs:[{dims:a,dataType:r[0].dataType}],dispatchGroup:{x:Math.ceil(l/64)},programUniforms:[{type:12,data:l},...tW(p,c,p)]}),getShaderSource:t=>{let i=tK("x",r[0].dataType,p.length,u),a=tK("scale_shift",1,c.length,2),n=tZ("output",r[0].dataType,p.length,u),s=[i,a,n];return`
1853  ${t.registerUniform("output_size","u32").declareVariables(...s)}
1854  ${t.mainStart()}
1855  ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
1856      let outputIndices = ${n.offsetToIndices("global_idx")};
1857      let batch = outputIndices[0];
1858      let channel = outputIndices[1];
1859      let scale_shift = ${a.getByIndices("vec2<u32>(batch, channel)")};
1860      let value = ${i.getByOffset("global_idx")} * ${n.type.value}(scale_shift.x) + ${n.type.value}(scale_shift.y);
1861      ${n.setByOffset("global_idx","value")};
1862  }`}},{inputs:[r[0],d]})},su=(t,r,i)=>{let a=r[0].dims,n=a[0],s=a[a.length-1],o=ts.sizeFromDimension(a,1)/s,u=tL(s),l=ts.size(a)/u,d=[{type:12,data:o},{type:12,data:Math.floor(s/u)}],p=!1,c=[0,a.length-1];for(let t=0;t<a.length-2;t++)p=p||1!==a[t+1],c.push(t+1);
1862let h=(p=p&&1!==a[a.length-1])?t.compute(t6(t.inputs[0],c),{inputs:[t.inputs[0]],outputs:[-1]})[0]:t.inputs[0].reshape(Array.from({length:a.length},(t,r)=>a[c[r]])),f=ss(t,h,r[1],r[2],n,o,s,i.epsilon);t.compute({name:"InstanceNormalizationNHWC",shaderCache:{hint:`${u}`,inputDependencies:["type","type"]},getRunData:()=>({outputs:[{dims:a,dataType:r[0].dataType}],dispatchGroup:{x:Math.ceil(l/64)},programUniforms:d}),getShaderSource:t=>{let i=tU(r[0].dataType),n=1===u?"vec2f":`mat${u}x2f`,s=t=>{let r=0===t?"x":"y",a=1===u?"f32":`vec${u}f`;switch(u){case 1:return`${i}(${a}(scale.${r}))`;case 2:return`vec2<${i}>(${a}(scale[0].${r}, scale[1].${r}))`;case 4:return`vec4<${i}>(${a}(scale[0].${r}, scale[1].${r}, scale[2].${r}, scale[3].${r}))`;default:throw Error(`Not supported compoents ${u}`)}},o=tK("input",r[0].dataType,r[0].dims,u),l=tZ("output",r[0].dataType,a,u);return`
1863  @group(0) @binding(0) var<storage, read> input : array<${o.type.storage}>;
1864  @group(0) @binding(1) var<storage, read> scale_input : array<${n}>;
1865  @group(0) @binding(2) var<storage, read_write> output : array<${l.type.storage}>;
1866  struct Uniforms {H: u32, C : u32};
1867  @group(0) @binding(3) var<uniform> uniforms: Uniforms;
1868
1869  ${t.mainStart()}
1870    let current_image_number = global_idx / (uniforms.C * uniforms.H);
1871    let current_channel_number = global_idx % uniforms.C;
1872
1873    let scale_offset = current_image_number * uniforms.C + current_channel_number;
1874    let scale = scale_input[scale_offset];
1875    output[global_idx] = fma(input[global_idx], ${s(0)}, ${s(1)});
1876  }`}},{inputs:[r[0],f]})},sl=(t,r)=>{"NHWC"===r.format?su(t,t.inputs,r):so(t,t.inputs,r)}}),uR=q(()=>{oK(),oX(),o4(),sd=t=>{if(!t||t.length<2)throw Error("layerNorm requires at least 2 inputs.")},sp=(t,r,i)=>{let a=r.simplified,n=t[0].dims,s=t[1],o=!a&&t[2],u=ts.normalizeAxis(r.axis,n.length),l=ts.sizeToDimension(n,u),d=ts.sizeFromDimension(n,u),p=ts.size(s.dims),c=o?ts.size(o.dims):0;if(p!==d||o&&c!==d)throw Error(`Size of X.shape()[axis:] == ${d}.
1877       Size of scale and bias (if provided) must match this.
1878       Got scale size of ${p} and bias size of ${c}`);let h=[];for(let t=0;t<n.length;++t)t<u?h.push(n[t]):h.push(1);let f=tL(d),m=["type","type"],g=[{type:12,data:l},{type:1,data:d},{type:12,data:Math.floor(d/f)},{type:1,data:r.epsilon}];o&&m.push("type");let y=i>1,_=i>2,b=[{dims:n,dataType:t[0].dataType}];return y&&b.push({dims:h,dataType:1}
1878),_&&b.push({dims:h,dataType:1}),{name:"LayerNormalization",shaderCache:{hint:`${f};${i};${a}`,inputDependencies:m},getRunData:()=>({outputs:b,dispatchGroup:{x:Math.ceil(l/64)},programUniforms:g}),getShaderSource:r=>{let i=tU(t[0].dataType),u=[tK("x",t[0].dataType,t[0].dims,f),tK("scale",s.dataType,s.dims,f)];return o&&u.push(tK("bias",o.dataType,o.dims,f)),u.push(tZ("output",t[0].dataType,n,f)),y&&u.push(tZ("mean_data_output",1,h)),_&&u.push(tZ("inv_std_output",1,h)),`
1879  ${r.registerUniforms([{name:"norm_count",type:"u32"},{name:"norm_size",type:"f32"},{name:"norm_size_vectorized",type:"u32"},{name:"epsilon",type:"f32"}]).declareVariables(...u)}
1880  ${r.mainStart()}
1881    ${r.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.norm_count")}
1882    let offset = global_idx * uniforms.norm_size_vectorized;
1883    var mean_vector = ${tV("f32",f)};
1884    var mean_square_vector = ${tV("f32",f)};
1885
1886    for (var h: u32 = 0u; h < uniforms.norm_size_vectorized; h++) {
1887      let value = ${tG(i,f,"x[h + offset]")};
1888      mean_vector += value;
1889      mean_square_vector += value * value;
1890    }
1891    let mean = ${tH("mean_vector",f)} / uniforms.norm_size;
1892    let inv_std_dev = inverseSqrt(${tH("mean_square_vector",f)} / uniforms.norm_size ${a?"":"- mean * mean"} + uniforms.epsilon);
1893
1894    for (var j: u32 = 0; j < uniforms.norm_size_vectorized; j++) {
1895      let f32input = ${tG(i,f,"x[j + offset]")};
1896      let f32scale = ${tG(i,f,"scale[j]")};
1897      output[j + offset] = ${u[0].type.value}((f32input ${a?"":"- mean"}) * inv_std_dev * f32scale
1898        ${o?`+ ${tG(i,f,"bias[j]")}`:""}
1899      );
1900    }
1901
1902    ${y?"mean_data_output[global_idx] = mean":""};
1903    ${_?"inv_std_output[global_idx] = inv_std_dev":""};
1904  }`}}},sc=(t,r)=>{sd(t.inputs),t.compute(sp(t.inputs,r,t.outputCount))}}),uB=q(()=>{oX(),ul(),ud(),sh=t=>{if(!t||2!==t.length)throw Error("MatMul requires 2 inputs.");if(t[0].dims[t[0].dims.length-1]!==t[1].dims[t[1].dims.length-2])throw Error("shared dimension does not match.")},sf=t=>{sh(t.inputs);let r=tn.calcShape(t.inputs[0].dims,t.inputs[1].dims,!0);if(!r)throw Error("Can't use matmul on the given tensors");let i=r[r.length-1],a=t.inputs[0].dims[t.inputs[0].dims.length-1];if(i<8&&a<8)t.compute(af(t.inputs,{activation:""},r));else{let n=r[r.length-2],s=ts.size(t.inputs[0].dims.slice(0,-2)),o=ts.size(t.inputs[1].dims.slice(0,-2));if(1!==s&&1===n&&1===o){let n=t.inputs[0].reshape([1,s,a]),o=t.inputs[1].reshape([1,a,i]),u=[1,s,i],l=[n,o];t.compute(aw(l,{activation:""},r,u),{inputs:l})}else t.compute(aw(t.inputs,{activation:""},r))}}}),uN=q(()=>{oK(),oX(),o3(),o4(),sm=(t,r)=>{if(t.length<3||t.length>4)throw Error("MatMulNBits requires 3 or 4 inputs");let i=t[0],a=i.dims.length;if(i.dims[a-1]!==r.k)throw Error("The last dim of input shape does not match the k value");let n=Math.floor((r.k+r.blockSize-1)/r.blockSize),s=r.blockSize/8*r.bits,o=t[1];if(!ts.areEqual(o.dims,[r.n,n,s]))throw Error("The second inputs must be 3D tensor with shape N X nBlocksPerCol X blobSize");let u=t[2].dims;if(ts.size(u)!==r.n*n)throw Error("scales input size error.");if(4===t.length){let i=t[3].dims,a=r.bits>4?r.n*n:r.n*Math.floor((n+1)/2);if(ts.size(i)!==a)throw Error("zeroPoints input size error.")}},sg=(t,r)=>{let i=t[0].dims,a=i.length,n=i[a-2],s=r.k,o=r.n,u=i.slice(0,a-2),l=ts.size(u),d=t[1].dims[2]/4,p=t[0].dataType,c=tL(r.k),h=tL(d),f=tL(o),m=u.concat([n,o]),g=n>1&&o/f%2==0?2:1,y=ts.size(m)/f/g,_=[],b=[l,n,s/c],$=ts.convertShape(t[1].dims).slice();$.splice(-1,1,d/h),_.push(...tW(b)),_.push(...tW($)),_.push(...tW(t[2].dims)),4===t.length&&_.push(...tW(ts.convertShape(t[3].dims)));let v=[l,n,o/f];return _.push(...tW(v)),{name:"MatMulNBits",shaderCache:{hint:`${r.blockSize};${r.bits};${c};${h};${f};${g};64`,inputDependencies:Array(t.length).fill("rank")},getRunData:()=>({outputs:[{dims:m,dataType:p}],dispatchGroup:{x:y},programUniforms:_}),getShaderSource:i=>{let a=b.length,n=tK("a",t[0].dataType,a,c),s=tK("b",12,$.length,h),o=tK("scales",t[2].dataType,t[2].dims.length),u=[n,s,o],l=4===t.length?tK("zero_points",12,t[3].dims.length):void 0;l&&u.push(l);let p=v.length,m=tZ("output",t[0].dataType,p,f),y=tU(t[0].dataType),_=(()=>{switch(c){case 1:return`array<${y}, 8>`;case 2:return`mat4x2<${y}>`;case 4:return`mat2x4<${y}>`;default:throw Error(`${c}-component is not supported.`)}})();return`
1905        var<workgroup> workgroup_shared: array<${m.type.value}, ${64*g}>;
1906        ${i.declareVariables(...u,m)}
1907        ${i.mainStart([64,1,1])}
1908          let output_indices = ${m.offsetToIndices(`(global_idx / 64) * ${g}`)};
1909          let col = output_indices[2];
1910          let row = output_indices[1];
1911          let batch = output_indices[0];
1912          let nBlocksPerCol = uniforms.b_shape[1];
1913
1914          for (var block = local_id.x; block < nBlocksPerCol; block += 64) {
1915            //process one block
1916            var word_offset: u32 = block * ${r.blockSize/c};
1917            ${(()=>{let t=`
1918            var col_index = col * ${f};
1919            ${l?`
1920            let zero_point_bytes_per_col = (nBlocksPerCol + 1) / 2;
1921            var zero_point_byte_count: u32;
1922            var zero_point_word_index: u32;
1923            var zero_point_byte_offset: u32;
1924            let zero_point_nibble_offset: u32 = block & 0x1u;
1925            var zero_point_bits_offset: u32;
1926            var zero_point_word: u32;`:`
1927            // The default zero point is 8 for unsigned 4-bit quantization.
1928            let zero_point = ${y}(8);`}
1929            `;for(let r=0;r<f*g;r++)t+=`
1930            let scale${r} = ${o.getByOffset("col_index * nBlocksPerCol + block")};
1931            ${l?`
1932            zero_point_byte_count = col_index * zero_point_bytes_per_col + (block >> 0x1u);
1933            zero_point_word_index = zero_point_byte_count >> 0x2u;
1934            zero_point_byte_offset = zero_point_byte_count & 0x3u;
1935            zero_point_bits_offset = (zero_point_byte_offset << 3) + (zero_point_nibble_offset << 2);
1936            zero_point_word = ${l.getByOffset("zero_point_word_index")} >> zero_point_bits_offset;
1937            let zero_point${r} = ${y}((zero_point_word) & 0xFu);`:""}
1938            col_index += 1;`;return t})()}
1939            for (var word: u32 = 0; word < ${d}; word += ${h}) {
1940              ${(()=>{let t=`col_index = col * ${f};`;for(let r=0;r<f*g;r++)t+=`
1941            let b${r}_data = ${s.getByIndices(`${s.type.indices}(col_index, block, word)`)};
1942            col_index += 1;`;return t+`
1943            var b_value: u32;
1944            let b_mask: u32 = 0x0F0F0F0Fu;
1945            var b_value_lower: vec4<u32>;
1946            var b_value_upper: vec4<u32>;
1947            var b_quantized_values: ${_};
1948            var b_dequantized_values: ${_};`})()}
1949              for (var i: u32 = 0; i < ${h}; i++) {
1950                ${(()=>{let t=`
1951          // reuse a data
1952            var input_offset = ${n.indicesToOffset(`${n.type.indices}(batch, row, word_offset)`)};
1953            var a_data: ${_};
1954            for (var j: u32 = 0; j < ${8/c}; j++) {
1955              a_data[j] = ${n.getByOffset("input_offset")};
1956              input_offset++;
1957            }
1958          `;for(let r=0;r<f*g;r++)t+=`
1959            b_value = ${1===h?`b${r}_data`:`b${r}_data[i]`};
1960            b_value_lower = unpack4xU8(b_value & b_mask);
1961            b_value_upper = unpack4xU8((b_value >> 4) & b_mask);
1962            b_quantized_values = ${_}(${Array.from({length:4},(t,r)=>`${y}(b_value_lower[${r}]), ${y}(b_value_upper[${r}])`).join(", ")});
1963            b_dequantized_values = ${1===c?`${_}(${Array.from({length:8},(t,i)=>`(b_quantized_values[${i}] - ${l?`zero_point${r}`:"zero_point"}) * scale${r}`).join(", ")});`:`(b_quantized_values - ${_}(${Array(8).fill(`${l?`zero_point${r}`:"zero_point"}`).join(",")})) * scale${r};`};
1964            workgroup_shared[local_id.x * ${g} + ${Math.floor(r/f)}]${f>1?`[${r%f}]`:""} += ${Array.from({length:8/c},(t,r)=>`${1===c?`a_data[${r}] * b_dequantized_values[${r}]`:`dot(a_data[${r}], b_dequantized_values[${r}])`}`).join(" + ")};
1965          `;return t})()}
1966                word_offset += ${8/c};
1967              }
1968            }
1969          }
1970          workgroupBarrier();
1971
1972          if (local_id.x < ${g}) {
1973            var output_value: ${m.type.value} = ${m.type.value}(0);
1974            var workgroup_shared_offset: u32 = local_id.x;
1975            for (var b: u32 = 0u; b < 64u; b++) {
1976              output_value += workgroup_shared[workgroup_shared_offset];
1977              workgroup_shared_offset += ${g};
1978            }
1979            ${m.setByIndices(`${m.type.indices}(batch, row, col + local_id.x)`,"output_value")};
1980          }
1981        }`}}},sy=(t,r)=>{let i=t[0].dims,a=i.length,n=i[a-2],s=r.k,o=r.n,u=i.slice(0,a-2),l=ts.size(u),d=t[1].dims[2]/4,p=t[0].dataType,c=tL(r.k),h=tL(d),f=u.concat([n,o]),m=o%8==0?8:o%4==0?4:1,g=128/m,y=g*h*8,_=y/c,b=y/r.blockSize,$=ts.size(f)/m,v=[],w=[l,n,s/c],x=ts.convertShape(t[1].dims).slice();x.splice(-1,1,d/h),v.push(...tW(w)),v.push(...tW(x)),v.push(...tW(t[2].dims)),4===t.length&&v.push(...tW(ts.convertShape(t[3].dims)));let k=[l,n,o];return v.push(...tW(k)),{name:"BlockwiseMatMulNBits32",shaderCache:{hint:`${r.blockSize};${c};${h};${g};${m}`,inputDependencies:Array(t.length).fill("rank")},getRunData:()=>({outputs:[{dims:f,dataType:p}],dispatchGroup:{x:$},programUniforms:v}),getShaderSource:i=>{let a=w.length,n=tK("a",t[0].dataType,a,c),s=tK("b",12,x.length,h),o=tK("scales",t[2].dataType,t[2].dims.length),u=[n,s,o],l=4===t.length?tK("zero_points",12,t[3].dims.length):void 0;l&&u.push(l);let d=k.length,p=tZ("output",t[0].dataType,d),f=tU(t[0].dataType);return`
1982        var<workgroup> sub_a: array<${n.type.value}, ${_}>;
1983        var<workgroup> inter_results: array<array<${p.type.value}, ${g}>, ${m}>;
1984        ${i.declareVariables(...u,p)}
1985        ${i.mainStart([g,m,1])}
1986          let output_indices = ${p.offsetToIndices(`workgroup_index * ${m}`)};
1987          let col = output_indices[2];
1988          let row = output_indices[1];
1989          let batch = output_indices[0];
1990          let n_blocks_per_col = uniforms.b_shape[1];
1991          let num_tiles =  (n_blocks_per_col - 1) / ${b} + 1;
1992
1993          // Loop over shared dimension.
1994          for (var tile: u32 = 0; tile < num_tiles; tile += 1) {
1995            let a_col_start = tile * ${_};
1996            // load one tile A data into shared memory.
1997            for (var a_offset = local_idx; a_offset < ${_}; a_offset += 128)
1998            {
1999              let a_col = a_col_start + a_offset;
2000              if (a_col < uniforms.a_shape[2])
2001              {
2002                sub_a[a_offset] = ${n.getByIndices(`${n.type.indices}(batch, row, a_col)`)};
2003              } else {
2004                sub_a[a_offset] = ${n.type.value}(0);
2005              }
2006            }
2007            workgroupBarrier();
2008
2009            // each thread process one block
2010            let b_row = col + local_id.y;
2011            let block = tile * ${b} + local_id.x;
2012            ${l?`
2013            let zero_point_bytes_per_col = (n_blocks_per_col + 1) / 2;
2014            let zero_point_byte_count = b_row * zero_point_bytes_per_col + (block >> 0x1u);
2015            let zero_point_word_index = zero_point_byte_count >> 0x2u;
2016            let zero_point_byte_offset = zero_point_byte_count & 0x3u;
2017            let zero_point_nibble_offset: u32 = block & 0x1u;
2018            let zero_point_bits_offset = (zero_point_byte_offset << 3) + (zero_point_nibble_offset << 2);
2019            let zero_point_word = ${l.getByOffset("zero_point_word_index")} >> zero_point_bits_offset;
2020            let zero_point = ${f}((zero_point_word) & 0xFu);`:`
2021            // The default zero point is 8 for unsigned 4-bit quantization.
2022            let zero_point = ${f}(8);`}
2023            let scale = ${o.getByOffset("b_row * n_blocks_per_col + block")};
2024            let b_data = ${s.getByIndices(`${s.type.indices}(b_row, block, 0)`)};
2025            var word_offset = local_id.x * ${r.blockSize/c};
2026            for (var i: u32 = 0; i < ${h}; i++) {
2027              ${(()=>{switch(c){case 1:return`
2028          let a_data0 = vec4<${f}>(sub_a[word_offset], sub_a[word_offset + 1], sub_a[word_offset + 2], sub_a[word_offset + 3]);
2029          let a_data1 = vec4<${f}>(sub_a[word_offset + 4], sub_a[word_offset + 5], sub_a[word_offset + 6], sub_a[word_offset + 7]);`;case 2:return`
2030          let a_data0 = vec4<${f}>(sub_a[word_offset], sub_a[word_offset + 1]);
2031          let a_data1 = vec4<${f}>(sub_a[word_offset + 2], sub_a[word_offset + 3]);`;case 4:return`
2032          let a_data0 = sub_a[word_offset];
2033          let a_data1 = sub_a[word_offset + 1];`;default:throw Error(`${c}-component is not supported.`)}})()}
2034              let b_value = ${1===h?"b_data":"b_data[i]"};
2035              let b_value_lower = unpack4xU8(b_value & 0x0F0F0F0Fu);
2036              let b_value_upper = unpack4xU8((b_value >> 4) & 0x0F0F0F0Fu);
2037              let b_quantized_values = mat2x4<${f}>(${Array.from({length:4},(t,r)=>`${f}(b_value_lower[${r}]), ${f}(b_value_upper[${r}])`).join(", ")});
2038              let b_dequantized_values = (b_quantized_values - mat2x4<${f}>(${Array(8).fill("zero_point").join(",")})) * scale;
2039              inter_results[local_id.y][local_id.x] += ${Array.from({length:2},(t,r)=>`dot(a_data${r}, b_dequantized_values[${r}])`).join(" + ")};
2040              word_offset += ${8/c};
2041            }
2042            workgroupBarrier();
2043          }
2044
2045          if (local_idx < ${m}) {
2046            var output_value: ${p.type.value} = ${p.type.value}(0);
2047            for (var b = 0u; b < ${g}; b++) {
2048              output_value += inter_results[local_idx][b];
2049            }
2050            if (col + local_idx < uniforms.output_shape[2])
2051            {
2052              ${p.setByIndices(`${p.type.indices}(batch, row, col + local_idx)`,"output_value")}
2053            }
2054          }
2055        }`}}},s_=(t,r)=>{sm(t.inputs,r),32===r.blockSize&&t.adapterInfo.isVendor("intel")&&t.adapterInfo.isArchitecture("gen-12lp")?t.compute(sy(t.inputs,r)):t.compute(sg(t.inputs,r))},sb=t=>tM(t)}),uM=q(()=>{oK(),oX(),o4(),s$=t=>{if(!t||t.length<1)throw Error("Too few inputs");if(1!==t[0].dataType&&10!==t[0].dataType)throw Error("Input type must be float or float16.");if(t.length>=2){let r=2*t[0].dims.length===t[1].dims[0];if(4===t.length&&(r=2*t[3].dims[0]===t[1].dims[0]),!r)throw Error("The pads should be a 1D tensor of shape [2 * input_rank] or [2 * num_axes].")}},sv=(t,r,i)=>{let a="";for(let n=r-1;n>=0;--n)a+=`
2056            k = i32(${t.indicesGet("indices",n)}) - ${tF("uniforms.pads",n,i)};
2057            if (k < 0) {
2058              break;
2059            }
2060            if (k >= i32(${tF("uniforms.x_shape",n,r)})) {
2061              break;
2062            }
2063            offset += k * i32(${tF("uniforms.x_strides",n,r)});
2064        `;return`
2065          value = ${t.type.value}(uniforms.constant_value);
2066          for (var i = 0; i < 1; i++) {
2067            var offset = 0;
2068            var k = 0;
2069            ${a}
2070            value = x[offset];
2071          }
2072      `},sw=(t,r,i)=>{let a="";for(let n=r-1;n>=0;--n)a+=`
2073                k = i32(${t.indicesGet("indices",n)}) - ${tF("uniforms.pads",n,i)};
2074                if (k < 0) {
2075                  k = -k;
2076                }
2077                {
2078                  let _2n_1 = 2 * (i32(${tF("uniforms.x_shape",n,r)}) - 1);
2079                  k = k % _2n_1;
2080                  if(k >= i32(${tF("uniforms.x_shape",n,r)})) {
2081                    k = _2n_1 - k;
2082                  }
2083                }
2084                offset += k * i32(${tF("uniforms.x_strides",n,r)});
2085            `;return`
2086              var offset = 0;
2087              var k = 0;
2088              ${a}
2089              value = x[offset];
2090          `},sx=(t,r,i)=>{let a="";for(let n=r-1;n>=0;--n)a+=`
2091                k = i32(${t.indicesGet("indices",n)}) - ${tF("uniforms.pads",n,i)};
2092                if (k < 0) {
2093                  k = 0;
2094                }
2095                if (k >= i32(${tF("uniforms.x_shape",n,r)})) {
2096                  k = i32(${tF("uniforms.x_shape",n,r)}) - 1;
2097                }
2098                offset += k * i32(${tF("uniforms.x_strides",n,r)});
2099            `;return`
2100              var offset = 0;
2101              var k = 0;
2102              ${a}
2103              value = x[offset];
2104          `},sk=(t,r,i)=>{let a="";for(let n=r-1;n>=0;--n)a+=`
2105                k = i32(${t.indicesGet("indices",n)}) - ${tF("uniforms.pads",n,i)};
2106                if (k < 0)  {
2107                  k += i32(${tF("uniforms.x_shape",n,r)}]);
2108                }
2109                if (k >= i32(${tF("uniforms.x_shape",n,r)})) {
2110                  k -= i32(${tF("uniforms.x_shape",n,r)});
2111                }
2112                offset += k * i32(${tF("uniforms.x_strides",n,r)});
2113            `;return`
2114              var offset = 0;
2115              var k = 0;
2116              ${a}
2117              value = x[offset];
2118          `},sS=(t,r,i)=>{switch(i.mode){case 0:return sv(t,r,i.pads.length);case 1:return sw(t,r,i.pads.length);case 2:return sx(t,r,i.pads.length);case 3:return sk(t,r,i.pads.length);default:throw Error("Invalid mode")}},sT=(t,r)=>{let i=ts.padShape(t[0].dims.slice(),r.pads),a=t[0].dims,n=[{type:12,data:ts.size(i)},{type:6,data:r.pads}],s=t.length>=3&&t[2].data;return 0===r.mode&&n.push({type:s?t[2].dataType:1,data:r.value}),n.push(...tW(t[0].dims,i)),{name:"Pad",shaderCache:{hint:`${r.mode}${s}`,inputDependencies:["rank"]},getRunData:()=>({outputs:[{dims:i,dataType:t[0].dataType}],dispatchGroup:{x:Math.ceil(ts.size(i)/64)},programUniforms:n}),getShaderSource:n=>{let o=tZ("output",t[0].dataType,i.length),u=tK("x",t[0].dataType,a.length),l=u.type.value,d=sS(o,a.length,r),p=[{name:"output_size",type:"u32"},{name:"pads",type:"i32",length:r.pads.length}];return 0===r.mode&&p.push({name:"constant_value",type:s?l:"f32"}),`
2119            ${n.registerUniforms(p).declareVariables(u,o)}
2120            ${n.mainStart()}
2121            ${n.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
2122
2123            let indices = ${o.offsetToIndices("global_idx")};
2124
2125            var value = ${l}(0);
2126            ${d}
2127            output[global_idx] = value;
2128        }`}}},sI=(t,r)=>{if(!(t.length>1))return r;{let i=t[1].getBigInt64Array(),a=t.length>=3&&t[2].data?10===t[2].dataType?t[2].getUint16Array()[0]:t[2].getFloat32Array()[0]:0,n=t[0].dims.length,s=new Int32Array(2*n).fill(0);if(t.length>=4){let r=t[3].getBigInt64Array();for(let t=0;t<r.length;t++)s[Number(r[t])]=Number(i[t]),s[Number(r[t])+n]=Number(i[t+r.length])}
2128else i.forEach((t,r)=>s[Number(r)]=Number(t));let o=[];return s.forEach(t=>o.push(t)),{mode:r.mode,value:a,pads:o}}},sE=(t,r)=>{s$(t.inputs);let i=sI(t.inputs,r);t.compute(sT(t.inputs,i),{inputs:[0]})}}),uD=q(()=>{el(),oK(),oX(),o4(),sC=t=>{if(c.webgpu.validateInputContent&&(!t||1!==t.length))throw Error("Pool ops requires 1 input.")},sz=(t,r,i)=>{let a="NHWC"===r.format,n=t.dims.slice();a&&n.splice(1,0,n.pop());let s=Object.hasOwnProperty.call(r,"dilations"),o=r.kernelShape.slice(),u=r.strides.slice(),l=s?r.dilations.slice():[],d=r.pads.slice();to.adjustPoolAttributes(i,n,o,u,l,d);let p=to.computePoolOutputShape(i,n,u,l,o,d,r.autoPad),c=Object.assign({},r);s?Object.assign(c,{kernelShape:o,strides:u,pads:d,dilations:l,cacheKey:r.cacheKey}):Object.assign(c,{kernelShape:o,strides:u,pads:d,cacheKey:r.cacheKey});let h=p.slice();return h.push(h.splice(1,1)[0]),[c,a?h:p]},sA=(t,r)=>{let i="NHWC"===r.format,a=[{type:12,data:ts.size(t)},{type:12,data:ts.size(r.kernelShape)}],n=[{name:"outputSize",type:"u32"},{name:"kernelSize",type:"u32"}];if(r.kernelShape.length<=2){let t=r.kernelShape[r.kernelShape.length-1],i=r.strides[r.strides.length-1],s=r.pads[r.pads.length/2-1],o=r.pads[r.pads.length-1],u=!!(s+o);a.push({type:12,data:t},{type:12,data:i},{type:12,data:s},{type:12,data:o}),n.push({name:"kw",type:"u32"},{name:"sw",type:"u32"},{name:"pwStart",type:"u32"},{name:"pwEnd",type:"u32"});let l=!1;if(2===r.kernelShape.length){let t=r.kernelShape[r.kernelShape.length-2],i=r.strides[r.strides.length-2],s=r.pads[r.pads.length/2-2],o=r.pads[r.pads.length-2];l=!!(s+o),a.push({type:12,data:t},{type:12,data:i},{type:12,data:s},{type:12,data:o}),n.push({name:"kh",type:"u32"},{name:"sh",type:"u32"},{name:"phStart",type:"u32"},{name:"phEnd",type:"u32"})}return[a,n,!0,u,l]}{if(i)throw Error("Pooling with kernelShape.length > 2 is not supported for NHWC format.");let t=ts.computeStrides(r.kernelShape);return a.push({type:12,data:t},{type:12,data:r.pads},{type:12,data:r.strides}),n.push({name:"kernelStrides",type:"u32",length:t.length},{name:"pads",type:"u32",length:r.pads.length},{name:"strides",type:"u32",length:r.strides.length}),[a,n,!!r.pads.reduce((t,r)=>t+r),!1,!1]}},sO=(t,r,i,a,n,s,o,u,l,d,p,c)=>{let h="NHWC"===n.format,f=r.type.value,m=tZ("output",r.type.tensor,a);if(n.kernelShape.length<=2){let a="",d="",g="",y=i-(h?2:1);if(a=p?`
2129                for (var i: u32 = 0u; i < uniforms.kw; i++) {
2130                  xIndices[${y}] = indices[${y}] * uniforms.sw - uniforms.pwStart + i;
2131                  if (xIndices[${y}] < 0 || xIndices[${y}]
2132                      >= uniforms.x_shape[${y}]) {
2133                    pad++;
2134                    continue;
2135                  }
2136                  let x_val = x[${r.indicesToOffset("xIndices")}];
2137                  ${s}
2138                }`:`
2139                for (var i: u32 = 0u; i < uniforms.kw; i++) {
2140                  xIndices[${y}] = indices[${y}] * uniforms.sw - uniforms.pwStart + i;
2141                  let x_val = x[${r.indicesToOffset("xIndices")}];
2142                  ${s}
2143                }`,2===n.kernelShape.length){let t=i-(h?3:2);d=c?`
2144                for (var j: u32 = 0u; j < uniforms.kh; j++) {
2145                  xIndices[${t}] = indices[${t}] * uniforms.sh - uniforms.phStart + j;
2146                  if (xIndices[${t}] < 0 || xIndices[${t}] >= uniforms.x_shape[${t}]) {
2147                    pad += i32(uniforms.kw);
2148                    continue;
2149                  }
2150              `:`
2151                for (var j: u32 = 0u; j < uniforms.kh; j++) {
2152                  xIndices[${t}] = indices[${t}] * uniforms.sh - uniforms.phStart + j;
2153                `,g=`
2154              }
2155            `}return`
2156            ${t.registerUniforms(l).declareVariables(r,m)}
2157
2158            ${t.mainStart()}
2159              ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
2160
2161              let indices = ${m.offsetToIndices("global_idx")};
2162              var xIndices = ${m.offsetToIndices("global_idx")};
2163
2164              var value = ${f}(${u});
2165              var pad = 0;
2166              ${d}
2167              ${a}
2168              ${g}
2169              ${o}
2170
2171              output[global_idx] = value;
2172            }`}{if(h)throw Error("Pooling with kernelShape.length > 2 is not supported for NHWC format.");let a=n.kernelShape.length,p=n.pads.length,c="";return c=d?`
2173                if (xIndices[j] >= uniforms.x_shape[j]) {
2174                  pad++;
2175                  isPad = true;
2176                  break;
2177                }
2178              }
2179              if (!isPad) {
2180                let x_val = x[${r.indicesToOffset("xIndices")}];
2181                ${s}
2182              }`:`
2183              }
2184              let x_val = x[${r.indicesToOffset("xIndices")}];
2185              ${s}
2186            `,`
2187            ${t.registerUniforms(l).declareVariables(r,m)}
2188
2189            ${t.mainStart()}
2190              ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
2191              let indices = ${m.offsetToIndices("global_idx")};
2192              var xIndices = ${m.offsetToIndices("global_idx")};
2193
2194              var offsets: array<u32, ${a}>;
2195
2196              var value = ${f}(${u});
2197              var pad = 0;
2198              var isPad = false;
2199
2200              for (var i: u32 = 0u; i < uniforms.kernelSize; i++) {
2201                var offset = i;
2202                for (var j = 0u; j < ${a-1}u; j++) {
2203                  offsets[j] = offset / ${tF("uniforms.kernelStrides","j",a)};
2204                  offset -= offsets[j] * ${tF("uniforms.kernelStrides","j",a)};
2205                }
2206                offsets[${a-1}] = offset;
2207
2208                isPad = false;
2209                for (var j = ${i-a}u; j < ${i}u; j++) {
2210                  xIndices[j] = indices[j] * ${tF("uniforms.strides",`j - ${i-a}u`,a)}
2211                    + offsets[j - ${i-a}u] - ${tF("uniforms.pads","j - 2u",p)};
2212                  ${c}
2213              }
2214              ${o}
2215
2216              output[global_idx] = value;
2217            }`}},sR=t=>`${t.format};${t.ceilMode};${t.autoPad};${t.kernelShape.length}`,sB=t=>`${sR(t)};${t.countIncludePad}`,sN=t=>`${sR(t)};${t.storageOrder};${t.dilations}`,sM=t=>({format:t.format,autoPad:["NOTSET","VALID","SAME_UPPER","SAME_LOWER"][t.auto_pad],ceilMode:t.ceil_mode,kernelShape:t.kernel_shape,strides:t.strides,pads:t.pads}),sD=(t,r,i,a)=>{let[n,s]=sz(r,a,i),o=tK("x",r.dataType,r.dims.length),u=o.type.value,l="";n.countIncludePad?l+=`value /= ${u}(uniforms.kernelSize);`:l+=`value /= ${u}(i32(uniforms.kernelSize) - pad);`;let[d,p,c,h,f]=sA(s,n);return d.push(...tW(r.dims,s)),{name:t,shaderCache:{hint:`${a.cacheKey};${c};${h};${f}`,inputDependencies:["rank"]},getRunData:()=>({outputs:[{dims:s,dataType:r.dataType}],dispatchGroup:{x:Math.ceil(ts.size(s)/64)},programUniforms:d}),getShaderSource:t=>sO(t,o,r.dims.length,s.length,n,"value += x_val;",l,0,p,c,h,f)}},sP=t=>{let r=0!==t.count_include_pad,i=sM(t);if(0!==i.ceilMode)throw Error("using ceil() in shape computation is not yet supported for AveragePool");let a={countIncludePad:r,...i,cacheKey:""};return{...a,cacheKey:sB(a)}},sU=(t,r)=>{sC(t.inputs),t.compute(sD("AveragePool",t.inputs[0],!1,r))},sq={autoPad:"",ceilMode:0,countIncludePad:!1,kernelShape:[],strides:[],pads:[],storageOrder:0,dilations:[]},sW=t=>{let r=t.format;return{format:r,...sq,cacheKey:r}},sL=(t,r)=>{sC(t.inputs),t.compute(sD("GlobalAveragePool",t.inputs[0],!0,r))},sV=(t,r,i,a)=>{let[n,s]=sz(r,a,i),o=`
2218      value = max(x_val, value);
2219    `,u=tK("x",r.dataType,r.dims.length),[l,d,p,c,h]=sA(s,n);return l.push(...tW(r.dims,s)),{name:t,shaderCache:{hint:`${a.cacheKey};${p};${c};${h}`,inputDependencies:["rank"]},getRunData:()=>({outputs:[{dims:s,dataType:r.dataType}],dispatchGroup:{x:Math.ceil(ts.size(s)/64)},programUniforms:l}),getShaderSource:t=>sO(t,u,r.dims.length,s.length,n,o,"",10===r.dataType?-65504:-1e5,d,p,c,h)}},sG=(t,r)=>{sC(t.inputs),t.compute(sV("MaxPool",t.inputs[0],!1,r))},sH=t=>{let r=t.storage_order,i=t.dilations,a=sM(t);if(0!==r)throw Error("column major storage order is not yet supported for MaxPool");if(0!==a.ceilMode)throw Error("using ceil() in shape computation is not yet supported for MaxPool");let n={storageOrder:r,dilations:i,...a,cacheKey:""};return{...n,cacheKey:sN(n)}},sF=t=>{let r=t.format;return{format:r,...sq,cacheKey:r}},sj=(t,r)=>{sC(t.inputs),t.compute(sV("GlobalMaxPool",t.inputs[0],!0,r))}}),uP=q(()=>{oK(),oX(),o3(),o4(),sK=(t,r)=>{if(t.length<2||t.length>3)throw Error("DequantizeLinear requires 2 or 3 inputs.");if(3===t.length&&t[1].dims===t[2].dims)throw Error("x-scale and x-zero-point must have the same shape.");if(3===t.length&&t[0].dataType!==t[2].dataType)throw Error("x and x-zero-point must have the same data type.");if(6===t[0].dataType&&t.length>2)throw Error("In the case of dequantizing int32 there is no zero point.");if(0!==t[1].dims.length&&1!==t[1].dims.length&&t[1].dims.length!==t[0].dims.length)throw Error("scale input must be a scalar, a 1D tensor, or have the same rank as the input tensor.");if(t.length>2){if(t[0].dataType!==t[2].dataType)throw Error("x and x-zero-point must have the same data type.");if(t[1].dims.length!==t[2].dims.length)throw Error("scale and zero-point inputs must have the same rank.");if(!t[1].dims.map((r,i)=>r===t[2].dims[i]).reduce((t,r)=>t&&r,!0))throw Error("scale and zero-point inputs must have the same shape.")}if(r.blockSize>0){if(0===t[1].dims.length||1===t[1].dims.length&&1===t[1].dims[0])throw Error("blockSize must be set only for block quantization.");
2219if(!t[1].dims.map((i,a)=>a===r.axis||i===t[0].dims[a]).reduce((t,r)=>t&&r,!0))throw Error("For block qunatization, scale input shape to match the input shape except for the axis");if(t[1].dims.length!==t[0].dims.length)throw Error("For block qunatization the scale input rank must be the same as the x rank.");let i=t[0].dims[r.axis],a=t[1].dims[r.axis];if(r.blockSize<Math.ceil(i/a)||r.blockSize>Math.ceil(i/(a-1)-1))throw Error("blockSize must be with in the range [ceil(dI / Si), ceil(dI / (Si - 1) - 1)].")}},sZ=(t,r)=>{let i=ts.normalizeAxis(r.axis,t[0].dims.length),a=t[0].dataType,n=3===a,s=t[0].dims,o=t[1].dataType,u=ts.size(s),l=3===a||2===a,d=l?[Math.ceil(ts.size(t[0].dims)/4)]:t[0].dims,p=t[1].dims,c=t.length>2?t[2]:void 0,h=c?l?[Math.ceil(ts.size(c.dims)/4)]:c.dims:void 0,f=0===p.length||1===p.length&&1===p[0],m=!1===f&&1===p.length,g=tL(u),y=f&&(!l||4===g),_=y?g:1,b=tK("input",l?12:a,d.length,y&&!l?g:1),$=tK("scale",o,p.length),v=c?tK("zero_point",l?12:a,h.length):void 0,w=tZ("output",o,s.length,_),x=[b,$];v&&x.push(v);let k=[d,p];c&&k.push(h);let S=[{type:12,data:u/_},{type:12,data:i},{type:12,data:r.blockSize},...tW(...k,s)];return{name:"DequantizeLinear",shaderCache:{hint:r.cacheKey,inputDependencies:v?["rank","rank","rank"]:["rank","rank"]},getShaderSource:t=>`
2220      ${t.registerUniforms([{name:"output_size",type:"u32"},{name:"axis",type:"u32"},{name:"block_size",type:"u32"}]).declareVariables(...x,w)}
2221      ${t.mainStart()}
2222          ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
2223          let output_indices = ${w.offsetToIndices("global_idx")};
2224
2225          // Set input x
2226          ${l?`
2227            let input = ${b.getByOffset("global_idx / 4")};
2228            let x_vec = ${n?"unpack4xI8(input)":"unpack4xU8(input)"};
2229            let x_value = ${1===_?"x_vec[global_idx % 4]":"x_vec"};`:`let x_value = ${b.getByOffset("global_idx")};`};
2230
2231          // Set scale input
2232          ${f?`let scale_value= ${$.getByOffset("0")}`:m?`
2233            let scale_index = ${w.indicesGet("output_indices","uniforms.axis")};
2234            let scale_value= ${$.getByOffset("scale_index")};`:`
2235            var scale_indices: ${$.type.indices} = output_indices;
2236            let index = ${$.indicesGet("scale_indices","uniforms.axis")} / uniforms.block_size;
2237            ${$.indicesSet("scale_indices","uniforms.axis","index")};
2238            let scale_value= ${$.getByIndices("scale_indices")};`};
2239
2240          // Set zero-point input
2241          ${v?f?l?`
2242                let zero_point_input = ${v.getByOffset("0")};
2243                let zero_point_vec =  ${n?"unpack4xI8(zero_point_input)":"unpack4xU8(zero_point_input)"};
2244                let zero_point_value= zero_point_vec[0]`:`let zero_point_value = ${v.getByOffset("0")}`:m?l?`
2245                let zero_point_index = ${w.indicesGet("output_indices","uniforms.axis")};
2246                let zero_point_input = ${v.getByOffset("zero_point_index / 4")};
2247                let zero_point_vec =  ${n?"unpack4xI8(zero_point_input)":"unpack4xU8(zero_point_input)"};
2248                let zero_point_value = zero_point_vec[zero_point_index % 4]`:`
2249                let zero_point_index = ${w.indicesGet("output_indices","uniforms.axis")};
2250                let zero_point_value = ${v.getByOffset("zero_point_index")};`:l?`
2251                let zero_point_offset = ${$.indicesToOffset("scale_indices")};
2252                let zero_point_input = ${v.getByOffset("zero_point_offset / 4")};
2253                let zero_point_vec = ${n?"unpack4xI8(zero_point_input)":"unpack4xU8(zero_point_input)"};
2254                let zero_point_value = zero_point_vec[zero_point_offset % 4];`:`let zero_point_value = ${v.getByIndices("scale_indices")};`:`let zero_point_value = ${l?n?"i32":"u32":b.type.value}(0);`};
2255      // Compute and write output
2256      ${w.setByOffset("global_idx",`${w.type.value}(x_value - zero_point_value) * scale_value`)};
2257      }`,getRunData:()=>({outputs:[{dims:s,dataType:o}],dispatchGroup:{x:Math.ceil(u/_/64),y:1,z:1},programUniforms:S})}},sQ=(t,r)=>{sK(t.inputs,r),t.compute(sZ(t.inputs,r))},sX=t=>tM({axis:t.axis,blockSize:t.blockSize})}),uU=q(()=>{el(),oK(),o4(),sY=(t,r,i)=>{if(t===r||t<r&&i<0||t>r&&i>0)throw Error("Range these inputs' contents are invalid.")},sJ=(t,r,i,a)=>{let n=Math.abs(Math.ceil((r-t)/i)),s=[n],o=[{type:12,data:n},{type:a,data:t},{type:a,data:i},...tW(s)];return{name:"Range",shaderCache:{hint:`${a}`}
vendor: 4,133 bytes, lines 2257-2309
2257,getShaderSource:t=>{let r=tZ("output",a,s.length),i=r.type.value;return`
2258        ${t.registerUniforms([{name:"outputSize",type:"u32"},{name:"start",type:i},{name:"delta",type:i}]).declareVariables(r)}
2259        ${t.mainStart()}
2260        ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
2261        output[global_idx] = uniforms.start + ${i}(global_idx) * uniforms.delta;
2262      }`},getRunData:()=>({outputs:[{dims:s,dataType:a}],dispatchGroup:{x:Math.ceil(n/64)},programUniforms:o})}},s0=t=>{let r=0,i=0,a=0;6===t.inputs[0].dataType?(r=t.inputs[0].getInt32Array()[0],i=t.inputs[1].getInt32Array()[0],a=t.inputs[2].getInt32Array()[0]):1===t.inputs[0].dataType&&(r=t.inputs[0].getFloat32Array()[0],i=t.inputs[1].getFloat32Array()[0],a=t.inputs[2].getFloat32Array()[0]),c.webgpu.validateInputContent&&sY(r,i,a),t.compute(sJ(r,i,a,t.inputs[0].dataType),{inputs:[]})}}),uq=q(()=>{oK(),oX(),o3(),o4(),s2=(t,r,i,a)=>{if("none"!==t&&"i32"!==a&&"u32"!==a&&"f32"!==a)throw Error(`Input ${a} is not supported with reduction ${t}.`);let n=`{
2263                var oldValue = 0;
2264                loop {
2265                  let newValueF32 =`,s=`;
2266                  let newValue = bitcast<i32>(newValueF32);
2267                  let res = atomicCompareExchangeWeak(&${r}, oldValue, newValue);
2268                  if res.exchanged {
2269                    break;
2270                  }
2271                  oldValue = res.old_value;
2272                }
2273              }`;switch(t){case"none":return`${r}=${i};`;case"add":return"i32"===a||"u32"===a?`atomicAdd(&${r}, bitcast<${a}>(${i}));`:`
2274              ${n}bitcast<${a}>(oldValue) + (${i})${s}`;case"max":return"i32"===a||"u32"===a?`atomicMax(&${r}, bitcast<${a}>(${i}));`:`
2275                ${n}max(bitcast<f32>(oldValue), (${i}))${s}`;case"min":return"i32"===a||"u32"===a?`atomicMin(&${r}, bitcast<${a}>(${i}));`:`${n}min(bitcast<${a}>(oldValue), (${i}))${s}`;case"mul":return`${n}(bitcast<${a}>(oldValue) * (${i}))${s}`;default:throw Error(`Reduction ${t} is not supported.`)}},s1=(t,r)=>`${1===t?`
2276    let element_count_dim = uniforms.output_strides;
2277    let dim_value = uniforms.output_shape;`:`
2278    let element_count_dim = uniforms.output_strides[${r?"i - indices_start":"i"}];
2279    let dim_value = uniforms.output_shape[${r?"i - indices_start":"i"} + uniforms.last_index_dimension];`}
2280    
2281    if (index >= 0) {
2282      if (index >= i32(dim_value)) {
2283        index = i32(dim_value - 1);
2284      }
2285    } else {
2286      if (index < -i32(dim_value)) {
2287        index = 0;
2288      } else {
2289        index += i32(dim_value);
2290      }
2291    }
2292    data_offset += u32((u32(index) * element_count_dim));`,s3=(t,r,i)=>`for (var i = 0u; i < uniforms.num_updates_elements; i++) {
2293        let value = updates[uniforms.num_updates_elements * ${i?"global_idx":"idx"} + i];
2294        ${s2(t.reduction,"output[data_offset + i]","value",r)}
2295      }`,s4=(t,r)=>{let i=t[0].dims,a=t[1].dims,n=Math.ceil(ts.size(a)/1),s=a[a.length-1],o=ts.sizeFromDimension(i,s),u=ts.sizeFromDimension(a,0)/s,l=[{type:12,data:n},{type:12,data:s},{type:12,data:o},...tW(t[1].dims,t[2].dims,i)];return{name:"ScatterND",shaderCache:{hint:`${r.cacheKey}_${r.reduction}`,inputDependencies:["rank","rank"]},getRunData:()=>({outputs:[{dims:i,dataType:t[0].dataType}],dispatchGroup:{x:Math.ceil(n/64)},programUniforms:l}),getShaderSource:a=>{let n=tK("indices",t[1].dataType,t[1].dims.length),s=tK("updates",t[2].dataType,t[2].dims.length,1),o="none"!==r.reduction&&""!==r.reduction?tQ("output",t[0].dataType,i.length):tZ("output",t[0].dataType,i.length,1);return`
2296      ${a.registerUniform("output_size","u32").registerUniform("last_index_dimension","u32").registerUniform("num_updates_elements","u32").declareVariables(n,s,o)}
2297      ${a.mainStart()}
2298        ${a.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
2299  var hasDuplicates = false;
2300  if (${"none"===r.reduction}) {
2301    for (var i = 0; i < ${u}; i = i + 1) {
2302      for (var j = i + 1; j < ${u}; j = j + 1) {
2303        var index_i = i32(indices[i].x);
2304        var index_j = i32(indices[j].x);
2305        if (index_i == index_j) {
2306          hasDuplicates = true;
2307          break;
2308        }
2309      }
2310      if (hasDuplicates) {
2311        break;
2312      }
2313    }
2314  }
2315
2316  if (${"none"===r.reduction} && hasDuplicates) {
2317    if (global_idx != 0u) {
2318      return;
2319    }
2320    // Process each index-update pair individually when duplicates exist
2321    for (var idx = 0u; idx < ${u}u; idx++) {
2322      var data_offset = 0u;
2323      for (var i = 0u; i < uniforms.last_index_dimension; i++) {
2324        var index = i32(indices[idx * uniforms.last_index_dimension + i].x);
2325        ${s1(i.length,!1)}
2326      }
2327      ${s3(r,o.type.value,!1)}
2328    }
2329    return;
2330  }
2331
2332  var data_offset = 0u;
2333  var indices_start = uniforms.last_index_dimension * global_idx;
2334  var indices_end = indices_start + uniforms.last_index_dimension;
2335  for (var i = indices_start; i < indices_end; i++) {
2336    var index = i32(indices[i].x);
2337    ${s1(i.length,!0)}
2338  }
2339  ${s3(r,o.type.value,!0)}
2340  }`}}},s8=t=>tM({reduction:t.reduction}),s6=(t,r)=>{t.compute(s4(t.inputs,r),{inputs:[t.inputs[1],t.inputs[2]],outputs:[]})}}),uW=q(()=>{oK(),oX(),o3(),o4(),s5=(t,r)=>{if(t.every(t=>t>0||(()=>{throw Error("Resize requires scales input values to be positive")})),t.length>0){if("linear"===r.mode){if(2!==t.length&&3!==t.length&&(4!==t.length||1!==t[0]||1!==t[1])&&(4!==t.length||1!==t[0]||1!==t[3])&&(5!==t.length||1!==t[0]||1!==t[1]))throw Error(`For linear mode, Resize requires scales to be 2D, 3D, 4D with either two outermost or one innermost and
2341            one outermost scale values equal to 1, or 5D with two outermost scale values equal to 1`)}else if("cubic"===r.mode&&2!==t.length&&(4!==t.length||1!==t[0]||1!==t[1])&&(4!==t.length||1!==t[0]||1!==t[3]))throw Error("Resize requires scales input size to be 2 or 4 for cubic mode")}},s7=(t,r,i)=>{r.every(t=>t>=0&&t<i||(()=>{throw Error("Resize requires axes input values to be positive and less than rank")}));let a=Array(i).fill(1);return r.forEach((r,i)=>a[r]=t[i]),a},s9=(t,r,i,a,n,s)=>{let[o,u,l]=i>10?[1,2,3]:[-1,t.length>1?1:-1,-1],d=t[0].dims.length;if(o>0&&t.length>o&&t[o].dims.length>0)t[o].getFloat32Array().forEach(t=>s.push(t));else if("tf_crop_and_resize"===r.coordinateTransformMode)throw Error("Resize requires RoI input to be specified when coordinateTransformMode is tfCropAndResize");if(u>0&&t.length>u&&1===t[u].dims.length&&t[u].dims[0]>0){if(t[u].getFloat32Array().forEach(t=>a.push(t)),0!==a.length&&a.length!==d&&i>=18&&a.length!==r.axes.length)throw Error("Resize requires scales input size to be same as input rank or axes size for opset 18 and up");s5(a,r),r.axes.length>0&&s7(a,r.axes,d).forEach((t,r)=>a[r]=t)}if(l>0&&t.length>l&&1===t[l].dims.length&&t[l].dims[0]>0&&(t[l].getBigInt64Array().forEach(t=>n.push(Number(t))),0!==n.length&&n.length!==d&&i>=18&&n.length!==r.axes.length))throw Error("Resize requires sizes input size to be same as input rank or axes size for opset 18 and up");if(r.axes.length>0){if(0!==a.length&&a.length!==r.axes.length)throw Error('Resize requires "scales" input size to be of axes rank when axes attributes is specified');if(0!==n.length&&n.length!==r.axes.length)throw Error('Resize requires "sizes" input size to be of rank axes rank when axes attributes is specified')}if("u">typeof a&&"u">typeof n&&a.length>0&&n.length>d)throw Error("Resize requires only of scales or sizes to be specified")},oe=(t,r,i,a)=>`
2342  // The whole part and the fractional part are calculated separately due to inaccuracy of floating
2343  // point division. As an example, f32(21) / f32(7) may evaluate to 2.99... instead of 3, causing an
2344  // offset-by-one error later in floor().
2345  let big = (${t}) * (${r});
2346  let whole = ${a}(big / (${i}));
2347  let fract = ${a}(big % (${i})) / ${a}(${i});
2348  return whole + fract;
2349`,ot=(t,r)=>`fn getOriginalCoordinateFromResizedCoordinate(xResized: u32, xScale: f32, lengthResized: u32,
2350     lengthOriginal: u32, roiStart: f32, roiEnd: f32) -> ${r} { `+(()=>{switch(t){case"asymmetric":return`
2351          if (xScale < 1.0 || floor(xScale) != xScale) {
2352            return ${r}(xResized) / ${r}(xScale);
2353          } else {
2354            ${oe("xResized","lengthOriginal","lengthResized",r)}
2355          }
2356        `;case"pytorch_half_pixel":return`if (lengthResized > 1) {
2357                    return (${r}(xResized) + 0.5) / ${r}(xScale) - 0.5;
2358                  } else {
2359                    return 0.0;
2360                  }`;case"tf_half_pixel_for_nn":return`return (${r}(xResized) + 0.5) / ${r}(xScale);`;case"align_corners":return`if (lengthResized == 1) {
2361                    return 0.0;
2362                  } else {
2363                    ${oe("xResized","lengthOriginal - 1","lengthResized - 1",r)}
2364                  }`;case"tf_crop_and_resize":return`if (lengthResized > 1) {
2365                    return ${r}(roiStart) * ${r}(lengthOriginal - 1) +
2366                        (${r}(xResized) * ${r}(roiEnd - roiStart) * ${r}(lengthOriginal - 1)) /
2367                        ${r}(lengthResized - 1);
2368                  } else {
2369                    return 0.5 * ${r}(roiStart + roiEnd) * ${r}(lengthOriginal - 1);
2370                  }`;case"half_pixel_symmetric":return`const outputWidth = ${r}xScale * ${r}(lengthResized);
2371                  const adjustment = ${r}(lengthResized) / outputWidth;
2372                  const center = ${r}(lengthOriginal) / 2;
2373                  const offset = center * (1 - adjustment);
2374                  return offset + ((${r}(xResized) + 0.5) / ${r}(xScale)) - 0.5;`;case"half_pixel":return`return ((${r}(xResized) + 0.5) / ${r}(xScale)) - 0.5;`;default:throw Error(`Coordinate transform mode ${t} is not supported`)}})()+"}",or=(t,r,i)=>`fn getNearestPixelFromOriginal(xOriginal: ${i}, isDownSample: bool) -> ${i} {`+(()=>{switch(t){case"round_prefer_ceil":return"if (fract(xOriginal) == 0.5) {             return ceil(xOriginal);           } else {             return round(xOriginal);           }";case"floor":return"return floor(xOriginal);";case"ceil":return"return ceil(xOriginal);";case"round_prefer_floor":return"if (fract(xOriginal) == 0.5) {                     return floor(xOriginal);                   } else {                     return round(xOriginal);                   }";default:if(r<11)return"if (isDownSample)                     {                       return ceil(xOriginal);                     } else {                       return xOriginal;                     }";throw Error(`Nearest mode ${t} is not supported`)}})()+"}",oi=(t,r,i)=>{let a=Array(i).fill(0).concat(Array(i).fill(1)),n=0===t.length?a:t.slice();return r.length>0?(r.forEach((t,s)=>{a[t]=n[s],a[s+i]=n[r.length+s]}),a):n},oa=(t,r,i,a)=>{let n=[];if(i.length>0)if(a.length>0){if(t.forEach(t=>n.push(t)),Math.max(...a)>t.length)throw Error("axes is out of bound");a.forEach((t,r)=>n[t]=i[r])}
2374else i.forEach(t=>n.push(t));else{if(0===r.length)throw Error("Resize requires either scales or sizes.");n=t.map((t,i)=>Math.round(t*r[i]))}return n},on=(t,r,i)=>{let a=(()=>{switch(i.keepAspectRatioPolicy){case"not_larger":return i.axes.length>0?Math.min(...i.axes.map(t=>r[t]),Number.MAX_VALUE):Math.min(...r,Number.MAX_VALUE);case"not_smaller":return i.axes.length>0?Math.max(...i.axes.map(t=>r[t]),Number.MIN_VALUE):Math.max(...r,Number.MIN_VALUE);default:throw Error(`Keep aspect ratio policy ${i.keepAspectRatioPolicy} is not supported`)}})();r.fill(1,0,r.length);let n=t.slice();return i.axes.length>0?(i.axes.forEach(t=>r[t]=a),i.axes.forEach(i=>n[i]=Math.round(t[i]*r[i]))):(r.fill(a,0,r.length),n.forEach((t,i)=>n[i]=Math.round(t*r[i]))),n},os=(t,r,i,a,n)=>`
2375    fn calculateOriginalIndicesFromOutputIndices(output_indices: ${t.type.indices}) -> array<${t.type.value}, ${i.length}> {
2376      var original_indices: array<${t.type.value}, ${i.length}>;
2377      for (var i:u32 = 0; i < ${i.length}; i++) {
2378        var output_index = ${t.indicesGet("output_indices","i")};
2379        var scale = ${tF("uniforms.scales","i",a)};
2380        var roi_low = ${tF("uniforms.roi","i",n)};
2381        var roi_hi = ${tF("uniforms.roi",`i + ${r.length}`,n)};
2382        if (scale == 1.0) {
2383          original_indices[i] = ${t.type.value}(output_index);
2384        } else {
2385          var input_shape_i = ${tF("uniforms.input_shape","i",r.length)};
2386          var output_shape_i = ${tF("uniforms.output_shape","i",i.length)};
2387          original_indices[i] = getOriginalCoordinateFromResizedCoordinate(output_index, scale, output_shape_i,
2388                                                                           input_shape_i, roi_low, roi_hi);
2389        }
2390      }
2391      return original_indices;
2392    }`,oo=(t,r,i,a,n,s,o)=>`
2393    fn calculateInputIndicesFromOutputIndices(output_indices: ${r.type.indices}) -> ${t.type.indices} {
2394      var input_indices: ${t.type.indices};
2395      for (var i:u32 = 0; i < ${a.length}; i++) {
2396        var output_index = ${r.indicesGet("output_indices","i")};
2397        var input_index: u32;
2398        var scale = ${tF("uniforms.scales","i",n)};
2399        if (scale == 1.0) {
2400          input_index = output_index;
2401        } else {
2402          var roi_low = ${tF("uniforms.roi","i",s)};
2403          var roi_hi = ${tF("uniforms.roi",`i + ${i.length}`,s)};
2404          var input_shape_i = ${tF("uniforms.input_shape","i",i.length)};
2405          var output_shape_i = ${tF("uniforms.output_shape","i",a.length)};
2406          var original_idx = getOriginalCoordinateFromResizedCoordinate(output_index, scale, output_shape_i,
2407                                                                        input_shape_i, roi_low, roi_hi);
2408          if (!${o} || (original_idx >= 0 && original_idx < ${r.type.value}(input_shape_i))) {
2409            if (original_idx < 0) {
2410              input_index = 0;
2411            } else if (original_idx > ${r.type.value}(input_shape_i - 1)) {
2412              input_index = input_shape_i - 1;
2413            } else {
2414              input_index = u32(getNearestPixelFromOriginal(original_idx, scale < 1));
2415            }
2416          } else {
2417            input_index = u32(original_idx);
2418          }
2419        }
2420        ${t.indicesSet("input_indices","i","input_index")}
2421      }
2422      return input_indices;
2423    }`,ou=(t,r)=>`
2424    fn checkInputIndices(input_indices: ${t.type.indices}) -> bool {
2425      for (var i:u32 = 0; i < ${r.length}; i++) {
2426        var input_index = ${t.indicesGet("input_indices","i")};
2427        if (input_index < 0 || input_index >= ${tF("uniforms.input_shape","i",r.length)}) {
2428          return false;
2429        }
2430      }
2431      return true;
2432    }`,ol=(t,r,i,a)=>t.rank>a?`
2433    ${t.indicesSet("input_indices",r,"channel")};
2434    ${t.indicesSet("input_indices",i,"batch")};
2435`:"",od=(t,r,i,a,n)=>{let[s,o,u,l]=2===i.length?[-1,0,1,-1]:[0,2,3,1],d=t.type.value;return`
2436    fn getInputValue(batch: u32, channel: u32, row: u32, col: u32) -> ${d} {
2437      var input_indices: ${t.type.indices};
2438      ${t.indicesSet("input_indices",o,`max(0, min(row, ${i[o]} - 1))`)};
2439      ${t.indicesSet("input_indices",u,`max(0, min(col, ${i[u]} - 1))`)};
2440      ${ol(t,l,s,2)}
2441      return ${t.getByIndices("input_indices")};
2442    }
2443
2444    fn bilinearInterpolation(output_indices: ${r.type.indices}) -> ${d} {
2445      var originalIndices = calculateOriginalIndicesFromOutputIndices(output_indices);
2446      var row:${d} = originalIndices[${o}];
2447      var col:${d} = originalIndices[${u}];
2448      ${a?`if (row < 0 || row > (${i[o]}
2448 - 1) || col < 0 || col > (${i[u]} - 1)) {
2449        return ${n};
2450      }`:""};
2451      row = max(0, min(row, ${i[o]} - 1));
2452      col = max(0, min(col, ${i[u]} - 1));
2453      var row1: u32 = u32(row);
2454      var col1: u32 = u32(col);
2455      var row2: u32 = u32(row + 1);
2456      var col2: u32 = u32(col + 1);
2457      var channel: u32 = ${i.length>2?`u32(originalIndices[${l}])`:"0"};
2458      var batch: u32 =  ${i.length>2?`u32(originalIndices[${s}])`:"0"};
2459      var x11: ${d} = getInputValue(batch, channel, row1, col1);
2460      var x12: ${d} = getInputValue(batch, channel, row1, col2);
2461      var x21: ${d} = getInputValue(batch, channel, row2, col1);
2462      var x22: ${d} = getInputValue(batch, channel, row2, col2);
2463      var dx1: ${d} = abs(row - ${d}(row1));
2464      var dx2: ${d} = abs(${d}(row2) - row);
2465      var dy1: ${d} = abs(col - ${d}(col1));
2466      var dy2: ${d} = abs(${d}(col2) - col);
2467      if (row1 == row2) {
2468        dx1 = 0.5;
2469        dx2 = 0.5;
2470      }
2471      if (col1 == col2) {
2472        dy1 = 0.5;
2473        dy2 = 0.5;
2474      }
2475      return (x11 * dx2 * dy2 + x12 * dx2 * dy1 + x21 * dx1 * dy2 + x22 * dx1 * dy1);
2476    }`},op=(t,r,i,a,n,s,o,u,l,d)=>{let[p,c]=2===i.length?[0,1]:[2,3],h=t.type.value,f=o=>{let c=o===p?"row":"col";return`
2477      fn ${c}CubicInterpolation(input_indices: ${t.type.indices}, output_indices: ${r.type.indices}) -> ${h} {
2478        var output_index = ${r.indicesGet("output_indices",o)};
2479        var originalIdx: ${h} = getOriginalCoordinateFromResizedCoordinate(output_index, ${n[o]},
2480        ${a[o]}, ${i[o]}, ${s[o]}, ${s[o]} + ${i.length});
2481        var fractOriginalIdx: ${h} = originalIdx - floor(originalIdx);
2482        var coefs = getCubicInterpolationCoefs(fractOriginalIdx);
2483
2484        if (${u} && (originalIdx < 0 || originalIdx > (${i[o]} - 1))) {
2485          return ${l};
2486        }
2487        var data: array<${h}, 4> = array<${h}, 4>(0.0, 0.0, 0.0, 0.0);
2488        for (var i: i32 = -1; i < 3; i++) {
2489          var ${c}: ${h} = originalIdx + ${h}(i);
2490          if (${c} < 0 || ${c} >= ${i[o]}) {
2491            ${d?`coefs[i + 1] = 0.0;
2492                        continue;`:u?`return ${l};`:`${c} = max(0, min(${c}, ${i[o]} - 1));`};
2493          }
2494        var input_indices_copy: ${t.type.indices} = input_indices;
2495          ${t.indicesSet("input_indices_copy",o,`u32(${c})`)};
2496          data[i + 1] = ${o===p?t.getByIndices("input_indices_copy"):"rowCubicInterpolation(input_indices_copy, output_indices)"};
2497        }
2498        return cubicInterpolation1D(data, coefs);
2499      }`};return`
2500    ${f(p)};
2501    ${f(c)};
2502  fn getCubicInterpolationCoefs(s: ${h}) -> array<${h}, 4> {
2503    var absS = abs(s);
2504    var coeffs: array<${h}, 4> = array<${h}, 4>(0.0, 0.0, 0.0, 0.0);
2505    var oneMinusAbsS: ${h} = 1.0 - absS;
2506    var twoMinusAbsS: ${h} = 2.0 - absS;
2507    var onePlusAbsS: ${h} = 1.0 + absS;
2508    coeffs[0] = ((${o} * onePlusAbsS - 5 * ${o}) * onePlusAbsS + 8 * ${o}) * onePlusAbsS - 4 * ${o};
2509    coeffs[1] = ((${o} + 2) * absS - (${o} + 3)) * absS * absS + 1;
2510    coeffs[2] = ((${o} + 2) * oneMinusAbsS - (${o} + 3)) * oneMinusAbsS * oneMinusAbsS + 1;
2511    coeffs[3] = ((${o} * twoMinusAbsS - 5 * ${o}) * twoMinusAbsS + 8 * ${o}) * twoMinusAbsS - 4 * ${o};
2512    return coeffs;
2513  }
2514
2515  fn cubicInterpolation1D(x: array<${h}, 4>, coefs: array<${h}, 4>) -> ${h} {
2516    var coefsSum: ${h} = coefs[0] + coefs[1] + coefs[2] + coefs[3];
2517    return (x[0] * coefs[0] + x[1] * coefs[1]+ x[2] * coefs[2]+ x[3] * coefs[3]) / coefsSum;
2518  }
2519
2520  fn bicubicInterpolation(output_indices: ${r.type.indices}) -> ${h} {
2521    var input_indices: ${t.type.indices} = output_indices;
2522    return colCubicInterpolation(input_indices, output_indices);
2523  }
2524    `},oc=(t,r,i,a,n)=>{let[s,o,u,l,d]=3===i.length?[-1,0,1,2,-1]:[0,2,3,4,1],p=t.type.value;return`
2525    fn getInputValue(batch: u32, channel: u32, depth:u32, height: u32, width: u32) -> ${p} {
2526      var input_indices: ${t.type.indices};
2527      ${t.indicesSet("input_indices",o,`max(0, min(depth, ${i[o]} - 1))`)};
2528      ${t.indicesSet("input_indices",u,`max(0, min(height, ${i[u]} - 1))`)};
2529      ${t.indicesSet("input_indices",l,`max(0, min(width, ${i[l]} - 1))`)};
2530      ${ol(t,d,s,3)}
2531      return ${t.getByIndices("input_indices")};
2532    }
2533
2534    fn trilinearInterpolation(output_indices: ${r.type.indices}) -> ${p} {
2535      var originalIndices = calculateOriginalIndicesFromOutputIndices(output_indices);
2536      var depth:${p} = originalIndices[${o}];
2537      var height:${p} = originalIndices[${u}];
2538      var width:${p} = originalIndices[${l}];
2539      ${a?`if (depth < 0 || depth > (${i[o]} - 1) || height < 0 || height > (${i[u]} - 1) || width < 0 || (width > ${i[l]} - 1)) {
2540      return ${n};
2541        }`:""};
2542
2543    depth = max(0, min(depth, ${i[o]} - 1));
2544      height = max(0, min(height, ${i[u]} - 1));
2545      width = max(0, min(width, ${i[l]} - 1));
2546      var depth1: u32 = u32(depth);
2547      var height1: u32 = u32(height);
2548      var width1: u32 = u32(width);
2549      var depth2: u32 = u32(depth + 1);
2550      var height2: u32 = u32(height + 1);
2551      var width2: u32 = u32(width + 1);
2552      var channel: u32 = ${i.length>3?`u32(originalIndices[${d}])`:"0"};
2553      var batch: u32 =  ${i.length>3?`u32(originalIndices[${s}])`:"0"};
2554
2555      var x111: ${p} = getInputValue(batch, channel, depth1, height1, width1);
2556      var x112: ${p} = getInputValue(batch, channel, depth1, height1, width2);
2557      var x121: ${p} = getInputValue(batch, channel, depth1, height2, width1);
2558      var x122: ${p} = getInputValue(batch, channel, depth1, height2, width2);
2559      var x211: ${p} = getInputValue(batch, channel, depth2, height1, width1);
2560      var x212: ${p} = getInputValue(batch, channel, depth2, height1, width2);
2561      var x221: ${p} = getInputValue(batch, channel, depth2, height2, width1);
2562      var x222: ${p} = getInputValue(batch, channel, depth2, height2, width2);
2563      var dx1: ${p} = abs(depth - ${p}(depth1));
2564      var dx2: ${p} = abs(${p}(depth2) - depth);
2565      var dy1: ${p} = abs(height - ${p}(height1));
2566      var dy2: ${p} = abs(${p}(height2) - height);
2567      var dz1: ${p} = abs(width - ${p}(width1));
2568      var dz2: ${p} = abs(${p}(width2) - width);
2569      if (depth1 == depth2) {
2570        dx1 = 0.5;
2571        dx2 = 0.5;
2572      }
2573      if (height1 == height2) {
2574        dy1 = 0.5;
2575        dy2 = 0.5;
2576      }
2577      if (width1 == width2) {
2578        dz1 = 0.5;
2579        dz2 = 0.5;
2580      }
2581      return (x111 * dx2 * dy2 * dz2 + x112 * dx2 * dy2 * dz1 + x121 * dx2 * dy1 *dz2 + x122 * dx2 * dy1 * dz1 +
2582              x211 * dx1 * dy2 * dz2 + x212 * dx1 * dy2 * dz1 + x221 * dx1 * dy1 *dz2 + x222 * dx1 * dy1 * dz1);
2583    }`},oh=(t,r,i,a,n,s)=>{let o=t.dims,u=oi(s,r.axes,o.length),l=oa(o,a,n,r.axes),d=a.slice();0===a.length&&(d=o.map((t,r)=>0===t?1:l[r]/t),"stretch"!==r.keepAspectRatioPolicy&&(l=on(o,d,r)));let p=tZ("output",t.dataType,l.length),c=tK("input",t.dataType,o.length),h=ts.size(l),f=o.length===l.length&&o.every((t,r)=>t===l[r]),m="tf_crop_and_resize"===r.coordinateTransformMode,g=r.extrapolationValue,y=c.type.value;return{name:"Resize",shaderCache:{hint:`${r.cacheKey}|${i}|${d.length>0?"cubic"===r.mode?d:d.length:""}|${n.length>0?n:""}|${u.length>0?u:""}|${f}|${"nearest"===r.mode?o.length:o}`,inputDependencies:["rank"]},getShaderSource:t=>`
2584      ${f?"":`
2585      ${ot(r.coordinateTransformMode,y)};
2586      ${(()=>{switch(r.mode){case"nearest":return`
2587              ${ou(c,o)};
2588              ${or(r.nearestMode,i,y)};
2589              ${oo(c,p,o,l,d.length,u.length,m)};
2590              `;case"linear":return`
2591              ${os(p,o,l,d.length,u.length)};
2592              ${(()=>{if(2===o.length||4===o.length)return`${od(c,p,o,m,g)}`;if(3===o.length||5===o.length)return`${oc(c,p,o,m,g)}`;throw Error("Linear mode only supports input dims 2, 3, 4 and 5 are supported in linear mode.")})()};
2593            `;case"cubic":return`
2594            ${(()=>{if(2===o.length||4===o.length)return`${op(c,p,o,l,d,u,r.cubicCoeffA,m,r.extrapolationValue,r.excludeOutside)}`;throw Error("Cubic mode only supports input dims 2 and 4 are supported in linear mode.")})()};
2595            `;default:throw Error("Invalid resize mode")}})()};
2596      `}
2597      ${t.registerUniform("output_size","u32").registerUniform("scales","f32",d.length).registerUniform("roi","f32",u.length).declareVariables(c,p)}
2598      ${t.mainStart()}
2599        ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
2600        ${f?"output[global_idx] = input[global_idx];":`
2601        let output_indices = ${p.offsetToIndices("global_idx")};
2602        var input_indices: ${c.type.indices};
2603        ${(()=>{switch(r.mode){case"nearest":return`input_indices = calculateInputIndicesFromOutputIndices(output_indices);
2604                if (checkInputIndices(input_indices)) {
2605                  output[global_idx] = ${c.getByIndices("input_indices")};
2606                } else {
2607                  output[global_idx] = ${r.extrapolationValue};
2608                }`;case"linear":return`output[global_idx] = ${2===o.length||4===o.length?"bilinearInterpolation":"trilinearInterpolation"}(output_indices);`;case"cubic":return"output[global_idx] = bicubicInterpolation(output_indices);";default:throw Error(`Unsupported resize mode: ${r.mode}`)}})()};
2609`}
2610      }`,getRunData:()=>({outputs:[{dims:l,dataType:t.dataType}],dispatchGroup:{x:Math.ceil(h/64)},programUniforms:[{type:12,data:h},{type:1,data:d}
2610,{type:1,data:u},...tW(o,l)]})}},of=t=>{let r=t.customDataBuffer;return new Uint32Array(r,r.byteOffset,1)[0]},om=(t,r)=>{let i=[],a=[],n=[],s=of(t);if(0!==r.antialias)throw Error("Only default value (0) for Antialias attribute is supported");s9(t.inputs,r,s,i,a,n),t.compute(oh(t.inputs[0],r,s,i,a,n),{inputs:[0]})},og=t=>{let r=t.antialias,i=t.axes,a=t.coordinateTransformMode,n=t.cubicCoeffA,s=0!==t.excludeOutside,o=t.extrapolationValue,u=t.keepAspectRatioPolicy,l=t.mode,d=""===t.nearestMode?"simple":t.nearestMode;return tM({antialias:r,axes:i,coordinateTransformMode:a,cubicCoeffA:n,excludeOutside:s,extrapolationValue:o,keepAspectRatioPolicy:u,mode:l,nearestMode:d})}}),uL=q(()=>{oK(),oX(),o4(),oy=t=>{if(!t||t.length<3)throw Error("layerNorm requires at least 3 inputs.");let r=t[0],i=t[1],a=t[2];if(r.dataType!==i.dataType||r.dataType!==a.dataType)throw Error("All inputs must have the same data type");if(3!==r.dims.length&&2!==r.dims.length)throw Error("Input must be 2D or 3D");if(3!==i.dims.length&&2!==i.dims.length)throw Error("Skip must be 2D or 3D");let n=r.dims[r.dims.length-1],s=r.dims[r.dims.length-2];if(i.dims[i.dims.length-1]!==n)throw Error("Skip must have the same hidden size as input");if(i.dims[i.dims.length-2]!==s)throw Error("Skip must have the same sequence length as input");if(1!==a.dims.length)throw Error("Gamma must be 1D");if(a.dims[a.dims.length-1]!==n)throw Error("Gamma must have the same hidden size as input");if(t.length>3){let r=t[3];if(1!==r.dims.length)throw Error("Beta must be 1D");if(r.dims[r.dims.length-1]!==n)throw Error("Beta must have the same hidden size as input")}if(t.length>4){let r=t[4];if(1!==r.dims.length)throw Error("Bias must be 1D");if(r.dims[r.dims.length-1]!==n)throw Error("Bias must have the same hidden size as input")}},o_=(t,r,i,a)=>{let n=r.simplified,s=t[0].dims,o=ts.size(s),u=s.slice(-1)[0],l=a?s.slice(0,-1).concat(1):[],d=!n&&t.length>3,p=t.length>4,c=a&&i>1,h=a&&i>2,f=i>3,m=tL(u),g=[{type:12,data:o},{type:12,data:m},{type:12,data:u},{type:1,data:r.epsilon}],y=[{dims:s,dataType:t[0].dataType}];return i>1&&y.push({dims:l,dataType:1}),i>2&&y.push({dims:l,dataType:1}),i>3&&y.push({dims:s,dataType:t[0].dataType}),{name:"SkipLayerNormalization",shaderCache:{hint:`${m};${c};${h};${f}`,inputDependencies:t.map((t,r)=>"type")},getShaderSource:r=>{let i=[tK("x",t[0].dataType,t[0].dims,m),tK("skip",t[1].dataType,t[1].dims,m),tK("gamma",t[2].dataType,t[2].dims,m)];d&&i.push(tK("beta",t[3].dataType,t[3].dims,m)),p&&i.push(tK("bias",t[4].dataType,t[4].dims,m)),i.push(tZ("output",t[0].dataType,s,m)),c&&i.push(tZ("mean_output",1,l)),h&&i.push(tZ("inv_std_output",1,l)),f&&i.push(tZ("input_skip_bias_sum",t[0].dataType,s,m));let a=tU(t[0].dataType),o=tU(1,m);return`
2611
2612      ${r.registerUniforms([{name:"output_size",type:"u32"},{name:"components",type:"u32"},{name:"hidden_size",type:"u32"},{name:"epsilon",type:"f32"}]).declareVariables(...i)}
2613      var<workgroup> sum_shared : array<${o}, 64>;
2614      var<workgroup> sum_squared_shared : array<${o}, 64>;
2615
2616      ${r.mainStart([64,1,1])}
2617        let ix = local_id.x;
2618        let iy = global_id.x / 64;
2619
2620        let hidden_size_vectorized: u32 = uniforms.hidden_size / uniforms.components;
2621        var stride = hidden_size_vectorized / 64;
2622        let offset = ix * stride + iy * hidden_size_vectorized;
2623        let offset1d = stride * ix;
2624        if (ix == 63) {
2625          stride = hidden_size_vectorized - stride * ix;
2626        }
2627        for (var i: u32 = 0; i < stride; i++) {
2628          let skip_value = skip[offset + i];
2629          let bias_value = ${p?"bias[offset1d + i]":a+"(0.0)"};
2630          let input_value = x[offset + i];
2631          let value = input_value + skip_value + bias_value;
2632          ${f?"input_skip_bias_sum[offset + i] = value;":""}
2633          output[offset + i] = value;
2634          let f32_value = ${tG(a,m,"value")};
2635          sum_shared[ix] += f32_value;
2636          sum_squared_shared[ix] += f32_value * f32_value;
2637        }
2638        workgroupBarrier();
2639
2640        var reduce_size : u32 = 64;
2641        for (var curr_size = reduce_size >> 1;  curr_size > 0; curr_size = reduce_size >> 1) {
2642          reduce_size = curr_size + (reduce_size & 1);
2643          if (ix < curr_size) {
2644            sum_shared[ix] += sum_shared[ix + reduce_size];
2645            sum_squared_shared[ix] += sum_squared_shared[ix + reduce_size];
2646          }
2647          workgroupBarrier();
2648        }
2649
2650        let sum = sum_shared[0];
2651        let square_sum = sum_squared_shared[0];
2652        let mean = ${tH("sum",m)} / f32(uniforms.hidden_size);
2653        let inv_std_dev = inverseSqrt(${tH("square_sum",m)} / f32(uniforms.hidden_size) ${n?"":"- mean * mean"} + uniforms.epsilon);
2654        ${c?"mean_output[global_idx] = mean;":""}
2655        ${h?"inv_std_output[global_idx] = inv_std_dev;":""}
2656
2657        for (var i: u32 = 0; i < stride; i++) {
2658          output[offset + i] = (output[offset + i] ${n?"":`- ${a}(mean)`}) *
2659            ${a}(inv_std_dev) * gamma[offset1d + i]
2660            ${d?"+ beta[offset1d + i]":""};
2661        }
2662      }`},getRunData:()=>({outputs:y,dispatchGroup:{x:Math.ceil(o/u)},programUniforms:g})}},ob=(t,r)=>{oy(t.inputs);let i=[0];t.outputCount>1&&i.push(-3),t.outputCount>2&&i.push(-3),t.outputCount>3&&i.push(3),t.compute(o_(t.inputs,r,t.outputCount,!1),{outputs:i})}}),uV=q(()=>{oK(),oX(),o3(),o4(),o$=(t,r)=>{if(!t||t.length<1)throw Error("too few inputs");if(0!==r.axes.length){if(r.axes.length!==r.starts.length||r.axes.length!==r.ends.length)throw Error("axes, starts and ends must have the same length")}else if(r.starts.length!==r.ends.length)throw Error("starts and ends must have the same length");
2662t.slice(1).forEach((r,i)=>{if(6!==t[i+1].dataType&&7!==t[i+1].dataType)throw Error(`Input ${i} must be an array of int32 or int64`)})},ov=(t,r)=>{let i=[];if(t.length>r)if(7===t[r].dataType)t[r].getBigInt64Array().forEach(t=>i.push(Number(t)));else if(6===t[r].dataType)t[r].getInt32Array().forEach(t=>i.push(Number(t)));else throw Error(`Input ${r} must be an array of int32 or int64`);return i},ow=(t,r)=>{if(!(t.length>1))return r;{let r=ov(t,1),i=ov(t,2),a=ov(t,3);return 0===a.length&&(a=[...Array(t[0].dims.length).keys()]),tM({starts:r,ends:i,axes:a})}},ox=(t,r,i,a,n)=>{let s=t;return t<0&&(s+=i[a[r]]),n[r]<0?Math.max(0,Math.min(s,i[a[r]]-1)):Math.max(0,Math.min(s,i[a[r]]))},ok=(t,r,i)=>`fn calculateInputIndices(output_indices: ${r.type.indices}) -> ${t.type.indices} {
2663          var input_indices: ${t.type.indices};
2664          var carry = 0u;
2665          for (var i = ${i.length}; i >= 0; i--) {
2666            let input_shape_i = ${tF("uniforms.input_shape","i",i.length)};
2667            let steps_i = ${tF("uniforms.steps","i",i.length)};
2668            let signs_i = ${tF("uniforms.signs","i",i.length)};
2669            let starts_i = ${tF("uniforms.starts","i",i.length)};
2670            var output_index = ${r.indicesGet("output_indices","i")};
2671            var input_index = output_index * steps_i + starts_i + carry;
2672            carry = input_index / input_shape_i;
2673            input_index = input_index % input_shape_i;
2674            if (signs_i < 0) {
2675              input_index = input_shape_i - input_index - 1u + starts_i;
2676            }
2677            ${t.indicesSet("input_indices","i","input_index")};
2678          }
2679          return input_indices;
2680      }`,oS=(t,r)=>{let i=t[0].dims,a=ts.size(i),n=r.axes.length>0?ts.normalizeAxes(r.axes,i.length):[...Array(i.length).keys()],s=ov(t,4);s.forEach(t=>0!==t||(()=>{throw Error("step cannot be 0")})),0===s.length&&(s=Array(n.length).fill(1));let o=r.starts.map((t,r)=>ox(t,r,i,n,s)),u=r.ends.map((t,r)=>ox(t,r,i,n,s));if(n.length!==o.length||n.length!==u.length)throw Error("start, ends and axes should have the same number of elements");if(n.length!==i.length)for(let t=0;t<i.length;++t)n.includes(t)||(o.splice(t,0,0),u.splice(t,0,i[t]),s.splice(t,0,1));let l=s.map(t=>Math.sign(t));s.forEach((t,r,i)=>{if(t<0){let a=(u[r]-o[r])/t,n=o[r],l=n+a*s[r];o[r]=l,u[r]=n,i[r]=-t}});let d=i.slice(0);n.forEach((t,r)=>{d[t]=Math.ceil((u[t]-o[t])/s[t])});let p={dims:d,dataType:t[0].dataType},c=tZ("output",t[0].dataType,d.length),h=tK("input",t[0].dataType,t[0].dims.length),f=ts.size(d),m=[{name:"outputSize",type:"u32"},{name:"starts",type:"u32",length:o.length},{name:"signs",type:"i32",length:l.length},{name:"steps",type:"u32",length:s.length}],g=[{type:12,data:f},{type:12,data:o},{type:6,data:l},{type:12,data:s},...tW(t[0].dims,d)];return{name:"Slice",shaderCache:{hint:`${l.length}_${o.length}_${s.length}`,inputDependencies:["rank"]},getShaderSource:t=>`
2681      ${t.registerUniforms(m).declareVariables(h,c)}
2682        ${ok(h,c,i)}
2683        ${t.mainStart()}
2684          ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}
2685          let output_indices = ${c.offsetToIndices("global_idx")};
2686          let input_indices = calculateInputIndices(output_indices);
2687          ${c.setByOffset("global_idx",h.getByIndices("input_indices"))}
2688      }`,getRunData:()=>({outputs:[p],dispatchGroup:{x:Math.ceil(a/64)},programUniforms:g})}},oT=(t,r)=>{o$(t.inputs,r);let i=ow(t.inputs,r);t.compute(oS(t.inputs,i),{inputs:[0]})},oI=t=>{let r=t.starts,i=t.ends,a=t.axes;return tM({starts:r,ends:i,axes:a})}}),uG=q(()=>{oK(),oX(),o3(),o8(),o4(),oE=t=>{if(!t||1!==t.length)throw Error("Softmax op requires 1 input.")},oC=(t,r)=>{let i=t.inputs[0],a=i.dims,n=ts.size(a),s=a.length,o=ts.normalizeAxis(r.axis,s),u=o<a.length-1,l,d=[];u?((d=Array.from({length:s},(t,r)=>r))[o]=s-1,d[s-1]=o,l=t.compute(t6(i,d),{inputs:[i],outputs:[-1]})[0]):l=i;let p=l.dims,c=p[s-1],h=n/c,f=tL(c),m=c/f,g=64;1===h&&(g=256);let y=(t,r)=>4===r?`max(max(${t}.x, ${t}.y), max(${t}.z, ${t}.w))`:2===r?`max(${t}.x, ${t}.y)`:3===r?`max(max(${t}.x, ${t}.y), ${t}.z)`:t,_=tK("x",l.dataType,l.dims,f),b=tZ("result",l.dataType,l.dims,f),$=_.type.value,v="f32"===tU(l.dataType)?`var threadMax = ${$}(-3.402823e+38f);`:`var threadMax = ${$}(-65504.0h);`,w=t.compute({name:"Softmax",shaderCache:{hint:`${f};${g}`,inputDependencies:["type"]},getRunData:()=>({outputs:[{dims:p,dataType:l.dataType}],dispatchGroup:{x:h},programUniforms:[{type:6,data:m}]}),getShaderSource:t=>`
2689      var<workgroup> rowMaxShared : ${$};
2690      var<workgroup> rowSumShared : ${$};
2691      var<workgroup> threadShared : array<${$}, ${g}>;
2692
2693      fn getValue(row: i32, col: i32, row_stride: i32) -> ${$} {
2694        let index = row * row_stride + col;
2695        return x[index];
2696      }
2697
2698      fn setValue(row: i32, col: i32, row_stride: i32, value: ${$}) {
2699        let index = row * row_stride + col;
2700        result[index] = value;
2701      }
2702      ${t.registerUniform("packedCols","i32").declareVariables(_,b)}
2703      ${t.mainStart(g)}
2704        let gindex = i32(global_idx);
2705        let lindex = i32(local_idx);
2706        const wg = ${g};
2707        let row = gindex / wg;
2708        let cols = uniforms.packedCols;
2709        let row_stride : i32 = uniforms.packedCols;
2710
2711        // find the rows max
2712        ${v}
2713        for (var col = lindex; col < cols; col += wg) {
2714          let value = getValue(row, col, row_stride);
2715          threadMax = max(threadMax, value);
2716        }
2717        if (lindex < cols) {
2718          threadShared[lindex] = threadMax;
2719        }
2720        workgroupBarrier();
2721
2722        var reduceSize = min(cols, wg);
2723        for (var currSize = reduceSize >> 1;  currSize > 0; currSize = reduceSize >> 1) {
2724          reduceSize = currSize + (reduceSize & 1);
2725          if (lindex < currSize) {
2726            threadShared[lindex] = max(threadShared[lindex], threadShared[lindex + reduceSize]);
2727          }
2728          workgroupBarrier();
2729        }
2730        if (lindex == 0) {
2731          rowMaxShared = ${$}(${y("threadShared[0]",f)});
2732        }
2733        workgroupBarrier();
2734
2735        // find the rows sum
2736        var threadSum = ${$}(0.0);
2737        for (var col = lindex; col < cols; col += wg) {
2738          let subExp = exp(getValue(row, col, row_stride) - rowMaxShared);
2739          threadSum += subExp;
2740        }
2741        threadShared[lindex] = threadSum;
2742        workgroupBarrier();
2743
2744        for (var currSize = wg >> 1;  currSize > 0; currSize = currSize >> 1) {
2745          if (lindex < currSize) {
2746            threadShared[lindex] = threadShared[lindex] + threadShared[lindex + currSize];
2747          }
2748          workgroupBarrier();
2749        }
2750        if (lindex == 0) {
2751          rowSumShared = ${$}(${tH("threadShared[0]",f)});
2752        }
2753        workgroupBarrier();
2754
2755        // calculate final value for each element in the row
2756        for (var col = lindex; col < cols; col += wg) {
2757          let value = exp(getValue(row, col, row_stride) - rowMaxShared) / rowSumShared;
2758          setValue(row, col, row_stride, value);
2759        }
2760      }`},{inputs:[l],outputs:[u?-1:0]})[0];u&&t.compute(t6(w,d),{inputs:[w]})},oz=(t,r)=>{oE(t.inputs),oC(t,r)},oA=t=>tM({axis:t.axis})}),uH=q(()=>{oK(),oX(),o4(),oO=t=>Array.from(t.getBigInt64Array(),Number),oR=t=>{if(!t||2!==t.length)throw Error("Tile requires 2 inputs.");if(1!==t[0].dataType&&10!==t[0].dataType&&6!==t[0].dataType&&12!==t[0].dataType)throw Error("Tile only support float, float16, int32, and uint32 data types");if(7!==t[1].dataType)throw Error("Tile `repeats` input should be of int64 data type");if(1!==t[1].dims.length)throw Error("Tile `repeats` input should be 1-D");if(oO(t[1]).length!==t[0].dims.length)throw Error("Tile `repeats` input should have same number of elements as rank of input data tensor")},oB=(t,r)=>{let i=[];for(let a=0;a<t.length;++a)i.push(t[a]*r[a]);return i},oN=(t,r)=>{let i=t[0].dims,a=r??oO(t[1]),n=oB(i,a),s=ts.size(n),o=t[0].dataType,u=tK("input",o,i.length),l=tZ("output",o,n.length);return{name:"Tile",shaderCache:{hint:`${a}`,inputDependencies:["rank"]},getRunData:()=>({outputs:[{dims:n,dataType:t[0].dataType}],dispatchGroup:{x:Math.ceil(s/64)},programUniforms:[{type:12,data:s},...tW(t[0].dims,n)]}),getShaderSource:t=>`
2761      const inputShape = ${u.indices(...i)};
2762      ${t.registerUniform("output_size","u32").declareVariables(u,l)}
2763      ${t.mainStart()}
2764      ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}
2765      let output_indices = ${l.offsetToIndices("global_idx")};
2766      var input_indices: ${u.type.indices};
2767      for (var i = 0; i < ${i.length}; i++) {
2768        let input_dim_i = ${u.indicesGet("uniforms.input_shape","i")};
2769        let input_dim_value = ${l.indicesGet("output_indices","i")}  % input_dim_i;
2770
2771        ${u.indicesSet("input_indices","i","input_dim_value")}
2772      }
2773      ${l.setByOffset("global_idx",u.getByIndices("input_indices"))}
2774    }`}},oM=t=>{oR(t.inputs),t.compute(oN(t.inputs),{inputs:[0]})}}),uF=q(()=>{oK(),oX(),o4(),oD=(t,r,i,a,n)=>{let s=tZ("output_data",n,i.length,4),o=tK("a_data",r[1].dataType,r[1].dims.length,4),u=tK("b_data",r[2].dataType,r[2].dims.length,4),l=tK("c_data",r[0].dataType,r[0].dims.length,4),d,p=(t,r,i)=>`select(${r}, ${t}, ${i})`;if(a){let t=(t,r,i="")=>{let a=`a_data[index_a${r}][component_a${r}]`,n=`b_data[index_b${r}][component_b${r}]`,d=`bool(c_data[index_c${r}] & (0xffu << (component_c${r} * 8)))`;return`
2775            let output_indices${r} = ${s.offsetToIndices(`global_idx * 4u + ${r}u`)};
2776            let offset_a${r} = ${o.broadcastedIndicesToOffset(`output_indices${r}`,s)};
2777            let offset_b${r} = ${u.broadcastedIndicesToOffset(`output_indices${r}`,s)};
2778            let offset_c${r} = ${l.broadcastedIndicesToOffset(`output_indices${r}`,s)};
2779            let index_a${r} = offset_a${r} / 4u;
2780            let index_b${r} = offset_b${r} / 4u;
2781            let index_c${r} = offset_c${r} / 4u;
2782            let component_a${r} = offset_a${r} % 4u;
2783            let component_b${r} = offset_b${r} % 4u;
2784            let component_c${r} = offset_c${r} % 4u;
2785            ${t}[${r}] = ${i}(${p(a,n,d)});
2786          `};d=9===n?`
2787            var data = vec4<u32>(0);
2788            ${t("data",0,"u32")}
2789            ${t("data",1,"u32")}
2790            ${t("data",2,"u32")}
2791            ${t("data",3,"u32")}
2792            output_data[global_idx] = dot(vec4<u32>(0x1, 0x100, 0x10000, 0x1000000), vec4<u32>(data));`:`
2793            ${t("output_data[global_idx]",0)}
2794            ${t("output_data[global_idx]",1)}
2795            ${t("output_data[global_idx]",2)}
2796            ${t("output_data[global_idx]",3)}
2797          `}else d=s.setByOffset("global_idx",p(o.getByOffset("global_idx"),u.getByOffset("global_idx"),l.getByOffset("global_idx")));return`
2798        ${t.registerUniform("vec_size","u32").declareVariables(l,o,u,s)}
2799        ${t.mainStart()}
2800        ${t.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")}
2801        ${d}
2802      }`},oP=t=>{let r=t[1].dims,i=t[2].dims,a=t[0].dims,n=t[1].dataType,s=!(ts.areEqual(r,i)&&ts.areEqual(i,a)),o=r,u=ts.size(r);if(s){let t=tn.calcShape(tn.calcShape(r,i,!1),a,!1);if(!t)throw Error("Can't perform where op on the given tensors");o=t,u=ts.size(o)}let l=Math.ceil(u/4);return{name:"Where",shaderCache:{inputDependencies:["rank","rank","rank"]},getShaderSource:r=>oD(r,t,o,s,n),getRunData:()=>({outputs:[{dims:o,dataType:n}],dispatchGroup:{x:Math.ceil(u/64/4)},programUniforms:[{type:12,data:l},...tW(a,r,i,o)]})}},oU=t=>{t.compute(oP(t.inputs))}}),uj=q(()=>{o7(),o9(),ue(),ut(),ui(),ua(),un(),uf(),ug(),uy(),u_(),ub(),u$(),uv(),uw(),ux(),uk(),uS(),uT(),uI(),uA(),uO(),uR(),uB(),uN(),uE(),uM(),uD(),uP(),uU(),uq(),o5(),uW(),uz(),uL(),uV(),uG(),uC(),uH(),o8(),ur(),uF(),oq=new Map([["Abs",[ii]],["Acos",[ia]],["Acosh",[is]],["Add",[i0]],["ArgMax",[rK,rZ]],["ArgMin",[rj,rZ]],["Asin",[io]],["Asinh",[iu]],["Atan",[il]],["Atanh",[id]],["Attention",[r3]],["AveragePool",[sU,sP]],["BatchNormalization",[r5]],["BiasAdd",[ie]],["BiasSplitGelu",[iQ]],["Cast",[ic,ip]],["Ceil",[ig]],["Clip",[im]],["Concat",[aa,an]],["Conv",[aV,aU]],["ConvTranspose",[aJ,aZ]],["Cos",[iy]],["Cosh",[i_]],["CumSum",[a2,a1]],["DepthToSpace",[a6,a5]],["DequantizeLinear",[sQ,sX]],["Div",[i2]],["Einsum",[ns,no]],["Elu",[i$,ib]],["Equal",[i1]],["Erf",[iw]],["Exp",[ix]],["Expand",[nc]],["FastGelu",[nf]],["Floor",[ik]],["FusedConv",[aV,aU]],["Gather",[n_,ny]],["GatherElements",[nC,nE]],["GatherBlockQuantized",[nk,nS]],["GatherND",[n$,nv]],["Gelu",[iS]],["Gemm",[nR,nO]],["GlobalAveragePool",[sL,sW]],["GlobalMaxPool",[sj,sF]],["Greater",[i6]],["GreaterOrEqual",[i7]],["GridSample",[nF,nj]],["GroupQueryAttention",[sn]],["HardSigmoid",[iR,iO]],["InstanceNormalization",[sl]],["LayerNormalization",[sc]],["LeakyRelu",[iT,ib]],["Less",[i5]],["LessOrEqual",[i9]],["Log",[iG]],["MatMul",[sf]],["MatMulNBits",[s_,sb]],["MaxPool",[sG,sH]],["Mul",[i3]],["MultiHeadAttention",[n0,nQ]],["Neg",[iE]],["Not",[iI]],["Pad",[sE]],["Pow",[i4]],["QuickGelu",[ij,ib]],["Range",[s0]],["Reciprocal",[iC]],["ReduceMin",[rW]],["ReduceMean",[rM]],["ReduceMax",[rq]],["ReduceSum",[rV]],["ReduceProd",[rL]],["ReduceL1",[rD]],["ReduceL2",[rP]],["ReduceLogSum",[rH]],["ReduceLogSumExp",[rU]],["ReduceSumSquare",[rG]],["Relu",[iz]],["Resize",[om,og]],["RotaryEmbedding",[se]],["ScatterND",[s6,s8]],["Sigmoid",[iA]],["Sin",[iB]],["Sinh",[iN]],["Slice",[oT,oI]],["SkipLayerNormalization",[ob]],["Split",[n6,n5]],["Sqrt",[iM]],["Softmax",[oz,oA]],["Sub",[i8]],["Tan",[iD]],["Tanh",[iU]],["ThresholdedRelu",[iV,ib]],["Tile",[oM]],["Transpose",[t5,t7]],["Where",[oU]]])}),uK=q(()=>{el(),oQ(),o4(),oW=class{constructor(t){this.backend=t,this.repo=new Map,this.attributesBound=!1}getArtifact(t){return this.repo.get(t)}setArtifact(t,r){this.repo.set(t,r)}run(t,r,i,a,n){A(t.programInfo.name);let s=this.backend.device,o=this.backend.getComputePassEncoder();this.backend.writeTimestamp(2*this.backend.pendingDispatchNumber);let u=[];for(let t of r)u.push({binding:u.length,resource:{buffer:t.buffer}});for(let t of i)u.push({binding:u.length,resource:{buffer:t.buffer}});n&&u.push({binding:u.length,resource:n});let l=s.createBindGroup({layout:t.computePipeline.getBindGroupLayout(0),entries:u,label:t.programInfo.name});if("capturing"===this.backend.sessionStatus){let r={kernelId:this.backend.currentKernelId,computePipeline:t.computePipeline,bindGroup:l,dispatchGroup:a};this.backend.capturedCommandList.get(this.backend.currentSessionId).push(r)}o.setPipeline(t.computePipeline),o.setBindGroup(0,l),o.dispatchWorkgroups(...a),this.backend.writeTimestamp(2*this.backend.pendingDispatchNumber+1),this.backend.pendingDispatchNumber++,(this.backend.pendingDispatchNumber>
2802=this.backend.maxDispatchNumber||"at-passes"===this.backend.queryType)&&this.backend.endComputePass(),this.backend.pendingDispatchNumber>=this.backend.maxDispatchNumber&&this.backend.flush(),O(t.programInfo.name)}dispose(){}build(t,r){A(t.name);let i=this.backend.device,a=[];[{feature:"shader-f16",extension:"f16"},{feature:"subgroups",extension:"subgroups"}].forEach(t=>{i.features.has(t.feature)&&a.push(`enable ${t.extension};`)});let n=tJ(r,this.backend.device.limits),s=t.getShaderSource(n),o=`${a.join(`
2803`)}
2804${n.additionalImplementations}
2805${s}`,u=i.createShaderModule({code:o,label:t.name});ti("verbose",()=>`[WebGPU] ${t.name} shader code: ${o}`);let l=i.createComputePipeline({compute:{module:u,entryPoint:"main"},layout:"auto",label:t.name});return O(t.name),{programInfo:t,computePipeline:l,uniformVariablesInfo:n.variablesInfo}}normalizeDispatchGroupSize(t){let r="number"==typeof t?t:t.x,i="number"==typeof t?1:t.y||1,a="number"==typeof t?1:t.z||1,n=this.backend.device.limits.maxComputeWorkgroupsPerDimension;if(r<=n&&i<=n&&a<=n)return[r,i,a];let s=r*i*a,o=Math.ceil(Math.sqrt(s));if(!(o>n))return[o,o,1];if((o=Math.ceil(Math.cbrt(s)))>n)throw Error("Total dispatch size exceeds WebGPU maximum.");return[o,o,o]}}}),uZ={};W(uZ,{WebGpuBackend:()=>uJ});var uQ,uX,uY,uJ,u0=q(()=>{el(),oK(),oQ(),oY(),o1(),uj(),uK(),uQ=(t,r)=>{if(r.length!==t.length)throw Error(`inputDependencies length ${r.length} is not equal to inputTensors length ${t.length}.`);let i=[];for(let a=0;a<t.length;++a){let n=t[a].dataType;switch(r[a]){case"none":i.push("");break;case"type":i.push(`${n}`);break;case"rank":{let r=t[a].dims.length;i.push(`${n};${r}`);break}case"dims":{let r=t[a].dims.join(",");i.push(`${n};${r}`);break}default:throw Error(`unsupported input dependency: ${r[a]}`)}}return i.join("|")},uX=(t,r,i)=>{let a=t.name;return t.shaderCache?.hint&&(a+="["+t.shaderCache.hint+"]"),a+=":"+i+`:${uQ(r,t.shaderCache?.inputDependencies??Array(r.length).fill("dims"))}`},uY=class{constructor(t){t&&(this.architecture=t.architecture,this.vendor=t.vendor)}isArchitecture(t){return this.architecture===t}isVendor(t){return this.vendor===t}},uJ=class{constructor(){this.currentSessionId=null,this.currentKernelId=null,this.commandEncoder=null,this.computePassEncoder=null,this.maxDispatchNumber=16,this.pendingDispatchNumber=0,this.pendingKernels=[],this.pendingQueries=new Map,this.sessionStatus="default",this.capturedCommandList=new Map,this.capturedPendingKernels=new Map,this.sessionExternalDataMapping=new Map}get currentKernelCustomData(){if(null===this.currentKernelId)throw Error("currentKernelCustomData(): currentKernelId is null. (should not happen)");let t=this.kernelCustomData.get(this.currentKernelId);return t||(t={},this.kernelCustomData.set(this.currentKernelId,t)),t}async initialize(t,r){this.env=t;let i=[],a={requiredLimits:{maxComputeWorkgroupStorageSize:r.limits.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:r.limits.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:r.limits.maxStorageBufferBindingSize,maxBufferSize:r.limits.maxBufferSize,maxComputeInvocationsPerWorkgroup:r.limits.maxComputeInvocationsPerWorkgroup,maxComputeWorkgroupSizeX:r.limits.maxComputeWorkgroupSizeX,maxComputeWorkgroupSizeY:r.limits.maxComputeWorkgroupSizeY,maxComputeWorkgroupSizeZ:r.limits.maxComputeWorkgroupSizeZ},requiredFeatures:i},n=t=>r.features.has(t)&&i.push(t)&&!0;n("chromium-experimental-timestamp-query-inside-passes")||n("timestamp-query"),n("shader-f16"),n("subgroups"),this.device=await r.requestDevice(a),this.adapterInfo=new uY(r.info||await r.requestAdapterInfo()),this.gpuDataManager=tB(this),this.programManager=new oW(this),this.kernels=new Map,this.kernelPersistentData=new Map,this.kernelCustomData=new Map,tt(t.logLevel,!!t.debug),this.device.onuncapturederror=t=>
2805{t.error instanceof GPUValidationError&&console.error(`An uncaught WebGPU validation error was raised: ${t.error.message}`)},Object.defineProperty(this.env.webgpu,"device",{value:this.device,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(this.env.webgpu,"adapter",{value:r,writable:!1,enumerable:!0,configurable:!1}),this.setQueryType()}dispose(){"u">typeof this.querySet&&this.querySet.destroy(),this.gpuDataManager.dispose()}getCommandEncoder(){return this.commandEncoder||(this.commandEncoder=this.device.createCommandEncoder()),this.commandEncoder}getComputePassEncoder(){if(!this.computePassEncoder){let t=this.getCommandEncoder(),r={};"at-passes"===this.queryType&&(r.timestampWrites={querySet:this.querySet,beginningOfPassWriteIndex:2*this.pendingDispatchNumber,endOfPassWriteIndex:2*this.pendingDispatchNumber+1}),this.computePassEncoder=t.beginComputePass(r)}return this.computePassEncoder}endComputePass(){this.computePassEncoder&&(this.computePassEncoder.end(),this.computePassEncoder=null)}flush(){let t;this.commandEncoder&&(A(),this.endComputePass(),"none"!==this.queryType&&(this.commandEncoder.resolveQuerySet(this.querySet,0,2*this.pendingDispatchNumber,this.queryResolveBuffer,0),t=this.device.createBuffer({size:2*this.pendingDispatchNumber*8,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),this.pendingQueries.set(t,this.pendingKernels),this.pendingKernels=[],this.commandEncoder.copyBufferToBuffer(this.queryResolveBuffer,0,t,0,2*this.pendingDispatchNumber*8)),this.device.queue.submit([this.commandEncoder.finish()]),this.gpuDataManager.refreshPendingBuffers(),this.commandEncoder=null,this.pendingDispatchNumber=0,"none"!==this.queryType&&t.mapAsync(GPUMapMode.READ).then(()=>{let r=new BigUint64Array(t.getMappedRange()),i=this.pendingQueries.get(t);for(let t=0;t<r.length/2;t++){let a=i[t],n=a.kernelId,s=this.kernels.get(n),o=s.kernelType,u=s.kernelName,l=a.programName,d=a.inputTensorViews,p=a.outputTensorViews,c=r[2*t],h=r[2*t+1];typeof this.queryTimeBase>"u"&&(this.queryTimeBase=c);let f=Number(c-this.queryTimeBase),m=Number(h-this.queryTimeBase);if(!Number.isSafeInteger(f)||!Number.isSafeInteger(m))throw RangeError("incorrect timestamp range");if(this.env.webgpu.profiling?.ondata)this.env.webgpu.profiling.ondata({version:1,inputsMetadata:d.map(t=>({dims:t.dims,dataType:eJ(t.dataType)})),outputsMetadata:p.map(t=>({dims:t.dims,dataType:eJ(t.dataType)})),kernelId:n,kernelType:o,kernelName:u,programName:l,startTime:f,endTime:m});else{let t="";d.forEach((r,i)=>{t+=`input[${i}]: [${r.dims}] | ${eJ(r.dataType)}, `});let r="";p.forEach((t,i)=>{r+=`output[${i}]: [${t.dims}] | ${eJ(t.dataType)}, `}),console.log(`[profiling] kernel "${n}|${o}|${u}|${l}" ${t}${r}execution time: ${m-f} ns`)}C("GPU",`${l}::${c}::${h}`)}t.unmap(),this.pendingQueries.delete(t)}),O())}run(t,r,i,a,n,s){let o;A(t.name);let u=[];for(let t=0;t<r.length;++t){let i=r[t].data;if(0===i)continue;let a=this.gpuDataManager.get(i);
2805if(!a)throw Error(`no GPU data for input: ${i}`);u.push(a)}let{outputs:l,dispatchGroup:d,programUniforms:p}=t.getRunData(r),c=0===i.length?l.map((t,r)=>r):i;if(c.length!==l.length)throw Error(`Output size ${c.length} must be equal to ${l.length}.`);let h=[],f=[];for(let t=0;t<l.length;++t){if(!Number.isInteger(c[t])||c[t]<-3||c[t]>=s)throw Error(`Invalid output index: ${c[t]}`);if(-3===c[t])continue;let r=-1===c[t],i=-2===c[t],o=r||i?n(l[t].dataType,l[t].dims):a(c[t],l[t].dataType,l[t].dims);if(h.push(o),0===o.data)continue;let u=this.gpuDataManager.get(o.data);if(!u)throw Error(`no GPU data for output: ${o.data}`);if(r&&this.temporaryData.push(u),i){let t=this.kernelPersistentData.get(this.currentKernelId);t||(t=[],this.kernelPersistentData.set(this.currentKernelId,t)),t.push(u)}f.push(u)}if(u.length!==r.length||f.length!==h.length){if(0===f.length)return O(t.name),h;throw Error(`Program ${t.name} has zero-sized tensor(s) in inputs or outputs. This is not supported now.`)}if(p){let t=0,r=[];p.forEach(i=>{let a="number"==typeof i.data?[i.data]:i.data;if(0===a.length)return;let n=10===i.type?2:4,s,o;10===i.type?(o=a.length>4?16:a.length>2?8:a.length*n,s=a.length>4?16:n*a.length):(o=a.length<=2?a.length*n:16,s=16),t=Math.ceil(t/o)*o,r.push(t);let u=10===i.type?8:4;t+=a.length>4?Math.ceil(a.length/u)*s:a.length*n});let i=new ArrayBuffer(t=16*Math.ceil(t/16));p.forEach((t,a)=>{let n=r[a],s="number"==typeof t.data?[t.data]:t.data;if(6===t.type)new Int32Array(i,n,s.length).set(s);else if(12===t.type)new Uint32Array(i,n,s.length).set(s);else if(10===t.type)new Uint16Array(i,n,s.length).set(s);else if(1===t.type)new Float32Array(i,n,s.length).set(s);else throw Error(`Unsupported uniform type: ${eJ(t.type)}`)});let a=this.gpuDataManager.create(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);this.device.queue.writeBuffer(a.buffer,0,i,0,t),this.gpuDataManager.release(a.id),o={offset:0,size:t,buffer:a.buffer}}let m=this.programManager.normalizeDispatchGroupSize(d),g=uX(t,r,1===m[1]&&1===m[2]),y=this.programManager.getArtifact(g);if(y||(y=this.programManager.build(t,m),this.programManager.setArtifact(g,y),ti("info",()=>`[artifact] key: ${g}, programName: ${t.name}`)),p&&y.uniformVariablesInfo){if(p.length!==y.uniformVariablesInfo.length)throw Error(`Uniform variables count mismatch: expect ${y.uniformVariablesInfo.length}, got ${p.length} in program "${y.programInfo.name}".`);for(let t=0;t<p.length;t++){let r=p[t],i=r.type,a="number"==typeof r.data?1:r.data.length,[n,s]=y.uniformVariablesInfo[t];if(i!==n||a!==s)throw Error(`Uniform variable ${t} mismatch: expect type ${n} with size ${s}, got type ${i} with size ${a} in program "${y.programInfo.name}".`)}}if(ti("info",()=>`[ProgramManager] run "${t.name}" (key=${g}) with ${m[0]}x${m[1]}x${m[2]}`),"none"!==this.queryType||"capturing"===this.sessionStatus){let t={kernelId:this.currentKernelId,programName:y.programInfo.name,inputTensorViews:r,outputTensorViews:h};this.pendingKernels.push(t),"capturing"===this.sessionStatus&&this.capturedPendingKernels.get(this.currentSessionId).push(t)}return this.programManager.run(y,u,f,m,o),O(t.name),h}upload(t,r){this.gpuDataManager.upload(t,r)}memcpy(t,r){this.gpuDataManager.memcpy(t,r)}async download(t,r){await this.gpuDataManager.download(t,r)}alloc(t){return this.gpuDataManager.create(t).id}free(t){return this.gpuDataManager.release(t)}createKernel(t,r,i,a){let n=oq.get(t);if(!n)throw Error(`kernel not implemented: ${t}`);let s={kernelType:t,kernelName:a,kernelEntry:n[0],attributes:[n[1],i]};this.kernels.set(r,s)}releaseKernel(t){let r=this.kernelPersistentData.get(t);
2805if(r){for(let t of r)this.gpuDataManager.release(t.id);this.kernelPersistentData.delete(t)}this.kernelCustomData.delete(t),this.kernels.delete(t)}computeKernel(t,r,i){let a=this.kernels.get(t);if(!a)throw Error(`kernel not created: ${t}`);let n=a.kernelType,s=a.kernelName,o=a.kernelEntry,u=a.attributes;if(null!==this.currentKernelId)throw Error(`kernel "[${n}] ${s}" is not allowed to be called recursively`);this.currentKernelId=t,u[0]&&(u[1]=u[0](u[1]),u[0]=void 0),ti("info",()=>`[WebGPU] Start to run kernel "[${n}] ${s}"...`);let l=this.env.debug;this.temporaryData=[];try{return l&&this.device.pushErrorScope("validation"),o(r,u[1]),0}catch(t){return i.push(Promise.resolve(`[WebGPU] Kernel "[${n}] ${s}" failed. ${t}`)),1}finally{for(let t of(l&&i.push(this.device.popErrorScope().then(t=>t?`GPU validation error for kernel "[${n}] ${s}": ${t.message}`:null)),this.temporaryData))this.gpuDataManager.release(t.id);this.temporaryData=[],this.currentKernelId=null}}registerBuffer(t,r,i,a){let n=this.sessionExternalDataMapping.get(t);n||(n=new Map,this.sessionExternalDataMapping.set(t,n));let s=n.get(r),o=this.gpuDataManager.registerExternalBuffer(i,a,s);return n.set(r,[o,i]),o}unregisterBuffers(t){let r=this.sessionExternalDataMapping.get(t);r&&(r.forEach(t=>this.gpuDataManager.unregisterExternalBuffer(t[0])),this.sessionExternalDataMapping.delete(t))}getBuffer(t){let r=this.gpuDataManager.get(t);if(!r)throw Error(`no GPU data for buffer: ${t}`);return r.buffer}createDownloader(t,r,i){return async()=>{let a=await tO(this,t,r);return tp(a.buffer,i)}}writeTimestamp(t){"inside-passes"===this.queryType&&this.computePassEncoder.writeTimestamp(this.querySet,t)}setQueryType(){this.queryType="none",(this.env.webgpu.profiling?.mode==="default"||(typeof this.env.trace>"u"?this.env.wasm.trace:this.env.trace))&&(this.device.features.has("chromium-experimental-timestamp-query-inside-passes")?this.queryType="inside-passes":this.device.features.has("timestamp-query")&&(this.queryType="at-passes"),"none"!==this.queryType&&typeof this.querySet>"u"&&(this.querySet=this.device.createQuerySet({type:"timestamp",count:2*this.maxDispatchNumber}),this.queryResolveBuffer=this.device.createBuffer({size:2*this.maxDispatchNumber*8,usage:GPUBufferUsage.COPY_SRC|GPUBufferUsage.QUERY_RESOLVE})))}captureBegin(){ti("info","captureBegin"),this.capturedCommandList.get(this.currentSessionId)||this.capturedCommandList.set(this.currentSessionId,[]),this.capturedPendingKernels.get(this.currentSessionId)||this.capturedPendingKernels.set(this.currentSessionId,[]),this.flush(),this.sessionStatus="capturing"}captureEnd(){ti("info","captureEnd"),this.flush(),this.sessionStatus="default"}replay(){ti("info","replay"),this.sessionStatus="replaying";let t=this.capturedCommandList.get(this.currentSessionId),r=this.capturedPendingKernels.get(this.currentSessionId),i=t.length;this.pendingKernels=[];for(let a=0;a<i;a++){let i=this.getComputePassEncoder(),n=t[a];this.writeTimestamp(2*this.pendingDispatchNumber),i.setPipeline(n.computePipeline),i.setBindGroup(0,n.bindGroup),i.dispatchWorkgroups(...n.dispatchGroup),this.writeTimestamp(2*this.pendingDispatchNumber+1),this.pendingDispatchNumber++,"none"!==this.queryType&&this.pendingKernels.push(r[a]),(this.pendingDispatchNumber>=this.maxDispatchNumber||"at-passes"===this.queryType)&&this.endComputePass(),this.pendingDispatchNumber>=this.maxDispatchNumber&&this.flush()}this.flush(),this.sessionStatus="default"}onCreateSession(){this.gpuDataManager.onCreateSession()}onReleaseSession(t){this.unregisterBuffers(t),this.capturedCommandList.has(t)&&this.capturedCommandList.delete(t),this.capturedPendingKernels.has(t)&&this.capturedPendingKernels.delete(t),this.gpuDataManager.onReleaseSession(t)}onRunStart(t){this.currentSessionId=t,this.setQueryType()}}}),u2={};W(u2,{init:()=>u4});var u1,u3,u4,u8,u6,u5,u7,u9,le,lt,lr,li,la,ln,ls,lo,lu,ll,ld,lp,lc,lh,lf,lm,lg,ly,l_,lb,l$,lv,lw,lx,lk,lS,lT,lI,lE,lC=q(()=>{oK(),oQ(),oX(),o0(),u1=class t{constructor(t,r,i,a){this.module=t,this.dataType=r,this.data=i,this.dims=a}getFloat32Array(){if(1!==this.dataType)throw Error("Invalid data type");let t=ts.size(this.dims);return 0===t?new Float32Array:new Float32Array(this.module.HEAP8.buffer,this.data,t)}getBigInt64Array(){if(7!==this.dataType)throw Error("Invalid data type");let t=ts.size(this.dims);return 0===t?new BigInt64Array:new BigInt64Array(this.module.HEAP8.buffer,this.data,t)}getInt32Array(){if(6!==this.dataType)throw Error("Invalid data type");let t=ts.size(this.dims);return 0===t?new Int32Array:new Int32Array(this.module.HEAP8.buffer,this.data,t)}getUint16Array(){if(10!==this.dataType&&4!==this.dataType)throw Error("Invalid data type");let t=ts.size(this.dims);return 0===t?new Uint16Array:new Uint16Array(this.module.HEAP8.buffer,this.data,t)}reshape(r){if(ts.size(r)!==ts.size(this.dims))throw Error("Invalid new shape");return new t(this.module,this.dataType,this.data,r)}},u3=class{constructor(t,r,i){this.module=t,this.backend=r,this.customDataOffset=0,this.customDataSize=0,this.adapterInfo=r.adapterInfo;let a=t.PTR_SIZE,n=i/t.PTR_SIZE,s=4===a?"i32":"i64";this.opKernelContext=Number(t.getValue(a*n++,s));let o=Number(t.getValue(a*n++,s));this.outputCount=Number(t.getValue(a*n++,s)),this.customDataOffset=Number(t.getValue(a*n++,"*")),this.customDataSize=Number(t.getValue(a*n++,s));let u=[];for(let r=0;r<o;r++){let r=Number(t.getValue(a*n++,s)),i=Number(t.getValue(a*n++,"*")),o=Number(t.getValue(a*n++,s)),l=[];for(let r=0;r<o;r++)l.push(Number(t.getValue(a*n++,s)));u.push(new u1(t,r,i,l))}this.inputs=u}get kernelCustomData(){return this.backend.currentKernelCustomData}get customDataBuffer(){return this.module.HEAPU8.subarray(this.customDataOffset,this.customDataOffset+this.customDataSize)}compute(t,r){let i=r?.inputs?.map(t=>"number"==typeof t?this.inputs[t]:t)??this.inputs,a=r?.outputs??[];return this.backend.run(t,i,a,(t,r,i)=>new u1(this.module,r,this.output(t,i),i),(t,r)=>{let i=e0(t,r);if(!i)throw Error(`Unsupported data type: ${t}`);let a=i>0?this.backend.gpuDataManager.create(i).id:0;return new u1(this.module,t,a,r)},this.outputCount)}output(t,r){let i=this.module.stackSave();
2805try{let i=this.module.PTR_SIZE,a=4===i?"i32":"i64",n=this.module.stackAlloc((1+r.length)*i);this.module.setValue(n,r.length,a);for(let t=0;t<r.length;t++)this.module.setValue(n+i*(t+1),r[t],a);return this.module._JsepOutput(this.opKernelContext,t,n)}catch(i){throw Error(`Failed to generate kernel's output[${t}] with dims [${r}]. If you are running with pre-allocated output, please make sure the output type/dims are correct. Error: ${i}`)}finally{this.module.stackRestore(i)}}},u4=async(t,r,i,a)=>{let n=r.jsepInit;if(!n)throw Error("Failed to initialize JSEP. The WebAssembly module is not built with JSEP support.");if("webgpu"===t){let t=new(u0(),V(uZ)).WebGpuBackend;await t.initialize(i,a),n("webgpu",[t,r=>t.alloc(Number(r)),r=>t.free(r),(i,a,n,s=!1)=>{if(s)ti("verbose",()=>`[WebGPU] jsepCopyGpuToGpu: src=${Number(i)}, dst=${Number(a)}, size=${Number(n)}`),t.memcpy(Number(i),Number(a));else{ti("verbose",()=>`[WebGPU] jsepCopyCpuToGpu: dataOffset=${Number(i)}, gpuDataId=${Number(a)}, size=${Number(n)}`);let s=r.HEAPU8.subarray(Number(i>>>0),Number(i>>>0)+Number(n));t.upload(Number(a),s)}},async(i,a,n)=>{ti("verbose",()=>`[WebGPU] jsepCopyGpuToCpu: gpuDataId=${i}, dataOffset=${a}, size=${n}`),await t.download(Number(i),()=>r.HEAPU8.subarray(Number(a)>>>0,Number(a+n)>>>0))},(i,a,n)=>t.createKernel(i,Number(a),n,r.UTF8ToString(r._JsepGetNodeName(Number(a)))),r=>t.releaseKernel(r),(i,a,n,s)=>{ti("verbose",()=>`[WebGPU] jsepRun: sessionHandle=${n}, kernel=${i}, contextDataOffset=${a}`);let o=new u3(r,t,Number(a));return t.computeKernel(Number(i),o,s)},()=>t.captureBegin(),()=>t.captureEnd(),()=>t.replay()])}else{let t=new tS(i);n("webnn",[t,()=>t.reserveTensorId(),r=>t.releaseTensorId(r),async(r,i,a,n,s)=>t.ensureTensor(r,i,a,n,s),(r,i)=>{t.uploadTensor(r,i)},async(r,i)=>t.downloadTensor(r,i)])}}}),lz=q(()=>{oF(),oj(),oK(),oG(),oH(),oZ(),u8=(t,r)=>{0!==eW()._OrtInit(t,r)&&eG("Can't initialize onnxruntime.")},u6=async t=>{u8(t.wasm.numThreads,e1(t.logLevel))},u5=async(t,r)=>{eW().asyncInit?.();{let i=(lC(),V(u2)).init;if("webgpu"===r){if(typeof navigator>"u"||!navigator.gpu)throw Error("WebGPU is not supported in current environment");let r=t.webgpu.adapter;if(r){if("object"!=typeof r.limits||"object"!=typeof r.features||"function"!=typeof r.requestDevice)throw Error("Invalid GPU adapter set in `env.webgpu.adapter`. It must be a GPUAdapter object.")}else{let i=t.webgpu.powerPreference;if(void 0!==i&&"low-power"!==i&&"high-performance"!==i)throw Error(`Invalid powerPreference setting: "${i}"`);let a=t.webgpu.forceFallbackAdapter;if(void 0!==a&&"boolean"!=typeof a)throw Error(`Invalid forceFallbackAdapter setting: "${a}"`);if(!(r=await navigator.gpu.requestAdapter({powerPreference:i,forceFallbackAdapter:a})))throw Error('Failed to get GPU adapter. You may need to enable flag "--enable-unsafe-webgpu" if you are using Chrome.')}await i("webgpu",eW(),t,r)}if("webnn"===r){if(typeof navigator>"u"||!navigator.ml)throw Error("WebNN is not supported in current environment");await i("webnn",eW(),t)}}},u7=new Map,u9=t=>{let r=eW(),i=r.stackSave();try{let i=r.PTR_SIZE,a=r.stackAlloc(2*i);0!==r._OrtGetInputOutputCount(t,a,a+i)&&eG("Can't get session input/output count.");let n=4===i?"i32":"i64";return[Number(r.getValue(a,n)),Number(r.getValue(a+i,n))]}finally{r.stackRestore(i)}},le=(t,r)=>{let i=eW(),a=i.stackSave(),n=0;try{let a=i.PTR_SIZE,s=i.stackAlloc(2*a);0!==i._OrtGetInputOutputMetadata(t,r,s,s+a)&&eG("Can't get session input/output metadata.");let o=Number(i.getValue(s,"*"));n=Number(i.getValue(s+a,"*"));let u=i.HEAP32[n/4];if(0===u)return[o,0];let l=i.HEAPU32[n/4+1],d=[];for(let t=0;t<l;t++){let r=Number(i.getValue(n+8+t*a,"*"));d.push(0!==r?i.UTF8ToString(r):Number(i.getValue(n+8+(t+l)*a,"*")))}return[o,u,d]}finally{i.stackRestore(a),0!==n&&i._OrtFree(n)}},lt=t=>{let r=eW(),i=r._malloc(t.byteLength);if(0===i)throw Error(`Can't create a session. failed to allocate a buffer of size ${t.byteLength}.`);return r.HEAPU8.set(t,i),[i,t.byteLength]},lr=async(t,r)=>{let i,a,n=eW();Array.isArray(t)?[i,a]=t:t.buffer===n.HEAPU8.buffer?[i,a]=[t.byteOffset,t.byteLength]:[i,a]=lt(t);let s=0,o=0,u=0,l=[],d=[],p=[];try{if([o,l]=await eX(r),r?.externalData&&n.mountExternalData){let t=[];for(let i of r.externalData){let r="string"==typeof i?i:i.path;t.push(e6("string"==typeof i?i:i.data).then(t=>{n.mountExternalData(r,t)}))}await Promise.all(t)}
2805for(let t of r?.executionProviders??[])if(("string"==typeof t?t:t.name)==="webnn"){if(n.shouldTransferToMLTensor=!1,"string"!=typeof t){let r=t?.context,i=t?.gpuDevice,a=t?.deviceType,s=t?.powerPreference;r?n.currentContext=r:i?n.currentContext=await n.webnnCreateMLContext(i):n.currentContext=await n.webnnCreateMLContext({deviceType:a,powerPreference:s})}else n.currentContext=await n.webnnCreateMLContext();break}s=await n._OrtCreateSession(i,a,o),n.webgpuOnCreateSession?.(s),0===s&&eG("Can't create a session."),n.jsepOnCreateSession?.(),n.currentContext&&(n.webnnRegisterMLContext(s,n.currentContext),n.currentContext=void 0,n.shouldTransferToMLTensor=!0);let[t,c]=u9(s),h=!!r?.enableGraphCapture,f=[],m=[],g=[],y=[],_=[];for(let r=0;r<t;r++){let[t,i,a]=le(s,r);0===t&&eG("Can't get an input name."),d.push(t);let o=n.UTF8ToString(t);f.push(o),g.push(0===i?{name:o,isTensor:!1}:{name:o,isTensor:!0,type:eJ(i),shape:a})}for(let i=0;i<c;i++){let[a,o,u]=le(s,i+t);0===a&&eG("Can't get an output name."),p.push(a);let l=n.UTF8ToString(a);m.push(l),y.push(0===o?{name:l,isTensor:!1}:{name:l,isTensor:!0,type:eJ(o),shape:u});{if(h&&r?.preferredOutputLocation===void 0){_.push("gpu-buffer");continue}let t="string"==typeof r?.preferredOutputLocation?r.preferredOutputLocation:r?.preferredOutputLocation?.[l]??"cpu",i=n.webnnIsGraphOutput;if("cpu"===t&&i&&i(s,l)){_.push("ml-tensor-cpu-output");continue}if("cpu"!==t&&"cpu-pinned"!==t&&"gpu-buffer"!==t&&"ml-tensor"!==t)throw Error(`Not supported preferred output location: ${t}.`);if(h&&"gpu-buffer"!==t)throw Error(`Not supported preferred output location: ${t}. Only 'gpu-buffer' location is supported when enableGraphCapture is true.`);_.push(t)}}let b=null;return _.some(t=>"gpu-buffer"===t||"ml-tensor"===t||"ml-tensor-cpu-output"===t)&&(u=n._OrtCreateBinding(s),0===u&&eG("Can't create IO binding."),b={handle:u,outputPreferredLocations:_,outputPreferredLocationsEncoded:_.map(t=>"ml-tensor-cpu-output"===t?"ml-tensor":t).map(t=>e8(t))}),u7.set(s,[s,d,p,b,h,!1]),[s,f,m,g,y]}catch(t){throw d.forEach(t=>n._OrtFree(t)),p.forEach(t=>n._OrtFree(t)),0!==u&&0!==n._OrtReleaseBinding(u)&&eG("Can't release IO binding."),0!==s&&0!==n._OrtReleaseSession(s)&&eG("Can't release session."),t}finally{n._free(i),0!==o&&0!==n._OrtReleaseSessionOptions(o)&&eG("Can't release session options."),l.forEach(t=>n._free(t)),n.unmountExternalData?.()}},li=t=>{let r=eW(),i=u7.get(t);if(!i)throw Error(`cannot release session. invalid session id: ${t}`);let[a,n,s,o,u]=i;o&&(u&&0!==r._OrtClearBoundOutputs(o.handle)&&eG("Can't clear bound outputs."),0!==r._OrtReleaseBinding(o.handle)&&eG("Can't release IO binding.")),r.jsepOnReleaseSession?.(t),r.webnnOnReleaseSession?.(t),r.webgpuOnReleaseSession?.(t),n.forEach(t=>r._OrtFree(t)),s.forEach(t=>r._OrtFree(t)),0!==r._OrtReleaseSession(a)&&eG("Can't release session."),u7.delete(t)},la=async(t,r,i,a,n,s,o=!1)=>{if(!t)return void r.push(0);let u=eW(),l=u.PTR_SIZE,d=t[0],p=t[1],c=t[3],h=c,f,m;if("string"===d&&("gpu-buffer"===c||"ml-tensor"===c))throw Error("String tensor is not supported on GPU.");if(o&&"gpu-buffer"!==c)throw Error(`External buffer must be provided for input/output index ${s} when enableGraphCapture is true.`);if("gpu-buffer"===c){let r=t[2].gpuBuffer;m=e0(eY(d),p);{let t=u.jsepRegisterBuffer;if(!t)throw Error('Tensor location "gpu-buffer" is not supported without using WebGPU.');f=t(a,s,r,m)}}else if("ml-tensor"===c){let r=t[2].mlTensor;m=e0(eY(d),p);let i=u.webnnRegisterMLTensor;if(!i)throw Error('Tensor location "ml-tensor" is not supported without using WebNN.');f=i(a,r,eY(d),p)}else{let r=t[2];if(Array.isArray(r)){m=l*r.length,f=u._malloc(m),i.push(f);for(let t=0;t<r.length;t++){if("string"!=typeof r[t])throw TypeError(`tensor data at index ${t} is not a string`);u.setValue(f+t*l,eL(r[t],i),"*")}}else{let t=u.webnnIsGraphInput,s=u.webnnIsGraphOutput;if("string"!==d&&t&&s){let o=u.UTF8ToString(n);if(t(a,o)||s(a,o)){let t=eY(d);m=e0(t,p),h="ml-tensor";let i=u.webnnCreateTemporaryTensor,n=u.webnnUploadTensor;if(!i||!n)throw Error('Tensor location "ml-tensor" is not supported without using WebNN.');let s=await i(a,t,p);n(s,new Uint8Array(r.buffer,r.byteOffset,r.byteLength)),f=s}else m=r.byteLength,f=u._malloc(m),i.push(f),u.HEAPU8.set(new Uint8Array(r.buffer,r.byteOffset,m),f)}else m=r.byteLength,f=u._malloc(m),i.push(f),u.HEAPU8.set(new Uint8Array(r.buffer,r.byteOffset,m),f)}}let g=u.stackSave(),y=u.stackAlloc(4*p.length);try{p.forEach((t,r)=>u.setValue(y+r*l,t,4===l?"i32":"i64"));let t=u._OrtCreateTensor(eY(d),f,m,y,p.length,e8(h));
28050===t&&eG(`Can't create tensor for input/output. session=${a}, index=${s}.`),r.push(t)}finally{u.stackRestore(g)}},ln=async(t,r,i,a,n,s)=>{let o=eW(),u=o.PTR_SIZE,l=u7.get(t);if(!l)throw Error(`cannot run inference. invalid session id: ${t}`);let d=l[0],p=l[1],c=l[2],h=l[3],f=l[4],m=l[5],g=r.length,y=a.length,_=0,b=[],$=[],v=[],w=[],x=o.stackSave(),k=o.stackAlloc(g*u),S=o.stackAlloc(g*u),T=o.stackAlloc(y*u),I=o.stackAlloc(y*u);try{let l;[_,b]=eH(s);for(let a=0;a<g;a++)await la(i[a],$,w,t,p[r[a]],r[a],f);for(let r=0;r<y;r++)await la(n[r],v,w,t,c[a[r]],g+a[r],f);for(let t=0;t<g;t++)o.setValue(k+t*u,$[t],"*"),o.setValue(S+t*u,p[r[t]],"*");for(let t=0;t<y;t++)o.setValue(T+t*u,v[t],"*"),o.setValue(I+t*u,c[a[t]],"*");if(h&&!m){let{handle:i,outputPreferredLocations:s,outputPreferredLocationsEncoded:u}=h;if(p.length!==g)throw Error(`input count from feeds (${g}) is expected to be always equal to model's input count (${p.length}).`);for(let a=0;a<g;a++){let n=r[a];await o._OrtBindInput(i,p[n],$[a])!==0&&eG(`Can't bind input[${a}] for session=${t}.`)}for(let r=0;r<y;r++){let l=a[r];n[r]?.[3]?0!==o._OrtBindOutput(i,c[l],v[r],0)&&eG(`Can't bind pre-allocated output[${r}] for session=${t}.`):0!==o._OrtBindOutput(i,c[l],0,u[l])&&eG(`Can't bind output[${r}] to ${s[r]} for session=${t}.`)}u7.set(t,[d,p,c,h,f,!0])}o.jsepOnRunStart?.(d),o.webnnOnRunStart?.(d),l=h?await o._OrtRunWithBinding(d,h.handle,y,T,_):await o._OrtRun(d,S,k,g,I,y,T,_),0!==l&&eG("failed to call OrtRun().");let x=[],E=[];for(let r=0;r<y;r++){let i=Number(o.getValue(T+r*u,"*"));if(i===v[r]){x.push(n[r]);continue}let s=o.stackSave(),l=o.stackAlloc(4*u),d=!1,p,c=0;try{0!==o._OrtGetTensorData(i,l,l+u,l+2*u,l+3*u)&&eG(`Can't access output tensor data on index ${r}.`);let n=4===u?"i32":"i64",s=Number(o.getValue(l,n));c=o.getValue(l+u,"*");let f=o.getValue(l+2*u,"*"),m=Number(o.getValue(l+3*u,n)),g=[];for(let t=0;t<m;t++)g.push(Number(o.getValue(f+t*u,n)));0!==o._OrtFree(f)&&eG("Can't free memory for tensor dims.");let y=g.reduce((t,r)=>t*r,1);p=eJ(s);let _=h?.outputPreferredLocations[a[r]];if("string"===p){if("gpu-buffer"===_||"ml-tensor"===_)throw Error("String tensor is not supported on GPU.");let t=[];for(let r=0;r<y;r++){let i=o.getValue(c+r*u,"*"),a=o.getValue(c+(r+1)*u,"*"),n=r===y-1?void 0:a-i;t.push(o.UTF8ToString(i,n))}x.push([p,g,t,"cpu"])}else if("gpu-buffer"===_&&y>0){let t=o.jsepGetBuffer;if(!t)throw Error('preferredLocation "gpu-buffer" is not supported without using WebGPU.');let r=t(c),a=e0(s,y);if(void 0===a||!e3(p))throw Error(`Unsupported data type: ${p}`);d=!0,x.push([p,g,{gpuBuffer:r,download:o.jsepCreateDownloader(r,a,p),dispose:()=>{0!==o._OrtReleaseTensor(i)&&eG("Can't release tensor.")}},"gpu-buffer"])}else if("ml-tensor"===_&&y>0){let r=o.webnnEnsureTensor,a=o.webnnIsGraphInputOutputTypeSupported;if(!r||!a)throw Error('preferredLocation "ml-tensor" is not supported without using WebNN.');if(void 0===e0(s,y)||!e4(p))throw Error(`Unsupported data type: ${p}`);if(!a(t,p,!1))throw Error(`preferredLocation "ml-tensor" for ${p} output is not supported by current WebNN Context.`);let n=await r(t,c,s,g,!1);d=!0,x.push([p,g,{mlTensor:n,download:o.webnnCreateMLTensorDownloader(c,p),dispose:()=>{o.webnnReleaseTensorId(c),o._OrtReleaseTensor(i)}},"ml-tensor"])}else if("ml-tensor-cpu-output"===_&&y>0){let t=o.webnnCreateMLTensorDownloader(c,p)(),r=x.length;d=!0,E.push((async()=>{let a=[r,await t];return o.webnnReleaseTensorId(c),o._OrtReleaseTensor(i),a})()),x.push([p,g,[],"cpu"])}else{let t=new(e2(p))(y);new Uint8Array(t.buffer,t.byteOffset,t.byteLength).set(o.HEAPU8.subarray(c,c+t.byteLength)),x.push([p,g,t,"cpu"])}}finally{o.stackRestore(s),"string"===p&&c&&o._free(c),d||o._OrtReleaseTensor(i)}}for(let[r,i]of(h&&!f&&(0!==o._OrtClearBoundOutputs(h.handle)&&eG("Can't clear bound outputs."),u7.set(t,[d,p,c,h,f,!1])),await Promise.all(E)))x[r][2]=i;return x}finally{o.webnnOnRunEnd?.(d),o.stackRestore(x),$.forEach(t=>o._OrtReleaseTensor(t)),v.forEach(t=>o._OrtReleaseTensor(t)),w.forEach(t=>o._free(t)),0!==_&&o._OrtReleaseRunOptions(_),b.forEach(t=>o._free(t))}},ls=t=>{let r=eW(),i=u7.get(t);if(!i)throw Error("invalid session id");let a=i[0],n=r._OrtEndProfiling(a);0===n&&eG("Can't get an profile file name."),r._OrtFree(n)},lo=t=>{let r=[];for(let i of t){let t=i[2];!Array.isArray(t)&&"buffer"in t&&r.push(t.buffer)}return r}}),lA=q(()=>{el(),lz(),oG(),oV(),lu=()=>!!c.wasm.proxy&&"u">typeof document,ld=!1,lp=!1,lc=!1,lm=new Map,lg=(t,r)=>{let i=lm.get(t);i?i.push(r):lm.set(t,[r])},ly=()=>
2805{if(ld||!lp||lc||!ll)throw Error("worker not ready")},l_=t=>{switch(t.data.type){case"init-wasm":ld=!1,t.data.err?(lc=!0,lf[1](t.data.err)):(lp=!0,lf[0]()),lh&&(URL.revokeObjectURL(lh),lh=void 0);break;case"init-ep":case"copy-from":case"create":case"release":case"run":case"end-profiling":{let r=lm.get(t.data.type);t.data.err?r.shift()[1](t.data.err):r.shift()[0](t.data.out)}}},lb=async()=>{if(!lp){if(ld)throw Error("multiple calls to 'initWasm()' detected.");if(lc)throw Error("previous call to 'initWasm()' failed.");if(ld=!0,lu())return new Promise((t,r)=>{ll?.terminate(),ez().then(([a,n])=>{try{(ll=n).onerror=t=>r(t),ll.onmessage=l_,lf=[t,r];let s={type:"init-wasm",in:c};!s.in.wasm.wasmPaths&&(a||ev)&&(s.in.wasm.wasmPaths={wasm:new i.U(i(47759)).href}),ll.postMessage(s),lh=a}catch(t){r(t)}},r)});try{await eq(c.wasm),await u6(c),lp=!0}catch(t){throw lc=!0,t}finally{ld=!1}}},l$=async t=>{if(lu())return ly(),new Promise((r,i)=>{lg("init-ep",[r,i]);let a={type:"init-ep",in:{epName:t,env:c}};ll.postMessage(a)});await u5(c,t)},lv=async t=>lu()?(ly(),new Promise((r,i)=>{lg("copy-from",[r,i]),ll.postMessage({type:"copy-from",in:{buffer:t}},[t.buffer])})):lt(t),lw=async(t,r)=>{if(!lu())return lr(t,r);if(r?.preferredOutputLocation)throw Error('session option "preferredOutputLocation" is not supported for proxy.');return ly(),new Promise((i,a)=>{lg("create",[i,a]);let n={type:"create",in:{model:t,options:{...r}}},s=[];t instanceof Uint8Array&&s.push(t.buffer),ll.postMessage(n,s)})},lx=async t=>{if(lu())return ly(),new Promise((r,i)=>{lg("release",[r,i]),ll.postMessage({type:"release",in:t})});li(t)},lk=async(t,r,i,a,n,s)=>{if(!lu())return ln(t,r,i,a,n,s);if(i.some(t=>"cpu"!==t[3]))throw Error("input tensor on GPU is not supported for proxy.");if(n.some(t=>t))throw Error("pre-allocated output tensor is not supported for proxy.");return ly(),new Promise((n,o)=>{lg("run",[n,o]),ll.postMessage({type:"run",in:{sessionId:t,inputIndices:r,inputs:i,outputIndices:a,options:s}},lo(i))})},lS=async t=>{if(lu())return ly(),new Promise((r,i)=>{lg("end-profiling",[r,i]),ll.postMessage({type:"end-profiling",in:t})});ls(t)}}),lO=q(()=>{el(),lA(),oK(),ed(),oZ(),lT=(t,r)=>{switch(t.location){case"cpu":return[t.type,t.dims,t.data,"cpu"];case"gpu-buffer":return[t.type,t.dims,{gpuBuffer:t.gpuBuffer},"gpu-buffer"];case"ml-tensor":return[t.type,t.dims,{mlTensor:t.mlTensor},"ml-tensor"];default:throw Error(`invalid data location: ${t.location} for ${r()}`)}},lI=t=>{switch(t[3]){case"cpu":return new E(t[0],t[2],t[1]);case"gpu-buffer":{let r=t[0];if(!e3(r))throw Error(`not supported data type: ${r} for deserializing GPU tensor`);let{gpuBuffer:i,download:a,dispose:n}=t[2];return E.fromGpuBuffer(i,{dataType:r,dims:t[1],download:a,dispose:n})}case"ml-tensor":{let r=t[0];if(!e4(r))throw Error(`not supported data type: ${r} for deserializing MLTensor tensor`);let{mlTensor:i,download:a,dispose:n}=t[2];return E.fromMLTensor(i,{dataType:r,dims:t[1],download:a,dispose:n})}default:throw Error(`invalid data location: ${t[3]}`)}},lE=class{async fetchModelAndCopyToWasmMemory(t){return lv(await e6(t))}async loadModel(t,r){let i;A(),i="string"==typeof t?await this.fetchModelAndCopyToWasmMemory(t):t,[this.sessionId,this.inputNames,this.outputNames,this.inputMetadata,this.outputMetadata]=await lw(i,r),O()}async dispose(){return lx(this.sessionId)}async run(t,r,i){A();let a=[],n=[];Object.entries(t).forEach(t=>{let r=t[0],i=t[1],s=this.inputNames.indexOf(r);if(-1===s)throw Error(`invalid input '${r}'`);a.push(i),n.push(s)});let s=[],o=[];Object.entries(r).forEach(t=>{let r=t[0],i=t[1],a=this.outputNames.indexOf(r);if(-1===a)throw Error(`invalid output '${r}'`);s.push(i),o.push(a)});let u=a.map((t,r)=>lT(t,()=>`input "${this.inputNames[n[r]]}"`)),l=s.map((t,r)=>t?lT(t,()=>`output "${this.outputNames[o[r]]}"`):null),d=await lk(this.sessionId,n,u,o,l,i),p={};for(let t=0;t<d.length;t++)p[this.outputNames[o[t]]]=s[t]??lI(d[t]);return O(),p}startProfiling(){}endProfiling(){lS(this.sessionId)}}}),lR={};W(lR,{OnnxruntimeWebAssemblyBackend:()=>lN,initializeFlags:()=>lB,wasmBackend:()=>lM});var lB,lN,lM,lD=q(()=>{el(),lA(),lO(),lB=()=>{("number"!=typeof c.wasm.initTimeout||c.wasm.initTimeout<0)&&(c.wasm.initTimeout=0);let t=c.wasm.simd;if("boolean"!=typeof t&&void 0!==t&&"fixed"!==t&&"relaxed"!==t&&(console.warn(`Property "env.wasm.simd" is set to unknown value "${t}". Reset it to \`false\` and ignore SIMD feature checking.`),c.wasm.simd=!1),"boolean"!=typeof c.wasm.proxy&&(c.wasm.proxy=!1),"boolean"!=typeof c.wasm.trace&&(c.wasm.trace=!1),"number"!=typeof c.wasm.numThreads||!Number.isInteger(c.wasm.numThreads)||c.wasm.numThreads<=0)if("u">typeof self&&!self.crossOriginIsolated)c.wasm.numThreads=1;else{let t=typeof navigator>"u"?U("node:os").cpus().length:navigator.hardwareConcurrency;c.wasm.numThreads=Math.min(4,Math.ceil((t||1)/2))}},lM=new(lN=class{async init(t){lB(),await lb(),await l$(t)}async createInferenceSessionHandler(t,r){let i=new lE;return await i.loadModel(t,r),i}})});el(),el(),el();var lP=eu;{let t=(lD(),V(lR)).wasmBackend;s("webgpu",t,5),s("webnn",t,5),s("cpu",t,10),s("wasm",t,10)}Object.defineProperty(c.versions,"web",{value:"1.22.0",enumerable:!0})}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.