42 lines
690 KiB
JavaScript
42 lines
690 KiB
JavaScript
window.JitsiMeetJS=window.JitsiMeetJS||{},window.JitsiMeetJS.app=window.JitsiMeetJS.app||{},window.JitsiMeetJS.app.effects=function(t){var e={};function n(r){if(e[r])return e[r].exports;var a=e[r]={i:r,l:!1,exports:{}};return t[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)n.d(r,a,function(e){return t[e]}.bind(null,a));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="/libs/",n(n.s=13)}([function(t,e,n){"use strict";n.r(e),function(t,r,a,o){n.d(e,"AdadeltaOptimizer",(function(){return _f})),n.d(e,"AdagradOptimizer",(function(){return Ff})),n.d(e,"AdamOptimizer",(function(){return Mf})),n.d(e,"AdamaxOptimizer",(function(){return Bf})),n.d(e,"DataStorage",(function(){return pa})),n.d(e,"ENV",(function(){return d})),n.d(e,"Environment",(function(){return l})),n.d(e,"KernelBackend",(function(){return fa})),n.d(e,"MomentumOptimizer",(function(){return Lf})),n.d(e,"Optimizer",(function(){return Df})),n.d(e,"RMSPropOptimizer",(function(){return Vf})),n.d(e,"Rank",(function(){return Ct})),n.d(e,"Reduction",(function(){return Dl})),n.d(e,"SGDOptimizer",(function(){return Pf})),n.d(e,"Tensor",(function(){return wt})),n.d(e,"TensorBuffer",(function(){return gt})),n.d(e,"Variable",(function(){return Rt})),n.d(e,"abs",(function(){return As})),n.d(e,"acos",(function(){return Os})),n.d(e,"acosh",(function(){return Ds})),n.d(e,"add",(function(){return Au})),n.d(e,"addN",(function(){return Ou})),n.d(e,"addStrict",(function(){return Du})),n.d(e,"all",(function(){return $c})),n.d(e,"any",(function(){return Qc})),n.d(e,"argMax",(function(){return Jc})),n.d(e,"argMin",(function(){return Zc})),n.d(e,"asin",(function(){return _s})),n.d(e,"asinh",(function(){return Fs})),n.d(e,"atan",(function(){return Ms})),n.d(e,"atan2",(function(){return _u})),n.d(e,"atanh",(function(){return Bs})),n.d(e,"avgPool",(function(){return Wc})),n.d(e,"avgPool3d",(function(){return jc})),n.d(e,"backend",(function(){return cn})),n.d(e,"backend_util",(function(){return Da})),n.d(e,"basicLSTMCell",(function(){return vl})),n.d(e,"batchNorm",(function(){return bu})),n.d(e,"batchNorm2d",(function(){return wu})),n.d(e,"batchNorm3d",(function(){return Cu})),n.d(e,"batchNorm4d",(function(){return Eu})),n.d(e,"batchNormalization",(function(){return xu})),n.d(e,"batchNormalization2d",(function(){return vu})),n.d(e,"batchNormalization3d",(function(){return gu})),n.d(e,"batchNormalization4d",(function(){return yu})),n.d(e,"batchToSpaceND",(function(){return dr})),n.d(e,"booleanMaskAsync",(function(){return hc})),n.d(e,"broadcastTo",(function(){return hr})),n.d(e,"browser",(function(){return wf})),n.d(e,"buffer",(function(){return pr})),n.d(e,"cast",(function(){return mr})),n.d(e,"ceil",(function(){return Ps})),n.d(e,"clipByValue",(function(){return Ls})),n.d(e,"clone",(function(){return vr})),n.d(e,"complex",(function(){return Rn})),n.d(e,"concat",(function(){return Kn})),n.d(e,"concat1d",(function(){return Xn})),n.d(e,"concat2d",(function(){return Yn})),n.d(e,"concat3d",(function(){return $n})),n.d(e,"concat4d",(function(){return Qn})),n.d(e,"conv1d",(function(){return yc})),n.d(e,"conv2d",(function(){return xc})),n.d(e,"conv2dTranspose",(function(){return Rc})),n.d(e,"conv3d",(function(){return bc})),n.d(e,"conv3dTranspose",(function(){return Tc})),n.d(e,"cos",(function(){return Vs})),n.d(e,"cosh",(function(){return Ws})),n.d(e,"cumsum",(function(){return gr})),n.d(e,"customGrad",(function(){return sa})),n.d(e,"deprecationWarn",(function(){return qe})),n.d(e,"depthToSpace",(function(){return yr})),n.d(e,"depthwiseConv2d",(function(){return Ec})),n.d(e,"diag",(function(){return kl})),n.d(e,"disableDeprecationWarnings",(function(){return He})),n.d(e,"dispose",(function(){return Je})),n.d(e,"disposeVariables",(function(){return Ke})),n.d(e,"div",(function(){return Fu})),n.d(e,"divNoNan",(function(){return Mu})),n.d(e,"divStrict",(function(){return Bu})),n.d(e,"dot",(function(){return Ac})),n.d(e,"dropout",(function(){return Al})),n.d(e,"elu",(function(){return sl})),n.d(e,"enableDebugMode",(function(){return Ge})),n.d(e,"enableProdMode",(function(){return je})),n.d(e,"engine",(function(){return Xe})),n.d(e,"env",(function(){return f})),n.d(e,"equal",(function(){return Ju})),n.d(e,"equalStrict",(function(){return Zu})),n.d(e,"erf",(function(){return zs})),n.d(e,"exp",(function(){return Us})),n.d(e,"expandDims",(function(){return xr})),n.d(e,"expm1",(function(){return js})),n.d(e,"eye",(function(){return br})),n.d(e,"fft",(function(){return Cl})),n.d(e,"fill",(function(){return Un})),n.d(e,"findBackend",(function(){return on})),n.d(e,"findBackendFactory",(function(){return sn})),n.d(e,"floor",(function(){return Gs})),n.d(e,"floorDiv",(function(){return Pu})),n.d(e,"frame",(function(){return Ml})),n.d(e,"fused",(function(){return hp})),n.d(e,"gather",(function(){return fc})),n.d(e,"gatherND",(function(){return Tl})),n.d(e,"getBackend",(function(){return rn})),n.d(e,"getGradient",(function(){return g})),n.d(e,"getKernel",(function(){return v})),n.d(e,"getKernelsForBackend",(function(){return y})),n.d(e,"grad",(function(){return na})),n.d(e,"grads",(function(){return ra})),n.d(e,"greater",(function(){return tc})),n.d(e,"greaterEqual",(function(){return ec})),n.d(e,"greaterEqualStrict",(function(){return nc})),n.d(e,"greaterStrict",(function(){return rc})),n.d(e,"hammingWindow",(function(){return Fl})),n.d(e,"hannWindow",(function(){return _l})),n.d(e,"ifft",(function(){return El})),n.d(e,"imag",(function(){return kn})),n.d(e,"image",(function(){return ip})),n.d(e,"inTopKAsync",(function(){return Ll})),n.d(e,"io",(function(){return gf})),n.d(e,"irfft",(function(){return Nl})),n.d(e,"isFinite",(function(){return nu})),n.d(e,"isInf",(function(){return eu})),n.d(e,"isNaN",(function(){return tu})),n.d(e,"keep",(function(){return Ze})),n.d(e,"leakyRelu",(function(){return ul})),n.d(e,"less",(function(){return ac})),n.d(e,"lessEqual",(function(){return oc})),n.d(e,"lessEqualStrict",(function(){return ic})),n.d(e,"lessStrict",(function(){return sc})),n.d(e,"linalg",(function(){return Zl})),n.d(e,"linspace",(function(){return jn})),n.d(e,"localResponseNormalization",(function(){return hl})),n.d(e,"log",(function(){return Hs})),n.d(e,"log1p",(function(){return qs})),n.d(e,"logSigmoid",(function(){return Ks})),n.d(e,"logSoftmax",(function(){return la})),n.d(e,"logSumExp",(function(){return tl})),n.d(e,"logicalAnd",(function(){return Su})),n.d(e,"logicalNot",(function(){return Nu})),n.d(e,"logicalOr",(function(){return Iu})),n.d(e,"logicalXor",(function(){return Ru})),n.d(e,"losses",(function(){return Xl})),n.d(e,"matMul",(function(){return kc})),n.d(e,"math",(function(){return xf})),n.d(e,"max",(function(){return el})),n.d(e,"maxPool",(function(){return Vc})),n.d(e,"maxPool3d",(function(){return Uc})),n.d(e,"maximum",(function(){return Lu})),n.d(e,"maximumStrict",(function(){return Vu})),n.d(e,"mean",(function(){return nl})),n.d(e,"memory",(function(){return Ye})),n.d(e,"min",(function(){return rl})),n.d(e,"minimum",(function(){return Wu})),n.d(e,"minimumStrict",(function(){return zu})),n.d(e,"mod",(function(){return Uu})),n.d(e,"modStrict",(function(){return ju})),n.d(e,"moments",(function(){return al})),n.d(e,"movingAverage",(function(){return yl})),n.d(e,"mul",(function(){return Gu})),n.d(e,"mulStrict",(function(){return Hu})),n.d(e,"multiRNNCell",(function(){return gl})),n.d(e,"multinomial",(function(){return wr})),n.d(e,"neg",(function(){return Xs})),n.d(e,"nextFrame",(function(){return jf})),n.d(e,"norm",(function(){return ml})),n.d(e,"notEqual",(function(){return uc})),n.d(e,"notEqualStrict",(function(){return cc})),n.d(e,"oneHot",(function(){return Cr})),n.d(e,"ones",(function(){return Wn})),n.d(e,"onesLike",(function(){return Hn})),n.d(e,"op",(function(){return In})),n.d(e,"outerProduct",(function(){return Oc})),n.d(e,"pad",(function(){return Er})),n.d(e,"pad1d",(function(){return Sr})),n.d(e,"pad2d",(function(){return Nr})),n.d(e,"pad3d",(function(){return Ir})),n.d(e,"pad4d",(function(){return Rr})),n.d(e,"pool",(function(){return zc})),n.d(e,"pow",(function(){return qu})),n.d(e,"powStrict",(function(){return Ku})),n.d(e,"prelu",(function(){return cl})),n.d(e,"print",(function(){return fr})),n.d(e,"prod",(function(){return il})),n.d(e,"profile",(function(){return $e})),n.d(e,"rand",(function(){return Tr})),n.d(e,"randomGamma",(function(){return Ar})),n.d(e,"randomNormal",(function(){return kr})),n.d(e,"randomUniform",(function(){return Or})),n.d(e,"range",(function(){return Gn})),n.d(e,"ready",(function(){return nn})),n.d(e,"real",(function(){return Tn})),n.d(e,"reciprocal",(function(){return Ys})),n.d(e,"registerBackend",(function(){return un})),n.d(e,"registerGradient",(function(){return b})),n.d(e,"registerKernel",(function(){return x})),n.d(e,"relu",(function(){return ll})),n.d(e,"relu6",(function(){return pl})),n.d(e,"removeBackend",(function(){return an})),n.d(e,"reshape",(function(){return Dr})),n.d(e,"reverse",(function(){return Dc})),n.d(e,"reverse1d",(function(){return _c})),n.d(e,"reverse2d",(function(){return Fc})),n.d(e,"reverse3d",(function(){return Mc})),n.d(e,"reverse4d",(function(){return Bc})),n.d(e,"rfft",(function(){return Sl})),n.d(e,"round",(function(){return $s})),n.d(e,"rsqrt",(function(){return Qs})),n.d(e,"scalar",(function(){return Dn})),n.d(e,"scatterND",(function(){return wl})),n.d(e,"selu",(function(){return fl})),n.d(e,"separableConv2d",(function(){return Ic})),n.d(e,"serialization",(function(){return Nf})),n.d(e,"setBackend",(function(){return en})),n.d(e,"setPlatform",(function(){return ln})),n.d(e,"setdiff1dAsync",(function(){return Vr})),n.d(e,"sigmoid",(function(){return Js})),n.d(e,"sign",(function(){return Zs})),n.d(e,"signal",(function(){return Pl})),n.d(e,"sin",(function(){return ru})),n.d(e,"sinh",(function(){return au})),n.d(e,"slice",(function(){return Gc})),n.d(e,"slice1d",(function(){return Hc})),n.d(e,"slice2d",(function(){return qc})),n.d(e,"slice3d",(function(){return Kc})),n.d(e,"slice4d",(function(){return Xc})),n.d(e,"slice_util",(function(){return ea})),n.d(e,"softmax",(function(){return ca})),n.d(e,"softplus",(function(){return ou})),n.d(e,"spaceToBatchND",(function(){return _r})),n.d(e,"sparseToDense",(function(){return Rl})),n.d(e,"spectral",(function(){return Il})),n.d(e,"split",(function(){return Jn})),n.d(e,"sqrt",(function(){return iu})),n.d(e,"square",(function(){return ks})),n.d(e,"squaredDifference",(function(){return Xu})),n.d(e,"squaredDifferenceStrict",(function(){return Yu})),n.d(e,"squeeze",(function(){return Fr})),n.d(e,"stack",(function(){return Mr})),n.d(e,"step",(function(){return su})),n.d(e,"stft",(function(){return Bl})),n.d(e,"stridedSlice",(function(){return xl})),n.d(e,"sub",(function(){return $u})),n.d(e,"subStrict",(function(){return Qu})),n.d(e,"sum",(function(){return ol})),n.d(e,"tan",(function(){return uu})),n.d(e,"tanh",(function(){return cu})),n.d(e,"tensor",(function(){return An})),n.d(e,"tensor1d",(function(){return _n})),n.d(e,"tensor2d",(function(){return Fn})),n.d(e,"tensor3d",(function(){return Mn})),n.d(e,"tensor4d",(function(){return Bn})),n.d(e,"tensor5d",(function(){return Pn})),n.d(e,"tensor6d",(function(){return Ln})),n.d(e,"tensor_util",(function(){return Mt})),n.d(e,"test_util",(function(){return kf})),n.d(e,"tidy",(function(){return Qe})),n.d(e,"tile",(function(){return Br})),n.d(e,"time",(function(){return tn})),n.d(e,"topk",(function(){return bl})),n.d(e,"train",(function(){return zf})),n.d(e,"transpose",(function(){return dl})),n.d(e,"truncatedNormal",(function(){return Pr})),n.d(e,"unregisterGradient",(function(){return C})),n.d(e,"unregisterKernel",(function(){return w})),n.d(e,"unsortedSegmentSum",(function(){return dc})),n.d(e,"unstack",(function(){return Lr})),n.d(e,"util",(function(){return pt})),n.d(e,"valueAndGrad",(function(){return aa})),n.d(e,"valueAndGrads",(function(){return oa})),n.d(e,"variable",(function(){return Vn})),n.d(e,"variableGrads",(function(){return ia})),n.d(e,"version_core",(function(){return Af})),n.d(e,"webgl",(function(){return Of})),n.d(e,"where",(function(){return Tu})),n.d(e,"whereAsync",(function(){return ku})),n.d(e,"zeros",(function(){return zn})),n.d(e,"zerosLike",(function(){return qn}));
|
|
/**
|
|
* @license
|
|
* Copyright 2019 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
var i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};function s(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}function u(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){t.done?a(t.value):new n((function(e){e(t.value)})).then(i,s)}u((r=r.apply(t,e||[])).next())}))}function c(t,e){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(a=2&o[0]?r.return:o[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,o[1])).done)return a;switch(r=0,a&&(o=[2&o[0],a.value]),o[0]){case 0:case 1:a=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(a=(a=i.trys).length>0&&a[a.length-1])&&(6===o[0]||2===o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]<a[3])){i.label=o[1];break}if(6===o[0]&&i.label<a[1]){i.label=a[1],a=o;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(o);break}a[2]&&i.ops.pop(),i.trys.pop();continue}o=e.call(t,i)}catch(t){o=[6,t],r=0}finally{n=a=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}}var l=function(){function t(t){this.global=t,this.flags={},this.flagRegistry={},this.urlFlags={},this.populateURLFlags()}return t.prototype.setPlatform=function(t,e){null!=this.platform&&console.warn("Platform "+this.platformName+" has already been set. Overwriting the platform with "+e+"."),this.platformName=t,this.platform=e},t.prototype.registerFlag=function(t,e,n){if(this.flagRegistry[t]={evaluationFn:e,setHook:n},null!=this.urlFlags[t]){var r=this.urlFlags[t];console.warn("Setting feature override from URL "+t+": "+r+"."),this.set(t,r)}},t.prototype.get=function(t){return t in this.flags||(this.flags[t]=this.evaluateFlag(t)),this.flags[t]},t.prototype.getNumber=function(t){return this.get(t)},t.prototype.getBool=function(t){return this.get(t)},t.prototype.getFlags=function(){return this.flags},Object.defineProperty(t.prototype,"features",{get:function(){return this.flags},enumerable:!0,configurable:!0}),t.prototype.set=function(t,e){if(null==this.flagRegistry[t])throw new Error("Cannot set flag "+t+" as it has not been registered.");this.flags[t]=e,null!=this.flagRegistry[t].setHook&&this.flagRegistry[t].setHook(e)},t.prototype.evaluateFlag=function(t){if(null==this.flagRegistry[t])throw new Error("Cannot evaluate flag '"+t+"': no evaluation function found.");return this.flagRegistry[t].evaluationFn()},t.prototype.setFlags=function(t){this.flags=Object.assign({},t)},t.prototype.reset=function(){this.flags={},this.urlFlags={},this.populateURLFlags()},t.prototype.populateURLFlags=function(){var t=this;if(void 0!==this.global&&void 0!==this.global.location&&void 0!==this.global.location.search){var e,n,r=(e=this.global.location.search,n={},e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];return p(n,e[0],e[1]),e.join("=")})),n);"tfjsflags"in r&&r.tfjsflags.split(",").forEach((function(e){var n=e.split(":"),r=n[0],a=n[1];t.urlFlags[r]=function(t,e){if("true"===(e=e.toLowerCase())||"false"===e)return"true"===e;if(""+ +e===e)return+e;throw new Error("Could not parse value flag value "+e+" for flag "+t+".")}(r,a)}))}},t}();function p(t,e,n){t[decodeURIComponent(e)]=decodeURIComponent(n||"")}function f(){return d}var d=null,h=new Map,m=new Map;function v(t,e){var n=E(t,e);return h.get(n)}function g(t){return m.get(t)}function y(t){for(var e=h.entries(),n=[];;){var r=e.next(),a=r.done,o=r.value;if(a)break;var i=o[0],s=o[1];i.split("_")[0]===t&&n.push(s)}return n}function x(t){var e=t.kernelName,n=t.backendName,r=E(e,n);if(h.has(r))throw new Error("The kernel '"+e+"' for backend '"+n+"' is already registered");h.set(r,t)}function b(t){var e=t.kernelName;m.has(e)&&console.warn("Overriding the gradient for '"+e+"'"),m.set(e,t)}function w(t,e){var n=E(t,e);if(!h.has(n))throw new Error("The kernel '"+t+"' for backend '"+e+"' is not registered");h.delete(n)}function C(t){if(!m.has(t))throw new Error("The gradient '"+t+"' for backend is not registered");m.delete(t)}function E(t,e){return e+"_"+t}function S(t){for(var e=t.length,n=0,r=0;e>0;)r=Math.random()*e|0,n=t[--e],t[e]=t[r],t[r]=n}function N(t,e,n){return Math.max(t,Math.min(e,n))}function I(t){return t%2==0?t:t+1}function R(t){for(var e=0,n=0;n<t.length;n++)e+=t[n];return e}function T(t,e){if(!t)throw new Error("string"==typeof e?e:e())}function k(t,e,n){void 0===n&&(n=""),T(_(t,e),(function(){return n+" Shapes "+t+" and "+e+" must match"}))}function A(t){T(null!=t,(function(){return"The input to the tensor constructor must be a non-null value."}))}function O(t,e,n){if(void 0===e&&(e=[]),void 0===n&&(n=!1),null==e&&(e=[]),Array.isArray(t)||K(t)&&!n)for(var r=0;r<t.length;++r)O(t[r],e,n);else e.push(t);return e}function D(t){if(0===t.length)return 1;for(var e=t[0],n=1;n<t.length;n++)e*=t[n];return e}function _(t,e){if(t===e)return!0;if(null==t||null==e)return!1;if(t.length!==e.length)return!1;for(var n=0;n<t.length;n++)if(t[n]!==e[n])return!1;return!0}function F(t){return t%1==0}function M(t){if(null!=Math.tanh)return Math.tanh(t);if(t===1/0)return 1;if(t===-1/0)return-1;var e=Math.exp(2*t);return(e-1)/(e+1)}function B(t){var e=Math.ceil(Math.sqrt(t));return[e,Math.ceil(t/e)]}function P(t,e){return e<=t.length?t:t+" ".repeat(e-t.length)}function L(t,e,n){return void 0===e&&(e=function(t){return 0}),new Promise((function(r,a){var o=0,i=function(){if(t())r();else{o++;var s=e(o);null!=n&&o>=n?a():setTimeout(i,s)}};i()}))}function V(t,e){for(var n=1,r=-1,a=0;a<t.length;++a)if(t[a]>=0)n*=t[a];else if(-1===t[a]){if(-1!==r)throw Error("Shapes can only have 1 implicit size. Found -1 at dim "+r+" and dim "+a);r=a}else if(t[a]<0)throw Error("Shapes can not be < 0. Found "+t[a]+" at dim "+a);if(-1===r){if(e>0&&e!==n)throw Error("Size("+e+") must match the product of shape "+t);return t}if(0===n)throw Error("Cannot infer the missing size in ["+t+"] when there are 0 elements");if(e%n!=0)throw Error("The implicit shape can't be a fractional number. Got "+e+" / "+n);var o=t.slice();return o[r]=e/n,o}function W(t,e){var n=e.length;return T((t=null==t?e.map((function(t,e){return e})):[].concat(t)).every((function(t){return t>=-n&&t<n})),(function(){return"All values in axis param must be in range [-"+n+", "+n+") but got axis "+t})),T(t.every((function(t){return F(t)})),(function(){return"All values in axis param must be integers but got axis "+t})),t.map((function(t){return t<0?n+t:t}))}function z(t,e){for(var n=[],r=[],a=null!=e&&Array.isArray(e)&&0===e.length,o=null==e||a?null:W(e,t).sort(),i=0,s=0;s<t.length;++s){if(null!=o){if(o[i]===s&&1!==t[s])throw new Error("Can't squeeze axis "+s+" since its dim '"+t[s]+"' is not 1");(null==o[i]||o[i]>s)&&1===t[s]&&(n.push(t[s]),r.push(s)),o[i]<=s&&i++}1!==t[s]&&(n.push(t[s]),r.push(s))}return{newShape:n,keptDims:r}}function U(t,e){var n=null;if(null==t||"float32"===t)n=new Float32Array(e);else if("int32"===t)n=new Int32Array(e);else{if("bool"!==t)throw new Error("Unknown data type "+t);n=new Uint8Array(e)}return n}function j(t,e){var n=null;if(null==t||"float32"===t)n=new Float32Array(e);else if("int32"===t)n=new Int32Array(e);else if("bool"===t)n=new Uint8Array(e);else{if("string"!==t)throw new Error("Unknown data type "+t);n=new Array(e)}return n}function G(t,e){for(var n=0;n<t.length;n++){var r=t[n];if(isNaN(r)||!isFinite(r))throw Error("A tensor of type "+e+" being uploaded contains "+r+".")}}function H(t){return"bool"===t||"complex64"===t||"float32"===t||"int32"===t||"string"===t}function q(t,e){return!("complex64"===e||"float32"===e&&"complex64"!==t||"int32"===e&&"float32"!==t&&"complex64"!==t||"bool"===e&&"bool"===t)}function K(t){return t instanceof Float32Array||t instanceof Int32Array||t instanceof Uint8Array}function X(t){if("float32"===t||"int32"===t)return 4;if("complex64"===t)return 8;if("bool"===t)return 1;throw new Error("Unknown dtype "+t)}function Y(t){if(null==t)return 0;var e=0;return t.forEach((function(t){return e+=t.length})),e}function $(t){return"string"==typeof t||t instanceof String}function Q(t){return"boolean"==typeof t}function J(t){return"number"==typeof t}function Z(t){return Array.isArray(t)?Z(t[0]):t instanceof Float32Array?"float32":t instanceof Int32Array||t instanceof Uint8Array?"int32":J(t)?"float32":$(t)?"string":Q(t)?"bool":"float32"}function tt(t){return!!(t&&t.constructor&&t.call&&t.apply)}function et(t,e){for(var n=e;n<t;++n)if(t%n==0)return n;return t}function nt(t){var e=t.length;if(e<2)return[];var n=new Array(e-1);n[e-2]=t[e-1];for(var r=e-3;r>=0;--r)n[r]=n[r+1]*t[r+1];return n}function rt(t,e,n){if("string"===e)throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(t)&&(t=O(t)),n&&G(t,e),function(t,e){return t instanceof Float32Array&&"float32"===e||t instanceof Int32Array&&"int32"===e||t instanceof Uint8Array&&"bool"===e}(t,e))return t;if(null==e||"float32"===e||"complex64"===e)return new Float32Array(t);if("int32"===e)return new Int32Array(t);if("bool"===e){for(var r=new Uint8Array(t.length),a=0;a<r.length;++a)0!==Math.round(t[a])&&(r[a]=1);return r}throw new Error("Unknown data type "+e)}function at(t,e){if(0===t.length)return e[0];var n=t.reduce((function(t,e){return t*e}));if(0===n)return[];if(n!==e.length)throw new Error("["+t+"] does not match the input size.");return function t(e,n,r){var a=new Array;if(1===n.length)for(var o=n[0],i=0;i<o;i++)a[i]=r[e+i];else{o=n[0];var s=n.slice(1),u=s.reduce((function(t,e){return t*e}));for(i=0;i<o;i++)a[i]=t(e+i*u,s,r)}return a}(0,t,e)}function ot(t,e){for(var n=it(t,e),r=0;r<n.length;r++)n[r]=1;return n}function it(t,e){if(null==e||"float32"===e||"complex64"===e)return new Float32Array(t);if("int32"===e)return new Int32Array(t);if("bool"===e)return new Uint8Array(t);throw new Error("Unknown data type "+e)}function st(){return f().platform.now()}function ut(t){t.forEach((function(e){T(Number.isInteger(e)&&e>=0,(function(){return"Tensor must have a shape comprised of positive integers but got shape ["+t+"]."}))}))}function ct(t,e){return void 0===e&&(e="utf-8"),e=e||"utf-8",f().platform.encode(t,e)}function lt(t,e){return void 0===e&&(e="utf-8"),e=e||"utf-8",f().platform.decode(t,e)}var pt=Object.freeze({shuffle:S,clamp:N,nearestLargerEven:I,sum:R,randUniform:function(t,e){var n=Math.random();return e*n+(1-n)*t},distSquared:function(t,e){for(var n=0,r=0;r<t.length;r++){var a=Number(t[r])-Number(e[r]);n+=a*a}return n},assert:T,assertShapesMatch:k,assertNonNull:A,flatten:O,sizeFromShape:D,isScalarShape:function(t){return 0===t.length},arraysEqual:_,isInt:F,tanh:M,sizeToSquarishShape:B,createShuffledIndices:function(t){for(var e=new Uint32Array(t),n=0;n<t;++n)e[n]=n;return S(e),e},rightPad:P,repeatedTry:L,inferFromImplicitShape:V,parseAxisParam:W,squeezeShape:z,getTypedArrayFromDType:U,getArrayFromDType:j,checkConversionForErrors:G,isValidDtype:H,hasEncodingLoss:q,isTypedArray:K,bytesPerElement:X,bytesFromStringArray:Y,isString:$,isBoolean:Q,isNumber:J,inferDtype:Z,isFunction:tt,nearestDivisor:et,computeStrides:nt,toTypedArray:rt,toNestedArray:at,makeOnesTypedArray:ot,makeZerosTypedArray:it,now:st,assertNonNegativeIntegerDimensions:ut,fetch:function(t,e){return f().platform.fetch(t,e)},encodeString:ct,decodeString:lt}),ft=function(){function t(t,e){this.backendTimer=t,this.logger=e,null==e&&(this.logger=new dt)}return t.prototype.profileKernel=function(t,e,n){var r,a=this,o=this.backendTimer.time((function(){r=n()}));return r.forEach((function(n){n.data().then((function(r){!function(t,e,n){if("float32"!==e)return!1;for(var r=0;r<t.length;r++){var a=t[r];if(isNaN(a)||!isFinite(a))return console.warn("Found "+a+" in the result of '"+n+"'"),!0}}(r,n.dtype,t),o.then((function(o){var i="";null!=o.getExtraProfileInfo&&(i=o.getExtraProfileInfo()),a.logger.logKernelProfile(t,n,r,o.kernelMs,e,i)}))}))})),r},t}(),dt=function(){function t(){}return t.prototype.logKernelProfile=function(t,e,n,r,a,o){var i=P(r+"ms",9),s=P(t,25),u=e.rank,c=e.size,l=P(e.shape.toString(),14),p="";for(var f in a){var d=a[f].shape||e.shape,h=d.length;p+=f+": "+h+"D "+(h>0?d:"")+" "}console.log("%c"+s+"\t%c"+i+"\t%c"+u+"D "+l+"\t%c"+c+"\t%c"+p+"\t%c"+o,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")},t}();function ht(t,e,n){return P(Array.isArray(t)?parseFloat(t[0].toFixed(7))+" + "+parseFloat(t[1].toFixed(7))+"j":$(t)?"'"+t+"'":"bool"===n?mt(t):parseFloat(t.toFixed(7)).toString(),e)}function mt(t){return 0===t?"false":"true"}function vt(t){for(var e=[],n=0;n<t.length;n+=2)e.push([t[n],t[n+1]]);return e}var gt=function(){function t(t,e,n){var r=this;if(this.dtype=e,this.shape=t.slice(),this.size=D(t),null!=n){var a=n.length;T(a===this.size,(function(){return"Length of values '"+a+"' does not match the size inferred by the shape '"+r.size+"'."}))}if("complex64"===e)throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=n||j(e,this.size),this.strides=nt(t)}return t.prototype.set=function(t){for(var e=this,n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];0===n.length&&(n=[0]),T(n.length===this.rank,(function(){return"The number of provided coordinates ("+n.length+") must match the rank ("+e.rank+")"}));var a=this.locToIndex(n);this.values[a]=t},t.prototype.get=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];0===t.length&&(t=[0]);for(var n=0,r=0,a=t;r<a.length;r++){var o=a[r];if(o<0||o>=this.shape[n]){var i="Requested out of range element at "+t+". Buffer shape="+this.shape;throw new Error(i)}n++}for(var s=t[t.length-1],u=0;u<t.length-1;++u)s+=this.strides[u]*t[u];return this.values[s]},t.prototype.locToIndex=function(t){if(0===this.rank)return 0;if(1===this.rank)return t[0];for(var e=t[t.length-1],n=0;n<t.length-1;++n)e+=this.strides[n]*t[n];return e},t.prototype.indexToLoc=function(t){if(0===this.rank)return[];if(1===this.rank)return[t];for(var e=new Array(this.shape.length),n=0;n<e.length-1;++n)e[n]=Math.floor(t/this.strides[n]),t-=e[n]*this.strides[n];return e[e.length-1]=t,e},Object.defineProperty(t.prototype,"rank",{get:function(){return this.shape.length},enumerable:!0,configurable:!0}),t.prototype.toTensor=function(){return yt().makeTensor(this.values,this.shape,this.dtype)},t}(),yt=null,xt=null,bt=null,wt=function(){function t(t,e,n,r){this.kept=!1,this.isDisposedInternal=!1,this.shape=t.slice(),this.dtype=e||"float32",this.size=D(t),this.strides=nt(t),this.dataId=n,this.id=r,this.rankType=this.rank<5?this.rank.toString():"higher"}return t.prototype.flatten=function(){return this.throwIfDisposed(),this.as1D()},t.prototype.asScalar=function(){return this.throwIfDisposed(),T(1===this.size,(function(){return"The array must have only 1 element."})),this.reshape([])},t.prototype.as1D=function(){return this.throwIfDisposed(),this.reshape([this.size])},t.prototype.as2D=function(t,e){return this.throwIfDisposed(),this.reshape([t,e])},t.prototype.as3D=function(t,e,n){return this.throwIfDisposed(),this.reshape([t,e,n])},t.prototype.as4D=function(t,e,n,r){return this.throwIfDisposed(),this.reshape([t,e,n,r])},t.prototype.as5D=function(t,e,n,r,a){return this.throwIfDisposed(),this.reshape([t,e,n,r,a])},t.prototype.asType=function(t){return this.throwIfDisposed(),xt.cast(this,t)},Object.defineProperty(t.prototype,"rank",{get:function(){return this.shape.length},enumerable:!0,configurable:!0}),t.prototype.buffer=function(){return u(this,void 0,void 0,(function(){var t;return c(this,(function(e){switch(e.label){case 0:return[4,this.data()];case 1:return t=e.sent(),[2,xt.buffer(this.shape,this.dtype,t)]}}))}))},t.prototype.bufferSync=function(){return xt.buffer(this.shape,this.dtype,this.dataSync())},t.prototype.array=function(){return u(this,void 0,void 0,(function(){var t;return c(this,(function(e){switch(e.label){case 0:return[4,this.data()];case 1:return t=e.sent(),[2,at(this.shape,t)]}}))}))},t.prototype.arraySync=function(){return at(this.shape,this.dataSync())},t.prototype.data=function(){return u(this,void 0,void 0,(function(){var t,e;return c(this,(function(n){switch(n.label){case 0:return this.throwIfDisposed(),t=yt().read(this.dataId),"string"!==this.dtype?[3,2]:[4,t];case 1:e=n.sent();try{return[2,e.map((function(t){return lt(t)}))]}catch(t){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}n.label=2;case 2:return[2,t]}}))}))},t.prototype.dataSync=function(){this.throwIfDisposed();var t=yt().readSync(this.dataId);if("string"===this.dtype)try{return t.map((function(t){return lt(t)}))}catch(t){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return t},t.prototype.bytes=function(){return u(this,void 0,void 0,(function(){var t;return c(this,(function(e){switch(e.label){case 0:return this.throwIfDisposed(),[4,yt().read(this.dataId)];case 1:return t=e.sent(),"string"===this.dtype?[2,t]:[2,new Uint8Array(t.buffer)]}}))}))},t.prototype.dispose=function(){this.isDisposed||(yt().disposeTensor(this),this.isDisposedInternal=!0)},Object.defineProperty(t.prototype,"isDisposed",{get:function(){return this.isDisposedInternal},enumerable:!0,configurable:!0}),t.prototype.throwIfDisposed=function(){if(this.isDisposed)throw new Error("Tensor is disposed.")},t.prototype.toFloat=function(){return this.asType("float32")},t.prototype.toInt=function(){return this.asType("int32")},t.prototype.toBool=function(){return this.asType("bool")},t.prototype.print=function(t){return void 0===t&&(t=!1),xt.print(this,t)},t.prototype.reshape=function(t){return this.throwIfDisposed(),xt.reshape(this,t)},t.prototype.reshapeAs=function(t){return this.throwIfDisposed(),this.reshape(t.shape)},t.prototype.expandDims=function(t){return void 0===t&&(t=0),xt.expandDims(this,t)},t.prototype.cumsum=function(t,e,n){return void 0===t&&(t=0),void 0===e&&(e=!1),void 0===n&&(n=!1),xt.cumsum(this,t,e,n)},t.prototype.squeeze=function(t){return this.throwIfDisposed(),xt.squeeze(this,t)},t.prototype.clone=function(){return this.throwIfDisposed(),xt.clone(this)},t.prototype.oneHot=function(t,e,n){return this.throwIfDisposed(),xt.oneHot(this,t,e,n)},t.prototype.toString=function(t){return void 0===t&&(t=!1),function(t,e,n,r){var a=nt(e),o=function(t,e,n,r){var a=D(e),o=r[r.length-1],i=new Array(o).fill(0),s=e.length,u="complex64"===n?vt(t):t;if(s>1)for(var c=0;c<a/o;c++)for(var l=c*o,p=0;p<o;p++)i[p]=Math.max(i[p],ht(u[l+p],0,n).length);return i}(t,e,n,a),i=e.length,s=function t(e,n,r,a,o,i){void 0===i&&(i=!0);var s="complex64"===r?2:1,u=n[0],c=n.length;if(0===c)return"complex64"===r?[ht(vt(e)[0],0,r)]:"bool"===r?[mt(e[0])]:[e[0].toString()];if(1===c){if(u>20){var l=3*s,p=Array.from(e.slice(0,l)),f=Array.from(e.slice((u-3)*s,u*s));return"complex64"===r&&(p=vt(p),f=vt(f)),["["+p.map((function(t,e){return ht(t,o[e],r)})).join(", ")+", ..., "+f.map((function(t,e){return ht(t,o[u-3+e],r)})).join(", ")+"]"]}return["["+("complex64"===r?vt(e):Array.from(e)).map((function(t,e){return ht(t,o[e],r)})).join(", ")+"]"]}var d=n.slice(1),h=a.slice(1),m=a[0]*s,v=[];if(u>20){for(var g=0;g<3;g++){var y=(x=g*m)+m;v.push.apply(v,t(e.slice(x,y),d,r,h,o,!1))}for(v.push("..."),g=u-3;g<u;g++)y=(x=g*m)+m,v.push.apply(v,t(e.slice(x,y),d,r,h,o,g===u-1))}else for(g=0;g<u;g++){var x;y=(x=g*m)+m,v.push.apply(v,t(e.slice(x,y),d,r,h,o,g===u-1))}var b=2===c?",":"";for(v[0]="["+v[0]+b,g=1;g<v.length-1;g++)v[g]=" "+v[g]+b;var w=",\n";for(g=2;g<c;g++)w+="\n";return v[v.length-1]=" "+v[v.length-1]+"]"+(i?"":w),v}(t,e,n,a,o),u=["Tensor"];return r&&(u.push(" dtype: "+n),u.push(" rank: "+i),u.push(" shape: ["+e+"]"),u.push(" values:")),u.push(s.map((function(t){return" "+t})).join("\n")),u.join("\n")}(this.dataSync(),this.shape,this.dtype,t)},t.prototype.tile=function(t){return this.throwIfDisposed(),xt.tile(this,t)},t.prototype.gather=function(t,e){return void 0===e&&(e=0),this.throwIfDisposed(),xt.gather(this,t,e)},t.prototype.matMul=function(t,e,n){return void 0===e&&(e=!1),void 0===n&&(n=!1),this.throwIfDisposed(),xt.matMul(this,t,e,n)},t.prototype.dot=function(t){return this.throwIfDisposed(),xt.dot(this,t)},t.prototype.norm=function(t,e,n){return void 0===t&&(t="euclidean"),void 0===e&&(e=null),void 0===n&&(n=!1),this.throwIfDisposed(),xt.norm(this,t,e,n)},t.prototype.slice=function(t,e){return this.throwIfDisposed(),xt.slice(this,t,e)},t.prototype.reverse=function(t){return this.throwIfDisposed(),xt.reverse(this,t)},t.prototype.concat=function(e,n){return void 0===n&&(n=0),this.throwIfDisposed(),e instanceof t&&(e=[e]),xt.concat([this].concat(e),n)},t.prototype.split=function(t,e){return void 0===e&&(e=0),this.throwIfDisposed(),xt.split(this,t,e)},t.prototype.stack=function(t,e){return void 0===e&&(e=0),xt.stack([this,t],e)},t.prototype.unstack=function(t){return void 0===t&&(t=0),xt.unstack(this,t)},t.prototype.pad=function(t,e){return void 0===e&&(e=0),xt.pad(this,t,e)},t.prototype.batchNormalization=function(t,e,n,r,a){return void 0===n&&(n=.001),bt("tf.batchNormalization() is going away. Use tf.batchNorm() instead, and note the positional argument change of scale, offset, and varianceEpsilon"),this.batchNorm(t,e,a,r,n)},t.prototype.batchNorm=function(t,e,n,r,a){return void 0===a&&(a=.001),this.throwIfDisposed(),xt.batchNorm(this,t,e,n,r,a)},t.prototype.all=function(t,e){return void 0===t&&(t=null),void 0===e&&(e=!1),this.throwIfDisposed(),xt.all(this,t,e)},t.prototype.any=function(t,e){return void 0===t&&(t=null),void 0===e&&(e=!1),this.throwIfDisposed(),xt.any(this,t,e)},t.prototype.logSumExp=function(t,e){return void 0===t&&(t=null),void 0===e&&(e=!1),this.throwIfDisposed(),xt.logSumExp(this,t,e)},t.prototype.sum=function(t,e){return void 0===t&&(t=null),void 0===e&&(e=!1),this.throwIfDisposed(),xt.sum(this,t,e)},t.prototype.prod=function(t,e){return void 0===t&&(t=null),void 0===e&&(e=!1),this.throwIfDisposed(),xt.prod(this,t,e)},t.prototype.mean=function(t,e){return void 0===t&&(t=null),void 0===e&&(e=!1),this.throwIfDisposed(),xt.mean(this,t,e)},t.prototype.min=function(t,e){return void 0===t&&(t=null),void 0===e&&(e=!1),this.throwIfDisposed(),xt.min(this,t,e)},t.prototype.max=function(t,e){return void 0===t&&(t=null),void 0===e&&(e=!1),this.throwIfDisposed(),xt.max(this,t,e)},t.prototype.argMin=function(t){return void 0===t&&(t=null),this.throwIfDisposed(),xt.argMin(this,t)},t.prototype.argMax=function(t){return void 0===t&&(t=null),this.throwIfDisposed(),xt.argMax(this,t)},t.prototype.cast=function(t){return this.throwIfDisposed(),xt.cast(this,t)},t.prototype.add=function(t){return this.throwIfDisposed(),xt.add(this,t)},t.prototype.addStrict=function(t){return this.throwIfDisposed(),xt.addStrict(this,t)},t.prototype.atan2=function(t){return this.throwIfDisposed(),xt.atan2(this,t)},t.prototype.sub=function(t){return this.throwIfDisposed(),xt.sub(this,t)},t.prototype.subStrict=function(t){return this.throwIfDisposed(),xt.subStrict(this,t)},t.prototype.pow=function(t){return this.throwIfDisposed(),xt.pow(this,t)},t.prototype.powStrict=function(t){return this.throwIfDisposed(),xt.powStrict(this,t)},t.prototype.mul=function(t){return this.throwIfDisposed(),xt.mul(this,t)},t.prototype.mulStrict=function(t){return this.throwIfDisposed(),xt.mulStrict(this,t)},t.prototype.div=function(t){return this.throwIfDisposed(),xt.div(this,t)},t.prototype.divNoNan=function(t){return this.throwIfDisposed(),xt.divNoNan(this,t)},t.prototype.floorDiv=function(t){return this.throwIfDisposed(),xt.floorDiv(this,t)},t.prototype.divStrict=function(t){return this.throwIfDisposed(),xt.divStrict(this,t)},t.prototype.minimum=function(t){return this.throwIfDisposed(),xt.minimum(this,t)},t.prototype.minimumStrict=function(t){return this.throwIfDisposed(),xt.minimumStrict(this,t)},t.prototype.maximum=function(t){return this.throwIfDisposed(),xt.maximum(this,t)},t.prototype.maximumStrict=function(t){return this.throwIfDisposed(),xt.maximumStrict(this,t)},t.prototype.mod=function(t){return this.throwIfDisposed(),xt.mod(this,t)},t.prototype.modStrict=function(t){return this.throwIfDisposed(),xt.modStrict(this,t)},t.prototype.squaredDifference=function(t){return this.throwIfDisposed(),xt.squaredDifference(this,t)},t.prototype.squaredDifferenceStrict=function(t){return this.throwIfDisposed(),xt.squaredDifferenceStrict(this,t)},t.prototype.transpose=function(t){return this.throwIfDisposed(),xt.transpose(this,t)},t.prototype.notEqual=function(t){return this.throwIfDisposed(),xt.notEqual(this,t)},t.prototype.notEqualStrict=function(t){return this.throwIfDisposed(),xt.notEqualStrict(this,t)},t.prototype.less=function(t){return this.throwIfDisposed(),xt.less(this,t)},t.prototype.lessStrict=function(t){return this.throwIfDisposed(),xt.lessStrict(this,t)},t.prototype.equal=function(t){return this.throwIfDisposed(),xt.equal(this,t)},t.prototype.equalStrict=function(t){return this.throwIfDisposed(),xt.equalStrict(this,t)},t.prototype.lessEqual=function(t){return this.throwIfDisposed(),xt.lessEqual(this,t)},t.prototype.lessEqualStrict=function(t){return this.throwIfDisposed(),xt.lessEqualStrict(this,t)},t.prototype.greater=function(t){return this.throwIfDisposed(),xt.greater(this,t)},t.prototype.greaterStrict=function(t){return this.throwIfDisposed(),xt.greaterStrict(this,t)},t.prototype.greaterEqual=function(t){return this.throwIfDisposed(),xt.greaterEqual(this,t)},t.prototype.greaterEqualStrict=function(t){return this.throwIfDisposed(),xt.greaterEqualStrict(this,t)},t.prototype.logicalAnd=function(t){return this.throwIfDisposed(),xt.logicalAnd(this,t)},t.prototype.logicalOr=function(t){return this.throwIfDisposed(),xt.logicalOr(this,t)},t.prototype.logicalNot=function(){return this.throwIfDisposed(),xt.logicalNot(this)},t.prototype.logicalXor=function(t){return this.throwIfDisposed(),xt.logicalXor(this,t)},t.prototype.where=function(t,e){return this.throwIfDisposed(),xt.where(t,this,e)},t.prototype.neg=function(){return this.throwIfDisposed(),xt.neg(this)},t.prototype.ceil=function(){return this.throwIfDisposed(),xt.ceil(this)},t.prototype.floor=function(){return this.throwIfDisposed(),xt.floor(this)},t.prototype.sign=function(){return this.throwIfDisposed(),xt.sign(this)},t.prototype.isNaN=function(){return this.throwIfDisposed(),xt.isNaN(this)},t.prototype.isInf=function(){return this.throwIfDisposed(),xt.isInf(this)},t.prototype.isFinite=function(){return this.throwIfDisposed(),xt.isFinite(this)},t.prototype.exp=function(){return this.throwIfDisposed(),xt.exp(this)},t.prototype.expm1=function(){return this.throwIfDisposed(),xt.expm1(this)},t.prototype.log=function(){return this.throwIfDisposed(),xt.log(this)},t.prototype.log1p=function(){return this.throwIfDisposed(),xt.log1p(this)},t.prototype.sqrt=function(){return this.throwIfDisposed(),xt.sqrt(this)},t.prototype.rsqrt=function(){return this.throwIfDisposed(),xt.rsqrt(this)},t.prototype.square=function(){return this.throwIfDisposed(),xt.square(this)},t.prototype.reciprocal=function(){return this.throwIfDisposed(),xt.reciprocal(this)},t.prototype.abs=function(){return this.throwIfDisposed(),xt.abs(this)},t.prototype.clipByValue=function(t,e){return this.throwIfDisposed(),xt.clipByValue(this,t,e)},t.prototype.relu=function(){return this.throwIfDisposed(),xt.relu(this)},t.prototype.relu6=function(){return this.throwIfDisposed(),xt.relu6(this)},t.prototype.elu=function(){return this.throwIfDisposed(),xt.elu(this)},t.prototype.selu=function(){return this.throwIfDisposed(),xt.selu(this)},t.prototype.leakyRelu=function(t){return void 0===t&&(t=.2),this.throwIfDisposed(),xt.leakyRelu(this,t)},t.prototype.prelu=function(t){return this.throwIfDisposed(),xt.prelu(this,t)},t.prototype.sigmoid=function(){return this.throwIfDisposed(),xt.sigmoid(this)},t.prototype.logSigmoid=function(){return this.throwIfDisposed(),xt.logSigmoid(this)},t.prototype.softplus=function(){return this.throwIfDisposed(),xt.softplus(this)},t.prototype.zerosLike=function(){return this.throwIfDisposed(),xt.zerosLike(this)},t.prototype.onesLike=function(){return this.throwIfDisposed(),xt.onesLike(this)},t.prototype.sin=function(){return this.throwIfDisposed(),xt.sin(this)},t.prototype.cos=function(){return this.throwIfDisposed(),xt.cos(this)},t.prototype.tan=function(){return this.throwIfDisposed(),xt.tan(this)},t.prototype.asin=function(){return this.throwIfDisposed(),xt.asin(this)},t.prototype.acos=function(){return this.throwIfDisposed(),xt.acos(this)},t.prototype.atan=function(){return this.throwIfDisposed(),xt.atan(this)},t.prototype.sinh=function(){return this.throwIfDisposed(),xt.sinh(this)},t.prototype.cosh=function(){return this.throwIfDisposed(),xt.cosh(this)},t.prototype.tanh=function(){return this.throwIfDisposed(),xt.tanh(this)},t.prototype.asinh=function(){return this.throwIfDisposed(),xt.asinh(this)},t.prototype.acosh=function(){return this.throwIfDisposed(),xt.acosh(this)},t.prototype.atanh=function(){return this.throwIfDisposed(),xt.atanh(this)},t.prototype.erf=function(){return this.throwIfDisposed(),xt.erf(this)},t.prototype.round=function(){return this.throwIfDisposed(),xt.round(this)},t.prototype.step=function(t){return void 0===t&&(t=0),this.throwIfDisposed(),xt.step(this,t)},t.prototype.softmax=function(t){return void 0===t&&(t=-1),this.throwIfDisposed(),xt.softmax(this,t)},t.prototype.logSoftmax=function(t){return void 0===t&&(t=-1),this.throwIfDisposed(),xt.logSoftmax(this,t)},t.prototype.resizeBilinear=function(t,e){return void 0===e&&(e=!1),this.throwIfDisposed(),xt.image.resizeBilinear(this,t,e)},t.prototype.resizeNearestNeighbor=function(t,e){return void 0===e&&(e=!1),this.throwIfDisposed(),xt.image.resizeNearestNeighbor(this,t,e)},t.prototype.conv1d=function(t,e,n,r,a,o){return void 0===r&&(r="NWC"),void 0===a&&(a=1),this.throwIfDisposed(),xt.conv1d(this,t,e,n,r,a,o)},t.prototype.conv2d=function(t,e,n,r,a,o){return void 0===r&&(r="NHWC"),void 0===a&&(a=[1,1]),this.throwIfDisposed(),xt.conv2d(this,t,e,n,r,a,o)},t.prototype.conv2dTranspose=function(t,e,n,r,a){return this.throwIfDisposed(),xt.conv2dTranspose(this,t,e,n,r,a)},t.prototype.depthwiseConv2D=function(t,e,n,r,a,o){return void 0===r&&(r="NHWC"),void 0===a&&(a=[1,1]),this.throwIfDisposed(),xt.depthwiseConv2d(this,t,e,n,r,a,o)},t.prototype.separableConv2d=function(t,e,n,r,a,o){return void 0===a&&(a=[1,1]),void 0===o&&(o="NHWC"),this.throwIfDisposed(),xt.separableConv2d(this,t,e,n,r,a,o)},t.prototype.avgPool=function(t,e,n,r){return this.throwIfDisposed(),xt.avgPool(this,t,e,n,r)},t.prototype.maxPool=function(t,e,n,r){return this.throwIfDisposed(),xt.maxPool(this,t,e,n,r)},t.prototype.localResponseNormalization=function(t,e,n,r){return void 0===t&&(t=5),void 0===e&&(e=1),void 0===n&&(n=1),void 0===r&&(r=.5),xt.localResponseNormalization(this,t,e,n,r)},t.prototype.pool=function(t,e,n,r,a){return this.throwIfDisposed(),xt.pool(this,t,e,n,r,a)},t.prototype.variable=function(t,e,n){return void 0===t&&(t=!0),this.throwIfDisposed(),yt().makeVariable(this,t,e,n)},t.prototype.unsortedSegmentSum=function(t,e){return this.throwIfDisposed(),xt.unsortedSegmentSum(this,t,e)},t.prototype.batchToSpaceND=function(t,e){return this.throwIfDisposed(),xt.batchToSpaceND(this,t,e)},t.prototype.spaceToBatchND=function(t,e){return this.throwIfDisposed(),xt.spaceToBatchND(this,t,e)},t.prototype.topk=function(t,e){return void 0===t&&(t=1),void 0===e&&(e=!0),this.throwIfDisposed(),xt.topk(this,t,e)},t.prototype.stridedSlice=function(t,e,n,r,a,o,i,s){return void 0===r&&(r=0),void 0===a&&(a=0),void 0===o&&(o=0),void 0===i&&(i=0),void 0===s&&(s=0),this.throwIfDisposed(),xt.stridedSlice(this,t,e,n,r,a,o,i,s)},t.prototype.depthToSpace=function(t,e){return this.throwIfDisposed(),xt.depthToSpace(this,t,e)},t.prototype.fft=function(){return this.throwIfDisposed(),xt.spectral.fft(this)},t.prototype.ifft=function(){return this.throwIfDisposed(),xt.spectral.ifft(this)},t.prototype.rfft=function(){return this.throwIfDisposed(),xt.spectral.rfft(this)},t.prototype.irfft=function(){return this.throwIfDisposed(),xt.spectral.irfft(this)},t}();Object.defineProperty(wt,Symbol.hasInstance,{value:function(t){return!!t&&null!=t.dataId&&null!=t.shape&&null!=t.dtype}});var Ct,Et,St,Nt,It,Rt=function(t){function e(e,n,r,a){var o=t.call(this,e.shape,e.dtype,e.dataId,a)||this;return o.trainable=n,o.name=r,o}return s(e,t),e.prototype.assign=function(t){if(t.dtype!==this.dtype)throw new Error("dtype of the new value ("+t.dtype+") and previous value ("+this.dtype+") must match");if(!_(t.shape,this.shape))throw new Error("shape of the new value ("+t.shape+") and previous value ("+this.shape+") must match");yt().disposeTensor(this),this.dataId=t.dataId,yt().incRef(this,null)},e.prototype.dispose=function(){yt().disposeVariable(this),this.isDisposedInternal=!0},e}(wt);Object.defineProperty(Rt,Symbol.hasInstance,{value:function(t){return t instanceof wt&&null!=t.assign&&t.assign instanceof Function}}),function(t){t.R0="R0",t.R1="R1",t.R2="R2",t.R3="R3",t.R4="R4",t.R5="R5",t.R6="R6"}(Ct||(Ct={})),function(t){t.float32="float32",t.int32="int32",t.bool="int32",t.complex64="complex64"}(Et||(Et={})),function(t){t.float32="float32",t.int32="int32",t.bool="bool",t.complex64="complex64"}(St||(St={})),function(t){t.float32="float32",t.int32="float32",t.bool="float32",t.complex64="complex64"}(Nt||(Nt={})),function(t){t.float32="complex64",t.int32="complex64",t.bool="complex64",t.complex64="complex64"}(It||(It={}));var Tt={float32:Nt,int32:Et,bool:St,complex64:It};function kt(t,e){if("string"===t||"string"===e){if("string"===t&&"string"===e)return"string";throw new Error("Can not upcast "+t+" with "+e)}return Tt[t][e]}function At(t){return kt(t,"int32")}function Ot(t,e){if(t.dtype===e.dtype)return[t,e];var n=kt(t.dtype,e.dtype);return[t.cast(n),e.cast(n)]}function Dt(t,e){T(t.dtype===e.dtype,(function(){return"The dtypes of the first("+t.dtype+") and second("+e.dtype+") input must match"}))}function _t(t){var e=[];return function t(e,n,r){if(null!=e)if(e instanceof wt)n.push(e);else if(a=e,Array.isArray(a)||"object"==typeof a){var a,o=e;for(var i in o){var s=o[i];r.has(s)||(r.add(s),t(s,n,r))}}}(t,e,new Set),e}var Ft,Mt=Object.freeze({makeTypesMatch:Ot,assertTypesMatch:Dt,isTensorInList:function(t,e){for(var n=0;n<e.length;n++)if(e[n].id===t.id)return!0;return!1},getTensorsInContainer:_t}),Bt=function(){function t(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null}}return t.prototype.dispose=function(){for(var t in this.registeredVariables)this.registeredVariables[t].dispose()},t}(),Pt=function(){function t(t){this.ENV=t,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new Bt}return t.prototype.ready=function(){return u(this,void 0,void 0,(function(){var t,e,n;return c(this,(function(r){switch(r.label){case 0:if(null!=this.pendingBackendInit)return[2,this.pendingBackendInit.then((function(){}))];if(null!=this.backendInstance)return[2];t=this.getSortedBackends(),e=0,r.label=1;case 1:return e<t.length?(n=t[e],[4,this.initializeBackend(n).success]):[3,5];case 2:return r.sent()?[4,this.setBackend(n)]:[3,4];case 3:return r.sent(),[2];case 4:return e++,[3,1];case 5:throw new Error("Could not initialize any backends, all backend initializations failed.")}}))}))},Object.defineProperty(t.prototype,"backend",{get:function(){if(null!=this.pendingBackendInit)throw new Error("Backend '"+this.backendName+"' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods");if(null==this.backendInstance){var t=this.initializeBackendsAndReturnBest(),e=t.name;if(t.asyncInit)throw new Error("The highest priority backend '"+e+"' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods");this.setBackend(e)}return this.backendInstance},enumerable:!0,configurable:!0}),t.prototype.backendNames=function(){return Object.keys(this.registryFactory)},t.prototype.findBackend=function(t){if(!(t in this.registry)){if(!(t in this.registryFactory))return null;if(this.initializeBackend(t).asyncInit)return null}return this.registry[t]},t.prototype.findBackendFactory=function(t){return t in this.registryFactory?this.registryFactory[t].factory:null},t.prototype.registerBackend=function(t,e,n){return void 0===n&&(n=1),t in this.registryFactory?(console.warn(t+" backend was already registered. Reusing existing backend factory."),!1):(this.registryFactory[t]={factory:e,priority:n},!0)},t.prototype.setBackend=function(t){return u(this,void 0,void 0,(function(){var e,n,r;return c(this,(function(a){switch(a.label){case 0:if(null==this.registryFactory[t])throw new Error("Backend name '"+t+"' not found in registry");return this.backendName=t,null!=this.registry[t]?[3,4]:(this.backendInstance=null,e=this.initializeBackend(t),n=e.success,e.asyncInit?[4,n]:[3,2]);case 1:return r=a.sent(),[3,3];case 2:r=n,a.label=3;case 3:if(!r)return[2,!1];a.label=4;case 4:return this.backendInstance=this.registry[t],this.setupRegisteredKernels(),this.profiler=new ft(this.backendInstance),[2,!0]}}))}))},t.prototype.setupRegisteredKernels=function(){var t=this;y(this.backendName).forEach((function(e){null!=e.setupFunc&&e.setupFunc(t.backendInstance)}))},t.prototype.disposeRegisteredKernels=function(t){var e=this;y(t).forEach((function(n){null!=n.disposeFunc&&n.disposeFunc(e.registry[t])}))},t.prototype.initializeBackend=function(t){var e=this,n=this.registryFactory[t];if(null==n)throw new Error("Cannot initialize backend "+t+", no registration found.");try{var r=n.factory();if(Promise.resolve(r)===r){var a=++this.pendingBackendInitId,o=r.then((function(n){return!(a<e.pendingBackendInitId||(e.registry[t]=n,e.pendingBackendInit=null,0))})).catch((function(n){return!(a<e.pendingBackendInitId||(e.pendingBackendInit=null,console.warn("Initialization of backend "+t+" failed"),console.warn(n.stack||n.message),1))}));return this.pendingBackendInit=o,{success:o,asyncInit:!0}}return this.registry[t]=r,{success:!0,asyncInit:!1}}catch(e){return console.warn("Initialization of backend "+t+" failed"),console.warn(e.stack||e.message),{success:!1,asyncInit:!1}}},t.prototype.removeBackend=function(t){if(!(t in this.registryFactory))throw new Error(t+" backend not found in registry");this.backendName===t&&null!=this.pendingBackendInit&&this.pendingBackendInitId++,t in this.registry&&(this.disposeRegisteredKernels(t),this.registry[t].dispose(),delete this.registry[t]),delete this.registryFactory[t],this.backendName===t&&(this.pendingBackendInit=null,this.backendName=null,this.backendInstance=null)},t.prototype.getSortedBackends=function(){var t=this;if(0===Object.keys(this.registryFactory).length)throw new Error("No backend found in registry.");return Object.keys(this.registryFactory).sort((function(e,n){return t.registryFactory[n].priority-t.registryFactory[e].priority}))},t.prototype.initializeBackendsAndReturnBest=function(){for(var t=this.getSortedBackends(),e=0;e<t.length;e++){var n=t[e],r=this.initializeBackend(n),a=r.success,o=r.asyncInit;if(o||a)return{name:n,asyncInit:o}}throw new Error("Could not initialize any backends, all backend initializations failed.")},t.prototype.moveData=function(t,e){var n=this.state.tensorInfo.get(e),r=n.backend,a=this.readSync(e);r.disposeData(e),n.backend=t,t.move(e,a,n.shape,n.dtype),this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack[this.state.numDataMovesStack.length-1]++},t.prototype.tidy=function(t,e){var n,r=this,a=null;if(null==e){if("function"!=typeof t)throw new Error("Please provide a function to tidy()");e=t}else{if("string"!=typeof t&&!(t instanceof String))throw new Error("When calling with two arguments, the first argument to tidy() must be a string");if("function"!=typeof e)throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function");a=t}return this.scopedRun((function(){return r.startScope(a)}),(function(){return r.endScope(n)}),(function(){return(n=e())instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),n}))},t.prototype.scopedRun=function(t,e,n){t();try{var r=n();return e(),r}catch(t){throw e(),t}},t.prototype.nextTensorId=function(){return t.nextTensorId++},t.prototype.nextVariableId=function(){return t.nextVariableId++},t.prototype.clone=function(t){var e=this.makeTensorFromDataId(t.dataId,t.shape,t.dtype),n={x:t};return this.addTapeNode(this.state.activeScope.name,n,[e],(function(t){return{x:function(){return t.toFloat()}}}),[]),e},t.prototype.runKernel=function(t,e,n,r,a){return this.runKernelFunc(null,e,null,t,n,r,a)},t.prototype.shouldCheckForMemLeaks=function(){return this.ENV.getBool("IS_TEST")},t.prototype.checkKernelForMemLeak=function(t,e,n){var r=this.backend.numDataIds(),a=0;n.forEach((function(t){a+="complex64"===t.dtype?3:1}));var o=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=r-e-a-o;if(i>0)throw new Error("Backend '"+this.backendName+"' has an internal memory leak ("+i+" data ids) after running '"+t+"'")},t.prototype.runKernelFunc=function(t,e,n,r,a,o,i){var s,u=this;void 0===o&&(o=[]),void 0===i&&(i=[]);var c=[],l=this.isTapeOn();null==r&&(r=null!=this.state.activeScope?this.state.activeScope.name:"");var p,f=function(t){l&&(c=t.map((function(t){return u.keep(u.clone(t))})))},d=this.state.numBytes,h=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);var m,g=v(r,this.backendName);return p=null!=g?function(){var t=u.backend.numDataIds();m=g.kernelFunc({inputs:e,attrs:a,backend:u.backend});var n=Array.isArray(m)?m:[m];u.shouldCheckForMemLeaks()&&u.checkKernelForMemLeak(r,t,n);var s=n.map((function(t){var e=t.dataId,n=t.shape,r=t.dtype;return u.makeTensorFromDataId(e,n,r)})),c=s.filter((function(t,e){return i[e]}));return f((o||[]).slice().concat(c)),s}:function(){var e=u.backend.numDataIds();m=u.tidy((function(){return t(u.backend,f)}));var n=Array.isArray(m)?m:[m];return u.shouldCheckForMemLeaks()&&u.checkKernelForMemLeak(r,e,n),n},this.scopedRun((function(){return u.state.kernelDepth++}),(function(){return u.state.kernelDepth--}),(function(){s=u.ENV.getBool("DEBUG")?u.profiler.profileKernel(r,e,(function(){return p()})):p()})),l&&this.addTapeNode(r,e,s,n,c),this.state.profiling&&this.state.activeProfile.kernels.push({name:r,bytesAdded:this.state.numBytes-d,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-h,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(e).map((function(t){return e[t].shape})),outputShapes:s.map((function(t){return t.shape}))}),Array.isArray(m)?s:s[0]},t.prototype.makeTensor=function(t,e,n,r){if(null==t)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",r=r||this.backend;var a=t;"string"===n&&$(t[0])&&(a=t.map((function(t){return ct(t)})));var o=r.write(a,e,n),i=new wt(e,n,o,this.nextTensorId());if(this.incRef(i,r),"string"===n){var s=this.state.tensorInfo.get(o),u=Y(a);this.state.numBytes+=u-s.bytes,s.bytes=u}return i},t.prototype.makeTensorFromDataId=function(t,e,n,r){var a=new wt(e,n=n||"float32",t,this.nextTensorId());return this.incRef(a,r),a},t.prototype.makeVariable=function(t,e,n,r){void 0===e&&(e=!0),n=n||this.nextVariableId().toString(),null!=r&&r!==t.dtype&&(t=t.asType(r));var a=new Rt(t,e,n,this.nextTensorId());if(null!=this.state.registeredVariables[a.name])throw new Error("Variable with name "+a.name+" was already registered");return this.state.registeredVariables[a.name]=a,this.incRef(a,this.backend),a},t.prototype.incRef=function(t,e){var n=this.state.tensorInfo.has(t.dataId)?this.state.tensorInfo.get(t.dataId).refCount:0;if(this.state.numTensors++,"string"===t.dtype&&this.state.numStringTensors++,0===n){this.state.numDataBuffers++;var r=0;"complex64"!==t.dtype&&"string"!==t.dtype&&(r=t.size*X(t.dtype)),this.state.tensorInfo.set(t.dataId,{backend:e||this.backend,dtype:t.dtype,shape:t.shape,bytes:r,refCount:0}),this.state.numBytes+=r}this.state.tensorInfo.get(t.dataId).refCount++,t instanceof Rt||this.track(t)},t.prototype.disposeTensor=function(t){if(this.state.tensorInfo.has(t.dataId)){this.state.numTensors--,"string"===t.dtype&&this.state.numStringTensors--;var e=this.state.tensorInfo.get(t.dataId);e.refCount<=1?("complex64"!==t.dtype&&(this.state.numBytes-=e.bytes),this.state.numDataBuffers--,e.backend.disposeData(t.dataId),this.state.tensorInfo.delete(t.dataId)):this.state.tensorInfo.get(t.dataId).refCount--}},t.prototype.disposeVariables=function(){for(var t in this.state.registeredVariables){var e=this.state.registeredVariables[t];this.disposeVariable(e)}},t.prototype.disposeVariable=function(t){this.disposeTensor(t),null!=this.state.registeredVariables[t.name]&&delete this.state.registeredVariables[t.name]},t.prototype.memory=function(){var t=this.backend.memory();return t.numTensors=this.state.numTensors,t.numDataBuffers=this.state.numDataBuffers,t.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(t.unreliable=!0,null==t.reasons&&(t.reasons=[]),t.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),t},t.prototype.profile=function(t){return u(this,void 0,void 0,(function(){var e,n;return c(this,(function(r){return this.state.profiling=!0,e=this.state.numBytes,n=this.state.numTensors,this.state.activeProfile.kernels=[],this.state.activeProfile.result=t(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max.apply(Math,this.state.activeProfile.kernels.map((function(t){return t.totalBytesSnapshot}))),this.state.activeProfile.newBytes=this.state.numBytes-e,this.state.activeProfile.newTensors=this.state.numTensors-n,[2,this.state.activeProfile]}))}))},t.prototype.isTapeOn=function(){return this.state.gradientDepth>0&&0===this.state.kernelDepth},t.prototype.addTapeNode=function(t,e,n,r,a){var o=this,i={id:this.state.nextTapeNodeId++,kernelName:t,inputs:e,outputs:n,saved:a},s=g(t);null!=s&&(r=s.gradFunc),null!=r&&(i.gradient=function(t){return t=t.map((function(t,e){if(null==t){var r=n[e],a=it(r.size,r.dtype);return o.makeTensor(a,r.shape,r.dtype)}return t})),r(t.length>1?t:t[0],a)}),this.state.activeTape.push(i)},t.prototype.keep=function(t){return t.kept=!0,t},t.prototype.startTape=function(){0===this.state.gradientDepth&&(this.state.activeTape=[]),this.state.gradientDepth++},t.prototype.endTape=function(){this.state.gradientDepth--},t.prototype.startScope=function(t){var e={track:[],name:"unnamed scope",id:this.state.nextScopeId++};t&&(e.name=t),this.state.scopeStack.push(e),this.state.activeScope=e},t.prototype.endScope=function(t){for(var e=this,n=_t(t),r=new Set(n.map((function(t){return t.id}))),a=0;a<this.state.activeScope.track.length;a++){var o=this.state.activeScope.track[a];o.kept||r.has(o.id)||o.dispose()}var i=this.state.scopeStack.pop();this.state.activeScope=0===this.state.scopeStack.length?null:this.state.scopeStack[this.state.scopeStack.length-1],n.forEach((function(t){t.kept||t.scopeId!==i.id||e.track(t)}))},t.prototype.gradients=function(t,e,n,r){var a=this;if(void 0===r&&(r=!1),T(e.length>0,(function(){return"gradients() received an empty list of xs."})),null!=n&&"float32"!==n.dtype)throw new Error("dy must have 'float32' dtype, but has '"+n.dtype+"'");var o=this.scopedRun((function(){return a.startTape()}),(function(){return a.endTape()}),(function(){return a.tidy("forward",t)}));T(o instanceof wt,(function(){return"The result y returned by f() must be a tensor."}));var i=function(t,e,n){for(var r={},a={},o=0;o<e.length;o++)r[e[o].id]=!0;for(o=0;o<t.length;o++){var i=(h=t[o]).inputs;for(var s in i){for(var u=i[s],c=!1,l=0;l<e.length;l++)if(r[u.id]){h.outputs.forEach((function(t){return r[t.id]=!0})),c=!0,a[h.id]=!0;break}if(c)break}}var p={};p[n.id]=!0;var f={};for(o=t.length-1;o>=0;o--)for(i=(h=t[o]).inputs,l=0;l<h.outputs.length;l++)if(p[h.outputs[l].id]){for(var s in i)p[i[s].id]=!0,f[h.id]=!0;break}var d=[];for(o=0;o<t.length;o++){var h;if(a[(h=t[o]).id]&&f[h.id]){var m={};for(var s in h.inputs){var v=h.inputs[s];r[v.id]&&(m[s]=v)}var g=Object.assign({},h);g.inputs=m,g.outputs=h.outputs,d.push(g)}}return d}(this.state.activeTape,e,o);if(!r&&0===i.length&&e.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",(function(){var t,r,s={};s[o.id]=null==n?(r=ot(D(t=o.shape),"float32"),Lt.makeTensor(r,t,"float32")):n,function(t,e,n){for(var r=function(r){var a=e[r],o=[];if(a.outputs.forEach((function(e){var n=t[e.id];null!=n?o.push(n):o.push(null)})),null==a.gradient)throw new Error("Cannot compute gradient: gradient function not found for "+a.kernelName+".");var i=a.gradient(o),s=function(e){if(!(e in i))throw new Error("Cannot backprop through input "+e+". Available gradients found: "+Object.keys(i)+".");var r=n((function(){return i[e]()}));if("float32"!==r.dtype)throw new Error("Error in gradient for op "+a.kernelName+". The gradient of input "+e+" must have 'float32' dtype, but has '"+r.dtype+"'");var o=a.inputs[e];if(!_(r.shape,o.shape))throw new Error("Error in gradient for op "+a.kernelName+". The gradient of input '"+e+"' has shape '"+r.shape+"', which does not match the shape of the input '"+o.shape+"'");if(null==t[o.id])t[o.id]=r;else{var s=t[o.id];t[o.id]=s.add(r),s.dispose()}};for(var u in a.inputs)s(u)},a=e.length-1;a>=0;a--)r(a)}(s,i,(function(t){return a.tidy(t)}));var u=e.map((function(t){return s[t.id]}));return 0===a.state.gradientDepth&&(a.state.activeTape.forEach((function(t){for(var e=0,n=t.saved;e<n.length;e++)n[e].dispose()})),a.state.activeTape=null),{value:o,grads:u}}))},t.prototype.customGrad=function(t){var e=this;return T(tt(t),(function(){return"The f passed in customGrad(f) must be a function."})),function(){for(var n,r=[],a=0;a<arguments.length;a++)r[a]=arguments[a];T(r.every((function(t){return t instanceof wt})),(function(){return"The args passed in customGrad(f)(x1, x2,...) must all be tensors"}));var o={};return r.forEach((function(t,e){o[e]=t})),e.runKernelFunc((function(e,a){return T((n=t.apply(void 0,r.concat([a]))).value instanceof wt,(function(){return"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"})),T(tt(n.gradFunc),(function(){return"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."})),n.value}),o,(function(t,e){var a=n.gradFunc(t,e),o=Array.isArray(a)?a:[a];T(o.length===r.length,(function(){return"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."})),T(o.every((function(t){return t instanceof wt})),(function(){return"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors."}));var i={};return o.forEach((function(t,e){i[e]=function(){return t}})),i}))}},t.prototype.readSync=function(t){return this.state.tensorInfo.get(t).backend.readSync(t)},t.prototype.read=function(t){return this.state.tensorInfo.get(t).backend.read(t)},t.prototype.time=function(t){return u(this,void 0,void 0,(function(){var e,n;return c(this,(function(r){switch(r.label){case 0:return e=st(),[4,this.backend.time(t)];case 1:return(n=r.sent()).wallMs=st()-e,[2,n]}}))}))},t.prototype.track=function(t){return null!=this.state.activeScope&&(t.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(t)),t},Object.defineProperty(t.prototype,"registeredVariables",{get:function(){return this.state.registeredVariables},enumerable:!0,configurable:!0}),t.prototype.reset=function(){for(var t in this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new Bt,this.registry)this.disposeRegisteredKernels(t),this.registry[t].dispose(),delete this.registry[t];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null},t.nextTensorId=0,t.nextVariableId=0,t}(),Lt=function(){var e=function(){if(null==Ft){var e=void 0;if("undefined"!=typeof window)e=window;else if(void 0!==t)e=t;else if(void 0!==r)e=r;else{if("undefined"==typeof self)throw new Error("Could not find a global object");e=self}Ft=e}return Ft}();if(null==e._tfengine){var n=new l(e);e._tfengine=new Pt(n)}return function(t){d=t}(e._tfengine.ENV),yt=function(){return e._tfengine},e._tfengine}();function Vt(){return"undefined"!=typeof window&&null!=window.document||"undefined"!=typeof WorkerGlobalScope}var Wt=f();Wt.registerFlag("DEBUG",(function(){return!1}),(function(t){t&&console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.")})),Wt.registerFlag("IS_BROWSER",(function(){return Vt()})),Wt.registerFlag("IS_NODE",(function(){return void 0!==r&&void 0!==r.versions&&void 0!==r.versions.node})),Wt.registerFlag("IS_CHROME",(function(){return"undefined"!=typeof navigator&&null!=navigator&&null!=navigator.userAgent&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor)})),Wt.registerFlag("PROD",(function(){return!1})),Wt.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",(function(){return Wt.getBool("DEBUG")})),Wt.registerFlag("DEPRECATION_WARNINGS_ENABLED",(function(){return!0})),Wt.registerFlag("IS_TEST",(function(){return!1}));var zt,Ut,jt,Gt={},Ht={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function qt(t,e){Gt[t]=e}function Kt(t){t in Gt||(Gt[t]=function(t){if(1!==t&&2!==t)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");var e=function(t){if("undefined"!=typeof OffscreenCanvas&&2===t)return new OffscreenCanvas(300,150);if("undefined"!=typeof document)return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}(t);return e.addEventListener("webglcontextlost",(function(e){e.preventDefault(),delete Gt[t]}),!1),1===t?e.getContext("webgl",Ht)||e.getContext("experimental-webgl",Ht):e.getContext("webgl2",Ht)}(t));var e=Gt[t];return e.isContextLost()?(delete Gt[t],Kt(t)):(e.disable(e.DEPTH_TEST),e.disable(e.STENCIL_TEST),e.disable(e.BLEND),e.disable(e.DITHER),e.disable(e.POLYGON_OFFSET_FILL),e.disable(e.SAMPLE_COVERAGE),e.enable(e.SCISSOR_TEST),e.enable(e.CULL_FACE),e.cullFace(e.BACK),Gt[t])}function Xt(t,e){return[e,t]}function Yt(t){var e=D(t);return B(Math.ceil(e/4))}function $t(t,e){return[Math.max(1,Math.ceil(e/2)),Math.max(1,Math.ceil(t/2))]}function Qt(t,e){var n,r,a,o,i,s,u,c,l,p=t;return 2===f().getNumber("WEBGL_VERSION")?(n=p.R32F,r=p.R16F,a=p.RGBA16F,o=p.RGBA32F,i=p.RED,s=4,u=1,c=p.HALF_FLOAT,l=p.FLOAT):(n=t.RGBA,r=t.RGBA,a=t.RGBA,o=p.RGBA,i=t.RGBA,s=4,u=4,c=null!=e?e.HALF_FLOAT_OES:null,l=t.FLOAT),{internalFormatFloat:n,internalFormatHalfFloat:r,internalFormatPackedHalfFloat:a,internalFormatPackedFloat:o,textureFormatFloat:i,downloadTextureFormat:t.RGBA,downloadUnpackNumChannels:s,defaultNumChannels:u,textureTypeHalfFloat:c,textureTypeFloat:l}}function Jt(t,e,n){var r=n();return e&&function(t){var e=t.getError();if(e!==t.NO_ERROR)throw new Error("WebGL Error: "+te(t,e))}(t),r}!function(t){t[t.DENSE=0]="DENSE",t[t.SHARED_BATCH=1]="SHARED_BATCH"}(zt||(zt={})),function(t){t[t.RENDER=0]="RENDER",t[t.UPLOAD=1]="UPLOAD",t[t.PIXELS=2]="PIXELS",t[t.DOWNLOAD=3]="DOWNLOAD"}(Ut||(Ut={})),function(t){t[t.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",t[t.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",t[t.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",t[t.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",t[t.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"}(jt||(jt={}));function Zt(t){return!!(f().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||0===t||5.96e-8<Math.abs(t)&&Math.abs(t)<65504)}function te(t,e){switch(e){case t.NO_ERROR:return"NO_ERROR";case t.INVALID_ENUM:return"INVALID_ENUM";case t.INVALID_VALUE:return"INVALID_VALUE";case t.INVALID_OPERATION:return"INVALID_OPERATION";case t.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case t.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case t.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return"Unknown error code "+e}}function ee(t,e,n){return Se(t,e,(function(){return t.getExtension(n)}),'Extension "'+n+'" not supported on this browser.')}function ne(t,e,n){var r=Se(t,e,(function(){return t.createShader(t.VERTEX_SHADER)}),"Unable to create vertex WebGLShader.");if(Jt(t,e,(function(){return t.shaderSource(r,n)})),Jt(t,e,(function(){return t.compileShader(r)})),!1===t.getShaderParameter(r,t.COMPILE_STATUS))throw console.log(t.getShaderInfoLog(r)),new Error("Failed to compile vertex shader.");return r}function re(t,e,n){var r=Se(t,e,(function(){return t.createShader(t.FRAGMENT_SHADER)}),"Unable to create fragment WebGLShader.");if(Jt(t,e,(function(){return t.shaderSource(r,n)})),Jt(t,e,(function(){return t.compileShader(r)})),!1===t.getShaderParameter(r,t.COMPILE_STATUS))throw function(t,e){var n=ie.exec(e);if(null==n)return console.log("Couldn't parse line number in error: "+e),void console.log(t);for(var r=+n[1],a=t.split("\n"),o=a.length.toString().length+2,i=a.map((function(t,e){return P((e+1).toString(),o)+t})),s=0,u=0;u<i.length;u++)s=Math.max(i[u].length,s);var c=i.slice(0,r-1),l=i.slice(r-1,r),p=i.slice(r);console.log(c.join("\n")),console.log(e.split("\n")[0]),console.log("%c "+P(l[0],s),"border:1px solid red; background-color:#e3d2d2; color:#a61717"),console.log(p.join("\n"))}(n,t.getShaderInfoLog(r)),new Error("Failed to compile fragment shader.");return r}var ae,oe,ie=/ERROR: [0-9]+:([0-9]+):/g;function se(t,e){return Se(t,e,(function(){return t.createProgram()}),"Unable to create WebGLProgram.")}function ue(t,e,n){if(Jt(t,e,(function(){return t.linkProgram(n)})),!1===t.getProgramParameter(n,t.LINK_STATUS))throw console.log(t.getProgramInfoLog(n)),new Error("Failed to link vertex and fragment shaders.")}function ce(t,e,n){if(Jt(t,e,(function(){return t.validateProgram(n)})),!1===t.getProgramParameter(n,t.VALIDATE_STATUS))throw console.log(t.getProgramInfoLog(n)),new Error("Shader program validation failed.")}function le(t,e,n){var r=Se(t,e,(function(){return t.createBuffer()}),"Unable to create WebGLBuffer");return Jt(t,e,(function(){return t.bindBuffer(t.ARRAY_BUFFER,r)})),Jt(t,e,(function(){return t.bufferData(t.ARRAY_BUFFER,n,t.STATIC_DRAW)})),r}function pe(t,e,n){var r=Se(t,e,(function(){return t.createBuffer()}),"Unable to create WebGLBuffer");return Jt(t,e,(function(){return t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,r)})),Jt(t,e,(function(){return t.bufferData(t.ELEMENT_ARRAY_BUFFER,n,t.STATIC_DRAW)})),r}function fe(t,e){return Se(t,e,(function(){return t.createTexture()}),"Unable to create WebGLTexture.")}function de(t,e){var n=f().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(t<=0||e<=0){var r="["+t+"x"+e+"]";throw new Error("Requested texture size "+r+" is invalid.")}if(t>n||e>n)throw r="["+t+"x"+e+"]",new Error("Requested texture size "+r+" greater than WebGL maximum on this browser / GPU ["+n+"x"+n+"].")}function he(t,e){return Se(t,e,(function(){return t.createFramebuffer()}),"Unable to create WebGLFramebuffer.")}function me(t,e,n,r,a,o,i,s){var u=t.getAttribLocation(n,r);return-1!==u&&(Jt(t,e,(function(){return t.bindBuffer(t.ARRAY_BUFFER,a)})),Jt(t,e,(function(){return t.vertexAttribPointer(u,o,t.FLOAT,!1,i,s)})),Jt(t,e,(function(){return t.enableVertexAttribArray(u)})),!0)}function ve(t,e,n,r){Ne(t,r),Jt(t,e,(function(){return t.activeTexture(t.TEXTURE0+r)})),Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,n)}))}function ge(t,e,n,r){return Se(t,e,(function(){return t.getUniformLocation(n,r)}),'uniform "'+r+'" not present in program.')}function ye(t,e,n){return t.getUniformLocation(e,n)}function xe(t,e,n,r,a,o){Jt(t,e,(function(){return ve(t,e,r,o)})),Jt(t,e,(function(){return t.uniform1i(a,o)}))}function be(t,e,n,r){Jt(t,e,(function(){return t.bindFramebuffer(t.FRAMEBUFFER,r)})),Jt(t,e,(function(){return t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,n,0)}))}function we(t,e,n){Jt(t,e,(function(){return t.bindFramebuffer(t.FRAMEBUFFER,n)})),Jt(t,e,(function(){return t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,null,0)}))}function Ce(t){var e=t.checkFramebufferStatus(t.FRAMEBUFFER);if(e!==t.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+Ee(t,e))}function Ee(t,e){switch(e){case t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case t.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return"unknown error "+e}}function Se(t,e,n,r){var a=Jt(t,e,(function(){return n()}));if(null==a)throw new Error(r);return a}function Ne(t,e){var n=t.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=e+t.TEXTURE0;if(r<t.TEXTURE0||r>n)throw new Error("textureUnit must be in [gl.TEXTURE0, gl.TEXTURE"+n+"].")}function Ie(t,e){return void 0===e&&(e=2),D(t.slice(0,t.length-e))}function Re(t){if(0===t.length)throw Error("Cannot get rows and columns of an empty shape array.");return[t.length>1?t[t.length-2]:1,t[t.length-1]]}function Te(t){var e=[1,1,1];return 0===t.length||1===t.length&&1===t[0]||(e=[Ie(t)].concat(Re(t))),e}function ke(t,e){var n;void 0===e&&(e=!1);var r=f().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e&&(r*=2,1===(t=t.map((function(e,n){return n>=t.length-2?I(t[n]):t[n]}))).length&&(t=[2,t[0]])),2!==t.length){var a=z(t);t=a.newShape}var o=D(t);if(t.length<=1&&o<=r)return[1,o];if(2===t.length&&t[0]<=r&&t[1]<=r)return t;if(3===t.length&&t[0]*t[1]<=r&&t[2]<=r)return[t[0]*t[1],t[2]];if(3===t.length&&t[0]<=r&&t[1]*t[2]<=r)return[t[0],t[1]*t[2]];if(4===t.length&&t[0]*t[1]*t[2]<=r&&t[3]<=r)return[t[0]*t[1]*t[2],t[3]];if(4===t.length&&t[0]<=r&&t[1]*t[2]*t[3]<=r)return[t[0],t[1]*t[2]*t[3]];if(e){var i=Ie(t),s=2,u=2;return t.length&&(s=(n=Re(t))[0],u=n[1]),B(o=i*(s/2)*(u/2)).map((function(t){return 2*t}))}return B(o)}function Ae(t){return t%2==0}function Oe(t,e){if(_(t=t.slice(-2),e=e.slice(-2)))return!0;if(!t.length||!e.length)return!0;if(0===t[0]||0===t[1]||0===e[0]||0===e[1])return!0;if(t.length!==e.length){var n=t.slice(-1)[0],r=e.slice(-1)[0];if(n===r)return!0;if(Ae(n)&&Ae(r)&&(1===t[0]||1===e[0]))return!0}return t[1]===e[1]&&Ae(t[0])&&Ae(e[0])}function De(t){if(null==ae){var e=Kt(t);ae=e.getParameter(e.MAX_TEXTURE_SIZE)}return ae}function _e(t){if(null==oe){var e=Kt(t);oe=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,oe)}function Fe(t){if(0===t)return 0;var e=Kt(t);return Me(e,"EXT_disjoint_timer_query_webgl2")&&2===t?2:Me(e,"EXT_disjoint_timer_query")?1:0}function Me(t,e){return null!=t.getExtension(e)}function Be(t){try{if(null!=Kt(t))return!0}catch(t){return!1}return!1}function Pe(t){if(0===t)return!1;var e=Kt(t);if(1===t){if(!Me(e,"OES_texture_float"))return!1}else if(!Me(e,"EXT_color_buffer_float"))return!1;return Ve(e)}function Le(t){if(0===t)return!1;var e=Kt(t);if(1!==t){if(Me(e,"EXT_color_buffer_float"))return Ve(e);if(Me(e,"EXT_color_buffer_half_float")){var n=e.getExtension("EXT_color_buffer_half_float");return function(t,e){var n=Qt(t,e),r=t.createTexture();t.bindTexture(t.TEXTURE_2D,r),t.texImage2D(t.TEXTURE_2D,0,n.internalFormatHalfFloat,1,1,0,n.textureFormatFloat,n.textureTypeHalfFloat,null);var a=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,a),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,r,0);var o=t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE;return t.bindTexture(t.TEXTURE_2D,null),t.bindFramebuffer(t.FRAMEBUFFER,null),t.deleteTexture(r),t.deleteFramebuffer(a),o}(e,n)}return!1}return!!Me(e,"OES_texture_float")&&!!Me(e,"WEBGL_color_buffer_float")&&Ve(e)}function Ve(t){var e=Qt(t),n=t.createTexture();t.bindTexture(t.TEXTURE_2D,n),t.texImage2D(t.TEXTURE_2D,0,e.internalFormatFloat,1,1,0,e.textureFormatFloat,e.textureTypeFloat,null);var r=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,r),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,n,0);var a=t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE;return t.bindTexture(t.TEXTURE_2D,null),t.bindFramebuffer(t.FRAMEBUFFER,null),t.deleteTexture(n),t.deleteFramebuffer(r),a}function We(t){return 2===t&&null!=Kt(t).fenceSync}var ze=Object.freeze({callAndCheck:Jt,canBeRepresented:Zt,getWebGLErrorMessage:te,getExtensionOrThrow:ee,createVertexShader:ne,createFragmentShader:re,createProgram:se,linkProgram:ue,validateProgram:ce,createStaticVertexBuffer:le,createStaticIndexBuffer:pe,getNumChannels:function(){return 2===f().getNumber("WEBGL_VERSION")?1:4},createTexture:fe,validateTextureSize:de,createFramebuffer:he,bindVertexBufferToProgramAttribute:me,bindTextureUnit:ve,unbindTextureUnit:function(t,e,n){Ne(t,n),Jt(t,e,(function(){return t.activeTexture(t.TEXTURE0+n)})),Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,null)}))},getProgramUniformLocationOrThrow:ge,getProgramUniformLocation:ye,bindTextureToProgramUniformSampler:xe,bindCanvasToFramebuffer:function(t,e){Jt(t,e,(function(){return t.bindFramebuffer(t.FRAMEBUFFER,null)})),Jt(t,e,(function(){return t.viewport(0,0,t.canvas.width,t.canvas.height)})),Jt(t,e,(function(){return t.scissor(0,0,t.canvas.width,t.canvas.height)}))},bindColorTextureToFramebuffer:be,unbindColorTextureFromFramebuffer:we,validateFramebuffer:Ce,getFramebufferErrorMessage:Ee,getBatchDim:Ie,getRowsCols:Re,getShapeAs3D:Te,getTextureShapeFromLogicalShape:ke,isReshapeFree:Oe,getWebGLMaxTextureSize:De,resetMaxTextureSize:function(){ae=null},resetMaxTexturesInShader:function(){oe=null},getMaxTexturesInShader:_e,getWebGLDisjointQueryTimerVersion:Fe,hasExtension:Me,isWebGLVersionEnabled:Be,isCapableOfRenderingToFloatTexture:Pe,isDownloadFloatTextureEnabled:Le,isWebGLFenceEnabled:We}),Ue=f();function je(){f().set("PROD",!0)}function Ge(){f().set("DEBUG",!0)}function He(){f().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function qe(t){f().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(t+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}function Ke(){Lt.disposeVariables()}function Xe(){return Lt}function Ye(){return Lt.memory()}function $e(t){return Lt.profile(t)}function Qe(t,e){return Lt.tidy(t,e)}function Je(t){_t(t).forEach((function(t){return t.dispose()}))}function Ze(t){return Lt.keep(t)}function tn(t){return Lt.time(t)}function en(t){return Lt.setBackend(t)}function nn(){return Lt.ready()}function rn(){return Lt.backendName}function an(t){Lt.removeBackend(t)}function on(t){return Lt.findBackend(t)}function sn(t){return Lt.findBackendFactory(t)}function un(t,e,n){return void 0===n&&(n=1),Lt.registerBackend(t,e,n)}function cn(){return Lt.backend}function ln(t,e){f().setPlatform(t,e)}function pn(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];f().getBool("IS_TEST")||console.warn.apply(console,t)}function fn(t,e){var n=t;if(K(t))return"string"===e?[]:[t.length];if(!Array.isArray(t))return[];for(var r=[];Array.isArray(n)||K(n)&&"string"!==e;)r.push(n.length),n=n[0];return Array.isArray(t)&&f().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&function t(e,n,r){if(r=r||[],Array.isArray(e)||K(e)){T(n.length>0,(function(){return"Element arr["+r.join("][")+"] should be a primitive, but is an array of "+e.length+" elements"})),T(e.length===n[0],(function(){return"Element arr["+r.join("][")+"] should have "+n[0]+" elements, but has "+e.length+" elements"}));for(var a=n.slice(1),o=0;o<e.length;++o)t(e[o],a,r.concat(o))}else T(0===n.length,(function(){return"Element arr["+r.join("][")+"] is a primitive, but should be an array/TypedArray of "+n[0]+" elements"}))}(t,r,[]),r}function dn(t,e,n,r){if(null!=t&&("numeric"!==t&&t!==e||"numeric"===t&&"string"===e))throw new Error("Argument '"+n+"' passed to '"+r+"' must be "+t+" tensor, but got "+e+" tensor")}function hn(t,e,n,r){if(void 0===r&&(r="numeric"),t instanceof wt)return dn(r,t.dtype,e,n),t;var a=Z(t);if("string"!==a&&["bool","int32","float32"].indexOf(r)>=0&&(a=r),dn(r,a,e,n),null==t||!K(t)&&!Array.isArray(t)&&"number"!=typeof t&&"boolean"!=typeof t&&"string"!=typeof t){var o=null==t?"null":t.constructor.name;throw new Error("Argument '"+e+"' passed to '"+n+"' must be a Tensor or TensorLike, but got '"+o+"'")}var i=fn(t,a);K(t)||Array.isArray(t)||(t=[t]);var s="string"!==a?rt(t,a,f().getBool("DEBUG")):O(t,[],!0);return Lt.makeTensor(s,i,a)}function mn(t,e,n,r){if(void 0===r&&(r="numeric"),!Array.isArray(t))throw new Error("Argument "+e+" passed to "+n+" must be a `Tensor[]` or `TensorLike[]`");return t.map((function(t,r){return hn(t,e+"["+r+"]",n)}),r)}function vn(t,e){for(var n=0;n<t.length;++n)if(t[t.length-n-1]!==e-1-n)return!1;return!0}function gn(t,e,n){for(var r=t.length+e.length,a=[],o=0,i=0,s=0;s<r;s++)-1===n.indexOf(s)?a.push(t[o++]):a.push(e[i++]);return a}function yn(t,e){for(var n=[],r=t.length,a=0;a<r;a++)-1===e.indexOf(a)&&n.push(t[a]);return[n,e.map((function(e){return t[e]}))]}function xn(t,e){return gn(t,e.map((function(t){return 1})),e)}function bn(t,e,n){T(vn(e,n),(function(){return t+" supports only inner-most axes for now. Got axes "+e+" and rank-"+n+" input."}))}function wn(t,e){if(vn(t,e))return null;for(var n=[],r=0;r<e;++r)-1===t.indexOf(r)&&n.push(r);return t.forEach((function(t){return n.push(t)})),n}function Cn(t){return t.map((function(t,e){return[e,t]})).sort((function(t,e){return t[1]-e[1]})).map((function(t){return t[0]}))}function En(t,e){for(var n=[],r=e-t;r<e;++r)n.push(r);return n}function Sn(t,e){var n=t[0].length;t.forEach((function(t,e){T(t.length===n,(function(){return"Error in concat"+n+"D: rank of tensors["+e+"] must be the same as the rank of the rest ("+n+")"}))})),T(e>=0&&e<n,(function(){return"Error in concat"+n+"D: axis must be between 0 and "+(n-1)+"."}));var r=t[0];t.forEach((function(t,a){for(var o=0;o<n;o++)T(o===e||t[o]===r[o],(function(){return"Error in concat"+n+"D: Shape of tensors["+a+"] ("+t+") does not match the shape of the rest ("+r+") along the non-concatenated axis "+a+"."}))}))}function Nn(t,e){for(var n=t[0].slice(),r=1;r<t.length;r++)n[e]+=t[r][e];return n}function In(t){var e=Object.keys(t);if(1!==e.length)throw new Error("Please provide an object with a single key (operation name) mapping to a function. Got an object with "+e.length+" keys.");var n=e[0],r=t[n];n.endsWith("_")&&(n=n.substring(0,n.length-1));var a=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];Lt.startScope(n);try{var a=r.apply(void 0,t);return a instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),Lt.endScope(a),a}catch(t){throw Lt.endScope(null),t}};return Object.defineProperty(a,"name",{value:n,configurable:!0}),a}Ue.registerFlag("HAS_WEBGL",(function(){return Ue.getNumber("WEBGL_VERSION")>0})),Ue.registerFlag("WEBGL_VERSION",(function(){return Be(2)?2:Be(1)?1:0})),Ue.registerFlag("WEBGL_BUFFER_SUPPORTED",(function(){return 2===Ue.get("WEBGL_VERSION")})),Ue.registerFlag("WEBGL_CPU_FORWARD",(function(){return!0})),Ue.registerFlag("WEBGL_FORCE_F16_TEXTURES",(function(){return!1})),Ue.registerFlag("WEBGL_PACK",(function(){return Ue.getBool("HAS_WEBGL")})),Ue.registerFlag("WEBGL_PACK_NORMALIZATION",(function(){return Ue.getBool("WEBGL_PACK")})),Ue.registerFlag("WEBGL_PACK_CLIP",(function(){return Ue.getBool("WEBGL_PACK")})),Ue.registerFlag("WEBGL_PACK_DEPTHWISECONV",(function(){return!1})),Ue.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",(function(){return Ue.getBool("WEBGL_PACK")})),Ue.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",(function(){return Ue.getBool("WEBGL_PACK")})),Ue.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",(function(){return Ue.getBool("WEBGL_PACK")})),Ue.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",(function(){return Ue.getBool("WEBGL_PACK")})),Ue.registerFlag("WEBGL_PACK_REDUCE",(function(){return Ue.getBool("WEBGL_PACK")})),Ue.registerFlag("WEBGL_LAZILY_UNPACK",(function(){return Ue.getBool("WEBGL_PACK")})),Ue.registerFlag("WEBGL_CONV_IM2COL",(function(){return Ue.getBool("WEBGL_PACK")})),Ue.registerFlag("WEBGL_MAX_TEXTURE_SIZE",(function(){return De(Ue.getNumber("WEBGL_VERSION"))})),Ue.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",(function(){return _e(Ue.getNumber("WEBGL_VERSION"))})),Ue.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",(function(){var t=Ue.getNumber("WEBGL_VERSION");return 0===t?0:Fe(t)})),Ue.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",(function(){return Ue.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&(t=navigator.userAgent||navigator.vendor||window.opera,!(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))));var t})),Ue.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",(function(){return Pe(Ue.getNumber("WEBGL_VERSION"))})),Ue.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",(function(){return!Ue.getBool("WEBGL_FORCE_F16_TEXTURES")&&Ue.getBool("WEBGL_RENDER_FLOAT32_CAPABLE")})),Ue.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",(function(){return Le(Ue.getNumber("WEBGL_VERSION"))})),Ue.registerFlag("WEBGL_FENCE_API_ENABLED",(function(){return We(Ue.getNumber("WEBGL_VERSION"))})),Ue.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",(function(){return Ue.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0})),bt=qe;var Rn=In({complex_:function(t,e){var n=hn(t,"real","complex"),r=hn(e,"imag","complex");return k(n.shape,r.shape,"real and imag shapes, "+n.shape+" and "+r.shape+", must match in call to tf.complex()."),Lt.runKernelFunc((function(t){return t.complex(n,r)}),{$real:n,$imag:r})}}),Tn=In({real_:function(t){var e=hn(t,"input","real");return Lt.runKernelFunc((function(t){return t.real(e)}),{$input:e})}}),kn=In({imag_:function(t){var e=hn(t,"input","imag");return Lt.runKernelFunc((function(t){return t.imag(e)}),{$input:e})}});function An(t,e,n){return On(t,e,fn(t,n),n)}function On(t,e,n,r){if(null==r&&(r=Z(t)),"complex64"===r)throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!K(t)&&!Array.isArray(t)&&"number"!=typeof t&&"boolean"!=typeof t&&"string"!=typeof t)throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(null!=e){ut(e);var a=D(e),o=D(n);T(a===o,(function(){return"Based on the provided shape, ["+e+"], the tensor should have "+a+" values but has "+o}));for(var i=0;i<n.length;++i){var s=n[i],u=i!==n.length-1||s!==D(e.slice(i));T(n[i]===e[i]||!u,(function(){return"Error creating a new Tensor. Inferred shape ("+n+") does not match the provided shape ("+e+"). "}))}}return K(t)||Array.isArray(t)||(t=[t]),e=e||n,t="string"!==r?rt(t,r,f().getBool("DEBUG")):O(t,[],!0),Lt.makeTensor(t,e,r)}function Dn(t,e){if((K(t)&&"string"!==e||Array.isArray(t))&&"complex64"!==e)throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if("string"===e&&K(t)&&!(t instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");return On(t,[],[],e)}function _n(t,e){A(t);var n=fn(t,e);if(1!==n.length)throw new Error("tensor1d() requires values to be a flat/TypedArray");return On(t,null,n,e)}function Fn(t,e,n){if(A(t),null!=e&&2!==e.length)throw new Error("tensor2d() requires shape to have two numbers");var r=fn(t,n);if(2!==r.length&&1!==r.length)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(1===r.length&&null==e)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return On(t,e,r,n)}function Mn(t,e,n){if(A(t),null!=e&&3!==e.length)throw new Error("tensor3d() requires shape to have three numbers");var r=fn(t,n);if(3!==r.length&&1!==r.length)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(1===r.length&&null==e)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return On(t,e,r,n)}function Bn(t,e,n){if(A(t),null!=e&&4!==e.length)throw new Error("tensor4d() requires shape to have four numbers");var r=fn(t,n);if(4!==r.length&&1!==r.length)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(1===r.length&&null==e)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return On(t,e,r,n)}function Pn(t,e,n){if(A(t),null!=e&&5!==e.length)throw new Error("tensor5d() requires shape to have five numbers");var r=fn(t,n);if(5!==r.length&&1!==r.length)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(1===r.length&&null==e)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return On(t,e,r,n)}function Ln(t,e,n){if(A(t),null!=e&&6!==e.length)throw new Error("tensor6d() requires shape to have six numbers");var r=fn(t,n);if(6!==r.length&&1!==r.length)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(1===r.length&&null==e)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return On(t,e=e||r,r,n)}function Vn(t,e,n,r){return void 0===e&&(e=!0),Lt.makeVariable(t,e,n,r)}function Wn(t,e){if(void 0===e&&(e="float32"),"complex64"===e){var n=Wn(t,"float32"),r=zn(t,"float32");return Rn(n,r)}var a=ot(D(t),e);return Lt.makeTensor(a,t,e)}function zn(t,e){if(void 0===e&&(e="float32"),"complex64"===e){var n=zn(t,"float32"),r=zn(t,"float32");return Rn(n,r)}var a=it(D(t),e);return Lt.makeTensor(a,t,e)}function Un(t,e,n){return Lt.runKernelFunc((function(r){return r.fill(t,e,n)}),{})}function jn(t,e,n){if(n<=0)throw new Error("The number of values should be positive.");return Lt.runKernelFunc((function(r){return r.linspace(t,e,n)}),{})}function Gn(t,e,n,r){if(void 0===n&&(n=1),void 0===r&&(r="float32"),0===n)throw new Error("Cannot have a step of zero");if(t===e||t<e&&n<0||e<t&&n>1)return zn([0],r);var a=it(Math.abs(Math.ceil((e-t)/n)),r);e<t&&1===n&&(n=-1),a[0]=t;for(var o=1;o<a.length;o++)a[o]=a[o-1]+n;return _n(a,r)}var Hn=In({onesLike_:function(t){var e=hn(t,"x","onesLike");if("complex64"===e.dtype){var n=Hn(Tn(e)),r=qn(kn(e));return Rn(n,r)}return Lt.runKernelFunc((function(t){return t.onesLike(e)}),{$x:e},(function(t,e){return{$x:function(){return qn(t)}}}))}}),qn=In({zerosLike_:function(t){var e=hn(t,"x","zerosLike");return Lt.runKernelFunc((function(t){return t.zerosLike(e)}),{$x:e},(function(t,e){return{$x:function(){return qn(t)}}}))}}),Kn=In({concat_:function(t,e){void 0===e&&(e=0),T(t.length>=1,(function(){return"Pass at least one tensor to concat"}));var n=mn(t,"tensors","concat");"complex64"===n[0].dtype&&n.forEach((function(t){if("complex64"!==t.dtype)throw new Error("Cannot concatenate complex64 tensors with a tensor\n with dtype "+t.dtype+". ")})),e=W(e,n[0].shape)[0];var r=Nn(n.map((function(t){return t.shape})),e);if(0===D(r))return An([],r);if(1===(n=n.filter((function(t){return t.size>0}))).length)return n[0];var a=n.map((function(t){return t.shape}));Sn(a,e);var o=n,i={axis:e};return Lt.runKernelFunc((function(t){return t.concat(n,e)}),o,(function(t){var n=a.map((function(t){return t[e]}));return Jn(t,n,e).map((function(t){return function(){return t}}))}),"Concat",i)}}),Xn=In({concat1d_:function(t){return Kn(t,0)}}),Yn=In({concat2d_:function(t,e){return Kn(t,e)}}),$n=In({concat3d_:function(t,e){return Kn(t,e)}}),Qn=In({concat4d_:function(t,e){return Kn(t,e)}}),Jn=In({split_:function(t,e,n){void 0===n&&(n=0);var r,a=hn(t,"x","split");return n=W(n,a.shape)[0],"number"==typeof e?(T(a.shape[n]%e==0,(function(){return"Number of splits must evenly divide the axis."})),r=new Array(e).fill(a.shape[n]/e)):(T(a.shape[n]===e.reduce((function(t,e){return t+e})),(function(){return"The sum of sizes must match the size of the axis dimension."})),r=e),Lt.runKernelFunc((function(t){return t.split(a,r,n)}),{$x:a},(function(t){return{$x:function(){return Kn(t,n)}}}))}});function Zn(t,e){return t(e={exports:{}},e.exports),e.exports}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==t||"undefined"!=typeof self&&self;var tr=Zn((function(t){!function(t,e,n){function r(t){var e,n=this,r=(e=4022871197,function(t){t=t.toString();for(var n=0;n<t.length;n++){var r=.02519603282416938*(e+=t.charCodeAt(n));r-=e=r>>>0,e=(r*=e)>>>0,e+=4294967296*(r-=e)}return 2.3283064365386963e-10*(e>>>0)});n.next=function(){var t=2091639*n.s0+2.3283064365386963e-10*n.c;return n.s0=n.s1,n.s1=n.s2,n.s2=t-(n.c=0|t)},n.c=1,n.s0=r(" "),n.s1=r(" "),n.s2=r(" "),n.s0-=r(t),n.s0<0&&(n.s0+=1),n.s1-=r(t),n.s1<0&&(n.s1+=1),n.s2-=r(t),n.s2<0&&(n.s2+=1),r=null}function a(t,e){return e.c=t.c,e.s0=t.s0,e.s1=t.s1,e.s2=t.s2,e}function o(t,e){var n=new r(t),o=e&&e.state,i=n.next;return i.int32=function(){return 4294967296*n.next()|0},i.double=function(){return i()+11102230246251565e-32*(2097152*i()|0)},i.quick=i,o&&("object"==typeof o&&a(o,n),i.state=function(){return a(n,{})}),i}e&&e.exports?e.exports=o:this.alea=o}(0,t)})),er=Zn((function(t){!function(t,e,n){function r(t){var e=this,n="";e.x=0,e.y=0,e.z=0,e.w=0,e.next=function(){var t=e.x^e.x<<11;return e.x=e.y,e.y=e.z,e.z=e.w,e.w^=e.w>>>19^t^t>>>8},t===(0|t)?e.x=t:n+=t;for(var r=0;r<n.length+64;r++)e.x^=0|n.charCodeAt(r),e.next()}function a(t,e){return e.x=t.x,e.y=t.y,e.z=t.z,e.w=t.w,e}function o(t,e){var n=new r(t),o=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,o&&("object"==typeof o&&a(o,n),i.state=function(){return a(n,{})}),i}e&&e.exports?e.exports=o:this.xor128=o}(0,t)})),nr=Zn((function(t){!function(t,e,n){function r(t){var e=this,n="";e.next=function(){var t=e.x^e.x>>>2;return e.x=e.y,e.y=e.z,e.z=e.w,e.w=e.v,(e.d=e.d+362437|0)+(e.v=e.v^e.v<<4^t^t<<1)|0},e.x=0,e.y=0,e.z=0,e.w=0,e.v=0,t===(0|t)?e.x=t:n+=t;for(var r=0;r<n.length+64;r++)e.x^=0|n.charCodeAt(r),r==n.length&&(e.d=e.x<<10^e.x>>>4),e.next()}function a(t,e){return e.x=t.x,e.y=t.y,e.z=t.z,e.w=t.w,e.v=t.v,e.d=t.d,e}function o(t,e){var n=new r(t),o=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,o&&("object"==typeof o&&a(o,n),i.state=function(){return a(n,{})}),i}e&&e.exports?e.exports=o:this.xorwow=o}(0,t)})),rr=Zn((function(t){!function(t,e,n){function r(t){var e=this;e.next=function(){var t,n,r=e.x,a=e.i;return t=r[a],n=(t^=t>>>7)^t<<24,n^=(t=r[a+1&7])^t>>>10,n^=(t=r[a+3&7])^t>>>3,n^=(t=r[a+4&7])^t<<7,t=r[a+7&7],n^=(t^=t<<13)^t<<9,r[a]=n,e.i=a+1&7,n},function(t,e){var n,r=[];if(e===(0|e))r[0]=e;else for(e=""+e,n=0;n<e.length;++n)r[7&n]=r[7&n]<<15^e.charCodeAt(n)+r[n+1&7]<<13;for(;r.length<8;)r.push(0);for(n=0;n<8&&0===r[n];++n);for(8==n?r[7]=-1:r[n],t.x=r,t.i=0,n=256;n>0;--n)t.next()}(e,t)}function a(t,e){return e.x=t.x.slice(),e.i=t.i,e}function o(t,e){null==t&&(t=+new Date);var n=new r(t),o=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,o&&(o.x&&a(o,n),i.state=function(){return a(n,{})}),i}e&&e.exports?e.exports=o:this.xorshift7=o}(0,t)})),ar=Zn((function(t){!function(t,e,n){function r(t){var e=this;e.next=function(){var t,n,r=e.w,a=e.X,o=e.i;return e.w=r=r+1640531527|0,n=a[o+34&127],t=a[o=o+1&127],n^=n<<13,t^=t<<17,n^=n>>>15,t^=t>>>12,n=a[o]=n^t,e.i=o,n+(r^r>>>16)|0},function(t,e){var n,r,a,o,i,s=[],u=128;for(e===(0|e)?(r=e,e=null):(e+="\0",r=0,u=Math.max(u,e.length)),a=0,o=-32;o<u;++o)e&&(r^=e.charCodeAt((o+32)%e.length)),0===o&&(i=r),r^=r<<10,r^=r>>>15,r^=r<<4,r^=r>>>13,o>=0&&(i=i+1640531527|0,a=0==(n=s[127&o]^=r+i)?a+1:0);for(a>=128&&(s[127&(e&&e.length||0)]=-1),a=127,o=512;o>0;--o)r=s[a+34&127],n=s[a=a+1&127],r^=r<<13,n^=n<<17,r^=r>>>15,n^=n>>>12,s[a]=r^n;t.w=i,t.X=s,t.i=a}(e,t)}function a(t,e){return e.i=t.i,e.w=t.w,e.X=t.X.slice(),e}function o(t,e){null==t&&(t=+new Date);var n=new r(t),o=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,o&&(o.X&&a(o,n),i.state=function(){return a(n,{})}),i}e&&e.exports?e.exports=o:this.xor4096=o}(0,t)})),or=Zn((function(t){!function(t,e,n){function r(t){var e=this,n="";e.next=function(){var t=e.b,n=e.c,r=e.d,a=e.a;return t=t<<25^t>>>7^n,n=n-r|0,r=r<<24^r>>>8^a,a=a-t|0,e.b=t=t<<20^t>>>12^n,e.c=n=n-r|0,e.d=r<<16^n>>>16^a,e.a=a-t|0},e.a=0,e.b=0,e.c=-1640531527,e.d=1367130551,t===Math.floor(t)?(e.a=t/4294967296|0,e.b=0|t):n+=t;for(var r=0;r<n.length+20;r++)e.b^=0|n.charCodeAt(r),e.next()}function a(t,e){return e.a=t.a,e.b=t.b,e.c=t.c,e.d=t.d,e}function o(t,e){var n=new r(t),o=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,o&&("object"==typeof o&&a(o,n),i.state=function(){return a(n,{})}),i}e&&e.exports?e.exports=o:this.tychei=o}(0,t)})),ir=Zn((function(t){!function(e,r){var a,o=this,i=256,s="random",u=r.pow(i,6),c=r.pow(2,52),l=2*c,p=255;function f(t,n,p){var f=[],g=m(function t(e,n){var r,a=[],o=typeof e;if(n&&"object"==o)for(r in e)try{a.push(t(e[r],n-1))}catch(t){}return a.length?a:"string"==o?e:e+"\0"}((n=1==n?{entropy:!0}:n||{}).entropy?[t,v(e)]:null==t?function(){try{var t;return a&&(t=a.randomBytes)?t=t(i):(t=new Uint8Array(i),(o.crypto||o.msCrypto).getRandomValues(t)),v(t)}catch(t){var n=o.navigator,r=n&&n.plugins;return[+new Date,o,r,o.screen,v(e)]}}():t,3),f),y=new d(f),x=function(){for(var t=y.g(6),e=u,n=0;t<c;)t=(t+n)*i,e*=i,n=y.g(1);for(;t>=l;)t/=2,e/=2,n>>>=1;return(t+n)/e};return x.int32=function(){return 0|y.g(4)},x.quick=function(){return y.g(4)/4294967296},x.double=x,m(v(y.S),e),(n.pass||p||function(t,e,n,a){return a&&(a.S&&h(a,y),t.state=function(){return h(y,{})}),n?(r[s]=t,e):t})(x,g,"global"in n?n.global:this==r,n.state)}function d(t){var e,n=t.length,r=this,a=0,o=r.i=r.j=0,s=r.S=[];for(n||(t=[n++]);a<i;)s[a]=a++;for(a=0;a<i;a++)s[a]=s[o=p&o+t[a%n]+(e=s[a])],s[o]=e;(r.g=function(t){for(var e,n=0,a=r.i,o=r.j,s=r.S;t--;)e=s[a=p&a+1],n=n*i+s[p&(s[a]=s[o=p&o+e])+(s[o]=e)];return r.i=a,r.j=o,n})(i)}function h(t,e){return e.i=t.i,e.j=t.j,e.S=t.S.slice(),e}function m(t,e){for(var n,r=t+"",a=0;a<r.length;)e[p&a]=p&(n^=19*e[p&a])+r.charCodeAt(a++);return v(e)}function v(t){return String.fromCharCode.apply(0,t)}if(r.seedrandom=f,m(r.random(),e),t.exports){t.exports=f;try{a=n(10)}catch(t){}}}([],Math)}));ir.alea=tr,ir.xor128=er,ir.xorwow=nr,ir.xorshift7=rr,ir.xor4096=ar,ir.tychei=or;var sr=ir.alea,ur=function(){function t(t,e,n,r,a){this.mean=t,this.stdDev=e,this.dtype=n,this.nextVal=NaN,this.truncated=r,this.truncated&&(this.upper=this.mean+2*this.stdDev,this.lower=this.mean-2*this.stdDev);var o=a||Math.random();this.random=sr(o.toString())}return t.prototype.nextValue=function(){if(!isNaN(this.nextVal)){var t=this.nextVal;return this.nextVal=NaN,t}for(var e,n,r=!1;!r;){var a=void 0,o=void 0,i=void 0;do{i=(a=2*this.random()-1)*a+(o=2*this.random()-1)*o}while(i>=1||0===i);var s=Math.sqrt(-2*Math.log(i)/i);e=this.mean+this.stdDev*a*s,n=this.mean+this.stdDev*o*s,this.truncated&&!this.isValidTruncated(e)||(r=!0)}return this.truncated&&!this.isValidTruncated(n)||(this.nextVal=this.convertValue(n)),this.convertValue(e)},t.prototype.convertValue=function(t){return null==this.dtype||"float32"===this.dtype?t:Math.round(t)},t.prototype.isValidTruncated=function(t){return t<=this.upper&&t>=this.lower},t}(),cr=function(){function t(t,e,n,r){this.alpha=t,this.beta=1/e,this.dtype=n;var a=r||Math.random();this.randu=sr(a.toString()),this.randn=new ur(0,1,n,!1,this.randu()),this.d=t<1?t+2/3:t-1/3,this.c=1/Math.sqrt(9*this.d)}return t.prototype.nextValue=function(){for(var t,e,n,r,a,o;;){do{r=this.randn.nextValue(),o=1+this.c*r}while(o<=0);if(o*=o*o,e=1-.331*(t=r*r)*t,n=.5*t+this.d*(1-o+Math.log(o)),(a=this.randu())<e||Math.log(a)<n)break}return o=1/this.beta*this.d*o,this.alpha<1&&(o*=Math.pow(this.randu(),1/this.alpha)),this.convertValue(o)},t.prototype.convertValue=function(t){return"float32"===this.dtype?t:Math.round(t)},t}(),lr=function(){function t(t,e,n,r){var a=this;if(void 0===t&&(t=0),void 0===e&&(e=1),this.canReturnFloat=function(){return null==a.dtype||"float32"===a.dtype},this.min=t,this.range=e-t,this.dtype=n,null==r&&(r=Math.random()),"number"==typeof r&&(r=r.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error("The difference between "+t+" - "+e+" <= 1 and dtype is not float");this.random=sr(r)}return t.prototype.convertValue=function(t){return this.canReturnFloat()?t:Math.round(t)},t.prototype.nextValue=function(){return this.convertValue(this.min+this.range*this.random())},t}();function pr(t,e,n){return void 0===e&&(e="float32"),e=e||"float32",ut(t),new gt(t,e,n)}function fr(t,e){void 0===e&&(e=!1),console.log(t.toString(e))}var dr=In({batchToSpaceND_:function(t,e,n){var r=hn(t,"x","batchToSpaceND"),a=e.reduce((function(t,e){return t*e}));return T(r.rank>=1+e.length,(function(){return"input rank is "+r.rank+" but should be > than blockShape.length "+e.length})),T(n.length===e.length,(function(){return"crops.length is "+n.length+" but should be equal to blockShape.length "+e.length})),T(r.shape[0]%a==0,(function(){return"input tensor batch is "+r.shape[0]+" but is not divisible by the product of the elements of blockShape "+e.join(" * ")+" === "+a})),Lt.runKernelFunc((function(t){return t.batchToSpaceND(r,e,n)}),{$x:r},(function(t){return{$x:function(){return t.spaceToBatchND(e,n)}}}))}}),hr=In({broadcastTo_:function(t,e){var n=hn(t,"broadcastTo","x"),r=n.shape;if(e.some((function(t){return!(t>0)||t%1!=0})))throw new Error("broadcastTo(): Invalid broadcast shape ["+e+"].");if(e.length<n.rank)throw new Error("broadcastTo(): shape.length="+e.length+" < input.rank="+n.rank+".");if(e.length>n.rank){for(var a=n.shape.slice();a.length<e.length;)a.unshift(1);n=n.reshape(a)}for(var o=Array.from(e),i=e.length-1;i>=0;i--)if(n.shape[i]===e[i])o[i]=1;else if(1!==n.shape[i])throw new Error("broadcastTo(): ["+r+"] cannot be broadcast to ["+e+"].");var s=o.map((function(t,e){return t>1?e:-1})).filter((function(t){return t>=0}));return 0===s.length?n.clone():Lt.runKernelFunc((function(t){return t.tile(n,o)}),{input:n},(function(t){return{input:function(){return t.sum(s,!0)}}}))}}),mr=In({cast_:function(t,e){var n=hn(t,"x","cast");if(!H(e))throw new Error("Failed to cast to unknown dtype "+e);if("string"===e&&"string"!==n.dtype||"string"!==e&&"string"===n.dtype)throw new Error("Only strings can be casted to strings");var r={dtype:e};return Lt.runKernelFunc((function(t){return t.cast(n,e)}),{x:n},(function(t){return{x:function(){return t.clone()}}}),"Cast",r)}}),vr=In({clone_:function(t){var e=hn(t,"x","clone",null);return Lt.runKernelFunc((function(){return Lt.makeTensorFromDataId(e.dataId,e.shape,e.dtype)}),{$x:e},(function(t){return{$x:function(){return t.toFloat()}}}))}}),gr=In({cumsum_:function(t,e,n,r){void 0===e&&(e=0),void 0===n&&(n=!1),void 0===r&&(r=!1);var a=hn(t,"x","cumsum"),o=wn([e|=0],a.rank),i=a;null!=o&&(i=a.transpose(o));var s=En(1,a.rank)[0],u=Lt.runKernelFunc((function(t){return t.cumsum(i,s,n,r)}),{permutedX:i},(function(t){return{permutedX:function(){return t.cumsum(e,n,!r)}}}));return null!=o&&(u=u.transpose(o)),u}}),yr=In({depthToSpace_:function(t,e,n){void 0===n&&(n="NHWC");var r=hn(t,"x","depthToSpace"),a="NHWC"===n?r.shape[1]:r.shape[2],o="NHWC"===n?r.shape[2]:r.shape[3],i="NHWC"===n?r.shape[3]:r.shape[1];return T(a*e>=0,(function(){return"Negative dimension size caused by overflow when multiplying\n "+a+" and "+e+" for depthToSpace with input shape\n "+r.shape})),T(o*e>=0,(function(){return"Negative dimension size caused by overflow when multiplying\n "+o+" and "+e+" for depthToSpace with input shape\n "+r.shape})),T(i%(e*e)==0,(function(){return"Dimension size must be evenly divisible by "+e*e+" but is "+i+" for depthToSpace with input shape "+r.shape})),Lt.runKernelFunc((function(t){return t.depthToSpace(r,e,n)}),{$x:r})}}),xr=In({expandDims_:function(t,e){void 0===e&&(e=0);var n=hn(t,"x","expandDims",null);T(e<=n.rank,(function(){return"Axis must be <= rank of the tensor"}));var r=n.shape.slice();return e<0&&(T(-(n.rank+1)<=e,(function(){return"Axis must be in the interval ["+-(n.rank+1)+", "+n.rank+"]"})),e=n.rank+e+1),r.splice(e,0,1),Dr(n,r)}}),br=In({eye_:function(t,e,n,r){void 0===r&&(r="float32"),null==e&&(e=t);for(var a=pr([t,e],r),o=t<=e?t:e,i=0;i<o;++i)a.set(1,i,i);var s=a.toTensor().as2D(t,e);if(null==n)return s;if(1===n.length)return Br(xr(s,0),[n[0],1,1]);if(2===n.length)return Br(xr(xr(s,0),0),[n[0],n[1],1,1]);if(3===n.length)return Br(xr(xr(xr(s,0),0),0),[n[0],n[1],n[2],1,1]);throw new Error("eye() currently supports only 1D and 2D batchShapes, but received "+n.length+"D.")}}),wr=In({multinomial_:function(t,e,n,r){void 0===r&&(r=!1);var a=hn(t,"logits","multinomial"),o=a.size,i=a.rank;if(o<2)throw new Error("Error in multinomial: you need at least 2 outcomes, but got "+o+".");if(i>2)throw new Error("Rank of probabilities must be 1 or 2, but is "+i);n=n||Math.random();var s=1===i?a.as2D(1,-1):a,u=Lt.runKernelFunc((function(t){return t.multinomial(s,r,e,n)}),{logits2D:s});return 1===i?u.as1D():u}}),Cr=In({oneHot_:function(t,e,n,r){if(void 0===n&&(n=1),void 0===r&&(r=0),e<2)throw new Error("Error in oneHot: depth must be >=2, but it is "+e);var a=hn(t,"indices","oneHot","int32"),o=a.shape.concat([e]);return a=a.flatten(),Lt.runKernelFunc((function(t){return t.oneHot(a,e,n,r)}),{$indices:a},(function(t){return{$indices:function(){return zn(a.shape,"float32")}}})).reshape(o)}}),Er=In({pad_:function(t,e,n){void 0===n&&(n=0);var r=hn(t,"x","pad");if(0===r.rank)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");var a={paddings:e,constantValue:n};return Lt.runKernelFunc((function(t){return t.pad(r,e,n)}),{x:r},(function(t){var n=e.map((function(t){return t[0]}));return{x:function(){return t.slice(n,r.shape)}}}),"PadV2",a)}}),Sr=In({pad1d_:function(t,e,n){return void 0===n&&(n=0),T(2===e.length,(function(){return"Invalid number of paddings. Must be length of 2."})),Er(t,[e],n)}}),Nr=In({pad2d_:function(t,e,n){return void 0===n&&(n=0),T(2===e.length&&2===e[0].length&&2===e[1].length,(function(){return"Invalid number of paddings. Must be length of 2 each."})),Er(t,e,n)}}),Ir=In({pad3d_:function(t,e,n){return void 0===n&&(n=0),T(3===e.length&&2===e[0].length&&2===e[1].length&&2===e[2].length,(function(){return"Invalid number of paddings. Must be length of 2 each."})),Er(t,e,n)}}),Rr=In({pad4d_:function(t,e,n){return void 0===n&&(n=0),T(4===e.length&&2===e[0].length&&2===e[1].length&&2===e[2].length&&2===e[3].length,(function(){return"Invalid number of paddings. Must be length of 2 each."})),Er(t,e,n)}}),Tr=In({rand_:function(t,e,n){var r=D(t),a=null;if(null==n||"float32"===n)a=new Float32Array(r);else if("int32"===n)a=new Int32Array(r);else{if("bool"!==n)throw new Error("Unknown data type "+n);a=new Uint8Array(r)}for(var o=0;o<r;o++)a[o]=e();return Lt.makeTensor(a,t,n)}}),kr=In({randomNormal_:function(t,e,n,r,a){if(void 0===e&&(e=0),void 0===n&&(n=1),null!=r&&"bool"===r)throw new Error("Unsupported data type "+r);for(var o=new ur(e,n,r,!1,a),i=pr(t,r),s=0;s<i.values.length;s++)i.values[s]=o.nextValue();return i.toTensor()}}),Ar=In({randomGamma_:function(t,e,n,r,a){if(void 0===n&&(n=1),void 0===r&&(r="float32"),null==n&&(n=1),null==r&&(r="float32"),"float32"!==r&&"int32"!==r)throw new Error("Unsupported data type "+r);for(var o=new cr(e,n,r,a),i=pr(t,r),s=0;s<i.values.length;s++)i.values[s]=o.nextValue();return i.toTensor()}}),Or=In({randomUniform_:function(t,e,n,r,a){void 0===e&&(e=0),void 0===n&&(n=1),void 0===r&&(r="float32");for(var o=pr(t,r),i=new lr(e,n,null,a),s=0;s<o.values.length;s++)o.values[s]=i.nextValue();return o.toTensor()}}),Dr=In({reshape_:function(t,e){var n=hn(t,"x","reshape",null);e=V(e,n.size),T(n.size===D(e),(function(){return"new shape and old shape must have the same number of elements."}));var r={shape:e};return Lt.runKernelFunc((function(t){return t.reshape(n,e)}),{x:n},(function(t){return{x:function(){return t.reshape(n.shape)}}}),"Reshape",r)}}),_r=In({spaceToBatchND_:function(t,e,n){var r=hn(t,"x","spaceToBatchND");return T(r.rank>=1+e.length,(function(){return"input rank "+r.rank+" should be > than [blockShape] "+e.length})),T(n.length===e.length,(function(){return"paddings.shape[0] "+n.length+" must be equal to [blockShape] "+e.length})),T(r.shape.reduce((function(t,r,a){return a>0&&a<=e.length?t&&(r+n[a-1][0]+n[a-1][1])%e[a-1]==0:t}),!0),(function(){return"input spatial dimensions "+r.shape.slice(1)+" with paddings "+n.toString()+" must be divisible by blockShapes "+e.toString()})),Lt.runKernelFunc((function(t){return t.spaceToBatchND(r,e,n)}),{$x:r},(function(t){return{$x:function(){return t.batchToSpaceND(e,n)}}}))}}),Fr=In({squeeze_:function(t,e){var n=hn(t,"x","squeeze");return Dr(n,z(n.shape,e).newShape)}}),Mr=In({stack_:function(t,e){void 0===e&&(e=0);var n=mn(t,"tensors","stack");if(T(n.length>=1,(function(){return"Pass at least one tensor to tf.stack"})),1===n.length)return n[0].expandDims(e);var r=n[0].rank,a=n[0].shape,o=n[0].dtype;T(e<=r,(function(){return"Axis must be <= rank of the tensor"})),n.forEach((function(t){k(a,t.shape,"All tensors passed to stack must have matching shapes")})),n.forEach((function(t){T(o===t.dtype,(function(){return"All tensors passed to stack must have matching dtypes"}))}));var i=n.map((function(t){return t.expandDims(e)}));return Kn(i,e)}}),Br=In({tile_:function(t,e){var n=hn(t,"x","tile",null);T(n.rank===e.length,(function(){return"Error in transpose: rank of input "+n.rank+" must match length of reps "+e+"."}));var r=[n],a={reps:e};return Lt.runKernelFunc((function(t,r){var a=t.tile(n,e);return r([n]),a}),{x:n},(function(t,n){var r=n[0];return{x:function(){var n=qn(r);if(1===r.rank)for(var a=0;a<e[0];++a)n=n.add(t.slice([a*r.shape[0]],[r.shape[0]]));else if(2===r.rank)for(a=0;a<e[0];++a)for(var o=0;o<e[1];++o)n=n.add(t.slice([a*r.shape[0],o*r.shape[1]],[r.shape[0],r.shape[1]]));else if(3===r.rank)for(a=0;a<e[0];++a)for(o=0;o<e[1];++o)for(var i=0;i<e[2];++i)n=n.add(t.slice([a*r.shape[0],o*r.shape[1],i*r.shape[2]],[r.shape[0],r.shape[1],r.shape[2]]));else{if(4!==r.rank)throw new Error("Gradient for tile operation is not implemented for rank-"+r.rank+" tensors yet.");for(a=0;a<e[0];++a)for(o=0;o<e[1];++o)for(i=0;i<e[2];++i)for(var s=0;s<e[3];++s)n=n.add(t.slice([a*r.shape[0],o*r.shape[1],i*r.shape[2],s*r.shape[3]],[r.shape[0],r.shape[1],r.shape[2],r.shape[3]]))}return n}}}),"Tile",a,r)}}),Pr=In({truncatedNormal_:function(t,e,n,r,a){if(void 0===e&&(e=0),void 0===n&&(n=1),null!=r&&"bool"===r)throw new Error("Unsupported data type "+r);for(var o=new ur(e,n,r,!0,a),i=pr(t,r),s=0;s<i.values.length;s++)i.values[s]=o.nextValue();return i.toTensor()}}),Lr=In({unstack_:function(t,e){void 0===e&&(e=0),e=e||0;var n=hn(t,"x","unstack");T(e>=-n.shape.length&&e<n.shape.length,(function(){return"Axis = "+e+" is not in [-"+n.shape.length+", "+n.shape.length+")"})),e<0&&(e+=n.shape.length);var r={axis:e};return Lt.runKernelFunc((function(t){return t.unstack(n,e)}),{x:n},(function(t){return{x:function(){return Mr(t,e)}}}),"Unpack",r)}}),Vr=function(t,e){return u(this,void 0,void 0,(function(){var n,r,a,o,i,s,u,l,p,f;return c(this,(function(c){switch(c.label){case 0:return n=hn(t,"x","setdiff1d"),r=hn(e,"y","setdiff1d"),T(n.dtype===r.dtype,(function(){return"x and y should have the same dtype, but got x ("+n.dtype+") and y ("+r.dtype+")."})),T(1===n.rank,(function(){return"x should be 1D tensor, but got x ("+n.shape+")."})),T(1===r.rank,(function(){return"y should be 1D tensor, but got y ("+r.shape+")."})),[4,n.data()];case 1:return a=c.sent(),[4,r.data()];case 2:for(o=c.sent(),i=new Set(o),s=0,p=0;p<a.length;p++)i.has(a[p])||s++;for(u=new gt([s],n.dtype),l=new gt([s],"int32"),p=0,f=0;p<a.length;p++)i.has(a[p])||(u.values[f]=a[p],l.values[f]=p,f++);return[2,[u.toTensor(),l.toTensor()]]}}))}))};function Wr(t,e,n,r){void 0===r&&(r=!0);var a=[];if(r)(a=a.concat(e.slice(0))).push(t[0]/n),a=a.concat(t.slice(1));else{a=a.concat(t[0]);for(var o=e.length,i=0;i<o;++i)a=a.concat([t[i+1]/e[i],e[i]]);a=a.concat(t.slice(o+1))}return a}function zr(t,e,n){void 0===n&&(n=!0);var r=[];if(n){r.push(e);for(var a=e+1;a<t;++a)a<=2*e?(r.push(a),r.push(a-(e+1))):r.push(a)}else{var o=[],i=[];for(a=1;a<t;++a)a>=2*e+1||a%2==1?i.push(a):o.push(a);r.push.apply(r,o),r.push(0),r.push.apply(r,i)}return r}function Ur(t,e,n,r){void 0===r&&(r=!0);var a=[];r?a.push(t[0]/n):a.push(t[0]*n);for(var o=1;o<t.length;++o)o<=e.length?r?a.push(e[o-1]*t[o]):a.push(t[o]/e[o-1]):a.push(t[o]);return a}function jr(t,e){for(var n=[0],r=0;r<e;++r)n.push(t[r][0]);return n}function Gr(t,e,n){for(var r=t.slice(0,1),a=0;a<n;++a)r.push(t[a+1]-e[a][0]-e[a][1]);return r}function Hr(t,e){if(t.rank<1)throw new Error("tf.gatherND() expects the input to be rank 1 or higher, but the rank was "+t.rank+".");if(e.rank<1)throw new Error("tf.gatherND() expects the indices to be rank 1 or higher, but the rank was "+e.rank+".");if("int32"!==e.dtype)throw new Error("tf.gatherND() expects the indices to be int32 type, but the dtype was "+e.dtype+".");if(e.shape[e.rank-1]>t.rank)throw new Error("index innermost dimension length must be <= tensor rank; saw: "+e.shape[e.rank-1]+" vs. "+t.rank);if(0===t.size)throw new Error("Requested more than 0 entries, but input is empty. Input shape: "+t.shape+".");for(var n=e.shape,r=n[n.length-1],a=1,o=0;o<n.length-1;++o)a*=n[o];var i=t.shape,s=n.slice();s.pop();var u=1;for(o=r;o<t.rank;++o)u*=i[o],s.push(i[o]);var c=nt(t.shape).map((function(t){return t/u})).concat([1]).slice(0,r);return[s,a,u,c]}function qr(t){return t<=30?t:et(t,Math.floor(Math.sqrt(t)))}function Kr(t,e,n){for(var r=e.rank>1?e.shape[e.rank-1]:1,a=n.length,o=1,i=r;i<a;++i)o*=n[i];var s=r<1?1:r;return{sliceRank:r,numUpdates:e.size/s,sliceSize:o,strides:nt(n.slice(0,r)).concat([1]),outputSize:D(n)}}function Xr(t,e,n){T(t.rank===e.length,(function(){return"Error in slice"+t.rank+"D: Length of begin "+e+" must match the rank of the array ("+t.rank+")."})),T(t.rank===n.length,(function(){return"Error in slice"+t.rank+"D: Length of size "+n+" must match the rank of the array ("+t.rank+")."}));for(var r=function(r){T(e[r]+n[r]<=t.shape[r],(function(){return"Error in slice"+t.rank+"D: begin["+r+"] + size["+r+"] ("+(e[r]+n[r])+") would overflow input.shape["+r+"] ("+t.shape[r]+")"}))},a=0;a<t.rank;++a)r(a)}function Yr(t){for(var e=[],n=0;t>0;)1&t&&e.push(n),t/=2,n++;return e}function $r(t,e,n){for(var r=[],a=0;a<t.length;a++)r[a]=Math.ceil((e[a]-t[a])/n[a]);return r}function Qr(t,e,n,r,a){var o=e[a],i=n[a]||1;(t&1<<a||null==o)&&(o=i>0?Number.MIN_SAFE_INTEGER:Number.MAX_SAFE_INTEGER);var s=r[a];return o<0&&(o+=s),N(0,o,s-1)}function Jr(t,e,n,r,a){var o=e[a],i=n[a]||1;(t&1<<a||null==o)&&(o=i>0?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER);var s=r[a];return o<0&&(o+=s),i>0?N(0,o,s):N(-1,o,s-1)}function Zr(t,e,n){for(var r=n.length,a=0;a<n.length;a++)if(n[a]>1){r=a;break}for(a=r+1;a<n.length;a++)if(e[a]>0||n[a]!==t[a])return!1;return!0}function ta(t,e){for(var n=t.length>0?t[t.length-1]:1,r=0;r<t.length-1;r++)n+=t[r]*e[r];return n}var ea=Object.freeze({assertParamsValid:Xr,maskToAxes:Yr,computeOutShape:$r,startForAxis:Qr,stopForAxis:Jr,isSliceContinous:Zr,computeFlatOffset:ta});function na(t){return T(tt(t),(function(){return"The f passed in grad(f) must be a function"})),function(e,n){var r=hn(e,"x","tf.grad",null),a=null!=n?hn(n,"dy","tf.grad"):null;return Lt.tidy((function(){var e=Lt.gradients((function(){return t(r)}),[r],a),n=e.value,o=e.grads;return null!=a&&k(n.shape,a.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),ua(o),o[0]}))}}function ra(t){return T(tt(t),(function(){return"The f passed in grads(f) must be a function"})),function(e,n){T(Array.isArray(e),(function(){return"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s"}));var r=mn(e,"args","tf.grads",null),a=null!=n?hn(n,"dy","tf.grads"):null;return Lt.tidy((function(){var e=Lt.gradients((function(){return t.apply(void 0,r)}),r,a),n=e.value,o=e.grads;return null!=a&&k(n.shape,a.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),ua(o),o}))}}function aa(t){return T(tt(t),(function(){return"The f passed in valueAndGrad(f) must be a function"})),function(e,n){T(e instanceof wt,(function(){return"The x passed in valueAndGrad(f)(x) must be a tensor"})),T(null==n||n instanceof wt,(function(){return"The dy passed in valueAndGrad(f)(x, dy) must be a tensor"}));var r=Lt.gradients((function(){return t(e)}),[e],n),a=r.grads,o=r.value;return ua(a),{grad:a[0],value:o}}}function oa(t){return T(tt(t),(function(){return"The f passed in valueAndGrads(f) must be a function"})),function(e,n){T(Array.isArray(e)&&e.every((function(t){return t instanceof wt})),(function(){return"The args passed in valueAndGrads(f)(args) must be array of tensors"})),T(null==n||n instanceof wt,(function(){return"The dy passed in valueAndGrads(f)(args, dy) must be a tensor"}));var r=Lt.gradients((function(){return t.apply(void 0,e)}),e,n);return null!=n&&k(r.value.shape,n.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),ua(r.grads),r}}function ia(t,e){T(tt(t),(function(){return"The f passed in variableGrads(f) must be a function"})),T(null==e||Array.isArray(e)&&e.every((function(t){return t instanceof Rt})),(function(){return"The varList passed in variableGrads(f, varList) must be an array of variables"}));var n=null!=e;if(!n)for(var r in e=[],Lt.registeredVariables)e.push(Lt.registeredVariables[r]);var a=n?e.filter((function(t){return!t.trainable})):null,o=e.length;T((e=e.filter((function(t){return t.trainable}))).length>0,(function(){return"variableGrads() expects at least one of the input variables to be trainable, but none of the "+o+" variables is trainable."}));var i=Lt.gradients(t,e,null,!0),s=i.value,u=i.grads;T(u.some((function(t){return null!=t})),(function(){return"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."})),T(0===s.rank,(function(){return"The f passed in variableGrads(f) must return a scalar, but it returned a rank-"+s.rank+" tensor"}));var c={};return e.forEach((function(t,e){null!=u[e]&&(c[t.name]=u[e])})),null!=a&&a.forEach((function(t){return c[t.name]=null})),{value:s,grads:c}}function sa(t){return Lt.customGrad(t)}function ua(t){if(t.filter((function(t){return null==t})).length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that\n the f you passed encloses all operations that lead from x to y.")}var ca=In({softmax_:function(t,e){void 0===e&&(e=-1);var n=hn(t,"logits","softmax");if(-1===e&&(e=n.rank-1),e!==n.rank-1)throw Error("Softmax along a non-last dimension is not yet supported. Logits was rank "+n.rank+" and dim was "+e);return sa((function(t,n){var r=t.logSumExp([e],!0),a=t.toFloat().sub(r).exp();return n([a]),{value:a,gradFunc:function(t,n){var r=n[0],a=t.mul(r);return a.sub(a.sum([e],!0).mul(r))}}}))(n)}}),la=In({logSoftmax_:function(t,e){void 0===e&&(e=-1);var n=hn(t,"logits","logSoftmax");if(-1===e&&(e=n.rank-1),e!==n.rank-1)throw Error("Log Softmax along a non-last dimension is not yet supported. Logits was rank "+n.rank+" and axis was "+e);return sa((function(t,n){var r=t.max(e,!0),a=t.sub(r),o=a.toFloat().sub(a.exp().sum(e,!0).log());return n([o]),{value:o,gradFunc:function(t,n){var r=n[0].exp();return t.sub(t.sum(e,!0).mul(r))}}}))(n)}}),pa=function(){function t(t,e){this.backend=t,this.dataMover=e,this.data=new WeakMap,this.dataIdsCount=0}return t.prototype.get=function(t){return this.data.has(t)||this.dataMover.moveData(this.backend,t),this.data.get(t)},t.prototype.set=function(t,e){this.dataIdsCount++,this.data.set(t,e)},t.prototype.has=function(t){return this.data.has(t)},t.prototype.delete=function(t){return this.dataIdsCount--,this.data.delete(t)},t.prototype.numDataIds=function(){return this.dataIdsCount},t}(),fa=function(){function t(){}return t.prototype.time=function(t){return da("time")},t.prototype.read=function(t){return da("read")},t.prototype.readSync=function(t){return da("readSync")},t.prototype.numDataIds=function(){return da("numDataIds")},t.prototype.disposeData=function(t){return da("disposeData")},t.prototype.write=function(t,e,n){return da("write")},t.prototype.move=function(t,e,n,r){return da("move")},t.prototype.memory=function(){return da("memory")},t.prototype.floatPrecision=function(){return da("floatPrecision")},t.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},t.prototype.batchMatMul=function(t,e,n,r){return da("batchMatMul")},t.prototype.fusedBatchMatMul=function(t){return t.a,t.b,t.transposeA,t.transposeB,t.bias,t.activation,t.preluActivationWeights,da("fusedBatchMatMul")},t.prototype.slice=function(t,e,n){return da("slice")},t.prototype.stridedSlice=function(t,e,n,r){return da("stridedSlice")},t.prototype.unstack=function(t,e){return da("unstack")},t.prototype.reverse=function(t,e){return da("reverse")},t.prototype.concat=function(t,e){return da("concat")},t.prototype.neg=function(t){return da("neg")},t.prototype.add=function(t,e){return da("add")},t.prototype.addN=function(t){return da("addN")},t.prototype.subtract=function(t,e){return da("subtract")},t.prototype.multiply=function(t,e){return da("multiply")},t.prototype.realDivide=function(t,e){return da("realDivide")},t.prototype.floorDiv=function(t,e){return da("floorDiv")},t.prototype.sum=function(t,e){return da("sum")},t.prototype.prod=function(t,e){return da("prod")},t.prototype.unsortedSegmentSum=function(t,e,n){return da("unsortedSegmentSum")},t.prototype.argMin=function(t,e){return da("argMin")},t.prototype.argMax=function(t,e){return da("argMax")},t.prototype.equal=function(t,e){return da("equal")},t.prototype.notEqual=function(t,e){return da("notEqual")},t.prototype.less=function(t,e){return da("less")},t.prototype.lessEqual=function(t,e){return da("lessEqual")},t.prototype.greater=function(t,e){return da("greater")},t.prototype.greaterEqual=function(t,e){return da("greaterEqual")},t.prototype.logicalNot=function(t){return da("logicalNot")},t.prototype.logicalAnd=function(t,e){return da("logicalAnd")},t.prototype.logicalOr=function(t,e){return da("logicalOr")},t.prototype.where=function(t){return da("where")},t.prototype.select=function(t,e,n){return da("select")},t.prototype.topk=function(t,e,n){return da("topk")},t.prototype.min=function(t,e){return da("min")},t.prototype.minimum=function(t,e){return da("minimum")},t.prototype.mod=function(t,e){return da("mod")},t.prototype.max=function(t,e){return da("max")},t.prototype.maximum=function(t,e){return da("maximum")},t.prototype.all=function(t,e){return da("all")},t.prototype.any=function(t,e){return da("any")},t.prototype.squaredDifference=function(t,e){return da("squaredDifference")},t.prototype.ceil=function(t){return da("ceil")},t.prototype.floor=function(t){return da("floor")},t.prototype.round=function(t){return da("round")},t.prototype.sign=function(t){return da("sign")},t.prototype.isNaN=function(t){return da("isNaN")},t.prototype.isInf=function(t){return da("isInf")},t.prototype.isFinite=function(t){return da("isFinite")},t.prototype.pow=function(t,e){return da("pow")},t.prototype.exp=function(t){return da("exp")},t.prototype.expm1=function(t){return da("expm1")},t.prototype.log=function(t){return da("log")},t.prototype.log1p=function(t){return da("log1p")},t.prototype.sqrt=function(t){return da("sqrt")},t.prototype.rsqrt=function(t){return da("rsqrt")},t.prototype.square=function(t){return da("square")},t.prototype.reciprocal=function(t){return da("reciprocal")},t.prototype.relu=function(t){return da("relu")},t.prototype.relu6=function(t){return da("relu6")},t.prototype.prelu=function(t,e){return da("prelu")},t.prototype.elu=function(t){return da("elu")},t.prototype.eluDer=function(t,e){return da("eluDer")},t.prototype.selu=function(t){return da("selu")},t.prototype.int=function(t){return da("int")},t.prototype.clip=function(t,e,n){return da("clip")},t.prototype.abs=function(t){return da("abs")},t.prototype.complexAbs=function(t){return da("complexAbs")},t.prototype.sigmoid=function(t){return da("sigmoid")},t.prototype.softplus=function(t){return da("softplus")},t.prototype.sin=function(t){return da("sin")},t.prototype.cos=function(t){return da("cos")},t.prototype.tan=function(t){return da("tan")},t.prototype.asin=function(t){return da("asin")},t.prototype.acos=function(t){return da("acos")},t.prototype.atan=function(t){return da("atan")},t.prototype.atan2=function(t,e){return da("atan2")},t.prototype.sinh=function(t){return da("sinh")},t.prototype.cosh=function(t){return da("cosh")},t.prototype.tanh=function(t){return da("tanh")},t.prototype.asinh=function(t){return da("asinh")},t.prototype.acosh=function(t){return da("acosh")},t.prototype.atanh=function(t){return da("atanh")},t.prototype.erf=function(t){return da("erf")},t.prototype.step=function(t,e){return da("step")},t.prototype.fusedConv2d=function(t){return t.input,t.filter,t.convInfo,t.bias,t.activation,t.preluActivationWeights,da("fusedConv2d")},t.prototype.conv2d=function(t,e,n){return da("conv2d")},t.prototype.conv2dDerInput=function(t,e,n){return da("conv2dDerInput")},t.prototype.conv2dDerFilter=function(t,e,n){return da("conv2dDerFilter")},t.prototype.fusedDepthwiseConv2D=function(t){return t.input,t.filter,t.convInfo,t.bias,t.activation,t.preluActivationWeights,da("fusedDepthwiseConv2D")},t.prototype.depthwiseConv2D=function(t,e,n){return da("depthwiseConv2D")},t.prototype.depthwiseConv2DDerInput=function(t,e,n){return da("depthwiseConv2DDerInput")},t.prototype.depthwiseConv2DDerFilter=function(t,e,n){return da("depthwiseConv2DDerFilter")},t.prototype.conv3d=function(t,e,n){return da("conv3d")},t.prototype.conv3dDerInput=function(t,e,n){return da("conv3dDerInput")},t.prototype.conv3dDerFilter=function(t,e,n){return da("conv3dDerFilter")},t.prototype.maxPool=function(t,e){return da("maxPool")},t.prototype.maxPoolBackprop=function(t,e,n,r){return da("maxPoolBackprop")},t.prototype.avgPool=function(t,e){return da("avgPool")},t.prototype.avgPoolBackprop=function(t,e,n){return da("avgPoolBackprop")},t.prototype.avgPool3d=function(t,e){return da("avgPool3d")},t.prototype.avgPool3dBackprop=function(t,e,n){return da("avgPool3dBackprop")},t.prototype.maxPool3d=function(t,e){return da("maxPool3d")},t.prototype.maxPool3dBackprop=function(t,e,n,r){return da("maxPool3dBackprop")},t.prototype.reshape=function(t,e){return da("reshape")},t.prototype.cast=function(t,e){return da("cast")},t.prototype.tile=function(t,e){return da("tile")},t.prototype.pad=function(t,e,n){return da("pad")},t.prototype.transpose=function(t,e){return da("transpose")},t.prototype.gather=function(t,e,n){return da("gather")},t.prototype.gatherND=function(t,e){return da("gatherND")},t.prototype.scatterND=function(t,e,n){return da("scatterND")},t.prototype.batchToSpaceND=function(t,e,n){return da("batchToSpaceND")},t.prototype.spaceToBatchND=function(t,e,n){return da("spaceToBatchND")},t.prototype.resizeBilinear=function(t,e,n,r){return da("resizeBilinear")},t.prototype.resizeBilinearBackprop=function(t,e,n){return da("resizeBilinearBackprop")},t.prototype.resizeNearestNeighbor=function(t,e,n,r){return da("resizeNearestNeighbor")},t.prototype.resizeNearestNeighborBackprop=function(t,e,n){return da("resizeNearestNeighborBackprop")},t.prototype.batchNormalization=function(t,e,n,r,a,o){return da("batchNormalization")},t.prototype.localResponseNormalization4D=function(t,e,n,r,a){return da("localResponseNormalization4D")},t.prototype.LRNGrad=function(t,e,n,r,a,o,i){return da("LRNGrad")},t.prototype.multinomial=function(t,e,n,r){return da("multinomial")},t.prototype.oneHot=function(t,e,n,r){return da("oneHot")},t.prototype.cumsum=function(t,e,n,r){return da("cumsum")},t.prototype.nonMaxSuppression=function(t,e,n,r,a){return da("nonMaxSuppression")},t.prototype.fft=function(t){return da("fft")},t.prototype.ifft=function(t){return da("ifft")},t.prototype.complex=function(t,e){return da("complex")},t.prototype.real=function(t){return da("real")},t.prototype.imag=function(t){return da("imag")},t.prototype.cropAndResize=function(t,e,n,r,a,o){return da("cropAndResize")},t.prototype.depthToSpace=function(t,e,n){return da("depthToSpace")},t.prototype.split=function(t,e,n){return da("split")},t.prototype.sparseToDense=function(t,e,n,r){return da("sparseToDense")},t.prototype.diag=function(t){return da("diag")},t.prototype.fill=function(t,e,n){return da("fill")},t.prototype.onesLike=function(t){return da("onesLike")},t.prototype.zerosLike=function(t){return da("zerosLike")},t.prototype.linspace=function(t,e,n){return da("linspace")},t.prototype.dispose=function(){return da("dispose")},t}();function da(t){throw new Error("'"+t+"' not yet implemented or not found in the registry. Did you forget to import the kernel?")}function ha(t,e){for(var n=t.length,r=[],a=0;a<n;a++){var o=n-1-a,i=t[o]||1;(e[e.length-1-a]||1)>1&&1===i&&r.unshift(o)}return r}function ma(t,e){for(var n=[],r=0;r<e.length;r++){var a=t[t.length-r-1],o=e.length-r-1,i=e[o];(null==a||1===a&&i>1)&&n.unshift(o)}return n}function va(t,e){for(var n=[],r=Math.max(t.length,e.length),a=0;a<r;a++){var o=t[t.length-a-1];null==o&&(o=1);var i=e[e.length-a-1];if(null==i&&(i=1),1===o)n.unshift(i);else if(1===i)n.unshift(o);else{if(o!==i)throw Error("Operands could not be broadcast together with shapes "+t+" and "+e+".");n.unshift(o)}}return n}function ga(t,e,n,r,a,o,i){void 0===i&&(i="channelsLast");var s,u=Ca(e),c=u[0],l=u[1];if("channelsLast"===i)s=[c,l,t[3],t[3]];else{if("channelsFirst"!==i)throw new Error("Unknown dataFormat "+i);s=[c,l,t[1],t[1]]}return xa(t,s,n,r,a,o,!1,i)}function ya(t,e,n,r,a,o,i){void 0===i&&(i="NDHWC");var s,u,c=Ea(e),l=c[0],p=c[1],f=c[2];if("NDHWC"===i)u="channelsLast",s=[l,p,f,t[4],t[4]];else{if("NCDHW"!==i)throw new Error("Unknown dataFormat "+i);u="channelsFirst",s=[l,p,f,t[1],t[1]]}return ba(t,s,n,r,a,!1,u,o)}function xa(t,e,n,r,a,o,i,s){void 0===i&&(i=!1),void 0===s&&(s="channelsLast");var u=[-1,-1,-1,-1],c=u[0],l=u[1],p=u[2],f=u[3];if("channelsLast"===s)c=t[0],l=t[1],p=t[2],f=t[3];else{if("channelsFirst"!==s)throw new Error("Unknown dataFormat "+s);c=t[0],f=t[1],l=t[2],p=t[3]}var d,h=e[0],m=e[1],v=e[3],g=Ca(n),y=g[0],x=g[1],b=Ca(r),w=b[0],C=b[1],E=Sa(h,w),S=Sa(m,C),N=function(t,e,n,r,a,o,i,s){var u,c,l;if("number"==typeof t){u={top:t,bottom:t,left:t,right:t,type:0===t?"VALID":"NUMBER"};var p=function(t,e,n,r,a){null==r&&(r=wa(t,e,n));var o=t[1],i=Na((t[0]-e+2*r)/n+1,a);T(F(i),(function(){return"The output # of rows ("+i+") must be an integer. Change the stride and/or zero pad parameters"}));var s=Na((o-e+2*r)/n+1,a);return T(F(s),(function(){return"The output # of columns ("+s+") must be an integer. Change the stride and/or zero pad parameters"})),[i,s]}([e,n],o,r,t,s);c=p[0],l=p[1]}else if("same"===t){c=Math.ceil(e/r),l=Math.ceil(n/a);var f=Math.max(0,(c-1)*r+o-e),d=Math.max(0,(l-1)*a+i-n),h=Math.floor(f/2),m=f-h,v=Math.floor(d/2);u={top:h,bottom:m,left:v,right:d-v,type:"SAME"}}else{if("valid"!==t)throw Error("Unknown padding parameter: "+t);u={top:0,bottom:0,left:0,right:0,type:"VALID"},c=Math.ceil((e-o+1)/r),l=Math.ceil((n-i+1)/a)}return{padInfo:u,outHeight:c,outWidth:l}}(a,l,p,y,x,E,S,o),I=N.padInfo,R=N.outHeight,k=N.outWidth,A=i?v*f:v;return"channelsFirst"===s?d=[c,A,R,k]:"channelsLast"===s&&(d=[c,R,k,A]),{batchSize:c,dataFormat:s,inHeight:l,inWidth:p,inChannels:f,outHeight:R,outWidth:k,outChannels:A,padInfo:I,strideHeight:y,strideWidth:x,filterHeight:h,filterWidth:m,effectiveFilterHeight:E,effectiveFilterWidth:S,dilationHeight:w,dilationWidth:C,inShape:t,outShape:d,filterShape:e}}function ba(t,e,n,r,a,o,i,s){void 0===o&&(o=!1),void 0===i&&(i="channelsLast");var u=[-1,-1,-1,-1,-1],c=u[0],l=u[1],p=u[2],f=u[3],d=u[4];if("channelsLast"===i)c=t[0],l=t[1],p=t[2],f=t[3],d=t[4];else{if("channelsFirst"!==i)throw new Error("Unknown dataFormat "+i);c=t[0],d=t[1],l=t[2],p=t[3],f=t[4]}var h,m=e[0],v=e[1],g=e[2],y=e[4],x=Ea(n),b=x[0],w=x[1],C=x[2],E=Ea(r),S=E[0],N=E[1],I=E[2],R=Sa(m,S),k=Sa(v,N),A=Sa(g,I),O=function(t,e,n,r,a,o,i,s,u,c,l){var p,f,d,h;if("number"==typeof t){p={top:t,bottom:t,left:t,right:t,front:t,back:t,type:0===t?"VALID":"NUMBER"};var m=function(t,e,n,r,a,o){null==a&&(a=wa(t,e,r));var i=t[1],s=t[2],u=Na((t[0]-e+2*a)/r+1,o);T(F(u),(function(){return"The output # of depths ("+u+") must be an integer. Change the stride and/or zero pad parameters"}));var c=Na((i-e+2*a)/r+1,o);T(F(c),(function(){return"The output # of rows ("+c+") must be an integer. Change the stride and/or zero pad parameters"}));var l=Na((s-e+2*a)/r+1,o);return T(F(l),(function(){return"The output # of columns ("+l+") must be an integer. Change the stride and/or zero pad parameters"})),[u,c,l,1]}([e,n,r,1],s,0,a,t,l);f=m[0],d=m[1],h=m[2]}else if("same"===t){var v=((f=Math.ceil(e/a))-1)*a+s-e,g=((d=Math.ceil(n/o))-1)*o+u-n,y=((h=Math.ceil(r/i))-1)*i+c-r,x=Math.floor(v/2),b=v-x,w=Math.floor(g/2),C=g-w,E=Math.floor(y/2);p={top:w,bottom:C,left:E,right:y-E,front:x,back:b,type:"SAME"}}else{if("valid"!==t)throw Error("Unknown padding parameter: "+t);p={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},f=Math.ceil((e-s+1)/a),d=Math.ceil((n-u+1)/o),h=Math.ceil((r-c+1)/i)}return{padInfo:p,outDepth:f,outHeight:d,outWidth:h}}(a,l,p,f,b,w,C,R,k,A,s),D=O.padInfo,_=O.outDepth,M=O.outHeight,B=O.outWidth,P=o?y*d:y;return"channelsFirst"===i?h=[c,P,_,M,B]:"channelsLast"===i&&(h=[c,_,M,B,P]),{batchSize:c,dataFormat:i,inDepth:l,inHeight:p,inWidth:f,inChannels:d,outDepth:_,outHeight:M,outWidth:B,outChannels:P,padInfo:D,strideDepth:b,strideHeight:w,strideWidth:C,filterDepth:m,filterHeight:v,filterWidth:g,effectiveFilterDepth:R,effectiveFilterHeight:k,effectiveFilterWidth:A,dilationDepth:S,dilationHeight:N,dilationWidth:I,inShape:t,outShape:h,filterShape:e}}function wa(t,e,n,r){void 0===r&&(r=1);var a=Sa(e,r);return Math.floor((t[0]*(n-1)-n+a)/2)}function Ca(t){return"number"==typeof t?[t,t,t]:2===t.length?[t[0],t[1],1]:t}function Ea(t){return"number"==typeof t?[t,t,t]:t}function Sa(t,e){return e<=1?t:t+(t-1)*(e-1)}function Na(t,e){if(!e)return t;switch(e){case"round":return Math.round(t);case"ceil":return Math.ceil(t);case"floor":return Math.floor(t);default:throw new Error("Unknown roundingMode "+e)}}function Ia(t){var e=Ca(t),n=e[0],r=e[1],a=e[2];return 1===n&&1===r&&1===a}function Ra(t,e){return Ia(t)||Ia(e)}function Ta(t){if("NHWC"===t)return"channelsLast";if("NCHW"===t)return"channelsFirst";throw new Error("Unknown dataFormat "+t)}function ka(t,e,n){if("complex64"===e){if("complex64"===t.dtype)return t.clone();var r=zn(t.shape),a=t.toFloat(),o=n.complex(a,r);return r.dispose(),a.dispose(),o}if(!q(t.dtype,e))return Lt.makeTensorFromDataId(t.dataId,t.shape,e);if("complex64"===t.dtype){var i=n.real(t);return o=i.cast(e),i.dispose(),o}if("int32"===e)return n.int(t);if("bool"===e){var s=Dn(0,t.dtype);return o=n.notEqual(t,s),s.dispose(),o}throw new Error("Error in Cast: failed to cast "+t.dtype+" to "+e)}function Aa(t,e){return Lt.makeTensorFromDataId(t.dataId,e,t.dtype)}function Oa(t,e,n){var r=(e-t)/(n-1),a=it(n,"float32");a[0]=t;for(var o=1;o<a.length;o++)a[o]=a[o-1]+r;return _n(a,"float32")}var Da=Object.freeze({castTensor:ka,reshapeTensor:Aa,linspaceImpl:Oa,upcastType:kt,axesAreInnerMostDims:vn,combineLocations:gn,computeOutAndReduceShapes:yn,expandShapeToKeepDim:xn,assertAxesAreInnerMostDims:bn,getAxesPermutation:wn,getUndoAxesPermutation:Cn,getInnerMostAxes:En,getBroadcastDims:ha,getReductionAxes:ma,assertAndGetBroadcastShape:va,assertParamsConsistent:Sn,computeOutShape:Nn,computePool2DInfo:ga,computePool3DInfo:ya,computeConv2DInfo:xa,computeConv3DInfo:ba,computeDefaultPad:wa,tupleValuesAreOne:Ia,eitherStridesOrDilationsAreOne:Ra,convertConv2DDataFormat:Ta});function _a(t,e){if(t.length!==e.length)throw new Error("Cannot merge real and imag arrays of different lengths. real:"+t.length+", imag: "+e.length+".");for(var n=new Float32Array(2*t.length),r=0;r<n.length;r+=2)n[r]=t[r/2],n[r+1]=e[r/2];return n}function Fa(t,e){return{real:t[2*e],imag:t[2*e+1]}}function Ma(t,e,n,r){t[2*r]=e,t[2*r+1]=n}function Ba(t,e,n){var r=(n?2:-2)*Math.PI*(t/e);return{real:Math.cos(r),imag:Math.sin(r)}}function Pa(t,e,n){var r=function(t,e,n){return function(t,e,n){for(var r=0,a=t.length,o=0,i=!1;r<a;){var s=n(e,t[o=r+(a-r>>>1)]);s>0?r=o+1:(a=o,i=!s)}return i?r:-r-1}(t,e,n||La)}(t,e,n),a=r<0?-(r+1):r;t.splice(a,0,e)}function La(t,e){return t>e?1:t<e?-1:0}function Va(t,e,n,r,a){return za(t,e,n,r,a,0).selectedIndices}function Wa(t,e,n,r,a,o){var i=za(t,e,n,r,a,o,!0);return i.numValidOutputs.dispose(),{selectedIndices:i.selectedIndices,selectedScores:i.selectedScores}}function za(t,e,n,r,a,o,i,s){void 0===i&&(i=!1),void 0===s&&(s=!1);for(var u=Array.from(e).map((function(t,e){return{score:t,boxIndex:e,suppressBeginIndex:0}})).filter((function(t){return t.score>a})).sort(Ga),c=o>0?-.5/o:0,l=[],p=[];l.length<n&&u.length>0;){var f=u.pop(),d=f.score,h=f.boxIndex,m=f.suppressBeginIndex;if(d<a)break;for(var v=!1,g=l.length-1;g>=m;--g){var y=Ua(t,h,l[g]);if(y>=r){v=!0;break}if(f.score=f.score*ja(r,c,y),f.score<=a)break}f.suppressBeginIndex=l.length,v||(f.score===d?(l.push(h),p.push(f.score)):f.score>a&&Pa(u,f,Ga))}var x=l.length;return s&&(l.fill(0,x),p.fill(0,x)),{selectedIndices:_n(l,"int32"),selectedScores:_n(p,"float32"),numValidOutputs:Dn(x,"int32")}}function Ua(t,e,n){var r=t.subarray(4*e,4*e+4),a=t.subarray(4*n,4*n+4),o=Math.min(r[0],r[2]),i=Math.min(r[1],r[3]),s=Math.max(r[0],r[2]),u=Math.max(r[1],r[3]),c=Math.min(a[0],a[2]),l=Math.min(a[1],a[3]),p=Math.max(a[0],a[2]),f=Math.max(a[1],a[3]),d=(s-o)*(u-i),h=(p-c)*(f-l);if(d<=0||h<=0)return 0;var m=Math.max(o,c),v=Math.max(i,l),g=Math.min(s,p),y=Math.min(u,f),x=Math.max(g-m,0)*Math.max(y-v,0);return x/(d+h-x)}function ja(t,e,n){var r=Math.exp(e*n*n);return n<=t?r:0}function Ga(t,e){return t.score-e.score||t.score===e.score&&e.boxIndex-t.boxIndex}function Ha(t,e,n){var r=new Array(t.rank).fill(0),a=t.shape.slice();return e.map((function(e){a[n]=e;var o=t.slice(r,a);return r[n]+=e,o}))}function qa(t,e){for(var n=new Array(t.rank),r=0;r<n.length;r++)n[r]=t.shape[r]*e[r];var a=pr(n,t.dtype);for(r=0;r<a.values.length;++r){for(var o=a.indexToLoc(r),i=new Array(t.rank),s=0;s<i.length;s++)i[s]=o[s]%t.shape[s];var u=t.locToIndex(i);a.values[r]=t.values[u]}return a.toTensor()}function Ka(t,e,n,r,a){for(var o=e[e.length-1],i=[t.length/o,o],s=i[0],u=i[1],c=U(n,s*r),l=U("int32",s*r),p=0;p<s;p++){for(var f=p*u,d=t.subarray(f,f+u),h=[],m=0;m<d.length;m++)h.push({value:d[m],index:m});h.sort((function(t,e){return e.value-t.value}));var v=p*r,g=c.subarray(v,v+r),y=l.subarray(v,v+r);for(m=0;m<r;m++)g[m]=h[m].value,y[m]=h[m].index}var x=e.slice();return x[x.length-1]=r,[An(c,x,n),An(l,x,"int32")]}function Xa(t,e){for(var n=[],r=0;r<e.length;r++)e[r]&&n.push(r);var a=pr(t,"int32"),o=pr([n.length,t.length],"int32");for(r=0;r<n.length;r++){var i=a.indexToLoc(n[r]),s=r*t.length;o.values.set(i,s)}return o.toTensor()}var Ya=function(t,e){this.outputShape=[],this.outputShape=t,this.variableNames=e.map((function(t,e){return"T"+e}));var n=[];this.variableNames.forEach((function(t){n.push("float v"+t+" = get"+t+"AtOutCoords();")}));var r=this.variableNames.map((function(t){return"v"+t})).join(" + ");this.userCode="\n void main() {\n "+n.join("\n ")+"\n\n float result = "+r+";\n setOutput(result);\n }\n "},$a=function(t,e){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.variableNames=e.map((function(t,e){return"T"+e}));var n=[];this.variableNames.forEach((function(t){n.push("vec4 v"+t+" = get"+t+"AtOutCoords();")}));var r=this.variableNames.map((function(t){return"v"+t})).join(" + ");this.userCode="\n void main() {\n "+n.join("\n ")+"\n\n vec4 result = "+r+";\n setOutput(result);\n }\n "},Qa=function(t,e,n){this.variableNames=["A"];var r=t.windowSize,a=t.batchSize,o=t.inSize,i=Math.ceil(o/r);n||this.variableNames.push("bestIndicesA"),this.outputShape=[a,i];var s="max"===e?">":"<",u=n?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * "+r+";\n\n int bestIndex = inOffset;\n float bestValue = getA(batch, bestIndex);\n\n for (int i = 0; i < "+r+"; i++) {\n int inIdx = "+u+";\n float candidate = getA(batch, inIdx);\n if (candidate "+s+" bestValue) {\n bestValue = candidate;\n bestIndex = inIdx;\n }\n }\n setOutput(float(bestIndex));\n }\n "};function Ja(t,e){return["x","y","z","w","u","v"].slice(0,e).map((function(e){return t+"."+e}))}function Za(t,e){return 1===e?[t]:Ja(t,e)}function to(){var t,e,n,r,a,o,i,s,u,c;return 2===f().getNumber("WEBGL_VERSION")?(t="#version 300 es",e="in",n="out",r="in",a="texture",o="outputColor",i="out vec4 outputColor;",s="\n bool isnan_custom(float val) {\n return (val > 0.0 || val < 0.0) ? false : val != 0.0;\n }\n\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan_custom(val.x),\n isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w));\n }\n\n #define isnan(value) isnan_custom(value)\n ",u="",c="\n #define round(value) newRound(value)\n int newRound(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 newRound(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n "):(t="",e="attribute",n="varying",r="varying",a="texture2D",o="gl_FragColor",i="",s="\n #define isnan(value) isnan_custom(value)\n bool isnan_custom(float val) {\n return (val > 0. || val < 1. || val == 0.) ? false : true;\n }\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));\n }\n ",u="\n uniform float INFINITY;\n\n bool isinf(float val) {\n return abs(val) == INFINITY;\n }\n bvec4 isinf(vec4 val) {\n return equal(abs(val), vec4(INFINITY));\n }\n ",c="\n int round(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 round(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n "),{version:t,attribute:e,varyingVs:n,varyingFs:r,texture2D:a,output:o,defineOutput:i,defineSpecialNaN:s,defineSpecialInf:u,defineRound:c}}function eo(t,e,n){void 0===n&&(n="index");var r=nt(e);return r.map((function(e,a){return"int "+t[a]+" = "+n+" / "+e+"; "+(a===r.length-1?"int "+t[a+1]+" = "+n+" - "+t[a]+" * "+e:"index -= "+t[a]+" * "+e)+";"})).join("")}function no(t){var e=nt(t).map((function(t){return t.toString()}));return"\n int getFlatIndex(ivec3 coords) {\n return coords.x * "+e[0]+" + coords.y * "+e[1]+" + coords.z;\n }\n"}var ro="\n const float FLOAT_MAX = 1.70141184e38;\n const float FLOAT_MIN = 1.17549435e-38;\n\n lowp vec4 encode_float(highp float v) {\n if (isnan(v)) {\n return vec4(255, 255, 255, 255);\n }\n\n highp float av = abs(v);\n\n if(av < FLOAT_MIN) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n } else if(v > FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\n } else if(v < -FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;\n }\n\n highp vec4 c = vec4(0,0,0,0);\n\n highp float e = floor(log2(av));\n highp float m = exp2(fract(log2(av))) - 1.0;\n\n c[2] = floor(128.0 * m);\n m -= c[2] / 128.0;\n c[1] = floor(32768.0 * m);\n m -= c[1] / 32768.0;\n c[0] = floor(8388608.0 * m);\n\n highp float ebias = e + 127.0;\n c[3] = floor(ebias / 2.0);\n ebias -= c[3] * 2.0;\n c[2] += floor(ebias) * 128.0;\n\n c[3] += 128.0 * step(0.0, -v);\n\n return c / 255.0;\n }\n";function ao(t,e,n,r){var a=[];t.forEach((function(t){var e=D(t.shapeInfo.logicalShape);t.shapeInfo.isUniform?a.push("uniform float "+t.name+(e>1?"["+e+"]":"")+";"):(a.push("uniform sampler2D "+t.name+";"),a.push("uniform int offset"+t.name+";"))}));var o,i,s=a.join("\n"),u=t.map((function(t){return function(t,e,n){void 0===n&&(n=!1);var r="";r+=n?function t(e){var n,r,a;switch(e.shapeInfo.logicalShape.length){case 0:return n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=to(),"\n vec4 "+r+"() {\n return "+a.texture2D+"("+n+", halfCR);\n }\n ";case 1:return function(t){var e=t.name,n="get"+e.charAt(0).toUpperCase()+e.slice(1),r=t.shapeInfo.texShape,a=[Math.ceil(r[0]/2),Math.ceil(r[1]/2)],o=to();return"\n vec4 "+n+"(int index) {\n vec2 uv = packedUVfrom1D(\n "+a[0]+", "+a[1]+", index);\n return "+o.texture2D+"("+e+", uv);\n }\n "}(e);case 2:return function(t){var e=t.shapeInfo.logicalShape,n=t.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=t.shapeInfo.texShape,o=a[0],i=a[1],s=to();if(null!=a&&_(e,a))return"\n vec4 "+r+"(int row, int col) {\n vec2 uv = (vec2(col, row) + halfCR) / vec2("+i+".0, "+o+".0);\n\n return "+s.texture2D+"("+n+", uv);\n }\n ";var u=[Math.ceil(a[0]/2),Math.ceil(a[1]/2)];return"\n vec4 "+r+"(int row, int col) {\n vec2 uv = packedUVfrom2D("+Math.ceil(e[1]/2)+", "+u[0]+", "+u[1]+", row, col);\n return "+s.texture2D+"("+n+", uv);\n }\n "}(e);case 3:return function(e){var n=e.shapeInfo.logicalShape,r=e.name,a="get"+r.charAt(0).toUpperCase()+r.slice(1),o=e.shapeInfo.texShape,i=[Math.ceil(o[0]/2),Math.ceil(o[1]/2)];if(1===n[0]){var s=fo(e,n.slice(1));return"\n "+t(s)+"\n vec4 "+a+"(int b, int row, int col) {\n return "+a+"("+ho(["b","row","col"],[1,2])+");\n }\n "}var u=i[0],c=i[1],l=Math.ceil(n[2]/2);return"\n vec4 "+a+"(int b, int row, int col) {\n vec2 uv = packedUVfrom3D(\n "+u+", "+c+", "+l*Math.ceil(n[1]/2)+", "+l+", b, row, col);\n return "+to().texture2D+"("+r+", uv);\n }\n "}(e);default:return function(t){for(var e=t.shapeInfo.logicalShape,n=e.length,r=t.name,a="get"+r.charAt(0).toUpperCase()+r.slice(1),o=t.shapeInfo.texShape,i=[Math.ceil(o[0]/2),Math.ceil(o[1]/2)],s=i[0],u=i[1],c=Math.ceil(e[n-1]/2),l=c*Math.ceil(e[n-2]/2),p="int b, int row, int col",f="b * "+l+" + (row / 2) * "+c+" + (col / 2)",d=2;d<n-1;d++)p="int b"+d+", "+p,f="b"+d+" * "+(l*=e[n-d-1])+" + "+f;return"\n vec4 "+a+"("+p+") {\n int index = "+f+";\n int texR = index / "+u+";\n int texC = index - texR * "+u+";\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+u+", "+s+");\n return "+to().texture2D+"("+r+", uv);\n }\n "}(e)}}(t):function t(e){var n=e.shapeInfo.logicalShape;switch(n.length){case 0:return function(t){var e=t.name,n="get"+e.charAt(0).toUpperCase()+e.slice(1);if(t.shapeInfo.isUniform)return"float "+n+"() {return "+e+";}";var r=t.shapeInfo.texShape,a=r[0],o=r[1];if(1===a&&1===o)return"\n float "+n+"() {\n return sampleTexture("+e+", halfCR);\n }\n ";var i=t.shapeInfo.texShape;return"\n float "+n+"() {\n vec2 uv = uvFromFlat("+i[0]+", "+i[1]+", "+co(e)+");\n return sampleTexture("+e+", uv);\n }\n "}(e);case 1:return function(t){var e=t.name,n="get"+e.charAt(0).toUpperCase()+e.slice(1);if(t.shapeInfo.isUniform)return"\n float "+n+"(int index) {\n "+lo(t)+"\n }\n ";var r=t.shapeInfo.texShape,a=r[0],o=r[1];if(1===o&&1===a)return"\n float "+n+"(int index) {\n return sampleTexture("+e+", halfCR);\n }\n ";var i=co(e);return 1===o?"\n float "+n+"(int index) {\n vec2 uv = vec2(0.5, (float(index + "+i+") + 0.5) / "+a+".0);\n return sampleTexture("+e+", uv);\n }\n ":1===a?"\n float "+n+"(int index) {\n vec2 uv = vec2((float(index + "+i+") + 0.5) / "+o+".0, 0.5);\n return sampleTexture("+e+", uv);\n }\n ":"\n float "+n+"(int index) {\n vec2 uv = uvFromFlat("+a+", "+o+", index + "+i+");\n return sampleTexture("+e+", uv);\n }\n "}(e);case 2:return function(e){var n=e.shapeInfo.logicalShape,r=e.name,a="get"+r.charAt(0).toUpperCase()+r.slice(1),o=e.shapeInfo.texShape;if(null!=o&&_(n,o)){var i=o[0];return"\n float "+a+"(int row, int col) {\n vec2 uv = (vec2(col, row) + halfCR) / vec2("+o[1]+".0, "+i+".0);\n return sampleTexture("+r+", uv);\n }\n "}var s=z(n),u=s.newShape,c=s.keptDims,l=u;if(l.length<n.length){var p=fo(e,l);return"\n "+t(p)+"\n float "+a+"(int row, int col) {\n return "+a+"("+ho(["row","col"],c)+");\n }\n "}if(e.shapeInfo.isUniform)return"\n float "+a+"(int row, int col) {\n int index = round(dot(vec2(row, col), vec2("+n[1]+", 1)));\n "+lo(e)+"\n }\n ";var f=o[0],d=o[1],h=co(r);return 1===d?"\n float "+a+"(int row, int col) {\n float index = dot(vec3(row, col, "+h+"), vec3("+n[1]+", 1, 1));\n vec2 uv = vec2(0.5, (index + 0.5) / "+f+".0);\n return sampleTexture("+r+", uv);\n }\n ":1===f?"\n float "+a+"(int row, int col) {\n float index = dot(vec3(row, col, "+h+"), vec3("+n[1]+", 1, 1));\n vec2 uv = vec2((index + 0.5) / "+d+".0, 0.5);\n return sampleTexture("+r+", uv);\n }\n ":"\n float "+a+"(int row, int col) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * "+n[1]+" + col + "+h+";\n vec2 uv = uvFromFlat("+f+", "+d+", index);\n return sampleTexture("+r+", uv);\n }\n"}(e);case 3:return function(e){var n=e.shapeInfo.logicalShape,r=e.name,a="get"+r.charAt(0).toUpperCase()+r.slice(1),o=n[1]*n[2],i=n[2],s=z(n),u=s.newShape,c=s.keptDims,l=u;if(l.length<n.length){var p=fo(e,l);return"\n "+t(p)+"\n float "+a+"(int row, int col, int depth) {\n return "+a+"("+ho(["row","col","depth"],c)+");\n }\n "}if(e.shapeInfo.isUniform)return"\n float "+a+"(int row, int col, int depth) {\n int index = round(dot(vec3(row, col, depth),\n vec3("+o+", "+i+", 1)));\n "+lo(e)+"\n }\n ";var f=e.shapeInfo.texShape,d=f[0],h=f[1],m=e.shapeInfo.flatOffset;return h===o&&null==m?"\n float "+a+"(int row, int col, int depth) {\n float texR = float(row);\n float texC = dot(vec2(col, depth), vec2("+i+", 1));\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+h+".0, "+d+".0);\n return sampleTexture("+r+", uv);\n }\n ":h===i&&null==m?"\n float "+a+"(int row, int col, int depth) {\n float texR = dot(vec2(row, col), vec2("+n[1]+", 1));\n float texC = float(depth);\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+h+".0, "+d+".0);\n return sampleTexture("+r+", uv);\n }\n ":"\n float "+a+"(int row, int col, int depth) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * "+o+" + col * "+i+" + depth + "+co(r)+";\n vec2 uv = uvFromFlat("+d+", "+h+", index);\n return sampleTexture("+r+", uv);\n }\n "}(e);case 4:return function(e){var n=e.shapeInfo.logicalShape,r=e.name,a="get"+r.charAt(0).toUpperCase()+r.slice(1),o=n[3],i=n[2]*o,s=n[1]*i,u=z(n),c=u.newShape,l=u.keptDims;if(c.length<n.length){var p=fo(e,c);return"\n "+t(p)+"\n float "+a+"(int row, int col, int depth, int depth2) {\n return "+a+"("+ho(["row","col","depth","depth2"],l)+");\n }\n "}if(e.shapeInfo.isUniform)return"\n float "+a+"(int row, int col, int depth, int depth2) {\n int index = round(dot(vec4(row, col, depth, depth2),\n vec4("+s+", "+i+", "+o+", 1)));\n "+lo(e)+"\n }\n ";var f=e.shapeInfo.flatOffset,d=e.shapeInfo.texShape,h=d[0],m=d[1];return m===s&&null==f?"\n float "+a+"(int row, int col, int depth, int depth2) {\n float texR = float(row);\n float texC =\n dot(vec3(col, depth, depth2),\n vec3("+i+", "+o+", 1));\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+m+".0, "+h+".0);\n return sampleTexture("+r+", uv);\n }\n ":m===o&&null==f?"\n float "+a+"(int row, int col, int depth, int depth2) {\n float texR = dot(vec3(row, col, depth),\n vec3("+n[1]*n[2]+", "+n[2]+", 1));\n float texC = float(depth2);\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+m+".0, "+h+".0);\n return sampleTexture("+r+", uv);\n }\n ":"\n float "+a+"(int row, int col, int depth, int depth2) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * "+s+" + col * "+i+" +\n depth * "+o+" + depth2;\n vec2 uv = uvFromFlat("+h+", "+m+", index + "+co(r)+");\n return sampleTexture("+r+", uv);\n }\n "}(e);case 5:return function(e){var n=e.shapeInfo.logicalShape,r=e.name,a="get"+r.charAt(0).toUpperCase()+r.slice(1),o=n[4],i=n[3]*o,s=n[2]*i,u=n[1]*s,c=z(n),l=c.newShape,p=c.keptDims;if(l.length<n.length){var f=fo(e,l);return"\n "+t(f)+"\n float "+a+"(int row, int col, int depth, int depth2, int depth3) {\n return "+a+"("+ho(["row","col","depth","depth2","depth3"],p)+");\n }\n "}if(e.shapeInfo.isUniform)return"\n float "+a+"(int row, int col, int depth, int depth2, int depth3) {\n float index = dot(\n vec4(row, col, depth, depth2),\n vec4("+u+", "+s+", "+i+", "+o+")) +\n depth3;\n "+lo(e)+"\n }\n ";var d=e.shapeInfo.flatOffset,h=e.shapeInfo.texShape,m=h[0],v=h[1];return v===u&&null==d?"\n float "+a+"(int row, int col, int depth, int depth2, int depth3) {\n int texR = row;\n float texC = dot(vec4(col, depth, depth2, depth3),\n vec4("+s+", "+i+", "+o+", 1));\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+v+".0, "+m+".0);\n return sampleTexture("+r+", uv);\n }\n ":v===o&&null==d?"\n float "+a+"(int row, int col, int depth, int depth2, int depth3) {\n float texR = dot(\n vec4(row, col, depth, depth2),\n vec4("+n[1]*n[2]*n[3]+",\n "+n[2]*n[3]+", "+n[3]+", 1));\n int texC = depth3;\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+v+".0, "+m+".0);\n return sampleTexture("+r+", uv);\n }\n ":"\n float "+a+"(int row, int col, int depth, int depth2, int depth3) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * "+u+" + col * "+s+" + depth * "+i+" +\n depth2 * "+o+" + depth3 + "+co(r)+";\n vec2 uv = uvFromFlat("+m+", "+v+", index);\n return sampleTexture("+r+", uv);\n }\n "}(e);case 6:return function(e){var n=e.shapeInfo.logicalShape,r=e.name,a="get"+r.charAt(0).toUpperCase()+r.slice(1),o=z(n),i=o.newShape,s=o.keptDims;if(i.length<n.length){var u=fo(e,i);return"\n "+t(u)+"\n float "+a+"(int row, int col, int depth,\n int depth2, int depth3, int depth4) {\n return "+a+"("+ho(["row","col","depth","depth2","depth3","depth4"],s)+");\n }\n "}var c=n[5],l=n[4]*c,p=n[3]*l,f=n[2]*p,d=n[1]*f;if(e.shapeInfo.isUniform)return"\n float "+a+"(int row, int col, int depth,\n int depth2, int depth3, int depth4) {\n int index = round(dot(\n vec4(row, col, depth, depth2),\n vec4("+d+", "+f+", "+p+", "+l+")) +\n dot(\n vec2(depth3, depth4),\n vec2("+c+", 1)));\n "+lo(e)+"\n }\n ";var h=e.shapeInfo.flatOffset,m=e.shapeInfo.texShape,v=m[0],g=m[1];return g===d&&null==h?"\n float "+a+"(int row, int col, int depth,\n int depth2, int depth3, int depth4) {\n int texR = row;\n float texC = dot(vec4(col, depth, depth2, depth3),\n vec4("+f+", "+p+", "+l+", "+c+")) +\n float(depth4);\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+g+".0, "+v+".0);\n return sampleTexture("+r+", uv);\n }\n ":g===c&&null==h?"\n float "+a+"(int row, int col, int depth,\n int depth2, int depth3, int depth4) {\n float texR = dot(vec4(row, col, depth, depth2),\n vec4("+n[1]*n[2]*n[3]*n[4]+",\n "+n[2]*n[3]*n[4]+",\n "+n[3]*n[4]+",\n "+n[4]+")) + float(depth3);\n int texC = depth4;\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+g+".0, "+v+".0);\n return sampleTexture("+r+", uv);\n }\n ":"\n float "+a+"(int row, int col, int depth,\n int depth2, int depth3, int depth4) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * "+d+" + col * "+f+" + depth * "+p+" +\n depth2 * "+l+" + depth3 * "+c+" + depth4 + "+co(r)+";\n vec2 uv = uvFromFlat("+v+", "+g+", index);\n return sampleTexture("+r+", uv);\n }\n "}(e);default:throw new Error(n.length+"-D input sampling is not yet supported")}}(t);var a=t.shapeInfo.logicalShape,o=e.logicalShape;return a.length<=o.length&&(r+=n?function(t,e){var n,r=t.name,a=r.charAt(0).toUpperCase()+r.slice(1),o="get"+a+"AtOutCoords",i=t.shapeInfo.logicalShape.length,s=e.logicalShape.length,u=ha(t.shapeInfo.logicalShape,e.logicalShape),c=po(s),l=s-i,p=["x","y","z","w","u","v"];n=0===i?"":s<2&&u.length>=1?"coords = 0;":u.map((function(t){return"coords."+p[t+l]+" = 0;"})).join("\n");var f;f=s<2&&i>0?"coords":t.shapeInfo.logicalShape.map((function(t,e){return"coords."+p[e+l]})).join(", ");var d="return outputValue;",h=1===D(t.shapeInfo.logicalShape),m=1===D(e.logicalShape);if(1!==i||h||m){if(h&&!m)d=1===s?"\n return vec4(outputValue.x, outputValue.x, 0., 0.);\n ":"\n return vec4(outputValue.x);\n ";else if(u.length){var v=i-2,g=i-1;u.indexOf(v)>-1&&u.indexOf(g)>-1?d="return vec4(outputValue.x);":u.indexOf(v)>-1?d="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":u.indexOf(g)>-1&&(d="return vec4(outputValue.xx, outputValue.zz);")}}else d="\n return vec4(outputValue.xy, outputValue.xy);\n ";return"\n vec4 "+o+"() {\n "+c+" coords = getOutputCoords();\n "+n+"\n vec4 outputValue = get"+a+"("+f+");\n "+d+"\n }\n "}(t,e):function(t,e){var n=t.name,r=n.charAt(0).toUpperCase()+n.slice(1),a="get"+r+"AtOutCoords",o=e.texShape,i=t.shapeInfo.texShape,s=t.shapeInfo.logicalShape.length,u=e.logicalShape.length;if(!t.shapeInfo.isUniform&&s===u&&null==t.shapeInfo.flatOffset&&_(i,o))return"\n float "+a+"() {\n return sampleTexture("+n+", resultUV);\n }\n ";var c=po(u),l=ha(t.shapeInfo.logicalShape,e.logicalShape),p=u-s,f=["x","y","z","w","u","v"];return"\n float "+a+"() {\n "+c+" coords = getOutputCoords();\n "+(0===s?"":u<2&&l.length>=1?"coords = 0;":l.map((function(t){return"coords."+f[t+p]+" = 0;"})).join("\n"))+"\n return get"+r+"("+(u<2&&s>0?"coords":t.shapeInfo.logicalShape.map((function(t,e){return"coords."+f[e+p]})).join(", "))+");\n }\n "}(t,e)),r}(t,e,r)})).join("\n"),c=e.texShape,l=to(),p=function(t){return"\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return "+t.texture2D+"(textureSampler, uv).r;\n }\n "}(l),f=function(t){return t.version+"\n precision highp float;\n precision highp int;\n precision highp sampler2D;\n "+t.varyingFs+" vec2 resultUV;\n "+t.defineOutput+"\n const vec2 halfCR = vec2(0.5, 0.5);\n\n struct ivec5\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n };\n\n struct ivec6\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n int v;\n };\n\n uniform float NAN;\n "+t.defineSpecialNaN+"\n "+t.defineSpecialInf+"\n "+t.defineRound+"\n\n int imod(int x, int y) {\n return x - y * (x / y);\n }\n\n int idiv(int a, int b, float sign) {\n int res = a / b;\n int mod = imod(a, b);\n if (sign < 0. && mod != 0) {\n res -= 1;\n }\n return res;\n }\n\n //Based on the work of Dave Hoskins\n //https://www.shadertoy.com/view/4djSRW\n #define HASHSCALE1 443.8975\n float random(float seed){\n vec2 p = resultUV * seed;\n vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1);\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.x + p3.y) * p3.z);\n }\n\n "+oo+"\n "+io+"\n "+so+"\n "}(l);return e.isPacked?(o=function(t,e){switch(t.length){case 0:return"\n int getOutputCoords() {\n return 0;\n }\n ";case 1:return function(t,e){var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];return 1===n[0]?"\n int getOutputCoords() {\n return 2 * int(resultUV.x * "+n[1]+".0);\n }\n ":1===n[1]?"\n int getOutputCoords() {\n return 2 * int(resultUV.y * "+n[0]+".0);\n }\n ":"\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+n[0]+", "+n[1]+"));\n return 2 * (resTexRC.x * "+n[1]+" + resTexRC.y);\n }\n "}(0,e);case 2:return function(t,e){var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];if(_(t,e))return"\n ivec2 getOutputCoords() {\n return 2 * ivec2(resultUV.yx * vec2("+n[0]+", "+n[1]+"));\n }\n ";var r=Math.ceil(t[1]/2);return"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+n[0]+", "+n[1]+"));\n\n int index = resTexRC.x * "+n[1]+" + resTexRC.y;\n int r = 2 * (index / "+r+");\n int c = imod(index, "+r+") * 2;\n\n return ivec2(r, c);\n }\n "}(t,e);case 3:return n=t,r=e,a=[Math.ceil(r[0]/2),Math.ceil(r[1]/2)],i=(o=Math.ceil(n[2]/2))*Math.ceil(n[1]/2),"\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+a[0]+", "+a[1]+"));\n int index = resTexRC.x * "+a[1]+" + resTexRC.y;\n\n int b = index / "+i+";\n index -= b * "+i+";\n\n int r = 2 * (index / "+o+");\n int c = imod(index, "+o+") * 2;\n\n return ivec3(b, r, c);\n }\n ";default:return function(t,e){for(var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],r=Math.ceil(t[t.length-1]/2),a=r*Math.ceil(t[t.length-2]/2),o=a,i="",s="b, r, c",u=2;u<t.length-1;u++)i="\n int b"+u+" = index / "+(o*=t[t.length-u-1])+";\n index -= b"+u+" * "+o+";\n "+i,s="b"+u+", "+s;return"\n ivec"+t.length+" getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+n[0]+", "+n[1]+"));\n int index = resTexRC.x * "+n[1]+" + resTexRC.y;\n\n "+i+"\n\n int b = index / "+a+";\n index -= b * "+a+";\n\n int r = 2 * (index / "+r+");\n int c = imod(index, "+r+") * 2;\n\n return ivec"+t.length+"("+s+");\n }\n "}(t,e)}var n,r,a,o,i}(e.logicalShape,c),i=function(t){return"\n void setOutput(vec4 val) {\n "+t.output+" = val;\n }\n "}(l)):(o=function(t,e){switch(t.length){case 0:return"\n int getOutputCoords() {\n return 0;\n }\n ";case 1:return function(t,e){return 1===e[0]?"\n int getOutputCoords() {\n return int(resultUV.x * "+e[1]+".0);\n }\n ":1===e[1]?"\n int getOutputCoords() {\n return int(resultUV.y * "+e[0]+".0);\n }\n ":"\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+e[0]+", "+e[1]+"));\n return resTexRC.x * "+e[1]+" + resTexRC.y;\n }\n "}(0,e);case 2:return function(t,e){return _(t,e)?"\n ivec2 getOutputCoords() {\n return ivec2(resultUV.yx * vec2("+e[0]+", "+e[1]+"));\n }\n ":1===t[1]?"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+e[0]+", "+e[1]+"));\n int index = resTexRC.x * "+e[1]+" + resTexRC.y;\n return ivec2(index, 0);\n }\n ":1===t[0]?"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+e[0]+", "+e[1]+"));\n int index = resTexRC.x * "+e[1]+" + resTexRC.y;\n return ivec2(0, index);\n }\n ":"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+e[0]+", "+e[1]+"));\n int index = resTexRC.x * "+e[1]+" + resTexRC.y;\n int r = index / "+t[1]+";\n int c = index - r * "+t[1]+";\n return ivec2(r, c);\n }\n "}(t,e);case 3:return n=e,r=eo(["r","c","d"],t),"\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+n[0]+", "+n[1]+"));\n int index = resTexRC.x * "+n[1]+" + resTexRC.y;\n "+r+"\n return ivec3(r, c, d);\n }\n ";case 4:return function(t,e){var n=eo(["r","c","d","d2"],t);return"\n ivec4 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+e[0]+", "+e[1]+"));\n int index = resTexRC.x * "+e[1]+" + resTexRC.y;\n "+n+"\n return ivec4(r, c, d, d2);\n }\n "}(t,e);case 5:return function(t,e){var n=eo(["r","c","d","d2","d3"],t);return"\n ivec5 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx * vec2("+e[0]+",\n "+e[1]+"));\n\n int index = resTexRC.x * "+e[1]+" + resTexRC.y;\n\n "+n+"\n\n ivec5 outShape = ivec5(r, c, d, d2, d3);\n return outShape;\n }\n "}(t,e);case 6:return function(t,e){var n=eo(["r","c","d","d2","d3","d4"],t);return"\n ivec6 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+e[0]+", "+e[1]+"));\n int index = resTexRC.x * "+e[1]+" + resTexRC.y;\n\n "+n+"\n\n ivec6 result = ivec6(r, c, d, d2, d3, d4);\n return result;\n }\n "}(t,e);default:throw new Error(t.length+"-D output sampling is not yet supported")}var n,r}(e.logicalShape,c),i=function(t){return"\n void setOutput(float val) {\n "+t.output+" = vec4(val, 0, 0, 0);\n }\n "}(l)),r&&(f+=uo),[f,p,i,s,o,u,n].join("\n")}var oo="\nvec2 uvFromFlat(int texNumR, int texNumC, int index) {\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\nvec2 packedUVfrom1D(int texNumR, int texNumC, int index) {\n int texelIndex = index / 2;\n int texR = texelIndex / texNumC;\n int texC = texelIndex - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n",io="\nvec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR,\n int texNumC, int row, int col) {\n int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2);\n int texR = texelIndex / texNumC;\n int texC = texelIndex - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n",so="\nvec2 packedUVfrom3D(int texNumR, int texNumC,\n int texelsInBatch, int texelsInLogicalRow, int b,\n int row, int col) {\n int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2);\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n",uo="\n float getChannel(vec4 frag, vec2 innerDims) {\n vec2 modCoord = mod(innerDims, 2.);\n return modCoord.x == 0. ?\n (modCoord.y == 0. ? frag.r : frag.g) :\n (modCoord.y == 0. ? frag.b : frag.a);\n }\n float getChannel(vec4 frag, int dim) {\n float modCoord = mod(float(dim), 2.);\n return modCoord == 0. ? frag.r : frag.g;\n }\n";function co(t){return"offset"+t}function lo(t){var e=t.name,n=D(t.shapeInfo.logicalShape);return n<2?"return "+e+";":"\n for (int i = 0; i < "+n+"; i++) {\n if (i == index) {\n return "+e+"[i];\n }\n }\n "}function po(t){if(t<=1)return"int";if(2===t)return"ivec2";if(3===t)return"ivec3";if(4===t)return"ivec4";if(5===t)return"ivec5";if(6===t)return"ivec6";throw Error("GPU for rank "+t+" is not yet supported")}function fo(t,e){var n=JSON.parse(JSON.stringify(t));return n.shapeInfo.logicalShape=e,n}function ho(t,e){return e.map((function(e){return t[e]})).join(", ")}var mo=function(t,e,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,T(t.length>2,(function(){return"Packed arg"+(n.charAt(0).toUpperCase()+n.slice(1))+" supports only inputs with rank above 2."}));var a=t[t.length-1],o=Math.ceil(a/e);this.outputShape=t.slice(0,-1),o>1&&this.outputShape.push(o),r||this.variableNames.push("bestIndicesA");var i,s,u=this.outputShape,c=u.length,l=po(c),p=Za("coords",c);if(1===o){var f=po(s=c+1);i="\n "+f+" sourceLocR = "+f+"("+p.join()+", 0);\n ++"+p[c-1]+";\n "+f+" sourceLocG = "+f+"("+p.join()+", 0);\n ++"+p[c-2]+";\n "+f+" sourceLocA = "+f+"("+p.join()+", 0);\n --"+p[c-1]+";\n "+f+" sourceLocB = "+f+"("+p.join()+", 0);\n --"+p[c-2]+";"}else s=c,i="\n "+l+" sourceLocR = coords;\n ++"+p[c-1]+";\n "+l+" sourceLocG = coords;\n ++"+p[c-2]+";\n "+l+" sourceLocA = coords;\n --"+p[c-1]+";\n "+l+" sourceLocB = coords;\n --"+p[c-2]+";";var d=["x","y","z","w","u","v"].slice(0,s),h="."+d[s-1],m=d.map((function(t){return"int "+t})),v=Za("sourceLocR",s-1).concat("inIdx.r"),g=Za("sourceLocG",s-1).concat("inIdx.g"),y=Za("sourceLocB",s-1).concat("inIdx.b"),x=Za("sourceLocA",s-1).concat("inIdx.a"),b="max"===n?"greaterThan":"lessThan",w=r?"":"\n inIdx = round(vec4(getBestIndicesAChannel("+v.join()+"),\n getBestIndicesAChannel("+g.join()+"),\n getBestIndicesAChannel("+y.join()+"),\n getBestIndicesAChannel("+x.join()+")));",C="vec4(\n getAChannel("+v.join()+"),\n hasNextCol ? getAChannel("+g.join()+") : 0.,\n hasNextRow ? getAChannel("+y.join()+") : 0.,\n hasNextRow && hasNextCol ? getAChannel("+x.join()+") : 0.)",E=r?"":"\n float getBestIndicesAChannel("+m.join()+") {\n return getChannel(getBestIndicesA("+d.join()+"),\n vec2("+d.slice(-2).join()+"));\n }";this.userCode="\n float getAChannel("+m.join()+") {\n return getChannel(getA("+d.join()+"),\n vec2("+d.slice(-2).join()+"));\n }\n "+E+"\n void main() {\n "+l+" coords = getOutputCoords();\n bool hasNextCol = "+p[c-1]+" < "+(u[c-1]-1)+";\n bool hasNextRow = "+p[c-2]+" < "+(u[c-2]-1)+";\n "+i+"\n ivec4 srcIdx = ivec4(sourceLocR"+h+", sourceLocG"+h+",\n sourceLocB"+h+", sourceLocA"+h+") * "+e+";\n ivec4 inIdx = srcIdx;\n vec4 bestIndex = vec4(inIdx);\n vec4 bestValue = "+C+";\n\n for (int i = 0; i < "+e+"; i++) {\n inIdx = srcIdx;\n "+w+"\n vec4 candidate = "+C+";\n bvec4 nan = isnan(candidate);\n bvec4 replace = bvec4(\n vec4("+b+"(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));\n\n bestValue = vec4(replace.x ? candidate.x : bestValue.x,\n replace.y ? candidate.y : bestValue.y,\n replace.z ? candidate.z : bestValue.z,\n replace.w ? candidate.w : bestValue.w);\n bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));\n srcIdx++;\n }\n setOutput(bestIndex);\n }\n "},vo=function(t){this.variableNames=["dy"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,a=t.strideWidth,o=t.dilationHeight,i=t.dilationWidth,s=t.effectiveFilterHeight,u=t.effectiveFilterWidth,c=s-1-t.padInfo.top,l=u-1-t.padInfo.left,p=1/(e*n);this.userCode="\n const ivec2 pads = ivec2("+c+", "+l+");\n const float avgMultiplier = float("+p+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+s+";\n wR += "+o+") {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+u+";\n wC+= "+i+") {\n float dyC = float(dyCCorner + wC) / "+a+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n setOutput(dotProd);\n }\n "},go=function(t){this.variableNames=["dy"],this.outputShape=t.inShape;var e=t.filterDepth,n=t.filterHeight,r=t.filterWidth,a=t.strideDepth,o=t.strideHeight,i=t.strideWidth,s=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.effectiveFilterDepth,p=t.effectiveFilterHeight,f=t.effectiveFilterWidth,d=l-1-t.padInfo.front,h=p-1-t.padInfo.top,m=f-1-t.padInfo.left,v=1/(e*n*r);this.userCode="\n const ivec3 pads = ivec3("+d+", "+h+", "+m+");\n const float avgMultiplier = float("+v+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < "+l+";\n wD += "+s+") {\n float dyD = float(dyDCorner + wD) / "+a+".0;\n\n if (dyD < 0.0 || dyD >= "+t.outDepth+".0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < "+p+";\n wR += "+u+") {\n float dyR = float(dyRCorner + wR) / "+o+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+f+";\n wC += "+c+") {\n float dyC = float(dyCCorner + wC) / "+i+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n }\n setOutput(dotProd);\n }\n "},yo=function(t,e,n,r,a,o){this.outputShape=[],this.variableNames=["x","mean","variance"],va(t,e),va(t,n);var i="0.0";null!=r&&(va(t,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");var s="1.0";null!=a&&(va(t,a),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=t,this.userCode="\n void main() {\n float x = getXAtOutCoords();\n float mean = getMeanAtOutCoords();\n float variance = getVarianceAtOutCoords();\n float offset = "+i+";\n float scale = "+s+";\n float inv = scale * inversesqrt(variance + float("+o+"));\n setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\n }\n "},xo=function(t,e,n,r,a,o){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],va(t,e),va(t,n);var i="vec4(0.0)";null!=r&&(va(t,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");var s="vec4(1.0)";null!=a&&(va(t,a),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=t,this.userCode="\n void main() {\n vec4 offset = "+i+";\n vec4 scale = "+s+";\n\n vec4 x = getXAtOutCoords();\n vec4 mean = getMeanAtOutCoords();\n vec4 variance = getVarianceAtOutCoords();\n\n vec4 inv = scale * inversesqrt(variance + vec4("+o+"));\n\n setOutput((x - mean) * inv + offset);\n }\n "},bo=function(t,e,n){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=va(e,n),this.userCode="\n float binaryOpComplex(\n float areal, float aimag, float breal, float bimag) {\n "+t+"\n }\n\n void main() {\n float areal = getARealAtOutCoords();\n float aimag = getAImagAtOutCoords();\n float breal = getBRealAtOutCoords();\n float bimag = getBImagAtOutCoords();\n setOutput(binaryOpComplex(areal, aimag, breal, bimag));\n }\n "},wo="return a + b;",Co="return a - b;",Eo="return a * b;",So="return (a < 0.) ? b * a : a;",No=function(t,e,n){this.variableNames=["A","B"],this.outputShape=va(e,n),this.userCode="\n float binaryOperation(float a, float b) {\n "+t+"\n }\n\n void main() {\n float a = getAAtOutCoords();\n float b = getBAtOutCoords();\n setOutput(binaryOperation(a, b));\n }\n "},Io="\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n",Ro=function(t,e,n,r){void 0===r&&(r=!1),this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=va(e,n);var a=this.outputShape.length,o="";if(r)if(0===a||1===D(this.outputShape))o="\n result.y = 0.;\n result.z = 0.;\n result.w = 0.;\n ";else if(o="\n "+po(a)+" coords = getOutputCoords();\n ",1===a)o+="\n result.y = (coords + 1) >= "+this.outputShape[0]+" ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n ";else{var i=Za("coords",a);o+="\n bool nextRowOutOfBounds =\n ("+i[a-2]+" + 1) >= "+this.outputShape[a-2]+";\n bool nextColOutOfBounds =\n ("+i[a-1]+" + 1) >= "+this.outputShape[a-1]+";\n result.y = nextColOutOfBounds ? 0. : result.y;\n result.z = nextRowOutOfBounds ? 0. : result.z;\n result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n "}this.userCode="\n vec4 binaryOperation(vec4 a, vec4 b) {\n "+t+"\n }\n\n void main() {\n vec4 a = getAAtOutCoords();\n vec4 b = getBAtOutCoords();\n\n vec4 result = binaryOperation(a, b);\n "+o+"\n\n setOutput(result);\n }\n "},To=function(){function t(t){this.variableNames=["A"],this.outputShape=t,this.userCode="\n uniform float minVal;\n uniform float maxVal;\n\n void main() {\n float value = getAAtOutCoords();\n if (isnan(value)) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, minVal, maxVal));\n }\n "}return t.prototype.getCustomSetupFunc=function(t,e){var n=this;return function(r,a){null==n.minLoc&&(n.minLoc=r.getUniformLocationNoThrow(a,"minVal"),n.maxLoc=r.getUniformLocationNoThrow(a,"maxVal")),r.gl.uniform1f(n.minLoc,t),r.gl.uniform1f(n.maxLoc,e)}},t}(),ko=function(){function t(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.userCode="\n uniform float minVal;\n uniform float maxVal;\n\n void main() {\n vec4 value = getAAtOutCoords();\n\n if (any(isnan(value))) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, vec4(minVal), vec4(maxVal)));\n }\n "}return t.prototype.getCustomSetupFunc=function(t,e){var n=this;return function(r,a){null==n.minLoc&&(n.minLoc=r.getUniformLocationNoThrow(a,"minVal"),n.maxLoc=r.getUniformLocationNoThrow(a,"maxVal")),r.gl.uniform1f(n.minLoc,t),r.gl.uniform1f(n.maxLoc,e)}},t}(),Ao=function(t){this.variableNames=["real","imag"],this.outputShape=t,this.userCode="\n void main() {\n float re = abs(getRealAtOutCoords());\n float im = abs(getImagAtOutCoords());\n float mx = max(re, im);\n\n // sadly the length function in glsl is not underflow-safe\n // (at least not on Intel GPUs). So the safe solution is\n // to ensure underflow-safety in all cases.\n setOutput(\n mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))\n );\n }\n "},Oo=function(t){this.outputShape=[],this.outputShape=Nn(t,1),this.variableNames=t.map((function(t,e){return"T"+e}));var e=new Array(t.length-1);e[0]=t[0][1];for(var n=1;n<e.length;n++)e[n]=e[n-1]+t[n][1];var r=["if (yC < "+e[0]+") setOutput(getT0(yR, yC));"];for(n=1;n<e.length;n++){var a=e[n-1];r.push("else if (yC < "+e[n]+") setOutput(getT"+n+"(yR, yC-"+a+"));")}var o=e.length,i=e[e.length-1];r.push("else setOutput(getT"+o+"(yR, yC-"+i+"));"),this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int yR = coords.x;\n int yC = coords.y;\n\n "+r.join("\n ")+"\n }\n "},Do=function(t,e){this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[],this.outputShape=Nn(t,e);var n=this.outputShape,r=n.length,a=po(r),o=Za("coords",r),i=["x","y","z","w","u","v"].slice(0,r);this.variableNames=t.map((function(t,e){return"T"+e}));var s=new Array(t.length-1);s[0]=t[0][e];for(var u=1;u<s.length;u++)s[u]=s[u-1]+t[u][e];var c=i[e],l=i.slice(-2),p=i.join(),f="if ("+c+" < "+s[0]+") {\n return getChannel(\n getT0("+p+"), vec2("+l.join()+"));\n }";for(u=1;u<s.length;u++){var d=s[u-1];f+="\n if ("+c+" < "+s[u]+" && "+c+" >= "+s[u-1]+") {\n return getChannel(\n getT"+u+"("+_o(i,c,d)+"),\n vec2("+_o(l,c,d)+"));\n }"}var h=s.length,m=s[s.length-1];f+="\n return getChannel(\n getT"+h+"("+_o(i,c,m)+"),\n vec2("+_o(l,c,m)+"));",this.userCode="\n float getValue("+i.map((function(t){return"int "+t}))+") {\n "+f+"\n }\n\n void main() {\n "+a+" coords = getOutputCoords();\n vec4 result = vec4(getValue("+o+"), 0., 0., 0.);\n\n "+o[r-1]+" = "+o[r-1]+" + 1;\n if ("+o[r-1]+" < "+n[r-1]+") {\n result.g = getValue("+o+");\n }\n\n "+o[r-2]+" = "+o[r-2]+" + 1;\n if ("+o[r-2]+" < "+n[r-2]+") {\n result.a = getValue("+o+");\n }\n\n "+o[r-1]+" = "+o[r-1]+" - 1;\n if ("+o[r-2]+" < "+n[r-2]+" &&\n "+o[r-1]+" < "+n[r-1]+") {\n result.b = getValue("+o+");\n }\n setOutput(result);\n }\n "};function _o(t,e,n){var r=t.indexOf(e);return t.map((function(t,e){return e===r?t+" - "+n:t})).join()}var Fo=function(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;var e=t.strideHeight,n=t.strideWidth,r=t.padInfo.top,a=t.padInfo.left,o="channelsLast"===t.dataFormat;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int d2 = coords.w;\n\n // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int b = 0; b < "+t.batchSize+"; b++) {\n for (int yR = 0; yR < "+t.outHeight+"; yR++) {\n int xR = wR + yR * "+e+" - "+r+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+t.outWidth+"; yC++) {\n int xC = wC + yC * "+n+" - "+a+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n if ("+o+") {\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n } else {\n float dyValue = getDy(b, d2, yR, yC);\n float xValue = getX(b, d1, xR, xC);\n dotProd += (xValue * dyValue);\n }\n\n }\n }\n }\n setOutput(dotProd);\n }\n "},Mo=function(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,a=t.strideWidth,o="channelsLast"===t.dataFormat,i=e-1-t.padInfo.top,s=n-1-t.padInfo.left,u=o?1:2,c=o?2:3,l=o?3:1;this.userCode="\n const ivec2 pads = ivec2("+i+", "+s+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords["+l+"];\n\n ivec2 dyCorner = ivec2(coords["+u+"], coords["+c+"]) - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+e+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+e+" - 1 - wR;\n\n for (int wC = 0; wC < "+n+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+a+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+n+" - 1 - wC;\n\n for (int d2 = 0; d2 < "+t.outChannels+"; d2++) {\n\n if ("+o+") {\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n } else {\n float xValue = getDy(batch, d2, idyR, idyC);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n\n }\n }\n }\n setOutput(dotProd);\n }\n "},Bo=function(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;var e=t.strideDepth,n=t.strideHeight,r=t.strideWidth,a=t.padInfo.front,o=t.padInfo.top,i=t.padInfo.left;this.userCode="\n void main() {\n ivec5 coords = getOutputCoords();\n int wF = coords.x;\n int wR = coords.y;\n int wC = coords.z;\n int d1 = coords.w;\n int d2 = coords.u;\n\n float dotProd = 0.0;\n\n for (int b = 0; b < "+t.batchSize+"; b++) {\n for (int yF = 0; yF < "+t.outDepth+"; yF++) {\n int xF = wF + yF * "+e+" - "+a+";\n\n if (xF < 0 || xF >= "+t.inDepth+") {\n continue;\n }\n\n for (int yR = 0; yR < "+t.outHeight+"; yR++) {\n int xR = wR + yR * "+n+" - "+o+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+t.outWidth+"; yC++) {\n int xC = wC + yC * "+r+" - "+i+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float dyValue = getDy(b, yF, yR, yC, d2);\n float xValue = getX(b, xF, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n "},Po=function(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterDepth,n=t.filterHeight,r=t.filterWidth,a=t.strideDepth,o=t.strideHeight,i=t.strideWidth,s=e-1-t.padInfo.front,u=n-1-t.padInfo.top,c=r-1-t.padInfo.left;this.userCode="\n const ivec3 pads = ivec3("+s+", "+u+", "+c+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d1 = coords.u;\n\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyFCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n float dotProd = 0.0;\n for (int wF = 0; wF < "+e+"; wF++) {\n float dyF = float(dyFCorner + wF) / "+a+".0;\n\n if (dyF < 0.0 || dyF >= "+t.outDepth+".0 || fract(dyF) > 0.0) {\n continue;\n }\n int idyF = int(dyF);\n\n int wFPerm = "+e+" - 1 - wF;\n\n for (int wR = 0; wR < "+n+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+o+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+n+" - 1 - wR;\n\n for (int wC = 0; wC < "+r+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+i+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+r+" - 1 - wC;\n\n for (int d2 = 0; d2 < "+t.outChannels+"; d2++) {\n float xValue = getDy(batch, idyF, idyR, idyC, d2);\n float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n }\n }\n }\n setOutput(dotProd);\n }\n "},Lo=function(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;var e=t.strideHeight,n=t.strideWidth,r=t.padInfo.top,a=t.padInfo.left,o=t.outChannels/t.inChannels;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int dm = coords.w;\n int d2 = d1 * "+o+" + dm;\n\n float dotProd = 0.0;\n\n // TO DO: Vec4 over the batch size\n for (int b = 0; b < "+t.batchSize+"; b++) {\n for (int yR = 0; yR < "+t.outHeight+"; yR++) {\n int xR = wR + yR * "+e+" - "+r+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+t.outWidth+"; yC++) {\n int xC = wC + yC * "+n+" - "+a+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n setOutput(dotProd);\n }\n "},Vo=function(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,a=t.strideWidth,o=e-1-t.padInfo.top,i=n-1-t.padInfo.left,s=t.outChannels/t.inChannels;this.userCode="\n const ivec2 pads = ivec2("+o+", "+i+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[3];\n ivec2 dyCorner = coords.yz - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n float dotProd = 0.0;\n\n for (int wR = 0; wR < "+e+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+e+" - 1 - wR;\n\n for (int wC = 0; wC < "+n+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+a+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+n+" - 1 - wC;\n\n // TO DO: Vec4 over the channelMul\n for (int dm = 0; dm < "+s+"; dm++) {\n int d2 = d1 * "+s+" + dm;\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, dm);\n dotProd += xValue * wValue;\n }\n }\n }\n setOutput(dotProd);\n }\n "},Wo=function(t,e,n,r){void 0===e&&(e=!1),void 0===n&&(n=null),void 0===r&&(r=!1),this.variableNames=["x","W"],this.outputShape=t.outShape;var a=t.padInfo.top,o=t.padInfo.left,i=t.strideHeight,s=t.strideWidth,u=t.dilationHeight,c=t.dilationWidth,l=t.filterHeight,p=t.filterWidth,f=4*Math.floor(t.inChannels/4),d=t.inChannels%4,h="channelsLast"===t.dataFormat,m=h?1:2,v=h?2:3,g=h?3:1,y="",x="";n&&(y=r?"float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n "+n+"\n }":"\n float activation(float x) {\n "+n+"\n }\n ",x="result = activation(result);");var b=e?"result += getBiasAtOutCoords();":"";e&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+y+"\n\n const ivec2 strides = ivec2("+i+", "+s+");\n const ivec2 pads = ivec2("+a+", "+o+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d2 = coords["+g+"];\n\n ivec2 xRCCorner =\n ivec2(coords["+m+"], coords["+v+"]) * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+l+"; wR++) {\n int xR = xRCorner + wR * "+u+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+p+"; wC++) {\n int xC = xCCorner + wC * "+c+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n for (int d1 = 0; d1 < "+f+"; d1 += 4) {\n vec4 wValues = vec4(\n getW(wR, wC, d1, d2),\n getW(wR, wC, d1 + 1, d2),\n getW(wR, wC, d1 + 2, d2),\n getW(wR, wC, d1 + 3, d2)\n );\n\n if ("+h+") {\n vec4 xValues = vec4(\n getX(batch, xR, xC, d1),\n getX(batch, xR, xC, d1 + 1),\n getX(batch, xR, xC, d1 + 2),\n getX(batch, xR, xC, d1 + 3)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec4 xValues = vec4(\n getX(batch, d1, xR, xC),\n getX(batch, d1 + 1, xR, xC),\n getX(batch, d1 + 2, xR, xC),\n getX(batch, d1 + 3, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n\n if ("+(1===d)+") {\n\n if ("+h+") {\n dotProd +=\n getX(batch, xR, xC, "+f+") *\n getW(wR, wC, "+f+", d2);\n } else {\n dotProd +=\n getX(batch, "+f+", xR, xC) *\n getW(wR, wC, "+f+", d2);\n }\n\n } else if ("+(2===d)+") {\n vec2 wValues = vec2(\n getW(wR, wC, "+f+", d2),\n getW(wR, wC, "+f+" + 1, d2)\n );\n\n if ("+h+") {\n vec2 xValues = vec2(\n getX(batch, xR, xC, "+f+"),\n getX(batch, xR, xC, "+f+" + 1)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec2 xValues = vec2(\n getX(batch, "+f+", xR, xC),\n getX(batch, "+f+" + 1, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n } else if ("+(3===d)+") {\n vec3 wValues = vec3(\n getW(wR, wC, "+f+", d2),\n getW(wR, wC, "+f+" + 1, d2),\n getW(wR, wC, "+f+" + 2, d2)\n );\n\n if ("+h+") {\n vec3 xValues = vec3(\n getX(batch, xR, xC, "+f+"),\n getX(batch, xR, xC, "+f+" + 1),\n getX(batch, xR, xC, "+f+" + 2)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec3 xValues = vec3(\n getX(batch, "+f+", xR, xC),\n getX(batch, "+f+" + 1, xR, xC),\n getX(batch, "+f+" + 2, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n }\n }\n }\n\n float result = dotProd;\n "+b+"\n "+x+"\n setOutput(result);\n }\n "},zo=function(t){this.variableNames=["x","W"],this.outputShape=t.outShape;var e=t.padInfo.front,n=t.padInfo.top,r=t.padInfo.left,a=t.strideDepth,o=t.strideHeight,i=t.strideWidth,s=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.filterDepth,p=t.filterHeight,f=t.filterWidth,d=4*Math.floor(t.inChannels/4),h=t.inChannels%4;this.userCode="\n const ivec3 strides = ivec3("+a+", "+o+", "+i+");\n const ivec3 pads = ivec3("+e+", "+n+", "+r+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d2 = coords.u;\n\n ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xFCorner = xFRCCorner.x;\n int xRCorner = xFRCCorner.y;\n int xCCorner = xFRCCorner.z;\n\n // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get\n // y(yF, yR, yC, d2). ? = to be determined. : = across all\n // values in that axis.\n float dotProd = 0.0;\n for (int wF = 0; wF < "+l+"; wF++) {\n int xF = xFCorner + wF * "+s+";\n\n if (xF < 0 || xF >= "+t.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+p+"; wR++) {\n int xR = xRCorner + wR * "+u+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+f+"; wC++) {\n int xC = xCCorner + wC * "+c+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n for (int d1 = 0; d1 < "+d+"; d1 += 4) {\n vec4 xValues = vec4(\n getX(batch, xF, xR, xC, d1),\n getX(batch, xF, xR, xC, d1 + 1),\n getX(batch, xF, xR, xC, d1 + 2),\n getX(batch, xF, xR, xC, d1 + 3)\n );\n vec4 wValues = vec4(\n getW(wF, wR, wC, d1, d2),\n getW(wF, wR, wC, d1 + 1, d2),\n getW(wF, wR, wC, d1 + 2, d2),\n getW(wF, wR, wC, d1 + 3, d2)\n );\n\n dotProd += dot(xValues, wValues);\n }\n\n if ("+(1===h)+") {\n dotProd +=\n getX(batch, xF, xR, xC, "+d+") *\n getW(wF, wR, wC, "+d+", d2);\n } else if ("+(2===h)+") {\n vec2 xValues = vec2(\n getX(batch, xF, xR, xC, "+d+"),\n getX(batch, xF, xR, xC, "+d+" + 1)\n );\n vec2 wValues = vec2(\n getW(wF, wR, wC, "+d+", d2),\n getW(wF, wR, wC, "+d+" + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if ("+(3===h)+") {\n vec3 xValues = vec3(\n getX(batch, xF, xR, xC, "+d+"),\n getX(batch, xF, xR, xC, "+d+" + 1),\n getX(batch, xF, xR, xC, "+d+" + 2)\n );\n vec3 wValues = vec3(\n getW(wF, wR, wC, "+d+", d2),\n getW(wF, wR, wC, "+d+" + 1, d2),\n getW(wF, wR, wC, "+d+" + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n "},Uo=function(t,e,n,r){void 0===e&&(e=!1),void 0===n&&(n=null),void 0===r&&(r=!1),this.variableNames=["x","W"],this.outputShape=t.outShape;var a=t.inHeight,o=t.inWidth,i=t.padInfo.top,s=t.padInfo.left,u=t.strideHeight,c=t.strideWidth,l=t.dilationHeight,p=t.dilationWidth,f=t.filterHeight,d=t.filterWidth,h=t.outChannels/t.inChannels,m="",v="";n&&(m=r?"float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n "+n+"\n }":"\n float activation(float x) {\n "+n+"\n }\n ",v="result = activation(result);");var g=e?"result += getBiasAtOutCoords();":"";e&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+m+"\n\n const ivec2 strides = ivec2("+u+", "+c+");\n const ivec2 pads = ivec2("+i+", "+s+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n ivec2 xRCCorner = coords.yz * strides - pads;\n int d2 = coords.w;\n int d1 = d2 / "+h+";\n int q = d2 - d1 * "+h+";\n\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations.\n for (int wR = 0; wR < "+f+"; wR++) {\n int xR = xRCorner + wR * "+l+";\n\n if (xR < 0 || xR >= "+a+") {\n continue;\n }\n\n for (int wC = 0; wC < "+d+"; wC++) {\n int xC = xCCorner + wC * "+p+";\n\n if (xC < 0 || xC >= "+o+") {\n continue;\n }\n\n float xVal = getX(batch, xR, xC, d1);\n float wVal = getW(wR, wC, d1, q);\n dotProd += xVal * wVal;\n }\n }\n\n float result = dotProd;\n "+g+"\n "+v+"\n setOutput(result);\n }\n "},jo=function(t,e,n,r){void 0===e&&(e=!1),void 0===n&&(n=null),void 0===r&&(r=!1),this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.outShape;for(var a=t.inHeight,o=t.inWidth,i=t.padInfo.top,s=t.padInfo.left,u=t.strideHeight,c=t.strideWidth,l=t.dilationHeight,p=t.dilationWidth,f=t.filterHeight,d=t.filterWidth,h=d,m="int xR; int xC; int xCOffset;",v=0;v<f;v++)for(var g=0;g<d;g++)m+="\n vec4 xTexelR"+v+"C"+2*g+" = vec4(0.);\n vec4 wR"+v+"C"+g+" = vec4(0.);\n vec4 xR"+v+"C"+g+" = vec4(0.);";for(v=0;v<f;v++)for(var y=0;y<h;y++){if(m+="\n xR = xRCorner + "+v*l+";\n xC = xCCorner + "+(g=2*y)*p+";\n ",1===c){if(g<d&&(m+=s%2==1?"\n xCOffset = xC + 1;\n if(xR >= 0 && xR < "+a+" && xCOffset >= 0 && xCOffset < "+o+") {\n xTexelR"+v+"C"+g+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+v+"C"+g+" = vec4(0.);\n }\n\n xCOffset = xC + 1 - 2;\n if(xR >= 0 && xR < "+a+" && xCOffset >= 0 && xCOffset < "+o+") {\n vec4 previous = getX(batch, xR, xCOffset, d1);\n xR"+v+"C"+g+" = vec4(previous.zw, xTexelR"+v+"C"+g+".xy);\n } else {\n xR"+v+"C"+g+" = vec4(0, 0, xTexelR"+v+"C"+g+".xy);\n }\n ":"\n if(xR >= 0 && xR < "+a+" && xC >= 0 && xC < "+o+") {\n xTexelR"+v+"C"+g+" = getX(batch, xR, xC, d1);\n } else {\n xTexelR"+v+"C"+g+" = vec4(0.);\n }\n\n xR"+v+"C"+g+" = xTexelR"+v+"C"+g+";\n ",g+1<d)){var x=s%2==0?I(p):p;p%2==0&&s%2==1||p%2!=0&&s%2!=1?(m+="\n xCOffset = xC + "+s%2+" + "+x+";\n\n if(xR >= 0 && xR < "+a+" &&\n xCOffset >= 0 && xCOffset < "+o+") {\n xTexelR"+v+"C"+(g+2)+" = getX(batch, xR, xCOffset, d1);\n }\n ",p>1&&(m+="\n xCOffset -= 2;\n if(xR >= 0 && xR < "+a+" &&\n xCOffset >= 0 && xCOffset < "+o+") {\n xTexelR"+v+"C"+g+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+v+"C"+g+" = vec4(0.);\n }\n "),m+="\n xR"+v+"C"+(g+1)+" = vec4(\n xTexelR"+v+"C"+g+".zw, xTexelR"+v+"C"+(g+2)+".xy);\n "):m+="\n xCOffset = xC + "+x+";\n\n if(xR >= 0 && xR < "+a+" &&\n xCOffset >= 0 && xCOffset < "+o+") {\n xTexelR"+v+"C"+(g+2)+" = getX(batch, xR, xCOffset, d1);\n }\n\n xR"+v+"C"+(g+1)+" = xTexelR"+v+"C"+(g+2)+";\n "}}else g<d&&(m+="\n if(xR >= 0 && xR < "+a+") {\n ",s%2==1?(m+="\n xCOffset = xC + 1 - "+c+";\n if(xCOffset >= 0 && xCOffset < "+o+") {\n xTexelR"+v+"C"+g+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+v+"C"+g+" = vec4(0.);\n }\n\n if(xC + 1 >= 0 && xC + 1 < "+o+") {\n xTexelR"+v+"C"+(g+2)+" = getX(batch, xR, xC + 1, d1);\n } else {\n xTexelR"+v+"C"+(g+2)+" = vec4(0.);\n }\n\n xR"+v+"C"+g+" = vec4(\n xTexelR"+v+"C"+g+".zw, xTexelR"+v+"C"+(g+2)+".zw);\n ",g+1<d&&(m+="\n vec4 final = vec4(0.);\n xCOffset = xC + 1 + "+c+";\n if(xCOffset >= 0 && xCOffset < "+o+") {\n final = getX(batch, xR, xCOffset, d1);\n }\n xR"+v+"C"+(g+1)+" = vec4(xTexelR"+v+"C"+(g+2)+".xy, final.xy);\n ")):(m+="\n if(xC >= 0 && xC < "+o+") {\n xTexelR"+v+"C"+g+" = getX(batch, xR, xC, d1);\n } else {\n xTexelR"+v+"C"+g+" = vec4(0.);\n }\n\n xCOffset = xC + "+c+";\n if(xCOffset >= 0 && xCOffset < "+o+") {\n xTexelR"+v+"C"+(g+2)+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+v+"C"+(g+2)+" = vec4(0.);\n }\n\n xR"+v+"C"+g+" = vec4(\n xTexelR"+v+"C"+g+".xy, xTexelR"+v+"C"+(g+2)+".xy);\n ",g+1<d&&(m+="\n xR"+v+"C"+(g+1)+" = vec4(\n xTexelR"+v+"C"+g+".zw, xTexelR"+v+"C"+(g+2)+".zw);\n ")),m+="}");g<d&&(m+="\n vec4 wTexelR"+v+"C"+g+" = getW("+v+", "+g+", d1, q);\n wR"+v+"C"+g+" = vec4(wTexelR"+v+"C"+g+".xz, wTexelR"+v+"C"+g+".xz);\n ",g+1<d&&(m+="\n vec4 wTexelR"+v+"C"+(g+1)+" = getW("+v+", "+(g+1)+", d1, q);\n wR"+v+"C"+(g+1)+" =\n vec4(wTexelR"+v+"C"+(g+1)+".xz, wTexelR"+v+"C"+(g+1)+".xz);"))}for(v=0;v<f;v++)for(g=0;g<d;g++)m+="dotProd += xR"+v+"C"+g+" * wR"+v+"C"+g+";";var b="",w="";n&&(b=r?"vec4 activation(vec4 a) {\n vec4 b = getPreluActivationWeightsAtOutCoords();\n "+n+"\n }":"vec4 activation(vec4 x) {\n "+n+"\n }",w="result = activation(result);");var C=e?"result += getBiasAtOutCoords();":"";e&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+b+"\n\n const ivec2 strides = ivec2("+u+", "+c+");\n const ivec2 pads = ivec2("+i+", "+s+");\n\n void main() {\n\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n ivec2 xRCCorner = coords.yz * strides - pads;\n int d2 = coords.w;\n int d1 = d2;\n int q = 0;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n vec4 dotProd = vec4(0.);\n\n "+m+"\n\n vec4 result = dotProd;\n "+C+"\n "+w+"\n setOutput(result);\n }\n "},Go=function(t,e,n,r,a){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];var o=t[0],i=t[1],s=t[2],u=t[3],c=e[0],l=n[0],p=n[1];this.outputShape=[c,l,p,u];var f="bilinear"===r?1:0,d=[i-1+".0",s-1+".0"],h=d[0],m=d[1],v=l>1?[""+(i-1)/(l-1),"(y2-y1) * height_ratio","y1*"+h+" + float(y)*(height_scale)"]:["0.0","0.0","0.5 * (y1+y2) * "+h],g=v[0],y=v[1],x=v[2],b=p>1?[""+(s-1)/(p-1),"(x2-x1) * width_ratio","x1*"+m+" + float(x)*(width_scale)"]:["0.0","0.0","0.5 * (x1+x2) * "+m],w=b[0],C=b[1],E=b[2];this.userCode="\n const float height_ratio = float("+g+");\n const float width_ratio = float("+w+");\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int y = coords[1];\n int x = coords[2];\n int d = coords[3];\n\n // get box vals\n float y1 = getBoxes(b,0);\n float x1 = getBoxes(b,1);\n float y2 = getBoxes(b,2);\n float x2 = getBoxes(b,3);\n\n // get image in batch index\n int bInd = round(getBoxInd(b));\n if(bInd < 0 || bInd >= "+o+") {\n return;\n }\n\n float height_scale = "+y+";\n float width_scale = "+C+";\n\n float in_y = "+x+";\n if( in_y < 0.0 || in_y > "+h+" ) {\n setOutput(float("+a+"));\n return;\n }\n float in_x = "+E+";\n if( in_x < 0.0 || in_x > "+m+" ) {\n setOutput(float("+a+"));\n return;\n }\n\n vec2 sourceFracIndexCR = vec2(in_x,in_y);\n if("+f+" == 1) {\n // Compute the four integer indices.\n ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);\n ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));\n\n float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);\n float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);\n float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);\n float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);\n\n vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n\n float top = topLeft + (topRight - topLeft) * fracCR.x;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n float newValue = top + (bottom - top) * fracCR.y;\n setOutput(newValue);\n } else {\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestCR = ivec2(floor(\n sourceFracIndexCR + vec2(0.5,0.5)));\n float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);\n setOutput(newValue);\n }\n }\n "},Ho=function(t,e,n){this.variableNames=["x"],this.outputShape=t;var r=t.length,a=t[t.length-1],o=n?"<":">";this.userCode="\n int getIndex(int i) {\n "+(n?"return "+a+" -i - 1;":"return i;")+"\n }\n\n void main() {\n "+po(r)+" coords = getOutputCoords();\n int end = "+qo(r,"coords")+";\n float val = 0.0;\n for (int i = "+a+" - 1; i >= 0; i -= 1) {\n int idx = getIndex(i);\n if (idx "+o+" end) {\n continue;\n }\n if (idx == end && "+e+") {\n continue;\n }\n "+qo(r,"coords")+" = idx;\n val += getX("+function(t,e){if(1===t)return""+e;if(2===t)return e+".x, "+e+".y";if(3===t)return e+".x, "+e+".y, "+e+".z";if(4===t)return e+".x, "+e+".y, "+e+".z, "+e+".w";throw Error("Cumulative sum for rank "+t+" is not yet supported")}(r,"coords")+");\n }\n setOutput(val);\n }\n "};function qo(t,e){if(1===t)return""+e;if(2===t)return e+".y";if(3===t)return e+".z";if(4===t)return e+".w";throw Error("Cumulative sum for rank "+t+" is not yet supported")}var Ko=function(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=zt.DENSE;var e=Yt(t),n=to();this.outputShape=t,this.userCode="\n ivec3 outCoordsFromFlatIndex(int index) {\n "+eo(["r","c","d"],t)+"\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+e[0]+", "+e[1]+"));\n int index = 4 * (resTexRC.x * "+e[1]+" + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getA(rc.x, rc.y, rc.z);\n }\n\n "+n.output+" = result;\n }\n "},Xo=function(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=zt.DENSE;var e=Yt(t),n=to();this.outputShape=t,this.userCode="\n ivec3 outCoordsFromFlatIndex(int index) {\n "+eo(["r","c","d"],t)+"\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+e[0]+", "+e[1]+"));\n int index = 4 * (resTexRC.x * "+e[1]+" + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));\n }\n\n "+n.output+" = result;\n }\n "},Yo=function(){function t(t,e,n){this.variableNames=["x"],this.outputShape=[],this.outputShape=t,this.blockSize=e,this.dataFormat=n,this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int h = "+this.getHeightCoordString()+";\n int w = "+this.getWidthCoordString()+";\n int d = "+this.getDepthCoordString()+";\n\n int in_h = h / "+e+";\n int offset_h = imod(h, "+e+");\n int in_w = w / "+e+";\n int offset_w = imod(w, "+e+");\n int offset_d = (offset_h * "+e+" + offset_w) *\n "+this.getOutputDepthSize()+";\n int in_d = d + offset_d;\n\n float result = "+this.getInputSamplingString()+";\n setOutput(result);\n }\n "}return t.prototype.getHeightCoordString=function(){return"NHWC"===this.dataFormat?"coords[1]":"coords[2]"},t.prototype.getWidthCoordString=function(){return"NHWC"===this.dataFormat?"coords[2]":"coords[3]"},t.prototype.getDepthCoordString=function(){return"NHWC"===this.dataFormat?"coords[3]":"coords[1]"},t.prototype.getOutputDepthSize=function(){return"NHWC"===this.dataFormat?this.outputShape[3]:this.outputShape[1]},t.prototype.getInputSamplingString=function(){return"NHWC"===this.dataFormat?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"},t}(),$o=function(t){this.variableNames=["X"],this.outputShape=[t,t],this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;\n setOutput(val);\n }\n "},Qo=function(t){this.variableNames=["A"],this.outTexUsage=Ut.DOWNLOAD;var e=to();this.outputShape=t,this.userCode="\n "+ro+"\n\n void main() {\n float x = getAAtOutCoords();\n "+e.output+" = encode_float(x);\n }\n "},Jo=function(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=Ut.DOWNLOAD;var e=to();this.outputShape=t,this.userCode="\n "+ro+"\n\n void main() {\n ivec3 coords = getOutputCoords();\n float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\n "+e.output+" = encode_float(x);\n }\n "},Zo=function(t,e,n){void 0===n&&(n=!1),this.variableNames=["A"];var r=to(),a=e[0],o=e[1];this.outputShape=t;var i="result";n&&(i="floor(result * 255. + 0.5)"),this.userCode="\n "+no(t)+"\n\n void main() {\n ivec3 coords = getOutputCoords();\n\n int flatIndex = getFlatIndex(coords);\n int offset = imod(flatIndex, 4);\n\n flatIndex = idiv(flatIndex, 4, 1.);\n \n int r = flatIndex / "+o+";\n int c = imod(flatIndex, "+o+");\n vec2 uv = (vec2(c, r) + halfCR) / vec2("+o+".0, "+a+".0);\n vec4 values = "+r.texture2D+"(A, uv);\n\n float result;\n\n if(offset == 0) {\n result = values[0];\n } else if(offset == 1) {\n result = values[1];\n } else if(offset == 2) {\n result = values[2];\n } else {\n result = values[3];\n }\n\n "+r.output+" = vec4("+i+", 0., 0., 0.);\n }\n "},ti=function(t,e,n){void 0===n&&(n=!1),this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;var r=to(),a=e[0],o=e[1];this.outputShape=t;var i="",s="result";n&&(s="floor(result * 255. + 0.5)");for(var u=0;u<=1;u++)for(var c=0;c<=1;c++){var l=2*u+c;i+="\n localCoords = coords;\n if(localCoords[2] + "+c+" < "+t[2]+") {\n localCoords[2] += "+c+";\n if(localCoords[1] + "+u+" < "+t[1]+") {\n localCoords[1] += "+u+";\n\n flatIndex = getFlatIndex(localCoords);\n offset = imod(flatIndex, 4);\n\n flatIndex = idiv(flatIndex, 4, 1.);\n\n r = flatIndex / "+o+";\n c = imod(flatIndex, "+o+");\n uv = (vec2(c, r) + halfCR) / vec2("+o+".0, "+a+".0);\n values = "+r.texture2D+"(A, uv);\n\n if(offset == 0) {\n result["+l+"] = values[0];\n } else if(offset == 1) {\n result["+l+"] = values[1];\n } else if(offset == 2) {\n result["+l+"] = values[2];\n } else {\n result["+l+"] = values[3];\n }\n }\n }\n "}this.userCode="\n "+no(t)+"\n\n void main() {\n ivec3 coords = getOutputCoords();\n\n vec4 result = vec4(0.);\n int flatIndex, r, c, offset;\n ivec3 localCoords;\n vec2 uv;\n vec4 values;\n\n "+i+"\n\n "+r.output+" = "+s+";\n }\n "},ei=function(t,e,n){this.variableNames=["real","imag"];var r=e[1];this.outputShape=e;var a=n?"2.0 * "+Math.PI:"-2.0 * "+Math.PI,o=n?r+".0":"1.0";this.userCode="\n const float exponentMultiplier = "+a+";\n\n float unaryOpComplex(float real, float expR, float imag, float expI) {\n "+t+"\n }\n\n float mulMatDFT(int batch, int index) {\n float indexRatio = float(index) / float("+r+");\n float exponentMultiplierTimesIndexRatio =\n exponentMultiplier * indexRatio;\n\n float result = 0.0;\n\n for (int i = 0; i < "+r+"; i++) {\n // x = (-2|2 * PI / N) * index * i;\n float x = exponentMultiplierTimesIndexRatio * float(i);\n float expR = cos(x);\n float expI = sin(x);\n float real = getReal(batch, i);\n float imag = getImag(batch, i);\n\n result +=\n unaryOpComplex(real, expR, imag, expI) / "+o+";\n }\n\n return result;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n setOutput(mulMatDFT(coords[0], coords[1]));\n }\n "},ni=function(){function t(t,e){this.outputShape=[],this.variableNames=["x"],this.outputShape=t,this.userCode="\n uniform float value;\n void main() {\n // Input can be obtained from uniform value.\n setOutput(value);\n }\n "}return t.prototype.getCustomSetupFunc=function(t){var e=this;return function(n,r){null==e.valueLoc&&(e.valueLoc=n.getUniformLocationNoThrow(r,"value")),n.gl.uniform1f(e.valueLoc,t)}},t}(),ri=function(t,e,n){this.variableNames=["A","indices"];var r=t.slice();r[n]=e,this.outputShape=r,this.rank=r.length;var a=po(this.rank),o=function(t,e){var n=t.length;if(n>4)throw Error("Gather for rank "+n+" is not yet supported");if(1===n)return"int(getIndices(resRC))";for(var r=["resRC.x","resRC.y","resRC.z","resRC.w"],a=[],o=0;o<t.length;o++)o===e?a.push("int(getIndices("+r[o]+"))"):a.push(""+r[o]);return a.join()}(t,n);this.userCode="\n void main() {\n "+a+" resRC = getOutputCoords();\n setOutput(getA("+o+"));\n }\n "},ai=function(t,e,n){this.sliceDim=t,this.strides=e,this.variableNames=["x","indices"],this.outputShape=n;var r=po(e.length),a=po(n.length),o=this.sliceDim>1?"strides[j]":"strides";this.userCode="\n "+r+" strides = "+r+"("+this.strides+");\n void main() {\n "+a+" coords = getOutputCoords();\n int flattenIndex = 0;\n for (int j = 0; j < "+this.sliceDim+"; j++) {\n int index = round(getIndices(coords[0], j));\n flattenIndex += index * "+o+";\n }\n setOutput(getX(flattenIndex, coords[1]));\n }\n "};function oi(t,e){var n=to();return ne(t,e,n.version+"\n precision highp float;\n "+n.attribute+" vec3 clipSpacePos;\n "+n.attribute+" vec2 uv;\n "+n.varyingVs+" vec2 resultUV;\n\n void main() {\n gl_Position = vec4(clipSpacePos, 1);\n resultUV = uv;\n }")}function ii(t,e){return le(t,e,new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]))}function si(t,e){return pe(t,e,new Uint16Array([0,1,2,2,1,3]))}function ui(t,e,n,r,a,o,i){de(n,r);var s=fe(t,e),u=t.TEXTURE_2D;return Jt(t,e,(function(){return t.bindTexture(u,s)})),Jt(t,e,(function(){return t.texParameteri(u,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE)})),Jt(t,e,(function(){return t.texParameteri(u,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)})),Jt(t,e,(function(){return t.texParameteri(u,t.TEXTURE_MIN_FILTER,t.NEAREST)})),Jt(t,e,(function(){return t.texParameteri(u,t.TEXTURE_MAG_FILTER,t.NEAREST)})),Jt(t,e,(function(){return t.texImage2D(u,0,a,n,r,0,o,i,null)})),Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,null)})),s}function ci(t,e,n,r,a){var o=Xt(n,r);return ui(t,e,o[0],o[1],a.internalFormatFloat,a.textureFormatFloat,t.FLOAT)}function li(t,e,n,r,a){var o=Xt(n,r);return ui(t,e,o[0],o[1],a.internalFormatHalfFloat,a.textureFormatFloat,a.textureTypeHalfFloat)}function pi(t,e,n,r,a){var o=Xt(n,r);return ui(t,e,o[0],o[1],t.RGBA,t.RGBA,t.UNSIGNED_BYTE)}function fi(t,e,n,r,a){var o=$t(n,r);return ui(t,e,o[0],o[1],a.internalFormatPackedFloat,t.RGBA,t.FLOAT)}function di(t,e,n,r,a){var o=$t(n,r);return ui(t,e,o[0],o[1],a.internalFormatPackedHalfFloat,t.RGBA,a.textureTypeHalfFloat)}function hi(t,e,n,r){return Jt(t,e,(function(){return t.bindBuffer(t.ARRAY_BUFFER,r)})),me(t,e,n,"clipSpacePos",r,3,20,0)&&me(t,e,n,"uv",r,2,20,12)}function mi(t,e,n,r,a,o,i){var s,u,c;Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,n)})),o instanceof Uint8Array?(s=new Uint8Array(r*a*4),u=t.UNSIGNED_BYTE,c=t.RGBA):(s=new Float32Array(r*a*4),u=t.FLOAT,c=i.internalFormatPackedFloat),s.set(o),Jt(t,e,(function(){return t.texImage2D(t.TEXTURE_2D,0,c,r,a,0,t.RGBA,u,s)})),Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,null)}))}function vi(t,e,n,r){Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,n)})),r.data instanceof Uint8Array?Jt(t,e,(function(){return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,r.width,r.height,0,t.RGBA,t.UNSIGNED_BYTE,r.data)})):Jt(t,e,(function(){return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r)})),Jt(t,e,(function(){return t.bindTexture(t.TEXTURE_2D,null)}))}function gi(t,e,n,r,a){var o=t.createBuffer();Jt(t,e,(function(){return t.bindBuffer(t.PIXEL_PACK_BUFFER,o)}));var i=16*n*r;return Jt(t,e,(function(){return t.bufferData(t.PIXEL_PACK_BUFFER,i,t.STREAM_READ)})),Jt(t,e,(function(){return t.readPixels(0,0,r,n,t.RGBA,t.FLOAT,0)})),Jt(t,e,(function(){return t.bindBuffer(t.PIXEL_PACK_BUFFER,null)})),o}function yi(t,e,n){var r=t,a=new Float32Array(n);return r.bindBuffer(r.PIXEL_PACK_BUFFER,e),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,a),r.bindBuffer(r.PIXEL_PACK_BUFFER,null),a}function xi(t,e,n,r,a){var o=Xt(n,r),i=o[0],s=o[1],u=new Uint8Array(n*r*4);return Jt(t,e,(function(){return t.readPixels(0,0,i,s,a.downloadTextureFormat,t.UNSIGNED_BYTE,u)})),new Float32Array(u.buffer)}function bi(t,e,n,r,a,o,i,s){var u=t,c=new Float32Array(function(t,e){var n=$t(t,e);return n[0]*n[1]*4}(o,i));return u.bindBuffer(u.PIXEL_PACK_BUFFER,e),u.getBufferSubData(u.PIXEL_PACK_BUFFER,0,c),u.bindBuffer(u.PIXEL_PACK_BUFFER,null),c}function wi(t,e,n,r){var a=new Float32Array(n*r*4);return Jt(t,e,(function(){return t.readPixels(0,0,r,n,t.RGBA,t.FLOAT,a)})),a}var Ci=Object.freeze({createVertexShader:oi,createVertexBuffer:ii,createIndexBuffer:si,createFloat32MatrixTexture:ci,createFloat16MatrixTexture:li,createUnsignedBytesMatrixTexture:pi,createPackedMatrixTexture:fi,createFloat16PackedMatrixTexture:di,bindVertexProgramAttributeStreams:hi,uploadDenseMatrixToTexture:mi,uploadPixelDataToTexture:vi,createBufferFromOutputTexture:gi,downloadFloat32MatrixFromBuffer:yi,downloadByteEncodedFloatMatrixFromOutputTexture:xi,downloadPackedMatrixFromBuffer:bi,downloadMatrixFromPackedOutputTexture:wi}),Ei=function(){function t(t){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];var e=f().getNumber("WEBGL_VERSION");null!=t?(this.gl=t,qt(e,t)):this.gl=Kt(e);var n="WEBGL_color_buffer_float";if(1===f().getNumber("WEBGL_VERSION")){if(this.textureFloatExtension=ee(this.gl,this.debug,"OES_texture_float"),Me(this.gl,"OES_texture_half_float"))this.textureHalfFloatExtension=ee(this.gl,this.debug,"OES_texture_half_float");else if(f().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.");if(this.colorBufferFloatExtension=this.gl.getExtension(n),Me(this.gl,"EXT_color_buffer_half_float"))this.colorBufferHalfFloatExtension=ee(this.gl,this.debug,"EXT_color_buffer_half_float");else if(f().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}else if(n="EXT_color_buffer_float",Me(this.gl,n))this.colorBufferFloatExtension=this.gl.getExtension(n);else{if(!Me(this.gl,"EXT_color_buffer_half_float"))throw new Error("GL context does not support color renderable floats");this.colorBufferHalfFloatExtension=this.gl.getExtension("EXT_color_buffer_half_float")}this.vertexBuffer=ii(this.gl,this.debug),this.indexBuffer=si(this.gl,this.debug),this.framebuffer=he(this.gl,this.debug),this.textureConfig=Qt(this.gl,this.textureHalfFloatExtension)}return Object.defineProperty(t.prototype,"debug",{get:function(){return f().getBool("DEBUG")},enumerable:!0,configurable:!0}),t.prototype.dispose=function(){var t=this;if(!this.disposed){null!=this.program&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),null!=this.outputTexture&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");var e=this.gl;Jt(e,this.debug,(function(){return e.finish()})),Jt(e,this.debug,(function(){return e.bindFramebuffer(e.FRAMEBUFFER,null)})),Jt(e,this.debug,(function(){return e.deleteFramebuffer(t.framebuffer)})),Jt(e,this.debug,(function(){return e.bindBuffer(e.ARRAY_BUFFER,null)})),Jt(e,this.debug,(function(){return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)})),Jt(e,this.debug,(function(){return e.deleteBuffer(t.indexBuffer)})),this.disposed=!0}},t.prototype.createFloat32MatrixTexture=function(t,e){return this.throwIfDisposed(),ci(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createFloat16MatrixTexture=function(t,e){return this.throwIfDisposed(),li(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createUnsignedBytesMatrixTexture=function(t,e){return this.throwIfDisposed(),pi(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.uploadPixelDataToTexture=function(t,e){this.throwIfDisposed(),vi(this.gl,this.debug,t,e)},t.prototype.uploadDenseMatrixToTexture=function(t,e,n,r){this.throwIfDisposed(),mi(this.gl,this.debug,t,e,n,r,this.textureConfig)},t.prototype.createFloat16PackedMatrixTexture=function(t,e){return this.throwIfDisposed(),di(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createPackedMatrixTexture=function(t,e){return this.throwIfDisposed(),fi(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.deleteMatrixTexture=function(t){var e=this;this.throwIfDisposed(),this.outputTexture===t&&(we(this.gl,this.debug,this.framebuffer),this.outputTexture=null),Jt(this.gl,this.debug,(function(){return e.gl.deleteTexture(t)}))},t.prototype.downloadByteEncodedFloatMatrixFromOutputTexture=function(t,e,n){var r=this;return this.downloadMatrixDriver(t,(function(){return xi(r.gl,r.debug,e,n,r.textureConfig)}))},t.prototype.downloadPackedMatrixFromBuffer=function(t,e,n,r,a,o){return bi(this.gl,t,0,0,0,a,o,this.textureConfig)},t.prototype.downloadFloat32MatrixFromBuffer=function(t,e){return yi(this.gl,t,e)},t.prototype.createBufferFromTexture=function(t,e,n){this.bindTextureToFrameBuffer(t);var r=gi(this.gl,this.debug,e,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),r},t.prototype.createAndWaitForFence=function(){var t=this.createFence(this.gl);return this.pollFence(t)},t.prototype.createFence=function(t){var e,n,r=this;if(f().getBool("WEBGL_FENCE_API_ENABLED")){var a=t,o=a.fenceSync(a.SYNC_GPU_COMMANDS_COMPLETE,0);t.flush(),n=function(){var t=a.clientWaitSync(o,0,0);return t===a.ALREADY_SIGNALED||t===a.CONDITION_SATISFIED},e=o}else f().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(e=this.beginQuery(),this.endQuery(),n=function(){return r.isQueryAvailable(e,f().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}):n=function(){return!0};return{query:e,isFencePassed:n}},t.prototype.downloadMatrixFromPackedTexture=function(t,e,n){var r=this;return this.downloadMatrixDriver(t,(function(){return wi(r.gl,r.debug,e,n)}))},t.prototype.createProgram=function(t){this.throwIfDisposed();var e=this.gl,n=re(e,this.debug,t),r=oi(e,this.debug),a=se(e,this.debug);return Jt(e,this.debug,(function(){return e.attachShader(a,r)})),Jt(e,this.debug,(function(){return e.attachShader(a,n)})),ue(e,this.debug,a),this.debug&&ce(e,this.debug,a),this.vertexAttrsAreBound||(this.setProgram(a),this.vertexAttrsAreBound=hi(e,this.debug,this.program,this.vertexBuffer)),a},t.prototype.deleteProgram=function(t){var e=this;this.throwIfDisposed(),t===this.program&&(this.program=null),null!=t&&Jt(this.gl,this.debug,(function(){return e.gl.deleteProgram(t)}))},t.prototype.setProgram=function(t){var e=this;this.throwIfDisposed(),this.program=t,null!=this.program&&this.debug&&ce(this.gl,this.debug,this.program),Jt(this.gl,this.debug,(function(){return e.gl.useProgram(t)}))},t.prototype.getUniformLocation=function(t,e,n){return void 0===n&&(n=!0),this.throwIfDisposed(),n?ge(this.gl,this.debug,t,e):ye(this.gl,t,e)},t.prototype.getAttributeLocation=function(t,e){var n=this;return this.throwIfDisposed(),Jt(this.gl,this.debug,(function(){return n.gl.getAttribLocation(t,e)}))},t.prototype.getUniformLocationNoThrow=function(t,e){return this.throwIfDisposed(),this.gl.getUniformLocation(t,e)},t.prototype.setInputMatrixTexture=function(t,e,n){this.throwIfDisposed(),this.throwIfNoProgram(),xe(this.gl,this.debug,this.program,t,e,n)},t.prototype.setOutputMatrixTexture=function(t,e,n){this.setOutputMatrixTextureDriver(t,n,e)},t.prototype.setOutputPackedMatrixTexture=function(t,e,n){this.throwIfDisposed();var r=$t(e,n),a=r[0],o=r[1];this.setOutputMatrixTextureDriver(t,a,o)},t.prototype.setOutputMatrixWriteRegion=function(t,e,n,r){this.setOutputMatrixWriteRegionDriver(n,t,r,e)},t.prototype.setOutputPackedMatrixWriteRegion=function(t,e,n,r){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")},t.prototype.debugValidate=function(){null!=this.program&&ce(this.gl,this.debug,this.program),Ce(this.gl)},t.prototype.executeProgram=function(){this.throwIfDisposed(),this.throwIfNoProgram();var t=this.gl;this.debug&&this.debugValidate(),Jt(t,this.debug,(function(){return t.drawElements(t.TRIANGLES,6,t.UNSIGNED_SHORT,0)}))},t.prototype.blockUntilAllProgramsCompleted=function(){var t=this;this.throwIfDisposed(),Jt(this.gl,this.debug,(function(){return t.gl.finish()}))},t.prototype.getQueryTimerExtension=function(){return null==this.disjointQueryTimerExtension&&(this.disjointQueryTimerExtension=ee(this.gl,this.debug,2===f().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension},t.prototype.getQueryTimerExtensionWebGL2=function(){return this.getQueryTimerExtension()},t.prototype.getQueryTimerExtensionWebGL1=function(){return this.getQueryTimerExtension()},t.prototype.beginQuery=function(){if(2===f().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){var t=this.gl,e=this.getQueryTimerExtensionWebGL2(),n=t.createQuery();return t.beginQuery(e.TIME_ELAPSED_EXT,n),n}var r=this.getQueryTimerExtensionWebGL1(),a=r.createQueryEXT();return r.beginQueryEXT(r.TIME_ELAPSED_EXT,a),a},t.prototype.endQuery=function(){if(2!==f().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){var t=this.getQueryTimerExtensionWebGL1();t.endQueryEXT(t.TIME_ELAPSED_EXT)}else{var e=this.gl,n=this.getQueryTimerExtensionWebGL2();e.endQuery(n.TIME_ELAPSED_EXT)}},t.prototype.waitForQueryAndGetTime=function(t){return u(this,void 0,void 0,(function(){var e=this;return c(this,(function(n){switch(n.label){case 0:return[4,L((function(){return e.disposed||e.isQueryAvailable(t,f().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}))];case 1:return n.sent(),[2,this.getQueryTime(t,f().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))]}}))}))},t.prototype.getQueryTime=function(t,e){if(0===e)return null;if(2===e){var n=this.gl;return n.getQueryParameter(t,n.QUERY_RESULT)/1e6}var r=this.getQueryTimerExtensionWebGL1();return r.getQueryObjectEXT(t,r.QUERY_RESULT_EXT)/1e6},t.prototype.isQueryAvailable=function(t,e){if(0===e)return!0;if(2===e){var n=this.gl,r=this.getQueryTimerExtensionWebGL2(),a=n.getQueryParameter(t,n.QUERY_RESULT_AVAILABLE);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),a&&!this.disjoint}return a=(r=this.getQueryTimerExtensionWebGL1()).getQueryObjectEXT(t,r.QUERY_RESULT_AVAILABLE_EXT),null==this.disjoint&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),a&&!this.disjoint},t.prototype.pollFence=function(t){var e=this;return new Promise((function(n){e.addItemToPoll((function(){return t.isFencePassed()}),(function(){return n()}))}))},t.prototype.pollItems=function(){for(var t=function(t){for(var e=0;e<t.length&&t[e]();++e);return e-1}(this.itemsToPoll.map((function(t){return t.isDoneFn}))),e=0;e<=t;++e)(0,this.itemsToPoll[e].resolveFn)();this.itemsToPoll=this.itemsToPoll.slice(t+1)},t.prototype.addItemToPoll=function(t,e){var n=this;this.itemsToPoll.push({isDoneFn:t,resolveFn:e}),this.itemsToPoll.length>1||L((function(){return n.pollItems(),0===n.itemsToPoll.length}))},t.prototype.bindTextureToFrameBuffer=function(t){this.throwIfDisposed(),be(this.gl,this.debug,t,this.framebuffer),this.debug&&Ce(this.gl)},t.prototype.unbindTextureToFrameBuffer=function(){null!=this.outputTexture?(be(this.gl,this.debug,this.outputTexture,this.framebuffer),this.debug&&Ce(this.gl)):we(this.gl,this.debug,this.framebuffer)},t.prototype.downloadMatrixDriver=function(t,e){this.bindTextureToFrameBuffer(t);var n=e();return this.unbindTextureToFrameBuffer(),n},t.prototype.setOutputMatrixTextureDriver=function(t,e,n){this.throwIfDisposed();var r=this.gl;be(r,this.debug,t,this.framebuffer),this.debug&&Ce(r),this.outputTexture=t,Jt(r,this.debug,(function(){return r.viewport(0,0,e,n)})),Jt(r,this.debug,(function(){return r.scissor(0,0,e,n)}))},t.prototype.setOutputMatrixWriteRegionDriver=function(t,e,n,r){var a=this;this.throwIfDisposed(),Jt(this.gl,this.debug,(function(){return a.gl.scissor(t,e,n,r)}))},t.prototype.throwIfDisposed=function(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")},t.prototype.throwIfNoProgram=function(){if(null==this.program)throw new Error("No GPU program is currently set.")},t}();function Si(t,e){if(t.length!==e.length)throw Error("Binary was compiled with "+t.length+" inputs, but was executed with "+e.length+" inputs");t.forEach((function(t,n){var r=t.logicalShape,a=e[n],o=a.shape;if(!_(r,o))throw Error("Binary was compiled with different shapes than the current args. Shapes "+r+" and "+o+" must match");if(!t.isUniform||!a.isUniform){var i=t.texShape,s=a.isUniform?null:a.texData.texShape;if(!_(i,s))throw Error("Binary was compiled with different texture shapes than the current args. Shape "+i+" and "+s+" must match")}}))}var Ni=function(t,e,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t;for(var r=n.filterWidth,a=n.inChannels,o=n.strideWidth,i=n.strideHeight,s=n.padInfo,u=n.outWidth,c=n.dilationWidth,l=n.dilationHeight,p=n.dataFormat,f=s.left,d=s.top,h=a*r,m=to(),v="channelsLast"===p,g=v?0:1,y=v?1:2,x="",b=0;b<=1;b++)for(var w=0;w<=1;w++)x+="\n blockIndex = rc.y + "+w+";\n pos = rc.x + "+b+";\n\n if(blockIndex < "+t[1]+" && pos < "+t[0]+") {\n offsetY = int(blockIndex / ("+u+")) * "+i+" - "+d+";\n d0 = offsetY + "+l+" * (pos / "+h+");\n\n if(d0 < "+e[g]+" && d0 >= 0) {\n\n offsetX = int(mod(float(blockIndex), "+u+".) * "+o+". - "+f+".);\n d1 = offsetX + "+c+" * (int(mod(float(pos), "+h+".) / "+a+".));\n\n if(d1 < "+e[y]+" && d1 >= 0) {\n\n ch = int(mod(float(pos), "+a+".));\n\n if ("+v+") {\n innerDims = vec2(d1, ch);\n result["+(2*b+w)+"] = getChannel(\n getA(d0, int(innerDims.x),\n int(innerDims.y)), innerDims);\n } else {\n innerDims = vec2(d0, d1);\n result["+(2*b+w)+"] = getChannel(\n getA(ch, int(innerDims.x),\n int(innerDims.y)), innerDims);\n }\n }\n }\n }\n ";this.userCode="\n void main() {\n ivec2 rc = getOutputCoords();\n\n vec4 result = vec4(0);\n\n int blockIndex, pos, offsetY, d0, offsetX, d1, ch;\n vec2 innerDims;\n\n "+x+"\n\n "+m.output+" = result;\n }\n "},Ii=function(t,e,n,r,a){this.variableNames=["x"],this.outputShape=[];var o,i=e,s=t[3]-1;this.outputShape=t;var u="float("+n+") + float("+r+") * sum";o=.5===a?"inversesqrt("+u+")":1===a?"1.0/("+u+")":"exp(log("+u+") * float(-"+a+"));",this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n int d = coords[3];\n float x = getX(b, r, c, d);\n float sum = 0.0;\n for (int j = -"+i+"; j <= "+i+"; j++) {\n int idx = d + j;\n if (idx >= 0 && idx <= "+s+") {\n float z = getX(b, r, c, idx);\n sum += z * z;\n }\n }\n float val = x * "+o+";\n setOutput(val);\n }\n "},Ri=function(t,e,n,r,a){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=t,this.depth=t[3],this.depthRadius=e,this.bias=n,this.alpha=r,this.beta=a,this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n\n float result = 0.0;\n for (int d = 0; d < "+this.depth+"; ++d) {\n int depthBegin = int(max(0.0, float(d - "+e+")));\n int depthEnd = int(min(float("+this.depth+"),\n float(d + "+e+" + 1)));\n\n const int MIN_DEPTH_BEGIN = 0;\n const int MAX_DEPTH_END = "+this.depth+";\n\n float norm = 0.0;\n for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd) {\n norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n }\n else {\n break;\n }\n }\n\n norm = float("+r+") * norm + float("+n+");\n\n for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd){\n float dyi = -2.0 * float("+r+")\n * float("+a+")\n * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)\n / norm;\n if (k == d) {\n dyi += pow(norm, -1.0 * "+a+");\n }\n if (k == coords[3]) {\n dyi *= getDy(b, r, c, d);\n result += dyi;\n }\n }\n else {\n break;\n }\n }\n }\n setOutput(result);\n }\n "},Ti=function(t,e,n,r,a){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;var o,i=e,s=t[3]-1;this.outputShape=t;var u="float("+n+") + float("+r+") * sum";o=.5===a?"inversesqrt("+u+")":1===a?"1.0/("+u+")":"exp(log("+u+") * float(-"+a+"));",this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords.x;\n int r = coords.y;\n int c = coords.z;\n int d = coords.w;\n\n bool hasNextCol = d < "+this.outputShape[3]+";\n bool hasNextRow = c < "+this.outputShape[2]+";\n\n vec4 sum = vec4(0.);\n vec4 xFragAtOutputCoords = getX(b, r, c, d);\n\n vec4 xAtOutputCoords = vec4(\n getChannel(xFragAtOutputCoords, vec2(c, d)),\n hasNextCol ?\n getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,\n hasNextRow ?\n getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,\n (hasNextRow && hasNextCol) ?\n getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0\n );\n\n int firstChannel = d - "+i+";\n vec2 cache = vec2(0.);\n if(firstChannel >= 0){\n vec4 firstChannelFrag = getX(b, r, c, firstChannel);\n cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));\n if(hasNextRow){\n cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));\n }\n }\n\n ivec2 depth = ivec2(d, d + 1);\n for (int j = - "+i+"; j <= "+i+"; j++) {\n ivec2 idx = depth + j;\n bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));\n bvec2 belowUpperBound = lessThanEqual(idx, ivec2("+s+"));\n\n bool depthInRange = aboveLowerBound.x && belowUpperBound.x;\n bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;\n\n if(depthInRange || depthPlusOneInRange){\n vec4 z = vec4(0.);\n vec4 xFragAtCurrentDepth;\n z.xz = cache.xy;\n if(depthPlusOneInRange && hasNextCol){\n xFragAtCurrentDepth = idx.y != d ?\n getX(b, r, c, idx.y) : xFragAtOutputCoords;\n z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));\n if(hasNextRow){\n z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));\n }\n }\n cache.xy = z.yw;\n sum += z * z;\n }\n }\n vec4 result = xAtOutputCoords * "+o+";\n setOutput(result);\n }\n "},ki=function(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;var e=t.strideHeight,n=t.strideWidth,r=t.dilationHeight,a=t.effectiveFilterHeight,o=t.effectiveFilterWidth,i=a-1-t.padInfo.top,s=o-1-t.padInfo.left,u=a*o-1;this.userCode="\n const ivec2 pads = ivec2("+i+", "+s+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+a+";\n wR += "+r+") {\n float dyR = float(dyRCorner + wR) / "+e+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+o+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+n+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n int maxPosValue = "+u+" - int(getMaxPos(b, idyR, idyC, d));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue = wR * "+o+" + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n setOutput(dotProd);\n }\n "},Ai=function(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;var e=t.strideDepth,n=t.strideHeight,r=t.strideWidth,a=t.dilationDepth,o=t.dilationHeight,i=t.dilationWidth,s=t.effectiveFilterDepth,u=t.effectiveFilterHeight,c=t.effectiveFilterWidth,l=s-1-t.padInfo.front,p=u-1-t.padInfo.top,f=c-1-t.padInfo.left,d=s*u*c-1;this.userCode="\n const ivec3 pads = ivec3("+l+", "+p+", "+f+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < "+s+";\n wD += "+a+") {\n float dyD = float(dyDCorner + wD) / "+e+".0;\n\n if (dyD < 0.0 || dyD >= "+t.outDepth+".0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < "+u+";\n wR += "+o+") {\n float dyR = float(dyRCorner + wR) / "+n+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+c+";\n wC += "+i+") {\n float dyC = float(dyCCorner + wC) / "+r+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n int maxPosValue = "+d+" -\n int(getMaxPos(batch, idyD, idyR, idyC, ch));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue =\n wD * "+u+" * "+c+" +\n wR * "+c+" + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n }\n setOutput(dotProd);\n }\n "},Oi=function(t,e,n,r,a,o,i){void 0===n&&(n=!1),void 0===r&&(r=!1),void 0===a&&(a=!1),void 0===o&&(o=null),void 0===i&&(i=!1),this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e;var s=n?t[1]:t[2],u=Math.ceil(s/2),c=n?"i * 2, rc.y":"rc.y, i * 2",l=r?"rc.z, i * 2":"i * 2, rc.z",p=n?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],f=r?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],d="",h="";o&&(d=i?"vec4 activation(vec4 a) {\n vec4 b = getPreluActivationWeightsAtOutCoords();\n "+o+"\n }":"vec4 activation(vec4 x) {\n "+o+"\n }",h="result = activation(result);");var m=a?"result += getBiasAtOutCoords();":"";a&&this.variableNames.push("bias"),i&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+d+"\n\n const float sharedDimension = "+u+".0;\n\n vec4 dot2x2ARowBCol(ivec3 rc) {\n vec4 result = vec4(0);\n for (int i = 0; i < "+u+"; i++) {\n vec4 a = getMatrixA(rc.x, "+c+");\n vec4 b = getMatrixB(rc.x, "+l+");\n\n // These swizzled products need to be separately added.\n // See: https://github.com/tensorflow/tfjs/issues/1735\n result += ("+p[0]+" * "+f[0]+");\n result += ("+p[1]+" * "+f[1]+");\n }\n return result;\n }\n\n void main() {\n ivec3 rc = getOutputCoords();\n vec4 result = dot2x2ARowBCol(rc);\n\n "+m+"\n\n "+h+"\n\n setOutput(result);\n }\n "},Di=function(){function t(t,e,n){this.variableNames=["probs"],this.outputShape=[t,n],this.userCode="\n uniform float seed;\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n\n float r = random(seed);\n float cdf = 0.0;\n\n for (int i = 0; i < "+(e-1)+"; i++) {\n cdf += getProbs(batch, i);\n\n if (r < cdf) {\n setOutput(float(i));\n return;\n }\n }\n\n // If no other event happened, last event happened.\n setOutput(float("+(e-1)+"));\n }\n "}return t.prototype.getCustomSetupFunc=function(t){var e=this;return function(n,r){null==e.seedLoc&&(e.seedLoc=n.getUniformLocation(r,"seed")),n.gl.uniform1f(e.seedLoc,t)}},t}(),_i=function(t,e,n,r){this.variableNames=["indices"],this.outputShape=[t,e],this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int index = round(getIndices(coords.x));\n setOutput(mix(float("+r+"), float("+n+"),\n float(index == coords.y)));\n }\n "},Fi=function(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=t;var e=t.length;if(0===e)this.userCode="\n void main() {\n setOutput(vec4(getA(), 0., 0., 0.));\n }\n ";else{var n=Za("rc",e),r=po(e),a=function(t,e,n){if(1===t)return"rc > "+e[0];for(var r="",a=t-2;a<t;a++)r+=n[a]+" >= "+e[a],a<t-1&&(r+="||");return r}(e,t,n),o=function(t,e,n,r){if(1===t)return"";var a=r.slice(-2);return"\n int r = "+a[0]+";\n int c = "+a[1]+";\n int rp1 = r + 1;\n int cp1 = c + 1;\n\n bool cEdge = cp1 >= "+e+";\n bool rEdge = rp1 >= "+n+";\n "}(e,t[t.length-1],t[t.length-2],n),i=function(t,e){var n=t.length,r=function(t,e){for(var n=[],r=0;r<=1;r++)for(var a=0;a<=1;a++){for(var o=(0===r?"r":"rp1")+", "+(0===a?"c":"cp1"),i=2;i<t;i++)o=e[e.length-1-i]+","+o;n.push(o)}return n}(n,e);return 1===n?"getA(rc),\n rc + 1 >= "+t[0]+" ? 0. : getA(rc + 1),\n 0, 0":"getA("+r[0]+"),\n cEdge ? 0. : getA("+r[1]+"),\n rEdge ? 0. : getA("+r[2]+"),\n rEdge || cEdge ? 0. : getA("+r[3]+")"}(t,n);this.userCode="\n void main() {\n "+r+" rc = getOutputCoords();\n\n if("+a+") {\n setOutput(vec4(0));\n } else {\n "+o+"\n\n setOutput(vec4("+i+"));\n }\n }\n "}},Mi=function(t,e,n){this.variableNames=["x"],this.outputShape=e.map((function(e,n){return e[0]+t[n]+e[1]}));var r=t.length,a=po(r),o=e.map((function(t){return t[0]})).join(","),i=e.map((function(e,n){return e[0]+t[n]})).join(","),s=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r);this.userCode=1!==r?"\n "+a+" start = "+a+"("+o+");\n "+a+" end = "+a+"("+i+");\n\n void main() {\n "+a+" outC = getOutputCoords();\n if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\n setOutput(float("+n+"));\n } else {\n "+a+" coords = outC - start;\n setOutput(getX("+s+"));\n }\n }\n ":"\n int start = "+o+";\n int end = "+i+";\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start || outC >= end) {\n setOutput(float("+n+"));\n } else {\n setOutput(getX(outC - start));\n }\n }\n "},Bi=function(t,e,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e.map((function(e,n){return e[0]+t[n]+e[1]}));for(var r=t.length,a=po(r),o=e.map((function(t){return t[0]})).join(","),i=e.map((function(e,n){return e[0]+t[n]})).join(","),s=Za("rc",r),u=Za("source",r),c=s[r-1]+" < "+this.outputShape[r-1],l=1===r?"source":"vec2("+u.slice(-2).join()+")",p=[a+" rc = outputLoc;",s[r-1]+" += 1;\n if("+c+") {\n ",1===r?"":"}\n rc = outputLoc;\n "+s[r-2]+" += 1;\n if("+s[r-2]+" < "+this.outputShape[r-2]+") {",1===r?"":" "+s[r-1]+" += 1;\n if("+c+") {"],f=1===r?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",d="",h=0,m=1===r?2:4;h<m;h++)d+="\n "+p[h]+"\n if ("+f+") {\n result["+h+"] = float("+n+");\n } else {\n "+a+" source = rc - start;\n result["+h+"] = getChannel(getX("+u.join()+"), "+l+");\n }\n ";d+=1===r?"} ":"}}",this.userCode="\n const "+a+" start = "+a+"("+o+");\n const "+a+" end = "+a+"("+i+");\n\n void main() {\n "+a+" outputLoc = getOutputCoords();\n vec4 result = vec4(0.);\n "+d+"\n setOutput(result);\n }\n "},Pi=function(t,e,n){if(this.variableNames=["x"],"avg"===e&&n)throw new Error("Cannot compute positions for average pool.");var r=t.filterWidth,a=t.strideHeight,o=t.strideWidth,i=t.dilationHeight,s=t.dilationWidth,u=t.effectiveFilterHeight,c=t.effectiveFilterWidth,l=t.padInfo.top,p=t.padInfo.left;this.outputShape=t.outShape;var f="avg"===e,d="0.0";if(f||(d="-1.0 / 1e-20"),n)this.userCode="\n const ivec2 strides = ivec2("+a+", "+o+");\n const ivec2 pads = ivec2("+l+", "+p+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n float minMaxValue = 0.0;\n float minMaxValueFound = 0.0;\n int minMaxPosition = 0;\n float avgValue = 0.0;\n\n for (int wR = 0; wR < "+u+";\n wR += "+i+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+c+";\n wC += "+s+") {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float value = getX(batch, xR, xC, d);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value >= currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = wR * "+c+" + wC;\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n ";else{var h=e+"("+e+"("+e+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"avg"===e&&(h="avgValue / count");var m=4*Math.floor(r/4),v=r%4,g="\n if ("+f+") {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = max(values, minMaxValue);\n }\n ";this.userCode="\n const ivec2 strides = ivec2("+a+", "+o+");\n const ivec2 pads = ivec2("+l+", "+p+");\n const float initializationValue = "+d+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xR, int xC, int d) {\n if (xC < 0 || xC >= "+t.inWidth+") {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xR, xC, d);\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n vec4 minMaxValue = vec4("+d+");\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wR = 0; wR < "+u+";\n wR += "+i+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+m+"; wC += 4) {\n int xC = xCCorner + wC * "+s+";\n\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n getValue(batch, xR, xC + 2 * "+s+", d),\n getValue(batch, xR, xC + 3 * "+s+", d)\n );\n\n "+g+"\n }\n\n int xC = xCCorner + "+m+";\n if ("+(1===v)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+g+"\n } else if ("+(2===v)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n initializationValue,\n initializationValue\n );\n\n "+g+"\n } else if ("+(3===v)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n getValue(batch, xR, xC + 2 * "+s+", d),\n initializationValue\n );\n\n "+g+"\n }\n }\n setOutput("+h+");\n }\n "}},Li=function(t,e,n){if(this.variableNames=["x"],"avg"===e&&n)throw new Error("Cannot compute positions for average pool.");var r=t.filterWidth,a=t.strideDepth,o=t.strideHeight,i=t.strideWidth,s=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.effectiveFilterDepth,p=t.effectiveFilterHeight,f=t.effectiveFilterWidth,d=t.padInfo.front,h=t.padInfo.top,m=t.padInfo.left;this.outputShape=t.outShape;var v="avg"===e,g="0.0";if(v||(g="-1.0 / 1e-20"),n)this.userCode="\n const ivec3 strides =\n ivec3("+a+", "+o+", "+i+");\n const ivec3 pads = ivec3("+d+", "+h+", "+m+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).\n // ? = to be determined\n float minMaxValue = 0.0;\n float minMaxValueFound = 0.0;\n int minMaxPosition = 0;\n\n for (int wD = 0; wD < "+l+";\n wD += "+s+") {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= "+t.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+p+";\n wR += "+u+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+f+";\n wC += "+c+") {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float value = getX(batch, xD, xR, xC, ch);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value >= currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition =\n wD * "+p+" * "+f+" +\n wR * "+f+" + wC;;\n }\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n ";else{var y=e+"("+e+"("+e+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"avg"===e&&(y="avgValue / count");var x=4*Math.floor(r/4),b=r%4,w="\n if ("+v+") {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = max(values, minMaxValue);\n }\n ";this.userCode="\n const ivec3 strides =\n ivec3("+a+", "+o+", "+i+");\n const ivec3 pads = ivec3("+d+", "+h+", "+m+");\n const float initializationValue = "+g+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xD, int xR, int xC, int ch) {\n if (xC < 0 || xC >= "+t.inWidth+") {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xD, xR, xC, ch);\n }\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch).\n // ? = to be determined\n vec4 minMaxValue = vec4("+g+");\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wD = 0; wD < "+l+";\n wD += "+s+") {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= "+t.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+p+";\n wR += "+u+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+x+"; wC += 4) {\n int xC = xCCorner + wC * "+c+";\n\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+c+", ch),\n getValue(batch, xD, xR, xC + 2 * "+c+", ch),\n getValue(batch, xD, xR, xC + 3 * "+c+", ch)\n );\n\n "+w+"\n }\n\n int xC = xCCorner + "+x+";\n if ("+(1===b)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+w+"\n } else if ("+(2===b)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+c+", ch),\n initializationValue,\n initializationValue\n );\n\n "+w+"\n } else if ("+(3===b)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+c+", ch),\n getValue(batch, xD, xR, xC + 2 * "+c+", ch),\n initializationValue\n );\n\n "+w+"\n }\n }\n setOutput("+y+");\n }\n }\n "}},Vi=function(t,e){this.variableNames=["x"];var n=t.windowSize,r=t.batchSize,a=t.inSize,o=Math.ceil(a/n);this.outputShape=[r,o];var i="0.0",s="";"prod"===e?i="1.0":"min"===e?(i="1.0 / 1e-20",s="min"):"max"===e&&(i="-1.0 / 1e-20",s="max");var u=e+"("+e+"("+e+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"sum"===e?u="sumValue":"prod"===e?u="prodValue":"all"===e?u="allValue":"any"===e&&(u="anyValue");var c=4*Math.floor(n/4),l=n%4,p="\n if ("+("sum"===e)+") {\n sumValue += dot(values, ones);\n } else if ("+("prod"===e)+") {\n vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);\n prodValue *= tmp[0] * tmp[1];\n } else {\n minMaxValue = "+s+"(values, minMaxValue);\n }\n ",f="vec4";"all"===e?(i="1.0",p="\n bool reducedAllValue = all(values);\n float floatedReducedAllValue = float(reducedAllValue);\n allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n ",f="bvec4"):"any"===e&&(i="0.0",p="\n bool reducedAnyValue = any(values);\n float floatedReducedAnyValue = float(reducedAnyValue);\n anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n ",f="bvec4");var d="";a%n>0&&(d="\n if (inIdx < 0 || inIdx >= "+a+") {\n return initializationValue;\n }\n "),this.userCode="\n const float initializationValue = "+i+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n "+d+"\n return getX(batch, inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * "+n+";\n\n vec4 minMaxValue = vec4("+i+");\n float prodValue = 1.0;\n float sumValue = 0.0;\n float allValue = 1.0;\n float anyValue = 0.0;\n\n for (int i = 0; i < "+c+"; i += 4) {\n int inIdx = inOffset + i;\n "+f+" values = "+f+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n "+p+"\n }\n\n int inIdx = inOffset + "+c+";\n if ("+(1===l)+") {\n "+f+" values = "+f+"(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+p+"\n } else if ("+(2===l)+") {\n "+f+" values = "+f+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n "+p+"\n } else if ("+(3===l)+") {\n "+f+" values = "+f+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n "+p+"\n }\n setOutput("+u+");\n }\n "},Wi=function(t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t;for(var n="",r=0;r<4;r++){var a="thisRC = rc;";r%2==1&&(a+="thisRC.z += 1;"),r>1&&(a+="thisRC.y += 1;"),n+="\n "+a+"\n "+(r>0?"if(thisRC.y < rows && thisRC.z < cols){":"")+"\n int flatIndex = getFlatIndex(thisRC);\n\n ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);\n vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));\n\n result["+r+"] =\n getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\n "+(r>0?"}":"")+"\n "}this.userCode="\n \n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n "+eo(["r","c","d"],e)+"\n return ivec3(r, c, d);\n }\n \n "+no(t)+"\n\n void main() {\n ivec3 rc = getOutputCoords();\n\n vec4 result = vec4(0.);\n\n ivec3 thisRC;\n int rows = "+t[1]+";\n int cols = "+t[2]+";\n\n "+n+"\n\n setOutput(result);\n }\n "},zi=function(t,e,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e.shape;var r=e.shape,a=r[1],o=r[2],i=t.shape,s=i[1],u=i[2],c=[n&&s>1?a-1:a,n&&u>1?o-1:o],l=[n&&s>1?s-1:s,n&&u>1?u-1:u],p=c[0]/l[0],f=c[1]/l[1],d=1/p,h=1/f,m=2*Math.ceil(d)+2,v=2*Math.ceil(h)+2;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float("+p+");\n const float widthScale = float("+f+");\n\n const float invHeightScale = float("+d+");\n const float invWidthScale = float("+h+");\n\n const int winHeight = int("+m+");\n const int winWidth = int("+v+");\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(startRLerp - float(winHeight / 2));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(startCLerp - float(winWidth / 2));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= "+s+") {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= "+u+") {\n continue;\n }\n\n float dxR = float(dyR) * heightScale;\n int topDxRIndex = int(floor(dxR));\n int bottomDxRIndex = int(min(ceil(dxR), "+(a-1)+".0));\n float dxRLerp = dxR - float(topDxRIndex);\n float inverseDxRLerp = 1.0 - dxRLerp;\n\n float dxC = float(dyC) * widthScale;\n int leftDxCIndex = int(floor(dxC));\n int rightDxCIndex = int(min(ceil(dxC), "+(o-1)+".0));\n float dxCLerp = dxC - float(leftDxCIndex);\n float inverseDxCLerp = 1.0 - dxCLerp;\n\n if (r == topDxRIndex && c == leftDxCIndex) {\n // topLeft\n accumulator +=\n getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\n }\n\n if (r == topDxRIndex && c == rightDxCIndex) {\n // topRight\n accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\n }\n\n if (r == bottomDxRIndex && c == leftDxCIndex) {\n // bottomLeft\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\n }\n\n if (r == bottomDxRIndex && c == rightDxCIndex) {\n // bottomRight\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n "},Ui=function(t,e,n,r){this.variableNames=["A"],this.outputShape=[];var a=t[0],o=t[1],i=t[2],s=t[3];this.outputShape=[a,e,n,s];var u=[r&&e>1?o-1:o,r&&n>1?i-1:i],c=[r&&e>1?e-1:e,r&&n>1?n-1:n];this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+u[0]/c[0]+",\n "+u[1]/c[1]+");\n const vec2 inputShapeRC = vec2("+o+".0, "+i+".0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the four integer indices.\n ivec2 sourceFloorRC = ivec2(sourceFracIndexRC);\n ivec2 sourceCeilRC = ivec2(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);\n float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);\n float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);\n float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n float top = topLeft + (topRight - topLeft) * fracRC.y;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n float newValue = top + (bottom - top) * fracRC.x;\n\n setOutput(newValue);\n }\n "},ji=function(t,e,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];var a=t[0],o=t[1],i=t[2],s=t[3];this.outputShape=[a,e,n,s];var u=[r&&e>1?o-1:o,r&&n>1?i-1:i],c=[r&&e>1?e-1:e,r&&n>1?n-1:n];this.userCode="\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n "+u[0]/c[0]+",\n "+u[1]/c[1]+",\n "+u[1]/c[1]+");\n const vec3 inputShapeRC = vec3("+o+".0, "+i+".0,\n "+i+".0);\n\n float getAValue(int b, int r, int c, int d) {\n return getChannel(getA(b, r, c, d), vec2(c, d));\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n // Calculate values for next column in yRC.z.\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n // Fractional source index.\n vec3 sourceFracIndexRC = vec3(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the four integer indices.\n ivec3 sourceFloorRC = ivec3(sourceFracIndexRC);\n ivec3 sourceCeilRC = ivec3(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n // Should we calculate next column and row elements in 2x2 packed cell.\n bool hasNextCol = d < "+(s-1)+";\n bool hasNextRow = coords.z < "+(n-1)+";\n\n // In parallel, construct four corners for all four components in\n // packed 2x2 cell.\n vec4 topLeft = vec4(\n getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 bottomLeft = vec4(\n getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 topRight = vec4(\n getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec4 bottomRight = vec4(\n getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);\n\n vec4 top = mix(topLeft, topRight, fracRC.yyzz);\n vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);\n vec4 newValue = mix(top, bottom, fracRC.x);\n\n setOutput(newValue);\n }\n "},Gi=function(t,e,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e.shape;var r=e.shape,a=r[1],o=r[2],i=t.shape,s=i[1],u=i[2],c=[n&&s>1?a-1:a,n&&u>1?o-1:o],l=[n&&s>1?s-1:s,n&&u>1?u-1:u],p=c[0]/l[0],f=c[1]/l[1],d=1/p,h=1/f,m=2*Math.ceil(d)+2,v=2*Math.ceil(h)+2;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float("+p+");\n const float widthScale = float("+f+");\n\n const float invHeightScale = float("+d+");\n const float invWidthScale = float("+h+");\n\n const int winHeight = int("+m+");\n const int winWidth = int("+v+");\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(floor(startRLerp - float(winHeight / 2)));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(floor(startCLerp - float(winWidth / 2)));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= "+s+") {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= "+u+") {\n continue;\n }\n\n float sourceFracRow =\n float("+c[0]+") *\n (float(dyR) / float("+l[0]+"));\n\n float sourceFracCol =\n float("+c[1]+") *\n (float(dyC) / float("+l[1]+"));\n\n int sourceNearestRow = int(min(\n float(int("+a+") - 1),\n "+n+" ? float(round(sourceFracRow)) :\n float(floor(sourceFracRow))));\n\n int sourceNearestCol = int(min(\n float(int("+o+") - 1),\n "+n+" ? float(round(sourceFracCol)) :\n float(floor(sourceFracCol))));\n\n if (r == sourceNearestRow && c == sourceNearestCol) {\n accumulator += getDy(b, dyR, dyC, d);\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n "},Hi=function(t,e,n,r){this.variableNames=["A"],this.outputShape=[];var a=t[0],o=t[1],i=t[2],s=t[3];this.outputShape=[a,e,n,s];var u=[r&&e>1?o-1:o,r&&n>1?i-1:i],c=[r&&e>1?e-1:e,r&&n>1?n-1:n],l=r?"0.5":"0.0";this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+u[0]/c[0]+",\n "+u[1]/c[1]+");\n const vec2 inputShapeRC = vec2("+o+".0, "+i+".0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestRC = ivec2(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + "+l+")));\n\n float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutput(newValue);\n }\n "},qi=function(t,e){this.variableNames=["x"];var n=t.length;if(n>4)throw new Error("WebGL backend: Reverse of rank-"+n+" tensor is not yet supported");if(this.outputShape=t,1!==n){var r=t.map((function(n,r){return function(n){return-1!==e.indexOf(n)&&1!==t[n]?t[n]+" - coords["+n+"] - 1":"coords["+n+"]"}(r)})).join(","),a=po(n);this.userCode="\n void main() {\n "+a+" coords = getOutputCoords();\n setOutput(getX("+r+"));\n }\n "}else this.userCode="\n void main() {\n int coord = getOutputCoords();\n setOutput(getX("+t[0]+" - coord - 1));\n }\n "},Ki=function(t,e){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;var n=t.length;if(n>4)throw new Error("WebGL backend: Reverse of rank-"+n+" tensor is not yet supported");this.outputShape=t;var r=Za("rc",n),a=r[n-1]+" + 1 < "+this.outputShape[n-1],o=r[n-2]+" + 1 < "+this.outputShape[n-2],i=po(n);function s(n){var r=t.map((function(r,a){return function(n,r){return-1!==e.indexOf(n)&&1!==t[n]?t[n]+" - "+r[n]+" - 1":""+r[n]}(a,n)}));return"getChannel(getX("+r.join(",")+"), vec2("+r.slice(-2).join(",")+"))"}this.userCode=1===n?"\n void main(){\n int rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = getChannel(getX("+t[0]+" - rc - 1),\n "+t[0]+" - rc - 1);\n if("+a+"){\n result.g = getChannel(getX("+t[0]+" - (rc + 1) - 1),\n "+t[0]+" - (rc + 1) - 1);\n }\n setOutput(result);\n }\n ":"\n void main() {\n "+i+" rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = "+function(t){return s(t)}(r.slice())+";\n if("+a+"){\n result.g = "+function(t){return t[n-1]="("+t[n-1]+" + 1)",s(t)}(r.slice())+";\n }\n if("+o+") {\n result.b = "+function(t){return t[n-2]="("+t[n-2]+" + 1)",s(t)}(r.slice())+";\n if("+a+") {\n result.a = "+function(t){return t[n-1]="("+t[n-1]+" + 1)",t[n-2]="("+t[n-2]+" + 1)",s(t)}(r.slice())+";\n }\n }\n setOutput(result);\n }\n "},Xi=function(t,e,n,r,a,o,i){void 0===i&&(i=!0),this.variableNames=["updates","indices","defaultValue"],this.outputShape=o;var s=po(a.length),u=po(o.length),c="";1===n?c="i":2===n&&(c="i, j");var l="getIndices("+c+")",p="";1===r?p="i":2===r&&(p="i, coords[1]");var f="getUpdates("+p+")",d=e>1?"strides[j]":"strides";this.userCode="\n "+s+" strides = "+s+"("+a+");\n\n void main() {\n "+u+" coords = getOutputCoords();\n float sum = 0.0;\n bool found = false;\n for (int i = 0; i < "+t+"; i++) {\n int flattenedIndex = 0;\n for (int j = 0; j < "+e+"; j++) {\n int index = round("+l+");\n flattenedIndex += index * "+d+";\n }\n if (flattenedIndex == coords[0]) {\n sum += "+f+";\n found = true;\n }\n }\n setOutput(mix(getDefaultValue(), sum, float(found)));\n }\n "},Yi=function(t,e){this.variableNames=["x","segmentIds"];var n=t.windowSize,r=t.batchSize,a=t.inSize,o=t.numSegments,i=o*Math.ceil(a/n);this.outputShape=[r,i];var s=4*Math.floor(n/4),u=n%4,c="\n sumValue += dot(values, segFilter);\n ",l="";a%n>0&&(l="\n if (inIdx < 0 || inIdx >= "+a+") {\n return initializationValue;\n }\n ");var p="";a%n>0&&(p="\n if (inIdx < 0 || inIdx >= "+a+") {\n return -1.0;\n }\n "),this.userCode="\n const float initializationValue = 0.0;\n\n float getValue(int batch, int inIdx) {\n "+l+"\n return getX(batch, inIdx);\n }\n\n float getSegmentIdAtIndex(int inIdx) {\n "+p+"\n return getSegmentIds(inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = int(floor(float(outIdx) / float(\n "+o+")) * float("+n+"));\n int currentSeg = int(mod(float(outIdx), float("+o+")));\n\n float sumValue = 0.0;\n\n for (int i = 0; i < "+s+"; i += 4) {\n int inIdx = inOffset + i;\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0\n );\n\n "+c+"\n }\n\n int inIdx = inOffset + "+s+";\n if ("+(1===u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n int inIdxSeg = int(getSegmentIdAtIndex(inIdx));\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n 0,\n 0,\n 0\n );\n\n "+c+"\n } else if ("+(2===u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n 0,\n 0\n );\n\n "+c+"\n } else if ("+(3===u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n 0\n );\n\n "+c+"\n }\n setOutput(sumValue);\n }\n "},$i=function(t,e,n){var r,a;if(this.variableNames=["c","a","b"],this.outputShape=e,n>4)throw Error("Where for rank "+n+" is not yet supported");if(1===n)a="resRC",r="resRC";else{for(var o=["resRC.x","resRC.y","resRC.z","resRC.w"],i=[],s=[],u=0;u<e.length;u++)s.push(""+o[u]),u<t&&i.push(""+o[u]);r=i.join(),a=s.join()}var c=po(n);this.userCode="\n void main() {\n "+c+" resRC = getOutputCoords();\n float cVal = getC("+r+");\n if (cVal >= 1.0) {\n setOutput(getA("+a+"));\n } else {\n setOutput(getB("+a+"));\n }\n }\n "},Qi=function(){function t(t){this.variableNames=["source"],this.outputShape=t,this.rank=t.length;var e,n=po(this.rank),r="uniform int start["+this.rank+"];",a=function(t){if(1===t)return"sourceLoc";if(t<=6)return Ji.slice(0,t).map((function(t){return"sourceLoc."+t})).join(",");throw Error("Slicing for rank "+t+" is not yet supported")}(this.rank);e="\n "+n+" sourceLoc;\n "+n+" coords = getOutputCoords();\n "+t.map((function(t,e){return"sourceLoc."+Ji[e]+" = start["+e+"] + coords."+Ji[e]+";"})).join("\n")+"\n ",this.userCode="\n "+r+"\n void main() {\n "+e+"\n setOutput(getSource("+a+"));\n }\n "}return t.prototype.getCustomSetupFunc=function(t){var e=this;if(t.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+t.length+")");return function(n,r){null==e.startLoc&&(e.startLoc=n.getUniformLocationNoThrow(r,"start"),null==e.startLoc)||n.gl.uniform1iv(e.startLoc,t)}},t}(),Ji=["x","y","z","w","u","v"],Zi=function(){function t(t){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.rank=t.length;var e=po(this.rank),n=Za("coords",this.rank),r=Za("sourceLoc",this.rank),a=1===this.rank?"sourceLoc":"vec2("+r.slice(-2).join()+")",o="getChannel(getSource("+r.join()+"), "+a+")",i="\n result.x = "+o+";\n if (++"+n[this.rank-1]+" < "+t[this.rank-1]+") {\n ++"+r[this.rank-1]+";\n result.y = "+o+";\n --"+r[this.rank-1]+";\n }\n ",s=1===this.rank?"":"\n --"+n[this.rank-1]+";\n if (++"+n[this.rank-2]+" < "+t[this.rank-2]+") {\n ++"+r[this.rank-2]+";\n result.z = "+o+";\n if (++"+n[this.rank-1]+" < "+t[this.rank-1]+") {\n ++"+r[this.rank-1]+";\n result.w = "+o+";\n }\n }\n ",u=this.rank<=4?"sourceLoc = coords +\n "+e+"("+t.map((function(t,e){return"start["+e+"]"})).join()+");":t.map((function(t,e){return r[e]+" = "+n[e]+" + start["+e+"];"})).join("\n");this.userCode="\n uniform int start["+this.rank+"];\n void main() {\n "+e+" coords = getOutputCoords();\n "+e+" sourceLoc;\n "+u+"\n vec4 result = vec4(0.);\n "+i+"\n "+s+"\n setOutput(result);\n }\n "}return t.prototype.getCustomSetupFunc=function(t){var e=this;if(t.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+t.length+")");return function(n,r){null==e.startLoc&&(e.startLoc=n.getUniformLocationNoThrow(r,"start"),null==e.startLoc)||n.gl.uniform1iv(e.startLoc,t)}},t}(),ts=function(t,e,n){this.variableNames=["x"],this.outputShape=n;var r=n.length,a=po(n.length),o=po(n.length),i="";if(1===r)i="coords * strides + begin";else{var s=0;i=n.map((function(t,e){return s++,1===n.length?"coords * strides["+e+"] + begin["+e+"]":"coords["+(s-1)+"] * strides["+e+"] + begin["+e+"]"})).join(",")}this.userCode="\n "+a+" begin = "+a+"("+t+");\n "+a+" strides = "+a+"("+e+");\n\n void main() {\n "+o+" coords = getOutputCoords();\n setOutput(getX("+i+"));\n }\n "},es=function(){function t(t){this.gpgpu=t,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}return t.prototype.acquireTexture=function(t,e,n){var r,a=ns(e,n),o=rs(t,a,n);if(o in this.freeTextures||(this.freeTextures[o]=[]),o in this.usedTextures||(this.usedTextures[o]=[]),this.freeTextures[o].length>0){this.numFreeTextures--,this.numUsedTextures++,this.log();var i=this.freeTextures[o].shift();return this.usedTextures[o].push(i),i}return this.numUsedTextures++,this.log(),a===jt.PACKED_2X2_FLOAT32?r=this.gpgpu.createPackedMatrixTexture(t[0],t[1]):a===jt.PACKED_2X2_FLOAT16?r=this.gpgpu.createFloat16PackedMatrixTexture(t[0],t[1]):a===jt.UNPACKED_FLOAT32?r=this.gpgpu.createFloat32MatrixTexture(t[0],t[1]):a===jt.UNPACKED_FLOAT16?r=this.gpgpu.createFloat16MatrixTexture(t[0],t[1]):a===jt.PACKED_4X1_UNSIGNED_BYTE&&(r=this.gpgpu.createUnsignedBytesMatrixTexture(t[0],t[1])),this.usedTextures[o].push(r),r},t.prototype.releaseTexture=function(t,e,n,r){if(null!=this.freeTextures){var a=rs(e,ns(n,r),r);a in this.freeTextures||(this.freeTextures[a]=[]),this.freeTextures[a].push(t),this.numFreeTextures++,this.numUsedTextures--;var o=this.usedTextures[a],i=o.indexOf(t);if(i<0)throw new Error("Cannot release a texture that was never provided by this texture manager");o.splice(i,1),this.log()}},t.prototype.log=function(){if(this.logEnabled){var t=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",this.numFreeTextures+" / "+this.numUsedTextures,"("+t+")")}},t.prototype.getNumUsedTextures=function(){return this.numUsedTextures},t.prototype.getNumFreeTextures=function(){return this.numFreeTextures},t.prototype.dispose=function(){var t=this;if(null!=this.freeTextures){for(var e in this.freeTextures)this.freeTextures[e].forEach((function(e){t.gpgpu.deleteMatrixTexture(e)}));for(var e in this.usedTextures)this.usedTextures[e].forEach((function(e){t.gpgpu.deleteMatrixTexture(e)}));this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0}},t}();function ns(t,e){if(t===Ut.UPLOAD)return jt.PACKED_2X2_FLOAT32;if(t===Ut.RENDER||null==t)return function(t){return f().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?t?jt.PACKED_2X2_FLOAT32:jt.UNPACKED_FLOAT32:t?jt.PACKED_2X2_FLOAT16:jt.UNPACKED_FLOAT16}(e);if(t===Ut.DOWNLOAD||t===Ut.PIXELS)return jt.PACKED_4X1_UNSIGNED_BYTE;throw new Error("Unknown logical texture type "+t)}function rs(t,e,n){return t[0]+"_"+t[1]+"_"+e+"_"+n}var as=function(t,e){this.variableNames=["A"];for(var n=new Array(t.length),r=0;r<n.length;r++)n[r]=t[r]*e[r];this.outputShape=n,this.rank=n.length;var a=po(this.rank),o=function(t){var e=t.length;if(e>5)throw Error("Tile for rank "+e+" is not yet supported");if(1===e)return"imod(resRC, "+t[0]+")";for(var n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],r=[],a=0;a<t.length;a++)r.push("imod("+n[a]+", "+t[a]+")");return r.join()}(t);this.userCode="\n void main() {\n "+a+" resRC = getOutputCoords();\n setOutput(getA("+o+"));\n }\n "},os=function(t,e){this.variableNames=["A"];for(var n=new Array(t.length),r=0;r<n.length;r++)n[r]=t[e[r]];this.outputShape=n,this.rank=n.length;var a=po(this.rank),o=function(t){var e=t.length;if(e>6)throw Error("Transpose for rank "+e+" is not yet supported");for(var n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],r=new Array(e),a=0;a<t.length;a++)r[t[a]]=n[a];return r.join()}(e);this.userCode="\n void main() {\n "+a+" resRC = getOutputCoords();\n setOutput(getA("+o+"));\n }\n "},is=function(t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0;for(var n=new Array(t.length),r=0;r<n.length;r++)n[r]=t[e[r]];if(this.outputShape=n,this.rank=n.length,this.rank>6)throw Error("Packed transpose for rank "+this.rank+" is not yet supported.");var a=po(this.rank),o=Ja("rc",this.rank),i=new Array(this.rank);for(r=0;r<e.length;r++)i[e[r]]=o[r];var s="vec2("+i.slice(-2).join()+")",u="++"+o[this.rank-1]+" < "+n[this.rank-1],c="getChannel(getA("+i.join()+"), "+s+")";this.userCode="\n void main() {\n "+a+" rc = getOutputCoords();\n vec4 result = vec4(0.);\n result[0] = "+c+";\n if("+u+") {\n result[1] = "+c+";\n }\n --"+o[this.rank-1]+";\n if(++"+o[this.rank-2]+" < "+n[this.rank-2]+") {\n result[2] = "+c+";\n if("+u+") {\n result[3] = "+c+";\n }\n }\n setOutput(result);\n }\n "},ss=1.7580993408473768,us=1.0507009873554805,cs=function(t,e){this.variableNames=["A"],this.outputShape=t,this.userCode="\n float unaryOperation(float x) {\n "+e+"\n }\n\n void main() {\n float x = getAAtOutCoords();\n float y = unaryOperation(x);\n\n setOutput(y);\n }\n "},ls="if (isnan(x)) return x;",ps="return abs(x);",fs=ls+"\n return (x < 0.0) ? 0.0 : x;\n",ds=ls+"\n return (x < 0.0) ? 0.0 : min(6.0, x);\n",hs="return (x >= 0.0) ? x : (exp(x) - 1.0);",ms="return -x;",vs="return ceil(x);",gs="return floor(x);",ys="return exp(x);",xs="return exp(x) - 1.0;",bs="return x;",ws="\n vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n",Cs="\n vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n",Es="\n vec4 result;\n\n result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n return result;\n",Ss=function(t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.userCode="\n vec4 unaryOperation(vec4 x) {\n "+e+"\n }\n\n void main() {\n vec4 x = getAAtOutCoords();\n vec4 y = unaryOperation(x);\n\n setOutput(y);\n }\n "},Ns=function(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=t;var e=t.length,n=Za("rc",e),r=po(e),a=function(t,e){if(1===t)return"rc";for(var n="",r=0;r<t;r++)n+=e[r],r<t-1&&(n+=",");return n}(e,n),o=n.slice(-2),i=e<=1?"rc":"vec2("+o.join(",")+")";this.userCode="\n void main() {\n "+r+" rc = getOutputCoords();\n vec4 packedInput = getA("+a+");\n\n setOutput(getChannel(packedInput, "+i+"));\n }\n "},Is={};function Rs(t,e){if(void 0===e&&(e=!1),"linear"===t)return"return x;";if("relu"===t)return e?ws:fs;if("elu"===t)return e?Es:hs;if("relu6"===t)return e?Cs:ds;if("prelu"===t)return e?Io:So;throw new Error("Activation "+t+" has not been implemented for the WebGL backend.")}var Ts=function(t){function e(e){var n,r=t.call(this)||this;if(r.pendingRead=new WeakMap,r.pendingDisposal=new WeakSet,r.dataRefCount=new WeakMap,r.numBytesInGPU=0,r.uploadWaitMs=0,r.downloadWaitMs=0,r.warnedAboutMemory=!1,r.pendingDeletes=0,r.disposed=!1,!f().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");if(null==e){var a=Kt(f().getNumber("WEBGL_VERSION"));r.binaryCache=((n=f().getNumber("WEBGL_VERSION"))in Is||(Is[n]={}),Is[n]),r.gpgpu=new Ei(a),r.canvas=a.canvas,r.gpgpuCreatedLocally=!0}else r.gpgpu=e,r.binaryCache={},r.gpgpuCreatedLocally=!1,r.canvas=e.gl.canvas;return r.textureManager=new es(r.gpgpu),r.numMBBeforeWarning=null==f().global.screen?1024:f().global.screen.height*f().global.screen.width*window.devicePixelRatio*600/1024/1024,r.texData=new pa(r,Lt),r}return s(e,t),e.prototype.numDataIds=function(){return this.texData.numDataIds()+(this.cpuBackend?this.cpuBackend.numDataIds():0)-this.pendingDeletes},e.prototype.write=function(t,e,n){if(f().getBool("DEBUG")&&this.checkNumericalProblems(t),"complex64"===n&&null!=t)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");var r={};return this.texData.set(r,{shape:e,dtype:n,values:t,usage:Ut.UPLOAD}),r},e.prototype.move=function(t,e,n,r){if(f().getBool("DEBUG")&&this.checkNumericalProblems(e),"complex64"===r)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(t,{shape:n,dtype:r,values:e,usage:Ut.UPLOAD})},e.prototype.readSync=function(t){var e=this.texData.get(t),n=e.values,r=e.dtype,a=e.complexTensors,o=e.slice,i=e.shape,s=e.isPacked;if(null!=o){var u;u=s?new Ss(i,bs):new cs(i,bs);var c=this.runWebGLProgram(u,[{dataId:t,shape:i,dtype:r}],r),l=this.readSync(c.dataId);return this.disposeData(c.dataId),l}if(null!=n)return this.convertAndCacheOnCPU(t);if("string"===r)return n;var p,f,d=null!=this.activeTimers;return d&&(p=st()),f="complex64"===r?_a(a.real.dataSync(),a.imag.dataSync()):this.getValuesFromTexture(t),d&&(this.downloadWaitMs+=st()-p),this.convertAndCacheOnCPU(t,f)},e.prototype.read=function(t){return u(this,void 0,void 0,(function(){var e,n,r,a,o,i,s,u,l,p,d,h,m,v,g,y,x,b,w,C,E,S;return c(this,(function(c){switch(c.label){case 0:if(this.pendingRead.has(t))return e=this.pendingRead.get(t),[2,new Promise((function(t){return e.push(t)}))];if(n=this.texData.get(t),r=n.values,a=n.shape,o=n.slice,i=n.dtype,s=n.complexTensors,u=n.isPacked,null!=o)return void 0,l=u?new Ss(a,bs):new cs(a,bs),p=this.runWebGLProgram(l,[{dataId:t,shape:a,dtype:i}],i),d=this.read(p.dataId),this.disposeData(p.dataId),[2,d];if(null!=r)return[2,this.convertAndCacheOnCPU(t)];if(!f().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&2===f().getNumber("WEBGL_VERSION"))throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");return h=null,"complex64"!==i&&f().get("WEBGL_BUFFER_SUPPORTED")&&(m=this.decode(t),v=this.texData.get(m.dataId),h=(S=this.gpgpu).createBufferFromTexture.apply(S,[v.texture].concat(Yt(a)))),this.pendingRead.set(t,[]),"complex64"===i?[3,2]:[4,this.gpgpu.createAndWaitForFence()];case 1:c.sent(),c.label=2;case 2:return"complex64"!==i?[3,4]:[4,Promise.all([s.real.data(),s.imag.data()])];case 3:return y=c.sent(),x=y[0],b=y[1],g=_a(x,b),[3,5];case 4:null==h?g=this.getValuesFromTexture(t):(w=D(a),g=this.gpgpu.downloadFloat32MatrixFromBuffer(h,w)),c.label=5;case 5:return null!=m&&this.disposeData(m.dataId),C=this.convertAndCacheOnCPU(t,g),E=this.pendingRead.get(t),this.pendingRead.delete(t),E.forEach((function(t){return t(C)})),this.pendingDisposal.has(t)&&(this.pendingDisposal.delete(t),this.disposeData(t),this.pendingDeletes--),[2,C]}}))}))},e.prototype.checkNumericalProblems=function(t){if(null!=t)for(var e=0;e<t.length;e++){var n=t[e];if(!Zt(n)){if(f().getBool("WEBGL_RENDER_FLOAT32_CAPABLE"))throw Error("The value "+n+" cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'");throw Error("The value "+n+" cannot be represented on this device.")}}},e.prototype.getValuesFromTexture=function(t){var e,n=this.texData.get(t),r=n.shape,a=n.dtype,o=n.isPacked,i=D(r);if(f().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")){var s=this.decode(t),u=this.texData.get(s.dataId),c=(e=this.gpgpu).downloadMatrixFromPackedTexture.apply(e,[u.texture].concat(Yt(r))).subarray(0,i);return this.disposeData(s.dataId),c}var l=f().getBool("WEBGL_PACK")&&!0===o,p=l?Te(r):r,d=l?new Jo(p):new Qo(p),h=this.runWebGLProgram(d,[{shape:p,dtype:a,dataId:t}],"float32"),m=this.texData.get(h.dataId),v=this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(m.texture,m.texShape[0],m.texShape[1]).subarray(0,i);return this.disposeData(h.dataId),v},e.prototype.time=function(t){return u(this,void 0,void 0,(function(){var e,n,r,a,o,i,s;return c(this,(function(u){switch(u.label){case 0:return e=this.activeTimers,n=[],r=!1,null==this.programTimersStack?(this.programTimersStack=n,r=!0):this.activeTimers.push(n),this.activeTimers=n,t(),a=O(this.activeTimers.map((function(t){return t.query}))).filter((function(t){return null!=t})),o=O(this.activeTimers.map((function(t){return t.name}))).filter((function(t){return null!=t})),this.activeTimers=e,r&&(this.programTimersStack=null),[4,Promise.all(a)];case 1:return i=u.sent(),s={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:R(i),getExtraProfileInfo:function(){return i.map((function(t,e){return{name:o[e],ms:t}})).map((function(t){return t.name+": "+t.ms})).join(", ")},wallMs:null},this.uploadWaitMs=0,this.downloadWaitMs=0,[2,s]}}))}))},e.prototype.memory=function(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU}},e.prototype.startTimer=function(){return f().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?this.gpgpu.beginQuery():{startMs:st(),endMs:null}},e.prototype.endTimer=function(t){return f().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(this.gpgpu.endQuery(),t):(t.endMs=st(),t)},e.prototype.getQueryTime=function(t){return u(this,void 0,void 0,(function(){var e;return c(this,(function(n){return f().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?[2,this.gpgpu.waitForQueryAndGetTime(t)]:[2,(e=t).endMs-e.startMs]}))}))},e.prototype.disposeData=function(t){if(!this.pendingDisposal.has(t)){if(this.pendingRead.has(t))return this.pendingDisposal.add(t),void this.pendingDeletes++;if(this.texData.has(t)){this.releaseGPUData(t);var e=this.texData.get(t).complexTensors;null!=e&&(e.real.dispose(),e.imag.dispose()),this.texData.delete(t)}}},e.prototype.releaseGPUData=function(t){var e=this.texData.get(t),n=e.texture,r=e.dtype,a=e.texShape,o=e.usage,i=e.isPacked,s=e.slice,u=s&&s.origDataId||t,c=this.dataRefCount.get(u);c>1?this.dataRefCount.set(u,c-1):(this.dataRefCount.delete(u),null!=n&&(this.numBytesInGPU-=this.computeBytes(a,r),this.textureManager.releaseTexture(n,a,o,i)));var l=this.texData.get(t);l.texture=null,l.texShape=null,l.isPacked=!1,l.slice=null},e.prototype.getTexture=function(t){return this.uploadToGPU(t),this.texData.get(t).texture},e.prototype.getDataInfo=function(t){return this.texData.get(t)},e.prototype.getCPUBackend=function(){return f().getBool("WEBGL_CPU_FORWARD")?(null==this.cpuBackend&&(this.cpuBackend=Lt.findBackend("cpu")),this.cpuBackend):null},e.prototype.shouldExecuteOnCPU=function(t,e){var n=this;return void 0===e&&(e=128),null!=this.getCPUBackend()&&t.every((function(t){return null==n.texData.get(t.dataId).texture&&t.size<e}))},e.prototype.getGPGPUContext=function(){return this.gpgpu},e.prototype.complex=function(t,e){var n=this.makeOutput(t.shape,"complex64");return this.texData.get(n.dataId).complexTensors={real:Lt.keep(t.clone()),imag:Lt.keep(e.clone())},n},e.prototype.real=function(t){return this.texData.get(t.dataId).complexTensors.real.clone()},e.prototype.imag=function(t){return this.texData.get(t.dataId).complexTensors.imag.clone()},e.prototype.slice=function(t,e,n){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.slice(t,e,n);if(0===D(n))return An([],n,t.dtype);var r=this.texData.get(t.dataId).isPacked,a=Zr(t.shape,e,n);if(r||!a){var o=f().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Zi(n):new Qi(n),i=o.getCustomSetupFunc(e);return this.compileAndRun(o,[t],null,i)}return this.uploadToGPU(t.dataId),this.shallowSlice(t,e,n)},e.prototype.shallowSlice=function(t,e,n){var r=this.texData.get(t.dataId),a=this.makeOutput(n,t.dtype),o=this.texData.get(a.dataId);Object.assign(o,r),o.shape=n,o.dtype=t.dtype;var i=ta(e,t.strides);r.slice&&(i+=r.slice.flatOffset),o.slice={flatOffset:i,origDataId:r.slice&&r.slice.origDataId||t.dataId};var s=this.dataRefCount.get(o.slice.origDataId)||1;return this.dataRefCount.set(o.slice.origDataId,s+1),a},e.prototype.stridedSlice=function(t,e,n,r){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.stridedSlice(t,e,n,r);var a=$r(e,n,r);if(a.some((function(t){return 0===t})))return An([],a);var o=new ts(e,r,a);return this.compileAndRun(o,[t])},e.prototype.reverse=function(t,e){var n=f().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Ki(t.shape,e):new qi(t.shape,e);return this.compileAndRun(n,[t])},e.prototype.concat=function(t,e){if("complex64"===t[0].dtype){var n=t.map((function(t){return Tn(t)})),r=t.map((function(t){return kn(t)}));return Rn(this.concat(n,e),this.concat(r,e))}if(this.shouldExecuteOnCPU(t))return this.cpuBackend.concat(t,e);if(1===t.length)return t[0];if(t.length>f().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){var a=Math.floor(t.length/2),o=this.concat(t.slice(0,a),e),i=this.concat(t.slice(a),e);return this.concat([o,i],e)}if(f().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&t[0].rank>1){var s=new Do(t.map((function(t){return t.shape})),e);return this.compileAndRun(s,t)}var u=Nn(t.map((function(t){return t.shape})),e),c=t.map((function(t){return t.as2D(-1,D(t.shape.slice(e)))})),l=new Oo(c.map((function(t){return t.shape})));return this.compileAndRun(l,c).reshape(u)},e.prototype.neg=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.neg(t);if(f().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,ms,t.dtype);var e=new cs(t.shape,ms);return this.compileAndRun(e,[t])},e.prototype.batchMatMul=function(t,e,n,r){var a=n?t.shape[2]:t.shape[1],o=r?e.shape[1]:e.shape[2],i=n?t.shape[1]:t.shape[2],s=t.shape[0];if((1===a||1===o)&&i>1e3){n&&(t=t.transpose([0,2,1])),r&&(e=e.transpose([0,2,1]));var u=1===o?t:t.as3D(s,i,1),c=1===o?2:1,l=1===o?e.as3D(s,1,i):e;return this.multiply(u,l).sum(c,!0)}var p=kt(t.dtype,e.dtype),f=new Oi(t.shape,[s,a,o],n,r);return this.compileAndRun(f,[t,e],p)},e.prototype.fusedBatchMatMul=function(t){var e=t.a,n=t.b,r=t.transposeA,a=t.transposeB,o=t.bias,i=t.activation,s=t.preluActivationWeights,u=r?e.shape[2]:e.shape[1],c=a?n.shape[1]:n.shape[2],l=e.shape[0],p=kt(e.dtype,n.dtype),f=null!=o,d=null!=s,h=i?Rs(i,!0):null,m=new Oi(e.shape,[l,u,c],r,a,f,h,d),v=[e,n];return o&&v.push(o),s&&v.push(s),this.compileAndRun(m,v,p)},e.prototype.multiply=function(t,e){if("complex64"===t.dtype){var n=this.texData.get(t.dataId),r=this.texData.get(e.dataId),a=new bo("return areal * breal - aimag * bimag;",t.shape,e.shape),o=new bo("return areal * bimag + aimag * breal;",t.shape,e.shape),i=[this.makeComplexComponentTensorInfo(t,n.complexTensors.real),this.makeComplexComponentTensorInfo(t,n.complexTensors.imag),this.makeComplexComponentTensorInfo(e,r.complexTensors.real),this.makeComplexComponentTensorInfo(e,r.complexTensors.imag)],s=this.compileAndRun(a,i),u=this.compileAndRun(o,i),c=this.complex(s,u);return s.dispose(),u.dispose(),c}if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.multiply(t,e);if(f().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,Eo,t.dtype);var l=new No(Eo,t.shape,e.shape);return this.compileAndRun(l,[t,e],t.dtype)},e.prototype.batchNormalization=function(t,e,n,r,a,o){var i=[t,e,n],s=null;null!=o&&(s=o.shape,i.push(o));var u=null;if(null!=a&&(u=a.shape,i.push(a)),f().getBool("WEBGL_PACK_NORMALIZATION")){var c=new xo(t.shape,e.shape,n.shape,s,u,r);return this.compileAndRun(c,i)}var l=new yo(t.shape,e.shape,n.shape,s,u,r);return this.compileAndRun(l,i)},e.prototype.localResponseNormalization4D=function(t,e,n,r,a){var o=f().getBool("WEBGL_PACK_NORMALIZATION")?new Ti(t.shape,e,n,r,a):new Ii(t.shape,e,n,r,a);return this.compileAndRun(o,[t])},e.prototype.LRNGrad=function(t,e,n,r,a,o,i){var s=new Ri(e.shape,r,a,o,i);return this.compileAndRun(s,[e,n,t])},e.prototype.tile=function(t,e){if("string"===t.dtype){var n=this.readSync(t.dataId).map((function(t){return lt(t)}));return qa(pr(t.shape,t.dtype,n),e)}var r=new as(t.shape,e);return this.compileAndRun(r,[t])},e.prototype.pad=function(t,e,n){var r=f().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Bi(t.shape,e,n):new Mi(t.shape,e,n);return this.compileAndRun(r,[t])},e.prototype.transpose=function(t,e){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.transpose(t,e);var n=f().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new is(t.shape,e):new os(t.shape,e);return this.compileAndRun(n,[t])},e.prototype.gather=function(t,e,n){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.gather(t,e,n);var r=new ri(t.shape,e.size,n);return this.compileAndRun(r,[t,e])},e.prototype.batchToSpaceND=function(t,e,n){T(t.rank<=4,(function(){return"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"}));var r=e.reduce((function(t,e){return t*e})),a=Wr(t.shape,e,r),o=zr(a.length,e.length),i=Ur(t.shape,e,r),s=jr(n,e.length),u=Gr(i,n,e.length);return t.reshape(a).transpose(o).reshape(i).slice(s,u)},e.prototype.spaceToBatchND=function(t,e,n){T(t.rank<=4,(function(){return"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"}));var r=e.reduce((function(t,e){return t*e})),a=[[0,0]];a.push.apply(a,n);for(var o=1+e.length;o<t.shape.length;++o)a.push([0,0]);var i=t.pad(a),s=Wr(i.shape,e,r,!1),u=zr(s.length,e.length,!1),c=Ur(i.shape,e,r,!1);return i.reshape(s).transpose(u).reshape(c)},e.prototype.reduce=function(t,e,n){var r=t.shape[0],a=t.shape[1],o=qr(a),i=new Vi({windowSize:o,inSize:a,batchSize:r},e),s=this.compileAndRun(i,[t],n);return 1===s.shape[1]?s:this.reduce(s,e,n)},e.prototype.argReduce=function(t,e,n){void 0===n&&(n=null);var r=t.shape[0],a=t.shape[1];null!=n&&(r=n.shape[0],a=n.shape[1]);var o=qr(a),i=new Qa({windowSize:o,inSize:a,batchSize:r},e,null==n),s=[t];null!=n&&s.push(n);var u=this.compileAndRun(i,s,"int32");return 1===u.shape[1]?u:this.argReduce(t,e,u)},e.prototype.argReducePacked=function(t,e,n){void 0===n&&(n=null);var r=null!=n?n.shape:t.shape,a=qr(r[r.length-1]),o=new mo(r,a,e,null==n),i=null==n?[t]:[t,n],s=this.compileAndRun(o,i,"int32");return s.rank===t.rank?this.argReducePacked(t,e,s):s},e.prototype.sum=function(t,e){bn("sum",e,t.rank);var n=yn(t.shape,e),r=n[0],a=D(n[1]),o=t.as2D(-1,a),i=At(t.dtype);return this.reduce(o,"sum",i).reshape(r)},e.prototype.prod=function(t,e){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.prod(t,e);var n=yn(t.shape,e),r=n[0],a=D(n[1]),o=t.as2D(-1,a),i=At(t.dtype);return this.reduce(o,"prod",i).reshape(r)},e.prototype.unsortedSegmentSum=function(t,e,n){var r=0,a=wn([r],t.rank),o=t;null!=a&&(o=t.transpose(a),r=En(1,t.rank)[0]);var i=function(t,e,n){for(var r=[],a=t.length,o=0;o<a;o++)o!==e?r.push(t[o]):r.push(n);return r}(o.shape,r,n),s=D([o.shape[r]]),u=o.as2D(-1,s),c=At(t.dtype),l=this.segOpCompute(u,"unsortedSegmentSum",e,c,n).reshape(i);return null!=a&&(l=l.transpose(Cn(a))),l},e.prototype.segOpCompute=function(t,e,n,r,a){var o=t.shape[0],i=t.shape[1],s=function(t,e){var n,r=!1;for(t<=30?(n=t,r=!0):n=et(t,Math.floor(Math.sqrt(t)));!r;)n>e||n===t?r=!0:n=et(t,n+1);return n}(i,a),u=new Yi({windowSize:s,inSize:i,batchSize:o,numSegments:a},e),c=this.compileAndRun(u,[t,n],r);return c.shape[1]===a?c:(n=Gn(0,a).tile([i/s]),this.segOpCompute(c,e,n,r,a))},e.prototype.argMinMaxReduce=function(t,e,n){var r=[e];if(bn("arg"+n.charAt(0).toUpperCase()+n.slice(1),r,t.rank),!f().getBool("WEBGL_PACK_REDUCE")||t.rank<=2){var a=yn(t.shape,r),o=a[0],i=D(a[1]),s=t.as2D(-1,i);return this.argReduce(s,n).reshape(o)}return this.argReducePacked(t,n)},e.prototype.argMin=function(t,e){return this.argMinMaxReduce(t,e,"min")},e.prototype.argMax=function(t,e){return this.argMinMaxReduce(t,e,"max")},e.prototype.cumsum=function(t,e,n,r){if(e!==t.rank-1)throw new Error("WebGL cumsum shader expects an inner-most axis="+(t.rank-1)+" but got axis="+e);var a=new Ho(t.shape,n,r);return this.compileAndRun(a,[t])},e.prototype.equal=function(t,e){if(f().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(equal(a, b));\n","bool");var n=new No("return float(a == b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},e.prototype.notEqual=function(t,e){if(f().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(notEqual(a, b));\n","bool");var n=new No("return float(a != b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},e.prototype.less=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.less(t,e);if(f().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(lessThan(a, b));\n","bool");var n=new No("return float(a < b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},e.prototype.lessEqual=function(t,e){if(f().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(lessThanEqual(a, b));\n","bool");var n=new No("return float(a <= b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},e.prototype.greater=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.greater(t,e);if(f().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(greaterThan(a, b));\n","bool");var n=new No("return float(a > b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},e.prototype.greaterEqual=function(t,e){if(f().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(greaterThanEqual(a, b));\n","bool");var n=new No("return float(a >= b);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},e.prototype.logicalNot=function(t){var e=new cs(t.shape,"return float(!(x >= 1.0));");return this.compileAndRun(e,[t])},e.prototype.logicalAnd=function(t,e){if(f().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n","bool");var n=new No("return float(a >= 1.0 && b >= 1.0);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},e.prototype.logicalOr=function(t,e){if(f().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return min(\n vec4(greaterThanEqual(a, vec4(1.0))) +\n vec4(greaterThanEqual(b, vec4(1.0))),\n vec4(1.0));\n","bool");var n=new No("return float(a >= 1.0 || b >= 1.0);",t.shape,e.shape);return this.compileAndRun(n,[t,e],"bool")},e.prototype.select=function(t,e,n){var r=new $i(t.rank,e.shape,e.rank);return this.compileAndRun(r,[t,e,n],kt(e.dtype,n.dtype))},e.prototype.where=function(t){pn("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead");var e=t.dataSync();return Xa(t.shape,e)},e.prototype.topk=function(t,e,n){return Ka(t.dataSync(),t.shape,t.dtype,e)},e.prototype.min=function(t,e){bn("min",e,t.rank);var n=yn(t.shape,e),r=n[0],a=D(n[1]),o=t.as2D(-1,a);return this.reduce(o,"min",o.dtype).reshape(r)},e.prototype.minimum=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.minimum(t,e);var n=f().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ro("\n vec4 result = vec4(min(a, b));\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new No("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return min(a, b);\n",t.shape,e.shape);return this.compileAndRun(n,[t,e])},e.prototype.mod=function(t,e){var n=f().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ro("\n vec4 result = mod(a, b);\n vec4 isNaN = vec4(equal(b, vec4(0.0)));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new No("if (b == 0.0) return NAN;\n return mod(a, b);",t.shape,e.shape);return this.compileAndRun(n,[t,e])},e.prototype.max=function(t,e){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.max(t,e);bn("max",e,t.rank);var n=yn(t.shape,e),r=n[0],a=D(n[1]),o=t.as2D(-1,a);return this.reduce(o,"max",o.dtype).reshape(r)},e.prototype.maximum=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.maximum(t,e);var n=f().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ro("\n vec4 result = vec4(max(a, b));\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new No("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return max(a, b);\n",t.shape,e.shape);return this.compileAndRun(n,[t,e])},e.prototype.all=function(t,e){bn("all",e,t.rank);var n=yn(t.shape,e),r=n[0],a=D(n[1]),o=t.as2D(-1,a);return this.reduce(o,"all",o.dtype).reshape(r)},e.prototype.any=function(t,e){bn("any",e,t.rank);var n=yn(t.shape,e),r=n[0],a=D(n[1]),o=t.as2D(-1,a);return this.reduce(o,"any",o.dtype).reshape(r)},e.prototype.squaredDifference=function(t,e){var n=f().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ro("return (a - b) * (a - b);",t.shape,e.shape):new No("return (a - b) * (a - b);",t.shape,e.shape);return this.compileAndRun(n,[t,e])},e.prototype.realDivide=function(t,e){if(f().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n // vec4 one = vec4(equal(a, b));\n // return one + (vec4(1.0) - one) * a / b;\n vec4 result = a / b;\n if(a.x == b.x) {\n result.x = 1.;\n }\n if(a.y == b.y) {\n result.y = 1.;\n }\n if(a.z == b.z) {\n result.z = 1.;\n }\n if(a.w == b.w) {\n result.w = 1.;\n }\n\n return result;\n","float32",!0);var n=new No("\nif (a == b) {\n return 1.0;\n};\nreturn a / b;",t.shape,e.shape);return this.compileAndRun(n,[t,e],"float32")},e.prototype.floorDiv=function(t,e){if(f().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n ivec4 ia = round(a);\n ivec4 ib = round(b);\n bvec4 cond = notEqual(ib, ivec4(0));\n ivec4 result = ivec4(0);\n vec4 s = sign(a) * sign(b);\n\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n if (cond[0]) {\n result[0] = idiv(ia[0], ib[0], s[0]);\n }\n if (cond[1]) {\n result[1] = idiv(ia[1], ib[1], s[1]);\n }\n if (cond[2]) {\n result[2] = idiv(ia[2], ib[2], s[2]);\n }\n if (cond[3]) {\n result[3] = idiv(ia[3], ib[3], s[3]);\n }\n return vec4(result);\n","int32");var n=new No("\n float s = sign(a) * sign(b);\n int ia = round(a);\n int ib = round(b);\n if (ib != 0) {\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n return float(idiv(ia, ib, s));\n } else {\n return NAN;\n }\n",t.shape,e.shape);return this.compileAndRun(n,[t,e],"int32")},e.prototype.add=function(t,e){if("complex64"===t.dtype&&"complex64"===e.dtype)return this.complexSeparableBinaryOp(t,e,wo);if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.add(t,e);var n=kt(t.dtype,e.dtype);if(f().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,wo,n);var r=new No(wo,t.shape,e.shape);return this.compileAndRun(r,[t,e],n)},e.prototype.packedUnaryOp=function(t,e,n){var r=new Ss(t.shape,e);return this.compileAndRun(r,[t],n)},e.prototype.packedBinaryOp=function(t,e,n,r,a){void 0===a&&(a=!1);var o=new Ro(n,t.shape,e.shape,a);return this.compileAndRun(o,[t,e],r)},e.prototype.complexSeparableBinaryOp=function(t,e,n){var r=this,a=this.texData.get(t.dataId),o=this.texData.get(e.dataId),i=[[a.complexTensors.real,o.complexTensors.real],[a.complexTensors.imag,o.complexTensors.imag]].map((function(a){var o=a[0],i=a[1],s=r.makeComplexComponentTensorInfo(t,o),u=r.makeComplexComponentTensorInfo(e,i),c=new No(n,t.shape,e.shape);return r.compileAndRun(c,[s,u],kt(o.dtype,i.dtype))})),s=i[0],u=i[1],c=this.complex(s,u);return s.dispose(),u.dispose(),c},e.prototype.makeComplexComponentTensorInfo=function(t,e){return{dataId:e.dataId,dtype:e.dtype,shape:t.shape}},e.prototype.addN=function(t){if(1===t.length)return t[0];if(t.length>f().get("WEBGL_MAX_TEXTURES_IN_SHADER")){var e=Math.floor(t.length/2),n=this.addN(t.slice(0,e)),r=this.addN(t.slice(e));return this.addN([n,r])}var a=t.map((function(t){return t.dtype})).reduce((function(t,e){return kt(t,e)})),o=t.map((function(t){return t.shape})),i=f().getBool("WEBGL_PACK")?new $a(t[0].shape,o):new Ya(t[0].shape,o);return this.compileAndRun(i,t,a)},e.prototype.subtract=function(t,e){if("complex64"===t.dtype&&"complex64"===e.dtype)return this.complexSeparableBinaryOp(t,e,Co);if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.subtract(t,e);var n=kt(t.dtype,e.dtype);if(f().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,Co,t.dtype);var r=new No(Co,t.shape,e.shape);return this.compileAndRun(r,[t,e],n)},e.prototype.pow=function(t,e){var n=f().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ro("\n // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.\n vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));\n vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n vec4 result = multiplier * pow(abs(a), b);\n\n // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS\n bvec4 isExpZero = equal(b, vec4(0.0));\n result.r = isExpZero.r ? 1.0 : result.r;\n result.g = isExpZero.g ? 1.0 : result.g;\n result.b = isExpZero.b ? 1.0 : result.b;\n result.a = isExpZero.a ? 1.0 : result.a;\n\n vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new No("\nif(a < 0.0 && floor(b) < b){\n return NAN;\n}\nif (b == 0.0) {\n return 1.0;\n}\nreturn (round(mod(b, 2.0)) != 1) ?\n pow(abs(a), b) : sign(a) * pow(abs(a), b);\n",t.shape,e.shape),r=kt(t.dtype,e.dtype);return this.compileAndRun(n,[t,e],r)},e.prototype.ceil=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.ceil(t);if(f().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,vs,t.dtype);var e=new cs(t.shape,vs);return this.compileAndRun(e,[t])},e.prototype.floor=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.floor(t);if(f().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,gs,t.dtype);var e=new cs(t.shape,gs);return this.compileAndRun(e,[t])},e.prototype.sign=function(t){var e=new cs(t.shape,"\n if (isnan(x)) { return 0.0; }\n return sign(x);\n");return this.compileAndRun(e,[t])},e.prototype.isNaN=function(t){var e=new cs(t.shape,"return float(isnan(x));");return this.compileAndRun(e,[t],"bool")},e.prototype.isInf=function(t){var e=new cs(t.shape,"return float(isinf(x));");return this.compileAndRun(e,[t],"bool")},e.prototype.isFinite=function(t){var e=new cs(t.shape,"return float(!isnan(x) && !isinf(x));");return this.compileAndRun(e,[t],"bool")},e.prototype.round=function(t){var e=new cs(t.shape,"\n // OpenGL ES does not support round function.\n // The algorithm is based on banker's rounding.\n float base = floor(x);\n if ((x - base) < 0.5) {\n return floor(x);\n } else if ((x - base) > 0.5) {\n return ceil(x);\n } else {\n if (mod(base, 2.0) == 0.0) {\n return base;\n } else {\n return base + 1.0;\n }\n }\n");return this.compileAndRun(e,[t])},e.prototype.exp=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.exp(t);if(f().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,ys,t.dtype);var e=new cs(t.shape,ys);return this.compileAndRun(e,[t])},e.prototype.expm1=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.expm1(t);if(f().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,xs,t.dtype);var e=new cs(t.shape,xs);return this.compileAndRun(e,[t])},e.prototype.log=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.log(t);if(f().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,"\n vec4 result = log(x);\n vec4 isNaN = vec4(lessThan(x, vec4(0.0)));\n result.r = isNaN.r == 1.0 ? NAN : result.r;\n result.g = isNaN.g == 1.0 ? NAN : result.g;\n result.b = isNaN.b == 1.0 ? NAN : result.b;\n result.a = isNaN.a == 1.0 ? NAN : result.a;\n\n return result;\n",t.dtype);var e=new cs(t.shape,"if (x < 0.0) return NAN;\n return log(x);");return this.compileAndRun(e,[t])},e.prototype.log1p=function(t){var e=new cs(t.shape,"return log(1.0 + x);");return this.compileAndRun(e,[t])},e.prototype.sqrt=function(t){var e=new cs(t.shape,"return sqrt(x);");return this.compileAndRun(e,[t])},e.prototype.rsqrt=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.rsqrt(t);var e=new cs(t.shape,"return inversesqrt(x);");return this.compileAndRun(e,[t])},e.prototype.reciprocal=function(t){var e=new cs(t.shape,"return 1.0 / x;");return this.compileAndRun(e,[t])},e.prototype.relu=function(t){var e;return e=f().getBool("WEBGL_PACK")?new Ss(t.shape,ws):new cs(t.shape,fs),this.compileAndRun(e,[t])},e.prototype.relu6=function(t){var e;return e=f().getBool("WEBGL_PACK")?new Ss(t.shape,Cs):new cs(t.shape,ds),this.compileAndRun(e,[t])},e.prototype.prelu=function(t,e){var n=f().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ro(Io,t.shape,e.shape):new No(So,t.shape,e.shape);return this.compileAndRun(n,[t,e])},e.prototype.elu=function(t){if(f().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,Es,t.dtype);var e=new cs(t.shape,hs);return this.compileAndRun(e,[t])},e.prototype.eluDer=function(t,e){var n=f().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ro("\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n",t.shape,e.shape):new No("return (b >= 1.0) ? a : a * (b + 1.0);",t.shape,e.shape);return this.compileAndRun(n,[t,e])},e.prototype.selu=function(t){var e=new cs(t.shape,"\n // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n // see: https://arxiv.org/abs/1706.02515\n float scaleAlpha = 1.7580993408473768;\n float scale = 1.0507009873554805;\n return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n");return this.compileAndRun(e,[t])},e.prototype.int=function(t){var e=new cs(t.shape,"return float(int(x));");return this.compileAndRun(e,[t],"int32")},e.prototype.clip=function(t,e,n){var r,a=(r=f().getBool("WEBGL_PACK_CLIP")?new ko(t.shape):new To(t.shape)).getCustomSetupFunc(e,n);return this.compileAndRun(r,[t],null,a)},e.prototype.abs=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.abs(t);if(f().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,ps,t.dtype);var e=new cs(t.shape,ps);return this.compileAndRun(e,[t])},e.prototype.complexAbs=function(t){var e=this.texData.get(t.dataId),n=new Ao(t.shape),r=[this.makeComplexComponentTensorInfo(t,e.complexTensors.real),this.makeComplexComponentTensorInfo(t,e.complexTensors.imag)];return this.compileAndRun(n,r)},e.prototype.sigmoid=function(t){var e=new cs(t.shape,"return 1.0 / (1.0 + exp(-1.0 * x));");return this.compileAndRun(e,[t])},e.prototype.softplus=function(t){var e=new cs(t.shape,"\n float epsilon = 1.1920928955078125e-7;\n float threshold = log(epsilon) + 2.0;\n\n bool too_large = x > -threshold;\n bool too_small = x < threshold;\n\n float result;\n float exp_x = exp(x);\n\n if (too_large){\n result = x;\n }\n else if (too_small){\n result = exp_x;\n }\n else{\n result = log(exp_x + 1.0);\n }\n return result;\n");return this.compileAndRun(e,[t])},e.prototype.sin=function(t){var e=new cs(t.shape,"if (isnan(x)) return x;\n return sin(x);\n");return this.compileAndRun(e,[t])},e.prototype.cos=function(t){var e=new cs(t.shape,"if (isnan(x)) return x;\n return cos(x);\n");return this.compileAndRun(e,[t])},e.prototype.tan=function(t){var e=new cs(t.shape,"return tan(x);");return this.compileAndRun(e,[t])},e.prototype.asin=function(t){var e=new cs(t.shape,"if (isnan(x)) return x;\n if (abs(x) > 1.) {\n return NAN;\n }\n return asin(x);\n");return this.compileAndRun(e,[t])},e.prototype.acos=function(t){var e=new cs(t.shape,"if (isnan(x)) return x;\n if (abs(x) > 1.) {\n return NAN;\n }\n return acos(x);\n");return this.compileAndRun(e,[t])},e.prototype.atan=function(t){var e=new cs(t.shape,"if (isnan(x)) return x;\n return atan(x);\n");return this.compileAndRun(e,[t])},e.prototype.atan2=function(t,e){var n=f().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ro("\n vec4 result = atan(a, b);\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new No("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return atan(a, b);\n",t.shape,e.shape);return this.compileAndRun(n,[t,e])},e.prototype.sinh=function(t){var e=new cs(t.shape,"\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n");return this.compileAndRun(e,[t])},e.prototype.cosh=function(t){var e=new cs(t.shape,"\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n");return this.compileAndRun(e,[t])},e.prototype.tanh=function(t){var e=new cs(t.shape,"\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n");return this.compileAndRun(e,[t])},e.prototype.asinh=function(t){var e=new cs(t.shape,"if (isnan(x)) return x;return log(x + sqrt(x * x + 1.0));");return this.compileAndRun(e,[t])},e.prototype.acosh=function(t){var e=new cs(t.shape,"if (isnan(x)) return x;\n if (x < 1.0) return NAN;\n return log(x + sqrt(x * x - 1.0));");return this.compileAndRun(e,[t])},e.prototype.atanh=function(t){var e=new cs(t.shape,"if (isnan(x)) return x;\n if ((x < -1.0) || (x > 1.0)) return NAN;\n return (log(1.0 + x) - log(1.0 - x)) / 2.0;");return this.compileAndRun(e,[t])},e.prototype.erf=function(t){var e=new cs(t.shape,'\n // Error function is calculated approximately with elementary function.\n // See "Handbook of Mathematical Functions with Formulas,\n // Graphs, and Mathematical Tables", Abramowitz and Stegun.\n float p = 0.3275911;\n float a1 = 0.254829592;\n float a2 = -0.284496736;\n float a3 = 1.421413741;\n float a4 = -1.453152027;\n float a5 = 1.061405429;\n\n float sign = sign(x);\n x = abs(x);\n float t = 1.0 / (1.0 + p * x);\n return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x));\n');return this.compileAndRun(e,[t])},e.prototype.step=function(t,e){var n=new cs(t.shape,function(t){return void 0===t&&(t=0),ls+"\n return x > 0.0 ? 1.0 : float("+t+");\n "}(e));return this.compileAndRun(n,[t])},e.prototype.conv2dByMatMul=function(t,e,n,r,a,o){var i=t.shape,s=this.texData.get(t.dataId),u=n.inChannels,c=i[0]*i[1]*i[2],l=n.outChannels,p="channelsLast"===n.dataFormat,d=(1===c||1===l)&&u>1e3,h=i[2]%2!=0&&!!s.isPacked;if(d||!f().getBool("WEBGL_LAZILY_UNPACK")||!f().getBool("WEBGL_PACK_BINARY_OPERATIONS")||!h){var m=p?i[0]*i[1]*i[2]:i[0]*i[2]*i[3],v=this.reshape(t,[1,m,n.inChannels]),g=this.reshape(e,[1,n.inChannels,n.outChannels]);return this.reshape(this.fusedBatchMatMul({a:v,b:g,transposeA:!1,transposeB:!1,bias:r,activation:a,preluActivationWeights:o}),n.outShape)}var y=p?i[0]*i[1]*(i[2]+1):i[0]*i[2]*(i[3]+1),x={dataId:t.dataId,shape:[1,y,n.inChannels],dtype:t.dtype},b=s.shape;s.shape=s.shape.slice(),s.shape[s.shape.length-2]++,T(Oe(s.shape,x.shape),(function(){return"packed reshape "+s.shape+" to "+x.shape+" isn't free"}));var w=this.reshape(e,[1,n.inChannels,n.outChannels]),C=this.fusedBatchMatMul({a:x,b:w,transposeA:!1,transposeB:!1,bias:r,activation:a,preluActivationWeights:o}),E=this.texData.get(C.dataId);return T(E.isPacked,(function(){return"batchMatMul result is expected to be packed"})),s.shape=b,E.shape=n.outShape,Lt.makeTensorFromDataId(C.dataId,n.outShape,C.dtype)},e.prototype.conv2dWithIm2Row=function(t,e,n,r,a,o){var i=n.filterWidth,s=n.filterHeight,u=n.inChannels,c=n.outWidth,l=n.outHeight,p="channelsLast"===n.dataFormat,f=i*s*u,d=l*c,h=[f,d],m=t.squeeze([0]),v=e.reshape([1,f,-1]),g=new Ni(h,m.shape,n),y=this.compileAndRun(g,[m]).reshape([1,h[0],h[1]]),x=null!=r,b=null!=o,w=a?Rs(a,!0):null,C=new Oi(y.shape,[1,d,n.outChannels],!0,!1,x,w,b),E=[y,v];r&&E.push(r),b&&E.push(o);var S=this.compileAndRun(C,E);return p?S.reshape([1,l,c,n.outChannels]):S.reshape([1,n.outChannels,l,c])},e.prototype.fusedConv2d=function(t){var e=t.input,n=t.filter,r=t.convInfo,a=t.bias,o=t.activation,i=t.preluActivationWeights;if(1===r.filterHeight&&1===r.filterWidth&&1===r.dilationHeight&&1===r.dilationWidth&&1===r.strideHeight&&1===r.strideWidth&&("SAME"===r.padInfo.type||"VALID"===r.padInfo.type))return this.conv2dByMatMul(e,n,r,a,o,i);if(f().getBool("WEBGL_CONV_IM2COL")&&1===e.shape[0])return this.conv2dWithIm2Row(e,n,r,a,o,i);var s=null!=a,u=null!=i,c=o?Rs(o,!1):null,l=new Wo(r,s,c,u),p=[e,n];return a&&p.push(a),i&&p.push(i),this.compileAndRun(l,p)},e.prototype.conv2d=function(t,e,n){if(1===n.filterHeight&&1===n.filterWidth&&1===n.dilationHeight&&1===n.dilationWidth&&1===n.strideHeight&&1===n.strideWidth&&("SAME"===n.padInfo.type||"VALID"===n.padInfo.type))return this.conv2dByMatMul(t,e,n);if(f().getBool("WEBGL_CONV_IM2COL")&&1===t.shape[0])return this.conv2dWithIm2Row(t,e,n);var r=new Wo(n);return this.compileAndRun(r,[t,e])},e.prototype.conv2dDerInput=function(t,e,n){var r=new Mo(n);return this.compileAndRun(r,[t,e])},e.prototype.conv2dDerFilter=function(t,e,n){var r=new Fo(n);return this.compileAndRun(r,[t,e])},e.prototype.fusedDepthwiseConv2D=function(t){var e,n=t.input,r=t.filter,a=t.convInfo,o=t.bias,i=t.activation,s=t.preluActivationWeights,u=f().getBool("WEBGL_PACK_DEPTHWISECONV")&&a.strideWidth<=2&&a.outChannels/a.inChannels==1,c=i?Rs(i,u):null,l=[n,r],p=null!=o,d=null!=s;return p&&l.push(o),d&&l.push(s),u?(e=new jo(a,p,c,d),this.compileAndRun(e,l)):(e=new Uo(a,p,c,d),this.compileAndRun(e,l))},e.prototype.depthwiseConv2D=function(t,e,n){var r;return f().getBool("WEBGL_PACK_DEPTHWISECONV")&&n.strideWidth<=2&&n.outChannels/n.inChannels==1?(r=new jo(n),this.compileAndRun(r,[t,e])):(r=new Uo(n),this.compileAndRun(r,[t,e]))},e.prototype.depthwiseConv2DDerInput=function(t,e,n){var r=new Vo(n);return this.compileAndRun(r,[t,e])},e.prototype.depthwiseConv2DDerFilter=function(t,e,n){var r=new Lo(n);return this.compileAndRun(r,[t,e])},e.prototype.conv3d=function(t,e,n){var r=new zo(n);return this.compileAndRun(r,[t,e])},e.prototype.conv3dDerInput=function(t,e,n){var r=new Po(n);return this.compileAndRun(r,[t,e])},e.prototype.conv3dDerFilter=function(t,e,n){var r=new Bo(n);return this.compileAndRun(r,[t,e])},e.prototype.maxPool=function(t,e){var n=new Pi(e,"max",!1);return this.compileAndRun(n,[t])},e.prototype.avgPool=function(t,e){var n=new Pi(e,"avg",!1);return this.compileAndRun(n,[t],"float32")},e.prototype.maxPoolBackprop=function(t,e,n,r){var a=new Pi(r,"max",!0),o=this.compileAndRun(a,[e]),i=new ki(r),s=this.compileAndRun(i,[t,o],e.dtype);return o.dispose(),s},e.prototype.avgPoolBackprop=function(t,e,n){var r=new vo(n);return this.compileAndRun(r,[t],e.dtype)},e.prototype.cast=function(t,e){return ka(t,e,this)},e.prototype.unstack=function(t,e){for(var n=t.shape[e],r=new Array(t.rank-1),a=0,o=0;o<t.rank;o++)o!==e&&(r[a++]=t.shape[o]);var i=new Array(t.rank).fill(0),s=t.shape.slice();s[e]=1;var u=new Array(n);for(o=0;o<u.length;o++)i[e]=o,u[o]=this.slice(t,i,s).reshape(r);return u},e.prototype.avgPool3d=function(t,e){var n=new Li(e,"avg",!1);return this.compileAndRun(n,[t],"float32")},e.prototype.avgPool3dBackprop=function(t,e,n){var r=new go(n);return this.compileAndRun(r,[t],e.dtype)},e.prototype.maxPool3d=function(t,e){var n=new Li(e,"max",!1);return this.compileAndRun(n,[t],"float32")},e.prototype.maxPool3dBackprop=function(t,e,n,r){var a=new Li(r,"max",!0),o=this.compileAndRun(a,[e]),i=new Ai(r),s=this.compileAndRun(i,[t,o],e.dtype);return o.dispose(),s},e.prototype.reshape=function(t,e){var n=this.texData.get(t.dataId);if(n.isPacked&&!Oe(t.shape,e)&&(null===n.texture||!Oe(n.shape,e))){var r=this.packedReshape(t,e);return Lt.makeTensorFromDataId(r.dataId,r.shape,r.dtype)}return Aa(t,e)},e.prototype.resizeBilinear=function(t,e,n,r){var a=f().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new ji(t.shape,e,n,r):new Ui(t.shape,e,n,r);return this.compileAndRun(a,[t],"float32")},e.prototype.resizeBilinearBackprop=function(t,e,n){var r=new zi(t,e,n);return this.compileAndRun(r,[t])},e.prototype.resizeNearestNeighbor=function(t,e,n,r){var a=new Hi(t.shape,e,n,r);return this.compileAndRun(a,[t])},e.prototype.resizeNearestNeighborBackprop=function(t,e,n){var r=new Gi(t,e,n);return this.compileAndRun(r,[t])},e.prototype.multinomial=function(t,e,n,r){var a=e?t:ca(t),o=a.shape[0],i=a.shape[1],s=new Di(o,i,n),u=s.getCustomSetupFunc(r);return this.compileAndRun(s,[a],"int32",u)},e.prototype.oneHot=function(t,e,n,r){var a=new _i(t.size,e,n,r);return this.compileAndRun(a,[t])},e.prototype.diag=function(t){var e=new $o(t.size);return this.compileAndRun(e,[t])},e.prototype.nonMaxSuppression=function(t,e,n,r,a){return pn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"),Va(t.dataSync(),e.dataSync(),n,r,a)},e.prototype.cropAndResize=function(t,e,n,r,a,o){var i=new Go(t.shape,e.shape,r,a,o);return this.compileAndRun(i,[t,e,n],"float32")},e.prototype.depthToSpace=function(t,e,n){T(e>1,(function(){return"blockSize should be > 1 for depthToSpace, but was: "+e}));var r=t.shape[0],a="NHWC"===n?t.shape[1]:t.shape[2],o="NHWC"===n?t.shape[2]:t.shape[3],i="NHWC"===n?t.shape[3]:t.shape[1],s=a*e,u=o*e,c=i/(e*e),l=new Yo("NHWC"===n?[r,s,u,c]:[r,c,s,u],e,n);return this.compileAndRun(l,[t])},e.prototype.split=function(t,e,n){return Ha(t,e,n)},e.prototype.scatterND=function(t,e,n){var r=Kr(0,t,n),a=r.sliceRank,o=r.numUpdates,i=r.sliceSize,s=r.strides,u=r.outputSize,c=[u/i,i],l=t.reshape([o,a]),p=e.reshape([o,i]);if(0===u)return Aa(An([]),n);var f=Dn(0),d=new Xi(o,a,l.rank,p.rank,s,c);return this.compileAndRun(d,[p,l,f]).reshape(n)},e.prototype.sparseToDense=function(t,e,n,r){var a=Kr(0,t,n),o=a.sliceRank,i=a.numUpdates,s=a.strides,u=a.outputSize,c=new Xi(i,o,t.rank,e.rank,s,[u,1],!1);return this.compileAndRun(c,[e,t,r]).reshape(n)},e.prototype.fft=function(t){return this.fftImpl(t,!1)},e.prototype.ifft=function(t){return this.fftImpl(t,!0)},e.prototype.fftImpl=function(t,e){var n=this.texData.get(t.dataId),r=new ei("return real * expR - imag * expI;",t.shape,e),a=new ei("return real * expI + imag * expR;",t.shape,e),o=[this.makeComplexComponentTensorInfo(t,n.complexTensors.real),this.makeComplexComponentTensorInfo(t,n.complexTensors.imag)],i=this.compileAndRun(r,o),s=this.compileAndRun(a,o),u=this.complex(i,s).as2D(t.shape[0],t.shape[1]);return i.dispose(),s.dispose(),u},e.prototype.gatherND=function(t,e){var n=e.shape,r=n[n.length-1],a=Hr(t,e),o=a[0],i=a[1],s=a[2],u=a[3],c=e.reshape([i,r]),l=t.reshape([t.size/s,s]),p=new ai(r,u,[i,s]);return this.compileAndRun(p,[l,c]).reshape(o)},e.prototype.fill=function(t,e,n){if("string"===(n=n||Z(e))){var r=j(n,D(t));return r.fill(e),Lt.makeTensor(r,t,n,this)}var a=new ni(t,e),o=a.getCustomSetupFunc(e);return this.compileAndRun(a,[],n,o)},e.prototype.onesLike=function(t){if("string"===t.dtype)throw new Error("onesLike is not supported under string dtype");return this.fill(t.shape,1,t.dtype)},e.prototype.zerosLike=function(t){return this.fill(t.shape,"string"===t.dtype?"":0,t.dtype)},e.prototype.linspace=function(t,e,n){return Oa(t,e,n)},e.prototype.makeTensorInfo=function(t,e){var n=this.write(null,t,e);return this.texData.get(n).usage=null,{dataId:n,shape:t,dtype:e}},e.prototype.makeOutput=function(t,e){var n=this.makeTensorInfo(t,e).dataId;return Lt.makeTensorFromDataId(n,t,e,this)},e.prototype.unpackTensor=function(t){var e=new Ns(t.shape);return this.runWebGLProgram(e,[t],t.dtype)},e.prototype.packTensor=function(t){var e=new Fi(t.shape);return this.runWebGLProgram(e,[t],t.dtype,null,!0)},e.prototype.packedReshape=function(t,e){var n=[Ie(t.shape)].concat(Re(t.shape)),r={dtype:t.dtype,shape:n,dataId:t.dataId},a=[Ie(e)].concat(Re(e)),o=new Wi(a,n),i=this.runWebGLProgram(o,[r],t.dtype,null,!0);return{dataId:i.dataId,shape:e,dtype:i.dtype}},e.prototype.decode=function(t){var e,n=this.texData.get(t),r=n.isPacked,a=n.shape,o=n.dtype,i=Te(a);return e=r?new Xo(i):new Ko(i),{dtype:o,shape:a,dataId:this.runWebGLProgram(e,[{shape:i,dtype:o,dataId:t}],o,null,!0).dataId}},e.prototype.runWebGLProgram=function(t,e,n,r,a){var o=this;void 0===a&&(a=!1);var i=this.makeTensorInfo(t.outputShape,n),s=this.texData.get(i.dataId);if(t.packedOutput&&(s.isPacked=!0),t.outPackingScheme===zt.DENSE){var u=Yt(t.outputShape);s.texShape=u.map((function(t){return 2*t}))}if(null!=t.outTexUsage&&(s.usage=t.outTexUsage),0===D(i.shape))return s.values=U(i.dtype,0),i;var c=[],l=e.map((function(e){if("complex64"===e.dtype)throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");var n=o.texData.get(e.dataId);if(null==n.texture){if(!t.packedInputs&&D(e.shape)<=f().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:e.shape,texData:null,isUniform:!0,uniformValues:n.values};t.packedInputs&&(n.isPacked=!0,n.shape=e.shape)}else if(!!n.isPacked!=!!t.packedInputs)e=n.isPacked?o.unpackTensor(e):o.packTensor(e),c.push(e),n=o.texData.get(e.dataId);else if(n.isPacked&&!Oe(n.shape,e.shape)){var r=e,a=e.shape;e.shape=n.shape,e=o.packedReshape(e,a),c.push(e),n=o.texData.get(e.dataId),r.shape=a}return o.uploadToGPU(e.dataId),{shape:e.shape,texData:n,isUniform:!1}}));this.uploadToGPU(i.dataId);var p,d={shape:i.shape,texData:s,isUniform:!1},h=function(t,e,n){var r="";e.concat(n).forEach((function(t){var e=null!=t.texData&&null!=t.texData.slice&&t.texData.slice.flatOffset>0,n=t.isUniform?"uniform":t.texData.texShape;r+=t.shape+"_"+n+"_"+e}));var a=t.userCode;return t.constructor.name+"_"+r+"_"+a}(t,l,d),m=this.getAndSaveBinary(h,(function(){return function(t,e,n,r){var a=e.userCode,o=n.map((function(t,n){var r={logicalShape:t.shape,texShape:t.isUniform?null:t.texData.texShape,isUniform:t.isUniform,isPacked:!t.isUniform&&t.texData.isPacked,flatOffset:null};return null!=t.texData&&null!=t.texData.slice&&t.texData.slice.flatOffset>0&&(r.flatOffset=t.texData.slice.flatOffset),{name:e.variableNames[n],shapeInfo:r}})),i=o.map((function(t){return t.shapeInfo})),s={logicalShape:r.shape,texShape:r.texData.texShape,isUniform:!1,isPacked:r.texData.isPacked,flatOffset:null},u=ao(o,s,a,e.packedInputs),c=t.createProgram(u),l=null,p=t.getUniformLocation(c,"NAN",!1);1===f().getNumber("WEBGL_VERSION")&&(l=t.getUniformLocation(c,"INFINITY",!1));for(var d={},h=0;h<e.variableNames.length;h++){var m=e.variableNames[h];d[m]=t.getUniformLocation(c,m,!1),d["offset"+m]=t.getUniformLocation(c,"offset"+m,!1)}return{program:e,source:u,webGLProgram:c,uniformLocations:d,inShapeInfos:i,outShapeInfo:s,infLoc:l,nanLoc:p}}(o.gpgpu,t,l,d)})),v=null!=this.activeTimers;if(v&&(p=this.startTimer()),function(t,e,n,r,a){Si(e.inShapeInfos,n),Si([e.outShapeInfo],[r]);var o=r.texData.texture,i=r.texData.texShape;r.texData.isPacked?t.setOutputPackedMatrixTexture(o,i[0],i[1]):t.setOutputMatrixTexture(o,i[0],i[1]),t.setProgram(e.webGLProgram),1===f().getNumber("WEBGL_VERSION")&&null!==e.infLoc&&t.gl.uniform1f(e.infLoc,1/0),null!==e.nanLoc&&t.gl.uniform1f(e.nanLoc,NaN),n.forEach((function(n,r){var a=e.program.variableNames[r],o=e.uniformLocations[a],i=e.uniformLocations["offset"+a];if(null!=o)if(n.isUniform)if(D(n.shape)<2)t.gl.uniform1f(o,n.uniformValues[0]);else{var s=n.uniformValues;s instanceof Float32Array||(s=new Float32Array(s)),t.gl.uniform1fv(o,s)}else null!=n.texData.slice&&null!=i&&t.gl.uniform1i(i,n.texData.slice.flatOffset),t.setInputMatrixTexture(n.texData.texture,o,r)})),null!=a&&a(t,e.webGLProgram),t.executeProgram()}(this.gpgpu,m,l,d,r),c.forEach((function(t){return o.disposeData(t.dataId)})),v&&(p=this.endTimer(p),this.activeTimers.push({name:t.constructor.name,query:this.getQueryTime(p)})),!f().getBool("WEBGL_LAZILY_UNPACK")&&s.isPacked&&!1===a){var g=this.unpackTensor(i);return this.disposeData(i.dataId),g}return i},e.prototype.compileAndRun=function(t,e,n,r,a){void 0===a&&(a=!1),n=n||e[0].dtype;var o=this.runWebGLProgram(t,e,n,r,a);return Lt.makeTensorFromDataId(o.dataId,o.shape,o.dtype)},e.prototype.getAndSaveBinary=function(t,e){return t in this.binaryCache||(this.binaryCache[t]=e()),this.binaryCache[t]},e.prototype.getTextureManager=function(){return this.textureManager},e.prototype.dispose=function(){var t=this;this.disposed||(f().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach((function(e){t.gpgpu.deleteProgram(t.binaryCache[e].webGLProgram),delete t.binaryCache[e]})),this.textureManager.dispose(),null!=this.canvas&&"undefined"!=typeof HTMLCanvasElement&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)},e.prototype.floatPrecision=function(){var t=this;return null==this.floatPrecisionValue&&(this.floatPrecisionValue=Qe((function(){if(!f().get("WEBGL_RENDER_FLOAT32_ENABLED")){var e=f().getBool("DEBUG");f().set("DEBUG",!1);var n=t.abs(Dn(1e-8)).dataSync()[0];if(f().set("DEBUG",e),n>0)return 32}return 16}))),this.floatPrecisionValue},e.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},e.prototype.uploadToGPU=function(t){var e,n=this.texData.get(t),r=n.shape,a=n.dtype,o=n.values,i=n.texture,s=n.usage,u=n.isPacked;if(null==i){var c,l=null!=this.activeTimers;l&&(c=st());var p=n.texShape;if(null==p&&(p=ke(r,u),n.texShape=p),null!=o){var f=Te(r),d=void 0,h=p[1],m=p[0],v=o instanceof Uint8Array;u?(h=(e=$t(p[0],p[1]))[0],m=e[1],d=new ti(f,[m,h],v)):d=new Zo(f,[m,h],v);var g=this.makeTensorInfo([m,h],a);this.texData.get(g.dataId).usage=v?Ut.PIXELS:Ut.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(g.dataId),h,m,o);var y=this.runWebGLProgram(d,[g],a,null,!0),x=this.texData.get(y.dataId);n.texture=x.texture,n.texShape=x.texShape,n.isPacked=x.isPacked,n.usage=x.usage,this.disposeData(g.dataId),this.texData.delete(y.dataId),n.values=null,l&&(this.uploadWaitMs+=st()-c)}else{var b=this.acquireTexture(p,s,a,u);n.texture=b}}},e.prototype.convertAndCacheOnCPU=function(t,e){var n=this.texData.get(t),r=n.dtype;return this.releaseGPUData(t),null!=e&&(n.values=function(t,e){if("float32"===e||"complex64"===e)return t;if("int32"===e||"bool"===e){for(var n="int32"===e?new Int32Array(t.length):new Uint8Array(t.length),r=0;r<n.length;++r)n[r]=Math.round(t[r]);return n}throw new Error("Unknown dtype "+e)}(e,r)),n.values},e.prototype.acquireTexture=function(t,e,n,r){if(this.numBytesInGPU+=this.computeBytes(t,n),!this.warnedAboutMemory&&this.numBytesInGPU>1024*this.numMBBeforeWarning*1024){var a=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn("High memory usage in GPU: "+a+" MB, most likely due to a memory leak")}return this.textureManager.acquireTexture(t,e,r)},e.prototype.computeBytes=function(t,e){return t[0]*t[1]*X(e)},e}(fa);Vt()&&Lt.registerBackend("webgl",(function(){return new Ts}),2),b({kernelName:"Square",gradFunc:function(t,e){var n=e[0];return{x:function(){return t.mul(n.toFloat().mul(2))}}}});var ks=In({square_:function(t){var e=hn(t,"x","square"),n=[e];return Lt.runKernelFunc((function(t,n){return n([e]),t.square(e)}),{x:e},null,"Square",{},n,[])}}),As=In({abs_:function(t){var e=hn(t,"x","abs");return"complex64"===e.dtype?Lt.runKernelFunc((function(t){return t.complexAbs(e)}),{$x:e}):Lt.runKernelFunc((function(t,n){var r=t.abs(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return{x:function(){return t.mul(n.toFloat().step(-1))}}}),"Abs")}}),Os=In({acos_:function(t){var e=hn(t,"x","acos");return Lt.runKernelFunc((function(t,n){var r=t.acos(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.divStrict(Dn(1).sub(n.toFloat().square()).sqrt()).neg()}}}))}}),Ds=In({acosh_:function(t){var e=hn(t,"x","acosh");return Lt.runKernelFunc((function(t,n){var r=t.acosh(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.divStrict(n.toFloat().square().sub(1).sqrt())}}}))}}),_s=In({asin_:function(t){var e=hn(t,"x","asin");return Lt.runKernelFunc((function(t,n){var r=t.asin(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.divStrict(Dn(1).sub(n.toFloat().square()).sqrt())}}}))}}),Fs=In({asinh_:function(t){var e=hn(t,"x","asinh");return Lt.runKernelFunc((function(t,n){var r=t.asinh(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.divStrict(Dn(1).add(n.toFloat().square()).sqrt())}}}))}}),Ms=In({atan_:function(t){var e=hn(t,"x","atan");return Lt.runKernelFunc((function(t,n){var r=t.atan(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.div(n.toFloat().square().add(1))}}}))}}),Bs=In({atanh_:function(t){var e=hn(t,"x","atanh");return Lt.runKernelFunc((function(t,n){var r=t.atanh(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.div(Dn(1).sub(n.toFloat().square()))}}}))}}),Ps=In({ceil_:function(t){var e=hn(t,"x","ceil");return Lt.runKernelFunc((function(t){return t.ceil(e)}),{$x:e},(function(t){return{$x:function(){return qn(t)}}}))}}),Ls=In({clipByValue_:function(t,e,n){var r=hn(t,"x","clipByValue");T(e<=n,(function(){return"Error in clip: min ("+e+") must be less than or equal to max ("+n+")."}));var a=[r],o={min:e,max:n};return Lt.runKernelFunc((function(t,a){var o=t.clip(r,e,n);return a([r]),o}),{x:r},(function(t,r){var a=r[0];return{x:function(){return t.where(a.greaterEqual(e).logicalAnd(a.lessEqual(n)),qn(t))}}}),"ClipByValue",o,a)}}),Vs=In({cos_:function(t){var e=hn(t,"x","cos"),n=[e];return Lt.runKernelFunc((function(t,n){var r=t.cos(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return{x:function(){return n.toFloat().sin().neg().mul(t)}}}),"Cos",{},n)}}),Ws=In({cosh_:function(t){var e=hn(t,"x","cosh");return Lt.runKernelFunc((function(t,n){var r=t.cosh(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return n.toFloat().sinh().mulStrict(t)}}}))}}),zs=In({erf_:function(t){var e=hn(t,"x","erf");return T("int32"===e.dtype||"float32"===e.dtype,(function(){return"Input dtype must be `int32` or `float32`."})),"int32"===e.dtype&&(e=e.toFloat()),Lt.runKernelFunc((function(t,n){var r=t.erf(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.mul(n.square().neg().exp().mul(2/Math.sqrt(Math.PI)))}}}))}}),Us=In({exp_:function(t){var e=hn(t,"x","exp");return Lt.runKernelFunc((function(t,n){var r=t.exp(e);return n([r]),r}),{x:e},(function(t,e){return{x:function(){return t.mulStrict(e[0])}}}),"Exp",{},[],[!0])}}),js=In({expm1_:function(t){var e=hn(t,"x","expm1");return Lt.runKernelFunc((function(t,n){var r=t.expm1(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.mul(n.exp())}}}))}}),Gs=In({floor_:function(t){var e=hn(t,"x","floor");return Lt.runKernelFunc((function(t){return t.floor(e)}),{$x:e},(function(t){return{$x:function(){return qn(t)}}}))}}),Hs=In({log_:function(t){var e=hn(t,"x","log"),n=[e];return Lt.runKernelFunc((function(t,n){var r=t.log(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return{x:function(){return t.div(n.toFloat())}}}),"Log",{},n)}}),qs=In({log1p_:function(t){var e=hn(t,"x","log1p");return Lt.runKernelFunc((function(t,n){var r=t.log1p(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.div(n.add(1))}}}))}}),Ks=In({logSigmoid_:function(t){var e=hn(t,"x","logSigmoid");return Lt.runKernelFunc((function(t,n){var r=t.softplus(e.neg()).neg();return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.mul(n.neg().sigmoid())}}}))}}),Xs=In({neg_:function(t){var e=hn(t,"x","neg");return Lt.runKernelFunc((function(t){return t.neg(e)}),{$x:e},(function(t){return{$x:function(){return t.neg()}}}))}}),Ys=In({reciprocal_:function(t){var e=hn(t,"x","reciprocal");return Lt.runKernelFunc((function(t,n){var r=t.reciprocal(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.div(n.square().neg())}}}))}}),$s=In({round_:function(t){var e=hn(t,"x","round");return Lt.runKernelFunc((function(t){return t.round(e)}),{$x:e},(function(t){return{$x:function(){return qn(t)}}}))}}),Qs=In({rsqrt_:function(t){var e=hn(t,"x","rsqrt"),n=[e];return Lt.runKernelFunc((function(t,n){var r=t.rsqrt(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return{x:function(){return t.div(n.pow(1.5).mul(2)).neg()}}}),"Rsqrt",{},n)}}),Js=In({sigmoid_:function(t){var e=hn(t,"x","sigmoid");return Lt.runKernelFunc((function(t,n){var r=t.sigmoid(e);return n([r]),r}),{x:e},(function(t,e){var n=e[0];return{x:function(){return t.mul(n.mul(Dn(1).sub(n)))}}}),"Sigmoid")}}),Zs=In({sign_:function(t){var e=hn(t,"x","sign");return Lt.runKernelFunc((function(t){return t.sign(e)}),{$x:e},(function(t){return{$x:function(){return qn(t)}}}))}}),tu=In({isNaN_:function(t){var e=hn(t,"x","isNaN");return Lt.runKernelFunc((function(t){return t.isNaN(e)}),{$x:e},(function(t){return{$x:function(){return qn(t)}}}))}}),eu=In({isInf_:function(t){var e=hn(t,"x","isInf");return Lt.runKernelFunc((function(t){return t.isInf(e)}),{$x:e},(function(t){return{$x:function(){return qn(t)}}}))}}),nu=In({isFinite_:function(t){var e=hn(t,"x","isFinite");return Lt.runKernelFunc((function(t){return t.isFinite(e)}),{$x:e},(function(t){return{$x:function(){return qn(t)}}}))}}),ru=In({sin_:function(t){var e=hn(t,"x","sin"),n=[e];return Lt.runKernelFunc((function(t,n){var r=t.sin(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return{x:function(){return n.toFloat().cos().mul(t)}}}),"Sin",{},n)}}),au=In({sinh_:function(t){var e=hn(t,"x","sinh");return Lt.runKernelFunc((function(t,n){var r=t.sinh(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return n.toFloat().cosh().mulStrict(t)}}}))}}),ou=In({softplus_:function(t){var e=hn(t,"x","softplus");return Lt.runKernelFunc((function(t,n){var r=t.softplus(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.mul(n.sigmoid())}}}))}}),iu=In({sqrt_:function(t){var e=hn(t,"x","sqrt");return Lt.runKernelFunc((function(t,n){var r=t.sqrt(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.div(n.toFloat().sqrt().mul(2))}}}))}}),su=In({step_:function(t,e){void 0===e&&(e=0);var n=hn(t,"x","step");return Lt.runKernelFunc((function(t){return t.step(n,e)}),{$x:n},(function(t){return{$x:function(){return qn(t)}}}))}}),uu=In({tan_:function(t){var e=hn(t,"x","tan");return Lt.runKernelFunc((function(t,n){var r=t.tan(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return t.div(n.cos().square())}}}))}}),cu=In({tanh_:function(t){var e=hn(t,"x","tanh");return Lt.runKernelFunc((function(t,n){var r=t.tanh(e);return n([r]),r}),{x:e},(function(t,e){var n=e[0];return{x:function(){return Dn(1).sub(n.square()).mulStrict(t)}}}),"Tanh",{},null,[!0])}});function lu(t,e,n,r,a,o){var i,s,u=hn(t,"x","batchNorm"),c=hn(e,"mean","batchNorm"),l=hn(n,"variance","batchNorm");return null!=a&&(i=hn(a,"scale","batchNorm")),null!=r&&(s=hn(r,"offset","batchNorm")),T(2===u.rank,(function(){return"Error in batchNorm3D: x must be rank 3 but got rank "+u.rank+"."})),T(2===c.rank||1===c.rank,(function(){return"Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank "+c.rank+"."})),T(2===l.rank||1===l.rank,(function(){return"Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank "+l.rank+"."})),null!=i&&T(2===i.rank||1===i.rank,(function(){return"Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank "+i.rank+"."})),null!=s&&T(2===s.rank||1===s.rank,(function(){return"Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank "+s.rank+"."})),du(u,c,l,s,i,o)}function pu(t,e,n,r,a,o){var i,s,u=hn(t,"x","batchNorm"),c=hn(e,"mean","batchNorm"),l=hn(n,"variance","batchNorm");return null!=a&&(i=hn(a,"scale","batchNorm")),null!=r&&(s=hn(r,"offset","batchNorm")),T(3===u.rank,(function(){return"Error in batchNorm3D: x must be rank 3 but got rank "+u.rank+"."})),T(3===c.rank||1===c.rank,(function(){return"Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank "+c.rank+"."})),T(3===l.rank||1===l.rank,(function(){return"Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank "+l.rank+"."})),null!=i&&T(3===i.rank||1===i.rank,(function(){return"Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank "+i.rank+"."})),null!=s&&T(3===s.rank||1===s.rank,(function(){return"Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank "+s.rank+"."})),du(u,c,l,s,i,o)}function fu(t,e,n,r,a,o){var i,s,u=hn(t,"x","batchNorm"),c=hn(e,"mean","batchNorm"),l=hn(n,"variance","batchNorm");return null!=a&&(i=hn(a,"scale","batchNorm")),null!=r&&(s=hn(r,"offset","batchNorm")),T(4===u.rank,(function(){return"Error in batchNorm4D: x must be rank 4 but got rank "+u.rank+"."})),T(4===c.rank||1===c.rank,(function(){return"Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank "+c.rank+"."})),T(4===l.rank||1===l.rank,(function(){return"Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank "+l.rank+"."})),null!=i&&T(4===i.rank||1===i.rank,(function(){return"Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank "+i.rank+"."})),null!=s&&T(4===s.rank||1===s.rank,(function(){return"Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank "+s.rank+"."})),du(u,c,l,s,i,o)}function du(t,e,n,r,a,o){null==o&&(o=.001);var i,s,u,c=hn(t,"x","batchNorm"),l=hn(e,"mean","batchNorm"),p=hn(n,"variance","batchNorm");null!=a&&(i=hn(a,"scale","batchNorm")),null!=r&&(s=hn(r,"offset","batchNorm")),T(l.rank===p.rank,(function(){return"Batch normalization gradient requires mean and variance to have equal ranks."})),T(null==s||l.rank===s.rank,(function(){return"Batch normalization gradient requires mean and offset to have equal ranks."})),T(null==i||l.rank===i.rank,(function(){return"Batch normalization gradient requires mean and scale to have equal ranks."})),u=0===c.rank||1===c.rank?c.as4D(1,1,1,c.size):2===c.rank?c.as4D(1,1,c.shape[0],c.shape[1]):3===c.rank?c.as4D(1,c.shape[0],c.shape[1],c.shape[2]):c;var f=[c,l,p,i];return Lt.runKernelFunc((function(t,e){var n=t.batchNormalization(u,hu(l),hu(p),o,hu(i),hu(s));return e([c,l,p,i]),n}),{x:c,mean:l,variance:p,scale:i,offset:s},(function(t,e){var n=e,r=n[0],a=n[1],i=n[2],s=n[3],c=null==s?Dn(1):s,l=ma(a.shape,u.shape),p=[];if(1===a.rank){for(var f=0;f<u.shape.length-1;++f)p.push(u.shape[f]);p.push(1)}var d=r.sub(a),h=t.mul(c),m=Qs(i.add(Dn(o))),v=m.mul(m).mul(m).mul(Dn(-.5));return{x:function(){return 1===a.rank?t.mul(Br(m.as4D(1,1,1,a.shape[0]),p)).mul(c).reshape(r.shape):t.mul(m).mul(c).reshape(r.shape)},mean:function(){var t=m.mul(Dn(-1)).mul(h);return 1===a.rank&&(t=t.sum(l)),t.reshape(a.shape)},variance:function(){var t=v.mul(d).mul(h);return 1===a.rank&&(t=t.sum(l)),t.reshape(a.shape)},scale:function(){var e=d.mul(m),n=t.mul(e);return 1===a.rank&&(n=n.sum(l)),n.reshape(a.shape)},offset:function(){var e=t;return 1===a.rank&&(e=e.sum(l)),e.reshape(a.shape)}}}),"BatchNormalization",{varianceEpsilon:o},f).reshape(c.shape)}function hu(t){return null==t?null:0===t.rank?t.as1D():1===t.rank?t:2===t.rank?t.as4D(1,1,t.shape[0],t.shape[1]):3===t.rank?t.as4D(1,t.shape[0],t.shape[1],t.shape[2]):t}function mu(){qe("tf.batchNormalization() is going away. Use tf.batchNorm() instead, and note the positional argument change of scale, offset, and varianceEpsilon")}var vu=In({batchNormalization2d_:function(t,e,n,r,a,o){return void 0===r&&(r=.001),mu(),lu(t,e,n,o,a,r)}}),gu=In({batchNormalization3d_:function(t,e,n,r,a,o){return void 0===r&&(r=.001),mu(),pu(t,e,n,o,a,r)}}),yu=In({batchNormalization4d_:function(t,e,n,r,a,o){return void 0===r&&(r=.001),mu(),fu(t,e,n,o,a,r)}}),xu=In({batchNormalization_:function(t,e,n,r,a,o){return void 0===r&&(r=.001),mu(),du(t,e,n,o,a,r)}}),bu=In({batchNorm_:du}),wu=In({batchNorm2d_:lu}),Cu=In({batchNorm3d_:pu}),Eu=In({batchNorm4d_:fu}),Su=In({logicalAnd_:function(t,e){var n=hn(t,"a","logicalAnd","bool"),r=hn(e,"b","logicalAnd","bool");return va(n.shape,r.shape),Lt.runKernelFunc((function(t){return t.logicalAnd(n,r)}),{a:n,b:r},null,"LogicalAnd")}}),Nu=In({logicalNot_:function(t){var e=hn(t,"x","logicalNot","bool");return Lt.runKernelFunc((function(t){return t.logicalNot(e)}),{$x:e})}}),Iu=In({logicalOr_:function(t,e){var n=hn(t,"a","logicalOr","bool"),r=hn(e,"b","logicalOr","bool");return va(n.shape,r.shape),Lt.runKernelFunc((function(t){return t.logicalOr(n,r)}),{$a:n,$b:r})}}),Ru=In({logicalXor_:function(t,e){var n=hn(t,"a","logicalXor","bool"),r=hn(e,"b","logicalXor","bool");return va(n.shape,r.shape),Iu(t,e).logicalAnd(Su(t,e).logicalNot())}}),Tu=In({where_:function(t,e,n){var r=hn(e,"a","where"),a=hn(n,"b","where"),o=hn(t,"condition","where","bool");return k(r.shape,a.shape,"Error in where: "),1===o.rank?T(o.shape[0]===r.shape[0],(function(){return"The first dimension of `a` must match the size of `condition`."})):k(o.shape,a.shape,"Error in where: "),Lt.runKernelFunc((function(t,e){var n=t.select(o,r,a);return e([o]),n}),{$condition:o,$a:r,$b:a},(function(t,e){var n=e[0];return{$condition:function(){return qn(n).toFloat()},$a:function(){return t.mul(n.cast(t.dtype))},$b:function(){return t.mul(n.logicalNot().cast(t.dtype))}}}))}}),ku=function(t){return u(this,void 0,void 0,(function(){var e,n,r;return c(this,(function(a){switch(a.label){case 0:return[4,(e=hn(t,"condition","whereAsync","bool")).data()];case 1:return n=a.sent(),r=Xa(e.shape,n),t!==e&&e.dispose(),[2,r]}}))}))},Au=In({add_:function(t,e){var n,r=hn(t,"a","add"),a=hn(e,"b","add");n=Ot(r,a),r=n[0],a=n[1];var o=va(r.shape,a.shape);return Lt.runKernelFunc((function(t){return t.add(r,a)}),{a:r,b:a},(function(t){return{a:function(){var e=t,n=ma(r.shape,o);return n.length>0&&(e=e.sum(n)),e.reshape(r.shape)},b:function(){var e=t,n=ma(a.shape,o);return n.length>0&&(e=e.sum(n)),e.reshape(a.shape)}}}),"Add")}}),Ou=In({addN_:function(t){T(Array.isArray(t),(function(){return"The argument passed to tf.addN() must be a list of tensors"})),T(t.length>=1,(function(){return"Must pass at least one tensor to tf.addN(), but got "+t.length}));var e=t.map((function(t,e){return hn(t,"tensors"+e,"addN")})),n=e[0];e.forEach((function(t){if(t.dtype!==n.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")})),e.forEach((function(t){if(!_(t.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")}));var r=e;return Lt.runKernelFunc((function(t){return t.addN(e)}),r,(function(t){var n={};return e.forEach((function(e,r){n[r]=function(){return t.clone()}})),n}),"AddN")}}),Du=In({addStrict_:function(t,e){var n=hn(t,"a","addStrict"),r=hn(e,"b","addStrict");return k(n.shape,r.shape,"Error in addStrict: "),n.add(r)}}),_u=In({atan2_:function(t,e){var n,r=hn(t,"a","atan2"),a=hn(e,"b","atan2");n=Ot(r,a),r=n[0],a=n[1];var o=va(r.shape,a.shape);return Lt.runKernelFunc((function(t,e){var n=t.atan2(r,a);return e([r,a]),n}),{$a:r,$b:a},(function(t,e){var n=e[0],r=e[1];return{$a:function(){var e=Au(n.square(),r.square()),a=t.mul(r.div(e)),i=ma(n.shape,o);return i.length>0&&(a=a.sum(i)),a.reshape(n.shape)},$b:function(){var e=Au(n.square(),r.square()),a=Xs(t.mul(n.div(e))),i=ma(r.shape,o);return i.length>0&&(a=a.sum(i)),a.reshape(r.shape)}}}))}}),Fu=In({div_:function(t,e){var n,r=hn(t,"a","div"),a=hn(e,"b","div");if(n=Ot(r,a),r=n[0],a=n[1],"int32"===r.dtype&&"int32"===a.dtype)return Pu(r,a);var o=va(r.shape,a.shape);return Lt.runKernelFunc((function(t,e){var n=t.realDivide(r,a);return e([r,a]),n}),{a:r,b:a},(function(t,e){var n=e[0],r=e[1];return{a:function(){var e=t.div(r.toFloat()),a=ma(n.shape,o);return a.length>0?e.sum(a).reshape(n.shape):e},b:function(){var e=t.mul(n.toFloat()),a=ma(r.shape,o);a.length>0&&(e=e.sum(a).reshape(r.shape));var i=r.square();return e.div(i.toFloat()).neg()}}}),"Div")}}),Mu=In({divNoNan_:function(t,e){var n,r=hn(t,"a","div"),a=hn(e,"b","div");r=(n=Ot(r,a))[0],a=n[1];var o=Fu(r,a),i=qn(o),s=a.equal(i);return Tu(s,i,o)}}),Bu=In({divStrict_:function(t,e){var n=hn(t,"a","div"),r=hn(e,"b","div");return k(n.shape,r.shape,"Error in divideStrict: "),n.div(r)}}),Pu=In({floorDiv_:function(t,e){var n,r=hn(t,"a","floorDiv"),a=hn(e,"b","floorDiv");n=Ot(r,a),r=n[0],a=n[1];var o=va(r.shape,a.shape);return Lt.runKernelFunc((function(t,e){var n=t.floorDiv(r,a);return e([r,a]),n}),{a:r,b:a},(function(t,e){var n=e[0],r=e[1];return{a:function(){var e=t.div(r.toFloat()),a=ma(n.shape,o);return a.length>0?e.sum(a).reshape(n.shape):e},b:function(){var e=t.mul(n.toFloat()),a=ma(r.shape,o);a.length>0&&(e=e.sum(a).reshape(r.shape));var i=r.square();return e.div(i.toFloat()).neg()}}}),"FloorDiv")}}),Lu=In({maximum_:function(t,e){var n,r=hn(t,"a","maximum"),a=hn(e,"b","maximum");return n=Ot(r,a),r=n[0],a=n[1],"bool"===r.dtype&&(r=r.toInt(),a=a.toInt()),va(r.shape,a.shape),Lt.runKernelFunc((function(t,e){var n=t.maximum(r,a);return e([r,a]),n}),{a:r,b:a},(function(t,e){var n=e[0],r=e[1];return{a:function(){return t.mul(n.greaterEqual(r).toFloat())},b:function(){return t.mul(n.less(r).toFloat())}}}),"Maximum")}}),Vu=In({maximumStrict_:function(t,e){var n=hn(t,"a","maximumStrict"),r=hn(e,"b","maximumStrict");return k(n.shape,r.shape,"Error in maximumStrict: "),n.maximum(r)}}),Wu=In({minimum_:function(t,e){var n,r=hn(t,"a","minimum"),a=hn(e,"b","minimum");return n=Ot(r,a),r=n[0],a=n[1],"bool"===r.dtype&&(r=r.toInt(),a=a.toInt()),va(r.shape,a.shape),Lt.runKernelFunc((function(t,e){var n=t.minimum(r,a);return e([r,a]),n}),{a:r,b:a},(function(t,e){var n=e[0],r=e[1];return{a:function(){return t.mul(n.lessEqual(r).toFloat())},b:function(){return t.mul(n.greater(r).toFloat())}}}),"Minimum")}}),zu=In({minimumStrict_:function(t,e){var n=hn(t,"a","minimumStrict"),r=hn(e,"b","minimumStrict");return k(n.shape,r.shape,"Error in minimumStrict: "),n.minimum(r)}}),Uu=In({mod_:function(t,e){var n,r=hn(t,"a","mod"),a=hn(e,"b","mod");n=Ot(r,a),r=n[0],a=n[1];var o=va(r.shape,a.shape);return Lt.runKernelFunc((function(t,e){var n=t.mod(r,a);return e([r,a]),n}),{$a:r,$b:a},(function(t,e){var n=e[0],r=e[1];return{$a:function(){var e=ma(n.shape,o);return e.length>0?t.sum(e).reshape(n.shape):t},$b:function(){var e=t.mul(n.div(r).floor().neg()),a=ma(r.shape,o);return a.length>0?e.sum(a).reshape(r.shape):e}}}))}}),ju=In({modStrict_:function(t,e){var n=hn(t,"a","modStrict"),r=hn(e,"b","modStrict");return k(n.shape,r.shape,"Error in modStrict: "),n.mod(r)}}),Gu=In({mul_:function(t,e){var n,r=hn(t,"a","mul"),a=hn(e,"b","mul");n=Ot(r,a),r=n[0],a=n[1];var o=va(r.shape,a.shape);return Lt.runKernelFunc((function(t,e){var n=t.multiply(r,a);return e([r,a]),n}),{a:r,b:a},(function(t,e){var n=e[0],r=e[1];return{a:function(){var e=t.mul(r.toFloat()),a=ma(n.shape,o);return a.length>0?e.sum(a).reshape(n.shape):e},b:function(){var e=t.mul(n.toFloat()),a=ma(r.shape,o);return a.length>0?e.sum(a).reshape(r.shape):e}}}),"Mul")}}),Hu=In({mulStrict_:function(t,e){var n=hn(t,"a","mul"),r=hn(e,"b","mul");return k(n.shape,r.shape,"Error in multiplyStrict: "),n.mul(r)}}),qu=In({pow_:function(t,e){var n=hn(t,"base","pow"),r=hn(e,"exp","pow"),a=va(n.shape,r.shape);return t=n.cast(kt(n.dtype,r.dtype)),e=r.cast(kt(n.dtype,r.dtype)),Lt.runKernelFunc((function(t,e){var a=t.pow(n,r);return e([n,r,a]),a}),{$base:n,$exp:r},(function(t,e){var n=e[0],r=e[1],o=e[2];return{$base:function(){var e=r.toFloat(),o=t.mul(e.mul(n.pow(e.sub(Dn(1))))),i=ma(n.shape,a);return i.length>0&&(o=o.sum(i)),o.reshape(n.shape)},$exp:function(){var e=n.greater(0),i=n.log().where(e,qn(n)),s=t.mul(o.mul(i)),u=ma(r.shape,a);return u.length>0&&(s=s.sum(u)),s.reshape(r.shape)}}}))}}),Ku=In({powStrict_:function(t,e){return k(t.shape,e.shape,"Error in powStrict: "),t.pow(e)}}),Xu=In({squaredDifference_:function(t,e){var n,r=hn(t,"a","squaredDifference"),a=hn(e,"b","squaredDifference");return n=Ot(r,a),r=n[0],a=n[1],va(r.shape,a.shape),Lt.runKernelFunc((function(t,e){var n=t.squaredDifference(r,a);return e([r,a]),n}),{$a:r,$b:a},(function(t,e){var n=e[0],r=e[1],a=Dn(2);return{$a:function(){return t.mul(n.sub(r).mul(a))},$b:function(){return t.mul(r.sub(n).mul(a))}}}))}}),Yu=In({squaredDifferenceStrict_:function(t,e){var n=hn(t,"a","squaredDifferenceStrict"),r=hn(e,"b","squaredDifferenceStrict");return k(n.shape,r.shape,"Error in squaredDifferenceStrict: "),n.squaredDifference(r)}}),$u=In({sub_:function(t,e){var n,r=hn(t,"a","sub"),a=hn(e,"b","sub");n=Ot(r,a),r=n[0],a=n[1];var o=va(r.shape,a.shape);return Lt.runKernelFunc((function(t){return t.subtract(r,a)}),{a:r,b:a},(function(t){return{a:function(){var e=t,n=ma(r.shape,o);return n.length>0&&(e=e.sum(n)),e.reshape(r.shape)},b:function(){var e=t,n=ma(a.shape,o);return n.length>0&&(e=e.sum(n)),e.neg().reshape(a.shape)}}}),"Sub")}}),Qu=In({subStrict_:function(t,e){var n=hn(t,"a","subStrict"),r=hn(e,"b","subStrict");return k(n.shape,r.shape,"Error in subStrict: "),n.sub(r)}}),Ju=In({equal_:function(t,e){var n,r=hn(t,"a","equal"),a=hn(e,"b","equal");return n=Ot(r,a),r=n[0],a=n[1],va(r.shape,a.shape),Lt.runKernelFunc((function(t){return t.equal(r,a)}),{$a:r,$b:a})}}),Zu=In({equalStrict_:function(t,e){var n=hn(t,"a","equalStrict"),r=hn(e,"b","equalStrict");return k(n.shape,r.shape,"Error in equalStrict: "),n.equal(r)}}),tc=In({greater_:function(t,e){var n,r=hn(t,"a","greater"),a=hn(e,"b","greater");return n=Ot(r,a),r=n[0],a=n[1],va(r.shape,a.shape),Lt.runKernelFunc((function(t){return t.greater(r,a)}),{a:r,b:a},null,"Greater")}}),ec=In({greaterEqual_:function(t,e){var n,r=hn(t,"a","greaterEqual"),a=hn(e,"b","greaterEqual");return n=Ot(r,a),r=n[0],a=n[1],va(r.shape,a.shape),Lt.runKernelFunc((function(t,e){var n=t.greaterEqual(r,a);return e([r,a]),n}),{a:r,b:a},(function(t,e){var n=e[0],r=e[1];return{a:function(){return qn(n)},b:function(){return qn(r)}}}),"GreaterEqual")}}),nc=In({greaterEqualStrict_:function(t,e){var n=hn(t,"a","greaterEqualStrict"),r=hn(e,"b","greaterEqualStrict");return k(n.shape,r.shape,"Error in greaterEqualStrict: "),n.greaterEqual(r)}}),rc=In({greaterStrict_:function(t,e){var n=hn(t,"a","greaterStrict"),r=hn(e,"b","greaterStrict");return k(n.shape,r.shape,"Error in greaterStrict: "),n.greater(r)}}),ac=In({less_:function(t,e){var n,r=hn(t,"a","less"),a=hn(e,"b","less");return n=Ot(r,a),r=n[0],a=n[1],va(r.shape,a.shape),Lt.runKernelFunc((function(t){return t.less(r,a)}),{a:r,b:a},null,"Less")}}),oc=In({lessEqual_:function(t,e){var n,r=hn(t,"a","lessEqual"),a=hn(e,"b","lessEqual");return n=Ot(r,a),r=n[0],a=n[1],va(r.shape,a.shape),Lt.runKernelFunc((function(t,e){var n=t.lessEqual(r,a);return e([r,a]),n}),{a:r,b:a},null,"LessEqual")}}),ic=In({lessEqualStrict_:function(t,e){var n=hn(t,"a","lessEqualStrict"),r=hn(e,"b","lessEqualStrict");return k(n.shape,r.shape,"Error in lessEqualStrict: "),n.lessEqual(r)}}),sc=In({lessStrict_:function(t,e){var n=hn(t,"a","lessStrict"),r=hn(e,"b","lessStrict");return k(n.shape,r.shape,"Error in lessStrict: "),n.less(r)}}),uc=In({notEqual_:function(t,e){var n,r=hn(t,"a","notEqual"),a=hn(e,"b","notEqual");return n=Ot(r,a),r=n[0],a=n[1],va(r.shape,a.shape),Lt.runKernelFunc((function(t){return t.notEqual(r,a)}),{$a:r,$b:a})}}),cc=In({notEqualStrict_:function(t,e){var n=hn(t,"a","notEqualStrict"),r=hn(e,"b","notEqualStrict");return k(n.shape,r.shape,"Error in notEqualStrict: "),n.notEqual(r)}});function lc(t,e){for(var n=[],r=t;r<e;++r)n.push(r);return n}function pc(t){for(var e=[],n=0;n<t.length;++n)for(var r=0;r<t[n].length;++r)e.push(t[n][r]);return e}var fc=In({gather_:function(t,e,n){void 0===n&&(n=0);var r=hn(t,"x","gather"),a=hn(e,"indices","gather","int32");n=W(n,r.shape)[0];var o=function(t,e,n){for(var r=t.shape[n],a=[],o=1,i=1,s=0;s<n;s++)a.push(t.shape[s]),o*=t.shape[s];for(s=0;s<e.rank;s++)a.push(e.shape[s]);for(s=n+1;s<t.rank;s++)a.push(t.shape[s]),i*=t.shape[s];return{batchSize:o,sliceSize:i,dimSize:r,outputShape:a}}(r,a,n);return Lt.runKernelFunc((function(t,e){var o=t.gather(r,a.flatten(),n);return e([a]),o}),{$x:r},(function(t,e){var a=e[0];return{$x:function(){var e=r.shape,o=a.size,i=e.slice(0,n),s=i.length,u=e.slice(n,e.length).slice(1),c=u.length,l=lc(0,s),p=lc(s+1,s+1+c),f=pc([i,[o],u]),d=t.reshape(f),h=a.reshape([o]),m=pc([[s],l,p]),v=d.transpose(m),g=dc(v,h,r.shape[n]),y=Cn(m);return g.transpose(y)}}})).reshape(o.outputShape)}}),dc=In({unsortedSegmentSum_:function(t,e,n){var r=hn(t,"x","unsortedSegmentSum"),a=hn(e,"segmentIds","unsortedSegmentSum","int32");return T(F(n),(function(){return"numSegments must be of dtype int"})),Lt.runKernelFunc((function(t,e){var o=t.unsortedSegmentSum(r,a,n);return e([a]),o}),{$x:r},(function(t,e){var n=e[0];return{$x:function(){return function(t,e){for(var n=Lu(e,qn(e)),r=fc(t,n),a=ec(e,Dn(0,"int32")),o=r.rank-a.rank,i=0;i<o;++i)a=xr(a,i+1);a=Su(a,Wn(r.shape,"bool"));var s=qn(r);return Tu(a,r,s)}(t,n)}}}))}}),hc=function(t,e,n){return u(this,void 0,void 0,(function(){var r,a,o,i,s,u,l,p,f,d,h,m,v;return c(this,(function(c){switch(c.label){case 0:for(r=hn(t,"tensor","boolMask"),a=hn(e,"mask","boolMask","bool"),o=null==n?0:n,i=a.rank,s=r.shape,T(i>0,(function(){return"mask cannot be scalar"})),k(s.slice(o,o+i),a.shape,"mask's shape must match the first K dimensions of tensor's shape,"),u=1,l=o;l<o+i;l++)u*=s[l];return p=s.slice(0,o).concat([u],s.slice(o+i)),f=r.reshape(p),d=a.reshape([-1]),[4,ku(d)];case 1:return h=c.sent(),m=h.squeeze([1]),v=fc(f,m,o),t!==r&&r.dispose(),e!==a&&a.dispose(),m.dispose(),f.dispose(),d.dispose(),h.dispose(),[2,v]}}))}))};function mc(t,e,n,r,a,o,i){void 0===o&&(o="NHWC"),T(t.length===e.rank,(function(){return"Length of inShape ("+t.length+") and rank of dy ("+e.rank+") must match"}));var s=t,u=e,c=!1;3===e.rank&&(c=!0,u=e.as4D(1,e.shape[0],e.shape[1],e.shape[2]),s=[1,t[0],t[1],t[2]]),T(4===s.length,(function(){return"Error in conv2dDerInput: inShape must be length 4, but got length "+s.length+"."})),T(4===u.rank,(function(){return"Error in conv2dDerInput: dy must be rank 4, but got rank "+u.rank})),T(4===n.rank,(function(){return"Error in conv2dDerInput: filter must be rank 4, but got rank "+n.rank}));var l="NHWC"===o?s[3]:s[1],p="NHWC"===o?u.shape[3]:u.shape[1];T(l===n.shape[2],(function(){return"Error in conv2dDerInput: depth of input ("+l+") must match input depth for filter "+n.shape[2]+"."})),T(p===n.shape[3],(function(){return"Error in conv2dDerInput: depth of output ("+p+") must match output depth for filter "+n.shape[3]+"."})),null!=i&&T(F(a),(function(){return"Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+a+"."}));var f=Ta(o),d=xa(s,n.shape,r,1,a,i,!1,f),h=Lt.runKernelFunc((function(t,e){var r=t.conv2dDerInput(u,n,d);return e([n,u]),r}),{dy4D:u,filter:n},(function(t,e){var n=e[0],s=e[1];return{dy4D:function(){return xc(t,n,r,a,o,1,i)},filter:function(){return wc(t,s,n.shape,r,a,o,i)}}}));return c?h.as3D(h.shape[1],h.shape[2],h.shape[3]):h}function vc(t){var e=function(t){return"number"==typeof t?[t,t,t]:2===t.length?[t[0],t[1],1]:t}(t),n=e[0],r=e[1],a=e[2];return 1===n&&1===r&&1===a}function gc(t,e,n,r,a){T(t.length===e.rank,(function(){return"Length of inShape ("+t.length+") and rank of dy ("+e.rank+") must match"}));var o=t,i=e,s=!1;4===e.rank&&(s=!0,i=e.as5D(1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]),o=[1,t[0],t[1],t[2],t[3]]);var u=o[4],c=i.shape[4];T(5===o.length,(function(){return"Error in conv3dDerInput: inShape must be length 5, but got length "+o.length+"."})),T(5===i.rank,(function(){return"Error in conv3dDerInput: dy must be rank 5, but got rank "+i.rank})),T(5===n.rank,(function(){return"Error in conv3dDerInput: filter must be rank 5, but got rank "+n.rank})),T(u===n.shape[3],(function(){return"Error in conv3dDerInput: depth of input ("+u+") must match input depth for filter "+n.shape[3]+"."})),T(c===n.shape[4],(function(){return"Error in conv3dDerInput: depth of output ("+c+") must match output depth for filter "+n.shape[4]+"."}));var l=ba(o,n.shape,r,1,a),p=Lt.runKernelFunc((function(t){return t.conv3dDerInput(i,n,l)}),{dy5D:i});return s?p.as4D(p.shape[1],p.shape[2],p.shape[3],p.shape[4]):p}var yc=In({conv1d_:function(t,e,n,r,a,o,i){void 0===a&&(a="NWC"),void 0===o&&(o=1);var s=hn(t,"x","conv1d"),u=hn(e,"filter","conv1d"),c=s,l=!1;2===s.rank&&(l=!0,c=s.as3D(1,s.shape[0],s.shape[1])),T(3===c.rank,(function(){return"Error in conv1d: input must be rank 3, but got rank "+c.rank+"."})),T(3===u.rank,(function(){return"Error in conv1d: filter must be rank 3, but got rank "+u.rank+"."})),null!=i&&T(F(r),(function(){return"Error in conv1d: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+r+"."})),T(c.shape[2]===u.shape[1],(function(){return"Error in conv1d: depth of input ("+c.shape[2]+") must match input depth for filter "+u.shape[1]+"."})),T(Ra(n,o),(function(){return"Error in conv1D: Either stride or dilation must be 1. Got stride "+n+" and dilation '"+o+"'"})),T("NWC"===a,(function(){return"Error in conv1d: got dataFormat of "+a+" but only NWC is currently supported."}));var p=u.as4D(1,u.shape[0],u.shape[1],u.shape[2]),f=c.as4D(c.shape[0],1,c.shape[1],c.shape[2]),d=xc(f,p,[1,n],r,"NHWC",[1,o],i);return l?d.as2D(d.shape[2],d.shape[3]):d.as3D(d.shape[0],d.shape[2],d.shape[3])}}),xc=In({conv2d_:function(t,e,n,r,a,o,i){void 0===a&&(a="NHWC"),void 0===o&&(o=[1,1]);var s=hn(t,"x","conv2d"),u=hn(e,"filter","conv2d"),c=s,l=!1;3===s.rank&&(l=!0,c=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),T(4===c.rank,(function(){return"Error in conv2d: input must be rank 4, but got rank "+c.rank+"."})),T(4===u.rank,(function(){return"Error in conv2d: filter must be rank 4, but got rank "+u.rank+"."})),null!=i&&T(F(r),(function(){return"Error in conv2d: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+r+"."}));var p="NHWC"===a?c.shape[3]:c.shape[1];T(p===u.shape[2],(function(){return"Error in conv2d: depth of input ("+p+") must match input depth for filter "+u.shape[2]+"."})),T(Ra(n,o),(function(){return"Error in conv2D: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+o+"'"}));var f=Ta(a),d=xa(c.shape,u.shape,n,o,r,i,!1,f),h=[u,c],m=Lt.runKernelFunc((function(t,e){var n=t.conv2d(c,u,d);return e([u,c]),n}),{x:c,filter:u},(function(t,e){var i=e,s=i[0],u=i[1];return T(Ia(o),(function(){return"Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+o+"'"})),{x:function(){return Cc(u.shape,t,s,n,r,a)},filter:function(){return wc(u,t,s.shape,n,r,a)}}}),"Conv2D",d,h);return l?m.as3D(m.shape[1],m.shape[2],m.shape[3]):m}}),bc=In({conv3d_:function(t,e,n,r,a,o){void 0===a&&(a="NDHWC"),void 0===o&&(o=[1,1,1]);var i=hn(t,"x","conv3d"),s=hn(e,"filter","conv3d"),u=i,c=!1;4===i.rank&&(c=!0,u=i.as5D(1,i.shape[0],i.shape[1],i.shape[2],i.shape[3])),T(5===u.rank,(function(){return"Error in conv3d: input must be rank 5, but got rank "+u.rank+"."})),T(5===s.rank,(function(){return"Error in conv3d: filter must be rank 5, but got rank "+s.rank+"."})),T(u.shape[4]===s.shape[3],(function(){return"Error in conv3d: depth of input ("+u.shape[4]+") must match input depth for filter "+s.shape[3]+"."})),T(function(t,e){return vc(t)||vc(e)}(n,o),(function(){return"Error in conv3D: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+o+"'"})),T("NDHWC"===a,(function(){return"Error in conv3d: got dataFormat of "+a+" but only NDHWC is currently supported."}));var l=ba(u.shape,s.shape,n,o,r),p=Lt.runKernelFunc((function(t,e){var n=t.conv3d(u,s,l);return e([u,s]),n}),{x:u,$filter:s},(function(t,e){T(vc(o),(function(){return"Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+o+"'"}));var a=e[0],i=e[1];return{x:function(){return gc(a.shape,t,i,n,r)},$filter:function(){return function(t,e,n,r,a){var o=t;4===t.rank&&(o=t.as5D(1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]));var i=e;4===i.rank&&(i=e.as5D(1,e.shape[0],e.shape[1],e.shape[2],e.shape[3])),T(5===o.rank,(function(){return"Error in conv3dDerFilter: input must be rank 5, but got shape "+o.shape+"."})),T(5===i.rank,(function(){return"Error in conv3dDerFilter: dy must be rank 5, but got shape "+i.shape+"."})),T(5===n.length,(function(){return"Error in conv3dDerFilter: filterShape must be length 5, but got "+n+"."})),T(o.shape[4]===n[3],(function(){return"Error in conv3dDerFilter: depth of input "+o.shape[4]+") must match input depth in filter ("+n[3]+"."})),T(i.shape[4]===n[4],(function(){return"Error in conv3dDerFilter: depth of dy ("+i.shape[4]+") must match output depth for filter ("+n[4]+")."}));var s=ba(o.shape,n,r,1,a);return Lt.runKernelFunc((function(t){return t.conv3dDerFilter(o,i,s)}),{x5D:o,dy5D:i})}(a,t,i.shape,n,r)}}}));return c?p.as4D(p.shape[1],p.shape[2],p.shape[3],p.shape[4]):p}}),wc=In({conv2dDerFilter_:function(t,e,n,r,a,o,i){void 0===o&&(o="NHWC");var s=t;3===t.rank&&(s=t.as4D(1,t.shape[0],t.shape[1],t.shape[2]));var u=e;3===u.rank&&(u=e.as4D(1,e.shape[0],e.shape[1],e.shape[2])),T(4===s.rank,(function(){return"Error in conv2dDerFilter: input must be rank 4, but got shape "+s.shape+"."})),T(4===u.rank,(function(){return"Error in conv2dDerFilter: dy must be rank 4, but got shape "+u.shape+"."})),T(4===n.length,(function(){return"Error in conv2dDerFilter: filterShape must be length 4, but got "+n+"."}));var c="NHWC"===o?s.shape[3]:s.shape[1],l="NHWC"===o?u.shape[3]:u.shape[1];T(c===n[2],(function(){return"Error in conv2dDerFilter: depth of input "+c+") must match input depth in filter ("+n[2]+"."})),T(l===n[3],(function(){return"Error in conv2dDerFilter: depth of dy ("+l+") must match output depth for filter ("+n[3]+")."})),null!=i&&T(F(a),(function(){return"Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+a+"."}));var p=Ta(o),f=xa(s.shape,n,r,1,a,i,!1,p);return Lt.runKernelFunc((function(t){return t.conv2dDerFilter(s,u,f)}),{x4D:s,dy4D:u})}}),Cc=In({conv2dDerInput_:mc}),Ec=In({depthwiseConv2d_:function(t,e,n,r,a,o,i){void 0===a&&(a="NHWC"),void 0===o&&(o=[1,1]);var s=hn(t,"x","depthwiseConv2d"),u=hn(e,"filter","depthwiseConv2d"),c=s,l=!1;3===s.rank&&(l=!0,c=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),T(4===c.rank,(function(){return"Error in depthwiseConv2d: input must be rank 4, but got rank "+c.rank+"."})),T(4===u.rank,(function(){return"Error in depthwiseConv2d: filter must be rank 4, but got rank "+u.rank+"."})),T(c.shape[3]===u.shape[2],(function(){return"Error in depthwiseConv2d: number of input channels ("+c.shape[3]+") must match the inChannels dimension in filter "+u.shape[2]+"."})),null==o&&(o=[1,1]),T(Ra(n,o),(function(){return"Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+o+"'"})),null!=i&&T(F(r),(function(){return"Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+r+"."}));var p=xa(c.shape,u.shape,n,o,r,i,!0),f=[c,u],d=Lt.runKernelFunc((function(t,e){var n=t.depthwiseConv2D(c,u,p);return e([c,u]),n}),{x:c,filter:u},(function(t,e){T(Ia(o),(function(){return"Error in gradient of depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '"+o+"'"}));var n=e[0],r=e[1];return{x:function(){return Sc(n.shape,t,r,p)},filter:function(){return Nc(n,t,r.shape,p)}}}),"DepthwiseConv2dNative",p,f);return l?d.as3D(d.shape[1],d.shape[2],d.shape[3]):d}}),Sc=In({depthwiseConv2dDerInput_:function(t,e,n,r){var a=e,o=!1;3===e.rank&&(o=!0,a=e.as4D(1,e.shape[0],e.shape[1],e.shape[2]));var i=Lt.runKernelFunc((function(t){return t.depthwiseConv2DDerInput(a,n,r)}),{dy4D:a});return o?i.as3D(i.shape[1],i.shape[2],i.shape[3]):i}}),Nc=In({depthwiseConv2dDerFilter_:function(t,e,n,r){var a=t;3===t.rank&&(a=t.as4D(1,t.shape[0],t.shape[1],t.shape[2]));var o=e;return 3===o.rank&&(o=e.as4D(1,e.shape[0],e.shape[1],e.shape[2])),Lt.runKernelFunc((function(t){return t.depthwiseConv2DDerFilter(a,o,r)}),{x4D:a,dy4D:o})}}),Ic=In({separableConv2d_:function(t,e,n,r,a,o,i){void 0===o&&(o=[1,1]),void 0===i&&(i="NHWC");var s=hn(t,"x","separableConv2d"),u=hn(e,"depthwiseFilter","separableConv2d"),c=hn(n,"pointwiseFilter","separableConv2d"),l=s,p=!1;if(3===s.rank&&(p=!0,l=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),"NCHW"===i)throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");T(4===l.rank,(function(){return"Error in separableConv2d: input must be rank 4, but got rank "+l.rank+"."})),T(4===u.rank,(function(){return"Error in separableConv2d: depthwise filter must be rank 4, but got rank "+u.rank+"."})),T(4===c.rank,(function(){return"Error in separableConv2d: pointwise filter must be rank 4, but got rank "+u.rank+"."})),T(1===c.shape[0],(function(){return"Error in separableConv2d: the first dimension of pointwise filter must be 1, but got "+c.shape[0]+"."})),T(1===c.shape[1],(function(){return"Error in separableConv2d: the second dimension of pointwise filter must be 1, but got "+c.shape[1]+"."}));var f=u.shape[2],d=u.shape[3];T(c.shape[2]===f*d,(function(){return"Error in separableConv2d: the third dimension of pointwise filter must be "+f*d+", but got "+c.shape[2]+"."}));var h=Ec(l,u,r,a,i,o),m=xc(h,c,1,"valid",i);return p?m.as3D(m.shape[1],m.shape[2],m.shape[3]):m}}),Rc=In({conv2dTranspose_:function(t,e,n,r,a,o){return mc(n,hn(t,"x","conv2dTranspose"),hn(e,"filter","conv2dTranspose"),r,a,"NHWC",o)}}),Tc=In({conv3dTranspose_:function(t,e,n,r,a){return gc(n,hn(t,"x","conv3dTranspose"),hn(e,"filter","conv3dTranspose"),r,a)}}),kc=In({matMul_:function(t,e,n,r){var a;void 0===n&&(n=!1),void 0===r&&(r=!1);var o=hn(t,"a","matMul"),i=hn(e,"b","matMul");a=Ot(o,i),o=a[0],i=a[1];var s=n?o.shape[o.rank-2]:o.shape[o.rank-1],u=r?i.shape[i.rank-1]:i.shape[i.rank-2],c=n?o.shape[o.rank-1]:o.shape[o.rank-2],l=r?i.shape[i.rank-2]:i.shape[i.rank-1],p=o.shape.slice(0,-2),f=i.shape.slice(0,-2),d=D(p),h=D(f);T(o.rank>=2&&i.rank>=2&&o.rank===i.rank,(function(){return"Error in matMul: inputs must have the same rank of at least 2, got ranks "+o.rank+" and "+i.rank+"."})),T(_(p,f),(function(){return"Error in matMul: outer dimensions ("+p+") and ("+f+") of Tensors with shapes "+o.shape+" and "+i.shape+" must match."})),T(s===u,(function(){return"Error in matMul: inner shapes ("+s+") and ("+u+") of Tensors with shapes "+o.shape+" and "+i.shape+" and transposeA="+n+" and transposeB="+r+" must match."}));var m=o.shape.slice(0,-2).concat([c,l]),v=n?o.as3D(d,s,c):o.as3D(d,c,s),g=r?i.as3D(h,l,u):i.as3D(h,u,l),y={transposeA:n,transposeB:r};return Lt.runKernelFunc((function(t,e){var a=t.batchMatMul(v,g,n,r);return e([v,g]),a}),{a:v,b:g},(function(t,e){var a=e,o=a[0],i=a[1];return n||r?!n&&r?{a:function(){return t.matMul(i,!1,!1)},b:function(){return t.matMul(o,!0,!1)}}:n&&!r?{a:function(){return i.matMul(t,!1,!0)},b:function(){return o.matMul(t,!1,!1)}}:{a:function(){return i.matMul(t,!0,!0)},b:function(){return t.matMul(o,!0,!0)}}:{a:function(){return t.matMul(i,!1,!0)},b:function(){return o.matMul(t,!0,!1)}}}),"BatchMatMul",y).reshape(m)}}),Ac=In({dot_:function(t,e){var n=hn(t,"t1","dot"),r=hn(e,"t2","dot");T(!(1!==n.rank&&2!==n.rank||1!==r.rank&&2!==r.rank),(function(){return"Error in dot: inputs must all be rank 1 or 2, but got ranks "+n.rank+" and "+r.rank+"."}));var a=1===n.rank?n.size:n.shape[1],o=1===r.rank?r.size:r.shape[0];return T(a===o,(function(){return"Error in dot: inner dimensions of inputs must match, but got "+a+" and "+o+"."})),1===n.rank&&1===r.rank?n.as2D(1,-1).matMul(r.as2D(-1,1)).asScalar():1===n.rank&&2===r.rank?n.as2D(1,-1).matMul(r.as2D(r.shape[0],r.shape[1])).as1D():2===n.rank&&1===r.rank?n.matMul(r.as2D(-1,1)).as1D():n.matMul(r.as2D(r.shape[0],r.shape[1]))}}),Oc=In({outerProduct_:function(t,e){var n=hn(t,"v1","outerProduct"),r=hn(e,"v2","outerProduct");return T(1===n.rank&&1===r.rank,(function(){return"Error in outerProduct: inputs must be rank 1, but got ranks "+n.rank+" and "+r.rank+"."})),n.as2D(-1,1).matMul(r.as2D(1,-1))}}),Dc=In({reverse_:function(t,e){var n=hn(t,"x","reverse");if(0===n.rank)return n.clone();var r=W(e,n.shape);return Lt.runKernelFunc((function(t){return t.reverse(n,r)}),{$x:n},(function(t){return{$x:function(){return t.reverse(r)}}})).reshapeAs(n)}}),_c=In({reverse1d_:function(t){var e=hn(t,"x","reverse");return T(1===e.rank,(function(){return"Error in reverse1D: x must be rank 1 but got rank "+e.rank+"."})),Dc(e,0)}}),Fc=In({reverse2d_:function(t,e){var n=hn(t,"x","reverse");return T(2===n.rank,(function(){return"Error in reverse2D: x must be rank 2 but got rank "+n.rank+"."})),Dc(n,e)}}),Mc=In({reverse3d_:function(t,e){var n=hn(t,"x","reverse");return T(3===n.rank,(function(){return"Error in reverse3D: x must be rank 3 but got rank "+n.rank+"."})),Dc(n,e)}}),Bc=In({reverse4d_:function(t,e){var n=hn(t,"x","reverse");return T(4===n.rank,(function(){return"Error in reverse4D: x must be rank 4 but got rank "+n.rank+"."})),Dc(n,e)}});function Pc(t,e,n,r,a,o){var i=hn(t,"x","maxPool"),s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),null==r&&(r=[1,1]),T(4===s.rank,(function(){return"Error in maxPool: input must be rank 4 but got rank "+s.rank+"."})),T(Ra(n,r),(function(){return"Error in maxPool: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+r+"'"})),null!=o&&T(F(a),(function(){return"Error in maxPool: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+a+"."}));var c=ga(s.shape,e,n,r,a,o);if(1===c.filterWidth&&1===c.filterHeight&&_(c.inShape,c.outShape))return i.clone();var l=[s],p=Lt.runKernelFunc((function(t,e){var n=t.maxPool(s,c);return e([s,n]),n}),{x:s},(function(t,o){var i=o[0],s=o[1];return{x:function(){return function(t,e,n,r,a,o,i,s){var u=hn(t,"dy","maxPoolBackprop"),c=hn(e,"input","maxPoolBackprop"),l=hn(n,"output","maxPoolBackprop");T(c.rank===u.rank,(function(){return"Rank of input ("+c.rank+") does not match rank of dy ("+u.rank+")"})),null==o&&(o=[1,1]),T(Ra(a,o),(function(){return"Error in maxPoolBackProp: Either strides or dilations must be 1. Got strides "+a+" and dilations '"+o+"'"})),T(4===u.rank,(function(){return"Error in maxPoolBackprop: dy must be rank 4 but got rank "+u.rank+"."})),T(4===c.rank,(function(){return"Error in maxPoolBackprop: input must be rank 4 but got rank "+c.rank+"."}));var p=ga(c.shape,r,a,o,i,s);return Lt.runKernelFunc((function(t){return t.maxPoolBackprop(u,c,l,p)}),{$dy:u,$input:c})}(t,i,s,e,n,r,a)}}}),"MaxPool",c,l);return u?p.as3D(p.shape[1],p.shape[2],p.shape[3]):p}function Lc(t,e,n,r,a,o){var i=hn(t,"x","avgPool","float32");null==r&&(r=[1,1]),T(Ra(n,r),(function(){return"Error in avgPool: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+r+"'"}));var s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),T(4===s.rank,(function(){return"Error in avgPool: x must be rank 4 but got rank "+s.rank+"."})),null!=o&&T(F(a),(function(){return"Error in avgPool: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+a+"."}));var c=ga(s.shape,e,n,r,a,o);if(1===c.filterWidth&&1===c.filterHeight&&_(c.inShape,c.outShape))return i.clone();var l=Lt.runKernelFunc((function(t){return t.avgPool(s,c)}),{x:s},(function(t){return{x:function(){return function(t,e,n,r,a,o){var i=hn(t,"dy","avgPoolBackprop"),s=hn(e,"input","avgPoolBackprop");T(s.rank===i.rank,(function(){return"Rank of input ("+s.rank+") does not match rank of dy ("+i.rank+")"})),null==a&&(a=[1,1]),T(Ra(r,a),(function(){return"Error in avgPoolBackprop: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+a+"'"}));var u=s,c=i,l=!1;3===s.rank&&(l=!0,u=s.as4D(1,s.shape[0],s.shape[1],s.shape[2]),c=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),T(4===c.rank,(function(){return"Error in avgPoolBackprop: dy must be rank 4 but got rank "+c.rank+"."})),T(4===u.rank,(function(){return"Error in avgPoolBackprop: input must be rank 4 but got rank "+u.rank+"."}));var p=ga(u.shape,n,r,a,o),f=Lt.runKernelFunc((function(t){return t.avgPoolBackprop(c,u,p)}),{dy4D:c,input4D:u});return l?f.as3D(f.shape[1],f.shape[2],f.shape[3]):f}(t,s,e,n,r,a)}}}),"AvgPool",c);return l=l.cast(i.dtype),u?l.as3D(l.shape[1],l.shape[2],l.shape[3]):l}var Vc=In({maxPool_:function(t,e,n,r,a){return Pc(t,e,n,1,r,a)}}),Wc=In({avgPool_:function(t,e,n,r,a){return Lc(t,e,n,1,r,a)}}),zc=In({pool_:function(t,e,n,r,a,o){null==a&&(a=[1,1]),null==o&&(o=1),0===r&&(r="valid");var i=hn(t,"x","maxPool"),s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),T(Ra(o,a),(function(){return"Error in pool: Either strides or dilations must be 1. Got strides "+o+" and dilations '"+a+"'"}));var c,l=ga(s.shape,e,o,a,r),p=[l.dilationHeight,l.dilationWidth];c="same"===r?function(t,e){var n=t.map((function(t,n){return t+(t-1)*(e[n]-1)})).map((function(t){return t-1})),r=n.map((function(t){return Math.floor(t/2)})),a=n.map((function(t,e){return t-r[e]}));return n.map((function(t,e){return[r[e],a[e]]}))}([l.filterHeight,l.filterWidth],p):[[0,0],[0,0]];var f=1===p[0]&&1===p[1],d=function(t,e,n){var r=n.map((function(t){return t[0]})),a=n.map((function(t){return t[1]})),o=t.concat(r,a),i=e.map((function(t,e){return(t-o[e]%t)%t})),s=a.map((function(t,e){return t+i[e]}));return[e.map((function(t,e){return[r[e],s[e]]})),e.map((function(t,e){return[0,i[e]]}))]}([l.inHeight,l.inWidth],p,c),h=d[0],m=d[1],v=f?r:"valid",g=f?s:_r(s,p,h),y=("avg"===n?function(){return Lc(g,e,o,1,v)}:function(){return Pc(g,e,o,1,v)})(),x=f?y:dr(y,p,m);return u?x.as3D(x.shape[1],x.shape[2],x.shape[3]):x}}),Uc=In({maxPool3d_:function(t,e,n,r,a,o,i){void 0===o&&(o="NDHWC");var s=hn(t,"x","maxPool3d"),u=s,c=!1;4===s.rank&&(c=!0,u=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3])),null==i&&(i=[1,1,1]),T(5===u.rank,(function(){return"Error in maxPool3d: x must be rank 5 but got rank "+u.rank+"."})),T("NDHWC"===o,(function(){return"Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of "+o})),T(Ra(n,i),(function(){return"Error in maxPool3d: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+i+"'"})),null!=a&&T(F(r),(function(){return"Error in maxPool3d: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+r+"."}));var l=ya(u.shape,e,n,i,r,a,o),p=Lt.runKernelFunc((function(t,e){var n=t.maxPool3d(u,l);return e([u,n]),n}),{x:u},(function(t,o){var s=o[0],u=o[1];return{x:function(){return function(t,e,n,r,a,o,i,s){var u=hn(t,"dy","maxPool3dBackprop"),c=hn(e,"input","maxPool3dBackprop"),l=hn(n,"output","maxPool3dBackprop"),p=u,f=c,d=l,h=!1;4===c.rank&&(h=!0,p=u.as5D(1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]),f=c.as5D(1,c.shape[0],c.shape[1],c.shape[2],c.shape[3]),d=l.as5D(1,l.shape[0],l.shape[1],l.shape[2],l.shape[3])),T(5===p.rank,(function(){return"Error in maxPool3dBackprop: dy must be rank 5 but got rank "+p.rank+"."})),T(5===f.rank,(function(){return"Error in maxPool3dBackprop: input must be rank 5 but got rank "+f.rank+"."})),T(5===d.rank,(function(){return"Error in maxPool3dBackprop: output must be rank 5 but got rank "+d.rank+"."})),null==o&&(o=[1,1,1]),T(Ra(a,o),(function(){return"Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides "+a+" and dilations '"+o+"'"})),null!=s&&T(F(i),(function(){return"Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode "+s+" but got pad "+i+"."}));var m=ya(f.shape,r,a,o,i,s),v=Lt.runKernelFunc((function(t){return t.maxPool3dBackprop(p,f,d,m)}),{dy5D:p,input5D:f});return h?v.as4D(v.shape[1],v.shape[2],v.shape[3],v.shape[4]):v}(t,s,u,e,n,i,r,a)}}}));return c?p.as4D(p.shape[1],p.shape[2],p.shape[3],p.shape[4]):p}}),jc=In({avgPool3d_:function(t,e,n,r,a,o,i){void 0===o&&(o="NDHWC");var s=hn(t,"x","avgPool3d","float32"),u=s,c=!1;4===s.rank&&(c=!0,u=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3])),null==i&&(i=[1,1,1]),T(5===u.rank,(function(){return"Error in avgPool3d: x must be rank 5 but got rank "+u.rank+"."})),T("NDHWC"===o,(function(){return"Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of "+o})),T(Ra(n,i),(function(){return"Error in avgPool3d: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+i+"'"})),null!=a&&T(F(r),(function(){return"Error in avgPool3d: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+r+"."}));var l=ya(u.shape,e,n,i,r,a,o),p=Lt.runKernelFunc((function(t){return t.avgPool3d(u,l)}),{x:u},(function(t){return{x:function(){return function(t,e,n,r,a,o,i){var s=hn(t,"dy","avgPool3dBackprop"),u=hn(e,"input","avgPool3dBackprop"),c=s,l=u,p=!1;4===u.rank&&(p=!0,c=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3]),l=u.as5D(1,u.shape[0],u.shape[1],u.shape[2],u.shape[3])),T(5===c.rank,(function(){return"Error in avgPool3dBackprop: dy must be rank 5 but got rank "+c.rank+"."})),T(5===l.rank,(function(){return"Error in avgPool3dBackprop: input must be rank 5 but got rank "+l.rank+"."})),null==a&&(a=[1,1,1]),T(Ra(r,a),(function(){return"Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+a+"'"})),null!=i&&T(F(o),(function(){return"Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+o+"."}));var f=ya(l.shape,n,r,a,o,i),d=Lt.runKernelFunc((function(t){return t.avgPool3dBackprop(c,l,f)}),{dy5D:c,input5D:l});return p?d.as4D(d.shape[1],d.shape[2],d.shape[3],d.shape[4]):d}(t,u,e,n,i,r,a)}}}));return p=p.cast(u.dtype),c?p.as4D(p.shape[1],p.shape[2],p.shape[3],p.shape[4]):p}}),Gc=In({slice_:function(t,e,n){var r,a,o=hn(t,"x","slice");if(0===o.rank)throw new Error("Slicing scalar is not possible");(r="number"==typeof e?[e].concat(new Array(o.rank-1).fill(0)):e.length<o.rank?e.concat(new Array(o.rank-e.length).fill(0)):e.slice()).forEach((function(t){T(-1!==t,(function(){return"slice() does not support negative begin indexing."}))})),a=(a=null==n?new Array(o.rank).fill(-1):"number"==typeof n?[n].concat(new Array(o.rank-1).fill(-1)):n.length<o.rank?n.concat(new Array(o.rank-n.length).fill(-1)):n).map((function(t,e){return t>=0?t:(T(-1===t,(function(){return"Negative size values should be exactly -1 but got "+t+" for the slice() size at index "+e+"."})),o.shape[e]-r[e])})),Xr(o,r,a);var i=o.shape,s={begin:r,size:a};return Lt.runKernelFunc((function(t){return t.slice(o,r,a)}),{x:o},(function(t){for(var e=[],n=0;n<t.rank;n++)e.push([r[n],i[n]-r[n]-a[n]]);return{x:function(){return t.pad(e)}}}),"Slice",s)}}),Hc=In({slice1d_:function(t,e,n){var r=hn(t,"x","slice1d");return T(1===r.rank,(function(){return"slice1d expects a rank-1 tensor, but got a rank-"+r.rank+" tensor"})),Gc(r,[e],[n])}}),qc=In({slice2d_:function(t,e,n){var r=hn(t,"x","slice2d");return T(2===r.rank,(function(){return"slice2d expects a rank-2 tensor, but got a rank-"+r.rank+" tensor"})),Gc(r,e,n)}}),Kc=In({slice3d_:function(t,e,n){var r=hn(t,"x","slice3d");return T(3===r.rank,(function(){return"slice3d expects a rank-3 tensor, but got a rank-"+r.rank+" tensor"})),Gc(r,e,n)}}),Xc=In({slice4d_:function(t,e,n){var r=hn(t,"x","slice4d");return T(4===r.rank,(function(){return"slice4d expects a rank-4 tensor, but got a rank-"+r.rank+" tensor"})),Gc(r,e,n)}});function Yc(t,e,n,r,a){return e.rank<n.rank&&(e=e.reshape(xn(e.shape,r))),t.rank<n.rank&&(t=t.reshape(xn(t.shape,r))),{x:function(){var r=t.mul(n.equal(e).cast(t.dtype));return null==a?r:r.transpose(a)}}}var $c=In({all_:function(t,e,n){void 0===e&&(e=null),void 0===n&&(n=!1);var r=hn(t,"x","all","bool"),a=W(e,r.shape),o=a,i=wn(o,r.rank);null!=i&&(r=r.transpose(i),o=En(o.length,r.rank));var s=Lt.runKernelFunc((function(t){return t.all(r,o)}),{$x:r});if(n){var u=xn(s.shape,a);return s.reshape(u)}return s}}),Qc=In({any_:function(t,e,n){void 0===e&&(e=null),void 0===n&&(n=!1);var r=hn(t,"x","any","bool"),a=W(e,r.shape),o=a,i=wn(o,r.rank);null!=i&&(r=r.transpose(i),o=En(o.length,r.rank));var s=Lt.runKernelFunc((function(t){return t.any(r,o)}),{$x:r});if(n){var u=xn(s.shape,a);return s.reshape(u)}return s}}),Jc=In({argMax_:function(t,e){void 0===e&&(e=0);var n=hn(t,"x","argMax");null==e&&(e=0);var r=W(e,n.shape),a=wn(r,n.rank);null!=a&&(n=n.transpose(a),r=En(r.length,n.rank));var o={axis:r[0]},i=[n];return Lt.runKernelFunc((function(t,e){var a=t.argMax(n,r[0]);return e([n]),a}),{x:n},(function(t,e){var n=e[0];return{x:function(){return qn(n)}}}),"ArgMax",o,i)}}),Zc=In({argMin_:function(t,e){void 0===e&&(e=0);var n=hn(t,"x","argMin");null==e&&(e=0);var r=W(e,n.shape),a=wn(r,n.rank);return null!=a&&(n=n.transpose(a),r=En(r.length,n.rank)),Lt.runKernelFunc((function(t,e){var a=t.argMin(n,r[0]);return e([n]),a}),{$x:n},(function(t,e){var n=e[0];return{$x:function(){return qn(n)}}}))}}),tl=In({logSumExp_:function(t,e,n){void 0===e&&(e=null),void 0===n&&(n=!1);var r=hn(t,"x","logSumExp"),a=W(e,r.shape),o=r.max(a,!0),i=r.sub(o).exp().sum(a).log(),s=o.reshape(i.shape).add(i);if(n){var u=xn(s.shape,a);return s.reshape(u)}return s}}),el=In({max_:function(t,e,n){void 0===e&&(e=null),void 0===n&&(n=!1);var r=hn(t,"x","max"),a=r,o=W(e,r.shape),i=o,s=wn(i,r.rank);null!=s&&(r=r.transpose(s),i=En(i.length,r.rank));var u=[r],c=Lt.runKernelFunc((function(t,e){var n=t.max(r,i);return e([a,n]),n}),{x:r},(function(t,e){return Yc(t,e[1],e[0],o,s)}),"Max",{axes:i},u,[!0]);if(n){var l=xn(c.shape,o);c=c.reshape(l)}return c}}),nl=In({mean_:function(t,e,n){void 0===e&&(e=null),void 0===n&&(n=!1);var r=hn(t,"x","mean"),a=W(e,r.shape),o=D(yn(r.shape,a)[1]);return sa((function(t){var r=Dn(o);return{value:(r.dtype===t.dtype?t:t.cast(r.dtype)).div(r).sum(e,n),gradFunc:function(e){var n=t.shape.slice();return a.forEach((function(t){n[t]=1})),e.reshape(n).mul(Wn(t.shape,"float32")).div(o)}}}))(r)}}),rl=In({min_:function(t,e,n){void 0===e&&(e=null),void 0===n&&(n=!1);var r=hn(t,"x","min"),a=r,o=W(e,r.shape),i=o,s=wn(i,r.rank);null!=s&&(r=r.transpose(s),i=En(i.length,r.rank));var u=[r],c=Lt.runKernelFunc((function(t,e){var n=t.min(r,i);return e([a,n]),n}),{x:r},(function(t,e){return Yc(t,e[1],e[0],o,s)}),"Min",{axes:i},u,[!0]);if(n){var l=xn(c.shape,o);c=c.reshape(l)}return c}}),al=In({moments_:function(t,e,n){void 0===e&&(e=null),void 0===n&&(n=!1);var r=W(e,(t=hn(t,"x","moments")).shape),a=t.mean(r,n),o=a.shape;n||(o=xn(a.shape,r));var i=t.toFloat().sub(a.reshape(o)).square();return{mean:a,variance:i.mean(r,n)}}}),ol=In({sum_:function(t,e,n){void 0===e&&(e=null),void 0===n&&(n=!1);var r=hn(t,"x","sum");"bool"===r.dtype&&(r=r.toInt());var a=W(e,r.shape);return sa((function(t){var e=wn(a,t.rank),r=a,o=t;null!=e&&(o=t.transpose(e),r=En(r.length,t.rank));var i=function(e){var n=t.shape.slice();return a.forEach((function(t){n[t]=1})),e.reshape(n).mul(Wn(t.shape,"float32"))},s={axes:r},u=Lt.runKernelFunc((function(t){return t.sum(o,r)}),{x:o},(function(t){return{x:function(){return i(t)}}}),"Sum",s);if(n){var c=xn(u.shape,a);u=u.reshape(c)}return{value:u,gradFunc:i}}))(r)}}),il=In({prod_:function(t,e,n){void 0===e&&(e=null),void 0===n&&(n=!1);var r=hn(t,"x","prod");"bool"===r.dtype&&(r=r.toInt());var a=W(e,r.shape),o=wn(a,r.rank),i=a,s=r;null!=o&&(s=r.transpose(o),i=En(i.length,r.rank));var u=Lt.runKernelFunc((function(t){return t.prod(s,i)}),{permutedX:s});if(n){var c=xn(u.shape,a);u=u.reshape(c)}return u}}),sl=In({elu_:function(t){var e=hn(t,"x","elu");return Lt.runKernelFunc((function(t,n){var r=t.elu(e);return n([r]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){return Lt.runKernelFunc((function(e){return e.eluDer(t,n)}),{dy:t,y:n})}}}))}}),ul=In({leakyRelu_:function(t,e){void 0===e&&(e=.2);var n=hn(t,"x","leakyRelu");return Lu(Dn(e).mul(n),n)}}),cl=In({prelu_:function(t,e){var n=hn(t,"x","prelu"),r=hn(e,"alpha","prelu");return Lt.runKernelFunc((function(t,e){var a=t.prelu(n,r);return e([n,r]),a}),{x:n,alpha:r},(function(t,e){var n=e[0],r=e[1],a=n.greater(0);return{x:function(){return Tu(a,t,t.mul(r))},alpha:function(){var e=Tu(a,qn(t),t.mul(n)),o=ma(r.shape,t.shape);return o.length>0&&(e=e.sum(o)),e.reshape(r.shape)}}}),"Prelu")}}),ll=In({relu_:function(t){var e=hn(t,"x","relu");return"bool"===e.dtype?e.toInt():Lt.runKernelFunc((function(t,n){var r=t.relu(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0];return{x:function(){return t.mulStrict(n.step().toFloat())}}}),"Relu")}}),pl=In({relu6_:function(t){var e=hn(t,"x","relu6");return"bool"===e.dtype?e.toInt():Lt.runKernelFunc((function(t,n){var r=t.relu6(e);return n([e]),r}),{x:e},(function(t,e){var n=e[0],r=n.lessEqual(6).mul(n.step());return{x:function(){return t.mulStrict(r.toFloat())}}}),"Relu6")}}),fl=In({selu_:function(t){var e=hn(t,"x","selu");return Lt.runKernelFunc((function(t,n){var r=t.selu(e);return n([e]),r}),{$x:e},(function(t,e){var n=e[0];return{$x:function(){var e=n.greater(Dn(0)),r=Dn(ss),a=Dn(us),o=t.mul(a),i=t.mul(r).mul(n.toFloat().exp());return Tu(e,o,i)}}}))}}),dl=In({transpose_:function(t,e){var n=hn(t,"x","transpose");if(null==e&&(e=n.shape.map((function(t,e){return e})).reverse()),T(n.rank===e.length,(function(){return"Error in transpose: rank of input "+n.rank+" must match length of perm "+e+"."})),e.forEach((function(t){T(t>=0&&t<n.rank,(function(){return"All entries in 'perm' must be between 0 and "+(n.rank-1)+" but got "+e}))})),n.rank<=1)return n.clone();var r={perm:e};return Lt.runKernelFunc((function(t){return t.transpose(n,e)}),{x:n},(function(t){var n=Cn(e);return{x:function(){return t.transpose(n)}}}),"Transpose",r)}}),hl=In({localResponseNormalization_:function(t,e,n,r,a){void 0===e&&(e=5),void 0===n&&(n=1),void 0===r&&(r=1),void 0===a&&(a=.5);var o=hn(t,"x","localResponseNormalization");T(4===o.rank||3===o.rank,(function(){return"Error in localResponseNormalization: x must be rank 3 or 4 but got\n rank "+o.rank+"."})),T(F(e),(function(){return"Error in localResponseNormalization: depthRadius must be an integer but got depthRadius "+e+"."}));var i=o,s=!1;3===o.rank&&(s=!0,i=o.as4D(1,o.shape[0],o.shape[1],o.shape[2]));var u=Lt.runKernelFunc((function(t,o){var s=t.localResponseNormalization4D(i,e,n,r,a);return o([i,s]),s}),{x4D:i},(function(t,o){var i=o[0],s=o[1];return{x4D:function(){return Lt.runKernelFunc((function(o){return o.LRNGrad(t,i,s,e,n,r,a)}),{})}}}));return s?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),ml=In({norm_:function(t,e,n,r){void 0===e&&(e="euclidean"),void 0===n&&(n=null),void 0===r&&(r=!1);var a=function t(e,n,r){if(void 0===r&&(r=null),0===e.rank)return e.abs();if(1!==e.rank&&null===r)return t(e.reshape([-1]),n,r);if(1===e.rank||"number"==typeof r||Array.isArray(r)&&1===r.length){if(1===n)return e.abs().sum(r);if(n===1/0)return e.abs().max(r);if(n===-1/0)return e.abs().min(r);if("euclidean"===n||2===n)return e.abs().pow(Dn(2,"int32")).sum(r).sqrt();throw new Error("Error in norm: invalid ord value: "+n)}if(Array.isArray(r)&&2===r.length){if(1===n)return e.abs().sum(r[0]).max(r[1]-1);if(n===1/0)return e.abs().sum(r[1]).max(r[0]);if(n===-1/0)return e.abs().sum(r[1]).min(r[0]);if("fro"===n||"euclidean"===n)return e.square().sum(r).sqrt();throw new Error("Error in norm: invalid ord value: "+n)}throw new Error("Error in norm: invalid axis: "+r)}(t=hn(t,"x","norm"),e,n),o=a.shape;if(r){var i=W(n,t.shape);o=xn(a.shape,i)}return a.reshape(o)}}),vl=In({basicLSTMCell_:function(t,e,n,r,a,o){var i=hn(t,"forgetBias","basicLSTMCell"),s=hn(e,"lstmKernel","basicLSTMCell"),u=hn(n,"lstmBias","basicLSTMCell"),c=hn(r,"data","basicLSTMCell"),l=hn(a,"c","basicLSTMCell"),p=hn(o,"h","basicLSTMCell"),f=c.concat(p,1).matMul(s).add(u),d=f.shape[0],h=f.shape[1]/4,m=[d,h],v=f.slice([0,0],m),g=f.slice([0,h],m),y=f.slice([0,2*h],m),x=f.slice([0,3*h],m),b=v.sigmoid().mulStrict(g.tanh()).addStrict(l.mulStrict(i.add(y).sigmoid())),w=b.tanh().mulStrict(x.sigmoid());return[b,w]}}),gl=In({multiRNNCell_:function(t,e,n,r){for(var a=hn(e,"data","multiRNNCell"),o=mn(n,"c","multiRNNCell"),i=mn(r,"h","multiRNNCell"),s=a,u=[],c=0;c<t.length;c++){var l=t[c](s,o[c],i[c]);u.push(l[0]),u.push(l[1]),s=l[1]}var p=[],f=[];for(c=0;c<u.length;c+=2)p.push(u[c]),f.push(u[c+1]);return[p,f]}}),yl=In({movingAverage_:function(t,e,n,r,a){void 0===a&&(a=!0);var o=hn(t,"v","movingAverage"),i=hn(e,"x","movingAverage"),s=hn(n,"decay","movingAverage");Dt(o,i),T(_(o.shape,i.shape),(function(){return"Shape mismatch in v and x"}));var u=Dn(1),c=u.sub(s),l=i.sub(o).mul(c);if(a){T(null!=r,(function(){return"When using zeroDebias: true, step is required."}));var p=hn(r,"step","movingAverage");l=l.div(u.sub(qu(s,p)))}return o.add(l)}}),xl=In({stridedSlice_:function(t,e,n,r,a,o,i,s,u){if(void 0===a&&(a=0),void 0===o&&(o=0),void 0===i&&(i=0),void 0===s&&(s=0),void 0===u&&(u=0),null==r&&(r=new Array(e.length)),0!==i)throw new Error("ellipsis mask is not yet supported");var c=hn(t,"x","stridedSlice"),l=Yr(s),p=c.shape.slice();l.forEach((function(t){e[t]=0,n[t]=1,p.splice(t,0,1)})),c=c.reshape(p);for(var f=0;f<c.rank;f++)e[f]=Qr(a,e,r,c.shape,f),n[f]=Jr(o,n,r,c.shape,f),r[f]=r[f]||1;var d=Yr(u);d.forEach((function(t){n[t]=e[t]+1,r[t]=1}));var h=$r(e,n,r),m=h.filter((function(t,e){return-1===d.indexOf(e)}));return r.every((function(t){return 1===t}))?Gc(c,e,h).reshape(m):Lt.runKernelFunc((function(t){return t.stridedSlice(c,e,n,r)}),{$x:c}).reshape(m)}}),bl=In({topk_:function(t,e,n){void 0===e&&(e=1),void 0===n&&(n=!0);var r=hn(t,"x","topk");if(0===r.rank)throw new Error("topk() expects the input to be of rank 1 or higher");var a=r.shape[r.shape.length-1];if(e>a)throw new Error("'k' passed to topk() must be <= the last dimension ("+a+") but got "+e);var o=Lt.runKernelFunc((function(t){return t.topk(r,e,n)}),{$x:r});return{values:o[0],indices:o[1]}}}),wl=In({scatterND_:function(t,e,n){var r=hn(t,"indices","scatterND","int32"),a=hn(e,"updates","scatterND");return function(t,e,n){if(e.rank<1)throw new Error("tf.scatterND() expects the indices to be rank 1 or higher, but the rank was "+e.rank+".");if(t.rank<1)throw new Error("tf.scatterND() expects the updates to be rank 1 or higher, but the rank was "+t.rank+".");if("int32"!==e.dtype)throw new Error("The dtype of 'indices' should be int32, but got dtype: "+e.dtype);if(n.length<1)throw new Error("Output rank must be greater or equal to 1, but got shape: "+n);if(0===n.length){if(0===e.size)throw new Error("Indices specified for empty output. indices shape: "+e.shape);if(0===t.size)throw new Error("Updates specified for empty output. updates shape: "+t.shape)}!function(t,e,n){var r=e.rank>1?e.shape[e.rank-1]:1,a=e.rank>1?e.rank-1:1,o="Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: "+n.shape+", indices.shape: "+e.shape+", shape: "+t+", sliceDim: "+r+", and batchDim: "+a+".";if(n.rank<a)throw new Error(o+" update.rank < "+a+". ");if(t.length<r+(n.rank-a))throw new Error(o+" Output shape length < "+(r+(n.rank-a)));if(n.rank!==a+t.length-r)throw new Error(o+" update.rank != "+(a+t.length-r));for(var i=0;i<a;++i)if(n.shape[i]!==e.shape[i])throw new Error(o+" updates.shape["+i+"] ("+n.shape[i]+") != indices.shape["+i+"] ("+e.shape[i]+").");for(i=0;i<n.rank-a;++i)if(n.shape[i+a]!==t[i+r])throw new Error(o+" updates.shape["+(i+a)+"] ("+n.shape[i+a]+") != shape["+(i+a)+"] ("+t[i+a]+")")}(n,e,t)}(a,r,n),Lt.runKernelFunc((function(t){return t.scatterND(r,a,n)}),{$indices:r,$updates:a})}}),Cl=In({fft_:function(t){T("complex64"===t.dtype,(function(){return"The dtype for tf.spectral.fft() must be complex64 but got "+t.dtype+"."}));var e=t.shape[t.shape.length-1],n=t.size/e,r=t.as2D(n,e);return Lt.runKernelFunc((function(t){return t.fft(r)}),{input:t}).reshape(t.shape)}}),El=In({ifft_:function(t){T("complex64"===t.dtype,(function(){return"The dtype for tf.spectral.ifft() must be complex64 but got "+t.dtype+"."}));var e=t.shape[t.shape.length-1],n=t.size/e,r=t.as2D(n,e);return Lt.runKernelFunc((function(t){return t.ifft(r)}),{input:t}).reshape(t.shape)}}),Sl=In({rfft_:function(t,e){T("float32"===t.dtype,(function(){return"The dtype for rfft() must be real value but got "+t.dtype}));var n,r=t.shape[t.shape.length-1],a=t.size/r;if(null!=e&&e<r){var o=t.shape.map((function(t){return 0})),i=t.shape.map((function(t){return t}));i[t.shape.length-1]=e,n=t.slice(o,i),r=e}else if(null!=e&&e>r){var s=t.shape.map((function(t){return t}));s[t.shape.length-1]=e-r,n=t.concat(zn(s),t.shape.length-1),r=e}else n=t;var u=n.zerosLike(),c=Rn(n,u).as2D(a,r),l=Cl(c),p=Math.floor(r/2)+1,f=Tn(l),d=kn(l),h=f.split([p,r-p],f.shape.length-1),m=d.split([p,r-p],d.shape.length-1),v=n.shape.slice();return v[n.shape.length-1]=p,Rn(h[0],m[0]).reshape(v)}}),Nl=In({irfft_:function(t){var e=t.shape[t.shape.length-1],n=t.size/e;if(e<=2){var r=t.as2D(n,e),a=El(r);return Tn(a)}var o=[n,2*(e-1)],i=Tn(t).as2D(n,e),s=kn(t).as2D(n,e),u=i.slice([0,1],[n,e-2]).reverse(1),c=s.slice([0,1],[n,e-2]).reverse(1).mul(Dn(-1)),l=i.concat(u,1),p=s.concat(c,1);return r=Rn(l,p).as2D(o[0],o[1]),a=El(r),Tn(a)}}),Il=Object.freeze({fft:Cl,ifft:El,rfft:Sl,irfft:Nl}),Rl=In({sparseToDense_:function(t,e,n,r){void 0===r&&(r=0);var a=hn(t,"sparseIndices","sparseToDense","int32"),o=hn(e,"sparseValues","sparseToDense"),i=hn(r,"defaultValue","sparseToDense",o.dtype);return function(t,e,n,r){if("int32"!==t.dtype)throw new Error("tf.sparseToDense() expects the indices to be int32 type, but the dtype was "+t.dtype+".");if(t.rank>2)throw new Error("sparseIndices should be a scalar, vector, or matrix, but got shape "+t.shape+".");var a=t.rank>0?t.shape[0]:1,o=t.rank>1?t.shape[1]:1;if(n.length!==o)throw new Error("outputShape has incorrect number of elements:, "+n.length+", should be: "+o+".");var i=e.size;if(0!==e.rank&&(1!==e.rank||i!==a))throw new Error("sparseValues has incorrect shape "+e.shape+", should be [] or ["+a+"]");if(e.dtype!==r.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}(a,o,n,i),Lt.runKernelFunc((function(t){return t.sparseToDense(a,o,n,i)}),{$sparseIndices:a,$sparseValues:o,$defaultValue:i})}}),Tl=In({gatherND_:function(t,e){var n=hn(e,"indices","gatherND","int32"),r=hn(t,"x","gatherND");return Lt.runKernelFunc((function(t){return t.gatherND(r,n)}),{$x:r,$indices:n})}}),kl=In({diag_:function(t){var e=hn(t,"x","diag").flatten(),n=t.shape.concat(t.shape);return Lt.runKernelFunc((function(t){return t.diag(e)}),{$x:e}).reshape(n)}}),Al=In({dropout_:function(t,e,n,r){var a=hn(t,"x","dropout");if(T("float32"===a.dtype,(function(){return"x has to be a floating point tensor since it's going to be scaled, but got a "+a.dtype+" tensor instead."})),T(e>=0&&e<1,(function(){return"rate must be a float in the range [0, 1), but got "+e+"."})),0===e)return t instanceof wt?a.clone():a;var o=function(t,e){if(null==e)return t.shape.slice();if(_(t.shape,e))return e;if(t.shape.length===e.length){for(var n=[],r=0;r<t.shape.length;r++)null==e[r]&&null!=t.shape[r]?n.push(t.shape[r]):n.push(e[r]);return n}return e}(a,n),i=1-e,s=Or(o,0,1,"float32",r).add(i).floor().div(i);return a.mul(s)}});function Ol(t,e,n){for(var r=1-t%2,a=new Float32Array(t),o=0;o<t;++o){var i=2*Math.PI*o/(t+r-1);a[o]=e-n*Math.cos(i)}return _n(a,"float32")}var Dl,_l=In({hannWindow_:function(t){return Ol(t,.5,.5)}}),Fl=In({hammingWindow_:function(t){return Ol(t,.54,.46)}}),Ml=In({frame_:function(t,e,n,r,a){void 0===r&&(r=!1),void 0===a&&(a=0);for(var o=0,i=[];o+e<=t.size;)i.push(Gc(t,o,e)),o+=n;if(r)for(;o<t.size;){var s=o+e-t.size,u=Kn([Gc(t,o,e-s),Un([s],a)]);i.push(u),o+=n}return 0===i.length?Fn([],[0,e]):Kn(i).as2D(i.length,e)}}),Bl=In({stft_:function(t,e,n,r,a){var o;void 0===a&&(a=_l),null==r&&(o=e,r=Math.floor(Math.pow(2,Math.ceil(Math.log(o)/Math.log(2)))));for(var i=Ml(t,e,n),s=Gu(i,a(e)),u=[],c=0;c<i.shape[0];c++)u.push(Sl(s.slice([c,0],[1,e]),r));return Kn(u)}}),Pl=Object.freeze({hannWindow:_l,hammingWindow:Fl,frame:Ml,stft:Bl}),Ll=function(t,e,n){return void 0===n&&(n=1),u(this,void 0,void 0,(function(){var r,a,o,i,s,u,l,p,f,d,h,m,v,g;return c(this,(function(c){switch(c.label){case 0:return r=hn(t,"predictions","inTopK"),a=hn(e,"targets","inTopK"),T(r.rank>1,(function(){return"inTopK() expects the predictions to be of rank 2 or higher, but got "+r.rank})),T(r.rank-1===a.rank,(function(){return"predictions rank should be 1 larger than targets rank, but got predictions rank "+r.rank+" and targets rank "+a.rank})),k(r.shape.slice(0,r.shape.length-1),a.shape,"predictions's shape should be align with the targets' shape, except the last dimension."),o=r.shape[r.shape.length-1],T(n>0&&n<=o,(function(){return"'k' passed to inTopK() must be > 0 && <= the predictions last dimension ("+o+"), but got "+n})),[4,r.data()];case 1:return i=c.sent(),[4,a.data()];case 2:for(s=c.sent(),u=[i.length/o,o],p=u[1],f=U("bool",l=u[0]),d=0;d<l;d++){for(h=d*p,m=i.subarray(h,h+p),v=[],g=0;g<m.length;g++)v.push({value:m[g],index:g});for(v.sort((function(t,e){return e.value-t.value})),f[d]=0,g=0;g<n;g++)if(v[g].index===s[d]){f[d]=1;break}}return t!==r&&r.dispose(),e!==a&&a.dispose(),[2,An(f,a.shape,"bool")]}}))}))};!function(t){t[t.NONE=0]="NONE",t[t.MEAN=1]="MEAN",t[t.SUM=2]="SUM",t[t.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"}(Dl||(Dl={}));var Vl=In({absoluteDifference_:function(t,e,n,r){void 0===r&&(r=Dl.SUM_BY_NONZERO_WEIGHTS);var a=hn(t,"labels","absoluteDifference"),o=hn(e,"predictions","absoluteDifference"),i=null;null!=n&&(i=hn(n,"weights","absoluteDifference")),k(a.shape,o.shape,"Error in absoluteDifference: ");var s=a.sub(o).abs();return Wl(s,i,r)}}),Wl=In({computeWeightedLoss_:function(t,e,n){void 0===n&&(n=Dl.SUM_BY_NONZERO_WEIGHTS);var r=hn(t,"losses","computeWeightedLoss"),a=null;null!=e&&(a=hn(e,"weights","computeWeightedLoss"));var o=null==a?r:r.mul(a);if(n===Dl.NONE)return o;if(n===Dl.SUM)return o.sum();if(n===Dl.MEAN){if(null==a)return o.mean();var i=r.size/a.size,s=o.sum().div(a.sum());return i>1?s.div(Dn(i)):s}if(n===Dl.SUM_BY_NONZERO_WEIGHTS){if(null==a)return o.sum().div(Dn(r.size));var u=a.mul(Wn(r.shape)).notEqual(Dn(0)).sum().toFloat();return o.sum().div(u)}throw Error("Unknown reduction: "+n)}}),zl=In({cosineDistance_:function(t,e,n,r,a){void 0===a&&(a=Dl.SUM_BY_NONZERO_WEIGHTS);var o=hn(t,"labels","cosineDistance"),i=hn(e,"predictions","cosineDistance"),s=null;null!=r&&(s=hn(r,"weights","cosineDistance")),k(o.shape,i.shape,"Error in cosineDistance: ");var u=Dn(1).sub(o.mul(i).sum(n,!0));return Wl(u,s,a)}}),Ul=In({hingeLoss_:function(t,e,n,r){void 0===r&&(r=Dl.SUM_BY_NONZERO_WEIGHTS);var a=hn(t,"labels","hingeLoss"),o=hn(e,"predictions","hingeLoss"),i=null;null!=n&&(i=hn(n,"weights","hingeLoss")),k(a.shape,o.shape,"Error in hingeLoss: ");var s=Dn(1);a=Dn(2).mul(a).sub(s);var u=s.sub(a.mul(o)).relu();return Wl(u,i,r)}}),jl=In({huberLoss_:function(t,e,n,r,a){void 0===r&&(r=1),void 0===a&&(a=Dl.SUM_BY_NONZERO_WEIGHTS);var o=hn(t,"labels","huberLoss"),i=hn(e,"predictions","huberLoss"),s=null;null!=n&&(s=hn(n,"weights","huberLoss")),k(o.shape,i.shape,"Error in huberLoss: ");var u=Dn(r),c=i.sub(o).abs(),l=Wu(c,u),p=c.sub(l),f=Dn(.5).mul(l.square()).add(u.mul(p));return Wl(f,s,a)}}),Gl=In({logLoss_:function(t,e,n,r,a){void 0===r&&(r=1e-7),void 0===a&&(a=Dl.SUM_BY_NONZERO_WEIGHTS);var o=hn(t,"labels","logLoss"),i=hn(e,"predictions","logLoss"),s=null;null!=n&&(s=hn(n,"weights","logLoss")),k(o.shape,i.shape,"Error in logLoss: ");var u=Dn(1),c=Dn(r),l=o.mul(i.add(c).log()).neg().sub(u.sub(o).mul(u.sub(i).add(c).log()));return Wl(l,s,a)}}),Hl=In({meanSquaredError_:function(t,e,n,r){void 0===r&&(r=Dl.SUM_BY_NONZERO_WEIGHTS);var a=hn(t,"labels","meanSquaredError"),o=hn(e,"predictions","meanSquaredError"),i=null;null!=n&&(i=hn(n,"weights","meanSquaredError")),k(a.shape,o.shape,"Error in meanSquaredError: ");var s=a.squaredDifference(o);return Wl(s,i,r)}}),ql=In({sigmoidCrossEntropy_:function(t,e,n,r,a){void 0===r&&(r=0),void 0===a&&(a=Dl.SUM_BY_NONZERO_WEIGHTS);var o=hn(t,"multiClassLabels","sigmoidCrossEntropy"),i=hn(e,"logits","sigmoidCrossEntropy"),s=null;if(null!=n&&(s=hn(n,"weights","sigmoidCrossEntropy")),k(o.shape,i.shape,"Error in sigmoidCrossEntropy: "),r>0){var u=Dn(r),c=Dn(1),l=Dn(.5);o=o.mul(c.sub(u)).add(l.mul(u))}var p=function(t,e){var n=hn(t,"labels","sigmoidCrossEntropyWithLogits"),r=hn(e,"logits","sigmoidCrossEntropyWithLogits");k(n.shape,r.shape,"Error in sigmoidCrossEntropyWithLogits: ");var a=r.relu(),o=r.mul(n),i=r.abs().neg().exp().log1p();return a.sub(o).add(i)}(o,i);return Wl(p,s,a)}}),Kl=In({softmaxCrossEntropy_:function(t,e,n,r,a){void 0===r&&(r=0),void 0===a&&(a=Dl.SUM_BY_NONZERO_WEIGHTS);var o=hn(t,"onehotLabels","softmaxCrossEntropy"),i=hn(e,"logits","softmaxCrossEntropy"),s=null;if(null!=n&&(s=hn(n,"weights","softmaxCrossEntropy")),k(o.shape,i.shape,"Error in softmaxCrossEntropy: "),r>0){var u=Dn(r),c=Dn(1),l=Dn(o.shape[1]);o=o.mul(c.sub(u)).add(u.div(l))}var p=function(t,e,n){if(void 0===n&&(n=-1),-1===n&&(n=e.rank-1),n!==e.rank-1)throw Error("Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank "+e.rank+" and dim was "+n);return sa((function(t,e,r){var a=e.logSumExp([n],!0),o=e.toFloat().sub(a);return r([t,o]),{value:o.mul(t).neg().sum([n]),gradFunc:function(t,e){var r=e[0],a=e[1],o=xn(t.shape,[n]);return[t.reshape(o).mul(r.toFloat().sub(a.exp())),t.reshape(o).mul(a.exp().sub(r.toFloat()))]}}}))(t,e)}(o,i);return Wl(p,s,a)}}),Xl=Object.freeze({get Reduction(){return Dl},absoluteDifference:Vl,computeWeightedLoss:Wl,cosineDistance:zl,hingeLoss:Ul,huberLoss:jl,logLoss:Gl,meanSquaredError:Hl,sigmoidCrossEntropy:ql,softmaxCrossEntropy:Kl});function Yl(t,e){return void 0===e&&(e=!1),Lt.tidy((function(){if(2!==t.shape.length)throw new Error("qr2d() requires a 2D Tensor, but got a "+t.shape.length+"D Tensor.");for(var n=t.shape[0],r=t.shape[1],a=br(n),o=t.clone(),i=Fn([[1]],[1,1]),s=i.clone(),u=n>=r?r:n,c=function(t){var e,u=o,c=s,l=a;e=Lt.tidy((function(){var e=o.slice([t,t],[n-t,1]),u=e.norm(),c=o.slice([t,t],[1,1]),l=Fn([[-1]]).where(c.greater(0),Fn([[1]])),p=c.sub(l.mul(u)),f=e.div(p);s=1===f.shape[0]?i.clone():i.concat(f.slice([1,0],[f.shape[0]-1,f.shape[1]]),0);var d=l.matMul(p).div(u).neg(),h=o.slice([t,0],[n-t,r]),m=d.mul(s);if(0===t)o=h.sub(m.matMul(s.transpose().matMul(h)));else{var v=h.sub(m.matMul(s.transpose().matMul(h)));o=o.slice([0,0],[t,r]).concat(v,0)}var g=a.slice([0,t],[n,a.shape[1]-t]);if(0===t)a=g.sub(g.matMul(s).matMul(m.transpose()));else{var y=g.sub(g.matMul(s).matMul(m.transpose()));a=a.slice([0,0],[n,t]).concat(y,1)}return[s,o,a]})),s=e[0],o=e[1],a=e[2],Je([u,c,l])},l=0;l<u;++l)c(l);return!e&&n>r&&(a=a.slice([0,0],[n,r]),o=o.slice([0,0],[r,r])),[a,o]}))}var $l=In({bandPart_:function(t,e,n){if(e%1!=0)throw new Error("bandPart(): numLower must be an integer, got "+e+".");if(n%1!=0)throw new Error("bandPart(): numUpper must be an integer, got "+n+".");var r=hn(t,"a","bandPart");if(r.rank<2)throw new Error("bandPart(): Rank must be at least 2, got "+r.rank+".");var a=r.shape,o=r.shape.slice(-2),i=o[0],s=o[1];if(!(e<=i))throw new Error("bandPart(): numLower ("+e+") must not be greater than the number of rows ("+i+").");if(!(n<=s))throw new Error("bandPart(): numUpper ("+n+") must not be greater than the number of columns ("+s+").");e<0&&(e=i),n<0&&(n=s);var u=Gn(0,i,1,"int32").reshape([-1,1]),c=Gn(0,s,1,"int32"),l=$u(u,c),p=Su(l.lessEqual(Dn(+e,"int32")),l.greaterEqual(Dn(-n,"int32"))),f=zn([i,s],r.dtype);return Mr(Lr(r.reshape([-1,i,s])).map((function(t){return Tu(p,t,f)}))).reshape(a)}}),Ql=In({gramSchmidt_:function(t){var e;if(Array.isArray(t)){e=!1,T(null!=t&&t.length>0,(function(){return"Gram-Schmidt process: input must not be null, undefined, or empty"}));for(var n=t[0].shape[0],r=function(e){T(t[e].shape[0]===n,(function(){return"Gram-Schmidt: Non-unique lengths found in the input vectors: ("+t[e].shape[0]+" vs. "+n+")"}))},a=1;a<t.length;++a)r(a)}else e=!0,t=Jn(t,t.shape[0],0).map((function(t){return Fr(t,[0])}));T(t.length<=t[0].shape[0],(function(){return"Gram-Schmidt: Number of vectors ("+t.length+") exceeds number of dimensions ("+t[0].shape[0]+")."}));var o=[],i=t,s=function(t){o.push(Lt.tidy((function(){var e=i[t];if(t>0)for(var n=0;n<t;++n){var r=ol(o[n].mulStrict(e)).mul(o[n]);e=e.sub(r)}return e.div(ml(e,"euclidean"))})))};for(a=0;a<t.length;++a)s(a);return e?Mr(o,0):o}}),Jl=In({qr_:function(t,e){if(void 0===e&&(e=!1),t.rank<2)throw new Error("qr() requires input tensor to have a rank >= 2, but got rank "+t.rank);if(2===t.rank)return Yl(t,e);var n=t.shape.slice(0,t.shape.length-2).reduce((function(t,e){return t*e})),r=Lr(t.reshape([n,t.shape[t.shape.length-2],t.shape[t.shape.length-1]]),0),a=[],o=[];return r.forEach((function(t){var n=Yl(t,e),r=n[0],i=n[1];a.push(r),o.push(i)})),[Mr(a,0).reshape(t.shape),Mr(o,0).reshape(t.shape)]}}),Zl=Object.freeze({bandPart:$l,gramSchmidt:Ql,qr:Jl});function tp(t,e,n,r,a,o){null==r&&(r=.5),null==a&&(a=Number.NEGATIVE_INFINITY),null==o&&(o=0);var i=t.shape[0];return n=Math.min(n,i),T(0<=r&&r<=1,(function(){return"iouThreshold must be in [0, 1], but was '"+r+"'"})),T(2===t.rank,(function(){return"boxes must be a 2D tensor, but was of rank '"+t.rank+"'"})),T(4===t.shape[1],(function(){return"boxes must have 4 columns, but 2nd dimension was "+t.shape[1]})),T(1===e.rank,(function(){return"scores must be a 1D tensor"})),T(e.shape[0]===i,(function(){return"scores has incompatible shape with boxes. Expected "+i+", but was "+e.shape[0]})),T(0<=o&&o<=1,(function(){return"softNmsSigma must be in [0, 1], but was '"+o+"'"})),{maxOutputSize:n,iouThreshold:r,scoreThreshold:a,softNmsSigma:o}}var ep=In({resizeBilinear_:function(t,e,n){void 0===n&&(n=!1);var r=hn(t,"images","resizeBilinear");T(3===r.rank||4===r.rank,(function(){return"Error in resizeBilinear: x must be rank 3 or 4, but got rank "+r.rank+"."})),T(2===e.length,(function(){return"Error in resizeBilinear: new shape must 2D, but got shape "+e+"."}));var a=r,o=!1;3===r.rank&&(o=!0,a=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var i=e[0],s=e[1],u=Lt.runKernelFunc((function(t,e){return e([a]),t.resizeBilinear(a,i,s,n)}),{x:a},(function(t,e){return{x:function(){return Lt.runKernelFunc((function(r){return r.resizeBilinearBackprop(t,e[0],n)}),{})}}}),"ResizeBilinear",{alignCorners:n,newHeight:i,newWidth:s});return o?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),np=In({resizeNearestNeighbor_:function(t,e,n){void 0===n&&(n=!1);var r=hn(t,"images","resizeNearestNeighbor");T(3===r.rank||4===r.rank,(function(){return"Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank "+r.rank+"."})),T(2===e.length,(function(){return"Error in resizeNearestNeighbor: new shape must 2D, but got shape "+e+"."})),T("float32"===r.dtype||"int32"===r.dtype,(function(){return"`images` must have `int32` or `float32` as dtype"}));var a=r,o=!1;3===r.rank&&(o=!0,a=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var i=e[0],s=e[1],u=Lt.runKernelFunc((function(t,e){return e([a]),t.resizeNearestNeighbor(a,i,s,n)}),{batchImages:a},(function(t,e){return{batchImages:function(){return Lt.runKernelFunc((function(r){return r.resizeNearestNeighborBackprop(t,e[0],n)}),{})}}}));return o?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),rp=In({nonMaxSuppression_:function(t,e,n,r,a){void 0===r&&(r=.5),void 0===a&&(a=Number.NEGATIVE_INFINITY);var o=hn(t,"boxes","nonMaxSuppression"),i=hn(e,"scores","nonMaxSuppression"),s=tp(o,i,n,r,a);n=s.maxOutputSize,r=s.iouThreshold,a=s.scoreThreshold;var u={maxOutputSize:n,iouThreshold:r,scoreThreshold:a};return Lt.runKernelFunc((function(t){return t.nonMaxSuppression(o,i,n,r,a)}),{boxes:o,scores:i},null,"NonMaxSuppressionV3",u)}}),ap=In({nonMaxSuppressionWithScore_:function(t,e,n,r,a,o){void 0===r&&(r=.5),void 0===a&&(a=Number.NEGATIVE_INFINITY),void 0===o&&(o=0);var i=hn(t,"boxes","nonMaxSuppression"),s=hn(e,"scores","nonMaxSuppression"),u=tp(i,s,n,r,a,o),c={maxOutputSize:n=u.maxOutputSize,iouThreshold:r=u.iouThreshold,scoreThreshold:a=u.scoreThreshold,softNmsSigma:o=u.softNmsSigma},l=Lt.runKernel("NonMaxSuppressionV5",{boxes:i,scores:s},c);return{selectedIndices:l[0],selectedScores:l[1]}}}),op=In({cropAndResize_:function(t,e,n,r,a,o){var i=hn(t,"image","cropAndResize"),s=hn(e,"boxes","cropAndResize","float32"),u=hn(n,"boxInd","cropAndResize","int32");a=a||"bilinear",o=o||0;var c=s.shape[0];return T(4===i.rank,(function(){return"Error in cropAndResize: image must be rank 4,but got rank "+i.rank+"."})),T(2===s.rank&&4===s.shape[1],(function(){return"Error in cropAndResize: boxes must be have size ["+c+",4] but had shape "+s.shape+"."})),T(1===u.rank&&u.shape[0]===c,(function(){return"Error in cropAndResize: boxInd must be have size ["+c+"] but had shape "+s.shape+"."})),T(2===r.length,(function(){return"Error in cropAndResize: cropSize must be of length 2, but got length "+r.length+"."})),T(r[0]>=1&&r[1]>=1,(function(){return"cropSize must be atleast [1,1], but was "+r})),T("bilinear"===a||"nearest"===a,(function(){return"method must be bilinear or nearest, but was "+a})),Lt.runKernelFunc((function(t,e){return t.cropAndResize(i,s,u,r,a,o)}),{images:i,boxes:s,boxInd:u},null,"CropAndResize",{method:a,extrapolationValue:o,cropSize:r})}}),ip=Object.freeze({resizeBilinear:ep,resizeNearestNeighbor:np,nonMaxSuppression:rp,nonMaxSuppressionAsync:function(t,e,n,r,a){return void 0===r&&(r=.5),void 0===a&&(a=Number.NEGATIVE_INFINITY),u(this,void 0,void 0,(function(){var o,i,s,u,l,p,f;return c(this,(function(c){switch(c.label){case 0:return o=hn(t,"boxes","nonMaxSuppressionAsync"),i=hn(e,"scores","nonMaxSuppressionAsync"),s=tp(o,i,n,r,a),n=s.maxOutputSize,r=s.iouThreshold,a=s.scoreThreshold,[4,Promise.all([o.data(),i.data()])];case 1:return u=c.sent(),l=u[0],p=u[1],f=Va(l,p,n,r,a),o!==t&&o.dispose(),i!==e&&i.dispose(),[2,f]}}))}))},nonMaxSuppressionWithScore:ap,nonMaxSuppressionWithScoreAsync:function(t,e,n,r,a,o){return void 0===r&&(r=.5),void 0===a&&(a=Number.NEGATIVE_INFINITY),void 0===o&&(o=0),u(this,void 0,void 0,(function(){var i,s,u,l,p,f,d;return c(this,(function(c){switch(c.label){case 0:return i=hn(t,"boxes","nonMaxSuppressionAsync"),s=hn(e,"scores","nonMaxSuppressionAsync"),u=tp(i,s,n,r,a,o),n=u.maxOutputSize,r=u.iouThreshold,a=u.scoreThreshold,o=u.softNmsSigma,[4,Promise.all([i.data(),s.data()])];case 1:return l=c.sent(),p=l[0],f=l[1],d=Wa(p,f,n,r,a,o),i!==t&&i.dispose(),s!==e&&s.dispose(),[2,d]}}))}))},cropAndResize:op}),sp=function(t,e){return!(t>0)||"linear"===e},up=function(t,e,n){if(null==n||"linear"===n)return t;if("relu"===n)return t.mul(e.step());throw new Error("Gradient for activation "+n+" has not been implemented yet.")},cp=function(t,e){var n=e,r=ma(t.shape,e.shape);return r.length>0&&(n=n.sum(r)),n.reshape(t.shape)},lp=function(t,e,n){if("linear"===e)return t;if("relu"===e)return ll(t);if("elu"===e)return sl(t);if("relu6"===e)return pl(t);if("prelu"===e)return cl(t,n);throw new Error("Unknown fused activation "+e+".")},pp=In({fusedMatMul_:function(t){var e,n=t.a,r=t.b,a=t.transposeA,o=void 0!==a&&a,i=t.transposeB,s=void 0!==i&&i,u=t.bias,c=t.activation,l=void 0===c?"linear":c,p=t.preluActivationWeights;if(!1===sp(Lt.state.gradientDepth,l)){var f=kc(n,r,o,s);return null!=u&&(f=Au(f,u)),lp(f,l,p)}var d=hn(n,"a","fused matMul"),h=hn(r,"b","fused matMul");e=Ot(d,h),d=e[0],h=e[1];var m=o?d.shape[d.rank-2]:d.shape[d.rank-1],v=s?h.shape[h.rank-1]:h.shape[h.rank-2],g=o?d.shape[d.rank-1]:d.shape[d.rank-2],y=s?h.shape[h.rank-2]:h.shape[h.rank-1],x=d.shape.slice(0,-2),b=h.shape.slice(0,-2),w=D(x),C=D(b);T(d.rank>=2&&h.rank>=2&&d.rank===h.rank,(function(){return"Error in fused matMul: inputs must have the same rank of at least 2, got ranks "+d.rank+" and "+h.rank+"."})),T(_(x,b),(function(){return"Error in fused matMul: outer dimensions ("+x+") and ("+b+") of Tensors with shapes "+d.shape+" and "+h.shape+" must match."})),T(m===v,(function(){return"Error in fused matMul: inner shapes ("+m+") and ("+v+") of Tensors with shapes "+d.shape+" and "+h.shape+" and transposeA="+o+" and transposeB="+s+" must match."}));var E,S,N=d.shape.slice(0,-2).concat([g,y]),I=o?d.as3D(w,m,g):d.as3D(w,g,m),R=s?h.as3D(C,y,v):h.as3D(C,v,y);null!=u&&va(N,(E=Ot(E=hn(u,"bias","fused matMul"),d)[0]).shape),null!=p&&(S=hn(p,"prelu weights","fused matMul"));var k={$a:I,$b:R};return null!=u&&(k.$bias=E),null!=p&&(k.$preluActivationWeights=S),Lt.runKernelFunc((function(t,e){var n=t.fusedBatchMatMul({a:I,b:R,transposeA:o,transposeB:s,bias:E,activation:l,preluActivationWeights:S});return e([I,R,n]),n}),k,(function(t,e){var n=e[0],r=e[1],a=e[2],i=up(t,a,l),c={};return null!=u&&(c={$bias:function(){return cp(E,i)}}),o||s?!o&&s?Object.assign({$a:function(){return i.matMul(r,!1,!1)},$b:function(){return i.matMul(n,!0,!1)}},c):o&&!s?Object.assign({$a:function(){return r.matMul(i,!1,!0)},$b:function(){return n.matMul(i,!1,!1)}},c):Object.assign({$a:function(){return r.matMul(i,!0,!0)},$b:function(){return i.matMul(n,!0,!0)}},c):Object.assign({$a:function(){return i.matMul(r,!1,!0)},$b:function(){return n.matMul(i,!0,!1)}},c)})).reshape(N)}}),fp=In({fusedConv2d_:function(t){var e=t.x,n=t.filter,r=t.strides,a=t.pad,o=t.dataFormat,i=void 0===o?"NHWC":o,s=t.dilations,u=void 0===s?[1,1]:s,c=t.dimRoundingMode,l=t.bias,p=t.activation,f=void 0===p?"linear":p,d=t.preluActivationWeights;if(f=f||"linear",!1===sp(Lt.state.gradientDepth,f)){var h=xc(e,n,r,a,i,u,c);return null!=l&&(h=Au(h,l)),lp(h,f,d)}var m=hn(e,"x","conv2d"),v=hn(n,"filter","conv2d"),g=m,y=!1;3===m.rank&&(y=!0,g=m.as4D(1,m.shape[0],m.shape[1],m.shape[2])),T(4===g.rank,(function(){return"Error in fused conv2d: input must be rank 4, but got rank "+g.rank+"."})),T(4===v.rank,(function(){return"Error in fused conv2d: filter must be rank 4, but got rank "+v.rank+"."})),null!=c&&T(F(a),(function(){return"Error in fused conv2d: pad must be an integer when using, dimRoundingMode "+c+" but got pad "+a+"."})),T(g.shape[3]===v.shape[2],(function(){return"Error in conv2d: depth of input ("+g.shape[3]+") must match input depth for filter "+v.shape[2]+"."})),T(Ra(r,u),(function(){return"Error in conv2D: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+u+"'"})),T("NHWC"===i,(function(){return"Error in conv2d: got dataFormat of "+i+" but only NHWC is currently supported."}));var x,b,w=xa(g.shape,v.shape,r,u,a,c);null!=l&&(x=Ot(x=hn(l,"bias","fused conv2d"),m)[0],va(w.outShape,x.shape)),null!=d&&(b=hn(d,"prelu weights","fused conv2d"));var C={x:g,filter:v};null!=l&&(C.bias=x),null!=d&&(C.preluActivationWeights=b);var E=[v,g],S=Lt.runKernelFunc((function(t,e){var n=t.fusedConv2d({input:g,filter:v,convInfo:w,bias:x,activation:f,preluActivationWeights:b});return e([v,g,n]),n}),C,(function(t,e){var n=e,o=n[0],i=n[1],s=n[2],c=up(t,s,f);T(Ia(u),(function(){return"Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+u+"'"}));var p={};return null!=l&&(p={bias:function(){return cp(x,c)}}),Object.assign({x:function(){return Cc(i.shape,c,o,r,a)},filter:function(){return wc(i,c,o.shape,r,a)}},p)}),"FusedConv2D",{convInfo:w,activation:f},E,[!0]);return y?S.as3D(S.shape[1],S.shape[2],S.shape[3]):S}}),dp=In({fusedDepthwiseConv2d_:function(t){var e=t.x,n=t.filter,r=t.strides,a=t.pad,o=t.dataFormat,i=void 0===o?"NHWC":o,s=t.dilations,u=void 0===s?[1,1]:s,c=t.dimRoundingMode,l=t.bias,p=t.activation,f=void 0===p?"linear":p,d=t.preluActivationWeights;if(!1===sp(Lt.state.gradientDepth,f)){var h=Ec(e,n,r,a,i,u,c);return null!=l&&(h=Au(h,l)),lp(h,f,d)}var m=hn(e,"x","depthwiseConv2d"),v=hn(n,"filter","depthwiseConv2d"),g=m,y=!1;3===m.rank&&(y=!0,g=m.as4D(1,m.shape[0],m.shape[1],m.shape[2])),T(4===g.rank,(function(){return"Error in fused depthwiseConv2d: input must be rank 4, but got rank "+g.rank+"."})),T(4===v.rank,(function(){return"Error in fused depthwiseConv2d: filter must be rank 4, but got rank "+v.rank+"."})),T(g.shape[3]===v.shape[2],(function(){return"Error in fused depthwiseConv2d: number of input channels ("+g.shape[3]+") must match the inChannels dimension in filter "+v.shape[2]+"."})),null==u&&(u=[1,1]),T(Ra(r,u),(function(){return"Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+u+"'"})),null!=c&&T(F(a),(function(){return"Error in fused depthwiseConv2d: pad must be an integer when using dimRoundingMode "+c+" but got pad "+a+"."}));var x,b,w=xa(g.shape,v.shape,r,u,a,c,!0);null!=l&&(x=Ot(x=hn(l,"bias","fused conv2d"),m)[0],va(w.outShape,x.shape)),null!=d&&(b=hn(d,"prelu weights","fused depthwiseConv2d"));var C={x:g,filter:v};null!=l&&(C.bias=x),null!=d&&(C.preluActivationWeights=b);var E=[v,g],S=Lt.runKernelFunc((function(t,e){var n=t.fusedDepthwiseConv2D({input:g,filter:v,convInfo:w,bias:x,activation:f,preluActivationWeights:b});return e([v,g,n]),n}),C,(function(t,e){T(Ia(u),(function(){return"Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '"+u+"'"}));var n=e[0],r=e[1],a=e[2],o=up(t,a,f),i={};return null!=l&&(i={bias:function(){return cp(x,o)}}),Object.assign({x:function(){return Sc(r.shape,o,n,w)},filter:function(){return Nc(r,o,n.shape,w)}},i)}),"FusedDepthwiseConv2D",{convInfo:w,activation:f},E,[!0]);return y?S.as3D(S.shape[1],S.shape[2],S.shape[3]):S}}),hp=Object.freeze({matMul:pp,conv2d:fp,depthwiseConv2d:dp}),mp=Object.freeze({image:ip,linalg:Zl,losses:Xl,spectral:Il,fused:hp,signal:Pl,square:ks,conv1d:yc,conv2d:xc,conv3d:bc,depthwiseConv2d:Ec,separableConv2d:Ic,conv2dTranspose:Rc,conv3dTranspose:Tc,op:In,batchNormalization2d:vu,batchNormalization3d:gu,batchNormalization4d:yu,batchNormalization:xu,batchNorm:bu,batchNorm2d:wu,batchNorm3d:Cu,batchNorm4d:Eu,booleanMaskAsync:hc,complex:Rn,real:Tn,imag:kn,concat:Kn,concat1d:Xn,concat2d:Yn,concat3d:$n,concat4d:Qn,split:Jn,matMul:kc,dot:Ac,outerProduct:Oc,reverse:Dc,reverse1d:_c,reverse2d:Fc,reverse3d:Mc,reverse4d:Bc,maxPool:Vc,avgPool:Wc,pool:zc,maxPool3d:Uc,avgPool3d:jc,slice:Gc,slice1d:Hc,slice2d:qc,slice3d:Kc,slice4d:Xc,abs:As,acos:Os,acosh:Ds,asin:_s,asinh:Fs,atan:Ms,atanh:Bs,ceil:Ps,clipByValue:Ls,cos:Vs,cosh:Ws,erf:zs,exp:Us,expm1:js,floor:Gs,log:Hs,log1p:qs,logSigmoid:Ks,neg:Xs,reciprocal:Ys,round:$s,rsqrt:Qs,sigmoid:Js,sign:Zs,isNaN:tu,isInf:eu,isFinite:nu,sin:ru,sinh:au,softplus:ou,sqrt:iu,step:su,tan:uu,tanh:cu,all:$c,any:Qc,argMax:Jc,argMin:Zc,logSumExp:tl,max:el,mean:nl,min:rl,moments:al,sum:ol,prod:il,equal:Ju,equalStrict:Zu,greater:tc,greaterEqual:ec,greaterEqualStrict:nc,greaterStrict:rc,less:ac,lessEqual:oc,lessEqualStrict:ic,lessStrict:sc,notEqual:uc,notEqualStrict:cc,add:Au,addN:Ou,addStrict:Du,atan2:_u,div:Fu,divNoNan:Mu,divStrict:Bu,floorDiv:Pu,maximum:Lu,maximumStrict:Vu,minimum:Wu,minimumStrict:zu,mod:Uu,modStrict:ju,mul:Gu,mulStrict:Hu,pow:qu,powStrict:Ku,squaredDifference:Xu,squaredDifferenceStrict:Yu,sub:$u,subStrict:Qu,elu:sl,leakyRelu:ul,prelu:cl,relu:ll,relu6:pl,selu:fl,logicalAnd:Su,logicalNot:Nu,logicalOr:Iu,logicalXor:Ru,where:Tu,whereAsync:ku,buffer:pr,print:fr,batchToSpaceND:dr,broadcastTo:hr,cast:mr,clone:vr,cumsum:gr,depthToSpace:yr,expandDims:xr,eye:br,multinomial:wr,oneHot:Cr,pad:Er,pad1d:Sr,pad2d:Nr,pad3d:Ir,pad4d:Rr,rand:Tr,randomNormal:kr,randomGamma:Ar,randomUniform:Or,reshape:Dr,spaceToBatchND:_r,squeeze:Fr,stack:Mr,tile:Br,truncatedNormal:Pr,unstack:Lr,setdiff1dAsync:Vr,fill:Un,linspace:jn,ones:Wn,range:Gn,scalar:Dn,tensor:An,tensor1d:_n,tensor2d:Fn,tensor3d:Mn,tensor4d:Bn,tensor5d:Pn,tensor6d:Ln,variable:Vn,zeros:zn,onesLike:Hn,zerosLike:qn,transpose:dl,softmax:ca,logSoftmax:la,localResponseNormalization:hl,norm:ml,gather:fc,unsortedSegmentSum:dc,basicLSTMCell:vl,multiRNNCell:gl,movingAverage:yl,stridedSlice:xl,topk:bl,scatterND:wl,fft:Cl,ifft:El,rfft:Sl,irfft:Nl,sparseToDense:Rl,gatherND:Tl,diag:kl,dropout:Al,hannWindow:_l,hammingWindow:Fl,frame:Ml,stft:Bl,inTopKAsync:Ll});function vp(t,e){Array.isArray(t)||(t=[t]),t.forEach((function(t){null!=t&&T("complex64"!==t.dtype,(function(){return e+" does not support complex64 tensors."}))}))}function gp(t,e,n,r){if("linear"===n)return t.linear(e);if("relu"===n)return t.relu(e);if("elu"===n)return t.elu(e);if("relu6"===n)return t.relu6(e);if("prelu"===n)return t.prelu(e,r);throw new Error("Activation "+n+" has not been implemented for the CPU backend.")}var yp=function(t){function e(){var e=t.call(this)||this;return e.blockSize=48,e.firstUse=!0,e.data=new pa(e,Lt),e}return s(e,t),e.prototype.write=function(t,e,n){this.firstUse&&(this.firstUse=!1,f().get("IS_NODE")&&pn("\n============================\nHi there 👋. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.\n============================"));var r={};return this.data.set(r,{values:t,dtype:n}),r},e.prototype.move=function(t,e,n,r){this.data.set(t,{values:e,dtype:r})},e.prototype.numDataIds=function(){return this.data.numDataIds()},e.prototype.read=function(t){return u(this,void 0,void 0,(function(){return c(this,(function(e){return[2,this.readSync(t)]}))}))},e.prototype.readSync=function(t){var e=this.data.get(t),n=e.dtype,r=e.complexTensors;return"complex64"===n?_a(this.readSync(r.real.dataId),this.readSync(r.imag.dataId)):this.data.get(t).values},e.prototype.bufferSync=function(t){var e=this.readSync(t.dataId),n=e;if("string"===t.dtype)try{n=e.map((function(t){return lt(t)}))}catch(t){throw new Error("Failed to decode encoded string bytes into utf-8")}return pr(t.shape,t.dtype,n)},e.prototype.makeOutput=function(t,e,n){var r=this.write(t,e,n);return Lt.makeTensorFromDataId(r,e,n,this)},e.prototype.disposeData=function(t){if(this.data.has(t)){var e=this.data.get(t).complexTensors;null!=e&&(e.real.dispose(),e.imag.dispose()),this.data.delete(t)}},e.prototype.time=function(t){return u(this,void 0,void 0,(function(){var e;return c(this,(function(n){return e=st(),t(),[2,{kernelMs:st()-e}]}))}))},e.prototype.memory=function(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}},e.prototype.complex=function(t,e){var n=this.makeOutput(null,t.shape,"complex64");return this.data.get(n.dataId).complexTensors={real:Lt.keep(t.clone()),imag:Lt.keep(e.clone())},n},e.prototype.real=function(t){return this.data.get(t.dataId).complexTensors.real.clone()},e.prototype.imag=function(t){return this.data.get(t.dataId).complexTensors.imag.clone()},e.prototype.slice=function(t,e,n){if(vp(t,"slice"),Zr(t.shape,e,n)){var r=ta(e,t.strides),a=D(n);return An(this.readSync(t.dataId).subarray(r,r+a),n,t.dtype)}for(var o=pr(n,t.dtype),i=this.bufferSync(t),s=0;s<o.size;++s){var u=o.indexToLoc(s).map((function(t,n){return t+e[n]}));o.values[s]=i.get.apply(i,u)}return o.toTensor()},e.prototype.stridedSlice=function(t,e,n,r){vp(t,"stridedSlice");var a=$r(e,n,r);if(a.some((function(t){return 0===t})))return An([],a);for(var o=pr(a,t.dtype),i=this.bufferSync(t),s=0;s<o.size;s++){for(var u=o.indexToLoc(s),c=new Array(u.length),l=0;l<c.length;l++)c[l]=u[l]*r[l]+e[l];o.set.apply(o,[i.get.apply(i,c)].concat(u))}return o.toTensor()},e.prototype.diag=function(t){for(var e=this.readSync(t.dataId),n=pr([t.size,t.size],t.dtype),r=n.values,a=0;a<e.length;a++)r[a*t.size+a]=e[a];return n.toTensor()},e.prototype.unstack=function(t,e){for(var n=t.shape[e],r=new Array(t.rank-1),a=0,o=0;o<t.rank;o++)o!==e&&(r[a++]=t.shape[o]);var i=new Array(t.rank).fill(0),s=t.shape.slice();s[e]=1;var u=new Array(n);for(o=0;o<u.length;o++)i[e]=o,u[o]=this.slice(t,i,s).reshape(r);return u},e.prototype.reverse=function(t,e){vp(t,"reverse");for(var n=pr(t.shape,t.dtype),r=this.bufferSync(t),a=function(a){var o=n.indexToLoc(a),i=o.slice();e.forEach((function(e){return i[e]=t.shape[e]-1-i[e]})),n.set.apply(n,[r.get.apply(r,i)].concat(o))},o=0;o<n.size;o++)a(o);return n.toTensor()},e.prototype.concat=function(t,e){var n=this;if("complex64"===t[0].dtype){var r=t.map((function(t){return Tn(t)})),a=t.map((function(t){return kn(t)}));return Rn(this.concat(r,e),this.concat(a,e))}var o=t.map((function(t){var n=D(t.shape.slice(e));return t.as2D(-1,n)})),i=Nn(o.map((function(t){return t.shape})),1),s=pr(i,t[0].dtype).values;if(1===o[0].shape[0]){var u=0;o.forEach((function(t){s.set(n.readSync(t.dataId),u),u+=t.size}))}else{var c=0;o.forEach((function(t){for(var e=n.readSync(t.dataId),r=0,a=0;a<t.shape[0];++a)for(var o=a*i[1]+c,u=0;u<t.shape[1];++u)s[o+u]=e[r++];c+=t.shape[1]}))}var l=Nn(t.map((function(t){return t.shape})),e);return An(s,l,t[0].dtype)},e.prototype.neg=function(t){return vp(t,"neg"),this.multiply(Dn(-1),t)},e.prototype.add=function(t,e){return"complex64"===t.dtype||"complex64"===e.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),e.cast("complex64"),(function(t,e,n,r){return{real:t+n,imag:e+r}})):this.broadcastedBinaryOp(t,e,kt(t.dtype,e.dtype),(function(t,e){return t+e}))},e.prototype.addN=function(t){var e=this;vp(t,"addN");for(var n=t.map((function(t){return e.readSync(t.dataId)})),r=pr(t[0].shape,t[0].dtype),a=r.values,o=0;o<t.length;o++)for(var i=n[o],s=0;s<a.length;s++)a[s]+=i[s];return r.toTensor()},e.prototype.subtract=function(t,e){return"complex64"===t.dtype||"complex64"===e.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),e.cast("complex64"),(function(t,e,n,r){return{real:t-n,imag:e-r}})):this.broadcastedBinaryOp(t,e,kt(t.dtype,e.dtype),(function(t,e){return t-e}))},e.prototype.pow=function(t,e){return vp([t,e],"pow"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.pow(t,e)}))},e.prototype.batchMatMul=function(t,e,n,r){vp([t,e],"matMul");for(var a=n?t.shape[1]:t.shape[2],o=n?t.shape[2]:t.shape[1],i=r?e.shape[1]:e.shape[2],s=t.shape[0],u=this.readSync(t.dataId),c=this.readSync(e.dataId),l=n?[t.strides[0],1,t.strides[1]]:[t.strides[0],t.strides[1],1],p=l[0],f=l[1],d=l[2],h=r?[1,e.strides[1],e.strides[0]]:[e.strides[1],1,e.strides[0]],m=h[0],v=h[1],g=h[2],y=o*i,x=pr([s,o,i],t.dtype),b=x.values,w=this.blockSize,C=0;C<s;C++)for(var E=0;E<o;E+=w)for(var S=0;S<i;S+=w)for(var N=0;N<a;N+=w)for(var I=Math.min(E+w,o),R=Math.min(S+w,i),T=Math.min(N+w,a),k=E;k<I;k++)for(var A=S;A<R;A++){for(var O=0,D=N;D<T;D++)O+=u[C*p+k*f+D*d]*c[D*m+A*v+C*g];b[C*y+(k*i+A)]+=O}return x.toTensor()},e.prototype.fusedBatchMatMul=function(t){var e=t.a,n=t.b,r=t.transposeA,a=t.transposeB,o=t.bias,i=t.activation,s=t.preluActivationWeights,u=this.batchMatMul(e,n,r,a);return o&&(u=this.add(u,o)),i&&(u=gp(this,u,i,s)),u},e.prototype.multiply=function(t,e){return"complex64"===t.dtype||"complex64"===e.dtype?this.broadcastedBinaryComplexOp(t.cast("complex64"),e.cast("complex64"),(function(t,e,n,r){return{real:t*n-e*r,imag:t*r+e*n}})):this.broadcastedBinaryOp(t,e,kt(t.dtype,e.dtype),(function(t,e){return t*e}))},e.prototype.realDivide=function(t,e){return vp([t,e],"realDivide"),this.broadcastedBinaryOp(t,e,"float32",(function(t,e){return t/e}))},e.prototype.floorDiv=function(t,e){return vp([t,e],"floorDiv"),this.broadcastedBinaryOp(t,e,"int32",(function(t,e){return Math.floor(t/e)}))},e.prototype.sum=function(t,e){vp(t,"sum"),bn("sum",e,t.rank);for(var n=yn(t.shape,e),r=n[0],a=n[1],o=zn(r,kt(t.dtype,"int32")),i=D(a),s=this.readSync(o.dataId),u=this.readSync(t.dataId),c=0;c<s.length;++c){for(var l=c*i,p=0,f=0;f<i;++f)p+=u[l+f];s[c]=p}return o},e.prototype.prod=function(t,e){vp(t,"sum");for(var n=yn(t.shape,e),r=n[0],a=n[1],o=zn(r,kt(t.dtype,"int32")),i=D(a),s=this.readSync(o.dataId),u=this.readSync(t.dataId),c=0;c<s.length;++c){for(var l=c*i,p=1,f=0;f<i;++f)p*=u[l+f];s[c]=p}return o},e.prototype.unsortedSegmentSum=function(t,e,n){vp(t,"unsortedSegmentSum");for(var r=[],a=t.rank-e.rank,o=0;o<a;++o)e=e.expandDims(o+1);for(o=0;o<n;++o){var i=Dn(o,"int32"),s=Ju(i,e).asType("float32").mul(t).sum(0);r.push(s)}return Mr(r)},e.prototype.argMin=function(t,e){vp(t,"argMin");var n=[e];bn("argMin",n,t.rank);for(var r=yn(t.shape,n),a=r[0],o=r[1],i=zn(a,"int32"),s=D(o),u=this.readSync(i.dataId),c=this.readSync(t.dataId),l=0;l<u.length;++l){for(var p=l*s,f=c[p],d=0,h=0;h<s;++h){var m=c[p+h];m<f&&(f=m,d=h)}u[l]=d}return i},e.prototype.argMax=function(t,e){vp(t,"argMax");var n=[e];bn("argMax",n,t.rank);for(var r=yn(t.shape,n),a=r[0],o=r[1],i=zn(a,"int32"),s=D(o),u=this.readSync(i.dataId),c=this.readSync(t.dataId),l=0;l<u.length;++l){for(var p=l*s,f=c[p],d=0,h=0;h<s;++h){var m=c[p+h];m>f&&(f=m,d=h)}u[l]=d}return i},e.prototype.cumsum=function(t,e,n,r){if(vp(t,"cumsum"),e!==t.rank-1)throw new Error("backend.cumsum in CPU expects an inner-most axis="+(t.rank-1)+" but got axis="+e);for(var a=kt(t.dtype,"int32"),o=zn(t.shape,a),i=this.readSync(o.dataId),s=this.readSync(t.dataId),u=t.shape[t.rank-1],c=r?function(t,e){return t+u-e-1}:function(t,e){return t+e},l=0;l<s.length;l+=u)for(var p=0;p<u;p++){var f=c(l,p);if(0===p)i[f]=n?0:s[f];else{var d=c(l,p-1);i[f]=n?s[d]+i[d]:s[f]+i[d]}}return o},e.prototype.equal=function(t,e){return vp([t,e],"equal"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t===e?1:0}))},e.prototype.notEqual=function(t,e){return vp([t,e],"notEqual"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t!==e?1:0}))},e.prototype.less=function(t,e){return vp([t,e],"less"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t<e?1:0}))},e.prototype.lessEqual=function(t,e){return vp([t,e],"lessEqual"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t<=e?1:0}))},e.prototype.greater=function(t,e){return vp([t,e],"greater"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t>e?1:0}))},e.prototype.greaterEqual=function(t,e){return vp([t,e],"greaterEqual"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t>=e?1:0}))},e.prototype.logicalNot=function(t){vp(t,"logicalNot");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r<e.length;++r)n[r]=e[r]?0:1;return this.makeOutput(n,t.shape,"bool")},e.prototype.logicalAnd=function(t,e){return vp([t,e],"logicalAnd"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t&&e}))},e.prototype.logicalOr=function(t,e){return vp([t,e],"logicalOr"),this.broadcastedBinaryOp(t,e,"bool",(function(t,e){return t||e}))},e.prototype.select=function(t,e,n){vp([t,e,n],"select");for(var r=this.readSync(t.dataId),a=this.readSync(e.dataId),o=this.readSync(n.dataId),i=zn(e.shape,kt(e.dtype,n.dtype)),s=this.readSync(i.dataId),u=0,c=0===t.rank||t.rank>1||1===e.rank?1:D(e.shape.slice(1)),l=0;l<r.length;l++)for(var p=0;p<c;p++)1===r[l]?s[u++]=a[l]:s[u++]=o[l];return i},e.prototype.where=function(t){vp([t],"where");var e=this.readSync(t.dataId);return Xa(t.shape,e)},e.prototype.topk=function(t,e,n){return vp(t,"topk"),Ka(this.readSync(t.dataId),t.shape,t.dtype,e)},e.prototype.min=function(t,e){vp(t,"min"),bn("min",e,t.rank);for(var n=yn(t.shape,e),r=n[0],a=n[1],o=zn(r,t.dtype),i=D(a),s=this.readSync(o.dataId),u=this.readSync(t.dataId),c=0;c<s.length;++c){for(var l=c*i,p=u[l],f=0;f<i;++f){var d=u[l+f];d<p&&(p=d)}s[c]=p}return o},e.prototype.minimum=function(t,e){return vp([t,e],"minimum"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.min(t,e)}))},e.prototype.mod=function(t,e){return vp([t,e],"mod"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){var n=t%e;return t<0&&e<0||t>=0&&e>=0?n:(n+e)%e}))},e.prototype.max=function(t,e){vp(t,"max"),bn("max",e,t.rank);for(var n=yn(t.shape,e),r=n[0],a=n[1],o=zn(r,t.dtype),i=D(a),s=this.readSync(o.dataId),u=this.readSync(t.dataId),c=0;c<s.length;++c){for(var l=c*i,p=u[l],f=0;f<i;++f){var d=u[l+f];d>p&&(p=d)}s[c]=p}return o},e.prototype.maximum=function(t,e){return vp([t,e],"maximum"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.max(t,e)}))},e.prototype.all=function(t,e){vp(t,"all"),bn("all",e,t.rank);for(var n=yn(t.shape,e),r=n[0],a=n[1],o=zn(r,t.dtype),i=D(a),s=this.readSync(o.dataId),u=this.readSync(t.dataId),c=0;c<s.length;++c){for(var l=c*i,p=u[l],f=0;f<i;++f){var d=u[l+f];p=p&&d}s[c]=p}return o},e.prototype.any=function(t,e){vp(t,"any"),bn("any",e,t.rank);for(var n=yn(t.shape,e),r=n[0],a=n[1],o=zn(r,t.dtype),i=D(a),s=this.readSync(o.dataId),u=this.readSync(t.dataId),c=0;c<s.length;++c){for(var l=c*i,p=u[l],f=0;f<i;++f){var d=u[l+f];p=p||d}s[c]=p}return o},e.prototype.squaredDifference=function(t,e){return vp([t,e],"squaredDifference"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){var n=t-e;return n*n}))},e.prototype.ceil=function(t){vp(t,"ceil");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r)n[r]=Math.ceil(e[r]);return this.makeOutput(n,t.shape,"float32")},e.prototype.floor=function(t){vp(t,"floor");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r)n[r]=Math.floor(e[r]);return this.makeOutput(n,t.shape,"float32")},e.prototype.sign=function(t){vp(t,"x");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r)e[r]<0?n[r]=-1:e[r]>0?n[r]=1:n[r]=0;return this.makeOutput(n,t.shape,"float32")},e.prototype.isNaN=function(t){vp(t,"x");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r<e.length;++r)Number.isNaN(e[r])&&(n[r]=1);return this.makeOutput(n,t.shape,"bool")},e.prototype.isInf=function(t){vp(t,"x");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r<e.length;++r)Math.abs(e[r])===1/0&&(n[r]=1);return this.makeOutput(n,t.shape,"bool")},e.prototype.isFinite=function(t){vp(t,"x");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r<e.length;++r)Number.isFinite(e[r])&&(n[r]=1);return this.makeOutput(n,t.shape,"bool")},e.prototype.round=function(t){vp(t,"round");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r){var a=Math.floor(e[r]);e[r]-a<.5?n[r]=Math.floor(e[r]):e[r]-a>.5?n[r]=Math.ceil(e[r]):n[r]=a%2==0?a:a+1}return this.makeOutput(n,t.shape,"float32")},e.prototype.exp=function(t){vp(t,"exp");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r)n[r]=Math.exp(e[r]);return this.makeOutput(n,t.shape,"float32")},e.prototype.expm1=function(t){vp(t,"expm1");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r)n[r]=Math.expm1(e[r]);return this.makeOutput(n,t.shape,"float32")},e.prototype.log=function(t){vp(t,"log");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r){var a=e[r];n[r]=Math.log(a)}return this.makeOutput(n,t.shape,"float32")},e.prototype.log1p=function(t){vp(t,"log1p");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r){var a=e[r];n[r]=Math.log1p(a)}return this.makeOutput(n,t.shape,"float32")},e.prototype.sqrt=function(t){vp(t,"sqrt");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r){var a=e[r];n[r]=Math.sqrt(a)}return this.makeOutput(n,t.shape,"float32")},e.prototype.rsqrt=function(t){vp(t,"rsqrt");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r){var a=e[r];n[r]=1/Math.sqrt(a)}return this.makeOutput(n,t.shape,"float32")},e.prototype.reciprocal=function(t){vp(t,"reciprocal");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r<e.length;++r)n[r]=1/e[r];return this.makeOutput(n,t.shape,"float32")},e.prototype.linear=function(t){return t},e.prototype.relu=function(t){vp(t,"relu");for(var e=zn(t.shape,t.dtype),n=this.readSync(e.dataId),r=this.readSync(t.dataId),a=0;a<r.length;++a)n[a]=Math.max(0,r[a]);return e},e.prototype.relu6=function(t){vp(t,"relu");for(var e=zn(t.shape,t.dtype),n=this.readSync(e.dataId),r=this.readSync(t.dataId),a=0;a<r.length;++a)n[a]=Math.min(Math.max(0,r[a]),6);return e},e.prototype.prelu=function(t,e){return vp([t,e],"prelu"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return t<0?e*t:t}))},e.prototype.elu=function(t){vp(t,"elu");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r){var a=n[r];e[r]=a>=0?a:Math.exp(a)-1}return this.makeOutput(e,t.shape,"float32")},e.prototype.eluDer=function(t,e){vp([t,e],"eluDer");for(var n=new Float32Array(e.size),r=this.readSync(e.dataId),a=this.readSync(t.dataId),o=0;o<r.length;++o){var i=r[o];n[o]=i>=1?a[o]:a[o]*(i+1)}return this.makeOutput(n,e.shape,"float32")},e.prototype.selu=function(t){vp(t,"selu");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r){var a=n[r];e[r]=a>=0?1.0507009873554805*a:1.7580993408473768*(Math.exp(a)-1)}return this.makeOutput(e,t.shape,"float32")},e.prototype.clip=function(t,e,n){vp(t,"clip");for(var r=new Float32Array(t.size),a=this.readSync(t.dataId),o=0;o<a.length;++o){var i=a[o];r[o]=i>n?n:i<e?e:i}return this.makeOutput(r,t.shape,"float32")},e.prototype.abs=function(t){for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.abs(n[r]);return this.makeOutput(e,t.shape,"float32")},e.prototype.complexAbs=function(t){for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<t.size;++r){var a=n[2*r],o=n[2*r+1];e[r]=Math.hypot(a,o)}return this.makeOutput(e,t.shape,"float32")},e.prototype.int=function(t){vp(t,"int");for(var e=new Int32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=n[r];return this.makeOutput(e,t.shape,"int32")},e.prototype.sigmoid=function(t){vp(t,"sigmoid");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=1/(1+Math.exp(-n[r]));return this.makeOutput(e,t.shape,"float32")},e.prototype.softplus=function(t){vp(t,"softplus");for(var e=Math.log(1.1920928955078125e-7)+2,n=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a){var o,i=r[a]>-e,s=r[a]<e,u=Math.exp(r[a]);o=s?u:i?r[a]:Math.log(1+u),n[a]=o}return this.makeOutput(n,t.shape,"float32")},e.prototype.sin=function(t){vp(t,"sin");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.sin(n[r]);return this.makeOutput(e,t.shape,"float32")},e.prototype.cos=function(t){vp(t,"cos");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.cos(n[r]);return this.makeOutput(e,t.shape,"float32")},e.prototype.tan=function(t){vp(t,"tan");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.tan(n[r]);return this.makeOutput(e,t.shape,"float32")},e.prototype.asin=function(t){vp(t,"asin");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.asin(n[r]);return this.makeOutput(e,t.shape,"float32")},e.prototype.acos=function(t){vp(t,"acos");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.acos(n[r]);return this.makeOutput(e,t.shape,"float32")},e.prototype.atan=function(t){vp(t,"atan");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.atan(n[r]);return this.makeOutput(e,t.shape,"float32")},e.prototype.atan2=function(t,e){return vp([t,e],"atan2"),this.broadcastedBinaryOp(t,e,t.dtype,(function(t,e){return Math.atan2(t,e)}))},e.prototype.sinh=function(t){vp(t,"sinh");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.sinh(n[r]);return this.makeOutput(e,t.shape,"float32")},e.prototype.cosh=function(t){vp(t,"cosh");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.cosh(n[r]);return this.makeOutput(e,t.shape,"float32")},e.prototype.tanh=function(t){vp(t,"tanh");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=M(n[r]);return this.makeOutput(e,t.shape,"float32")},e.prototype.asinh=function(t){vp(t,"asinh");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.asinh(n[r]);return this.makeOutput(e,t.shape,"float32")},e.prototype.acosh=function(t){vp(t,"acosh");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.acosh(n[r]);return this.makeOutput(e,t.shape,"float32")},e.prototype.atanh=function(t){vp(t,"atanh");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r)e[r]=Math.atanh(n[r]);return this.makeOutput(e,t.shape,"float32")},e.prototype.erf=function(t){vp(t,"erf");for(var e=new Float32Array(t.size),n=this.readSync(t.dataId),r=0;r<n.length;++r){var a=Math.sign(n[r]),o=Math.abs(n[r]),i=1/(1+.3275911*o);e[r]=a*(1-((((1.061405429*i-1.453152027)*i+1.421413741)*i-.284496736)*i+.254829592)*i*Math.exp(-o*o))}return this.makeOutput(e,t.shape,"float32")},e.prototype.step=function(t,e){void 0===e&&(e=0),vp(t,"step");for(var n=new Float32Array(t.size),r=this.readSync(t.dataId),a=0;a<r.length;++a){var o=r[a];isNaN(o)?n[a]=NaN:n[a]=o>0?1:e}return this.makeOutput(n,t.shape,"float32")},e.prototype.fusedConv2d=function(t){var e=t.input,n=t.filter,r=t.convInfo,a=t.bias,o=t.activation,i=t.preluActivationWeights,s=this.conv2d(e,n,r);return a&&(s=this.add(s,a)),o&&(s=gp(this,s,o,i)),s},e.prototype.conv2d=function(t,e,n){vp([t,e],"conv2d");for(var r=n.filterHeight,a=n.filterWidth,o=n.dilationHeight,i=n.dilationWidth,s=n.padInfo.left,u=n.padInfo.top,c="channelsLast"===n.dataFormat,l=pr(n.outShape,t.dtype),p=t.strides[0],f=c?t.strides[1]:t.strides[2],d=c?t.strides[2]:1,h=c?1:t.strides[1],m=l.strides[0],v=c?l.strides[1]:l.strides[2],g=c?l.strides[2]:1,y=c?1:l.strides[1],x=this.readSync(t.dataId),b=this.readSync(e.dataId),w=l.values,C=0;C<n.batchSize;++C)for(var E=C*p,S=C*m,N=0;N<n.outHeight;++N)for(var I=S+N*v,R=N*n.strideHeight-u,T=0;T<r;T++){var k=R+T*o;if(!(k<0||k>=n.inHeight))for(var A=T*e.strides[0],O=E+k*f,D=0;D<n.outWidth;++D)for(var _=I+D*g,F=D*n.strideWidth-s,M=0;M<a;M++){var B=F+M*i;if(!(B<0||B>=n.inWidth))for(var P=O+B*d,L=A+M*e.strides[1],V=0;V<n.inChannels;++V){for(var W=x[P+V*h],z=0;z<n.outChannels;++z)w[_+z*y]+=W*b[L+z];L+=n.outChannels}}}return l.toTensor()},e.prototype.conv3d=function(t,e,n){for(var r=n.filterDepth,a=n.filterHeight,o=n.filterWidth,i=n.dilationDepth,s=n.dilationHeight,u=n.dilationWidth,c=n.padInfo.front,l=n.padInfo.left,p=n.padInfo.top,f=pr(n.outShape,t.dtype),d=this.readSync(t.dataId),h=this.readSync(e.dataId),m=f.values,v=0;v<n.batchSize;++v)for(var g=v*t.strides[0],y=v*f.strides[0],x=0;x<n.outDepth;++x)for(var b=y+x*f.strides[1],w=x*n.strideDepth-c,C=0;C<r;C++){var E=w+C*i;if(!(E<0||E>=n.inDepth))for(var S=C*e.strides[0],N=g+E*t.strides[1],I=0;I<n.outHeight;++I)for(var R=b+I*f.strides[2],T=I*n.strideHeight-p,k=0;k<a;k++){var A=T+k*s;if(!(A<0||A>=n.inHeight))for(var O=S+k*e.strides[1],D=N+A*t.strides[2],_=0;_<n.outWidth;++_)for(var F=R+_*n.outChannels,M=_*n.strideWidth-l,B=0;B<o;B++){var P=M+B*u;if(!(P<0||P>=n.inWidth))for(var L=O+B*e.strides[2],V=D+P*n.inChannels,W=L,z=0;z<n.inChannels;++z){for(var U=d[V+z],j=0;j<n.outChannels;++j)m[F+j]+=U*h[W+j];W+=n.outChannels}}}}return f.toTensor()},e.prototype.conv2dDerInput=function(t,e,n){vp([t,e],"conv2dDerInput");for(var r=pr(n.inShape,"float32"),a=r.values,o=this.readSync(t.dataId),i=this.readSync(e.dataId),s=e.strides,u=s[0],c=s[1],l=s[2],p=n.batchSize,f=n.filterHeight,d=n.filterWidth,h=n.inChannels,m=n.inHeight,v=n.inWidth,g=n.outChannels,y=n.outHeight,x=n.outWidth,b=n.strideHeight,w=n.strideWidth,C=n.dataFormat,E=f-1-n.padInfo.top,S=d-1-n.padInfo.left,N="channelsLast"===C,I=r.strides[0],R=N?r.strides[1]:r.strides[2],T=N?r.strides[2]:1,k=N?1:r.strides[1],A=t.strides[0],O=N?t.strides[1]:t.strides[2],D=N?t.strides[2]:1,_=N?1:t.strides[1],F=0;F<p;++F)for(var M=0;M<h;++M)for(var B=0;B<m;++B)for(var P=B-E,L=Math.max(0,Math.ceil(P/b)),V=Math.min(y,(f+P)/b),W=0;W<v;++W){for(var z=W-S,U=Math.max(0,Math.ceil(z/w)),j=Math.min(x,(d+z)/w),G=0,H=L;H<V;++H)for(var q=H*b-P,K=U;K<j;++K)for(var X=A*F+O*H+D*K,Y=u*(f-1-q)+c*(d-1-(K*w-z))+l*M,$=0;$<g;++$)G+=o[X+_*$]*i[Y+$];a[I*F+R*B+T*W+k*M]=G}return r.toTensor()},e.prototype.conv3dDerInput=function(t,e,n){for(var r=pr(n.inShape,"float32"),a=r.values,o=r.strides,i=o[0],s=o[1],u=o[2],c=o[3],l=this.readSync(t.dataId),p=t.strides,f=p[0],d=p[1],h=p[2],m=p[3],v=this.readSync(e.dataId),g=e.strides,y=g[0],x=g[1],b=g[2],w=g[3],C=n.batchSize,E=n.filterDepth,S=n.filterHeight,N=n.filterWidth,I=n.inChannels,R=n.inDepth,T=n.inHeight,k=n.inWidth,A=n.outChannels,O=n.outDepth,D=n.outHeight,_=n.outWidth,F=n.strideDepth,M=n.strideHeight,B=n.strideWidth,P=E-1-n.padInfo.front,L=S-1-n.padInfo.top,V=N-1-n.padInfo.left,W=0;W<C;++W)for(var z=0;z<I;++z)for(var U=0;U<R;++U)for(var j=U-P,G=Math.max(0,Math.ceil(j/F)),H=Math.min(O,(E+j)/F),q=0;q<T;++q)for(var K=q-L,X=Math.max(0,Math.ceil(K/M)),Y=Math.min(D,(S+K)/M),$=0;$<k;++$){for(var Q=$-V,J=Math.max(0,Math.ceil(Q/B)),Z=Math.min(_,(N+Q)/B),tt=0,et=G;et<H;++et)for(var nt=et*F-j,rt=X;rt<Y;++rt)for(var at=rt*M-K,ot=J;ot<Z;++ot)for(var it=f*W+d*et+h*rt+m*ot,st=y*(E-1-nt)+x*(S-1-at)+b*(N-1-(ot*B-Q))+w*z,ut=0;ut<A;++ut)tt+=l[it+ut]*v[st+ut];a[i*W+s*U+u*q+c*$+z]=tt}return r.toTensor()},e.prototype.conv2dDerFilter=function(t,e,n){vp([t,e],"conv2dDerFilter");for(var r=n.strideHeight,a=n.strideWidth,o=n.filterHeight,i=n.filterWidth,s="channelsLast"===n.dataFormat,u=pr(n.filterShape,"float32"),c=n.padInfo.left,l=n.padInfo.top,p=this.bufferSync(t),f=this.bufferSync(e),d=0;d<o;++d)for(var h=Math.max(0,Math.ceil((l-d)/r)),m=Math.min(n.outHeight,(n.inHeight+l-d)/r),v=0;v<i;++v)for(var g=Math.max(0,Math.ceil((c-v)/a)),y=Math.min(n.outWidth,(n.inWidth+c-v)/a),x=0;x<n.inChannels;++x)for(var b=0;b<n.outChannels;++b){for(var w=0,C=0;C<n.batchSize;++C)for(var E=h;E<m;++E)for(var S=d+E*r-l,N=g;N<y;++N){var I=v+N*a-c;w+=s?p.get(C,S,I,x)*f.get(C,E,N,b):p.get(C,x,S,I)*f.get(C,b,E,N)}u.set(w,d,v,x,b)}return u.toTensor()},e.prototype.conv3dDerFilter=function(t,e,n){for(var r=n.strideDepth,a=n.strideHeight,o=n.strideWidth,i=n.filterDepth,s=n.filterHeight,u=n.filterWidth,c=pr(n.filterShape,"float32"),l=c.values,p=c.strides,f=p[0],d=p[1],h=p[2],m=p[3],v=this.readSync(e.dataId),g=e.strides,y=g[0],x=g[1],b=g[2],w=g[3],C=this.readSync(t.dataId),E=t.strides,S=E[0],N=E[1],I=E[2],R=E[3],T=n.padInfo.front,k=n.padInfo.left,A=n.padInfo.top,O=0;O<i;++O)for(var D=Math.max(0,Math.ceil((T-O)/r)),_=Math.min(n.outDepth,(n.inDepth+T-O)/r),F=O*f,M=0;M<s;++M)for(var B=Math.max(0,Math.ceil((A-M)/a)),P=Math.min(n.outHeight,(n.inHeight+A-M)/a),L=M*d+F,V=0;V<u;++V)for(var W=Math.max(0,Math.ceil((k-V)/o)),z=Math.min(n.outWidth,(n.inWidth+k-V)/o),U=V*h+L,j=0;j<n.inChannels;++j)for(var G=j*m+U,H=0;H<n.outChannels;++H){for(var q=0,K=0;K<n.batchSize;++K)for(var X=K*S,Y=K*y,$=D;$<_;++$)for(var Q=(O+$*r-T)*N+X,J=$*x+Y,Z=B;Z<P;++Z)for(var tt=(M+Z*a-A)*I+Q,et=Z*b+J,nt=W;nt<z;++nt){var rt=nt*w+et;q+=C[(V+nt*o-k)*R+tt+j]*v[rt+H]}l[G+H]=q}return c.toTensor()},e.prototype.fusedDepthwiseConv2D=function(t){var e=t.input,n=t.filter,r=t.convInfo,a=t.bias,o=t.activation,i=t.preluActivationWeights,s=this.depthwiseConv2D(e,n,r);return a&&(s=this.add(s,a)),o&&(s=gp(this,s,o,i)),s},e.prototype.depthwiseConv2D=function(t,e,n){vp([t,e],"depthwiseConv2D");for(var r=n.filterHeight,a=n.filterWidth,o=n.dilationHeight,i=n.dilationWidth,s=n.padInfo.left,u=n.padInfo.top,c=n.outChannels/n.inChannels,l=pr(n.outShape,t.dtype),p=this.readSync(t.dataId),f=this.readSync(e.dataId),d=l.values,h=0;h<n.batchSize;++h)for(var m=h*t.strides[0],v=h*l.strides[0],g=0;g<n.outHeight;++g)for(var y=v+g*l.strides[1],x=g*n.strideHeight-s,b=0;b<r;++b){var w=x+b*o;if(!(w<0||w>=n.inHeight))for(var C=b*e.strides[0],E=m+w*t.strides[1],S=0;S<n.outWidth;++S)for(var N=y+S*l.strides[2],I=S*n.strideWidth-u,R=0;R<a;++R){var T=I+R*i;if(!(T<0||T>=n.inWidth))for(var k=C+R*e.strides[1],A=E+T*n.inChannels,O=N,D=k,_=0;_<n.inChannels;++_){for(var F=p[A+_],M=0;M<c;++M)d[O+M]+=F*f[D+M];O+=c,D+=c}}}return l.toTensor()},e.prototype.depthwiseConv2DDerInput=function(t,e,n){vp([t,e],"depthwiseConv2DDerInput");for(var r=pr(n.inShape,"float32"),a=r.values,o=r.strides,i=o[0],s=o[1],u=o[2],c=this.readSync(t.dataId),l=t.strides,p=l[0],f=l[1],d=l[2],h=this.readSync(e.dataId),m=e.strides,v=m[0],g=m[1],y=m[2],x=n.batchSize,b=n.filterHeight,w=n.filterWidth,C=n.inChannels,E=n.inHeight,S=n.inWidth,N=n.outChannels,I=n.outHeight,R=n.outWidth,T=n.strideHeight,k=n.strideWidth,A=b-1-n.padInfo.top,O=w-1-n.padInfo.left,D=N/C,_=0;_<x;++_)for(var F=0;F<C;++F)for(var M=0;M<E;++M)for(var B=M-A,P=Math.max(0,Math.ceil(B/T)),L=Math.min(I,(b+B)/T),V=0;V<S;++V){for(var W=V-O,z=Math.max(0,Math.ceil(W/k)),U=Math.min(R,(w+W)/k),j=0,G=P;G<L;++G)for(var H=G*T-B,q=z;q<U;++q)for(var K=p*_+f*G+d*q,X=v*(b-1-H)+g*(w-1-(q*k-W))+y*F,Y=0;Y<D;++Y)j+=c[K+(F*D+Y)]*h[X+Y];a[i*_+s*M+u*V+F]=j}return r.toTensor()},e.prototype.depthwiseConv2DDerFilter=function(t,e,n){vp([t,e],"depthwiseConv2DDerFilter");for(var r=n.strideHeight,a=n.strideWidth,o=n.filterHeight,i=n.filterWidth,s=pr(n.filterShape,"float32"),u=n.padInfo.left,c=n.padInfo.top,l=n.outChannels/n.inChannels,p=this.bufferSync(t),f=this.bufferSync(e),d=0;d<o;++d)for(var h=Math.max(0,Math.ceil((c-d)/r)),m=Math.min(n.outHeight,(n.inHeight+c-d)/r),v=0;v<i;++v)for(var g=Math.max(0,Math.ceil((u-v)/a)),y=Math.min(n.outWidth,(n.inWidth+u-v)/a),x=0;x<n.outChannels;++x){for(var b=Math.trunc(x/l),w=x%l,C=0,E=0;E<n.batchSize;++E)for(var S=h;S<m;++S)for(var N=d+S*r-c,I=g;I<y;++I){var R=v+I*a-u;C+=p.get(E,N,R,b)*f.get(E,S,I,x)}s.set(C,d,v,b,w)}return s.toTensor()},e.prototype.tile=function(t,e){return vp(t,"tile"),qa(this.bufferSync(t),e)},e.prototype.pad=function(t,e,n){vp(t,"pad");var r=e.map((function(e,n){return e[0]+t.shape[n]+e[1]})),a=e.map((function(t){return t[0]})),o=this.bufferSync(t),i=pr(r,t.dtype);0!==n&&i.values.fill(n);for(var s=0;s<t.size;s++){var u=o.indexToLoc(s),c=u.map((function(t,e){return t+a[e]}));i.set.apply(i,[o.get.apply(o,u)].concat(c))}return i.toTensor()},e.prototype.transpose=function(t,e){vp(t,"transpose");for(var n=new Array(t.rank),r=0;r<n.length;r++)n[r]=t.shape[e[r]];var a=this.readSync(t.dataId),o=pr(n,t.dtype),i=this.bufferSync(t);for(r=0;r<t.size;++r){for(var s=i.indexToLoc(r),u=new Array(s.length),c=0;c<u.length;c++)u[c]=s[e[c]];var l=o.locToIndex(u);o.values[l]=a[r]}return o.toTensor()},e.prototype.gather=function(t,e,n){vp([t,e],"gather");var r=t.shape.slice(),a=this.readSync(e.dataId);r[n]=a.length;for(var o=pr(r,t.dtype),i=this.bufferSync(t),s=0;s<o.size;++s){var u=o.indexToLoc(s),c=u.slice();c[n]=a[u[n]];var l=i.locToIndex(c);o.values[s]=i.values[l]}return o.toTensor()},e.prototype.batchToSpaceND=function(t,e,n){vp([t],"batchToSpaceND");var r=e.reduce((function(t,e){return t*e})),a=Wr(t.shape,e,r),o=zr(a.length,e.length),i=Ur(t.shape,e,r),s=jr(n,e.length),u=Gr(i,n,e.length);return t.reshape(a).transpose(o).reshape(i).slice(s,u)},e.prototype.spaceToBatchND=function(t,e,n){vp([t],"spaceToBatchND");var r=e.reduce((function(t,e){return t*e})),a=[[0,0]];a.push.apply(a,n);for(var o=1+e.length;o<t.shape.length;++o)a.push([0,0]);var i=t.pad(a),s=Wr(i.shape,e,r,!1),u=zr(s.length,e.length,!1),c=Ur(i.shape,e,r,!1);return i.reshape(s).transpose(u).reshape(c)},e.prototype.pool=function(t,e,n){vp(t,"pool");for(var r=e.strideHeight,a=e.strideWidth,o=e.dilationHeight,i=e.dilationWidth,s=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=e.padInfo.top,l=e.padInfo.left,p="max"===n?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,f=this.readSync(t.dataId),d=pr(e.outShape,t.dtype),h=d.values,m=e.outShape[1]*e.outShape[2]*e.outShape[3],v=e.outShape[2]*e.outShape[3],g=e.outShape[3],y=0;y<e.batchSize;++y)for(var x=y*m,b=y*t.strides[0],w=0;w<e.inChannels;++w)for(var C=0;C<e.outHeight;++C)for(var E=C*r-c,S=Math.max(0,E),N=Math.min(e.inHeight,s+E),I=x+C*v,R=0;R<e.outWidth;++R){for(var T=R*a-l,k=Math.max(0,T),A=Math.min(e.inWidth,u+T),O=p,D=0,_=0,F=S;F<N;F+=o){for(var M=b+F*t.strides[1],B=k;B<A;B+=i){var P=f[M+B*t.strides[2]+w];"max"===n&&P>O?O=P:"avg"===n&&(D+=P,_++)}if(isNaN(O))break}h[I+R*g+w]="avg"===n?D/_:O}return d.toTensor()},e.prototype.maxPool=function(t,e){return this.pool(t,e,"max")},e.prototype.maxPoolPositions=function(t,e){for(var n=pr(e.outShape,"int32"),r=e.strideHeight,a=e.strideWidth,o=e.dilationHeight,i=e.dilationWidth,s=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=e.padInfo.top,l=e.padInfo.left,p=this.bufferSync(t),f=0;f<e.batchSize;++f)for(var d=0;d<e.inChannels;++d)for(var h=0;h<e.outHeight;++h){for(var m=h*r-c,v=m;v<0;)v+=o;for(var g=Math.min(e.inHeight,s+m),y=0;y<e.outWidth;++y){for(var x=y*a-l,b=x;b<0;)b+=i;for(var w=Math.min(e.inWidth,u+x),C=Number.NEGATIVE_INFINITY,E=-1,S=v;S<g;S+=o)for(var N=S-m,I=b;I<w;I+=i){var R=I-x,T=p.get(f,S,I,d);T>C&&(C=T,E=N*u+R)}n.set(E,f,h,y,d)}}return n.toTensor()},e.prototype.maxPoolBackprop=function(t,e,n,r){vp([e,n],"maxPoolBackprop");for(var a=this.maxPoolPositions(e,r),o=r.strideHeight,i=r.strideWidth,s=r.dilationHeight,u=r.dilationWidth,c=r.effectiveFilterHeight,l=r.effectiveFilterWidth,p=l-1-r.padInfo.left,f=c-1-r.padInfo.top,d=pr(e.shape,"float32"),h=this.bufferSync(a),m=this.bufferSync(t),v=0;v<r.batchSize;++v)for(var g=0;g<r.inChannels;++g)for(var y=0;y<r.inHeight;++y)for(var x=0;x<r.inWidth;++x){for(var b=y-f,w=x-p,C=0,E=0;E<c;E+=s){var S=(b+E)/o;if(!(S<0||S>=r.outHeight||Math.floor(S)!==S))for(var N=0;N<l;N+=u){var I=(w+N)/i;if(!(I<0||I>=r.outWidth||Math.floor(I)!==I)){var R=c*l-1-h.get(v,S,I,g)===E*l+N?1:0;0!==R&&(C+=m.get(v,S,I,g)*R)}}}d.set(C,v,y,x,g)}return d.toTensor()},e.prototype.avgPoolBackprop=function(t,e,n){vp([t,e],"avgPoolBackprop");for(var r=n.strideHeight,a=n.strideWidth,o=n.filterHeight,i=n.filterWidth,s=n.dilationHeight,u=n.dilationWidth,c=n.effectiveFilterHeight,l=n.effectiveFilterWidth,p=l-1-n.padInfo.left,f=c-1-n.padInfo.top,d=pr(e.shape,"float32"),h=1/(o*i),m=this.bufferSync(t),v=0;v<n.batchSize;++v)for(var g=0;g<n.inChannels;++g)for(var y=0;y<n.inHeight;++y)for(var x=0;x<n.inWidth;++x){for(var b=y-f,w=x-p,C=0,E=0;E<c;E+=s){var S=(b+E)/r;if(!(S<0||S>=n.outHeight||Math.floor(S)!==S))for(var N=0;N<l;N+=u){var I=(w+N)/a;I<0||I>=n.outWidth||Math.floor(I)!==I||(C+=m.get(v,S,I,g))}}d.set(C*h,v,y,x,g)}return d.toTensor()},e.prototype.pool3d=function(t,e,n){vp(t,"pool3d");for(var r=e.strideDepth,a=e.strideHeight,o=e.strideWidth,i=e.dilationDepth,s=e.dilationHeight,u=e.dilationWidth,c=e.effectiveFilterDepth,l=e.effectiveFilterHeight,p=e.effectiveFilterWidth,f=e.padInfo.front,d=e.padInfo.top,h=e.padInfo.left,m="max"===n?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,v=this.readSync(t.dataId),g=pr(e.outShape,t.dtype),y=g.values,x=e.outShape[1]*e.outShape[2]*e.outShape[3]*e.outShape[4],b=e.outShape[2]*e.outShape[3]*e.outShape[4],w=e.outShape[3]*e.outShape[4],C=e.outShape[4],E=0;E<e.batchSize;++E)for(var S=E*x,N=E*t.strides[0],I=0;I<e.inChannels;++I)for(var R=0;R<e.outDepth;++R){for(var T=R*r-f,k=T;k<0;)k+=i;for(var A=Math.min(e.inDepth,c+T),O=S+R*b,D=0;D<e.outHeight;++D){for(var _=D*a-d,F=_;F<0;)F+=s;for(var M=Math.min(e.inHeight,l+_),B=O+D*w,P=0;P<e.outWidth;++P){for(var L=P*o-h,V=L;V<0;)V+=u;for(var W=Math.min(e.inWidth,p+L),z=B+P*C,U=m,j=0,G=0,H=k;H<A;H+=i){for(var q=N+H*t.strides[1],K=F;K<M;K+=s){for(var X=q+K*t.strides[2],Y=V;Y<W;Y+=u){var $=v[X+Y*t.strides[3]+I];if("max"===n&&$>U?U=$:"avg"===n&&(j+=$,G++),isNaN(U))break}if(isNaN(U))break}if(isNaN(U))break}y[z+I]="avg"===n?j/G:U}}}return g.toTensor()},e.prototype.avgPool3d=function(t,e){return vp(t,"avgPool3d"),this.pool3d(t,e,"avg").toFloat()},e.prototype.avgPool3dBackprop=function(t,e,n){vp([t,e],"avgPool3dBackprop");for(var r=n.strideDepth,a=n.strideHeight,o=n.strideWidth,i=n.filterDepth,s=n.filterHeight,u=n.filterWidth,c=n.dilationDepth,l=n.dilationHeight,p=n.dilationWidth,f=n.effectiveFilterDepth,d=n.effectiveFilterHeight,h=n.effectiveFilterWidth,m=f-1-n.padInfo.front,v=h-1-n.padInfo.left,g=d-1-n.padInfo.top,y=pr(e.shape,"float32"),x=1/(i*s*u),b=this.bufferSync(t),w=0;w<n.batchSize;++w)for(var C=0;C<n.inChannels;++C)for(var E=0;E<n.inDepth;++E)for(var S=0;S<n.inHeight;++S)for(var N=0;N<n.inWidth;++N){for(var I=E-m,R=S-g,T=N-v,k=0,A=0;A<f;A+=c){var O=(I+A)/r;if(!(O<0||O>=n.outDepth||Math.floor(O)!==O))for(var D=0;D<d;D+=l){var _=(R+D)/a;if(!(_<0||_>=n.outHeight||Math.floor(_)!==_))for(var F=0;F<h;F+=p){var M=(T+F)/o;M<0||M>=n.outWidth||Math.floor(M)!==M||(k+=b.get(w,O,_,M,C))}}}y.set(k*x,w,E,S,N,C)}return y.toTensor()},e.prototype.maxPool3d=function(t,e){return vp(t,"maxPool3d"),this.pool3d(t,e,"max").toFloat()},e.prototype.maxPool3dPositions=function(t,e){for(var n=pr(e.outShape,"int32"),r=e.strideDepth,a=e.strideHeight,o=e.strideWidth,i=e.dilationDepth,s=e.dilationHeight,u=e.dilationWidth,c=e.effectiveFilterDepth,l=e.effectiveFilterHeight,p=e.effectiveFilterWidth,f=e.padInfo.front,d=e.padInfo.top,h=e.padInfo.left,m=this.bufferSync(t),v=0;v<e.batchSize;++v)for(var g=0;g<e.inChannels;++g)for(var y=0;y<e.outDepth;++y){for(var x=y*r-f,b=x;b<0;)b+=i;for(var w=Math.min(e.inDepth,c+x),C=0;C<e.outHeight;++C){for(var E=C*a-d,S=E;S<0;)S+=s;for(var N=Math.min(e.inHeight,l+E),I=0;I<e.outWidth;++I){for(var R=I*o-h,T=R;T<0;)T+=u;for(var k=Math.min(e.inWidth,p+R),A=Number.NEGATIVE_INFINITY,O=-1,D=b;D<w;D+=i)for(var _=D-x,F=S;F<N;F+=s)for(var M=F-E,B=T;B<k;B+=u){var P=B-R,L=m.get(v,D,F,B,g);L>=A&&(A=L,O=_*l*p+M*l+P)}n.set(O,v,y,C,I,g)}}}return n.toTensor()},e.prototype.maxPool3dBackprop=function(t,e,n,r){vp([e,n],"maxPool3dBackprop");for(var a=this.maxPool3dPositions(e,r),o=r.strideDepth,i=r.strideHeight,s=r.strideWidth,u=r.dilationDepth,c=r.dilationHeight,l=r.dilationWidth,p=r.effectiveFilterDepth,f=r.effectiveFilterHeight,d=r.effectiveFilterWidth,h=p-1-r.padInfo.front,m=d-1-r.padInfo.left,v=f-1-r.padInfo.top,g=pr(e.shape,"float32"),y=this.bufferSync(a),x=this.bufferSync(t),b=0;b<r.batchSize;++b)for(var w=0;w<r.inChannels;++w)for(var C=0;C<r.inDepth;++C)for(var E=0;E<r.inHeight;++E)for(var S=0;S<r.inWidth;++S){for(var N=C-h,I=E-v,R=S-m,T=0,k=0;k<p;k+=u){var A=(N+k)/o;if(!(A<0||A>=r.outDepth||Math.floor(A)!==A))for(var O=0;O<f;O+=c){var D=(I+O)/i;if(!(D<0||D>=r.outHeight||Math.floor(D)!==D))for(var _=0;_<d;_+=l){var F=(R+_)/s;if(!(F<0||F>=r.outWidth||Math.floor(F)!==F)){var M=p*f*d-1-y.get(b,A,D,F,w)===k*f*d+O*d+_?1:0;0!==M&&(T+=x.get(b,A,D,F,w)*M)}}}}g.set(T,b,C,E,S,w)}return g.toTensor()},e.prototype.cast=function(t,e){return ka(t,e,this)},e.prototype.reshape=function(t,e){return Aa(t,e)},e.prototype.avgPool=function(t,e){return vp(t,"avgPool"),this.pool(t,e,"avg").toFloat()},e.prototype.resizeBilinear=function(t,e,n,r){vp(t,"resizeBilinear");for(var a=t.shape,o=a[0],i=a[1],s=a[2],u=a[3],c=this.readSync(t.dataId),l=new Float32Array(D([o,e,n,u])),p=[r&&e>1?i-1:i,r&&n>1?s-1:s],f=[r&&e>1?e-1:e,r&&n>1?n-1:n],d=0,h=p[0]/f[0],m=p[1]/f[1],v=0;v<o;v++)for(var g=0;g<e;g++)for(var y=h*g,x=Math.floor(y),b=y-x,w=Math.min(i-1,Math.ceil(y)),C=v*t.strides[0]+x*t.strides[1],E=v*t.strides[0]+w*t.strides[1],S=0;S<n;S++)for(var N=m*S,I=Math.floor(N),R=N-I,T=Math.min(s-1,Math.ceil(N)),k=C+I*t.strides[2],A=E+I*t.strides[2],O=C+T*t.strides[2],_=E+T*t.strides[2],F=0;F<u;F++){var M=c[k+F],B=c[A+F],P=M+(c[O+F]-M)*R,L=P+(B+(c[_+F]-B)*R-P)*b;l[d++]=L}return An(l,[o,e,n,u])},e.prototype.resizeBilinearBackprop=function(t,e,n){vp([t,e],"resizeBilinearBackprop");for(var r=e.shape,a=r[0],o=r[1],i=r[2],s=r[3],u=t.shape,c=u[1],l=u[2],p=new Float32Array(a*o*i*s),f=[n&&c>1?o-1:o,n&&l>1?i-1:i],d=[n&&c>1?c-1:c,n&&l>1?l-1:l],h=f[0]/d[0],m=f[1]/d[1],v=this.readSync(t.dataId),g=0,y=0;y<a;y++)for(var x=y*e.strides[0],b=0;b<c;b++)for(var w=b*h,C=Math.floor(w),E=Math.min(Math.ceil(w),o-1),S=x+C*e.strides[1],N=x+E*e.strides[1],I=w-C,R=1-I,T=0;T<l;T++)for(var k=T*m,A=Math.floor(k),O=Math.min(Math.ceil(k),i-1),D=k-A,_=1-D,F=S+A*e.strides[2],M=S+O*e.strides[2],B=N+A*e.strides[2],P=N+O*e.strides[2],L=R*_,V=R*D,W=I*_,z=I*D,U=0;U<s;U++){var j=v[g++];p[F+U]+=j*L,p[M+U]+=j*V,p[B+U]+=j*W,p[P+U]+=j*z}return Bn(p,[a,i,o,s],e.dtype)},e.prototype.resizeNearestNeighbor=function(t,e,n,r){vp(t,"resizeNearestNeighbor");for(var a=t.shape,o=a[0],i=a[1],s=a[2],u=a[3],c=this.readSync(t.dataId),l=new Float32Array(o*e*n*u),p=[r&&e>1?i-1:i,r&&n>1?s-1:s],f=[r&&e>1?e-1:e,r&&n>1?n-1:n],d=p[0]/f[0],h=p[1]/f[1],m=0,v=0;v<o;v++)for(var g=v*t.strides[0],y=0;y<e;y++)for(var x=d*y,b=g+Math.min(i-1,r?Math.round(x):Math.floor(x))*t.strides[1],w=0;w<n;w++)for(var C=h*w,E=b+Math.min(s-1,r?Math.round(C):Math.floor(C))*t.strides[2],S=0;S<u;S++){var N=c[E+S];l[m++]=N}return An(l,[o,e,n,u],t.dtype)},e.prototype.resizeNearestNeighborBackprop=function(t,e,n){vp([t,e],"resizeNearestNeighborBackprop");for(var r=e.shape,a=r[0],o=r[1],i=r[2],s=r[3],u=t.shape,c=u[1],l=u[2],p=new Float32Array(a*o*i*s),f=this.readSync(t.dataId),d=[n&&c>1?o-1:o,n&&l>1?i-1:i],h=[n&&c>1?c-1:c,n&&l>1?l-1:l],m=d[0]/h[0],v=d[1]/h[1],g=1/m,y=1/v,x=2*Math.ceil(g)+2,b=2*Math.ceil(y)+2,w=0;w<a;w++)for(var C=w*e.strides[0],E=0;E<o;E++)for(var S=C+E*e.strides[1],N=Math.floor(E*g),I=Math.floor(N-x/2),R=0;R<i;R++)for(var T=S+R*e.strides[2],k=Math.floor(R*y),A=Math.floor(k-b/2),O=0;O<s;O++){for(var D=0,_=0;_<x;_++){var F=_+I;if(!(F<0||F>=c)){var M=C+F*t.strides[1],B=F*m;if(E===Math.min(o-1,n?Math.round(B):Math.floor(B)))for(var P=0;P<b;P++){var L=P+A;if(!(L<0||L>=l)){var V=M+L*t.strides[2],W=L*v;R===Math.min(i-1,n?Math.round(W):Math.floor(W))&&(D+=f[V+O])}}}}p[T+O]=D}return Bn(p,e.shape,e.dtype)},e.prototype.batchNormalization=function(t,e,n,r,a,o){vp([t,e,n,a,o],"batchNorm");for(var i=this.readSync(t.dataId),s=this.readSync(e.dataId),u=this.readSync(n.dataId),c=a?this.readSync(a.dataId):new Float32Array([1]),l=o?this.readSync(o.dataId):new Float32Array([0]),p=new Float32Array(i.length),f=l.length,d=c.length,h=u.length,m=s.length,v=0,g=0,y=0,x=0,b=0;b<i.length;++b)p[b]=l[v++]+(i[b]-s[g++])*c[y++]/Math.sqrt(u[x++]+r),v>=f&&(v=0),g>=m&&(g=0),y>=d&&(y=0),x>=h&&(x=0);return Bn(p,t.shape)},e.prototype.localResponseNormalization4D=function(t,e,n,r,a){vp(t,"localResponseNormalization4D");var o=t.shape[3],i=o-1,s=this.readSync(t.dataId),u=t.size,c=new Float32Array(u);function l(t){for(var n=t%o,r=t-n+Math.max(0,n-e),a=t-n+Math.min(n+e,i),u=0;r<=a;r++){var c=s[r];u+=c*c}return u}for(var p=0;p<u;p++){var f=l(p),d=s[p]*Math.pow(n+r*f,-a);c[p]=d}return Bn(c,t.shape)},e.prototype.LRNGrad=function(t,e,n,r,a,o,i){vp(t,"LRNGrad");for(var s=t.shape[3],u=this.readSync(t.dataId),c=this.readSync(e.dataId),l=this.readSync(n.dataId),p=new Float32Array(t.size),f=t.size,d=0;d<f;d++){for(var h=d%s,m=d-h+Math.max(0,h-r),v=d-h+Math.min(s,h+r+1),g=0,y=m;y<v;y++)g+=Math.pow(c[y],2);for(g=o*g+a,y=m;y<v;y++){var x=-2*o*i*c[y]*l[d]/g;d===y&&(x+=Math.pow(g,-i)),x*=u[d],p[y]+=x}}return Bn(p,t.shape)},e.prototype.multinomial=function(t,e,n,r){vp(t,"multinomial");for(var a=e?t:ca(t),o=a.shape[0],i=a.shape[1],s=zn([o,n],"int32"),u=this.readSync(s.dataId),c=this.readSync(a.dataId),l=0;l<o;++l){var p=l*i,f=new Float32Array(i-1);f[0]=c[p];for(var d=1;d<f.length;++d)f[d]=f[d-1]+c[p+d];for(var h=sr(r.toString()),m=l*n,v=0;v<n;++v){var g=h();u[m+v]=f.length;for(var y=0;y<f.length;y++)if(g<f[y]){u[m+v]=y;break}}}return s},e.prototype.oneHot=function(t,e,n,r){vp(t,"oneHot");var a=new Float32Array(t.size*e);a.fill(r);for(var o=this.readSync(t.dataId),i=0;i<t.size;++i)o[i]>=0&&o[i]<e&&(a[i*e+o[i]]=n);return Fn(a,[t.size,e],"int32")},e.prototype.nonMaxSuppression=function(t,e,n,r,a){return vp(t,"nonMaxSuppression"),Va(this.readSync(t.dataId),this.readSync(e.dataId),n,r,a)},e.prototype.fft=function(t){return this.fftBatch(t,!1)},e.prototype.ifft=function(t){return this.fftBatch(t,!0)},e.prototype.fftBatch=function(t,e){for(var n=t.shape[0],r=t.shape[1],a=pr(t.shape,"float32"),o=pr(t.shape,"float32"),i=Tn(t).as2D(n,r),s=kn(t).as2D(n,r),u=0;u<n;u++)for(var c=i.slice([u,0],[1,r]),l=s.slice([u,0],[1,r]),p=Rn(c,l),f=this.readSync(this.fftImpl(p,e).dataId),d=0;d<r;d++){var h=Fa(f,d);a.values[u*r+d]=h.real,o.values[u*r+d]=h.imag}return Rn(a.toTensor(),o.toTensor()).as2D(n,r)},e.prototype.fftImpl=function(t,e){var n=t.as1D(),r=n.size;if(this.isExponentOf2(r)){var a=this.fftRadix2(n,r,e).as2D(t.shape[0],t.shape[1]);return e&&(a=Rn(Tn(a).div(Dn(r)),kn(a).div(Dn(r)))),a}var o=this.readSync(t.dataId),i=function(t){for(var e=new Float32Array(t.length/2),n=new Float32Array(t.length/2),r=0;r<t.length;r+=2)e[r/2]=t[r],n[r/2]=t[r+1];return{real:e,imag:n}}(this.fourierTransformByMatmul(o,r,e));return Rn(i.real,i.imag).as2D(t.shape[0],t.shape[1])},e.prototype.isExponentOf2=function(t){return 0==(t&t-1)},e.prototype.fftRadix2=function(t,e,n){if(1===e)return t;var r=this.readSync(t.dataId),a=e/2,o=function(t){for(var e=Math.ceil(t.length/4),n=new Float32Array(e),r=new Float32Array(e),a=0;a<t.length;a+=4)n[Math.floor(a/4)]=t[a],r[Math.floor(a/4)]=t[a+1];return{real:n,imag:r}}(r),i=Rn(o.real,o.imag).as1D(),s=function(t){for(var e=Math.floor(t.length/4),n=new Float32Array(e),r=new Float32Array(e),a=2;a<t.length;a+=4)n[Math.floor(a/4)]=t[a],r[Math.floor(a/4)]=t[a+1];return{real:n,imag:r}}(r),u=Rn(s.real,s.imag).as1D();i=this.fftRadix2(i,a,n),u=this.fftRadix2(u,a,n);var c=function(t,e){for(var n=new Float32Array(t/2),r=new Float32Array(t/2),a=0;a<Math.ceil(t/2);a++){var o=(e?2:-2)*Math.PI*(a/t);n[a]=Math.cos(o),r[a]=Math.sin(o)}return{real:n,imag:r}}(e,n),l=Rn(c.real,c.imag).mul(u),p=i.add(l),f=i.sub(l),d=Tn(p).concat(Tn(f)),h=kn(p).concat(kn(f));return Rn(d,h).as1D()},e.prototype.fourierTransformByMatmul=function(t,e,n){for(var r=new Float32Array(2*e),a=0;a<e;a++){for(var o=0,i=0,s=0;s<e;s++){var u=Ba(a*s,e,n),c=Fa(t,s);o+=c.real*u.real-c.imag*u.imag,i+=c.real*u.imag+c.imag*u.real}n&&(o/=e,i/=e),Ma(r,o,i,a)}return r},e.prototype.depthToSpace=function(t,e,n){T("NHWC"===n,(function(){return"Only NHWC dataFormat supported on CPU for depthToSpace. Got "+n})),T(e>1,(function(){return"blockSize should be > 1 for depthToSpace, but was: "+e}));for(var r=t.shape[0],a=t.shape[1],o=t.shape[2],i=t.shape[3],s=a*e,u=o*e,c=i/(e*e),l=this.readSync(t.dataId),p=new Float32Array(r*s*u*c),f=0,d=0;d<r;++d)for(var h=0;h<s;++h)for(var m=Math.floor(h/e),v=h%e,g=0;g<u;++g)for(var y=Math.floor(g/e),x=(v*e+g%e)*c,b=0;b<c;++b){var w=b+x+i*(y+o*(m+a*d));p[f++]=l[w]}return Bn(p,[r,s,u,c])},e.prototype.broadcastedBinaryOp=function(t,e,n,r){var a=va(t.shape,e.shape),o=pr(a,n),i=this.readSync(t.dataId),s=this.readSync(e.dataId),u=ha(t.shape,a),c=ha(e.shape,a),l=o.values;if(u.length+c.length===0)for(var p=0;p<l.length;++p)l[p]=r(i[p%i.length],s[p%s.length]);else{var f=this.bufferSync(t),d=this.bufferSync(e),h=function(n){var a=o.indexToLoc(n),p=a.slice(-t.rank);u.forEach((function(t){return p[t]=0}));var h=f.locToIndex(p),m=a.slice(-e.rank);c.forEach((function(t){return m[t]=0}));var v=d.locToIndex(m);l[n]=r(i[h],s[v])};for(p=0;p<l.length;++p)h(p)}return o.toTensor()},e.prototype.broadcastedBinaryComplexOp=function(t,e,n){var r=va(t.shape,e.shape),a=pr(r,"float32"),o=pr(r,"float32"),i=this.readSync(t.dataId),s=this.readSync(e.dataId),u=ha(t.shape,r),c=ha(e.shape,r),l=a.values,p=o.values;if(u.length+c.length===0)for(var f=0;f<l.length;f++){var d=f%i.length,h=f%s.length,m=n(i[2*d],i[2*d+1],s[2*h],s[2*h+1]);l[f]=m.real,p[f]=m.imag}else{var v=this.bufferSync(this.data.get(t.dataId).complexTensors.real),g=this.bufferSync(this.data.get(e.dataId).complexTensors.real),y=function(r){var o=a.indexToLoc(r),f=o.slice(-t.rank);u.forEach((function(t){return f[t]=0}));var d=v.locToIndex(f),h=o.slice(-e.rank);c.forEach((function(t){return h[t]=0}));var m=g.locToIndex(h),y=n(i[2*d],i[2*d+1],s[2*m],s[2*m+1]);l[r]=y.real,p[r]=y.imag};for(f=0;f<l.length;f++)y(f)}return this.complex(a.toTensor(),o.toTensor())},e.prototype.split=function(t,e,n){return Ha(t,e,n)},e.prototype.dispose=function(){},e.prototype.floatPrecision=function(){return 32},e.prototype.epsilon=function(){return 1e-7},e.prototype.cropAndResize=function(t,e,n,r,a,o){for(var i=t.shape,s=i[0],u=i[1],c=i[2],l=i[3],p=e.shape[0],f=r[0],d=r[1],h=pr([p,f,d,l],"float32"),m=this.readSync(e.dataId),v=this.readSync(n.dataId),g=this.readSync(t.dataId),y=t.strides,x=h.strides,b=0;b<p;b++){var w=4*b,C=m[w],E=m[w+1],S=m[w+2],N=m[w+3],I=v[b];if(!(I>=s))for(var R=f>1?(S-C)*(u-1)/(f-1):0,T=d>1?(N-E)*(c-1)/(d-1):0,k=0;k<f;k++){var A=f>1?C*(u-1)+k*R:.5*(C+S)*(u-1);if(A<0||A>u-1)for(var O=0;O<d;O++)for(var D=0;D<l;D++){var _=D+O*x[2]+k*x[1]+b*x[0];h.values[_]=o}else if("bilinear"===a){var F=Math.floor(A),M=Math.ceil(A),B=A-F;for(O=0;O<d;O++)if((H=d>1?E*(c-1)+O*T:.5*(E+N)*(c-1))<0||H>c-1)for(D=0;D<l;D++)_=D+O*x[2]+k*x[1]+b*x[0],h.values[_]=o;else{var P=Math.floor(H),L=Math.ceil(H),V=H-P;for(D=0;D<l;D++){var W=g[_=D+P*y[2]+F*y[1]+I*y[0]],z=g[_=D+L*y[2]+F*y[1]+I*y[0]],U=g[_=D+P*y[2]+M*y[1]+I*y[0]],j=W+(z-W)*V,G=U+(g[_=D+L*y[2]+M*y[1]+I*y[0]]-U)*V;_=D+O*x[2]+k*x[1]+b*x[0],h.values[_]=j+(G-j)*B}}}else for(O=0;O<d;++O){var H;if((H=d>1?E*(c-1)+O*T:.5*(E+N)*(c-1))<0||H>c-1)for(D=0;D<l;D++)_=D+O*x[2]+k*x[1]+b*x[0],h.values[_]=o;else{var q=Math.round(H),K=Math.round(A);for(D=0;D<l;D++){var X=D+q*y[2]+K*y[1]+I*y[0],Y=D+O*x[2]+k*x[1]+b*x[0];h.values[Y]=g[X]}}}}}return h.toTensor()},e.prototype.sparseToDense=function(t,e,n,r){var a=Kr(0,t,n),o=a.sliceRank,i=a.numUpdates,s=a.sliceSize,u=a.strides,c=a.outputSize;return this.scatter(t,e,n,c,s,i,o,u,r,!1)},e.prototype.gatherND=function(t,e){var n=e.shape,r=n[n.length-1],a=Hr(t,e),o=a[0],i=a[1],s=a[2],u=a[3];if(0===i)return An([],o,t.dtype);for(var c=new gt([i,s],t.dtype),l=this.readSync(e.dataId),p=this.readSync(t.dataId),f=0;f<i;f++){for(var d=[],h=0,m=0;m<r;m++){var v=l[f*r+m];h+=v*u[m],d.push(v)}if(h<0||h>=t.size/s)throw new Error("Invalid indices: "+d+" does not index into "+t.shape);for(var g=0;g<s;g++)c.values[f*s+g]=p[h*s+g]}return c.toTensor().reshape(o)},e.prototype.scatterND=function(t,e,n){var r=Kr(0,t,n),a=r.sliceRank,o=r.numUpdates,i=r.sliceSize,s=r.strides,u=r.outputSize,c=Dn(0);return this.scatter(t,e,n,u,i,o,a,s,c,!0)},e.prototype.fill=function(t,e,n){var r=j(n=n||Z(e),D(t));return r.fill(e),Lt.makeTensor(r,t,n,this)},e.prototype.onesLike=function(t){if("string"===t.dtype)throw new Error("onesLike is not supported for string tensors");return this.fill(t.shape,1,t.dtype)},e.prototype.zerosLike=function(t){var e=j(t.dtype,D(t.shape));return this.makeOutput(e,t.shape,t.dtype)},e.prototype.linspace=function(t,e,n){return Oa(t,e,n)},e.prototype.scatter=function(t,e,n,r,a,o,i,s,u,c){var l=[r/a,a],p=this.readSync(t.dataId),f=this.readSync(e.dataId);if(0===r)return An([],n,e.dtype);var d=new gt(l,e.dtype);d.values.fill(this.readSync(u.dataId)[0]);for(var h=0;h<o;h++){for(var m=[],v=0,g=0;g<i;g++){var y=p[h*i+g];m.push(y),v+=y*s[g]}if(v<0||v>=r/a)throw new Error("Invalid indices: "+m+" does not index into "+n);for(var x=0;x<a;x++)c?d.values[v*a+x]+=f[h*a+x]:d.values[v*a+x]=0===e.rank?f[0]:f[h*a+x]}return d.toTensor().reshape(n)},e}(fa);Lt.registerBackend("cpu",(function(){return new yp}),1),x({kernelName:"Square",backendName:"cpu",kernelFunc:function(t){var e=t.inputs,n=t.backend,r=e.x,a=n;vp(r,"square");for(var o=a.data.get(r.dataId).values,i=new Float32Array(o.length),s=0;s<o.length;++s){var u=o[s];i[s]=u*u}return{dataId:a.write(i,r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}}),x({kernelName:"NonMaxSuppressionV5",backendName:"cpu",kernelFunc:function(t){var e=t.inputs,n=t.backend,r=t.attrs,a=e,o=a.boxes,i=a.scores,s=r,u=s.maxOutputSize,c=s.iouThreshold,l=s.scoreThreshold,p=s.softNmsSigma,f=n;vp(o,"NonMaxSuppressionWithScore");var d=Wa(f.data.get(o.dataId).values,f.data.get(i.dataId).values,u,c,l,p);return[d.selectedIndices,d.selectedScores]}}),x({kernelName:"Square",backendName:"webgl",kernelFunc:function(t){var e=t.inputs,n=t.backend,r=e.x,a=n,o=new cs(r.shape,"return x * x;");return a.runWebGLProgram(o,[r],r.dtype)}});var xp,bp=function(t){this.variableNames=["A"];var e=to(),n=t[0],r=t[1];this.outputShape=t,this.userCode="\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+r+".0, "+n+".0);\n\n vec4 values = "+e.texture2D+"(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n setOutput(floor(value * 255.0 + 0.5));\n }\n "},wp=function(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;var e=to(),n=t[0],r=t[1];this.outputShape=t,this.userCode="\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n\n vec4 result = vec4(0.);\n\n for(int row=0; row<=1; row++) {\n for(int col=0; col<=1; col++) {\n texC = coords[1] + row;\n depth = coords[2] + col;\n\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+r+".0, "+n+".0);\n vec4 values = "+e.texture2D+"(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n result[row * 2 + col] = floor(value * 255.0 + 0.5);\n }\n }\n\n "+e.output+" = result;\n }\n "};x({kernelName:"FromPixels",backendName:"webgl",kernelFunc:function(t){var e=t.inputs,n=t.backend,r=t.attrs,a=e.pixels,o=r.numChannels,i="undefined"!=typeof HTMLVideoElement&&a instanceof HTMLVideoElement,s="undefined"!=typeof HTMLImageElement&&a instanceof HTMLImageElement,u=i?[a.videoWidth,a.videoHeight]:[a.width,a.height],c=u[0],l=u[1],p=[l,c],d=[l,c,o];(s||i)&&(null==xp&&(xp=document.createElement("canvas").getContext("2d")),xp.canvas.width=c,xp.canvas.height=l,xp.drawImage(a,0,0,c,l),a=xp.canvas);var h=n.makeTensorInfo(p,"int32");n.texData.get(h.dataId).usage=Ut.PIXELS,n.gpgpu.uploadPixelDataToTexture(n.getTexture(h.dataId),a);var m=f().getBool("WEBGL_PACK")?new wp(d):new bp(d),v=n.runWebGLProgram(m,[h],"int32");return n.disposeData(h.dataId),v}}),x({kernelName:"NonMaxSuppressionV5",backendName:"webgl",kernelFunc:function(t){var e=t.inputs,n=t.backend,r=t.attrs;pn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");var a=e,o=a.boxes,i=a.scores,s=r,u=s.maxOutputSize,c=s.iouThreshold,l=s.scoreThreshold,p=s.softNmsSigma,f=n,d=Wa(f.readSync(o.dataId),f.readSync(i.dataId),u,c,l,p);return[d.selectedIndices,d.selectedScores]}});var Cp=function(){function t(){}return t.prototype.fetch=function(t,e){return fetch(t,e)},t.prototype.now=function(){return performance.now()},t.prototype.encode=function(t,e){if("utf-8"!==e&&"utf8"!==e)throw new Error("Browser's encoder only supports utf-8, but got "+e);return null==this.textEncoder&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(t)},t.prototype.decode=function(t,e){return new TextDecoder(e).decode(t)},t}();f().get("IS_BROWSER")&&f().setPlatform("browser",new Cp);var Ep,Sp=function(){function t(){this.util=n(12),this.textEncoder=new this.util.TextEncoder}return t.prototype.fetch=function(t,e){return null!=f().global.fetch?f().global.fetch(t,e):(null==Ep&&(Ep=n(11)),Ep(t,e))},t.prototype.now=function(){var t=r.hrtime();return 1e3*t[0]+t[1]/1e6},t.prototype.encode=function(t,e){if("utf-8"!==e&&"utf8"!==e)throw new Error("Node built-in encoder only supports utf-8, but got "+e);return this.textEncoder.encode(t)},t.prototype.decode=function(t,e){return 0===t.length?"":new this.util.TextDecoder(e).decode(t)},t}();f().get("IS_NODE")&&f().setPlatform("node",new Sp);var Np={float32:4,int32:4,uint16:2,uint8:1,bool:1};function Ip(t,e){for(var n={},r=0,a=function(e){var a=e.name,o=e.dtype,i=e.shape,s=D(i),u=void 0;if("quantization"in e){var c=e.quantization;if("uint8"!==c.dtype&&"uint16"!==c.dtype)throw new Error("Weight "+e.name+" has unknown quantization dtype "+c.dtype+". Supported quantization dtypes are: 'uint8' and 'uint16'.");var l=Np[c.dtype],p=t.slice(r,r+s*l),f="uint8"===c.dtype?new Uint8Array(p):new Uint16Array(p);if("float32"===o)u=Float32Array.from(f,(function(t){return t*c.scale+c.min}));else{if("int32"!==o)throw new Error("Unsupported dtype in weight '"+a+"': "+o);u=Int32Array.from(f,(function(t){return Math.round(t*c.scale+c.min)}))}r+=s*l}else if("string"===o){var d=D(e.shape);u=[];for(var h=0;h<d;h++){var m=new Uint32Array(t.slice(r,r+4))[0];r+=4;var v=new Uint8Array(t.slice(r,r+m));u.push(v),r+=m}}else{var g=Np[o];if(p=t.slice(r,r+s*g),"float32"===o)u=new Float32Array(p);else if("int32"===o)u=new Int32Array(p);else{if("bool"!==o)throw new Error("Unsupported dtype in weight '"+a+"': "+o);u=new Uint8Array(p)}r+=s*g}n[a]=An(u,i,o)},o=0,i=e;o<i.length;o++)a(i[o]);return n}function Rp(t){if(null===t)throw new Error("Invalid input value: "+JSON.stringify(t));var e=0,n=[];t.forEach((function(t){if(e+=t.byteLength,n.push(t.byteLength===t.buffer.byteLength?t:new t.constructor(t)),!(t instanceof Float32Array||t instanceof Int32Array||t instanceof Uint8Array))throw new Error("Unsupported TypedArray subtype: "+t.constructor.name)}));var r=new Uint8Array(e),a=0;return n.forEach((function(t){r.set(new Uint8Array(t.buffer),a),a+=t.byteLength})),r.buffer}var Tp=void 0!==a&&("undefined"==typeof Blob||"undefined"==typeof atob||"undefined"==typeof btoa);function kp(t){return Tp?a.byteLength(t):new Blob([t]).size}function Ap(t){var e=0;t.forEach((function(t){e+=t.byteLength}));var n=new Uint8Array(e),r=0;return t.forEach((function(t){n.set(new Uint8Array(t),r),r+=t.byteLength})),n.buffer}function Op(t){for(t=t.trim();t.endsWith("/");)t=t.slice(0,t.length-1);var e=t.split("/");return e[e.length-1]}function Dp(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:null==t.modelTopology?0:kp(JSON.stringify(t.modelTopology)),weightSpecsBytes:null==t.weightSpecs?0:kp(JSON.stringify(t.weightSpecs)),weightDataBytes:null==t.weightData?0:t.weightData.byteLength}}var _p=function(){function t(){this.saveRouters=[],this.loadRouters=[]}return t.getInstance=function(){return null==t.instance&&(t.instance=new t),t.instance},t.registerSaveRouter=function(e){t.getInstance().saveRouters.push(e)},t.registerLoadRouter=function(e){t.getInstance().loadRouters.push(e)},t.getSaveHandlers=function(e){return t.getHandlers(e,"save")},t.getLoadHandlers=function(e,n){return t.getHandlers(e,"load",n)},t.getHandlers=function(e,n,r){var a=[];return("load"===n?t.getInstance().loadRouters:t.getInstance().saveRouters).forEach((function(t){var n=t(e,r);null!==n&&a.push(n)})),a},t}(),Fp="://",Mp=function(){function t(){this.managers={}}return t.getInstance=function(){return null==t.instance&&(t.instance=new t),t.instance},t.registerManager=function(e,n){T(null!=e,(function(){return"scheme must not be undefined or null."})),e.endsWith(Fp)&&(e=e.slice(0,e.indexOf(Fp))),T(e.length>0,(function(){return"scheme must not be an empty string."}));var r=t.getInstance();T(null==r.managers[e],(function(){return"A model store manager is already registered for scheme '"+e+"'."})),r.managers[e]=n},t.getManager=function(t){var e=this.getInstance().managers[t];if(null==e)throw new Error("Cannot find model manager for scheme '"+t+"'");return e},t.getSchemes=function(){return Object.keys(this.getInstance().managers)},t}();function Bp(t){if(-1===t.indexOf(Fp))throw new Error("The url string provided does not contain a scheme. Supported schemes are: "+Mp.getSchemes().join(","));return{scheme:t.split(Fp)[0],path:t.split(Fp)[1]}}function Pp(t,e,n){return void 0===n&&(n=!1),u(this,void 0,void 0,(function(){var r,a,o,i,s,u,l,p,f;return c(this,(function(c){switch(c.label){case 0:return T(t!==e,(function(){return"Old path and new path are the same: '"+t+"'"})),T((r=_p.getLoadHandlers(t)).length>0,(function(){return"Copying failed because no load handler is found for source URL "+t+"."})),T(r.length<2,(function(){return"Copying failed because more than one ("+r.length+") load handlers for source URL "+t+"."})),a=r[0],T((o=_p.getSaveHandlers(e)).length>0,(function(){return"Copying failed because no save handler is found for destination URL "+e+"."})),T(o.length<2,(function(){return"Copying failed because more than one ("+r.length+") save handlers for destination URL "+e+"."})),i=o[0],s=Bp(t).scheme,u=Bp(t).path,l=s===Bp(t).scheme,[4,a.load()];case 1:return p=c.sent(),n&&l?[4,Mp.getManager(s).removeModel(u)]:[3,3];case 2:c.sent(),c.label=3;case 3:return[4,i.save(p)];case 4:return f=c.sent(),!n||l?[3,6]:[4,Mp.getManager(s).removeModel(u)];case 5:c.sent(),c.label=6;case 6:return[2,f.modelArtifactsInfo]}}))}))}var Lp="models_store",Vp="model_info_store";function Wp(){if(!f().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");var t=window,e=t.indexedDB||t.mozIndexedDB||t.webkitIndexedDB||t.msIndexedDB||t.shimIndexedDB;if(null==e)throw new Error("The current browser does not appear to support IndexedDB.");return e}function zp(t){var e=t.result;e.createObjectStore(Lp,{keyPath:"modelPath"}),e.createObjectStore(Vp,{keyPath:"modelPath"})}var Up=function(){function t(t){if(this.indexedDB=Wp(),null==t||!t)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=t}return t.prototype.save=function(t){return u(this,void 0,void 0,(function(){return c(this,(function(e){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return[2,this.databaseAction(this.modelPath,t)]}))}))},t.prototype.load=function(){return u(this,void 0,void 0,(function(){return c(this,(function(t){return[2,this.databaseAction(this.modelPath)]}))}))},t.prototype.databaseAction=function(t,e){var n=this;return new Promise((function(t,r){var a=n.indexedDB.open("tensorflowjs",1);a.onupgradeneeded=function(){return zp(a)},a.onsuccess=function(){var o=a.result;if(null==e){var i=o.transaction(Lp,"readonly"),s=i.objectStore(Lp).get(n.modelPath);s.onsuccess=function(){if(null==s.result)return o.close(),r(new Error("Cannot find model with path '"+n.modelPath+"' in IndexedDB."));t(s.result.modelArtifacts)},s.onerror=function(t){return o.close(),r(s.error)},i.oncomplete=function(){return o.close()}}else{var u,c=Dp(e),l=o.transaction(Vp,"readwrite"),p=l.objectStore(Vp),f=p.put({modelPath:n.modelPath,modelArtifactsInfo:c});f.onsuccess=function(){var a=(u=o.transaction(Lp,"readwrite")).objectStore(Lp).put({modelPath:n.modelPath,modelArtifacts:e,modelArtifactsInfo:c});a.onsuccess=function(){return t({modelArtifactsInfo:c})},a.onerror=function(t){var e=(p=l.objectStore(Vp)).delete(n.modelPath);e.onsuccess=function(){return o.close(),r(a.error)},e.onerror=function(t){return o.close(),r(a.error)}}},f.onerror=function(t){return o.close(),r(f.error)},l.oncomplete=function(){null==u?o.close():u.oncomplete=function(){return o.close()}}}},a.onerror=function(t){return r(a.error)}}))},t.URL_SCHEME="indexeddb://",t}(),jp=function(t){return f().getBool("IS_BROWSER")&&!Array.isArray(t)&&t.startsWith(Up.URL_SCHEME)?(e=t.slice(Up.URL_SCHEME.length),new Up(e)):null;var e};_p.registerSaveRouter(jp),_p.registerLoadRouter(jp);var Gp=function(){function t(){this.indexedDB=Wp()}return t.prototype.listModels=function(){return u(this,void 0,void 0,(function(){var t=this;return c(this,(function(e){return[2,new Promise((function(e,n){var r=t.indexedDB.open("tensorflowjs",1);r.onupgradeneeded=function(){return zp(r)},r.onsuccess=function(){var t=r.result,a=t.transaction(Vp,"readonly"),o=a.objectStore(Vp).getAll();o.onsuccess=function(){for(var t={},n=0,r=o.result;n<r.length;n++){var a=r[n];t[a.modelPath]=a.modelArtifactsInfo}e(t)},o.onerror=function(e){return t.close(),n(o.error)},a.oncomplete=function(){return t.close()}},r.onerror=function(t){return n(r.error)}}))]}))}))},t.prototype.removeModel=function(t){return u(this,void 0,void 0,(function(){var e=this;return c(this,(function(n){var r;return t=(r=t).startsWith(Up.URL_SCHEME)?r.slice(Up.URL_SCHEME.length):r,[2,new Promise((function(n,r){var a=e.indexedDB.open("tensorflowjs",1);a.onupgradeneeded=function(){return zp(a)},a.onsuccess=function(){var e,o=a.result,i=o.transaction(Vp,"readwrite"),s=i.objectStore(Vp),u=s.get(t);u.onsuccess=function(){if(null==u.result)return o.close(),r(new Error("Cannot find model with path '"+t+"' in IndexedDB."));var a=s.delete(t),i=function(){var a=(e=o.transaction(Lp,"readwrite")).objectStore(Lp).delete(t);a.onsuccess=function(){return n(u.result.modelArtifactsInfo)},a.onerror=function(t){return r(u.error)}};a.onsuccess=i,a.onerror=function(t){return i(),o.close(),r(u.error)}},u.onerror=function(t){return o.close(),r(u.error)},i.oncomplete=function(){null==e?o.close():e.oncomplete=function(){return o.close()}}},a.onerror=function(t){return r(a.error)}}))]}))}))},t}();if(f().getBool("IS_BROWSER"))try{Mp.registerManager(Up.URL_SCHEME,new Gp)}catch(i){}var Hp="/",qp="tensorflowjs_models",Kp="info",Xp="model_topology",Yp="weight_specs",$p="weight_data",Qp="model_metadata";function Jp(t){return{info:[qp,t,Kp].join(Hp),topology:[qp,t,Xp].join(Hp),weightSpecs:[qp,t,Yp].join(Hp),weightData:[qp,t,$p].join(Hp),modelMetadata:[qp,t,Qp].join(Hp)}}function Zp(t){var e=t.split(Hp);if(e.length<3)throw new Error("Invalid key format: "+t);return e.slice(1,e.length-1).join(Hp)}var tf=function(){function t(t){if(!f().getBool("IS_BROWSER")||void 0===window.localStorage)throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,null==t||!t)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=t,this.keys=Jp(this.modelPath)}return t.prototype.save=function(t){return u(this,void 0,void 0,(function(){var e,n,r;return c(this,(function(o){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");e=JSON.stringify(t.modelTopology),n=JSON.stringify(t.weightSpecs),r=Dp(t);try{return this.LS.setItem(this.keys.info,JSON.stringify(r)),this.LS.setItem(this.keys.topology,e),this.LS.setItem(this.keys.weightSpecs,n),this.LS.setItem(this.keys.weightData,function(t){return Tp?a.from(t).toString("base64"):btoa(String.fromCharCode.apply(null,new Uint8Array(t)))}(t.weightData)),this.LS.setItem(this.keys.modelMetadata,JSON.stringify({format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,userDefinedMetadata:t.userDefinedMetadata})),[2,{modelArtifactsInfo:r}]}catch(t){throw this.LS.removeItem(this.keys.info),this.LS.removeItem(this.keys.topology),this.LS.removeItem(this.keys.weightSpecs),this.LS.removeItem(this.keys.weightData),this.LS.removeItem(this.keys.modelMetadata),new Error("Failed to save model '"+this.modelPath+"' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes="+r.modelTopologyBytes+", weightSpecsBytes="+r.weightSpecsBytes+", weightDataBytes="+r.weightDataBytes+".")}return[2]}))}))},t.prototype.load=function(){return u(this,void 0,void 0,(function(){var t,e,n,r,o,i,s;return c(this,(function(u){if(null==(t=JSON.parse(this.LS.getItem(this.keys.info))))throw new Error("In local storage, there is no model with name '"+this.modelPath+"'");if("JSON"!==t.modelTopologyType)throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");if(e={},null==(n=JSON.parse(this.LS.getItem(this.keys.topology))))throw new Error("In local storage, the topology of model '"+this.modelPath+"' is missing.");if(e.modelTopology=n,null==(r=JSON.parse(this.LS.getItem(this.keys.weightSpecs))))throw new Error("In local storage, the weight specs of model '"+this.modelPath+"' are missing.");if(e.weightSpecs=r,null!=(o=this.LS.getItem(this.keys.modelMetadata))&&(i=JSON.parse(o),e.format=i.format,e.generatedBy=i.generatedBy,e.convertedBy=i.convertedBy,e.userDefinedMetadata=i.userDefinedMetadata),null==(s=this.LS.getItem(this.keys.weightData)))throw new Error("In local storage, the binary weight values of model '"+this.modelPath+"' are missing.");return e.weightData=function(t){if(Tp){var e=a.from(t,"base64");return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}for(var n=atob(t),r=new Uint8Array(n.length),o=0;o<n.length;++o)r.set([n.charCodeAt(o)],o);return r.buffer}(s),[2,e]}))}))},t.URL_SCHEME="localstorage://",t}(),ef=function(t){return f().getBool("IS_BROWSER")&&!Array.isArray(t)&&t.startsWith(tf.URL_SCHEME)?(e=t.slice(tf.URL_SCHEME.length),new tf(e)):null;var e};_p.registerSaveRouter(ef),_p.registerLoadRouter(ef);var nf=function(){function t(){T(f().getBool("IS_BROWSER"),(function(){return"Current environment is not a web browser"})),T(void 0!==window.localStorage,(function(){return"Current browser does not appear to support localStorage"})),this.LS=window.localStorage}return t.prototype.listModels=function(){return u(this,void 0,void 0,(function(){var t,e,n,r,a,o;return c(this,(function(i){for(t={},e=qp+Hp,n=Hp+Kp,r=0;r<this.LS.length;++r)(a=this.LS.key(r)).startsWith(e)&&a.endsWith(n)&&(o=Zp(a),t[o]=JSON.parse(this.LS.getItem(a)));return[2,t]}))}))},t.prototype.removeModel=function(t){return u(this,void 0,void 0,(function(){var e,n;return c(this,(function(r){var a;if(t=(a=t).startsWith(tf.URL_SCHEME)?a.slice(tf.URL_SCHEME.length):a,e=Jp(t),null==this.LS.getItem(e.info))throw new Error("Cannot find model at path '"+t+"'");return n=JSON.parse(this.LS.getItem(e.info)),this.LS.removeItem(e.info),this.LS.removeItem(e.topology),this.LS.removeItem(e.weightSpecs),this.LS.removeItem(e.weightData),[2,n]}))}))},t}();if(f().getBool("IS_BROWSER"))try{Mp.registerManager(tf.URL_SCHEME,new nf)}catch(i){}function rf(t){return new Promise((function(t){return setTimeout(t)})).then(t)}var af=function(){function t(e){if(!f().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(t.URL_SCHEME)&&(e=e.slice(t.URL_SCHEME.length)),null!=e&&0!==e.length||(e="model"),this.modelTopologyFileName=e+".json",this.weightDataFileName=e+".weights.bin"}return t.prototype.save=function(t){return u(this,void 0,void 0,(function(){var e,n,r,a,o,i;return c(this,(function(s){switch(s.label){case 0:if("undefined"==typeof document)throw new Error("Browser downloads are not supported in this environment since `document` is not present");if(e=window.URL.createObjectURL(new Blob([t.weightData],{type:"application/octet-stream"})),!(t.modelTopology instanceof ArrayBuffer))return[3,1];throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");case 1:return n=[{paths:["./"+this.weightDataFileName],weights:t.weightSpecs}],r={modelTopology:t.modelTopology,format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,weightsManifest:n},a=window.URL.createObjectURL(new Blob([JSON.stringify(r)],{type:"application/json"})),(o=null==this.jsonAnchor?document.createElement("a"):this.jsonAnchor).download=this.modelTopologyFileName,o.href=a,[4,rf((function(){return o.dispatchEvent(new MouseEvent("click"))}))];case 2:return s.sent(),null==t.weightData?[3,4]:((i=null==this.weightDataAnchor?document.createElement("a"):this.weightDataAnchor).download=this.weightDataFileName,i.href=e,[4,rf((function(){return i.dispatchEvent(new MouseEvent("click"))}))]);case 3:s.sent(),s.label=4;case 4:return[2,{modelArtifactsInfo:Dp(t)}]}}))}))},t.URL_SCHEME="downloads://",t}(),of=function(){function t(t){if(null==t||t.length<1)throw new Error("When calling browserFiles, at least 1 file is required, but received "+t);this.files=t}return t.prototype.load=function(){return u(this,void 0,void 0,(function(){var t,e,n=this;return c(this,(function(r){return t=this.files[0],e=this.files.slice(1),[2,new Promise((function(r,a){var o=new FileReader;o.onload=function(o){var i=JSON.parse(o.target.result),s=i.modelTopology;if(null!=s){0===e.length&&r({modelTopology:s});var u=i.weightsManifest;if(null!=u){var c;try{c=n.checkManifestAndWeightFiles(u,e)}catch(t){return void a(t)}var l=[],p=[],f=[];u.forEach((function(t){t.paths.forEach((function(t){p.push(t),f.push(null)})),l.push.apply(l,t.weights)})),u.forEach((function(t){t.paths.forEach((function(t){var e=new FileReader;e.onload=function(e){var n=e.target.result,a=p.indexOf(t);f[a]=n,-1===f.indexOf(null)&&r({modelTopology:s,weightSpecs:l,weightData:Ap(f),format:i.format,generatedBy:i.generatedBy,convertedBy:i.convertedBy,userDefinedMetadata:i.userDefinedMetadata})},e.onerror=function(e){return a("Failed to weights data from file of path '"+t+"'.")},e.readAsArrayBuffer(c[t])}))}))}else a(new Error("weightManifest field is missing from file "+t.name))}else a(new Error("modelTopology field is missing from file "+t.name))},o.onerror=function(e){return a("Failed to read model topology and weights manifest JSON from file '"+t.name+"'. BrowserFiles supports loading Keras-style tf.Model artifacts only.")},o.readAsText(t)}))]}))}))},t.prototype.checkManifestAndWeightFiles=function(t,e){for(var n=[],r=e.map((function(t){return Op(t.name)})),a={},o=0,i=t;o<i.length;o++)i[o].paths.forEach((function(t){var o=Op(t);if(-1!==n.indexOf(o))throw new Error("Duplicate file basename found in weights manifest: '"+o+"'");if(n.push(o),-1===r.indexOf(o))throw new Error("Weight file with basename '"+o+"' is not provided.");a[t]=e[r.indexOf(o)]}));if(n.length!==e.length)throw new Error("Mismatch in the number of files in weights manifest ("+n.length+") and the number of weight files provided ("+e.length+").");return a},t}();function sf(t,e,n,r){!function(t){T(null!=t&&Array.isArray(t)&&t.length>0,(function(){return"promises must be a none empty array"}))}(t),function(t,e){T(t>=0&&t<=1,(function(){return"Progress fraction must be in range [0, 1], but got startFraction "+t})),T(e>=0&&e<=1,(function(){return"Progress fraction must be in range [0, 1], but got endFraction "+e})),T(e>=t,(function(){return"startFraction must be no more than endFraction, but got startFraction "+t+" and endFraction "+e}))}(n=null==n?0:n,r=null==r?1:r);var a=0;return Promise.all(t.map((function(o){return o.then((function(o){var i=n+ ++a/t.length*(r-n);return e(i),o})),o})))}function uf(t,e){return u(this,void 0,void 0,(function(){var n,r,a,o,i,s,u,l,p;return c(this,(function(c){switch(c.label){case 0:return null==e&&(e={}),n=null==e.fetchFunc?f().platform.fetch:e.fetchFunc,r=t.map((function(t){return n(t,e.requestInit,{isBinary:!0})})),a=0,o=.5,null!=e.onProgress?[3,2]:[4,Promise.all(r)];case 1:return i=c.sent(),[3,4];case 2:return[4,sf(r,e.onProgress,a,o)];case 3:i=c.sent(),c.label=4;case 4:return s=i.map((function(t){return t.arrayBuffer()})),u=.5,l=1,null!=e.onProgress?[3,6]:[4,Promise.all(s)];case 5:return p=c.sent(),[3,8];case 6:return[4,sf(s,e.onProgress,u,l)];case 7:p=c.sent(),c.label=8;case 8:return[2,p]}}))}))}function cf(t){var e=this;return function(n,r,a){return void 0===r&&(r=""),u(e,void 0,void 0,(function(){var e,o,i,s,u,l,p,f,d,h;return c(this,(function(c){switch(c.label){case 0:if(e=n.map((function(){return!1})),o={},i=null!=a?a.map((function(){return!1})):[],s=[],n.forEach((function(t,n){var r=0;t.weights.forEach((function(t){var u="quantization"in t?t.quantization.dtype:t.dtype,c=Np[u]*D(t.shape),l=function(){e[n]=!0,null==o[n]&&(o[n]=[]),o[n].push({manifestEntry:t,groupOffset:r,sizeBytes:c})};null!=a?a.forEach((function(e,n){e===t.name&&(l(),i[n]=!0)})):l(),s.push(t.name),r+=c}))})),!i.every((function(t){return t})))throw u=a.filter((function(t,e){return!i[e]})),new Error("Could not find weights in manifest with names: "+u.join(", ")+". \nManifest JSON has weights with names: "+s.join(", ")+".");return l=e.reduce((function(t,e,n){return e&&t.push(n),t}),[]),p=[],l.forEach((function(t){n[t].paths.forEach((function(t){var e=r+(r.endsWith("/")?"":"/")+t;p.push(e)}))})),[4,t(p)];case 1:return f=c.sent(),d={},h=0,l.forEach((function(t){for(var e=n[t].paths.length,r=0,a=0;a<e;a++)r+=f[h+a].byteLength;for(var i=new ArrayBuffer(r),s=new Uint8Array(i),u=0,c=0;c<e;c++){var l=new Uint8Array(f[h+c]);s.set(l,u),u+=l.byteLength}o[t].forEach((function(t){var e=Ip(i.slice(t.groupOffset,t.groupOffset+t.sizeBytes),[t.manifestEntry]);for(var n in e)d[n]=e[n]})),h+=e})),[2,d]}}))}))}}_p.registerSaveRouter((function(t){return f().getBool("IS_BROWSER")&&!Array.isArray(t)&&t.startsWith(af.URL_SCHEME)?function(t){return void 0===t&&(t="model"),new af(t)}(t.slice(af.URL_SCHEME.length)):null}));var lf=function(){function t(t,e){if(this.DEFAULT_METHOD="POST",null==e&&(e={}),this.weightPathPrefix=e.weightPathPrefix,this.onProgress=e.onProgress,null!=e.fetchFunc?(T("function"==typeof e.fetchFunc,(function(){return"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"})),this.fetch=e.fetchFunc):this.fetch=f().platform.fetch,T(null!=t&&t.length>0,(function(){return"URL path for http must not be null, undefined or empty."})),Array.isArray(t)&&T(2===t.length,(function(){return"URL paths for http must have a length of 2, (actual length is "+t.length+")."})),this.path=t,null!=e.requestInit&&null!=e.requestInit.body)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=e.requestInit||{}}return t.prototype.save=function(t){return u(this,void 0,void 0,(function(){var e,n,r,a;return c(this,(function(o){switch(o.label){case 0:if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");return(e=Object.assign({method:this.DEFAULT_METHOD},this.requestInit)).body=new FormData,n=[{paths:["./model.weights.bin"],weights:t.weightSpecs}],r={modelTopology:t.modelTopology,format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,userDefinedMetadata:t.userDefinedMetadata,weightsManifest:n},e.body.append("model.json",new Blob([JSON.stringify(r)],{type:"application/json"}),"model.json"),null!=t.weightData&&e.body.append("model.weights.bin",new Blob([t.weightData],{type:"application/octet-stream"}),"model.weights.bin"),[4,this.fetch(this.path,e)];case 1:if((a=o.sent()).ok)return[2,{modelArtifactsInfo:Dp(t),responses:[a]}];throw new Error("BrowserHTTPRequest.save() failed due to HTTP response status "+a.status+".")}}))}))},t.prototype.load=function(){return u(this,void 0,void 0,(function(){var t,e,n,r,a,o,i,s,u,l,p,f;return c(this,(function(c){switch(c.label){case 0:return[4,this.fetch(this.path,this.requestInit)];case 1:if(!(t=c.sent()).ok)throw new Error("Request to "+this.path+" failed with status code "+t.status+". Please verify this URL points to the model JSON of the model to load.");c.label=2;case 2:return c.trys.push([2,4,,5]),[4,t.json()];case 3:return e=c.sent(),[3,5];case 4:throw c.sent(),n="Failed to parse model JSON of response from "+this.path+".",this.path.endsWith(".pb")?n+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":n+=" Please make sure the server is serving valid JSON for this request.",new Error(n);case 5:if(r=e.modelTopology,a=e.weightsManifest,o=e.generatedBy,i=e.convertedBy,s=e.format,u=e.userDefinedMetadata,null==r&&null==a)throw new Error("The JSON from HTTP path "+this.path+" contains neither model topology or manifest for weights.");return null==a?[3,7]:[4,this.loadWeights(a)];case 6:f=c.sent(),l=f[0],p=f[1],c.label=7;case 7:return[2,{modelTopology:r,weightSpecs:l,weightData:p,userDefinedMetadata:u,generatedBy:o,convertedBy:i,format:s}]}}))}))},t.prototype.loadWeights=function(t){return u(this,void 0,void 0,(function(){var e,n,r,a,o,i,s,u,l,p,f;return c(this,(function(c){switch(c.label){case 0:for(e=Array.isArray(this.path)?this.path[1]:this.path,n=function(t){var e=t.lastIndexOf("/"),n=t.lastIndexOf("?");return[t.substring(0,e)+"/",n>e?t.substring(n):""]}(e),r=n[0],a=n[1],o=this.weightPathPrefix||r,i=[],s=0,u=t;s<u.length;s++)l=u[s],i.push.apply(i,l.weights);return p=[],t.forEach((function(t){t.paths.forEach((function(t){p.push(o+t+a)}))})),[4,uf(p,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress})];case 1:return f=c.sent(),[2,[i,Ap(f)]]}}))}))},t.URL_SCHEME_REGEX=/^https?:\/\//,t}();function pf(t){return null!=t.match(lf.URL_SCHEME_REGEX)}var ff=function(t,e){return"undefined"==typeof fetch?null:(Array.isArray(t)?t.every((function(t){return pf(t)})):pf(t))?df(t,{onProgress:e}):null};function df(t,e){return new lf(t,e)}_p.registerSaveRouter(ff),_p.registerLoadRouter(ff);var hf,mf=function(){function t(t){this.modelArtifacts=t}return t.prototype.load=function(){return u(this,void 0,void 0,(function(){return c(this,(function(t){return[2,this.modelArtifacts]}))}))},t}(),vf=function(){function t(t){this.saveHandler=t}return t.prototype.save=function(t){return u(this,void 0,void 0,(function(){return c(this,(function(e){return[2,this.saveHandler(t)]}))}))},t}(),gf=Object.freeze({browserFiles:function(t){return new of(t)},browserHTTPRequest:function(t,e){return df(t,e)},concatenateArrayBuffers:Ap,decodeWeights:Ip,encodeWeights:function(t,e){return u(this,void 0,void 0,(function(){var n,r,a,o,i,s=this;return c(this,(function(l){switch(l.label){case 0:for(n=[],r=[],a=Array.isArray(t)?t.map((function(t){return t.name})):Object.keys(t),o=function(o){var i=a[o],l=Array.isArray(t)?t[o].tensor:t[i];if("float32"!==l.dtype&&"int32"!==l.dtype&&"bool"!==l.dtype&&"string"!==l.dtype)throw new Error("Unsupported dtype in weight '"+i+"': "+l.dtype);var p={name:i,shape:l.shape,dtype:l.dtype};if("string"===l.dtype){var f=new Promise((function(t){return u(s,void 0,void 0,(function(){var e,n,r,a,o,i,s;return c(this,(function(u){switch(u.label){case 0:return[4,l.bytes()];case 1:for(e=u.sent(),n=e.reduce((function(t,e){return t+e.length}),0)+4*e.length,r=new Uint8Array(n),a=0,o=0;o<e.length;o++)i=e[o],s=new Uint8Array(new Uint32Array([i.length]).buffer),r.set(s,a),a+=4,r.set(i,a),a+=i.length;return t(r),[2]}}))}))}));r.push(f)}else r.push(l.data());null!=e&&(p.group=e),n.push(p)},i=0;i<a.length;++i)o(i);return[4,Promise.all(r)];case 1:return[2,{data:Rp(l.sent()),specs:n}]}}))}))},fromMemory:function(t,e,n,r){return 1===arguments.length?null!=t.modelTopology||null!=t.weightSpecs?new mf(t):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new mf({modelTopology:t})):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new mf({modelTopology:t,weightSpecs:e,weightData:n,trainingConfig:r}))},getLoadHandlers:function(t,e){return _p.getLoadHandlers(t,e)},getModelArtifactsInfoForJSON:Dp,getSaveHandlers:function(t){return _p.getSaveHandlers(t)},http:df,isHTTPScheme:pf,loadWeights:function(t,e,n,r){return void 0===e&&(e=""),u(this,void 0,void 0,(function(){return c(this,(function(a){return[2,cf((function(t){return uf(t,{requestInit:r})}))(t,e,n)]}))}))},registerLoadRouter:function(t){return _p.registerLoadRouter(t)},registerSaveRouter:function(t){return _p.registerSaveRouter(t)},weightsLoaderFactory:cf,withSaveHandler:function(t){return new vf(t)},copyModel:function(t,e){return u(this,void 0,void 0,(function(){return c(this,(function(n){return[2,Pp(t,e,!1)]}))}))},listModels:function(){return u(this,void 0,void 0,(function(){var t,e,n,r,a,o,i;return c(this,(function(s){switch(s.label){case 0:t=Mp.getSchemes(),e={},n=0,r=t,s.label=1;case 1:return n<r.length?(a=r[n],[4,Mp.getManager(a).listModels()]):[3,4];case 2:for(i in o=s.sent())e[a+Fp+i]=o[i];s.label=3;case 3:return n++,[3,1];case 4:return[2,e]}}))}))},moveModel:function(t,e){return u(this,void 0,void 0,(function(){return c(this,(function(n){return[2,Pp(t,e,!0)]}))}))},removeModel:function(t){return u(this,void 0,void 0,(function(){var e;return c(this,(function(n){return e=Bp(t),[2,Mp.getManager(e.scheme).removeModel(e.path)]}))}))}}),yf=In({confusionMatrix_:function(t,e,n){var r=hn(t,"labels","confusionMatrix"),a=hn(e,"predictions","confusionMatrix");T(null==n||n>0&&Number.isInteger(n),(function(){return"If provided, numClasses must be a positive integer, but got "+n})),T(1===r.rank,(function(){return"Expected the rank of labels to be 1, but got "+r.rank})),T(1===a.rank,(function(){return"Expected the rank of predictions to be 1, but got "+a.rank})),T(r.shape[0]===a.shape[0],(function(){return"Mismatch in the number of examples: "+r.shape[0]+" vs. "+a.shape[0]+". Labels and predictions should have the same number of elements."})),T(n>0&&Number.isInteger(n),(function(){return"numClasses is required to be a positive integer, but got "+n}));var o=Cr(r.asType("int32"),n),i=Cr(a.asType("int32"),n);return o.transpose().matMul(i).asType("int32")}}),xf=Object.freeze({confusionMatrix:yf}),bf=In({fromPixels_:function(t,e){if(void 0===e&&(e=3),e>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(null==t)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");var n=!1,r=!1,a=!1,o=!1,i=!1;if(t.data instanceof Uint8Array)n=!0;else if("undefined"!=typeof ImageData&&t instanceof ImageData)r=!0;else if("undefined"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement)a=!0;else if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement)o=!0;else{if(null==t.getContext)throw new Error("pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was "+t.constructor.name);i=!0}if(a&&a&&t.readyState<2)throw new Error("The video element has not loaded data yet. Please wait for `loadeddata` event on the <video> element.");if(null!=v("FromPixels",Lt.backendName))return Lt.runKernel("FromPixels",{pixels:t},{numChannels:e});var s,u,c=a?[t.videoWidth,t.videoHeight]:[t.width,t.height],l=c[0],p=c[1];if(i?s=t.getContext("2d").getImageData(0,0,l,p).data:r||n?s=t.data:(o||a)&&(null==hf&&(hf=document.createElement("canvas").getContext("2d")),hf.canvas.width=l,hf.canvas.height=p,hf.drawImage(t,0,0,l,p),s=hf.getImageData(0,0,l,p).data),4===e)u=new Int32Array(s);else{var f=l*p;u=new Int32Array(f*e);for(var d=0;d<f;d++)for(var h=0;h<e;++h)u[d*e+h]=s[4*d+h]}return Mn(u,[p,l,e],"int32")}}),wf=Object.freeze({toPixels:function(t,e){return u(this,void 0,void 0,(function(){var n,r,a,o,i,s,u,l,p,f,d,h,m,v,g,y,x,b,w,C,E,S,N;return c(this,(function(c){switch(c.label){case 0:if(n=hn(t,"img","toPixels"),t instanceof wt||(n=n.toInt()),2!==n.rank&&3!==n.rank)throw new Error("toPixels only supports rank 2 or 3 tensors, got rank "+n.rank+".");if(r=n.shape.slice(0,2),a=r[0],o=r[1],(i=2===n.rank?1:n.shape[2])>4||2===i)throw new Error("toPixels only supports depth of size 1, 3 or 4 but got "+i);return[4,n.data()];case 1:return s=c.sent(),u=n.min(),l=n.max(),[4,Promise.all([u.data(),l.data()])];case 2:if(p=c.sent(),f=p[0],d=p[1],h=f[0],m=d[0],u.dispose(),l.dispose(),"float32"===n.dtype){if(h<0||m>1)throw new Error("Tensor values for a float32 Tensor must be in the range [0 - 1] but got range ["+h+" - "+m+"].")}else{if("int32"!==n.dtype)throw new Error("Unsupported type for toPixels: "+n.dtype+". Please use float32 or int32 tensors.");if(h<0||m>255)throw new Error("Tensor values for a int32 Tensor must be in the range [0 - 255] but got range ["+h+" - "+m+"].")}for(v="float32"===n.dtype?255:1,g=new Uint8ClampedArray(o*a*4),y=0;y<a*o;++y)x=void 0,b=void 0,w=void 0,C=void 0,1===i?(x=s[y]*v,b=s[y]*v,w=s[y]*v,C=255):3===i?(x=s[3*y]*v,b=s[3*y+1]*v,w=s[3*y+2]*v,C=255):4===i&&(x=s[4*y]*v,b=s[4*y+1]*v,w=s[4*y+2]*v,C=s[4*y+3]*v),g[0+(E=4*y)]=Math.round(x),g[E+1]=Math.round(b),g[E+2]=Math.round(w),g[E+3]=Math.round(C);return null!=e&&(e.width=o,e.height=a,S=e.getContext("2d"),N=new ImageData(g,o,a),S.putImageData(N,0,0)),n!==t&&n.dispose(),[2,g]}}))}))},fromPixels:bf}),Cf=function(){function t(){}return t.prototype.getClassName=function(){return this.constructor.className},t.fromConfig=function(t,e){return new t(e)},t}(),Ef=function(){function t(){this.classNameMap={}}return t.getMap=function(){return null==t.instance&&(t.instance=new t),t.instance},t.register=function(e){t.getMap().classNameMap[e.className]=[e,e.fromConfig]},t}();function Sf(t){T(null!=t.className,(function(){return"Class being registered does not have the static className property defined."})),T("string"==typeof t.className,(function(){return"className is required to be a string, but got type "+typeof t.className})),T(t.className.length>0,(function(){return"Class being registered has an empty-string as its className, which is disallowed."})),Ef.register(t)}var Nf=Object.freeze({Serializable:Cf,SerializationMap:Ef,registerClass:Sf});function If(){return 32===Lt.backend.floatPrecision()?.001:.1}function Rf(t,e,n){var r=!0;if((K(t)||K(e))&&(r=!1),K(t)&&K(e)&&(r=!0),r){var a=t.constructor.name,o=e.constructor.name;if(a!==o)throw new Error("Arrays are of different type. Actual: "+a+". Expected: "+o)}if(Array.isArray(t)&&Array.isArray(e)){var i=fn(t),s=fn(e);if(!_(i,s))throw new Error("Arrays have different shapes. Actual: ["+i+"]. Expected: ["+s+"]")}var u=K(t)?t:O(t),c=K(e)?e:O(e);if(u.length!==c.length)throw new Error("Arrays have different lengths actual: "+u.length+" vs expected: "+c.length+".\nActual: "+u+".\nExpected: "+c+".");for(var l=0;l<c.length;++l){var p=u[l],f=c[l];if(!n(p,f))throw new Error("Arrays differ: actual["+l+"] = "+p+", expected["+l+"] = "+f+".\nActual: "+u+".\nExpected: "+c+".")}}function Tf(t,e,n){return!isFinite(t)&&!isFinite(e)||!(isNaN(t)||isNaN(e)||Math.abs(t-e)>n)}var kf=Object.freeze({TEST_EPSILON_FLOAT16:.1,expectArraysClose:function(t,e,n){return null==n&&(n=If()),Rf(t,e,(function(t,e){return Tf(t,e,n)}))},testEpsilon:If,expectPromiseToFail:function(t,e){t().then((function(){return e.fail()}),(function(){return e()}))},expectArraysEqual:function(t,e){var n="string"==typeof e||"number"==typeof e||"boolean"==typeof e?[e]:e;return $(t)||$(t[0])||$(e)||$(e[0])?Rf(t,n,(function(t,e){return t==e})):Rf(t,e,(function(t,e){return Tf(t,e,0)}))},expectNumbersClose:function(t,e,n){if(null==n&&(n=If()),!Tf(t,e,n))throw new Error("Numbers differ: actual === "+t+", expected === "+e)},expectValuesInRange:function(t,e,n){for(var r=0;r<t.length;r++)if(t[r]<e||t[r]>n)throw new Error("Value out of range:"+t[r]+" low: "+e+", high: "+n)},expectArrayBuffersEqual:function(t,e){expect(new Float32Array(t)).toEqual(new Float32Array(e))}}),Af="1.5.1",Of=Object.freeze({gpgpu_util:Ci,webgl_util:ze,forceHalfFloat:function(){f().set("WEBGL_FORCE_F16_TEXTURES",!0)},MathBackendWebGL:Ts,setWebGLContext:qt,GPGPUContext:Ei}),Df=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype.minimize=function(t,e,n){void 0===e&&(e=!1);var r=this.computeGradients(t,n),a=r.value,o=r.grads;if(null!=n){var i=n.map((function(t){return{name:t.name,tensor:o[t.name]}}));this.applyGradients(i)}else this.applyGradients(o);return Je(o),e?a:(a.dispose(),null)},Object.defineProperty(e.prototype,"iterations",{get:function(){return null==this.iterations_&&(this.iterations_=0),this.iterations_},enumerable:!0,configurable:!0}),e.prototype.incrementIterations=function(){this.iterations_=this.iterations+1},e.prototype.computeGradients=function(t,e){return ia(t,e)},e.prototype.dispose=function(){null!=this.iterations_&&Je(this.iterations_)},e.prototype.saveIterations=function(){return u(this,void 0,void 0,(function(){return c(this,(function(t){return null==this.iterations_&&(this.iterations_=0),[2,{name:"iter",tensor:Dn(this.iterations_,"int32")}]}))}))},e.prototype.getWeights=function(){return u(this,void 0,void 0,(function(){return c(this,(function(t){throw new Error("getWeights() is not implemented for this optimizer yet.")}))}))},e.prototype.setWeights=function(t){return u(this,void 0,void 0,(function(){return c(this,(function(t){throw new Error("setWeights() is not implemented for this optimizer class "+this.getClassName())}))}))},e.prototype.extractIterations=function(t){return u(this,void 0,void 0,(function(){var e;return c(this,(function(n){switch(n.label){case 0:return e=this,[4,t[0].tensor.data()];case 1:return e.iterations_=n.sent()[0],[2,t.slice(1)]}}))}))},e}(Cf);Object.defineProperty(Df,Symbol.hasInstance,{value:function(t){return null!=t.minimize&&null!=t.computeGradients&&null!=t.applyGradients}});var _f=function(t){function e(e,n,r){void 0===r&&(r=null);var a=t.call(this)||this;return a.learningRate=e,a.rho=n,a.epsilon=r,a.accumulatedGrads=[],a.accumulatedUpdates=[],null==r&&(a.epsilon=Lt.backend.epsilon()),a}return s(e,t),e.prototype.applyGradients=function(t){var e=this;(Array.isArray(t)?t.map((function(t){return t.name})):Object.keys(t)).forEach((function(n,r){var a=Lt.registeredVariables[n];null==e.accumulatedGrads[r]&&(e.accumulatedGrads[r]={originalName:n+"/accum_grad",variable:Qe((function(){return qn(a).variable(!1)}))}),null==e.accumulatedUpdates[r]&&(e.accumulatedUpdates[r]={originalName:n+"/accum_var",variable:Qe((function(){return qn(a).variable(!1)}))});var o=Array.isArray(t)?t[r].tensor:t[n];if(null!=o){var i=e.accumulatedGrads[r].variable,s=e.accumulatedUpdates[r].variable;Qe((function(){var t=i.mul(e.rho).add(o.square().mul(1-e.rho)),n=s.add(e.epsilon).sqrt().div(i.add(e.epsilon).sqrt()).mul(o),r=s.mul(e.rho).add(n.square().mul(1-e.rho));i.assign(t),s.assign(r);var u=n.mul(-e.learningRate).add(a);a.assign(u)}))}})),this.incrementIterations()},e.prototype.dispose=function(){null!=this.accumulatedUpdates&&(Je(this.accumulatedGrads.map((function(t){return t.variable}))),Je(this.accumulatedUpdates.map((function(t){return t.variable}))))},e.prototype.getWeights=function(){return u(this,void 0,void 0,(function(){var t;return c(this,(function(e){switch(e.label){case 0:return t=this.accumulatedGrads.concat(this.accumulatedUpdates),[4,this.saveIterations()];case 1:return[2,[e.sent()].concat(t.map((function(t){return{name:t.originalName,tensor:t.variable}})))]}}))}))},e.prototype.setWeights=function(t){return u(this,void 0,void 0,(function(){var e;return c(this,(function(n){switch(n.label){case 0:return[4,this.extractIterations(t)];case 1:return t=n.sent(),e=t.length/2,this.accumulatedGrads=t.slice(0,e).map((function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}})),this.accumulatedUpdates=t.slice(e,2*e).map((function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}})),[2]}}))}))},e.prototype.getConfig=function(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}},e.fromConfig=function(t,e){return new t(e.learningRate,e.rho,e.epsilon)},e.className="Adadelta",e}(Df);Sf(_f);var Ff=function(t){function e(e,n){void 0===n&&(n=.1);var r=t.call(this)||this;return r.learningRate=e,r.initialAccumulatorValue=n,r.accumulatedGrads=[],r}return s(e,t),e.prototype.applyGradients=function(t){var e=this;(Array.isArray(t)?t.map((function(t){return t.name})):Object.keys(t)).forEach((function(n,r){var a=Lt.registeredVariables[n];null==e.accumulatedGrads[r]&&(e.accumulatedGrads[r]={originalName:n+"/accumulator",variable:Qe((function(){return Un(a.shape,e.initialAccumulatorValue).variable(!1)}))});var o=Array.isArray(t)?t[r].tensor:t[n];if(null!=o){var i=e.accumulatedGrads[r].variable;Qe((function(){var t=i.add(o.square());i.assign(t);var n=o.div(t.add(Lt.backend.epsilon()).sqrt()).mul(-e.learningRate).add(a);a.assign(n)}))}})),this.incrementIterations()},e.prototype.dispose=function(){null!=this.accumulatedGrads&&Je(this.accumulatedGrads.map((function(t){return t.variable})))},e.prototype.getWeights=function(){return u(this,void 0,void 0,(function(){return c(this,(function(t){switch(t.label){case 0:return[4,this.saveIterations()];case 1:return[2,[t.sent()].concat(this.accumulatedGrads.map((function(t){return{name:t.originalName,tensor:t.variable}})))]}}))}))},e.prototype.setWeights=function(t){return u(this,void 0,void 0,(function(){return c(this,(function(e){switch(e.label){case 0:return[4,this.extractIterations(t)];case 1:return t=e.sent(),this.accumulatedGrads=t.map((function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}})),[2]}}))}))},e.prototype.getConfig=function(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}},e.fromConfig=function(t,e){return new t(e.learningRate,e.initialAccumulatorValue)},e.className="Adagrad",e}(Df);Sf(Ff);var Mf=function(t){function e(e,n,r,a){void 0===a&&(a=null);var o=t.call(this)||this;return o.learningRate=e,o.beta1=n,o.beta2=r,o.epsilon=a,o.accumulatedFirstMoment=[],o.accumulatedSecondMoment=[],Qe((function(){o.accBeta1=Dn(n).variable(),o.accBeta2=Dn(r).variable()})),null==a&&(o.epsilon=Lt.backend.epsilon()),o}return s(e,t),e.prototype.applyGradients=function(t){var e=this,n=Array.isArray(t)?t.map((function(t){return t.name})):Object.keys(t);Qe((function(){var r=$u(1,e.accBeta1),a=$u(1,e.accBeta2);n.forEach((function(n,o){var i=Lt.registeredVariables[n];null==e.accumulatedFirstMoment[o]&&(e.accumulatedFirstMoment[o]={originalName:n+"/m",variable:Qe((function(){return qn(i).variable(!1)}))}),null==e.accumulatedSecondMoment[o]&&(e.accumulatedSecondMoment[o]={originalName:n+"/v",variable:Qe((function(){return qn(i).variable(!1)}))});var s=Array.isArray(t)?t[o].tensor:t[n];if(null!=s){var u=e.accumulatedFirstMoment[o].variable,c=e.accumulatedSecondMoment[o].variable,l=u.mul(e.beta1).add(s.mul(1-e.beta1)),p=c.mul(e.beta2).add(s.square().mul(1-e.beta2)),f=l.div(r),d=p.div(a);u.assign(l),c.assign(p);var h=f.div(d.sqrt().add(e.epsilon)).mul(-e.learningRate).add(i);i.assign(h)}})),e.accBeta1.assign(e.accBeta1.mul(e.beta1)),e.accBeta2.assign(e.accBeta2.mul(e.beta2))})),this.incrementIterations()},e.prototype.dispose=function(){this.accBeta1.dispose(),this.accBeta2.dispose(),null!=this.accumulatedFirstMoment&&Je(this.accumulatedFirstMoment.map((function(t){return t.variable}))),null!=this.accumulatedSecondMoment&&Je(this.accumulatedSecondMoment.map((function(t){return t.variable})))},e.prototype.getWeights=function(){return u(this,void 0,void 0,(function(){var t;return c(this,(function(e){switch(e.label){case 0:return t=this.accumulatedFirstMoment.concat(this.accumulatedSecondMoment),[4,this.saveIterations()];case 1:return[2,[e.sent()].concat(t.map((function(t){return{name:t.originalName,tensor:t.variable}})))]}}))}))},e.prototype.setWeights=function(t){return u(this,void 0,void 0,(function(){var e,n=this;return c(this,(function(r){switch(r.label){case 0:return[4,this.extractIterations(t)];case 1:return t=r.sent(),Qe((function(){n.accBeta1.assign(qu(n.beta1,n.iterations_+1)),n.accBeta2.assign(qu(n.beta2,n.iterations_+1))})),e=t.length/2,this.accumulatedFirstMoment=t.slice(0,e).map((function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}})),this.accumulatedSecondMoment=t.slice(e,2*e).map((function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}})),[2]}}))}))},e.prototype.getConfig=function(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}},e.fromConfig=function(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon)},e.className="Adam",e}(Df);Sf(Mf);var Bf=function(t){function e(e,n,r,a,o){void 0===a&&(a=null),void 0===o&&(o=0);var i=t.call(this)||this;return i.learningRate=e,i.beta1=n,i.beta2=r,i.epsilon=a,i.decay=o,i.accumulatedFirstMoment=[],i.accumulatedWeightedInfNorm=[],Qe((function(){i.iteration=Dn(0).variable(),i.accBeta1=Dn(n).variable()})),null==a&&(i.epsilon=Lt.backend.epsilon()),i}return s(e,t),e.prototype.applyGradients=function(t){var e=this,n=Array.isArray(t)?t.map((function(t){return t.name})):Object.keys(t);Qe((function(){var r=$u(1,e.accBeta1),a=Fu(-e.learningRate,e.iteration.mul(e.decay).add(1));n.forEach((function(n,o){var i=Lt.registeredVariables[n];null==e.accumulatedFirstMoment[o]&&(e.accumulatedFirstMoment[o]={originalName:n+"/m",variable:qn(i).variable(!1)}),null==e.accumulatedWeightedInfNorm[o]&&(e.accumulatedWeightedInfNorm[o]={originalName:n+"/v",variable:qn(i).variable(!1)});var s=Array.isArray(t)?t[o].tensor:t[n];if(null!=s){var u=e.accumulatedFirstMoment[o].variable,c=e.accumulatedWeightedInfNorm[o].variable,l=u.mul(e.beta1).add(s.mul(1-e.beta1)),p=c.mul(e.beta2),f=s.abs(),d=p.maximum(f);u.assign(l),c.assign(d);var h=a.div(r).mul(l.div(d.add(e.epsilon))).add(i);i.assign(h)}})),e.iteration.assign(e.iteration.add(1)),e.accBeta1.assign(e.accBeta1.mul(e.beta1))})),this.incrementIterations()},e.prototype.dispose=function(){this.accBeta1.dispose(),this.iteration.dispose(),null!=this.accumulatedFirstMoment&&Je(this.accumulatedFirstMoment.map((function(t){return t.variable}))),null!=this.accumulatedWeightedInfNorm&&Je(this.accumulatedWeightedInfNorm.map((function(t){return t.variable})))},e.prototype.getWeights=function(){return u(this,void 0,void 0,(function(){return c(this,(function(t){throw new Error("getWeights() is not implemented for Adamax yet.")}))}))},e.prototype.setWeights=function(t){return u(this,void 0,void 0,(function(){return c(this,(function(t){throw new Error("setWeights() is not implemented for Adamax yet.")}))}))},e.prototype.getConfig=function(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}},e.fromConfig=function(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon,e.decay)},e.className="Adamax",e}(Df);Sf(Bf);var Pf=function(t){function e(e){var n=t.call(this)||this;return n.learningRate=e,n.setLearningRate(e),n}return s(e,t),e.prototype.applyGradients=function(t){var e=this;(Array.isArray(t)?t.map((function(t){return t.name})):Object.keys(t)).forEach((function(n,r){var a=Array.isArray(t)?t[r].tensor:t[n];if(null!=a){var o=Lt.registeredVariables[n];Qe((function(){var t=e.c.mul(a).add(o);o.assign(t)}))}})),this.incrementIterations()},e.prototype.setLearningRate=function(t){this.learningRate=t,null!=this.c&&this.c.dispose(),this.c=Ze(Dn(-t))},e.prototype.dispose=function(){this.c.dispose()},e.prototype.getWeights=function(){return u(this,void 0,void 0,(function(){return c(this,(function(t){switch(t.label){case 0:return[4,this.saveIterations()];case 1:return[2,[t.sent()]]}}))}))},e.prototype.setWeights=function(t){return u(this,void 0,void 0,(function(){return c(this,(function(e){switch(e.label){case 0:return[4,this.extractIterations(t)];case 1:if(0!==(t=e.sent()).length)throw new Error("SGD optimizer does not have settable weights.");return[2]}}))}))},e.prototype.getConfig=function(){return{learningRate:this.learningRate}},e.fromConfig=function(t,e){return new t(e.learningRate)},e.className="SGD",e}(Df);Sf(Pf);var Lf=function(t){function e(e,n,r){void 0===r&&(r=!1);var a=t.call(this,e)||this;return a.learningRate=e,a.momentum=n,a.useNesterov=r,a.accumulations=[],a.m=Dn(a.momentum),a}return s(e,t),e.prototype.applyGradients=function(t){var e=this;(Array.isArray(t)?t.map((function(t){return t.name})):Object.keys(t)).forEach((function(n,r){var a=Lt.registeredVariables[n];null==e.accumulations[r]&&(e.accumulations[r]={originalName:n+"/momentum",variable:Qe((function(){return qn(a).variable(!1)}))});var o=e.accumulations[r].variable,i=Array.isArray(t)?t[r].tensor:t[n];null!=i&&Qe((function(){var t,n=e.m.mul(o).add(i);t=e.useNesterov?e.c.mul(i.add(n.mul(e.m))).add(a):e.c.mul(n).add(a),o.assign(n),a.assign(t)}))})),this.incrementIterations()},e.prototype.dispose=function(){this.m.dispose(),null!=this.accumulations&&Je(this.accumulations.map((function(t){return t.variable})))},e.prototype.setMomentum=function(t){this.momentum=t},e.prototype.getWeights=function(){return u(this,void 0,void 0,(function(){return c(this,(function(t){switch(t.label){case 0:return[4,this.saveIterations()];case 1:return[2,[t.sent()].concat(this.accumulations.map((function(t){return{name:t.originalName,tensor:t.variable}})))]}}))}))},e.prototype.setWeights=function(t){return u(this,void 0,void 0,(function(){return c(this,(function(e){switch(e.label){case 0:return[4,this.extractIterations(t)];case 1:return t=e.sent(),this.accumulations=t.map((function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}})),[2]}}))}))},e.prototype.getConfig=function(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}},e.fromConfig=function(t,e){return new t(e.learningRate,e.momentum,e.useNesterov)},e.className="Momentum",e}(Pf);Sf(Lf);var Vf=function(t){function e(e,n,r,a,o){void 0===n&&(n=.9),void 0===r&&(r=0),void 0===a&&(a=null),void 0===o&&(o=!1);var i=t.call(this)||this;return i.learningRate=e,i.decay=n,i.momentum=r,i.epsilon=a,i.accumulatedMeanSquares=[],i.accumulatedMoments=[],i.accumulatedMeanGrads=[],i.centered=o,null==a&&(i.epsilon=Lt.backend.epsilon()),i}return s(e,t),e.prototype.applyGradients=function(t){var e=this;(Array.isArray(t)?t.map((function(t){return t.name})):Object.keys(t)).forEach((function(n,r){var a=Lt.registeredVariables[n];null==e.accumulatedMeanSquares[r]&&(e.accumulatedMeanSquares[r]={originalName:n+"/rms",variable:Qe((function(){return qn(a).variable(!1)}))}),null==e.accumulatedMoments[r]&&(e.accumulatedMoments[r]={originalName:n+"/momentum",variable:Qe((function(){return qn(a).variable(!1)}))}),null==e.accumulatedMeanGrads[r]&&e.centered&&(e.accumulatedMeanGrads[r]={originalName:n+"/mg",variable:Qe((function(){return qn(a).variable(!1)}))});var o=Array.isArray(t)?t[r].tensor:t[n];if(null!=o){var i=e.accumulatedMeanSquares[r].variable,s=e.accumulatedMoments[r].variable;Qe((function(){var t=i.mul(e.decay).add(o.square().mul(1-e.decay));if(e.centered){var n=e.accumulatedMeanGrads[r].variable,u=n.mul(e.decay).add(o.mul(1-e.decay)),c=s.mul(e.momentum).add(o.mul(e.learningRate).div(t.sub(u.square().add(e.epsilon)).sqrt()));i.assign(t),n.assign(u),s.assign(c);var l=a.sub(c);a.assign(l)}else{var p=i.mul(e.decay).add(o.square().mul(1-e.decay));c=s.mul(e.momentum).add(o.mul(e.learningRate).div(p.add(e.epsilon).sqrt())),i.assign(p),s.assign(c),l=a.sub(c),a.assign(l)}}))}})),this.incrementIterations()},e.prototype.dispose=function(){null!=this.accumulatedMeanSquares&&Je(this.accumulatedMeanSquares.map((function(t){return t.variable}))),null!=this.accumulatedMeanGrads&&this.centered&&Je(this.accumulatedMeanGrads.map((function(t){return t.variable}))),null!=this.accumulatedMoments&&Je(this.accumulatedMoments.map((function(t){return t.variable})))},e.prototype.getWeights=function(){return u(this,void 0,void 0,(function(){var t;return c(this,(function(e){switch(e.label){case 0:return t=this.accumulatedMeanSquares.concat(this.accumulatedMoments),this.centered&&t.push.apply(t,this.accumulatedMeanGrads),[4,this.saveIterations()];case 1:return[2,[e.sent()].concat(t.map((function(t){return{name:t.originalName,tensor:t.variable}})))]}}))}))},e.prototype.setWeights=function(t){return u(this,void 0,void 0,(function(){var e;return c(this,(function(n){switch(n.label){case 0:return[4,this.extractIterations(t)];case 1:return t=n.sent(),e=this.centered?t.length/3:t.length/2,this.accumulatedMeanSquares=t.slice(0,e).map((function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}})),this.accumulatedMoments=t.slice(e,2*e).map((function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}})),this.centered&&(this.accumulatedMeanGrads=t.slice(2*e,3*e).map((function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}}))),[2]}}))}))},e.prototype.getConfig=function(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}},e.fromConfig=function(t,e){return new t(e.learningRate,e.decay,e.momentum,e.epsilon,e.centered)},e.className="RMSProp",e}(Df);Sf(Vf);var Wf=function(){function t(){}return t.sgd=function(t){return new Pf(t)},t.momentum=function(t,e,n){return void 0===n&&(n=!1),new Lf(t,e,n)},t.rmsprop=function(t,e,n,r,a){return void 0===e&&(e=.9),void 0===n&&(n=0),void 0===r&&(r=null),void 0===a&&(a=!1),new Vf(t,e,n,r,a)},t.adam=function(t,e,n,r){return void 0===t&&(t=.001),void 0===e&&(e=.9),void 0===n&&(n=.999),void 0===r&&(r=null),new Mf(t,e,n,r)},t.adadelta=function(t,e,n){return void 0===t&&(t=.001),void 0===e&&(e=.95),void 0===n&&(n=null),new _f(t,e,n)},t.adamax=function(t,e,n,r,a){return void 0===t&&(t=.002),void 0===e&&(e=.9),void 0===n&&(n=.999),void 0===r&&(r=null),void 0===a&&(a=0),new Bf(t,e,n,r,a)},t.adagrad=function(t,e){return void 0===e&&(e=.1),new Ff(t,e)},t}(),zf={sgd:Wf.sgd,momentum:Wf.momentum,adadelta:Wf.adadelta,adagrad:Wf.adagrad,rmsprop:Wf.rmsprop,adamax:Wf.adamax,adam:Wf.adam},Uf="undefined"!=typeof requestAnimationFrame?requestAnimationFrame:void 0!==o?o:function(t){return t()};function jf(){return new Promise((function(t){return Uf((function(){return t()}))}))}xt=mp}.call(this,n(1),n(3),n(4).Buffer,n(8).setImmediate)},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";(function(t){n.d(e,"a",(function(){return ot}));var r,a,o,i=n(0),s=function(){return(s=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var a in e=arguments[n])Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t}).apply(this,arguments)};
|
|
/**
|
|
* @license
|
|
* Copyright 2019 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/function u(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){t.done?a(t.value):new n((function(e){e(t.value)})).then(i,s)}u((r=r.apply(t,e||[])).next())}))}function c(t,e){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(a=2&o[0]?r.return:o[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,o[1])).done)return a;switch(r=0,a&&(o=[2&o[0],a.value]),o[0]){case 0:case 1:a=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(a=(a=i.trys).length>0&&a[a.length-1])&&(6===o[0]||2===o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]<a[3])){i.label=o[1];break}if(6===o[0]&&i.label<a[1]){i.label=a[1],a=o;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(o);break}a[2]&&i.ops.pop(),i.trys.pop();continue}o=e.call(t,i)}catch(t){o=[6,t],r=0}finally{n=a=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}}(o=r||(r={}))[o.DT_INVALID=0]="DT_INVALID",o[o.DT_FLOAT=1]="DT_FLOAT",o[o.DT_DOUBLE=2]="DT_DOUBLE",o[o.DT_INT32=3]="DT_INT32",o[o.DT_UINT8=4]="DT_UINT8",o[o.DT_INT16=5]="DT_INT16",o[o.DT_INT8=6]="DT_INT8",o[o.DT_STRING=7]="DT_STRING",o[o.DT_COMPLEX64=8]="DT_COMPLEX64",o[o.DT_INT64=9]="DT_INT64",o[o.DT_BOOL=10]="DT_BOOL",o[o.DT_QINT8=11]="DT_QINT8",o[o.DT_QUINT8=12]="DT_QUINT8",o[o.DT_QINT32=13]="DT_QINT32",o[o.DT_BFLOAT16=14]="DT_BFLOAT16",o[o.DT_FLOAT_REF=101]="DT_FLOAT_REF",o[o.DT_DOUBLE_REF=102]="DT_DOUBLE_REF",o[o.DT_INT32_REF=103]="DT_INT32_REF",o[o.DT_UINT8_REF=104]="DT_UINT8_REF",o[o.DT_INT16_REF=105]="DT_INT16_REF",o[o.DT_INT8_REF=106]="DT_INT8_REF",o[o.DT_STRING_REF=107]="DT_STRING_REF",o[o.DT_COMPLEX64_REF=108]="DT_COMPLEX64_REF",o[o.DT_INT64_REF=109]="DT_INT64_REF",o[o.DT_BOOL_REF=110]="DT_BOOL_REF",o[o.DT_QINT8_REF=111]="DT_QINT8_REF",o[o.DT_QUINT8_REF=112]="DT_QUINT8_REF",o[o.DT_QINT32_REF=113]="DT_QINT32_REF",o[o.DT_BFLOAT16_REF=114]="DT_BFLOAT16_REF",function(t){!function(t){t[t.LEGACY=0]="LEGACY",t[t.V1=1]="V1",t[t.V2=2]="V2"}(t.CheckpointFormatVersion||(t.CheckpointFormatVersion={}))}(a||(a={}));var l={};function p(t){return l[t]}function f(t,e,n,r){var a=e.inputParams[t];if(a&&void 0!==a.inputIndexStart){var o=a.inputIndexStart,i=0===a.inputIndexEnd?void 0:void 0===a.inputIndexEnd?o+1:a.inputIndexEnd;if("tensor"===a.type)return d(e.inputNames[a.inputIndexStart],n,r);if("tensors"===a.type)return e.inputNames.slice(o,i).map((function(t){return d(t,n,r)}));var s=Array.prototype.slice.call(d(e.inputNames.slice(o)[0],n,r).dataSync());return"number"===a.type?s[0]:s}var u=e.attrParams[t];return u&&u.value}function d(t,e,n){var r=v(t),a=r[0],o=r[1],i=n.currentContextIds.find((function(t){return!!e[m(a,t)]}));return void 0!==i?e[m(a,i)][o]:void 0}function h(t,e){var n=v(t),r=n[0],a=n[1];return[m(r,e&&e.currentContextId),a]}function m(t,e){return e?t+"-"+e:t}function v(t){var e=t.lastIndexOf(":");return-1===e?[t,0]:[t.substring(0,e),Number(t.substring(e+1))]}function g(t,e){for(var n=[],r=0;r<t.length;r+=e)n.push(t.slice(r,r+e));return n}var y=Object.freeze({json:[{tfOpName:"Add",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddV2",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddN",category:"arithmetic",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"BiasAdd",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sub",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"RealDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Div",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"DivNoNan",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mul",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Maximum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}]},{tfOpName:"Minimum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}]},{tfOpName:"Pow",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SquaredDifference",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorMod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}]}),x=Object.freeze({json:[{tfOpName:"Abs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan2",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ceil",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ClipByValue",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"clip_value_min",name:"clipValueMin",type:"number"},{tfName:"clip_value_max",name:"clipValueMax",type:"number"}]},{tfOpName:"Complex",category:"basic_math",inputs:[{start:0,name:"real",type:"tensor"},{start:1,name:"imag",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ComplexAbs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Elu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Exp",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Floor",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Imag",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Neg",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Real",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Prelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"alpha",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu6",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"clipValueMin",name:"clipValueMin",type:"number",defaultValue:0},{tfName:"clipValueMax",name:"clipValueMax",type:"number",defaultValue:6}]},{tfOpName:"Selu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sigmoid",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Rsqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Square",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sign",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Round",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Expm1",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log1p",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Reciprocal",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Softplus",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Erf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Prod",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axes",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LeakyRelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"alpha",name:"alpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}]}),b=Object.freeze({json:[{tfOpName:"LoopCond",category:"control",inputs:[{start:0,name:"pred",type:"tensor"}]},{tfOpName:"Switch",category:"control",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"pred",type:"tensor"}]},{tfOpName:"Merge",category:"control",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"Enter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"frame_name",name:"frameName",type:"string"},{tfName:"is_constant",name:"isConstant",type:"bool"}]},{tfOpName:"Exit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NextIteration",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayV3",category:"control",inputs:[{start:0,name:"size",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"dynamic_size",name:"dynamicSize",type:"bool"},{tfName:"clear_after_read",name:"clearAfterRead",type:"bool"},{tfName:"identical_element_shapes",name:"identicalElementShapes",type:"bool"},{tfName:"tensor_array_name",name:"name",type:"string"}]},{tfOpName:"TensorArrayWriteV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"number"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayReadV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"number"},{start:1,name:"index",type:"number"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayGatherV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"number"},{start:1,name:"indices",type:"number[]"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"}]},{tfOpName:"TensorArrayScatterV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"number"},{start:1,name:"indices",type:"number[]"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArrayConcatV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"number"},{start:1,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape_except0",name:"elementShapeExcept0",type:"shape",notSupported:!0}]},{tfOpName:"TensorArraySplitV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"number"},{start:1,name:"tensor",type:"tensor"},{start:2,name:"lengths",type:"number[]"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArraySizeV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"number"},{start:1,name:"flowIn",type:"number"}]},{tfOpName:"TensorArrayCloseV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"number"}]}]}),w=Object.freeze({json:[{tfOpName:"AvgPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AvgPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Conv1D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"stride",name:"stride",type:"number"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NWC"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"dilation",name:"dilation",type:"number",defaultValue:1}]},{tfOpName:"Conv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"useCudnnOnGpu",name:"useCudnnOnGpu",type:"bool"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"_FusedConv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"use_cudnn_on_gpu",name:"useCudnnOnGpu",type:"bool",defaultValue:!0},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4}]},{tfOpName:"Conv2DBackpropInput",category:"convolution",inputs:[{start:2,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:0,name:"outputShape",type:"number[]"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"DepthwiseConv2d",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"DepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"FusedDepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]}]},{tfOpName:"Conv3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]}]}),C=Object.freeze({json:[{tfOpName:"Fill",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"},{start:1,name:"value",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"LinSpace",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"num",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"OneHot",category:"creation",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"depth",type:"number"},{start:2,name:"onValue",type:"number",defaultValue:1},{start:3,name:"offValue",type:"number",defaultValue:0}],attrs:[{tfName:"axis",name:"axis",type:"number",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ones",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"OnesLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"RandomUniform",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number",defaultValue:0},{tfName:"maxval",name:"maxval",type:"number",defaultValue:1},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Range",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"step",type:"number",defaultValue:0}],attrs:[{tfName:"Tidx",name:"dtype",type:"dtype"}]},{tfOpName:"TruncatedNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"means",name:"mean",type:"number",defaultValue:0},{tfName:"stddev",name:"stdDev",type:"number",defaultValue:1},{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Zeros",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"ZerosLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Multinomial",category:"creation",inputs:[{start:0,name:"logits",type:"tensor"},{start:1,name:"numSamples",type:"number"}],attrs:[{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number"},{tfName:"T",name:"dtype",type:"dtype"},{tfName:"output_dtype",name:"output_dtype",type:"dtype"}]}]}),E=Object.freeze({json:[{tfOpName:"NonMaxSuppressionV2",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV3",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}]},{tfOpName:"Where",category:"dynamic",inputs:[{start:0,name:"condition",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ListDiff",category:"dynamic",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}]}),S=Object.freeze({json:[{tfOpName:"TopKV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"k",type:"number"}],attrs:[{tfName:"sorted",name:"sorted",type:"bool"}]}]}),N=Object.freeze({json:[{tfOpName:"PlaceholderWithDefault",category:"graph",inputs:[{start:0,name:"default",type:"tensor"}],attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Placeholder",category:"graph",attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Const",category:"graph"},{tfOpName:"Identity",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IdentityN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Snapshot",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Rank",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Size",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Shape",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"ShapeN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Print",category:"graph",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"data",type:"tensors"}],attrs:[{tfName:"message",name:"message",type:"string"},{tfName:"first_n",name:"firstN",type:"number",notSupported:!0},{tfName:"summarize",name:"summarize",type:"number",defaultValue:3}]},{tfOpName:"NoOp",category:"graph",inputs:[]},{tfOpName:"StopGradient",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"FakeQuantWithMinMaxVars",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"min",name:"min",type:"number"},{tfName:"max",name:"max",type:"number"}]}]}),I=Object.freeze({json:[{tfOpName:"ResizeBilinear",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ResizeNearestNeighbor",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"CropAndResize",category:"image",inputs:[{start:0,name:"image",type:"tensor"},{start:1,name:"boxes",type:"tensor"},{start:2,name:"boxInd",type:"tensor"},{start:3,name:"cropSize",type:"number[]"}],attrs:[{tfName:"method",name:"method",type:"string"},{tfName:"extrapolation_value",name:"extrapolationValue",type:"number"}]}]}),R=Object.freeze({json:[{tfOpName:"Equal",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NotEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Greater",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"GreaterEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Less",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LessEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalAnd",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalNot",category:"logical",inputs:[{start:0,name:"a",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalOr",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Select",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}]}),T=Object.freeze({json:[{tfOpName:"_FusedMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMulV2",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Transpose",category:"matrices",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"perm",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}]}),k=Object.freeze({json:[{tfOpName:"FusedBatchNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV2",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV3",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"LRN",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"depth_radius",name:"radius",type:"number",defaultValue:5},{tfName:"bias",name:"bias",type:"number",defaultValue:1},{tfName:"alpha",name:"alpha",type:"number",defaultValue:1},{tfName:"beta",name:"beta",type:"number",defaultValue:.5}]},{tfOpName:"Softmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"LogSoftmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"SparseToDense",category:"normalization",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!0,notSupported:!0}]}]}),A=Object.freeze({json:[{tfOpName:"Max",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Mean",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Min",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Sum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"All",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Any",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"ArgMax",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"ArgMin",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"Prod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]}]}),O=Object.freeze({json:[{tfOpName:"ConcatV2",category:"slice_join",inputs:[{start:0,end:-1,name:"tensors",type:"tensors"},{start:-1,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"Concat",category:"slice_join",inputs:[{start:1,end:0,name:"tensors",type:"tensors"},{start:0,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"GatherV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"axis",type:"number",defaultValue:0}]},{tfOpName:"Gather",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0},{tfName:"validate_indices",name:"validateIndices",type:"bool",notSupported:!0}]},{tfOpName:"Reverse",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"dims",type:"bool",notSupported:!0}]},{tfOpName:"ReverseV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}]},{tfOpName:"Slice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"size",type:"number[]"}]},{tfOpName:"StridedSlice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"end",type:"number[]"},{start:3,name:"strides",type:"number[]"}],attrs:[{tfName:"begin_mask",name:"beginMask",type:"number",defaultValue:0},{tfName:"end_mask",name:"endMask",type:"number",defaultValue:0},{tfName:"new_axis_mask",name:"newAxisMask",type:"number",defaultValue:0},{tfName:"ellipsis_mask",name:"ellipsisMask",type:"number",defaultValue:0},{tfName:"shrink_axis_mask",name:"shrinkAxisMask",type:"number",defaultValue:0}]},{tfOpName:"Pack",category:"slice_join",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0}]},{tfOpName:"Unpack",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0},{tfName:"num",name:"num",type:"number",defaultValue:0,notSupported:!0}]},{tfOpName:"Tile",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"reps",type:"number[]"}]},{tfOpName:"Split",category:"slice_join",inputs:[{start:0,name:"axis",type:"number",defaultValue:0},{start:1,name:"x",type:"tensor"}],attrs:[{tfName:"num_split",name:"numOrSizeSplits",type:"number",defaultValue:1}]},{tfOpName:"SplitV",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"numOrSizeSplits",type:"number[]"},{start:2,name:"axis",type:"number",defaultValue:0}]},{tfOpName:"ScatterNd",category:"slice_join",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"shape",type:"number[]"}]},{tfOpName:"GatherNd",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}]},{tfOpName:"SparseToDense",category:"slice_join",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!1,notSupported:!0}]}]}),D=Object.freeze({json:[{tfOpName:"FFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"RFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]},{tfOpName:"IRFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]}]}),_=Object.freeze({json:[{tfOpName:"Cast",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"SrcT",name:"sdtype",type:"dtype",notSupported:!0},{tfName:"DstT",name:"dtype",type:"dtype"}]},{tfOpName:"ExpandDims",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"Pad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"constant_value",name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"PadV2",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"},{start:2,name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"Reshape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"Squeeze",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"axis",tfDeprecatedName:"squeeze_dims",name:"axis",type:"number[]"}]},{tfOpName:"SpaceToBatchND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"paddings",type:"number[]"}]},{tfOpName:"BatchToSpaceND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"crops",type:"number[]"}]},{tfOpName:"DepthToSpace",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"block_size",name:"blockSize",type:"number"},{tfName:"data_format",name:"dataFormat",type:"string"}]}]}),F=function(){function t(){var t=[y,x,b,w,C,E,S,R,I,N,T,k,A,O,D,_],e=[].concat.apply([],t.map((function(t){return t.json})));this.opMappers=e.reduce((function(t,e){return t[e.tfOpName]=e,t}),{})}return Object.defineProperty(t,"Instance",{get:function(){return this._instance||(this._instance=new this)},enumerable:!0,configurable:!0}),t.prototype.transformGraph=function(t,e){var n=this;void 0===e&&(e={});var r=[],a=[],o=t.node.reduce((function(t,e){return t[e.name]=n.mapNode(e),e.op.startsWith("Placeholder")&&r.push(t[e.name]),"Const"===e.op&&a.push(t[e.name]),t}),{}),i=[],s=[],u={},c={};null!=e&&(u=this.mapSignatureEntries(e.inputs),c=this.mapSignatureEntries(e.outputs));var l=Object.keys(o);return l.forEach((function(t){var e=o[t];e.inputNames.forEach((function(t){var n=h(t)[0];e.inputs.push(o[n]),o[n].children.push(e)}))})),0===Object.keys(c).length?l.forEach((function(t){var e=o[t];0===e.children.length&&s.push(e)})):Object.keys(c).forEach((function(t){var e=h(t)[0],n=o[e];null!=n&&(n.signatureKey=c[t],s.push(n))})),Object.keys(u).length>0?Object.keys(u).forEach((function(t){var e=h(t)[0],n=o[e];n&&(n.signatureKey=u[t],i.push(n))})):i=r,{nodes:o,inputs:i,outputs:s,weights:a,placeholders:r,signature:e}},t.prototype.mapSignatureEntries=function(t){return Object.keys(t||{}).reduce((function(e,n){return e[t[n].name]=n,e}),{})},t.prototype.mapNode=function(t){var e=p(t.op)||this.opMappers[t.op]||{};null==t.attr&&(t.attr={});var n={name:t.name,op:t.op,category:e.category,inputNames:(t.input||[]).map((function(t){return t.startsWith("^")?t.substr(1):t})),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:t.attr};return null!=e.inputs&&(n.inputParams=e.inputs.reduce((function(t,e){return t[e.name]={type:e.type,inputIndexStart:e.start,inputIndexEnd:e.end},t}),{})),null!=e.attrs&&(n.attrParams=e.attrs.reduce((function(e,n){var r=n.type,a=void 0;switch(n.type){case"string":void 0===(a=B(t.attr,n.tfName,n.defaultValue))&&n.tfDeprecatedName&&(a=B(t.attr,n.tfDeprecatedName,n.defaultValue));break;case"string[]":void 0===(a=H(t.attr,n.tfName,n.defaultValue))&&n.tfDeprecatedName&&(a=H(t.attr,n.tfDeprecatedName,n.defaultValue));break;case"number":void 0===(a=L(t.attr,n.tfName,n.defaultValue||0))&&n.tfDeprecatedName&&(a=L(t.attr,n.tfDeprecatedName,n.defaultValue));break;case"number[]":void 0===(a=G(t.attr,n.tfName,n.defaultValue))&&n.tfDeprecatedName&&(a=G(t.attr,n.tfDeprecatedName,n.defaultValue));break;case"bool":void 0===(a=P(t.attr,n.tfName,n.defaultValue))&&n.tfDeprecatedName&&(a=P(t.attr,n.tfDeprecatedName,n.defaultValue));break;case"bool[]":void 0===(a=K(t.attr,n.tfName,n.defaultValue))&&n.tfDeprecatedName&&(a=K(t.attr,n.tfDeprecatedName,n.defaultValue));break;case"shape":void 0===(a=j(t.attr,n.tfName,n.defaultValue))&&n.tfDeprecatedName&&(a=j(t.attr,n.tfDeprecatedName,n.defaultValue));break;case"shape[]":void 0===(a=q(t.attr,n.tfName,n.defaultValue))&&n.tfDeprecatedName&&(a=q(t.attr,n.tfDeprecatedName,n.defaultValue));break;case"dtype":void 0===(a=W(t.attr,n.tfName,n.defaultValue))&&n.tfDeprecatedName&&(a=W(t.attr,n.tfDeprecatedName,n.defaultValue));break;case"dtype[]":void 0===(a=z(t.attr,n.tfName,n.defaultValue))&&n.tfDeprecatedName&&(a=z(t.attr,n.tfDeprecatedName,n.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error("Unsupported param type: "+n.type+" for op: "+t.op)}return e[n.name]={value:a,type:r},e}),{})),n},t}();function M(e,n){var r=Array.isArray(e)?String.fromCharCode.apply(null,e):function(e){var n=Object(i.env)().global;if(void 0!==n.atob)return n.atob(e);if(void 0!==t)return new t(e,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}(e);return n?r:r.toLowerCase()}function B(t,e,n,r){void 0===r&&(r=!1);var a=t[e];return null!=a?M(a.s,r):n}function P(t,e,n){var r=t[e];return r?r.b:n}function L(t,e,n){var r=t[e]||{},a=null!=r.i?r.i:null!=r.f?r.f:n;return"number"==typeof a?a:parseInt(a,10)}function V(t){switch("string"==typeof t&&(t=r[t]),t){case r.DT_FLOAT:return"float32";case r.DT_INT32:case r.DT_INT64:return"int32";case r.DT_BOOL:return"bool";case r.DT_DOUBLE:return"float32";case r.DT_STRING:return"string";default:return null}}function W(t,e,n){var r=t[e];return r&&r.type?V(r.type):n}function z(t,e,n){var r=t[e];return r&&r.list&&r.list.type?r.list.type.map((function(t){return V(t)})):n}function U(t){if(!t.unknownRank)return null!=t.dim?t.dim.map((function(t){return"number"==typeof t.size?t.size:parseInt(t.size,10)})):[]}function j(t,e,n){var r=t[e];return r&&r.shape?U(r.shape):n}function G(t,e,n){var r=t[e];return r?((r.list.f&&r.list.f.length?r.list.f:r.list.i)||[]).map((function(t){return"number"==typeof t?t:parseInt(t,10)})):n}function H(t,e,n,r){void 0===r&&(r=!1);var a=t[e];return a&&a.list&&a.list.s?a.list.s.map((function(t){return M(t,r)})):n}function q(t,e,n){var r=t[e];return r&&r.list&&r.list.shape?r.list.shape.map((function(t){return U(t)})):n}function K(t,e,n){var r=t[e];return r&&r.list&&r.list.b?r.list.b:n}var X=function(){function t(t,e,n){var r=this;this.node=t,this.tensorMap=e,this.context=n,this.inputs=[],this.attrs={},this.inputs=t.inputNames.map((function(t){return r.getInput(t)})),null!=t.rawAttrs&&(this.attrs=Object.keys(t.rawAttrs).reduce((function(t,e){return t[e]=r.getAttr(e),t}),{}))}return t.prototype.getInput=function(t){return d(t,this.tensorMap,this.context)},t.prototype.getAttr=function(t,e){var n=this.node.rawAttrs[t];if(null!=n.tensor)return d(t,this.tensorMap,this.context);if(null!=n.i||null!=n.f)return L(this.node.rawAttrs,t,e);if(null!=n.s)return B(this.node.rawAttrs,t,e);if(null!=n.b)return P(this.node.rawAttrs,t,e);if(null!=n.shape)return j(this.node.rawAttrs,t,e);if(null!=n.type)return W(this.node.rawAttrs,t,e);if(null!=n.list){if(null!=n.list.i||null!=n.list.f)return G(this.node.rawAttrs,t,e);if(null!=n.list.s)return H(this.node.rawAttrs,t,e);if(null!=n.list.shape)return q(this.node.rawAttrs,t,e);if(null!=n.list.b)return K(this.node.rawAttrs,t,e);if(null!=n.list.type)return z(this.node.rawAttrs,t,e)}return e},t}(),Y=function(){function t(e,n,r,a,o,i,s){this.name=e,this.dtype=n,this.maxSize=r,this.elementShape=a,this.identicalElementShapes=o,this.dynamicSize=i,this.clearAfterRead=s,this.tensors=[],this.closed_=!1,this.id=t.nextId++}return Object.defineProperty(t.prototype,"closed",{get:function(){return this.closed_},enumerable:!0,configurable:!0}),t.prototype.clearAndClose=function(){this.tensors.forEach((function(t){return t.tensor.dispose()})),this.tensors=[],this.closed_=!0},t.prototype.size=function(){return this.tensors.length},t.prototype.read=function(t){if(this.closed_)throw new Error("TensorArray "+this.name+" has already been closed.");if(t<0||t>=this.tensors.length)throw new Error("Tried to read from index "+t+", but array size is: "+this.tensors.length);var e=this.tensors[t];if(e.cleared)throw new Error("TensorArray "+this.name+": Could not read index "+t+" twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).");return this.clearAfterRead&&(e.cleared=!0),e.read=!0,e.tensor},t.prototype.readMany=function(t){var e=this;return t.map((function(t){return e.read(t)}))},t.prototype.write=function(t,e){if(this.closed_)throw new Error("TensorArray "+this.name+" has already been closed.");if(t<0||!this.dynamicSize&&t>=this.maxSize)throw new Error("Tried to write to index "+t+", but array is not resizeable and size is: "+this.maxSize);var n=this.tensors[t]||{};if(e.dtype!==this.dtype)throw new Error("TensorArray "+this.name+": Could not write to TensorArray index "+t+",\n because the value dtype is "+e.dtype+", but TensorArray dtype is "+this.dtype+".");if(0!==this.size()||null!=this.elementShape&&0!==this.elementShape.length||(this.elementShape=e.shape),this.assertShapesMatchAllowUndefinedSize(this.elementShape,e.shape,"TensorArray "+this.name+": Could not write to TensorArray index "+t+"."),n&&n.read)throw new Error("TensorArray "+this.name+": Could not write to TensorArray index "+t+", because it has already been read.");if(n&&n.written)throw new Error("TensorArray "+this.name+": Could not write to TensorArray index "+t+", because it has already been written.");n.tensor=e,n.written=!0,this.tensors[t]=n},t.prototype.writeMany=function(t,e){var n=this;if(t.length!==e.length)throw new Error("TensorArray "+this.name+": could not write multiple tensors,because the index size: "+t.length+" is not the same as tensors size: "+e.length+".");t.forEach((function(t,r){return n.write(t,e[r])}))},t.prototype.gather=function(t,e){if(e&&e!==this.dtype)throw new Error("TensorArray dtype is "+this.dtype+" but gather requested dtype "+e);if(!t){t=[];for(var n=0;n<this.size();n++)t.push(n)}if(0===t.length)return Object(i.tensor)([],[0].concat(this.elementShape));var r=this.readMany(t);return this.assertShapesMatchAllowUndefinedSize(this.elementShape,r[0].shape,"TensorArray shape mismatch: "),Object(i.stack)(r,0)},t.prototype.concat=function(t){if(t&&t!==this.dtype)throw new Error("TensorArray dtype is "+this.dtype+" but concat requested dtype "+t);if(0===this.size())return Object(i.tensor)([],[0].concat(this.elementShape));for(var e=[],n=0;n<this.size();n++)e.push(n);var r=this.readMany(e);return this.assertShapesMatchAllowUndefinedSize(this.elementShape,r[0].shape,"TensorArray shape mismatch: tensor array shape ("+this.elementShape+") vs first tensor shape ("+r[0].shape+")"),Object(i.concat)(r,0)},t.prototype.scatter=function(t,e){if(e.dtype!==this.dtype)throw new Error("TensorArray dtype is "+this.dtype+" but tensor has dtype "+e.dtype);if(t.length!==e.shape[0])throw new Error("Expected len(indices) == tensor.shape[0], but saw: "+t.length+" vs. "+e.shape[0]);var n=Math.max.apply(Math,t);if(!this.dynamicSize&&n>=this.maxSize)throw new Error("Max index must be < array size ("+n+" vs. "+this.maxSize+")");this.writeMany(t,Object(i.unstack)(e,0))},t.prototype.split=function(t,e){var n=this;if(e.dtype!==this.dtype)throw new Error("TensorArray dtype is "+this.dtype+" but tensor has dtype "+e.dtype);var r=0,a=t.map((function(t){return r+=t}));if(r!==e.shape[0])throw new Error("Expected sum of lengths to be equal to\n tensor.shape[0], but sum of lengths is\n "+r+", and tensor's shape is: "+e.shape);if(!this.dynamicSize&&t.length!==this.maxSize)throw new Error("TensorArray's size is not equal to the size of lengths ("+this.maxSize+" vs. "+t.length+"), and the TensorArray is not marked as dynamically resizeable");var o=0===r?0:e.size/r,s=[];Object(i.tidy)((function(){e=e.reshape([1,r,o]);for(var u=0;u<t.length;++u){var c=[0,0===u?0:a[u-1],0],l=[1,t[u],o];s[u]=Object(i.slice)(e,c,l).reshape(n.elementShape)}return s}));for(var u=[],c=0;c<t.length;c++)u[c]=c;this.writeMany(u,s)},t.prototype.assertShapesMatchAllowUndefinedSize=function(t,e,n){void 0===n&&(n=""),i.util.assert(this.shapesEqualAllowUndefinedSize(t,e),(function(){return n+" Shapes "+t+" and "+e+" must match"}))},t.prototype.shapesEqualAllowUndefinedSize=function(t,e){if(t.length!==e.length)return!1;for(var n=0;n<t.length;n++)if(-1!==t[n]&&-1!==e[n]&&t[n]!==e[n])return!1;return!0},t.nextId=0,t}();function $(t,e,n){var r=function(t,e,n){switch(t.category){case"arithmetic":return function(t,e,n){switch(t.op){case"BiasAdd":case"AddV2":case"Add":return[Object(i.add)(f("a",t,e,n),f("b",t,e,n))];case"AddN":return[Object(i.addN)(f("tensors",t,e,n))];case"FloorMod":case"Mod":return[Object(i.mod)(f("a",t,e,n),f("b",t,e,n))];case"Mul":return[Object(i.mul)(f("a",t,e,n),f("b",t,e,n))];case"RealDiv":case"Div":return[Object(i.div)(f("a",t,e,n),f("b",t,e,n))];case"DivNoNan":return[Object(i.divNoNan)(f("a",t,e,n),f("b",t,e,n))];case"FloorDiv":return[Object(i.floorDiv)(f("a",t,e,n),f("b",t,e,n))];case"Sub":return[Object(i.sub)(f("a",t,e,n),f("b",t,e,n))];case"Minimum":return[Object(i.minimum)(f("a",t,e,n),f("b",t,e,n))];case"Maximum":return[Object(i.maximum)(f("a",t,e,n),f("b",t,e,n))];case"Pow":return[Object(i.pow)(f("a",t,e,n),f("b",t,e,n))];case"SquaredDifference":return[Object(i.squaredDifference)(f("a",t,e,n),f("b",t,e,n))];default:throw TypeError("Node type "+t.op+" is not implemented")}}(t,e,n);case"basic_math":return function(t,e,n){switch(t.op){case"Abs":case"ComplexAbs":return[Object(i.abs)(f("x",t,e,n))];case"Acos":return[Object(i.acos)(f("x",t,e,n))];case"Acosh":return[Object(i.acosh)(f("x",t,e,n))];case"Asin":return[Object(i.asin)(f("x",t,e,n))];case"Asinh":return[Object(i.asinh)(f("x",t,e,n))];case"Atan":return[Object(i.atan)(f("x",t,e,n))];case"Atan2":return[Object(i.atan2)(f("x",t,e,n),f("y",t,e,n))];case"Atanh":return[Object(i.atanh)(f("x",t,e,n))];case"Ceil":return[Object(i.ceil)(f("x",t,e,n))];case"Complex":return[Object(i.complex)(f("real",t,e,n),f("imag",t,e,n))];case"Cos":return[Object(i.cos)(f("x",t,e,n))];case"Cosh":return[Object(i.cosh)(f("x",t,e,n))];case"Elu":return[Object(i.elu)(f("x",t,e,n))];case"Erf":return[Object(i.erf)(f("x",t,e,n))];case"Exp":return[Object(i.exp)(f("x",t,e,n))];case"Expm1":return[Object(i.expm1)(f("x",t,e,n))];case"Floor":return[Object(i.floor)(f("x",t,e,n))];case"Log":return[Object(i.log)(f("x",t,e,n))];case"Log1p":return[Object(i.log1p)(f("x",t,e,n))];case"Imag":return[Object(i.imag)(f("x",t,e,n))];case"Neg":return[Object(i.neg)(f("x",t,e,n))];case"Reciprocal":return[Object(i.reciprocal)(f("x",t,e,n))];case"Real":return[Object(i.real)(f("x",t,e,n))];case"Relu":return[Object(i.relu)(f("x",t,e,n))];case"Round":return[Object(i.round)(f("x",t,e,n))];case"Selu":return[Object(i.selu)(f("x",t,e,n))];case"Sigmoid":return[Object(i.sigmoid)(f("x",t,e,n))];case"Sin":return[Object(i.sin)(f("x",t,e,n))];case"Sign":return[Object(i.sign)(f("x",t,e,n))];case"Sinh":return[Object(i.sinh)(f("x",t,e,n))];case"Softplus":return[Object(i.softplus)(f("x",t,e,n))];case"Sqrt":return[Object(i.sqrt)(f("x",t,e,n))];case"Square":return[Object(i.square)(f("x",t,e,n))];case"Tanh":return[Object(i.tanh)(f("x",t,e,n))];case"Tan":return[Object(i.tan)(f("x",t,e,n))];case"Relu6":case"ClipByValue":return[Object(i.clipByValue)(f("x",t,e,n),f("clipValueMin",t,e,n),f("clipValueMax",t,e,n))];case"Rsqrt":return[Object(i.rsqrt)(d(t.inputNames[0],e,n))];case"Prod":return[Object(i.prod)(f("x",t,e,n),f("axes",t,e,n))];case"LeakyRelu":return[Object(i.leakyRelu)(f("x",t,e,n),f("alpha",t,e,n))];case"Prelu":return[Object(i.prelu)(f("x",t,e,n),f("alpha",t,e,n))];default:throw TypeError("Node type "+t.op+" is not implemented")}}(t,e,n);case"control":return function(t,e,n){return u(this,void 0,void 0,(function(){var r,a,o,s,u,l,p,h,m,v,g,y,x,b,w,C,E,S,N,I,R,T,k,A,O,D,_,F,M,B,P,L,V,W,z;return c(this,(function(c){switch(c.label){case 0:switch(t.op){case"LoopCond":return[3,1];case"Switch":return[3,2];case"Merge":return[3,4];case"Enter":return[3,5];case"Exit":return[3,6];case"NextIteration":return[3,7];case"TensorArrayV3":return[3,8];case"TensorArrayWriteV3":return[3,9];case"TensorArrayReadV3":return[3,10];case"TensorArrayGatherV3":return[3,11];case"TensorArrayScatterV3":return[3,12];case"TensorArrayConcatV3":return[3,13];case"TensorArraySplitV3":return[3,14];case"TensorArraySizeV3":return[3,15];case"TensorArrayCloseV3":return[3,16]}return[3,17];case 1:return[2,[f("pred",t,e,n).clone()]];case 2:return r=f("pred",t,e,n),a=f("data",t,e,n),[4,r.data()];case 3:return[2,c.sent()[0]?[void 0,a.clone()]:[a.clone(),void 0]];case 4:return[2,(o=t.inputNames.find((function(t){return void 0!==d(t,e,n)})))?[d(o,e,n).clone()]:void 0];case 5:return s=f("frameName",t,e,n),u=f("tensor",t,e,n),n.enterFrame(s),[2,[u.clone()]];case 6:return l=f("tensor",t,e,n),n.exitFrame(),[2,[l.clone()]];case 7:return p=f("tensor",t,e,n),n.nextIteration(),[2,[p.clone()]];case 8:return h=f("size",t,e,n),m=f("dtype",t,e,n),v=f("elementShape",t,e,n),g=f("dynamicSize",t,e,n),y=f("clearAfterRead",t,e,n),x=f("identicalElementShapes",t,e,n),b=f("name",t,e,n),w=new Y(b,m,h,v,x,g,y),n.addTensorArray(w),[2,[Object(i.scalar)(w.id),Object(i.scalar)(1)]];case 9:return C=f("tensorArrayId",t,e,n),E=f("index",t,e,n),S=f("tensor",t,e,n),n.getTensorArray(C).write(E,S),[2,[Object(i.scalar)(1)]];case 10:return N=f("tensorArrayId",t,e,n),I=f("index",t,e,n),[2,[n.getTensorArray(N).read(I)]];case 11:return R=f("tensorArrayId",t,e,n),T=f("indices",t,e,n),k=f("dtype",t,e,n),[2,[n.getTensorArray(R).gather(T,k)]];case 12:return A=f("tensorArrayId",t,e,n),O=f("indices",t,e,n),D=f("tensor",t,e,n),n.getTensorArray(A).scatter(O,D),[2,[Object(i.scalar)(1)]];case 13:return _=f("tensorArrayId",t,e,n),F=n.getTensorArray(_),M=f("dtype",t,e,n),[2,[F.concat(M)]];case 14:return B=f("tensorArrayId",t,e,n),P=f("tensor",t,e,n),L=f("lengths",t,e,n),n.getTensorArray(B).split(L,P),[2,[Object(i.scalar)(1)]];case 15:return V=f("tensorArrayId",t,e,n),W=n.getTensorArray(V),[2,[Object(i.scalar)(W.size(),"int32")]];case 16:return z=f("tensorArrayId",t,e,n),n.getTensorArray(z).clearAndClose(),[2,[Object(i.scalar)(0)]];case 17:throw TypeError("Node type "+t.op+" is not implemented")}}))}))}(t,e,n);case"convolution":return function(t,e,n){switch(t.op){case"Conv1D":var r=f("stride",t,e,n),a=f("pad",t,e,n),o=f("dataFormat",t,e,n).toUpperCase(),s=f("dilation",t,e,n);return[Object(i.conv1d)(f("x",t,e,n),f("filter",t,e,n),r,a,o,s)];case"Conv2D":r=f("strides",t,e,n),a=f("pad",t,e,n),o=f("dataFormat",t,e,n).toUpperCase();var u=f("dilations",t,e,n);return[Object(i.conv2d)(f("x",t,e,n),f("filter",t,e,n),[r[1],r[2]],a,o,[u[1],u[2]])];case"_FusedConv2D":case"FusedDepthwiseConv2dNative":var c=f("fusedOps",t,e,n),l=c[0],p=c[1],d="biasadd"===l,h="prelu"===p,m="fusedbatchnorm"===l,v=f("numArgs",t,e,n);if(d){if(h&&2!==v)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!h&&1!==v)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(m)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported.");r=f("strides",t,e,n),a=f("pad",t,e,n),o=f("dataFormat",t,e,n).toUpperCase(),u=f("dilations",t,e,n);var g=f("args",t,e,n),y=g[0],x=g[1];return[("_FusedConv2D"===t.op?i.fused.conv2d:i.fused.depthwiseConv2d)({x:f("x",t,e,n),filter:f("filter",t,e,n),strides:[r[1],r[2]],pad:a,dataFormat:o,dilations:[u[1],u[2]],bias:y,activation:p,preluActivationWeights:x})];case"Conv2DBackpropInput":case"Conv2dTranspose":var b=f("outputShape",t,e,n);return r=f("strides",t,e,n),a=f("pad",t,e,n),[Object(i.conv2dTranspose)(f("x",t,e,n),f("filter",t,e,n),b,[r[1],r[2]],a)];case"DepthwiseConv2dNative":case"DepthwiseConv2d":return r=f("strides",t,e,n),a=f("pad",t,e,n),u=f("dilations",t,e,n),o=f("dataFormat",t,e,n).toUpperCase(),[Object(i.depthwiseConv2d)(f("input",t,e,n),f("filter",t,e,n),[r[1],r[2]],a,o,[u[1],u[2]])];case"Conv3D":return r=f("strides",t,e,n),a=f("pad",t,e,n),o=f("dataFormat",t,e,n).toUpperCase(),u=f("dilations",t,e,n),[Object(i.conv3d)(f("x",t,e,n),f("filter",t,e,n),[r[1],r[2],r[3]],a,o,[u[1],u[2],u[3]])];case"AvgPool":r=f("strides",t,e,n),a=f("pad",t,e,n);var w=f("kernelSize",t,e,n);return[Object(i.avgPool)(f("x",t,e,n),[w[1],w[2]],[r[1],r[2]],a)];case"MaxPool":return r=f("strides",t,e,n),a=f("pad",t,e,n),w=f("kernelSize",t,e,n),[Object(i.maxPool)(f("x",t,e,n),[w[1],w[2]],[r[1],r[2]],a)];case"AvgPool3D":return r=f("strides",t,e,n),a=f("pad",t,e,n),w=f("kernelSize",t,e,n),[Object(i.avgPool3d)(f("x",t,e,n),[w[1],w[2],w[3]],[r[1],r[2],r[3]],a)];case"MaxPool3D":return r=f("strides",t,e,n),a=f("pad",t,e,n),w=f("kernelSize",t,e,n),[Object(i.maxPool3d)(f("x",t,e,n),[w[1],w[2],w[3]],[r[1],r[2],r[3]],a)];default:throw TypeError("Node type "+t.op+" is not implemented")}}(t,e,n);case"creation":return function(t,e,n){switch(t.op){case"Fill":var r=f("shape",t,e,n),a=f("dtype",t,e,n),o=f("value",t,e,n);return[Object(i.fill)(r,o,a)];case"LinSpace":var s=f("start",t,e,n),u=f("stop",t,e,n),c=f("num",t,e,n);return[Object(i.linspace)(s,u,c)];case"Multinomial":var l=f("logits",t,e,n),p=f("numSamples",t,e,n),d=f("seed",t,e,n);return[Object(i.multinomial)(l,p,d)];case"OneHot":var h=f("indices",t,e,n),m=f("depth",t,e,n),v=f("onValue",t,e,n),g=f("offValue",t,e,n);return[Object(i.oneHot)(h,m,v,g)];case"Ones":return[Object(i.ones)(f("shape",t,e,n),f("dtype",t,e,n))];case"OnesLike":return[Object(i.onesLike)(f("x",t,e,n))];case"RandomUniform":return[Object(i.randomUniform)(f("shape",t,e,n),f("minval",t,e,n),f("maxval",t,e,n),f("dtype",t,e,n))];case"Range":s=f("start",t,e,n);var y=f("stop",t,e,n),x=f("step",t,e,n);return[Object(i.range)(s,y,x,f("dtype",t,e,n))];case"TruncatedNormal":r=f("shape",t,e,n);var b=f("mean",t,e,n),w=f("stdDev",t,e,n);return d=f("seed",t,e,n),[Object(i.truncatedNormal)(r,b,w,f("dtype",t,e,n),d)];case"Zeros":return[Object(i.zeros)(f("shape",t,e,n),f("dtype",t,e,n))];case"ZerosLike":return[Object(i.zerosLike)(f("x",t,e,n))];default:throw TypeError("Node type "+t.op+" is not implemented")}}(t,e,n);case"dynamic":return function(t,e,n){return u(this,void 0,void 0,(function(){var r,a,o,s,u;return c(this,(function(c){switch(c.label){case 0:switch(t.op){case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":return[3,1];case"Where":return[3,3];case"ListDiff":return[3,5]}return[3,6];case 1:return r=f("boxes",t,e,n),a=f("scores",t,e,n),o=f("maxOutputSize",t,e,n),s=f("iouThreshold",t,e,n),u=f("scoreThreshold",t,e,n),[4,i.image.nonMaxSuppressionAsync(r,a,o,s,u)];case 2:return[2,[c.sent()]];case 3:return[4,Object(i.whereAsync)(f("condition",t,e,n).asType("bool"))];case 4:return[2,[c.sent()]];case 5:return[2,Object(i.setdiff1dAsync)(f("x",t,e,n),f("y",t,e,n))];case 6:throw TypeError("Node type "+t.op+" is not implemented")}}))}))}(t,e,n);case"evaluation":return function(t,e,n){switch(t.op){case"TopKV2":var r=f("x",t,e,n),a=f("k",t,e,n),o=f("sorted",t,e,n),s=Object(i.topk)(r,a,o);return[s.values,s.indices];default:throw TypeError("Node type "+t.op+" is not implemented")}}(t,e,n);case"image":return function(t,e,n){switch(t.op){case"ResizeBilinear":var r=f("images",t,e,n),a=f("size",t,e,n),o=f("alignCorners",t,e,n);return[i.image.resizeBilinear(r,[a[0],a[1]],o)];case"ResizeNearestNeighbor":return r=f("images",t,e,n),a=f("size",t,e,n),o=f("alignCorners",t,e,n),[i.image.resizeNearestNeighbor(r,[a[0],a[1]],o)];case"CropAndResize":var s=f("image",t,e,n),u=f("boxes",t,e,n),c=f("boxInd",t,e,n),l=f("cropSize",t,e,n),p=f("method",t,e,n),d=f("extrapolationValue",t,e,n);return[i.image.cropAndResize(s,u,c,l,p,d)];default:throw TypeError("Node type "+t.op+" is not implemented")}}(t,e,n);case"graph":return function(t,e,n){switch(t.op){case"Const":return e[t.name];case"PlaceholderWithDefault":var r=f("default",t,e,n);return[d(t.name,e,n)||r];case"Placeholder":return[d(t.name,e,n)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":return[f("x",t,e,n).clone()];case"IdentityN":return f("x",t,e,n).map((function(t){return t.clone()}));case"Snapshot":return[f("x",t,e,n).clone()];case"Shape":return[Object(i.tensor1d)(f("x",t,e,n).shape,"int32")];case"ShapeN":return f("x",t,e,n).map((function(t){return Object(i.tensor1d)(t.shape)}));case"Size":return[Object(i.scalar)(f("x",t,e,n).size,"int32")];case"Rank":return[Object(i.scalar)(f("x",t,e,n).rank,"int32")];case"NoOp":return[Object(i.scalar)(1)];case"Print":var a=f("x",t,e,n),o=f("data",t,e,n),s=f("message",t,e,n),u=f("summarize",t,e,n);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(s);for(var c=0;c<o.length;c++)console.log(Array.prototype.slice.call(o[c].dataSync()).slice(0,u));return[a];default:throw TypeError("Node type "+t.op+" is not implemented")}}(t,e,n);case"logical":return function(t,e,n){switch(t.op){case"Equal":return[Object(i.equal)(f("a",t,e,n),f("b",t,e,n))];case"NotEqual":return[Object(i.notEqual)(f("a",t,e,n),f("b",t,e,n))];case"Greater":return[Object(i.greater)(f("a",t,e,n),f("b",t,e,n))];case"GreaterEqual":return[Object(i.greaterEqual)(f("a",t,e,n),f("b",t,e,n))];case"Less":return[Object(i.less)(f("a",t,e,n),f("b",t,e,n))];case"LessEqual":return[Object(i.lessEqual)(f("a",t,e,n),f("b",t,e,n))];case"LogicalAnd":return[Object(i.logicalAnd)(f("a",t,e,n),f("b",t,e,n))];case"LogicalNot":return[Object(i.logicalNot)(f("a",t,e,n))];case"LogicalOr":return[Object(i.logicalOr)(f("a",t,e,n),f("b",t,e,n))];case"Select":return[Object(i.where)(f("condition",t,e,n),f("a",t,e,n),f("b",t,e,n))];default:throw TypeError("Node type "+t.op+" is not implemented")}}(t,e,n);case"matrices":return function(t,e,n){switch(t.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[Object(i.matMul)(f("a",t,e,n),f("b",t,e,n),f("transposeA",t,e,n),f("transposeB",t,e,n))];case"Transpose":return[Object(i.transpose)(f("x",t,e,n),f("perm",t,e,n))];case"_FusedMatMul":var r=f("fusedOps",t,e,n),a=r[0],o=r[1],s="biasadd"===a,u="prelu"===o,c=f("numArgs",t,e,n);if(s){if(u&&2!==c)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!u&&1!==c)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}var l=f("args",t,e,n),p=l[0],d=l[1];return[i.fused.matMul({a:f("a",t,e,n),b:f("b",t,e,n),transposeA:f("transposeA",t,e,n),transposeB:f("transposeB",t,e,n),bias:p,activation:o,preluActivationWeights:d})];default:throw TypeError("Node type "+t.op+" is not implemented")}}(t,e,n);case"normalization":return function(t,e,n){switch(t.op){case"FusedBatchNorm":case"FusedBatchNormV2":case"FusedBatchNormV3":return[Object(i.batchNorm)(f("x",t,e,n),f("mean",t,e,n),f("variance",t,e,n),f("offset",t,e,n),f("scale",t,e,n),f("epsilon",t,e,n))];case"LRN":return[Object(i.localResponseNormalization)(f("x",t,e,n),f("radius",t,e,n),f("bias",t,e,n),f("alpha",t,e,n),f("beta",t,e,n))];case"Softmax":return[Object(i.softmax)(f("x",t,e,n))];case"LogSoftmax":return[Object(i.logSoftmax)(f("x",t,e,n))];case"SparseToDense":return[Object(i.sparseToDense)(f("sparseIndices",t,e,n),f("outputShape",t,e,n),f("sparseValues",t,e,n),f("defaultValue",t,e,n))];default:throw TypeError("Node type "+t.op+" is not implemented")}}(t,e,n);case"reduction":return function(t,e,n){switch(t.op){case"Max":var r=f("axis",t,e,n),a=f("keepDims",t,e,n);return[Object(i.max)(f("x",t,e,n),r,a)];case"Mean":return r=f("axis",t,e,n),a=f("keepDims",t,e,n),[Object(i.mean)(f("x",t,e,n),r,a)];case"Min":return r=f("axis",t,e,n),a=f("keepDims",t,e,n),[Object(i.min)(f("x",t,e,n),r,a)];case"Sum":return r=f("axis",t,e,n),a=f("keepDims",t,e,n),[Object(i.sum)(f("x",t,e,n),r,a)];case"All":return r=f("axis",t,e,n),a=f("keepDims",t,e,n),[Object(i.all)(f("x",t,e,n),r,a)];case"Any":return r=f("axis",t,e,n),a=f("keepDims",t,e,n),[Object(i.any)(f("x",t,e,n),r,a)];case"ArgMax":return r=f("axis",t,e,n),[Object(i.argMax)(f("x",t,e,n),r)];case"ArgMin":return r=f("axis",t,e,n),[Object(i.argMin)(f("x",t,e,n),r)];case"Prod":return r=f("axis",t,e,n),a=f("keepDims",t,e,n),[Object(i.prod)(f("x",t,e,n),r,a)];default:throw TypeError("Node type "+t.op+" is not implemented")}}(t,e,n);case"slice_join":return function(t,e,n){switch(t.op){case"ConcatV2":case"Concat":var r=f("n",t,e,n),a=f("axis",t,e,n),o=f("tensors",t,e,n);return o=o.slice(0,r),[Object(i.concat)(o,a)];case"GatherV2":case"Gather":a=f("axis",t,e,n);var s=f("x",t,e,n),u=f("indices",t,e,n);return[Object(i.gather)(s,u.asType("int32"),a)];case"ReverseV2":case"Reverse":return a=f("axis",t,e,n),s=f("x",t,e,n),[Object(i.reverse)(s,a)];case"Slice":var c=f("begin",t,e,n),l=f("size",t,e,n);return[Object(i.slice)(f("x",t,e,n),c,l)];case"StridedSlice":c=f("begin",t,e,n);var p=f("end",t,e,n),d=f("strides",t,e,n),h=f("beginMask",t,e,n),m=f("endMask",t,e,n),v=f("ellipsisMask",t,e,n),g=f("newAxisMask",t,e,n),y=f("shrinkAxisMask",t,e,n),x=f("x",t,e,n);if(1===c.length&&x.shape.length>1)for(var b=1;b<x.shape.length;b++)c.push(0),p.push(x.shape[b]),d.push(d[0]);return[Object(i.stridedSlice)(x,c,p,d,h,m,v,g,y)];case"Pack":return Object(i.tidy)((function(){var r=f("axis",t,e,n),a=f("tensors",t,e,n),o=a[0].shape,s=a[0].squeeze().shape,u=a.map((function(t){var e=i.util.arraysEqual(t.shape,o);if(!e&&!i.util.arraysEqual(t.squeeze().shape,s))throw new Error("the input tensors shape does not match");return e?t:t.reshape(o)}));return[Object(i.stack)(u,r)]}));case"Unpack":return Object(i.tidy)((function(){var r=f("axis",t,e,n),a=f("tensor",t,e,n);return Object(i.unstack)(a,r)}));case"Tile":var w=f("reps",t,e,n);return[Object(i.tile)(f("x",t,e,n),w)];case"Split":case"SplitV":a=f("axis",t,e,n);var C=f("numOrSizeSplits",t,e,n);return Object(i.split)(f("x",t,e,n),C,a);case"ScatterNd":u=f("indices",t,e,n);var E=f("values",t,e,n),S=f("shape",t,e,n);return[Object(i.scatterND)(u,E,S)];case"GatherNd":var N=f("x",t,e,n);return u=f("indices",t,e,n),[Object(i.gatherND)(N,u)];case"SparseToDense":u=f("sparseIndices",t,e,n),S=f("outputShape",t,e,n);var I=f("sparseValues",t,e,n),R=f("defaultValue",t,e,n);return[Object(i.sparseToDense)(u,I,S,I.dtype===R.dtype?R:R.asType(I.dtype))];default:throw TypeError("Node type "+t.op+" is not implemented")}}(t,e,n);case"spectral":return function(t,e,n){switch(t.op){case"FFT":return[Object(i.fft)(f("x",t,e,n))];case"IFFT":return[Object(i.ifft)(f("x",t,e,n))];case"RFFT":return[Object(i.rfft)(f("x",t,e,n))];case"IRFFT":return[Object(i.irfft)(f("x",t,e,n))];default:throw TypeError("Node type "+t.op+" is not implemented")}}(t,e,n);case"transformation":return function(t,e,n){switch(t.op){case"Cast":return[Object(i.cast)(f("x",t,e,n),f("dtype",t,e,n))];case"ExpandDims":var r=f("axis",t,e,n);return[Object(i.expandDims)(f("x",t,e,n),r)];case"Squeeze":return r=f("axis",t,e,n),[Object(i.squeeze)(f("x",t,e,n),r)];case"Reshape":return[Object(i.reshape)(f("x",t,e,n),f("shape",t,e,n))];case"PadV2":case"Pad":return[Object(i.pad)(f("x",t,e,n),g(f("padding",t,e,n),2),f("constantValue",t,e,n))];case"SpaceToBatchND":var a=f("blockShape",t,e,n),o=g(f("paddings",t,e,n),2);return[Object(i.spaceToBatchND)(f("x",t,e,n),a,o)];case"BatchToSpaceND":a=f("blockShape",t,e,n);var s=g(f("crops",t,e,n),2);return[Object(i.batchToSpaceND)(f("x",t,e,n),a,s)];case"DepthToSpace":var u=f("blockSize",t,e,n),c=f("dataFormat",t,e,n).toUpperCase();return[Object(i.depthToSpace)(f("x",t,e,n),u,c)];default:throw TypeError("Node type "+t.op+" is not implemented")}}(t,e,n);case"custom":var r=p(t.op);if(r&&r.customExecutor)return r.customExecutor(new X(t,e,n));throw TypeError("Custom op "+t.op+" is not registered.");default:throw TypeError("Unknown op '"+t.op+"'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()")}}(t,e,n);return r instanceof Promise?r.then((function(t){return[].concat(t)})):[].concat(r)}var Q=function(){function t(t,e){this.weightMap=t,this.tensorArrayMap=e,this.rootContext={id:0,frameName:"",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}return t.prototype.newFrame=function(t,e){return{id:t,frameName:e,iterationId:0}},Object.defineProperty(t.prototype,"currentContext",{get:function(){return this.contexts},set:function(t){this.contexts!==t&&(this.contexts=t,this.generateCurrentContextIds())},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentContextId",{get:function(){return this._currentContextIds[0]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentContextIds",{get:function(){return this._currentContextIds},enumerable:!0,configurable:!0}),t.prototype.generateCurrentContextIds=function(){for(var t=[],e=0;e<this.contexts.length-1;e++){var n=this.contexts.slice(0,this.contexts.length-e);t.push(this.contextIdforContexts(n))}t.push(""),this._currentContextIds=t},t.prototype.contextIdforContexts=function(t){return t?t.map((function(t){return 0===t.id&&0===t.iterationId?"":t.frameName+"-"+t.iterationId})).join("/"):""},t.prototype.enterFrame=function(t){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,t)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))},t.prototype.exitFrame=function(){if(!(this.contexts&&this.contexts.length>1))throw new Error("Cannot exit frame, the context is empty");this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift()},t.prototype.nextIteration=function(){if(!(this.contexts&&this.contexts.length>0))throw new Error("Cannot increase frame iteration, the context is empty");this.contexts=this.contexts.slice(),this.lastId++;var t=Object.assign({},this.contexts[this.contexts.length-1]);t.iterationId+=1,t.id=this.lastId,this.contexts.splice(-1,1,t),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))},t.prototype.getWeight=function(t){return this.weightMap[t]},t.prototype.addTensorArray=function(t){this.tensorArrayMap[t.id]=t},t.prototype.getTensorArray=function(t){return this.tensorArrayMap[t]},t}();function J(t,e,n){for(var r=new Set,a=[],o=null,i=null,s=new Set,u=Object.keys(t).map((function(t){return v(t)[0]})),c=e.slice();c.length>0;){var l=c.pop();(et(l)||nt(l))&&null==o&&(i=(o=l).children.map((function(t){return t.name})).filter((function(t){return r.has(t)}))),r.add(l.name),null==n[l.name]&&-1===u.indexOf(l.name)&&(0!==l.inputs.length?l.inputs.forEach((function(t){s.has(t.name)||(s.add(t.name),c.push(t))})):a.push(l.name))}return{inputs:t,outputs:e,usedNodes:r,missingInputs:a,dynamicNode:o,syncInputs:i}}var Z=["Switch","Merge","Enter","Exit","NextIteration"],tt=["NonMaxSuppressionV2","NonMaxSuppressionV3","Where"];function et(t){return Z.indexOf(t.op)>=0}function nt(t){return tt.indexOf(t.op)>=0}var rt=function(){function t(t){this.graph=t,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=",",this._outputs=t.outputs,this._inputs=t.inputs,this._signature=t.signature}return Object.defineProperty(t.prototype,"weightMap",{get:function(){return this._weightMap},set:function(t){var e=Object.keys(t).map((function(e){return t[e].map((function(t){return t.id}))}));this.weightIds=[].concat.apply([],e),this._weightMap=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"inputs",{get:function(){return this._inputs.map((function(t){return{name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}}))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"outputs",{get:function(){return this._outputs.map((function(t){return{name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}}))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"inputNodes",{get:function(){return this._inputs.map((function(t){return t.signatureKey||t.name}))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"outputNodes",{get:function(){return this._outputs.map((function(t){return t.signatureKey||t.name}))},enumerable:!0,configurable:!0}),t.prototype.getCompilationKey=function(t,e){var n=t.map((function(t){return t.name})).sort(),r=e.map((function(t){return t.name})).sort();return n.join(this.SEPERATOR)+"--"+r.join(this.SEPERATOR)},t.prototype.compile=function(t,e){var n=J(t,e,this.weightMap),r=n.missingInputs,a=n.dynamicNode,o=n.syncInputs;if(null!=a)throw new Error("This execution contains the node '"+a.name+"', which has the dynamic op '"+a.op+"'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs ["+o+"]");if(r.length>0){var i=e.map((function(t){return t.name})),s=Object.keys(t);throw new Error("Cannot compute the outputs ["+i+"] from the provided inputs ["+s+"]. Missing the following inputs: ["+r+"]")}return function(t,e,n){var r=n.usedNodes,a=n.inputs,o=[];Object.keys(a).map((function(t){return v(t)[0]})).map((function(e){return t.nodes[e]})).forEach((function(t){r.has(t.name)&&o.push(t)})),t.weights.forEach((function(t){r.has(t.name)&&o.push(t)}));for(var i=new Set,s=[];o.length>0;){var u=o.pop();i.add(u.name),e[u.name]||s.push(u),u.children.forEach((function(t){!i.has(t.name)&&r.has(t.name)&&t.inputs.every((function(t){return i.has(t.name)}))&&o.push(t)}))}return s}(this.graph,this.weightMap,n)},t.prototype.execute=function(t,e){var n=this;t=this.mapInputs(t);var r=Object.keys(t).sort();this.checkInputs(t),this.checkInputShapeAndType(t),e=this.mapOutputs(e),this.checkOutputs(e);var a=r.map((function(t){return n.graph.nodes[v(t)[0]]})),o=e.map((function(t){return n.graph.nodes[v(t)[0]]})),u=this.getCompilationKey(a,o),c=this.compiledMap.get(u);null==c&&(c=this.compile(t,o),this.compiledMap.set(u,c));var l={};return Object(i.tidy)((function(){var r=new Q(n._weightMap,l),a=s({},n.weightMap);Object.keys(t).forEach((function(e){var n=v(e),r=n[0],o=[];o[n[1]]=t[e],a[r]=o}));for(var o=n.getFrozenTensorIds(a),i={},u=0;u<c.length;u++){var p=c[u];if(!a[p.name]){var f=$(p,a,r);if(f instanceof Promise)throw new Error("The execution of the op '"+p.op+"' returned a promise. Please use model.executeAsync() instead.");a[p.name]=f,n.checkTensorForDisposal(p.name,p,a,r,o,e,i)}}return e.map((function(t){return d(t,a,r)}))}))},t.prototype.getFrozenTensorIds=function(t){var e=[].concat.apply([],Object.keys(t).map((function(e){return t[e]})).map((function(t){return t.map((function(t){return t.id}))})));return new Set(e)},t.prototype.checkTensorForDisposal=function(t,e,n,r,a,o,i){"control"!==e.category&&-1===o.indexOf(t)&&(n[t].forEach((function(t){null!=t&&(i[t.id]=(i[t.id]||0)+e.children.length)})),e.inputs.forEach((function(t){if("control"!==t.category){var e=function(t,e,n){return e[m(t,n.currentContextId)]}(t.name,n,r);null!=e&&e.forEach((function(t){if(t&&!a.has(t.id)){var e=i[t.id];1===e?(t.dispose(),delete i[t.id]):null!=e&&i[t.id]--}}))}})))},t.prototype.executeAsync=function(t,e){return u(this,void 0,void 0,(function(){var n,r,a,o,i,s,u=this;return c(this,(function(c){switch(c.label){case 0:return t=this.mapInputs(t),this.checkInputs(t),this.checkInputShapeAndType(t),e=this.mapOutputs(e),this.checkOutputs(e),n={},r=new Q(this._weightMap,n),[4,this.executeWithControlFlow(t,r,e)];case 1:return a=c.sent(),o=e.map((function(t){return d(t,a,r)})),i=new Set(o.map((function(t){return t.id}))),s=new Set(Object.keys(t).map((function(e){return t[e].id}))),Object.keys(a).forEach((function(t){a[t].forEach((function(t){!t||t.isDisposed||i.has(t.id)||s.has(t.id)||-1!==u.weightIds.indexOf(t.id)||t.dispose()}))})),[2,o]}}))}))},t.prototype.executeWithControlFlow=function(t,e,n){return u(this,void 0,void 0,(function(){var r,a,o,i,u,l,p,f,h,m,g,y,x,b,w,C,E=this;return c(this,(function(c){switch(c.label){case 0:r=Object.keys(t),a=r.map((function(t){return E.graph.nodes[v(t)[0]]})),o=n.map((function(t){return E.graph.nodes[v(t)[0]]})),i=J(t,o,this.weightMap),u=i.usedNodes,l=i.missingInputs,p=i.dynamicNode,f=i.syncInputs,h=a.concat(this.graph.weights).map((function(t){return{node:t,contexts:e.currentContext}})),m=s({},this.weightMap),Object.keys(t).forEach((function(e){var n=v(e),r=n[0],a=[];a[n[1]]=t[e],m[r]=a})),g={},y=this.getFrozenTensorIds(m),x={},c.label=1;case 1:return h.length>0?(b=this.processStack(a,h,e,m,x,y,n,g,u),[4,Promise.all(b)]):[3,3];case 2:return c.sent(),[3,1];case 3:if(null==p&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead."),(w=o.filter((function(t){return!et(t)&&!d(t.name,m,e)})).map((function(t){return t.name}))).length>0)throw C="",null!=p&&(C="Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs ["+f+"]"),new Error("Cannot compute the outputs ["+w+"] from the provided inputs ["+r+"]. Consider providing the following inputs: ["+l+"]. "+C);return[2,m]}}))}))},t.prototype.processStack=function(t,e,n,r,a,o,i,s,u){for(var c=this,l=[],p=function(){var p=e.pop();n.currentContext=p.contexts;var m="";if("Enter"===p.node.op&&f("isConstant",p.node,r,n)&&(m=h(p.node.name,n)[0]),-1===t.indexOf(p.node)){var v=$(p.node,r,n);m||(m=h(p.node.name,n)[0]);var g=n.currentContext;v instanceof Promise?l.push(v.then((function(t){return r[m]=t,n.currentContext=g,c.checkTensorForDisposal(m,p.node,r,n,o,i,s),c.processChildNodes(p.node,e,n,r,a,u),t}))):(r[m]=v,d.checkTensorForDisposal(m,p.node,r,n,o,i,s),d.processChildNodes(p.node,e,n,r,a,u))}else d.processChildNodes(p.node,e,n,r,a,u)},d=this;e.length>0;)p();return l},t.prototype.processChildNodes=function(t,e,n,r,a,o){t.children.forEach((function(t){var i=h(t.name,n)[0];!a[i]&&o.has(t.name)&&("Merge"===t.op?t.inputNames.some((function(t){return!!d(t,r,n)}))&&(a[i]=!0,e.push({contexts:n.currentContext,node:t})):t.inputNames.every((function(t){return!!d(t,r,n)}))&&(a[i]=!0,e.push({contexts:n.currentContext,node:t})))}))},t.prototype.dispose=function(){var t=this;Object.keys(this.weightMap).forEach((function(e){return t.weightMap[e].forEach((function(t){return t.dispose()}))}))},t.prototype.checkInputShapeAndType=function(t){var e=this;Object.keys(t).forEach((function(n){var r=t[n],a=v(n)[0],o=e.graph.nodes[a];if(o.attrParams.shape&&o.attrParams.shape.value){var s=o.attrParams.shape.value,u=s.length===r.shape.length&&r.shape.every((function(t,e){return-1===s[e]||s[e]===t}));i.util.assert(u,(function(){return"The shape of dict['"+o.name+"'] provided in model.execute(dict) must be ["+s+"], but was ["+r.shape+"]"}))}o.attrParams.dtype&&o.attrParams.dtype.value&&i.util.assert(r.dtype===o.attrParams.dtype.value,(function(){return"The dtype of dict['"+o.name+"'] provided in model.execute(dict) must be "+o.attrParams.dtype.value+", but was "+r.dtype}))}))},t.prototype.mapInputs=function(t){var e={};for(var n in t)null!=this._signature&&null!=this._signature.inputs&&null!=this._signature.inputs[n]?e[this._signature.inputs[n].name]=t[n]:e[n]=t[n];return e},t.prototype.checkInputs=function(t){var e=this,n=Object.keys(t).filter((function(t){var n=v(t)[0];return null==e.graph.nodes[n]}));if(n.length>0)throw new Error("The dict provided in model.execute(dict) has keys: ["+n+"] that are not part of graph")},t.prototype.mapOutputs=function(t){var e=this;return t.map((function(t){return null!=e._signature&&null!=e._signature.outputs&&null!=e._signature.outputs[t]?e._signature.outputs[t].name:t}),{})},t.prototype.checkOutputs=function(t){var e=this;t.forEach((function(t){var n=v(t)[0];if(!e.graph.nodes[n])throw new Error("The output '"+t+"' is not found in the graph")}))},t}(),at=function(){function t(t,e){void 0===e&&(e={}),this.modelUrl=t,this.loadOptions=e,this.version="n/a",null==e&&(this.loadOptions={})}return Object.defineProperty(t.prototype,"modelVersion",{get:function(){return this.version},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"inputNodes",{get:function(){return this.executor.inputNodes},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"outputNodes",{get:function(){return this.executor.outputNodes},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"inputs",{get:function(){return this.executor.inputs},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"outputs",{get:function(){return this.executor.outputs},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"weights",{get:function(){return this.executor.weightMap},enumerable:!0,configurable:!0}),t.prototype.findIOHandler=function(){var t=this.modelUrl;if(null!=t.load)this.handler=t;else if(null!=this.loadOptions.requestInit)this.handler=i.io.browserHTTPRequest(t,this.loadOptions);else{var e=i.io.getLoadHandlers(t,this.loadOptions.onProgress);if(0===e.length)e.push(i.io.browserHTTPRequest(t,this.loadOptions));else if(e.length>1)throw new Error("Found more than one ("+e.length+") load handlers for URL '"+[t]+"'");this.handler=e[0]}},t.prototype.load=function(){return u(this,void 0,void 0,(function(){var t,e,n,r;return c(this,(function(a){switch(a.label){case 0:if(this.findIOHandler(),null==this.handler.load)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");return[4,this.handler.load()];case 1:return t=a.sent(),e=t.modelTopology,n={},null!=t.userDefinedMetadata&&(n=t.userDefinedMetadata.signature),this.version=e.versions.producer+"."+e.versions.minConsumer,r=i.io.decodeWeights(t.weightData,t.weightSpecs),this.executor=new rt(F.Instance.transformGraph(e,n)),this.executor.weightMap=this.convertTensorMapToTensorsMap(r),[2,!0]}}))}))},t.prototype.predict=function(t,e){return this.execute(t,this.outputNodes)},t.prototype.normalizeInputs=function(t){if(!(t instanceof i.Tensor||Array.isArray(t)))return t;if((t=Array.isArray(t)?t:[t]).length!==this.inputNodes.length)throw new Error("Input tensor count mismatch,the graph model has "+this.inputNodes.length+" placeholders, while there are "+t.length+" input tensors.");return this.inputNodes.reduce((function(e,n,r){return e[n]=t[r],e}),{})},t.prototype.normalizeOutputs=function(t){return t=t||this.outputNodes,Array.isArray(t)?t:[t]},t.prototype.execute=function(t,e){t=this.normalizeInputs(t),e=this.normalizeOutputs(e);var n=this.executor.execute(t,e);return n.length>1?n:n[0]},t.prototype.executeAsync=function(t,e){return u(this,void 0,void 0,(function(){var n;return c(this,(function(r){switch(r.label){case 0:return t=this.normalizeInputs(t),e=this.normalizeOutputs(e),[4,this.executor.executeAsync(t,e)];case 1:return[2,(n=r.sent()).length>1?n:n[0]]}}))}))},t.prototype.convertTensorMapToTensorsMap=function(t){return Object.keys(t).reduce((function(e,n){return e[n]=[t[n]],e}),{})},t.prototype.dispose=function(){this.executor.dispose()},t}();function ot(t,e){return void 0===e&&(e={}),u(this,void 0,void 0,(function(){var n;return c(this,(function(r){switch(r.label){case 0:if(null==t)throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model");return null==e&&(e={}),e.fromTFHub&&null==t.load&&(t.endsWith("/")||(t+="/"),t+="model.json?tfjs-format=file"),[4,(n=new at(t,e)).load()];case 1:return r.sent(),[2,n]}}))}))}}).call(this,n(4).Buffer)},function(t,e){var n,r,a=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function s(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{r="function"==typeof clearTimeout?clearTimeout:i}catch(t){r=i}}();var u,c=[],l=!1,p=-1;function f(){l&&u&&(l=!1,u.length?c=u.concat(c):p=-1,c.length&&d())}function d(){if(!l){var t=s(f);l=!0;for(var e=c.length;e;){for(u=c,c=[];++p<e;)u&&u[p].run();p=-1,e=c.length}u=null,l=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===i||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function h(t,e){this.fun=t,this.array=e}function m(){}a.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];c.push(new h(t,e)),1!==c.length||l||s(d)},h.prototype.run=function(){this.fun.apply(null,this.array)},a.title="browser",a.browser=!0,a.env={},a.argv=[],a.version="",a.versions={},a.on=m,a.addListener=m,a.once=m,a.off=m,a.removeListener=m,a.removeAllListeners=m,a.emit=m,a.prependListener=m,a.prependOnceListener=m,a.listeners=function(t){return[]},a.binding=function(t){throw new Error("process.binding is not supported")},a.cwd=function(){return"/"},a.chdir=function(t){throw new Error("process.chdir is not supported")},a.umask=function(){return 0}},function(t,e,n){"use strict";(function(t){
|
|
/*!
|
|
* The buffer module from node.js, for the browser.
|
|
*
|
|
* @author Feross Aboukhadijeh <http://feross.org>
|
|
* @license MIT
|
|
*/
|
|
var r=n(5),a=n(6),o=n(7);function i(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(t,e){if(i()<e)throw new RangeError("Invalid typed array length");return u.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=u.prototype:(null===t&&(t=new u(e)),t.length=e),t}function u(t,e,n){if(!(u.TYPED_ARRAY_SUPPORT||this instanceof u))return new u(t,e,n);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return p(this,t)}return c(this,t,e,n)}function c(t,e,n,r){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?function(t,e,n,r){if(e.byteLength,n<0||e.byteLength<n)throw new RangeError("'offset' is out of bounds");if(e.byteLength<n+(r||0))throw new RangeError("'length' is out of bounds");e=void 0===n&&void 0===r?new Uint8Array(e):void 0===r?new Uint8Array(e,n):new Uint8Array(e,n,r);u.TYPED_ARRAY_SUPPORT?(t=e).__proto__=u.prototype:t=f(t,e);return t}(t,e,n,r):"string"==typeof e?function(t,e,n){"string"==typeof n&&""!==n||(n="utf8");if(!u.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var r=0|h(e,n),a=(t=s(t,r)).write(e,n);a!==r&&(t=t.slice(0,a));return t}(t,e,n):function(t,e){if(u.isBuffer(e)){var n=0|d(e.length);return 0===(t=s(t,n)).length||e.copy(t,0,0,n),t}if(e){if("undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return"number"!=typeof e.length||(r=e.length)!=r?s(t,0):f(t,e);if("Buffer"===e.type&&o(e.data))return f(t,e.data)}var r;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,e)}function l(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function p(t,e){if(l(e),t=s(t,e<0?0:0|d(e)),!u.TYPED_ARRAY_SUPPORT)for(var n=0;n<e;++n)t[n]=0;return t}function f(t,e){var n=e.length<0?0:0|d(e.length);t=s(t,n);for(var r=0;r<n;r+=1)t[r]=255&e[r];return t}function d(t){if(t>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|t}function h(t,e){if(u.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return W(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return z(t).length;default:if(r)return W(t).length;e=(""+e).toLowerCase(),r=!0}}function m(t,e,n){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return k(this,e,n);case"utf8":case"utf-8":return I(this,e,n);case"ascii":return R(this,e,n);case"latin1":case"binary":return T(this,e,n);case"base64":return N(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function v(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function g(t,e,n,r,a){if(0===t.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=a?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(a)return-1;n=t.length-1}else if(n<0){if(!a)return-1;n=0}if("string"==typeof e&&(e=u.from(e,r)),u.isBuffer(e))return 0===e.length?-1:y(t,e,n,r,a);if("number"==typeof e)return e&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):y(t,[e],n,r,a);throw new TypeError("val must be string, number or Buffer")}function y(t,e,n,r,a){var o,i=1,s=t.length,u=e.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;i=2,s/=2,u/=2,n/=2}function c(t,e){return 1===i?t[e]:t.readUInt16BE(e*i)}if(a){var l=-1;for(o=n;o<s;o++)if(c(t,o)===c(e,-1===l?0:o-l)){if(-1===l&&(l=o),o-l+1===u)return l*i}else-1!==l&&(o-=o-l),l=-1}else for(n+u>s&&(n=s-u),o=n;o>=0;o--){for(var p=!0,f=0;f<u;f++)if(c(t,o+f)!==c(e,f)){p=!1;break}if(p)return o}return-1}function x(t,e,n,r){n=Number(n)||0;var a=t.length-n;r?(r=Number(r))>a&&(r=a):r=a;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var i=0;i<r;++i){var s=parseInt(e.substr(2*i,2),16);if(isNaN(s))return i;t[n+i]=s}return i}function b(t,e,n,r){return U(W(e,t.length-n),t,n,r)}function w(t,e,n,r){return U(function(t){for(var e=[],n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}(e),t,n,r)}function C(t,e,n,r){return w(t,e,n,r)}function E(t,e,n,r){return U(z(e),t,n,r)}function S(t,e,n,r){return U(function(t,e){for(var n,r,a,o=[],i=0;i<t.length&&!((e-=2)<0);++i)n=t.charCodeAt(i),r=n>>8,a=n%256,o.push(a),o.push(r);return o}(e,t.length-n),t,n,r)}function N(t,e,n){return 0===e&&n===t.length?r.fromByteArray(t):r.fromByteArray(t.slice(e,n))}function I(t,e,n){n=Math.min(t.length,n);for(var r=[],a=e;a<n;){var o,i,s,u,c=t[a],l=null,p=c>239?4:c>223?3:c>191?2:1;if(a+p<=n)switch(p){case 1:c<128&&(l=c);break;case 2:128==(192&(o=t[a+1]))&&(u=(31&c)<<6|63&o)>127&&(l=u);break;case 3:o=t[a+1],i=t[a+2],128==(192&o)&&128==(192&i)&&(u=(15&c)<<12|(63&o)<<6|63&i)>2047&&(u<55296||u>57343)&&(l=u);break;case 4:o=t[a+1],i=t[a+2],s=t[a+3],128==(192&o)&&128==(192&i)&&128==(192&s)&&(u=(15&c)<<18|(63&o)<<12|(63&i)<<6|63&s)>65535&&u<1114112&&(l=u)}null===l?(l=65533,p=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),a+=p}return function(t){var e=t.length;if(e<=4096)return String.fromCharCode.apply(String,t);var n="",r=0;for(;r<e;)n+=String.fromCharCode.apply(String,t.slice(r,r+=4096));return n}(r)}e.Buffer=u,e.SlowBuffer=function(t){+t!=t&&(t=0);return u.alloc(+t)},e.INSPECT_MAX_BYTES=50,u.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}(),e.kMaxLength=i(),u.poolSize=8192,u._augment=function(t){return t.__proto__=u.prototype,t},u.from=function(t,e,n){return c(null,t,e,n)},u.TYPED_ARRAY_SUPPORT&&(u.prototype.__proto__=Uint8Array.prototype,u.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&u[Symbol.species]===u&&Object.defineProperty(u,Symbol.species,{value:null,configurable:!0})),u.alloc=function(t,e,n){return function(t,e,n,r){return l(e),e<=0?s(t,e):void 0!==n?"string"==typeof r?s(t,e).fill(n,r):s(t,e).fill(n):s(t,e)}(null,t,e,n)},u.allocUnsafe=function(t){return p(null,t)},u.allocUnsafeSlow=function(t){return p(null,t)},u.isBuffer=function(t){return!(null==t||!t._isBuffer)},u.compare=function(t,e){if(!u.isBuffer(t)||!u.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,r=e.length,a=0,o=Math.min(n,r);a<o;++a)if(t[a]!==e[a]){n=t[a],r=e[a];break}return n<r?-1:r<n?1:0},u.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},u.concat=function(t,e){if(!o(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return u.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var r=u.allocUnsafe(e),a=0;for(n=0;n<t.length;++n){var i=t[n];if(!u.isBuffer(i))throw new TypeError('"list" argument must be an Array of Buffers');i.copy(r,a),a+=i.length}return r},u.byteLength=h,u.prototype._isBuffer=!0,u.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)v(this,e,e+1);return this},u.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)v(this,e,e+3),v(this,e+1,e+2);return this},u.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)v(this,e,e+7),v(this,e+1,e+6),v(this,e+2,e+5),v(this,e+3,e+4);return this},u.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?I(this,0,t):m.apply(this,arguments)},u.prototype.equals=function(t){if(!u.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===u.compare(this,t)},u.prototype.inspect=function(){var t="",n=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),"<Buffer "+t+">"},u.prototype.compare=function(t,e,n,r,a){if(!u.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===a&&(a=this.length),e<0||n>t.length||r<0||a>this.length)throw new RangeError("out of range index");if(r>=a&&e>=n)return 0;if(r>=a)return-1;if(e>=n)return 1;if(this===t)return 0;for(var o=(a>>>=0)-(r>>>=0),i=(n>>>=0)-(e>>>=0),s=Math.min(o,i),c=this.slice(r,a),l=t.slice(e,n),p=0;p<s;++p)if(c[p]!==l[p]){o=c[p],i=l[p];break}return o<i?-1:i<o?1:0},u.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},u.prototype.indexOf=function(t,e,n){return g(this,t,e,n,!0)},u.prototype.lastIndexOf=function(t,e,n){return g(this,t,e,n,!1)},u.prototype.write=function(t,e,n,r){if(void 0===e)r="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)r=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(n)?(n|=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var a=this.length-e;if((void 0===n||n>a)&&(n=a),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return x(this,t,e,n);case"utf8":case"utf-8":return b(this,t,e,n);case"ascii":return w(this,t,e,n);case"latin1":case"binary":return C(this,t,e,n);case"base64":return E(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function R(t,e,n){var r="";n=Math.min(t.length,n);for(var a=e;a<n;++a)r+=String.fromCharCode(127&t[a]);return r}function T(t,e,n){var r="";n=Math.min(t.length,n);for(var a=e;a<n;++a)r+=String.fromCharCode(t[a]);return r}function k(t,e,n){var r=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>r)&&(n=r);for(var a="",o=e;o<n;++o)a+=V(t[o]);return a}function A(t,e,n){for(var r=t.slice(e,n),a="",o=0;o<r.length;o+=2)a+=String.fromCharCode(r[o]+256*r[o+1]);return a}function O(t,e,n){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}function D(t,e,n,r,a,o){if(!u.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>a||e<o)throw new RangeError('"value" argument is out of bounds');if(n+r>t.length)throw new RangeError("Index out of range")}function _(t,e,n,r){e<0&&(e=65535+e+1);for(var a=0,o=Math.min(t.length-n,2);a<o;++a)t[n+a]=(e&255<<8*(r?a:1-a))>>>8*(r?a:1-a)}function F(t,e,n,r){e<0&&(e=4294967295+e+1);for(var a=0,o=Math.min(t.length-n,4);a<o;++a)t[n+a]=e>>>8*(r?a:3-a)&255}function M(t,e,n,r,a,o){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function B(t,e,n,r,o){return o||M(t,0,n,4),a.write(t,e,n,r,23,4),n+4}function P(t,e,n,r,o){return o||M(t,0,n,8),a.write(t,e,n,r,52,8),n+8}u.prototype.slice=function(t,e){var n,r=this.length;if((t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t),u.TYPED_ARRAY_SUPPORT)(n=this.subarray(t,e)).__proto__=u.prototype;else{var a=e-t;n=new u(a,void 0);for(var o=0;o<a;++o)n[o]=this[o+t]}return n},u.prototype.readUIntLE=function(t,e,n){t|=0,e|=0,n||O(t,e,this.length);for(var r=this[t],a=1,o=0;++o<e&&(a*=256);)r+=this[t+o]*a;return r},u.prototype.readUIntBE=function(t,e,n){t|=0,e|=0,n||O(t,e,this.length);for(var r=this[t+--e],a=1;e>0&&(a*=256);)r+=this[t+--e]*a;return r},u.prototype.readUInt8=function(t,e){return e||O(t,1,this.length),this[t]},u.prototype.readUInt16LE=function(t,e){return e||O(t,2,this.length),this[t]|this[t+1]<<8},u.prototype.readUInt16BE=function(t,e){return e||O(t,2,this.length),this[t]<<8|this[t+1]},u.prototype.readUInt32LE=function(t,e){return e||O(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},u.prototype.readUInt32BE=function(t,e){return e||O(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},u.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||O(t,e,this.length);for(var r=this[t],a=1,o=0;++o<e&&(a*=256);)r+=this[t+o]*a;return r>=(a*=128)&&(r-=Math.pow(2,8*e)),r},u.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||O(t,e,this.length);for(var r=e,a=1,o=this[t+--r];r>0&&(a*=256);)o+=this[t+--r]*a;return o>=(a*=128)&&(o-=Math.pow(2,8*e)),o},u.prototype.readInt8=function(t,e){return e||O(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},u.prototype.readInt16LE=function(t,e){e||O(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt16BE=function(t,e){e||O(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt32LE=function(t,e){return e||O(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},u.prototype.readInt32BE=function(t,e){return e||O(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},u.prototype.readFloatLE=function(t,e){return e||O(t,4,this.length),a.read(this,t,!0,23,4)},u.prototype.readFloatBE=function(t,e){return e||O(t,4,this.length),a.read(this,t,!1,23,4)},u.prototype.readDoubleLE=function(t,e){return e||O(t,8,this.length),a.read(this,t,!0,52,8)},u.prototype.readDoubleBE=function(t,e){return e||O(t,8,this.length),a.read(this,t,!1,52,8)},u.prototype.writeUIntLE=function(t,e,n,r){(t=+t,e|=0,n|=0,r)||D(this,t,e,n,Math.pow(2,8*n)-1,0);var a=1,o=0;for(this[e]=255&t;++o<n&&(a*=256);)this[e+o]=t/a&255;return e+n},u.prototype.writeUIntBE=function(t,e,n,r){(t=+t,e|=0,n|=0,r)||D(this,t,e,n,Math.pow(2,8*n)-1,0);var a=n-1,o=1;for(this[e+a]=255&t;--a>=0&&(o*=256);)this[e+a]=t/o&255;return e+n},u.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,1,255,0),u.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},u.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):_(this,t,e,!0),e+2},u.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):_(this,t,e,!1),e+2},u.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):F(this,t,e,!0),e+4},u.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):F(this,t,e,!1),e+4},u.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var a=Math.pow(2,8*n-1);D(this,t,e,n,a-1,-a)}var o=0,i=1,s=0;for(this[e]=255&t;++o<n&&(i*=256);)t<0&&0===s&&0!==this[e+o-1]&&(s=1),this[e+o]=(t/i>>0)-s&255;return e+n},u.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var a=Math.pow(2,8*n-1);D(this,t,e,n,a-1,-a)}var o=n-1,i=1,s=0;for(this[e+o]=255&t;--o>=0&&(i*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/i>>0)-s&255;return e+n},u.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,1,127,-128),u.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},u.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):_(this,t,e,!0),e+2},u.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):_(this,t,e,!1),e+2},u.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):F(this,t,e,!0),e+4},u.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):F(this,t,e,!1),e+4},u.prototype.writeFloatLE=function(t,e,n){return B(this,t,e,!0,n)},u.prototype.writeFloatBE=function(t,e,n){return B(this,t,e,!1,n)},u.prototype.writeDoubleLE=function(t,e,n){return P(this,t,e,!0,n)},u.prototype.writeDoubleBE=function(t,e,n){return P(this,t,e,!1,n)},u.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e<r-n&&(r=t.length-e+n);var a,o=r-n;if(this===t&&n<e&&e<r)for(a=o-1;a>=0;--a)t[a+e]=this[a+n];else if(o<1e3||!u.TYPED_ARRAY_SUPPORT)for(a=0;a<o;++a)t[a+e]=this[a+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+o),e);return o},u.prototype.fill=function(t,e,n,r){if("string"==typeof t){if("string"==typeof e?(r=e,e=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),1===t.length){var a=t.charCodeAt(0);a<256&&(t=a)}if(void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!u.isEncoding(r))throw new TypeError("Unknown encoding: "+r)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<n)throw new RangeError("Out of range index");if(n<=e)return this;var o;if(e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(o=e;o<n;++o)this[o]=t;else{var i=u.isBuffer(t)?t:W(new u(t,r).toString()),s=i.length;for(o=0;o<n-e;++o)this[o+e]=i[o%s]}return this};var L=/[^+\/0-9A-Za-z-_]/g;function V(t){return t<16?"0"+t.toString(16):t.toString(16)}function W(t,e){var n;e=e||1/0;for(var r=t.length,a=null,o=[],i=0;i<r;++i){if((n=t.charCodeAt(i))>55295&&n<57344){if(!a){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(i+1===r){(e-=3)>-1&&o.push(239,191,189);continue}a=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),a=n;continue}n=65536+(a-55296<<10|n-56320)}else a&&(e-=3)>-1&&o.push(239,191,189);if(a=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function z(t){return r.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(L,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function U(t,e,n,r){for(var a=0;a<r&&!(a+n>=e.length||a>=t.length);++a)e[a+n]=t[a];return a}}).call(this,n(1))},function(t,e,n){"use strict";e.byteLength=function(t){var e=c(t),n=e[0],r=e[1];return 3*(n+r)/4-r},e.toByteArray=function(t){var e,n,r=c(t),i=r[0],s=r[1],u=new o(function(t,e,n){return 3*(e+n)/4-n}(0,i,s)),l=0,p=s>0?i-4:i;for(n=0;n<p;n+=4)e=a[t.charCodeAt(n)]<<18|a[t.charCodeAt(n+1)]<<12|a[t.charCodeAt(n+2)]<<6|a[t.charCodeAt(n+3)],u[l++]=e>>16&255,u[l++]=e>>8&255,u[l++]=255&e;2===s&&(e=a[t.charCodeAt(n)]<<2|a[t.charCodeAt(n+1)]>>4,u[l++]=255&e);1===s&&(e=a[t.charCodeAt(n)]<<10|a[t.charCodeAt(n+1)]<<4|a[t.charCodeAt(n+2)]>>2,u[l++]=e>>8&255,u[l++]=255&e);return u},e.fromByteArray=function(t){for(var e,n=t.length,a=n%3,o=[],i=0,s=n-a;i<s;i+=16383)o.push(l(t,i,i+16383>s?s:i+16383));1===a?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+"==")):2===a&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"="));return o.join("")};for(var r=[],a=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,u=i.length;s<u;++s)r[s]=i[s],a[i.charCodeAt(s)]=s;function c(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");return-1===n&&(n=e),[n,n===e?0:4-n%4]}function l(t,e,n){for(var a,o,i=[],s=e;s<n;s+=3)a=(t[s]<<16&16711680)+(t[s+1]<<8&65280)+(255&t[s+2]),i.push(r[(o=a)>>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return i.join("")}a["-".charCodeAt(0)]=62,a["_".charCodeAt(0)]=63},function(t,e){e.read=function(t,e,n,r,a){var o,i,s=8*a-r-1,u=(1<<s)-1,c=u>>1,l=-7,p=n?a-1:0,f=n?-1:1,d=t[e+p];for(p+=f,o=d&(1<<-l)-1,d>>=-l,l+=s;l>0;o=256*o+t[e+p],p+=f,l-=8);for(i=o&(1<<-l)-1,o>>=-l,l+=r;l>0;i=256*i+t[e+p],p+=f,l-=8);if(0===o)o=1-c;else{if(o===u)return i?NaN:1/0*(d?-1:1);i+=Math.pow(2,r),o-=c}return(d?-1:1)*i*Math.pow(2,o-r)},e.write=function(t,e,n,r,a,o){var i,s,u,c=8*o-a-1,l=(1<<c)-1,p=l>>1,f=23===a?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,h=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,i=l):(i=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-i))<1&&(i--,u*=2),(e+=i+p>=1?f/u:f*Math.pow(2,1-p))*u>=2&&(i++,u/=2),i+p>=l?(s=0,i=l):i+p>=1?(s=(e*u-1)*Math.pow(2,a),i+=p):(s=e*Math.pow(2,p-1)*Math.pow(2,a),i=0));a>=8;t[n+d]=255&s,d+=h,s/=256,a-=8);for(i=i<<a|s,c+=a;c>0;t[n+d]=255&i,d+=h,i/=256,c-=8);t[n+d-h]|=128*m}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e,n){(function(t){var r=void 0!==t&&t||"undefined"!=typeof self&&self||window,a=Function.prototype.apply;function o(t,e){this._id=t,this._clearFn=e}e.setTimeout=function(){return new o(a.call(setTimeout,r,arguments),clearTimeout)},e.setInterval=function(){return new o(a.call(setInterval,r,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t&&t.close()},o.prototype.unref=o.prototype.ref=function(){},o.prototype.close=function(){this._clearFn.call(r,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout((function(){t._onTimeout&&t._onTimeout()}),e))},n(9),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,n(1))},function(t,e,n){(function(t,e){!function(t,n){"use strict";if(!t.setImmediate){var r,a,o,i,s,u=1,c={},l=!1,p=t.document,f=Object.getPrototypeOf&&Object.getPrototypeOf(t);f=f&&f.setTimeout?f:t,"[object process]"==={}.toString.call(t.process)?r=function(t){e.nextTick((function(){h(t)}))}:!function(){if(t.postMessage&&!t.importScripts){var e=!0,n=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=n,e}}()?t.MessageChannel?((o=new MessageChannel).port1.onmessage=function(t){h(t.data)},r=function(t){o.port2.postMessage(t)}):p&&"onreadystatechange"in p.createElement("script")?(a=p.documentElement,r=function(t){var e=p.createElement("script");e.onreadystatechange=function(){h(t),e.onreadystatechange=null,a.removeChild(e),e=null},a.appendChild(e)}):r=function(t){setTimeout(h,0,t)}:(i="setImmediate$"+Math.random()+"$",s=function(e){e.source===t&&"string"==typeof e.data&&0===e.data.indexOf(i)&&h(+e.data.slice(i.length))},t.addEventListener?t.addEventListener("message",s,!1):t.attachEvent("onmessage",s),r=function(e){t.postMessage(i+e,"*")}),f.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),n=0;n<e.length;n++)e[n]=arguments[n+1];var a={callback:t,args:e};return c[u]=a,r(u),u++},f.clearImmediate=d}function d(t){delete c[t]}function h(t){if(l)setTimeout(h,0,t);else{var e=c[t];if(e){l=!0;try{!function(t){var e=t.callback,n=t.args;switch(n.length){case 0:e();break;case 1:e(n[0]);break;case 2:e(n[0],n[1]);break;case 3:e(n[0],n[1],n[2]);break;default:e.apply(void 0,n)}}(e)}finally{d(t),l=!1}}}}}("undefined"==typeof self?void 0===t?this:t:self)}).call(this,n(1),n(3))},function(t,e){},function(t,e){},function(t,e){},function(t,e,n){"use strict";n.r(e),n.d(e,"createBlurEffect",(function(){return Et}));var r=n(0),a=n(2),o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};function i(t,e){function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var s=function(){return(s=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var a in e=arguments[n])Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t}).apply(this,arguments)};function u(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){t.done?a(t.value):new n((function(e){e(t.value)})).then(i,s)}u((r=r.apply(t,e||[])).next())}))}function c(t,e){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(a=2&o[0]?r.return:o[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,o[1])).done)return a;switch(r=0,a&&(o=[2&o[0],a.value]),o[0]){case 0:case 1:a=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(a=(a=i.trys).length>0&&a[a.length-1])&&(6===o[0]||2===o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]<a[3])){i.label=o[1];break}if(6===o[0]&&i.label<a[1]){i.label=a[1],a=o;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(o);break}a[2]&&i.ops.pop(),i.trys.pop();continue}o=e.call(t,i)}catch(t){o=[6,t],r=0}finally{n=a=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}}function l(t){var e=t.shape[2],n=t.argMax(2).reshape([-1]);return Object(r.oneHot)(n,e)}function p(t,e){return Object(r.tidy)((function(){return t.greater(Object(r.scalar)(e)).toInt()}))}function f(t,e){var n=e.shape,a=n[0],o=n[1],i=n[2];return Object(r.tidy)((function(){var n=l(e),s=Object(r.range)(0,i,1,"int32").expandDims(1);return function(t,e){return t.mul(e)}(n.matMul(s).toInt().reshape([a,o]).add(Object(r.scalar)(1,"int32")),t).sub(Object(r.scalar)(1,"int32"))}))}function d(t){var e=t.shape,n=e[0],a=e[1],o=e[2];return Object(r.tidy)((function(){var e=l(t),i=Object(r.range)(0,o,1,"int32").expandDims(1);return e.matMul(i).toInt().reshape([n,a])}))}var h=function(){function t(t,e){this.model=t,this.outputStride=e;var n=this.model.inputs[0].shape;r.util.assert(-1===n[1]&&-1===n[2],(function(){return"Input shape ["+n[1]+", "+n[2]+"] must both be equal to or -1"}))}return t.prototype.predict=function(t){var e=this;return Object(r.tidy)((function(){var n=e.preprocessInput(t.toFloat()).expandDims(0),r=e.model.predict(n).map((function(t){return t.squeeze([0])})),a=e.nameOutputResults(r);return{heatmapScores:a.heatmap.sigmoid(),offsets:a.offsets,displacementFwd:a.displacementFwd,displacementBwd:a.displacementBwd,segmentation:a.segmentation,partHeatmaps:a.partHeatmaps,longOffsets:a.longOffsets,partOffsets:a.partOffsets}}))},t.prototype.dispose=function(){this.model.dispose()},t}(),m=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),e.prototype.preprocessInput=function(t){return Object(r.tidy)((function(){return Object(r.div)(t,127.5).sub(1)}))},e.prototype.nameOutputResults=function(t){return{offsets:t[0],segmentation:t[1],partHeatmaps:t[2],longOffsets:t[3],heatmap:t[4],displacementFwd:t[5],displacementBwd:t[6],partOffsets:t[7]}},e}(h),v=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],g=v.length,y=v.reduce((function(t,e,n){return t[e]=n,t}),{});[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]].map((function(t){var e=t[0],n=t[1];return[y[e],y[n]]}));function x(t,e,n){var r=t[0],a=t[1],o=e[0],i=e[1],s=n.top,u=n.bottom;return[i/(n.left+n.right+a),o/(s+u+r)]}function b(t,e,n,r){return{y:r.get(t,e,n),x:r.get(t,e,n+g)}}function w(t,e,n){var r=b(t.heatmapY,t.heatmapX,t.id,n),a=r.y,o=r.x;return{x:t.heatmapX*e+o,y:t.heatmapY*e+a}}function C(t,e,n){return t<e?e:t>n?n:t}function E(t,e){return{x:t.x+e.x,y:t.y+e.y}}function S(t,e,n){void 0===n&&(n=.3);for(var r=0,a=0,o=0;o<t.length;o++)e.keypoints[o].score>n&&(a+=1,r+=Math.pow(t[o].x-e.keypoints[o].position.x,2)+Math.pow(t[o].y-e.keypoints[o].position.y,2));return 0===a?r=1/0:r/=a,r}function N(t,e,n,r,a,o,i){for(var s=i[0],u=i[1],c=n(t),l=c.y*r+c.x,p=a[g*(2*l)+e],f=a[g*(2*l+1)+e],d=t.y+p,h=t.x+f,m=0;m<o;m++){d=Math.min(d,s-1);var v=n({x:h=Math.min(h,u-1),y:d}),y=v.y*r+v.x;d+=p=a[g*(2*y)+e],h+=f=a[g*(2*y+1)+e]}return{x:h,y:d}}function I(t,e,n,r,a,o,i,s,u,c){for(var l=a[0],p=a[1],f=o[0],d=o[1],h=s[0],m=s[1],v=[],g=function(t){return function(t,e,n,r){var a=e[0],o=e[1],i=n[0],s=n[1],u=Math.round(((a+t.y+1)*s-1)/r);return{x:Math.round(((o+t.x+1)*i-1)/r),y:u}}(t,[l,p],[f,d],u)},y=0;y<r;y++){var x=N(t,y,g,i,e,c,[h,m]);v.push(x)}for(var b=-1,w=1/0,C=0;C<n.length;C++){var E=S(v,n[C]);E<w&&(b=C,w=E)}return b}function R(t,e){var n=t[0],r=t[1];return[Math.round((r-1)/e+1),Math.round((n-1)/e+1)]}function T(t,e,n,a,o,i,s,u,c,l,p){for(var f=s[0],d=s[1],h=t.shape,m=h[0],v=h[1],y=e.shape.slice(0,2),b=y[0],w=y[1],C=e.reshape([b,w,2,g]),E=new Float32Array(p*g*3).fill(0),S=0;S<n.length;S++)for(var N=S*g*3,I=n[S],R=0;R<g;R++){var T=I.keypoints[R],k=N+3*R;E[k]=T.score,E[k+1]=T.position.y,E[k+2]=T.position.x}var A=x([a,o],[f,d],u),O=A[0],D=A[1],_=Object(r.tensor)(E,[p,g,3]),F=u.top,M=u.left,B={variableNames:["segmentation","longOffsets","poses"],outputShape:[m,v],userCode:"\n int convertToPositionInOutput(int pos, int pad, float scale, int stride) {\n return round(((float(pos + pad) + 1.0) * scale - 1.0) / float(stride));\n }\n\n float convertToPositionInOutputFloat(\n int pos, int pad, float scale, int stride) {\n return ((float(pos + pad) + 1.0) * scale - 1.0) / float(stride);\n }\n\n float dist(float x1, float y1, float x2, float y2) {\n return pow(x1 - x2, 2.0) + pow(y1 - y2, 2.0);\n }\n\n float sampleLongOffsets(float h, float w, int d, int k) {\n float fh = fract(h);\n float fw = fract(w);\n int clH = int(ceil(h));\n int clW = int(ceil(w));\n int flH = int(floor(h));\n int flW = int(floor(w));\n float o11 = getLongOffsets(flH, flW, d, k);\n float o12 = getLongOffsets(flH, clW, d, k);\n float o21 = getLongOffsets(clH, flW, d, k);\n float o22 = getLongOffsets(clH, clW, d, k);\n float o1 = mix(o11, o12, fw);\n float o2 = mix(o21, o22, fw);\n return mix(o1, o2, fh);\n }\n\n int findNearestPose(int h, int w) {\n float prob = getSegmentation(h, w);\n if (prob < 1.0) {\n return -1;\n }\n\n // Done(Tyler): convert from output space h/w to strided space.\n float stridedH = convertToPositionInOutputFloat(\n h, "+F+", "+D+", "+i+");\n float stridedW = convertToPositionInOutputFloat(\n w, "+M+", "+O+", "+i+");\n\n float minDist = 1000000.0;\n int iMin = -1;\n for (int i = 0; i < "+p+"; i++) {\n float curDistSum = 0.0;\n int numKpt = 0;\n for (int k = 0; k < "+g+"; k++) {\n float dy = sampleLongOffsets(stridedH, stridedW, 0, k);\n float dx = sampleLongOffsets(stridedH, stridedW, 1, k);\n\n float y = float(h) + dy;\n float x = float(w) + dx;\n\n for (int s = 0; s < "+c+"; s++) {\n int yRounded = round(min(y, float("+(a-1)+")));\n int xRounded = round(min(x, float("+(o-1)+")));\n\n float yStrided = convertToPositionInOutputFloat(\n yRounded, "+F+", "+D+", "+i+");\n float xStrided = convertToPositionInOutputFloat(\n xRounded, "+M+", "+O+", "+i+");\n\n float dy = sampleLongOffsets(yStrided, xStrided, 0, k);\n float dx = sampleLongOffsets(yStrided, xStrided, 1, k);\n\n y = y + dy;\n x = x + dx;\n }\n\n float poseScore = getPoses(i, k, 0);\n float poseY = getPoses(i, k, 1);\n float poseX = getPoses(i, k, 2);\n if (poseScore > "+l+") {\n numKpt = numKpt + 1;\n curDistSum = curDistSum + dist(x, y, poseX, poseY);\n }\n }\n if (numKpt > 0 && curDistSum / float(numKpt) < minDist) {\n minDist = curDistSum / float(numKpt);\n iMin = i;\n }\n }\n return iMin;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int nearestPose = findNearestPose(coords[0], coords[1]);\n setOutput(float(nearestPose));\n }\n "};return Object(r.backend)().compileAndRun(B,[t,C,_])}function k(){return"webgl"===Object(r.getBackend)()}function A(t,e,n,a,o,i,s,l,p,f,d,h){var m=s[0],v=s[1];return void 0===p&&(p=.2),void 0===f&&(f=8),void 0===d&&(d=.3),void 0===h&&(h=10),u(this,void 0,void 0,(function(){var s,u,g,y,b;return c(this,(function(c){switch(c.label){case 0:return s=n.filter((function(t){return t.score>=p})),k()?(g=Object(r.tidy)((function(){var n=T(t,e,s,a,o,i,[m,v],l,f,d,h);return s.map((function(t,e){return function(t,e){return Object(r.tidy)((function(){return t.equal(Object(r.scalar)(e)).toInt()}))}(n,e)}))})),[4,Promise.all(g.map((function(t){return t.data()})))]):[3,2];case 1:return u=c.sent(),g.forEach((function(t){return t.dispose()})),[3,5];case 2:return[4,t.data()];case 3:return y=c.sent(),[4,e.data()];case 4:b=c.sent(),u=function(t,e,n,r,a,o,i,s,u,c){var l=i[0],p=i[1];void 0===c&&(c=5);for(var f=n.map((function(t){return new Uint8Array(r*a).fill(0)})),d=s.top,h=s.left,m=x([r,a],[l,p],s),v=m[0],g=m[1],y=R([l,p],o)[0],b=0;b<r;b+=1)for(var w=0;w<a;w+=1){var C=b*a+w;if(1===t[C]){var E=I({x:w,y:b},e,n,c,[d,h],[v,g],y,[r,a],o,u);E>=0&&(f[E][C]=1)}}return f}(y,b,s,a,o,i,[m,v],l,f),c.label=5;case 5:return[2,u.map((function(t,e){return{data:t,pose:s[e],width:o,height:a}}))]}}))}))}function O(t,e,n,a,o,i,s,l,p,f,d,h,m){var v=l[0],g=l[1];return void 0===f&&(f=.2),void 0===d&&(d=8),void 0===h&&(h=.3),void 0===m&&(m=10),u(this,void 0,void 0,(function(){var u,l,y,b,w,C;return c(this,(function(c){switch(c.label){case 0:return u=a.filter((function(t){return t.score>=f})),k()?(y=Object(r.tidy)((function(){var a=T(t,e,u,o,i,s,[v,g],p,d,h,m);return u.map((function(t,e){return function(t,e,n){return Object(r.tidy)((function(){return t.equal(Object(r.scalar)(n)).toInt().mul(e.add(1)).sub(1)}))}(a,n,e)}))})),[4,Promise.all(y.map((function(t){return t.data()})))]):[3,2];case 1:return l=c.sent(),y.forEach((function(t){return t.dispose()})),[3,6];case 2:return[4,t.data()];case 3:return b=c.sent(),[4,e.data()];case 4:return w=c.sent(),[4,n.data()];case 5:C=c.sent(),l=function(t,e,n,r,a,o,i,s,u,c,l){var p=s[0],f=s[1];void 0===l&&(l=5);for(var d=r.map((function(t){return new Int32Array(a*o).fill(-1)})),h=u.top,m=u.left,v=x([a,o],[p,f],u),g=v[0],y=v[1],b=R([p,f],i)[0],w=0;w<a;w+=1)for(var C=0;C<o;C+=1){var E=w*o+C;if(1===t[E]){var S=I({x:C,y:w},e,r,l,[h,m],[g,y],b,[a,o],i,c);S>=0&&(d[S][E]=n[E])}}return d}(b,w,C,u,o,i,s,[v,g],p,d),c.label=6;case 6:return[2,l.map((function(t,e){return{pose:u[e],data:t,height:o,width:i}}))]}}))}))}function D(t){return Math.floor(t/2)}var _=function(){function t(t,e){this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=e}return t.prototype.enqueue=function(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)},t.prototype.dequeue=function(){var t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t},t.prototype.empty=function(){return-1===this.numberOfElements},t.prototype.size=function(){return this.numberOfElements+1},t.prototype.all=function(){return this.priorityQueue.slice(0,this.numberOfElements+1)},t.prototype.max=function(){return this.priorityQueue[0]},t.prototype.swim=function(t){for(;t>0&&this.less(D(t),t);)this.exchange(t,D(t)),t=D(t)},t.prototype.sink=function(t){for(;2*t<=this.numberOfElements;){var e=2*t;if(e<this.numberOfElements&&this.less(e,e+1)&&e++,!this.less(t,e))break;this.exchange(t,e),t=e}},t.prototype.getValueAt=function(t){return this.getElementValue(this.priorityQueue[t])},t.prototype.less=function(t,e){return this.getValueAt(t)<this.getValueAt(e)},t.prototype.exchange=function(t,e){var n=this.priorityQueue[t];this.priorityQueue[t]=this.priorityQueue[e],this.priorityQueue[e]=n},t}();function F(t,e,n,r,a,o){for(var i=o.shape,s=i[0],u=i[1],c=!0,l=Math.max(n-a,0),p=Math.min(n+a+1,s),f=l;f<p;++f){for(var d=Math.max(r-a,0),h=Math.min(r+a+1,u),m=d;m<h;++m)if(o.get(f,m,t)>e){c=!1;break}if(!c)break}return c}var M=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]].map((function(t){var e=t[0],n=t[1];return[y[e],y[n]]})),B=M.map((function(t){return t[1]})),P=M.map((function(t){return t[0]}));function L(t,e,n,r){return{y:C(Math.round(t.y/e),0,n-1),x:C(Math.round(t.x/e),0,r-1)}}function V(t,e,n,r,a,o,i,s){void 0===s&&(s=2);for(var u=r.shape,c=u[0],l=u[1],p=function(t,e,n){var r=n.shape[2]/2;return{y:n.get(e.y,e.x,t),x:n.get(e.y,e.x,r+t)}}(t,L(e.position,o,c,l),i),f=E(e.position,p),d=0;d<s;d++){var h=L(f,o,c,l),m=b(h.y,h.x,n,a);f=E({x:h.x*o,y:h.y*o},{x:m.x,y:m.y})}var g=L(f,o,c,l),y=r.get(g.y,g.x,n);return{position:f,part:v[n],score:y}}function W(t,e,n,r,a,o){var i=e.shape[2],s=B.length,u=new Array(i),c=t.part,l=t.score,p=w(c,r,n);u[c.id]={score:l,part:v[c.id],position:p};for(var f=s-1;f>=0;--f){var d=B[f],h=P[f];u[d]&&!u[h]&&(u[h]=V(f,u[d],h,e,n,r,o))}for(f=0;f<s;++f)d=P[f],h=B[f],u[d]&&!u[h]&&(u[h]=V(f,u[d],h,e,n,r,a));return u}function z(t,e,n,r){var a=n.x,o=n.y;return t.some((function(t){var n=t.keypoints[r].position;return function(t,e,n,r){var a=n-t,o=r-e;return a*a+o*o}(o,a,n.y,n.x)<=e}))}function U(t,e,n){return n.reduce((function(n,r,a){var o=r.position,i=r.score;return z(t,e,o,a)||(n+=i),n}),0)/n.length}function j(t,e,n,r,a,o,i,s){void 0===i&&(i=.5),void 0===s&&(s=20);for(var u=[],c=function(t,e,n){for(var r=n.shape,a=r[0],o=r[1],i=r[2],s=new _(a*o*i,(function(t){return t.score})),u=0;u<a;++u)for(var c=0;c<o;++c)for(var l=0;l<i;++l){var p=n.get(u,c,l);p<t||F(l,p,u,c,e,n)&&s.enqueue({score:p,part:{heatmapY:u,heatmapX:c,id:l}})}return s}(i,1,t),l=s*s;u.length<o&&!c.empty();){var p=c.dequeue();if(!z(u,l,w(p.part,a,e),p.part.id)){var f=W(p,t,e,a,n,r),d=U(u,l,f);u.push({keypoints:f,score:d})}}return u}var G,H=[-123.15,-115.9,-103.06],q=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),e.prototype.preprocessInput=function(t){return t.add(H)},e.prototype.nameOutputResults=function(t){var e=t[0],n=t[1],r=t[2],a=t[3],o=t[4],i=t[5];return{offsets:o,segmentation:t[6],partHeatmaps:i,longOffsets:a,heatmap:r,displacementFwd:n,displacementBwd:e,partOffsets:t[7]}},e}(h),K="https://storage.googleapis.com/tfjs-models/savedmodel/bodypix/resnet50/",X="https://storage.googleapis.com/tfjs-models/savedmodel/bodypix/mobilenet/";function Y(t){if("undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement)return function(t){if(0!==t.offsetHeight&&0!==t.offsetWidth)return[t.offsetHeight,t.offsetWidth];if(null!=t.height&&null!=t.width)return[t.height,t.width];throw new Error("HTMLImageElement must have height and width attributes set.")}(t);if("undefined"!=typeof ImageData&&t instanceof ImageData)return[t.height,t.width];if("undefined"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement)return function(t){return null!=t.height&&null!=t.width?[t.height,t.width]:[t.videoHeight,t.videoWidth]}(t);if(t instanceof r.Tensor)return[t.shape[0],t.shape[1]];throw new Error("error: Unknown input type: "+t+".")}function $(t,e){return function(t,e){return(t-1)%e==0}(t,e)?t:Math.floor(t/e)*e+1}var Q={low:"low",medium:"medium",high:"high",full:"full"},J=((G={})[Q.low]=.25,G[Q.medium]=.5,G[Q.high]=.75,G[Q.full]=1,G);function Z(t,e,n){var a=n[0],o=n[1],i=function(t){if("string"==typeof t){var e=J[t];return r.util.assert("number"==typeof e,(function(){return"string value of inputResolution must be one of "+Object.values(Q).join(",")+" but was "+t+"."})),e}return r.util.assert("number"==typeof t&&t<=2&&t>=.1,(function(){return"inputResolution must be a string or number between 0.1 and 2, but was "+t})),t}(t);return[$(a*i,e),$(o*i,e)]}function tt(t,e,n,a,o){var i=e[0],s=e[1],u=n[0],c=n[1],l=a[0],p=l[0],f=l[1],d=a[1],h=d[0],m=d[1];return void 0===o&&(o=!1),Object(r.tidy)((function(){var e=t.resizeBilinear([u,c],!0);return o&&(e=e.sigmoid()),function(t,e,n){var a=e[0],o=e[1],i=n[0],s=i[0],u=i[1],c=n[1],l=c[0],p=c[1];return Object(r.tidy)((function(){return r.image.cropAndResize(t.expandDims(),[[s/(a+s+u-1),l/(o+l+p-1),(s+a-1)/(a+s+u-1),(l+o-1)/(o+l+p-1)]],[0],[a,o]).squeeze([0])}))}(e,[i,s],[[p,f],[h,m]])}))}function et(t,e){var n=e[0],a=e[1],o=Y(t),i=o[0],s=o[1],u=a/n,c=[0,0,0,0],l=c[0],p=c[1],f=c[2],d=c[3];return s/i<u?(l=0,p=0,f=Math.round(.5*(u*i-s)),d=Math.round(.5*(u*i-s))):(l=Math.round(.5*(1/u*s-i)),p=Math.round(.5*(1/u*s-i)),f=0,d=0),{resized:Object(r.tidy)((function(){var e=function(t){return t instanceof r.Tensor?t:r.browser.fromPixels(t)}(t);return(e=Object(r.pad3d)(e,[[l,p],[f,d],[0,0]])).resizeBilinear([n,a])})),padding:{top:l,left:f,right:d,bottom:p}}}function nt(t){return u(this,void 0,void 0,(function(){return c(this,(function(e){return[2,Promise.all(t.map((function(t){return t.buffer()})))]}))}))}function rt(t,e,n,r,a){var o=e[0],i=e[1],s=n[0],u=n[1],c=function(t,e,n,r,a){return void 0===r&&(r=0),void 0===a&&(a=0),1===n&&1===e&&0===r&&0===a?t:t.map((function(t){return function(t,e,n,r,a){return void 0===r&&(r=0),void 0===a&&(a=0),{score:t.score,keypoints:t.keypoints.map((function(t){var o=t.score,i=t.part,s=t.position;return{score:o,part:i,position:{x:s.x*n+a,y:s.y*e+r}}}))}}(t,e,n,r,a)}))}(t,(o+r.top+r.bottom)/s,(i+r.left+r.right)/u,-r.top,-r.left);return a?function(t,e){return e<=0?t:t.map((function(t){return function(t,e){return{score:t.score,keypoints:t.keypoints.map((function(t){var n=t.score,r=t.part,a=t.position;return{score:n,part:r,position:{x:e-1-a.x,y:a.y}}}))}}(t,e)}))}(c,i):c}var at={architecture:"MobileNetV1",outputStride:16,quantBytes:4,multiplier:.75},ot=["MobileNetV1","ResNet50"],it={MobileNetV1:[8,16,32],ResNet50:[32,16]},st={MobileNetV1:[.5,.75,1],ResNet50:[1]},ut=[1,2,4];var ct={flipHorizontal:!1,internalResolution:"medium",segmentationThreshold:.7,maxDetections:10,scoreThreshold:.4,nmsRadius:20},lt={flipHorizontal:!1,internalResolution:"medium",segmentationThreshold:.7,maxDetections:10,scoreThreshold:.4,nmsRadius:20,minKeypointScore:.3,refineSteps:10};function pt(t){var e=t.segmentationThreshold,n=t.maxDetections,r=t.scoreThreshold,a=t.nmsRadius;if(e<0||e>1)throw new Error("segmentationThreshold "+e+". Should be in range [0.0, 1.0]");if(n<=0)throw new Error("Invalid maxDetections "+n+". Should be > 0");if(r<0||r>1)throw new Error("Invalid scoreThreshold "+r+". Should be in range [0.0, 1.0]");if(a<=0)throw new Error("Invalid nmsRadius "+a+".")}function ft(t){var e=t.segmentationThreshold,n=t.maxDetections,r=t.scoreThreshold,a=t.nmsRadius,o=t.minKeypointScore,i=t.refineSteps;if(e<0||e>1)throw new Error("segmentationThreshold "+e+". Should be in range [0.0, 1.0]");if(n<=0)throw new Error("Invalid maxDetections "+n+". Should be > 0");if(r<0||r>1)throw new Error("Invalid scoreThreshold "+r+". Should be in range [0.0, 1.0]");if(a<=0)throw new Error("Invalid nmsRadius "+a+".");if(o<0||o>1)throw new Error("Invalid minKeypointScore "+o+".Should be in range [0.0, 1.0]");if(i<=0||i>20)throw new Error("Invalid refineSteps "+i+".Should be in range [1, 20]")}var dt=function(){function t(t){this.baseModel=t}return t.prototype.predictForPersonSegmentation=function(t){var e=this.baseModel.predict(t);return{segmentLogits:e.segmentation,heatmapScores:e.heatmapScores,offsets:e.offsets,displacementFwd:e.displacementFwd,displacementBwd:e.displacementBwd}},t.prototype.predictForPersonSegmentationAndPart=function(t){var e=this.baseModel.predict(t);return{segmentLogits:e.segmentation,partHeatmapLogits:e.partHeatmaps,heatmapScores:e.heatmapScores,offsets:e.offsets,displacementFwd:e.displacementFwd,displacementBwd:e.displacementBwd}},t.prototype.predictForMultiPersonInstanceSegmentationAndPart=function(t){var e=this.baseModel.predict(t);return{segmentLogits:e.segmentation,longOffsets:e.longOffsets,heatmapScores:e.heatmapScores,offsets:e.offsets,displacementFwd:e.displacementFwd,displacementBwd:e.displacementBwd,partHeatmaps:e.partHeatmaps}},t.prototype.segmentPersonActivation=function(t,e,n){var a=this;void 0===n&&(n=.5);var o=Y(t),i=o[0],s=o[1],u=Z(e,this.baseModel.outputStride,[i,s]),c=et(t,u),l=c.resized,f=c.padding,d=Object(r.tidy)((function(){var t=a.predictForPersonSegmentation(l),e=t.segmentLogits,r=t.heatmapScores,o=t.offsets,u=t.displacementFwd,c=t.displacementBwd,d=l.shape,h=d[0],m=d[1];return{segmentation:p(tt(e,[i,s],[h,m],[[f.top,f.bottom],[f.left,f.right]],!0).squeeze(),n),heatmapScores:r,offsets:o,displacementFwd:u,displacementBwd:c}})),h=d.segmentation,m=d.heatmapScores,v=d.offsets,g=d.displacementFwd,y=d.displacementBwd;return l.dispose(),{segmentation:h,heatmapScores:m,offsets:v,displacementFwd:g,displacementBwd:y,padding:f,internalResolutionHeightAndWidth:u}},t.prototype.segmentPerson=function(t,e){return void 0===e&&(e=ct),u(this,void 0,void 0,(function(){var n,r,a,o,i,u,l,p,f,d,h,m,v,g,y,x,b,w;return c(this,(function(c){switch(c.label){case 0:return pt(e=s({},ct,e)),n=this.segmentPersonActivation(t,e.internalResolution,e.segmentationThreshold),r=n.segmentation,a=n.heatmapScores,o=n.offsets,i=n.displacementFwd,u=n.displacementBwd,l=n.padding,p=n.internalResolutionHeightAndWidth,f=r.shape,d=f[0],h=f[1],[4,r.data()];case 1:return m=c.sent(),r.dispose(),[4,nt([a,o,i,u])];case 2:return v=c.sent(),g=v[0],y=v[1],x=v[2],b=v[3],w=rt(w=j(g,y,x,b,this.baseModel.outputStride,e.maxDetections,e.scoreThreshold,e.nmsRadius),[d,h],p,l,!1),a.dispose(),o.dispose(),i.dispose(),u.dispose(),[2,{height:d,width:h,data:m,allPoses:w}]}}))}))},t.prototype.segmentMultiPerson=function(t,e){return void 0===e&&(e=lt),u(this,void 0,void 0,(function(){var n,a,o,i,u,l,f,d,h,m,v,g,y,x,b,w,C,E,S,N,I,R=this;return c(this,(function(c){switch(c.label){case 0:return ft(e=s({},lt,e)),n=Y(t),a=n[0],o=n[1],i=Z(e.internalResolution,this.baseModel.outputStride,[a,o]),u=et(t,i),l=u.resized,f=u.padding,d=Object(r.tidy)((function(){var t,n=R.predictForMultiPersonInstanceSegmentationAndPart(l),r=n.segmentLogits,s=n.longOffsets,u=n.heatmapScores,c=n.offsets,d=n.displacementFwd,h=n.displacementBwd;return t=s,{segmentation:p(tt(r,[a,o],i,[[f.top,f.bottom],[f.left,f.right]],!0).squeeze(),e.segmentationThreshold),longOffsets:t,heatmapScoresRaw:u,offsetsRaw:c,displacementFwdRaw:d,displacementBwdRaw:h}})),h=d.segmentation,m=d.longOffsets,v=d.heatmapScoresRaw,g=d.offsetsRaw,y=d.displacementFwdRaw,x=d.displacementBwdRaw,[4,nt([v,g,y,x])];case 1:return b=c.sent(),w=b[0],C=b[1],E=b[2],S=b[3],N=rt(N=j(w,C,E,S,this.baseModel.outputStride,e.maxDetections,e.scoreThreshold,e.nmsRadius),[a,o],i,f,!1),[4,A(h,m,N,a,o,this.baseModel.outputStride,i,f,e.scoreThreshold,e.refineSteps,e.minKeypointScore,e.maxDetections)];case 2:return I=c.sent(),l.dispose(),h.dispose(),m.dispose(),v.dispose(),g.dispose(),y.dispose(),x.dispose(),[2,I]}}))}))},t.prototype.segmentPersonPartsActivation=function(t,e,n){var a=this;void 0===n&&(n=.5);var o=Y(t),i=o[0],s=o[1],u=Z(e,this.baseModel.outputStride,[i,s]),c=et(t,u),l=c.resized,d=c.padding,h=Object(r.tidy)((function(){var t=a.predictForPersonSegmentationAndPart(l),e=t.segmentLogits,r=t.partHeatmapLogits,o=t.heatmapScores,u=t.offsets,c=t.displacementFwd,h=t.displacementBwd,m=l.shape,v=m[0],g=m[1],y=tt(e,[i,s],[v,g],[[d.top,d.bottom],[d.left,d.right]],!0),x=tt(r,[i,s],[v,g],[[d.top,d.bottom],[d.left,d.right]],!0);return{partSegmentation:f(p(y.squeeze(),n),x),heatmapScores:o,offsets:u,displacementFwd:c,displacementBwd:h}})),m=h.partSegmentation,v=h.heatmapScores,g=h.offsets,y=h.displacementFwd,x=h.displacementBwd;return l.dispose(),{partSegmentation:m,heatmapScores:v,offsets:g,displacementFwd:y,displacementBwd:x,padding:d,internalResolutionHeightAndWidth:u}},t.prototype.segmentPersonParts=function(t,e){return void 0===e&&(e=ct),u(this,void 0,void 0,(function(){var n,r,a,o,i,u,l,p,f,d,h,m,v,g,y,x,b,w;return c(this,(function(c){switch(c.label){case 0:return pt(e=s({},ct,e)),n=this.segmentPersonPartsActivation(t,e.internalResolution,e.segmentationThreshold),r=n.partSegmentation,a=n.heatmapScores,o=n.offsets,i=n.displacementFwd,u=n.displacementBwd,l=n.padding,p=n.internalResolutionHeightAndWidth,f=r.shape,d=f[0],h=f[1],[4,r.data()];case 1:return m=c.sent(),r.dispose(),[4,nt([a,o,i,u])];case 2:return v=c.sent(),g=v[0],y=v[1],x=v[2],b=v[3],w=rt(w=j(g,y,x,b,this.baseModel.outputStride,e.maxDetections,e.scoreThreshold,e.nmsRadius),[d,h],p,l,!1),a.dispose(),o.dispose(),i.dispose(),u.dispose(),[2,{height:d,width:h,data:m,allPoses:w}]}}))}))},t.prototype.segmentMultiPersonParts=function(t,e){return void 0===e&&(e=lt),u(this,void 0,void 0,(function(){var n,a,o,i,u,l,f,h,m,v,g,y,x,b,w,C,E,S,N,I,R,T,k=this;return c(this,(function(c){switch(c.label){case 0:return ft(e=s({},lt,e)),n=Y(t),a=n[0],o=n[1],i=Z(e.internalResolution,this.baseModel.outputStride,[a,o]),u=et(t,i),l=u.resized,f=u.padding,h=Object(r.tidy)((function(){var t=k.predictForMultiPersonInstanceSegmentationAndPart(l),n=t.segmentLogits,r=t.longOffsets,s=t.heatmapScores,u=t.offsets,c=t.displacementFwd,h=t.displacementBwd,m=t.partHeatmaps,v=tt(n,[a,o],i,[[f.top,f.bottom],[f.left,f.right]],!0),g=tt(m,[a,o],i,[[f.top,f.bottom],[f.left,f.right]],!0),y=r;return{segmentation:p(v.squeeze(),e.segmentationThreshold),longOffsets:y,heatmapScoresRaw:s,offsetsRaw:u,displacementFwdRaw:c,displacementBwdRaw:h,partSegmentation:d(g)}})),m=h.segmentation,v=h.longOffsets,g=h.heatmapScoresRaw,y=h.offsetsRaw,x=h.displacementFwdRaw,b=h.displacementBwdRaw,w=h.partSegmentation,[4,nt([g,y,x,b])];case 1:return C=c.sent(),E=C[0],S=C[1],N=C[2],I=C[3],R=rt(R=j(E,S,N,I,this.baseModel.outputStride,e.maxDetections,e.scoreThreshold,e.nmsRadius),[a,o],i,f,!1),[4,O(m,v,w,R,a,o,this.baseModel.outputStride,i,f,e.scoreThreshold,e.refineSteps,e.minKeypointScore,e.maxDetections)];case 2:return T=c.sent(),l.dispose(),m.dispose(),v.dispose(),g.dispose(),y.dispose(),x.dispose(),b.dispose(),w.dispose(),[2,T]}}))}))},t.prototype.dispose=function(){this.baseModel.dispose()},t}();function ht(t){return u(this,void 0,void 0,(function(){var e,n,o,i,s,u;return c(this,(function(c){switch(c.label){case 0:if(e=t.outputStride,n=t.quantBytes,o=t.multiplier,null==r)throw new Error("Cannot find TensorFlow.js. If you are using a <script> tag, please also include @tensorflow/tfjs on the page before using this\n model.");return i=function(t,e,n){var r={1:"100",.75:"075",.5:"050"},a="model-stride"+t+".json";return 4===n?X+"float/"+r[e]+"/"+a:X+"quant"+n+"/"+r[e]+"/"+a}(e,o,n),[4,Object(a.a)(t.modelUrl||i)];case 1:return s=c.sent(),u=new m(s,e),[2,new dt(u)]}}))}))}function mt(t){return u(this,void 0,void 0,(function(){var e,n,o,i,s;return c(this,(function(u){switch(u.label){case 0:if(e=t.outputStride,n=t.quantBytes,null==r)throw new Error("Cannot find TensorFlow.js. If you are using a <script> tag, please also include @tensorflow/tfjs on the page before using this\n model.");return o=function(t,e){var n="model-stride"+t+".json";return 4===e?K+"float/"+n:K+"quant"+e+"/"+n}(e,n),[4,Object(a.a)(t.modelUrl||o)];case 1:return i=u.sent(),s=new q(i,e),[2,new dt(s)]}}))}))}function vt(t){return void 0===t&&(t=at),u(this,void 0,void 0,(function(){return c(this,(function(e){return"ResNet50"===(t=function(t){if(null==(t=t||at).architecture&&(t.architecture="MobileNetV1"),ot.indexOf(t.architecture)<0)throw new Error("Invalid architecture "+t.architecture+". Should be one of "+ot);if(null==t.outputStride&&(t.outputStride=16),it[t.architecture].indexOf(t.outputStride)<0)throw new Error("Invalid outputStride "+t.outputStride+". Should be one of "+it[t.architecture]+" for architecture "+t.architecture+".");if(null==t.multiplier&&(t.multiplier=1),st[t.architecture].indexOf(t.multiplier)<0)throw new Error("Invalid multiplier "+t.multiplier+". Should be one of "+st[t.architecture]+" for architecture "+t.architecture+".");if(null==t.quantBytes&&(t.quantBytes=4),ut.indexOf(t.quantBytes)<0)throw new Error("Invalid quantBytes "+t.quantBytes+". Should be one of "+ut+" for architecture "+t.architecture+".");return t}(t)).architecture?[2,mt(t)]:"MobileNetV1"===t.architecture?[2,ht(t)]:[2,null]}))}))}var gt=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],yt=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];function xt(t,e,n,r,a,o){var i,s,u,c,l,p,f,d,h,m,v,g,y,x,b,w,C,E,S,N,I,R=t.data,T=2*o+1,k=r-1,A=a-1,O=o+1,D=O*(O+1)/2,_=new bt,F=_;for(u=1;u<T;u++)F=F.next=new bt,u===O&&(I=F);F.next=_;var M=null,B=null;f=p=0;var P=gt[o],L=yt[o];for(s=0;s<a;s++){for(x=b=w=d=h=m=0,v=O*(C=R[p]),g=O*(E=R[p+1]),y=O*(S=R[p+2]),d+=D*C,h+=D*E,m+=D*S,F=_,u=0;u<O;u++)F.r=C,F.g=E,F.b=S,F=F.next;for(u=1;u<O;u++)c=p+((k<u?k:u)<<2),d+=(F.r=C=R[c])*(N=O-u),h+=(F.g=E=R[c+1])*N,m+=(F.b=S=R[c+2])*N,x+=C,b+=E,w+=S,F=F.next;for(M=_,B=I,i=0;i<r;i++)R[p]=d*P>>L,R[p+1]=h*P>>L,R[p+2]=m*P>>L,d-=v,h-=g,m-=y,v-=M.r,g-=M.g,y-=M.b,c=f+((c=i+o+1)<k?c:k)<<2,d+=x+=M.r=R[c],h+=b+=M.g=R[c+1],m+=w+=M.b=R[c+2],M=M.next,v+=C=B.r,g+=E=B.g,y+=S=B.b,x-=C,b-=E,w-=S,B=B.next,p+=4;f+=r}for(i=0;i<r;i++){for(b=w=x=h=m=d=0,v=O*(C=R[p=i<<2]),g=O*(E=R[p+1]),y=O*(S=R[p+2]),d+=D*C,h+=D*E,m+=D*S,F=_,u=0;u<O;u++)F.r=C,F.g=E,F.b=S,F=F.next;for(l=r,u=1;u<=o;u++)p=l+i<<2,d+=(F.r=C=R[p])*(N=O-u),h+=(F.g=E=R[p+1])*N,m+=(F.b=S=R[p+2])*N,x+=C,b+=E,w+=S,F=F.next,u<A&&(l+=r);for(p=i,M=_,B=I,s=0;s<a;s++)R[c=p<<2]=d*P>>L,R[c+1]=h*P>>L,R[c+2]=m*P>>L,d-=v,h-=g,m-=y,v-=M.r,g-=M.g,y-=M.b,c=i+((c=s+O)<A?c:A)*r<<2,d+=x+=M.r=R[c],h+=b+=M.g=R[c+1],m+=w+=M.b=R[c+2],M=M.next,v+=C=B.r,g+=E=B.g,y+=S=B.b,x-=C,b-=E,w-=S,B=B.next,p+=r}return t}var bt=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.r=0,this.g=0,this.b=0,this.a=0,this.next=null};const wt=URL.createObjectURL(new Blob(["\n var timer;\n\n onmessage = function(request) {\n switch (request.data.id) {\n case 1: {\n timer = setTimeout(() => {\n postMessage({ id: 3 });\n }, request.data.timeMs);\n break;\n }\n case 2: {\n if (timer) {\n clearTimeout(timer);\n }\n break;\n }\n }\n };\n"],{type:"application/javascript"}));class Ct{constructor(t){this._bpModel=t,this._onMaskFrameTimer=this._onMaskFrameTimer.bind(this),this._outputCanvasElement=document.createElement("canvas"),this._outputCanvasElement.getContext("2d"),this._inputVideoElement=document.createElement("video"),this._inputVideoCanvasElement=document.createElement("canvas")}async _onMaskFrameTimer(t){3===t.data.id&&await this._renderMask()}async _renderMask(){this._maskInProgress||(this._maskInProgress=!0,this._bpModel.segmentPerson(this._inputVideoElement,{internalResolution:"low",maxDetections:1,segmentationThreshold:.7,flipHorizontal:!1,scoreThreshold:.2}).then(t=>{this._segmentationData=t,this._maskInProgress=!1}));const t=this._inputVideoCanvasElement.getContext("2d");t.drawImage(this._inputVideoElement,0,0);const e=t.getImageData(0,0,this._inputVideoCanvasElement.width,this._inputVideoCanvasElement.height);if(this._segmentationData){const t=new ImageData(e.data.slice(),e.width,e.height);xt(t,0,0,e.width,e.height,12);for(let n=0;n<this._outputCanvasElement.width;n++)for(let r=0;r<this._outputCanvasElement.height;r++){const a=r*this._outputCanvasElement.width+n;0===this._segmentationData.data[a]&&(e.data[4*a]=t.data[4*a],e.data[4*a+1]=t.data[4*a+1],e.data[4*a+2]=t.data[4*a+2],e.data[4*a+3]=t.data[4*a+3])}}this._outputCanvasElement.getContext("2d").putImageData(e,0,0),this._maskFrameTimerWorker.postMessage({id:1,timeMs:1e3/30})}isEnabled(t){return t.isVideoTrack()&&"camera"===t.videoType}startEffect(t){this._maskFrameTimerWorker=new Worker(wt,{name:"Blur effect worker"}),this._maskFrameTimerWorker.onmessage=this._onMaskFrameTimer;const e=t.getVideoTracks()[0],{height:n,frameRate:r,width:a}=e.getSettings?e.getSettings():e.getConstraints();return this._outputCanvasElement.width=parseInt(a,10),this._outputCanvasElement.height=parseInt(n,10),this._inputVideoCanvasElement.width=parseInt(a,10),this._inputVideoCanvasElement.height=parseInt(n,10),this._inputVideoElement.width=parseInt(a,10),this._inputVideoElement.height=parseInt(n,10),this._inputVideoElement.autoplay=!0,this._inputVideoElement.srcObject=t,this._inputVideoElement.onloadeddata=()=>{this._maskFrameTimerWorker.postMessage({id:1,timeMs:1e3/30})},this._outputCanvasElement.captureStream(parseInt(r,10))}stopEffect(){this._maskFrameTimerWorker.postMessage({id:2}),this._maskFrameTimerWorker.terminate()}}async function Et(){if(!MediaStreamTrack.prototype.getSettings&&!MediaStreamTrack.prototype.getConstraints)throw new Error("JitsiStreamBlurEffect not supported!");const t=await vt({architecture:"MobileNetV1",outputStride:16,multiplier:.5,quantBytes:2});return new Ct(t)}}]);
|
|
//# sourceMappingURL=video-blur-effect.min.map
|