leadal-auth 0.0.28 → 0.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -52,7 +52,7 @@ function r(n,x){if(!i.canUseDOM||x&&!("addEventListener"in document))return!1;va
52
52
  * (c) 2019 Evan You
53
53
  * @license MIT
54
54
  */
55
- function Et(n){var x=Number(n.version.split(".")[0]);if(x>=2)n.mixin({beforeCreate:e});else{var t=n.prototype._init;n.prototype._init=function(n){void 0===n&&(n={}),n.init=n.init?[e].concat(n.init):e,t.call(this,n)}}function e(){var n=this.$options;n.store?this.$store="function"===typeof n.store?n.store():n.store:n.parent&&n.parent.$store&&(this.$store=n.parent.$store)}}var St="undefined"!==typeof window&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function It(n){St&&(n._devtoolHook=St,St.emit("vuex:init",n),St.on("vuex:travel-to-state",function(x){n.replaceState(x)}),n.subscribe(function(n,x){St.emit("vuex:mutation",n,x)}))}function Dt(n,x){Object.keys(n).forEach(function(t){return x(n[t],t)})}function Ot(n){return null!==n&&"object"===typeof n}function _t(n){return n&&"function"===typeof n.then}var Tt=function(n,x){this.runtime=x,this._children=Object.create(null),this._rawModule=n;var t=n.state;this.state=("function"===typeof t?t():t)||{}},Rt={namespaced:{configurable:!0}};Rt.namespaced.get=function(){return!!this._rawModule.namespaced},Tt.prototype.addChild=function(n,x){this._children[n]=x},Tt.prototype.removeChild=function(n){delete this._children[n]},Tt.prototype.getChild=function(n){return this._children[n]},Tt.prototype.update=function(n){this._rawModule.namespaced=n.namespaced,n.actions&&(this._rawModule.actions=n.actions),n.mutations&&(this._rawModule.mutations=n.mutations),n.getters&&(this._rawModule.getters=n.getters)},Tt.prototype.forEachChild=function(n){Dt(this._children,n)},Tt.prototype.forEachGetter=function(n){this._rawModule.getters&&Dt(this._rawModule.getters,n)},Tt.prototype.forEachAction=function(n){this._rawModule.actions&&Dt(this._rawModule.actions,n)},Tt.prototype.forEachMutation=function(n){this._rawModule.mutations&&Dt(this._rawModule.mutations,n)},Object.defineProperties(Tt.prototype,Rt);var Bt=function(n){this.register([],n,!1)};function Mt(n,x,t){if(x.update(t),t.modules)for(var e in t.modules){if(!x.getChild(e))return void 0;Mt(n.concat(e),x.getChild(e),t.modules[e])}}Bt.prototype.get=function(n){return n.reduce(function(n,x){return n.getChild(x)},this.root)},Bt.prototype.getNamespace=function(n){var x=this.root;return n.reduce(function(n,t){return x=x.getChild(t),n+(x.namespaced?t+"/":"")},"")},Bt.prototype.update=function(n){Mt([],this.root,n)},Bt.prototype.register=function(n,x,t){var e=this;void 0===t&&(t=!0);var i=new Tt(x,t);if(0===n.length)this.root=i;else{var r=this.get(n.slice(0,-1));r.addChild(n[n.length-1],i)}x.modules&&Dt(x.modules,function(x,i){e.register(n.concat(i),x,t)})},Bt.prototype.unregister=function(n){var x=this.get(n.slice(0,-1)),t=n[n.length-1];x.getChild(t).runtime&&x.removeChild(t)};var Nt;var Ft=function(n){var x=this;void 0===n&&(n={}),!Nt&&"undefined"!==typeof window&&window.Vue&&$t(window.Vue);var t=n.plugins;void 0===t&&(t=[]);var e=n.strict;void 0===e&&(e=!1),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new Bt(n),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new Nt;var i=this,r=this,o=r.dispatch,s=r.commit;this.dispatch=function(n,x){return o.call(i,n,x)},this.commit=function(n,x,t){return s.call(i,n,x,t)},this.strict=e;var h=this._modules.root.state;Vt(this,h,[],this._modules.root),Ut(this,h),t.forEach(function(n){return n(x)});var u=void 0!==n.devtools?n.devtools:Nt.config.devtools;u&&It(this)},Pt={state:{configurable:!0}};function Lt(n,x){return x.indexOf(n)<0&&x.push(n),function(){var t=x.indexOf(n);t>-1&&x.splice(t,1)}}function Ht(n,x){n._actions=Object.create(null),n._mutations=Object.create(null),n._wrappedGetters=Object.create(null),n._modulesNamespaceMap=Object.create(null);var t=n.state;Vt(n,t,[],n._modules.root,!0),Ut(n,t,x)}function Ut(n,x,t){var e=n._vm;n.getters={};var i=n._wrappedGetters,r={};Dt(i,function(x,t){r[t]=function(){return x(n)},Object.defineProperty(n.getters,t,{get:function(){return n._vm[t]},enumerable:!0})});var o=Nt.config.silent;Nt.config.silent=!0,n._vm=new Nt({data:{$$state:x},computed:r}),Nt.config.silent=o,n.strict&&Jt(n),e&&(t&&n._withCommit(function(){e._data.$$state=null}),Nt.nextTick(function(){return e.$destroy()}))}function Vt(n,x,t,e,i){var r=!t.length,o=n._modules.getNamespace(t);if(e.namespaced&&(n._modulesNamespaceMap[o]=e),!r&&!i){var s=Xt(x,t.slice(0,-1)),h=t[t.length-1];n._withCommit(function(){Nt.set(s,h,e.state)})}var u=e.context=Wt(n,o,t);e.forEachMutation(function(x,t){var e=o+t;Gt(n,e,x,u)}),e.forEachAction(function(x,t){var e=x.root?t:o+t,i=x.handler||x;Kt(n,e,i,u)}),e.forEachGetter(function(x,t){var e=o+t;Yt(n,e,x,u)}),e.forEachChild(function(e,r){Vt(n,x,t.concat(r),e,i)})}function Wt(n,x,t){var e=""===x,i={dispatch:e?n.dispatch:function(t,e,i){var r=Zt(t,e,i),o=r.payload,s=r.options,h=r.type;return s&&s.root||(h=x+h),n.dispatch(h,o)},commit:e?n.commit:function(t,e,i){var r=Zt(t,e,i),o=r.payload,s=r.options,h=r.type;s&&s.root||(h=x+h),n.commit(h,o,s)}};return Object.defineProperties(i,{getters:{get:e?function(){return n.getters}:function(){return Qt(n,x)}},state:{get:function(){return Xt(n.state,t)}}}),i}function Qt(n,x){var t={},e=x.length;return Object.keys(n.getters).forEach(function(i){if(i.slice(0,e)===x){var r=i.slice(e);Object.defineProperty(t,r,{get:function(){return n.getters[i]},enumerable:!0})}}),t}function Gt(n,x,t,e){var i=n._mutations[x]||(n._mutations[x]=[]);i.push(function(x){t.call(n,e.state,x)})}function Kt(n,x,t,e){var i=n._actions[x]||(n._actions[x]=[]);i.push(function(x,i){var r=t.call(n,{dispatch:e.dispatch,commit:e.commit,getters:e.getters,state:e.state,rootGetters:n.getters,rootState:n.state},x,i);return _t(r)||(r=Promise.resolve(r)),n._devtoolHook?r.catch(function(x){throw n._devtoolHook.emit("vuex:error",x),x}):r})}function Yt(n,x,t,e){n._wrappedGetters[x]||(n._wrappedGetters[x]=function(n){return t(e.state,e.getters,n.state,n.getters)})}function Jt(n){n._vm.$watch(function(){return this._data.$$state},function(){0},{deep:!0,sync:!0})}function Xt(n,x){return x.length?x.reduce(function(n,x){return n[x]},n):n}function Zt(n,x,t){return Ot(n)&&n.type&&(t=x,x=n,n=n.type),{type:n,payload:x,options:t}}function $t(n){Nt&&n===Nt||(Nt=n,Et(Nt))}Pt.state.get=function(){return this._vm._data.$$state},Pt.state.set=function(n){0},Ft.prototype.commit=function(n,x,t){var e=this,i=Zt(n,x,t),r=i.type,o=i.payload,s=(i.options,{type:r,payload:o}),h=this._mutations[r];h&&(this._withCommit(function(){h.forEach(function(n){n(o)})}),this._subscribers.forEach(function(n){return n(s,e.state)}))},Ft.prototype.dispatch=function(n,x){var t=this,e=Zt(n,x),i=e.type,r=e.payload,o={type:i,payload:r},s=this._actions[i];if(s){try{this._actionSubscribers.filter(function(n){return n.before}).forEach(function(n){return n.before(o,t.state)})}catch(Di){0}var h=s.length>1?Promise.all(s.map(function(n){return n(r)})):s[0](r);return h.then(function(n){try{t._actionSubscribers.filter(function(n){return n.after}).forEach(function(n){return n.after(o,t.state)})}catch(Di){0}return n})}},Ft.prototype.subscribe=function(n){return Lt(n,this._subscribers)},Ft.prototype.subscribeAction=function(n){var x="function"===typeof n?{before:n}:n;return Lt(x,this._actionSubscribers)},Ft.prototype.watch=function(n,x,t){var e=this;return this._watcherVM.$watch(function(){return n(e.state,e.getters)},x,t)},Ft.prototype.replaceState=function(n){var x=this;this._withCommit(function(){x._vm._data.$$state=n})},Ft.prototype.registerModule=function(n,x,t){void 0===t&&(t={}),"string"===typeof n&&(n=[n]),this._modules.register(n,x),Vt(this,this.state,n,this._modules.get(n),t.preserveState),Ut(this,this.state)},Ft.prototype.unregisterModule=function(n){var x=this;"string"===typeof n&&(n=[n]),this._modules.unregister(n),this._withCommit(function(){var t=Xt(x.state,n.slice(0,-1));Nt.delete(t,n[n.length-1])}),Ht(this)},Ft.prototype.hotUpdate=function(n){this._modules.update(n),Ht(this,!0)},Ft.prototype._withCommit=function(n){var x=this._committing;this._committing=!0,n(),this._committing=x},Object.defineProperties(Ft.prototype,Pt);var ne=oe(function(n,x){var t={};return re(x).forEach(function(x){var e=x.key,i=x.val;t[e]=function(){var x=this.$store.state,t=this.$store.getters;if(n){var e=se(this.$store,"mapState",n);if(!e)return;x=e.context.state,t=e.context.getters}return"function"===typeof i?i.call(this,x,t):x[i]},t[e].vuex=!0}),t}),xe=oe(function(n,x){var t={};return re(x).forEach(function(x){var e=x.key,i=x.val;t[e]=function(){var x=[],t=arguments.length;while(t--)x[t]=arguments[t];var e=this.$store.commit;if(n){var r=se(this.$store,"mapMutations",n);if(!r)return;e=r.context.commit}return"function"===typeof i?i.apply(this,[e].concat(x)):e.apply(this.$store,[i].concat(x))}}),t}),te=oe(function(n,x){var t={};return re(x).forEach(function(x){var e=x.key,i=x.val;i=n+i,t[e]=function(){if(!n||se(this.$store,"mapGetters",n))return this.$store.getters[i]},t[e].vuex=!0}),t}),ee=oe(function(n,x){var t={};return re(x).forEach(function(x){var e=x.key,i=x.val;t[e]=function(){var x=[],t=arguments.length;while(t--)x[t]=arguments[t];var e=this.$store.dispatch;if(n){var r=se(this.$store,"mapActions",n);if(!r)return;e=r.context.dispatch}return"function"===typeof i?i.apply(this,[e].concat(x)):e.apply(this.$store,[i].concat(x))}}),t}),ie=function(n){return{mapState:ne.bind(null,n),mapGetters:te.bind(null,n),mapMutations:xe.bind(null,n),mapActions:ee.bind(null,n)}};function re(n){return Array.isArray(n)?n.map(function(n){return{key:n,val:n}}):Object.keys(n).map(function(x){return{key:x,val:n[x]}})}function oe(n){return function(x,t){return"string"!==typeof x?(t=x,x=""):"/"!==x.charAt(x.length-1)&&(x+="/"),n(x,t)}}function se(n,x,t){var e=n._modulesNamespaceMap[t];return e}var he={Store:Ft,install:$t,version:"3.1.0",mapState:ne,mapMutations:xe,mapGetters:te,mapActions:ee,createNamespacedHelpers:ie},ue=he;At().use(ue);var ae=new ue.Store({state:{baseUrl:"http://dftdm.netiler.com",authUrl:"http://10.1.24.63:8080",websocketUrl:"ws://127.0.0.1:38280",fingerprintDeviceSN:""},getters:{getFingerprintDeviceSN:n=>n.fingerprintDeviceSN,faceApiUrl:n=>n.faceApiUrl,authUrl:n=>n.authUrl},mutations:{SET_BASE_URL(n,x){n.baseUrl=x},SET_AUTH_URL(n,x){n.authUrl=x},SET_FACE_API_URL(n,x){n.faceApiUrl=x},SET_WEBSOCKET_URL(n,x){n.websocketUrl=x},SET_FINGERPRINT_DEVICE_SN(n,x){n.fingerprintDeviceSN=x}},actions:{updateFingerprintDeviceSN({commit:n},x){n("SET_FINGERPRINT_DEVICE_SN",x)},updateAuthUrl({commit:n},x){n("SET_AUTH_URL",x)},updateFaceApiUrl({commit:n},x){n("SET_FACE_API_URL",x)}},modules:{}});const ge=kt.create({timeout:5e4});ge.interceptors.request.use(n=>(n.baseURL=ae.state.baseUrl,n),n=>(console.log(n),Promise.reject(n))),ge.interceptors.response.use(n=>{const x=n.data;return x.code&&0!==x.code&&200!==x.code?((0,qt.Message)({message:x.message||"请求失败,请稍后再试",type:"error",duration:5e3}),Promise.reject(new Error(x.message||"Error"))):x},n=>(console.log("err"+n),(0,qt.Message)({message:n.message,type:"error",duration:5e3}),Promise.reject(n)));var le=ge;function ce(n){return le({url:"/api/fencing-component-api/organization/tree",method:"get",params:n})}function de(n){return le({url:"/api/fencing-component-api/organization/save",method:"post",data:n})}function fe(n){return le({url:"/api/fencing-component-api/organization/load",method:"get",params:n})}function pe(n){return le({url:`/api/fencing-component-api/user/page/${n.page}/${n.size}`,method:"get",params:n})}function ye(n){return le({url:`/api/fencing-component-api/user/delete?ids=${n.ids}`,method:"delete",params:n})}function me(n){return le({url:"/api/fencing-component-api/user/update-status",method:"post",data:n})}function be(n){return le({url:"/api/fencing-component-api/user/reset-password",method:"post",data:n})}function ze(n){return le({url:"/api/fencing-component-api/organization/delete",method:"delete",params:n})}function ve(n){return le({url:"/api/fencing-component-api/user/save",method:"post",data:n})}function je(n){return le({url:"/api/fencing-component-api/user/move",method:"post",data:n})}function we(n){return le({url:"/api/fencing-component-api/user/load",method:"get",params:n})}var ke=function(){var n=this,x=n._self._c;return x("el-dialog",{attrs:{visible:n.visible,title:n.edit&&n.edit.id?"修改机构":"新增机构",width:"540px","destroy-on-close":!0,"close-on-click-modal":!1,"before-close":n.h_close,"append-to-body":!0},on:{closed:n.closed}},[x("el-form",{ref:"form",attrs:{model:n.form,rules:n.rules,"label-width":"120px",size:"small"}},[x("el-form-item",{attrs:{label:"父级节点",prop:"parentId"}},[x("tree-select",{attrs:{value:n.form.parentId,defaultLabel:n.form.parentName,defaultProps:{label:"caption",value:"id",children:"children",isLeaf:n=>!1===n.hasChild},load:n.f_loadNode},on:{"update:value":function(x){return n.$set(n.form,"parentId",x)},setNode:n.h_setNode}})],1),x("el-form-item",{attrs:{label:"机构名称",prop:"name"}},[x("el-input",{attrs:{maxlength:"50","show-word-limit":""},model:{value:n.form.name,callback:function(x){n.$set(n.form,"name",x)},expression:"form.name"}})],1),x("el-form-item",{attrs:{label:"机构类型",prop:"type"}},[x("el-select",{staticStyle:{width:"100%"},attrs:{placeholder:"请选择机构类型"},model:{value:n.form.type,callback:function(x){n.$set(n.form,"type",x)},expression:"form.type"}},[x("el-option",{attrs:{label:"机关单位",value:0}}),x("el-option",{attrs:{label:"职能部门",value:1}})],1)],1),x("el-form-item",{attrs:{label:"排序",prop:"sequence"}},[x("el-input-number",{staticStyle:{width:"100%"},attrs:{min:1,max:9999999},model:{value:n.form.sequence,callback:function(x){n.$set(n.form,"sequence",x)},expression:"form.sequence"}})],1)],1),x("div",{staticClass:"dialog-footer f_center",attrs:{slot:"footer"},slot:"footer"},[x("el-button",{attrs:{loading:n.loading},on:{click:n.h_close}},[n._v(" 取消 ")]),x("el-button",{attrs:{type:"primary",loading:n.loading},on:{click:n.h_submit}},[n._v(" 确定 ")])],1)],1)},qe=[],Ce=function(){var n=this,x=n._self._c;return x("div",{staticClass:"tree-select",on:{click:function(n){n.stopPropagation()}}},[x("el-input",{attrs:{placeholder:n.placeholder,clearable:""},nativeOn:{click:function(x){return n.toggleTree.apply(null,arguments)}},model:{value:n.selectedLabel,callback:function(x){n.selectedLabel=x},expression:"selectedLabel"}}),x("div",{directives:[{name:"show",rawName:"v-show",value:n.showTree,expression:"showTree"}],staticClass:"tree-container"},[x("el-scrollbar",{staticStyle:{"max-height":"300px"}},[x("el-tree",{ref:"tree",attrs:{lazy:!0,load:n.load,props:n.defaultProps,"node-key":"id"},on:{"node-click":n.handleNodeClick}})],1)],1)],1)},Ae=[],Ee={name:"tree-select",props:{value:[String,Number,Array],placeholder:{type:String,default:"请选择"},defaultLabel:{type:String,default:""},load:{type:Function,default:()=>{}},defaultProps:{type:Object,default:()=>({})}},data(){return{showTree:!1,selectedLabel:""}},watch:{value:{handler(n){n?this.updateLabel(n):this.selectedLabel="根目录"},immediate:!0}},mounted(){document.addEventListener("click",this.handleOutsideClick)},beforeDestroy(){document.removeEventListener("click",this.handleOutsideClick)},methods:{toggleTree(){this.showTree=!this.showTree,console.log("this.showTree",this.showTree)},handleNodeClick(n){this.$nextTick(()=>{this.$refs.tree.setChecked(n,!0,!1),this.handleSingleSelect(n),this.showTree=!1})},handleSingleSelect(n){const x=this.$refs.tree.getCheckedNodes(!1,!0);x.forEach(x=>{x.id!==n.id&&this.$refs.tree.setChecked(x,!1,!1)}),this.$emit("input",n.id),this.$emit("setNode",n),this.selectedLabel=n[this.defaultProps.label]},updateLabel(){this.selectedLabel=this.defaultLabel||"根目录"},handleOutsideClick(){this.showTree=!1}}},Se=Ee;function Ie(n,x,t,e,i,r,o,s){var h,u="function"===typeof n?n.options:n;if(x&&(u.render=x,u.staticRenderFns=t,u._compiled=!0),e&&(u.functional=!0),r&&(u._scopeId="data-v-"+r),o?(h=function(n){n=n||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,n||"undefined"===typeof __VUE_SSR_CONTEXT__||(n=__VUE_SSR_CONTEXT__),i&&i.call(this,n),n&&n._registeredComponents&&n._registeredComponents.add(o)},u._ssrRegister=h):i&&(h=s?function(){i.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:i),h)if(u.functional){u._injectStyles=h;var a=u.render;u.render=function(n,x){return h.call(x),a(n,x)}}else{var g=u.beforeCreate;u.beforeCreate=g?[].concat(g,h):[h]}return{exports:n,options:u}}var De=Ie(Se,Ce,Ae,!1,null,"109477bd",null),Oe=De.exports,_e={components:{TreeSelect:Oe},props:{edit:{type:Object,default:()=>{}},beforeCreate:{type:Function,default:()=>!0},parentInfo:{type:Object,default:()=>{}}},data(){return{visible:!1,form:{sequence:1,type:0},rules:{name:[{required:!0,message:"机构名称不能为空!"},{max:50,message:"机构名称不能超过50个字符!"}],type:[{required:!0,message:"机构类型不能为空!"}],sequence:[{required:!0,message:"排序不能为空!"}]},loading:!1}},mounted(){this.visible=!0,this.edit&&fe({id:this.edit.id}).then(n=>{this.form={...this.edit,name:this.edit.caption,type:n.data.type,sequence:n.data.sequence}}),this.parentInfo&&(this.$set(this.form,"parentId",this.parentInfo?.id),this.$set(this.form,"parentName",this.parentInfo?.caption))},methods:{async f_loadNode(n,x){if(0===n.level){const n=await ce();x(n.data||[])}else{const t=await ce({parentId:n.data.id});t.data.forEach(x=>{x.parentId=n.data.id,x.parentName=n.data.caption}),x(t.data||[])}},h_setNode(n){this.$set(this.form,"parentId",n?.id),this.$set(this.form,"parentName",n?.caption),this.$forceUpdate()},h_close(){this.visible=!1},closed(){this.$emit("closed")},h_submit(){this.$refs.form.validate(async n=>{if(n){this.loading=!0,this.form.id||this.$set(this.form,"sequence",1);const n=this.beforeCreate(this.form);if(!n)return void(this.loading=!1);try{if(await de({...this.form}),this.form.parentId){const n=await ce({parentId:this.form.parentId});n.data.forEach(n=>{n.parentId=this.form.parentId,n.parentName=this.form.parentName}),this.$emit("refresh","current",this.form.parentId,n.data)}else{const n=await ce();this.$emit("refresh","all",null,n.data)}this.h_close(),this.$message.success(this.form.id?"修改成功!":"新增成功!")}finally{this.loading=!1}}})}}},Te=_e,Re=Ie(Te,ke,qe,!1,null,"81fd4a44",null),Be=Re.exports,Me={name:"organ-tree",components:{EditUserDialog:Be},props:{beforeCreate:{type:Function,default:()=>!0}},data(){return{parentInfo:null,props:{label:"caption"},form:{sequence:1},rules:{name:[{required:!0,message:"机构名称不能为空"}]},edit:null,visible:!1}},methods:{async refreshTree(n,x,t){"current"===n?this.$refs.tree.updateKeyChildren(x,t):this.$refs.tree.store.setData(t||[])},async f_loadNode(n,x){if(0===n.level){const n=await ce();x(n.data||[])}else{const t=await ce({parentId:n.data.id});t.data.forEach(x=>{x.parentId=n.data.id,x.parentName=n.data.caption}),x(t.data||[])}},h_showOrgConfig(n){this.edit=n,this.edit&&(this.parentInfo=null),this.visible=!0},h_delOrg(n){this.$confirm("确认删除该项?","提示","warning").then(async x=>{x&&(await ze({ids:n.id}),this.$refs.tree.remove(n),this.$message.success("删除成功!"))}).catch(n=>{console.error("用户状态 err",n)})},h_nodeClick(n){this.parentInfo=n,this.$emit("load-user-data",n)}}},Ne=Me,Fe=Ie(Ne,s,h,!1,null,"5323d1c4",null),Pe=Fe.exports,Le=function(){var n=this,x=n._self._c;return x("div",{directives:[{name:"loading",rawName:"v-loading",value:n.loading,expression:"loading"}],staticClass:"leadal-user-table"},[x("div",{staticClass:"user-opt f_between"},[x("div",[x("el-button",{staticStyle:{padding:"7px 20px","border-radius":"8px"},attrs:{disabled:!n.organId,type:"primary",icon:"el-icon-circle-plus-outline"},on:{click:n.h_addUser}},[n._v("新增")]),x("el-button",{staticStyle:{padding:"7px 20px","border-radius":"8px"},attrs:{disabled:!n.organId,type:"danger",plain:"",icon:"el-icon-delete"},on:{click:n.h_removeUser}},[n._v("删除")]),x("el-button",{staticStyle:{padding:"7px 20px","border-radius":"8px"},attrs:{disabled:!n.organId,type:"warning",plain:"",icon:"el-icon-refresh"},on:{click:n.h_changeOrg}},[n._v("调换")]),x("el-button",{staticStyle:{padding:"7px 20px","border-radius":"8px"},attrs:{disabled:!n.organId,plain:"",icon:"el-icon-circle-check"},on:{click:function(x){return n.h_statusChange(!0)}}},[n._v("启用")]),x("el-button",{staticStyle:{padding:"7px 20px","border-radius":"8px"},attrs:{disabled:!n.organId,plain:"",icon:"el-icon-circle-close"},on:{click:function(x){return n.h_statusChange(!1)}}},[n._v("禁用")]),x("el-button",{staticStyle:{padding:"7px 20px","border-radius":"8px"},attrs:{disabled:!n.organId,plain:"",icon:"el-icon-refresh"},on:{click:n.h_resetPwd}},[n._v("密码重置")])],1),x("el-input",{staticClass:"input-with-select",staticStyle:{width:"240px"},attrs:{size:"small",placeholder:"请输入用户名称"},nativeOn:{keyup:function(x){return!x.type.indexOf("key")&&n._k(x.keyCode,"enter",13,x.key,"Enter")?null:n.handleSearch.apply(null,arguments)}},model:{value:n.keyWord,callback:function(x){n.keyWord=x},expression:"keyWord"}},[x("el-button",{attrs:{slot:"append",icon:"el-icon-search"},on:{click:n.handleSearch},slot:"append"})],1)],1),x("div",{staticClass:"user-table-main"},[x("div",{staticClass:"user-table-content"},[x("el-table",{ref:"table",attrs:{data:n.table.data,size:"medium",stripe:"",height:"100%","header-cell-style":{background:"#f7f8fa"}},on:{"selection-change":n.h_selectionChange,"row-click":n.h_rowClick}},[x("el-table-column",{attrs:{type:"selection",width:"55"}}),x("el-table-column",{attrs:{label:"序号",type:"index",width:"50"}}),x("el-table-column",{attrs:{prop:"name",label:"用户名称"}}),x("el-table-column",{attrs:{prop:"spelling",label:"拼音"}}),x("el-table-column",{attrs:{prop:"secretLevelLabel",label:"密级"}}),x("el-table-column",{attrs:{prop:"enabled",label:"状态"},scopedSlots:n._u([{key:"default",fn:function({row:t}){return[x("span",[n._v(n._s(t.enabled&&t.accountEnabled?"启用":"禁用"))])]}}])}),x("el-table-column",{attrs:{label:"操作","header-align":"center",align:"center",width:"80"},scopedSlots:n._u([{key:"default",fn:function({row:t}){return[x("span",{staticClass:"row-opt",on:{click:function(x){return n.h_rowOpt(t)}}},[n._v("编辑")])]}}])})],1)],1),x("div",{staticClass:"user-table-pagination f_end"},[x("el-pagination",{staticClass:"pagination",attrs:{layout:"total, sizes, prev, pager, next, jumper","current-page":n.table.pagination.current,"page-size":n.table.pagination.size,total:n.table.pagination.total},on:{"size-change":n.h_sizeChange,"current-change":n.h_currentChange}})],1)]),n.visible?x("el-dialog",{attrs:{visible:n.visible,title:"调换机构",width:"540px","destroy-on-close":!0,"close-on-click-modal":!1,"before-close":n.h_close,"append-to-body":!0}},[x("el-form",{ref:"form",attrs:{model:n.form,rules:n.rules,"label-width":"120px",size:"small"}},[x("el-form-item",{attrs:{label:"所属机构",prop:"id"}},[x("tree-select",{attrs:{value:n.form.id,defaultLabel:n.form.caption,defaultProps:{label:"caption",value:"id",children:"children",isLeaf:n=>!1===n.hasChild},load:n.f_loadNode},on:{"update:value":function(x){return n.$set(n.form,"id",x)},setNode:n.h_setNode}})],1)],1),x("div",{staticClass:"dialog-footer f_center",attrs:{slot:"footer"},slot:"footer"},[x("el-button",{attrs:{size:"mini"},on:{click:n.h_close}},[n._v(" 取消 ")]),x("el-button",{attrs:{type:"primary",size:"mini"},on:{click:n.h_submit}},[n._v(" 确定 ")])],1)],1):n._e()],1)},He=[];const Ue={0:"男",1:"女",2:"保密"},Ve=[{label:"公开",value:0},{label:"一般",value:1},{label:"重要",value:2},{label:"核心",value:3}],We={0:"公开",1:"一般",2:"重要",3:"核心"},Qe=(n,x=!0)=>{const t=[];for(const e in n)t.push({label:n[e],value:x?parseInt(e):e});return t};var Ge={name:"user-table",props:{organ:{type:Object,default:()=>{}}},components:{TreeSelect:Oe},data(){return{loading:!1,visible:!1,selection:[],form:{},rules:{id:[{required:!0,message:"所属机构不能为空!"}]},node:{},row:{},search:"",keyWord:"",table:{data:[],pagination:{current:1,size:10,total:0}}}},computed:{organId(){return!!this.organ?.id}},watch:{search(){this.f_loadData(!0)}},methods:{handleSearch(){this.search=this.keyWord},f_init(n){this.node=n,this.f_loadData()},async f_loadData(n=!1){this.loading=!0;try{n&&this.$set(this.table.pagination,"current",1);const x={keyword:this.search||void 0,organId:this.node.id,page:this.table.pagination.current,size:this.table.pagination.size},t=await pe(x);t.data.data.forEach(n=>{n.enabledLabel=n.enabled?"启用":"禁用",n.secretLevelLabel=We[n.secretLevel]}),this.$set(this.table,"data",t.data.data||[]),this.table.pagination.total=t.data.total,this.loading=!1}catch(x){this.loading=!1}},async f_loadNode(n,x){if(0===n.level){const n=await ce();x(n.data||[])}else{const t=await ce({parentId:n.data.id});t.data.forEach(x=>{x.parentId=n.data.id,x.parentName=n.data.caption}),x(t.data||[])}},h_addUser(){this.$emit("drawer")},h_selectionChange(n){this.selection=n},h_rowClick(n){this.$refs.table.toggleRowSelection(n)},h_rowOpt(n){this.$emit("drawer",n.id,n)},h_changeOrg(){if(this.form={...this.node},!this.selection?.length)return this.$message.warning("请至少选择一条操作项!");this.visible=!0},h_resetPwd(){if(!this.selection?.length)return this.$message.warning("请至少选择一条操作项!");this.$confirm("确认重置选中的用户密码?","提示","warning").then(async n=>{if(n){const n=this.selection.map(n=>n.id);await be({ids:n}),this.f_loadData(),this.$message.success("重置密码成功!")}}).catch(n=>{console.error("用户状态 err",n)})},async h_statusChange(n){if(!this.selection?.length)return this.$message.warning("请至少选择一条操作项!");this.$confirm("确认修改选中的用户状态?","提示","warning").then(async x=>{if(x){const x=this.selection.map(n=>n.id);await me({ids:x,status:n}),this.f_loadData(),this.$message.success((n?"启用":"禁用")+"成功!")}}).catch(n=>{console.error("用户状态 err",n)})},h_removeUser(){if(!this.selection?.length)return this.$message.warning("请至少选择一条操作项!");this.$confirm("确认删除选中的用户?","提示","warning").then(async n=>{if(n){const n=this.selection.map(n=>n.id);await ye({ids:n.join(",")}),this.f_loadData(!0),this.$message.success("删除成功!")}}).catch(n=>{console.error("删除用户 err",n)})},h_currentChange(n){this.table.pagination.current=n,this.f_loadData()},h_sizeChange(n){this.table.pagination.size=n,this.f_loadData()},async h_submit(){const n=this.selection.map(n=>n.id);try{await je({entityIds:n,targetId:this.form.id}),this.f_loadData(!0),this.h_close(),this.$message.success("调换机构成功!"),this.$emit("refreshTree")}catch(x){console.error("调换机构 err",x)}},h_setNode(n){this.$set(this.form,"id",n.id),this.$set(this.form,"caption",n.caption)},h_close(){this.visible=!1}}},Ke=Ge,Ye=Ie(Ke,Le,He,!1,null,"7a1a9302",null),Je=Ye.exports,Xe=function(){var n=this,x=n._self._c;return x("el-drawer",{style:n.drawerStyle,attrs:{size:"100%",visible:n.visible,"with-header":!1,modal:!1},on:{closed:n.closed}},[x("div",{staticClass:"user-drawer"},[x("div",{staticClass:"user-drawer-header f_between"},[x("div",{staticClass:"icon-back",on:{click:n.h_back}},[x("i",{staticClass:"el-icon-arrow-left",staticStyle:{"font-weight":"600"}}),x("span",[n._v("返回")])]),x("el-button",{staticStyle:{"margin-right":"12px","padding-left":"22px","padding-right":"22px"},attrs:{type:"primary",loading:n.loading},on:{click:n.f_save}},[n._v("保存")])],1),x("div",{staticClass:"user-drawer-content f_center"},[x("div",{staticClass:"user-auth"},[n.drawerInfo.userId?x("auth-com",{ref:"auth-com",attrs:{"auth-collect":n.authCollect,drawerInfo:n.drawerInfo},scopedSlots:n._u([{key:"face",fn:function(){return[n._t("face")]},proxy:!0},{key:"finger",fn:function(){return[n._t("finger")]},proxy:!0},{key:"idCard",fn:function(){return[n._t("idCard")]},proxy:!0}],null,!0)}):x("empty-view")],1),x("div",{staticClass:"user-info"},[x("user-info",{ref:"user-info",attrs:{"drawer-info":n.drawerInfo}})],1)])])])},Ze=[],$e=function(){var n=this,x=n._self._c;return x("div",{staticClass:"user-info-main"},[x("el-scrollbar",{staticStyle:{height:"100%"}},[x("el-form",{ref:"form",attrs:{model:n.form,rules:n.rules,"label-width":"100%","label-position":"left"}},[x("el-collapse",{staticStyle:{"margin-right":"16px"},model:{value:n.active,callback:function(x){n.active=x},expression:"active"}},[x("el-collapse-item",{attrs:{name:"base"}},[x("template",{slot:"title"},[x("span",{staticClass:"collapse-title"},[x("span",{staticClass:"title-bar"}),n._v("基础信息")])]),x("div",{staticClass:"form-item"},[x("el-form-item",{attrs:{label:"姓名",prop:"name"}},[x("el-input",{attrs:{placeholder:"请输入姓名",maxlength:"50","show-word-limit":""},on:{input:n.handleNameChange,blur:n.handleNameBlur},model:{value:n.form.name,callback:function(x){n.$set(n.form,"name",x)},expression:"form.name"}})],1),x("el-form-item",{attrs:{label:"拼音",prop:"spelling"}},[x("el-input",{attrs:{placeholder:"请输入拼音",maxlength:"50","show-word-limit":""},model:{value:n.form.spelling,callback:function(x){n.$set(n.form,"spelling",x)},expression:"form.spelling"}})],1),x("el-form-item",{attrs:{label:"所属单位",prop:"organName"}},[x("el-input",{attrs:{disabled:""},model:{value:n.form.organName,callback:function(x){n.$set(n.form,"organName",x)},expression:"form.organName"}})],1),x("el-form-item",{attrs:{label:"密级",prop:"secretLevel"}},[x("el-select",{staticStyle:{width:"100%"},attrs:{placeholder:"请选择密级"},model:{value:n.form.secretLevel,callback:function(x){n.$set(n.form,"secretLevel",x)},expression:"form.secretLevel"}},n._l(n.secretList,function(n){return x("el-option",{key:n.value,attrs:{label:n.label,value:n.value}})}),1)],1),x("el-form-item",{attrs:{placeholder:"请选择性别",label:"性别",prop:"gender"}},[x("el-select",{staticStyle:{width:"100%"},model:{value:n.form.gender,callback:function(x){n.$set(n.form,"gender",x)},expression:"form.gender"}},n._l(n.genderList,function(n){return x("el-option",{key:n.value,attrs:{label:n.label,value:n.value}})}),1)],1),x("el-form-item",{attrs:{label:"状态",prop:"enabled"}},[x("div",{staticClass:"form-status"},[x("el-radio-group",{attrs:{placeholder:"请选择状态"},model:{value:n.form.enabled,callback:function(x){n.$set(n.form,"enabled",x)},expression:"form.enabled"}},[x("el-radio",{attrs:{label:!0}},[n._v("启用")]),x("el-radio",{attrs:{label:!1}},[n._v("禁用")])],1)],1)])],1)],2),x("el-collapse-item",{attrs:{name:"account"}},[x("template",{slot:"title"},[x("span",{staticClass:"collapse-title"},[x("span",{staticClass:"title-bar"}),n._v("账号信息")])]),x("div",{staticClass:"form-item"},[x("el-form-item",{attrs:{label:"中文账号",prop:"cnAccount"}},[x("el-input",{attrs:{placeholder:"请输入中文账号",maxlength:"50","show-word-limit":""},model:{value:n.form.cnAccount,callback:function(x){n.$set(n.form,"cnAccount",x)},expression:"form.cnAccount"}})],1),x("el-form-item",{attrs:{label:"英文账号",prop:"enAccount"}},[x("el-input",{attrs:{placeholder:"请输入英文账号",maxlength:"50","show-word-limit":""},model:{value:n.form.enAccount,callback:function(x){n.$set(n.form,"enAccount",x)},expression:"form.enAccount"}})],1),x("el-form-item",{attrs:{label:"状态",prop:"accountEnabled"}},[x("div",{staticClass:"form-status"},[x("el-radio-group",{attrs:{placeholder:"请选择状态"},model:{value:n.form.accountEnabled,callback:function(x){n.$set(n.form,"accountEnabled",x)},expression:"form.accountEnabled"}},[x("el-radio",{attrs:{label:!0}},[n._v("启用")]),x("el-radio",{attrs:{label:!1}},[n._v("禁用")])],1)],1)]),x("el-form-item",{attrs:{label:"邮箱",prop:"email"}},[x("el-input",{attrs:{placeholder:"请输入邮箱",maxlength:"50","show-word-limit":""},model:{value:n.form.email,callback:function(x){n.$set(n.form,"email",x)},expression:"form.email"}})],1)],1)],2)],1)],1)],1)],1)},ni=[],xi=e(1850),ti=e.n(xi),ei={name:"user-info",props:{drawerInfo:{type:Object,default:()=>{}}},data(){return{secretList:Ve,active:["base","account"],lastAutoSpelling:"",form:{enabled:!0,spelling:"",name:"",cnAccount:"",enAccount:"",email:"",accountEnabled:!0},rules:{enabled:[{required:!0,message:"状态不能为空",trigger:"blur"}],name:[{required:!0,message:"姓名不能为空!",trigger:"blur"},{max:50,message:"姓名不能超过50个字符!",trigger:"blur"}],spelling:[{required:!0,message:"拼音不能为空!",trigger:["blur","change"]},{max:50,message:"拼音不能超过50个字符!",trigger:["blur","change"]}],organName:[{required:!0,message:"所属单位不能为空!",trigger:["change"]}],secretLevel:[{required:!0,message:"密级不能为空!",trigger:["change"]}],gender:[{required:!0,message:"性别不能为空!",trigger:["change"]}],cnAccount:[{required:!0,message:"中文账号不能为空!",trigger:["blur","change"]},{max:50,message:"中文账号不能超过50个字符!",trigger:["blur","change"]}],enAccount:[{required:!0,message:"英文账号不能为空!",trigger:["blur","change"]},{max:50,message:"英文账号不能超过50个字符!",trigger:["blur","change"]}],accountEnabled:[{required:!0,message:"状态不能为空!",trigger:"blur"}],email:[{max:50,message:"邮箱不能超过50个字符!",trigger:["blur","change"]}]}}},computed:{genderList(){return Qe(Ue)}},mounted(){this.f_init()},methods:{async f_init(){if(console.log("drawerInfo1241241",this.drawerInfo),this.drawerInfo?.userId){const n=await we({id:this.drawerInfo?.userId});this.form={...n.data,organName:n.data.organNamePath}}else this.$set(this.form,"organId",this.drawerInfo.organ.id),this.$set(this.form,"organName",this.drawerInfo.organ.caption)},async f_loadNode(n,x){if(0===n.level){const n=await ce();x(n.data||[])}else{const t=await ce({parentId:n.data.id});t.data.forEach(x=>{x.parentId=n.data.id,x.parentName=n.data.caption}),x(t.data||[])}},h_validate(){return this.$refs.form.validate()},h_getFormData(){return this.form},handleNameChange(n){if(n){const x=ti()(n,{style:ti().STYLE_NORMAL,heteronym:!1,segment:!0}),t=x.flat().join("");this.form.spelling=t}else this.form.spelling=""},handleNameBlur(){this.form.cnAccount=this.form.name,this.form.enAccount=this.form.spelling}}},ii=ei,ri=Ie(ii,$e,ni,!1,null,"0a9b7088",null),oi=ri.exports,si=function(){var n=this,x=n._self._c;return n.modules.length?x("div",{staticClass:"auth-com"},[x("el-tabs",{staticStyle:{"margin-left":"12px"},model:{value:n.activeName,callback:function(x){n.activeName=x},expression:"activeName"}},n._l(n.modules,function(n){return x("el-tab-pane",{key:n.value,attrs:{label:n.label,name:n.value}})}),1),x("div",{staticClass:"tab-main"},[x("div",{directives:[{name:"show",rawName:"v-show",value:"face"===n.activeName,expression:"activeName === 'face'"}],staticClass:"tab-content"},[x("face-register",{attrs:{row:n.drawerInfo,options:n.options}})],1),x("div",{directives:[{name:"show",rawName:"v-show",value:"finger"===n.activeName,expression:"activeName === 'finger'"}],staticClass:"tab-content"},["finger"===n.activeName?x("finger-register",{attrs:{row:n.drawerInfo}}):n._e()],1),x("div",{directives:[{name:"show",rawName:"v-show",value:"idCard"===n.activeName,expression:"activeName === 'idCard'"}],staticClass:"tab-content"},[x("card-register",{attrs:{row:n.drawerInfo}})],1)])],1):x("div",{staticClass:"h100 flex-center align-center"},[x("el-result",{attrs:{icon:"info",title:"暂无认证模块",subTitle:"如若需要请联系管理人员开通"}})],1)},hi=[],ui=(e(116),function(){var n=this,x=n._self._c;return x("div",{staticClass:"flex-start"},["face-info"===n.chooseType?x("FacePicture",{staticClass:"mr-12",attrs:{row:n.row},on:{"clear-face":n.handleClearFace}}):n._e(),n.uploading||""!==n.chooseType?n._e():x("ChooseCameraOrPicture",{attrs:{options:n.options},on:{choose:n.handleChoose}}),"picture"===n.chooseType?x("UploadPicture",{attrs:{row:n.row},on:{back:n.handleBack,"upload-success":n.handleUploadSuccess}}):n._e(),"camera"!==n.chooseType||n.uploading?n._e():x("FaceDetected",{on:{back:n.handleBack,"detection-complete":n.handleDetectionComplete}}),n.uploading?x("div",{staticClass:"uploading-container"},[n._m(0)]):n._e()],1)}),ai=[function(){var n=this,x=n._self._c;return x("div",{staticClass:"uploading-content"},[x("i",{staticClass:"el-icon-loading",staticStyle:{"font-size":"48px",color:"#409eff"}}),x("div",{staticClass:"uploading-text"},[n._v("正在上传人脸信息...")])])}];const gi=kt.create({timeout:5e4});gi.interceptors.request.use(n=>(n.baseURL=ae.state.authUrl,n),n=>(console.log(n),Promise.reject(n))),gi.interceptors.response.use(n=>{const x=n.data;return x.code&&0!==x.code&&200!==x.code?((0,qt.Message)({message:x.message||"请求失败,请稍后再试",type:"error",duration:5e3}),Promise.reject(new Error(x.message||"Error"))):x},n=>(console.log("err"+n),(0,qt.Message)({message:n.message,type:"error",duration:5e3}),Promise.reject(n)));var li=gi;const ci=n=>li({url:"/face/add",method:"post",data:n}),di=n=>li({url:"/face/exist",method:"get",params:n}),fi=n=>li({url:"/face/delete",method:"post",params:n});var pi=function(){var n=this,x=n._self._c;return x("div",{staticClass:"choose-camera-or-picture flex-center align-center"},[x("div",[n.showCamera?x("div",{staticClass:"flex-start align-center",staticStyle:{cursor:"pointer"},style:{marginBottom:n.showPicture?"32px":"0"},on:{click:n.handleCamera}},[x("img",{attrs:{src:n.iconCamera,height:"40px"}}),x("div",{staticClass:"choose-camera-or-picture-title ml-12"},[n._v("从摄像头采集")])]):n._e(),n.showPicture?x("div",{staticClass:"flex-start align-center",staticStyle:{cursor:"pointer"},on:{click:n.handlePicture}},[x("img",{attrs:{src:n.iconPicture,height:"40px"}}),x("div",{staticClass:"choose-camera-or-picture-title ml-12"},[n._v("本地照片上传")])]):n._e()])])},yi=[],mi={name:"ChooseCameraOrPicture",props:{options:Array},data(){return{isCamera:!1}},computed:{iconCamera(){return e(74)},iconPicture(){return e(2033)},showCamera(){return!!this.options&&this.options.find(n=>"camera"===n.value)},showPicture(){return!!this.options&&this.options.find(n=>"picture"===n.value)}},methods:{handleCamera(){this.$emit("choose","camera")},handlePicture(){this.$emit("choose","picture")}}},bi=mi,zi=Ie(bi,pi,yi,!1,null,"16e58cc6",null),vi=zi.exports,ji=function(){var n=this,x=n._self._c;return x("div",{staticClass:"upload-picture"},[n.uploadedImages.length<n.maxImages?x("el-upload",{staticClass:"avatar-uploader",attrs:{action:"","auto-upload":!1,"show-file-list":!1,"on-change":n.handleFileSelect,"before-upload":n.beforeAvatarUpload,multiple:!1,disabled:n.uploading}},[x("div",{staticClass:"upload-area flex-center align-center",class:{uploading:n.uploading}},[x("div",{staticClass:"upload-content"},[n.uploading?x("i",{staticClass:"el-icon-loading",staticStyle:{"font-size":"52px",color:"#409eff"}}):x("i",{staticClass:"el-icon-plus",staticStyle:{"font-size":"52px",color:"#bfbfbf"}}),n.uploading?x("div",{staticClass:"upload-text"},[n._v("正在上传中...")]):n._e()])])]):x("div",{staticClass:"max-limit-tip flex-center align-center"},[x("div",{staticClass:"tip-content"},[x("i",{staticClass:"el-icon-warning",staticStyle:{"font-size":"32px",color:"#f56c6c"}}),x("div",{staticClass:"tip-text"},[n._v("最多只能上传 "+n._s(n.maxImages)+" 张图片")])])]),x("div",{staticClass:"flex-center mt-12",staticStyle:{width:"240px"}},[x("el-button",{on:{click:n.h_back}},[n._v("返回")])],1)],1)},wi=[],ki={name:"UploadPicture",emits:["images-change","upload-success","upload-error"],props:{row:Object},data(){return{uploadedImages:[],maxImages:3,uploading:!1}},methods:{h_back(){this.$emit("back")},async handleFileSelect(n){if(!n.raw)return;if(!this.validateFile(n.raw))return;const x=URL.createObjectURL(n.raw);try{await this.uploadImageToServer(n.raw),this.uploadedImages.push({url:x,file:n.raw,name:n.name,size:n.size}),this.$emit("images-change",this.uploadedImages),this.$emit("upload-success",n.raw),this.$message.success("图片上传成功!")}catch(t){console.error("图片上传失败:",t),URL.revokeObjectURL(x),this.$emit("upload-error",t)}},validateFile(n){if(this.uploading)return this.$message.warning("正在上传中,请稍候..."),!1;const x="image/jpeg"===n.type||"image/jpg"===n.type||"image/png"===n.type,t=n.size/1024/1024<2,e=this.uploadedImages.length<this.maxImages;return this.row?.userId&&this.row?.row?.name?x?t?!!e||(this.$message.error(`最多只能上传 ${this.maxImages} 张图片!`),!1):(this.$message.error("上传图片大小不能超过 2MB!"),!1):(this.$message.error("上传图片只能是 JPG 或 PNG 格式!"),!1):(this.$message.error("用户信息不完整,无法上传图片!"),!1)},async uploadImageToServer(n){this.uploading=!0;try{const x=new FormData;x.append("file",n),x.append("userId",this.row?.userId),x.append("userName",this.row?.row?.name);const t=await ci(x);return t}catch(x){throw console.error("服务器上传失败:",x),x}finally{this.uploading=!1}},beforeAvatarUpload(){return!1},removeImage(n){URL.revokeObjectURL(this.uploadedImages[n].url),this.uploadedImages.splice(n,1),this.$emit("images-change",this.uploadedImages),this.$message.success("图片删除成功!")},getUploadedImages(){return this.uploadedImages},clearAllImages(){this.uploadedImages.forEach(n=>{URL.revokeObjectURL(n.url)}),this.uploadedImages=[],this.$emit("images-change",this.uploadedImages)}},beforeUnmount(){this.uploadedImages.forEach(n=>{URL.revokeObjectURL(n.url)})}},qi=ki,Ci=Ie(qi,ji,wi,!1,null,"6b7aeebc",null),Ai=Ci.exports,Ei=function(){var n=this,x=n._self._c;return x("div",{staticClass:"face-detection"},[x("div",{staticStyle:{"margin-bottom":"32px","margin-top":"12px","text-align":"center"}},[n._v(" 人脸识别中,请进入识别范围内 ")]),x("div",{staticClass:"face-detection-container flex-center align-center"},[x("div",{staticClass:"camera-container",class:{detecting:n.isDetecting}},[x("video",{ref:"video",staticStyle:{"border-radius":"50%","object-fit":"cover"},attrs:{width:n.videoWidth,height:n.videoHeight,autoplay:"",muted:"",playsinline:""},domProps:{muted:!0},on:{loadedmetadata:n.onVideoLoaded}}),x("canvas",{ref:"overlay",staticClass:"overlay-canvas",attrs:{width:n.videoWidth,height:n.videoHeight}}),n.capturedImages.length>0?x("div",{staticClass:"results"},[x("div",{staticClass:"captured-image-container"},[x("img",{staticClass:"captured-face-image",attrs:{src:n.capturedImages[0].dataUrl,width:n.videoWidth,height:n.videoHeight,alt:"检测到的人脸"}})])]):n._e()])]),x("div",{staticClass:"flex-center mt-12 w100"},[x("el-button",{on:{click:n.h_back}},[n._v("返回")])],1)])},Si=[],Ii=(e(1148),e(7642),e(8004),e(3853),e(5876),e(2475),e(5024),e(1698),function(n,x){return(Ii=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,x){n.__proto__=x}||function(n,x){for(var t in x)x.hasOwnProperty(t)&&(n[t]=x[t])})(n,x)});function Di(n,x){function t(){this.constructor=n}Ii(n,x),n.prototype=null===x?Object.create(x):(t.prototype=x.prototype,new t)}function Oi(n,x,t,e){return new(t||(t=Promise))(function(i,r){function o(n){try{h(e.next(n))}catch(n){r(n)}}function s(n){try{h(e.throw(n))}catch(n){r(n)}}function h(n){n.done?i(n.value):new t(function(x){x(n.value)}).then(o,s)}h((e=e.apply(n,x||[])).next())})}function _i(n,x){var t,e,i,r,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return r={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(r[Symbol.iterator]=function(){return this}),r;function s(r){return function(s){return function(r){if(t)throw new TypeError("Generator is already executing.");for(;o;)try{if(t=1,e&&(i=2&r[0]?e.return:r[0]?e.throw||((i=e.return)&&i.call(e),0):e.next)&&!(i=i.call(e,r[1])).done)return i;switch(e=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return o.label++,{value:r[1],done:!1};case 5:o.label++,e=r[1],r=[0];continue;case 7:r=o.ops.pop(),o.trys.pop();continue;default:if(!(i=(i=o.trys).length>0&&i[i.length-1])&&(6===r[0]||2===r[0])){o=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){o.label=r[1];break}if(6===r[0]&&o.label<i[1]){o.label=i[1],i=r;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(r);break}i[2]&&o.ops.pop(),o.trys.pop();continue}r=x.call(n,o)}catch(n){r=[6,n],e=0}finally{t=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,s])}}}var Ti=function(){function n(n){this.global=n,this.flags={},this.flagRegistry={},this.urlFlags={},this.populateURLFlags()}return n.prototype.setPlatform=function(n,x){null!=this.platform&&console.warn("Platform "+this.platformName+" has already been set. Overwriting the platform with "+x+"."),this.platformName=n,this.platform=x},n.prototype.registerFlag=function(n,x,t){if(this.flagRegistry[n]={evaluationFn:x,setHook:t},null!=this.urlFlags[n]){var e=this.urlFlags[n];console.warn("Setting feature override from URL "+n+": "+e+"."),this.set(n,e)}},n.prototype.get=function(n){return n in this.flags||(this.flags[n]=this.evaluateFlag(n)),this.flags[n]},n.prototype.getNumber=function(n){return this.get(n)},n.prototype.getBool=function(n){return this.get(n)},n.prototype.getFlags=function(){return this.flags},Object.defineProperty(n.prototype,"features",{get:function(){return this.flags},enumerable:!0,configurable:!0}),n.prototype.set=function(n,x){if(null==this.flagRegistry[n])throw new Error("Cannot set flag "+n+" as it has not been registered.");this.flags[n]=x,null!=this.flagRegistry[n].setHook&&this.flagRegistry[n].setHook(x)},n.prototype.evaluateFlag=function(n){if(null==this.flagRegistry[n])throw new Error("Cannot evaluate flag '"+n+"': no evaluation function found.");return this.flagRegistry[n].evaluationFn()},n.prototype.setFlags=function(n){this.flags=Object.assign({},n)},n.prototype.reset=function(){this.flags={},this.urlFlags={},this.populateURLFlags()},n.prototype.populateURLFlags=function(){var n=this;if(void 0!==this.global&&void 0!==this.global.location&&void 0!==this.global.location.search){var x,t,e=(x=this.global.location.search,t={},x.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,function(n){for(var x=[],e=1;e<arguments.length;e++)x[e-1]=arguments[e];return Ri(t,x[0],x[1]),x.join("=")}),t);"tfjsflags"in e&&e.tfjsflags.split(",").forEach(function(x){var t=x.split(":"),e=t[0],i=t[1];n.urlFlags[e]=function(n,x){if("true"===(x=x.toLowerCase())||"false"===x)return"true"===x;if(""+ +x===x)return+x;throw new Error("Could not parse value flag value "+x+" for flag "+n+".")}(e,i)})}},n}();function Ri(n,x,t){n[decodeURIComponent(x)]=decodeURIComponent(t||"")}function Bi(){return Mi}var Mi=null,Ni=new Map,Fi=new Map;function Pi(n,x){var t=Wi(n,x);return Ni.get(t)}function Li(n){return Fi.get(n)}function Hi(n){for(var x=Ni.entries(),t=[];;){var e=x.next(),i=e.done,r=e.value;if(i)break;var o=r[0],s=r[1];o.split("_")[0]===n&&t.push(s)}return t}function Ui(n){var x=n.kernelName,t=n.backendName,e=Wi(x,t);if(Ni.has(e))throw new Error("The kernel '"+x+"' for backend '"+t+"' is already registered");Ni.set(e,n)}function Vi(n){var x=n.kernelName;Fi.has(x)&&console.warn("Overriding the gradient for '"+x+"'"),Fi.set(x,n)}function Wi(n,x){return x+"_"+n}function Qi(n){for(var x=n.length,t=0,e=0;x>0;)e=Math.random()*x|0,t=n[--x],n[x]=n[e],n[e]=t}function Gi(n,x,t){return Math.max(n,Math.min(x,t))}function Ki(n){return n%2==0?n:n+1}function Yi(n){for(var x=0,t=0;t<n.length;t++)x+=n[t];return x}function Ji(n,x){if(!n)throw new Error("string"==typeof x?x:x())}function Xi(n,x,t){void 0===t&&(t=""),Ji(xr(n,x),function(){return t+" Shapes "+n+" and "+x+" must match"})}function Zi(n){Ji(null!=n,function(){return"The input to the tensor constructor must be a non-null value."})}function $i(n,x,t){if(void 0===x&&(x=[]),void 0===t&&(t=!1),null==x&&(x=[]),Array.isArray(n)||fr(n)&&!t)for(var e=0;e<n.length;++e)$i(n[e],x,t);else x.push(n);return x}function nr(n){if(0===n.length)return 1;for(var x=n[0],t=1;t<n.length;t++)x*=n[t];return x}function xr(n,x){if(n===x)return!0;if(null==n||null==x)return!1;if(n.length!==x.length)return!1;for(var t=0;t<n.length;t++)if(n[t]!==x[t])return!1;return!0}function tr(n){return n%1==0}function er(n){if(null!=Math.tanh)return Math.tanh(n);if(n===1/0)return 1;if(n===-1/0)return-1;var x=Math.exp(2*n);return(x-1)/(x+1)}function ir(n){var x=Math.ceil(Math.sqrt(n));return[x,Math.ceil(n/x)]}function rr(n,x){return x<=n.length?n:n+" ".repeat(x-n.length)}function or(n,x,t){return void 0===x&&(x=function(n){return 0}),new Promise(function(e,i){var r=0,o=function(){if(n())e();else{r++;var s=x(r);null!=t&&r>=t?i():setTimeout(o,s)}};o()})}function sr(n,x){for(var t=1,e=-1,i=0;i<n.length;++i)if(n[i]>=0)t*=n[i];else if(-1===n[i]){if(-1!==e)throw Error("Shapes can only have 1 implicit size. Found -1 at dim "+e+" and dim "+i);e=i}else if(n[i]<0)throw Error("Shapes can not be < 0. Found "+n[i]+" at dim "+i);if(-1===e){if(x>0&&x!==t)throw Error("Size("+x+") must match the product of shape "+n);return n}if(0===t)throw Error("Cannot infer the missing size in ["+n+"] when there are 0 elements");if(x%t!=0)throw Error("The implicit shape can't be a fractional number. Got "+x+" / "+t);var r=n.slice();return r[e]=x/t,r}function hr(n,x){var t=x.length;return Ji((n=null==n?x.map(function(n,x){return x}):[].concat(n)).every(function(n){return n>=-t&&n<t}),function(){return"All values in axis param must be in range [-"+t+", "+t+") but got axis "+n}),Ji(n.every(function(n){return tr(n)}),function(){return"All values in axis param must be integers but got axis "+n}),n.map(function(n){return n<0?t+n:n})}function ur(n,x){for(var t=[],e=[],i=null!=x&&Array.isArray(x)&&0===x.length,r=null==x||i?null:hr(x,n).sort(),o=0,s=0;s<n.length;++s){if(null!=r){if(r[o]===s&&1!==n[s])throw new Error("Can't squeeze axis "+s+" since its dim '"+n[s]+"' is not 1");(null==r[o]||r[o]>s)&&1===n[s]&&(t.push(n[s]),e.push(s)),r[o]<=s&&o++}1!==n[s]&&(t.push(n[s]),e.push(s))}return{newShape:t,keptDims:e}}function ar(n,x){var t=null;if(null==n||"float32"===n)t=new Float32Array(x);else if("int32"===n)t=new Int32Array(x);else{if("bool"!==n)throw new Error("Unknown data type "+n);t=new Uint8Array(x)}return t}function gr(n,x){var t=null;if(null==n||"float32"===n)t=new Float32Array(x);else if("int32"===n)t=new Int32Array(x);else if("bool"===n)t=new Uint8Array(x);else{if("string"!==n)throw new Error("Unknown data type "+n);t=new Array(x)}return t}function lr(n,x){for(var t=0;t<n.length;t++){var e=n[t];if(isNaN(e)||!isFinite(e))throw Error("A tensor of type "+x+" being uploaded contains "+e+".")}}function cr(n){return"bool"===n||"complex64"===n||"float32"===n||"int32"===n||"string"===n}function dr(n,x){return"complex64"!==x&&("float32"!==x||"complex64"===n)&&("int32"!==x||"float32"===n||"complex64"===n)&&("bool"!==x||"bool"!==n)}function fr(n){return n instanceof Float32Array||n instanceof Int32Array||n instanceof Uint8Array}function pr(n){if("float32"===n||"int32"===n)return 4;if("complex64"===n)return 8;if("bool"===n)return 1;throw new Error("Unknown dtype "+n)}function yr(n){if(null==n)return 0;var x=0;return n.forEach(function(n){return x+=n.length}),x}function mr(n){return"string"==typeof n||n instanceof String}function br(n){return"boolean"==typeof n}function zr(n){return"number"==typeof n}function vr(n){return Array.isArray(n)?vr(n[0]):n instanceof Float32Array?"float32":n instanceof Int32Array||n instanceof Uint8Array?"int32":zr(n)?"float32":mr(n)?"string":br(n)?"bool":"float32"}function jr(n){return!!(n&&n.constructor&&n.call&&n.apply)}function wr(n,x){for(var t=x;t<n;++t)if(n%t==0)return t;return n}function kr(n){var x=n.length;if(x<2)return[];var t=new Array(x-1);t[x-2]=n[x-1];for(var e=x-3;e>=0;--e)t[e]=t[e+1]*n[e+1];return t}function qr(n,x,t){if("string"===x)throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(n)&&(n=$i(n)),t&&lr(n,x),function(n,x){return n instanceof Float32Array&&"float32"===x||n instanceof Int32Array&&"int32"===x||n instanceof Uint8Array&&"bool"===x}(n,x))return n;if(null==x||"float32"===x||"complex64"===x)return new Float32Array(n);if("int32"===x)return new Int32Array(n);if("bool"===x){for(var e=new Uint8Array(n.length),i=0;i<e.length;++i)0!==Math.round(n[i])&&(e[i]=1);return e}throw new Error("Unknown data type "+x)}function Cr(n,x){if(0===n.length)return x[0];var t=n.reduce(function(n,x){return n*x});if(0===t)return[];if(t!==x.length)throw new Error("["+n+"] does not match the input size.");return function n(x,t,e){var i=new Array;if(1===t.length)for(var r=t[0],o=0;o<r;o++)i[o]=e[x+o];else{r=t[0];var s=t.slice(1),h=s.reduce(function(n,x){return n*x});for(o=0;o<r;o++)i[o]=n(x+o*h,s,e)}return i}(0,n,x)}function Ar(n,x){for(var t=Er(n,x),e=0;e<t.length;e++)t[e]=1;return t}function Er(n,x){if(null==x||"float32"===x||"complex64"===x)return new Float32Array(n);if("int32"===x)return new Int32Array(n);if("bool"===x)return new Uint8Array(n);throw new Error("Unknown data type "+x)}function Sr(){return Bi().platform.now()}function Ir(n){n.forEach(function(x){Ji(Number.isInteger(x)&&x>=0,function(){return"Tensor must have a shape comprised of positive integers but got shape ["+n+"]."})})}function Dr(n,x){return void 0===x&&(x="utf-8"),x=x||"utf-8",Bi().platform.encode(n,x)}function Or(n,x){return void 0===x&&(x="utf-8"),x=x||"utf-8",Bi().platform.decode(n,x)}function _r(n,x,t){if(0===x)return 0;if(1===x)return n[0];for(var e=n[n.length-1],i=0;i<n.length-1;++i)e+=t[i]*n[i];return e}function Tr(n,x,t){if(0===x)return[];if(1===x)return[n];for(var e=new Array(x),i=0;i<e.length-1;++i)e[i]=Math.floor(n/t[i]),n-=e[i]*t[i];return e[e.length-1]=n,e}Object.freeze({shuffle:Qi,clamp:Gi,nearestLargerEven:Ki,sum:Yi,randUniform:function(n,x){var t=Math.random();return x*t+(1-t)*n},distSquared:function(n,x){for(var t=0,e=0;e<n.length;e++){var i=Number(n[e])-Number(x[e]);t+=i*i}return t},assert:Ji,assertShapesMatch:Xi,assertNonNull:Zi,flatten:$i,sizeFromShape:nr,isScalarShape:function(n){return 0===n.length},arraysEqual:xr,isInt:tr,tanh:er,sizeToSquarishShape:ir,createShuffledIndices:function(n){for(var x=new Uint32Array(n),t=0;t<n;++t)x[t]=t;return Qi(x),x},rightPad:rr,repeatedTry:or,inferFromImplicitShape:sr,parseAxisParam:hr,squeezeShape:ur,getTypedArrayFromDType:ar,getArrayFromDType:gr,checkConversionForErrors:lr,isValidDtype:cr,hasEncodingLoss:dr,isTypedArray:fr,bytesPerElement:pr,bytesFromStringArray:yr,isString:mr,isBoolean:br,isNumber:zr,inferDtype:vr,isFunction:jr,nearestDivisor:wr,computeStrides:kr,toTypedArray:qr,toNestedArray:Cr,makeOnesTypedArray:Ar,makeZerosTypedArray:Er,now:Sr,assertNonNegativeIntegerDimensions:Ir,fetch:function(n,x){return Bi().platform.fetch(n,x)},encodeString:Dr,decodeString:Or,locToIndex:_r,indexToLoc:Tr});var Rr=function(){function n(n,x){this.backendTimer=n,this.logger=x,null==x&&(this.logger=new Br)}return n.prototype.profileKernel=function(n,x,t){var e,i=this,r=this.backendTimer.time(function(){e=t()});return e.forEach(function(t){t.data().then(function(e){!function(n,x,t){if("float32"!==x)return!1;for(var e=0;e<n.length;e++){var i=n[e];if(isNaN(i)||!isFinite(i))return console.warn("Found "+i+" in the result of '"+t+"'"),!0}}(e,t.dtype,n),r.then(function(r){var o="";null!=r.getExtraProfileInfo&&(o=r.getExtraProfileInfo()),i.logger.logKernelProfile(n,t,e,r.kernelMs,x,o)})})}),e},n}(),Br=function(){function n(){}return n.prototype.logKernelProfile=function(n,x,t,e,i,r){var o="number"==typeof e?rr(e+"ms",9):e.error,s=rr(n,25),h=x.rank,u=x.size,a=rr(x.shape.toString(),14),g="";for(var l in i){var c=i[l].shape||x.shape,d=c.length;g+=l+": "+d+"D "+(d>0?c:"")+" "}console.log("%c"+s+"\t%c"+o+"\t%c"+h+"D "+a+"\t%c"+u+"\t%c"+g+"\t%c"+r,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")},n}(),Mr=20,Nr=3,Fr=7;function Pr(n,x,t,e){var i=kr(x),r=function(n,x,t,e){var i=nr(x),r=e[e.length-1],o=new Array(r).fill(0),s=x.length,h="complex64"===t?Ur(n):n;if(s>1)for(var u=0;u<i/r;u++)for(var a=u*r,g=0;g<r;g++)o[g]=Math.max(o[g],Lr(h[a+g],0,t).length);return o}(n,x,t,i),o=x.length,s=function n(x,t,e,i,r,o){void 0===o&&(o=!0);var s="complex64"===e?2:1,h=t[0],u=t.length;if(0===u)return"complex64"===e?[Lr(Ur(x)[0],0,e)]:"bool"===e?[Hr(x[0])]:[x[0].toString()];if(1===u){if(h>Mr){var a=Nr*s,g=Array.from(x.slice(0,a)),l=Array.from(x.slice((h-Nr)*s,h*s));return"complex64"===e&&(g=Ur(g),l=Ur(l)),["["+g.map(function(n,x){return Lr(n,r[x],e)}).join(", ")+", ..., "+l.map(function(n,x){return Lr(n,r[h-Nr+x],e)}).join(", ")+"]"]}return["["+("complex64"===e?Ur(x):Array.from(x)).map(function(n,x){return Lr(n,r[x],e)}).join(", ")+"]"]}var c=t.slice(1),d=i.slice(1),f=i[0]*s,p=[];if(h>Mr){for(var y=0;y<Nr;y++){var m=(b=y*f)+f;p.push.apply(p,n(x.slice(b,m),c,e,d,r,!1))}for(p.push("..."),y=h-Nr;y<h;y++)m=(b=y*f)+f,p.push.apply(p,n(x.slice(b,m),c,e,d,r,y===h-1))}else for(y=0;y<h;y++){var b;m=(b=y*f)+f,p.push.apply(p,n(x.slice(b,m),c,e,d,r,y===h-1))}var z=2===u?",":"";for(p[0]="["+p[0]+z,y=1;y<p.length-1;y++)p[y]=" "+p[y]+z;var v=",\n";for(y=2;y<u;y++)v+="\n";return p[p.length-1]=" "+p[p.length-1]+"]"+(o?"":v),p}(n,x,t,i,r),h=["Tensor"];return e&&(h.push(" dtype: "+t),h.push(" rank: "+o),h.push(" shape: ["+x+"]"),h.push(" values:")),h.push(s.map(function(n){return" "+n}).join("\n")),h.join("\n")}function Lr(n,x,t){return rr(Array.isArray(n)?parseFloat(n[0].toFixed(Fr))+" + "+parseFloat(n[1].toFixed(Fr))+"j":mr(n)?"'"+n+"'":"bool"===t?Hr(n):parseFloat(n.toFixed(Fr)).toString(),x)}function Hr(n){return 0===n?"false":"true"}function Ur(n){for(var x=[],t=0;t<n.length;t+=2)x.push([n[t],n[t+1]]);return x}var Vr=function(){function n(n,x,t){var e=this;if(this.dtype=x,this.shape=n.slice(),this.size=nr(n),null!=t){var i=t.length;Ji(i===this.size,function(){return"Length of values '"+i+"' does not match the size inferred by the shape '"+e.size+"'."})}if("complex64"===x)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=t||gr(x,this.size),this.strides=kr(n)}return n.prototype.set=function(n){for(var x=this,t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];0===t.length&&(t=[0]),Ji(t.length===this.rank,function(){return"The number of provided coordinates ("+t.length+") must match the rank ("+x.rank+")"});var i=this.locToIndex(t);this.values[i]=n},n.prototype.get=function(){for(var n=[],x=0;x<arguments.length;x++)n[x]=arguments[x];0===n.length&&(n=[0]);for(var t=0,e=0,i=n;e<i.length;e++){var r=i[e];if(r<0||r>=this.shape[t]){var o="Requested out of range element at "+n+". Buffer shape="+this.shape;throw new Error(o)}t++}for(var s=n[n.length-1],h=0;h<n.length-1;++h)s+=this.strides[h]*n[h];return this.values[s]},n.prototype.locToIndex=function(n){if(0===this.rank)return 0;if(1===this.rank)return n[0];for(var x=n[n.length-1],t=0;t<n.length-1;++t)x+=this.strides[t]*n[t];return x},n.prototype.indexToLoc=function(n){if(0===this.rank)return[];if(1===this.rank)return[n];for(var x=new Array(this.shape.length),t=0;t<x.length-1;++t)x[t]=Math.floor(n/this.strides[t]),n-=x[t]*this.strides[t];return x[x.length-1]=n,x},Object.defineProperty(n.prototype,"rank",{get:function(){return this.shape.length},enumerable:!0,configurable:!0}),n.prototype.toTensor=function(){return Wr().makeTensor(this.values,this.shape,this.dtype)},n}(),Wr=null,Qr=null,Gr=null,Kr=function(){function n(n,x,t,e){this.kept=!1,this.isDisposedInternal=!1,this.shape=n.slice(),this.dtype=x||"float32",this.size=nr(n),this.strides=kr(n),this.dataId=t,this.id=e,this.rankType=this.rank<5?this.rank.toString():"higher"}return n.prototype.flatten=function(){return this.throwIfDisposed(),this.as1D()},n.prototype.asScalar=function(){return this.throwIfDisposed(),Ji(1===this.size,function(){return"The array must have only 1 element."}),this.reshape([])},n.prototype.as1D=function(){return this.throwIfDisposed(),this.reshape([this.size])},n.prototype.as2D=function(n,x){return this.throwIfDisposed(),this.reshape([n,x])},n.prototype.as3D=function(n,x,t){return this.throwIfDisposed(),this.reshape([n,x,t])},n.prototype.as4D=function(n,x,t,e){return this.throwIfDisposed(),this.reshape([n,x,t,e])},n.prototype.as5D=function(n,x,t,e,i){return this.throwIfDisposed(),this.reshape([n,x,t,e,i])},n.prototype.asType=function(n){return this.throwIfDisposed(),Qr.cast(this,n)},Object.defineProperty(n.prototype,"rank",{get:function(){return this.shape.length},enumerable:!0,configurable:!0}),n.prototype.buffer=function(){return Oi(this,void 0,void 0,function(){var n;return _i(this,function(x){switch(x.label){case 0:return[4,this.data()];case 1:return n=x.sent(),[2,Qr.buffer(this.shape,this.dtype,n)]}})})},n.prototype.bufferSync=function(){return Qr.buffer(this.shape,this.dtype,this.dataSync())},n.prototype.array=function(){return Oi(this,void 0,void 0,function(){var n;return _i(this,function(x){switch(x.label){case 0:return[4,this.data()];case 1:return n=x.sent(),[2,Cr(this.shape,n)]}})})},n.prototype.arraySync=function(){return Cr(this.shape,this.dataSync())},n.prototype.data=function(){return Oi(this,void 0,void 0,function(){var n,x;return _i(this,function(t){switch(t.label){case 0:return this.throwIfDisposed(),n=Wr().read(this.dataId),"string"!==this.dtype?[3,2]:[4,n];case 1:x=t.sent();try{return[2,x.map(function(n){return Or(n)})]}catch(n){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}case 2:return[2,n]}})})},n.prototype.dataSync=function(){this.throwIfDisposed();var n=Wr().readSync(this.dataId);if("string"===this.dtype)try{return n.map(function(n){return Or(n)})}catch(n){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return n},n.prototype.bytes=function(){return Oi(this,void 0,void 0,function(){var n;return _i(this,function(x){switch(x.label){case 0:return this.throwIfDisposed(),[4,Wr().read(this.dataId)];case 1:return n=x.sent(),"string"===this.dtype?[2,n]:[2,new Uint8Array(n.buffer)]}})})},n.prototype.dispose=function(){this.isDisposed||(Wr().disposeTensor(this),this.isDisposedInternal=!0)},Object.defineProperty(n.prototype,"isDisposed",{get:function(){return this.isDisposedInternal},enumerable:!0,configurable:!0}),n.prototype.throwIfDisposed=function(){if(this.isDisposed)throw new Error("Tensor is disposed.")},n.prototype.toFloat=function(){return this.asType("float32")},n.prototype.toInt=function(){return this.asType("int32")},n.prototype.toBool=function(){return this.asType("bool")},n.prototype.print=function(n){return void 0===n&&(n=!1),Qr.print(this,n)},n.prototype.reshape=function(n){return this.throwIfDisposed(),Qr.reshape(this,n)},n.prototype.reshapeAs=function(n){return this.throwIfDisposed(),this.reshape(n.shape)},n.prototype.expandDims=function(n){return void 0===n&&(n=0),Qr.expandDims(this,n)},n.prototype.cumsum=function(n,x,t){return void 0===n&&(n=0),void 0===x&&(x=!1),void 0===t&&(t=!1),Qr.cumsum(this,n,x,t)},n.prototype.squeeze=function(n){return this.throwIfDisposed(),Qr.squeeze(this,n)},n.prototype.clone=function(){return this.throwIfDisposed(),Qr.clone(this)},n.prototype.oneHot=function(n,x,t){return this.throwIfDisposed(),Qr.oneHot(this,n,x,t)},n.prototype.toString=function(n){return void 0===n&&(n=!1),Pr(this.dataSync(),this.shape,this.dtype,n)},n.prototype.tile=function(n){return this.throwIfDisposed(),Qr.tile(this,n)},n.prototype.gather=function(n,x){return void 0===x&&(x=0),this.throwIfDisposed(),Qr.gather(this,n,x)},n.prototype.matMul=function(n,x,t){return void 0===x&&(x=!1),void 0===t&&(t=!1),this.throwIfDisposed(),Qr.matMul(this,n,x,t)},n.prototype.dot=function(n){return this.throwIfDisposed(),Qr.dot(this,n)},n.prototype.norm=function(n,x,t){return void 0===n&&(n="euclidean"),void 0===x&&(x=null),void 0===t&&(t=!1),this.throwIfDisposed(),Qr.norm(this,n,x,t)},n.prototype.slice=function(n,x){return this.throwIfDisposed(),Qr.slice(this,n,x)},n.prototype.reverse=function(n){return this.throwIfDisposed(),Qr.reverse(this,n)},n.prototype.concat=function(x,t){return void 0===t&&(t=0),this.throwIfDisposed(),x instanceof n&&(x=[x]),Qr.concat([this].concat(x),t)},n.prototype.split=function(n,x){return void 0===x&&(x=0),this.throwIfDisposed(),Qr.split(this,n,x)},n.prototype.stack=function(n,x){return void 0===x&&(x=0),Qr.stack([this,n],x)},n.prototype.unstack=function(n){return void 0===n&&(n=0),Qr.unstack(this,n)},n.prototype.pad=function(n,x){return void 0===x&&(x=0),Qr.pad(this,n,x)},n.prototype.batchNormalization=function(n,x,t,e,i){return void 0===t&&(t=.001),Gr("tf.batchNormalization() is going away. Use tf.batchNorm() instead, and note the positional argument change of scale, offset, and varianceEpsilon"),this.batchNorm(n,x,i,e,t)},n.prototype.batchNorm=function(n,x,t,e,i){return void 0===i&&(i=.001),this.throwIfDisposed(),Qr.batchNorm(this,n,x,t,e,i)},n.prototype.all=function(n,x){return void 0===n&&(n=null),void 0===x&&(x=!1),this.throwIfDisposed(),Qr.all(this,n,x)},n.prototype.any=function(n,x){return void 0===n&&(n=null),void 0===x&&(x=!1),this.throwIfDisposed(),Qr.any(this,n,x)},n.prototype.logSumExp=function(n,x){return void 0===n&&(n=null),void 0===x&&(x=!1),this.throwIfDisposed(),Qr.logSumExp(this,n,x)},n.prototype.sum=function(n,x){return void 0===n&&(n=null),void 0===x&&(x=!1),this.throwIfDisposed(),Qr.sum(this,n,x)},n.prototype.prod=function(n,x){return void 0===n&&(n=null),void 0===x&&(x=!1),this.throwIfDisposed(),Qr.prod(this,n,x)},n.prototype.mean=function(n,x){return void 0===n&&(n=null),void 0===x&&(x=!1),this.throwIfDisposed(),Qr.mean(this,n,x)},n.prototype.min=function(n,x){return void 0===n&&(n=null),void 0===x&&(x=!1),this.throwIfDisposed(),Qr.min(this,n,x)},n.prototype.max=function(n,x){return void 0===n&&(n=null),void 0===x&&(x=!1),this.throwIfDisposed(),Qr.max(this,n,x)},n.prototype.argMin=function(n){return void 0===n&&(n=null),this.throwIfDisposed(),Qr.argMin(this,n)},n.prototype.argMax=function(n){return void 0===n&&(n=null),this.throwIfDisposed(),Qr.argMax(this,n)},n.prototype.cast=function(n){return this.throwIfDisposed(),Qr.cast(this,n)},n.prototype.add=function(n){return this.throwIfDisposed(),Qr.add(this,n)},n.prototype.addStrict=function(n){return this.throwIfDisposed(),Qr.addStrict(this,n)},n.prototype.atan2=function(n){return this.throwIfDisposed(),Qr.atan2(this,n)},n.prototype.sub=function(n){return this.throwIfDisposed(),Qr.sub(this,n)},n.prototype.subStrict=function(n){return this.throwIfDisposed(),Qr.subStrict(this,n)},n.prototype.pow=function(n){return this.throwIfDisposed(),Qr.pow(this,n)},n.prototype.powStrict=function(n){return this.throwIfDisposed(),Qr.powStrict(this,n)},n.prototype.mul=function(n){return this.throwIfDisposed(),Qr.mul(this,n)},n.prototype.mulStrict=function(n){return this.throwIfDisposed(),Qr.mulStrict(this,n)},n.prototype.div=function(n){return this.throwIfDisposed(),Qr.div(this,n)},n.prototype.divNoNan=function(n){return this.throwIfDisposed(),Qr.divNoNan(this,n)},n.prototype.floorDiv=function(n){return this.throwIfDisposed(),Qr.floorDiv(this,n)},n.prototype.divStrict=function(n){return this.throwIfDisposed(),Qr.divStrict(this,n)},n.prototype.minimum=function(n){return this.throwIfDisposed(),Qr.minimum(this,n)},n.prototype.minimumStrict=function(n){return this.throwIfDisposed(),Qr.minimumStrict(this,n)},n.prototype.maximum=function(n){return this.throwIfDisposed(),Qr.maximum(this,n)},n.prototype.maximumStrict=function(n){return this.throwIfDisposed(),Qr.maximumStrict(this,n)},n.prototype.mod=function(n){return this.throwIfDisposed(),Qr.mod(this,n)},n.prototype.modStrict=function(n){return this.throwIfDisposed(),Qr.modStrict(this,n)},n.prototype.squaredDifferenceStrict=function(n){return this.throwIfDisposed(),Qr.squaredDifferenceStrict(this,n)},n.prototype.transpose=function(n){return this.throwIfDisposed(),Qr.transpose(this,n)},n.prototype.notEqual=function(n){return this.throwIfDisposed(),Qr.notEqual(this,n)},n.prototype.notEqualStrict=function(n){return this.throwIfDisposed(),Qr.notEqualStrict(this,n)},n.prototype.less=function(n){return this.throwIfDisposed(),Qr.less(this,n)},n.prototype.lessStrict=function(n){return this.throwIfDisposed(),Qr.lessStrict(this,n)},n.prototype.equal=function(n){return this.throwIfDisposed(),Qr.equal(this,n)},n.prototype.equalStrict=function(n){return this.throwIfDisposed(),Qr.equalStrict(this,n)},n.prototype.lessEqual=function(n){return this.throwIfDisposed(),Qr.lessEqual(this,n)},n.prototype.lessEqualStrict=function(n){return this.throwIfDisposed(),Qr.lessEqualStrict(this,n)},n.prototype.greater=function(n){return this.throwIfDisposed(),Qr.greater(this,n)},n.prototype.greaterStrict=function(n){return this.throwIfDisposed(),Qr.greaterStrict(this,n)},n.prototype.greaterEqual=function(n){return this.throwIfDisposed(),Qr.greaterEqual(this,n)},n.prototype.greaterEqualStrict=function(n){return this.throwIfDisposed(),Qr.greaterEqualStrict(this,n)},n.prototype.logicalAnd=function(n){return this.throwIfDisposed(),Qr.logicalAnd(this,n)},n.prototype.logicalOr=function(n){return this.throwIfDisposed(),Qr.logicalOr(this,n)},n.prototype.logicalNot=function(){return this.throwIfDisposed(),Qr.logicalNot(this)},n.prototype.logicalXor=function(n){return this.throwIfDisposed(),Qr.logicalXor(this,n)},n.prototype.where=function(n,x){return this.throwIfDisposed(),Qr.where(n,this,x)},n.prototype.neg=function(){return this.throwIfDisposed(),Qr.neg(this)},n.prototype.ceil=function(){return this.throwIfDisposed(),Qr.ceil(this)},n.prototype.floor=function(){return this.throwIfDisposed(),Qr.floor(this)},n.prototype.sign=function(){return this.throwIfDisposed(),Qr.sign(this)},n.prototype.isNaN=function(){return this.throwIfDisposed(),Qr.isNaN(this)},n.prototype.isInf=function(){return this.throwIfDisposed(),Qr.isInf(this)},n.prototype.isFinite=function(){return this.throwIfDisposed(),Qr.isFinite(this)},n.prototype.exp=function(){return this.throwIfDisposed(),Qr.exp(this)},n.prototype.expm1=function(){return this.throwIfDisposed(),Qr.expm1(this)},n.prototype.log=function(){return this.throwIfDisposed(),Qr.log(this)},n.prototype.log1p=function(){return this.throwIfDisposed(),Qr.log1p(this)},n.prototype.sqrt=function(){return this.throwIfDisposed(),Qr.sqrt(this)},n.prototype.rsqrt=function(){return this.throwIfDisposed(),Qr.rsqrt(this)},n.prototype.square=function(){return this.throwIfDisposed(),Qr.square(this)},n.prototype.reciprocal=function(){return this.throwIfDisposed(),Qr.reciprocal(this)},n.prototype.abs=function(){return this.throwIfDisposed(),Qr.abs(this)},n.prototype.clipByValue=function(n,x){return this.throwIfDisposed(),Qr.clipByValue(this,n,x)},n.prototype.relu=function(){return this.throwIfDisposed(),Qr.relu(this)},n.prototype.relu6=function(){return this.throwIfDisposed(),Qr.relu6(this)},n.prototype.elu=function(){return this.throwIfDisposed(),Qr.elu(this)},n.prototype.selu=function(){return this.throwIfDisposed(),Qr.selu(this)},n.prototype.leakyRelu=function(n){return void 0===n&&(n=.2),this.throwIfDisposed(),Qr.leakyRelu(this,n)},n.prototype.prelu=function(n){return this.throwIfDisposed(),Qr.prelu(this,n)},n.prototype.sigmoid=function(){return this.throwIfDisposed(),Qr.sigmoid(this)},n.prototype.logSigmoid=function(){return this.throwIfDisposed(),Qr.logSigmoid(this)},n.prototype.softplus=function(){return this.throwIfDisposed(),Qr.softplus(this)},n.prototype.zerosLike=function(){return this.throwIfDisposed(),Qr.zerosLike(this)},n.prototype.onesLike=function(){return this.throwIfDisposed(),Qr.onesLike(this)},n.prototype.sin=function(){return this.throwIfDisposed(),Qr.sin(this)},n.prototype.cos=function(){return this.throwIfDisposed(),Qr.cos(this)},n.prototype.tan=function(){return this.throwIfDisposed(),Qr.tan(this)},n.prototype.asin=function(){return this.throwIfDisposed(),Qr.asin(this)},n.prototype.acos=function(){return this.throwIfDisposed(),Qr.acos(this)},n.prototype.atan=function(){return this.throwIfDisposed(),Qr.atan(this)},n.prototype.sinh=function(){return this.throwIfDisposed(),Qr.sinh(this)},n.prototype.cosh=function(){return this.throwIfDisposed(),Qr.cosh(this)},n.prototype.tanh=function(){return this.throwIfDisposed(),Qr.tanh(this)},n.prototype.asinh=function(){return this.throwIfDisposed(),Qr.asinh(this)},n.prototype.acosh=function(){return this.throwIfDisposed(),Qr.acosh(this)},n.prototype.atanh=function(){return this.throwIfDisposed(),Qr.atanh(this)},n.prototype.erf=function(){return this.throwIfDisposed(),Qr.erf(this)},n.prototype.round=function(){return this.throwIfDisposed(),Qr.round(this)},n.prototype.step=function(n){return void 0===n&&(n=0),this.throwIfDisposed(),Qr.step(this,n)},n.prototype.softmax=function(n){return void 0===n&&(n=-1),this.throwIfDisposed(),Qr.softmax(this,n)},n.prototype.logSoftmax=function(n){return void 0===n&&(n=-1),this.throwIfDisposed(),Qr.logSoftmax(this,n)},n.prototype.resizeBilinear=function(n,x){return void 0===x&&(x=!1),this.throwIfDisposed(),Qr.image.resizeBilinear(this,n,x)},n.prototype.resizeNearestNeighbor=function(n,x){return void 0===x&&(x=!1),this.throwIfDisposed(),Qr.image.resizeNearestNeighbor(this,n,x)},n.prototype.conv1d=function(n,x,t,e,i,r){return void 0===e&&(e="NWC"),void 0===i&&(i=1),this.throwIfDisposed(),Qr.conv1d(this,n,x,t,e,i,r)},n.prototype.conv2d=function(n,x,t,e,i,r){return void 0===e&&(e="NHWC"),void 0===i&&(i=[1,1]),this.throwIfDisposed(),Qr.conv2d(this,n,x,t,e,i,r)},n.prototype.conv2dTranspose=function(n,x,t,e,i){return this.throwIfDisposed(),Qr.conv2dTranspose(this,n,x,t,e,i)},n.prototype.depthwiseConv2D=function(n,x,t,e,i,r){return void 0===e&&(e="NHWC"),void 0===i&&(i=[1,1]),this.throwIfDisposed(),Qr.depthwiseConv2d(this,n,x,t,e,i,r)},n.prototype.separableConv2d=function(n,x,t,e,i,r){return void 0===i&&(i=[1,1]),void 0===r&&(r="NHWC"),this.throwIfDisposed(),Qr.separableConv2d(this,n,x,t,e,i,r)},n.prototype.avgPool=function(n,x,t,e){return this.throwIfDisposed(),Qr.avgPool(this,n,x,t,e)},n.prototype.maxPool=function(n,x,t,e){return this.throwIfDisposed(),Qr.maxPool(this,n,x,t,e)},n.prototype.localResponseNormalization=function(n,x,t,e){return void 0===n&&(n=5),void 0===x&&(x=1),void 0===t&&(t=1),void 0===e&&(e=.5),Qr.localResponseNormalization(this,n,x,t,e)},n.prototype.pool=function(n,x,t,e,i){return this.throwIfDisposed(),Qr.pool(this,n,x,t,e,i)},n.prototype.variable=function(n,x,t){return void 0===n&&(n=!0),this.throwIfDisposed(),Wr().makeVariable(this,n,x,t)},n.prototype.unsortedSegmentSum=function(n,x){return this.throwIfDisposed(),Qr.unsortedSegmentSum(this,n,x)},n.prototype.batchToSpaceND=function(n,x){return this.throwIfDisposed(),Qr.batchToSpaceND(this,n,x)},n.prototype.spaceToBatchND=function(n,x){return this.throwIfDisposed(),Qr.spaceToBatchND(this,n,x)},n.prototype.topk=function(n,x){return void 0===n&&(n=1),void 0===x&&(x=!0),this.throwIfDisposed(),Qr.topk(this,n,x)},n.prototype.stridedSlice=function(n,x,t,e,i,r,o,s){return void 0===e&&(e=0),void 0===i&&(i=0),void 0===r&&(r=0),void 0===o&&(o=0),void 0===s&&(s=0),this.throwIfDisposed(),Qr.stridedSlice(this,n,x,t,e,i,r,o,s)},n.prototype.depthToSpace=function(n,x){return this.throwIfDisposed(),Qr.depthToSpace(this,n,x)},n.prototype.fft=function(){return this.throwIfDisposed(),Qr.spectral.fft(this)},n.prototype.ifft=function(){return this.throwIfDisposed(),Qr.spectral.ifft(this)},n.prototype.rfft=function(){return this.throwIfDisposed(),Qr.spectral.rfft(this)},n.prototype.irfft=function(){return this.throwIfDisposed(),Qr.spectral.irfft(this)},n}();Object.defineProperty(Kr,Symbol.hasInstance,{value:function(n){return!!n&&null!=n.dataId&&null!=n.shape&&null!=n.dtype}});var Yr,Jr,Xr,Zr,$r,no=function(n){function x(x,t,e,i){var r=n.call(this,x.shape,x.dtype,x.dataId,i)||this;return r.trainable=t,r.name=e,r}return Di(x,n),x.prototype.assign=function(n){if(n.dtype!==this.dtype)throw new Error("dtype of the new value ("+n.dtype+") and previous value ("+this.dtype+") must match");if(!xr(n.shape,this.shape))throw new Error("shape of the new value ("+n.shape+") and previous value ("+this.shape+") must match");Wr().disposeTensor(this),this.dataId=n.dataId,Wr().incRef(this,null)},x.prototype.dispose=function(){Wr().disposeVariable(this),this.isDisposedInternal=!0},x}(Kr);Object.defineProperty(no,Symbol.hasInstance,{value:function(n){return n instanceof Kr&&null!=n.assign&&n.assign instanceof Function}}),function(n){n.R0="R0",n.R1="R1",n.R2="R2",n.R3="R3",n.R4="R4",n.R5="R5",n.R6="R6"}(Yr||(Yr={})),function(n){n.float32="float32",n.int32="int32",n.bool="int32",n.complex64="complex64"}(Jr||(Jr={})),function(n){n.float32="float32",n.int32="int32",n.bool="bool",n.complex64="complex64"}(Xr||(Xr={})),function(n){n.float32="float32",n.int32="float32",n.bool="float32",n.complex64="complex64"}(Zr||(Zr={})),function(n){n.float32="complex64",n.int32="complex64",n.bool="complex64",n.complex64="complex64"}($r||($r={}));var xo={float32:Zr,int32:Jr,bool:Xr,complex64:$r};function to(n,x){if("string"===n||"string"===x){if("string"===n&&"string"===x)return"string";throw new Error("Can not upcast "+n+" with "+x)}return xo[n][x]}function eo(n){return to(n,"int32")}function io(n,x){if(n.dtype===x.dtype)return[n,x];var t=to(n.dtype,x.dtype);return[n.cast(t),x.cast(t)]}function ro(n,x){Ji(n.dtype===x.dtype,function(){return"The dtypes of the first("+n.dtype+") and second("+x.dtype+") input must match"})}function oo(n){var x=[];return function n(x,t,e){if(null!=x)if(x instanceof Kr)t.push(x);else if(i=x,Array.isArray(i)||"object"==typeof i){var i,r=x;for(var o in r){var s=r[o];e.has(s)||(e.add(s),n(s,t,e))}}}(n,x,new Set),x}Object.freeze({makeTypesMatch:io,assertTypesMatch:ro,isTensorInList:function(n,x){return x.some(function(x){return x.id===n.id})},getTensorsInContainer:oo});var so,ho=function(){function n(){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 n.prototype.dispose=function(){for(var n in this.registeredVariables)this.registeredVariables[n].dispose()},n}(),uo=function(){function n(n){this.ENV=n,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new ho}return n.prototype.ready=function(){return Oi(this,void 0,void 0,function(){var n,x,t;return _i(this,function(e){switch(e.label){case 0:if(null!=this.pendingBackendInit)return[2,this.pendingBackendInit.then(function(){})];if(null!=this.backendInstance)return[2];n=this.getSortedBackends(),x=0,e.label=1;case 1:return x<n.length?(t=n[x],[4,this.initializeBackend(t).success]):[3,5];case 2:return e.sent()?[4,this.setBackend(t)]:[3,4];case 3:return e.sent(),[2];case 4:return x++,[3,1];case 5:throw new Error("Could not initialize any backends, all backend initializations failed.")}})})},Object.defineProperty(n.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 n=this.initializeBackendsAndReturnBest(),x=n.name;if(n.asyncInit)throw new Error("The highest priority backend '"+x+"' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods");this.setBackend(x)}return this.backendInstance},enumerable:!0,configurable:!0}),n.prototype.backendNames=function(){return Object.keys(this.registryFactory)},n.prototype.findBackend=function(n){if(!(n in this.registry)){if(!(n in this.registryFactory))return null;if(this.initializeBackend(n).asyncInit)return null}return this.registry[n]},n.prototype.findBackendFactory=function(n){return n in this.registryFactory?this.registryFactory[n].factory:null},n.prototype.registerBackend=function(n,x,t){return void 0===t&&(t=1),n in this.registryFactory?(console.warn(n+" backend was already registered. Reusing existing backend factory."),!1):(this.registryFactory[n]={factory:x,priority:t},!0)},n.prototype.setBackend=function(n){return Oi(this,void 0,void 0,function(){var x,t,e;return _i(this,function(i){switch(i.label){case 0:if(null==this.registryFactory[n])throw new Error("Backend name '"+n+"' not found in registry");return this.backendName=n,null!=this.registry[n]?[3,4]:(this.backendInstance=null,x=this.initializeBackend(n),t=x.success,x.asyncInit?[4,t]:[3,2]);case 1:return e=i.sent(),[3,3];case 2:e=t,i.label=3;case 3:if(!e)return[2,!1];i.label=4;case 4:return this.backendInstance=this.registry[n],this.setupRegisteredKernels(),this.profiler=new Rr(this.backendInstance),[2,!0]}})})},n.prototype.setupRegisteredKernels=function(){var n=this;Hi(this.backendName).forEach(function(x){null!=x.setupFunc&&x.setupFunc(n.backendInstance)})},n.prototype.disposeRegisteredKernels=function(n){var x=this;Hi(n).forEach(function(t){null!=t.disposeFunc&&t.disposeFunc(x.registry[n])})},n.prototype.initializeBackend=function(n){var x=this,t=this.registryFactory[n];if(null==t)throw new Error("Cannot initialize backend "+n+", no registration found.");try{var e=t.factory();if(Promise.resolve(e)===e){var i=++this.pendingBackendInitId,r=e.then(function(t){return!(i<x.pendingBackendInitId)&&(x.registry[n]=t,x.pendingBackendInit=null,!0)}).catch(function(t){return!(i<x.pendingBackendInitId)&&(x.pendingBackendInit=null,console.warn("Initialization of backend "+n+" failed"),console.warn(t.stack||t.message),!1)});return this.pendingBackendInit=r,{success:r,asyncInit:!0}}return this.registry[n]=e,{success:!0,asyncInit:!1}}catch(x){return console.warn("Initialization of backend "+n+" failed"),console.warn(x.stack||x.message),{success:!1,asyncInit:!1}}},n.prototype.removeBackend=function(n){if(!(n in this.registryFactory))throw new Error(n+" backend not found in registry");this.backendName===n&&null!=this.pendingBackendInit&&this.pendingBackendInitId++,n in this.registry&&(this.disposeRegisteredKernels(n),this.registry[n].dispose(),delete this.registry[n]),delete this.registryFactory[n],this.backendName===n&&(this.pendingBackendInit=null,this.backendName=null,this.backendInstance=null)},n.prototype.getSortedBackends=function(){var n=this;if(0===Object.keys(this.registryFactory).length)throw new Error("No backend found in registry.");return Object.keys(this.registryFactory).sort(function(x,t){return n.registryFactory[t].priority-n.registryFactory[x].priority})},n.prototype.initializeBackendsAndReturnBest=function(){for(var n=this.getSortedBackends(),x=0;x<n.length;x++){var t=n[x],e=this.initializeBackend(t),i=e.success,r=e.asyncInit;if(r||i)return{name:t,asyncInit:r}}throw new Error("Could not initialize any backends, all backend initializations failed.")},n.prototype.moveData=function(n,x){var t=this.state.tensorInfo.get(x),e=t.backend,i=this.readSync(x);e.disposeData(x),t.backend=n,n.move(x,i,t.shape,t.dtype),this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack[this.state.numDataMovesStack.length-1]++},n.prototype.tidy=function(n,x){var t,e=this,i=null;if(null==x){if("function"!=typeof n)throw new Error("Please provide a function to tidy()");x=n}else{if("string"!=typeof n&&!(n instanceof String))throw new Error("When calling with two arguments, the first argument to tidy() must be a string");if("function"!=typeof x)throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function");i=n}return this.scopedRun(function(){return e.startScope(i)},function(){return e.endScope(t)},function(){return(t=x())instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),t})},n.prototype.scopedRun=function(n,x,t){n();try{var e=t();return x(),e}catch(n){throw x(),n}},n.prototype.nextTensorId=function(){return n.nextTensorId++},n.prototype.nextVariableId=function(){return n.nextVariableId++},n.prototype.clone=function(n){var x=this.makeTensorFromDataId(n.dataId,n.shape,n.dtype),t={x:n};return this.addTapeNode(this.state.activeScope.name,t,[x],function(n){return{x:function(){return n.toFloat()}}},[]),x},n.prototype.runKernel=function(n,x,t,e,i){return this.runKernelFunc(null,x,null,n,t,e,i)},n.prototype.shouldCheckForMemLeaks=function(){return this.ENV.getBool("IS_TEST")},n.prototype.checkKernelForMemLeak=function(n,x,t){var e=this.backend.numDataIds(),i=0;t.forEach(function(n){i+="complex64"===n.dtype?3:1});var r=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],o=e-x-i-r;if(o>0)throw new Error("Backend '"+this.backendName+"' has an internal memory leak ("+o+" data ids) after running '"+n+"'")},n.prototype.runKernelFunc=function(n,x,t,e,i,r,o){var s,h=this;void 0===r&&(r=[]),void 0===o&&(o=[]);var u=[],a=this.isTapeOn();null==e&&(e=null!=this.state.activeScope?this.state.activeScope.name:"");var g,l=function(n){a&&(u=n.map(function(n){return h.keep(h.clone(n))}))},c=this.state.numBytes,d=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);var f,p=Pi(e,this.backendName);return g=null!=p?function(){var n=h.backend.numDataIds();f=p.kernelFunc({inputs:x,attrs:i,backend:h.backend});var t=Array.isArray(f)?f:[f];h.shouldCheckForMemLeaks()&&h.checkKernelForMemLeak(e,n,t);var s=t.map(function(n){var x=n.dataId,t=n.shape,e=n.dtype;return h.makeTensorFromDataId(x,t,e)}),u=s.filter(function(n,x){return o[x]});return l((r||[]).slice().concat(u)),s}:function(){var x=h.backend.numDataIds();f=h.tidy(function(){return n(h.backend,l)});var t=Array.isArray(f)?f:[f];return h.shouldCheckForMemLeaks()&&h.checkKernelForMemLeak(e,x,t),t},this.scopedRun(function(){return h.state.kernelDepth++},function(){return h.state.kernelDepth--},function(){s=h.ENV.getBool("DEBUG")?h.profiler.profileKernel(e,x,function(){return g()}):g()}),a&&this.addTapeNode(e,x,s,t,u),this.state.profiling&&this.state.activeProfile.kernels.push({name:e,bytesAdded:this.state.numBytes-c,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-d,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(x).map(function(n){return x[n].shape}),outputShapes:s.map(function(n){return n.shape})}),Array.isArray(f)?s:s[0]},n.prototype.makeTensor=function(n,x,t,e){if(null==n)throw new Error("Values passed to engine.makeTensor() are null");t=t||"float32",e=e||this.backend;var i=n;"string"===t&&mr(n[0])&&(i=n.map(function(n){return Dr(n)}));var r=e.write(i,x,t),o=new Kr(x,t,r,this.nextTensorId());if(this.incRef(o,e),"string"===t){var s=this.state.tensorInfo.get(r),h=yr(i);this.state.numBytes+=h-s.bytes,s.bytes=h}return o},n.prototype.makeTensorFromDataId=function(n,x,t,e){var i=new Kr(x,t=t||"float32",n,this.nextTensorId());return this.incRef(i,e),i},n.prototype.makeVariable=function(n,x,t,e){void 0===x&&(x=!0),t=t||this.nextVariableId().toString(),null!=e&&e!==n.dtype&&(n=n.asType(e));var i=new no(n,x,t,this.nextTensorId());if(null!=this.state.registeredVariables[i.name])throw new Error("Variable with name "+i.name+" was already registered");return this.state.registeredVariables[i.name]=i,this.incRef(i,this.backend),i},n.prototype.incRef=function(n,x){var t=this.state.tensorInfo.has(n.dataId)?this.state.tensorInfo.get(n.dataId).refCount:0;if(this.state.numTensors++,"string"===n.dtype&&this.state.numStringTensors++,0===t){this.state.numDataBuffers++;var e=0;"complex64"!==n.dtype&&"string"!==n.dtype&&(e=n.size*pr(n.dtype)),this.state.tensorInfo.set(n.dataId,{backend:x||this.backend,dtype:n.dtype,shape:n.shape,bytes:e,refCount:0}),this.state.numBytes+=e}this.state.tensorInfo.get(n.dataId).refCount++,n instanceof no||this.track(n)},n.prototype.disposeTensor=function(n){if(this.state.tensorInfo.has(n.dataId)){this.state.numTensors--,"string"===n.dtype&&this.state.numStringTensors--;var x=this.state.tensorInfo.get(n.dataId);x.refCount<=1?("complex64"!==n.dtype&&(this.state.numBytes-=x.bytes),this.state.numDataBuffers--,x.backend.disposeData(n.dataId),this.state.tensorInfo.delete(n.dataId)):this.state.tensorInfo.get(n.dataId).refCount--}},n.prototype.disposeVariables=function(){for(var n in this.state.registeredVariables){var x=this.state.registeredVariables[n];this.disposeVariable(x)}},n.prototype.disposeVariable=function(n){this.disposeTensor(n),null!=this.state.registeredVariables[n.name]&&delete this.state.registeredVariables[n.name]},n.prototype.memory=function(){var n=this.backend.memory();return n.numTensors=this.state.numTensors,n.numDataBuffers=this.state.numDataBuffers,n.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(n.unreliable=!0,null==n.reasons&&(n.reasons=[]),n.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),n},n.prototype.profile=function(n){return Oi(this,void 0,void 0,function(){var x,t;return _i(this,function(e){return this.state.profiling=!0,x=this.state.numBytes,t=this.state.numTensors,this.state.activeProfile.kernels=[],this.state.activeProfile.result=n(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max.apply(Math,this.state.activeProfile.kernels.map(function(n){return n.totalBytesSnapshot})),this.state.activeProfile.newBytes=this.state.numBytes-x,this.state.activeProfile.newTensors=this.state.numTensors-t,[2,this.state.activeProfile]})})},n.prototype.isTapeOn=function(){return this.state.gradientDepth>0&&0===this.state.kernelDepth},n.prototype.addTapeNode=function(n,x,t,e,i){var r=this,o={id:this.state.nextTapeNodeId++,kernelName:n,inputs:x,outputs:t,saved:i},s=Li(n);null!=s&&(e=s.gradFunc),null!=e&&(o.gradient=function(n){return n=n.map(function(n,x){if(null==n){var e=t[x],i=Er(e.size,e.dtype);return r.makeTensor(i,e.shape,e.dtype)}return n}),e(n.length>1?n:n[0],i)}),this.state.activeTape.push(o)},n.prototype.keep=function(n){return n.kept=!0,n},n.prototype.startTape=function(){0===this.state.gradientDepth&&(this.state.activeTape=[]),this.state.gradientDepth++},n.prototype.endTape=function(){this.state.gradientDepth--},n.prototype.startScope=function(n){var x={track:[],name:"unnamed scope",id:this.state.nextScopeId++};n&&(x.name=n),this.state.scopeStack.push(x),this.state.activeScope=x},n.prototype.endScope=function(n){for(var x=this,t=oo(n),e=new Set(t.map(function(n){return n.id})),i=0;i<this.state.activeScope.track.length;i++){var r=this.state.activeScope.track[i];r.kept||e.has(r.id)||r.dispose()}var o=this.state.scopeStack.pop();this.state.activeScope=0===this.state.scopeStack.length?null:this.state.scopeStack[this.state.scopeStack.length-1],t.forEach(function(n){n.kept||n.scopeId!==o.id||x.track(n)})},n.prototype.gradients=function(n,x,t,e){var i=this;if(void 0===e&&(e=!1),Ji(x.length>0,function(){return"gradients() received an empty list of xs."}),null!=t&&"float32"!==t.dtype)throw new Error("dy must have 'float32' dtype, but has '"+t.dtype+"'");var r=this.scopedRun(function(){return i.startTape()},function(){return i.endTape()},function(){return i.tidy("forward",n)});Ji(r instanceof Kr,function(){return"The result y returned by f() must be a tensor."});var o=function(n,x,t){for(var e={},i={},r=0;r<x.length;r++)e[x[r].id]=!0;for(r=0;r<n.length;r++){var o=(d=n[r]).inputs;for(var s in o){for(var h=o[s],u=!1,a=0;a<x.length;a++)if(e[h.id]){d.outputs.forEach(function(n){return e[n.id]=!0}),u=!0,i[d.id]=!0;break}if(u)break}}var g={};g[t.id]=!0;var l={};for(r=n.length-1;r>=0;r--)for(o=(d=n[r]).inputs,a=0;a<d.outputs.length;a++)if(g[d.outputs[a].id]){for(var s in o)g[o[s].id]=!0,l[d.id]=!0;break}var c=[];for(r=0;r<n.length;r++){var d;if(i[(d=n[r]).id]&&l[d.id]){var f={};for(var s in d.inputs){var p=d.inputs[s];e[p.id]&&(f[s]=p)}var y=Object.assign({},d);y.inputs=f,y.outputs=d.outputs,c.push(y)}}return c}(this.state.activeTape,x,r);if(!e&&0===o.length&&x.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 n,e,s={};s[r.id]=null==t?(n=r.shape,e=Ar(nr(n),"float32"),ao.makeTensor(e,n,"float32")):t,function(n,x,t){for(var e=function(e){var i=x[e],r=[];if(i.outputs.forEach(function(x){var t=n[x.id];null!=t?r.push(t):r.push(null)}),null==i.gradient)throw new Error("Cannot compute gradient: gradient function not found for "+i.kernelName+".");var o=i.gradient(r),s=function(x){if(!(x in o))throw new Error("Cannot backprop through input "+x+". Available gradients found: "+Object.keys(o)+".");var e=t(function(){return o[x]()});if("float32"!==e.dtype)throw new Error("Error in gradient for op "+i.kernelName+". The gradient of input "+x+" must have 'float32' dtype, but has '"+e.dtype+"'");var r=i.inputs[x];if(!xr(e.shape,r.shape))throw new Error("Error in gradient for op "+i.kernelName+". The gradient of input '"+x+"' has shape '"+e.shape+"', which does not match the shape of the input '"+r.shape+"'");if(null==n[r.id])n[r.id]=e;else{var s=n[r.id];n[r.id]=s.add(e),s.dispose()}};for(var h in i.inputs)s(h)},i=x.length-1;i>=0;i--)e(i)}(s,o,function(n){return i.tidy(n)});var h=x.map(function(n){return s[n.id]});return 0===i.state.gradientDepth&&(i.state.activeTape.forEach(function(n){for(var x=0,t=n.saved;x<t.length;x++)t[x].dispose()}),i.state.activeTape=null),{value:r,grads:h}})},n.prototype.customGrad=function(n){var x=this;return Ji(jr(n),function(){return"The f passed in customGrad(f) must be a function."}),function(){for(var t,e=[],i=0;i<arguments.length;i++)e[i]=arguments[i];Ji(e.every(function(n){return n instanceof Kr}),function(){return"The args passed in customGrad(f)(x1, x2,...) must all be tensors"});var r={};return e.forEach(function(n,x){r[x]=n}),x.runKernelFunc(function(x,i){return Ji((t=n.apply(void 0,e.concat([i]))).value instanceof Kr,function(){return"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"}),Ji(jr(t.gradFunc),function(){return"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."}),t.value},r,function(n,x){var i=t.gradFunc(n,x),r=Array.isArray(i)?i:[i];Ji(r.length===e.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(...)."}),Ji(r.every(function(n){return n instanceof Kr}),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 o={};return r.forEach(function(n,x){o[x]=function(){return n}}),o})}},n.prototype.readSync=function(n){return this.state.tensorInfo.get(n).backend.readSync(n)},n.prototype.read=function(n){return this.state.tensorInfo.get(n).backend.read(n)},n.prototype.time=function(n){return Oi(this,void 0,void 0,function(){var x,t;return _i(this,function(e){switch(e.label){case 0:return x=Sr(),[4,this.backend.time(n)];case 1:return(t=e.sent()).wallMs=Sr()-x,[2,t]}})})},n.prototype.track=function(n){return null!=this.state.activeScope&&(n.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(n)),n},Object.defineProperty(n.prototype,"registeredVariables",{get:function(){return this.state.registeredVariables},enumerable:!0,configurable:!0}),n.prototype.reset=function(){for(var n in this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new ho,this.registry)this.disposeRegisteredKernels(n),this.registry[n].dispose(),delete this.registry[n];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null},n.nextTensorId=0,n.nextVariableId=0,n}(),ao=function(){var n=function(){if(null==so){var n=void 0;if("undefined"!=typeof window)n=window;else if("undefined"!=typeof e.g)n=e.g;else if("undefined"!=typeof process)n=process;else{if("undefined"==typeof self)throw new Error("Could not find a global object");n=self}so=n}return so}();if(null==n._tfengine){var x=new Ti(n);n._tfengine=new uo(x)}return function(n){Mi=n}(n._tfengine.ENV),Wr=function(){return n._tfengine},n._tfengine}();function go(){return"undefined"!=typeof window&&null!=window.document||"undefined"!=typeof WorkerGlobalScope}var lo=Bi();lo.registerFlag("DEBUG",function(){return!1},function(n){n&&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.")}),lo.registerFlag("IS_BROWSER",function(){return go()}),lo.registerFlag("IS_NODE",function(){return"undefined"!=typeof process&&void 0!==process.versions&&void 0!==process.versions.node}),lo.registerFlag("IS_CHROME",function(){return"undefined"!=typeof navigator&&null!=navigator&&null!=navigator.userAgent&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor)}),lo.registerFlag("PROD",function(){return!1}),lo.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",function(){return lo.getBool("DEBUG")}),lo.registerFlag("DEPRECATION_WARNINGS_ENABLED",function(){return!0}),lo.registerFlag("IS_TEST",function(){return!1});var co,fo,po,yo={},mo={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function bo(n,x){yo[n]=x}function zo(n){n in yo||(yo[n]=function(n){if(1!==n&&2!==n)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");var x=function(n){if("undefined"!=typeof OffscreenCanvas&&2===n)return new OffscreenCanvas(300,150);if("undefined"!=typeof document)return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}(n);return x.addEventListener("webglcontextlost",function(x){x.preventDefault(),delete yo[n]},!1),1===n?x.getContext("webgl",mo)||x.getContext("experimental-webgl",mo):x.getContext("webgl2",mo)}(n));var x=yo[n];return x.isContextLost()?(delete yo[n],zo(n)):(x.disable(x.DEPTH_TEST),x.disable(x.STENCIL_TEST),x.disable(x.BLEND),x.disable(x.DITHER),x.disable(x.POLYGON_OFFSET_FILL),x.disable(x.SAMPLE_COVERAGE),x.enable(x.SCISSOR_TEST),x.enable(x.CULL_FACE),x.cullFace(x.BACK),yo[n])}function vo(n,x){return[x,n]}function jo(n){var x=nr(n);return ir(Math.ceil(x/4))}function wo(n,x){return[Math.max(1,Math.ceil(x/2)),Math.max(1,Math.ceil(n/2))]}function ko(n,x){var t,e,i,r,o,s,h,u,a,g=n;return 2===Bi().getNumber("WEBGL_VERSION")?(t=g.R32F,e=g.R16F,i=g.RGBA16F,r=g.RGBA32F,o=g.RED,s=4,h=1,u=g.HALF_FLOAT,a=g.FLOAT):(t=n.RGBA,e=n.RGBA,i=n.RGBA,r=g.RGBA,o=n.RGBA,s=4,h=4,u=null!=x?x.HALF_FLOAT_OES:null,a=n.FLOAT),{internalFormatFloat:t,internalFormatHalfFloat:e,internalFormatPackedHalfFloat:i,internalFormatPackedFloat:r,textureFormatFloat:o,downloadTextureFormat:n.RGBA,downloadUnpackNumChannels:s,defaultNumChannels:h,textureTypeHalfFloat:u,textureTypeFloat:a}}function qo(n,x,t){var e=t();return x&&function(n){var x=n.getError();if(x!==n.NO_ERROR)throw new Error("WebGL Error: "+So(n,x))}(n),e}!function(n){n[n.DENSE=0]="DENSE",n[n.SHARED_BATCH=1]="SHARED_BATCH"}(co||(co={})),function(n){n[n.RENDER=0]="RENDER",n[n.UPLOAD=1]="UPLOAD",n[n.PIXELS=2]="PIXELS",n[n.DOWNLOAD=3]="DOWNLOAD"}(fo||(fo={})),function(n){n[n.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",n[n.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",n[n.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",n[n.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",n[n.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"}(po||(po={}));var Co=5.96e-8,Ao=65504;function Eo(n){return!!(Bi().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||0===n||Co<Math.abs(n)&&Math.abs(n)<Ao)}function So(n,x){switch(x){case n.NO_ERROR:return"NO_ERROR";case n.INVALID_ENUM:return"INVALID_ENUM";case n.INVALID_VALUE:return"INVALID_VALUE";case n.INVALID_OPERATION:return"INVALID_OPERATION";case n.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case n.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case n.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return"Unknown error code "+x}}function Io(n,x,t){return $o(n,x,function(){return n.getExtension(t)},'Extension "'+t+'" not supported on this browser.')}function Do(n,x,t){var e=$o(n,x,function(){return n.createShader(n.VERTEX_SHADER)},"Unable to create vertex WebGLShader.");if(qo(n,x,function(){return n.shaderSource(e,t)}),qo(n,x,function(){return n.compileShader(e)}),!1===n.getShaderParameter(e,n.COMPILE_STATUS))throw console.log(n.getShaderInfoLog(e)),new Error("Failed to compile vertex shader.");return e}function Oo(n,x,t){var e=$o(n,x,function(){return n.createShader(n.FRAGMENT_SHADER)},"Unable to create fragment WebGLShader.");if(qo(n,x,function(){return n.shaderSource(e,t)}),qo(n,x,function(){return n.compileShader(e)}),!1===n.getShaderParameter(e,n.COMPILE_STATUS))throw function(n,x){var t=Ro.exec(x);if(null==t)return console.log("Couldn't parse line number in error: "+x),void console.log(n);for(var e=+t[1],i=n.split("\n"),r=i.length.toString().length+2,o=i.map(function(n,x){return rr((x+1).toString(),r)+n}),s=0,h=0;h<o.length;h++)s=Math.max(o[h].length,s);var u=o.slice(0,e-1),a=o.slice(e-1,e),g=o.slice(e);console.log(u.join("\n")),console.log(x.split("\n")[0]),console.log("%c "+rr(a[0],s),"border:1px solid red; background-color:#e3d2d2; color:#a61717"),console.log(g.join("\n"))}(t,n.getShaderInfoLog(e)),new Error("Failed to compile fragment shader.");return e}var _o,To,Ro=/ERROR: [0-9]+:([0-9]+):/g;function Bo(n,x){return $o(n,x,function(){return n.createProgram()},"Unable to create WebGLProgram.")}function Mo(n,x,t){if(qo(n,x,function(){return n.linkProgram(t)}),!1===n.getProgramParameter(t,n.LINK_STATUS))throw console.log(n.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function No(n,x,t){if(qo(n,x,function(){return n.validateProgram(t)}),!1===n.getProgramParameter(t,n.VALIDATE_STATUS))throw console.log(n.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function Fo(n,x,t){var e=$o(n,x,function(){return n.createBuffer()},"Unable to create WebGLBuffer");return qo(n,x,function(){return n.bindBuffer(n.ARRAY_BUFFER,e)}),qo(n,x,function(){return n.bufferData(n.ARRAY_BUFFER,t,n.STATIC_DRAW)}),e}function Po(n,x,t){var e=$o(n,x,function(){return n.createBuffer()},"Unable to create WebGLBuffer");return qo(n,x,function(){return n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,e)}),qo(n,x,function(){return n.bufferData(n.ELEMENT_ARRAY_BUFFER,t,n.STATIC_DRAW)}),e}function Lo(n,x){return $o(n,x,function(){return n.createTexture()},"Unable to create WebGLTexture.")}function Ho(n,x){var t=Bi().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(n<=0||x<=0){var e="["+n+"x"+x+"]";throw new Error("Requested texture size "+e+" is invalid.")}if(n>t||x>t)throw e="["+n+"x"+x+"]",new Error("Requested texture size "+e+" greater than WebGL maximum on this browser / GPU ["+t+"x"+t+"].")}function Uo(n,x){return $o(n,x,function(){return n.createFramebuffer()},"Unable to create WebGLFramebuffer.")}function Vo(n,x,t,e,i,r,o,s){var h=n.getAttribLocation(t,e);return-1!==h&&(qo(n,x,function(){return n.bindBuffer(n.ARRAY_BUFFER,i)}),qo(n,x,function(){return n.vertexAttribPointer(h,r,n.FLOAT,!1,o,s)}),qo(n,x,function(){return n.enableVertexAttribArray(h)}),!0)}function Wo(n,x,t,e){ns(n,e),qo(n,x,function(){return n.activeTexture(n.TEXTURE0+e)}),qo(n,x,function(){return n.bindTexture(n.TEXTURE_2D,t)})}function Qo(n,x,t,e){return $o(n,x,function(){return n.getUniformLocation(t,e)},'uniform "'+e+'" not present in program.')}function Go(n,x,t){return n.getUniformLocation(x,t)}function Ko(n,x,t,e,i,r){qo(n,x,function(){return Wo(n,x,e,r)}),qo(n,x,function(){return n.uniform1i(i,r)})}function Yo(n,x,t,e){qo(n,x,function(){return n.bindFramebuffer(n.FRAMEBUFFER,e)}),qo(n,x,function(){return n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,t,0)})}function Jo(n,x,t){qo(n,x,function(){return n.bindFramebuffer(n.FRAMEBUFFER,t)}),qo(n,x,function(){return n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,null,0)})}function Xo(n){var x=n.checkFramebufferStatus(n.FRAMEBUFFER);if(x!==n.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+Zo(n,x))}function Zo(n,x){switch(x){case n.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case n.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case n.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case n.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return"unknown error "+x}}function $o(n,x,t,e){var i=qo(n,x,function(){return t()});if(null==i)throw new Error(e);return i}function ns(n,x){var t=n.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,e=x+n.TEXTURE0;if(e<n.TEXTURE0||e>t)throw new Error("textureUnit must be in [gl.TEXTURE0, gl.TEXTURE"+t+"].")}function xs(n,x){return void 0===x&&(x=2),nr(n.slice(0,n.length-x))}function ts(n){if(0===n.length)throw Error("Cannot get rows and columns of an empty shape array.");return[n.length>1?n[n.length-2]:1,n[n.length-1]]}function es(n){var x=[1,1,1];return 0===n.length||1===n.length&&1===n[0]||(x=[xs(n)].concat(ts(n))),x}function is(n,x){var t;void 0===x&&(x=!1);var e=Bi().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(x&&(e*=2,1===(n=n.map(function(x,t){return t>=n.length-2?Ki(n[t]):n[t]})).length&&(n=[2,n[0]])),2!==n.length){var i=ur(n);n=i.newShape}var r=nr(n);if(n.length<=1&&r<=e)return[1,r];if(2===n.length&&n[0]<=e&&n[1]<=e)return n;if(3===n.length&&n[0]*n[1]<=e&&n[2]<=e)return[n[0]*n[1],n[2]];if(3===n.length&&n[0]<=e&&n[1]*n[2]<=e)return[n[0],n[1]*n[2]];if(4===n.length&&n[0]*n[1]*n[2]<=e&&n[3]<=e)return[n[0]*n[1]*n[2],n[3]];if(4===n.length&&n[0]<=e&&n[1]*n[2]*n[3]<=e)return[n[0],n[1]*n[2]*n[3]];if(x){var o=xs(n),s=2,h=2;return n.length&&(s=(t=ts(n))[0],h=t[1]),ir(r=o*(s/2)*(h/2)).map(function(n){return 2*n})}return ir(r)}function rs(n){return n%2==0}function os(n,x){if(xr(n=n.slice(-2),x=x.slice(-2)))return!0;if(!n.length||!x.length)return!0;if(0===n[0]||0===n[1]||0===x[0]||0===x[1])return!0;if(n.length!==x.length){var t=n.slice(-1)[0],e=x.slice(-1)[0];if(t===e)return!0;if(rs(t)&&rs(e)&&(1===n[0]||1===x[0]))return!0}return n[1]===x[1]&&rs(n[0])&&rs(x[0])}function ss(n){if(null==_o){var x=zo(n);_o=x.getParameter(x.MAX_TEXTURE_SIZE)}return _o}function hs(n){if(null==To){var x=zo(n);To=x.getParameter(x.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,To)}function us(n){if(0===n)return 0;var x=zo(n);return as(x,"EXT_disjoint_timer_query_webgl2")&&2===n?2:as(x,"EXT_disjoint_timer_query")?1:0}function as(n,x){return null!=n.getExtension(x)}function gs(n){try{if(null!=zo(n))return!0}catch(n){return!1}return!1}function ls(n){if(0===n)return!1;var x=zo(n);if(1===n){if(!as(x,"OES_texture_float"))return!1}else if(!as(x,"EXT_color_buffer_float"))return!1;return ds(x)}function cs(n){if(0===n)return!1;var x=zo(n);if(1!==n){if(as(x,"EXT_color_buffer_float"))return ds(x);if(as(x,"EXT_color_buffer_half_float")){var t=x.getExtension("EXT_color_buffer_half_float");return function(n,x){var t=ko(n,x),e=n.createTexture();n.bindTexture(n.TEXTURE_2D,e),n.texImage2D(n.TEXTURE_2D,0,t.internalFormatHalfFloat,1,1,0,t.textureFormatFloat,t.textureTypeHalfFloat,null);var i=n.createFramebuffer();n.bindFramebuffer(n.FRAMEBUFFER,i),n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,e,0);var r=n.checkFramebufferStatus(n.FRAMEBUFFER)===n.FRAMEBUFFER_COMPLETE;return n.bindTexture(n.TEXTURE_2D,null),n.bindFramebuffer(n.FRAMEBUFFER,null),n.deleteTexture(e),n.deleteFramebuffer(i),r}(x,t)}return!1}return!!as(x,"OES_texture_float")&&!!as(x,"WEBGL_color_buffer_float")&&ds(x)}function ds(n){var x=ko(n),t=n.createTexture();n.bindTexture(n.TEXTURE_2D,t),n.texImage2D(n.TEXTURE_2D,0,x.internalFormatFloat,1,1,0,x.textureFormatFloat,x.textureTypeFloat,null);var e=n.createFramebuffer();n.bindFramebuffer(n.FRAMEBUFFER,e),n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,t,0);var i=n.checkFramebufferStatus(n.FRAMEBUFFER)===n.FRAMEBUFFER_COMPLETE;return n.bindTexture(n.TEXTURE_2D,null),n.bindFramebuffer(n.FRAMEBUFFER,null),n.deleteTexture(t),n.deleteFramebuffer(e),i}function fs(n){return 2===n&&null!=zo(n).fenceSync}var ps=Object.freeze({callAndCheck:qo,canBeRepresented:Eo,getWebGLErrorMessage:So,getExtensionOrThrow:Io,createVertexShader:Do,createFragmentShader:Oo,createProgram:Bo,linkProgram:Mo,validateProgram:No,createStaticVertexBuffer:Fo,createStaticIndexBuffer:Po,getNumChannels:function(){return 2===Bi().getNumber("WEBGL_VERSION")?1:4},createTexture:Lo,validateTextureSize:Ho,createFramebuffer:Uo,bindVertexBufferToProgramAttribute:Vo,bindTextureUnit:Wo,unbindTextureUnit:function(n,x,t){ns(n,t),qo(n,x,function(){return n.activeTexture(n.TEXTURE0+t)}),qo(n,x,function(){return n.bindTexture(n.TEXTURE_2D,null)})},getProgramUniformLocationOrThrow:Qo,getProgramUniformLocation:Go,bindTextureToProgramUniformSampler:Ko,bindCanvasToFramebuffer:function(n,x){qo(n,x,function(){return n.bindFramebuffer(n.FRAMEBUFFER,null)}),qo(n,x,function(){return n.viewport(0,0,n.canvas.width,n.canvas.height)}),qo(n,x,function(){return n.scissor(0,0,n.canvas.width,n.canvas.height)})},bindColorTextureToFramebuffer:Yo,unbindColorTextureFromFramebuffer:Jo,validateFramebuffer:Xo,getFramebufferErrorMessage:Zo,getBatchDim:xs,getRowsCols:ts,getShapeAs3D:es,getTextureShapeFromLogicalShape:is,isReshapeFree:os,getWebGLMaxTextureSize:ss,resetMaxTextureSize:function(){_o=null},resetMaxTexturesInShader:function(){To=null},getMaxTexturesInShader:hs,getWebGLDisjointQueryTimerVersion:us,hasExtension:as,isWebGLVersionEnabled:gs,isCapableOfRenderingToFloatTexture:ls,isDownloadFloatTextureEnabled:cs,isWebGLFenceEnabled:fs}),ys=Bi();function ms(n){Bi().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(n+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}function bs(n,x){return ao.tidy(n,x)}function zs(n){oo(n).forEach(function(n){return n.dispose()})}function vs(n){return ao.keep(n)}function js(){for(var n=[],x=0;x<arguments.length;x++)n[x]=arguments[x];Bi().getBool("IS_TEST")||console.warn.apply(console,n)}function ws(n,x){var t=n;if(fr(n))return"string"===x?[]:[n.length];if(!Array.isArray(n))return[];for(var e=[];Array.isArray(t)||fr(t)&&"string"!==x;)e.push(t.length),t=t[0];return Array.isArray(n)&&Bi().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&function n(x,t,e){if(e=e||[],Array.isArray(x)||fr(x)){Ji(t.length>0,function(){return"Element arr["+e.join("][")+"] should be a primitive, but is an array of "+x.length+" elements"}),Ji(x.length===t[0],function(){return"Element arr["+e.join("][")+"] should have "+t[0]+" elements, but has "+x.length+" elements"});for(var i=t.slice(1),r=0;r<x.length;++r)n(x[r],i,e.concat(r))}else Ji(0===t.length,function(){return"Element arr["+e.join("][")+"] is a primitive, but should be an array/TypedArray of "+t[0]+" elements"})}(n,e,[]),e}function ks(n,x,t,e){if(null!=n&&("numeric"!==n&&n!==x||"numeric"===n&&"string"===x))throw new Error("Argument '"+t+"' passed to '"+e+"' must be "+n+" tensor, but got "+x+" tensor")}function qs(n,x,t,e){if(void 0===e&&(e="numeric"),n instanceof Kr)return ks(e,n.dtype,x,t),n;var i=vr(n);if("string"!==i&&["bool","int32","float32"].indexOf(e)>=0&&(i=e),ks(e,i,x,t),null==n||!fr(n)&&!Array.isArray(n)&&"number"!=typeof n&&"boolean"!=typeof n&&"string"!=typeof n){var r=null==n?"null":n.constructor.name;throw new Error("Argument '"+x+"' passed to '"+t+"' must be a Tensor or TensorLike, but got '"+r+"'")}var o=ws(n,i);fr(n)||Array.isArray(n)||(n=[n]);var s="string"!==i?qr(n,i,Bi().getBool("DEBUG")):$i(n,[],!0);return ao.makeTensor(s,o,i)}function Cs(n,x,t,e){if(void 0===e&&(e="numeric"),!Array.isArray(n))throw new Error("Argument "+x+" passed to "+t+" must be a `Tensor[]` or `TensorLike[]`");return n.map(function(n,e){return qs(n,x+"["+e+"]",t)},e)}function As(n,x){for(var t=0;t<n.length;++t)if(n[n.length-t-1]!==x-1-t)return!1;return!0}function Es(n,x,t){for(var e=n.length+x.length,i=[],r=0,o=0,s=0;s<e;s++)-1===t.indexOf(s)?i.push(n[r++]):i.push(x[o++]);return i}function Ss(n,x){for(var t=[],e=n.length,i=0;i<e;i++)-1===x.indexOf(i)&&t.push(n[i]);return[t,x.map(function(x){return n[x]})]}function Is(n,x){return Es(n,x.map(function(n){return 1}),x)}function Ds(n,x,t){Ji(As(x,t),function(){return n+" supports only inner-most axes for now. Got axes "+x+" and rank-"+t+" input."})}function Os(n,x){if(As(n,x))return null;for(var t=[],e=0;e<x;++e)-1===n.indexOf(e)&&t.push(e);return n.forEach(function(n){return t.push(n)}),t}function _s(n){return n.map(function(n,x){return[x,n]}).sort(function(n,x){return n[1]-x[1]}).map(function(n){return n[0]})}function Ts(n,x){for(var t=[],e=x-n;e<x;++e)t.push(e);return t}function Rs(n,x){var t=n[0].length;n.forEach(function(n,x){Ji(n.length===t,function(){return"Error in concat"+t+"D: rank of tensors["+x+"] must be the same as the rank of the rest ("+t+")"})}),Ji(x>=0&&x<t,function(){return"Error in concat"+t+"D: axis must be between 0 and "+(t-1)+"."});var e=n[0];n.forEach(function(n,i){for(var r=0;r<t;r++)Ji(r===x||n[r]===e[r],function(){return"Error in concat"+t+"D: Shape of tensors["+i+"] ("+n+") does not match the shape of the rest ("+e+") along the non-concatenated axis "+i+"."})})}function Bs(n,x){for(var t=n[0].slice(),e=1;e<n.length;e++)t[x]+=n[e][x];return t}function Ms(n){var x=Object.keys(n);if(1!==x.length)throw new Error("Please provide an object with a single key (operation name) mapping to a function. Got an object with "+x.length+" keys.");var t=x[0],e=n[t];t.endsWith("_")&&(t=t.substring(0,t.length-1));var i=function(){for(var n=[],x=0;x<arguments.length;x++)n[x]=arguments[x];ao.startScope(t);try{var i=e.apply(void 0,n);return i instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),ao.endScope(i),i}catch(n){throw ao.endScope(null),n}};return Object.defineProperty(i,"name",{value:t,configurable:!0}),i}ys.registerFlag("HAS_WEBGL",function(){return ys.getNumber("WEBGL_VERSION")>0}),ys.registerFlag("WEBGL_VERSION",function(){return gs(2)?2:gs(1)?1:0}),ys.registerFlag("WEBGL_BUFFER_SUPPORTED",function(){return 2===ys.get("WEBGL_VERSION")}),ys.registerFlag("WEBGL_CPU_FORWARD",function(){return!0}),ys.registerFlag("WEBGL_FORCE_F16_TEXTURES",function(){return!1}),ys.registerFlag("WEBGL_PACK",function(){return ys.getBool("HAS_WEBGL")}),ys.registerFlag("WEBGL_PACK_NORMALIZATION",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_PACK_CLIP",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_PACK_DEPTHWISECONV",function(){return!1}),ys.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_PACK_REDUCE",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_LAZILY_UNPACK",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_CONV_IM2COL",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_MAX_TEXTURE_SIZE",function(){return ss(ys.getNumber("WEBGL_VERSION"))}),ys.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",function(){return hs(ys.getNumber("WEBGL_VERSION"))}),ys.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",function(){var n=ys.getNumber("WEBGL_VERSION");return 0===n?0:us(n)}),ys.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",function(){return ys.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&(n=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(n)||/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(n.substr(0,4))));var n}),ys.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",function(){return ls(ys.getNumber("WEBGL_VERSION"))}),ys.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",function(){return!ys.getBool("WEBGL_FORCE_F16_TEXTURES")&&ys.getBool("WEBGL_RENDER_FLOAT32_CAPABLE")}),ys.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",function(){return cs(ys.getNumber("WEBGL_VERSION"))}),ys.registerFlag("WEBGL_FENCE_API_ENABLED",function(){return fs(ys.getNumber("WEBGL_VERSION"))}),ys.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",function(){return ys.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0}),Gr=ms;var Ns=Ms({complex_:function(n,x){var t=qs(n,"real","complex"),e=qs(x,"imag","complex");return Xi(t.shape,e.shape,"real and imag shapes, "+t.shape+" and "+e.shape+", must match in call to tf.complex()."),ao.runKernelFunc(function(n){return n.complex(t,e)},{$real:t,$imag:e})}}),Fs=Ms({real_:function(n){var x=qs(n,"input","real");return ao.runKernelFunc(function(n){return n.real(x)},{$input:x})}}),Ps=Ms({imag_:function(n){var x=qs(n,"input","imag");return ao.runKernelFunc(function(n){return n.imag(x)},{$input:x})}});function Ls(n,x,t){return Hs(n,x,ws(n,t),t)}function Hs(n,x,t,e){if(null==e&&(e=vr(n)),"complex64"===e)throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!fr(n)&&!Array.isArray(n)&&"number"!=typeof n&&"boolean"!=typeof n&&"string"!=typeof n)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!=x){Ir(x);var i=nr(x),r=nr(t);Ji(i===r,function(){return"Based on the provided shape, ["+x+"], the tensor should have "+i+" values but has "+r});for(var o=0;o<t.length;++o){var s=t[o],h=o!==t.length-1||s!==nr(x.slice(o));Ji(t[o]===x[o]||!h,function(){return"Error creating a new Tensor. Inferred shape ("+t+") does not match the provided shape ("+x+"). "})}}return fr(n)||Array.isArray(n)||(n=[n]),x=x||t,n="string"!==e?qr(n,e,Bi().getBool("DEBUG")):$i(n,[],!0),ao.makeTensor(n,x,e)}function Us(n,x){if((fr(n)&&"string"!==x||Array.isArray(n))&&"complex64"!==x)throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if("string"===x&&fr(n)&&!(n instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");return Hs(n,[],[],x)}function Vs(n,x){Zi(n);var t=ws(n,x);if(1!==t.length)throw new Error("tensor1d() requires values to be a flat/TypedArray");return Hs(n,null,t,x)}function Ws(n,x,t){if(Zi(n),null!=x&&2!==x.length)throw new Error("tensor2d() requires shape to have two numbers");var e=ws(n,t);if(2!==e.length&&1!==e.length)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(1===e.length&&null==x)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return Hs(n,x,e,t)}function Qs(n,x,t){if(Zi(n),null!=x&&3!==x.length)throw new Error("tensor3d() requires shape to have three numbers");var e=ws(n,t);if(3!==e.length&&1!==e.length)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(1===e.length&&null==x)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return Hs(n,x,e,t)}function Gs(n,x,t){if(Zi(n),null!=x&&4!==x.length)throw new Error("tensor4d() requires shape to have four numbers");var e=ws(n,t);if(4!==e.length&&1!==e.length)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(1===e.length&&null==x)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return Hs(n,x,e,t)}function Ks(n,x,t){if(Zi(n),null!=x&&5!==x.length)throw new Error("tensor5d() requires shape to have five numbers");var e=ws(n,t);if(5!==e.length&&1!==e.length)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(1===e.length&&null==x)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return Hs(n,x,e,t)}function Ys(n,x,t){if(Zi(n),null!=x&&6!==x.length)throw new Error("tensor6d() requires shape to have six numbers");var e=ws(n,t);if(6!==e.length&&1!==e.length)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(1===e.length&&null==x)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return Hs(n,x=x||e,e,t)}function Js(n,x,t,e){return void 0===x&&(x=!0),ao.makeVariable(n,x,t,e)}function Xs(n,x){if(void 0===x&&(x="float32"),"complex64"===x){var t=Xs(n,"float32"),e=Zs(n,"float32");return Ns(t,e)}var i=Ar(nr(n),x);return ao.makeTensor(i,n,x)}function Zs(n,x){if(void 0===x&&(x="float32"),"complex64"===x){var t=Zs(n,"float32"),e=Zs(n,"float32");return Ns(t,e)}var i=Er(nr(n),x);return ao.makeTensor(i,n,x)}function $s(n,x,t){return ao.runKernelFunc(function(e){return e.fill(n,x,t)},{})}function nh(n,x,t){if(t<=0)throw new Error("The number of values should be positive.");return ao.runKernelFunc(function(e){return e.linspace(n,x,t)},{})}function xh(n,x,t,e){if(void 0===t&&(t=1),void 0===e&&(e="float32"),0===t)throw new Error("Cannot have a step of zero");if(n===x||n<x&&t<0||x<n&&t>1)return Zs([0],e);var i=Er(Math.abs(Math.ceil((x-n)/t)),e);x<n&&1===t&&(t=-1),i[0]=n;for(var r=1;r<i.length;r++)i[r]=i[r-1]+t;return Vs(i,e)}var th=Ms({onesLike_:function(n){var x=qs(n,"x","onesLike");if("complex64"===x.dtype){var t=th(Fs(x)),e=eh(Ps(x));return Ns(t,e)}return ao.runKernelFunc(function(n){return n.onesLike(x)},{$x:x},function(n,x){return{$x:function(){return eh(n)}}})}}),eh=Ms({zerosLike_:function(n){var x=qs(n,"x","zerosLike");return ao.runKernelFunc(function(n){return n.zerosLike(x)},{$x:x},function(n,x){return{$x:function(){return eh(n)}}})}}),ih=Ms({concat_:function(n,x){void 0===x&&(x=0),Ji(n.length>=1,function(){return"Pass at least one tensor to concat"});var t=Cs(n,"tensors","concat");"complex64"===t[0].dtype&&t.forEach(function(n){if("complex64"!==n.dtype)throw new Error("Cannot concatenate complex64 tensors with a tensor\n with dtype "+n.dtype+". ")}),x=hr(x,t[0].shape)[0];var e=Bs(t.map(function(n){return n.shape}),x);if(0===nr(e))return Ls([],e);if(1===(t=t.filter(function(n){return n.size>0})).length)return t[0];var i=t.map(function(n){return n.shape});Rs(i,x);var r=t,o={axis:x};return ao.runKernelFunc(function(n){return n.concat(t,x)},r,function(n){var t=i.map(function(n){return n[x]});return uh(n,t,x).map(function(n){return function(){return n}})},"Concat",o)}}),rh=Ms({concat1d_:function(n){return ih(n,0)}}),oh=Ms({concat2d_:function(n,x){return ih(n,x)}}),sh=Ms({concat3d_:function(n,x){return ih(n,x)}}),hh=Ms({concat4d_:function(n,x){return ih(n,x)}}),uh=Ms({split_:function(n,x,t){void 0===t&&(t=0);var e,i=qs(n,"x","split");return t=hr(t,i.shape)[0],"number"==typeof x?(Ji(i.shape[t]%x==0,function(){return"Number of splits must evenly divide the axis."}),e=new Array(x).fill(i.shape[t]/x)):(Ji(i.shape[t]===x.reduce(function(n,x){return n+x}),function(){return"The sum of sizes must match the size of the axis dimension."}),e=x),ao.runKernelFunc(function(n){return n.split(i,e,t)},{$x:i},function(n){return{$x:function(){return ih(n,t)}}})}});function ah(n,x){return n(x={exports:{}},x.exports),x.exports}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof e.g?e.g:"undefined"!=typeof self&&self;var gh=ah(function(n){!function(n,x,t){function e(n){var x,t=this,e=(x=4022871197,function(n){n=n.toString();for(var t=0;t<n.length;t++){var e=.02519603282416938*(x+=n.charCodeAt(t));e-=x=e>>>0,x=(e*=x)>>>0,x+=4294967296*(e-=x)}return 2.3283064365386963e-10*(x>>>0)});t.next=function(){var n=2091639*t.s0+2.3283064365386963e-10*t.c;return t.s0=t.s1,t.s1=t.s2,t.s2=n-(t.c=0|n)},t.c=1,t.s0=e(" "),t.s1=e(" "),t.s2=e(" "),t.s0-=e(n),t.s0<0&&(t.s0+=1),t.s1-=e(n),t.s1<0&&(t.s1+=1),t.s2-=e(n),t.s2<0&&(t.s2+=1),e=null}function i(n,x){return x.c=n.c,x.s0=n.s0,x.s1=n.s1,x.s2=n.s2,x}function r(n,x){var t=new e(n),r=x&&x.state,o=t.next;return o.int32=function(){return 4294967296*t.next()|0},o.double=function(){return o()+11102230246251565e-32*(2097152*o()|0)},o.quick=o,r&&("object"==typeof r&&i(r,t),o.state=function(){return i(t,{})}),o}x&&x.exports?x.exports=r:t&&t.amd?t(function(){return r}):this.alea=r}(0,n,!1)}),lh=ah(function(n){!function(n,x,t){function e(n){var x=this,t="";x.x=0,x.y=0,x.z=0,x.w=0,x.next=function(){var n=x.x^x.x<<11;return x.x=x.y,x.y=x.z,x.z=x.w,x.w^=x.w>>>19^n^n>>>8},n===(0|n)?x.x=n:t+=n;for(var e=0;e<t.length+64;e++)x.x^=0|t.charCodeAt(e),x.next()}function i(n,x){return x.x=n.x,x.y=n.y,x.z=n.z,x.w=n.w,x}function r(n,x){var t=new e(n),r=x&&x.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var n=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===n);return n},o.int32=t.next,o.quick=o,r&&("object"==typeof r&&i(r,t),o.state=function(){return i(t,{})}),o}x&&x.exports?x.exports=r:t&&t.amd?t(function(){return r}):this.xor128=r}(0,n,!1)}),ch=ah(function(n){!function(n,x,t){function e(n){var x=this,t="";x.next=function(){var n=x.x^x.x>>>2;return x.x=x.y,x.y=x.z,x.z=x.w,x.w=x.v,(x.d=x.d+362437|0)+(x.v=x.v^x.v<<4^n^n<<1)|0},x.x=0,x.y=0,x.z=0,x.w=0,x.v=0,n===(0|n)?x.x=n:t+=n;for(var e=0;e<t.length+64;e++)x.x^=0|t.charCodeAt(e),e==t.length&&(x.d=x.x<<10^x.x>>>4),x.next()}function i(n,x){return x.x=n.x,x.y=n.y,x.z=n.z,x.w=n.w,x.v=n.v,x.d=n.d,x}function r(n,x){var t=new e(n),r=x&&x.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var n=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===n);return n},o.int32=t.next,o.quick=o,r&&("object"==typeof r&&i(r,t),o.state=function(){return i(t,{})}),o}x&&x.exports?x.exports=r:t&&t.amd?t(function(){return r}):this.xorwow=r}(0,n,!1)}),dh=ah(function(n){!function(n,x,t){function e(n){var x=this;x.next=function(){var n,t,e=x.x,i=x.i;return n=e[i],t=(n^=n>>>7)^n<<24,t^=(n=e[i+1&7])^n>>>10,t^=(n=e[i+3&7])^n>>>3,t^=(n=e[i+4&7])^n<<7,n=e[i+7&7],t^=(n^=n<<13)^n<<9,e[i]=t,x.i=i+1&7,t},function(n,x){var t,e=[];if(x===(0|x))e[0]=x;else for(x=""+x,t=0;t<x.length;++t)e[7&t]=e[7&t]<<15^x.charCodeAt(t)+e[t+1&7]<<13;for(;e.length<8;)e.push(0);for(t=0;t<8&&0===e[t];++t);for(8==t?e[7]=-1:e[t],n.x=e,n.i=0,t=256;t>0;--t)n.next()}(x,n)}function i(n,x){return x.x=n.x.slice(),x.i=n.i,x}function r(n,x){null==n&&(n=+new Date);var t=new e(n),r=x&&x.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var n=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===n);return n},o.int32=t.next,o.quick=o,r&&(r.x&&i(r,t),o.state=function(){return i(t,{})}),o}x&&x.exports?x.exports=r:t&&t.amd?t(function(){return r}):this.xorshift7=r}(0,n,!1)}),fh=ah(function(n){!function(n,x,t){function e(n){var x=this;x.next=function(){var n,t,e=x.w,i=x.X,r=x.i;return x.w=e=e+1640531527|0,t=i[r+34&127],n=i[r=r+1&127],t^=t<<13,n^=n<<17,t^=t>>>15,n^=n>>>12,t=i[r]=t^n,x.i=r,t+(e^e>>>16)|0},function(n,x){var t,e,i,r,o,s=[],h=128;for(x===(0|x)?(e=x,x=null):(x+="\0",e=0,h=Math.max(h,x.length)),i=0,r=-32;r<h;++r)x&&(e^=x.charCodeAt((r+32)%x.length)),0===r&&(o=e),e^=e<<10,e^=e>>>15,e^=e<<4,e^=e>>>13,r>=0&&(o=o+1640531527|0,i=0==(t=s[127&r]^=e+o)?i+1:0);for(i>=128&&(s[127&(x&&x.length||0)]=-1),i=127,r=512;r>0;--r)e=s[i+34&127],t=s[i=i+1&127],e^=e<<13,t^=t<<17,e^=e>>>15,t^=t>>>12,s[i]=e^t;n.w=o,n.X=s,n.i=i}(x,n)}function i(n,x){return x.i=n.i,x.w=n.w,x.X=n.X.slice(),x}function r(n,x){null==n&&(n=+new Date);var t=new e(n),r=x&&x.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var n=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===n);return n},o.int32=t.next,o.quick=o,r&&(r.X&&i(r,t),o.state=function(){return i(t,{})}),o}x&&x.exports?x.exports=r:t&&t.amd?t(function(){return r}):this.xor4096=r}(0,n,!1)}),ph=ah(function(n){!function(n,x,t){function e(n){var x=this,t="";x.next=function(){var n=x.b,t=x.c,e=x.d,i=x.a;return n=n<<25^n>>>7^t,t=t-e|0,e=e<<24^e>>>8^i,i=i-n|0,x.b=n=n<<20^n>>>12^t,x.c=t=t-e|0,x.d=e<<16^t>>>16^i,x.a=i-n|0},x.a=0,x.b=0,x.c=-1640531527,x.d=1367130551,n===Math.floor(n)?(x.a=n/4294967296|0,x.b=0|n):t+=n;for(var e=0;e<t.length+20;e++)x.b^=0|t.charCodeAt(e),x.next()}function i(n,x){return x.a=n.a,x.b=n.b,x.c=n.c,x.d=n.d,x}function r(n,x){var t=new e(n),r=x&&x.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var n=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===n);return n},o.int32=t.next,o.quick=o,r&&("object"==typeof r&&i(r,t),o.state=function(){return i(t,{})}),o}x&&x.exports?x.exports=r:t&&t.amd?t(function(){return r}):this.tychei=r}(0,n,!1)}),yh=ah(function(n){!function(x,t){var i,r=this,o=256,s=6,h="random",u=t.pow(o,s),a=t.pow(2,52),g=2*a,l=o-1;function c(n,e,l){var c=[],m=p(function n(x,t){var e,i=[],r=typeof x;if(t&&"object"==r)for(e in x)try{i.push(n(x[e],t-1))}catch(n){}return i.length?i:"string"==r?x:x+"\0"}((e=1==e?{entropy:!0}:e||{}).entropy?[n,y(x)]:null==n?function(){try{var n;return i&&(n=i.randomBytes)?n=n(o):(n=new Uint8Array(o),(r.crypto||r.msCrypto).getRandomValues(n)),y(n)}catch(n){var t=r.navigator,e=t&&t.plugins;return[+new Date,r,e,r.screen,y(x)]}}():n,3),c),b=new d(c),z=function(){for(var n=b.g(s),x=u,t=0;n<a;)n=(n+t)*o,x*=o,t=b.g(1);for(;n>=g;)n/=2,x/=2,t>>>=1;return(n+t)/x};return z.int32=function(){return 0|b.g(4)},z.quick=function(){return b.g(4)/4294967296},z.double=z,p(y(b.S),x),(e.pass||l||function(n,x,e,i){return i&&(i.S&&f(i,b),n.state=function(){return f(b,{})}),e?(t[h]=n,x):n})(z,m,"global"in e?e.global:this==t,e.state)}function d(n){var x,t=n.length,e=this,i=0,r=e.i=e.j=0,s=e.S=[];for(t||(n=[t++]);i<o;)s[i]=i++;for(i=0;i<o;i++)s[i]=s[r=l&r+n[i%t]+(x=s[i])],s[r]=x;(e.g=function(n){for(var x,t=0,i=e.i,r=e.j,s=e.S;n--;)x=s[i=l&i+1],t=t*o+s[l&(s[i]=s[r=l&r+x])+(s[r]=x)];return e.i=i,e.j=r,t})(o)}function f(n,x){return x.i=n.i,x.j=n.j,x.S=n.S.slice(),x}function p(n,x){for(var t,e=n+"",i=0;i<e.length;)x[l&i]=l&(t^=19*x[l&i])+e.charCodeAt(i++);return y(x)}function y(n){return String.fromCharCode.apply(0,n)}if(t["seed"+h]=c,p(t.random(),x),n.exports){n.exports=c;try{i=e(8082)}catch(n){}}}([],Math)});yh.alea=gh,yh.xor128=lh,yh.xorwow=ch,yh.xorshift7=dh,yh.xor4096=fh,yh.tychei=ph;var mh=yh.alea,bh=function(){function n(n,x,t,e,i){this.mean=n,this.stdDev=x,this.dtype=t,this.nextVal=NaN,this.truncated=e,this.truncated&&(this.upper=this.mean+2*this.stdDev,this.lower=this.mean-2*this.stdDev);var r=i||Math.random();this.random=mh(r.toString())}return n.prototype.nextValue=function(){if(!isNaN(this.nextVal)){var n=this.nextVal;return this.nextVal=NaN,n}for(var x,t,e=!1;!e;){var i=void 0,r=void 0,o=void 0;do{o=(i=2*this.random()-1)*i+(r=2*this.random()-1)*r}while(o>=1||0===o);var s=Math.sqrt(-2*Math.log(o)/o);x=this.mean+this.stdDev*i*s,t=this.mean+this.stdDev*r*s,this.truncated&&!this.isValidTruncated(x)||(e=!0)}return this.truncated&&!this.isValidTruncated(t)||(this.nextVal=this.convertValue(t)),this.convertValue(x)},n.prototype.convertValue=function(n){return null==this.dtype||"float32"===this.dtype?n:Math.round(n)},n.prototype.isValidTruncated=function(n){return n<=this.upper&&n>=this.lower},n}(),zh=function(){function n(n,x,t,e){this.alpha=n,this.beta=1/x,this.dtype=t;var i=e||Math.random();this.randu=mh(i.toString()),this.randn=new bh(0,1,t,!1,this.randu()),this.d=n<1?n+2/3:n-1/3,this.c=1/Math.sqrt(9*this.d)}return n.prototype.nextValue=function(){for(var n,x,t,e,i,r;;){do{e=this.randn.nextValue(),r=1+this.c*e}while(r<=0);if(r*=r*r,x=1-.331*(n=e*e)*n,t=.5*n+this.d*(1-r+Math.log(r)),(i=this.randu())<x||Math.log(i)<t)break}return r=1/this.beta*this.d*r,this.alpha<1&&(r*=Math.pow(this.randu(),1/this.alpha)),this.convertValue(r)},n.prototype.convertValue=function(n){return"float32"===this.dtype?n:Math.round(n)},n}(),vh=function(){function n(n,x,t,e){var i=this;if(void 0===n&&(n=0),void 0===x&&(x=1),this.canReturnFloat=function(){return null==i.dtype||"float32"===i.dtype},this.min=n,this.range=x-n,this.dtype=t,null==e&&(e=Math.random()),"number"==typeof e&&(e=e.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error("The difference between "+n+" - "+x+" <= 1 and dtype is not float");this.random=mh(e)}return n.prototype.convertValue=function(n){return this.canReturnFloat()?n:Math.round(n)},n.prototype.nextValue=function(){return this.convertValue(this.min+this.range*this.random())},n}();function jh(n,x,t){return void 0===x&&(x="float32"),x=x||"float32",Ir(n),new Vr(n,x,t)}function wh(n,x){void 0===x&&(x=!1),console.log(n.toString(x))}var kh=Ms({batchToSpaceND_:function(n,x,t){var e=qs(n,"x","batchToSpaceND"),i=x.reduce(function(n,x){return n*x});return Ji(e.rank>=1+x.length,function(){return"input rank is "+e.rank+" but should be > than blockShape.length "+x.length}),Ji(t.length===x.length,function(){return"crops.length is "+t.length+" but should be equal to blockShape.length "+x.length}),Ji(e.shape[0]%i==0,function(){return"input tensor batch is "+e.shape[0]+" but is not divisible by the product of the elements of blockShape "+x.join(" * ")+" === "+i}),ao.runKernelFunc(function(n){return n.batchToSpaceND(e,x,t)},{$x:e},function(n){return{$x:function(){return n.spaceToBatchND(x,t)}}})}}),qh=Ms({broadcastTo_:function(n,x){var t=qs(n,"broadcastTo","x"),e=t.shape;if(x.some(function(n){return!(n>0)||n%1!=0}))throw new Error("broadcastTo(): Invalid broadcast shape ["+x+"].");if(x.length<t.rank)throw new Error("broadcastTo(): shape.length="+x.length+" < input.rank="+t.rank+".");if(x.length>t.rank){for(var i=t.shape.slice();i.length<x.length;)i.unshift(1);t=t.reshape(i)}for(var r=Array.from(x),o=x.length-1;o>=0;o--)if(t.shape[o]===x[o])r[o]=1;else if(1!==t.shape[o])throw new Error("broadcastTo(): ["+e+"] cannot be broadcast to ["+x+"].");var s=r.map(function(n,x){return n>1?x:-1}).filter(function(n){return n>=0});return 0===s.length?t.clone():ao.runKernelFunc(function(n){return n.tile(t,r)},{input:t},function(n){return{input:function(){return n.sum(s,!0)}}})}}),Ch=Ms({cast_:function(n,x){var t=qs(n,"x","cast");if(!cr(x))throw new Error("Failed to cast to unknown dtype "+x);if("string"===x&&"string"!==t.dtype||"string"!==x&&"string"===t.dtype)throw new Error("Only strings can be casted to strings");var e={dtype:x};return ao.runKernelFunc(function(n){return n.cast(t,x)},{x:t},function(n){return{x:function(){return n.clone()}}},"Cast",e)}}),Ah=Ms({clone_:function(n){var x=qs(n,"x","clone",null);return ao.runKernelFunc(function(){return ao.makeTensorFromDataId(x.dataId,x.shape,x.dtype)},{$x:x},function(n){return{$x:function(){return n.toFloat()}}})}}),Eh=Ms({cumsum_:function(n,x,t,e){void 0===x&&(x=0),void 0===t&&(t=!1),void 0===e&&(e=!1);var i=qs(n,"x","cumsum"),r=Os([x|=0],i.rank),o=i;null!=r&&(o=i.transpose(r));var s=Ts(1,i.rank)[0],h=ao.runKernelFunc(function(n){return n.cumsum(o,s,t,e)},{permutedX:o},function(n){return{permutedX:function(){return n.cumsum(x,t,!e)}}});return null!=r&&(h=h.transpose(r)),h}}),Sh=Ms({depthToSpace_:function(n,x,t){void 0===t&&(t="NHWC");var e=qs(n,"x","depthToSpace"),i="NHWC"===t?e.shape[1]:e.shape[2],r="NHWC"===t?e.shape[2]:e.shape[3],o="NHWC"===t?e.shape[3]:e.shape[1];return Ji(i*x>=0,function(){return"Negative dimension size caused by overflow when multiplying\n "+i+" and "+x+" for depthToSpace with input shape\n "+e.shape}),Ji(r*x>=0,function(){return"Negative dimension size caused by overflow when multiplying\n "+r+" and "+x+" for depthToSpace with input shape\n "+e.shape}),Ji(o%(x*x)==0,function(){return"Dimension size must be evenly divisible by "+x*x+" but is "+o+" for depthToSpace with input shape "+e.shape}),ao.runKernelFunc(function(n){return n.depthToSpace(e,x,t)},{$x:e})}}),Ih=Ms({expandDims_:function(n,x){void 0===x&&(x=0);var t=qs(n,"x","expandDims",null);Ji(x<=t.rank,function(){return"Axis must be <= rank of the tensor"});var e=t.shape.slice();return x<0&&(Ji(-(t.rank+1)<=x,function(){return"Axis must be in the interval ["+-(t.rank+1)+", "+t.rank+"]"}),x=t.rank+x+1),e.splice(x,0,1),Uh(t,e)}}),Dh=Ms({eye_:function(n,x,t,e){void 0===e&&(e="float32"),null==x&&(x=n);for(var i=jh([n,x],e),r=n<=x?n:x,o=0;o<r;++o)i.set(1,o,o);var s=i.toTensor().as2D(n,x);if(null==t)return s;if(1===t.length)return Gh(Ih(s,0),[t[0],1,1]);if(2===t.length)return Gh(Ih(Ih(s,0),0),[t[0],t[1],1,1]);if(3===t.length)return Gh(Ih(Ih(Ih(s,0),0),0),[t[0],t[1],t[2],1,1]);throw new Error("eye() currently supports only 1D and 2D batchShapes, but received "+t.length+"D.")}}),Oh=Ms({multinomial_:function(n,x,t,e){void 0===e&&(e=!1);var i=qs(n,"logits","multinomial"),r=i.size,o=i.rank;if(r<2)throw new Error("Error in multinomial: you need at least 2 outcomes, but got "+r+".");if(o>2)throw new Error("Rank of probabilities must be 1 or 2, but is "+o);t=t||Math.random();var s=1===o?i.as2D(1,-1):i,h=ao.runKernelFunc(function(n){return n.multinomial(s,e,x,t)},{logits2D:s});return 1===o?h.as1D():h}}),_h=Ms({oneHot_:function(n,x,t,e){if(void 0===t&&(t=1),void 0===e&&(e=0),x<2)throw new Error("Error in oneHot: depth must be >=2, but it is "+x);var i=qs(n,"indices","oneHot","int32"),r=i.shape.concat([x]);return i=i.flatten(),ao.runKernelFunc(function(n){return n.oneHot(i,x,t,e)},{$indices:i},function(n){return{$indices:function(){return Zs(i.shape,"float32")}}}).reshape(r)}}),Th=Ms({pad_:function(n,x,t){void 0===t&&(t=0);var e=qs(n,"x","pad");if(0===e.rank)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");var i={paddings:x,constantValue:t};return ao.runKernelFunc(function(n){return n.pad(e,x,t)},{x:e},function(n){var t=x.map(function(n){return n[0]});return{x:function(){return n.slice(t,e.shape)}}},"PadV2",i)}}),Rh=Ms({pad1d_:function(n,x,t){return void 0===t&&(t=0),Ji(2===x.length,function(){return"Invalid number of paddings. Must be length of 2."}),Th(n,[x],t)}}),Bh=Ms({pad2d_:function(n,x,t){return void 0===t&&(t=0),Ji(2===x.length&&2===x[0].length&&2===x[1].length,function(){return"Invalid number of paddings. Must be length of 2 each."}),Th(n,x,t)}}),Mh=Ms({pad3d_:function(n,x,t){return void 0===t&&(t=0),Ji(3===x.length&&2===x[0].length&&2===x[1].length&&2===x[2].length,function(){return"Invalid number of paddings. Must be length of 2 each."}),Th(n,x,t)}}),Nh=Ms({pad4d_:function(n,x,t){return void 0===t&&(t=0),Ji(4===x.length&&2===x[0].length&&2===x[1].length&&2===x[2].length&&2===x[3].length,function(){return"Invalid number of paddings. Must be length of 2 each."}),Th(n,x,t)}}),Fh=Ms({rand_:function(n,x,t){var e=nr(n),i=null;if(null==t||"float32"===t)i=new Float32Array(e);else if("int32"===t)i=new Int32Array(e);else{if("bool"!==t)throw new Error("Unknown data type "+t);i=new Uint8Array(e)}for(var r=0;r<e;r++)i[r]=x();return ao.makeTensor(i,n,t)}}),Ph=Ms({randomNormal_:function(n,x,t,e,i){if(void 0===x&&(x=0),void 0===t&&(t=1),null!=e&&"bool"===e)throw new Error("Unsupported data type "+e);for(var r=new bh(x,t,e,!1,i),o=jh(n,e),s=0;s<o.values.length;s++)o.values[s]=r.nextValue();return o.toTensor()}}),Lh=Ms({randomGamma_:function(n,x,t,e,i){if(void 0===t&&(t=1),void 0===e&&(e="float32"),null==t&&(t=1),null==e&&(e="float32"),"float32"!==e&&"int32"!==e)throw new Error("Unsupported data type "+e);for(var r=new zh(x,t,e,i),o=jh(n,e),s=0;s<o.values.length;s++)o.values[s]=r.nextValue();return o.toTensor()}}),Hh=Ms({randomUniform_:function(n,x,t,e,i){void 0===x&&(x=0),void 0===t&&(t=1),void 0===e&&(e="float32");for(var r=jh(n,e),o=new vh(x,t,null,i),s=0;s<r.values.length;s++)r.values[s]=o.nextValue();return r.toTensor()}}),Uh=Ms({reshape_:function(n,x){var t=qs(n,"x","reshape",null);x=sr(x,t.size),Ji(t.size===nr(x),function(){return"new shape and old shape must have the same number of elements."});var e={shape:x};return ao.runKernelFunc(function(n){return n.reshape(t,x)},{x:t},function(n){return{x:function(){return n.reshape(t.shape)}}},"Reshape",e)}}),Vh=Ms({spaceToBatchND_:function(n,x,t){var e=qs(n,"x","spaceToBatchND");return Ji(e.rank>=1+x.length,function(){return"input rank "+e.rank+" should be > than [blockShape] "+x.length}),Ji(t.length===x.length,function(){return"paddings.shape[0] "+t.length+" must be equal to [blockShape] "+x.length}),Ji(e.shape.reduce(function(n,e,i){return i>0&&i<=x.length?n&&(e+t[i-1][0]+t[i-1][1])%x[i-1]==0:n},!0),function(){return"input spatial dimensions "+e.shape.slice(1)+" with paddings "+t.toString()+" must be divisible by blockShapes "+x.toString()}),ao.runKernelFunc(function(n){return n.spaceToBatchND(e,x,t)},{$x:e},function(n){return{$x:function(){return n.batchToSpaceND(x,t)}}})}}),Wh=Ms({squeeze_:function(n,x){var t=qs(n,"x","squeeze");return Uh(t,ur(t.shape,x).newShape)}}),Qh=Ms({stack_:function(n,x){void 0===x&&(x=0);var t=Cs(n,"tensors","stack");if(Ji(t.length>=1,function(){return"Pass at least one tensor to tf.stack"}),1===t.length)return t[0].expandDims(x);var e=t[0].rank,i=t[0].shape,r=t[0].dtype;Ji(x<=e,function(){return"Axis must be <= rank of the tensor"}),t.forEach(function(n){Xi(i,n.shape,"All tensors passed to stack must have matching shapes")}),t.forEach(function(n){Ji(r===n.dtype,function(){return"All tensors passed to stack must have matching dtypes"})});var o=t.map(function(n){return n.expandDims(x)});return ih(o,x)}}),Gh=Ms({tile_:function(n,x){var t=qs(n,"x","tile",null);Ji(t.rank===x.length,function(){return"Error in transpose: rank of input "+t.rank+" must match length of reps "+x+"."});var e=[t],i={reps:x};return ao.runKernelFunc(function(n,e){var i=n.tile(t,x);return e([t]),i},{x:t},function(n,t){var e=t[0];return{x:function(){var t=eh(e);if(1===e.rank)for(var i=0;i<x[0];++i)t=t.add(n.slice([i*e.shape[0]],[e.shape[0]]));else if(2===e.rank)for(i=0;i<x[0];++i)for(var r=0;r<x[1];++r)t=t.add(n.slice([i*e.shape[0],r*e.shape[1]],[e.shape[0],e.shape[1]]));else if(3===e.rank)for(i=0;i<x[0];++i)for(r=0;r<x[1];++r)for(var o=0;o<x[2];++o)t=t.add(n.slice([i*e.shape[0],r*e.shape[1],o*e.shape[2]],[e.shape[0],e.shape[1],e.shape[2]]));else{if(4!==e.rank)throw new Error("Gradient for tile operation is not implemented for rank-"+e.rank+" tensors yet.");for(i=0;i<x[0];++i)for(r=0;r<x[1];++r)for(o=0;o<x[2];++o)for(var s=0;s<x[3];++s)t=t.add(n.slice([i*e.shape[0],r*e.shape[1],o*e.shape[2],s*e.shape[3]],[e.shape[0],e.shape[1],e.shape[2],e.shape[3]]))}return t}}},"Tile",i,e)}}),Kh=Ms({truncatedNormal_:function(n,x,t,e,i){if(void 0===x&&(x=0),void 0===t&&(t=1),null!=e&&"bool"===e)throw new Error("Unsupported data type "+e);for(var r=new bh(x,t,e,!0,i),o=jh(n,e),s=0;s<o.values.length;s++)o.values[s]=r.nextValue();return o.toTensor()}}),Yh=Ms({unstack_:function(n,x){void 0===x&&(x=0),x=x||0;var t=qs(n,"x","unstack");Ji(x>=-t.shape.length&&x<t.shape.length,function(){return"Axis = "+x+" is not in [-"+t.shape.length+", "+t.shape.length+")"}),x<0&&(x+=t.shape.length);var e={axis:x};return ao.runKernelFunc(function(n){return n.unstack(t,x)},{x:t},function(n){return{x:function(){return Qh(n,x)}}},"Unpack",e)}}),Jh=function(n,x){return Oi(this,void 0,void 0,function(){var t,e,i,r,o,s,h,u,a,g;return _i(this,function(l){switch(l.label){case 0:return t=qs(n,"x","setdiff1d"),e=qs(x,"y","setdiff1d"),Ji(t.dtype===e.dtype,function(){return"x and y should have the same dtype, but got x ("+t.dtype+") and y ("+e.dtype+")."}),Ji(1===t.rank,function(){return"x should be 1D tensor, but got x ("+t.shape+")."}),Ji(1===e.rank,function(){return"y should be 1D tensor, but got y ("+e.shape+")."}),[4,t.data()];case 1:return i=l.sent(),[4,e.data()];case 2:for(r=l.sent(),o=new Set(r),s=0,a=0;a<i.length;a++)o.has(i[a])||s++;for(h=new Vr([s],t.dtype),u=new Vr([s],"int32"),a=0,g=0;a<i.length;a++)o.has(i[a])||(h.values[g]=i[a],u.values[g]=a,g++);return[2,[h.toTensor(),u.toTensor()]]}})})};function Xh(n,x,t,e){void 0===e&&(e=!0);var i=[];if(e)(i=i.concat(x.slice(0))).push(n[0]/t),i=i.concat(n.slice(1));else{i=i.concat(n[0]);for(var r=x.length,o=0;o<r;++o)i=i.concat([n[o+1]/x[o],x[o]]);i=i.concat(n.slice(r+1))}return i}function Zh(n,x,t){void 0===t&&(t=!0);var e=[];if(t){e.push(x);for(var i=x+1;i<n;++i)i<=2*x?(e.push(i),e.push(i-(x+1))):e.push(i)}else{var r=[],o=[];for(i=1;i<n;++i)i>=2*x+1||i%2==1?o.push(i):r.push(i);e.push.apply(e,r),e.push(0),e.push.apply(e,o)}return e}function $h(n,x,t,e){void 0===e&&(e=!0);var i=[];e?i.push(n[0]/t):i.push(n[0]*t);for(var r=1;r<n.length;++r)r<=x.length?e?i.push(x[r-1]*n[r]):i.push(n[r]/x[r-1]):i.push(n[r]);return i}function nu(n,x){for(var t=[0],e=0;e<x;++e)t.push(n[e][0]);return t}function xu(n,x,t){for(var e=n.slice(0,1),i=0;i<t;++i)e.push(n[i+1]-x[i][0]-x[i][1]);return e}function tu(n,x){if(n.rank<1)throw new Error("tf.gatherND() expects the input to be rank 1 or higher, but the rank was "+n.rank+".");if(x.rank<1)throw new Error("tf.gatherND() expects the indices to be rank 1 or higher, but the rank was "+x.rank+".");if("int32"!==x.dtype)throw new Error("tf.gatherND() expects the indices to be int32 type, but the dtype was "+x.dtype+".");if(x.shape[x.rank-1]>n.rank)throw new Error("index innermost dimension length must be <= tensor rank; saw: "+x.shape[x.rank-1]+" vs. "+n.rank);if(0===n.size)throw new Error("Requested more than 0 entries, but input is empty. Input shape: "+n.shape+".");for(var t=x.shape,e=t[t.length-1],i=1,r=0;r<t.length-1;++r)i*=t[r];var o=n.shape,s=t.slice();s.pop();var h=1;for(r=e;r<n.rank;++r)h*=o[r],s.push(o[r]);var u=kr(n.shape).map(function(n){return n/h}).concat([1]).slice(0,e);return[s,i,h,u]}Object.freeze({prepareAndValidate:tu});var eu=30;function iu(n){return n<=eu?n:wr(n,Math.floor(Math.sqrt(n)))}function ru(n,x,t){var e=x.rank>1?x.shape[x.rank-1]:1,i=x.rank>1?x.rank-1:1,r="Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: "+t.shape+", indices.shape: "+x.shape+", shape: "+n+", sliceDim: "+e+", and batchDim: "+i+".";if(t.rank<i)throw new Error(r+" update.rank < "+i+". ");if(n.length<e+(t.rank-i))throw new Error(r+" Output shape length < "+(e+(t.rank-i)));if(t.rank!==i+n.length-e)throw new Error(r+" update.rank != "+(i+n.length-e));for(var o=0;o<i;++o)if(t.shape[o]!==x.shape[o])throw new Error(r+" updates.shape["+o+"] ("+t.shape[o]+") != indices.shape["+o+"] ("+x.shape[o]+").");for(o=0;o<t.rank-i;++o)if(t.shape[o+i]!==n[o+e])throw new Error(r+" updates.shape["+(o+i)+"] ("+t.shape[o+i]+") != shape["+(o+i)+"] ("+n[o+i]+")")}function ou(n,x,t){if(x.rank<1)throw new Error("tf.scatterND() expects the indices to be rank 1 or higher, but the rank was "+x.rank+".");if(n.rank<1)throw new Error("tf.scatterND() expects the updates to be rank 1 or higher, but the rank was "+n.rank+".");if("int32"!==x.dtype)throw new Error("The dtype of 'indices' should be int32, but got dtype: "+x.dtype);if(t.length<1)throw new Error("Output rank must be greater or equal to 1, but got shape: "+t);if(0===t.length){if(0===x.size)throw new Error("Indices specified for empty output. indices shape: "+x.shape);if(0===n.size)throw new Error("Updates specified for empty output. updates shape: "+n.shape)}ru(t,x,n)}function su(n,x,t){for(var e=x.shape.length,i=e>1?x.shape[e-1]:1,r=t.length,o=1,s=i;s<r;++s)o*=t[s];var h=i<1?1:i;return{sliceRank:i,numUpdates:nr(x.shape)/h,sliceSize:o,strides:kr(t.slice(0,i)).concat([1]),outputSize:nr(t)}}Object.freeze({validateUpdateShape:ru,validateInput:ou,calculateShapes:su});function hu(n,x,t){Ji(n.rank===x.length,function(){return"Error in slice"+n.rank+"D: Length of begin "+x+" must match the rank of the array ("+n.rank+")."}),Ji(n.rank===t.length,function(){return"Error in slice"+n.rank+"D: Length of size "+t+" must match the rank of the array ("+n.rank+")."});for(var e=function(e){Ji(x[e]+t[e]<=n.shape[e],function(){return"Error in slice"+n.rank+"D: begin["+e+"] + size["+e+"] ("+(x[e]+t[e])+") would overflow input.shape["+e+"] ("+n.shape[e]+")"})},i=0;i<n.rank;++i)e(i)}function uu(n){for(var x=[],t=0;n>0;)1&n&&x.push(t),n/=2,t++;return x}function au(n,x,t){for(var e=[],i=0;i<n.length;i++)e[i]=Math.ceil((x[i]-n[i])/t[i]);return e}function gu(n,x,t,e,i){var r=x[i],o=t[i]||1;(n&1<<i||null==r)&&(r=o>0?Number.MIN_SAFE_INTEGER:Number.MAX_SAFE_INTEGER);var s=e[i];return r<0&&(r+=s),Gi(0,r,s-1)}function lu(n,x,t,e,i){var r=x[i],o=t[i]||1;(n&1<<i||null==r)&&(r=o>0?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER);var s=e[i];return r<0&&(r+=s),o>0?Gi(0,r,s):Gi(-1,r,s-1)}function cu(n,x,t){for(var e=t.length,i=0;i<t.length;i++)if(t[i]>1){e=i;break}for(i=e+1;i<t.length;i++)if(x[i]>0||t[i]!==n[i])return!1;return!0}function du(n,x){for(var t=n.length>0?n[n.length-1]:1,e=0;e<n.length-1;e++)t+=n[e]*x[e];return t}Object.freeze({assertParamsValid:hu,maskToAxes:uu,computeOutShape:au,startForAxis:gu,stopForAxis:lu,isSliceContinous:cu,computeFlatOffset:du});function fu(n,x){Ji(jr(n),function(){return"The f passed in variableGrads(f) must be a function"}),Ji(null==x||Array.isArray(x)&&x.every(function(n){return n instanceof no}),function(){return"The varList passed in variableGrads(f, varList) must be an array of variables"});var t=null!=x;if(!t)for(var e in x=[],ao.registeredVariables)x.push(ao.registeredVariables[e]);var i=t?x.filter(function(n){return!n.trainable}):null,r=x.length;Ji((x=x.filter(function(n){return n.trainable})).length>0,function(){return"variableGrads() expects at least one of the input variables to be trainable, but none of the "+r+" variables is trainable."});var o=ao.gradients(n,x,null,!0),s=o.value,h=o.grads;Ji(h.some(function(n){return null!=n}),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()."}),Ji(0===s.rank,function(){return"The f passed in variableGrads(f) must return a scalar, but it returned a rank-"+s.rank+" tensor"});var u={};return x.forEach(function(n,x){null!=h[x]&&(u[n.name]=h[x])}),null!=i&&i.forEach(function(n){return u[n.name]=null}),{value:s,grads:u}}function pu(n){return ao.customGrad(n)}var yu=Ms({softmax_:function(n,x){void 0===x&&(x=-1);var t=qs(n,"logits","softmax","float32");if(-1===x&&(x=t.rank-1),x!==t.rank-1)throw Error("Softmax along a non-last dimension is not yet supported. Logits was rank "+t.rank+" and dim was "+x);return ao.runKernelFunc(function(n,e){var i=n.softmax(t,x);return e([i]),i},{logits:t},function(n,t){var e=t[0],i=n.mul(e);return{logits:function(){return i.sub(i.sum([x],!0).mul(e))}}},"Softmax",{dim:x},[],[!0])}}),mu=Ms({logSoftmax_:function(n,x){void 0===x&&(x=-1);var t=qs(n,"logits","logSoftmax");if(-1===x&&(x=t.rank-1),x!==t.rank-1)throw Error("Log Softmax along a non-last dimension is not yet supported. Logits was rank "+t.rank+" and axis was "+x);return pu(function(n,t){var e=n.max(x,!0),i=n.sub(e),r=i.toFloat().sub(i.exp().sum(x,!0).log());return t([r]),{value:r,gradFunc:function(n,t){var e=t[0].exp();return n.sub(n.sum(x,!0).mul(e))}}})(t)}}),bu=function(){function n(n,x){this.backend=n,this.dataMover=x,this.data=new WeakMap,this.dataIdsCount=0}return n.prototype.get=function(n){return this.data.has(n)||this.dataMover.moveData(this.backend,n),this.data.get(n)},n.prototype.set=function(n,x){this.dataIdsCount++,this.data.set(n,x)},n.prototype.has=function(n){return this.data.has(n)},n.prototype.delete=function(n){return this.dataIdsCount--,this.data.delete(n)},n.prototype.numDataIds=function(){return this.dataIdsCount},n}(),zu=function(){function n(){}return n.prototype.time=function(n){return vu("time")},n.prototype.read=function(n){return vu("read")},n.prototype.readSync=function(n){return vu("readSync")},n.prototype.numDataIds=function(){return vu("numDataIds")},n.prototype.disposeData=function(n){return vu("disposeData")},n.prototype.write=function(n,x,t){return vu("write")},n.prototype.move=function(n,x,t,e){return vu("move")},n.prototype.memory=function(){return vu("memory")},n.prototype.floatPrecision=function(){return vu("floatPrecision")},n.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},n.prototype.batchMatMul=function(n,x,t,e){return vu("batchMatMul")},n.prototype.fusedBatchMatMul=function(n){return n.a,n.b,n.transposeA,n.transposeB,n.bias,n.activation,n.preluActivationWeights,vu("fusedBatchMatMul")},n.prototype.slice=function(n,x,t){return vu("slice")},n.prototype.stridedSlice=function(n,x,t,e){return vu("stridedSlice")},n.prototype.unstack=function(n,x){return vu("unstack")},n.prototype.reverse=function(n,x){return vu("reverse")},n.prototype.concat=function(n,x){return vu("concat")},n.prototype.neg=function(n){return vu("neg")},n.prototype.add=function(n,x){return vu("add")},n.prototype.addN=function(n){return vu("addN")},n.prototype.subtract=function(n,x){return vu("subtract")},n.prototype.multiply=function(n,x){return vu("multiply")},n.prototype.realDivide=function(n,x){return vu("realDivide")},n.prototype.floorDiv=function(n,x){return vu("floorDiv")},n.prototype.sum=function(n,x){return vu("sum")},n.prototype.prod=function(n,x){return vu("prod")},n.prototype.unsortedSegmentSum=function(n,x,t){return vu("unsortedSegmentSum")},n.prototype.argMin=function(n,x){return vu("argMin")},n.prototype.argMax=function(n,x){return vu("argMax")},n.prototype.equal=function(n,x){return vu("equal")},n.prototype.notEqual=function(n,x){return vu("notEqual")},n.prototype.less=function(n,x){return vu("less")},n.prototype.lessEqual=function(n,x){return vu("lessEqual")},n.prototype.greater=function(n,x){return vu("greater")},n.prototype.greaterEqual=function(n,x){return vu("greaterEqual")},n.prototype.logicalNot=function(n){return vu("logicalNot")},n.prototype.logicalAnd=function(n,x){return vu("logicalAnd")},n.prototype.logicalOr=function(n,x){return vu("logicalOr")},n.prototype.where=function(n){return vu("where")},n.prototype.select=function(n,x,t){return vu("select")},n.prototype.topk=function(n,x,t){return vu("topk")},n.prototype.min=function(n,x){return vu("min")},n.prototype.minimum=function(n,x){return vu("minimum")},n.prototype.mod=function(n,x){return vu("mod")},n.prototype.max=function(n,x){return vu("max")},n.prototype.maximum=function(n,x){return vu("maximum")},n.prototype.all=function(n,x){return vu("all")},n.prototype.any=function(n,x){return vu("any")},n.prototype.squaredDifference=function(n,x){return vu("squaredDifference")},n.prototype.ceil=function(n){return vu("ceil")},n.prototype.floor=function(n){return vu("floor")},n.prototype.round=function(n){return vu("round")},n.prototype.sign=function(n){return vu("sign")},n.prototype.isNaN=function(n){return vu("isNaN")},n.prototype.isInf=function(n){return vu("isInf")},n.prototype.isFinite=function(n){return vu("isFinite")},n.prototype.pow=function(n,x){return vu("pow")},n.prototype.exp=function(n){return vu("exp")},n.prototype.expm1=function(n){return vu("expm1")},n.prototype.softmax=function(n,x){return vu("softmax")},n.prototype.log=function(n){return vu("log")},n.prototype.log1p=function(n){return vu("log1p")},n.prototype.sqrt=function(n){return vu("sqrt")},n.prototype.rsqrt=function(n){return vu("rsqrt")},n.prototype.square=function(n){return vu("square")},n.prototype.reciprocal=function(n){return vu("reciprocal")},n.prototype.relu=function(n){return vu("relu")},n.prototype.relu6=function(n){return vu("relu6")},n.prototype.prelu=function(n,x){return vu("prelu")},n.prototype.elu=function(n){return vu("elu")},n.prototype.eluDer=function(n,x){return vu("eluDer")},n.prototype.selu=function(n){return vu("selu")},n.prototype.int=function(n){return vu("int")},n.prototype.clip=function(n,x,t){return vu("clip")},n.prototype.abs=function(n){return vu("abs")},n.prototype.complexAbs=function(n){return vu("complexAbs")},n.prototype.sigmoid=function(n){return vu("sigmoid")},n.prototype.softplus=function(n){return vu("softplus")},n.prototype.sin=function(n){return vu("sin")},n.prototype.cos=function(n){return vu("cos")},n.prototype.tan=function(n){return vu("tan")},n.prototype.asin=function(n){return vu("asin")},n.prototype.acos=function(n){return vu("acos")},n.prototype.atan=function(n){return vu("atan")},n.prototype.atan2=function(n,x){return vu("atan2")},n.prototype.sinh=function(n){return vu("sinh")},n.prototype.cosh=function(n){return vu("cosh")},n.prototype.tanh=function(n){return vu("tanh")},n.prototype.asinh=function(n){return vu("asinh")},n.prototype.acosh=function(n){return vu("acosh")},n.prototype.atanh=function(n){return vu("atanh")},n.prototype.erf=function(n){return vu("erf")},n.prototype.step=function(n,x){return vu("step")},n.prototype.fusedConv2d=function(n){return n.input,n.filter,n.convInfo,n.bias,n.activation,n.preluActivationWeights,vu("fusedConv2d")},n.prototype.conv2d=function(n,x,t){return vu("conv2d")},n.prototype.conv2dDerInput=function(n,x,t){return vu("conv2dDerInput")},n.prototype.conv2dDerFilter=function(n,x,t){return vu("conv2dDerFilter")},n.prototype.fusedDepthwiseConv2D=function(n){return n.input,n.filter,n.convInfo,n.bias,n.activation,n.preluActivationWeights,vu("fusedDepthwiseConv2D")},n.prototype.depthwiseConv2D=function(n,x,t){return vu("depthwiseConv2D")},n.prototype.depthwiseConv2DDerInput=function(n,x,t){return vu("depthwiseConv2DDerInput")},n.prototype.depthwiseConv2DDerFilter=function(n,x,t){return vu("depthwiseConv2DDerFilter")},n.prototype.conv3d=function(n,x,t){return vu("conv3d")},n.prototype.conv3dDerInput=function(n,x,t){return vu("conv3dDerInput")},n.prototype.conv3dDerFilter=function(n,x,t){return vu("conv3dDerFilter")},n.prototype.maxPool=function(n,x){return vu("maxPool")},n.prototype.maxPoolBackprop=function(n,x,t,e){return vu("maxPoolBackprop")},n.prototype.avgPool=function(n,x){return vu("avgPool")},n.prototype.avgPoolBackprop=function(n,x,t){return vu("avgPoolBackprop")},n.prototype.avgPool3d=function(n,x){return vu("avgPool3d")},n.prototype.avgPool3dBackprop=function(n,x,t){return vu("avgPool3dBackprop")},n.prototype.maxPool3d=function(n,x){return vu("maxPool3d")},n.prototype.maxPool3dBackprop=function(n,x,t,e){return vu("maxPool3dBackprop")},n.prototype.reshape=function(n,x){return vu("reshape")},n.prototype.cast=function(n,x){return vu("cast")},n.prototype.tile=function(n,x){return vu("tile")},n.prototype.pad=function(n,x,t){return vu("pad")},n.prototype.transpose=function(n,x){return vu("transpose")},n.prototype.gather=function(n,x,t){return vu("gather")},n.prototype.gatherND=function(n,x){return vu("gatherND")},n.prototype.scatterND=function(n,x,t){return vu("scatterND")},n.prototype.batchToSpaceND=function(n,x,t){return vu("batchToSpaceND")},n.prototype.spaceToBatchND=function(n,x,t){return vu("spaceToBatchND")},n.prototype.resizeBilinear=function(n,x,t,e){return vu("resizeBilinear")},n.prototype.resizeBilinearBackprop=function(n,x,t){return vu("resizeBilinearBackprop")},n.prototype.resizeNearestNeighbor=function(n,x,t,e){return vu("resizeNearestNeighbor")},n.prototype.resizeNearestNeighborBackprop=function(n,x,t){return vu("resizeNearestNeighborBackprop")},n.prototype.batchNormalization=function(n,x,t,e,i,r){return vu("batchNormalization")},n.prototype.localResponseNormalization4D=function(n,x,t,e,i){return vu("localResponseNormalization4D")},n.prototype.LRNGrad=function(n,x,t,e,i,r,o){return vu("LRNGrad")},n.prototype.multinomial=function(n,x,t,e){return vu("multinomial")},n.prototype.oneHot=function(n,x,t,e){return vu("oneHot")},n.prototype.cumsum=function(n,x,t,e){return vu("cumsum")},n.prototype.nonMaxSuppression=function(n,x,t,e,i){return vu("nonMaxSuppression")},n.prototype.fft=function(n){return vu("fft")},n.prototype.ifft=function(n){return vu("ifft")},n.prototype.complex=function(n,x){return vu("complex")},n.prototype.real=function(n){return vu("real")},n.prototype.imag=function(n){return vu("imag")},n.prototype.cropAndResize=function(n,x,t,e,i,r){return vu("cropAndResize")},n.prototype.depthToSpace=function(n,x,t){return vu("depthToSpace")},n.prototype.split=function(n,x,t){return vu("split")},n.prototype.sparseToDense=function(n,x,t,e){return vu("sparseToDense")},n.prototype.diag=function(n){return vu("diag")},n.prototype.fill=function(n,x,t){return vu("fill")},n.prototype.onesLike=function(n){return vu("onesLike")},n.prototype.zerosLike=function(n){return vu("zerosLike")},n.prototype.linspace=function(n,x,t){return vu("linspace")},n.prototype.dispose=function(){return vu("dispose")},n}();function vu(n){throw new Error("'"+n+"' not yet implemented or not found in the registry. Did you forget to import the kernel?")}function ju(n,x){for(var t=n.length,e=[],i=0;i<t;i++){var r=t-1-i,o=n[r]||1;(x[x.length-1-i]||1)>1&&1===o&&e.unshift(r)}return e}function wu(n,x){for(var t=[],e=0;e<x.length;e++){var i=n[n.length-e-1],r=x.length-e-1,o=x[r];(null==i||1===i&&o>1)&&t.unshift(r)}return t}function ku(n,x){for(var t=[],e=Math.max(n.length,x.length),i=0;i<e;i++){var r=n[n.length-i-1];null==r&&(r=1);var o=x[x.length-i-1];if(null==o&&(o=1),1===r)t.unshift(o);else if(1===o)t.unshift(r);else{if(r!==o)throw Error("Operands could not be broadcast together with shapes "+n+" and "+x+".");t.unshift(r)}}return t}function qu(n,x,t,e,i,r,o){void 0===o&&(o="channelsLast");var s,h=Iu(x),u=h[0],a=h[1];if("channelsLast"===o)s=[u,a,n[3],n[3]];else{if("channelsFirst"!==o)throw new Error("Unknown dataFormat "+o);s=[u,a,n[1],n[1]]}return Au(n,s,t,e,i,r,!1,o)}function Cu(n,x,t,e,i,r,o){void 0===o&&(o="NDHWC");var s,h,u=Du(x),a=u[0],g=u[1],l=u[2];if("NDHWC"===o)h="channelsLast",s=[a,g,l,n[4],n[4]];else{if("NCDHW"!==o)throw new Error("Unknown dataFormat "+o);h="channelsFirst",s=[a,g,l,n[1],n[1]]}return Eu(n,s,t,e,i,!1,h,r)}function Au(n,x,t,e,i,r,o,s){void 0===o&&(o=!1),void 0===s&&(s="channelsLast");var h=[-1,-1,-1,-1],u=h[0],a=h[1],g=h[2],l=h[3];if("channelsLast"===s)u=n[0],a=n[1],g=n[2],l=n[3];else{if("channelsFirst"!==s)throw new Error("Unknown dataFormat "+s);u=n[0],l=n[1],a=n[2],g=n[3]}var c,d=x[0],f=x[1],p=x[3],y=Iu(t),m=y[0],b=y[1],z=Iu(e),v=z[0],j=z[1],w=Ou(d,v),k=Ou(f,j),q=function(n,x,t,e,i,r,o,s){var h,u,a;if("number"==typeof n){h={top:n,bottom:n,left:n,right:n,type:0===n?"VALID":"NUMBER"};var g=function(n,x,t,e,i){null==e&&(e=Su(n,x,t));var r=n[0],o=n[1],s=_u((r-x+2*e)/t+1,i);Ji(tr(s),function(){return"The output # of rows ("+s+") must be an integer. Change the stride and/or zero pad parameters"});var h=_u((o-x+2*e)/t+1,i);return Ji(tr(h),function(){return"The output # of columns ("+h+") must be an integer. Change the stride and/or zero pad parameters"}),[s,h]}([x,t],r,e,n,s);u=g[0],a=g[1]}else if("same"===n){u=Math.ceil(x/e),a=Math.ceil(t/i);var l=Math.max(0,(u-1)*e+r-x),c=Math.max(0,(a-1)*i+o-t),d=Math.floor(l/2),f=l-d,p=Math.floor(c/2);h={top:d,bottom:f,left:p,right:c-p,type:"SAME"}}else{if("valid"!==n)throw Error("Unknown padding parameter: "+n);h={top:0,bottom:0,left:0,right:0,type:"VALID"},u=Math.ceil((x-r+1)/e),a=Math.ceil((t-o+1)/i)}return{padInfo:h,outHeight:u,outWidth:a}}(i,a,g,m,b,w,k,r),C=q.padInfo,A=q.outHeight,E=q.outWidth,S=o?p*l:p;return"channelsFirst"===s?c=[u,S,A,E]:"channelsLast"===s&&(c=[u,A,E,S]),{batchSize:u,dataFormat:s,inHeight:a,inWidth:g,inChannels:l,outHeight:A,outWidth:E,outChannels:S,padInfo:C,strideHeight:m,strideWidth:b,filterHeight:d,filterWidth:f,effectiveFilterHeight:w,effectiveFilterWidth:k,dilationHeight:v,dilationWidth:j,inShape:n,outShape:c,filterShape:x}}function Eu(n,x,t,e,i,r,o,s){void 0===r&&(r=!1),void 0===o&&(o="channelsLast");var h=[-1,-1,-1,-1,-1],u=h[0],a=h[1],g=h[2],l=h[3],c=h[4];if("channelsLast"===o)u=n[0],a=n[1],g=n[2],l=n[3],c=n[4];else{if("channelsFirst"!==o)throw new Error("Unknown dataFormat "+o);u=n[0],c=n[1],a=n[2],g=n[3],l=n[4]}var d,f=x[0],p=x[1],y=x[2],m=x[4],b=Du(t),z=b[0],v=b[1],j=b[2],w=Du(e),k=w[0],q=w[1],C=w[2],A=Ou(f,k),E=Ou(p,q),S=Ou(y,C),I=function(n,x,t,e,i,r,o,s,h,u,a){var g,l,c,d;if("number"==typeof n){g={top:n,bottom:n,left:n,right:n,front:n,back:n,type:0===n?"VALID":"NUMBER"};var f=function(n,x,t,e,i,r){null==i&&(i=Su(n,x,e));var o=n[0],s=n[1],h=n[2],u=_u((o-x+2*i)/e+1,r);Ji(tr(u),function(){return"The output # of depths ("+u+") must be an integer. Change the stride and/or zero pad parameters"});var a=_u((s-x+2*i)/e+1,r);Ji(tr(a),function(){return"The output # of rows ("+a+") must be an integer. Change the stride and/or zero pad parameters"});var g=_u((h-x+2*i)/e+1,r);return Ji(tr(g),function(){return"The output # of columns ("+g+") must be an integer. Change the stride and/or zero pad parameters"}),[u,a,g,t]}([x,t,e,1],s,1,i,n,a);l=f[0],c=f[1],d=f[2]}else if("same"===n){l=Math.ceil(x/i),c=Math.ceil(t/r),d=Math.ceil(e/o);var p=(l-1)*i+s-x,y=(c-1)*r+h-t,m=(d-1)*o+u-e,b=Math.floor(p/2),z=p-b,v=Math.floor(y/2),j=y-v,w=Math.floor(m/2);g={top:v,bottom:j,left:w,right:m-w,front:b,back:z,type:"SAME"}}else{if("valid"!==n)throw Error("Unknown padding parameter: "+n);g={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},l=Math.ceil((x-s+1)/i),c=Math.ceil((t-h+1)/r),d=Math.ceil((e-u+1)/o)}return{padInfo:g,outDepth:l,outHeight:c,outWidth:d}}(i,a,g,l,z,v,j,A,E,S,s),D=I.padInfo,O=I.outDepth,_=I.outHeight,T=I.outWidth,R=r?m*c:m;return"channelsFirst"===o?d=[u,R,O,_,T]:"channelsLast"===o&&(d=[u,O,_,T,R]),{batchSize:u,dataFormat:o,inDepth:a,inHeight:g,inWidth:l,inChannels:c,outDepth:O,outHeight:_,outWidth:T,outChannels:R,padInfo:D,strideDepth:z,strideHeight:v,strideWidth:j,filterDepth:f,filterHeight:p,filterWidth:y,effectiveFilterDepth:A,effectiveFilterHeight:E,effectiveFilterWidth:S,dilationDepth:k,dilationHeight:q,dilationWidth:C,inShape:n,outShape:d,filterShape:x}}function Su(n,x,t,e){void 0===e&&(e=1);var i=Ou(x,e);return Math.floor((n[0]*(t-1)-t+i)/2)}function Iu(n){return"number"==typeof n?[n,n,n]:2===n.length?[n[0],n[1],1]:n}function Du(n){return"number"==typeof n?[n,n,n]:n}function Ou(n,x){return x<=1?n:n+(n-1)*(x-1)}function _u(n,x){if(!x)return n;switch(x){case"round":return Math.round(n);case"ceil":return Math.ceil(n);case"floor":return Math.floor(n);default:throw new Error("Unknown roundingMode "+x)}}function Tu(n){var x=Iu(n),t=x[0],e=x[1],i=x[2];return 1===t&&1===e&&1===i}function Ru(n,x){return Tu(n)||Tu(x)}function Bu(n){if("NHWC"===n)return"channelsLast";if("NCHW"===n)return"channelsFirst";throw new Error("Unknown dataFormat "+n)}function Mu(n,x,t){if("complex64"===x){if("complex64"===n.dtype)return n.clone();var e=Zs(n.shape),i=n.toFloat(),r=t.complex(i,e);return e.dispose(),i.dispose(),r}if(!dr(n.dtype,x))return ao.makeTensorFromDataId(n.dataId,n.shape,x);if("complex64"===n.dtype){var o=t.real(n);return r=o.cast(x),o.dispose(),r}if("int32"===x)return t.int(n);if("bool"===x){var s=Us(0,n.dtype);return r=t.notEqual(n,s),s.dispose(),r}throw new Error("Error in Cast: failed to cast "+n.dtype+" to "+x)}function Nu(n,x){return ao.makeTensorFromDataId(n.dataId,x,n.dtype)}function Fu(n,x,t){var e=(x-n)/(t-1),i=Er(t,"float32");i[0]=n;for(var r=1;r<i.length;r++)i[r]=i[r-1]+e;return Vs(i,"float32")}Object.freeze({castTensor:Mu,reshapeTensor:Nu,linspaceImpl:Fu,upcastType:to,axesAreInnerMostDims:As,combineLocations:Es,computeOutAndReduceShapes:Ss,expandShapeToKeepDim:Is,assertAxesAreInnerMostDims:Ds,getAxesPermutation:Os,getUndoAxesPermutation:_s,getInnerMostAxes:Ts,getBroadcastDims:ju,getReductionAxes:wu,assertAndGetBroadcastShape:ku,assertParamsConsistent:Rs,computeOutShape:Bs,computePool2DInfo:qu,computePool3DInfo:Cu,computeConv2DInfo:Au,computeConv3DInfo:Eu,computeDefaultPad:Su,tupleValuesAreOne:Tu,eitherStridesOrDilationsAreOne:Ru,convertConv2DDataFormat:Bu,PARALLELIZE_THRESHOLD:eu,computeOptimalWindowSize:iu});function Pu(n,x){if(n.length!==x.length)throw new Error("Cannot merge real and imag arrays of different lengths. real:"+n.length+", imag: "+x.length+".");for(var t=new Float32Array(2*n.length),e=0;e<t.length;e+=2)t[e]=n[e/2],t[e+1]=x[e/2];return t}function Lu(n,x){return{real:n[2*x],imag:n[2*x+1]}}function Hu(n,x,t,e){n[2*e]=x,n[2*e+1]=t}function Uu(n,x,t){var e=(t?2:-2)*Math.PI*(n/x);return{real:Math.cos(e),imag:Math.sin(e)}}function Vu(n,x,t){var e=function(n,x,t){return function(n,x,t){for(var e=0,i=n.length,r=0,o=!1;e<i;){var s=t(x,n[r=e+(i-e>>>1)]);s>0?e=r+1:(i=r,o=!s)}return o?e:-e-1}(n,x,t||Wu)}(n,x,t),i=e<0?-(e+1):e;n.splice(i,0,x)}function Wu(n,x){return n>x?1:n<x?-1:0}function Qu(n,x,t,e,i){return Ku(n,x,t,e,i,0).selectedIndices}function Gu(n,x,t,e,i,r){var o=Ku(n,x,t,e,i,r,!0);return o.numValidOutputs.dispose(),{selectedIndices:o.selectedIndices,selectedScores:o.selectedScores}}function Ku(n,x,t,e,i,r,o,s){void 0===o&&(o=!1),void 0===s&&(s=!1);for(var h=Array.from(x).map(function(n,x){return{score:n,boxIndex:x,suppressBeginIndex:0}}).filter(function(n){return n.score>i}).sort(Xu),u=r>0?-.5/r:0,a=[],g=[];a.length<t&&h.length>0;){var l=h.pop(),c=l.score,d=l.boxIndex,f=l.suppressBeginIndex;if(c<i)break;for(var p=!1,y=a.length-1;y>=f;--y){var m=Yu(n,d,a[y]);if(m>=e){p=!0;break}if(l.score=l.score*Ju(e,u,m),l.score<=i)break}l.suppressBeginIndex=a.length,p||(l.score===c?(a.push(d),g.push(l.score)):l.score>i&&Vu(h,l,Xu))}var b=a.length;return s&&(a.fill(0,b),g.fill(0,b)),{selectedIndices:Vs(a,"int32"),selectedScores:Vs(g,"float32"),numValidOutputs:Us(b,"int32")}}function Yu(n,x,t){var e=n.subarray(4*x,4*x+4),i=n.subarray(4*t,4*t+4),r=Math.min(e[0],e[2]),o=Math.min(e[1],e[3]),s=Math.max(e[0],e[2]),h=Math.max(e[1],e[3]),u=Math.min(i[0],i[2]),a=Math.min(i[1],i[3]),g=Math.max(i[0],i[2]),l=Math.max(i[1],i[3]),c=(s-r)*(h-o),d=(g-u)*(l-a);if(c<=0||d<=0)return 0;var f=Math.max(r,u),p=Math.max(o,a),y=Math.min(s,g),m=Math.min(h,l),b=Math.max(y-f,0)*Math.max(m-p,0);return b/(c+d-b)}function Ju(n,x,t){var e=Math.exp(x*t*t);return t<=n?e:0}function Xu(n,x){return n.score-x.score||n.score===x.score&&x.boxIndex-n.boxIndex}function Zu(n,x,t){var e=new Array(n.rank).fill(0),i=n.shape.slice();return x.map(function(x){i[t]=x;var r=n.slice(e,i);return e[t]+=x,r})}function $u(n,x){for(var t=new Array(n.rank),e=0;e<t.length;e++)t[e]=n.shape[e]*x[e];var i=jh(t,n.dtype);for(e=0;e<i.values.length;++e){for(var r=i.indexToLoc(e),o=new Array(n.rank),s=0;s<o.length;s++)o[s]=r[s]%n.shape[s];var h=n.locToIndex(o);i.values[e]=n.values[h]}return i.toTensor()}function na(n,x,t,e,i){for(var r=x[x.length-1],o=[n.length/r,r],s=o[0],h=o[1],u=ar(t,s*e),a=ar("int32",s*e),g=0;g<s;g++){for(var l=g*h,c=n.subarray(l,l+h),d=[],f=0;f<c.length;f++)d.push({value:c[f],index:f});d.sort(function(n,x){return x.value-n.value});var p=g*e,y=u.subarray(p,p+e),m=a.subarray(p,p+e);for(f=0;f<e;f++)y[f]=d[f].value,m[f]=d[f].index}var b=x.slice();return b[b.length-1]=e,[Ls(u,b,t),Ls(a,b,"int32")]}function xa(n,x){for(var t=[],e=0;e<x.length;e++)x[e]&&t.push(e);var i=jh(n,"int32"),r=jh([t.length,n.length],"int32");for(e=0;e<t.length;e++){var o=i.indexToLoc(t[e]),s=e*n.length;r.values.set(o,s)}return r.toTensor()}var ta=function(n,x){this.outputShape=[],this.outputShape=n,this.variableNames=x.map(function(n,x){return"T"+x});var t=[];this.variableNames.forEach(function(n){t.push("float v"+n+" = get"+n+"AtOutCoords();")});var e=this.variableNames.map(function(n){return"v"+n}).join(" + ");this.userCode="\n void main() {\n "+t.join("\n ")+"\n\n float result = "+e+";\n setOutput(result);\n }\n "},ea=function(n,x){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n,this.variableNames=x.map(function(n,x){return"T"+x});var t=[];this.variableNames.forEach(function(n){t.push("vec4 v"+n+" = get"+n+"AtOutCoords();")});var e=this.variableNames.map(function(n){return"v"+n}).join(" + ");this.userCode="\n void main() {\n "+t.join("\n ")+"\n\n vec4 result = "+e+";\n setOutput(result);\n }\n "},ia=function(n,x,t){this.variableNames=["A"];var e=n.windowSize,i=n.batchSize,r=n.inSize,o=Math.ceil(r/e);t||this.variableNames.push("bestIndicesA"),this.outputShape=[i,o];var s="max"===x?">":"<",h=t?"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 * "+e+";\n\n int bestIndex = inOffset;\n float bestValue = getA(batch, bestIndex);\n\n for (int i = 0; i < "+e+"; i++) {\n int inIdx = "+h+";\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 ra(n,x){return["x","y","z","w","u","v"].slice(0,x).map(function(x){return n+"."+x})}function oa(n,x){return 1===x?[n]:ra(n,x)}function sa(){var n,x,t,e,i,r,o,s,h,u;return 2===Bi().getNumber("WEBGL_VERSION")?(n="#version 300 es",x="in",t="out",e="in",i="texture",r="outputColor",o="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 ",h="",u="\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 "):(n="",x="attribute",t="varying",e="varying",i="texture2D",r="gl_FragColor",o="",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 ",h="\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 ",u="\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:n,attribute:x,varyingVs:t,varyingFs:e,texture2D:i,output:r,defineOutput:o,defineSpecialNaN:s,defineSpecialInf:h,defineRound:u}}function ha(n,x,t){void 0===t&&(t="index");var e=kr(x);return e.map(function(x,i){return"int "+n[i]+" = "+t+" / "+x+"; "+(i===e.length-1?"int "+n[i+1]+" = "+t+" - "+n[i]+" * "+x:"index -= "+n[i]+" * "+x)+";"}).join("")}function ua(n){var x=kr(n).map(function(n){return n.toString()});return"\n int getFlatIndex(ivec3 coords) {\n return coords.x * "+x[0]+" + coords.y * "+x[1]+" + coords.z;\n }\n"}var aa="\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 ga(n,x,t,e){var i=[];n.forEach(function(n){var x=nr(n.shapeInfo.logicalShape);n.shapeInfo.isUniform?i.push("uniform float "+n.name+(x>1?"["+x+"]":"")+";"):(i.push("uniform sampler2D "+n.name+";"),i.push("uniform int offset"+n.name+";"))});var r,o,s=i.join("\n"),h=n.map(function(n){return function(n,x,t){void 0===t&&(t=!1);var e="";e+=t?ca(n):la(n);var i=n.shapeInfo.logicalShape,r=x.logicalShape;return i.length<=r.length&&(e+=t?function(n,x){var t,e=n.name,i=e.charAt(0).toUpperCase()+e.slice(1),r="get"+i+"AtOutCoords",o=n.shapeInfo.logicalShape.length,s=x.logicalShape.length,h=ju(n.shapeInfo.logicalShape,x.logicalShape),u=za(s),a=s-o,g=["x","y","z","w","u","v"];t=0===o?"":s<2&&h.length>=1?"coords = 0;":h.map(function(n){return"coords."+g[n+a]+" = 0;"}).join("\n");var l="";l=s<2&&o>0?"coords":n.shapeInfo.logicalShape.map(function(n,x){return"coords."+g[x+a]}).join(", ");var c="return outputValue;",d=1===nr(n.shapeInfo.logicalShape),f=1===nr(x.logicalShape);if(1!==o||d||f){if(d&&!f)c=1===s?"\n return vec4(outputValue.x, outputValue.x, 0., 0.);\n ":"\n return vec4(outputValue.x);\n ";else if(h.length){var p=o-2,y=o-1;h.indexOf(p)>-1&&h.indexOf(y)>-1?c="return vec4(outputValue.x);":h.indexOf(p)>-1?c="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":h.indexOf(y)>-1&&(c="return vec4(outputValue.xx, outputValue.zz);")}}else c="\n return vec4(outputValue.xy, outputValue.xy);\n ";return"\n vec4 "+r+"() {\n "+u+" coords = getOutputCoords();\n "+t+"\n vec4 outputValue = get"+i+"("+l+");\n "+c+"\n }\n "}(n,x):function(n,x){var t=n.name,e=t.charAt(0).toUpperCase()+t.slice(1),i="get"+e+"AtOutCoords",r=x.texShape,o=n.shapeInfo.texShape,s=n.shapeInfo.logicalShape.length,h=x.logicalShape.length;if(!n.shapeInfo.isUniform&&s===h&&null==n.shapeInfo.flatOffset&&xr(o,r))return"\n float "+i+"() {\n return sampleTexture("+t+", resultUV);\n }\n ";var u,a=za(h),g=ju(n.shapeInfo.logicalShape,x.logicalShape),l=h-s,c=["x","y","z","w","u","v"];u=0===s?"":h<2&&g.length>=1?"coords = 0;":g.map(function(n){return"coords."+c[n+l]+" = 0;"}).join("\n");var d="";return d=h<2&&s>0?"coords":n.shapeInfo.logicalShape.map(function(n,x){return"coords."+c[x+l]}).join(", "),"\n float "+i+"() {\n "+a+" coords = getOutputCoords();\n "+u+"\n return get"+e+"("+d+");\n }\n "}(n,x)),e}(n,x,e)}).join("\n"),u=x.texShape,a=sa(),g=function(n){return"\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return "+n.texture2D+"(textureSampler, uv).r;\n }\n "}(a),l=function(n){return n.version+"\n precision highp float;\n precision highp int;\n precision highp sampler2D;\n "+n.varyingFs+" vec2 resultUV;\n "+n.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 "+n.defineSpecialNaN+"\n "+n.defineSpecialInf+"\n "+n.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 "+da+"\n "+fa+"\n "+pa+"\n "}(a);return x.isPacked?(r=function(n,x){switch(n.length){case 0:return"\n int getOutputCoords() {\n return 0;\n }\n ";case 1:return function(n,x){var t=[Math.ceil(x[0]/2),Math.ceil(x[1]/2)];return 1===t[0]?"\n int getOutputCoords() {\n return 2 * int(resultUV.x * "+t[1]+".0);\n }\n ":1===t[1]?"\n int getOutputCoords() {\n return 2 * int(resultUV.y * "+t[0]+".0);\n }\n ":"\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+t[0]+", "+t[1]+"));\n return 2 * (resTexRC.x * "+t[1]+" + resTexRC.y);\n }\n "}(0,x);case 2:return function(n,x){var t=[Math.ceil(x[0]/2),Math.ceil(x[1]/2)];if(xr(n,x))return"\n ivec2 getOutputCoords() {\n return 2 * ivec2(resultUV.yx * vec2("+t[0]+", "+t[1]+"));\n }\n ";var e=Math.ceil(n[1]/2);return"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+t[0]+", "+t[1]+"));\n\n int index = resTexRC.x * "+t[1]+" + resTexRC.y;\n int r = 2 * (index / "+e+");\n int c = imod(index, "+e+") * 2;\n\n return ivec2(r, c);\n }\n "}(n,x);case 3:return t=n,e=x,i=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],r=Math.ceil(t[2]/2),o=r*Math.ceil(t[1]/2),"\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+i[0]+", "+i[1]+"));\n int index = resTexRC.x * "+i[1]+" + resTexRC.y;\n\n int b = index / "+o+";\n index -= b * "+o+";\n\n int r = 2 * (index / "+r+");\n int c = imod(index, "+r+") * 2;\n\n return ivec3(b, r, c);\n }\n ";default:return function(n,x){for(var t=[Math.ceil(x[0]/2),Math.ceil(x[1]/2)],e=Math.ceil(n[n.length-1]/2),i=e*Math.ceil(n[n.length-2]/2),r=i,o="",s="b, r, c",h=2;h<n.length-1;h++)r*=n[n.length-h-1],o="\n int b"+h+" = index / "+r+";\n index -= b"+h+" * "+r+";\n "+o,s="b"+h+", "+s;return"\n ivec"+n.length+" getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+t[0]+", "+t[1]+"));\n int index = resTexRC.x * "+t[1]+" + resTexRC.y;\n\n "+o+"\n\n int b = index / "+i+";\n index -= b * "+i+";\n\n int r = 2 * (index / "+e+");\n int c = imod(index, "+e+") * 2;\n\n return ivec"+n.length+"("+s+");\n }\n "}(n,x)}var t,e,i,r,o}(x.logicalShape,u),o=function(n){return"\n void setOutput(vec4 val) {\n "+n.output+" = val;\n }\n "}(a)):(r=function(n,x){switch(n.length){case 0:return"\n int getOutputCoords() {\n return 0;\n }\n ";case 1:return function(n,x){return 1===x[0]?"\n int getOutputCoords() {\n return int(resultUV.x * "+x[1]+".0);\n }\n ":1===x[1]?"\n int getOutputCoords() {\n return int(resultUV.y * "+x[0]+".0);\n }\n ":"\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+x[0]+", "+x[1]+"));\n return resTexRC.x * "+x[1]+" + resTexRC.y;\n }\n "}(0,x);case 2:return function(n,x){return xr(n,x)?"\n ivec2 getOutputCoords() {\n return ivec2(resultUV.yx * vec2("+x[0]+", "+x[1]+"));\n }\n ":1===n[1]?"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+x[0]+", "+x[1]+"));\n int index = resTexRC.x * "+x[1]+" + resTexRC.y;\n return ivec2(index, 0);\n }\n ":1===n[0]?"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+x[0]+", "+x[1]+"));\n int index = resTexRC.x * "+x[1]+" + resTexRC.y;\n return ivec2(0, index);\n }\n ":"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+x[0]+", "+x[1]+"));\n int index = resTexRC.x * "+x[1]+" + resTexRC.y;\n int r = index / "+n[1]+";\n int c = index - r * "+n[1]+";\n return ivec2(r, c);\n }\n "}(n,x);case 3:return t=x,e=ha(["r","c","d"],n),"\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+t[0]+", "+t[1]+"));\n int index = resTexRC.x * "+t[1]+" + resTexRC.y;\n "+e+"\n return ivec3(r, c, d);\n }\n ";case 4:return function(n,x){var t=ha(["r","c","d","d2"],n);return"\n ivec4 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+x[0]+", "+x[1]+"));\n int index = resTexRC.x * "+x[1]+" + resTexRC.y;\n "+t+"\n return ivec4(r, c, d, d2);\n }\n "}(n,x);case 5:return function(n,x){var t=ha(["r","c","d","d2","d3"],n);return"\n ivec5 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx * vec2("+x[0]+",\n "+x[1]+"));\n\n int index = resTexRC.x * "+x[1]+" + resTexRC.y;\n\n "+t+"\n\n ivec5 outShape = ivec5(r, c, d, d2, d3);\n return outShape;\n }\n "}(n,x);case 6:return function(n,x){var t=ha(["r","c","d","d2","d3","d4"],n);return"\n ivec6 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+x[0]+", "+x[1]+"));\n int index = resTexRC.x * "+x[1]+" + resTexRC.y;\n\n "+t+"\n\n ivec6 result = ivec6(r, c, d, d2, d3, d4);\n return result;\n }\n "}(n,x);default:throw new Error(n.length+"-D output sampling is not yet supported")}var t,e}(x.logicalShape,u),o=function(n){return"\n void setOutput(float val) {\n "+n.output+" = vec4(val, 0, 0, 0);\n }\n "}(a)),e&&(l+=ya),[l,g,o,s,r,h,t].join("\n")}function la(n){var x=n.shapeInfo.logicalShape;switch(x.length){case 0:return function(n){var x=n.name,t="get"+x.charAt(0).toUpperCase()+x.slice(1);if(n.shapeInfo.isUniform)return"float "+t+"() {return "+x+";}";var e=n.shapeInfo.texShape,i=e[0],r=e[1];if(1===i&&1===r)return"\n float "+t+"() {\n return sampleTexture("+x+", halfCR);\n }\n ";var o=n.shapeInfo.texShape,s=o[0],h=o[1],u=ma(x);return"\n float "+t+"() {\n vec2 uv = uvFromFlat("+s+", "+h+", "+u+");\n return sampleTexture("+x+", uv);\n }\n "}(n);case 1:return function(n){var x=n.name,t="get"+x.charAt(0).toUpperCase()+x.slice(1);if(n.shapeInfo.isUniform)return"\n float "+t+"(int index) {\n "+ba(n)+"\n }\n ";var e=n.shapeInfo.texShape,i=e[0],r=e[1];if(1===r&&1===i)return"\n float "+t+"(int index) {\n return sampleTexture("+x+", halfCR);\n }\n ";var o=ma(x);return 1===r?"\n float "+t+"(int index) {\n vec2 uv = vec2(0.5, (float(index + "+o+") + 0.5) / "+i+".0);\n return sampleTexture("+x+", uv);\n }\n ":1===i?"\n float "+t+"(int index) {\n vec2 uv = vec2((float(index + "+o+") + 0.5) / "+r+".0, 0.5);\n return sampleTexture("+x+", uv);\n }\n ":"\n float "+t+"(int index) {\n vec2 uv = uvFromFlat("+i+", "+r+", index + "+o+");\n return sampleTexture("+x+", uv);\n }\n "}(n);case 2:return function(n){var x=n.shapeInfo.logicalShape,t=n.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),i=n.shapeInfo.texShape;if(null!=i&&xr(x,i)){var r=i[0],o=i[1];return"\n float "+e+"(int row, int col) {\n vec2 uv = (vec2(col, row) + halfCR) / vec2("+o+".0, "+r+".0);\n return sampleTexture("+t+", uv);\n }\n "}var s=ur(x),h=s.newShape,u=s.keptDims,a=h;if(a.length<x.length){var g=va(n,a);return"\n "+la(g)+"\n float "+e+"(int row, int col) {\n return "+e+"("+ja(["row","col"],u)+");\n }\n "}if(n.shapeInfo.isUniform)return"\n float "+e+"(int row, int col) {\n int index = round(dot(vec2(row, col), vec2("+x[1]+", 1)));\n "+ba(n)+"\n }\n ";var l=i[0],c=i[1],d=ma(t);return 1===c?"\n float "+e+"(int row, int col) {\n float index = dot(vec3(row, col, "+d+"), vec3("+x[1]+", 1, 1));\n vec2 uv = vec2(0.5, (index + 0.5) / "+l+".0);\n return sampleTexture("+t+", uv);\n }\n ":1===l?"\n float "+e+"(int row, int col) {\n float index = dot(vec3(row, col, "+d+"), vec3("+x[1]+", 1, 1));\n vec2 uv = vec2((index + 0.5) / "+c+".0, 0.5);\n return sampleTexture("+t+", uv);\n }\n ":"\n float "+e+"(int row, int col) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * "+x[1]+" + col + "+d+";\n vec2 uv = uvFromFlat("+l+", "+c+", index);\n return sampleTexture("+t+", uv);\n }\n"}(n);case 3:return function(n){var x=n.shapeInfo.logicalShape,t=n.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),i=x[1]*x[2],r=x[2],o=ur(x),s=o.newShape,h=o.keptDims,u=s;if(u.length<x.length){var a=va(n,u);return"\n "+la(a)+"\n float "+e+"(int row, int col, int depth) {\n return "+e+"("+ja(["row","col","depth"],h)+");\n }\n "}if(n.shapeInfo.isUniform)return"\n float "+e+"(int row, int col, int depth) {\n int index = round(dot(vec3(row, col, depth),\n vec3("+i+", "+r+", 1)));\n "+ba(n)+"\n }\n ";var g=n.shapeInfo.texShape,l=g[0],c=g[1],d=n.shapeInfo.flatOffset;if(c===i&&null==d)return"\n float "+e+"(int row, int col, int depth) {\n float texR = float(row);\n float texC = dot(vec2(col, depth), vec2("+r+", 1));\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+c+".0, "+l+".0);\n return sampleTexture("+t+", uv);\n }\n ";if(c===r&&null==d)return"\n float "+e+"(int row, int col, int depth) {\n float texR = dot(vec2(row, col), vec2("+x[1]+", 1));\n float texC = float(depth);\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+c+".0, "+l+".0);\n return sampleTexture("+t+", uv);\n }\n ";var f=ma(t);return"\n float "+e+"(int row, int col, int depth) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * "+i+" + col * "+r+" + depth + "+f+";\n vec2 uv = uvFromFlat("+l+", "+c+", index);\n return sampleTexture("+t+", uv);\n }\n "}(n);case 4:return function(n){var x=n.shapeInfo.logicalShape,t=n.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),i=x[3],r=x[2]*i,o=x[1]*r,s=ur(x),h=s.newShape,u=s.keptDims;if(h.length<x.length){var a=va(n,h);return"\n "+la(a)+"\n float "+e+"(int row, int col, int depth, int depth2) {\n return "+e+"("+ja(["row","col","depth","depth2"],u)+");\n }\n "}if(n.shapeInfo.isUniform)return"\n float "+e+"(int row, int col, int depth, int depth2) {\n int index = round(dot(vec4(row, col, depth, depth2),\n vec4("+o+", "+r+", "+i+", 1)));\n "+ba(n)+"\n }\n ";var g=n.shapeInfo.flatOffset,l=n.shapeInfo.texShape,c=l[0],d=l[1];if(d===o&&null==g)return"\n float "+e+"(int row, int col, int depth, int depth2) {\n float texR = float(row);\n float texC =\n dot(vec3(col, depth, depth2),\n vec3("+r+", "+i+", 1));\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+d+".0, "+c+".0);\n return sampleTexture("+t+", uv);\n }\n ";if(d===i&&null==g)return"\n float "+e+"(int row, int col, int depth, int depth2) {\n float texR = dot(vec3(row, col, depth),\n vec3("+x[1]*x[2]+", "+x[2]+", 1));\n float texC = float(depth2);\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+d+".0, "+c+".0);\n return sampleTexture("+t+", uv);\n }\n ";var f=ma(t);return"\n float "+e+"(int row, int col, int depth, int depth2) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * "+o+" + col * "+r+" +\n depth * "+i+" + depth2;\n vec2 uv = uvFromFlat("+c+", "+d+", index + "+f+");\n return sampleTexture("+t+", uv);\n }\n "}(n);case 5:return function(n){var x=n.shapeInfo.logicalShape,t=n.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),i=x[4],r=x[3]*i,o=x[2]*r,s=x[1]*o,h=ur(x),u=h.newShape,a=h.keptDims;if(u.length<x.length){var g=va(n,u);return"\n "+la(g)+"\n float "+e+"(int row, int col, int depth, int depth2, int depth3) {\n return "+e+"("+ja(["row","col","depth","depth2","depth3"],a)+");\n }\n "}if(n.shapeInfo.isUniform)return"\n float "+e+"(int row, int col, int depth, int depth2, int depth3) {\n float index = dot(\n vec4(row, col, depth, depth2),\n vec4("+s+", "+o+", "+r+", "+i+")) +\n depth3;\n "+ba(n)+"\n }\n ";var l=n.shapeInfo.flatOffset,c=n.shapeInfo.texShape,d=c[0],f=c[1];if(f===s&&null==l)return"\n float "+e+"(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("+o+", "+r+", "+i+", 1));\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+f+".0, "+d+".0);\n return sampleTexture("+t+", uv);\n }\n ";if(f===i&&null==l)return"\n float "+e+"(int row, int col, int depth, int depth2, int depth3) {\n float texR = dot(\n vec4(row, col, depth, depth2),\n vec4("+x[1]*x[2]*x[3]+",\n "+x[2]*x[3]+", "+x[3]+", 1));\n int texC = depth3;\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+f+".0, "+d+".0);\n return sampleTexture("+t+", uv);\n }\n ";var p=ma(t);return"\n float "+e+"(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 * "+s+" + col * "+o+" + depth * "+r+" +\n depth2 * "+i+" + depth3 + "+p+";\n vec2 uv = uvFromFlat("+d+", "+f+", index);\n return sampleTexture("+t+", uv);\n }\n "}(n);case 6:return function(n){var x=n.shapeInfo.logicalShape,t=n.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),i=ur(x),r=i.newShape,o=i.keptDims;if(r.length<x.length){var s=va(n,r);return"\n "+la(s)+"\n float "+e+"(int row, int col, int depth,\n int depth2, int depth3, int depth4) {\n return "+e+"("+ja(["row","col","depth","depth2","depth3","depth4"],o)+");\n }\n "}var h=x[5],u=x[4]*h,a=x[3]*u,g=x[2]*a,l=x[1]*g;if(n.shapeInfo.isUniform)return"\n float "+e+"(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("+l+", "+g+", "+a+", "+u+")) +\n dot(\n vec2(depth3, depth4),\n vec2("+h+", 1)));\n "+ba(n)+"\n }\n ";var c=n.shapeInfo.flatOffset,d=n.shapeInfo.texShape,f=d[0],p=d[1];if(p===l&&null==c)return"\n float "+e+"(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("+g+", "+a+", "+u+", "+h+")) +\n float(depth4);\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+p+".0, "+f+".0);\n return sampleTexture("+t+", uv);\n }\n ";if(p===h&&null==c)return"\n float "+e+"(int row, int col, int depth,\n int depth2, int depth3, int depth4) {\n float texR = dot(vec4(row, col, depth, depth2),\n vec4("+x[1]*x[2]*x[3]*x[4]+",\n "+x[2]*x[3]*x[4]+",\n "+x[3]*x[4]+",\n "+x[4]+")) + float(depth3);\n int texC = depth4;\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+p+".0, "+f+".0);\n return sampleTexture("+t+", uv);\n }\n ";var y=ma(t);return"\n float "+e+"(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 * "+l+" + col * "+g+" + depth * "+a+" +\n depth2 * "+u+" + depth3 * "+h+" + depth4 + "+y+";\n vec2 uv = uvFromFlat("+f+", "+p+", index);\n return sampleTexture("+t+", uv);\n }\n "}(n);default:throw new Error(x.length+"-D input sampling is not yet supported")}}function ca(n){var x,t,e;switch(n.shapeInfo.logicalShape.length){case 0:return x=n.name,t="get"+x.charAt(0).toUpperCase()+x.slice(1),e=sa(),"\n vec4 "+t+"() {\n return "+e.texture2D+"("+x+", halfCR);\n }\n ";case 1:return function(n){var x=n.name,t="get"+x.charAt(0).toUpperCase()+x.slice(1),e=n.shapeInfo.texShape,i=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],r=sa();return"\n vec4 "+t+"(int index) {\n vec2 uv = packedUVfrom1D(\n "+i[0]+", "+i[1]+", index);\n return "+r.texture2D+"("+x+", uv);\n }\n "}(n);case 2:return function(n){var x=n.shapeInfo.logicalShape,t=n.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),i=n.shapeInfo.texShape,r=i[0],o=i[1],s=sa();if(null!=i&&xr(x,i))return"\n vec4 "+e+"(int row, int col) {\n vec2 uv = (vec2(col, row) + halfCR) / vec2("+o+".0, "+r+".0);\n\n return "+s.texture2D+"("+t+", uv);\n }\n ";var h=[Math.ceil(i[0]/2),Math.ceil(i[1]/2)],u=Math.ceil(x[1]/2);return"\n vec4 "+e+"(int row, int col) {\n vec2 uv = packedUVfrom2D("+u+", "+h[0]+", "+h[1]+", row, col);\n return "+s.texture2D+"("+t+", uv);\n }\n "}(n);case 3:return function(n){var x=n.shapeInfo.logicalShape,t=n.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),i=n.shapeInfo.texShape,r=[Math.ceil(i[0]/2),Math.ceil(i[1]/2)];if(1===x[0]){var o=x.slice(1),s=va(n,o);return"\n "+ca(s)+"\n vec4 "+e+"(int b, int row, int col) {\n return "+e+"("+ja(["b","row","col"],[1,2])+");\n }\n "}var h=r[0],u=r[1],a=Math.ceil(x[2]/2),g=a*Math.ceil(x[1]/2),l=sa();return"\n vec4 "+e+"(int b, int row, int col) {\n vec2 uv = packedUVfrom3D(\n "+h+", "+u+", "+g+", "+a+", b, row, col);\n return "+l.texture2D+"("+t+", uv);\n }\n "}(n);default:return function(n){for(var x=n.shapeInfo.logicalShape,t=x.length,e=n.name,i="get"+e.charAt(0).toUpperCase()+e.slice(1),r=n.shapeInfo.texShape,o=[Math.ceil(r[0]/2),Math.ceil(r[1]/2)],s=o[0],h=o[1],u=Math.ceil(x[t-1]/2),a=u*Math.ceil(x[t-2]/2),g="int b, int row, int col",l="b * "+a+" + (row / 2) * "+u+" + (col / 2)",c=2;c<t-1;c++)g="int b"+c+", "+g,a*=x[t-c-1],l="b"+c+" * "+a+" + "+l;var d=sa();return"\n vec4 "+i+"("+g+") {\n int index = "+l+";\n int texR = index / "+h+";\n int texC = index - texR * "+h+";\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+h+", "+s+");\n return "+d.texture2D+"("+e+", uv);\n }\n "}(n)}}var da="\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",fa="\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",pa="\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",ya="\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 ma(n){return"offset"+n}function ba(n){var x=n.name,t=nr(n.shapeInfo.logicalShape);return t<2?"return "+x+";":"\n for (int i = 0; i < "+t+"; i++) {\n if (i == index) {\n return "+x+"[i];\n }\n }\n "}function za(n){if(n<=1)return"int";if(2===n)return"ivec2";if(3===n)return"ivec3";if(4===n)return"ivec4";if(5===n)return"ivec5";if(6===n)return"ivec6";throw Error("GPU for rank "+n+" is not yet supported")}function va(n,x){var t=JSON.parse(JSON.stringify(n));return t.shapeInfo.logicalShape=x,t}function ja(n,x){return x.map(function(x){return n[x]}).join(", ")}var wa=function(n,x,t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,Ji(n.length>2,function(){return"Packed arg"+(t.charAt(0).toUpperCase()+t.slice(1))+" supports only inputs with rank above 2."});var i=n[n.length-1],r=Math.ceil(i/x);this.outputShape=n.slice(0,-1),r>1&&this.outputShape.push(r),e||this.variableNames.push("bestIndicesA");var o,s,h=this.outputShape,u=h.length,a=za(u),g=oa("coords",u);if(1===r){var l=za(s=u+1);o="\n "+l+" sourceLocR = "+l+"("+g.join()+", 0);\n ++"+g[u-1]+";\n "+l+" sourceLocG = "+l+"("+g.join()+", 0);\n ++"+g[u-2]+";\n "+l+" sourceLocA = "+l+"("+g.join()+", 0);\n --"+g[u-1]+";\n "+l+" sourceLocB = "+l+"("+g.join()+", 0);\n --"+g[u-2]+";"}else s=u,o="\n "+a+" sourceLocR = coords;\n ++"+g[u-1]+";\n "+a+" sourceLocG = coords;\n ++"+g[u-2]+";\n "+a+" sourceLocA = coords;\n --"+g[u-1]+";\n "+a+" sourceLocB = coords;\n --"+g[u-2]+";";var c=["x","y","z","w","u","v"].slice(0,s),d="."+c[s-1],f=c.map(function(n){return"int "+n}),p=oa("sourceLocR",s-1).concat("inIdx.r"),y=oa("sourceLocG",s-1).concat("inIdx.g"),m=oa("sourceLocB",s-1).concat("inIdx.b"),b=oa("sourceLocA",s-1).concat("inIdx.a"),z="max"===t?"greaterThan":"lessThan",v=e?"":"\n inIdx = round(vec4(getBestIndicesAChannel("+p.join()+"),\n getBestIndicesAChannel("+y.join()+"),\n getBestIndicesAChannel("+m.join()+"),\n getBestIndicesAChannel("+b.join()+")));",j="vec4(\n getAChannel("+p.join()+"),\n hasNextCol ? getAChannel("+y.join()+") : 0.,\n hasNextRow ? getAChannel("+m.join()+") : 0.,\n hasNextRow && hasNextCol ? getAChannel("+b.join()+") : 0.)",w=e?"":"\n float getBestIndicesAChannel("+f.join()+") {\n return getChannel(getBestIndicesA("+c.join()+"),\n vec2("+c.slice(-2).join()+"));\n }";this.userCode="\n float getAChannel("+f.join()+") {\n return getChannel(getA("+c.join()+"),\n vec2("+c.slice(-2).join()+"));\n }\n "+w+"\n void main() {\n "+a+" coords = getOutputCoords();\n bool hasNextCol = "+g[u-1]+" < "+(h[u-1]-1)+";\n bool hasNextRow = "+g[u-2]+" < "+(h[u-2]-1)+";\n "+o+"\n ivec4 srcIdx = ivec4(sourceLocR"+d+", sourceLocG"+d+",\n sourceLocB"+d+", sourceLocA"+d+") * "+x+";\n ivec4 inIdx = srcIdx;\n vec4 bestIndex = vec4(inIdx);\n vec4 bestValue = "+j+";\n\n for (int i = 0; i < "+x+"; i++) {\n inIdx = srcIdx;\n "+v+"\n vec4 candidate = "+j+";\n bvec4 nan = isnan(candidate);\n bvec4 replace = bvec4(\n vec4("+z+"(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 "},ka=function(n){this.variableNames=["dy"],this.outputShape=n.inShape;var x=n.filterHeight,t=n.filterWidth,e=n.strideHeight,i=n.strideWidth,r=n.dilationHeight,o=n.dilationWidth,s=n.effectiveFilterHeight,h=n.effectiveFilterWidth,u=s-1-n.padInfo.top,a=h-1-n.padInfo.left,g=1/(x*t);this.userCode="\n const ivec2 pads = ivec2("+u+", "+a+");\n const float avgMultiplier = float("+g+");\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 += "+r+") {\n float dyR = float(dyRCorner + wR) / "+e+".0;\n\n if (dyR < 0.0 || dyR >= "+n.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+h+";\n wC+= "+o+") {\n float dyC = float(dyCCorner + wC) / "+i+".0;\n\n if (dyC < 0.0 || dyC >= "+n.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 "},qa=function(n){this.variableNames=["dy"],this.outputShape=n.inShape;var x=n.filterDepth,t=n.filterHeight,e=n.filterWidth,i=n.strideDepth,r=n.strideHeight,o=n.strideWidth,s=n.dilationDepth,h=n.dilationHeight,u=n.dilationWidth,a=n.effectiveFilterDepth,g=n.effectiveFilterHeight,l=n.effectiveFilterWidth,c=a-1-n.padInfo.front,d=g-1-n.padInfo.top,f=l-1-n.padInfo.left,p=1/(x*t*e);this.userCode="\n const ivec3 pads = ivec3("+c+", "+d+", "+f+");\n const float avgMultiplier = float("+p+");\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 < "+a+";\n wD += "+s+") {\n float dyD = float(dyDCorner + wD) / "+i+".0;\n\n if (dyD < 0.0 || dyD >= "+n.outDepth+".0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < "+g+";\n wR += "+h+") {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+n.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+l+";\n wC += "+u+") {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+n.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 "},Ca=function(n,x,t,e,i,r){this.outputShape=[],this.variableNames=["x","mean","variance"],ku(n,x),ku(n,t);var o="0.0";null!=e&&(ku(n,e),this.variableNames.push("offset"),o="getOffsetAtOutCoords()");var s="1.0";null!=i&&(ku(n,i),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=n,this.userCode="\n void main() {\n float x = getXAtOutCoords();\n float mean = getMeanAtOutCoords();\n float variance = getVarianceAtOutCoords();\n float offset = "+o+";\n float scale = "+s+";\n float inv = scale * inversesqrt(variance + float("+r+"));\n setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\n }\n "},Aa=function(n,x,t,e,i,r){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],ku(n,x),ku(n,t);var o="vec4(0.0)";null!=e&&(ku(n,e),this.variableNames.push("offset"),o="getOffsetAtOutCoords()");var s="vec4(1.0)";null!=i&&(ku(n,i),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=n,this.userCode="\n void main() {\n vec4 offset = "+o+";\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("+r+"));\n\n setOutput((x - mean) * inv + offset);\n }\n "},Ea="return areal * breal - aimag * bimag;",Sa="return areal * bimag + aimag * breal;",Ia=function(n,x,t){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=ku(x,t),this.userCode="\n float binaryOpComplex(\n float areal, float aimag, float breal, float bimag) {\n "+n+"\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 "},Da="return a + b;",Oa="return a - b;",_a="return a * b;",Ta="return (a < 0.) ? b * a : a;",Ra=function(n,x,t){this.variableNames=["A","B"],this.outputShape=ku(x,t),this.userCode="\n float binaryOperation(float a, float b) {\n "+n+"\n }\n\n void main() {\n float a = getAAtOutCoords();\n float b = getBAtOutCoords();\n setOutput(binaryOperation(a, b));\n }\n "},Ba="\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n",Ma=function(n,x,t,e){void 0===e&&(e=!1),this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=ku(x,t);var i=this.outputShape.length,r="";if(e)if(0===i||1===nr(this.outputShape))r="\n result.y = 0.;\n result.z = 0.;\n result.w = 0.;\n ";else if(r="\n "+za(i)+" coords = getOutputCoords();\n ",1===i)r+="\n result.y = (coords + 1) >= "+this.outputShape[0]+" ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n ";else{var o=oa("coords",i);r+="\n bool nextRowOutOfBounds =\n ("+o[i-2]+" + 1) >= "+this.outputShape[i-2]+";\n bool nextColOutOfBounds =\n ("+o[i-1]+" + 1) >= "+this.outputShape[i-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 "+n+"\n }\n\n void main() {\n vec4 a = getAAtOutCoords();\n vec4 b = getBAtOutCoords();\n\n vec4 result = binaryOperation(a, b);\n "+r+"\n\n setOutput(result);\n }\n "},Na=function(){function n(n){this.variableNames=["A"],this.outputShape=n,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 n.prototype.getCustomSetupFunc=function(n,x){var t=this;return function(e,i){null==t.minLoc&&(t.minLoc=e.getUniformLocationNoThrow(i,"minVal"),t.maxLoc=e.getUniformLocationNoThrow(i,"maxVal")),e.gl.uniform1f(t.minLoc,n),e.gl.uniform1f(t.maxLoc,x)}},n}(),Fa=function(){function n(n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n,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 n.prototype.getCustomSetupFunc=function(n,x){var t=this;return function(e,i){null==t.minLoc&&(t.minLoc=e.getUniformLocationNoThrow(i,"minVal"),t.maxLoc=e.getUniformLocationNoThrow(i,"maxVal")),e.gl.uniform1f(t.minLoc,n),e.gl.uniform1f(t.maxLoc,x)}},n}(),Pa=function(n){this.variableNames=["real","imag"],this.outputShape=n,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 "},La=function(n){this.outputShape=[],this.outputShape=Bs(n,1),this.variableNames=n.map(function(n,x){return"T"+x});var x=new Array(n.length-1);x[0]=n[0][1];for(var t=1;t<x.length;t++)x[t]=x[t-1]+n[t][1];var e=["if (yC < "+x[0]+") setOutput(getT0(yR, yC));"];for(t=1;t<x.length;t++){var i=x[t-1];e.push("else if (yC < "+x[t]+") setOutput(getT"+t+"(yR, yC-"+i+"));")}var r=x.length,o=x[x.length-1];e.push("else setOutput(getT"+r+"(yR, yC-"+o+"));"),this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int yR = coords.x;\n int yC = coords.y;\n\n "+e.join("\n ")+"\n }\n "},Ha=function(n,x){this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[],this.outputShape=Bs(n,x);var t=this.outputShape,e=t.length,i=za(e),r=oa("coords",e),o=["x","y","z","w","u","v"].slice(0,e);this.variableNames=n.map(function(n,x){return"T"+x});var s=new Array(n.length-1);s[0]=n[0][x];for(var h=1;h<s.length;h++)s[h]=s[h-1]+n[h][x];var u=o[x],a=o.slice(-2),g=o.join(),l="if ("+u+" < "+s[0]+") {\n return getChannel(\n getT0("+g+"), vec2("+a.join()+"));\n }";for(h=1;h<s.length;h++){var c=s[h-1];l+="\n if ("+u+" < "+s[h]+" && "+u+" >= "+s[h-1]+") {\n return getChannel(\n getT"+h+"("+Ua(o,u,c)+"),\n vec2("+Ua(a,u,c)+"));\n }"}var d=s.length,f=s[s.length-1];l+="\n return getChannel(\n getT"+d+"("+Ua(o,u,f)+"),\n vec2("+Ua(a,u,f)+"));",this.userCode="\n float getValue("+o.map(function(n){return"int "+n})+") {\n "+l+"\n }\n\n void main() {\n "+i+" coords = getOutputCoords();\n vec4 result = vec4(getValue("+r+"), 0., 0., 0.);\n\n "+r[e-1]+" = "+r[e-1]+" + 1;\n if ("+r[e-1]+" < "+t[e-1]+") {\n result.g = getValue("+r+");\n }\n\n "+r[e-2]+" = "+r[e-2]+" + 1;\n if ("+r[e-2]+" < "+t[e-2]+") {\n result.a = getValue("+r+");\n }\n\n "+r[e-1]+" = "+r[e-1]+" - 1;\n if ("+r[e-2]+" < "+t[e-2]+" &&\n "+r[e-1]+" < "+t[e-1]+") {\n result.b = getValue("+r+");\n }\n setOutput(result);\n }\n "};function Ua(n,x,t){var e=n.indexOf(x);return n.map(function(n,x){return x===e?n+" - "+t:n}).join()}var Va=function(n){this.variableNames=["x","dy"],this.outputShape=n.filterShape;var x=n.strideHeight,t=n.strideWidth,e=n.padInfo.top,i=n.padInfo.left,r="channelsLast"===n.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 < "+n.batchSize+"; b++) {\n for (int yR = 0; yR < "+n.outHeight+"; yR++) {\n int xR = wR + yR * "+x+" - "+e+";\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+n.outWidth+"; yC++) {\n int xC = wC + yC * "+t+" - "+i+";\n\n if (xC < 0 || xC >= "+n.inWidth+") {\n continue;\n }\n\n if ("+r+") {\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 "},Wa=function(n){this.variableNames=["dy","W"],this.outputShape=n.inShape;var x=n.filterHeight,t=n.filterWidth,e=n.strideHeight,i=n.strideWidth,r="channelsLast"===n.dataFormat,o=x-1-n.padInfo.top,s=t-1-n.padInfo.left,h=r?1:2,u=r?2:3,a=r?3:1;this.userCode="\n const ivec2 pads = ivec2("+o+", "+s+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords["+a+"];\n\n ivec2 dyCorner = ivec2(coords["+h+"], coords["+u+"]) - 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 < "+x+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+e+".0;\n\n if (dyR < 0.0 || dyR >= "+n.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+x+" - 1 - wR;\n\n for (int wC = 0; wC < "+t+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+i+".0;\n\n if (dyC < 0.0 || dyC >= "+n.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+t+" - 1 - wC;\n\n for (int d2 = 0; d2 < "+n.outChannels+"; d2++) {\n\n if ("+r+") {\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 "},Qa=function(n){this.variableNames=["x","dy"],this.outputShape=n.filterShape;var x=n.strideDepth,t=n.strideHeight,e=n.strideWidth,i=n.padInfo.front,r=n.padInfo.top,o=n.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 < "+n.batchSize+"; b++) {\n for (int yF = 0; yF < "+n.outDepth+"; yF++) {\n int xF = wF + yF * "+x+" - "+i+";\n\n if (xF < 0 || xF >= "+n.inDepth+") {\n continue;\n }\n\n for (int yR = 0; yR < "+n.outHeight+"; yR++) {\n int xR = wR + yR * "+t+" - "+r+";\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+n.outWidth+"; yC++) {\n int xC = wC + yC * "+e+" - "+o+";\n\n if (xC < 0 || xC >= "+n.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 "},Ga=function(n){this.variableNames=["dy","W"],this.outputShape=n.inShape;var x=n.filterDepth,t=n.filterHeight,e=n.filterWidth,i=n.strideDepth,r=n.strideHeight,o=n.strideWidth,s=x-1-n.padInfo.front,h=t-1-n.padInfo.top,u=e-1-n.padInfo.left;this.userCode="\n const ivec3 pads = ivec3("+s+", "+h+", "+u+");\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 < "+x+"; wF++) {\n float dyF = float(dyFCorner + wF) / "+i+".0;\n\n if (dyF < 0.0 || dyF >= "+n.outDepth+".0 || fract(dyF) > 0.0) {\n continue;\n }\n int idyF = int(dyF);\n\n int wFPerm = "+x+" - 1 - wF;\n\n for (int wR = 0; wR < "+t+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+n.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+t+" - 1 - wR;\n\n for (int wC = 0; wC < "+e+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+n.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+e+" - 1 - wC;\n\n for (int d2 = 0; d2 < "+n.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 "},Ka=function(n){this.variableNames=["x","dy"],this.outputShape=n.filterShape;var x=n.strideHeight,t=n.strideWidth,e=n.padInfo.top,i=n.padInfo.left,r=n.outChannels/n.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 * "+r+" + dm;\n\n float dotProd = 0.0;\n\n // TO DO: Vec4 over the batch size\n for (int b = 0; b < "+n.batchSize+"; b++) {\n for (int yR = 0; yR < "+n.outHeight+"; yR++) {\n int xR = wR + yR * "+x+" - "+e+";\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+n.outWidth+"; yC++) {\n int xC = wC + yC * "+t+" - "+i+";\n\n if (xC < 0 || xC >= "+n.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 "},Ya=function(n){this.variableNames=["dy","W"],this.outputShape=n.inShape;var x=n.filterHeight,t=n.filterWidth,e=n.strideHeight,i=n.strideWidth,r=x-1-n.padInfo.top,o=t-1-n.padInfo.left,s=n.outChannels/n.inChannels;this.userCode="\n const ivec2 pads = ivec2("+r+", "+o+");\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 < "+x+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+e+".0;\n\n if (dyR < 0.0 || dyR >= "+n.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+x+" - 1 - wR;\n\n for (int wC = 0; wC < "+t+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+i+".0;\n\n if (dyC < 0.0 || dyC >= "+n.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+t+" - 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 "},Ja=function(n,x,t,e){void 0===x&&(x=!1),void 0===t&&(t=null),void 0===e&&(e=!1),this.variableNames=["x","W"],this.outputShape=n.outShape;var i=n.padInfo.top,r=n.padInfo.left,o=n.strideHeight,s=n.strideWidth,h=n.dilationHeight,u=n.dilationWidth,a=n.filterHeight,g=n.filterWidth,l=4*Math.floor(n.inChannels/4),c=n.inChannels%4,d="channelsLast"===n.dataFormat,f=d?1:2,p=d?2:3,y=d?3:1,m="",b="";t&&(m=e?"float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n "+t+"\n }":"\n float activation(float x) {\n "+t+"\n }\n ",b="result = activation(result);");var z=x?"result += getBiasAtOutCoords();":"";x&&this.variableNames.push("bias"),e&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+m+"\n\n const ivec2 strides = ivec2("+o+", "+s+");\n const ivec2 pads = ivec2("+i+", "+r+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d2 = coords["+y+"];\n\n ivec2 xRCCorner =\n ivec2(coords["+f+"], coords["+p+"]) * 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 < "+a+"; wR++) {\n int xR = xRCorner + wR * "+h+";\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+g+"; wC++) {\n int xC = xCCorner + wC * "+u+";\n\n if (xC < 0 || xC >= "+n.inWidth+") {\n continue;\n }\n\n for (int d1 = 0; d1 < "+l+"; 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 ("+d+") {\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===c)+") {\n\n if ("+d+") {\n dotProd +=\n getX(batch, xR, xC, "+l+") *\n getW(wR, wC, "+l+", d2);\n } else {\n dotProd +=\n getX(batch, "+l+", xR, xC) *\n getW(wR, wC, "+l+", d2);\n }\n\n } else if ("+(2===c)+") {\n vec2 wValues = vec2(\n getW(wR, wC, "+l+", d2),\n getW(wR, wC, "+l+" + 1, d2)\n );\n\n if ("+d+") {\n vec2 xValues = vec2(\n getX(batch, xR, xC, "+l+"),\n getX(batch, xR, xC, "+l+" + 1)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec2 xValues = vec2(\n getX(batch, "+l+", xR, xC),\n getX(batch, "+l+" + 1, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n } else if ("+(3===c)+") {\n vec3 wValues = vec3(\n getW(wR, wC, "+l+", d2),\n getW(wR, wC, "+l+" + 1, d2),\n getW(wR, wC, "+l+" + 2, d2)\n );\n\n if ("+d+") {\n vec3 xValues = vec3(\n getX(batch, xR, xC, "+l+"),\n getX(batch, xR, xC, "+l+" + 1),\n getX(batch, xR, xC, "+l+" + 2)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec3 xValues = vec3(\n getX(batch, "+l+", xR, xC),\n getX(batch, "+l+" + 1, xR, xC),\n getX(batch, "+l+" + 2, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n }\n }\n }\n\n float result = dotProd;\n "+z+"\n "+b+"\n setOutput(result);\n }\n "},Xa=function(n){this.variableNames=["x","W"],this.outputShape=n.outShape;var x=n.padInfo.front,t=n.padInfo.top,e=n.padInfo.left,i=n.strideDepth,r=n.strideHeight,o=n.strideWidth,s=n.dilationDepth,h=n.dilationHeight,u=n.dilationWidth,a=n.filterDepth,g=n.filterHeight,l=n.filterWidth,c=4*Math.floor(n.inChannels/4),d=n.inChannels%4;this.userCode="\n const ivec3 strides = ivec3("+i+", "+r+", "+o+");\n const ivec3 pads = ivec3("+x+", "+t+", "+e+");\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 < "+a+"; wF++) {\n int xF = xFCorner + wF * "+s+";\n\n if (xF < 0 || xF >= "+n.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+g+"; wR++) {\n int xR = xRCorner + wR * "+h+";\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+l+"; wC++) {\n int xC = xCCorner + wC * "+u+";\n\n if (xC < 0 || xC >= "+n.inWidth+") {\n continue;\n }\n\n for (int d1 = 0; d1 < "+c+"; 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===d)+") {\n dotProd +=\n getX(batch, xF, xR, xC, "+c+") *\n getW(wF, wR, wC, "+c+", d2);\n } else if ("+(2===d)+") {\n vec2 xValues = vec2(\n getX(batch, xF, xR, xC, "+c+"),\n getX(batch, xF, xR, xC, "+c+" + 1)\n );\n vec2 wValues = vec2(\n getW(wF, wR, wC, "+c+", d2),\n getW(wF, wR, wC, "+c+" + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if ("+(3===d)+") {\n vec3 xValues = vec3(\n getX(batch, xF, xR, xC, "+c+"),\n getX(batch, xF, xR, xC, "+c+" + 1),\n getX(batch, xF, xR, xC, "+c+" + 2)\n );\n vec3 wValues = vec3(\n getW(wF, wR, wC, "+c+", d2),\n getW(wF, wR, wC, "+c+" + 1, d2),\n getW(wF, wR, wC, "+c+" + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n "},Za=function(n,x,t,e){void 0===x&&(x=!1),void 0===t&&(t=null),void 0===e&&(e=!1),this.variableNames=["x","W"],this.outputShape=n.outShape;var i=n.inHeight,r=n.inWidth,o=n.padInfo.top,s=n.padInfo.left,h=n.strideHeight,u=n.strideWidth,a=n.dilationHeight,g=n.dilationWidth,l=n.filterHeight,c=n.filterWidth,d=n.outChannels/n.inChannels,f="",p="";t&&(f=e?"float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n "+t+"\n }":"\n float activation(float x) {\n "+t+"\n }\n ",p="result = activation(result);");var y=x?"result += getBiasAtOutCoords();":"";x&&this.variableNames.push("bias"),e&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+f+"\n\n const ivec2 strides = ivec2("+h+", "+u+");\n const ivec2 pads = ivec2("+o+", "+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 / "+d+";\n int q = d2 - d1 * "+d+";\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 < "+l+"; wR++) {\n int xR = xRCorner + wR * "+a+";\n\n if (xR < 0 || xR >= "+i+") {\n continue;\n }\n\n for (int wC = 0; wC < "+c+"; wC++) {\n int xC = xCCorner + wC * "+g+";\n\n if (xC < 0 || xC >= "+r+") {\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 "+y+"\n "+p+"\n setOutput(result);\n }\n "},$a=function(n,x,t,e){void 0===x&&(x=!1),void 0===t&&(t=null),void 0===e&&(e=!1),this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n.outShape;for(var i=n.inHeight,r=n.inWidth,o=n.padInfo.top,s=n.padInfo.left,h=n.strideHeight,u=n.strideWidth,a=n.dilationHeight,g=n.dilationWidth,l=n.filterHeight,c=n.filterWidth,d=c,f="int xR; int xC; int xCOffset;",p=0;p<l;p++)for(var y=0;y<c;y++)f+="\n vec4 xTexelR"+p+"C"+2*y+" = vec4(0.);\n vec4 wR"+p+"C"+y+" = vec4(0.);\n vec4 xR"+p+"C"+y+" = vec4(0.);";for(p=0;p<l;p++)for(var m=0;m<d;m++){if(f+="\n xR = xRCorner + "+p*a+";\n xC = xCCorner + "+(y=2*m)*g+";\n ",1===u){if(y<c&&(f+=s%2==1?"\n xCOffset = xC + 1;\n if(xR >= 0 && xR < "+i+" && xCOffset >= 0 && xCOffset < "+r+") {\n xTexelR"+p+"C"+y+" = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if(xCOffset + 1 >= "+r+") {\n xTexelR"+p+"C"+y+".zw = vec2(0.);\n }\n } else {\n xTexelR"+p+"C"+y+" = vec4(0.);\n }\n\n xCOffset = xC + 1 - 2;\n if(xR >= 0 && xR < "+i+" && xCOffset >= 0 && xCOffset < "+r+") {\n vec4 previous = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if(xCOffset + 1 >= "+r+") {\n previous.zw = vec2(0.);\n }\n\n xR"+p+"C"+y+" = vec4(previous.zw, xTexelR"+p+"C"+y+".xy);\n } else {\n xR"+p+"C"+y+" = vec4(0, 0, xTexelR"+p+"C"+y+".xy);\n }\n ":"\n if(xR >= 0 && xR < "+i+" && xC >= 0 && xC < "+r+") {\n xTexelR"+p+"C"+y+" = getX(batch, xR, xC, d1);\n } else {\n xTexelR"+p+"C"+y+" = vec4(0.);\n }\n\n xR"+p+"C"+y+" = xTexelR"+p+"C"+y+";\n ",y+1<c)){var b=s%2==0?Ki(g):g;g%2==0&&s%2==1||g%2!=0&&s%2!=1?(f+="\n xCOffset = xC + "+s%2+" + "+b+";\n\n if(xR >= 0 && xR < "+i+" &&\n xCOffset >= 0 && xCOffset < "+r+") {\n xTexelR"+p+"C"+(y+2)+" = getX(batch, xR, xCOffset, d1);\n }\n ",g>1&&(f+="\n xCOffset -= 2;\n if(xR >= 0 && xR < "+i+" &&\n xCOffset >= 0 && xCOffset < "+r+") {\n xTexelR"+p+"C"+y+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+p+"C"+y+" = vec4(0.);\n }\n "),f+="\n xR"+p+"C"+(y+1)+" = vec4(\n xTexelR"+p+"C"+y+".zw, xTexelR"+p+"C"+(y+2)+".xy);\n "):f+="\n xCOffset = xC + "+b+";\n\n if(xR >= 0 && xR < "+i+" &&\n xCOffset >= 0 && xCOffset < "+r+") {\n xTexelR"+p+"C"+(y+2)+" = getX(batch, xR, xCOffset, d1);\n }\n\n xR"+p+"C"+(y+1)+" = xTexelR"+p+"C"+(y+2)+";\n "}}else y<c&&(f+="\n if(xR >= 0 && xR < "+i+") {\n ",s%2==1?(f+="\n xCOffset = xC + 1 - "+u+";\n if(xCOffset >= 0 && xCOffset < "+r+") {\n xTexelR"+p+"C"+y+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+p+"C"+y+" = vec4(0.);\n }\n\n if(xC + 1 >= 0 && xC + 1 < "+r+") {\n xTexelR"+p+"C"+(y+2)+" = getX(batch, xR, xC + 1, d1);\n } else {\n xTexelR"+p+"C"+(y+2)+" = vec4(0.);\n }\n\n xR"+p+"C"+y+" = vec4(\n xTexelR"+p+"C"+y+".zw, xTexelR"+p+"C"+(y+2)+".zw);\n ",y+1<c&&(f+="\n vec4 final = vec4(0.);\n xCOffset = xC + 1 + "+u+";\n if(xCOffset >= 0 && xCOffset < "+r+") {\n final = getX(batch, xR, xCOffset, d1);\n }\n xR"+p+"C"+(y+1)+" = vec4(xTexelR"+p+"C"+(y+2)+".xy, final.xy);\n ")):(f+="\n if(xC >= 0 && xC < "+r+") {\n xTexelR"+p+"C"+y+" = getX(batch, xR, xC, d1);\n } else {\n xTexelR"+p+"C"+y+" = vec4(0.);\n }\n\n xCOffset = xC + "+u+";\n if(xCOffset >= 0 && xCOffset < "+r+") {\n xTexelR"+p+"C"+(y+2)+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+p+"C"+(y+2)+" = vec4(0.);\n }\n\n xR"+p+"C"+y+" = vec4(\n xTexelR"+p+"C"+y+".xy, xTexelR"+p+"C"+(y+2)+".xy);\n ",y+1<c&&(f+="\n xR"+p+"C"+(y+1)+" = vec4(\n xTexelR"+p+"C"+y+".zw, xTexelR"+p+"C"+(y+2)+".zw);\n ")),f+="}");y<c&&(f+="\n vec4 wTexelR"+p+"C"+y+" = getW("+p+", "+y+", d1, q);\n wR"+p+"C"+y+" = vec4(wTexelR"+p+"C"+y+".xz, wTexelR"+p+"C"+y+".xz);\n ",y+1<c&&(f+="\n vec4 wTexelR"+p+"C"+(y+1)+" = getW("+p+", "+(y+1)+", d1, q);\n wR"+p+"C"+(y+1)+" =\n vec4(wTexelR"+p+"C"+(y+1)+".xz, wTexelR"+p+"C"+(y+1)+".xz);"))}for(p=0;p<l;p++)for(y=0;y<c;y++)f+="dotProd += xR"+p+"C"+y+" * wR"+p+"C"+y+";";var z="",v="";t&&(z=e?"vec4 activation(vec4 a) {\n vec4 b = getPreluActivationWeightsAtOutCoords();\n "+t+"\n }":"vec4 activation(vec4 x) {\n "+t+"\n }",v="result = activation(result);");var j=x?"result += getBiasAtOutCoords();":"";x&&this.variableNames.push("bias"),e&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+z+"\n\n const ivec2 strides = ivec2("+h+", "+u+");\n const ivec2 pads = ivec2("+o+", "+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 "+f+"\n\n vec4 result = dotProd;\n "+j+"\n "+v+"\n setOutput(result);\n }\n "},ng=function(n,x,t,e,i){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];var r=n[0],o=n[1],s=n[2],h=n[3],u=x[0],a=t[0],g=t[1];this.outputShape=[u,a,g,h];var l="bilinear"===e?1:0,c=[o-1+".0",s-1+".0"],d=c[0],f=c[1],p=a>1?[""+(o-1)/(a-1),"(y2-y1) * height_ratio","y1*"+d+" + float(y)*(height_scale)"]:["0.0","0.0","0.5 * (y1+y2) * "+d],y=p[0],m=p[1],b=p[2],z=g>1?[""+(s-1)/(g-1),"(x2-x1) * width_ratio","x1*"+f+" + float(x)*(width_scale)"]:["0.0","0.0","0.5 * (x1+x2) * "+f],v=z[0],j=z[1],w=z[2];this.userCode="\n const float height_ratio = float("+y+");\n const float width_ratio = float("+v+");\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 >= "+r+") {\n return;\n }\n\n float height_scale = "+m+";\n float width_scale = "+j+";\n\n float in_y = "+b+";\n if( in_y < 0.0 || in_y > "+d+" ) {\n setOutput(float("+i+"));\n return;\n }\n float in_x = "+w+";\n if( in_x < 0.0 || in_x > "+f+" ) {\n setOutput(float("+i+"));\n return;\n }\n\n vec2 sourceFracIndexCR = vec2(in_x,in_y);\n if("+l+" == 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 "},xg=function(n,x,t){this.variableNames=["x"],this.outputShape=n;var e=n.length,i=n[n.length-1],r=t?"<":">";this.userCode="\n int getIndex(int i) {\n "+(t?"return "+i+" -i - 1;":"return i;")+"\n }\n\n void main() {\n "+za(e)+" coords = getOutputCoords();\n int end = "+tg(e,"coords")+";\n float val = 0.0;\n for (int i = "+i+" - 1; i >= 0; i -= 1) {\n int idx = getIndex(i);\n if (idx "+r+" end) {\n continue;\n }\n if (idx == end && "+x+") {\n continue;\n }\n "+tg(e,"coords")+" = idx;\n val += getX("+function(n,x){if(1===n)return""+x;if(2===n)return x+".x, "+x+".y";if(3===n)return x+".x, "+x+".y, "+x+".z";if(4===n)return x+".x, "+x+".y, "+x+".z, "+x+".w";throw Error("Cumulative sum for rank "+n+" is not yet supported")}(e,"coords")+");\n }\n setOutput(val);\n }\n "};function tg(n,x){if(1===n)return""+x;if(2===n)return x+".y";if(3===n)return x+".z";if(4===n)return x+".w";throw Error("Cumulative sum for rank "+n+" is not yet supported")}var eg=function(n){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=co.DENSE;var x=jo(n),t=sa();this.outputShape=n,this.userCode="\n ivec3 outCoordsFromFlatIndex(int index) {\n "+ha(["r","c","d"],n)+"\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+x[0]+", "+x[1]+"));\n int index = 4 * (resTexRC.x * "+x[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 "+t.output+" = result;\n }\n "},ig=function(n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=co.DENSE;var x=jo(n),t=sa();this.outputShape=n,this.userCode="\n ivec3 outCoordsFromFlatIndex(int index) {\n "+ha(["r","c","d"],n)+"\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+x[0]+", "+x[1]+"));\n int index = 4 * (resTexRC.x * "+x[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 "+t.output+" = result;\n }\n "},rg=function(){function n(n,x,t){this.variableNames=["x"],this.outputShape=[],this.outputShape=n,this.blockSize=x,this.dataFormat=t,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 / "+x+";\n int offset_h = imod(h, "+x+");\n int in_w = w / "+x+";\n int offset_w = imod(w, "+x+");\n int offset_d = (offset_h * "+x+" + offset_w) *\n "+this.getOutputDepthSize()+";\n int in_d = d + offset_d;\n\n float result = "+this.getInputSamplingString()+";\n setOutput(result);\n }\n "}return n.prototype.getHeightCoordString=function(){return"NHWC"===this.dataFormat?"coords[1]":"coords[2]"},n.prototype.getWidthCoordString=function(){return"NHWC"===this.dataFormat?"coords[2]":"coords[3]"},n.prototype.getDepthCoordString=function(){return"NHWC"===this.dataFormat?"coords[3]":"coords[1]"},n.prototype.getOutputDepthSize=function(){return"NHWC"===this.dataFormat?this.outputShape[3]:this.outputShape[1]},n.prototype.getInputSamplingString=function(){return"NHWC"===this.dataFormat?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"},n}(),og=function(n){this.variableNames=["X"],this.outputShape=[n,n],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 "},sg=function(n){this.variableNames=["A"],this.outTexUsage=fo.DOWNLOAD;var x=sa();this.outputShape=n,this.userCode="\n "+aa+"\n\n void main() {\n float x = getAAtOutCoords();\n "+x.output+" = encode_float(x);\n }\n "},hg=function(n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=fo.DOWNLOAD;var x=sa();this.outputShape=n,this.userCode="\n "+aa+"\n\n void main() {\n ivec3 coords = getOutputCoords();\n float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\n "+x.output+" = encode_float(x);\n }\n "},ug=function(n,x,t){void 0===t&&(t=!1),this.variableNames=["A"];var e=sa(),i=x[0],r=x[1];this.outputShape=n;var o="result";t&&(o="floor(result * 255. + 0.5)"),this.userCode="\n "+ua(n)+"\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 / "+r+";\n int c = imod(flatIndex, "+r+");\n vec2 uv = (vec2(c, r) + halfCR) / vec2("+r+".0, "+i+".0);\n vec4 values = "+e.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 "+e.output+" = vec4("+o+", 0., 0., 0.);\n }\n "},ag=function(n,x,t){void 0===t&&(t=!1),this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;var e=sa(),i=x[0],r=x[1];this.outputShape=n;var o="",s="result";t&&(s="floor(result * 255. + 0.5)");for(var h=0;h<=1;h++)for(var u=0;u<=1;u++){var a=2*h+u;o+="\n localCoords = coords;\n if(localCoords[2] + "+u+" < "+n[2]+") {\n localCoords[2] += "+u+";\n if(localCoords[1] + "+h+" < "+n[1]+") {\n localCoords[1] += "+h+";\n\n flatIndex = getFlatIndex(localCoords);\n offset = imod(flatIndex, 4);\n\n flatIndex = idiv(flatIndex, 4, 1.);\n\n r = flatIndex / "+r+";\n c = imod(flatIndex, "+r+");\n uv = (vec2(c, r) + halfCR) / vec2("+r+".0, "+i+".0);\n values = "+e.texture2D+"(A, uv);\n\n if(offset == 0) {\n result["+a+"] = values[0];\n } else if(offset == 1) {\n result["+a+"] = values[1];\n } else if(offset == 2) {\n result["+a+"] = values[2];\n } else {\n result["+a+"] = values[3];\n }\n }\n }\n "}this.userCode="\n "+ua(n)+"\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 "+o+"\n\n "+e.output+" = "+s+";\n }\n "},gg="return real * expR - imag * expI;",lg="return real * expI + imag * expR;",cg=function(n,x,t){this.variableNames=["real","imag"];var e=x[1];this.outputShape=x;var i=t?"2.0 * "+Math.PI:"-2.0 * "+Math.PI,r=t?e+".0":"1.0";this.userCode="\n const float exponentMultiplier = "+i+";\n\n float unaryOpComplex(float real, float expR, float imag, float expI) {\n "+n+"\n }\n\n float mulMatDFT(int batch, int index) {\n float indexRatio = float(index) / float("+e+");\n float exponentMultiplierTimesIndexRatio =\n exponentMultiplier * indexRatio;\n\n float result = 0.0;\n\n for (int i = 0; i < "+e+"; 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) / "+r+";\n }\n\n return result;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n setOutput(mulMatDFT(coords[0], coords[1]));\n }\n "},dg=function(){function n(n,x){this.outputShape=[],this.variableNames=["x"],this.outputShape=n,this.userCode="\n uniform float value;\n void main() {\n // Input can be obtained from uniform value.\n setOutput(value);\n }\n "}return n.prototype.getCustomSetupFunc=function(n){var x=this;return function(t,e){null==x.valueLoc&&(x.valueLoc=t.getUniformLocationNoThrow(e,"value")),t.gl.uniform1f(x.valueLoc,n)}},n}(),fg=function(n,x,t){this.variableNames=["A","indices"];var e=n.slice();e[t]=x,this.outputShape=e,this.rank=e.length;var i=za(this.rank),r=function(n,x){var t=n.length;if(t>4)throw Error("Gather for rank "+t+" is not yet supported");if(1===t)return"int(getIndices(resRC))";for(var e=["resRC.x","resRC.y","resRC.z","resRC.w"],i=[],r=0;r<n.length;r++)r===x?i.push("int(getIndices("+e[r]+"))"):i.push(""+e[r]);return i.join()}(n,t);this.userCode="\n void main() {\n "+i+" resRC = getOutputCoords();\n setOutput(getA("+r+"));\n }\n "},pg=function(n,x,t){this.sliceDim=n,this.strides=x,this.variableNames=["x","indices"],this.outputShape=t;var e=za(x.length),i=za(t.length),r=this.sliceDim>1?"strides[j]":"strides";this.userCode="\n "+e+" strides = "+e+"("+this.strides+");\n void main() {\n "+i+" 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 * "+r+";\n }\n setOutput(getX(flattenIndex, coords[1]));\n }\n "};function yg(n,x){var t=sa();return Do(n,x,t.version+"\n precision highp float;\n "+t.attribute+" vec3 clipSpacePos;\n "+t.attribute+" vec2 uv;\n "+t.varyingVs+" vec2 resultUV;\n\n void main() {\n gl_Position = vec4(clipSpacePos, 1);\n resultUV = uv;\n }")}function mg(n,x){return Fo(n,x,new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]))}function bg(n,x){return Po(n,x,new Uint16Array([0,1,2,2,1,3]))}function zg(n,x,t,e,i,r,o){Ho(t,e);var s=Lo(n,x),h=n.TEXTURE_2D;return qo(n,x,function(){return n.bindTexture(h,s)}),qo(n,x,function(){return n.texParameteri(h,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE)}),qo(n,x,function(){return n.texParameteri(h,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE)}),qo(n,x,function(){return n.texParameteri(h,n.TEXTURE_MIN_FILTER,n.NEAREST)}),qo(n,x,function(){return n.texParameteri(h,n.TEXTURE_MAG_FILTER,n.NEAREST)}),qo(n,x,function(){return n.texImage2D(h,0,i,t,e,0,r,o,null)}),qo(n,x,function(){return n.bindTexture(n.TEXTURE_2D,null)}),s}function vg(n,x,t,e,i){var r=vo(t,e);return zg(n,x,r[0],r[1],i.internalFormatFloat,i.textureFormatFloat,n.FLOAT)}function jg(n,x,t,e,i){var r=vo(t,e);return zg(n,x,r[0],r[1],i.internalFormatHalfFloat,i.textureFormatFloat,i.textureTypeHalfFloat)}function wg(n,x,t,e,i){var r=vo(t,e);return zg(n,x,r[0],r[1],n.RGBA,n.RGBA,n.UNSIGNED_BYTE)}function kg(n,x,t,e,i){var r=wo(t,e);return zg(n,x,r[0],r[1],i.internalFormatPackedFloat,n.RGBA,n.FLOAT)}function qg(n,x,t,e,i){var r=wo(t,e);return zg(n,x,r[0],r[1],i.internalFormatPackedHalfFloat,n.RGBA,i.textureTypeHalfFloat)}function Cg(n,x,t,e){return qo(n,x,function(){return n.bindBuffer(n.ARRAY_BUFFER,e)}),Vo(n,x,t,"clipSpacePos",e,3,20,0)&&Vo(n,x,t,"uv",e,2,20,12)}function Ag(n,x,t,e,i,r,o){var s,h,u;qo(n,x,function(){return n.bindTexture(n.TEXTURE_2D,t)}),r instanceof Uint8Array?(s=new Uint8Array(e*i*4),h=n.UNSIGNED_BYTE,u=n.RGBA):(s=new Float32Array(e*i*4),h=n.FLOAT,u=o.internalFormatPackedFloat),s.set(r),qo(n,x,function(){return n.texImage2D(n.TEXTURE_2D,0,u,e,i,0,n.RGBA,h,s)}),qo(n,x,function(){return n.bindTexture(n.TEXTURE_2D,null)})}function Eg(n,x,t,e){qo(n,x,function(){return n.bindTexture(n.TEXTURE_2D,t)}),e.data instanceof Uint8Array?qo(n,x,function(){return n.texImage2D(n.TEXTURE_2D,0,n.RGBA,e.width,e.height,0,n.RGBA,n.UNSIGNED_BYTE,e.data)}):qo(n,x,function(){return n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,e)}),qo(n,x,function(){return n.bindTexture(n.TEXTURE_2D,null)})}function Sg(n,x,t,e,i){var r=n.createBuffer();qo(n,x,function(){return n.bindBuffer(n.PIXEL_PACK_BUFFER,r)});var o=16*t*e;return qo(n,x,function(){return n.bufferData(n.PIXEL_PACK_BUFFER,o,n.STREAM_READ)}),qo(n,x,function(){return n.readPixels(0,0,e,t,n.RGBA,n.FLOAT,0)}),qo(n,x,function(){return n.bindBuffer(n.PIXEL_PACK_BUFFER,null)}),r}function Ig(n,x,t){var e=n,i=new Float32Array(t);return e.bindBuffer(e.PIXEL_PACK_BUFFER,x),e.getBufferSubData(e.PIXEL_PACK_BUFFER,0,i),e.bindBuffer(e.PIXEL_PACK_BUFFER,null),i}function Dg(n,x,t,e,i){var r=vo(t,e),o=r[0],s=r[1],h=new Uint8Array(t*e*4);return qo(n,x,function(){return n.readPixels(0,0,o,s,i.downloadTextureFormat,n.UNSIGNED_BYTE,h)}),new Float32Array(h.buffer)}function Og(n,x,t,e,i,r,o,s){var h=n,u=new Float32Array(function(n,x){var t=wo(n,x);return t[0]*t[1]*4}(r,o));return h.bindBuffer(h.PIXEL_PACK_BUFFER,x),h.getBufferSubData(h.PIXEL_PACK_BUFFER,0,u),h.bindBuffer(h.PIXEL_PACK_BUFFER,null),u}function _g(n,x,t,e){var i=new Float32Array(t*e*4);return qo(n,x,function(){return n.readPixels(0,0,e,t,n.RGBA,n.FLOAT,i)}),i}var Tg=Object.freeze({createVertexShader:yg,createVertexBuffer:mg,createIndexBuffer:bg,createFloat32MatrixTexture:vg,createFloat16MatrixTexture:jg,createUnsignedBytesMatrixTexture:wg,createPackedMatrixTexture:kg,createFloat16PackedMatrixTexture:qg,bindVertexProgramAttributeStreams:Cg,uploadDenseMatrixToTexture:Ag,uploadPixelDataToTexture:Eg,createBufferFromOutputTexture:Sg,downloadFloat32MatrixFromBuffer:Ig,downloadByteEncodedFloatMatrixFromOutputTexture:Dg,downloadPackedMatrixFromBuffer:Og,downloadMatrixFromPackedOutputTexture:_g}),Rg=function(){function n(n){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];var x=Bi().getNumber("WEBGL_VERSION");null!=n?(this.gl=n,bo(x,n)):this.gl=zo(x);var t="WEBGL_color_buffer_float";if(1===Bi().getNumber("WEBGL_VERSION")){if(this.textureFloatExtension=Io(this.gl,this.debug,"OES_texture_float"),as(this.gl,"OES_texture_half_float"))this.textureHalfFloatExtension=Io(this.gl,this.debug,"OES_texture_half_float");else if(Bi().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(t),as(this.gl,"EXT_color_buffer_half_float"))this.colorBufferHalfFloatExtension=Io(this.gl,this.debug,"EXT_color_buffer_half_float");else if(Bi().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(t="EXT_color_buffer_float",as(this.gl,t))this.colorBufferFloatExtension=this.gl.getExtension(t);else{if(!as(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=mg(this.gl,this.debug),this.indexBuffer=bg(this.gl,this.debug),this.framebuffer=Uo(this.gl,this.debug),this.textureConfig=ko(this.gl,this.textureHalfFloatExtension)}return Object.defineProperty(n.prototype,"debug",{get:function(){return Bi().getBool("DEBUG")},enumerable:!0,configurable:!0}),n.prototype.dispose=function(){var n=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 x=this.gl;qo(x,this.debug,function(){return x.finish()}),qo(x,this.debug,function(){return x.bindFramebuffer(x.FRAMEBUFFER,null)}),qo(x,this.debug,function(){return x.deleteFramebuffer(n.framebuffer)}),qo(x,this.debug,function(){return x.bindBuffer(x.ARRAY_BUFFER,null)}),qo(x,this.debug,function(){return x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,null)}),qo(x,this.debug,function(){return x.deleteBuffer(n.indexBuffer)}),this.disposed=!0}},n.prototype.createFloat32MatrixTexture=function(n,x){return this.throwIfDisposed(),vg(this.gl,this.debug,n,x,this.textureConfig)},n.prototype.createFloat16MatrixTexture=function(n,x){return this.throwIfDisposed(),jg(this.gl,this.debug,n,x,this.textureConfig)},n.prototype.createUnsignedBytesMatrixTexture=function(n,x){return this.throwIfDisposed(),wg(this.gl,this.debug,n,x,this.textureConfig)},n.prototype.uploadPixelDataToTexture=function(n,x){this.throwIfDisposed(),Eg(this.gl,this.debug,n,x)},n.prototype.uploadDenseMatrixToTexture=function(n,x,t,e){this.throwIfDisposed(),Ag(this.gl,this.debug,n,x,t,e,this.textureConfig)},n.prototype.createFloat16PackedMatrixTexture=function(n,x){return this.throwIfDisposed(),qg(this.gl,this.debug,n,x,this.textureConfig)},n.prototype.createPackedMatrixTexture=function(n,x){return this.throwIfDisposed(),kg(this.gl,this.debug,n,x,this.textureConfig)},n.prototype.deleteMatrixTexture=function(n){var x=this;this.throwIfDisposed(),this.outputTexture===n&&(Jo(this.gl,this.debug,this.framebuffer),this.outputTexture=null),qo(this.gl,this.debug,function(){return x.gl.deleteTexture(n)})},n.prototype.downloadByteEncodedFloatMatrixFromOutputTexture=function(n,x,t){var e=this;return this.downloadMatrixDriver(n,function(){return Dg(e.gl,e.debug,x,t,e.textureConfig)})},n.prototype.downloadPackedMatrixFromBuffer=function(n,x,t,e,i,r){return Og(this.gl,n,0,0,0,i,r,this.textureConfig)},n.prototype.downloadFloat32MatrixFromBuffer=function(n,x){return Ig(this.gl,n,x)},n.prototype.createBufferFromTexture=function(n,x,t){this.bindTextureToFrameBuffer(n);var e=Sg(this.gl,this.debug,x,t,this.textureConfig);return this.unbindTextureToFrameBuffer(),e},n.prototype.createAndWaitForFence=function(){var n=this.createFence(this.gl);return this.pollFence(n)},n.prototype.createFence=function(n){var x,t,e=this;if(Bi().getBool("WEBGL_FENCE_API_ENABLED")){var i=n,r=i.fenceSync(i.SYNC_GPU_COMMANDS_COMPLETE,0);n.flush(),t=function(){var n=i.clientWaitSync(r,0,0);return n===i.ALREADY_SIGNALED||n===i.CONDITION_SATISFIED},x=r}else Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(x=this.beginQuery(),this.endQuery(),t=function(){return e.isQueryAvailable(x,Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}):t=function(){return!0};return{query:x,isFencePassed:t}},n.prototype.downloadMatrixFromPackedTexture=function(n,x,t){var e=this;return this.downloadMatrixDriver(n,function(){return _g(e.gl,e.debug,x,t)})},n.prototype.createProgram=function(n){this.throwIfDisposed();var x=this.gl,t=Oo(x,this.debug,n),e=yg(x,this.debug),i=Bo(x,this.debug);return qo(x,this.debug,function(){return x.attachShader(i,e)}),qo(x,this.debug,function(){return x.attachShader(i,t)}),Mo(x,this.debug,i),this.debug&&No(x,this.debug,i),this.vertexAttrsAreBound||(this.setProgram(i),this.vertexAttrsAreBound=Cg(x,this.debug,this.program,this.vertexBuffer)),i},n.prototype.deleteProgram=function(n){var x=this;this.throwIfDisposed(),n===this.program&&(this.program=null),null!=n&&qo(this.gl,this.debug,function(){return x.gl.deleteProgram(n)})},n.prototype.setProgram=function(n){var x=this;this.throwIfDisposed(),this.program=n,null!=this.program&&this.debug&&No(this.gl,this.debug,this.program),qo(this.gl,this.debug,function(){return x.gl.useProgram(n)})},n.prototype.getUniformLocation=function(n,x,t){return void 0===t&&(t=!0),this.throwIfDisposed(),t?Qo(this.gl,this.debug,n,x):Go(this.gl,n,x)},n.prototype.getAttributeLocation=function(n,x){var t=this;return this.throwIfDisposed(),qo(this.gl,this.debug,function(){return t.gl.getAttribLocation(n,x)})},n.prototype.getUniformLocationNoThrow=function(n,x){return this.throwIfDisposed(),this.gl.getUniformLocation(n,x)},n.prototype.setInputMatrixTexture=function(n,x,t){this.throwIfDisposed(),this.throwIfNoProgram(),Ko(this.gl,this.debug,this.program,n,x,t)},n.prototype.setOutputMatrixTexture=function(n,x,t){this.setOutputMatrixTextureDriver(n,t,x)},n.prototype.setOutputPackedMatrixTexture=function(n,x,t){this.throwIfDisposed();var e=wo(x,t),i=e[0],r=e[1];this.setOutputMatrixTextureDriver(n,i,r)},n.prototype.setOutputMatrixWriteRegion=function(n,x,t,e){this.setOutputMatrixWriteRegionDriver(t,n,e,x)},n.prototype.setOutputPackedMatrixWriteRegion=function(n,x,t,e){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")},n.prototype.debugValidate=function(){null!=this.program&&No(this.gl,this.debug,this.program),Xo(this.gl)},n.prototype.executeProgram=function(){this.throwIfDisposed(),this.throwIfNoProgram();var n=this.gl;this.debug&&this.debugValidate(),qo(n,this.debug,function(){return n.drawElements(n.TRIANGLES,6,n.UNSIGNED_SHORT,0)})},n.prototype.blockUntilAllProgramsCompleted=function(){var n=this;this.throwIfDisposed(),qo(this.gl,this.debug,function(){return n.gl.finish()})},n.prototype.getQueryTimerExtension=function(){return null==this.disjointQueryTimerExtension&&(this.disjointQueryTimerExtension=Io(this.gl,this.debug,2===Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension},n.prototype.getQueryTimerExtensionWebGL2=function(){return this.getQueryTimerExtension()},n.prototype.getQueryTimerExtensionWebGL1=function(){return this.getQueryTimerExtension()},n.prototype.beginQuery=function(){if(2===Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){var n=this.gl,x=this.getQueryTimerExtensionWebGL2(),t=n.createQuery();return n.beginQuery(x.TIME_ELAPSED_EXT,t),t}var e=this.getQueryTimerExtensionWebGL1(),i=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,i),i},n.prototype.endQuery=function(){if(2!==Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){var n=this.getQueryTimerExtensionWebGL1();n.endQueryEXT(n.TIME_ELAPSED_EXT)}else{var x=this.gl,t=this.getQueryTimerExtensionWebGL2();x.endQuery(t.TIME_ELAPSED_EXT)}},n.prototype.waitForQueryAndGetTime=function(n){return Oi(this,void 0,void 0,function(){var x=this;return _i(this,function(t){switch(t.label){case 0:return[4,or(function(){return x.disposed||x.isQueryAvailable(n,Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))})];case 1:return t.sent(),[2,this.getQueryTime(n,Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))]}})})},n.prototype.getQueryTime=function(n,x){if(0===x)return null;if(2===x){var t=this.gl;return t.getQueryParameter(n,t.QUERY_RESULT)/1e6}var e=this.getQueryTimerExtensionWebGL1();return e.getQueryObjectEXT(n,e.QUERY_RESULT_EXT)/1e6},n.prototype.isQueryAvailable=function(n,x){if(0===x)return!0;if(2===x){var t=this.gl,e=this.getQueryTimerExtensionWebGL2(),i=t.getQueryParameter(n,t.QUERY_RESULT_AVAILABLE);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(e.GPU_DISJOINT_EXT)),i&&!this.disjoint}return i=(e=this.getQueryTimerExtensionWebGL1()).getQueryObjectEXT(n,e.QUERY_RESULT_AVAILABLE_EXT),null==this.disjoint&&(this.disjoint=this.gl.getParameter(e.GPU_DISJOINT_EXT)),i&&!this.disjoint},n.prototype.pollFence=function(n){var x=this;return new Promise(function(t){x.addItemToPoll(function(){return n.isFencePassed()},function(){return t()})})},n.prototype.pollItems=function(){for(var n=function(n){for(var x=0;x<n.length;++x)if(!n[x]())break;return x-1}(this.itemsToPoll.map(function(n){return n.isDoneFn})),x=0;x<=n;++x)(0,this.itemsToPoll[x].resolveFn)();this.itemsToPoll=this.itemsToPoll.slice(n+1)},n.prototype.addItemToPoll=function(n,x){var t=this;this.itemsToPoll.push({isDoneFn:n,resolveFn:x}),this.itemsToPoll.length>1||or(function(){return t.pollItems(),0===t.itemsToPoll.length})},n.prototype.bindTextureToFrameBuffer=function(n){this.throwIfDisposed(),Yo(this.gl,this.debug,n,this.framebuffer),this.debug&&Xo(this.gl)},n.prototype.unbindTextureToFrameBuffer=function(){null!=this.outputTexture?(Yo(this.gl,this.debug,this.outputTexture,this.framebuffer),this.debug&&Xo(this.gl)):Jo(this.gl,this.debug,this.framebuffer)},n.prototype.downloadMatrixDriver=function(n,x){this.bindTextureToFrameBuffer(n);var t=x();return this.unbindTextureToFrameBuffer(),t},n.prototype.setOutputMatrixTextureDriver=function(n,x,t){this.throwIfDisposed();var e=this.gl;Yo(e,this.debug,n,this.framebuffer),this.debug&&Xo(e),this.outputTexture=n,qo(e,this.debug,function(){return e.viewport(0,0,x,t)}),qo(e,this.debug,function(){return e.scissor(0,0,x,t)})},n.prototype.setOutputMatrixWriteRegionDriver=function(n,x,t,e){var i=this;this.throwIfDisposed(),qo(this.gl,this.debug,function(){return i.gl.scissor(n,x,t,e)})},n.prototype.throwIfDisposed=function(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")},n.prototype.throwIfNoProgram=function(){if(null==this.program)throw new Error("No GPU program is currently set.")},n}();function Bg(n,x){if(n.length!==x.length)throw Error("Binary was compiled with "+n.length+" inputs, but was executed with "+x.length+" inputs");n.forEach(function(n,t){var e=n.logicalShape,i=x[t],r=i.shape;if(!xr(e,r))throw Error("Binary was compiled with different shapes than the current args. Shapes "+e+" and "+r+" must match");if(!n.isUniform||!i.isUniform){var o=n.texShape,s=i.isUniform?null:i.texData.texShape;if(!xr(o,s))throw Error("Binary was compiled with different texture shapes than the current args. Shape "+o+" and "+s+" must match")}})}var Mg=function(n,x,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n;for(var e=t.filterWidth,i=t.inChannels,r=t.strideWidth,o=t.strideHeight,s=t.padInfo,h=t.outWidth,u=t.dilationWidth,a=t.dilationHeight,g=t.dataFormat,l=s.left,c=s.top,d=i*e,f=sa(),p="channelsLast"===g,y=p?0:1,m=p?1:2,b="",z=0;z<=1;z++)for(var v=0;v<=1;v++)b+="\n blockIndex = rc.y + "+v+";\n pos = rc.x + "+z+";\n\n if(blockIndex < "+n[1]+" && pos < "+n[0]+") {\n offsetY = int(blockIndex / ("+h+")) * "+o+" - "+c+";\n d0 = offsetY + "+a+" * (pos / "+d+");\n\n if(d0 < "+x[y]+" && d0 >= 0) {\n\n offsetX = int(mod(float(blockIndex), "+h+".) * "+r+". - "+l+".);\n d1 = offsetX + "+u+" * (int(mod(float(pos), "+d+".) / "+i+".));\n\n if(d1 < "+x[m]+" && d1 >= 0) {\n\n ch = int(mod(float(pos), "+i+".));\n\n if ("+p+") {\n innerDims = vec2(d1, ch);\n result["+(2*z+v)+"] = getChannel(\n getA(d0, int(innerDims.x),\n int(innerDims.y)), innerDims);\n } else {\n innerDims = vec2(d0, d1);\n result["+(2*z+v)+"] = 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 "+b+"\n\n "+f.output+" = result;\n }\n "},Ng=function(n,x,t,e,i){this.variableNames=["x"],this.outputShape=[];var r,o=x,s=n[3]-1;this.outputShape=n;var h="float("+t+") + float("+e+") * sum";r=.5===i?"inversesqrt("+h+")":1===i?"1.0/("+h+")":"exp(log("+h+") * float(-"+i+"));",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 = -"+o+"; j <= "+o+"; 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 * "+r+";\n setOutput(val);\n }\n "},Fg=function(n,x,t,e,i){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=n,this.depth=n[3],this.depthRadius=x,this.bias=t,this.alpha=e,this.beta=i,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 - "+x+")));\n int depthEnd = int(min(float("+this.depth+"),\n float(d + "+x+" + 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("+e+") * norm + float("+t+");\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("+e+")\n * float("+i+")\n * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)\n / norm;\n if (k == d) {\n dyi += pow(norm, -1.0 * "+i+");\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 "},Pg=function(n,x,t,e,i){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;var r,o=x,s=n[3]-1;this.outputShape=n;var h="float("+t+") + float("+e+") * sum";r=.5===i?"inversesqrt("+h+")":1===i?"1.0/("+h+")":"exp(log("+h+") * float(-"+i+"));",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 - "+o+";\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 = - "+o+"; j <= "+o+"; 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 * "+r+";\n setOutput(result);\n }\n "},Lg=function(n){this.variableNames=["dy","maxPos"],this.outputShape=n.inShape;var x=n.strideHeight,t=n.strideWidth,e=n.dilationHeight,i=n.effectiveFilterHeight,r=n.effectiveFilterWidth,o=i-1-n.padInfo.top,s=r-1-n.padInfo.left,h=i*r-1;this.userCode="\n const ivec2 pads = ivec2("+o+", "+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 < "+i+";\n wR += "+e+") {\n float dyR = float(dyRCorner + wR) / "+x+".0;\n\n if (dyR < 0.0 || dyR >= "+n.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+r+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+t+".0;\n\n if (dyC < 0.0 || dyC >= "+n.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 = "+h+" - 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 * "+r+" + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n setOutput(dotProd);\n }\n "},Hg=function(n){this.variableNames=["dy","maxPos"],this.outputShape=n.inShape;var x=n.strideDepth,t=n.strideHeight,e=n.strideWidth,i=n.dilationDepth,r=n.dilationHeight,o=n.dilationWidth,s=n.effectiveFilterDepth,h=n.effectiveFilterHeight,u=n.effectiveFilterWidth,a=s-1-n.padInfo.front,g=h-1-n.padInfo.top,l=u-1-n.padInfo.left,c=s*h*u-1;this.userCode="\n const ivec3 pads = ivec3("+a+", "+g+", "+l+");\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 += "+i+") {\n float dyD = float(dyDCorner + wD) / "+x+".0;\n\n if (dyD < 0.0 || dyD >= "+n.outDepth+".0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < "+h+";\n wR += "+r+") {\n float dyR = float(dyRCorner + wR) / "+t+".0;\n\n if (dyR < 0.0 || dyR >= "+n.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+u+";\n wC += "+o+") {\n float dyC = float(dyCCorner + wC) / "+e+".0;\n\n if (dyC < 0.0 || dyC >= "+n.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 = "+c+" -\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 * "+h+" * "+u+" +\n wR * "+u+" + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n }\n setOutput(dotProd);\n }\n "},Ug=function(n,x,t,e,i,r,o){void 0===t&&(t=!1),void 0===e&&(e=!1),void 0===i&&(i=!1),void 0===r&&(r=null),void 0===o&&(o=!1),this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=x;var s=t?n[1]:n[2],h=Math.ceil(s/2),u=t?"i * 2, rc.y":"rc.y, i * 2",a=e?"rc.z, i * 2":"i * 2, rc.z",g=t?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],l=e?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],c="",d="";r&&(c=o?"vec4 activation(vec4 a) {\n vec4 b = getPreluActivationWeightsAtOutCoords();\n "+r+"\n }":"vec4 activation(vec4 x) {\n "+r+"\n }",d="result = activation(result);");var f=i?"result += getBiasAtOutCoords();":"";i&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+c+"\n\n const float sharedDimension = "+h+".0;\n\n vec4 dot2x2ARowBCol(ivec3 rc) {\n vec4 result = vec4(0);\n for (int i = 0; i < "+h+"; i++) {\n vec4 a = getMatrixA(rc.x, "+u+");\n vec4 b = getMatrixB(rc.x, "+a+");\n\n // These swizzled products need to be separately added.\n // See: https://github.com/tensorflow/tfjs/issues/1735\n result += ("+g[0]+" * "+l[0]+");\n result += ("+g[1]+" * "+l[1]+");\n }\n return result;\n }\n\n void main() {\n ivec3 rc = getOutputCoords();\n vec4 result = dot2x2ARowBCol(rc);\n\n "+f+"\n\n "+d+"\n\n setOutput(result);\n }\n "},Vg=function(){function n(n,x,t){this.variableNames=["probs"],this.outputShape=[n,t],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 < "+(x-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("+(x-1)+"));\n }\n "}return n.prototype.getCustomSetupFunc=function(n){var x=this;return function(t,e){null==x.seedLoc&&(x.seedLoc=t.getUniformLocation(e,"seed")),t.gl.uniform1f(x.seedLoc,n)}},n}(),Wg=function(n,x,t,e){this.variableNames=["indices"],this.outputShape=[n,x],this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int index = round(getIndices(coords.x));\n setOutput(mix(float("+e+"), float("+t+"),\n float(index == coords.y)));\n }\n "},Qg=function(n){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=n;var x=n.length;if(0===x)this.userCode="\n void main() {\n setOutput(vec4(getA(), 0., 0., 0.));\n }\n ";else{var t=oa("rc",x),e=za(x),i=function(n,x,t){if(1===n)return"rc > "+x[0];for(var e="",i=n-2;i<n;i++)e+=t[i]+" >= "+x[i],i<n-1&&(e+="||");return e}(x,n,t),r=function(n,x,t,e){if(1===n)return"";var i=e.slice(-2);return"\n int r = "+i[0]+";\n int c = "+i[1]+";\n int rp1 = r + 1;\n int cp1 = c + 1;\n\n bool cEdge = cp1 >= "+x+";\n bool rEdge = rp1 >= "+t+";\n "}(x,n[n.length-1],n[n.length-2],t),o=function(n,x){var t=n.length,e=function(n,x){for(var t=[],e=0;e<=1;e++)for(var i=0;i<=1;i++){for(var r=(0===e?"r":"rp1")+", "+(0===i?"c":"cp1"),o=2;o<n;o++)r=x[x.length-1-o]+","+r;t.push(r)}return t}(t,x);return 1===t?"getA(rc),\n rc + 1 >= "+n[0]+" ? 0. : getA(rc + 1),\n 0, 0":"getA("+e[0]+"),\n cEdge ? 0. : getA("+e[1]+"),\n rEdge ? 0. : getA("+e[2]+"),\n rEdge || cEdge ? 0. : getA("+e[3]+")"}(n,t);this.userCode="\n void main() {\n "+e+" rc = getOutputCoords();\n\n if("+i+") {\n setOutput(vec4(0));\n } else {\n "+r+"\n\n setOutput(vec4("+o+"));\n }\n }\n "}},Gg=function(n,x,t){this.variableNames=["x"],this.outputShape=x.map(function(x,t){return x[0]+n[t]+x[1]});var e=n.length,i=za(e),r=x.map(function(n){return n[0]}).join(","),o=x.map(function(x,t){return x[0]+n[t]}).join(","),s=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e);this.userCode=1!==e?"\n "+i+" start = "+i+"("+r+");\n "+i+" end = "+i+"("+o+");\n\n void main() {\n "+i+" outC = getOutputCoords();\n if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\n setOutput(float("+t+"));\n } else {\n "+i+" coords = outC - start;\n setOutput(getX("+s+"));\n }\n }\n ":"\n int start = "+r+";\n int end = "+o+";\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start || outC >= end) {\n setOutput(float("+t+"));\n } else {\n setOutput(getX(outC - start));\n }\n }\n "},Kg=function(n,x,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=x.map(function(x,t){return x[0]+n[t]+x[1]});for(var e=n.length,i=za(e),r=x.map(function(n){return n[0]}).join(","),o=x.map(function(x,t){return x[0]+n[t]}).join(","),s=oa("rc",e),h=oa("source",e),u=s[e-1]+" < "+this.outputShape[e-1],a=1===e?"source":"vec2("+h.slice(-2).join()+")",g=[i+" rc = outputLoc;",s[e-1]+" += 1;\n if("+u+") {\n ",1===e?"":"}\n rc = outputLoc;\n "+s[e-2]+" += 1;\n if("+s[e-2]+" < "+this.outputShape[e-2]+") {",1===e?"":" "+s[e-1]+" += 1;\n if("+u+") {"],l=1===e?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",c="",d=0,f=1===e?2:4;d<f;d++)c+="\n "+g[d]+"\n if ("+l+") {\n result["+d+"] = float("+t+");\n } else {\n "+i+" source = rc - start;\n result["+d+"] = getChannel(getX("+h.join()+"), "+a+");\n }\n ";c+=1===e?"} ":"}}",this.userCode="\n const "+i+" start = "+i+"("+r+");\n const "+i+" end = "+i+"("+o+");\n\n void main() {\n "+i+" outputLoc = getOutputCoords();\n vec4 result = vec4(0.);\n "+c+"\n setOutput(result);\n }\n "},Yg=function(n,x,t){if(this.variableNames=["x"],"avg"===x&&t)throw new Error("Cannot compute positions for average pool.");var e=n.filterWidth,i=n.strideHeight,r=n.strideWidth,o=n.dilationHeight,s=n.dilationWidth,h=n.effectiveFilterHeight,u=n.effectiveFilterWidth,a=n.padInfo.top,g=n.padInfo.left;this.outputShape=n.outShape;var l="avg"===x,c="0.0";if(l||(c="-1.0 / 1e-20"),t)this.userCode="\n const ivec2 strides = ivec2("+i+", "+r+");\n const ivec2 pads = ivec2("+a+", "+g+");\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 < "+h+";\n wR += "+o+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+u+";\n wC += "+s+") {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= "+n.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 * "+u+" + wC;\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n ";else{var d=x+"("+x+"("+x+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"avg"===x&&(d="avgValue / count");var f=4*Math.floor(e/4),p=e%4,y="\n if ("+l+") {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = max(values, minMaxValue);\n }\n ";this.userCode="\n const ivec2 strides = ivec2("+i+", "+r+");\n const ivec2 pads = ivec2("+a+", "+g+");\n const float initializationValue = "+c+";\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 >= "+n.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("+c+");\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wR = 0; wR < "+h+";\n wR += "+o+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+f+"; 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 "+y+"\n }\n\n int xC = xCCorner + "+f+";\n if ("+(1===p)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+y+"\n } else if ("+(2===p)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n initializationValue,\n initializationValue\n );\n\n "+y+"\n } else if ("+(3===p)+") {\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 "+y+"\n }\n }\n setOutput("+d+");\n }\n "}},Jg=function(n,x,t){if(this.variableNames=["x"],"avg"===x&&t)throw new Error("Cannot compute positions for average pool.");var e=n.filterWidth,i=n.strideDepth,r=n.strideHeight,o=n.strideWidth,s=n.dilationDepth,h=n.dilationHeight,u=n.dilationWidth,a=n.effectiveFilterDepth,g=n.effectiveFilterHeight,l=n.effectiveFilterWidth,c=n.padInfo.front,d=n.padInfo.top,f=n.padInfo.left;this.outputShape=n.outShape;var p="avg"===x,y="0.0";if(p||(y="-1.0 / 1e-20"),t)this.userCode="\n const ivec3 strides =\n ivec3("+i+", "+r+", "+o+");\n const ivec3 pads = ivec3("+c+", "+d+", "+f+");\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 < "+a+";\n wD += "+s+") {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= "+n.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+g+";\n wR += "+h+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+l+";\n wC += "+u+") {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= "+n.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 * "+g+" * "+l+" +\n wR * "+l+" + wC;;\n }\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n ";else{var m=x+"("+x+"("+x+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"avg"===x&&(m="avgValue / count");var b=4*Math.floor(e/4),z=e%4,v="\n if ("+p+") {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = max(values, minMaxValue);\n }\n ";this.userCode="\n const ivec3 strides =\n ivec3("+i+", "+r+", "+o+");\n const ivec3 pads = ivec3("+c+", "+d+", "+f+");\n const float initializationValue = "+y+";\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 >= "+n.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("+y+");\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wD = 0; wD < "+a+";\n wD += "+s+") {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= "+n.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+g+";\n wR += "+h+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+b+"; wC += 4) {\n int xC = xCCorner + wC * "+u+";\n\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+u+", ch),\n getValue(batch, xD, xR, xC + 2 * "+u+", ch),\n getValue(batch, xD, xR, xC + 3 * "+u+", ch)\n );\n\n "+v+"\n }\n\n int xC = xCCorner + "+b+";\n if ("+(1===z)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+v+"\n } else if ("+(2===z)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+u+", ch),\n initializationValue,\n initializationValue\n );\n\n "+v+"\n } else if ("+(3===z)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+u+", ch),\n getValue(batch, xD, xR, xC + 2 * "+u+", ch),\n initializationValue\n );\n\n "+v+"\n }\n }\n setOutput("+m+");\n }\n }\n "}},Xg=function(n,x){this.variableNames=["x"];var t=n.windowSize,e=n.batchSize,i=n.inSize,r=Math.ceil(i/t);this.outputShape=[e,r];var o="0.0",s="";"prod"===x?o="1.0":"min"===x?(o="1.0 / 1e-20",s="min"):"max"===x&&(o="-1.0 / 1e-20",s="max");var h=x+"("+x+"("+x+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"sum"===x?h="sumValue":"prod"===x?h="prodValue":"all"===x?h="allValue":"any"===x&&(h="anyValue");var u=4*Math.floor(t/4),a=t%4,g="\n if ("+("sum"===x)+") {\n sumValue += dot(values, ones);\n } else if ("+("prod"===x)+") {\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 ",l="vec4";"all"===x?(o="1.0",g="\n bool reducedAllValue = all(values);\n float floatedReducedAllValue = float(reducedAllValue);\n allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n ",l="bvec4"):"any"===x&&(o="0.0",g="\n bool reducedAnyValue = any(values);\n float floatedReducedAnyValue = float(reducedAnyValue);\n anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n ",l="bvec4");var c="";i%t>0&&(c="\n if (inIdx < 0 || inIdx >= "+i+") {\n return initializationValue;\n }\n "),this.userCode="\n const float initializationValue = "+o+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n "+c+"\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 * "+t+";\n\n vec4 minMaxValue = vec4("+o+");\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 < "+u+"; i += 4) {\n int inIdx = inOffset + i;\n "+l+" values = "+l+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n "+g+"\n }\n\n int inIdx = inOffset + "+u+";\n if ("+(1===a)+") {\n "+l+" values = "+l+"(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+g+"\n } else if ("+(2===a)+") {\n "+l+" values = "+l+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n "+g+"\n } else if ("+(3===a)+") {\n "+l+" values = "+l+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n "+g+"\n }\n setOutput("+h+");\n }\n "},Zg=function(n,x){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n;for(var t="",e=0;e<4;e++){var i="thisRC = rc;";e%2==1&&(i+="thisRC.z += 1;"),e>1&&(i+="thisRC.y += 1;"),t+="\n "+i+"\n "+(e>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["+e+"] =\n getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\n "+(e>0?"}":"")+"\n "}this.userCode="\n \n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n "+ha(["r","c","d"],x)+"\n return ivec3(r, c, d);\n }\n \n "+ua(n)+"\n\n void main() {\n ivec3 rc = getOutputCoords();\n\n vec4 result = vec4(0.);\n\n ivec3 thisRC;\n int rows = "+n[1]+";\n int cols = "+n[2]+";\n\n "+t+"\n\n setOutput(result);\n }\n "},$g=function(n,x,t){this.variableNames=["dy"],this.outputShape=[],this.outputShape=x.shape;var e=x.shape,i=e[1],r=e[2],o=n.shape,s=o[1],h=o[2],u=[t&&s>1?i-1:i,t&&h>1?r-1:r],a=[t&&s>1?s-1:s,t&&h>1?h-1:h],g=u[0]/a[0],l=u[1]/a[1],c=1/g,d=1/l,f=2*Math.ceil(c)+2,p=2*Math.ceil(d)+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("+g+");\n const float widthScale = float("+l+");\n\n const float invHeightScale = float("+c+");\n const float invWidthScale = float("+d+");\n\n const int winHeight = int("+f+");\n const int winWidth = int("+p+");\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 >= "+h+") {\n continue;\n }\n\n float dxR = float(dyR) * heightScale;\n int topDxRIndex = int(floor(dxR));\n int bottomDxRIndex = int(min(ceil(dxR), "+(i-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), "+(r-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 "},nl=function(n,x,t,e){this.variableNames=["A"],this.outputShape=[];var i=n[0],r=n[1],o=n[2],s=n[3];this.outputShape=[i,x,t,s];var h=[e&&x>1?r-1:r,e&&t>1?o-1:o],u=[e&&x>1?x-1:x,e&&t>1?t-1:t];this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+h[0]/u[0]+",\n "+h[1]/u[1]+");\n const vec2 inputShapeRC = vec2("+r+".0, "+o+".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 "},xl=function(n,x,t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];var i=n[0],r=n[1],o=n[2],s=n[3];this.outputShape=[i,x,t,s];var h=[e&&x>1?r-1:r,e&&t>1?o-1:o],u=[e&&x>1?x-1:x,e&&t>1?t-1:t];this.userCode="\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n "+h[0]/u[0]+",\n "+h[1]/u[1]+",\n "+h[1]/u[1]+");\n const vec3 inputShapeRC = vec3("+r+".0, "+o+".0,\n "+o+".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 < "+(t-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 "},tl=function(n,x,t){this.variableNames=["dy"],this.outputShape=[],this.outputShape=x.shape;var e=x.shape,i=e[1],r=e[2],o=n.shape,s=o[1],h=o[2],u=[t&&s>1?i-1:i,t&&h>1?r-1:r],a=[t&&s>1?s-1:s,t&&h>1?h-1:h],g=u[0]/a[0],l=u[1]/a[1],c=1/g,d=1/l,f=2*Math.ceil(c)+2,p=2*Math.ceil(d)+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("+g+");\n const float widthScale = float("+l+");\n\n const float invHeightScale = float("+c+");\n const float invWidthScale = float("+d+");\n\n const int winHeight = int("+f+");\n const int winWidth = int("+p+");\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 >= "+h+") {\n continue;\n }\n\n float sourceFracRow =\n float("+u[0]+") *\n (float(dyR) / float("+a[0]+"));\n\n float sourceFracCol =\n float("+u[1]+") *\n (float(dyC) / float("+a[1]+"));\n\n int sourceNearestRow = int(min(\n float(int("+i+") - 1),\n "+t+" ? float(round(sourceFracRow)) :\n float(floor(sourceFracRow))));\n\n int sourceNearestCol = int(min(\n float(int("+r+") - 1),\n "+t+" ? 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 "},el=function(n,x,t,e){this.variableNames=["A"],this.outputShape=[];var i=n[0],r=n[1],o=n[2],s=n[3];this.outputShape=[i,x,t,s];var h=[e&&x>1?r-1:r,e&&t>1?o-1:o],u=[e&&x>1?x-1:x,e&&t>1?t-1:t],a=e?"0.5":"0.0";this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+h[0]/u[0]+",\n "+h[1]/u[1]+");\n const vec2 inputShapeRC = vec2("+r+".0, "+o+".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 + "+a+")));\n\n float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutput(newValue);\n }\n "},il=function(n,x){this.variableNames=["x"];var t=n.length;if(t>4)throw new Error("WebGL backend: Reverse of rank-"+t+" tensor is not yet supported");if(this.outputShape=n,1!==t){var e=n.map(function(t,e){return function(t){return-1!==x.indexOf(t)&&1!==n[t]?n[t]+" - coords["+t+"] - 1":"coords["+t+"]"}(e)}).join(","),i=za(t);this.userCode="\n void main() {\n "+i+" coords = getOutputCoords();\n setOutput(getX("+e+"));\n }\n "}else this.userCode="\n void main() {\n int coord = getOutputCoords();\n setOutput(getX("+n[0]+" - coord - 1));\n }\n "},rl=function(n,x){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;var t=n.length;if(t>4)throw new Error("WebGL backend: Reverse of rank-"+t+" tensor is not yet supported");this.outputShape=n;var e=oa("rc",t),i=e[t-1]+" + 1 < "+this.outputShape[t-1],r=e[t-2]+" + 1 < "+this.outputShape[t-2],o=za(t);function s(t){var e=n.map(function(e,i){return function(t,e){return-1!==x.indexOf(t)&&1!==n[t]?n[t]+" - "+e[t]+" - 1":""+e[t]}(i,t)});return"getChannel(getX("+e.join(",")+"), vec2("+e.slice(-2).join(",")+"))"}this.userCode=1===t?"\n void main(){\n int rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = getChannel(getX("+n[0]+" - rc - 1),\n "+n[0]+" - rc - 1);\n if("+i+"){\n result.g = getChannel(getX("+n[0]+" - (rc + 1) - 1),\n "+n[0]+" - (rc + 1) - 1);\n }\n setOutput(result);\n }\n ":"\n void main() {\n "+o+" rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = "+function(n){return s(n)}(e.slice())+";\n if("+i+"){\n result.g = "+function(n){return n[t-1]="("+n[t-1]+" + 1)",s(n)}(e.slice())+";\n }\n if("+r+") {\n result.b = "+function(n){return n[t-2]="("+n[t-2]+" + 1)",s(n)}(e.slice())+";\n if("+i+") {\n result.a = "+function(n){return n[t-1]="("+n[t-1]+" + 1)",n[t-2]="("+n[t-2]+" + 1)",s(n)}(e.slice())+";\n }\n }\n setOutput(result);\n }\n "},ol=function(n,x,t,e,i,r,o){void 0===o&&(o=!0),this.variableNames=["updates","indices","defaultValue"],this.outputShape=r;var s=za(i.length),h=za(r.length),u="";1===t?u="i":2===t&&(u="i, j");var a="getIndices("+u+")",g="";1===e?g="i":2===e&&(g="i, coords[1]");var l="getUpdates("+g+")",c=x>1?"strides[j]":"strides";this.userCode="\n "+s+" strides = "+s+"("+i+");\n\n void main() {\n "+h+" coords = getOutputCoords();\n float sum = 0.0;\n bool found = false;\n for (int i = 0; i < "+n+"; i++) {\n int flattenedIndex = 0;\n for (int j = 0; j < "+x+"; j++) {\n int index = round("+a+");\n flattenedIndex += index * "+c+";\n }\n if (flattenedIndex == coords[0]) {\n sum += "+l+";\n found = true;\n }\n }\n setOutput(mix(getDefaultValue(), sum, float(found)));\n }\n "},sl=function(n,x){this.variableNames=["x","segmentIds"];var t=n.windowSize,e=n.batchSize,i=n.inSize,r=n.numSegments,o=r*Math.ceil(i/t);this.outputShape=[e,o];var s=4*Math.floor(t/4),h=t%4,u="\n sumValue += dot(values, segFilter);\n ",a="";i%t>0&&(a="\n if (inIdx < 0 || inIdx >= "+i+") {\n return initializationValue;\n }\n ");var g="";i%t>0&&(g="\n if (inIdx < 0 || inIdx >= "+i+") {\n return -1.0;\n }\n "),this.userCode="\n const float initializationValue = 0.0;\n\n float getValue(int batch, int inIdx) {\n "+a+"\n return getX(batch, inIdx);\n }\n\n float getSegmentIdAtIndex(int inIdx) {\n "+g+"\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 "+r+")) * float("+t+"));\n int currentSeg = int(mod(float(outIdx), float("+r+")));\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 "+u+"\n }\n\n int inIdx = inOffset + "+s+";\n if ("+(1===h)+") {\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 "+u+"\n } else if ("+(2===h)+") {\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 "+u+"\n } else if ("+(3===h)+") {\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 "+u+"\n }\n setOutput(sumValue);\n }\n "},hl=function(n,x,t){var e,i;if(this.variableNames=["c","a","b"],this.outputShape=x,t>4)throw Error("Where for rank "+t+" is not yet supported");if(1===t)i="resRC",e="resRC";else{for(var r=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[],s=[],h=0;h<x.length;h++)s.push(""+r[h]),h<n&&o.push(""+r[h]);e=o.join(),i=s.join()}var u=za(t);this.userCode="\n void main() {\n "+u+" resRC = getOutputCoords();\n float cVal = getC("+e+");\n if (cVal >= 1.0) {\n setOutput(getA("+i+"));\n } else {\n setOutput(getB("+i+"));\n }\n }\n "},ul=function(){function n(n){this.variableNames=["source"],this.outputShape=n,this.rank=n.length;var x,t=za(this.rank),e="uniform int start["+this.rank+"];",i=function(n){if(1===n)return"sourceLoc";if(n<=6)return al.slice(0,n).map(function(n){return"sourceLoc."+n}).join(",");throw Error("Slicing for rank "+n+" is not yet supported")}(this.rank);x="\n "+t+" sourceLoc;\n "+t+" coords = getOutputCoords();\n "+n.map(function(n,x){return"sourceLoc."+al[x]+" = start["+x+"] + coords."+al[x]+";"}).join("\n")+"\n ",this.userCode="\n "+e+"\n void main() {\n "+x+"\n setOutput(getSource("+i+"));\n }\n "}return n.prototype.getCustomSetupFunc=function(n){var x=this;if(n.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+n.length+")");return function(t,e){null==x.startLoc&&(x.startLoc=t.getUniformLocationNoThrow(e,"start"),null==x.startLoc)||t.gl.uniform1iv(x.startLoc,n)}},n}(),al=["x","y","z","w","u","v"],gl=function(){function n(n){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n,this.rank=n.length;var x=za(this.rank),t=oa("coords",this.rank),e=oa("sourceLoc",this.rank),i=1===this.rank?"sourceLoc":"vec2("+e.slice(-2).join()+")",r="getChannel(getSource("+e.join()+"), "+i+")",o="\n result.x = "+r+";\n if (++"+t[this.rank-1]+" < "+n[this.rank-1]+") {\n ++"+e[this.rank-1]+";\n result.y = "+r+";\n --"+e[this.rank-1]+";\n }\n ",s=1===this.rank?"":"\n --"+t[this.rank-1]+";\n if (++"+t[this.rank-2]+" < "+n[this.rank-2]+") {\n ++"+e[this.rank-2]+";\n result.z = "+r+";\n if (++"+t[this.rank-1]+" < "+n[this.rank-1]+") {\n ++"+e[this.rank-1]+";\n result.w = "+r+";\n }\n }\n ",h=this.rank<=4?"sourceLoc = coords +\n "+x+"("+n.map(function(n,x){return"start["+x+"]"}).join()+");":n.map(function(n,x){return e[x]+" = "+t[x]+" + start["+x+"];"}).join("\n");this.userCode="\n uniform int start["+this.rank+"];\n void main() {\n "+x+" coords = getOutputCoords();\n "+x+" sourceLoc;\n "+h+"\n vec4 result = vec4(0.);\n "+o+"\n "+s+"\n setOutput(result);\n }\n "}return n.prototype.getCustomSetupFunc=function(n){var x=this;if(n.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+n.length+")");return function(t,e){null==x.startLoc&&(x.startLoc=t.getUniformLocationNoThrow(e,"start"),null==x.startLoc)||t.gl.uniform1iv(x.startLoc,n)}},n}(),ll=function(n,x,t){this.variableNames=["x"],this.outputShape=t;var e=t.length,i=za(t.length),r=za(t.length),o="";if(1===e)o="coords * strides + begin";else{var s=0;o=t.map(function(n,x){return s++,1===t.length?"coords * strides["+x+"] + begin["+x+"]":"coords["+(s-1)+"] * strides["+x+"] + begin["+x+"]"}).join(",")}this.userCode="\n "+i+" begin = "+i+"("+n+");\n "+i+" strides = "+i+"("+x+");\n\n void main() {\n "+r+" coords = getOutputCoords();\n setOutput(getX("+o+"));\n }\n "},cl=function(){function n(n){this.gpgpu=n,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}return n.prototype.acquireTexture=function(n,x,t){var e,i=dl(x,t),r=fl(n,i,t);if(r in this.freeTextures||(this.freeTextures[r]=[]),r in this.usedTextures||(this.usedTextures[r]=[]),this.freeTextures[r].length>0){this.numFreeTextures--,this.numUsedTextures++,this.log();var o=this.freeTextures[r].shift();return this.usedTextures[r].push(o),o}return this.numUsedTextures++,this.log(),i===po.PACKED_2X2_FLOAT32?e=this.gpgpu.createPackedMatrixTexture(n[0],n[1]):i===po.PACKED_2X2_FLOAT16?e=this.gpgpu.createFloat16PackedMatrixTexture(n[0],n[1]):i===po.UNPACKED_FLOAT32?e=this.gpgpu.createFloat32MatrixTexture(n[0],n[1]):i===po.UNPACKED_FLOAT16?e=this.gpgpu.createFloat16MatrixTexture(n[0],n[1]):i===po.PACKED_4X1_UNSIGNED_BYTE&&(e=this.gpgpu.createUnsignedBytesMatrixTexture(n[0],n[1])),this.usedTextures[r].push(e),e},n.prototype.releaseTexture=function(n,x,t,e){if(null!=this.freeTextures){var i=fl(x,dl(t,e),e);i in this.freeTextures||(this.freeTextures[i]=[]),this.freeTextures[i].push(n),this.numFreeTextures++,this.numUsedTextures--;var r=this.usedTextures[i],o=r.indexOf(n);if(o<0)throw new Error("Cannot release a texture that was never provided by this texture manager");r.splice(o,1),this.log()}},n.prototype.log=function(){if(this.logEnabled){var n=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",this.numFreeTextures+" / "+this.numUsedTextures,"("+n+")")}},n.prototype.getNumUsedTextures=function(){return this.numUsedTextures},n.prototype.getNumFreeTextures=function(){return this.numFreeTextures},n.prototype.dispose=function(){var n=this;if(null!=this.freeTextures){for(var x in this.freeTextures)this.freeTextures[x].forEach(function(x){n.gpgpu.deleteMatrixTexture(x)});for(var x in this.usedTextures)this.usedTextures[x].forEach(function(x){n.gpgpu.deleteMatrixTexture(x)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0}},n}();function dl(n,x){if(n===fo.UPLOAD)return po.PACKED_2X2_FLOAT32;if(n===fo.RENDER||null==n)return function(n){return Bi().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?n?po.PACKED_2X2_FLOAT32:po.UNPACKED_FLOAT32:n?po.PACKED_2X2_FLOAT16:po.UNPACKED_FLOAT16}(x);if(n===fo.DOWNLOAD||n===fo.PIXELS)return po.PACKED_4X1_UNSIGNED_BYTE;throw new Error("Unknown logical texture type "+n)}function fl(n,x,t){return n[0]+"_"+n[1]+"_"+x+"_"+t}var pl=function(n,x){this.variableNames=["A"];for(var t=new Array(n.length),e=0;e<t.length;e++)t[e]=n[e]*x[e];this.outputShape=t,this.rank=t.length;var i=za(this.rank),r=function(n){var x=n.length;if(x>5)throw Error("Tile for rank "+x+" is not yet supported");if(1===x)return"imod(resRC, "+n[0]+")";for(var t=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],e=[],i=0;i<n.length;i++)e.push("imod("+t[i]+", "+n[i]+")");return e.join()}(n);this.userCode="\n void main() {\n "+i+" resRC = getOutputCoords();\n setOutput(getA("+r+"));\n }\n "},yl=function(n,x){this.variableNames=["A"];for(var t=new Array(n.length),e=0;e<t.length;e++)t[e]=n[x[e]];this.outputShape=t,this.rank=t.length;var i=za(this.rank),r=function(n){var x=n.length;if(x>6)throw Error("Transpose for rank "+x+" is not yet supported");for(var t=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],e=new Array(x),i=0;i<n.length;i++)e[n[i]]=t[i];return e.join()}(x);this.userCode="\n void main() {\n "+i+" resRC = getOutputCoords();\n setOutput(getA("+r+"));\n }\n "},ml=function(n,x){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0;for(var t=new Array(n.length),e=0;e<t.length;e++)t[e]=n[x[e]];if(this.outputShape=t,this.rank=t.length,this.rank>6)throw Error("Packed transpose for rank "+this.rank+" is not yet supported.");var i=za(this.rank),r=ra("rc",this.rank),o=new Array(this.rank);for(e=0;e<x.length;e++)o[x[e]]=r[e];var s="vec2("+o.slice(-2).join()+")",h="++"+r[this.rank-1]+" < "+t[this.rank-1],u="getChannel(getA("+o.join()+"), "+s+")";this.userCode="\n void main() {\n "+i+" rc = getOutputCoords();\n vec4 result = vec4(0.);\n result[0] = "+u+";\n if("+h+") {\n result[1] = "+u+";\n }\n --"+r[this.rank-1]+";\n if(++"+r[this.rank-2]+" < "+t[this.rank-2]+") {\n result[2] = "+u+";\n if("+h+") {\n result[3] = "+u+";\n }\n }\n setOutput(result);\n }\n "},bl=1.7580993408473768,zl=1.0507009873554805,vl=function(n,x){this.variableNames=["A"],this.outputShape=n,this.userCode="\n float unaryOperation(float x) {\n "+x+"\n }\n\n void main() {\n float x = getAAtOutCoords();\n float y = unaryOperation(x);\n\n setOutput(y);\n }\n "},jl="if (isnan(x)) return x;",wl="return x;",kl="return abs(x);",ql=jl+"\n return (x < 0.0) ? 0.0 : x;\n",Cl=jl+"\n return (x < 0.0) ? 0.0 : min(6.0, x);\n",Al="return (x >= 0.0) ? x : (exp(x) - 1.0);",El="\n // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n // see: https://arxiv.org/abs/1706.02515\n float scaleAlpha = "+bl+";\n float scale = "+zl+";\n return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n",Sl="return -x;",Il="return ceil(x);",Dl="return floor(x);",Ol="return exp(x);",_l="return exp(x) - 1.0;",Tl=jl+"\n return sin(x);\n",Rl=jl+"\n return cos(x);\n",Bl=jl+"\n if (abs(x) > 1.) {\n return NAN;\n }\n return asin(x);\n",Ml=jl+"\n if (abs(x) > 1.) {\n return NAN;\n }\n return acos(x);\n",Nl=jl+"\n return atan(x);\n",Fl=jl+"return log(x + sqrt(x * x + 1.0));",Pl=jl+"\n if (x < 1.0) return NAN;\n return log(x + sqrt(x * x - 1.0));",Ll=jl+"\n if ((x < -1.0) || (x > 1.0)) return NAN;\n return (log(1.0 + x) - log(1.0 - x)) / 2.0;",Hl="return x;",Ul="return x;",Vl="\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",Wl="\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",Ql="\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",Gl=function(n,x){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n,this.userCode="\n vec4 unaryOperation(vec4 x) {\n "+x+"\n }\n\n void main() {\n vec4 x = getAAtOutCoords();\n vec4 y = unaryOperation(x);\n\n setOutput(y);\n }\n "},Kl=function(n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=n;var x=n.length,t=oa("rc",x),e=za(x),i=function(n,x){if(1===n)return"rc";for(var t="",e=0;e<n;e++)t+=x[e],e<n-1&&(t+=",");return t}(x,t),r=t.slice(-2),o=x<=1?"rc":"vec2("+r.join(",")+")";this.userCode="\n void main() {\n "+e+" rc = getOutputCoords();\n vec4 packedInput = getA("+i+");\n\n setOutput(getChannel(packedInput, "+o+"));\n }\n "},Yl={};function Jl(n,x){if(void 0===x&&(x=!1),"linear"===n)return x?Ul:wl;if("relu"===n)return x?Vl:ql;if("elu"===n)return x?Ql:Al;if("relu6"===n)return x?Wl:Cl;if("prelu"===n)return x?Ba:Ta;throw new Error("Activation "+n+" has not been implemented for the WebGL backend.")}var Xl=600,Zl=function(n){function x(x){var t,e=n.call(this)||this;if(e.pendingRead=new WeakMap,e.pendingDisposal=new WeakSet,e.dataRefCount=new WeakMap,e.numBytesInGPU=0,e.uploadWaitMs=0,e.downloadWaitMs=0,e.warnedAboutMemory=!1,e.pendingDeletes=0,e.disposed=!1,!Bi().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");if(null==x){var i=zo(Bi().getNumber("WEBGL_VERSION"));e.binaryCache=((t=Bi().getNumber("WEBGL_VERSION"))in Yl||(Yl[t]={}),Yl[t]),e.gpgpu=new Rg(i),e.canvas=i.canvas,e.gpgpuCreatedLocally=!0}else e.gpgpu=x,e.binaryCache={},e.gpgpuCreatedLocally=!1,e.canvas=x.gl.canvas;return e.textureManager=new cl(e.gpgpu),e.numMBBeforeWarning=null==Bi().global.screen?1024:Bi().global.screen.height*Bi().global.screen.width*window.devicePixelRatio*Xl/1024/1024,e.texData=new bu(e,ao),e}return Di(x,n),x.prototype.numDataIds=function(){return this.texData.numDataIds()+(this.cpuBackend?this.cpuBackend.numDataIds():0)-this.pendingDeletes},x.prototype.write=function(n,x,t){if(Bi().getBool("DEBUG")&&this.checkNumericalProblems(n),"complex64"===t&&null!=n)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");var e={};return this.texData.set(e,{shape:x,dtype:t,values:n,usage:fo.UPLOAD}),e},x.prototype.move=function(n,x,t,e){if(Bi().getBool("DEBUG")&&this.checkNumericalProblems(x),"complex64"===e)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(n,{shape:t,dtype:e,values:x,usage:fo.UPLOAD})},x.prototype.readSync=function(n){var x=this.texData.get(n),t=x.values,e=x.dtype,i=x.complexTensors,r=x.slice,o=x.shape,s=x.isPacked;if(null!=r){var h=void 0;h=s?new Gl(o,Hl):new vl(o,Hl);var u=this.runWebGLProgram(h,[{dataId:n,shape:o,dtype:e}],e),a=this.readSync(u.dataId);return this.disposeData(u.dataId),a}if(null!=t)return this.convertAndCacheOnCPU(n);if("string"===e)return t;var g,l,c=null!=this.activeTimers;return c&&(g=Sr()),l="complex64"===e?Pu(i.real.dataSync(),i.imag.dataSync()):this.getValuesFromTexture(n),c&&(this.downloadWaitMs+=Sr()-g),this.convertAndCacheOnCPU(n,l)},x.prototype.read=function(n){return Oi(this,void 0,void 0,function(){var x,t,e,i,r,o,s,h,u,a,g,l,c,d,f,p,y,m,b,z,v,j;return _i(this,function(w){switch(w.label){case 0:if(this.pendingRead.has(n))return x=this.pendingRead.get(n),[2,new Promise(function(n){return x.push(n)})];if(t=this.texData.get(n),e=t.values,i=t.shape,r=t.slice,o=t.dtype,s=t.complexTensors,h=t.isPacked,null!=r)return u=void 0,u=h?new Gl(i,Hl):new vl(i,Hl),a=this.runWebGLProgram(u,[{dataId:n,shape:i,dtype:o}],o),g=this.read(a.dataId),this.disposeData(a.dataId),[2,g];if(null!=e)return[2,this.convertAndCacheOnCPU(n)];if(!Bi().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&2===Bi().getNumber("WEBGL_VERSION"))throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");return l=null,"complex64"!==o&&Bi().get("WEBGL_BUFFER_SUPPORTED")&&(c=this.decode(n),d=this.texData.get(c.dataId),l=(j=this.gpgpu).createBufferFromTexture.apply(j,[d.texture].concat(jo(i)))),this.pendingRead.set(n,[]),"complex64"===o?[3,2]:[4,this.gpgpu.createAndWaitForFence()];case 1:w.sent(),w.label=2;case 2:return"complex64"!==o?[3,4]:[4,Promise.all([s.real.data(),s.imag.data()])];case 3:return p=w.sent(),y=p[0],m=p[1],f=Pu(y,m),[3,5];case 4:null==l?f=this.getValuesFromTexture(n):(b=nr(i),f=this.gpgpu.downloadFloat32MatrixFromBuffer(l,b)),w.label=5;case 5:return null!=c&&this.disposeData(c.dataId),z=this.convertAndCacheOnCPU(n,f),v=this.pendingRead.get(n),this.pendingRead.delete(n),v.forEach(function(n){return n(z)}),this.pendingDisposal.has(n)&&(this.pendingDisposal.delete(n),this.disposeData(n),this.pendingDeletes--),[2,z]}})})},x.prototype.checkNumericalProblems=function(n){if(null!=n)for(var x=0;x<n.length;x++){var t=n[x];if(!Eo(t)){if(Bi().getBool("WEBGL_RENDER_FLOAT32_CAPABLE"))throw Error("The value "+t+" cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'");throw Error("The value "+t+" cannot be represented on this device.")}}},x.prototype.getValuesFromTexture=function(n){var x,t=this.texData.get(n),e=t.shape,i=t.dtype,r=t.isPacked,o=nr(e);if(Bi().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")){var s=this.decode(n),h=this.texData.get(s.dataId),u=(x=this.gpgpu).downloadMatrixFromPackedTexture.apply(x,[h.texture].concat(jo(e))).subarray(0,o);return this.disposeData(s.dataId),u}var a=Bi().getBool("WEBGL_PACK")&&!0===r,g=a?es(e):e,l=a?new hg(g):new sg(g),c=this.runWebGLProgram(l,[{shape:g,dtype:i,dataId:n}],"float32"),d=this.texData.get(c.dataId),f=this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(d.texture,d.texShape[0],d.texShape[1]).subarray(0,o);return this.disposeData(c.dataId),f},x.prototype.time=function(n){return Oi(this,void 0,void 0,function(){var x,t,e,i,r,o,s;return _i(this,function(h){switch(h.label){case 0:return x=this.activeTimers,t=[],e=!1,null==this.programTimersStack?(this.programTimersStack=t,e=!0):this.activeTimers.push(t),this.activeTimers=t,n(),i=$i(this.activeTimers.map(function(n){return n.query})).filter(function(n){return null!=n}),r=$i(this.activeTimers.map(function(n){return n.name})).filter(function(n){return null!=n}),this.activeTimers=x,e&&(this.programTimersStack=null),o={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?[4,Promise.all(i)]:[3,2];case 1:return s=h.sent(),o.kernelMs=Yi(s),o.getExtraProfileInfo=function(){return s.map(function(n,x){return{name:r[x],ms:n}}).map(function(n){return n.name+": "+n.ms}).join(", ")},[3,3];case 2:o.kernelMs={error:"WebGL query timers are not supported in this environment."},h.label=3;case 3:return this.uploadWaitMs=0,this.downloadWaitMs=0,[2,o]}})})},x.prototype.memory=function(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU}},x.prototype.startTimer=function(){return Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:Sr(),endMs:null}},x.prototype.endTimer=function(n){return Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),n):(n.endMs=Sr(),n)},x.prototype.getQueryTime=function(n){return Oi(this,void 0,void 0,function(){var x;return _i(this,function(t){return Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?[2,this.gpgpu.waitForQueryAndGetTime(n)]:[2,(x=n).endMs-x.startMs]})})},x.prototype.disposeData=function(n){if(!this.pendingDisposal.has(n)){if(this.pendingRead.has(n))return this.pendingDisposal.add(n),void this.pendingDeletes++;if(this.texData.has(n)){this.releaseGPUData(n);var x=this.texData.get(n).complexTensors;null!=x&&(x.real.dispose(),x.imag.dispose()),this.texData.delete(n)}}},x.prototype.releaseGPUData=function(n){var x=this.texData.get(n),t=x.texture,e=x.dtype,i=x.texShape,r=x.usage,o=x.isPacked,s=x.slice,h=s&&s.origDataId||n,u=this.dataRefCount.get(h);u>1?this.dataRefCount.set(h,u-1):(this.dataRefCount.delete(h),null!=t&&(this.numBytesInGPU-=this.computeBytes(i,e),this.textureManager.releaseTexture(t,i,r,o)));var a=this.texData.get(n);a.texture=null,a.texShape=null,a.isPacked=!1,a.slice=null},x.prototype.getTexture=function(n){return this.uploadToGPU(n),this.texData.get(n).texture},x.prototype.getDataInfo=function(n){return this.texData.get(n)},x.prototype.getCPUBackend=function(){return Bi().getBool("WEBGL_CPU_FORWARD")?(null==this.cpuBackend&&(this.cpuBackend=ao.findBackend("cpu")),this.cpuBackend):null},x.prototype.shouldExecuteOnCPU=function(n,x){var t=this;return void 0===x&&(x=128),null!=this.getCPUBackend()&&n.every(function(n){return null==t.texData.get(n.dataId).texture&&n.size<x})},x.prototype.getGPGPUContext=function(){return this.gpgpu},x.prototype.complex=function(n,x){var t=this.makeOutput(n.shape,"complex64");return this.texData.get(t.dataId).complexTensors={real:ao.keep(n.clone()),imag:ao.keep(x.clone())},t},x.prototype.real=function(n){return this.texData.get(n.dataId).complexTensors.real.clone()},x.prototype.imag=function(n){return this.texData.get(n.dataId).complexTensors.imag.clone()},x.prototype.slice=function(n,x,t){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.slice(n,x,t);if(0===nr(t))return Ls([],t,n.dtype);var e=this.texData.get(n.dataId).isPacked,i=cu(n.shape,x,t);if(e||!i){var r=Bi().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new gl(t):new ul(t),o=r.getCustomSetupFunc(x);return this.compileAndRun(r,[n],null,o)}return this.uploadToGPU(n.dataId),this.shallowSlice(n,x,t)},x.prototype.shallowSlice=function(n,x,t){var e=this.texData.get(n.dataId),i=this.makeOutput(t,n.dtype),r=this.texData.get(i.dataId);Object.assign(r,e),r.shape=t,r.dtype=n.dtype;var o=du(x,n.strides);e.slice&&(o+=e.slice.flatOffset),r.slice={flatOffset:o,origDataId:e.slice&&e.slice.origDataId||n.dataId};var s=this.dataRefCount.get(r.slice.origDataId)||1;return this.dataRefCount.set(r.slice.origDataId,s+1),i},x.prototype.stridedSlice=function(n,x,t,e){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.stridedSlice(n,x,t,e);var i=au(x,t,e);if(i.some(function(n){return 0===n}))return Ls([],i);var r=new ll(x,e,i);return this.compileAndRun(r,[n])},x.prototype.reverse=function(n,x){var t=Bi().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new rl(n.shape,x):new il(n.shape,x);return this.compileAndRun(t,[n])},x.prototype.concat=function(n,x){if("complex64"===n[0].dtype){var t=n.map(function(n){return Fs(n)}),e=n.map(function(n){return Ps(n)});return Ns(this.concat(t,x),this.concat(e,x))}if(this.shouldExecuteOnCPU(n))return this.cpuBackend.concat(n,x);if(1===n.length)return n[0];if(n.length>Bi().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){var i=Math.floor(n.length/2),r=this.concat(n.slice(0,i),x),o=this.concat(n.slice(i),x);return this.concat([r,o],x)}if(Bi().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&n[0].rank>1){var s=new Ha(n.map(function(n){return n.shape}),x);return this.compileAndRun(s,n)}var h=Bs(n.map(function(n){return n.shape}),x),u=n.map(function(n){return n.as2D(-1,nr(n.shape.slice(x)))}),a=new La(u.map(function(n){return n.shape}));return this.compileAndRun(a,u).reshape(h)},x.prototype.neg=function(n){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.neg(n);if(Bi().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(n,Sl,n.dtype);var x=new vl(n.shape,Sl);return this.compileAndRun(x,[n])},x.prototype.batchMatMul=function(n,x,t,e){var i=t?n.shape[2]:n.shape[1],r=e?x.shape[1]:x.shape[2],o=t?n.shape[1]:n.shape[2],s=n.shape[0];if((1===i||1===r)&&o>1e3){t&&(n=n.transpose([0,2,1])),e&&(x=x.transpose([0,2,1]));var h=1===r?n:n.as3D(s,o,1),u=1===r?2:1,a=1===r?x.as3D(s,1,o):x;return this.multiply(h,a).sum(u,!0)}var g=to(n.dtype,x.dtype),l=new Ug(n.shape,[s,i,r],t,e);return this.compileAndRun(l,[n,x],g)},x.prototype.fusedBatchMatMul=function(n){var x=n.a,t=n.b,e=n.transposeA,i=n.transposeB,r=n.bias,o=n.activation,s=n.preluActivationWeights,h=e?x.shape[2]:x.shape[1],u=i?t.shape[1]:t.shape[2],a=x.shape[0],g=to(x.dtype,t.dtype),l=null!=r,c=null!=s,d=o?Jl(o,!0):null,f=new Ug(x.shape,[a,h,u],e,i,l,d,c),p=[x,t];return r&&p.push(r),s&&p.push(s),this.compileAndRun(f,p,g)},x.prototype.multiply=function(n,x){if("complex64"===n.dtype){var t=this.texData.get(n.dataId),e=this.texData.get(x.dataId),i=new Ia(Ea,n.shape,x.shape),r=new Ia(Sa,n.shape,x.shape),o=[this.makeComplexComponentTensorInfo(n,t.complexTensors.real),this.makeComplexComponentTensorInfo(n,t.complexTensors.imag),this.makeComplexComponentTensorInfo(x,e.complexTensors.real),this.makeComplexComponentTensorInfo(x,e.complexTensors.imag)],s=this.compileAndRun(i,o),h=this.compileAndRun(r,o),u=this.complex(s,h);return s.dispose(),h.dispose(),u}if(this.shouldExecuteOnCPU([n,x]))return this.cpuBackend.multiply(n,x);if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,_a,n.dtype);var a=new Ra(_a,n.shape,x.shape);return this.compileAndRun(a,[n,x],n.dtype)},x.prototype.batchNormalization=function(n,x,t,e,i,r){var o=[n,x,t],s=null;null!=r&&(s=r.shape,o.push(r));var h=null;if(null!=i&&(h=i.shape,o.push(i)),Bi().getBool("WEBGL_PACK_NORMALIZATION")){var u=new Aa(n.shape,x.shape,t.shape,s,h,e);return this.compileAndRun(u,o)}var a=new Ca(n.shape,x.shape,t.shape,s,h,e);return this.compileAndRun(a,o)},x.prototype.localResponseNormalization4D=function(n,x,t,e,i){var r=Bi().getBool("WEBGL_PACK_NORMALIZATION")?new Pg(n.shape,x,t,e,i):new Ng(n.shape,x,t,e,i);return this.compileAndRun(r,[n])},x.prototype.LRNGrad=function(n,x,t,e,i,r,o){var s=new Fg(x.shape,e,i,r,o);return this.compileAndRun(s,[x,t,n])},x.prototype.tile=function(n,x){if("string"===n.dtype){var t=this.readSync(n.dataId).map(function(n){return Or(n)});return $u(jh(n.shape,n.dtype,t),x)}var e=new pl(n.shape,x);return this.compileAndRun(e,[n])},x.prototype.pad=function(n,x,t){var e=Bi().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Kg(n.shape,x,t):new Gg(n.shape,x,t);return this.compileAndRun(e,[n])},x.prototype.transpose=function(n,x){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.transpose(n,x);var t=Bi().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new ml(n.shape,x):new yl(n.shape,x);return this.compileAndRun(t,[n])},x.prototype.gather=function(n,x,t){if(this.shouldExecuteOnCPU([n,x]))return this.cpuBackend.gather(n,x,t);var e=new fg(n.shape,x.size,t);return this.compileAndRun(e,[n,x])},x.prototype.batchToSpaceND=function(n,x,t){Ji(n.rank<=4,function(){return"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"});var e=x.reduce(function(n,x){return n*x}),i=Xh(n.shape,x,e),r=Zh(i.length,x.length),o=$h(n.shape,x,e),s=nu(t,x.length),h=xu(o,t,x.length);return n.reshape(i).transpose(r).reshape(o).slice(s,h)},x.prototype.spaceToBatchND=function(n,x,t){Ji(n.rank<=4,function(){return"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"});var e=x.reduce(function(n,x){return n*x}),i=[[0,0]];i.push.apply(i,t);for(var r=1+x.length;r<n.shape.length;++r)i.push([0,0]);var o=n.pad(i),s=Xh(o.shape,x,e,!1),h=Zh(s.length,x.length,!1),u=$h(o.shape,x,e,!1);return o.reshape(s).transpose(h).reshape(u)},x.prototype.reduce=function(n,x,t){var e=n.shape[0],i=n.shape[1],r=iu(i),o=new Xg({windowSize:r,inSize:i,batchSize:e},x),s=this.compileAndRun(o,[n],t);return 1===s.shape[1]?s:this.reduce(s,x,t)},x.prototype.argReduce=function(n,x,t){void 0===t&&(t=null);var e=n.shape[0],i=n.shape[1];null!=t&&(e=t.shape[0],i=t.shape[1]);var r=iu(i),o=new ia({windowSize:r,inSize:i,batchSize:e},x,null==t),s=[n];null!=t&&s.push(t);var h=this.compileAndRun(o,s,"int32");return 1===h.shape[1]?h:this.argReduce(n,x,h)},x.prototype.argReducePacked=function(n,x,t){void 0===t&&(t=null);var e=null!=t?t.shape:n.shape,i=iu(e[e.length-1]),r=new wa(e,i,x,null==t),o=null==t?[n]:[n,t],s=this.compileAndRun(r,o,"int32");return s.rank===n.rank?this.argReducePacked(n,x,s):s},x.prototype.sum=function(n,x){Ds("sum",x,n.rank);var t=Ss(n.shape,x),e=t[0],i=nr(t[1]),r=n.as2D(-1,i),o=eo(n.dtype);return this.reduce(r,"sum",o).reshape(e)},x.prototype.prod=function(n,x){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.prod(n,x);var t=Ss(n.shape,x),e=t[0],i=nr(t[1]),r=n.as2D(-1,i),o=eo(n.dtype);return this.reduce(r,"prod",o).reshape(e)},x.prototype.unsortedSegmentSum=function(n,x,t){var e=0,i=Os([e],n.rank),r=n;null!=i&&(r=n.transpose(i),e=Ts(1,n.rank)[0]);var o=function(n,x,t){for(var e=[],i=n.length,r=0;r<i;r++)r!==x?e.push(n[r]):e.push(t);return e}(r.shape,e,t),s=nr([r.shape[e]]),h=r.as2D(-1,s),u=eo(n.dtype),a=this.segOpCompute(h,"unsortedSegmentSum",x,u,t).reshape(o);return null!=i&&(a=a.transpose(_s(i))),a},x.prototype.segOpCompute=function(n,x,t,e,i){var r=n.shape[0],o=n.shape[1],s=function(n,x){var t,e=!1;for(n<=eu?(t=n,e=!0):t=wr(n,Math.floor(Math.sqrt(n)));!e;)t>x||t===n?e=!0:t=wr(n,t+1);return t}(o,i),h=new sl({windowSize:s,inSize:o,batchSize:r,numSegments:i},x),u=this.compileAndRun(h,[n,t],e);return u.shape[1]===i?u:(t=xh(0,i).tile([o/s]),this.segOpCompute(u,x,t,e,i))},x.prototype.argMinMaxReduce=function(n,x,t){var e=[x];if(Ds("arg"+t.charAt(0).toUpperCase()+t.slice(1),e,n.rank),!Bi().getBool("WEBGL_PACK_REDUCE")||n.rank<=2){var i=Ss(n.shape,e),r=i[0],o=nr(i[1]),s=n.as2D(-1,o);return this.argReduce(s,t).reshape(r)}return this.argReducePacked(n,t)},x.prototype.argMin=function(n,x){return this.argMinMaxReduce(n,x,"min")},x.prototype.argMax=function(n,x){return this.argMinMaxReduce(n,x,"max")},x.prototype.cumsum=function(n,x,t,e){if(x!==n.rank-1)throw new Error("WebGL cumsum shader expects an inner-most axis="+(n.rank-1)+" but got axis="+x);var i=new xg(n.shape,t,e);return this.compileAndRun(i,[n])},x.prototype.equal=function(n,x){if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\n return vec4(equal(a, b));\n","bool");var t=new Ra("return float(a == b);",n.shape,x.shape);return this.compileAndRun(t,[n,x],"bool")},x.prototype.notEqual=function(n,x){if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\n return vec4(notEqual(a, b));\n","bool");var t=new Ra("return float(a != b);",n.shape,x.shape);return this.compileAndRun(t,[n,x],"bool")},x.prototype.less=function(n,x){if(this.shouldExecuteOnCPU([n,x]))return this.cpuBackend.less(n,x);if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\n return vec4(lessThan(a, b));\n","bool");var t=new Ra("return float(a < b);",n.shape,x.shape);return this.compileAndRun(t,[n,x],"bool")},x.prototype.lessEqual=function(n,x){if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\n return vec4(lessThanEqual(a, b));\n","bool");var t=new Ra("return float(a <= b);",n.shape,x.shape);return this.compileAndRun(t,[n,x],"bool")},x.prototype.greater=function(n,x){if(this.shouldExecuteOnCPU([n,x]))return this.cpuBackend.greater(n,x);if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\n return vec4(greaterThan(a, b));\n","bool");var t=new Ra("return float(a > b);",n.shape,x.shape);return this.compileAndRun(t,[n,x],"bool")},x.prototype.greaterEqual=function(n,x){if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\n return vec4(greaterThanEqual(a, b));\n","bool");var t=new Ra("return float(a >= b);",n.shape,x.shape);return this.compileAndRun(t,[n,x],"bool")},x.prototype.logicalNot=function(n){var x=new vl(n.shape,"return float(!(x >= 1.0));");return this.compileAndRun(x,[n])},x.prototype.logicalAnd=function(n,x){if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n","bool");var t=new Ra("return float(a >= 1.0 && b >= 1.0);",n.shape,x.shape);return this.compileAndRun(t,[n,x],"bool")},x.prototype.logicalOr=function(n,x){if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\n return min(\n vec4(greaterThanEqual(a, vec4(1.0))) +\n vec4(greaterThanEqual(b, vec4(1.0))),\n vec4(1.0));\n","bool");var t=new Ra("return float(a >= 1.0 || b >= 1.0);",n.shape,x.shape);return this.compileAndRun(t,[n,x],"bool")},x.prototype.select=function(n,x,t){var e=new hl(n.rank,x.shape,x.rank);return this.compileAndRun(e,[n,x,t],to(x.dtype,t.dtype))},x.prototype.where=function(n){js("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead");var x=n.dataSync();return xa(n.shape,x)},x.prototype.topk=function(n,x,t){return na(n.dataSync(),n.shape,n.dtype,x)},x.prototype.min=function(n,x){Ds("min",x,n.rank);var t=Ss(n.shape,x),e=t[0],i=nr(t[1]),r=n.as2D(-1,i);return this.reduce(r,"min",r.dtype).reshape(e)},x.prototype.minimum=function(n,x){if(this.shouldExecuteOnCPU([n,x]))return this.cpuBackend.minimum(n,x);var t=Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ma("\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",n.shape,x.shape):new Ra("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return min(a, b);\n",n.shape,x.shape);return this.compileAndRun(t,[n,x])},x.prototype.mod=function(n,x){var t=Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ma("\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",n.shape,x.shape):new Ra("if (b == 0.0) return NAN;\n return mod(a, b);",n.shape,x.shape);return this.compileAndRun(t,[n,x])},x.prototype.max=function(n,x){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.max(n,x);Ds("max",x,n.rank);var t=Ss(n.shape,x),e=t[0],i=nr(t[1]),r=n.as2D(-1,i);return this.reduce(r,"max",r.dtype).reshape(e)},x.prototype.maximum=function(n,x){if(this.shouldExecuteOnCPU([n,x]))return this.cpuBackend.maximum(n,x);var t=Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ma("\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",n.shape,x.shape):new Ra("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return max(a, b);\n",n.shape,x.shape);return this.compileAndRun(t,[n,x])},x.prototype.all=function(n,x){Ds("all",x,n.rank);var t=Ss(n.shape,x),e=t[0],i=nr(t[1]),r=n.as2D(-1,i);return this.reduce(r,"all",r.dtype).reshape(e)},x.prototype.any=function(n,x){Ds("any",x,n.rank);var t=Ss(n.shape,x),e=t[0],i=nr(t[1]),r=n.as2D(-1,i);return this.reduce(r,"any",r.dtype).reshape(e)},x.prototype.realDivide=function(n,x){if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\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 t=new Ra("\nif (a == b) {\n return 1.0;\n};\nreturn a / b;",n.shape,x.shape);return this.compileAndRun(t,[n,x],"float32")},x.prototype.floorDiv=function(n,x){if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\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 t=new Ra("\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",n.shape,x.shape);return this.compileAndRun(t,[n,x],"int32")},x.prototype.add=function(n,x){if("complex64"===n.dtype&&"complex64"===x.dtype)return this.complexSeparableBinaryOp(n,x,Da);if(this.shouldExecuteOnCPU([n,x]))return this.cpuBackend.add(n,x);var t=to(n.dtype,x.dtype);if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,Da,t);var e=new Ra(Da,n.shape,x.shape);return this.compileAndRun(e,[n,x],t)},x.prototype.packedUnaryOp=function(n,x,t){var e=new Gl(n.shape,x);return this.compileAndRun(e,[n],t)},x.prototype.packedBinaryOp=function(n,x,t,e,i){void 0===i&&(i=!1);var r=new Ma(t,n.shape,x.shape,i);return this.compileAndRun(r,[n,x],e)},x.prototype.complexSeparableBinaryOp=function(n,x,t){var e=this,i=this.texData.get(n.dataId),r=this.texData.get(x.dataId),o=[[i.complexTensors.real,r.complexTensors.real],[i.complexTensors.imag,r.complexTensors.imag]].map(function(i){var r=i[0],o=i[1],s=e.makeComplexComponentTensorInfo(n,r),h=e.makeComplexComponentTensorInfo(x,o),u=new Ra(t,n.shape,x.shape);return e.compileAndRun(u,[s,h],to(r.dtype,o.dtype))}),s=o[0],h=o[1],u=this.complex(s,h);return s.dispose(),h.dispose(),u},x.prototype.makeComplexComponentTensorInfo=function(n,x){return{dataId:x.dataId,dtype:x.dtype,shape:n.shape}},x.prototype.addN=function(n){if(1===n.length)return n[0];if(n.length>Bi().get("WEBGL_MAX_TEXTURES_IN_SHADER")){var x=Math.floor(n.length/2),t=this.addN(n.slice(0,x)),e=this.addN(n.slice(x));return this.addN([t,e])}var i=n.map(function(n){return n.dtype}).reduce(function(n,x){return to(n,x)}),r=n.map(function(n){return n.shape}),o=Bi().getBool("WEBGL_PACK")?new ea(n[0].shape,r):new ta(n[0].shape,r);return this.compileAndRun(o,n,i)},x.prototype.subtract=function(n,x){if("complex64"===n.dtype&&"complex64"===x.dtype)return this.complexSeparableBinaryOp(n,x,Oa);if(this.shouldExecuteOnCPU([n,x]))return this.cpuBackend.subtract(n,x);var t=to(n.dtype,x.dtype);if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,Oa,n.dtype);var e=new Ra(Oa,n.shape,x.shape);return this.compileAndRun(e,[n,x],t)},x.prototype.pow=function(n,x){var t=Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ma("\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",n.shape,x.shape):new Ra("\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",n.shape,x.shape),e=to(n.dtype,x.dtype);return this.compileAndRun(t,[n,x],e)},x.prototype.ceil=function(n){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.ceil(n);if(Bi().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(n,Il,n.dtype);var x=new vl(n.shape,Il);return this.compileAndRun(x,[n])},x.prototype.floor=function(n){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.floor(n);if(Bi().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(n,Dl,n.dtype);var x=new vl(n.shape,Dl);return this.compileAndRun(x,[n])},x.prototype.sign=function(n){var x=new vl(n.shape,"\n if (isnan(x)) { return 0.0; }\n return sign(x);\n");return this.compileAndRun(x,[n])},x.prototype.isNaN=function(n){var x=new vl(n.shape,"return float(isnan(x));");return this.compileAndRun(x,[n],"bool")},x.prototype.isInf=function(n){var x=new vl(n.shape,"return float(isinf(x));");return this.compileAndRun(x,[n],"bool")},x.prototype.isFinite=function(n){var x=new vl(n.shape,"return float(!isnan(x) && !isinf(x));");return this.compileAndRun(x,[n],"bool")},x.prototype.round=function(n){var x=new vl(n.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(x,[n])},x.prototype.exp=function(n){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.exp(n);if(Bi().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(n,Ol,n.dtype);var x=new vl(n.shape,Ol);return this.compileAndRun(x,[n])},x.prototype.expm1=function(n){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.expm1(n);if(Bi().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(n,_l,n.dtype);var x=new vl(n.shape,_l);return this.compileAndRun(x,[n])},x.prototype.softmax=function(n,x){var t=hr([x],n.shape),e=this.max(n,t),i=Is(e.shape,t),r=this.subtract(n,e.reshape(i)),o=this.exp(r),s=this.sum(o,t).reshape(i);return this.realDivide(o,s)},x.prototype.log=function(n){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.log(n);if(Bi().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(n,"\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",n.dtype);var x=new vl(n.shape,"if (x < 0.0) return NAN;\n return log(x);");return this.compileAndRun(x,[n])},x.prototype.log1p=function(n){var x=new vl(n.shape,"return log(1.0 + x);");return this.compileAndRun(x,[n])},x.prototype.sqrt=function(n){var x=new vl(n.shape,"return sqrt(x);");return this.compileAndRun(x,[n])},x.prototype.rsqrt=function(n){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.rsqrt(n);var x=new vl(n.shape,"return inversesqrt(x);");return this.compileAndRun(x,[n])},x.prototype.reciprocal=function(n){var x=new vl(n.shape,"return 1.0 / x;");return this.compileAndRun(x,[n])},x.prototype.relu=function(n){var x;return x=Bi().getBool("WEBGL_PACK")?new Gl(n.shape,Vl):new vl(n.shape,ql),this.compileAndRun(x,[n])},x.prototype.relu6=function(n){var x;return x=Bi().getBool("WEBGL_PACK")?new Gl(n.shape,Wl):new vl(n.shape,Cl),this.compileAndRun(x,[n])},x.prototype.prelu=function(n,x){var t=Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ma(Ba,n.shape,x.shape):new Ra(Ta,n.shape,x.shape);return this.compileAndRun(t,[n,x])},x.prototype.elu=function(n){if(Bi().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(n,Ql,n.dtype);var x=new vl(n.shape,Al);return this.compileAndRun(x,[n])},x.prototype.eluDer=function(n,x){var t=Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ma("\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n",n.shape,x.shape):new Ra("return (b >= 1.0) ? a : a * (b + 1.0);",n.shape,x.shape);return this.compileAndRun(t,[n,x])},x.prototype.selu=function(n){var x=new vl(n.shape,El);return this.compileAndRun(x,[n])},x.prototype.int=function(n){var x=new vl(n.shape,"return float(int(x));");return this.compileAndRun(x,[n],"int32")},x.prototype.clip=function(n,x,t){var e,i=(e=Bi().getBool("WEBGL_PACK_CLIP")?new Fa(n.shape):new Na(n.shape)).getCustomSetupFunc(x,t);return this.compileAndRun(e,[n],null,i)},x.prototype.abs=function(n){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.abs(n);if(Bi().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(n,kl,n.dtype);var x=new vl(n.shape,kl);return this.compileAndRun(x,[n])},x.prototype.complexAbs=function(n){var x=this.texData.get(n.dataId),t=new Pa(n.shape),e=[this.makeComplexComponentTensorInfo(n,x.complexTensors.real),this.makeComplexComponentTensorInfo(n,x.complexTensors.imag)];return this.compileAndRun(t,e)},x.prototype.sigmoid=function(n){var x=new vl(n.shape,"return 1.0 / (1.0 + exp(-1.0 * x));");return this.compileAndRun(x,[n])},x.prototype.softplus=function(n){var x=new vl(n.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(x,[n])},x.prototype.sin=function(n){var x=new vl(n.shape,Tl);return this.compileAndRun(x,[n])},x.prototype.cos=function(n){var x=new vl(n.shape,Rl);return this.compileAndRun(x,[n])},x.prototype.tan=function(n){var x=new vl(n.shape,"return tan(x);");return this.compileAndRun(x,[n])},x.prototype.asin=function(n){var x=new vl(n.shape,Bl);return this.compileAndRun(x,[n])},x.prototype.acos=function(n){var x=new vl(n.shape,Ml);return this.compileAndRun(x,[n])},x.prototype.atan=function(n){var x=new vl(n.shape,Nl);return this.compileAndRun(x,[n])},x.prototype.atan2=function(n,x){var t=Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ma("\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",n.shape,x.shape):new Ra("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return atan(a, b);\n",n.shape,x.shape);return this.compileAndRun(t,[n,x])},x.prototype.sinh=function(n){var x=new vl(n.shape,"\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n");return this.compileAndRun(x,[n])},x.prototype.cosh=function(n){var x=new vl(n.shape,"\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n");return this.compileAndRun(x,[n])},x.prototype.tanh=function(n){var x=new vl(n.shape,"\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n");return this.compileAndRun(x,[n])},x.prototype.asinh=function(n){var x=new vl(n.shape,Fl);return this.compileAndRun(x,[n])},x.prototype.acosh=function(n){var x=new vl(n.shape,Pl);return this.compileAndRun(x,[n])},x.prototype.atanh=function(n){var x=new vl(n.shape,Ll);return this.compileAndRun(x,[n])},x.prototype.erf=function(n){var x=new vl(n.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(x,[n])},x.prototype.step=function(n,x){var t=new vl(n.shape,function(n){return void 0===n&&(n=0),jl+"\n return x > 0.0 ? 1.0 : float("+n+");\n "}(x));return this.compileAndRun(t,[n])},x.prototype.conv2dByMatMul=function(n,x,t,e,i,r){var o=n.shape,s=this.texData.get(n.dataId),h=t.inChannels,u=o[0]*o[1]*o[2],a=t.outChannels,g="channelsLast"===t.dataFormat,l=(1===u||1===a)&&h>1e3,c=o[2]%2!=0&&!!s.isPacked;if(l||!Bi().getBool("WEBGL_LAZILY_UNPACK")||!Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")||!c){var d=g?o[0]*o[1]*o[2]:o[0]*o[2]*o[3],f=this.reshape(n,[1,d,t.inChannels]),p=this.reshape(x,[1,t.inChannels,t.outChannels]);return this.reshape(this.fusedBatchMatMul({a:f,b:p,transposeA:!1,transposeB:!1,bias:e,activation:i,preluActivationWeights:r}),t.outShape)}var y=g?o[0]*o[1]*(o[2]+1):o[0]*o[2]*(o[3]+1),m={dataId:n.dataId,shape:[1,y,t.inChannels],dtype:n.dtype},b=s.shape;s.shape=s.shape.slice(),s.shape[s.shape.length-2]++,Ji(os(s.shape,m.shape),function(){return"packed reshape "+s.shape+" to "+m.shape+" isn't free"});var z=this.reshape(x,[1,t.inChannels,t.outChannels]),v=this.fusedBatchMatMul({a:m,b:z,transposeA:!1,transposeB:!1,bias:e,activation:i,preluActivationWeights:r}),j=this.texData.get(v.dataId);return Ji(j.isPacked,function(){return"batchMatMul result is expected to be packed"}),s.shape=b,j.shape=t.outShape,ao.makeTensorFromDataId(v.dataId,t.outShape,v.dtype)},x.prototype.conv2dWithIm2Row=function(n,x,t,e,i,r){var o=t.filterWidth,s=t.filterHeight,h=t.inChannels,u=t.outWidth,a=t.outHeight,g="channelsLast"===t.dataFormat,l=o*s*h,c=a*u,d=[l,c],f=n.squeeze([0]),p=x.reshape([1,l,-1]),y=new Mg(d,f.shape,t),m=this.compileAndRun(y,[f]).reshape([1,d[0],d[1]]),b=null!=e,z=null!=r,v=i?Jl(i,!0):null,j=new Ug(m.shape,[1,c,t.outChannels],!0,!1,b,v,z),w=[m,p];e&&w.push(e),z&&w.push(r);var k=this.compileAndRun(j,w);return g?k.reshape([1,a,u,t.outChannels]):k.reshape([1,t.outChannels,a,u])},x.prototype.fusedConv2d=function(n){var x=n.input,t=n.filter,e=n.convInfo,i=n.bias,r=n.activation,o=n.preluActivationWeights;if(1===e.filterHeight&&1===e.filterWidth&&1===e.dilationHeight&&1===e.dilationWidth&&1===e.strideHeight&&1===e.strideWidth&&("SAME"===e.padInfo.type||"VALID"===e.padInfo.type))return this.conv2dByMatMul(x,t,e,i,r,o);if(Bi().getBool("WEBGL_CONV_IM2COL")&&1===x.shape[0])return this.conv2dWithIm2Row(x,t,e,i,r,o);var s=null!=i,h=null!=o,u=r?Jl(r,!1):null,a=new Ja(e,s,u,h),g=[x,t];return i&&g.push(i),o&&g.push(o),this.compileAndRun(a,g)},x.prototype.conv2d=function(n,x,t){if(1===t.filterHeight&&1===t.filterWidth&&1===t.dilationHeight&&1===t.dilationWidth&&1===t.strideHeight&&1===t.strideWidth&&("SAME"===t.padInfo.type||"VALID"===t.padInfo.type))return this.conv2dByMatMul(n,x,t);if(Bi().getBool("WEBGL_CONV_IM2COL")&&1===n.shape[0])return this.conv2dWithIm2Row(n,x,t);var e=new Ja(t);return this.compileAndRun(e,[n,x])},x.prototype.conv2dDerInput=function(n,x,t){var e=new Wa(t);return this.compileAndRun(e,[n,x])},x.prototype.conv2dDerFilter=function(n,x,t){var e=new Va(t);return this.compileAndRun(e,[n,x])},x.prototype.fusedDepthwiseConv2D=function(n){var x,t=n.input,e=n.filter,i=n.convInfo,r=n.bias,o=n.activation,s=n.preluActivationWeights,h=Bi().getBool("WEBGL_PACK_DEPTHWISECONV")&&i.strideWidth<=2&&i.outChannels/i.inChannels==1,u=o?Jl(o,h):null,a=[t,e],g=null!=r,l=null!=s;return g&&a.push(r),l&&a.push(s),h?(x=new $a(i,g,u,l),this.compileAndRun(x,a)):(x=new Za(i,g,u,l),this.compileAndRun(x,a))},x.prototype.depthwiseConv2D=function(n,x,t){var e;return Bi().getBool("WEBGL_PACK_DEPTHWISECONV")&&t.strideWidth<=2&&t.outChannels/t.inChannels==1?(e=new $a(t),this.compileAndRun(e,[n,x])):(e=new Za(t),this.compileAndRun(e,[n,x]))},x.prototype.depthwiseConv2DDerInput=function(n,x,t){var e=new Ya(t);return this.compileAndRun(e,[n,x])},x.prototype.depthwiseConv2DDerFilter=function(n,x,t){var e=new Ka(t);return this.compileAndRun(e,[n,x])},x.prototype.conv3d=function(n,x,t){var e=new Xa(t);return this.compileAndRun(e,[n,x])},x.prototype.conv3dDerInput=function(n,x,t){var e=new Ga(t);return this.compileAndRun(e,[n,x])},x.prototype.conv3dDerFilter=function(n,x,t){var e=new Qa(t);return this.compileAndRun(e,[n,x])},x.prototype.maxPool=function(n,x){var t=new Yg(x,"max",!1);return this.compileAndRun(t,[n])},x.prototype.avgPool=function(n,x){var t=new Yg(x,"avg",!1);return this.compileAndRun(t,[n],"float32")},x.prototype.maxPoolBackprop=function(n,x,t,e){var i=new Yg(e,"max",!0),r=this.compileAndRun(i,[x]),o=new Lg(e),s=this.compileAndRun(o,[n,r],x.dtype);return r.dispose(),s},x.prototype.avgPoolBackprop=function(n,x,t){var e=new ka(t);return this.compileAndRun(e,[n],x.dtype)},x.prototype.cast=function(n,x){return Mu(n,x,this)},x.prototype.unstack=function(n,x){for(var t=n.shape[x],e=new Array(n.rank-1),i=0,r=0;r<n.rank;r++)r!==x&&(e[i++]=n.shape[r]);var o=new Array(n.rank).fill(0),s=n.shape.slice();s[x]=1;var h=new Array(t);for(r=0;r<h.length;r++)o[x]=r,h[r]=this.slice(n,o,s).reshape(e);return h},x.prototype.avgPool3d=function(n,x){var t=new Jg(x,"avg",!1);return this.compileAndRun(t,[n],"float32")},x.prototype.avgPool3dBackprop=function(n,x,t){var e=new qa(t);return this.compileAndRun(e,[n],x.dtype)},x.prototype.maxPool3d=function(n,x){var t=new Jg(x,"max",!1);return this.compileAndRun(t,[n],"float32")},x.prototype.maxPool3dBackprop=function(n,x,t,e){var i=new Jg(e,"max",!0),r=this.compileAndRun(i,[x]),o=new Hg(e),s=this.compileAndRun(o,[n,r],x.dtype);return r.dispose(),s},x.prototype.reshape=function(n,x){var t=this.texData.get(n.dataId);if(t.isPacked&&!os(n.shape,x)&&(null===t.texture||!os(t.shape,x))){var e=this.packedReshape(n,x);return ao.makeTensorFromDataId(e.dataId,e.shape,e.dtype)}return Nu(n,x)},x.prototype.resizeBilinear=function(n,x,t,e){var i=Bi().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new xl(n.shape,x,t,e):new nl(n.shape,x,t,e);return this.compileAndRun(i,[n],"float32")},x.prototype.resizeBilinearBackprop=function(n,x,t){var e=new $g(n,x,t);return this.compileAndRun(e,[n])},x.prototype.resizeNearestNeighbor=function(n,x,t,e){var i=new el(n.shape,x,t,e);return this.compileAndRun(i,[n])},x.prototype.resizeNearestNeighborBackprop=function(n,x,t){var e=new tl(n,x,t);return this.compileAndRun(e,[n])},x.prototype.multinomial=function(n,x,t,e){var i=x?n:yu(n),r=i.shape[0],o=i.shape[1],s=new Vg(r,o,t),h=s.getCustomSetupFunc(e);return this.compileAndRun(s,[i],"int32",h)},x.prototype.oneHot=function(n,x,t,e){var i=new Wg(n.size,x,t,e);return this.compileAndRun(i,[n])},x.prototype.diag=function(n){var x=new og(n.size);return this.compileAndRun(x,[n])},x.prototype.nonMaxSuppression=function(n,x,t,e,i){return js("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"),Qu(n.dataSync(),x.dataSync(),t,e,i)},x.prototype.cropAndResize=function(n,x,t,e,i,r){var o=new ng(n.shape,x.shape,e,i,r);return this.compileAndRun(o,[n,x,t],"float32")},x.prototype.depthToSpace=function(n,x,t){Ji(x>1,function(){return"blockSize should be > 1 for depthToSpace, but was: "+x});var e=n.shape[0],i="NHWC"===t?n.shape[1]:n.shape[2],r="NHWC"===t?n.shape[2]:n.shape[3],o="NHWC"===t?n.shape[3]:n.shape[1],s=i*x,h=r*x,u=o/(x*x),a=new rg("NHWC"===t?[e,s,h,u]:[e,u,s,h],x,t);return this.compileAndRun(a,[n])},x.prototype.split=function(n,x,t){return Zu(n,x,t)},x.prototype.scatterND=function(n,x,t){var e=su(0,n,t),i=e.sliceRank,r=e.numUpdates,o=e.sliceSize,s=e.strides,h=e.outputSize,u=[h/o,o],a=n.reshape([r,i]),g=x.reshape([r,o]);if(0===h)return Nu(Ls([]),t);var l=Us(0),c=new ol(r,i,a.rank,g.rank,s,u);return this.compileAndRun(c,[g,a,l]).reshape(t)},x.prototype.sparseToDense=function(n,x,t,e){var i=su(0,n,t),r=i.sliceRank,o=i.numUpdates,s=i.strides,h=i.outputSize,u=new ol(o,r,n.rank,x.rank,s,[h,1],!1);return this.compileAndRun(u,[x,n,e]).reshape(t)},x.prototype.fft=function(n){return this.fftImpl(n,!1)},x.prototype.ifft=function(n){return this.fftImpl(n,!0)},x.prototype.fftImpl=function(n,x){var t=this.texData.get(n.dataId),e=new cg(gg,n.shape,x),i=new cg(lg,n.shape,x),r=[this.makeComplexComponentTensorInfo(n,t.complexTensors.real),this.makeComplexComponentTensorInfo(n,t.complexTensors.imag)],o=this.compileAndRun(e,r),s=this.compileAndRun(i,r),h=this.complex(o,s).as2D(n.shape[0],n.shape[1]);return o.dispose(),s.dispose(),h},x.prototype.gatherND=function(n,x){var t=x.shape,e=t[t.length-1],i=tu(n,x),r=i[0],o=i[1],s=i[2],h=i[3],u=x.reshape([o,e]),a=n.reshape([n.size/s,s]),g=new pg(e,h,[o,s]);return this.compileAndRun(g,[a,u]).reshape(r)},x.prototype.fill=function(n,x,t){if("string"===(t=t||vr(x))){var e=gr(t,nr(n));return e.fill(x),ao.makeTensor(e,n,t,this)}var i=new dg(n,x),r=i.getCustomSetupFunc(x);return this.compileAndRun(i,[],t,r)},x.prototype.onesLike=function(n){if("string"===n.dtype)throw new Error("onesLike is not supported under string dtype");return this.fill(n.shape,1,n.dtype)},x.prototype.zerosLike=function(n){return this.fill(n.shape,"string"===n.dtype?"":0,n.dtype)},x.prototype.linspace=function(n,x,t){return Fu(n,x,t)},x.prototype.makeTensorInfo=function(n,x){var t=this.write(null,n,x);return this.texData.get(t).usage=null,{dataId:t,shape:n,dtype:x}},x.prototype.makeOutput=function(n,x){var t=this.makeTensorInfo(n,x).dataId;return ao.makeTensorFromDataId(t,n,x,this)},x.prototype.unpackTensor=function(n){var x=new Kl(n.shape);return this.runWebGLProgram(x,[n],n.dtype)},x.prototype.packTensor=function(n){var x=new Qg(n.shape);return this.runWebGLProgram(x,[n],n.dtype,null,!0)},x.prototype.packedReshape=function(n,x){var t=[xs(n.shape)].concat(ts(n.shape)),e={dtype:n.dtype,shape:t,dataId:n.dataId},i=[xs(x)].concat(ts(x)),r=new Zg(i,t),o=this.runWebGLProgram(r,[e],n.dtype,null,!0);return{dataId:o.dataId,shape:x,dtype:o.dtype}},x.prototype.decode=function(n){var x,t=this.texData.get(n),e=t.isPacked,i=t.shape,r=t.dtype,o=es(i);return x=e?new ig(o):new eg(o),{dtype:r,shape:i,dataId:this.runWebGLProgram(x,[{shape:o,dtype:r,dataId:n}],r,null,!0).dataId}},x.prototype.runWebGLProgram=function(n,x,t,e,i){var r=this;void 0===i&&(i=!1);var o=this.makeTensorInfo(n.outputShape,t),s=this.texData.get(o.dataId);if(n.packedOutput&&(s.isPacked=!0),n.outPackingScheme===co.DENSE){var h=jo(n.outputShape);s.texShape=h.map(function(n){return 2*n})}if(null!=n.outTexUsage&&(s.usage=n.outTexUsage),0===nr(o.shape))return s.values=ar(o.dtype,0),o;var u=[],a=x.map(function(x){if("complex64"===x.dtype)throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");var t=r.texData.get(x.dataId);if(null==t.texture){if(!n.packedInputs&&nr(x.shape)<=Bi().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:x.shape,texData:null,isUniform:!0,uniformValues:t.values};n.packedInputs&&(t.isPacked=!0,t.shape=x.shape)}else if(!!t.isPacked!=!!n.packedInputs)x=t.isPacked?r.unpackTensor(x):r.packTensor(x),u.push(x),t=r.texData.get(x.dataId);else if(t.isPacked&&!os(t.shape,x.shape)){var e=x,i=x.shape;x.shape=t.shape,x=r.packedReshape(x,i),u.push(x),t=r.texData.get(x.dataId),e.shape=i}return r.uploadToGPU(x.dataId),{shape:x.shape,texData:t,isUniform:!1}});this.uploadToGPU(o.dataId);var g,l={shape:o.shape,texData:s,isUniform:!1},c=function(n,x,t){var e="";x.concat(t).forEach(function(n){var x=null!=n.texData&&null!=n.texData.slice&&n.texData.slice.flatOffset>0,t=n.isUniform?"uniform":n.texData.texShape;e+=n.shape+"_"+t+"_"+x});var i=n.userCode,r=n.constructor.name;return r+"_"+e+"_"+i}(n,a,l),d=this.getAndSaveBinary(c,function(){return function(n,x,t,e){var i=x.userCode,r=t.map(function(n,t){var e={logicalShape:n.shape,texShape:n.isUniform?null:n.texData.texShape,isUniform:n.isUniform,isPacked:!n.isUniform&&n.texData.isPacked,flatOffset:null};return null!=n.texData&&null!=n.texData.slice&&n.texData.slice.flatOffset>0&&(e.flatOffset=n.texData.slice.flatOffset),{name:x.variableNames[t],shapeInfo:e}}),o=r.map(function(n){return n.shapeInfo}),s={logicalShape:e.shape,texShape:e.texData.texShape,isUniform:!1,isPacked:e.texData.isPacked,flatOffset:null},h=ga(r,s,i,x.packedInputs),u=n.createProgram(h),a=null,g=n.getUniformLocation(u,"NAN",!1);1===Bi().getNumber("WEBGL_VERSION")&&(a=n.getUniformLocation(u,"INFINITY",!1));for(var l={},c=0;c<x.variableNames.length;c++){var d=x.variableNames[c];l[d]=n.getUniformLocation(u,d,!1),l["offset"+d]=n.getUniformLocation(u,"offset"+d,!1)}return{program:x,source:h,webGLProgram:u,uniformLocations:l,inShapeInfos:o,outShapeInfo:s,infLoc:a,nanLoc:g}}(r.gpgpu,n,a,l)}),f=null!=this.activeTimers;if(f&&(g=this.startTimer()),function(n,x,t,e,i){Bg(x.inShapeInfos,t),Bg([x.outShapeInfo],[e]);var r=e.texData.texture,o=e.texData.texShape;e.texData.isPacked?n.setOutputPackedMatrixTexture(r,o[0],o[1]):n.setOutputMatrixTexture(r,o[0],o[1]),n.setProgram(x.webGLProgram),1===Bi().getNumber("WEBGL_VERSION")&&null!==x.infLoc&&n.gl.uniform1f(x.infLoc,1/0),null!==x.nanLoc&&n.gl.uniform1f(x.nanLoc,NaN),t.forEach(function(t,e){var i=x.program.variableNames[e],r=x.uniformLocations[i],o=x.uniformLocations["offset"+i];if(null!=r)if(t.isUniform)if(nr(t.shape)<2)n.gl.uniform1f(r,t.uniformValues[0]);else{var s=t.uniformValues;s instanceof Float32Array||(s=new Float32Array(s)),n.gl.uniform1fv(r,s)}else null!=t.texData.slice&&null!=o&&n.gl.uniform1i(o,t.texData.slice.flatOffset),n.setInputMatrixTexture(t.texData.texture,r,e)}),null!=i&&i(n,x.webGLProgram),n.executeProgram()}(this.gpgpu,d,a,l,e),u.forEach(function(n){return r.disposeData(n.dataId)}),f&&(g=this.endTimer(g),this.activeTimers.push({name:n.constructor.name,query:this.getQueryTime(g)})),!Bi().getBool("WEBGL_LAZILY_UNPACK")&&s.isPacked&&!1===i){var p=this.unpackTensor(o);return this.disposeData(o.dataId),p}return o},x.prototype.compileAndRun=function(n,x,t,e,i){void 0===i&&(i=!1),t=t||x[0].dtype;var r=this.runWebGLProgram(n,x,t,e,i);return ao.makeTensorFromDataId(r.dataId,r.shape,r.dtype)},x.prototype.getAndSaveBinary=function(n,x){return n in this.binaryCache||(this.binaryCache[n]=x()),this.binaryCache[n]},x.prototype.getTextureManager=function(){return this.textureManager},x.prototype.dispose=function(){var n=this;this.disposed||(Bi().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(function(x){n.gpgpu.deleteProgram(n.binaryCache[x].webGLProgram),delete n.binaryCache[x]}),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)},x.prototype.floatPrecision=function(){var n=this;return null==this.floatPrecisionValue&&(this.floatPrecisionValue=bs(function(){if(!Bi().get("WEBGL_RENDER_FLOAT32_ENABLED")){var x=Bi().getBool("DEBUG");Bi().set("DEBUG",!1);var t=n.abs(Us(1e-8)).dataSync()[0];if(Bi().set("DEBUG",x),t>0)return 32}return 16})),this.floatPrecisionValue},x.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},x.prototype.uploadToGPU=function(n){var x,t=this.texData.get(n),e=t.shape,i=t.dtype,r=t.values,o=t.texture,s=t.usage,h=t.isPacked;if(null==o){var u,a=null!=this.activeTimers;a&&(u=Sr());var g=t.texShape;if(null==g&&(g=is(e,h),t.texShape=g),null!=r){var l=es(e),c=void 0,d=g[1],f=g[0],p=r instanceof Uint8Array;h?(d=(x=wo(g[0],g[1]))[0],f=x[1],c=new ag(l,[f,d],p)):c=new ug(l,[f,d],p);var y=this.makeTensorInfo([f,d],i);this.texData.get(y.dataId).usage=p?fo.PIXELS:fo.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(y.dataId),d,f,r);var m=this.runWebGLProgram(c,[y],i,null,!0),b=this.texData.get(m.dataId);t.texture=b.texture,t.texShape=b.texShape,t.isPacked=b.isPacked,t.usage=b.usage,this.disposeData(y.dataId),this.texData.delete(m.dataId),t.values=null,a&&(this.uploadWaitMs+=Sr()-u)}else{var z=this.acquireTexture(g,s,i,h);t.texture=z}}},x.prototype.convertAndCacheOnCPU=function(n,x){var t=this.texData.get(n),e=t.dtype;return this.releaseGPUData(n),null!=x&&(t.values=function(n,x){if("float32"===x||"complex64"===x)return n;if("int32"===x||"bool"===x){for(var t="int32"===x?new Int32Array(n.length):new Uint8Array(n.length),e=0;e<t.length;++e)t[e]=Math.round(n[e]);return t}throw new Error("Unknown dtype "+x)}(x,e)),t.values},x.prototype.acquireTexture=function(n,x,t,e){if(this.numBytesInGPU+=this.computeBytes(n,t),!this.warnedAboutMemory&&this.numBytesInGPU>1024*this.numMBBeforeWarning*1024){var i=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn("High memory usage in GPU: "+i+" MB, most likely due to a memory leak")}return this.textureManager.acquireTexture(n,x,e)},x.prototype.computeBytes=function(n,x){return n[0]*n[1]*pr(x)},x}(zu);go()&&ao.registerBackend("webgl",function(){return new Zl},2);var $l=Ms({square_:function(n){var x=qs(n,"x","square"),t=[x];return ao.runKernelFunc(function(n,t){return t([x]),n.square(x)},{x:x},null,"Square",{},t,[])}}),nc="SquaredDifference",xc=Ms({squaredDifference_:function(n,x){var t,e=qs(n,"a","squaredDifference"),i=qs(x,"b","squaredDifference");t=io(e,i),e=t[0],i=t[1],ku(e.shape,i.shape);var r={a:e,b:i},o=[e,i];return ao.runKernelFunc(function(n,x){var t=n.squaredDifference(e,i);return x([e,i]),t},r,function(n,x){var t=x[0],e=x[1],i=Us(2);return{a:function(){return n.mul(t.sub(e).mul(i))},b:function(){return n.mul(e.sub(t).mul(i))}}},nc,{},o,[])}}),tc=Ms({abs_:function(n){var x=qs(n,"x","abs");return"complex64"===x.dtype?ao.runKernelFunc(function(n){return n.complexAbs(x)},{$x:x}):ao.runKernelFunc(function(n,t){var e=n.abs(x);return t([x]),e},{x:x},function(n,x){var t=x[0];return{x:function(){return n.mul(t.toFloat().step(-1))}}},"Abs")}}),ec=Ms({acos_:function(n){var x=qs(n,"x","acos");return ao.runKernelFunc(function(n,t){var e=n.acos(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.divStrict(Us(1).sub(t.toFloat().square()).sqrt()).neg()}}})}}),ic=Ms({acosh_:function(n){var x=qs(n,"x","acosh");return ao.runKernelFunc(function(n,t){var e=n.acosh(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.divStrict(t.toFloat().square().sub(1).sqrt())}}})}}),rc=Ms({asin_:function(n){var x=qs(n,"x","asin");return ao.runKernelFunc(function(n,t){var e=n.asin(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.divStrict(Us(1).sub(t.toFloat().square()).sqrt())}}})}}),oc=Ms({asinh_:function(n){var x=qs(n,"x","asinh");return ao.runKernelFunc(function(n,t){var e=n.asinh(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.divStrict(Us(1).add(t.toFloat().square()).sqrt())}}})}}),sc=Ms({atan_:function(n){var x=qs(n,"x","atan");return ao.runKernelFunc(function(n,t){var e=n.atan(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.div(t.toFloat().square().add(1))}}})}}),hc=Ms({atanh_:function(n){var x=qs(n,"x","atanh");return ao.runKernelFunc(function(n,t){var e=n.atanh(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.div(Us(1).sub(t.toFloat().square()))}}})}}),uc=Ms({ceil_:function(n){var x=qs(n,"x","ceil");return ao.runKernelFunc(function(n){return n.ceil(x)},{$x:x},function(n){return{$x:function(){return eh(n)}}})}}),ac=Ms({clipByValue_:function(n,x,t){var e=qs(n,"x","clipByValue");Ji(x<=t,function(){return"Error in clip: min ("+x+") must be less than or equal to max ("+t+")."});var i=[e],r={min:x,max:t};return ao.runKernelFunc(function(n,i){var r=n.clip(e,x,t);return i([e]),r},{x:e},function(n,e){var i=e[0];return{x:function(){return n.where(i.greaterEqual(x).logicalAnd(i.lessEqual(t)),eh(n))}}},"ClipByValue",r,i)}}),gc=Ms({cos_:function(n){var x=qs(n,"x","cos"),t=[x];return ao.runKernelFunc(function(n,t){var e=n.cos(x);return t([x]),e},{x:x},function(n,x){var t=x[0];return{x:function(){return t.toFloat().sin().neg().mul(n)}}},"Cos",{},t)}}),lc=Ms({cosh_:function(n){var x=qs(n,"x","cosh");return ao.runKernelFunc(function(n,t){var e=n.cosh(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return t.toFloat().sinh().mulStrict(n)}}})}}),cc=Ms({erf_:function(n){var x=qs(n,"x","erf");return Ji("int32"===x.dtype||"float32"===x.dtype,function(){return"Input dtype must be `int32` or `float32`."}),"int32"===x.dtype&&(x=x.toFloat()),ao.runKernelFunc(function(n,t){var e=n.erf(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.mul(t.square().neg().exp().mul(2/Math.sqrt(Math.PI)))}}})}}),dc=Ms({exp_:function(n){var x=qs(n,"x","exp");return ao.runKernelFunc(function(n,t){var e=n.exp(x);return t([e]),e},{x:x},function(n,x){return{x:function(){return n.mulStrict(x[0])}}},"Exp",{},[],[!0])}}),fc=Ms({expm1_:function(n){var x=qs(n,"x","expm1");return ao.runKernelFunc(function(n,t){var e=n.expm1(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.mul(t.exp())}}})}}),pc=Ms({floor_:function(n){var x=qs(n,"x","floor");return ao.runKernelFunc(function(n){return n.floor(x)},{$x:x},function(n){return{$x:function(){return eh(n)}}})}}),yc=Ms({log_:function(n){var x=qs(n,"x","log"),t=[x];return ao.runKernelFunc(function(n,t){var e=n.log(x);return t([x]),e},{x:x},function(n,x){var t=x[0];return{x:function(){return n.div(t.toFloat())}}},"Log",{},t)}}),mc=Ms({log1p_:function(n){var x=qs(n,"x","log1p");return ao.runKernelFunc(function(n,t){var e=n.log1p(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.div(t.add(1))}}})}}),bc=Ms({logSigmoid_:function(n){var x=qs(n,"x","logSigmoid");return ao.runKernelFunc(function(n,t){var e=n.softplus(x.neg()).neg();return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.mul(t.neg().sigmoid())}}})}}),zc=Ms({neg_:function(n){var x=qs(n,"x","neg"),t=[x];return ao.runKernelFunc(function(n){return n.neg(x)},{x:x},function(n){return{x:function(){return n.neg()}}},"Neg",{},t)}}),vc=Ms({reciprocal_:function(n){var x=qs(n,"x","reciprocal");return ao.runKernelFunc(function(n,t){var e=n.reciprocal(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.div(t.square().neg())}}})}}),jc=Ms({round_:function(n){var x=qs(n,"x","round");return ao.runKernelFunc(function(n){return n.round(x)},{$x:x},function(n){return{$x:function(){return eh(n)}}})}}),wc=Ms({rsqrt_:function(n){var x=qs(n,"x","rsqrt"),t=[x];return ao.runKernelFunc(function(n,t){var e=n.rsqrt(x);return t([x]),e},{x:x},function(n,x){var t=x[0];return{x:function(){return n.div(t.pow(1.5).mul(2)).neg()}}},"Rsqrt",{},t)}}),kc=Ms({sigmoid_:function(n){var x=qs(n,"x","sigmoid");return ao.runKernelFunc(function(n,t){var e=n.sigmoid(x);return t([e]),e},{x:x},function(n,x){var t=x[0];return{x:function(){return n.mul(t.mul(Us(1).sub(t)))}}},"Sigmoid")}}),qc=Ms({sign_:function(n){var x=qs(n,"x","sign");return ao.runKernelFunc(function(n){return n.sign(x)},{$x:x},function(n){return{$x:function(){return eh(n)}}})}}),Cc=Ms({isNaN_:function(n){var x=qs(n,"x","isNaN");return ao.runKernelFunc(function(n){return n.isNaN(x)},{$x:x},function(n){return{$x:function(){return eh(n)}}})}}),Ac=Ms({isInf_:function(n){var x=qs(n,"x","isInf");return ao.runKernelFunc(function(n){return n.isInf(x)},{$x:x},function(n){return{$x:function(){return eh(n)}}})}}),Ec=Ms({isFinite_:function(n){var x=qs(n,"x","isFinite");return ao.runKernelFunc(function(n){return n.isFinite(x)},{$x:x},function(n){return{$x:function(){return eh(n)}}})}}),Sc=Ms({sin_:function(n){var x=qs(n,"x","sin"),t=[x];return ao.runKernelFunc(function(n,t){var e=n.sin(x);return t([x]),e},{x:x},function(n,x){var t=x[0];return{x:function(){return t.toFloat().cos().mul(n)}}},"Sin",{},t)}}),Ic=Ms({sinh_:function(n){var x=qs(n,"x","sinh");return ao.runKernelFunc(function(n,t){var e=n.sinh(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return t.toFloat().cosh().mulStrict(n)}}})}}),Dc=Ms({softplus_:function(n){var x=qs(n,"x","softplus");return ao.runKernelFunc(function(n,t){var e=n.softplus(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.mul(t.sigmoid())}}})}}),Oc=Ms({sqrt_:function(n){var x=qs(n,"x","sqrt");return ao.runKernelFunc(function(n,t){var e=n.sqrt(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.div(t.toFloat().sqrt().mul(2))}}})}}),_c=Ms({step_:function(n,x){void 0===x&&(x=0);var t=qs(n,"x","step");return ao.runKernelFunc(function(n){return n.step(t,x)},{$x:t},function(n){return{$x:function(){return eh(n)}}})}}),Tc=Ms({tan_:function(n){var x=qs(n,"x","tan");return ao.runKernelFunc(function(n,t){var e=n.tan(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.div(t.cos().square())}}})}}),Rc=Ms({tanh_:function(n){var x=qs(n,"x","tanh");return ao.runKernelFunc(function(n,t){var e=n.tanh(x);return t([e]),e},{x:x},function(n,x){var t=x[0];return{x:function(){return Us(1).sub(t.square()).mulStrict(n)}}},"Tanh",{},null,[!0])}});function Bc(n,x,t,e,i,r){var o,s,h=qs(n,"x","batchNorm"),u=qs(x,"mean","batchNorm"),a=qs(t,"variance","batchNorm");return null!=i&&(o=qs(i,"scale","batchNorm")),null!=e&&(s=qs(e,"offset","batchNorm")),Ji(2===h.rank,function(){return"Error in batchNorm3D: x must be rank 3 but got rank "+h.rank+"."}),Ji(2===u.rank||1===u.rank,function(){return"Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank "+u.rank+"."}),Ji(2===a.rank||1===a.rank,function(){return"Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank "+a.rank+"."}),null!=o&&Ji(2===o.rank||1===o.rank,function(){return"Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank "+o.rank+"."}),null!=s&&Ji(2===s.rank||1===s.rank,function(){return"Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank "+s.rank+"."}),Fc(h,u,a,s,o,r)}function Mc(n,x,t,e,i,r){var o,s,h=qs(n,"x","batchNorm"),u=qs(x,"mean","batchNorm"),a=qs(t,"variance","batchNorm");return null!=i&&(o=qs(i,"scale","batchNorm")),null!=e&&(s=qs(e,"offset","batchNorm")),Ji(3===h.rank,function(){return"Error in batchNorm3D: x must be rank 3 but got rank "+h.rank+"."}),Ji(3===u.rank||1===u.rank,function(){return"Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank "+u.rank+"."}),Ji(3===a.rank||1===a.rank,function(){return"Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank "+a.rank+"."}),null!=o&&Ji(3===o.rank||1===o.rank,function(){return"Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank "+o.rank+"."}),null!=s&&Ji(3===s.rank||1===s.rank,function(){return"Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank "+s.rank+"."}),Fc(h,u,a,s,o,r)}function Nc(n,x,t,e,i,r){var o,s,h=qs(n,"x","batchNorm"),u=qs(x,"mean","batchNorm"),a=qs(t,"variance","batchNorm");return null!=i&&(o=qs(i,"scale","batchNorm")),null!=e&&(s=qs(e,"offset","batchNorm")),Ji(4===h.rank,function(){return"Error in batchNorm4D: x must be rank 4 but got rank "+h.rank+"."}),Ji(4===u.rank||1===u.rank,function(){return"Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank "+u.rank+"."}),Ji(4===a.rank||1===a.rank,function(){return"Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank "+a.rank+"."}),null!=o&&Ji(4===o.rank||1===o.rank,function(){return"Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank "+o.rank+"."}),null!=s&&Ji(4===s.rank||1===s.rank,function(){return"Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank "+s.rank+"."}),Fc(h,u,a,s,o,r)}function Fc(n,x,t,e,i,r){null==r&&(r=.001);var o,s,h,u=qs(n,"x","batchNorm"),a=qs(x,"mean","batchNorm"),g=qs(t,"variance","batchNorm");null!=i&&(o=qs(i,"scale","batchNorm")),null!=e&&(s=qs(e,"offset","batchNorm")),Ji(a.rank===g.rank,function(){return"Batch normalization gradient requires mean and variance to have equal ranks."}),Ji(null==s||a.rank===s.rank,function(){return"Batch normalization gradient requires mean and offset to have equal ranks."}),Ji(null==o||a.rank===o.rank,function(){return"Batch normalization gradient requires mean and scale to have equal ranks."}),h=0===u.rank||1===u.rank?u.as4D(1,1,1,u.size):2===u.rank?u.as4D(1,1,u.shape[0],u.shape[1]):3===u.rank?u.as4D(1,u.shape[0],u.shape[1],u.shape[2]):u;var l=[u,a,g,o];return ao.runKernelFunc(function(n,x){var t=n.batchNormalization(h,Pc(a),Pc(g),r,Pc(o),Pc(s));return x([u,a,g,o]),t},{x:u,mean:a,variance:g,scale:o,offset:s},function(n,x){var t=x,e=t[0],i=t[1],o=t[2],s=t[3],u=null==s?Us(1):s,a=wu(i.shape,h.shape),g=[];if(1===i.rank){for(var l=0;l<h.shape.length-1;++l)g.push(h.shape[l]);g.push(1)}var c=e.sub(i),d=n.mul(u),f=wc(o.add(Us(r))),p=f.mul(f).mul(f).mul(Us(-.5));return{x:function(){return 1===i.rank?n.mul(Gh(f.as4D(1,1,1,i.shape[0]),g)).mul(u).reshape(e.shape):n.mul(f).mul(u).reshape(e.shape)},mean:function(){var n=f.mul(Us(-1)).mul(d);return 1===i.rank&&(n=n.sum(a)),n.reshape(i.shape)},variance:function(){var n=p.mul(c).mul(d);return 1===i.rank&&(n=n.sum(a)),n.reshape(i.shape)},scale:function(){var x=c.mul(f),t=n.mul(x);return 1===i.rank&&(t=t.sum(a)),t.reshape(i.shape)},offset:function(){var x=n;return 1===i.rank&&(x=x.sum(a)),x.reshape(i.shape)}}},"BatchNormalization",{varianceEpsilon:r},l).reshape(u.shape)}function Pc(n){return null==n?null:0===n.rank?n.as1D():1===n.rank?n:2===n.rank?n.as4D(1,1,n.shape[0],n.shape[1]):3===n.rank?n.as4D(1,n.shape[0],n.shape[1],n.shape[2]):n}function Lc(){ms("tf.batchNormalization() is going away. Use tf.batchNorm() instead, and note the positional argument change of scale, offset, and varianceEpsilon")}var Hc=Ms({batchNormalization2d_:function(n,x,t,e,i,r){return void 0===e&&(e=.001),Lc(),Bc(n,x,t,r,i,e)}}),Uc=Ms({batchNormalization3d_:function(n,x,t,e,i,r){return void 0===e&&(e=.001),Lc(),Mc(n,x,t,r,i,e)}}),Vc=Ms({batchNormalization4d_:function(n,x,t,e,i,r){return void 0===e&&(e=.001),Lc(),Nc(n,x,t,r,i,e)}}),Wc=Ms({batchNormalization_:function(n,x,t,e,i,r){return void 0===e&&(e=.001),Lc(),Fc(n,x,t,r,i,e)}}),Qc=Ms({batchNorm_:Fc}),Gc=Ms({batchNorm2d_:Bc}),Kc=Ms({batchNorm3d_:Mc}),Yc=Ms({batchNorm4d_:Nc}),Jc=Ms({logicalAnd_:function(n,x){var t=qs(n,"a","logicalAnd","bool"),e=qs(x,"b","logicalAnd","bool");return ku(t.shape,e.shape),ao.runKernelFunc(function(n){return n.logicalAnd(t,e)},{a:t,b:e},null,"LogicalAnd")}}),Xc=Ms({logicalNot_:function(n){var x=qs(n,"x","logicalNot","bool");return ao.runKernelFunc(function(n){return n.logicalNot(x)},{$x:x})}}),Zc=Ms({logicalOr_:function(n,x){var t=qs(n,"a","logicalOr","bool"),e=qs(x,"b","logicalOr","bool");return ku(t.shape,e.shape),ao.runKernelFunc(function(n){return n.logicalOr(t,e)},{$a:t,$b:e})}}),$c=Ms({logicalXor_:function(n,x){var t=qs(n,"a","logicalXor","bool"),e=qs(x,"b","logicalXor","bool");return ku(t.shape,e.shape),Zc(n,x).logicalAnd(Jc(n,x).logicalNot())}}),nd=Ms({where_:function(n,x,t){var e=qs(x,"a","where"),i=qs(t,"b","where"),r=qs(n,"condition","where","bool");return Xi(e.shape,i.shape,"Error in where: "),1===r.rank?Ji(r.shape[0]===e.shape[0],function(){return"The first dimension of `a` must match the size of `condition`."}):Xi(r.shape,i.shape,"Error in where: "),ao.runKernelFunc(function(n,x){var t=n.select(r,e,i);return x([r]),t},{$condition:r,$a:e,$b:i},function(n,x){var t=x[0];return{$condition:function(){return eh(t).toFloat()},$a:function(){return n.mul(t.cast(n.dtype))},$b:function(){return n.mul(t.logicalNot().cast(n.dtype))}}})}}),xd=function(n){return Oi(this,void 0,void 0,function(){var x,t,e;return _i(this,function(i){switch(i.label){case 0:return[4,(x=qs(n,"condition","whereAsync","bool")).data()];case 1:return t=i.sent(),e=xa(x.shape,t),n!==x&&x.dispose(),[2,e]}})})},td=Ms({add_:function(n,x){var t,e=qs(n,"a","add"),i=qs(x,"b","add");t=io(e,i),e=t[0],i=t[1];var r=ku(e.shape,i.shape);return ao.runKernelFunc(function(n){return n.add(e,i)},{a:e,b:i},function(n){return{a:function(){var x=n,t=wu(e.shape,r);return t.length>0&&(x=x.sum(t)),x.reshape(e.shape)},b:function(){var x=n,t=wu(i.shape,r);return t.length>0&&(x=x.sum(t)),x.reshape(i.shape)}}},"Add")}}),ed=Ms({addN_:function(n){Ji(Array.isArray(n),function(){return"The argument passed to tf.addN() must be a list of tensors"}),Ji(n.length>=1,function(){return"Must pass at least one tensor to tf.addN(), but got "+n.length});var x=n.map(function(n,x){return qs(n,"tensors"+x,"addN")}),t=x[0];x.forEach(function(n){if(n.dtype!==t.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),x.forEach(function(n){if(!xr(n.shape,t.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});var e=x;return ao.runKernelFunc(function(n){return n.addN(x)},e,function(n){var t={};return x.forEach(function(x,e){t[e]=function(){return n.clone()}}),t},"AddN")}}),id=Ms({addStrict_:function(n,x){var t=qs(n,"a","addStrict"),e=qs(x,"b","addStrict");return Xi(t.shape,e.shape,"Error in addStrict: "),t.add(e)}}),rd=Ms({atan2_:function(n,x){var t,e=qs(n,"a","atan2"),i=qs(x,"b","atan2");t=io(e,i),e=t[0],i=t[1];var r=ku(e.shape,i.shape);return ao.runKernelFunc(function(n,x){var t=n.atan2(e,i);return x([e,i]),t},{$a:e,$b:i},function(n,x){var t=x[0],e=x[1];return{$a:function(){var x=td(t.square(),e.square()),i=n.mul(e.div(x)),o=wu(t.shape,r);return o.length>0&&(i=i.sum(o)),i.reshape(t.shape)},$b:function(){var x=td(t.square(),e.square()),i=zc(n.mul(t.div(x))),o=wu(e.shape,r);return o.length>0&&(i=i.sum(o)),i.reshape(e.shape)}}})}}),od=Ms({div_:function(n,x){var t,e=qs(n,"a","div"),i=qs(x,"b","div");if(t=io(e,i),e=t[0],i=t[1],"int32"===e.dtype&&"int32"===i.dtype)return ud(e,i);var r=ku(e.shape,i.shape);return ao.runKernelFunc(function(n,x){var t=n.realDivide(e,i);return x([e,i]),t},{a:e,b:i},function(n,x){var t=x[0],e=x[1];return{a:function(){var x=n.div(e.toFloat()),i=wu(t.shape,r);return i.length>0?x.sum(i).reshape(t.shape):x},b:function(){var x=n.mul(t.toFloat()),i=wu(e.shape,r);i.length>0&&(x=x.sum(i).reshape(e.shape));var o=e.square();return x.div(o.toFloat()).neg()}}},"Div")}}),sd=Ms({divNoNan_:function(n,x){var t,e=qs(n,"a","div"),i=qs(x,"b","div");e=(t=io(e,i))[0],i=t[1];var r=od(e,i),o=eh(r),s=i.equal(o);return nd(s,o,r)}}),hd=Ms({divStrict_:function(n,x){var t=qs(n,"a","div"),e=qs(x,"b","div");return Xi(t.shape,e.shape,"Error in divideStrict: "),t.div(e)}}),ud=Ms({floorDiv_:function(n,x){var t,e=qs(n,"a","floorDiv"),i=qs(x,"b","floorDiv");t=io(e,i),e=t[0],i=t[1];var r=ku(e.shape,i.shape);return ao.runKernelFunc(function(n,x){var t=n.floorDiv(e,i);return x([e,i]),t},{a:e,b:i},function(n,x){var t=x[0],e=x[1];return{a:function(){var x=n.div(e.toFloat()),i=wu(t.shape,r);return i.length>0?x.sum(i).reshape(t.shape):x},b:function(){var x=n.mul(t.toFloat()),i=wu(e.shape,r);i.length>0&&(x=x.sum(i).reshape(e.shape));var o=e.square();return x.div(o.toFloat()).neg()}}},"FloorDiv")}}),ad=Ms({maximum_:function(n,x){var t,e=qs(n,"a","maximum"),i=qs(x,"b","maximum");return t=io(e,i),e=t[0],i=t[1],"bool"===e.dtype&&(e=e.toInt(),i=i.toInt()),ku(e.shape,i.shape),ao.runKernelFunc(function(n,x){var t=n.maximum(e,i);return x([e,i]),t},{a:e,b:i},function(n,x){var t=x[0],e=x[1];return{a:function(){return n.mul(t.greaterEqual(e).toFloat())},b:function(){return n.mul(t.less(e).toFloat())}}},"Maximum")}}),gd=Ms({maximumStrict_:function(n,x){var t=qs(n,"a","maximumStrict"),e=qs(x,"b","maximumStrict");return Xi(t.shape,e.shape,"Error in maximumStrict: "),t.maximum(e)}}),ld=Ms({minimum_:function(n,x){var t,e=qs(n,"a","minimum"),i=qs(x,"b","minimum");return t=io(e,i),e=t[0],i=t[1],"bool"===e.dtype&&(e=e.toInt(),i=i.toInt()),ku(e.shape,i.shape),ao.runKernelFunc(function(n,x){var t=n.minimum(e,i);return x([e,i]),t},{a:e,b:i},function(n,x){var t=x[0],e=x[1];return{a:function(){return n.mul(t.lessEqual(e).toFloat())},b:function(){return n.mul(t.greater(e).toFloat())}}},"Minimum")}}),cd=Ms({minimumStrict_:function(n,x){var t=qs(n,"a","minimumStrict"),e=qs(x,"b","minimumStrict");return Xi(t.shape,e.shape,"Error in minimumStrict: "),t.minimum(e)}}),dd=Ms({mod_:function(n,x){var t,e=qs(n,"a","mod"),i=qs(x,"b","mod");t=io(e,i),e=t[0],i=t[1];var r=ku(e.shape,i.shape);return ao.runKernelFunc(function(n,x){var t=n.mod(e,i);return x([e,i]),t},{$a:e,$b:i},function(n,x){var t=x[0],e=x[1];return{$a:function(){var x=wu(t.shape,r);return x.length>0?n.sum(x).reshape(t.shape):n},$b:function(){var x=n.mul(t.div(e).floor().neg()),i=wu(e.shape,r);return i.length>0?x.sum(i).reshape(e.shape):x}}})}}),fd=Ms({modStrict_:function(n,x){var t=qs(n,"a","modStrict"),e=qs(x,"b","modStrict");return Xi(t.shape,e.shape,"Error in modStrict: "),t.mod(e)}}),pd=Ms({mul_:function(n,x){var t,e=qs(n,"a","mul"),i=qs(x,"b","mul");t=io(e,i),e=t[0],i=t[1];var r=ku(e.shape,i.shape);return ao.runKernelFunc(function(n,x){var t=n.multiply(e,i);return x([e,i]),t},{a:e,b:i},function(n,x){var t=x[0],e=x[1];return{a:function(){var x=n.mul(e.toFloat()),i=wu(t.shape,r);return i.length>0?x.sum(i).reshape(t.shape):x},b:function(){var x=n.mul(t.toFloat()),i=wu(e.shape,r);return i.length>0?x.sum(i).reshape(e.shape):x}}},"Mul")}}),yd=Ms({mulStrict_:function(n,x){var t=qs(n,"a","mul"),e=qs(x,"b","mul");return Xi(t.shape,e.shape,"Error in multiplyStrict: "),t.mul(e)}}),md=Ms({pow_:function(n,x){var t,e=qs(n,"base","pow"),i=qs(x,"exp","pow");t=io(e,i),e=t[0],i=t[1];var r=ku(e.shape,i.shape),o=[e,i];return ao.runKernelFunc(function(n,x){var t=n.pow(e,i);return x([e,i,t]),t},{a:e,b:i},function(n,x){var t=x[0],e=x[1],i=x[2];return{a:function(){var x=e.toFloat(),i=n.mul(x.mul(t.pow(x.sub(Us(1))))),o=wu(t.shape,r);return o.length>0&&(i=i.sum(o)),i.reshape(t.shape)},b:function(){var x=t.greater(0),o=t.log().where(x,eh(t)),s=n.mul(i.mul(o)),h=wu(e.shape,r);return h.length>0&&(s=s.sum(h)),s.reshape(e.shape)}}},"Pow",{},o,[!0])}}),bd=Ms({powStrict_:function(n,x){return Xi(n.shape,x.shape,"Error in powStrict: "),n.pow(x)}}),zd=Ms({squaredDifferenceStrict_:function(n,x){var t=qs(n,"a","squaredDifferenceStrict"),e=qs(x,"b","squaredDifferenceStrict");return Xi(t.shape,e.shape,"Error in squaredDifferenceStrict: "),t.squaredDifference(e)}}),vd=Ms({sub_:function(n,x){var t,e=qs(n,"a","sub"),i=qs(x,"b","sub");t=io(e,i),e=t[0],i=t[1];var r=ku(e.shape,i.shape);return ao.runKernelFunc(function(n){return n.subtract(e,i)},{a:e,b:i},function(n){return{a:function(){var x=n,t=wu(e.shape,r);return t.length>0&&(x=x.sum(t)),x.reshape(e.shape)},b:function(){var x=n,t=wu(i.shape,r);return t.length>0&&(x=x.sum(t)),x.neg().reshape(i.shape)}}},"Sub")}}),jd=Ms({subStrict_:function(n,x){var t=qs(n,"a","subStrict"),e=qs(x,"b","subStrict");return Xi(t.shape,e.shape,"Error in subStrict: "),t.sub(e)}}),wd=Ms({equal_:function(n,x){var t,e=qs(n,"a","equal"),i=qs(x,"b","equal");return t=io(e,i),e=t[0],i=t[1],ku(e.shape,i.shape),ao.runKernelFunc(function(n){return n.equal(e,i)},{$a:e,$b:i})}}),kd=Ms({equalStrict_:function(n,x){var t=qs(n,"a","equalStrict"),e=qs(x,"b","equalStrict");return Xi(t.shape,e.shape,"Error in equalStrict: "),t.equal(e)}}),qd=Ms({greater_:function(n,x){var t,e=qs(n,"a","greater"),i=qs(x,"b","greater");return t=io(e,i),e=t[0],i=t[1],ku(e.shape,i.shape),ao.runKernelFunc(function(n){return n.greater(e,i)},{a:e,b:i},null,"Greater")}}),Cd=Ms({greaterEqual_:function(n,x){var t,e=qs(n,"a","greaterEqual"),i=qs(x,"b","greaterEqual");return t=io(e,i),e=t[0],i=t[1],ku(e.shape,i.shape),ao.runKernelFunc(function(n,x){var t=n.greaterEqual(e,i);return x([e,i]),t},{a:e,b:i},function(n,x){var t=x[0],e=x[1];return{a:function(){return eh(t)},b:function(){return eh(e)}}},"GreaterEqual")}}),Ad=Ms({greaterEqualStrict_:function(n,x){var t=qs(n,"a","greaterEqualStrict"),e=qs(x,"b","greaterEqualStrict");return Xi(t.shape,e.shape,"Error in greaterEqualStrict: "),t.greaterEqual(e)}}),Ed=Ms({greaterStrict_:function(n,x){var t=qs(n,"a","greaterStrict"),e=qs(x,"b","greaterStrict");return Xi(t.shape,e.shape,"Error in greaterStrict: "),t.greater(e)}}),Sd=Ms({less_:function(n,x){var t,e=qs(n,"a","less"),i=qs(x,"b","less");return t=io(e,i),e=t[0],i=t[1],ku(e.shape,i.shape),ao.runKernelFunc(function(n){return n.less(e,i)},{a:e,b:i},null,"Less")}}),Id=Ms({lessEqual_:function(n,x){var t,e=qs(n,"a","lessEqual"),i=qs(x,"b","lessEqual");return t=io(e,i),e=t[0],i=t[1],ku(e.shape,i.shape),ao.runKernelFunc(function(n,x){var t=n.lessEqual(e,i);return x([e,i]),t},{a:e,b:i},null,"LessEqual")}}),Dd=Ms({lessEqualStrict_:function(n,x){var t=qs(n,"a","lessEqualStrict"),e=qs(x,"b","lessEqualStrict");return Xi(t.shape,e.shape,"Error in lessEqualStrict: "),t.lessEqual(e)}}),Od=Ms({lessStrict_:function(n,x){var t=qs(n,"a","lessStrict"),e=qs(x,"b","lessStrict");return Xi(t.shape,e.shape,"Error in lessStrict: "),t.less(e)}}),_d=Ms({notEqual_:function(n,x){var t,e=qs(n,"a","notEqual"),i=qs(x,"b","notEqual");return t=io(e,i),e=t[0],i=t[1],ku(e.shape,i.shape),ao.runKernelFunc(function(n){return n.notEqual(e,i)},{a:e,b:i},null,"NotEqual")}}),Td=Ms({notEqualStrict_:function(n,x){var t=qs(n,"a","notEqualStrict"),e=qs(x,"b","notEqualStrict");return Xi(t.shape,e.shape,"Error in notEqualStrict: "),t.notEqual(e)}});function Rd(n,x){for(var t=[],e=n;e<x;++e)t.push(e);return t}function Bd(n){for(var x=[],t=0;t<n.length;++t)for(var e=0;e<n[t].length;++e)x.push(n[t][e]);return x}var Md=Ms({gather_:function(n,x,t){void 0===t&&(t=0);var e=qs(n,"x","gather"),i=qs(x,"indices","gather","int32");t=hr(t,e.shape)[0];var r=function(n,x,t){for(var e=n.shape[t],i=[],r=1,o=1,s=0;s<t;s++)i.push(n.shape[s]),r*=n.shape[s];for(s=0;s<x.rank;s++)i.push(x.shape[s]);for(s=t+1;s<n.rank;s++)i.push(n.shape[s]),o*=n.shape[s];return{batchSize:r,sliceSize:o,dimSize:e,outputShape:i}}(e,i,t);return ao.runKernelFunc(function(n,x){var r=n.gather(e,i.flatten(),t);return x([i]),r},{x:e,indices:i},function(n,x){var i=x[0];return{x:function(){var x=e.shape,r=i.size,o=x.slice(0,t),s=o.length,h=x.slice(t,x.length).slice(1),u=h.length,a=Rd(0,s),g=Rd(s+1,s+1+u),l=Bd([o,[r],h]),c=n.reshape(l),d=i.reshape([r]),f=Bd([[s],a,g]),p=c.transpose(f),y=Nd(p,d,e.shape[t]),m=_s(f);return y.transpose(m)},indices:function(){return i}}},"Gather",{axis:t}).reshape(r.outputShape)}}),Nd=Ms({unsortedSegmentSum_:function(n,x,t){var e=qs(n,"x","unsortedSegmentSum"),i=qs(x,"segmentIds","unsortedSegmentSum","int32");return Ji(tr(t),function(){return"numSegments must be of dtype int"}),ao.runKernelFunc(function(n,x){var r=n.unsortedSegmentSum(e,i,t);return x([i]),r},{$x:e},function(n,x){var t=x[0];return{$x:function(){return function(n,x){for(var t=ad(x,eh(x)),e=Md(n,t),i=Cd(x,Us(0,"int32")),r=e.rank-i.rank,o=0;o<r;++o)i=Ih(i,o+1);i=Jc(i,Xs(e.shape,"bool"));var s=eh(e);return nd(i,e,s)}(n,t)}}})}}),Fd=function(n,x,t){return Oi(this,void 0,void 0,function(){var e,i,r,o,s,h,u,a,g,l,c,d,f;return _i(this,function(p){switch(p.label){case 0:for(e=qs(n,"tensor","boolMask"),i=qs(x,"mask","boolMask","bool"),r=null==t?0:t,o=i.rank,s=e.shape,Ji(o>0,function(){return"mask cannot be scalar"}),Xi(s.slice(r,r+o),i.shape,"mask's shape must match the first K dimensions of tensor's shape,"),h=1,u=r;u<r+o;u++)h*=s[u];return a=s.slice(0,r).concat([h],s.slice(r+o)),g=e.reshape(a),l=i.reshape([-1]),[4,xd(l)];case 1:return c=p.sent(),d=c.squeeze([1]),f=Md(g,d,r),n!==e&&e.dispose(),x!==i&&i.dispose(),d.dispose(),g.dispose(),l.dispose(),c.dispose(),[2,f]}})})};function Pd(n,x,t,e,i,r,o){void 0===r&&(r="NHWC"),Ji(n.length===x.rank,function(){return"Length of inShape ("+n.length+") and rank of dy ("+x.rank+") must match"});var s=n,h=x,u=!1;3===x.rank&&(u=!0,h=x.as4D(1,x.shape[0],x.shape[1],x.shape[2]),s=[1,n[0],n[1],n[2]]),Ji(4===s.length,function(){return"Error in conv2dDerInput: inShape must be length 4, but got length "+s.length+"."}),Ji(4===h.rank,function(){return"Error in conv2dDerInput: dy must be rank 4, but got rank "+h.rank}),Ji(4===t.rank,function(){return"Error in conv2dDerInput: filter must be rank 4, but got rank "+t.rank});var a="NHWC"===r?s[3]:s[1],g="NHWC"===r?h.shape[3]:h.shape[1];Ji(a===t.shape[2],function(){return"Error in conv2dDerInput: depth of input ("+a+") must match input depth for filter "+t.shape[2]+"."}),Ji(g===t.shape[3],function(){return"Error in conv2dDerInput: depth of output ("+g+") must match output depth for filter "+t.shape[3]+"."}),null!=o&&Ji(tr(i),function(){return"Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+i+"."});var l=Bu(r),c=Au(s,t.shape,e,1,i,o,!1,l),d=ao.runKernelFunc(function(n,x){var e=n.conv2dDerInput(h,t,c);return x([t,h]),e},{dy4D:h,filter:t},function(n,x){var t=x[0],s=x[1];return{dy4D:function(){return Vd(n,t,e,i,r,1,o)},filter:function(){return Qd(n,s,t.shape,e,i,r,o)}}});return u?d.as3D(d.shape[1],d.shape[2],d.shape[3]):d}function Ld(n){var x=function(n){return"number"==typeof n?[n,n,n]:2===n.length?[n[0],n[1],1]:n}(n),t=x[0],e=x[1],i=x[2];return 1===t&&1===e&&1===i}function Hd(n,x,t,e,i){Ji(n.length===x.rank,function(){return"Length of inShape ("+n.length+") and rank of dy ("+x.rank+") must match"});var r=n,o=x,s=!1;4===x.rank&&(s=!0,o=x.as5D(1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]),r=[1,n[0],n[1],n[2],n[3]]);var h=r[4],u=o.shape[4];Ji(5===r.length,function(){return"Error in conv3dDerInput: inShape must be length 5, but got length "+r.length+"."}),Ji(5===o.rank,function(){return"Error in conv3dDerInput: dy must be rank 5, but got rank "+o.rank}),Ji(5===t.rank,function(){return"Error in conv3dDerInput: filter must be rank 5, but got rank "+t.rank}),Ji(h===t.shape[3],function(){return"Error in conv3dDerInput: depth of input ("+h+") must match input depth for filter "+t.shape[3]+"."}),Ji(u===t.shape[4],function(){return"Error in conv3dDerInput: depth of output ("+u+") must match output depth for filter "+t.shape[4]+"."});var a=Eu(r,t.shape,e,1,i),g=ao.runKernelFunc(function(n){return n.conv3dDerInput(o,t,a)},{dy5D:o});return s?g.as4D(g.shape[1],g.shape[2],g.shape[3],g.shape[4]):g}var Ud=Ms({conv1d_:function(n,x,t,e,i,r,o){void 0===i&&(i="NWC"),void 0===r&&(r=1);var s=qs(n,"x","conv1d"),h=qs(x,"filter","conv1d"),u=s,a=!1;2===s.rank&&(a=!0,u=s.as3D(1,s.shape[0],s.shape[1])),Ji(3===u.rank,function(){return"Error in conv1d: input must be rank 3, but got rank "+u.rank+"."}),Ji(3===h.rank,function(){return"Error in conv1d: filter must be rank 3, but got rank "+h.rank+"."}),null!=o&&Ji(tr(e),function(){return"Error in conv1d: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+e+"."}),Ji(u.shape[2]===h.shape[1],function(){return"Error in conv1d: depth of input ("+u.shape[2]+") must match input depth for filter "+h.shape[1]+"."}),Ji(Ru(t,r),function(){return"Error in conv1D: Either stride or dilation must be 1. Got stride "+t+" and dilation '"+r+"'"}),Ji("NWC"===i,function(){return"Error in conv1d: got dataFormat of "+i+" but only NWC is currently supported."});var g=h.as4D(1,h.shape[0],h.shape[1],h.shape[2]),l=u.as4D(u.shape[0],1,u.shape[1],u.shape[2]),c=Vd(l,g,[1,t],e,"NHWC",[1,r],o);return a?c.as2D(c.shape[2],c.shape[3]):c.as3D(c.shape[0],c.shape[2],c.shape[3])}}),Vd=Ms({conv2d_:function(n,x,t,e,i,r,o){void 0===i&&(i="NHWC"),void 0===r&&(r=[1,1]);var s=qs(n,"x","conv2d"),h=qs(x,"filter","conv2d"),u=s,a=!1;3===s.rank&&(a=!0,u=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),Ji(4===u.rank,function(){return"Error in conv2d: input must be rank 4, but got rank "+u.rank+"."}),Ji(4===h.rank,function(){return"Error in conv2d: filter must be rank 4, but got rank "+h.rank+"."}),null!=o&&Ji(tr(e),function(){return"Error in conv2d: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+e+"."});var g="NHWC"===i?u.shape[3]:u.shape[1];Ji(g===h.shape[2],function(){return"Error in conv2d: depth of input ("+g+") must match input depth for filter "+h.shape[2]+"."}),Ji(Ru(t,r),function(){return"Error in conv2D: Either strides or dilations must be 1. Got strides "+t+" and dilations '"+r+"'"});var l=Bu(i),c=Au(u.shape,h.shape,t,r,e,o,!1,l),d=[h,u],f=ao.runKernelFunc(function(n,x){var t=n.conv2d(u,h,c);return x([h,u]),t},{x:u,filter:h},function(n,x){var o=x,s=o[0],h=o[1];return Ji(Tu(r),function(){return"Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+r+"'"}),{x:function(){return Gd(h.shape,n,s,t,e,i)},filter:function(){return Qd(h,n,s.shape,t,e,i)}}},"Conv2D",c,d);return a?f.as3D(f.shape[1],f.shape[2],f.shape[3]):f}}),Wd=Ms({conv3d_:function(n,x,t,e,i,r){void 0===i&&(i="NDHWC"),void 0===r&&(r=[1,1,1]);var o=qs(n,"x","conv3d"),s=qs(x,"filter","conv3d"),h=o,u=!1;4===o.rank&&(u=!0,h=o.as5D(1,o.shape[0],o.shape[1],o.shape[2],o.shape[3])),Ji(5===h.rank,function(){return"Error in conv3d: input must be rank 5, but got rank "+h.rank+"."}),Ji(5===s.rank,function(){return"Error in conv3d: filter must be rank 5, but got rank "+s.rank+"."}),Ji(h.shape[4]===s.shape[3],function(){return"Error in conv3d: depth of input ("+h.shape[4]+") must match input depth for filter "+s.shape[3]+"."}),Ji(function(n,x){return Ld(n)||Ld(x)}(t,r),function(){return"Error in conv3D: Either strides or dilations must be 1. Got strides "+t+" and dilations '"+r+"'"}),Ji("NDHWC"===i,function(){return"Error in conv3d: got dataFormat of "+i+" but only NDHWC is currently supported."});var a=Eu(h.shape,s.shape,t,r,e),g=ao.runKernelFunc(function(n,x){var t=n.conv3d(h,s,a);return x([h,s]),t},{x:h,$filter:s},function(n,x){Ji(Ld(r),function(){return"Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+r+"'"});var i=x[0],o=x[1];return{x:function(){return Hd(i.shape,n,o,t,e)},$filter:function(){return function(n,x,t,e,i){var r=n;4===n.rank&&(r=n.as5D(1,n.shape[0],n.shape[1],n.shape[2],n.shape[3]));var o=x;4===o.rank&&(o=x.as5D(1,x.shape[0],x.shape[1],x.shape[2],x.shape[3])),Ji(5===r.rank,function(){return"Error in conv3dDerFilter: input must be rank 5, but got shape "+r.shape+"."}),Ji(5===o.rank,function(){return"Error in conv3dDerFilter: dy must be rank 5, but got shape "+o.shape+"."}),Ji(5===t.length,function(){return"Error in conv3dDerFilter: filterShape must be length 5, but got "+t+"."}),Ji(r.shape[4]===t[3],function(){return"Error in conv3dDerFilter: depth of input "+r.shape[4]+") must match input depth in filter ("+t[3]+"."}),Ji(o.shape[4]===t[4],function(){return"Error in conv3dDerFilter: depth of dy ("+o.shape[4]+") must match output depth for filter ("+t[4]+")."});var s=Eu(r.shape,t,e,1,i);return ao.runKernelFunc(function(n){return n.conv3dDerFilter(r,o,s)},{x5D:r,dy5D:o})}(i,n,o.shape,t,e)}}});return u?g.as4D(g.shape[1],g.shape[2],g.shape[3],g.shape[4]):g}}),Qd=Ms({conv2dDerFilter_:function(n,x,t,e,i,r,o){void 0===r&&(r="NHWC");var s=n;3===n.rank&&(s=n.as4D(1,n.shape[0],n.shape[1],n.shape[2]));var h=x;3===h.rank&&(h=x.as4D(1,x.shape[0],x.shape[1],x.shape[2])),Ji(4===s.rank,function(){return"Error in conv2dDerFilter: input must be rank 4, but got shape "+s.shape+"."}),Ji(4===h.rank,function(){return"Error in conv2dDerFilter: dy must be rank 4, but got shape "+h.shape+"."}),Ji(4===t.length,function(){return"Error in conv2dDerFilter: filterShape must be length 4, but got "+t+"."});var u="NHWC"===r?s.shape[3]:s.shape[1],a="NHWC"===r?h.shape[3]:h.shape[1];Ji(u===t[2],function(){return"Error in conv2dDerFilter: depth of input "+u+") must match input depth in filter ("+t[2]+"."}),Ji(a===t[3],function(){return"Error in conv2dDerFilter: depth of dy ("+a+") must match output depth for filter ("+t[3]+")."}),null!=o&&Ji(tr(i),function(){return"Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+i+"."});var g=Bu(r),l=Au(s.shape,t,e,1,i,o,!1,g);return ao.runKernelFunc(function(n){return n.conv2dDerFilter(s,h,l)},{x4D:s,dy4D:h})}}),Gd=Ms({conv2dDerInput_:Pd}),Kd=Ms({depthwiseConv2d_:function(n,x,t,e,i,r,o){void 0===i&&(i="NHWC"),void 0===r&&(r=[1,1]);var s=qs(n,"x","depthwiseConv2d"),h=qs(x,"filter","depthwiseConv2d"),u=s,a=!1;3===s.rank&&(a=!0,u=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),Ji(4===u.rank,function(){return"Error in depthwiseConv2d: input must be rank 4, but got rank "+u.rank+"."}),Ji(4===h.rank,function(){return"Error in depthwiseConv2d: filter must be rank 4, but got rank "+h.rank+"."}),Ji(u.shape[3]===h.shape[2],function(){return"Error in depthwiseConv2d: number of input channels ("+u.shape[3]+") must match the inChannels dimension in filter "+h.shape[2]+"."}),null==r&&(r=[1,1]),Ji(Ru(t,r),function(){return"Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides "+t+" and dilations '"+r+"'"}),null!=o&&Ji(tr(e),function(){return"Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+e+"."});var g=Au(u.shape,h.shape,t,r,e,o,!0),l=[u,h],c=ao.runKernelFunc(function(n,x){var t=n.depthwiseConv2D(u,h,g);return x([u,h]),t},{x:u,filter:h},function(n,x){Ji(Tu(r),function(){return"Error in gradient of depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '"+r+"'"});var t=x[0],e=x[1];return{x:function(){return Yd(t.shape,n,e,g)},filter:function(){return Jd(t,n,e.shape,g)}}},"DepthwiseConv2dNative",g,l);return a?c.as3D(c.shape[1],c.shape[2],c.shape[3]):c}}),Yd=Ms({depthwiseConv2dDerInput_:function(n,x,t,e){var i=x,r=!1;3===x.rank&&(r=!0,i=x.as4D(1,x.shape[0],x.shape[1],x.shape[2]));var o=ao.runKernelFunc(function(n){return n.depthwiseConv2DDerInput(i,t,e)},{dy4D:i});return r?o.as3D(o.shape[1],o.shape[2],o.shape[3]):o}}),Jd=Ms({depthwiseConv2dDerFilter_:function(n,x,t,e){var i=n;3===n.rank&&(i=n.as4D(1,n.shape[0],n.shape[1],n.shape[2]));var r=x;return 3===r.rank&&(r=x.as4D(1,x.shape[0],x.shape[1],x.shape[2])),ao.runKernelFunc(function(n){return n.depthwiseConv2DDerFilter(i,r,e)},{x4D:i,dy4D:r})}}),Xd=Ms({separableConv2d_:function(n,x,t,e,i,r,o){void 0===r&&(r=[1,1]),void 0===o&&(o="NHWC");var s=qs(n,"x","separableConv2d"),h=qs(x,"depthwiseFilter","separableConv2d"),u=qs(t,"pointwiseFilter","separableConv2d"),a=s,g=!1;if(3===s.rank&&(g=!0,a=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),"NCHW"===o)throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");Ji(4===a.rank,function(){return"Error in separableConv2d: input must be rank 4, but got rank "+a.rank+"."}),Ji(4===h.rank,function(){return"Error in separableConv2d: depthwise filter must be rank 4, but got rank "+h.rank+"."}),Ji(4===u.rank,function(){return"Error in separableConv2d: pointwise filter must be rank 4, but got rank "+h.rank+"."}),Ji(1===u.shape[0],function(){return"Error in separableConv2d: the first dimension of pointwise filter must be 1, but got "+u.shape[0]+"."}),Ji(1===u.shape[1],function(){return"Error in separableConv2d: the second dimension of pointwise filter must be 1, but got "+u.shape[1]+"."});var l=h.shape[2],c=h.shape[3];Ji(u.shape[2]===l*c,function(){return"Error in separableConv2d: the third dimension of pointwise filter must be "+l*c+", but got "+u.shape[2]+"."});var d=Kd(a,h,e,i,o,r),f=Vd(d,u,1,"valid",o);return g?f.as3D(f.shape[1],f.shape[2],f.shape[3]):f}}),Zd=Ms({conv2dTranspose_:function(n,x,t,e,i,r){return Pd(t,qs(n,"x","conv2dTranspose"),qs(x,"filter","conv2dTranspose"),e,i,"NHWC",r)}}),$d=Ms({conv3dTranspose_:function(n,x,t,e,i){return Hd(t,qs(n,"x","conv3dTranspose"),qs(x,"filter","conv3dTranspose"),e,i)}}),nf=Ms({matMul_:function(n,x,t,e){var i;void 0===t&&(t=!1),void 0===e&&(e=!1);var r=qs(n,"a","matMul"),o=qs(x,"b","matMul");i=io(r,o),r=i[0],o=i[1];var s=t?r.shape[r.rank-2]:r.shape[r.rank-1],h=e?o.shape[o.rank-1]:o.shape[o.rank-2],u=t?r.shape[r.rank-1]:r.shape[r.rank-2],a=e?o.shape[o.rank-2]:o.shape[o.rank-1],g=r.shape.slice(0,-2),l=o.shape.slice(0,-2),c=nr(g),d=nr(l);Ji(r.rank>=2&&o.rank>=2&&r.rank===o.rank,function(){return"Error in matMul: inputs must have the same rank of at least 2, got ranks "+r.rank+" and "+o.rank+"."}),Ji(xr(g,l),function(){return"Error in matMul: outer dimensions ("+g+") and ("+l+") of Tensors with shapes "+r.shape+" and "+o.shape+" must match."}),Ji(s===h,function(){return"Error in matMul: inner shapes ("+s+") and ("+h+") of Tensors with shapes "+r.shape+" and "+o.shape+" and transposeA="+t+" and transposeB="+e+" must match."});var f=r.shape.slice(0,-2).concat([u,a]),p=t?r.as3D(c,s,u):r.as3D(c,u,s),y=e?o.as3D(d,a,h):o.as3D(d,h,a),m={transposeA:t,transposeB:e};return ao.runKernelFunc(function(n,x){var i=n.batchMatMul(p,y,t,e);return x([p,y]),i},{a:p,b:y},function(n,x){var i=x,r=i[0],o=i[1];return t||e?!t&&e?{a:function(){return n.matMul(o,!1,!1)},b:function(){return n.matMul(r,!0,!1)}}:t&&!e?{a:function(){return o.matMul(n,!1,!0)},b:function(){return r.matMul(n,!1,!1)}}:{a:function(){return o.matMul(n,!0,!0)},b:function(){return n.matMul(r,!0,!0)}}:{a:function(){return n.matMul(o,!1,!0)},b:function(){return r.matMul(n,!0,!1)}}},"BatchMatMul",m).reshape(f)}}),xf=Ms({dot_:function(n,x){var t=qs(n,"t1","dot"),e=qs(x,"t2","dot");Ji(!(1!==t.rank&&2!==t.rank||1!==e.rank&&2!==e.rank),function(){return"Error in dot: inputs must all be rank 1 or 2, but got ranks "+t.rank+" and "+e.rank+"."});var i=1===t.rank?t.size:t.shape[1],r=1===e.rank?e.size:e.shape[0];return Ji(i===r,function(){return"Error in dot: inner dimensions of inputs must match, but got "+i+" and "+r+"."}),1===t.rank&&1===e.rank?t.as2D(1,-1).matMul(e.as2D(-1,1)).asScalar():1===t.rank&&2===e.rank?t.as2D(1,-1).matMul(e.as2D(e.shape[0],e.shape[1])).as1D():2===t.rank&&1===e.rank?t.matMul(e.as2D(-1,1)).as1D():t.matMul(e.as2D(e.shape[0],e.shape[1]))}}),tf=Ms({outerProduct_:function(n,x){var t=qs(n,"v1","outerProduct"),e=qs(x,"v2","outerProduct");return Ji(1===t.rank&&1===e.rank,function(){return"Error in outerProduct: inputs must be rank 1, but got ranks "+t.rank+" and "+e.rank+"."}),t.as2D(-1,1).matMul(e.as2D(1,-1))}}),ef=Ms({reverse_:function(n,x){var t=qs(n,"x","reverse");if(0===t.rank)return t.clone();var e=hr(x,t.shape);return ao.runKernelFunc(function(n){return n.reverse(t,e)},{$x:t},function(n){return{$x:function(){return n.reverse(e)}}}).reshapeAs(t)}}),rf=Ms({reverse1d_:function(n){var x=qs(n,"x","reverse");return Ji(1===x.rank,function(){return"Error in reverse1D: x must be rank 1 but got rank "+x.rank+"."}),ef(x,0)}}),of=Ms({reverse2d_:function(n,x){var t=qs(n,"x","reverse");return Ji(2===t.rank,function(){return"Error in reverse2D: x must be rank 2 but got rank "+t.rank+"."}),ef(t,x)}}),sf=Ms({reverse3d_:function(n,x){var t=qs(n,"x","reverse");return Ji(3===t.rank,function(){return"Error in reverse3D: x must be rank 3 but got rank "+t.rank+"."}),ef(t,x)}}),hf=Ms({reverse4d_:function(n,x){var t=qs(n,"x","reverse");return Ji(4===t.rank,function(){return"Error in reverse4D: x must be rank 4 but got rank "+t.rank+"."}),ef(t,x)}});function uf(n,x,t,e,i,r){var o=qs(n,"x","maxPool"),s=o,h=!1;3===o.rank&&(h=!0,s=o.as4D(1,o.shape[0],o.shape[1],o.shape[2])),null==e&&(e=[1,1]),Ji(4===s.rank,function(){return"Error in maxPool: input must be rank 4 but got rank "+s.rank+"."}),Ji(Ru(t,e),function(){return"Error in maxPool: Either strides or dilations must be 1. Got strides "+t+" and dilations '"+e+"'"}),null!=r&&Ji(tr(i),function(){return"Error in maxPool: pad must be an integer when using, dimRoundingMode "+r+" but got pad "+i+"."});var u=qu(s.shape,x,t,e,i,r);if(1===u.filterWidth&&1===u.filterHeight&&xr(u.inShape,u.outShape))return o.clone();var a=[s],g=ao.runKernelFunc(function(n,x){var t=n.maxPool(s,u);return x([s,t]),t},{x:s},function(n,r){var o=r[0],s=r[1];return{x:function(){return function(n,x,t,e,i,r,o,s){var h=qs(n,"dy","maxPoolBackprop"),u=qs(x,"input","maxPoolBackprop"),a=qs(t,"output","maxPoolBackprop");Ji(u.rank===h.rank,function(){return"Rank of input ("+u.rank+") does not match rank of dy ("+h.rank+")"}),null==r&&(r=[1,1]),Ji(Ru(i,r),function(){return"Error in maxPoolBackProp: Either strides or dilations must be 1. Got strides "+i+" and dilations '"+r+"'"}),Ji(4===h.rank,function(){return"Error in maxPoolBackprop: dy must be rank 4 but got rank "+h.rank+"."}),Ji(4===u.rank,function(){return"Error in maxPoolBackprop: input must be rank 4 but got rank "+u.rank+"."}),null!=s&&Ji(tr(o),function(){return"Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode "+s+" but got pad "+o+"."});var g=qu(u.shape,e,i,r,o,s);return ao.runKernelFunc(function(n){return n.maxPoolBackprop(h,u,a,g)},{$dy:h,$input:u})}(n,o,s,x,t,e,i)}}},"MaxPool",u,a);return h?g.as3D(g.shape[1],g.shape[2],g.shape[3]):g}function af(n,x,t,e,i,r){var o=qs(n,"x","avgPool","float32");null==e&&(e=[1,1]),Ji(Ru(t,e),function(){return"Error in avgPool: Either strides or dilations must be 1. Got strides "+t+" and dilations '"+e+"'"});var s=o,h=!1;3===o.rank&&(h=!0,s=o.as4D(1,o.shape[0],o.shape[1],o.shape[2])),Ji(4===s.rank,function(){return"Error in avgPool: x must be rank 4 but got rank "+s.rank+"."}),null!=r&&Ji(tr(i),function(){return"Error in avgPool: pad must be an integer when using, dimRoundingMode "+r+" but got pad "+i+"."});var u=qu(s.shape,x,t,e,i,r);if(1===u.filterWidth&&1===u.filterHeight&&xr(u.inShape,u.outShape))return o.clone();var a=ao.runKernelFunc(function(n){return n.avgPool(s,u)},{x:s},function(n){return{x:function(){return function(n,x,t,e,i,r){var o=qs(n,"dy","avgPoolBackprop"),s=qs(x,"input","avgPoolBackprop");Ji(s.rank===o.rank,function(){return"Rank of input ("+s.rank+") does not match rank of dy ("+o.rank+")"}),null==i&&(i=[1,1]),Ji(Ru(e,i),function(){return"Error in avgPoolBackprop: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+i+"'"});var h=s,u=o,a=!1;3===s.rank&&(a=!0,h=s.as4D(1,s.shape[0],s.shape[1],s.shape[2]),u=o.as4D(1,o.shape[0],o.shape[1],o.shape[2])),Ji(4===u.rank,function(){return"Error in avgPoolBackprop: dy must be rank 4 but got rank "+u.rank+"."}),Ji(4===h.rank,function(){return"Error in avgPoolBackprop: input must be rank 4 but got rank "+h.rank+"."});var g=qu(h.shape,t,e,i,r),l=ao.runKernelFunc(function(n){return n.avgPoolBackprop(u,h,g)},{dy4D:u,input4D:h});return a?l.as3D(l.shape[1],l.shape[2],l.shape[3]):l}(n,s,x,t,e,i)}}},"AvgPool",u);return a=a.cast(o.dtype),h?a.as3D(a.shape[1],a.shape[2],a.shape[3]):a}var gf=Ms({maxPool_:function(n,x,t,e,i){return uf(n,x,t,1,e,i)}}),lf=Ms({avgPool_:function(n,x,t,e,i){return af(n,x,t,1,e,i)}}),cf=Ms({pool_:function(n,x,t,e,i,r){null==i&&(i=[1,1]),null==r&&(r=1),0===e&&(e="valid");var o=qs(n,"x","maxPool"),s=o,h=!1;3===o.rank&&(h=!0,s=o.as4D(1,o.shape[0],o.shape[1],o.shape[2])),Ji(Ru(r,i),function(){return"Error in pool: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+i+"'"});var u,a=qu(s.shape,x,r,i,e),g=[a.dilationHeight,a.dilationWidth];u="same"===e?function(n,x){var t=n.map(function(n,t){return n+(n-1)*(x[t]-1)}).map(function(n){return n-1}),e=t.map(function(n){return Math.floor(n/2)}),i=t.map(function(n,x){return n-e[x]});return t.map(function(n,x){return[e[x],i[x]]})}([a.filterHeight,a.filterWidth],g):[[0,0],[0,0]];var l=1===g[0]&&1===g[1],c=function(n,x,t){var e=t.map(function(n){return n[0]}),i=t.map(function(n){return n[1]}),r=n.concat(e,i),o=x.map(function(n,x){return(n-r[x]%n)%n}),s=i.map(function(n,x){return n+o[x]}),h=x.map(function(n,x){return[e[x],s[x]]}),u=x.map(function(n,x){return[0,o[x]]});return[h,u]}([a.inHeight,a.inWidth],g,u),d=c[0],f=c[1],p=l?e:"valid",y=l?s:Vh(s,g,d),m=("avg"===t?function(){return af(y,x,r,1,p)}:function(){return uf(y,x,r,1,p)})(),b=l?m:kh(m,g,f);return h?b.as3D(b.shape[1],b.shape[2],b.shape[3]):b}}),df=Ms({maxPool3d_:function(n,x,t,e,i,r,o){void 0===r&&(r="NDHWC");var s=qs(n,"x","maxPool3d"),h=s,u=!1;4===s.rank&&(u=!0,h=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3])),null==o&&(o=[1,1,1]),Ji(5===h.rank,function(){return"Error in maxPool3d: x must be rank 5 but got rank "+h.rank+"."}),Ji("NDHWC"===r,function(){return"Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of "+r}),Ji(Ru(t,o),function(){return"Error in maxPool3d: Either strides or dilations must be 1. Got strides "+t+" and dilations '"+o+"'"}),null!=i&&Ji(tr(e),function(){return"Error in maxPool3d: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+e+"."});var a=Cu(h.shape,x,t,o,e,i,r),g=ao.runKernelFunc(function(n,x){var t=n.maxPool3d(h,a);return x([h,t]),t},{x:h},function(n,r){var s=r[0],h=r[1];return{x:function(){return function(n,x,t,e,i,r,o,s){var h=qs(n,"dy","maxPool3dBackprop"),u=qs(x,"input","maxPool3dBackprop"),a=qs(t,"output","maxPool3dBackprop"),g=h,l=u,c=a,d=!1;4===u.rank&&(d=!0,g=h.as5D(1,h.shape[0],h.shape[1],h.shape[2],h.shape[3]),l=u.as5D(1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]),c=a.as5D(1,a.shape[0],a.shape[1],a.shape[2],a.shape[3])),Ji(5===g.rank,function(){return"Error in maxPool3dBackprop: dy must be rank 5 but got rank "+g.rank+"."}),Ji(5===l.rank,function(){return"Error in maxPool3dBackprop: input must be rank 5 but got rank "+l.rank+"."}),Ji(5===c.rank,function(){return"Error in maxPool3dBackprop: output must be rank 5 but got rank "+c.rank+"."}),null==r&&(r=[1,1,1]),Ji(Ru(i,r),function(){return"Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides "+i+" and dilations '"+r+"'"}),null!=s&&Ji(tr(o),function(){return"Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode "+s+" but got pad "+o+"."});var f=Cu(l.shape,e,i,r,o,s),p=ao.runKernelFunc(function(n){return n.maxPool3dBackprop(g,l,c,f)},{dy5D:g,input5D:l});return d?p.as4D(p.shape[1],p.shape[2],p.shape[3],p.shape[4]):p}(n,s,h,x,t,o,e,i)}}});return u?g.as4D(g.shape[1],g.shape[2],g.shape[3],g.shape[4]):g}}),ff=Ms({avgPool3d_:function(n,x,t,e,i,r,o){void 0===r&&(r="NDHWC");var s=qs(n,"x","avgPool3d","float32"),h=s,u=!1;4===s.rank&&(u=!0,h=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3])),null==o&&(o=[1,1,1]),Ji(5===h.rank,function(){return"Error in avgPool3d: x must be rank 5 but got rank "+h.rank+"."}),Ji("NDHWC"===r,function(){return"Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of "+r}),Ji(Ru(t,o),function(){return"Error in avgPool3d: Either strides or dilations must be 1. Got strides "+t+" and dilations '"+o+"'"}),null!=i&&Ji(tr(e),function(){return"Error in avgPool3d: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+e+"."});var a=Cu(h.shape,x,t,o,e,i,r),g=ao.runKernelFunc(function(n){return n.avgPool3d(h,a)},{x:h},function(n){return{x:function(){return function(n,x,t,e,i,r,o){var s=qs(n,"dy","avgPool3dBackprop"),h=qs(x,"input","avgPool3dBackprop"),u=s,a=h,g=!1;4===h.rank&&(g=!0,u=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3]),a=h.as5D(1,h.shape[0],h.shape[1],h.shape[2],h.shape[3])),Ji(5===u.rank,function(){return"Error in avgPool3dBackprop: dy must be rank 5 but got rank "+u.rank+"."}),Ji(5===a.rank,function(){return"Error in avgPool3dBackprop: input must be rank 5 but got rank "+a.rank+"."}),null==i&&(i=[1,1,1]),Ji(Ru(e,i),function(){return"Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+i+"'"}),null!=o&&Ji(tr(r),function(){return"Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+r+"."});var l=Cu(a.shape,t,e,i,r,o),c=ao.runKernelFunc(function(n){return n.avgPool3dBackprop(u,a,l)},{dy5D:u,input5D:a});return g?c.as4D(c.shape[1],c.shape[2],c.shape[3],c.shape[4]):c}(n,h,x,t,o,e,i)}}});return g=g.cast(h.dtype),u?g.as4D(g.shape[1],g.shape[2],g.shape[3],g.shape[4]):g}}),pf=Ms({slice_:function(n,x,t){var e,i,r=qs(n,"x","slice");if(0===r.rank)throw new Error("Slicing scalar is not possible");(e="number"==typeof x?[x].concat(new Array(r.rank-1).fill(0)):x.length<r.rank?x.concat(new Array(r.rank-x.length).fill(0)):x.slice()).forEach(function(n){Ji(-1!==n,function(){return"slice() does not support negative begin indexing."})}),i=(i=null==t?new Array(r.rank).fill(-1):"number"==typeof t?[t].concat(new Array(r.rank-1).fill(-1)):t.length<r.rank?t.concat(new Array(r.rank-t.length).fill(-1)):t).map(function(n,x){return n>=0?n:(Ji(-1===n,function(){return"Negative size values should be exactly -1 but got "+n+" for the slice() size at index "+x+"."}),r.shape[x]-e[x])}),hu(r,e,i);var o=r.shape,s={begin:e,size:i};return ao.runKernelFunc(function(n){return n.slice(r,e,i)},{x:r},function(n){for(var x=[],t=0;t<n.rank;t++)x.push([e[t],o[t]-e[t]-i[t]]);return{x:function(){return n.pad(x)}}},"Slice",s)}}),yf=Ms({slice1d_:function(n,x,t){var e=qs(n,"x","slice1d");return Ji(1===e.rank,function(){return"slice1d expects a rank-1 tensor, but got a rank-"+e.rank+" tensor"}),pf(e,[x],[t])}}),mf=Ms({slice2d_:function(n,x,t){var e=qs(n,"x","slice2d");return Ji(2===e.rank,function(){return"slice2d expects a rank-2 tensor, but got a rank-"+e.rank+" tensor"}),pf(e,x,t)}}),bf=Ms({slice3d_:function(n,x,t){var e=qs(n,"x","slice3d");return Ji(3===e.rank,function(){return"slice3d expects a rank-3 tensor, but got a rank-"+e.rank+" tensor"}),pf(e,x,t)}}),zf=Ms({slice4d_:function(n,x,t){var e=qs(n,"x","slice4d");return Ji(4===e.rank,function(){return"slice4d expects a rank-4 tensor, but got a rank-"+e.rank+" tensor"}),pf(e,x,t)}});function vf(n,x,t,e,i){return x.rank<t.rank&&(x=x.reshape(Is(x.shape,e))),n.rank<t.rank&&(n=n.reshape(Is(n.shape,e))),{x:function(){var e=n.mul(t.equal(x).cast(n.dtype));return null==i?e:e.transpose(i)}}}var jf=Ms({all_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=qs(n,"x","all","bool"),i=hr(x,e.shape),r=i,o=Os(r,e.rank);null!=o&&(e=e.transpose(o),r=Ts(r.length,e.rank));var s=ao.runKernelFunc(function(n){return n.all(e,r)},{$x:e});if(t){var h=Is(s.shape,i);return s.reshape(h)}return s}}),wf=Ms({any_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=qs(n,"x","any","bool"),i=hr(x,e.shape),r=i,o=Os(r,e.rank);null!=o&&(e=e.transpose(o),r=Ts(r.length,e.rank));var s=ao.runKernelFunc(function(n){return n.any(e,r)},{$x:e});if(t){var h=Is(s.shape,i);return s.reshape(h)}return s}}),kf=Ms({argMax_:function(n,x){void 0===x&&(x=0);var t=qs(n,"x","argMax");null==x&&(x=0);var e=hr(x,t.shape),i=Os(e,t.rank);null!=i&&(t=t.transpose(i),e=Ts(e.length,t.rank));var r={axis:e[0]},o=[t];return ao.runKernelFunc(function(n,x){var i=n.argMax(t,e[0]);return x([t]),i},{x:t},function(n,x){var t=x[0];return{x:function(){return eh(t)}}},"ArgMax",r,o)}}),qf=Ms({argMin_:function(n,x){void 0===x&&(x=0);var t=qs(n,"x","argMin");null==x&&(x=0);var e=hr(x,t.shape),i=Os(e,t.rank);return null!=i&&(t=t.transpose(i),e=Ts(e.length,t.rank)),ao.runKernelFunc(function(n,x){var i=n.argMin(t,e[0]);return x([t]),i},{$x:t},function(n,x){var t=x[0];return{$x:function(){return eh(t)}}})}}),Cf=Ms({logSumExp_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=qs(n,"x","logSumExp"),i=hr(x,e.shape),r=e.max(i,!0),o=e.sub(r).exp().sum(i).log(),s=r.reshape(o.shape).add(o);if(t){var h=Is(s.shape,i);return s.reshape(h)}return s}}),Af=Ms({max_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=qs(n,"x","max"),i=e,r=hr(x,e.shape),o=r,s=Os(o,e.rank);null!=s&&(e=e.transpose(s),o=Ts(o.length,e.rank));var h=[e],u=ao.runKernelFunc(function(n,x){var t=n.max(e,o);return x([i,t]),t},{x:e},function(n,x){return vf(n,x[1],x[0],r,s)},"Max",{axes:o},h,[!0]);if(t){var a=Is(u.shape,r);u=u.reshape(a)}return u}}),Ef=Ms({mean_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=qs(n,"x","mean"),i=hr(x,e.shape),r=nr(Ss(e.shape,i)[1]);return pu(function(n){var e=Us(r);return{value:(e.dtype===n.dtype?n:n.cast(e.dtype)).div(e).sum(x,t),gradFunc:function(x){var t=n.shape.slice();return i.forEach(function(n){t[n]=1}),x.reshape(t).mul(Xs(n.shape,"float32")).div(r)}}})(e)}}),Sf=Ms({min_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=qs(n,"x","min"),i=e,r=hr(x,e.shape),o=r,s=Os(o,e.rank);null!=s&&(e=e.transpose(s),o=Ts(o.length,e.rank));var h=[e],u=ao.runKernelFunc(function(n,x){var t=n.min(e,o);return x([i,t]),t},{x:e},function(n,x){return vf(n,x[1],x[0],r,s)},"Min",{axes:o},h,[!0]);if(t){var a=Is(u.shape,r);u=u.reshape(a)}return u}}),If=Ms({moments_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=hr(x,(n=qs(n,"x","moments")).shape),i=n.mean(e,t),r=i.shape;t||(r=Is(i.shape,e));var o=n.toFloat().sub(i.reshape(r)).square();return{mean:i,variance:o.mean(e,t)}}}),Df=Ms({sum_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=qs(n,"x","sum");"bool"===e.dtype&&(e=e.toInt());var i=hr(x,e.shape);return pu(function(n){var x=Os(i,n.rank),e=i,r=n;null!=x&&(r=n.transpose(x),e=Ts(e.length,n.rank));var o=function(x){var t=n.shape.slice();return i.forEach(function(n){t[n]=1}),x.reshape(t).mul(Xs(n.shape,"float32"))},s={axes:e},h=ao.runKernelFunc(function(n){return n.sum(r,e)},{x:r},function(n){return{x:function(){return o(n)}}},"Sum",s);if(t){var u=Is(h.shape,i);h=h.reshape(u)}return{value:h,gradFunc:o}})(e)}}),Of=Ms({prod_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=qs(n,"x","prod");"bool"===e.dtype&&(e=e.toInt());var i=hr(x,e.shape),r=Os(i,e.rank),o=i,s=e;null!=r&&(s=e.transpose(r),o=Ts(o.length,e.rank));var h=ao.runKernelFunc(function(n){return n.prod(s,o)},{permutedX:s});if(t){var u=Is(h.shape,i);h=h.reshape(u)}return h}}),_f=Ms({elu_:function(n){var x=qs(n,"x","elu");return ao.runKernelFunc(function(n,t){var e=n.elu(x);return t([e]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return ao.runKernelFunc(function(x){return x.eluDer(n,t)},{dy:n,y:t})}}})}}),Tf=Ms({leakyRelu_:function(n,x){void 0===x&&(x=.2);var t=qs(n,"x","leakyRelu");return ad(Us(x).mul(t),t)}}),Rf=Ms({prelu_:function(n,x){var t=qs(n,"x","prelu"),e=qs(x,"alpha","prelu");return ao.runKernelFunc(function(n,x){var i=n.prelu(t,e);return x([t,e]),i},{x:t,alpha:e},function(n,x){var t=x[0],e=x[1],i=t.greater(0);return{x:function(){return nd(i,n,n.mul(e))},alpha:function(){var x=nd(i,eh(n),n.mul(t)),r=wu(e.shape,n.shape);return r.length>0&&(x=x.sum(r)),x.reshape(e.shape)}}},"Prelu")}}),Bf=Ms({relu_:function(n){var x=qs(n,"x","relu");return"bool"===x.dtype?x.toInt():ao.runKernelFunc(function(n,t){var e=n.relu(x);return t([x]),e},{x:x},function(n,x){var t=x[0];return{x:function(){return n.mulStrict(t.step().toFloat())}}},"Relu")}}),Mf=Ms({relu6_:function(n){var x=qs(n,"x","relu6");return"bool"===x.dtype?x.toInt():ao.runKernelFunc(function(n,t){var e=n.relu6(x);return t([x]),e},{x:x},function(n,x){var t=x[0],e=t.lessEqual(6).mul(t.step());return{x:function(){return n.mulStrict(e.toFloat())}}},"Relu6")}}),Nf=Ms({selu_:function(n){var x=qs(n,"x","selu");return ao.runKernelFunc(function(n,t){var e=n.selu(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){var x=t.greater(Us(0)),e=Us(bl),i=Us(zl),r=n.mul(i),o=n.mul(e).mul(t.toFloat().exp());return nd(x,r,o)}}})}}),Ff=Ms({transpose_:function(n,x){var t=qs(n,"x","transpose");if(null==x&&(x=t.shape.map(function(n,x){return x}).reverse()),Ji(t.rank===x.length,function(){return"Error in transpose: rank of input "+t.rank+" must match length of perm "+x+"."}),x.forEach(function(n){Ji(n>=0&&n<t.rank,function(){return"All entries in 'perm' must be between 0 and "+(t.rank-1)+" but got "+x})}),t.rank<=1)return t.clone();var e={perm:x};return ao.runKernelFunc(function(n){return n.transpose(t,x)},{x:t},function(n){var t=_s(x);return{x:function(){return n.transpose(t)}}},"Transpose",e)}}),Pf=Ms({localResponseNormalization_:function(n,x,t,e,i){void 0===x&&(x=5),void 0===t&&(t=1),void 0===e&&(e=1),void 0===i&&(i=.5);var r=qs(n,"x","localResponseNormalization");Ji(4===r.rank||3===r.rank,function(){return"Error in localResponseNormalization: x must be rank 3 or 4 but got\n rank "+r.rank+"."}),Ji(tr(x),function(){return"Error in localResponseNormalization: depthRadius must be an integer but got depthRadius "+x+"."});var o=r,s=!1;3===r.rank&&(s=!0,o=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var h=ao.runKernelFunc(function(n,r){var s=n.localResponseNormalization4D(o,x,t,e,i);return r([o,s]),s},{x4D:o},function(n,r){var o=r[0],s=r[1];return{x4D:function(){return ao.runKernelFunc(function(r){return r.LRNGrad(n,o,s,x,t,e,i)},{})}}});return s?h.as3D(h.shape[1],h.shape[2],h.shape[3]):h}}),Lf=Ms({norm_:function(n,x,t,e){void 0===x&&(x="euclidean"),void 0===t&&(t=null),void 0===e&&(e=!1);var i=function n(x,t,e){if(void 0===e&&(e=null),0===x.rank)return x.abs();if(1!==x.rank&&null===e)return n(x.reshape([-1]),t,e);if(1===x.rank||"number"==typeof e||Array.isArray(e)&&1===e.length){if(1===t)return x.abs().sum(e);if(t===1/0)return x.abs().max(e);if(t===-1/0)return x.abs().min(e);if("euclidean"===t||2===t)return x.abs().pow(Us(2,"int32")).sum(e).sqrt();throw new Error("Error in norm: invalid ord value: "+t)}if(Array.isArray(e)&&2===e.length){if(1===t)return x.abs().sum(e[0]).max(e[1]-1);if(t===1/0)return x.abs().sum(e[1]).max(e[0]);if(t===-1/0)return x.abs().sum(e[1]).min(e[0]);if("fro"===t||"euclidean"===t)return x.square().sum(e).sqrt();throw new Error("Error in norm: invalid ord value: "+t)}throw new Error("Error in norm: invalid axis: "+e)}(n=qs(n,"x","norm"),x,t),r=i.shape;if(e){var o=hr(t,n.shape);r=Is(i.shape,o)}return i.reshape(r)}}),Hf=Ms({basicLSTMCell_:function(n,x,t,e,i,r){var o=qs(n,"forgetBias","basicLSTMCell"),s=qs(x,"lstmKernel","basicLSTMCell"),h=qs(t,"lstmBias","basicLSTMCell"),u=qs(e,"data","basicLSTMCell"),a=qs(i,"c","basicLSTMCell"),g=qs(r,"h","basicLSTMCell"),l=u.concat(g,1).matMul(s).add(h),c=l.shape[0],d=l.shape[1]/4,f=[c,d],p=l.slice([0,0],f),y=l.slice([0,d],f),m=l.slice([0,2*d],f),b=l.slice([0,3*d],f),z=p.sigmoid().mulStrict(y.tanh()).addStrict(a.mulStrict(o.add(m).sigmoid())),v=z.tanh().mulStrict(b.sigmoid());return[z,v]}}),Uf=Ms({multiRNNCell_:function(n,x,t,e){for(var i=qs(x,"data","multiRNNCell"),r=Cs(t,"c","multiRNNCell"),o=Cs(e,"h","multiRNNCell"),s=i,h=[],u=0;u<n.length;u++){var a=n[u](s,r[u],o[u]);h.push(a[0]),h.push(a[1]),s=a[1]}var g=[],l=[];for(u=0;u<h.length;u+=2)g.push(h[u]),l.push(h[u+1]);return[g,l]}}),Vf=Ms({movingAverage_:function(n,x,t,e,i){void 0===i&&(i=!0);var r=qs(n,"v","movingAverage"),o=qs(x,"x","movingAverage"),s=qs(t,"decay","movingAverage");ro(r,o),Ji(xr(r.shape,o.shape),function(){return"Shape mismatch in v and x"});var h=Us(1),u=h.sub(s),a=o.sub(r).mul(u);if(i){Ji(null!=e,function(){return"When using zeroDebias: true, step is required."});var g=qs(e,"step","movingAverage");a=a.div(h.sub(md(s,g)))}return r.add(a)}}),Wf=Ms({stridedSlice_:function(n,x,t,e,i,r,o,s,h){if(void 0===i&&(i=0),void 0===r&&(r=0),void 0===o&&(o=0),void 0===s&&(s=0),void 0===h&&(h=0),null==e&&(e=new Array(x.length)),0!==o)throw new Error("ellipsis mask is not yet supported");var u=qs(n,"x","stridedSlice"),a=uu(s),g=u.shape.slice();a.forEach(function(n){x[n]=0,t[n]=1,g.splice(n,0,1)}),u=u.reshape(g);for(var l=0;l<u.rank;l++)x[l]=gu(i,x,e,u.shape,l),t[l]=lu(r,t,e,u.shape,l),e[l]=e[l]||1;var c=uu(h);c.forEach(function(n){t[n]=x[n]+1,e[n]=1});var d=au(x,t,e),f=d.filter(function(n,x){return-1===c.indexOf(x)});return e.every(function(n){return 1===n})?pf(u,x,d).reshape(f):ao.runKernelFunc(function(n){return n.stridedSlice(u,x,t,e)},{$x:u}).reshape(f)}}),Qf=Ms({topk_:function(n,x,t){void 0===x&&(x=1),void 0===t&&(t=!0);var e=qs(n,"x","topk");if(0===e.rank)throw new Error("topk() expects the input to be of rank 1 or higher");var i=e.shape[e.shape.length-1];if(x>i)throw new Error("'k' passed to topk() must be <= the last dimension ("+i+") but got "+x);var r=ao.runKernelFunc(function(n){return n.topk(e,x,t)},{$x:e});return{values:r[0],indices:r[1]}}}),Gf=Ms({scatterND_:function(n,x,t){var e=qs(n,"indices","scatterND","int32"),i=qs(x,"updates","scatterND");return ou(i,e,t),ao.runKernelFunc(function(n){return n.scatterND(e,i,t)},{indices:e,updates:i},null,"ScatterNd",{shape:t})}}),Kf=Ms({fft_:function(n){Ji("complex64"===n.dtype,function(){return"The dtype for tf.spectral.fft() must be complex64 but got "+n.dtype+"."});var x=n.shape[n.shape.length-1],t=n.size/x,e=n.as2D(t,x);return ao.runKernelFunc(function(n){return n.fft(e)},{input:n}).reshape(n.shape)}}),Yf=Ms({ifft_:function(n){Ji("complex64"===n.dtype,function(){return"The dtype for tf.spectral.ifft() must be complex64 but got "+n.dtype+"."});var x=n.shape[n.shape.length-1],t=n.size/x,e=n.as2D(t,x);return ao.runKernelFunc(function(n){return n.ifft(e)},{input:n}).reshape(n.shape)}}),Jf=Ms({rfft_:function(n,x){Ji("float32"===n.dtype,function(){return"The dtype for rfft() must be real value but got "+n.dtype});var t,e=n.shape[n.shape.length-1],i=n.size/e;if(null!=x&&x<e){var r=n.shape.map(function(n){return 0}),o=n.shape.map(function(n){return n});o[n.shape.length-1]=x,t=n.slice(r,o),e=x}else if(null!=x&&x>e){var s=n.shape.map(function(n){return n});s[n.shape.length-1]=x-e,t=n.concat(Zs(s),n.shape.length-1),e=x}else t=n;var h=t.zerosLike(),u=Ns(t,h).as2D(i,e),a=Kf(u),g=Math.floor(e/2)+1,l=Fs(a),c=Ps(a),d=l.split([g,e-g],l.shape.length-1),f=c.split([g,e-g],c.shape.length-1),p=t.shape.slice();return p[t.shape.length-1]=g,Ns(d[0],f[0]).reshape(p)}}),Xf=Ms({irfft_:function(n){var x=n.shape[n.shape.length-1],t=n.size/x;if(x<=2){var e=n.as2D(t,x),i=Yf(e);return Fs(i)}var r=[t,2*(x-1)],o=Fs(n).as2D(t,x),s=Ps(n).as2D(t,x),h=o.slice([0,1],[t,x-2]).reverse(1),u=s.slice([0,1],[t,x-2]).reverse(1).mul(Us(-1)),a=o.concat(h,1),g=s.concat(u,1);return e=Ns(a,g).as2D(r[0],r[1]),i=Yf(e),Fs(i)}}),Zf=Object.freeze({fft:Kf,ifft:Yf,rfft:Jf,irfft:Xf}),$f=Ms({sparseToDense_:function(n,x,t,e){void 0===e&&(e=0);var i=qs(n,"sparseIndices","sparseToDense","int32"),r=qs(x,"sparseValues","sparseToDense"),o=qs(e,"defaultValue","sparseToDense",r.dtype);return function(n,x,t,e){if("int32"!==n.dtype)throw new Error("tf.sparseToDense() expects the indices to be int32 type, but the dtype was "+n.dtype+".");if(n.rank>2)throw new Error("sparseIndices should be a scalar, vector, or matrix, but got shape "+n.shape+".");var i=n.rank>0?n.shape[0]:1,r=n.rank>1?n.shape[1]:1;if(t.length!==r)throw new Error("outputShape has incorrect number of elements:, "+t.length+", should be: "+r+".");var o=x.size;if(0!==x.rank&&(1!==x.rank||o!==i))throw new Error("sparseValues has incorrect shape "+x.shape+", should be [] or ["+i+"]");if(x.dtype!==e.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}(i,r,t,o),ao.runKernelFunc(function(n){return n.sparseToDense(i,r,t,o)},{$sparseIndices:i,$sparseValues:r,$defaultValue:o})}}),np=Ms({gatherND_:function(n,x){var t=qs(x,"indices","gatherND","int32"),e=qs(n,"x","gatherND");return ao.runKernelFunc(function(n){return n.gatherND(e,t)},{x:e,indices:t},null,"GatherNd")}}),xp=Ms({diag_:function(n){var x=qs(n,"x","diag").flatten(),t=n.shape.concat(n.shape);return ao.runKernelFunc(function(n){return n.diag(x)},{$x:x}).reshape(t)}}),tp=Ms({dropout_:function(n,x,t,e){var i=qs(n,"x","dropout");if(Ji("float32"===i.dtype,function(){return"x has to be a floating point tensor since it's going to be scaled, but got a "+i.dtype+" tensor instead."}),Ji(x>=0&&x<1,function(){return"rate must be a float in the range [0, 1), but got "+x+"."}),0===x)return n instanceof Kr?i.clone():i;var r=function(n,x){if(null==x)return n.shape.slice();if(xr(n.shape,x))return x;if(n.shape.length===x.length){for(var t=[],e=0;e<n.shape.length;e++)null==x[e]&&null!=n.shape[e]?t.push(n.shape[e]):t.push(x[e]);return t}return x}(i,t),o=1-x,s=Hh(r,0,1,"float32",e).add(o).floor().div(o);return i.mul(s)}});function ep(n,x,t){for(var e=1-n%2,i=new Float32Array(n),r=0;r<n;++r){var o=2*Math.PI*r/(n+e-1);i[r]=x-t*Math.cos(o)}return Vs(i,"float32")}var ip,rp=Ms({hannWindow_:function(n){return ep(n,.5,.5)}}),op=Ms({hammingWindow_:function(n){return ep(n,.54,.46)}}),sp=Ms({frame_:function(n,x,t,e,i){void 0===e&&(e=!1),void 0===i&&(i=0);for(var r=0,o=[];r+x<=n.size;)o.push(pf(n,r,x)),r+=t;if(e)for(;r<n.size;){var s=r+x-n.size,h=ih([pf(n,r,x-s),$s([s],i)]);o.push(h),r+=t}return 0===o.length?Ws([],[0,x]):ih(o).as2D(o.length,x)}}),hp=Ms({stft_:function(n,x,t,e,i){var r;void 0===i&&(i=rp),null==e&&(r=x,e=Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2)))));for(var o=sp(n,x,t),s=pd(o,i(x)),h=[],u=0;u<o.shape[0];u++)h.push(Jf(s.slice([u,0],[1,x]),e));return ih(h)}}),up=Object.freeze({hannWindow:rp,hammingWindow:op,frame:sp,stft:hp}),ap=function(n,x,t){return void 0===t&&(t=1),Oi(this,void 0,void 0,function(){var e,i,r,o,s,h,u,a,g,l,c,d,f,p;return _i(this,function(y){switch(y.label){case 0:return e=qs(n,"predictions","inTopK"),i=qs(x,"targets","inTopK"),Ji(e.rank>1,function(){return"inTopK() expects the predictions to be of rank 2 or higher, but got "+e.rank}),Ji(e.rank-1===i.rank,function(){return"predictions rank should be 1 larger than targets rank, but got predictions rank "+e.rank+" and targets rank "+i.rank}),Xi(e.shape.slice(0,e.shape.length-1),i.shape,"predictions's shape should be align with the targets' shape, except the last dimension."),r=e.shape[e.shape.length-1],Ji(t>0&&t<=r,function(){return"'k' passed to inTopK() must be > 0 && <= the predictions last dimension ("+r+"), but got "+t}),[4,e.data()];case 1:return o=y.sent(),[4,i.data()];case 2:for(s=y.sent(),h=[o.length/r,r],a=h[1],g=ar("bool",u=h[0]),l=0;l<u;l++){for(c=l*a,d=o.subarray(c,c+a),f=[],p=0;p<d.length;p++)f.push({value:d[p],index:p});for(f.sort(function(n,x){return x.value-n.value}),g[l]=0,p=0;p<t;p++)if(f[p].index===s[l]){g[l]=1;break}}return n!==e&&e.dispose(),x!==i&&i.dispose(),[2,Ls(g,i.shape,"bool")]}})})};!function(n){n[n.NONE=0]="NONE",n[n.MEAN=1]="MEAN",n[n.SUM=2]="SUM",n[n.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"}(ip||(ip={}));var gp=Ms({absoluteDifference_:function(n,x,t,e){void 0===e&&(e=ip.SUM_BY_NONZERO_WEIGHTS);var i=qs(n,"labels","absoluteDifference"),r=qs(x,"predictions","absoluteDifference"),o=null;null!=t&&(o=qs(t,"weights","absoluteDifference")),Xi(i.shape,r.shape,"Error in absoluteDifference: ");var s=i.sub(r).abs();return lp(s,o,e)}}),lp=Ms({computeWeightedLoss_:function(n,x,t){void 0===t&&(t=ip.SUM_BY_NONZERO_WEIGHTS);var e=qs(n,"losses","computeWeightedLoss"),i=null;null!=x&&(i=qs(x,"weights","computeWeightedLoss"));var r=null==i?e:e.mul(i);if(t===ip.NONE)return r;if(t===ip.SUM)return r.sum();if(t===ip.MEAN){if(null==i)return r.mean();var o=e.size/i.size,s=r.sum().div(i.sum());return o>1?s.div(Us(o)):s}if(t===ip.SUM_BY_NONZERO_WEIGHTS){if(null==i)return r.sum().div(Us(e.size));var h=i.mul(Xs(e.shape)).notEqual(Us(0)).sum().toFloat();return r.sum().div(h)}throw Error("Unknown reduction: "+t)}}),cp=Ms({cosineDistance_:function(n,x,t,e,i){void 0===i&&(i=ip.SUM_BY_NONZERO_WEIGHTS);var r=qs(n,"labels","cosineDistance"),o=qs(x,"predictions","cosineDistance"),s=null;null!=e&&(s=qs(e,"weights","cosineDistance")),Xi(r.shape,o.shape,"Error in cosineDistance: ");var h=Us(1).sub(r.mul(o).sum(t,!0));return lp(h,s,i)}}),dp=Ms({hingeLoss_:function(n,x,t,e){void 0===e&&(e=ip.SUM_BY_NONZERO_WEIGHTS);var i=qs(n,"labels","hingeLoss"),r=qs(x,"predictions","hingeLoss"),o=null;null!=t&&(o=qs(t,"weights","hingeLoss")),Xi(i.shape,r.shape,"Error in hingeLoss: ");var s=Us(1);i=Us(2).mul(i).sub(s);var h=s.sub(i.mul(r)).relu();return lp(h,o,e)}}),fp=Ms({huberLoss_:function(n,x,t,e,i){void 0===e&&(e=1),void 0===i&&(i=ip.SUM_BY_NONZERO_WEIGHTS);var r=qs(n,"labels","huberLoss"),o=qs(x,"predictions","huberLoss"),s=null;null!=t&&(s=qs(t,"weights","huberLoss")),Xi(r.shape,o.shape,"Error in huberLoss: ");var h=Us(e),u=o.sub(r).abs(),a=ld(u,h),g=u.sub(a),l=Us(.5).mul(a.square()).add(h.mul(g));return lp(l,s,i)}}),pp=Ms({logLoss_:function(n,x,t,e,i){void 0===e&&(e=1e-7),void 0===i&&(i=ip.SUM_BY_NONZERO_WEIGHTS);var r=qs(n,"labels","logLoss"),o=qs(x,"predictions","logLoss"),s=null;null!=t&&(s=qs(t,"weights","logLoss")),Xi(r.shape,o.shape,"Error in logLoss: ");var h=Us(1),u=Us(e),a=r.mul(o.add(u).log()).neg().sub(h.sub(r).mul(h.sub(o).add(u).log()));return lp(a,s,i)}}),yp=Ms({meanSquaredError_:function(n,x,t,e){void 0===e&&(e=ip.SUM_BY_NONZERO_WEIGHTS);var i=qs(n,"labels","meanSquaredError"),r=qs(x,"predictions","meanSquaredError"),o=null;null!=t&&(o=qs(t,"weights","meanSquaredError")),Xi(i.shape,r.shape,"Error in meanSquaredError: ");var s=i.squaredDifference(r);return lp(s,o,e)}}),mp=Ms({sigmoidCrossEntropy_:function(n,x,t,e,i){void 0===e&&(e=0),void 0===i&&(i=ip.SUM_BY_NONZERO_WEIGHTS);var r=qs(n,"multiClassLabels","sigmoidCrossEntropy"),o=qs(x,"logits","sigmoidCrossEntropy"),s=null;if(null!=t&&(s=qs(t,"weights","sigmoidCrossEntropy")),Xi(r.shape,o.shape,"Error in sigmoidCrossEntropy: "),e>0){var h=Us(e),u=Us(1),a=Us(.5);r=r.mul(u.sub(h)).add(a.mul(h))}var g=function(n,x){var t=qs(n,"labels","sigmoidCrossEntropyWithLogits"),e=qs(x,"logits","sigmoidCrossEntropyWithLogits");Xi(t.shape,e.shape,"Error in sigmoidCrossEntropyWithLogits: ");var i=e.relu(),r=e.mul(t),o=e.abs().neg().exp().log1p();return i.sub(r).add(o)}(r,o);return lp(g,s,i)}}),bp=Ms({softmaxCrossEntropy_:function(n,x,t,e,i){void 0===e&&(e=0),void 0===i&&(i=ip.SUM_BY_NONZERO_WEIGHTS);var r=qs(n,"onehotLabels","softmaxCrossEntropy"),o=qs(x,"logits","softmaxCrossEntropy"),s=null;if(null!=t&&(s=qs(t,"weights","softmaxCrossEntropy")),Xi(r.shape,o.shape,"Error in softmaxCrossEntropy: "),e>0){var h=Us(e),u=Us(1),a=Us(r.shape[1]);r=r.mul(u.sub(h)).add(h.div(a))}var g=function(n,x,t){if(void 0===t&&(t=-1),-1===t&&(t=x.rank-1),t!==x.rank-1)throw Error("Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank "+x.rank+" and dim was "+t);return pu(function(n,x,e){var i=x.logSumExp([t],!0),r=x.toFloat().sub(i);return e([n,r]),{value:r.mul(n).neg().sum([t]),gradFunc:function(n,x){var e=x[0],i=x[1],r=Is(n.shape,[t]);return[n.reshape(r).mul(e.toFloat().sub(i.exp())),n.reshape(r).mul(i.exp().sub(e.toFloat()))]}}})(n,x)}(r,o);return lp(g,s,i)}}),zp=Object.freeze({get Reduction(){return ip},absoluteDifference:gp,computeWeightedLoss:lp,cosineDistance:cp,hingeLoss:dp,huberLoss:fp,logLoss:pp,meanSquaredError:yp,sigmoidCrossEntropy:mp,softmaxCrossEntropy:bp});function vp(n,x){return void 0===x&&(x=!1),ao.tidy(function(){if(2!==n.shape.length)throw new Error("qr2d() requires a 2D Tensor, but got a "+n.shape.length+"D Tensor.");for(var t=n.shape[0],e=n.shape[1],i=Dh(t),r=n.clone(),o=Ws([[1]],[1,1]),s=o.clone(),h=t>=e?e:t,u=function(n){var x,h=r,u=s,a=i;x=ao.tidy(function(){var x=r.slice([n,n],[t-n,1]),h=x.norm(),u=r.slice([n,n],[1,1]),a=Ws([[-1]]).where(u.greater(0),Ws([[1]])),g=u.sub(a.mul(h)),l=x.div(g);s=1===l.shape[0]?o.clone():o.concat(l.slice([1,0],[l.shape[0]-1,l.shape[1]]),0);var c=a.matMul(g).div(h).neg(),d=r.slice([n,0],[t-n,e]),f=c.mul(s);if(0===n)r=d.sub(f.matMul(s.transpose().matMul(d)));else{var p=d.sub(f.matMul(s.transpose().matMul(d)));r=r.slice([0,0],[n,e]).concat(p,0)}var y=i.slice([0,n],[t,i.shape[1]-n]);if(0===n)i=y.sub(y.matMul(s).matMul(f.transpose()));else{var m=y.sub(y.matMul(s).matMul(f.transpose()));i=i.slice([0,0],[t,n]).concat(m,1)}return[s,r,i]}),s=x[0],r=x[1],i=x[2],zs([h,u,a])},a=0;a<h;++a)u(a);return!x&&t>e&&(i=i.slice([0,0],[t,e]),r=r.slice([0,0],[e,e])),[i,r]})}var jp=Ms({bandPart_:function(n,x,t){if(x%1!=0)throw new Error("bandPart(): numLower must be an integer, got "+x+".");if(t%1!=0)throw new Error("bandPart(): numUpper must be an integer, got "+t+".");var e=qs(n,"a","bandPart");if(e.rank<2)throw new Error("bandPart(): Rank must be at least 2, got "+e.rank+".");var i=e.shape,r=e.shape.slice(-2),o=r[0],s=r[1];if(!(x<=o))throw new Error("bandPart(): numLower ("+x+") must not be greater than the number of rows ("+o+").");if(!(t<=s))throw new Error("bandPart(): numUpper ("+t+") must not be greater than the number of columns ("+s+").");x<0&&(x=o),t<0&&(t=s);var h=xh(0,o,1,"int32").reshape([-1,1]),u=xh(0,s,1,"int32"),a=vd(h,u),g=Jc(a.lessEqual(Us(+x,"int32")),a.greaterEqual(Us(-t,"int32"))),l=Zs([o,s],e.dtype);return Qh(Yh(e.reshape([-1,o,s])).map(function(n){return nd(g,n,l)})).reshape(i)}}),wp=Ms({gramSchmidt_:function(n){var x;if(Array.isArray(n)){x=!1,Ji(null!=n&&n.length>0,function(){return"Gram-Schmidt process: input must not be null, undefined, or empty"});for(var t=n[0].shape[0],e=function(x){Ji(n[x].shape[0]===t,function(){return"Gram-Schmidt: Non-unique lengths found in the input vectors: ("+n[x].shape[0]+" vs. "+t+")"})},i=1;i<n.length;++i)e(i)}else x=!0,n=uh(n,n.shape[0],0).map(function(n){return Wh(n,[0])});Ji(n.length<=n[0].shape[0],function(){return"Gram-Schmidt: Number of vectors ("+n.length+") exceeds number of dimensions ("+n[0].shape[0]+")."});var r=[],o=n,s=function(n){r.push(ao.tidy(function(){var x=o[n];if(n>0)for(var t=0;t<n;++t){var e=Df(r[t].mulStrict(x)).mul(r[t]);x=x.sub(e)}return x.div(Lf(x,"euclidean"))}))};for(i=0;i<n.length;++i)s(i);return x?Qh(r,0):r}}),kp=Ms({qr_:function(n,x){if(void 0===x&&(x=!1),n.rank<2)throw new Error("qr() requires input tensor to have a rank >= 2, but got rank "+n.rank);if(2===n.rank)return vp(n,x);var t=n.shape.slice(0,n.shape.length-2).reduce(function(n,x){return n*x}),e=Yh(n.reshape([t,n.shape[n.shape.length-2],n.shape[n.shape.length-1]]),0),i=[],r=[];return e.forEach(function(n){var t=vp(n,x),e=t[0],o=t[1];i.push(e),r.push(o)}),[Qh(i,0).reshape(n.shape),Qh(r,0).reshape(n.shape)]}}),qp=Object.freeze({bandPart:jp,gramSchmidt:wp,qr:kp});function Cp(n,x,t,e,i,r){null==e&&(e=.5),null==i&&(i=Number.NEGATIVE_INFINITY),null==r&&(r=0);var o=n.shape[0];return t=Math.min(t,o),Ji(0<=e&&e<=1,function(){return"iouThreshold must be in [0, 1], but was '"+e+"'"}),Ji(2===n.rank,function(){return"boxes must be a 2D tensor, but was of rank '"+n.rank+"'"}),Ji(4===n.shape[1],function(){return"boxes must have 4 columns, but 2nd dimension was "+n.shape[1]}),Ji(1===x.rank,function(){return"scores must be a 1D tensor"}),Ji(x.shape[0]===o,function(){return"scores has incompatible shape with boxes. Expected "+o+", but was "+x.shape[0]}),Ji(0<=r&&r<=1,function(){return"softNmsSigma must be in [0, 1], but was '"+r+"'"}),{maxOutputSize:t,iouThreshold:e,scoreThreshold:i,softNmsSigma:r}}var Ap=Ms({resizeBilinear_:function(n,x,t){void 0===t&&(t=!1);var e=qs(n,"images","resizeBilinear");Ji(3===e.rank||4===e.rank,function(){return"Error in resizeBilinear: x must be rank 3 or 4, but got rank "+e.rank+"."}),Ji(2===x.length,function(){return"Error in resizeBilinear: new shape must 2D, but got shape "+x+"."});var i=e,r=!1;3===e.rank&&(r=!0,i=e.as4D(1,e.shape[0],e.shape[1],e.shape[2]));var o=x[0],s=x[1],h=ao.runKernelFunc(function(n,x){return x([i]),n.resizeBilinear(i,o,s,t)},{x:i},function(n,x){return{x:function(){return ao.runKernelFunc(function(e){return e.resizeBilinearBackprop(n,x[0],t)},{})}}},"ResizeBilinear",{alignCorners:t,newHeight:o,newWidth:s});return r?h.as3D(h.shape[1],h.shape[2],h.shape[3]):h}}),Ep=Ms({resizeNearestNeighbor_:function(n,x,t){void 0===t&&(t=!1);var e=qs(n,"images","resizeNearestNeighbor");Ji(3===e.rank||4===e.rank,function(){return"Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank "+e.rank+"."}),Ji(2===x.length,function(){return"Error in resizeNearestNeighbor: new shape must 2D, but got shape "+x+"."}),Ji("float32"===e.dtype||"int32"===e.dtype,function(){return"`images` must have `int32` or `float32` as dtype"});var i=e,r=!1;3===e.rank&&(r=!0,i=e.as4D(1,e.shape[0],e.shape[1],e.shape[2]));var o=x[0],s=x[1],h=ao.runKernelFunc(function(n,x){return x([i]),n.resizeNearestNeighbor(i,o,s,t)},{batchImages:i},function(n,x){return{batchImages:function(){return ao.runKernelFunc(function(e){return e.resizeNearestNeighborBackprop(n,x[0],t)},{})}}});return r?h.as3D(h.shape[1],h.shape[2],h.shape[3]):h}}),Sp=Ms({nonMaxSuppression_:function(n,x,t,e,i){void 0===e&&(e=.5),void 0===i&&(i=Number.NEGATIVE_INFINITY);var r=qs(n,"boxes","nonMaxSuppression"),o=qs(x,"scores","nonMaxSuppression"),s=Cp(r,o,t,e,i);t=s.maxOutputSize,e=s.iouThreshold,i=s.scoreThreshold;var h={maxOutputSize:t,iouThreshold:e,scoreThreshold:i};return ao.runKernelFunc(function(n){return n.nonMaxSuppression(r,o,t,e,i)},{boxes:r,scores:o},null,"NonMaxSuppressionV3",h)}}),Ip=function(n,x,t,e,i){return void 0===e&&(e=.5),void 0===i&&(i=Number.NEGATIVE_INFINITY),Oi(this,void 0,void 0,function(){var r,o,s,h,u,a,g;return _i(this,function(l){switch(l.label){case 0:return r=qs(n,"boxes","nonMaxSuppressionAsync"),o=qs(x,"scores","nonMaxSuppressionAsync"),s=Cp(r,o,t,e,i),t=s.maxOutputSize,e=s.iouThreshold,i=s.scoreThreshold,[4,Promise.all([r.data(),o.data()])];case 1:return h=l.sent(),u=h[0],a=h[1],g=Qu(u,a,t,e,i),r!==n&&r.dispose(),o!==x&&o.dispose(),[2,g]}})})},Dp=Ms({nonMaxSuppressionWithScore_:function(n,x,t,e,i,r){void 0===e&&(e=.5),void 0===i&&(i=Number.NEGATIVE_INFINITY),void 0===r&&(r=0);var o=qs(n,"boxes","nonMaxSuppression"),s=qs(x,"scores","nonMaxSuppression"),h=Cp(o,s,t,e,i,r),u={maxOutputSize:t=h.maxOutputSize,iouThreshold:e=h.iouThreshold,scoreThreshold:i=h.scoreThreshold,softNmsSigma:r=h.softNmsSigma},a=ao.runKernel("NonMaxSuppressionV5",{boxes:o,scores:s},u);return{selectedIndices:a[0],selectedScores:a[1]}}}),Op=function(n,x,t,e,i,r){return void 0===e&&(e=.5),void 0===i&&(i=Number.NEGATIVE_INFINITY),void 0===r&&(r=0),Oi(this,void 0,void 0,function(){var o,s,h,u,a,g,l;return _i(this,function(c){switch(c.label){case 0:return o=qs(n,"boxes","nonMaxSuppressionAsync"),s=qs(x,"scores","nonMaxSuppressionAsync"),h=Cp(o,s,t,e,i,r),t=h.maxOutputSize,e=h.iouThreshold,i=h.scoreThreshold,r=h.softNmsSigma,[4,Promise.all([o.data(),s.data()])];case 1:return u=c.sent(),a=u[0],g=u[1],l=Gu(a,g,t,e,i,r),o!==n&&o.dispose(),s!==x&&s.dispose(),[2,l]}})})},_p=Ms({cropAndResize_:function(n,x,t,e,i,r){var o=qs(n,"image","cropAndResize"),s=qs(x,"boxes","cropAndResize","float32"),h=qs(t,"boxInd","cropAndResize","int32");i=i||"bilinear",r=r||0;var u=s.shape[0];return Ji(4===o.rank,function(){return"Error in cropAndResize: image must be rank 4,but got rank "+o.rank+"."}),Ji(2===s.rank&&4===s.shape[1],function(){return"Error in cropAndResize: boxes must be have size ["+u+",4] but had shape "+s.shape+"."}),Ji(1===h.rank&&h.shape[0]===u,function(){return"Error in cropAndResize: boxInd must be have size ["+u+"] but had shape "+s.shape+"."}),Ji(2===e.length,function(){return"Error in cropAndResize: cropSize must be of length 2, but got length "+e.length+"."}),Ji(e[0]>=1&&e[1]>=1,function(){return"cropSize must be atleast [1,1], but was "+e}),Ji("bilinear"===i||"nearest"===i,function(){return"method must be bilinear or nearest, but was "+i}),ao.runKernelFunc(function(n,x){return n.cropAndResize(o,s,h,e,i,r)},{images:o,boxes:s,boxInd:h},null,"CropAndResize",{method:i,extrapolationValue:r,cropSize:e})}}),Tp=Object.freeze({resizeBilinear:Ap,resizeNearestNeighbor:Ep,nonMaxSuppression:Sp,nonMaxSuppressionAsync:Ip,nonMaxSuppressionWithScore:Dp,nonMaxSuppressionWithScoreAsync:Op,cropAndResize:_p}),Rp=function(n,x){return!(n>0)||"linear"===x},Bp=function(n,x,t){if(null==t||"linear"===t)return n;if("relu"===t)return n.mul(x.step());throw new Error("Gradient for activation "+t+" has not been implemented yet.")},Mp=function(n,x){var t=x,e=wu(n.shape,x.shape);return e.length>0&&(t=t.sum(e)),t.reshape(n.shape)},Np=function(n,x,t){if("linear"===x)return n;if("relu"===x)return Bf(n);if("elu"===x)return _f(n);if("relu6"===x)return Mf(n);if("prelu"===x)return Rf(n,t);throw new Error("Unknown fused activation "+x+".")},Fp=Ms({fusedMatMul_:function(n){var x,t=n.a,e=n.b,i=n.transposeA,r=void 0!==i&&i,o=n.transposeB,s=void 0!==o&&o,h=n.bias,u=n.activation,a=void 0===u?"linear":u,g=n.preluActivationWeights;if(!1===Rp(ao.state.gradientDepth,a)){var l=nf(t,e,r,s);return null!=h&&(l=td(l,h)),Np(l,a,g)}var c=qs(t,"a","fused matMul"),d=qs(e,"b","fused matMul");x=io(c,d),c=x[0],d=x[1];var f=r?c.shape[c.rank-2]:c.shape[c.rank-1],p=s?d.shape[d.rank-1]:d.shape[d.rank-2],y=r?c.shape[c.rank-1]:c.shape[c.rank-2],m=s?d.shape[d.rank-2]:d.shape[d.rank-1],b=c.shape.slice(0,-2),z=d.shape.slice(0,-2),v=nr(b),j=nr(z);Ji(c.rank>=2&&d.rank>=2&&c.rank===d.rank,function(){return"Error in fused matMul: inputs must have the same rank of at least 2, got ranks "+c.rank+" and "+d.rank+"."}),Ji(xr(b,z),function(){return"Error in fused matMul: outer dimensions ("+b+") and ("+z+") of Tensors with shapes "+c.shape+" and "+d.shape+" must match."}),Ji(f===p,function(){return"Error in fused matMul: inner shapes ("+f+") and ("+p+") of Tensors with shapes "+c.shape+" and "+d.shape+" and transposeA="+r+" and transposeB="+s+" must match."});var w,k,q=c.shape.slice(0,-2).concat([y,m]),C=r?c.as3D(v,f,y):c.as3D(v,y,f),A=s?d.as3D(j,m,p):d.as3D(j,p,m);null!=h&&ku(q,(w=io(w=qs(h,"bias","fused matMul"),c)[0]).shape),null!=g&&(k=qs(g,"prelu weights","fused matMul"));var E={a:C,b:A};null!=h&&(E.bias=w),null!=g&&(E.preluActivationWeights=k);var S=[C,A];return ao.runKernelFunc(function(n,x){var t=n.fusedBatchMatMul({a:C,b:A,transposeA:r,transposeB:s,bias:w,activation:a,preluActivationWeights:k});return x([C,A,t]),t},E,function(n,x){var t=x[0],e=x[1],i=x[2],o=Bp(n,i,a),u={};return null!=h&&(u={bias:function(){return Mp(w,o)}}),r||s?!r&&s?Object.assign({a:function(){return o.matMul(e,!1,!1)},b:function(){return o.matMul(t,!0,!1)}},u):r&&!s?Object.assign({a:function(){return e.matMul(o,!1,!0)},b:function(){return t.matMul(o,!1,!1)}},u):Object.assign({a:function(){return e.matMul(o,!0,!0)},b:function(){return o.matMul(t,!0,!0)}},u):Object.assign({a:function(){return o.matMul(e,!1,!0)},b:function(){return t.matMul(o,!0,!1)}},u)},"_FusedMatMul",{transposeA:r,transposeB:s,activation:a},S,[!0]).reshape(q)}}),Pp=Ms({fusedConv2d_:function(n){var x=n.x,t=n.filter,e=n.strides,i=n.pad,r=n.dataFormat,o=void 0===r?"NHWC":r,s=n.dilations,h=void 0===s?[1,1]:s,u=n.dimRoundingMode,a=n.bias,g=n.activation,l=void 0===g?"linear":g,c=n.preluActivationWeights;if(l=l||"linear",!1===Rp(ao.state.gradientDepth,l)){var d=Vd(x,t,e,i,o,h,u);return null!=a&&(d=td(d,a)),Np(d,l,c)}var f=qs(x,"x","conv2d"),p=qs(t,"filter","conv2d"),y=f,m=!1;3===f.rank&&(m=!0,y=f.as4D(1,f.shape[0],f.shape[1],f.shape[2])),Ji(4===y.rank,function(){return"Error in fused conv2d: input must be rank 4, but got rank "+y.rank+"."}),Ji(4===p.rank,function(){return"Error in fused conv2d: filter must be rank 4, but got rank "+p.rank+"."}),null!=u&&Ji(tr(i),function(){return"Error in fused conv2d: pad must be an integer when using, dimRoundingMode "+u+" but got pad "+i+"."}),Ji(y.shape[3]===p.shape[2],function(){return"Error in conv2d: depth of input ("+y.shape[3]+") must match input depth for filter "+p.shape[2]+"."}),Ji(Ru(e,h),function(){return"Error in conv2D: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+h+"'"}),Ji("NHWC"===o,function(){return"Error in conv2d: got dataFormat of "+o+" but only NHWC is currently supported."});var b,z,v=Au(y.shape,p.shape,e,h,i,u);null!=a&&(b=io(b=qs(a,"bias","fused conv2d"),f)[0],ku(v.outShape,b.shape)),null!=c&&(z=qs(c,"prelu weights","fused conv2d"));var j={x:y,filter:p};null!=a&&(j.bias=b),null!=c&&(j.preluActivationWeights=z);var w=[p,y],k=ao.runKernelFunc(function(n,x){var t=n.fusedConv2d({input:y,filter:p,convInfo:v,bias:b,activation:l,preluActivationWeights:z});return x([p,y,t]),t},j,function(n,x){var t=x,r=t[0],o=t[1],s=t[2],u=Bp(n,s,l);Ji(Tu(h),function(){return"Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+h+"'"});var g={};return null!=a&&(g={bias:function(){return Mp(b,u)}}),Object.assign({x:function(){return Gd(o.shape,u,r,e,i)},filter:function(){return Qd(o,u,r.shape,e,i)}},g)},"FusedConv2D",{convInfo:v,activation:l},w,[!0]);return m?k.as3D(k.shape[1],k.shape[2],k.shape[3]):k}}),Lp=Ms({fusedDepthwiseConv2d_:function(n){var x=n.x,t=n.filter,e=n.strides,i=n.pad,r=n.dataFormat,o=void 0===r?"NHWC":r,s=n.dilations,h=void 0===s?[1,1]:s,u=n.dimRoundingMode,a=n.bias,g=n.activation,l=void 0===g?"linear":g,c=n.preluActivationWeights;if(!1===Rp(ao.state.gradientDepth,l)){var d=Kd(x,t,e,i,o,h,u);return null!=a&&(d=td(d,a)),Np(d,l,c)}var f=qs(x,"x","depthwiseConv2d"),p=qs(t,"filter","depthwiseConv2d"),y=f,m=!1;3===f.rank&&(m=!0,y=f.as4D(1,f.shape[0],f.shape[1],f.shape[2])),Ji(4===y.rank,function(){return"Error in fused depthwiseConv2d: input must be rank 4, but got rank "+y.rank+"."}),Ji(4===p.rank,function(){return"Error in fused depthwiseConv2d: filter must be rank 4, but got rank "+p.rank+"."}),Ji(y.shape[3]===p.shape[2],function(){return"Error in fused depthwiseConv2d: number of input channels ("+y.shape[3]+") must match the inChannels dimension in filter "+p.shape[2]+"."}),null==h&&(h=[1,1]),Ji(Ru(e,h),function(){return"Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+h+"'"}),null!=u&&Ji(tr(i),function(){return"Error in fused depthwiseConv2d: pad must be an integer when using dimRoundingMode "+u+" but got pad "+i+"."});var b,z,v=Au(y.shape,p.shape,e,h,i,u,!0);null!=a&&(b=io(b=qs(a,"bias","fused conv2d"),f)[0],ku(v.outShape,b.shape)),null!=c&&(z=qs(c,"prelu weights","fused depthwiseConv2d"));var j={x:y,filter:p};null!=a&&(j.bias=b),null!=c&&(j.preluActivationWeights=z);var w=[p,y],k=ao.runKernelFunc(function(n,x){var t=n.fusedDepthwiseConv2D({input:y,filter:p,convInfo:v,bias:b,activation:l,preluActivationWeights:z});return x([p,y,t]),t},j,function(n,x){Ji(Tu(h),function(){return"Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '"+h+"'"});var t=x[0],e=x[1],i=x[2],r=Bp(n,i,l),o={};return null!=a&&(o={bias:function(){return Mp(b,r)}}),Object.assign({x:function(){return Yd(e.shape,r,t,v)},filter:function(){return Jd(e,r,t.shape,v)}},o)},"FusedDepthwiseConv2D",{convInfo:v,activation:l},w,[!0]);return m?k.as3D(k.shape[1],k.shape[2],k.shape[3]):k}}),Hp=Object.freeze({matMul:Fp,conv2d:Pp,depthwiseConv2d:Lp}),Up=Object.freeze({image:Tp,linalg:qp,losses:zp,spectral:Zf,fused:Hp,signal:up,square:$l,squaredDifference:xc,conv1d:Ud,conv2d:Vd,conv3d:Wd,depthwiseConv2d:Kd,separableConv2d:Xd,conv2dTranspose:Zd,conv3dTranspose:$d,op:Ms,batchNormalization2d:Hc,batchNormalization3d:Uc,batchNormalization4d:Vc,batchNormalization:Wc,batchNorm:Qc,batchNorm2d:Gc,batchNorm3d:Kc,batchNorm4d:Yc,booleanMaskAsync:Fd,complex:Ns,real:Fs,imag:Ps,concat:ih,concat1d:rh,concat2d:oh,concat3d:sh,concat4d:hh,split:uh,matMul:nf,dot:xf,outerProduct:tf,reverse:ef,reverse1d:rf,reverse2d:of,reverse3d:sf,reverse4d:hf,maxPool:gf,avgPool:lf,pool:cf,maxPool3d:df,avgPool3d:ff,slice:pf,slice1d:yf,slice2d:mf,slice3d:bf,slice4d:zf,abs:tc,acos:ec,acosh:ic,asin:rc,asinh:oc,atan:sc,atanh:hc,ceil:uc,clipByValue:ac,cos:gc,cosh:lc,erf:cc,exp:dc,expm1:fc,floor:pc,log:yc,log1p:mc,logSigmoid:bc,neg:zc,reciprocal:vc,round:jc,rsqrt:wc,sigmoid:kc,sign:qc,isNaN:Cc,isInf:Ac,isFinite:Ec,sin:Sc,sinh:Ic,softplus:Dc,sqrt:Oc,step:_c,tan:Tc,tanh:Rc,all:jf,any:wf,argMax:kf,argMin:qf,logSumExp:Cf,max:Af,mean:Ef,min:Sf,moments:If,sum:Df,prod:Of,equal:wd,equalStrict:kd,greater:qd,greaterEqual:Cd,greaterEqualStrict:Ad,greaterStrict:Ed,less:Sd,lessEqual:Id,lessEqualStrict:Dd,lessStrict:Od,notEqual:_d,notEqualStrict:Td,add:td,addN:ed,addStrict:id,atan2:rd,div:od,divNoNan:sd,divStrict:hd,floorDiv:ud,maximum:ad,maximumStrict:gd,minimum:ld,minimumStrict:cd,mod:dd,modStrict:fd,mul:pd,mulStrict:yd,pow:md,powStrict:bd,squaredDifferenceStrict:zd,sub:vd,subStrict:jd,elu:_f,leakyRelu:Tf,prelu:Rf,relu:Bf,relu6:Mf,selu:Nf,logicalAnd:Jc,logicalNot:Xc,logicalOr:Zc,logicalXor:$c,where:nd,whereAsync:xd,buffer:jh,print:wh,batchToSpaceND:kh,broadcastTo:qh,cast:Ch,clone:Ah,cumsum:Eh,depthToSpace:Sh,expandDims:Ih,eye:Dh,multinomial:Oh,oneHot:_h,pad:Th,pad1d:Rh,pad2d:Bh,pad3d:Mh,pad4d:Nh,rand:Fh,randomNormal:Ph,randomGamma:Lh,randomUniform:Hh,reshape:Uh,spaceToBatchND:Vh,squeeze:Wh,stack:Qh,tile:Gh,truncatedNormal:Kh,unstack:Yh,setdiff1dAsync:Jh,fill:$s,linspace:nh,ones:Xs,range:xh,scalar:Us,tensor:Ls,tensor1d:Vs,tensor2d:Ws,tensor3d:Qs,tensor4d:Gs,tensor5d:Ks,tensor6d:Ys,variable:Js,zeros:Zs,onesLike:th,zerosLike:eh,transpose:Ff,softmax:yu,logSoftmax:mu,localResponseNormalization:Pf,norm:Lf,gather:Md,unsortedSegmentSum:Nd,basicLSTMCell:Hf,multiRNNCell:Uf,movingAverage:Vf,stridedSlice:Wf,topk:Qf,scatterND:Gf,fft:Kf,ifft:Yf,rfft:Jf,irfft:Xf,sparseToDense:$f,gatherND:np,diag:xp,dropout:tp,hannWindow:rp,hammingWindow:op,frame:sp,stft:hp,inTopKAsync:ap});function Vp(n,x){Array.isArray(n)||(n=[n]),n.forEach(function(n){null!=n&&Ji("complex64"!==n.dtype,function(){return x+" does not support complex64 tensors."})})}function Wp(n,x,t,e){if("linear"===t)return n.linear(x);if("relu"===t)return n.relu(x);if("elu"===t)return n.elu(x);if("relu6"===t)return n.relu6(x);if("prelu"===t)return n.prelu(x,e);throw new Error("Activation "+t+" has not been implemented for the CPU backend.")}var Qp=function(n){function x(){var x=n.call(this)||this;return x.blockSize=48,x.firstUse=!0,x.data=new bu(x,ao),x}return Di(x,n),x.prototype.write=function(n,x,t){this.firstUse&&(this.firstUse=!1,Bi().get("IS_NODE")&&js("\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 e={};return this.data.set(e,{values:n,dtype:t}),e},x.prototype.move=function(n,x,t,e){this.data.set(n,{values:x,dtype:e})},x.prototype.numDataIds=function(){return this.data.numDataIds()},x.prototype.read=function(n){return Oi(this,void 0,void 0,function(){return _i(this,function(x){return[2,this.readSync(n)]})})},x.prototype.readSync=function(n){var x=this.data.get(n),t=x.dtype,e=x.complexTensors;return"complex64"===t?Pu(this.readSync(e.real.dataId),this.readSync(e.imag.dataId)):this.data.get(n).values},x.prototype.bufferSync=function(n){var x=this.readSync(n.dataId),t=x;if("string"===n.dtype)try{t=x.map(function(n){return Or(n)})}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return jh(n.shape,n.dtype,t)},x.prototype.makeOutput=function(n,x,t){var e=this.write(n,x,t);return ao.makeTensorFromDataId(e,x,t,this)},x.prototype.disposeData=function(n){if(this.data.has(n)){var x=this.data.get(n).complexTensors;null!=x&&(x.real.dispose(),x.imag.dispose()),this.data.delete(n)}},x.prototype.time=function(n){return Oi(this,void 0,void 0,function(){var x;return _i(this,function(t){return x=Sr(),n(),[2,{kernelMs:Sr()-x}]})})},x.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."]}},x.prototype.complex=function(n,x){var t=this.makeOutput(null,n.shape,"complex64");return this.data.get(t.dataId).complexTensors={real:ao.keep(n.clone()),imag:ao.keep(x.clone())},t},x.prototype.real=function(n){return this.data.get(n.dataId).complexTensors.real.clone()},x.prototype.imag=function(n){return this.data.get(n.dataId).complexTensors.imag.clone()},x.prototype.slice=function(n,x,t){if(Vp(n,"slice"),cu(n.shape,x,t)){var e=du(x,n.strides),i=nr(t);return Ls(this.readSync(n.dataId).subarray(e,e+i),t,n.dtype)}for(var r=jh(t,n.dtype),o=this.bufferSync(n),s=0;s<r.size;++s){var h=r.indexToLoc(s).map(function(n,t){return n+x[t]});r.values[s]=o.get.apply(o,h)}return r.toTensor()},x.prototype.stridedSlice=function(n,x,t,e){Vp(n,"stridedSlice");var i=au(x,t,e);if(i.some(function(n){return 0===n}))return Ls([],i);for(var r=jh(i,n.dtype),o=this.bufferSync(n),s=0;s<r.size;s++){for(var h=r.indexToLoc(s),u=new Array(h.length),a=0;a<u.length;a++)u[a]=h[a]*e[a]+x[a];r.set.apply(r,[o.get.apply(o,u)].concat(h))}return r.toTensor()},x.prototype.diag=function(n){for(var x=this.readSync(n.dataId),t=jh([n.size,n.size],n.dtype),e=t.values,i=0;i<x.length;i++)e[i*n.size+i]=x[i];return t.toTensor()},x.prototype.unstack=function(n,x){for(var t=n.shape[x],e=new Array(n.rank-1),i=0,r=0;r<n.rank;r++)r!==x&&(e[i++]=n.shape[r]);var o=new Array(n.rank).fill(0),s=n.shape.slice();s[x]=1;var h=new Array(t);for(r=0;r<h.length;r++)o[x]=r,h[r]=this.slice(n,o,s).reshape(e);return h},x.prototype.reverse=function(n,x){Vp(n,"reverse");for(var t=jh(n.shape,n.dtype),e=this.bufferSync(n),i=function(i){var r=t.indexToLoc(i),o=r.slice();x.forEach(function(x){return o[x]=n.shape[x]-1-o[x]}),t.set.apply(t,[e.get.apply(e,o)].concat(r))},r=0;r<t.size;r++)i(r);return t.toTensor()},x.prototype.concat=function(n,x){var t=this;if("complex64"===n[0].dtype){var e=n.map(function(n){return Fs(n)}),i=n.map(function(n){return Ps(n)});return Ns(this.concat(e,x),this.concat(i,x))}var r=n.map(function(n){var t=nr(n.shape.slice(x));return n.as2D(-1,t)}),o=Bs(r.map(function(n){return n.shape}),1),s=jh(o,n[0].dtype).values;if(1===r[0].shape[0]){var h=0;r.forEach(function(n){s.set(t.readSync(n.dataId),h),h+=n.size})}else{var u=0;r.forEach(function(n){for(var x=t.readSync(n.dataId),e=0,i=0;i<n.shape[0];++i)for(var r=i*o[1]+u,h=0;h<n.shape[1];++h)s[r+h]=x[e++];u+=n.shape[1]})}var a=Bs(n.map(function(n){return n.shape}),x);return Ls(s,a,n[0].dtype)},x.prototype.neg=function(n){return Vp(n,"neg"),this.multiply(Us(-1),n)},x.prototype.add=function(n,x){return"complex64"===n.dtype||"complex64"===x.dtype?this.broadcastedBinaryComplexOp(n.cast("complex64"),x.cast("complex64"),function(n,x,t,e){return{real:n+t,imag:x+e}}):this.broadcastedBinaryOp(n,x,to(n.dtype,x.dtype),function(n,x){return n+x})},x.prototype.addN=function(n){var x=this;Vp(n,"addN");for(var t=n.map(function(n){return x.readSync(n.dataId)}),e=jh(n[0].shape,n[0].dtype),i=e.values,r=0;r<n.length;r++)for(var o=t[r],s=0;s<i.length;s++)i[s]+=o[s];return e.toTensor()},x.prototype.softmax=function(n,x){var t=hr([x],n.shape),e=this.max(n,t),i=Is(e.shape,t),r=this.subtract(n,e.reshape(i)),o=this.exp(r),s=this.sum(o,t).reshape(i);return this.realDivide(o,s)},x.prototype.subtract=function(n,x){return"complex64"===n.dtype||"complex64"===x.dtype?this.broadcastedBinaryComplexOp(n.cast("complex64"),x.cast("complex64"),function(n,x,t,e){return{real:n-t,imag:x-e}}):this.broadcastedBinaryOp(n,x,to(n.dtype,x.dtype),function(n,x){return n-x})},x.prototype.pow=function(n,x){return Vp([n,x],"pow"),this.broadcastedBinaryOp(n,x,n.dtype,function(n,x){return Math.pow(n,x)})},x.prototype.batchMatMul=function(n,x,t,e){Vp([n,x],"matMul");for(var i=t?n.shape[1]:n.shape[2],r=t?n.shape[2]:n.shape[1],o=e?x.shape[1]:x.shape[2],s=n.shape[0],h=this.readSync(n.dataId),u=this.readSync(x.dataId),a=t?[n.strides[0],1,n.strides[1]]:[n.strides[0],n.strides[1],1],g=a[0],l=a[1],c=a[2],d=e?[1,x.strides[1],x.strides[0]]:[x.strides[1],1,x.strides[0]],f=d[0],p=d[1],y=d[2],m=r*o,b=jh([s,r,o],n.dtype),z=b.values,v=this.blockSize,j=0;j<s;j++)for(var w=0;w<r;w+=v)for(var k=0;k<o;k+=v)for(var q=0;q<i;q+=v)for(var C=Math.min(w+v,r),A=Math.min(k+v,o),E=Math.min(q+v,i),S=w;S<C;S++)for(var I=k;I<A;I++){for(var D=0,O=q;O<E;O++)D+=h[j*g+S*l+O*c]*u[O*f+I*p+j*y];z[j*m+(S*o+I)]+=D}return b.toTensor()},x.prototype.fusedBatchMatMul=function(n){var x=n.a,t=n.b,e=n.transposeA,i=n.transposeB,r=n.bias,o=n.activation,s=n.preluActivationWeights,h=this.batchMatMul(x,t,e,i);return r&&(h=this.add(h,r)),o&&(h=Wp(this,h,o,s)),h},x.prototype.multiply=function(n,x){return"complex64"===n.dtype||"complex64"===x.dtype?this.broadcastedBinaryComplexOp(n.cast("complex64"),x.cast("complex64"),function(n,x,t,e){return{real:n*t-x*e,imag:n*e+x*t}}):this.broadcastedBinaryOp(n,x,to(n.dtype,x.dtype),function(n,x){return n*x})},x.prototype.realDivide=function(n,x){return Vp([n,x],"realDivide"),this.broadcastedBinaryOp(n,x,"float32",function(n,x){return n/x})},x.prototype.floorDiv=function(n,x){return Vp([n,x],"floorDiv"),this.broadcastedBinaryOp(n,x,"int32",function(n,x){return Math.floor(n/x)})},x.prototype.sum=function(n,x){Vp(n,"sum"),Ds("sum",x,n.rank);for(var t=Ss(n.shape,x),e=t[0],i=t[1],r=Zs(e,to(n.dtype,"int32")),o=nr(i),s=this.readSync(r.dataId),h=this.readSync(n.dataId),u=0;u<s.length;++u){for(var a=u*o,g=0,l=0;l<o;++l)g+=h[a+l];s[u]=g}return r},x.prototype.prod=function(n,x){Vp(n,"sum");for(var t=Ss(n.shape,x),e=t[0],i=t[1],r=Zs(e,to(n.dtype,"int32")),o=nr(i),s=this.readSync(r.dataId),h=this.readSync(n.dataId),u=0;u<s.length;++u){for(var a=u*o,g=1,l=0;l<o;++l)g*=h[a+l];s[u]=g}return r},x.prototype.unsortedSegmentSum=function(n,x,t){Vp(n,"unsortedSegmentSum");for(var e=[],i=n.rank-x.rank,r=0;r<i;++r)x=x.expandDims(r+1);for(r=0;r<t;++r){var o=Us(r,"int32"),s=wd(o,x).asType("float32").mul(n).sum(0);e.push(s)}return Qh(e)},x.prototype.argMin=function(n,x){Vp(n,"argMin");var t=[x];Ds("argMin",t,n.rank);for(var e=Ss(n.shape,t),i=e[0],r=e[1],o=Zs(i,"int32"),s=nr(r),h=this.readSync(o.dataId),u=this.readSync(n.dataId),a=0;a<h.length;++a){for(var g=a*s,l=u[g],c=0,d=0;d<s;++d){var f=u[g+d];f<l&&(l=f,c=d)}h[a]=c}return o},x.prototype.argMax=function(n,x){Vp(n,"argMax");var t=[x];Ds("argMax",t,n.rank);for(var e=Ss(n.shape,t),i=e[0],r=e[1],o=Zs(i,"int32"),s=nr(r),h=this.readSync(o.dataId),u=this.readSync(n.dataId),a=0;a<h.length;++a){for(var g=a*s,l=u[g],c=0,d=0;d<s;++d){var f=u[g+d];f>l&&(l=f,c=d)}h[a]=c}return o},x.prototype.cumsum=function(n,x,t,e){if(Vp(n,"cumsum"),x!==n.rank-1)throw new Error("backend.cumsum in CPU expects an inner-most axis="+(n.rank-1)+" but got axis="+x);for(var i=to(n.dtype,"int32"),r=Zs(n.shape,i),o=this.readSync(r.dataId),s=this.readSync(n.dataId),h=n.shape[n.rank-1],u=e?function(n,x){return n+h-x-1}:function(n,x){return n+x},a=0;a<s.length;a+=h)for(var g=0;g<h;g++){var l=u(a,g);if(0===g)o[l]=t?0:s[l];else{var c=u(a,g-1);o[l]=t?s[c]+o[c]:s[l]+o[c]}}return r},x.prototype.equal=function(n,x){return Vp([n,x],"equal"),this.broadcastedBinaryOp(n,x,"bool",function(n,x){return n===x?1:0})},x.prototype.notEqual=function(n,x){return Vp([n,x],"notEqual"),this.broadcastedBinaryOp(n,x,"bool",function(n,x){return n!==x?1:0})},x.prototype.less=function(n,x){return Vp([n,x],"less"),this.broadcastedBinaryOp(n,x,"bool",function(n,x){return n<x?1:0})},x.prototype.lessEqual=function(n,x){return Vp([n,x],"lessEqual"),this.broadcastedBinaryOp(n,x,"bool",function(n,x){return n<=x?1:0})},x.prototype.greater=function(n,x){return Vp([n,x],"greater"),this.broadcastedBinaryOp(n,x,"bool",function(n,x){return n>x?1:0})},x.prototype.greaterEqual=function(n,x){return Vp([n,x],"greaterEqual"),this.broadcastedBinaryOp(n,x,"bool",function(n,x){return n>=x?1:0})},x.prototype.logicalNot=function(n){Vp(n,"logicalNot");for(var x=this.readSync(n.dataId),t=new Uint8Array(x.length),e=0;e<x.length;++e)t[e]=x[e]?0:1;return this.makeOutput(t,n.shape,"bool")},x.prototype.logicalAnd=function(n,x){return Vp([n,x],"logicalAnd"),this.broadcastedBinaryOp(n,x,"bool",function(n,x){return n&&x})},x.prototype.logicalOr=function(n,x){return Vp([n,x],"logicalOr"),this.broadcastedBinaryOp(n,x,"bool",function(n,x){return n||x})},x.prototype.select=function(n,x,t){Vp([n,x,t],"select");for(var e=this.readSync(n.dataId),i=this.readSync(x.dataId),r=this.readSync(t.dataId),o=Zs(x.shape,to(x.dtype,t.dtype)),s=this.readSync(o.dataId),h=0,u=0===n.rank||n.rank>1||1===x.rank?1:nr(x.shape.slice(1)),a=0;a<e.length;a++)for(var g=0;g<u;g++)1===e[a]?s[h++]=i[a]:s[h++]=r[a];return o},x.prototype.where=function(n){Vp([n],"where");var x=this.readSync(n.dataId);return xa(n.shape,x)},x.prototype.topk=function(n,x,t){return Vp(n,"topk"),na(this.readSync(n.dataId),n.shape,n.dtype,x)},x.prototype.min=function(n,x){Vp(n,"min"),Ds("min",x,n.rank);for(var t=Ss(n.shape,x),e=t[0],i=t[1],r=Zs(e,n.dtype),o=nr(i),s=this.readSync(r.dataId),h=this.readSync(n.dataId),u=0;u<s.length;++u){for(var a=u*o,g=h[a],l=0;l<o;++l){var c=h[a+l];c<g&&(g=c)}s[u]=g}return r},x.prototype.minimum=function(n,x){return Vp([n,x],"minimum"),this.broadcastedBinaryOp(n,x,n.dtype,function(n,x){return Math.min(n,x)})},x.prototype.mod=function(n,x){return Vp([n,x],"mod"),this.broadcastedBinaryOp(n,x,n.dtype,function(n,x){var t=n%x;return n<0&&x<0||n>=0&&x>=0?t:(t+x)%x})},x.prototype.max=function(n,x){Vp(n,"max"),Ds("max",x,n.rank);for(var t=Ss(n.shape,x),e=t[0],i=t[1],r=Zs(e,n.dtype),o=nr(i),s=this.readSync(r.dataId),h=this.readSync(n.dataId),u=0;u<s.length;++u){for(var a=u*o,g=h[a],l=0;l<o;++l){var c=h[a+l];c>g&&(g=c)}s[u]=g}return r},x.prototype.maximum=function(n,x){return Vp([n,x],"maximum"),this.broadcastedBinaryOp(n,x,n.dtype,function(n,x){return Math.max(n,x)})},x.prototype.all=function(n,x){Vp(n,"all"),Ds("all",x,n.rank);for(var t=Ss(n.shape,x),e=t[0],i=t[1],r=Zs(e,n.dtype),o=nr(i),s=this.readSync(r.dataId),h=this.readSync(n.dataId),u=0;u<s.length;++u){for(var a=u*o,g=h[a],l=0;l<o;++l){var c=h[a+l];g=g&&c}s[u]=g}return r},x.prototype.any=function(n,x){Vp(n,"any"),Ds("any",x,n.rank);for(var t=Ss(n.shape,x),e=t[0],i=t[1],r=Zs(e,n.dtype),o=nr(i),s=this.readSync(r.dataId),h=this.readSync(n.dataId),u=0;u<s.length;++u){for(var a=u*o,g=h[a],l=0;l<o;++l){var c=h[a+l];g=g||c}s[u]=g}return r},x.prototype.squaredDifference=function(n,x){return Vp([n,x],"squaredDifference"),this.broadcastedBinaryOp(n,x,n.dtype,function(n,x){var t=n-x;return t*t})},x.prototype.ceil=function(n){Vp(n,"ceil");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e)t[e]=Math.ceil(x[e]);return this.makeOutput(t,n.shape,"float32")},x.prototype.floor=function(n){Vp(n,"floor");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e)t[e]=Math.floor(x[e]);return this.makeOutput(t,n.shape,"float32")},x.prototype.sign=function(n){Vp(n,"x");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e)x[e]<0?t[e]=-1:x[e]>0?t[e]=1:t[e]=0;return this.makeOutput(t,n.shape,"float32")},x.prototype.isNaN=function(n){Vp(n,"x");for(var x=this.readSync(n.dataId),t=new Uint8Array(x.length),e=0;e<x.length;++e)Number.isNaN(x[e])&&(t[e]=1);return this.makeOutput(t,n.shape,"bool")},x.prototype.isInf=function(n){Vp(n,"x");for(var x=this.readSync(n.dataId),t=new Uint8Array(x.length),e=0;e<x.length;++e)Math.abs(x[e])===1/0&&(t[e]=1);return this.makeOutput(t,n.shape,"bool")},x.prototype.isFinite=function(n){Vp(n,"x");for(var x=this.readSync(n.dataId),t=new Uint8Array(x.length),e=0;e<x.length;++e)Number.isFinite(x[e])&&(t[e]=1);return this.makeOutput(t,n.shape,"bool")},x.prototype.round=function(n){Vp(n,"round");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e){var i=Math.floor(x[e]);x[e]-i<.5?t[e]=Math.floor(x[e]):x[e]-i>.5?t[e]=Math.ceil(x[e]):t[e]=i%2==0?i:i+1}return this.makeOutput(t,n.shape,"float32")},x.prototype.exp=function(n){Vp(n,"exp");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e)t[e]=Math.exp(x[e]);return this.makeOutput(t,n.shape,"float32")},x.prototype.expm1=function(n){Vp(n,"expm1");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e)t[e]=Math.expm1(x[e]);return this.makeOutput(t,n.shape,"float32")},x.prototype.log=function(n){Vp(n,"log");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e){var i=x[e];t[e]=Math.log(i)}return this.makeOutput(t,n.shape,"float32")},x.prototype.log1p=function(n){Vp(n,"log1p");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e){var i=x[e];t[e]=Math.log1p(i)}return this.makeOutput(t,n.shape,"float32")},x.prototype.sqrt=function(n){Vp(n,"sqrt");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e){var i=x[e];t[e]=Math.sqrt(i)}return this.makeOutput(t,n.shape,"float32")},x.prototype.rsqrt=function(n){Vp(n,"rsqrt");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e){var i=x[e];t[e]=1/Math.sqrt(i)}return this.makeOutput(t,n.shape,"float32")},x.prototype.reciprocal=function(n){Vp(n,"reciprocal");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e)t[e]=1/x[e];return this.makeOutput(t,n.shape,"float32")},x.prototype.linear=function(n){return n},x.prototype.relu=function(n){Vp(n,"relu");for(var x=Zs(n.shape,n.dtype),t=this.readSync(x.dataId),e=this.readSync(n.dataId),i=0;i<e.length;++i)t[i]=Math.max(0,e[i]);return x},x.prototype.relu6=function(n){Vp(n,"relu");for(var x=Zs(n.shape,n.dtype),t=this.readSync(x.dataId),e=this.readSync(n.dataId),i=0;i<e.length;++i)t[i]=Math.min(Math.max(0,e[i]),6);return x},x.prototype.prelu=function(n,x){return Vp([n,x],"prelu"),this.broadcastedBinaryOp(n,x,n.dtype,function(n,x){return n<0?x*n:n})},x.prototype.elu=function(n){Vp(n,"elu");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e){var i=t[e];x[e]=i>=0?i:Math.exp(i)-1}return this.makeOutput(x,n.shape,"float32")},x.prototype.eluDer=function(n,x){Vp([n,x],"eluDer");for(var t=new Float32Array(x.size),e=this.readSync(x.dataId),i=this.readSync(n.dataId),r=0;r<e.length;++r){var o=e[r];t[r]=o>=1?i[r]:i[r]*(o+1)}return this.makeOutput(t,x.shape,"float32")},x.prototype.selu=function(n){Vp(n,"selu");for(var x=bl,t=zl,e=new Float32Array(n.size),i=this.readSync(n.dataId),r=0;r<i.length;++r){var o=i[r];e[r]=o>=0?t*o:x*(Math.exp(o)-1)}return this.makeOutput(e,n.shape,"float32")},x.prototype.clip=function(n,x,t){Vp(n,"clip");for(var e=new Float32Array(n.size),i=this.readSync(n.dataId),r=0;r<i.length;++r){var o=i[r];e[r]=o>t?t:o<x?x:o}return this.makeOutput(e,n.shape,"float32")},x.prototype.abs=function(n){for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.abs(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.complexAbs=function(n){for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<n.size;++e){var i=t[2*e],r=t[2*e+1];x[e]=Math.hypot(i,r)}return this.makeOutput(x,n.shape,"float32")},x.prototype.int=function(n){Vp(n,"int");for(var x=new Int32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=t[e];return this.makeOutput(x,n.shape,"int32")},x.prototype.sigmoid=function(n){Vp(n,"sigmoid");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=1/(1+Math.exp(-t[e]));return this.makeOutput(x,n.shape,"float32")},x.prototype.softplus=function(n){Vp(n,"softplus");for(var x=Math.log(1.1920928955078125e-7)+2,t=new Float32Array(n.size),e=this.readSync(n.dataId),i=0;i<e.length;++i){var r=e[i]>-x,o=e[i]<x,s=Math.exp(e[i]),h=void 0;h=o?s:r?e[i]:Math.log(1+s),t[i]=h}return this.makeOutput(t,n.shape,"float32")},x.prototype.sin=function(n){Vp(n,"sin");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.sin(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.cos=function(n){Vp(n,"cos");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.cos(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.tan=function(n){Vp(n,"tan");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.tan(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.asin=function(n){Vp(n,"asin");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.asin(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.acos=function(n){Vp(n,"acos");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.acos(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.atan=function(n){Vp(n,"atan");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.atan(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.atan2=function(n,x){return Vp([n,x],"atan2"),this.broadcastedBinaryOp(n,x,n.dtype,function(n,x){return Math.atan2(n,x)})},x.prototype.sinh=function(n){Vp(n,"sinh");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.sinh(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.cosh=function(n){Vp(n,"cosh");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.cosh(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.tanh=function(n){Vp(n,"tanh");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=er(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.asinh=function(n){Vp(n,"asinh");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.asinh(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.acosh=function(n){Vp(n,"acosh");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.acosh(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.atanh=function(n){Vp(n,"atanh");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.atanh(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.erf=function(n){Vp(n,"erf");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e){var i=Math.sign(t[e]),r=Math.abs(t[e]),o=1/(1+.3275911*r);x[e]=i*(1-((((1.061405429*o-1.453152027)*o+1.421413741)*o-.284496736)*o+.254829592)*o*Math.exp(-r*r))}return this.makeOutput(x,n.shape,"float32")},x.prototype.step=function(n,x){void 0===x&&(x=0),Vp(n,"step");for(var t=new Float32Array(n.size),e=this.readSync(n.dataId),i=0;i<e.length;++i){var r=e[i];isNaN(r)?t[i]=NaN:t[i]=r>0?1:x}return this.makeOutput(t,n.shape,"float32")},x.prototype.fusedConv2d=function(n){var x=n.input,t=n.filter,e=n.convInfo,i=n.bias,r=n.activation,o=n.preluActivationWeights,s=this.conv2d(x,t,e);return i&&(s=this.add(s,i)),r&&(s=Wp(this,s,r,o)),s},x.prototype.conv2d=function(n,x,t){Vp([n,x],"conv2d");for(var e=t.filterHeight,i=t.filterWidth,r=t.dilationHeight,o=t.dilationWidth,s=t.padInfo.left,h=t.padInfo.top,u="channelsLast"===t.dataFormat,a=jh(t.outShape,n.dtype),g=n.strides[0],l=u?n.strides[1]:n.strides[2],c=u?n.strides[2]:1,d=u?1:n.strides[1],f=a.strides[0],p=u?a.strides[1]:a.strides[2],y=u?a.strides[2]:1,m=u?1:a.strides[1],b=this.readSync(n.dataId),z=this.readSync(x.dataId),v=a.values,j=0;j<t.batchSize;++j)for(var w=j*g,k=j*f,q=0;q<t.outHeight;++q)for(var C=k+q*p,A=q*t.strideHeight-h,E=0;E<e;E++){var S=A+E*r;if(!(S<0||S>=t.inHeight))for(var I=E*x.strides[0],D=w+S*l,O=0;O<t.outWidth;++O)for(var _=C+O*y,T=O*t.strideWidth-s,R=0;R<i;R++){var B=T+R*o;if(!(B<0||B>=t.inWidth))for(var M=D+B*c,N=I+R*x.strides[1],F=0;F<t.inChannels;++F){for(var P=b[M+F*d],L=0;L<t.outChannels;++L)v[_+L*m]+=P*z[N+L];N+=t.outChannels}}}return a.toTensor()},x.prototype.conv3d=function(n,x,t){for(var e=t.filterDepth,i=t.filterHeight,r=t.filterWidth,o=t.dilationDepth,s=t.dilationHeight,h=t.dilationWidth,u=t.padInfo.front,a=t.padInfo.left,g=t.padInfo.top,l=jh(t.outShape,n.dtype),c=this.readSync(n.dataId),d=this.readSync(x.dataId),f=l.values,p=0;p<t.batchSize;++p)for(var y=p*n.strides[0],m=p*l.strides[0],b=0;b<t.outDepth;++b)for(var z=m+b*l.strides[1],v=b*t.strideDepth-u,j=0;j<e;j++){var w=v+j*o;if(!(w<0||w>=t.inDepth))for(var k=j*x.strides[0],q=y+w*n.strides[1],C=0;C<t.outHeight;++C)for(var A=z+C*l.strides[2],E=C*t.strideHeight-g,S=0;S<i;S++){var I=E+S*s;if(!(I<0||I>=t.inHeight))for(var D=k+S*x.strides[1],O=q+I*n.strides[2],_=0;_<t.outWidth;++_)for(var T=A+_*t.outChannels,R=_*t.strideWidth-a,B=0;B<r;B++){var M=R+B*h;if(!(M<0||M>=t.inWidth))for(var N=D+B*x.strides[2],F=O+M*t.inChannels,P=N,L=0;L<t.inChannels;++L){for(var H=c[F+L],U=0;U<t.outChannels;++U)f[T+U]+=H*d[P+U];P+=t.outChannels}}}}return l.toTensor()},x.prototype.conv2dDerInput=function(n,x,t){Vp([n,x],"conv2dDerInput");for(var e=jh(t.inShape,"float32"),i=e.values,r=this.readSync(n.dataId),o=this.readSync(x.dataId),s=x.strides,h=s[0],u=s[1],a=s[2],g=t.batchSize,l=t.filterHeight,c=t.filterWidth,d=t.inChannels,f=t.inHeight,p=t.inWidth,y=t.outChannels,m=t.outHeight,b=t.outWidth,z=t.strideHeight,v=t.strideWidth,j=t.dataFormat,w=l-1-t.padInfo.top,k=c-1-t.padInfo.left,q="channelsLast"===j,C=e.strides[0],A=q?e.strides[1]:e.strides[2],E=q?e.strides[2]:1,S=q?1:e.strides[1],I=n.strides[0],D=q?n.strides[1]:n.strides[2],O=q?n.strides[2]:1,_=q?1:n.strides[1],T=0;T<g;++T)for(var R=0;R<d;++R)for(var B=0;B<f;++B)for(var M=B-w,N=Math.max(0,Math.ceil(M/z)),F=Math.min(m,(l+M)/z),P=0;P<p;++P){for(var L=P-k,H=Math.max(0,Math.ceil(L/v)),U=Math.min(b,(c+L)/v),V=0,W=N;W<F;++W)for(var Q=W*z-M,G=H;G<U;++G)for(var K=I*T+D*W+O*G,Y=h*(l-1-Q)+u*(c-1-(G*v-L))+a*R,J=0;J<y;++J)V+=r[K+_*J]*o[Y+J];i[C*T+A*B+E*P+S*R]=V}return e.toTensor()},x.prototype.conv3dDerInput=function(n,x,t){for(var e=jh(t.inShape,"float32"),i=e.values,r=e.strides,o=r[0],s=r[1],h=r[2],u=r[3],a=this.readSync(n.dataId),g=n.strides,l=g[0],c=g[1],d=g[2],f=g[3],p=this.readSync(x.dataId),y=x.strides,m=y[0],b=y[1],z=y[2],v=y[3],j=t.batchSize,w=t.filterDepth,k=t.filterHeight,q=t.filterWidth,C=t.inChannels,A=t.inDepth,E=t.inHeight,S=t.inWidth,I=t.outChannels,D=t.outDepth,O=t.outHeight,_=t.outWidth,T=t.strideDepth,R=t.strideHeight,B=t.strideWidth,M=w-1-t.padInfo.front,N=k-1-t.padInfo.top,F=q-1-t.padInfo.left,P=0;P<j;++P)for(var L=0;L<C;++L)for(var H=0;H<A;++H)for(var U=H-M,V=Math.max(0,Math.ceil(U/T)),W=Math.min(D,(w+U)/T),Q=0;Q<E;++Q)for(var G=Q-N,K=Math.max(0,Math.ceil(G/R)),Y=Math.min(O,(k+G)/R),J=0;J<S;++J){for(var X=J-F,Z=Math.max(0,Math.ceil(X/B)),$=Math.min(_,(q+X)/B),nn=0,xn=V;xn<W;++xn)for(var tn=xn*T-U,en=K;en<Y;++en)for(var rn=en*R-G,on=Z;on<$;++on)for(var sn=l*P+c*xn+d*en+f*on,hn=m*(w-1-tn)+b*(k-1-rn)+z*(q-1-(on*B-X))+v*L,un=0;un<I;++un)nn+=a[sn+un]*p[hn+un];i[o*P+s*H+h*Q+u*J+L]=nn}return e.toTensor()},x.prototype.conv2dDerFilter=function(n,x,t){Vp([n,x],"conv2dDerFilter");for(var e=t.strideHeight,i=t.strideWidth,r=t.filterHeight,o=t.filterWidth,s="channelsLast"===t.dataFormat,h=jh(t.filterShape,"float32"),u=t.padInfo.left,a=t.padInfo.top,g=this.bufferSync(n),l=this.bufferSync(x),c=0;c<r;++c)for(var d=Math.max(0,Math.ceil((a-c)/e)),f=Math.min(t.outHeight,(t.inHeight+a-c)/e),p=0;p<o;++p)for(var y=Math.max(0,Math.ceil((u-p)/i)),m=Math.min(t.outWidth,(t.inWidth+u-p)/i),b=0;b<t.inChannels;++b)for(var z=0;z<t.outChannels;++z){for(var v=0,j=0;j<t.batchSize;++j)for(var w=d;w<f;++w)for(var k=c+w*e-a,q=y;q<m;++q){var C=p+q*i-u;v+=s?g.get(j,k,C,b)*l.get(j,w,q,z):g.get(j,b,k,C)*l.get(j,z,w,q)}h.set(v,c,p,b,z)}return h.toTensor()},x.prototype.conv3dDerFilter=function(n,x,t){for(var e=t.strideDepth,i=t.strideHeight,r=t.strideWidth,o=t.filterDepth,s=t.filterHeight,h=t.filterWidth,u=jh(t.filterShape,"float32"),a=u.values,g=u.strides,l=g[0],c=g[1],d=g[2],f=g[3],p=this.readSync(x.dataId),y=x.strides,m=y[0],b=y[1],z=y[2],v=y[3],j=this.readSync(n.dataId),w=n.strides,k=w[0],q=w[1],C=w[2],A=w[3],E=t.padInfo.front,S=t.padInfo.left,I=t.padInfo.top,D=0;D<o;++D)for(var O=Math.max(0,Math.ceil((E-D)/e)),_=Math.min(t.outDepth,(t.inDepth+E-D)/e),T=D*l,R=0;R<s;++R)for(var B=Math.max(0,Math.ceil((I-R)/i)),M=Math.min(t.outHeight,(t.inHeight+I-R)/i),N=R*c+T,F=0;F<h;++F)for(var P=Math.max(0,Math.ceil((S-F)/r)),L=Math.min(t.outWidth,(t.inWidth+S-F)/r),H=F*d+N,U=0;U<t.inChannels;++U)for(var V=U*f+H,W=0;W<t.outChannels;++W){for(var Q=0,G=0;G<t.batchSize;++G)for(var K=G*k,Y=G*m,J=O;J<_;++J)for(var X=(D+J*e-E)*q+K,Z=J*b+Y,$=B;$<M;++$)for(var nn=(R+$*i-I)*C+X,xn=$*z+Z,tn=P;tn<L;++tn){var en=tn*v+xn;Q+=j[(F+tn*r-S)*A+nn+U]*p[en+W]}a[V+W]=Q}return u.toTensor()},x.prototype.fusedDepthwiseConv2D=function(n){var x=n.input,t=n.filter,e=n.convInfo,i=n.bias,r=n.activation,o=n.preluActivationWeights,s=this.depthwiseConv2D(x,t,e);return i&&(s=this.add(s,i)),r&&(s=Wp(this,s,r,o)),s},x.prototype.depthwiseConv2D=function(n,x,t){Vp([n,x],"depthwiseConv2D");for(var e=t.filterHeight,i=t.filterWidth,r=t.dilationHeight,o=t.dilationWidth,s=t.padInfo.left,h=t.padInfo.top,u=t.outChannels/t.inChannels,a=jh(t.outShape,n.dtype),g=this.readSync(n.dataId),l=this.readSync(x.dataId),c=a.values,d=0;d<t.batchSize;++d)for(var f=d*n.strides[0],p=d*a.strides[0],y=0;y<t.outHeight;++y)for(var m=p+y*a.strides[1],b=y*t.strideHeight-s,z=0;z<e;++z){var v=b+z*r;if(!(v<0||v>=t.inHeight))for(var j=z*x.strides[0],w=f+v*n.strides[1],k=0;k<t.outWidth;++k)for(var q=m+k*a.strides[2],C=k*t.strideWidth-h,A=0;A<i;++A){var E=C+A*o;if(!(E<0||E>=t.inWidth))for(var S=j+A*x.strides[1],I=w+E*t.inChannels,D=q,O=S,_=0;_<t.inChannels;++_){for(var T=g[I+_],R=0;R<u;++R)c[D+R]+=T*l[O+R];D+=u,O+=u}}}return a.toTensor()},x.prototype.depthwiseConv2DDerInput=function(n,x,t){Vp([n,x],"depthwiseConv2DDerInput");for(var e=jh(t.inShape,"float32"),i=e.values,r=e.strides,o=r[0],s=r[1],h=r[2],u=this.readSync(n.dataId),a=n.strides,g=a[0],l=a[1],c=a[2],d=this.readSync(x.dataId),f=x.strides,p=f[0],y=f[1],m=f[2],b=t.batchSize,z=t.filterHeight,v=t.filterWidth,j=t.inChannels,w=t.inHeight,k=t.inWidth,q=t.outChannels,C=t.outHeight,A=t.outWidth,E=t.strideHeight,S=t.strideWidth,I=z-1-t.padInfo.top,D=v-1-t.padInfo.left,O=q/j,_=0;_<b;++_)for(var T=0;T<j;++T)for(var R=0;R<w;++R)for(var B=R-I,M=Math.max(0,Math.ceil(B/E)),N=Math.min(C,(z+B)/E),F=0;F<k;++F){for(var P=F-D,L=Math.max(0,Math.ceil(P/S)),H=Math.min(A,(v+P)/S),U=0,V=M;V<N;++V)for(var W=V*E-B,Q=L;Q<H;++Q)for(var G=g*_+l*V+c*Q,K=p*(z-1-W)+y*(v-1-(Q*S-P))+m*T,Y=0;Y<O;++Y)U+=u[G+(T*O+Y)]*d[K+Y];i[o*_+s*R+h*F+T]=U}return e.toTensor()},x.prototype.depthwiseConv2DDerFilter=function(n,x,t){Vp([n,x],"depthwiseConv2DDerFilter");for(var e=t.strideHeight,i=t.strideWidth,r=t.filterHeight,o=t.filterWidth,s=jh(t.filterShape,"float32"),h=t.padInfo.left,u=t.padInfo.top,a=t.outChannels/t.inChannels,g=this.bufferSync(n),l=this.bufferSync(x),c=0;c<r;++c)for(var d=Math.max(0,Math.ceil((u-c)/e)),f=Math.min(t.outHeight,(t.inHeight+u-c)/e),p=0;p<o;++p)for(var y=Math.max(0,Math.ceil((h-p)/i)),m=Math.min(t.outWidth,(t.inWidth+h-p)/i),b=0;b<t.outChannels;++b){for(var z=Math.trunc(b/a),v=b%a,j=0,w=0;w<t.batchSize;++w)for(var k=d;k<f;++k)for(var q=c+k*e-u,C=y;C<m;++C){var A=p+C*i-h;j+=g.get(w,q,A,z)*l.get(w,k,C,b)}s.set(j,c,p,z,v)}return s.toTensor()},x.prototype.tile=function(n,x){return Vp(n,"tile"),$u(this.bufferSync(n),x)},x.prototype.pad=function(n,x,t){Vp(n,"pad");var e=x.map(function(x,t){return x[0]+n.shape[t]+x[1]}),i=x.map(function(n){return n[0]}),r=this.bufferSync(n),o=jh(e,n.dtype);0!==t&&o.values.fill(t);for(var s=0;s<n.size;s++){var h=r.indexToLoc(s),u=h.map(function(n,x){return n+i[x]});o.set.apply(o,[r.get.apply(r,h)].concat(u))}return o.toTensor()},x.prototype.transpose=function(n,x){Vp(n,"transpose");for(var t=new Array(n.rank),e=0;e<t.length;e++)t[e]=n.shape[x[e]];var i=this.readSync(n.dataId),r=jh(t,n.dtype),o=this.bufferSync(n);for(e=0;e<n.size;++e){for(var s=o.indexToLoc(e),h=new Array(s.length),u=0;u<h.length;u++)h[u]=s[x[u]];var a=r.locToIndex(h);r.values[a]=i[e]}return r.toTensor()},x.prototype.gather=function(n,x,t){Vp([n,x],"gather");var e=n.shape.slice(),i=this.readSync(x.dataId);e[t]=i.length;for(var r=jh(e,n.dtype),o=this.bufferSync(n),s=0;s<r.size;++s){var h=r.indexToLoc(s),u=h.slice();u[t]=i[h[t]];var a=o.locToIndex(u);r.values[s]=o.values[a]}return r.toTensor()},x.prototype.batchToSpaceND=function(n,x,t){Vp([n],"batchToSpaceND");var e=x.reduce(function(n,x){return n*x}),i=Xh(n.shape,x,e),r=Zh(i.length,x.length),o=$h(n.shape,x,e),s=nu(t,x.length),h=xu(o,t,x.length);return n.reshape(i).transpose(r).reshape(o).slice(s,h)},x.prototype.spaceToBatchND=function(n,x,t){Vp([n],"spaceToBatchND");var e=x.reduce(function(n,x){return n*x}),i=[[0,0]];i.push.apply(i,t);for(var r=1+x.length;r<n.shape.length;++r)i.push([0,0]);var o=n.pad(i),s=Xh(o.shape,x,e,!1),h=Zh(s.length,x.length,!1),u=$h(o.shape,x,e,!1);return o.reshape(s).transpose(h).reshape(u)},x.prototype.pool=function(n,x,t){Vp(n,"pool");for(var e=x.strideHeight,i=x.strideWidth,r=x.dilationHeight,o=x.dilationWidth,s=x.effectiveFilterHeight,h=x.effectiveFilterWidth,u=x.padInfo.top,a=x.padInfo.left,g="max"===t?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,l=this.readSync(n.dataId),c=jh(x.outShape,n.dtype),d=c.values,f=x.outShape[1]*x.outShape[2]*x.outShape[3],p=x.outShape[2]*x.outShape[3],y=x.outShape[3],m=0;m<x.batchSize;++m)for(var b=m*f,z=m*n.strides[0],v=0;v<x.inChannels;++v)for(var j=0;j<x.outHeight;++j)for(var w=j*e-u,k=Math.max(0,w),q=Math.min(x.inHeight,s+w),C=b+j*p,A=0;A<x.outWidth;++A){for(var E=A*i-a,S=Math.max(0,E),I=Math.min(x.inWidth,h+E),D=g,O=0,_=0,T=k;T<q;T+=r){for(var R=z+T*n.strides[1],B=S;B<I;B+=o){var M=l[R+B*n.strides[2]+v];"max"===t&&M>D?D=M:"avg"===t&&(O+=M,_++)}if(isNaN(D))break}d[C+A*y+v]="avg"===t?O/_:D}return c.toTensor()},x.prototype.maxPool=function(n,x){return this.pool(n,x,"max")},x.prototype.maxPoolPositions=function(n,x){for(var t=jh(x.outShape,"int32"),e=x.strideHeight,i=x.strideWidth,r=x.dilationHeight,o=x.dilationWidth,s=x.effectiveFilterHeight,h=x.effectiveFilterWidth,u=x.padInfo.top,a=x.padInfo.left,g=this.bufferSync(n),l=0;l<x.batchSize;++l)for(var c=0;c<x.inChannels;++c)for(var d=0;d<x.outHeight;++d){for(var f=d*e-u,p=f;p<0;)p+=r;for(var y=Math.min(x.inHeight,s+f),m=0;m<x.outWidth;++m){for(var b=m*i-a,z=b;z<0;)z+=o;for(var v=Math.min(x.inWidth,h+b),j=Number.NEGATIVE_INFINITY,w=-1,k=p;k<y;k+=r)for(var q=k-f,C=z;C<v;C+=o){var A=C-b,E=g.get(l,k,C,c);E>j&&(j=E,w=q*h+A)}t.set(w,l,d,m,c)}}return t.toTensor()},x.prototype.maxPoolBackprop=function(n,x,t,e){Vp([x,t],"maxPoolBackprop");for(var i=this.maxPoolPositions(x,e),r=e.strideHeight,o=e.strideWidth,s=e.dilationHeight,h=e.dilationWidth,u=e.effectiveFilterHeight,a=e.effectiveFilterWidth,g=a-1-e.padInfo.left,l=u-1-e.padInfo.top,c=jh(x.shape,"float32"),d=this.bufferSync(i),f=this.bufferSync(n),p=0;p<e.batchSize;++p)for(var y=0;y<e.inChannels;++y)for(var m=0;m<e.inHeight;++m)for(var b=0;b<e.inWidth;++b){for(var z=m-l,v=b-g,j=0,w=0;w<u;w+=s){var k=(z+w)/r;if(!(k<0||k>=e.outHeight||Math.floor(k)!==k))for(var q=0;q<a;q+=h){var C=(v+q)/o;if(!(C<0||C>=e.outWidth||Math.floor(C)!==C)){var A=u*a-1-d.get(p,k,C,y)===w*a+q?1:0;0!==A&&(j+=f.get(p,k,C,y)*A)}}}c.set(j,p,m,b,y)}return c.toTensor()},x.prototype.avgPoolBackprop=function(n,x,t){Vp([n,x],"avgPoolBackprop");for(var e=t.strideHeight,i=t.strideWidth,r=t.filterHeight,o=t.filterWidth,s=t.dilationHeight,h=t.dilationWidth,u=t.effectiveFilterHeight,a=t.effectiveFilterWidth,g=a-1-t.padInfo.left,l=u-1-t.padInfo.top,c=jh(x.shape,"float32"),d=1/(r*o),f=this.bufferSync(n),p=0;p<t.batchSize;++p)for(var y=0;y<t.inChannels;++y)for(var m=0;m<t.inHeight;++m)for(var b=0;b<t.inWidth;++b){for(var z=m-l,v=b-g,j=0,w=0;w<u;w+=s){var k=(z+w)/e;if(!(k<0||k>=t.outHeight||Math.floor(k)!==k))for(var q=0;q<a;q+=h){var C=(v+q)/i;C<0||C>=t.outWidth||Math.floor(C)!==C||(j+=f.get(p,k,C,y))}}c.set(j*d,p,m,b,y)}return c.toTensor()},x.prototype.pool3d=function(n,x,t){Vp(n,"pool3d");for(var e=x.strideDepth,i=x.strideHeight,r=x.strideWidth,o=x.dilationDepth,s=x.dilationHeight,h=x.dilationWidth,u=x.effectiveFilterDepth,a=x.effectiveFilterHeight,g=x.effectiveFilterWidth,l=x.padInfo.front,c=x.padInfo.top,d=x.padInfo.left,f="max"===t?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,p=this.readSync(n.dataId),y=jh(x.outShape,n.dtype),m=y.values,b=x.outShape[1]*x.outShape[2]*x.outShape[3]*x.outShape[4],z=x.outShape[2]*x.outShape[3]*x.outShape[4],v=x.outShape[3]*x.outShape[4],j=x.outShape[4],w=0;w<x.batchSize;++w)for(var k=w*b,q=w*n.strides[0],C=0;C<x.inChannels;++C)for(var A=0;A<x.outDepth;++A){for(var E=A*e-l,S=E;S<0;)S+=o;for(var I=Math.min(x.inDepth,u+E),D=k+A*z,O=0;O<x.outHeight;++O){for(var _=O*i-c,T=_;T<0;)T+=s;for(var R=Math.min(x.inHeight,a+_),B=D+O*v,M=0;M<x.outWidth;++M){for(var N=M*r-d,F=N;F<0;)F+=h;for(var P=Math.min(x.inWidth,g+N),L=B+M*j,H=f,U=0,V=0,W=S;W<I;W+=o){for(var Q=q+W*n.strides[1],G=T;G<R;G+=s){for(var K=Q+G*n.strides[2],Y=F;Y<P;Y+=h){var J=p[K+Y*n.strides[3]+C];if("max"===t&&J>H?H=J:"avg"===t&&(U+=J,V++),isNaN(H))break}if(isNaN(H))break}if(isNaN(H))break}m[L+C]="avg"===t?U/V:H}}}return y.toTensor()},x.prototype.avgPool3d=function(n,x){return Vp(n,"avgPool3d"),this.pool3d(n,x,"avg").toFloat()},x.prototype.avgPool3dBackprop=function(n,x,t){Vp([n,x],"avgPool3dBackprop");for(var e=t.strideDepth,i=t.strideHeight,r=t.strideWidth,o=t.filterDepth,s=t.filterHeight,h=t.filterWidth,u=t.dilationDepth,a=t.dilationHeight,g=t.dilationWidth,l=t.effectiveFilterDepth,c=t.effectiveFilterHeight,d=t.effectiveFilterWidth,f=l-1-t.padInfo.front,p=d-1-t.padInfo.left,y=c-1-t.padInfo.top,m=jh(x.shape,"float32"),b=1/(o*s*h),z=this.bufferSync(n),v=0;v<t.batchSize;++v)for(var j=0;j<t.inChannels;++j)for(var w=0;w<t.inDepth;++w)for(var k=0;k<t.inHeight;++k)for(var q=0;q<t.inWidth;++q){for(var C=w-f,A=k-y,E=q-p,S=0,I=0;I<l;I+=u){var D=(C+I)/e;if(!(D<0||D>=t.outDepth||Math.floor(D)!==D))for(var O=0;O<c;O+=a){var _=(A+O)/i;if(!(_<0||_>=t.outHeight||Math.floor(_)!==_))for(var T=0;T<d;T+=g){var R=(E+T)/r;R<0||R>=t.outWidth||Math.floor(R)!==R||(S+=z.get(v,D,_,R,j))}}}m.set(S*b,v,w,k,q,j)}return m.toTensor()},x.prototype.maxPool3d=function(n,x){return Vp(n,"maxPool3d"),this.pool3d(n,x,"max").toFloat()},x.prototype.maxPool3dPositions=function(n,x){for(var t=jh(x.outShape,"int32"),e=x.strideDepth,i=x.strideHeight,r=x.strideWidth,o=x.dilationDepth,s=x.dilationHeight,h=x.dilationWidth,u=x.effectiveFilterDepth,a=x.effectiveFilterHeight,g=x.effectiveFilterWidth,l=x.padInfo.front,c=x.padInfo.top,d=x.padInfo.left,f=this.bufferSync(n),p=0;p<x.batchSize;++p)for(var y=0;y<x.inChannels;++y)for(var m=0;m<x.outDepth;++m){for(var b=m*e-l,z=b;z<0;)z+=o;for(var v=Math.min(x.inDepth,u+b),j=0;j<x.outHeight;++j){for(var w=j*i-c,k=w;k<0;)k+=s;for(var q=Math.min(x.inHeight,a+w),C=0;C<x.outWidth;++C){for(var A=C*r-d,E=A;E<0;)E+=h;for(var S=Math.min(x.inWidth,g+A),I=Number.NEGATIVE_INFINITY,D=-1,O=z;O<v;O+=o)for(var _=O-b,T=k;T<q;T+=s)for(var R=T-w,B=E;B<S;B+=h){var M=B-A,N=f.get(p,O,T,B,y);N>=I&&(I=N,D=_*a*g+R*a+M)}t.set(D,p,m,j,C,y)}}}return t.toTensor()},x.prototype.maxPool3dBackprop=function(n,x,t,e){Vp([x,t],"maxPool3dBackprop");for(var i=this.maxPool3dPositions(x,e),r=e.strideDepth,o=e.strideHeight,s=e.strideWidth,h=e.dilationDepth,u=e.dilationHeight,a=e.dilationWidth,g=e.effectiveFilterDepth,l=e.effectiveFilterHeight,c=e.effectiveFilterWidth,d=g-1-e.padInfo.front,f=c-1-e.padInfo.left,p=l-1-e.padInfo.top,y=jh(x.shape,"float32"),m=this.bufferSync(i),b=this.bufferSync(n),z=0;z<e.batchSize;++z)for(var v=0;v<e.inChannels;++v)for(var j=0;j<e.inDepth;++j)for(var w=0;w<e.inHeight;++w)for(var k=0;k<e.inWidth;++k){for(var q=j-d,C=w-p,A=k-f,E=0,S=0;S<g;S+=h){var I=(q+S)/r;if(!(I<0||I>=e.outDepth||Math.floor(I)!==I))for(var D=0;D<l;D+=u){var O=(C+D)/o;if(!(O<0||O>=e.outHeight||Math.floor(O)!==O))for(var _=0;_<c;_+=a){var T=(A+_)/s;if(!(T<0||T>=e.outWidth||Math.floor(T)!==T)){var R=g*l*c-1-m.get(z,I,O,T,v)===S*l*c+D*c+_?1:0;0!==R&&(E+=b.get(z,I,O,T,v)*R)}}}}y.set(E,z,j,w,k,v)}return y.toTensor()},x.prototype.cast=function(n,x){return Mu(n,x,this)},x.prototype.reshape=function(n,x){return Nu(n,x)},x.prototype.avgPool=function(n,x){return Vp(n,"avgPool"),this.pool(n,x,"avg").toFloat()},x.prototype.resizeBilinear=function(n,x,t,e){Vp(n,"resizeBilinear");for(var i=n.shape,r=i[0],o=i[1],s=i[2],h=i[3],u=this.readSync(n.dataId),a=new Float32Array(nr([r,x,t,h])),g=[e&&x>1?o-1:o,e&&t>1?s-1:s],l=[e&&x>1?x-1:x,e&&t>1?t-1:t],c=0,d=g[0]/l[0],f=g[1]/l[1],p=0;p<r;p++)for(var y=0;y<x;y++)for(var m=d*y,b=Math.floor(m),z=m-b,v=Math.min(o-1,Math.ceil(m)),j=p*n.strides[0]+b*n.strides[1],w=p*n.strides[0]+v*n.strides[1],k=0;k<t;k++)for(var q=f*k,C=Math.floor(q),A=q-C,E=Math.min(s-1,Math.ceil(q)),S=j+C*n.strides[2],I=w+C*n.strides[2],D=j+E*n.strides[2],O=w+E*n.strides[2],_=0;_<h;_++){var T=u[S+_],R=u[I+_],B=T+(u[D+_]-T)*A,M=B+(R+(u[O+_]-R)*A-B)*z;a[c++]=M}return Ls(a,[r,x,t,h])},x.prototype.resizeBilinearBackprop=function(n,x,t){Vp([n,x],"resizeBilinearBackprop");for(var e=x.shape,i=e[0],r=e[1],o=e[2],s=e[3],h=n.shape,u=h[1],a=h[2],g=new Float32Array(i*r*o*s),l=[t&&u>1?r-1:r,t&&a>1?o-1:o],c=[t&&u>1?u-1:u,t&&a>1?a-1:a],d=l[0]/c[0],f=l[1]/c[1],p=this.readSync(n.dataId),y=0,m=0;m<i;m++)for(var b=m*x.strides[0],z=0;z<u;z++)for(var v=z*d,j=Math.floor(v),w=Math.min(Math.ceil(v),r-1),k=b+j*x.strides[1],q=b+w*x.strides[1],C=v-j,A=1-C,E=0;E<a;E++)for(var S=E*f,I=Math.floor(S),D=Math.min(Math.ceil(S),o-1),O=S-I,_=1-O,T=k+I*x.strides[2],R=k+D*x.strides[2],B=q+I*x.strides[2],M=q+D*x.strides[2],N=A*_,F=A*O,P=C*_,L=C*O,H=0;H<s;H++){var U=p[y++];g[T+H]+=U*N,g[R+H]+=U*F,g[B+H]+=U*P,g[M+H]+=U*L}return Gs(g,[i,o,r,s],x.dtype)},x.prototype.resizeNearestNeighbor=function(n,x,t,e){Vp(n,"resizeNearestNeighbor");for(var i=n.shape,r=i[0],o=i[1],s=i[2],h=i[3],u=this.readSync(n.dataId),a=new Float32Array(r*x*t*h),g=[e&&x>1?o-1:o,e&&t>1?s-1:s],l=[e&&x>1?x-1:x,e&&t>1?t-1:t],c=g[0]/l[0],d=g[1]/l[1],f=0,p=0;p<r;p++)for(var y=p*n.strides[0],m=0;m<x;m++)for(var b=c*m,z=y+Math.min(o-1,e?Math.round(b):Math.floor(b))*n.strides[1],v=0;v<t;v++)for(var j=d*v,w=z+Math.min(s-1,e?Math.round(j):Math.floor(j))*n.strides[2],k=0;k<h;k++){var q=u[w+k];a[f++]=q}return Ls(a,[r,x,t,h],n.dtype)},x.prototype.resizeNearestNeighborBackprop=function(n,x,t){Vp([n,x],"resizeNearestNeighborBackprop");for(var e=x.shape,i=e[0],r=e[1],o=e[2],s=e[3],h=n.shape,u=h[1],a=h[2],g=new Float32Array(i*r*o*s),l=this.readSync(n.dataId),c=[t&&u>1?r-1:r,t&&a>1?o-1:o],d=[t&&u>1?u-1:u,t&&a>1?a-1:a],f=c[0]/d[0],p=c[1]/d[1],y=1/f,m=1/p,b=2*Math.ceil(y)+2,z=2*Math.ceil(m)+2,v=0;v<i;v++)for(var j=v*x.strides[0],w=0;w<r;w++)for(var k=j+w*x.strides[1],q=Math.floor(w*y),C=Math.floor(q-b/2),A=0;A<o;A++)for(var E=k+A*x.strides[2],S=Math.floor(A*m),I=Math.floor(S-z/2),D=0;D<s;D++){for(var O=0,_=0;_<b;_++){var T=_+C;if(!(T<0||T>=u)){var R=j+T*n.strides[1],B=T*f;if(w===Math.min(r-1,t?Math.round(B):Math.floor(B)))for(var M=0;M<z;M++){var N=M+I;if(!(N<0||N>=a)){var F=R+N*n.strides[2],P=N*p;A===Math.min(o-1,t?Math.round(P):Math.floor(P))&&(O+=l[F+D])}}}}g[E+D]=O}return Gs(g,x.shape,x.dtype)},x.prototype.batchNormalization=function(n,x,t,e,i,r){Vp([n,x,t,i,r],"batchNorm");for(var o=this.readSync(n.dataId),s=this.readSync(x.dataId),h=this.readSync(t.dataId),u=i?this.readSync(i.dataId):new Float32Array([1]),a=r?this.readSync(r.dataId):new Float32Array([0]),g=new Float32Array(o.length),l=a.length,c=u.length,d=h.length,f=s.length,p=0,y=0,m=0,b=0,z=0;z<o.length;++z)g[z]=a[p++]+(o[z]-s[y++])*u[m++]/Math.sqrt(h[b++]+e),p>=l&&(p=0),y>=f&&(y=0),m>=c&&(m=0),b>=d&&(b=0);return Gs(g,n.shape)},x.prototype.localResponseNormalization4D=function(n,x,t,e,i){Vp(n,"localResponseNormalization4D");var r=n.shape[3],o=r-1,s=this.readSync(n.dataId),h=n.size,u=new Float32Array(h);function a(n){for(var t=n%r,e=n-t+Math.max(0,t-x),i=n-t+Math.min(t+x,o),h=0;e<=i;e++){var u=s[e];h+=u*u}return h}for(var g=0;g<h;g++){var l=a(g),c=s[g]*Math.pow(t+e*l,-i);u[g]=c}return Gs(u,n.shape)},x.prototype.LRNGrad=function(n,x,t,e,i,r,o){Vp(n,"LRNGrad");for(var s=n.shape[3],h=this.readSync(n.dataId),u=this.readSync(x.dataId),a=this.readSync(t.dataId),g=new Float32Array(n.size),l=n.size,c=0;c<l;c++){for(var d=c%s,f=c-d+Math.max(0,d-e),p=c-d+Math.min(s,d+e+1),y=0,m=f;m<p;m++)y+=Math.pow(u[m],2);for(y=r*y+i,m=f;m<p;m++){var b=-2*r*o*u[m]*a[c]/y;c===m&&(b+=Math.pow(y,-o)),b*=h[c],g[m]+=b}}return Gs(g,n.shape)},x.prototype.multinomial=function(n,x,t,e){Vp(n,"multinomial");for(var i=x?n:yu(n),r=i.shape[0],o=i.shape[1],s=Zs([r,t],"int32"),h=this.readSync(s.dataId),u=this.readSync(i.dataId),a=0;a<r;++a){var g=a*o,l=new Float32Array(o-1);l[0]=u[g];for(var c=1;c<l.length;++c)l[c]=l[c-1]+u[g+c];for(var d=mh(e.toString()),f=a*t,p=0;p<t;++p){var y=d();h[f+p]=l.length;for(var m=0;m<l.length;m++)if(y<l[m]){h[f+p]=m;break}}}return s},x.prototype.oneHot=function(n,x,t,e){Vp(n,"oneHot");var i=new Float32Array(n.size*x);i.fill(e);for(var r=this.readSync(n.dataId),o=0;o<n.size;++o)r[o]>=0&&r[o]<x&&(i[o*x+r[o]]=t);return Ws(i,[n.size,x],"int32")},x.prototype.nonMaxSuppression=function(n,x,t,e,i){return Vp(n,"nonMaxSuppression"),Qu(this.readSync(n.dataId),this.readSync(x.dataId),t,e,i)},x.prototype.fft=function(n){return this.fftBatch(n,!1)},x.prototype.ifft=function(n){return this.fftBatch(n,!0)},x.prototype.fftBatch=function(n,x){for(var t=n.shape[0],e=n.shape[1],i=jh(n.shape,"float32"),r=jh(n.shape,"float32"),o=Fs(n).as2D(t,e),s=Ps(n).as2D(t,e),h=0;h<t;h++)for(var u=o.slice([h,0],[1,e]),a=s.slice([h,0],[1,e]),g=Ns(u,a),l=this.readSync(this.fftImpl(g,x).dataId),c=0;c<e;c++){var d=Lu(l,c);i.values[h*e+c]=d.real,r.values[h*e+c]=d.imag}return Ns(i.toTensor(),r.toTensor()).as2D(t,e)},x.prototype.fftImpl=function(n,x){var t=n.as1D(),e=t.size;if(this.isExponentOf2(e)){var i=this.fftRadix2(t,e,x).as2D(n.shape[0],n.shape[1]);return x&&(i=Ns(Fs(i).div(Us(e)),Ps(i).div(Us(e)))),i}var r=this.readSync(n.dataId),o=function(n){for(var x=new Float32Array(n.length/2),t=new Float32Array(n.length/2),e=0;e<n.length;e+=2)x[e/2]=n[e],t[e/2]=n[e+1];return{real:x,imag:t}}(this.fourierTransformByMatmul(r,e,x));return Ns(o.real,o.imag).as2D(n.shape[0],n.shape[1])},x.prototype.isExponentOf2=function(n){return 0==(n&n-1)},x.prototype.fftRadix2=function(n,x,t){if(1===x)return n;var e=this.readSync(n.dataId),i=x/2,r=function(n){for(var x=Math.ceil(n.length/4),t=new Float32Array(x),e=new Float32Array(x),i=0;i<n.length;i+=4)t[Math.floor(i/4)]=n[i],e[Math.floor(i/4)]=n[i+1];return{real:t,imag:e}}(e),o=Ns(r.real,r.imag).as1D(),s=function(n){for(var x=Math.floor(n.length/4),t=new Float32Array(x),e=new Float32Array(x),i=2;i<n.length;i+=4)t[Math.floor(i/4)]=n[i],e[Math.floor(i/4)]=n[i+1];return{real:t,imag:e}}(e),h=Ns(s.real,s.imag).as1D();o=this.fftRadix2(o,i,t),h=this.fftRadix2(h,i,t);var u=function(n,x){for(var t=new Float32Array(n/2),e=new Float32Array(n/2),i=0;i<Math.ceil(n/2);i++){var r=(x?2:-2)*Math.PI*(i/n);t[i]=Math.cos(r),e[i]=Math.sin(r)}return{real:t,imag:e}}(x,t),a=Ns(u.real,u.imag).mul(h),g=o.add(a),l=o.sub(a),c=Fs(g).concat(Fs(l)),d=Ps(g).concat(Ps(l));return Ns(c,d).as1D()},x.prototype.fourierTransformByMatmul=function(n,x,t){for(var e=new Float32Array(2*x),i=0;i<x;i++){for(var r=0,o=0,s=0;s<x;s++){var h=Uu(i*s,x,t),u=Lu(n,s);r+=u.real*h.real-u.imag*h.imag,o+=u.real*h.imag+u.imag*h.real}t&&(r/=x,o/=x),Hu(e,r,o,i)}return e},x.prototype.depthToSpace=function(n,x,t){Ji("NHWC"===t,function(){return"Only NHWC dataFormat supported on CPU for depthToSpace. Got "+t}),Ji(x>1,function(){return"blockSize should be > 1 for depthToSpace, but was: "+x});for(var e=n.shape[0],i=n.shape[1],r=n.shape[2],o=n.shape[3],s=i*x,h=r*x,u=o/(x*x),a=this.readSync(n.dataId),g=new Float32Array(e*s*h*u),l=0,c=0;c<e;++c)for(var d=0;d<s;++d)for(var f=Math.floor(d/x),p=d%x,y=0;y<h;++y)for(var m=Math.floor(y/x),b=(p*x+y%x)*u,z=0;z<u;++z){var v=z+b+o*(m+r*(f+i*c));g[l++]=a[v]}return Gs(g,[e,s,h,u])},x.prototype.broadcastedBinaryOp=function(n,x,t,e){var i=ku(n.shape,x.shape),r=jh(i,t),o=this.readSync(n.dataId),s=this.readSync(x.dataId),h=ju(n.shape,i),u=ju(x.shape,i),a=r.values;if(h.length+u.length===0)for(var g=0;g<a.length;++g)a[g]=e(o[g%o.length],s[g%s.length]);else{var l=this.bufferSync(n),c=this.bufferSync(x),d=function(t){var i=r.indexToLoc(t),g=i.slice(-n.rank);h.forEach(function(n){return g[n]=0});var d=l.locToIndex(g),f=i.slice(-x.rank);u.forEach(function(n){return f[n]=0});var p=c.locToIndex(f);a[t]=e(o[d],s[p])};for(g=0;g<a.length;++g)d(g)}return r.toTensor()},x.prototype.broadcastedBinaryComplexOp=function(n,x,t){var e=ku(n.shape,x.shape),i=jh(e,"float32"),r=jh(e,"float32"),o=this.readSync(n.dataId),s=this.readSync(x.dataId),h=ju(n.shape,e),u=ju(x.shape,e),a=i.values,g=r.values;if(h.length+u.length===0)for(var l=0;l<a.length;l++){var c=l%o.length,d=l%s.length,f=t(o[2*c],o[2*c+1],s[2*d],s[2*d+1]);a[l]=f.real,g[l]=f.imag}else{var p=this.bufferSync(this.data.get(n.dataId).complexTensors.real),y=this.bufferSync(this.data.get(x.dataId).complexTensors.real),m=function(e){var r=i.indexToLoc(e),l=r.slice(-n.rank);h.forEach(function(n){return l[n]=0});var c=p.locToIndex(l),d=r.slice(-x.rank);u.forEach(function(n){return d[n]=0});var f=y.locToIndex(d),m=t(o[2*c],o[2*c+1],s[2*f],s[2*f+1]);a[e]=m.real,g[e]=m.imag};for(l=0;l<a.length;l++)m(l)}return this.complex(i.toTensor(),r.toTensor())},x.prototype.split=function(n,x,t){return Zu(n,x,t)},x.prototype.dispose=function(){},x.prototype.floatPrecision=function(){return 32},x.prototype.epsilon=function(){return 1e-7},x.prototype.cropAndResize=function(n,x,t,e,i,r){for(var o=n.shape,s=o[0],h=o[1],u=o[2],a=o[3],g=x.shape[0],l=e[0],c=e[1],d=jh([g,l,c,a],"float32"),f=this.readSync(x.dataId),p=this.readSync(t.dataId),y=this.readSync(n.dataId),m=n.strides,b=d.strides,z=0;z<g;z++){var v=4*z,j=f[v],w=f[v+1],k=f[v+2],q=f[v+3],C=p[z];if(!(C>=s))for(var A=l>1?(k-j)*(h-1)/(l-1):0,E=c>1?(q-w)*(u-1)/(c-1):0,S=0;S<l;S++){var I=l>1?j*(h-1)+S*A:.5*(j+k)*(h-1);if(I<0||I>h-1)for(var D=0;D<c;D++)for(var O=0;O<a;O++){var _=O+D*b[2]+S*b[1]+z*b[0];d.values[_]=r}else if("bilinear"===i){var T=Math.floor(I),R=Math.ceil(I),B=I-T;for(D=0;D<c;D++)if((W=c>1?w*(u-1)+D*E:.5*(w+q)*(u-1))<0||W>u-1)for(O=0;O<a;O++)_=O+D*b[2]+S*b[1]+z*b[0],d.values[_]=r;else{var M=Math.floor(W),N=Math.ceil(W),F=W-M;for(O=0;O<a;O++){var P=y[_=O+M*m[2]+T*m[1]+C*m[0]],L=y[_=O+N*m[2]+T*m[1]+C*m[0]],H=y[_=O+M*m[2]+R*m[1]+C*m[0]],U=P+(L-P)*F,V=H+(y[_=O+N*m[2]+R*m[1]+C*m[0]]-H)*F;_=O+D*b[2]+S*b[1]+z*b[0],d.values[_]=U+(V-U)*B}}}else for(D=0;D<c;++D){var W;if((W=c>1?w*(u-1)+D*E:.5*(w+q)*(u-1))<0||W>u-1)for(O=0;O<a;O++)_=O+D*b[2]+S*b[1]+z*b[0],d.values[_]=r;else{var Q=Math.round(W),G=Math.round(I);for(O=0;O<a;O++){var K=O+Q*m[2]+G*m[1]+C*m[0],Y=O+D*b[2]+S*b[1]+z*b[0];d.values[Y]=y[K]}}}}}return d.toTensor()},x.prototype.sparseToDense=function(n,x,t,e){var i=su(0,n,t),r=i.sliceRank,o=i.numUpdates,s=i.sliceSize,h=i.strides,u=i.outputSize;return this.scatter(n,x,t,u,s,o,r,h,e,!1)},x.prototype.gatherND=function(n,x){var t=x.shape,e=t[t.length-1],i=tu(n,x),r=i[0],o=i[1],s=i[2],h=i[3];if(0===o)return Ls([],r,n.dtype);for(var u=new Vr([o,s],n.dtype),a=this.readSync(x.dataId),g=this.readSync(n.dataId),l=0;l<o;l++){for(var c=[],d=0,f=0;f<e;f++){var p=a[l*e+f];d+=p*h[f],c.push(p)}if(d<0||d>=n.size/s)throw new Error("Invalid indices: "+c+" does not index into "+n.shape);for(var y=0;y<s;y++)u.values[l*s+y]=g[d*s+y]}return u.toTensor().reshape(r)},x.prototype.scatterND=function(n,x,t){var e=su(0,n,t),i=e.sliceRank,r=e.numUpdates,o=e.sliceSize,s=e.strides,h=e.outputSize,u=Us(0);return this.scatter(n,x,t,h,o,r,i,s,u,!0)},x.prototype.fill=function(n,x,t){var e=gr(t=t||vr(x),nr(n));return e.fill(x),ao.makeTensor(e,n,t,this)},x.prototype.onesLike=function(n){if("string"===n.dtype)throw new Error("onesLike is not supported for string tensors");return this.fill(n.shape,1,n.dtype)},x.prototype.zerosLike=function(n){var x=gr(n.dtype,nr(n.shape));return this.makeOutput(x,n.shape,n.dtype)},x.prototype.linspace=function(n,x,t){return Fu(n,x,t)},x.prototype.scatter=function(n,x,t,e,i,r,o,s,h,u){var a=[e/i,i],g=this.readSync(n.dataId),l=this.readSync(x.dataId);if(0===e)return Ls([],t,x.dtype);var c=new Vr(a,x.dtype);c.values.fill(this.readSync(h.dataId)[0]);for(var d=0;d<r;d++){for(var f=[],p=0,y=0;y<o;y++){var m=g[d*o+y];f.push(m),p+=m*s[y]}if(p<0||p>=e/i)throw new Error("Invalid indices: "+f+" does not index into "+t);for(var b=0;b<i;b++)u?c.values[p*i+b]+=l[d*i+b]:c.values[p*i+b]=0===x.rank?l[0]:l[d*i+b]}return c.toTensor().reshape(t)},x}(zu);ao.registerBackend("cpu",function(){return new Qp},1);for(var Gp=0,Kp=[{kernelName:"NonMaxSuppressionV5",backendName:"cpu",kernelFunc:function(n){var x=n.inputs,t=n.backend,e=n.attrs,i=x,r=i.boxes,o=i.scores,s=e,h=s.maxOutputSize,u=s.iouThreshold,a=s.scoreThreshold,g=s.softNmsSigma,l=t;Vp(r,"NonMaxSuppressionWithScore");var c=Gu(l.data.get(r.dataId).values,l.data.get(o.dataId).values,h,u,a,g);return[c.selectedIndices,c.selectedScores]}},{kernelName:"Square",backendName:"cpu",kernelFunc:function(n){var x=n.inputs,t=n.backend,e=x.x,i=t;Vp(e,"square");for(var r=i.data.get(e.dataId).values,o=new Float32Array(r.length),s=0;s<r.length;++s){var h=r[s];o[s]=h*h}return{dataId:i.write(o,e.shape,e.dtype),shape:e.shape,dtype:e.dtype}}},{kernelName:nc,backendName:"cpu",kernelFunc:function(n){var x=n.inputs,t=n.backend,e=x,i=e.a,r=e.b,o=t;Vp([i,r],nc);var s=o.data.get(i.dataId).values,h=o.data.get(r.dataId).values,u=function(n,x,t,e,i,r){var o=ku(n,x),s=o.length,h=kr(o),u=ar(i,nr(o)),a=n.length,g=x.length,l=kr(n),c=kr(x),d=ju(n,o),f=ju(x,o);if(d.length+f.length===0)for(var p=0;p<u.length;++p)u[p]=r(t[p%t.length],e[p%e.length]);else{var y=function(n){var x=Tr(n,s,h),i=x.slice(-a);d.forEach(function(n){return i[n]=0});var o=_r(i,a,l),p=x.slice(-g);f.forEach(function(n){return p[n]=0});var y=_r(p,g,c);u[n]=r(t[o],e[y])};for(p=0;p<u.length;++p)y(p)}return[u,o]}(i.shape,r.shape,s,h,i.dtype,function(n,x){var t=n-x;return t*t}),a=u[0],g=u[1];return{dataId:o.write(a,g,i.dtype),shape:g,dtype:i.dtype}}}];Gp<Kp.length;Gp++)Ui(Kp[Gp]);for(var Yp,Jp=function(n){this.variableNames=["A"];var x=sa(),t=n[0],e=n[1];this.outputShape=n,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("+e+".0, "+t+".0);\n\n vec4 values = "+x.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 "},Xp=function(n){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;var x=sa(),t=n[0],e=n[1];this.outputShape=n,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("+e+".0, "+t+".0);\n vec4 values = "+x.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 "+x.output+" = result;\n }\n "},Zp=0,$p=[{kernelName:"FromPixels",backendName:"webgl",kernelFunc:function(n){var x=n.inputs,t=n.backend,e=n.attrs,i=x.pixels,r=e.numChannels,o="undefined"!=typeof HTMLVideoElement&&i instanceof HTMLVideoElement,s="undefined"!=typeof HTMLImageElement&&i instanceof HTMLImageElement,h=o?[i.videoWidth,i.videoHeight]:[i.width,i.height],u=h[0],a=h[1],g=[a,u],l=[a,u,r];(s||o)&&(null==Yp&&(Yp=document.createElement("canvas").getContext("2d")),Yp.canvas.width=u,Yp.canvas.height=a,Yp.drawImage(i,0,0,u,a),i=Yp.canvas);var c=t.makeTensorInfo(g,"int32");t.texData.get(c.dataId).usage=fo.PIXELS,t.gpgpu.uploadPixelDataToTexture(t.getTexture(c.dataId),i);var d=Bi().getBool("WEBGL_PACK")?new Xp(l):new Jp(l),f=t.runWebGLProgram(d,[c],"int32");return t.disposeData(c.dataId),f}},{kernelName:"NonMaxSuppressionV5",backendName:"webgl",kernelFunc:function(n){var x=n.inputs,t=n.backend,e=n.attrs;js("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");var i=x,r=i.boxes,o=i.scores,s=e,h=s.maxOutputSize,u=s.iouThreshold,a=s.scoreThreshold,g=s.softNmsSigma,l=t,c=Gu(l.readSync(r.dataId),l.readSync(o.dataId),h,u,a,g);return[c.selectedIndices,c.selectedScores]}},{kernelName:"Square",backendName:"webgl",kernelFunc:function(n){var x=n.inputs,t=n.backend,e=x.x,i=t,r=new vl(e.shape,"return x * x;");return i.runWebGLProgram(r,[e],e.dtype)}},{kernelName:nc,backendName:"webgl",kernelFunc:function(n){var x=n.inputs,t=n.backend,e=x,i=e.a,r=e.b,o=t,s=Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ma("return (a - b) * (a - b);",i.shape,r.shape):new Ra("return (a - b) * (a - b);",i.shape,r.shape);return o.compileAndRun(s,[i,r])}}];Zp<$p.length;Zp++)Ui($p[Zp]);for(var ny=0,xy=[{kernelName:"Square",gradFunc:function(n,x){var t=x[0];return{x:function(){return n.mul(t.toFloat().mul(2))}}}},{kernelName:nc,gradFunc:function(n,x){var t=x[0],e=x[1],i=Us(2);return{a:function(){return pd(n,pd(i,vd(t,e)))},b:function(){return pd(n,pd(i,vd(e,t)))}}}}];ny<xy.length;ny++)Vi(xy[ny]);var ty=function(){function n(){}return n.prototype.fetch=function(n,x){return fetch(n,x)},n.prototype.now=function(){return performance.now()},n.prototype.encode=function(n,x){if("utf-8"!==x&&"utf8"!==x)throw new Error("Browser's encoder only supports utf-8, but got "+x);return null==this.textEncoder&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(n)},n.prototype.decode=function(n,x){return new TextDecoder(x).decode(n)},n}();Bi().get("IS_BROWSER")&&Bi().setPlatform("browser",new ty);var ey,iy=function(){return e(7318)},ry=function(){function n(){this.util=e(745),this.textEncoder=new this.util.TextEncoder}return n.prototype.fetch=function(n,x){return null!=Bi().global.fetch?Bi().global.fetch(n,x):(null==ey&&(ey=iy()),ey(n,x))},n.prototype.now=function(){var n=process.hrtime();return 1e3*n[0]+n[1]/1e6},n.prototype.encode=function(n,x){if("utf-8"!==x&&"utf8"!==x)throw new Error("Node built-in encoder only supports utf-8, but got "+x);return this.textEncoder.encode(n)},n.prototype.decode=function(n,x){return 0===n.length?"":new this.util.TextDecoder(x).decode(n)},n}();Bi().get("IS_NODE")&&Bi().setPlatform("node",new ry);var oy={float32:4,int32:4,uint16:2,uint8:1,bool:1},sy=4;function hy(n,x){for(var t={},e=0,i=function(x){var i=x.name,r=x.dtype,o=x.shape,s=nr(o),h=void 0;if("quantization"in x){var u=x.quantization;if("uint8"!==u.dtype&&"uint16"!==u.dtype)throw new Error("Weight "+x.name+" has unknown quantization dtype "+u.dtype+". Supported quantization dtypes are: 'uint8' and 'uint16'.");var a=oy[u.dtype],g=n.slice(e,e+s*a),l="uint8"===u.dtype?new Uint8Array(g):new Uint16Array(g);if("float32"===r)h=Float32Array.from(l,function(n){return n*u.scale+u.min});else{if("int32"!==r)throw new Error("Unsupported dtype in weight '"+i+"': "+r);h=Int32Array.from(l,function(n){return Math.round(n*u.scale+u.min)})}e+=s*a}else if("string"===r){var c=nr(x.shape);h=[];for(var d=0;d<c;d++){var f=new Uint32Array(n.slice(e,e+sy))[0];e+=sy;var p=new Uint8Array(n.slice(e,e+f));h.push(p),e+=f}}else{var y=oy[r];if(g=n.slice(e,e+s*y),"float32"===r)h=new Float32Array(g);else if("int32"===r)h=new Int32Array(g);else{if("bool"!==r)throw new Error("Unsupported dtype in weight '"+i+"': "+r);h=new Uint8Array(g)}e+=s*y}t[i]=Ls(h,o,r)},r=0,o=x;r<o.length;r++)i(o[r]);return t}function uy(n){if(null===n)throw new Error("Invalid input value: "+JSON.stringify(n));var x=0,t=[];n.forEach(function(n){if(x+=n.byteLength,t.push(n.byteLength===n.buffer.byteLength?n:new n.constructor(n)),!(n instanceof Float32Array||n instanceof Int32Array||n instanceof Uint8Array))throw new Error("Unsupported TypedArray subtype: "+n.constructor.name)});var e=new Uint8Array(x),i=0;return t.forEach(function(n){e.set(new Uint8Array(n.buffer),i),i+=n.byteLength}),e.buffer}var ay="undefined"!=typeof Buffer&&("undefined"==typeof Blob||"undefined"==typeof atob||"undefined"==typeof btoa);function gy(n){return ay?Buffer.byteLength(n):new Blob([n]).size}function ly(n){var x=0;n.forEach(function(n){x+=n.byteLength});var t=new Uint8Array(x),e=0;return n.forEach(function(n){t.set(new Uint8Array(n),e),e+=n.byteLength}),t.buffer}function cy(n){for(n=n.trim();n.endsWith("/");)n=n.slice(0,n.length-1);var x=n.split("/");return x[x.length-1]}function dy(n){if(n.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:null==n.modelTopology?0:gy(JSON.stringify(n.modelTopology)),weightSpecsBytes:null==n.weightSpecs?0:gy(JSON.stringify(n.weightSpecs)),weightDataBytes:null==n.weightData?0:n.weightData.byteLength}}var fy=function(){function n(){this.saveRouters=[],this.loadRouters=[]}return n.getInstance=function(){return null==n.instance&&(n.instance=new n),n.instance},n.registerSaveRouter=function(x){n.getInstance().saveRouters.push(x)},n.registerLoadRouter=function(x){n.getInstance().loadRouters.push(x)},n.getSaveHandlers=function(x){return n.getHandlers(x,"save")},n.getLoadHandlers=function(x,t){return n.getHandlers(x,"load",t)},n.getHandlers=function(x,t,e){var i=[];return("load"===t?n.getInstance().loadRouters:n.getInstance().saveRouters).forEach(function(n){var t=n(x,e);null!==t&&i.push(t)}),i},n}(),py="://",yy=function(){function n(){this.managers={}}return n.getInstance=function(){return null==n.instance&&(n.instance=new n),n.instance},n.registerManager=function(x,t){Ji(null!=x,function(){return"scheme must not be undefined or null."}),x.endsWith(py)&&(x=x.slice(0,x.indexOf(py))),Ji(x.length>0,function(){return"scheme must not be an empty string."});var e=n.getInstance();Ji(null==e.managers[x],function(){return"A model store manager is already registered for scheme '"+x+"'."}),e.managers[x]=t},n.getManager=function(n){var x=this.getInstance().managers[n];if(null==x)throw new Error("Cannot find model manager for scheme '"+n+"'");return x},n.getSchemes=function(){return Object.keys(this.getInstance().managers)},n}();function my(n){if(-1===n.indexOf(py))throw new Error("The url string provided does not contain a scheme. Supported schemes are: "+yy.getSchemes().join(","));return{scheme:n.split(py)[0],path:n.split(py)[1]}}function by(n,x,t){return void 0===t&&(t=!1),Oi(this,void 0,void 0,function(){var e,i,r,o,s,h,u,a,g;return _i(this,function(l){switch(l.label){case 0:return Ji(n!==x,function(){return"Old path and new path are the same: '"+n+"'"}),Ji((e=fy.getLoadHandlers(n)).length>0,function(){return"Copying failed because no load handler is found for source URL "+n+"."}),Ji(e.length<2,function(){return"Copying failed because more than one ("+e.length+") load handlers for source URL "+n+"."}),i=e[0],Ji((r=fy.getSaveHandlers(x)).length>0,function(){return"Copying failed because no save handler is found for destination URL "+x+"."}),Ji(r.length<2,function(){return"Copying failed because more than one ("+e.length+") save handlers for destination URL "+x+"."}),o=r[0],s=my(n).scheme,h=my(n).path,u=s===my(n).scheme,[4,i.load()];case 1:return a=l.sent(),t&&u?[4,yy.getManager(s).removeModel(h)]:[3,3];case 2:l.sent(),l.label=3;case 3:return[4,o.save(a)];case 4:return g=l.sent(),!t||u?[3,6]:[4,yy.getManager(s).removeModel(h)];case 5:l.sent(),l.label=6;case 6:return[2,g.modelArtifactsInfo]}})})}var zy="models_store",vy="model_info_store";function jy(){if(!Bi().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");var n=window||self,x=n.indexedDB||n.mozIndexedDB||n.webkitIndexedDB||n.msIndexedDB||n.shimIndexedDB;if(null==x)throw new Error("The current browser does not appear to support IndexedDB.");return x}function wy(n){var x=n.result;x.createObjectStore(zy,{keyPath:"modelPath"}),x.createObjectStore(vy,{keyPath:"modelPath"})}var ky=function(){function n(n){if(this.indexedDB=jy(),null==n||!n)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=n}return n.prototype.save=function(n){return Oi(this,void 0,void 0,function(){return _i(this,function(x){if(n.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return[2,this.databaseAction(this.modelPath,n)]})})},n.prototype.load=function(){return Oi(this,void 0,void 0,function(){return _i(this,function(n){return[2,this.databaseAction(this.modelPath)]})})},n.prototype.databaseAction=function(n,x){var t=this;return new Promise(function(n,e){var i=t.indexedDB.open("tensorflowjs",1);i.onupgradeneeded=function(){return wy(i)},i.onsuccess=function(){var r=i.result;if(null==x){var o=r.transaction(zy,"readonly"),s=o.objectStore(zy).get(t.modelPath);s.onsuccess=function(){if(null==s.result)return r.close(),e(new Error("Cannot find model with path '"+t.modelPath+"' in IndexedDB."));n(s.result.modelArtifacts)},s.onerror=function(n){return r.close(),e(s.error)},o.oncomplete=function(){return r.close()}}else{var h,u=dy(x),a=r.transaction(vy,"readwrite"),g=a.objectStore(vy),l=g.put({modelPath:t.modelPath,modelArtifactsInfo:u});l.onsuccess=function(){var i=(h=r.transaction(zy,"readwrite")).objectStore(zy).put({modelPath:t.modelPath,modelArtifacts:x,modelArtifactsInfo:u});i.onsuccess=function(){return n({modelArtifactsInfo:u})},i.onerror=function(n){var x=(g=a.objectStore(vy)).delete(t.modelPath);x.onsuccess=function(){return r.close(),e(i.error)},x.onerror=function(n){return r.close(),e(i.error)}}},l.onerror=function(n){return r.close(),e(l.error)},a.oncomplete=function(){null==h?r.close():h.oncomplete=function(){return r.close()}}}},i.onerror=function(n){return e(i.error)}})},n.URL_SCHEME="indexeddb://",n}(),qy=function(n){return Bi().getBool("IS_BROWSER")&&!Array.isArray(n)&&n.startsWith(ky.URL_SCHEME)?(x=n.slice(ky.URL_SCHEME.length),new ky(x)):null;var x};fy.registerSaveRouter(qy),fy.registerLoadRouter(qy);var Cy=function(){function n(){this.indexedDB=jy()}return n.prototype.listModels=function(){return Oi(this,void 0,void 0,function(){var n=this;return _i(this,function(x){return[2,new Promise(function(x,t){var e=n.indexedDB.open("tensorflowjs",1);e.onupgradeneeded=function(){return wy(e)},e.onsuccess=function(){var n=e.result,i=n.transaction(vy,"readonly"),r=i.objectStore(vy).getAll();r.onsuccess=function(){for(var n={},t=0,e=r.result;t<e.length;t++){var i=e[t];n[i.modelPath]=i.modelArtifactsInfo}x(n)},r.onerror=function(x){return n.close(),t(r.error)},i.oncomplete=function(){return n.close()}},e.onerror=function(n){return t(e.error)}})]})})},n.prototype.removeModel=function(n){return Oi(this,void 0,void 0,function(){var x=this;return _i(this,function(t){var e;return n=(e=n).startsWith(ky.URL_SCHEME)?e.slice(ky.URL_SCHEME.length):e,[2,new Promise(function(t,e){var i=x.indexedDB.open("tensorflowjs",1);i.onupgradeneeded=function(){return wy(i)},i.onsuccess=function(){var x,r=i.result,o=r.transaction(vy,"readwrite"),s=o.objectStore(vy),h=s.get(n);h.onsuccess=function(){if(null==h.result)return r.close(),e(new Error("Cannot find model with path '"+n+"' in IndexedDB."));var i=s.delete(n),o=function(){var i=(x=r.transaction(zy,"readwrite")).objectStore(zy).delete(n);i.onsuccess=function(){return t(h.result.modelArtifactsInfo)},i.onerror=function(n){return e(h.error)}};i.onsuccess=o,i.onerror=function(n){return o(),r.close(),e(h.error)}},h.onerror=function(n){return r.close(),e(h.error)},o.oncomplete=function(){null==x?r.close():x.oncomplete=function(){return r.close()}}},i.onerror=function(n){return e(i.error)}})]})})},n}();if(Bi().getBool("IS_BROWSER"))try{yy.registerManager(ky.URL_SCHEME,new Cy)}catch(Ii){}var Ay="/",Ey="tensorflowjs_models",Sy="info",Iy="model_topology",Dy="weight_specs",Oy="weight_data",_y="model_metadata";function Ty(n){return{info:[Ey,n,Sy].join(Ay),topology:[Ey,n,Iy].join(Ay),weightSpecs:[Ey,n,Dy].join(Ay),weightData:[Ey,n,Oy].join(Ay),modelMetadata:[Ey,n,_y].join(Ay)}}function Ry(n){var x=n.split(Ay);if(x.length<3)throw new Error("Invalid key format: "+n);return x.slice(1,x.length-1).join(Ay)}var By=function(){function n(n){if(!Bi().getBool("IS_BROWSER")||"undefined"==typeof window||void 0===window.localStorage)throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,null==n||!n)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=n,this.keys=Ty(this.modelPath)}return n.prototype.save=function(n){return Oi(this,void 0,void 0,function(){var x,t,e;return _i(this,function(i){if(n.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");x=JSON.stringify(n.modelTopology),t=JSON.stringify(n.weightSpecs),e=dy(n);try{return this.LS.setItem(this.keys.info,JSON.stringify(e)),this.LS.setItem(this.keys.topology,x),this.LS.setItem(this.keys.weightSpecs,t),this.LS.setItem(this.keys.weightData,function(n){if(ay)return Buffer.from(n).toString("base64");for(var x=new Uint8Array(n),t="",e=0,i=x.length;e<i;e++)t+=String.fromCharCode(x[e]);return btoa(t)}(n.weightData)),this.LS.setItem(this.keys.modelMetadata,JSON.stringify({format:n.format,generatedBy:n.generatedBy,convertedBy:n.convertedBy,userDefinedMetadata:n.userDefinedMetadata})),[2,{modelArtifactsInfo:e}]}catch(n){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="+e.modelTopologyBytes+", weightSpecsBytes="+e.weightSpecsBytes+", weightDataBytes="+e.weightDataBytes+".")}})})},n.prototype.load=function(){return Oi(this,void 0,void 0,function(){var n,x,t,e,i,r,o;return _i(this,function(s){if(null==(n=JSON.parse(this.LS.getItem(this.keys.info))))throw new Error("In local storage, there is no model with name '"+this.modelPath+"'");if("JSON"!==n.modelTopologyType)throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");if(x={},null==(t=JSON.parse(this.LS.getItem(this.keys.topology))))throw new Error("In local storage, the topology of model '"+this.modelPath+"' is missing.");if(x.modelTopology=t,null==(e=JSON.parse(this.LS.getItem(this.keys.weightSpecs))))throw new Error("In local storage, the weight specs of model '"+this.modelPath+"' are missing.");if(x.weightSpecs=e,null!=(i=this.LS.getItem(this.keys.modelMetadata))&&(r=JSON.parse(i),x.format=r.format,x.generatedBy=r.generatedBy,x.convertedBy=r.convertedBy,x.userDefinedMetadata=r.userDefinedMetadata),null==(o=this.LS.getItem(this.keys.weightData)))throw new Error("In local storage, the binary weight values of model '"+this.modelPath+"' are missing.");return x.weightData=function(n){if(ay){var x=Buffer.from(n,"base64");return x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength)}for(var t=atob(n),e=new Uint8Array(t.length),i=0;i<t.length;++i)e.set([t.charCodeAt(i)],i);return e.buffer}(o),[2,x]})})},n.URL_SCHEME="localstorage://",n}(),My=function(n){return Bi().getBool("IS_BROWSER")&&!Array.isArray(n)&&n.startsWith(By.URL_SCHEME)?(x=n.slice(By.URL_SCHEME.length),new By(x)):null;var x};fy.registerSaveRouter(My),fy.registerLoadRouter(My);var Ny=function(){function n(){Ji(Bi().getBool("IS_BROWSER"),function(){return"Current environment is not a web browser"}),Ji("undefined"==typeof window||void 0!==window.localStorage,function(){return"Current browser does not appear to support localStorage"}),this.LS=window.localStorage}return n.prototype.listModels=function(){return Oi(this,void 0,void 0,function(){var n,x,t,e,i,r;return _i(this,function(o){for(n={},x=Ey+Ay,t=Ay+Sy,e=0;e<this.LS.length;++e)(i=this.LS.key(e)).startsWith(x)&&i.endsWith(t)&&(r=Ry(i),n[r]=JSON.parse(this.LS.getItem(i)));return[2,n]})})},n.prototype.removeModel=function(n){return Oi(this,void 0,void 0,function(){var x,t;return _i(this,function(e){var i;if(n=(i=n).startsWith(By.URL_SCHEME)?i.slice(By.URL_SCHEME.length):i,x=Ty(n),null==this.LS.getItem(x.info))throw new Error("Cannot find model at path '"+n+"'");return t=JSON.parse(this.LS.getItem(x.info)),this.LS.removeItem(x.info),this.LS.removeItem(x.topology),this.LS.removeItem(x.weightSpecs),this.LS.removeItem(x.weightData),[2,t]})})},n}();if(Bi().getBool("IS_BROWSER"))try{yy.registerManager(By.URL_SCHEME,new Ny)}catch(Ii){}var Fy="model",Py=".json",Ly=".weights.bin";function Hy(n){return new Promise(function(n){return setTimeout(n)}).then(n)}var Uy=function(){function n(x){if(!Bi().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");x.startsWith(n.URL_SCHEME)&&(x=x.slice(n.URL_SCHEME.length)),null!=x&&0!==x.length||(x=Fy),this.modelTopologyFileName=x+Py,this.weightDataFileName=x+Ly}return n.prototype.save=function(n){return Oi(this,void 0,void 0,function(){var x,t,e,i,r,o;return _i(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(x=window.URL.createObjectURL(new Blob([n.weightData],{type:"application/octet-stream"})),!(n.modelTopology instanceof ArrayBuffer))return[3,1];throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");case 1:return t=[{paths:["./"+this.weightDataFileName],weights:n.weightSpecs}],e={modelTopology:n.modelTopology,format:n.format,generatedBy:n.generatedBy,convertedBy:n.convertedBy,weightsManifest:t},i=window.URL.createObjectURL(new Blob([JSON.stringify(e)],{type:"application/json"})),(r=null==this.jsonAnchor?document.createElement("a"):this.jsonAnchor).download=this.modelTopologyFileName,r.href=i,[4,Hy(function(){return r.dispatchEvent(new MouseEvent("click"))})];case 2:return s.sent(),null==n.weightData?[3,4]:((o=null==this.weightDataAnchor?document.createElement("a"):this.weightDataAnchor).download=this.weightDataFileName,o.href=x,[4,Hy(function(){return o.dispatchEvent(new MouseEvent("click"))})]);case 3:s.sent(),s.label=4;case 4:return[2,{modelArtifactsInfo:dy(n)}]}})})},n.URL_SCHEME="downloads://",n}(),Vy=function(){function n(n){if(null==n||n.length<1)throw new Error("When calling browserFiles, at least 1 file is required, but received "+n);this.files=n}return n.prototype.load=function(){return Oi(this,void 0,void 0,function(){var n,x,t=this;return _i(this,function(e){return n=this.files[0],x=this.files.slice(1),[2,new Promise(function(e,i){var r=new FileReader;r.onload=function(r){var o=JSON.parse(r.target.result),s=o.modelTopology;if(null!=s){0===x.length&&e({modelTopology:s});var h=o.weightsManifest;if(null!=h){var u;try{u=t.checkManifestAndWeightFiles(h,x)}catch(n){return void i(n)}var a=[],g=[],l=[];h.forEach(function(n){n.paths.forEach(function(n){g.push(n),l.push(null)}),a.push.apply(a,n.weights)}),h.forEach(function(n){n.paths.forEach(function(n){var x=new FileReader;x.onload=function(x){var t=x.target.result,i=g.indexOf(n);l[i]=t,-1===l.indexOf(null)&&e({modelTopology:s,weightSpecs:a,weightData:ly(l),format:o.format,generatedBy:o.generatedBy,convertedBy:o.convertedBy,userDefinedMetadata:o.userDefinedMetadata})},x.onerror=function(x){return i("Failed to weights data from file of path '"+n+"'.")},x.readAsArrayBuffer(u[n])})})}else i(new Error("weightManifest field is missing from file "+n.name))}else i(new Error("modelTopology field is missing from file "+n.name))},r.onerror=function(x){return i("Failed to read model topology and weights manifest JSON from file '"+n.name+"'. BrowserFiles supports loading Keras-style tf.Model artifacts only.")},r.readAsText(n)})]})})},n.prototype.checkManifestAndWeightFiles=function(n,x){for(var t=[],e=x.map(function(n){return cy(n.name)}),i={},r=0,o=n;r<o.length;r++)o[r].paths.forEach(function(n){var r=cy(n);if(-1!==t.indexOf(r))throw new Error("Duplicate file basename found in weights manifest: '"+r+"'");if(t.push(r),-1===e.indexOf(r))throw new Error("Weight file with basename '"+r+"' is not provided.");i[n]=x[e.indexOf(r)]});if(t.length!==x.length)throw new Error("Mismatch in the number of files in weights manifest ("+t.length+") and the number of weight files provided ("+x.length+").");return i},n}();function Wy(n,x,t,e){!function(n){Ji(null!=n&&Array.isArray(n)&&n.length>0,function(){return"promises must be a none empty array"})}(n),function(n,x){Ji(n>=0&&n<=1,function(){return"Progress fraction must be in range [0, 1], but got startFraction "+n}),Ji(x>=0&&x<=1,function(){return"Progress fraction must be in range [0, 1], but got endFraction "+x}),Ji(x>=n,function(){return"startFraction must be no more than endFraction, but got startFraction "+n+" and endFraction "+x})}(t=null==t?0:t,e=null==e?1:e);var i=0;return Promise.all(n.map(function(r){return r.then(function(r){var o=t+ ++i/n.length*(e-t);return x(o),r}),r}))}function Qy(n,x){return Oi(this,void 0,void 0,function(){var t,e,i,r,o,s,h,u,a;return _i(this,function(g){switch(g.label){case 0:return null==x&&(x={}),t=null==x.fetchFunc?Bi().platform.fetch:x.fetchFunc,e=n.map(function(n){return t(n,x.requestInit,{isBinary:!0})}),i=0,r=.5,null!=x.onProgress?[3,2]:[4,Promise.all(e)];case 1:return o=g.sent(),[3,4];case 2:return[4,Wy(e,x.onProgress,i,r)];case 3:o=g.sent(),g.label=4;case 4:return s=o.map(function(n){return n.arrayBuffer()}),h=.5,u=1,null!=x.onProgress?[3,6]:[4,Promise.all(s)];case 5:return a=g.sent(),[3,8];case 6:return[4,Wy(s,x.onProgress,h,u)];case 7:a=g.sent(),g.label=8;case 8:return[2,a]}})})}function Gy(n){var x=this;return function(t,e,i){return void 0===e&&(e=""),Oi(x,void 0,void 0,function(){var x,r,o,s,h,u,a,g,l,c;return _i(this,function(d){switch(d.label){case 0:if(x=t.map(function(){return!1}),r={},o=null!=i?i.map(function(){return!1}):[],s=[],t.forEach(function(n,t){var e=0;n.weights.forEach(function(n){var h="quantization"in n?n.quantization.dtype:n.dtype,u=oy[h]*nr(n.shape),a=function(){x[t]=!0,null==r[t]&&(r[t]=[]),r[t].push({manifestEntry:n,groupOffset:e,sizeBytes:u})};null!=i?i.forEach(function(x,t){x===n.name&&(a(),o[t]=!0)}):a(),s.push(n.name),e+=u})}),!o.every(function(n){return n}))throw h=i.filter(function(n,x){return!o[x]}),new Error("Could not find weights in manifest with names: "+h.join(", ")+". \nManifest JSON has weights with names: "+s.join(", ")+".");return u=x.reduce(function(n,x,t){return x&&n.push(t),n},[]),a=[],u.forEach(function(n){t[n].paths.forEach(function(n){var x=e+(e.endsWith("/")?"":"/")+n;a.push(x)})}),[4,n(a)];case 1:return g=d.sent(),l={},c=0,u.forEach(function(n){for(var x=t[n].paths.length,e=0,i=0;i<x;i++)e+=g[c+i].byteLength;for(var o=new ArrayBuffer(e),s=new Uint8Array(o),h=0,u=0;u<x;u++){var a=new Uint8Array(g[c+u]);s.set(a,h),h+=a.byteLength}r[n].forEach(function(n){var x=hy(o.slice(n.groupOffset,n.groupOffset+n.sizeBytes),[n.manifestEntry]);for(var t in x)l[t]=x[t]}),c+=x}),[2,l]}})})}}fy.registerSaveRouter(function(n){return Bi().getBool("IS_BROWSER")&&!Array.isArray(n)&&n.startsWith(Uy.URL_SCHEME)?function(n){return void 0===n&&(n="model"),new Uy(n)}(n.slice(Uy.URL_SCHEME.length)):null});var Ky=function(){function n(n,x){if(this.DEFAULT_METHOD="POST",null==x&&(x={}),this.weightPathPrefix=x.weightPathPrefix,this.onProgress=x.onProgress,null!=x.fetchFunc?(Ji("function"==typeof x.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=x.fetchFunc):this.fetch=Bi().platform.fetch,Ji(null!=n&&n.length>0,function(){return"URL path for http must not be null, undefined or empty."}),Array.isArray(n)&&Ji(2===n.length,function(){return"URL paths for http must have a length of 2, (actual length is "+n.length+")."}),this.path=n,null!=x.requestInit&&null!=x.requestInit.body)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=x.requestInit||{}}return n.prototype.save=function(n){return Oi(this,void 0,void 0,function(){var x,t,e,i;return _i(this,function(r){switch(r.label){case 0:if(n.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");return(x=Object.assign({method:this.DEFAULT_METHOD},this.requestInit)).body=new FormData,t=[{paths:["./model.weights.bin"],weights:n.weightSpecs}],e={modelTopology:n.modelTopology,format:n.format,generatedBy:n.generatedBy,convertedBy:n.convertedBy,userDefinedMetadata:n.userDefinedMetadata,weightsManifest:t},x.body.append("model.json",new Blob([JSON.stringify(e)],{type:"application/json"}),"model.json"),null!=n.weightData&&x.body.append("model.weights.bin",new Blob([n.weightData],{type:"application/octet-stream"}),"model.weights.bin"),[4,this.fetch(this.path,x)];case 1:if((i=r.sent()).ok)return[2,{modelArtifactsInfo:dy(n),responses:[i]}];throw new Error("BrowserHTTPRequest.save() failed due to HTTP response status "+i.status+".")}})})},n.prototype.load=function(){return Oi(this,void 0,void 0,function(){var n,x,t,e,i,r,o,s,h,u,a,g;return _i(this,function(l){switch(l.label){case 0:return[4,this.fetch(this.path,this.requestInit)];case 1:if(!(n=l.sent()).ok)throw new Error("Request to "+this.path+" failed with status code "+n.status+". Please verify this URL points to the model JSON of the model to load.");l.label=2;case 2:return l.trys.push([2,4,,5]),[4,n.json()];case 3:return x=l.sent(),[3,5];case 4:throw l.sent(),t="Failed to parse model JSON of response from "+this.path+".",this.path.endsWith(".pb")?t+=" 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.":t+=" Please make sure the server is serving valid JSON for this request.",new Error(t);case 5:if(e=x.modelTopology,i=x.weightsManifest,r=x.generatedBy,o=x.convertedBy,s=x.format,h=x.userDefinedMetadata,null==e&&null==i)throw new Error("The JSON from HTTP path "+this.path+" contains neither model topology or manifest for weights.");return null==i?[3,7]:[4,this.loadWeights(i)];case 6:g=l.sent(),u=g[0],a=g[1],l.label=7;case 7:return[2,{modelTopology:e,weightSpecs:u,weightData:a,userDefinedMetadata:h,generatedBy:r,convertedBy:o,format:s}]}})})},n.prototype.loadWeights=function(n){return Oi(this,void 0,void 0,function(){var x,t,e,i,r,o,s,h,u,a,g;return _i(this,function(l){switch(l.label){case 0:for(x=Array.isArray(this.path)?this.path[1]:this.path,t=function(n){var x=n.lastIndexOf("/"),t=n.lastIndexOf("?"),e=n.substring(0,x),i=t>x?n.substring(t):"";return[e+"/",i]}(x),e=t[0],i=t[1],r=this.weightPathPrefix||e,o=[],s=0,h=n;s<h.length;s++)u=h[s],o.push.apply(o,u.weights);return a=[],n.forEach(function(n){n.paths.forEach(function(n){a.push(r+n+i)})}),[4,Qy(a,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress})];case 1:return g=l.sent(),[2,[o,ly(g)]]}})})},n.URL_SCHEME_REGEX=/^https?:\/\//,n}();function Yy(n){return null!=n.match(Ky.URL_SCHEME_REGEX)}var Jy=function(n,x){return"undefined"==typeof fetch?null:(Array.isArray(n)?n.every(function(n){return Yy(n)}):Yy(n))?Xy(n,{onProgress:x}):null};function Xy(n,x){return new Ky(n,x)}fy.registerSaveRouter(Jy),fy.registerLoadRouter(Jy);var Zy,$y=function(){function n(n){this.modelArtifacts=n}return n.prototype.load=function(){return Oi(this,void 0,void 0,function(){return _i(this,function(n){return[2,this.modelArtifacts]})})},n}(),nm=function(){function n(n){this.saveHandler=n}return n.prototype.save=function(n){return Oi(this,void 0,void 0,function(){return _i(this,function(x){return[2,this.saveHandler(n)]})})},n}(),xm=Object.freeze({browserFiles:function(n){return new Vy(n)},browserHTTPRequest:function(n,x){return Xy(n,x)},concatenateArrayBuffers:ly,decodeWeights:hy,encodeWeights:function(n,x){return Oi(this,void 0,void 0,function(){var t,e,i,r,o,s=this;return _i(this,function(h){switch(h.label){case 0:for(t=[],e=[],i=Array.isArray(n)?n.map(function(n){return n.name}):Object.keys(n),r=function(r){var o=i[r],h=Array.isArray(n)?n[r].tensor:n[o];if("float32"!==h.dtype&&"int32"!==h.dtype&&"bool"!==h.dtype&&"string"!==h.dtype)throw new Error("Unsupported dtype in weight '"+o+"': "+h.dtype);var u={name:o,shape:h.shape,dtype:h.dtype};if("string"===h.dtype){var a=new Promise(function(n){return Oi(s,void 0,void 0,function(){var x,t,e,i,r,o,s;return _i(this,function(u){switch(u.label){case 0:return[4,h.bytes()];case 1:for(x=u.sent(),t=x.reduce(function(n,x){return n+x.length},0)+sy*x.length,e=new Uint8Array(t),i=0,r=0;r<x.length;r++)o=x[r],s=new Uint8Array(new Uint32Array([o.length]).buffer),e.set(s,i),i+=sy,e.set(o,i),i+=o.length;return n(e),[2]}})})});e.push(a)}else e.push(h.data());null!=x&&(u.group=x),t.push(u)},o=0;o<i.length;++o)r(o);return[4,Promise.all(e)];case 1:return[2,{data:uy(h.sent()),specs:t}]}})})},fromMemory:function(n,x,t,e){return 1===arguments.length?null!=n.modelTopology||null!=n.weightSpecs?new $y(n):(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 $y({modelTopology:n})):(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 $y({modelTopology:n,weightSpecs:x,weightData:t,trainingConfig:e}))},getLoadHandlers:function(n,x){return fy.getLoadHandlers(n,x)},getModelArtifactsInfoForJSON:dy,getSaveHandlers:function(n){return fy.getSaveHandlers(n)},http:Xy,isHTTPScheme:Yy,loadWeights:function(n,x,t,e){return void 0===x&&(x=""),Oi(this,void 0,void 0,function(){return _i(this,function(i){return[2,Gy(function(n){return Qy(n,{requestInit:e})})(n,x,t)]})})},registerLoadRouter:function(n){return fy.registerLoadRouter(n)},registerSaveRouter:function(n){return fy.registerSaveRouter(n)},weightsLoaderFactory:Gy,withSaveHandler:function(n){return new nm(n)},copyModel:function(n,x){return Oi(this,void 0,void 0,function(){return _i(this,function(t){return[2,by(n,x,!1)]})})},listModels:function(){return Oi(this,void 0,void 0,function(){var n,x,t,e,i,r,o;return _i(this,function(s){switch(s.label){case 0:n=yy.getSchemes(),x={},t=0,e=n,s.label=1;case 1:return t<e.length?(i=e[t],[4,yy.getManager(i).listModels()]):[3,4];case 2:for(o in r=s.sent())x[i+py+o]=r[o];s.label=3;case 3:return t++,[3,1];case 4:return[2,x]}})})},moveModel:function(n,x){return Oi(this,void 0,void 0,function(){return _i(this,function(t){return[2,by(n,x,!0)]})})},removeModel:function(n){return Oi(this,void 0,void 0,function(){var x;return _i(this,function(t){return x=my(n),[2,yy.getManager(x.scheme).removeModel(x.path)]})})}}),tm=Ms({confusionMatrix_:function(n,x,t){var e=qs(n,"labels","confusionMatrix"),i=qs(x,"predictions","confusionMatrix");Ji(null==t||t>0&&Number.isInteger(t),function(){return"If provided, numClasses must be a positive integer, but got "+t}),Ji(1===e.rank,function(){return"Expected the rank of labels to be 1, but got "+e.rank}),Ji(1===i.rank,function(){return"Expected the rank of predictions to be 1, but got "+i.rank}),Ji(e.shape[0]===i.shape[0],function(){return"Mismatch in the number of examples: "+e.shape[0]+" vs. "+i.shape[0]+". Labels and predictions should have the same number of elements."}),Ji(t>0&&Number.isInteger(t),function(){return"numClasses is required to be a positive integer, but got "+t});var r=_h(e.asType("int32"),t),o=_h(i.asType("int32"),t);return r.transpose().matMul(o).asType("int32")}}),em=(Object.freeze({confusionMatrix:tm}),Ms({fromPixels_:function(n,x){if(void 0===x&&(x=3),x>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(null==n)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");var t=!1,e=!1,i=!1,r=!1,o=!1;if(n.data instanceof Uint8Array)t=!0;else if("undefined"!=typeof ImageData&&n instanceof ImageData)e=!0;else if("undefined"!=typeof HTMLVideoElement&&n instanceof HTMLVideoElement)i=!0;else if("undefined"!=typeof HTMLImageElement&&n instanceof HTMLImageElement)r=!0;else{if(null==n.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 "+n.constructor.name);o=!0}if(i&&i&&n.readyState<2)throw new Error("The video element has not loaded data yet. Please wait for `loadeddata` event on the <video> element.");if(null!=Pi("FromPixels",ao.backendName))return ao.runKernel("FromPixels",{pixels:n},{numChannels:x});var s,h,u=i?[n.videoWidth,n.videoHeight]:[n.width,n.height],a=u[0],g=u[1];if(o?s=n.getContext("2d").getImageData(0,0,a,g).data:e||t?s=n.data:(r||i)&&(null==Zy&&(Zy=document.createElement("canvas").getContext("2d")),Zy.canvas.width=a,Zy.canvas.height=g,Zy.drawImage(n,0,0,a,g),s=Zy.getImageData(0,0,a,g).data),4===x)h=new Int32Array(s);else{var l=a*g;h=new Int32Array(l*x);for(var c=0;c<l;c++)for(var d=0;d<x;++d)h[c*x+d]=s[4*c+d]}return Qs(h,[g,a,x],"int32")}})),im=Object.freeze({toPixels:function(n,x){return Oi(this,void 0,void 0,function(){var t,e,i,r,o,s,h,u,a,g,l,c,d,f,p,y,m,b,z,v,j,w,k;return _i(this,function(q){switch(q.label){case 0:if(t=qs(n,"img","toPixels"),n instanceof Kr||(t=t.toInt()),2!==t.rank&&3!==t.rank)throw new Error("toPixels only supports rank 2 or 3 tensors, got rank "+t.rank+".");if(e=t.shape.slice(0,2),i=e[0],r=e[1],(o=2===t.rank?1:t.shape[2])>4||2===o)throw new Error("toPixels only supports depth of size 1, 3 or 4 but got "+o);return[4,t.data()];case 1:return s=q.sent(),h=t.min(),u=t.max(),[4,Promise.all([h.data(),u.data()])];case 2:if(a=q.sent(),g=a[0],l=a[1],c=g[0],d=l[0],h.dispose(),u.dispose(),"float32"===t.dtype){if(c<0||d>1)throw new Error("Tensor values for a float32 Tensor must be in the range [0 - 1] but got range ["+c+" - "+d+"].")}else{if("int32"!==t.dtype)throw new Error("Unsupported type for toPixels: "+t.dtype+". Please use float32 or int32 tensors.");if(c<0||d>255)throw new Error("Tensor values for a int32 Tensor must be in the range [0 - 255] but got range ["+c+" - "+d+"].")}for(f="float32"===t.dtype?255:1,p=new Uint8ClampedArray(r*i*4),y=0;y<i*r;++y)m=void 0,b=void 0,z=void 0,v=void 0,1===o?(m=s[y]*f,b=s[y]*f,z=s[y]*f,v=255):3===o?(m=s[3*y]*f,b=s[3*y+1]*f,z=s[3*y+2]*f,v=255):4===o&&(m=s[4*y]*f,b=s[4*y+1]*f,z=s[4*y+2]*f,v=s[4*y+3]*f),p[0+(j=4*y)]=Math.round(m),p[j+1]=Math.round(b),p[j+2]=Math.round(z),p[j+3]=Math.round(v);return null!=x&&(x.width=r,x.height=i,w=x.getContext("2d"),k=new ImageData(p,r,i),w.putImageData(k,0,0)),t!==n&&t.dispose(),[2,p]}})})},fromPixels:em}),rm=function(){function n(){}return n.prototype.getClassName=function(){return this.constructor.className},n.fromConfig=function(n,x){return new n(x)},n}(),om=function(){function n(){this.classNameMap={}}return n.getMap=function(){return null==n.instance&&(n.instance=new n),n.instance},n.register=function(x){n.getMap().classNameMap[x.className]=[x,x.fromConfig]},n}();function sm(n){Ji(null!=n.className,function(){return"Class being registered does not have the static className property defined."}),Ji("string"==typeof n.className,function(){return"className is required to be a string, but got type "+typeof n.className}),Ji(n.className.length>0,function(){return"Class being registered has an empty-string as its className, which is disallowed."}),om.register(n)}Object.freeze({Serializable:rm,SerializationMap:om,registerClass:sm});var hm=.001,um=.1;function am(){return 32===ao.backend.floatPrecision()?hm:um}function gm(n,x,t){var e=!0;if((fr(n)||fr(x))&&(e=!1),fr(n)&&fr(x)&&(e=!0),e){var i=n.constructor.name,r=x.constructor.name;if(i!==r)throw new Error("Arrays are of different type. Actual: "+i+". Expected: "+r)}if(Array.isArray(n)&&Array.isArray(x)){var o=ws(n),s=ws(x);if(!xr(o,s))throw new Error("Arrays have different shapes. Actual: ["+o+"]. Expected: ["+s+"]")}var h=fr(n)?n:$i(n),u=fr(x)?x:$i(x);if(h.length!==u.length)throw new Error("Arrays have different lengths actual: "+h.length+" vs expected: "+u.length+".\nActual: "+h+".\nExpected: "+u+".");for(var a=0;a<u.length;++a){var g=h[a],l=u[a];if(!t(g,l))throw new Error("Arrays differ: actual["+a+"] = "+g+", expected["+a+"] = "+l+".\nActual: "+h+".\nExpected: "+u+".")}}function lm(n,x,t){return!isFinite(n)&&!isFinite(x)||!(isNaN(n)||isNaN(x)||Math.abs(n-x)>t)}Object.freeze({TEST_EPSILON_FLOAT16:um,expectArraysClose:function(n,x,t){return null==t&&(t=am()),gm(n,x,function(n,x){return lm(n,x,t)})},testEpsilon:am,expectPromiseToFail:function(n,x){n().then(function(){return x.fail()},function(){return x()})},expectArraysEqual:function(n,x){var t="string"==typeof x||"number"==typeof x||"boolean"==typeof x?[x]:x;return mr(n)||mr(n[0])||mr(x)||mr(x[0])?gm(n,t,function(n,x){return n==x}):gm(n,x,function(n,x){return lm(n,x,0)})},expectNumbersClose:function(n,x,t){if(null==t&&(t=am()),!lm(n,x,t))throw new Error("Numbers differ: actual === "+n+", expected === "+x)},expectValuesInRange:function(n,x,t){for(var e=0;e<n.length;e++)if(n[e]<x||n[e]>t)throw new Error("Value out of range:"+n[e]+" low: "+x+", high: "+t)},expectArrayBuffersEqual:function(n,x){expect(new Float32Array(n)).toEqual(new Float32Array(x))}}),Object.freeze({gpgpu_util:Tg,webgl_util:ps,forceHalfFloat:function(){Bi().set("WEBGL_FORCE_F16_TEXTURES",!0)},MathBackendWebGL:Zl,setWebGLContext:bo,GPGPUContext:Rg});var cm=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return Di(x,n),x.prototype.minimize=function(n,x,t){void 0===x&&(x=!1);var e=this.computeGradients(n,t),i=e.value,r=e.grads;if(null!=t){var o=t.map(function(n){return{name:n.name,tensor:r[n.name]}});this.applyGradients(o)}else this.applyGradients(r);return zs(r),x?i:(i.dispose(),null)},Object.defineProperty(x.prototype,"iterations",{get:function(){return null==this.iterations_&&(this.iterations_=0),this.iterations_},enumerable:!0,configurable:!0}),x.prototype.incrementIterations=function(){this.iterations_=this.iterations+1},x.prototype.computeGradients=function(n,x){return fu(n,x)},x.prototype.dispose=function(){null!=this.iterations_&&zs(this.iterations_)},x.prototype.saveIterations=function(){return Oi(this,void 0,void 0,function(){return _i(this,function(n){return null==this.iterations_&&(this.iterations_=0),[2,{name:"iter",tensor:Us(this.iterations_,"int32")}]})})},x.prototype.getWeights=function(){return Oi(this,void 0,void 0,function(){return _i(this,function(n){throw new Error("getWeights() is not implemented for this optimizer yet.")})})},x.prototype.setWeights=function(n){return Oi(this,void 0,void 0,function(){return _i(this,function(n){throw new Error("setWeights() is not implemented for this optimizer class "+this.getClassName())})})},x.prototype.extractIterations=function(n){return Oi(this,void 0,void 0,function(){var x;return _i(this,function(t){switch(t.label){case 0:return x=this,[4,n[0].tensor.data()];case 1:return x.iterations_=t.sent()[0],[2,n.slice(1)]}})})},x}(rm);Object.defineProperty(cm,Symbol.hasInstance,{value:function(n){return null!=n.minimize&&null!=n.computeGradients&&null!=n.applyGradients}});var dm=function(n){function x(x,t,e){void 0===e&&(e=null);var i=n.call(this)||this;return i.learningRate=x,i.rho=t,i.epsilon=e,i.accumulatedGrads=[],i.accumulatedUpdates=[],null==e&&(i.epsilon=ao.backend.epsilon()),i}return Di(x,n),x.prototype.applyGradients=function(n){var x=this;(Array.isArray(n)?n.map(function(n){return n.name}):Object.keys(n)).forEach(function(t,e){var i=ao.registeredVariables[t];null==x.accumulatedGrads[e]&&(x.accumulatedGrads[e]={originalName:t+"/accum_grad",variable:bs(function(){return eh(i).variable(!1)})}),null==x.accumulatedUpdates[e]&&(x.accumulatedUpdates[e]={originalName:t+"/accum_var",variable:bs(function(){return eh(i).variable(!1)})});var r=Array.isArray(n)?n[e].tensor:n[t];if(null!=r){var o=x.accumulatedGrads[e].variable,s=x.accumulatedUpdates[e].variable;bs(function(){var n=o.mul(x.rho).add(r.square().mul(1-x.rho)),t=s.add(x.epsilon).sqrt().div(o.add(x.epsilon).sqrt()).mul(r),e=s.mul(x.rho).add(t.square().mul(1-x.rho));o.assign(n),s.assign(e);var h=t.mul(-x.learningRate).add(i);i.assign(h)})}}),this.incrementIterations()},x.prototype.dispose=function(){null!=this.accumulatedUpdates&&(zs(this.accumulatedGrads.map(function(n){return n.variable})),zs(this.accumulatedUpdates.map(function(n){return n.variable})))},x.prototype.getWeights=function(){return Oi(this,void 0,void 0,function(){var n;return _i(this,function(x){switch(x.label){case 0:return n=this.accumulatedGrads.concat(this.accumulatedUpdates),[4,this.saveIterations()];case 1:return[2,[x.sent()].concat(n.map(function(n){return{name:n.originalName,tensor:n.variable}}))]}})})},x.prototype.setWeights=function(n){return Oi(this,void 0,void 0,function(){var x;return _i(this,function(t){switch(t.label){case 0:return[4,this.extractIterations(n)];case 1:return n=t.sent(),x=n.length/2,this.accumulatedGrads=n.slice(0,x).map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}}),this.accumulatedUpdates=n.slice(x,2*x).map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}}),[2]}})})},x.prototype.getConfig=function(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}},x.fromConfig=function(n,x){return new n(x.learningRate,x.rho,x.epsilon)},x.className="Adadelta",x}(cm);sm(dm);var fm=function(n){function x(x,t){void 0===t&&(t=.1);var e=n.call(this)||this;return e.learningRate=x,e.initialAccumulatorValue=t,e.accumulatedGrads=[],e}return Di(x,n),x.prototype.applyGradients=function(n){var x=this;(Array.isArray(n)?n.map(function(n){return n.name}):Object.keys(n)).forEach(function(t,e){var i=ao.registeredVariables[t];null==x.accumulatedGrads[e]&&(x.accumulatedGrads[e]={originalName:t+"/accumulator",variable:bs(function(){return $s(i.shape,x.initialAccumulatorValue).variable(!1)})});var r=Array.isArray(n)?n[e].tensor:n[t];if(null!=r){var o=x.accumulatedGrads[e].variable;bs(function(){var n=o.add(r.square());o.assign(n);var t=r.div(n.add(ao.backend.epsilon()).sqrt()).mul(-x.learningRate).add(i);i.assign(t)})}}),this.incrementIterations()},x.prototype.dispose=function(){null!=this.accumulatedGrads&&zs(this.accumulatedGrads.map(function(n){return n.variable}))},x.prototype.getWeights=function(){return Oi(this,void 0,void 0,function(){return _i(this,function(n){switch(n.label){case 0:return[4,this.saveIterations()];case 1:return[2,[n.sent()].concat(this.accumulatedGrads.map(function(n){return{name:n.originalName,tensor:n.variable}}))]}})})},x.prototype.setWeights=function(n){return Oi(this,void 0,void 0,function(){return _i(this,function(x){switch(x.label){case 0:return[4,this.extractIterations(n)];case 1:return n=x.sent(),this.accumulatedGrads=n.map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}}),[2]}})})},x.prototype.getConfig=function(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}},x.fromConfig=function(n,x){return new n(x.learningRate,x.initialAccumulatorValue)},x.className="Adagrad",x}(cm);sm(fm);var pm=function(n){function x(x,t,e,i){void 0===i&&(i=null);var r=n.call(this)||this;return r.learningRate=x,r.beta1=t,r.beta2=e,r.epsilon=i,r.accumulatedFirstMoment=[],r.accumulatedSecondMoment=[],bs(function(){r.accBeta1=Us(t).variable(),r.accBeta2=Us(e).variable()}),null==i&&(r.epsilon=ao.backend.epsilon()),r}return Di(x,n),x.prototype.applyGradients=function(n){var x=this,t=Array.isArray(n)?n.map(function(n){return n.name}):Object.keys(n);bs(function(){var e=vd(1,x.accBeta1),i=vd(1,x.accBeta2);t.forEach(function(t,r){var o=ao.registeredVariables[t];null==x.accumulatedFirstMoment[r]&&(x.accumulatedFirstMoment[r]={originalName:t+"/m",variable:bs(function(){return eh(o).variable(!1)})}),null==x.accumulatedSecondMoment[r]&&(x.accumulatedSecondMoment[r]={originalName:t+"/v",variable:bs(function(){return eh(o).variable(!1)})});var s=Array.isArray(n)?n[r].tensor:n[t];if(null!=s){var h=x.accumulatedFirstMoment[r].variable,u=x.accumulatedSecondMoment[r].variable,a=h.mul(x.beta1).add(s.mul(1-x.beta1)),g=u.mul(x.beta2).add(s.square().mul(1-x.beta2)),l=a.div(e),c=g.div(i);h.assign(a),u.assign(g);var d=l.div(c.sqrt().add(x.epsilon)).mul(-x.learningRate).add(o);o.assign(d)}}),x.accBeta1.assign(x.accBeta1.mul(x.beta1)),x.accBeta2.assign(x.accBeta2.mul(x.beta2))}),this.incrementIterations()},x.prototype.dispose=function(){this.accBeta1.dispose(),this.accBeta2.dispose(),null!=this.accumulatedFirstMoment&&zs(this.accumulatedFirstMoment.map(function(n){return n.variable})),null!=this.accumulatedSecondMoment&&zs(this.accumulatedSecondMoment.map(function(n){return n.variable}))},x.prototype.getWeights=function(){return Oi(this,void 0,void 0,function(){var n;return _i(this,function(x){switch(x.label){case 0:return n=this.accumulatedFirstMoment.concat(this.accumulatedSecondMoment),[4,this.saveIterations()];case 1:return[2,[x.sent()].concat(n.map(function(n){return{name:n.originalName,tensor:n.variable}}))]}})})},x.prototype.setWeights=function(n){return Oi(this,void 0,void 0,function(){var x,t=this;return _i(this,function(e){switch(e.label){case 0:return[4,this.extractIterations(n)];case 1:return n=e.sent(),bs(function(){t.accBeta1.assign(md(t.beta1,t.iterations_+1)),t.accBeta2.assign(md(t.beta2,t.iterations_+1))}),x=n.length/2,this.accumulatedFirstMoment=n.slice(0,x).map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}}),this.accumulatedSecondMoment=n.slice(x,2*x).map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}}),[2]}})})},x.prototype.getConfig=function(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}},x.fromConfig=function(n,x){return new n(x.learningRate,x.beta1,x.beta2,x.epsilon)},x.className="Adam",x}(cm);sm(pm);var ym=function(n){function x(x,t,e,i,r){void 0===i&&(i=null),void 0===r&&(r=0);var o=n.call(this)||this;return o.learningRate=x,o.beta1=t,o.beta2=e,o.epsilon=i,o.decay=r,o.accumulatedFirstMoment=[],o.accumulatedWeightedInfNorm=[],bs(function(){o.iteration=Us(0).variable(),o.accBeta1=Us(t).variable()}),null==i&&(o.epsilon=ao.backend.epsilon()),o}return Di(x,n),x.prototype.applyGradients=function(n){var x=this,t=Array.isArray(n)?n.map(function(n){return n.name}):Object.keys(n);bs(function(){var e=vd(1,x.accBeta1),i=od(-x.learningRate,x.iteration.mul(x.decay).add(1));t.forEach(function(t,r){var o=ao.registeredVariables[t];null==x.accumulatedFirstMoment[r]&&(x.accumulatedFirstMoment[r]={originalName:t+"/m",variable:eh(o).variable(!1)}),null==x.accumulatedWeightedInfNorm[r]&&(x.accumulatedWeightedInfNorm[r]={originalName:t+"/v",variable:eh(o).variable(!1)});var s=Array.isArray(n)?n[r].tensor:n[t];if(null!=s){var h=x.accumulatedFirstMoment[r].variable,u=x.accumulatedWeightedInfNorm[r].variable,a=h.mul(x.beta1).add(s.mul(1-x.beta1)),g=u.mul(x.beta2),l=s.abs(),c=g.maximum(l);h.assign(a),u.assign(c);var d=i.div(e).mul(a.div(c.add(x.epsilon))).add(o);o.assign(d)}}),x.iteration.assign(x.iteration.add(1)),x.accBeta1.assign(x.accBeta1.mul(x.beta1))}),this.incrementIterations()},x.prototype.dispose=function(){this.accBeta1.dispose(),this.iteration.dispose(),null!=this.accumulatedFirstMoment&&zs(this.accumulatedFirstMoment.map(function(n){return n.variable})),null!=this.accumulatedWeightedInfNorm&&zs(this.accumulatedWeightedInfNorm.map(function(n){return n.variable}))},x.prototype.getWeights=function(){return Oi(this,void 0,void 0,function(){return _i(this,function(n){throw new Error("getWeights() is not implemented for Adamax yet.")})})},x.prototype.setWeights=function(n){return Oi(this,void 0,void 0,function(){return _i(this,function(n){throw new Error("setWeights() is not implemented for Adamax yet.")})})},x.prototype.getConfig=function(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}},x.fromConfig=function(n,x){return new n(x.learningRate,x.beta1,x.beta2,x.epsilon,x.decay)},x.className="Adamax",x}(cm);sm(ym);var mm=function(n){function x(x){var t=n.call(this)||this;return t.learningRate=x,t.setLearningRate(x),t}return Di(x,n),x.prototype.applyGradients=function(n){var x=this;(Array.isArray(n)?n.map(function(n){return n.name}):Object.keys(n)).forEach(function(t,e){var i=Array.isArray(n)?n[e].tensor:n[t];if(null!=i){var r=ao.registeredVariables[t];bs(function(){var n=x.c.mul(i).add(r);r.assign(n)})}}),this.incrementIterations()},x.prototype.setLearningRate=function(n){this.learningRate=n,null!=this.c&&this.c.dispose(),this.c=vs(Us(-n))},x.prototype.dispose=function(){this.c.dispose()},x.prototype.getWeights=function(){return Oi(this,void 0,void 0,function(){return _i(this,function(n){switch(n.label){case 0:return[4,this.saveIterations()];case 1:return[2,[n.sent()]]}})})},x.prototype.setWeights=function(n){return Oi(this,void 0,void 0,function(){return _i(this,function(x){switch(x.label){case 0:return[4,this.extractIterations(n)];case 1:if(0!==(n=x.sent()).length)throw new Error("SGD optimizer does not have settable weights.");return[2]}})})},x.prototype.getConfig=function(){return{learningRate:this.learningRate}},x.fromConfig=function(n,x){return new n(x.learningRate)},x.className="SGD",x}(cm);sm(mm);var bm=function(n){function x(x,t,e){void 0===e&&(e=!1);var i=n.call(this,x)||this;return i.learningRate=x,i.momentum=t,i.useNesterov=e,i.accumulations=[],i.m=Us(i.momentum),i}return Di(x,n),x.prototype.applyGradients=function(n){var x=this;(Array.isArray(n)?n.map(function(n){return n.name}):Object.keys(n)).forEach(function(t,e){var i=ao.registeredVariables[t];null==x.accumulations[e]&&(x.accumulations[e]={originalName:t+"/momentum",variable:bs(function(){return eh(i).variable(!1)})});var r=x.accumulations[e].variable,o=Array.isArray(n)?n[e].tensor:n[t];null!=o&&bs(function(){var n,t=x.m.mul(r).add(o);n=x.useNesterov?x.c.mul(o.add(t.mul(x.m))).add(i):x.c.mul(t).add(i),r.assign(t),i.assign(n)})}),this.incrementIterations()},x.prototype.dispose=function(){this.m.dispose(),null!=this.accumulations&&zs(this.accumulations.map(function(n){return n.variable}))},x.prototype.setMomentum=function(n){this.momentum=n},x.prototype.getWeights=function(){return Oi(this,void 0,void 0,function(){return _i(this,function(n){switch(n.label){case 0:return[4,this.saveIterations()];case 1:return[2,[n.sent()].concat(this.accumulations.map(function(n){return{name:n.originalName,tensor:n.variable}}))]}})})},x.prototype.setWeights=function(n){return Oi(this,void 0,void 0,function(){return _i(this,function(x){switch(x.label){case 0:return[4,this.extractIterations(n)];case 1:return n=x.sent(),this.accumulations=n.map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}}),[2]}})})},x.prototype.getConfig=function(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}},x.fromConfig=function(n,x){return new n(x.learningRate,x.momentum,x.useNesterov)},x.className="Momentum",x}(mm);sm(bm);var zm=function(n){function x(x,t,e,i,r){void 0===t&&(t=.9),void 0===e&&(e=0),void 0===i&&(i=null),void 0===r&&(r=!1);var o=n.call(this)||this;if(o.learningRate=x,o.decay=t,o.momentum=e,o.epsilon=i,o.accumulatedMeanSquares=[],o.accumulatedMoments=[],o.accumulatedMeanGrads=[],o.centered=r,null==i&&(o.epsilon=ao.backend.epsilon()),null==x)throw new Error("learningRate for RMSPropOptimizer must be defined.");return o}return Di(x,n),x.prototype.applyGradients=function(n){var x=this;(Array.isArray(n)?n.map(function(n){return n.name}):Object.keys(n)).forEach(function(t,e){var i=ao.registeredVariables[t];null==x.accumulatedMeanSquares[e]&&(x.accumulatedMeanSquares[e]={originalName:t+"/rms",variable:bs(function(){return eh(i).variable(!1)})}),null==x.accumulatedMoments[e]&&(x.accumulatedMoments[e]={originalName:t+"/momentum",variable:bs(function(){return eh(i).variable(!1)})}),null==x.accumulatedMeanGrads[e]&&x.centered&&(x.accumulatedMeanGrads[e]={originalName:t+"/mg",variable:bs(function(){return eh(i).variable(!1)})});var r=Array.isArray(n)?n[e].tensor:n[t];if(null!=r){var o=x.accumulatedMeanSquares[e].variable,s=x.accumulatedMoments[e].variable;bs(function(){var n=o.mul(x.decay).add(r.square().mul(1-x.decay));if(x.centered){var t=x.accumulatedMeanGrads[e].variable,h=t.mul(x.decay).add(r.mul(1-x.decay)),u=s.mul(x.momentum).add(r.mul(x.learningRate).div(n.sub(h.square().add(x.epsilon)).sqrt()));o.assign(n),t.assign(h),s.assign(u);var a=i.sub(u);i.assign(a)}else{var g=o.mul(x.decay).add(r.square().mul(1-x.decay));u=s.mul(x.momentum).add(r.mul(x.learningRate).div(g.add(x.epsilon).sqrt())),o.assign(g),s.assign(u),a=i.sub(u),i.assign(a)}})}}),this.incrementIterations()},x.prototype.dispose=function(){null!=this.accumulatedMeanSquares&&zs(this.accumulatedMeanSquares.map(function(n){return n.variable})),null!=this.accumulatedMeanGrads&&this.centered&&zs(this.accumulatedMeanGrads.map(function(n){return n.variable})),null!=this.accumulatedMoments&&zs(this.accumulatedMoments.map(function(n){return n.variable}))},x.prototype.getWeights=function(){return Oi(this,void 0,void 0,function(){var n;return _i(this,function(x){switch(x.label){case 0:return n=this.accumulatedMeanSquares.concat(this.accumulatedMoments),this.centered&&n.push.apply(n,this.accumulatedMeanGrads),[4,this.saveIterations()];case 1:return[2,[x.sent()].concat(n.map(function(n){return{name:n.originalName,tensor:n.variable}}))]}})})},x.prototype.setWeights=function(n){return Oi(this,void 0,void 0,function(){var x;return _i(this,function(t){switch(t.label){case 0:return[4,this.extractIterations(n)];case 1:return n=t.sent(),x=this.centered?n.length/3:n.length/2,this.accumulatedMeanSquares=n.slice(0,x).map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}}),this.accumulatedMoments=n.slice(x,2*x).map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}}),this.centered&&(this.accumulatedMeanGrads=n.slice(2*x,3*x).map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}})),[2]}})})},x.prototype.getConfig=function(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}},x.fromConfig=function(n,x){return new n(x.learningRate,x.decay,x.momentum,x.epsilon,x.centered)},x.className="RMSProp",x}(cm);sm(zm);var vm=function(){function n(){}return n.sgd=function(n){return new mm(n)},n.momentum=function(n,x,t){return void 0===t&&(t=!1),new bm(n,x,t)},n.rmsprop=function(n,x,t,e,i){return void 0===x&&(x=.9),void 0===t&&(t=0),void 0===e&&(e=null),void 0===i&&(i=!1),new zm(n,x,t,e,i)},n.adam=function(n,x,t,e){return void 0===n&&(n=.001),void 0===x&&(x=.9),void 0===t&&(t=.999),void 0===e&&(e=null),new pm(n,x,t,e)},n.adadelta=function(n,x,t){return void 0===n&&(n=.001),void 0===x&&(x=.95),void 0===t&&(t=null),new dm(n,x,t)},n.adamax=function(n,x,t,e,i){return void 0===n&&(n=.002),void 0===x&&(x=.9),void 0===t&&(t=.999),void 0===e&&(e=null),void 0===i&&(i=0),new ym(n,x,t,e,i)},n.adagrad=function(n,x){return void 0===x&&(x=.1),new fm(n,x)},n}();vm.sgd,vm.momentum,vm.adadelta,vm.adagrad,vm.rmsprop,vm.adamax,vm.adam,"undefined"!=typeof requestAnimationFrame?requestAnimationFrame:"undefined"!=typeof setImmediate&&setImmediate;function jm(n,x,t){if(void 0===t&&(t=!1),n.beginPath(),x.slice(1).forEach(function(t,e){var i=t.x,r=t.y,o=x[e];n.moveTo(o.x,o.y),n.lineTo(i,r)}),t){var e=x[x.length-1],i=x[0];if(!e||!i)return;n.moveTo(e.x,e.y),n.lineTo(i.x,i.y)}n.stroke()}Kr.prototype.squaredDifference=function(n){return xc(this,n)},Qr=Up;
55
+ function Et(n){var x=Number(n.version.split(".")[0]);if(x>=2)n.mixin({beforeCreate:e});else{var t=n.prototype._init;n.prototype._init=function(n){void 0===n&&(n={}),n.init=n.init?[e].concat(n.init):e,t.call(this,n)}}function e(){var n=this.$options;n.store?this.$store="function"===typeof n.store?n.store():n.store:n.parent&&n.parent.$store&&(this.$store=n.parent.$store)}}var St="undefined"!==typeof window&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function It(n){St&&(n._devtoolHook=St,St.emit("vuex:init",n),St.on("vuex:travel-to-state",function(x){n.replaceState(x)}),n.subscribe(function(n,x){St.emit("vuex:mutation",n,x)}))}function Dt(n,x){Object.keys(n).forEach(function(t){return x(n[t],t)})}function Ot(n){return null!==n&&"object"===typeof n}function _t(n){return n&&"function"===typeof n.then}var Tt=function(n,x){this.runtime=x,this._children=Object.create(null),this._rawModule=n;var t=n.state;this.state=("function"===typeof t?t():t)||{}},Rt={namespaced:{configurable:!0}};Rt.namespaced.get=function(){return!!this._rawModule.namespaced},Tt.prototype.addChild=function(n,x){this._children[n]=x},Tt.prototype.removeChild=function(n){delete this._children[n]},Tt.prototype.getChild=function(n){return this._children[n]},Tt.prototype.update=function(n){this._rawModule.namespaced=n.namespaced,n.actions&&(this._rawModule.actions=n.actions),n.mutations&&(this._rawModule.mutations=n.mutations),n.getters&&(this._rawModule.getters=n.getters)},Tt.prototype.forEachChild=function(n){Dt(this._children,n)},Tt.prototype.forEachGetter=function(n){this._rawModule.getters&&Dt(this._rawModule.getters,n)},Tt.prototype.forEachAction=function(n){this._rawModule.actions&&Dt(this._rawModule.actions,n)},Tt.prototype.forEachMutation=function(n){this._rawModule.mutations&&Dt(this._rawModule.mutations,n)},Object.defineProperties(Tt.prototype,Rt);var Bt=function(n){this.register([],n,!1)};function Mt(n,x,t){if(x.update(t),t.modules)for(var e in t.modules){if(!x.getChild(e))return void 0;Mt(n.concat(e),x.getChild(e),t.modules[e])}}Bt.prototype.get=function(n){return n.reduce(function(n,x){return n.getChild(x)},this.root)},Bt.prototype.getNamespace=function(n){var x=this.root;return n.reduce(function(n,t){return x=x.getChild(t),n+(x.namespaced?t+"/":"")},"")},Bt.prototype.update=function(n){Mt([],this.root,n)},Bt.prototype.register=function(n,x,t){var e=this;void 0===t&&(t=!0);var i=new Tt(x,t);if(0===n.length)this.root=i;else{var r=this.get(n.slice(0,-1));r.addChild(n[n.length-1],i)}x.modules&&Dt(x.modules,function(x,i){e.register(n.concat(i),x,t)})},Bt.prototype.unregister=function(n){var x=this.get(n.slice(0,-1)),t=n[n.length-1];x.getChild(t).runtime&&x.removeChild(t)};var Nt;var Ft=function(n){var x=this;void 0===n&&(n={}),!Nt&&"undefined"!==typeof window&&window.Vue&&$t(window.Vue);var t=n.plugins;void 0===t&&(t=[]);var e=n.strict;void 0===e&&(e=!1),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new Bt(n),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new Nt;var i=this,r=this,o=r.dispatch,s=r.commit;this.dispatch=function(n,x){return o.call(i,n,x)},this.commit=function(n,x,t){return s.call(i,n,x,t)},this.strict=e;var h=this._modules.root.state;Vt(this,h,[],this._modules.root),Ut(this,h),t.forEach(function(n){return n(x)});var u=void 0!==n.devtools?n.devtools:Nt.config.devtools;u&&It(this)},Pt={state:{configurable:!0}};function Lt(n,x){return x.indexOf(n)<0&&x.push(n),function(){var t=x.indexOf(n);t>-1&&x.splice(t,1)}}function Ht(n,x){n._actions=Object.create(null),n._mutations=Object.create(null),n._wrappedGetters=Object.create(null),n._modulesNamespaceMap=Object.create(null);var t=n.state;Vt(n,t,[],n._modules.root,!0),Ut(n,t,x)}function Ut(n,x,t){var e=n._vm;n.getters={};var i=n._wrappedGetters,r={};Dt(i,function(x,t){r[t]=function(){return x(n)},Object.defineProperty(n.getters,t,{get:function(){return n._vm[t]},enumerable:!0})});var o=Nt.config.silent;Nt.config.silent=!0,n._vm=new Nt({data:{$$state:x},computed:r}),Nt.config.silent=o,n.strict&&Jt(n),e&&(t&&n._withCommit(function(){e._data.$$state=null}),Nt.nextTick(function(){return e.$destroy()}))}function Vt(n,x,t,e,i){var r=!t.length,o=n._modules.getNamespace(t);if(e.namespaced&&(n._modulesNamespaceMap[o]=e),!r&&!i){var s=Xt(x,t.slice(0,-1)),h=t[t.length-1];n._withCommit(function(){Nt.set(s,h,e.state)})}var u=e.context=Wt(n,o,t);e.forEachMutation(function(x,t){var e=o+t;Gt(n,e,x,u)}),e.forEachAction(function(x,t){var e=x.root?t:o+t,i=x.handler||x;Kt(n,e,i,u)}),e.forEachGetter(function(x,t){var e=o+t;Yt(n,e,x,u)}),e.forEachChild(function(e,r){Vt(n,x,t.concat(r),e,i)})}function Wt(n,x,t){var e=""===x,i={dispatch:e?n.dispatch:function(t,e,i){var r=Zt(t,e,i),o=r.payload,s=r.options,h=r.type;return s&&s.root||(h=x+h),n.dispatch(h,o)},commit:e?n.commit:function(t,e,i){var r=Zt(t,e,i),o=r.payload,s=r.options,h=r.type;s&&s.root||(h=x+h),n.commit(h,o,s)}};return Object.defineProperties(i,{getters:{get:e?function(){return n.getters}:function(){return Qt(n,x)}},state:{get:function(){return Xt(n.state,t)}}}),i}function Qt(n,x){var t={},e=x.length;return Object.keys(n.getters).forEach(function(i){if(i.slice(0,e)===x){var r=i.slice(e);Object.defineProperty(t,r,{get:function(){return n.getters[i]},enumerable:!0})}}),t}function Gt(n,x,t,e){var i=n._mutations[x]||(n._mutations[x]=[]);i.push(function(x){t.call(n,e.state,x)})}function Kt(n,x,t,e){var i=n._actions[x]||(n._actions[x]=[]);i.push(function(x,i){var r=t.call(n,{dispatch:e.dispatch,commit:e.commit,getters:e.getters,state:e.state,rootGetters:n.getters,rootState:n.state},x,i);return _t(r)||(r=Promise.resolve(r)),n._devtoolHook?r.catch(function(x){throw n._devtoolHook.emit("vuex:error",x),x}):r})}function Yt(n,x,t,e){n._wrappedGetters[x]||(n._wrappedGetters[x]=function(n){return t(e.state,e.getters,n.state,n.getters)})}function Jt(n){n._vm.$watch(function(){return this._data.$$state},function(){0},{deep:!0,sync:!0})}function Xt(n,x){return x.length?x.reduce(function(n,x){return n[x]},n):n}function Zt(n,x,t){return Ot(n)&&n.type&&(t=x,x=n,n=n.type),{type:n,payload:x,options:t}}function $t(n){Nt&&n===Nt||(Nt=n,Et(Nt))}Pt.state.get=function(){return this._vm._data.$$state},Pt.state.set=function(n){0},Ft.prototype.commit=function(n,x,t){var e=this,i=Zt(n,x,t),r=i.type,o=i.payload,s=(i.options,{type:r,payload:o}),h=this._mutations[r];h&&(this._withCommit(function(){h.forEach(function(n){n(o)})}),this._subscribers.forEach(function(n){return n(s,e.state)}))},Ft.prototype.dispatch=function(n,x){var t=this,e=Zt(n,x),i=e.type,r=e.payload,o={type:i,payload:r},s=this._actions[i];if(s){try{this._actionSubscribers.filter(function(n){return n.before}).forEach(function(n){return n.before(o,t.state)})}catch(Di){0}var h=s.length>1?Promise.all(s.map(function(n){return n(r)})):s[0](r);return h.then(function(n){try{t._actionSubscribers.filter(function(n){return n.after}).forEach(function(n){return n.after(o,t.state)})}catch(Di){0}return n})}},Ft.prototype.subscribe=function(n){return Lt(n,this._subscribers)},Ft.prototype.subscribeAction=function(n){var x="function"===typeof n?{before:n}:n;return Lt(x,this._actionSubscribers)},Ft.prototype.watch=function(n,x,t){var e=this;return this._watcherVM.$watch(function(){return n(e.state,e.getters)},x,t)},Ft.prototype.replaceState=function(n){var x=this;this._withCommit(function(){x._vm._data.$$state=n})},Ft.prototype.registerModule=function(n,x,t){void 0===t&&(t={}),"string"===typeof n&&(n=[n]),this._modules.register(n,x),Vt(this,this.state,n,this._modules.get(n),t.preserveState),Ut(this,this.state)},Ft.prototype.unregisterModule=function(n){var x=this;"string"===typeof n&&(n=[n]),this._modules.unregister(n),this._withCommit(function(){var t=Xt(x.state,n.slice(0,-1));Nt.delete(t,n[n.length-1])}),Ht(this)},Ft.prototype.hotUpdate=function(n){this._modules.update(n),Ht(this,!0)},Ft.prototype._withCommit=function(n){var x=this._committing;this._committing=!0,n(),this._committing=x},Object.defineProperties(Ft.prototype,Pt);var ne=oe(function(n,x){var t={};return re(x).forEach(function(x){var e=x.key,i=x.val;t[e]=function(){var x=this.$store.state,t=this.$store.getters;if(n){var e=se(this.$store,"mapState",n);if(!e)return;x=e.context.state,t=e.context.getters}return"function"===typeof i?i.call(this,x,t):x[i]},t[e].vuex=!0}),t}),xe=oe(function(n,x){var t={};return re(x).forEach(function(x){var e=x.key,i=x.val;t[e]=function(){var x=[],t=arguments.length;while(t--)x[t]=arguments[t];var e=this.$store.commit;if(n){var r=se(this.$store,"mapMutations",n);if(!r)return;e=r.context.commit}return"function"===typeof i?i.apply(this,[e].concat(x)):e.apply(this.$store,[i].concat(x))}}),t}),te=oe(function(n,x){var t={};return re(x).forEach(function(x){var e=x.key,i=x.val;i=n+i,t[e]=function(){if(!n||se(this.$store,"mapGetters",n))return this.$store.getters[i]},t[e].vuex=!0}),t}),ee=oe(function(n,x){var t={};return re(x).forEach(function(x){var e=x.key,i=x.val;t[e]=function(){var x=[],t=arguments.length;while(t--)x[t]=arguments[t];var e=this.$store.dispatch;if(n){var r=se(this.$store,"mapActions",n);if(!r)return;e=r.context.dispatch}return"function"===typeof i?i.apply(this,[e].concat(x)):e.apply(this.$store,[i].concat(x))}}),t}),ie=function(n){return{mapState:ne.bind(null,n),mapGetters:te.bind(null,n),mapMutations:xe.bind(null,n),mapActions:ee.bind(null,n)}};function re(n){return Array.isArray(n)?n.map(function(n){return{key:n,val:n}}):Object.keys(n).map(function(x){return{key:x,val:n[x]}})}function oe(n){return function(x,t){return"string"!==typeof x?(t=x,x=""):"/"!==x.charAt(x.length-1)&&(x+="/"),n(x,t)}}function se(n,x,t){var e=n._modulesNamespaceMap[t];return e}var he={Store:Ft,install:$t,version:"3.1.0",mapState:ne,mapMutations:xe,mapGetters:te,mapActions:ee,createNamespacedHelpers:ie},ue=he;At().use(ue);var ae=new ue.Store({state:{baseUrl:"http://dftdm.netiler.com",authUrl:"http://10.1.24.63:8080",websocketUrl:"ws://127.0.0.1:38280",fingerprintDeviceSN:""},getters:{getFingerprintDeviceSN:n=>n.fingerprintDeviceSN,faceApiUrl:n=>n.faceApiUrl,authUrl:n=>n.authUrl},mutations:{SET_BASE_URL(n,x){n.baseUrl=x},SET_AUTH_URL(n,x){n.authUrl=x},SET_FACE_API_URL(n,x){n.faceApiUrl=x},SET_WEBSOCKET_URL(n,x){n.websocketUrl=x},SET_FINGERPRINT_DEVICE_SN(n,x){n.fingerprintDeviceSN=x}},actions:{updateFingerprintDeviceSN({commit:n},x){n("SET_FINGERPRINT_DEVICE_SN",x)},updateAuthUrl({commit:n},x){n("SET_AUTH_URL",x)},updateFaceApiUrl({commit:n},x){n("SET_FACE_API_URL",x)}},modules:{}});const ge=kt.create({timeout:5e4});ge.interceptors.request.use(n=>(n.baseURL=ae.state.baseUrl,n),n=>(console.log(n),Promise.reject(n))),ge.interceptors.response.use(n=>{const x=n.data;return x.code&&0!==x.code&&200!==x.code?((0,qt.Message)({message:x.message||"请求失败,请稍后再试",type:"error",duration:5e3}),Promise.reject(new Error(x.message||"Error"))):x},n=>(console.log("err"+n),(0,qt.Message)({message:n.message,type:"error",duration:5e3}),Promise.reject(n)));var le=ge;function ce(n){return le({url:"/api/fencing-component-api/organization/tree",method:"get",params:n})}function de(n){return le({url:"/api/fencing-component-api/organization/save",method:"post",data:n})}function fe(n){return le({url:"/api/fencing-component-api/organization/load",method:"get",params:n})}function pe(n){return le({url:`/api/fencing-component-api/user/page/${n.page}/${n.size}`,method:"get",params:n})}function ye(n){return le({url:`/api/fencing-component-api/user/delete?ids=${n.ids}`,method:"delete",params:n})}function me(n){return le({url:"/api/fencing-component-api/user/update-status",method:"post",data:n})}function be(n){return le({url:"/api/fencing-component-api/user/reset-password",method:"post",data:n})}function ze(n){return le({url:"/api/fencing-component-api/organization/delete",method:"delete",params:n})}function ve(n){return le({url:"/api/fencing-component-api/user/save",method:"post",data:n})}function je(n){return le({url:"/api/fencing-component-api/user/move",method:"post",data:n})}function we(n){return le({url:"/api/fencing-component-api/user/load",method:"get",params:n})}var ke=function(){var n=this,x=n._self._c;return x("el-dialog",{attrs:{visible:n.visible,title:n.edit&&n.edit.id?"修改机构":"新增机构",width:"540px","destroy-on-close":!0,"close-on-click-modal":!1,"before-close":n.h_close,"append-to-body":!0},on:{closed:n.closed}},[x("el-form",{ref:"form",attrs:{model:n.form,rules:n.rules,"label-width":"120px",size:"small"}},[x("el-form-item",{attrs:{label:"父级节点",prop:"parentId"}},[x("tree-select",{attrs:{value:n.form.parentId,defaultLabel:n.form.parentName,defaultProps:{label:"caption",value:"id",children:"children",isLeaf:n=>!1===n.hasChild},load:n.f_loadNode},on:{"update:value":function(x){return n.$set(n.form,"parentId",x)},setNode:n.h_setNode}})],1),x("el-form-item",{attrs:{label:"机构名称",prop:"name"}},[x("el-input",{attrs:{maxlength:"50","show-word-limit":""},model:{value:n.form.name,callback:function(x){n.$set(n.form,"name",x)},expression:"form.name"}})],1),x("el-form-item",{attrs:{label:"机构类型",prop:"type"}},[x("el-select",{staticStyle:{width:"100%"},attrs:{placeholder:"请选择机构类型"},model:{value:n.form.type,callback:function(x){n.$set(n.form,"type",x)},expression:"form.type"}},[x("el-option",{attrs:{label:"机关单位",value:0}}),x("el-option",{attrs:{label:"职能部门",value:1}})],1)],1),x("el-form-item",{attrs:{label:"排序",prop:"sequence"}},[x("el-input-number",{staticStyle:{width:"100%"},attrs:{min:1,max:9999999},model:{value:n.form.sequence,callback:function(x){n.$set(n.form,"sequence",x)},expression:"form.sequence"}})],1)],1),x("div",{staticClass:"dialog-footer f_center",attrs:{slot:"footer"},slot:"footer"},[x("el-button",{attrs:{loading:n.loading},on:{click:n.h_close}},[n._v(" 取消 ")]),x("el-button",{attrs:{type:"primary",loading:n.loading},on:{click:n.h_submit}},[n._v(" 确定 ")])],1)],1)},qe=[],Ce=function(){var n=this,x=n._self._c;return x("div",{staticClass:"tree-select",on:{click:function(n){n.stopPropagation()}}},[x("el-input",{attrs:{placeholder:n.placeholder,clearable:""},nativeOn:{click:function(x){return n.toggleTree.apply(null,arguments)}},model:{value:n.selectedLabel,callback:function(x){n.selectedLabel=x},expression:"selectedLabel"}}),x("div",{directives:[{name:"show",rawName:"v-show",value:n.showTree,expression:"showTree"}],staticClass:"tree-container"},[x("el-scrollbar",{staticStyle:{"max-height":"300px"}},[x("el-tree",{ref:"tree",attrs:{lazy:!0,load:n.load,props:n.defaultProps,"node-key":"id"},on:{"node-click":n.handleNodeClick}})],1)],1)],1)},Ae=[],Ee={name:"tree-select",props:{value:[String,Number,Array],placeholder:{type:String,default:"请选择"},defaultLabel:{type:String,default:""},load:{type:Function,default:()=>{}},defaultProps:{type:Object,default:()=>({})}},data(){return{showTree:!1,selectedLabel:""}},watch:{value:{handler(n){n?this.updateLabel(n):this.selectedLabel="根目录"},immediate:!0}},mounted(){document.addEventListener("click",this.handleOutsideClick)},beforeDestroy(){document.removeEventListener("click",this.handleOutsideClick)},methods:{toggleTree(){this.showTree=!this.showTree,console.log("this.showTree",this.showTree)},handleNodeClick(n){this.$nextTick(()=>{this.$refs.tree.setChecked(n,!0,!1),this.handleSingleSelect(n),this.showTree=!1})},handleSingleSelect(n){const x=this.$refs.tree.getCheckedNodes(!1,!0);x.forEach(x=>{x.id!==n.id&&this.$refs.tree.setChecked(x,!1,!1)}),this.$emit("input",n.id),this.$emit("setNode",n),this.selectedLabel=n[this.defaultProps.label]},updateLabel(){this.selectedLabel=this.defaultLabel||"根目录"},handleOutsideClick(){this.showTree=!1}}},Se=Ee;function Ie(n,x,t,e,i,r,o,s){var h,u="function"===typeof n?n.options:n;if(x&&(u.render=x,u.staticRenderFns=t,u._compiled=!0),e&&(u.functional=!0),r&&(u._scopeId="data-v-"+r),o?(h=function(n){n=n||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,n||"undefined"===typeof __VUE_SSR_CONTEXT__||(n=__VUE_SSR_CONTEXT__),i&&i.call(this,n),n&&n._registeredComponents&&n._registeredComponents.add(o)},u._ssrRegister=h):i&&(h=s?function(){i.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:i),h)if(u.functional){u._injectStyles=h;var a=u.render;u.render=function(n,x){return h.call(x),a(n,x)}}else{var g=u.beforeCreate;u.beforeCreate=g?[].concat(g,h):[h]}return{exports:n,options:u}}var De=Ie(Se,Ce,Ae,!1,null,"109477bd",null),Oe=De.exports,_e={components:{TreeSelect:Oe},props:{edit:{type:Object,default:()=>{}},beforeCreate:{type:Function,default:()=>!0},parentInfo:{type:Object,default:()=>{}}},data(){return{visible:!1,form:{sequence:1,type:0},rules:{name:[{required:!0,message:"机构名称不能为空!"},{max:50,message:"机构名称不能超过50个字符!"}],type:[{required:!0,message:"机构类型不能为空!"}],sequence:[{required:!0,message:"排序不能为空!"}]},loading:!1}},mounted(){this.visible=!0,this.edit&&fe({id:this.edit.id}).then(n=>{this.form={...this.edit,name:this.edit.caption,type:n.data.type,sequence:n.data.sequence}}),this.parentInfo&&(this.$set(this.form,"parentId",this.parentInfo?.id),this.$set(this.form,"parentName",this.parentInfo?.caption))},methods:{async f_loadNode(n,x){if(0===n.level){const n=await ce();x(n.data||[])}else{const t=await ce({parentId:n.data.id});t.data.forEach(x=>{x.parentId=n.data.id,x.parentName=n.data.caption}),x(t.data||[])}},h_setNode(n){this.$set(this.form,"parentId",n?.id),this.$set(this.form,"parentName",n?.caption),this.$forceUpdate()},h_close(){this.visible=!1},closed(){this.$emit("closed")},h_submit(){this.$refs.form.validate(async n=>{if(n){this.loading=!0,this.form.id||this.$set(this.form,"sequence",1);const n=this.beforeCreate(this.form);if(!n)return void(this.loading=!1);try{if(await de({...this.form}),this.form.parentId){const n=await ce({parentId:this.form.parentId});n.data.forEach(n=>{n.parentId=this.form.parentId,n.parentName=this.form.parentName}),this.$emit("refresh","current",this.form.parentId,n.data)}else{const n=await ce();this.$emit("refresh","all",null,n.data)}this.h_close(),this.$message.success(this.form.id?"修改成功!":"新增成功!")}finally{this.loading=!1}}})}}},Te=_e,Re=Ie(Te,ke,qe,!1,null,"81fd4a44",null),Be=Re.exports,Me={name:"organ-tree",components:{EditUserDialog:Be},props:{beforeCreate:{type:Function,default:()=>!0}},data(){return{parentInfo:null,props:{label:"caption"},form:{sequence:1},rules:{name:[{required:!0,message:"机构名称不能为空"}]},edit:null,visible:!1}},methods:{async refreshTree(n,x,t){"current"===n?this.$refs.tree.updateKeyChildren(x,t):this.$refs.tree.store.setData(t||[])},async f_loadNode(n,x){if(0===n.level){const n=await ce();x(n.data||[])}else{const t=await ce({parentId:n.data.id});t.data.forEach(x=>{x.parentId=n.data.id,x.parentName=n.data.caption}),x(t.data||[])}},h_showOrgConfig(n){this.edit=n,this.edit&&(this.parentInfo=null),this.visible=!0},h_delOrg(n){this.$confirm("确认删除该项?","提示","warning").then(async x=>{x&&(await ze({ids:n.id}),this.$refs.tree.remove(n),this.$message.success("删除成功!"))}).catch(n=>{console.error("用户状态 err",n)})},h_nodeClick(n){this.parentInfo=n,this.$emit("load-user-data",n)}}},Ne=Me,Fe=Ie(Ne,s,h,!1,null,"401ccb31",null),Pe=Fe.exports,Le=function(){var n=this,x=n._self._c;return x("div",{directives:[{name:"loading",rawName:"v-loading",value:n.loading,expression:"loading"}],staticClass:"leadal-user-table"},[x("div",{staticClass:"user-opt f_between"},[x("div",[x("el-button",{staticStyle:{padding:"7px 20px","border-radius":"8px"},attrs:{disabled:!n.organId,type:"primary",icon:"el-icon-circle-plus-outline"},on:{click:n.h_addUser}},[n._v("新增")]),x("el-button",{staticStyle:{padding:"7px 20px","border-radius":"8px"},attrs:{disabled:!n.organId,type:"danger",plain:"",icon:"el-icon-delete"},on:{click:n.h_removeUser}},[n._v("删除")]),x("el-button",{staticStyle:{padding:"7px 20px","border-radius":"8px"},attrs:{disabled:!n.organId,type:"warning",plain:"",icon:"el-icon-refresh"},on:{click:n.h_changeOrg}},[n._v("调换")]),x("el-button",{staticStyle:{padding:"7px 20px","border-radius":"8px"},attrs:{disabled:!n.organId,plain:"",icon:"el-icon-circle-check"},on:{click:function(x){return n.h_statusChange(!0)}}},[n._v("启用")]),x("el-button",{staticStyle:{padding:"7px 20px","border-radius":"8px"},attrs:{disabled:!n.organId,plain:"",icon:"el-icon-circle-close"},on:{click:function(x){return n.h_statusChange(!1)}}},[n._v("禁用")]),x("el-button",{staticStyle:{padding:"7px 20px","border-radius":"8px"},attrs:{disabled:!n.organId,plain:"",icon:"el-icon-refresh"},on:{click:n.h_resetPwd}},[n._v("密码重置")])],1),x("el-input",{staticClass:"input-with-select",staticStyle:{width:"240px"},attrs:{size:"small",placeholder:"请输入用户名称"},nativeOn:{keyup:function(x){return!x.type.indexOf("key")&&n._k(x.keyCode,"enter",13,x.key,"Enter")?null:n.handleSearch.apply(null,arguments)}},model:{value:n.keyWord,callback:function(x){n.keyWord=x},expression:"keyWord"}},[x("el-button",{attrs:{slot:"append",icon:"el-icon-search"},on:{click:n.handleSearch},slot:"append"})],1)],1),x("div",{staticClass:"user-table-main"},[x("div",{staticClass:"user-table-content"},[x("el-table",{ref:"table",attrs:{data:n.table.data,size:"medium",stripe:"",height:"100%","header-cell-style":{background:"#f7f8fa"}},on:{"selection-change":n.h_selectionChange,"row-click":n.h_rowClick}},[x("el-table-column",{attrs:{type:"selection",width:"55"}}),x("el-table-column",{attrs:{label:"序号",type:"index",width:"50"}}),x("el-table-column",{attrs:{prop:"name",label:"用户名称"}}),x("el-table-column",{attrs:{prop:"spelling",label:"拼音"}}),x("el-table-column",{attrs:{prop:"secretLevelLabel",label:"密级"}}),x("el-table-column",{attrs:{prop:"enabled",label:"状态"},scopedSlots:n._u([{key:"default",fn:function({row:t}){return[x("span",[n._v(n._s(t.enabled&&t.accountEnabled?"启用":"禁用"))])]}}])}),x("el-table-column",{attrs:{label:"操作","header-align":"center",align:"center",width:"80"},scopedSlots:n._u([{key:"default",fn:function({row:t}){return[x("span",{staticClass:"row-opt",on:{click:function(x){return n.h_rowOpt(t)}}},[n._v("编辑")])]}}])})],1)],1),x("div",{staticClass:"user-table-pagination f_end"},[x("el-pagination",{staticClass:"pagination",attrs:{layout:"total, sizes, prev, pager, next, jumper","current-page":n.table.pagination.current,"page-size":n.table.pagination.size,total:n.table.pagination.total},on:{"size-change":n.h_sizeChange,"current-change":n.h_currentChange}})],1)]),n.visible?x("el-dialog",{attrs:{visible:n.visible,title:"调换机构",width:"540px","destroy-on-close":!0,"close-on-click-modal":!1,"before-close":n.h_close,"append-to-body":!0}},[x("el-form",{ref:"form",attrs:{model:n.form,rules:n.rules,"label-width":"120px",size:"small"}},[x("el-form-item",{attrs:{label:"所属机构",prop:"id"}},[x("tree-select",{attrs:{value:n.form.id,defaultLabel:n.form.caption,defaultProps:{label:"caption",value:"id",children:"children",isLeaf:n=>!1===n.hasChild},load:n.f_loadNode},on:{"update:value":function(x){return n.$set(n.form,"id",x)},setNode:n.h_setNode}})],1)],1),x("div",{staticClass:"dialog-footer f_center",attrs:{slot:"footer"},slot:"footer"},[x("el-button",{attrs:{size:"mini"},on:{click:n.h_close}},[n._v(" 取消 ")]),x("el-button",{attrs:{type:"primary",size:"mini"},on:{click:n.h_submit}},[n._v(" 确定 ")])],1)],1):n._e()],1)},He=[];const Ue={0:"男",1:"女",2:"保密"},Ve=[{label:"公开",value:0},{label:"一般",value:1},{label:"重要",value:2},{label:"核心",value:3}],We={0:"公开",1:"一般",2:"重要",3:"核心"},Qe=(n,x=!0)=>{const t=[];for(const e in n)t.push({label:n[e],value:x?parseInt(e):e});return t};var Ge={name:"user-table",props:{organ:{type:Object,default:()=>{}}},components:{TreeSelect:Oe},data(){return{loading:!1,visible:!1,selection:[],form:{},rules:{id:[{required:!0,message:"所属机构不能为空!"}]},node:{},row:{},search:"",keyWord:"",table:{data:[],pagination:{current:1,size:10,total:0}}}},computed:{organId(){return!!this.organ?.id}},watch:{search(){this.f_loadData(!0)}},methods:{handleSearch(){this.search=this.keyWord},f_init(n){this.node=n,this.f_loadData()},async f_loadData(n=!1){this.loading=!0;try{n&&this.$set(this.table.pagination,"current",1);const x={keyword:this.search||void 0,organId:this.node.id,page:this.table.pagination.current,size:this.table.pagination.size},t=await pe(x);t.data.data.forEach(n=>{n.enabledLabel=n.enabled?"启用":"禁用",n.secretLevelLabel=We[n.secretLevel]}),this.$set(this.table,"data",t.data.data||[]),this.table.pagination.total=t.data.total,this.loading=!1}catch(x){this.loading=!1}},async f_loadNode(n,x){if(0===n.level){const n=await ce();x(n.data||[])}else{const t=await ce({parentId:n.data.id});t.data.forEach(x=>{x.parentId=n.data.id,x.parentName=n.data.caption}),x(t.data||[])}},h_addUser(){this.$emit("drawer")},h_selectionChange(n){this.selection=n},h_rowClick(n){this.$refs.table.toggleRowSelection(n)},h_rowOpt(n){this.$emit("drawer",n.id,n)},h_changeOrg(){if(this.form={...this.node},!this.selection?.length)return this.$message.warning("请至少选择一条操作项!");this.visible=!0},h_resetPwd(){if(!this.selection?.length)return this.$message.warning("请至少选择一条操作项!");this.$confirm("确认重置选中的用户密码?","提示","warning").then(async n=>{if(n){const n=this.selection.map(n=>n.id);await be({ids:n}),this.f_loadData(),this.$message.success("重置密码成功!")}}).catch(n=>{console.error("用户状态 err",n)})},async h_statusChange(n){if(!this.selection?.length)return this.$message.warning("请至少选择一条操作项!");this.$confirm("确认修改选中的用户状态?","提示","warning").then(async x=>{if(x){const x=this.selection.map(n=>n.id);await me({ids:x,status:n}),this.f_loadData(),this.$message.success((n?"启用":"禁用")+"成功!")}}).catch(n=>{console.error("用户状态 err",n)})},h_removeUser(){if(!this.selection?.length)return this.$message.warning("请至少选择一条操作项!");this.$confirm("确认删除选中的用户?","提示","warning").then(async n=>{if(n){const n=this.selection.map(n=>n.id);await ye({ids:n.join(",")}),this.f_loadData(!0),this.$message.success("删除成功!")}}).catch(n=>{console.error("删除用户 err",n)})},h_currentChange(n){this.table.pagination.current=n,this.f_loadData()},h_sizeChange(n){this.table.pagination.size=n,this.f_loadData()},async h_submit(){const n=this.selection.map(n=>n.id);try{await je({entityIds:n,targetId:this.form.id}),this.f_loadData(!0),this.h_close(),this.$message.success("调换机构成功!"),this.$emit("refreshTree")}catch(x){console.error("调换机构 err",x)}},h_setNode(n){this.$set(this.form,"id",n.id),this.$set(this.form,"caption",n.caption)},h_close(){this.visible=!1}}},Ke=Ge,Ye=Ie(Ke,Le,He,!1,null,"7a1a9302",null),Je=Ye.exports,Xe=function(){var n=this,x=n._self._c;return x("el-drawer",{style:n.drawerStyle,attrs:{size:"100%",visible:n.visible,"with-header":!1,modal:!1},on:{closed:n.closed}},[x("div",{staticClass:"user-drawer"},[x("div",{staticClass:"user-drawer-header f_between"},[x("div",{staticClass:"icon-back",on:{click:n.h_back}},[x("i",{staticClass:"el-icon-arrow-left",staticStyle:{"font-weight":"600"}}),x("span",[n._v("返回")])]),x("el-button",{staticStyle:{"margin-right":"12px","padding-left":"22px","padding-right":"22px"},attrs:{type:"primary",loading:n.loading},on:{click:n.f_save}},[n._v("保存")])],1),x("div",{staticClass:"user-drawer-content f_center"},[x("div",{staticClass:"user-auth"},[n.drawerInfo.userId?x("auth-com",{ref:"auth-com",attrs:{"auth-collect":n.authCollect,drawerInfo:n.drawerInfo},scopedSlots:n._u([{key:"face",fn:function(){return[n._t("face")]},proxy:!0},{key:"finger",fn:function(){return[n._t("finger")]},proxy:!0},{key:"idCard",fn:function(){return[n._t("idCard")]},proxy:!0}],null,!0)}):x("empty-view")],1),x("div",{staticClass:"user-info"},[x("user-info",{ref:"user-info",attrs:{"drawer-info":n.drawerInfo}})],1)])])])},Ze=[],$e=function(){var n=this,x=n._self._c;return x("div",{staticClass:"user-info-main"},[x("el-scrollbar",{staticStyle:{height:"100%"}},[x("el-form",{ref:"form",attrs:{model:n.form,rules:n.rules,"label-width":"100%","label-position":"left"}},[x("el-collapse",{staticStyle:{"margin-right":"16px"},model:{value:n.active,callback:function(x){n.active=x},expression:"active"}},[x("el-collapse-item",{attrs:{name:"base"}},[x("template",{slot:"title"},[x("span",{staticClass:"collapse-title"},[x("span",{staticClass:"title-bar"}),n._v("基础信息")])]),x("div",{staticClass:"form-item"},[x("el-form-item",{attrs:{label:"姓名",prop:"name"}},[x("el-input",{attrs:{placeholder:"请输入姓名",maxlength:"50","show-word-limit":""},on:{input:n.handleNameChange,blur:n.handleNameBlur},model:{value:n.form.name,callback:function(x){n.$set(n.form,"name",x)},expression:"form.name"}})],1),x("el-form-item",{attrs:{label:"拼音",prop:"spelling"}},[x("el-input",{attrs:{placeholder:"请输入拼音",maxlength:"50","show-word-limit":""},model:{value:n.form.spelling,callback:function(x){n.$set(n.form,"spelling",x)},expression:"form.spelling"}})],1),x("el-form-item",{attrs:{label:"所属单位",prop:"organName"}},[x("el-input",{attrs:{disabled:""},model:{value:n.form.organName,callback:function(x){n.$set(n.form,"organName",x)},expression:"form.organName"}})],1),x("el-form-item",{attrs:{label:"密级",prop:"secretLevel"}},[x("el-select",{staticStyle:{width:"100%"},attrs:{placeholder:"请选择密级"},model:{value:n.form.secretLevel,callback:function(x){n.$set(n.form,"secretLevel",x)},expression:"form.secretLevel"}},n._l(n.secretList,function(n){return x("el-option",{key:n.value,attrs:{label:n.label,value:n.value}})}),1)],1),x("el-form-item",{attrs:{placeholder:"请选择性别",label:"性别",prop:"gender"}},[x("el-select",{staticStyle:{width:"100%"},model:{value:n.form.gender,callback:function(x){n.$set(n.form,"gender",x)},expression:"form.gender"}},n._l(n.genderList,function(n){return x("el-option",{key:n.value,attrs:{label:n.label,value:n.value}})}),1)],1),x("el-form-item",{attrs:{label:"状态",prop:"enabled"}},[x("div",{staticClass:"form-status"},[x("el-radio-group",{attrs:{placeholder:"请选择状态"},model:{value:n.form.enabled,callback:function(x){n.$set(n.form,"enabled",x)},expression:"form.enabled"}},[x("el-radio",{attrs:{label:!0}},[n._v("启用")]),x("el-radio",{attrs:{label:!1}},[n._v("禁用")])],1)],1)])],1)],2),x("el-collapse-item",{attrs:{name:"account"}},[x("template",{slot:"title"},[x("span",{staticClass:"collapse-title"},[x("span",{staticClass:"title-bar"}),n._v("账号信息")])]),x("div",{staticClass:"form-item"},[x("el-form-item",{attrs:{label:"中文账号",prop:"cnAccount"}},[x("el-input",{attrs:{placeholder:"请输入中文账号",maxlength:"50","show-word-limit":""},model:{value:n.form.cnAccount,callback:function(x){n.$set(n.form,"cnAccount",x)},expression:"form.cnAccount"}})],1),x("el-form-item",{attrs:{label:"英文账号",prop:"enAccount"}},[x("el-input",{attrs:{placeholder:"请输入英文账号",maxlength:"50","show-word-limit":""},model:{value:n.form.enAccount,callback:function(x){n.$set(n.form,"enAccount",x)},expression:"form.enAccount"}})],1),x("el-form-item",{attrs:{label:"状态",prop:"accountEnabled"}},[x("div",{staticClass:"form-status"},[x("el-radio-group",{attrs:{placeholder:"请选择状态"},model:{value:n.form.accountEnabled,callback:function(x){n.$set(n.form,"accountEnabled",x)},expression:"form.accountEnabled"}},[x("el-radio",{attrs:{label:!0}},[n._v("启用")]),x("el-radio",{attrs:{label:!1}},[n._v("禁用")])],1)],1)]),x("el-form-item",{attrs:{label:"邮箱",prop:"email"}},[x("el-input",{attrs:{placeholder:"请输入邮箱",maxlength:"50","show-word-limit":""},model:{value:n.form.email,callback:function(x){n.$set(n.form,"email",x)},expression:"form.email"}})],1)],1)],2)],1)],1)],1)],1)},ni=[],xi=e(1850),ti=e.n(xi),ei={name:"user-info",props:{drawerInfo:{type:Object,default:()=>{}}},data(){return{secretList:Ve,active:["base","account"],lastAutoSpelling:"",form:{enabled:!0,spelling:"",name:"",cnAccount:"",enAccount:"",email:"",accountEnabled:!0},rules:{enabled:[{required:!0,message:"状态不能为空",trigger:"blur"}],name:[{required:!0,message:"姓名不能为空!",trigger:"blur"},{max:50,message:"姓名不能超过50个字符!",trigger:"blur"}],spelling:[{required:!0,message:"拼音不能为空!",trigger:["blur","change"]},{max:50,message:"拼音不能超过50个字符!",trigger:["blur","change"]}],organName:[{required:!0,message:"所属单位不能为空!",trigger:["change"]}],secretLevel:[{required:!0,message:"密级不能为空!",trigger:["change"]}],gender:[{required:!0,message:"性别不能为空!",trigger:["change"]}],cnAccount:[{required:!0,message:"中文账号不能为空!",trigger:["blur","change"]},{max:50,message:"中文账号不能超过50个字符!",trigger:["blur","change"]}],enAccount:[{required:!0,message:"英文账号不能为空!",trigger:["blur","change"]},{max:50,message:"英文账号不能超过50个字符!",trigger:["blur","change"]}],accountEnabled:[{required:!0,message:"状态不能为空!",trigger:"blur"}],email:[{max:50,message:"邮箱不能超过50个字符!",trigger:["blur","change"]}]}}},computed:{genderList(){return Qe(Ue)}},mounted(){this.f_init()},methods:{async f_init(){if(console.log("drawerInfo1241241",this.drawerInfo),this.drawerInfo?.userId){const n=await we({id:this.drawerInfo?.userId});this.form={...n.data,organName:n.data.organNamePath}}else this.$set(this.form,"organId",this.drawerInfo.organ.id),this.$set(this.form,"organName",this.drawerInfo.organ.caption)},async f_loadNode(n,x){if(0===n.level){const n=await ce();x(n.data||[])}else{const t=await ce({parentId:n.data.id});t.data.forEach(x=>{x.parentId=n.data.id,x.parentName=n.data.caption}),x(t.data||[])}},h_validate(){return this.$refs.form.validate()},h_getFormData(){return this.form},handleNameChange(n){if(n){const x=ti()(n,{style:ti().STYLE_NORMAL,heteronym:!1,segment:!0}),t=x.flat().join("");this.form.spelling=t}else this.form.spelling=""},handleNameBlur(){this.form.cnAccount=this.form.name,this.form.enAccount=this.form.spelling}}},ii=ei,ri=Ie(ii,$e,ni,!1,null,"0a9b7088",null),oi=ri.exports,si=function(){var n=this,x=n._self._c;return n.modules.length?x("div",{staticClass:"auth-com"},[x("el-tabs",{staticStyle:{"margin-left":"12px"},model:{value:n.activeName,callback:function(x){n.activeName=x},expression:"activeName"}},n._l(n.modules,function(n){return x("el-tab-pane",{key:n.value,attrs:{label:n.label,name:n.value}})}),1),x("div",{staticClass:"tab-main"},[x("div",{directives:[{name:"show",rawName:"v-show",value:"face"===n.activeName,expression:"activeName === 'face'"}],staticClass:"tab-content"},[x("face-register",{attrs:{row:n.drawerInfo,options:n.options}})],1),x("div",{directives:[{name:"show",rawName:"v-show",value:"finger"===n.activeName,expression:"activeName === 'finger'"}],staticClass:"tab-content"},["finger"===n.activeName?x("finger-register",{attrs:{row:n.drawerInfo}}):n._e()],1),x("div",{directives:[{name:"show",rawName:"v-show",value:"idCard"===n.activeName,expression:"activeName === 'idCard'"}],staticClass:"tab-content"},[x("card-register",{attrs:{row:n.drawerInfo}})],1)])],1):x("div",{staticClass:"h100 flex-center align-center"},[x("el-result",{attrs:{icon:"info",title:"暂无认证模块",subTitle:"如若需要请联系管理人员开通"}})],1)},hi=[],ui=(e(116),function(){var n=this,x=n._self._c;return x("div",{staticClass:"flex-start"},["face-info"===n.chooseType?x("FacePicture",{staticClass:"mr-12",attrs:{row:n.row},on:{"clear-face":n.handleClearFace}}):n._e(),n.uploading||""!==n.chooseType?n._e():x("ChooseCameraOrPicture",{attrs:{options:n.options},on:{choose:n.handleChoose}}),"picture"===n.chooseType?x("UploadPicture",{attrs:{row:n.row},on:{back:n.handleBack,"upload-success":n.handleUploadSuccess}}):n._e(),"camera"!==n.chooseType||n.uploading?n._e():x("FaceDetected",{on:{back:n.handleBack,"detection-complete":n.handleDetectionComplete}}),n.uploading?x("div",{staticClass:"uploading-container"},[n._m(0)]):n._e()],1)}),ai=[function(){var n=this,x=n._self._c;return x("div",{staticClass:"uploading-content"},[x("i",{staticClass:"el-icon-loading",staticStyle:{"font-size":"48px",color:"#409eff"}}),x("div",{staticClass:"uploading-text"},[n._v("正在上传人脸信息...")])])}];const gi=kt.create({timeout:5e4});gi.interceptors.request.use(n=>(n.baseURL=ae.state.authUrl,n),n=>(console.log(n),Promise.reject(n))),gi.interceptors.response.use(n=>{const x=n.data;return x.code&&0!==x.code&&200!==x.code?((0,qt.Message)({message:x.message||"请求失败,请稍后再试",type:"error",duration:5e3}),Promise.reject(new Error(x.message||"Error"))):x},n=>(console.log("err"+n),(0,qt.Message)({message:n.message,type:"error",duration:5e3}),Promise.reject(n)));var li=gi;const ci=n=>li({url:"/face/add",method:"post",data:n}),di=n=>li({url:"/face/exist",method:"get",params:n}),fi=n=>li({url:"/face/delete",method:"post",params:n});var pi=function(){var n=this,x=n._self._c;return x("div",{staticClass:"choose-camera-or-picture flex-center align-center"},[x("div",[n.showCamera?x("div",{staticClass:"flex-start align-center",staticStyle:{cursor:"pointer"},style:{marginBottom:n.showPicture?"32px":"0"},on:{click:n.handleCamera}},[x("img",{attrs:{src:n.iconCamera,height:"40px"}}),x("div",{staticClass:"choose-camera-or-picture-title ml-12"},[n._v("从摄像头采集")])]):n._e(),n.showPicture?x("div",{staticClass:"flex-start align-center",staticStyle:{cursor:"pointer"},on:{click:n.handlePicture}},[x("img",{attrs:{src:n.iconPicture,height:"40px"}}),x("div",{staticClass:"choose-camera-or-picture-title ml-12"},[n._v("本地照片上传")])]):n._e()])])},yi=[],mi={name:"ChooseCameraOrPicture",props:{options:Array},data(){return{isCamera:!1}},computed:{iconCamera(){return e(74)},iconPicture(){return e(2033)},showCamera(){return!!this.options&&this.options.find(n=>"camera"===n.value)},showPicture(){return!!this.options&&this.options.find(n=>"picture"===n.value)}},methods:{handleCamera(){this.$emit("choose","camera")},handlePicture(){this.$emit("choose","picture")}}},bi=mi,zi=Ie(bi,pi,yi,!1,null,"16e58cc6",null),vi=zi.exports,ji=function(){var n=this,x=n._self._c;return x("div",{staticClass:"upload-picture"},[n.uploadedImages.length<n.maxImages?x("el-upload",{staticClass:"avatar-uploader",attrs:{action:"","auto-upload":!1,"show-file-list":!1,"on-change":n.handleFileSelect,"before-upload":n.beforeAvatarUpload,multiple:!1,disabled:n.uploading}},[x("div",{staticClass:"upload-area flex-center align-center",class:{uploading:n.uploading}},[x("div",{staticClass:"upload-content"},[n.uploading?x("i",{staticClass:"el-icon-loading",staticStyle:{"font-size":"52px",color:"#409eff"}}):x("i",{staticClass:"el-icon-plus",staticStyle:{"font-size":"52px",color:"#bfbfbf"}}),n.uploading?x("div",{staticClass:"upload-text"},[n._v("正在上传中...")]):n._e()])])]):x("div",{staticClass:"max-limit-tip flex-center align-center"},[x("div",{staticClass:"tip-content"},[x("i",{staticClass:"el-icon-warning",staticStyle:{"font-size":"32px",color:"#f56c6c"}}),x("div",{staticClass:"tip-text"},[n._v("最多只能上传 "+n._s(n.maxImages)+" 张图片")])])]),x("div",{staticClass:"flex-center mt-12",staticStyle:{width:"240px"}},[x("el-button",{on:{click:n.h_back}},[n._v("返回")])],1)],1)},wi=[],ki={name:"UploadPicture",emits:["images-change","upload-success","upload-error"],props:{row:Object},data(){return{uploadedImages:[],maxImages:3,uploading:!1}},methods:{h_back(){this.$emit("back")},async handleFileSelect(n){if(!n.raw)return;if(!this.validateFile(n.raw))return;const x=URL.createObjectURL(n.raw);try{await this.uploadImageToServer(n.raw),this.uploadedImages.push({url:x,file:n.raw,name:n.name,size:n.size}),this.$emit("images-change",this.uploadedImages),this.$emit("upload-success",n.raw),this.$message.success("图片上传成功!")}catch(t){console.error("图片上传失败:",t),URL.revokeObjectURL(x),this.$emit("upload-error",t)}},validateFile(n){if(this.uploading)return this.$message.warning("正在上传中,请稍候..."),!1;const x="image/jpeg"===n.type||"image/jpg"===n.type||"image/png"===n.type,t=n.size/1024/1024<2,e=this.uploadedImages.length<this.maxImages;return this.row?.userId&&this.row?.row?.name?x?t?!!e||(this.$message.error(`最多只能上传 ${this.maxImages} 张图片!`),!1):(this.$message.error("上传图片大小不能超过 2MB!"),!1):(this.$message.error("上传图片只能是 JPG 或 PNG 格式!"),!1):(this.$message.error("用户信息不完整,无法上传图片!"),!1)},async uploadImageToServer(n){this.uploading=!0;try{const x=new FormData;x.append("file",n),x.append("userId",this.row?.userId),x.append("userName",this.row?.row?.name);const t=await ci(x);return t}catch(x){throw console.error("服务器上传失败:",x),x}finally{this.uploading=!1}},beforeAvatarUpload(){return!1},removeImage(n){URL.revokeObjectURL(this.uploadedImages[n].url),this.uploadedImages.splice(n,1),this.$emit("images-change",this.uploadedImages),this.$message.success("图片删除成功!")},getUploadedImages(){return this.uploadedImages},clearAllImages(){this.uploadedImages.forEach(n=>{URL.revokeObjectURL(n.url)}),this.uploadedImages=[],this.$emit("images-change",this.uploadedImages)}},beforeUnmount(){this.uploadedImages.forEach(n=>{URL.revokeObjectURL(n.url)})}},qi=ki,Ci=Ie(qi,ji,wi,!1,null,"6b7aeebc",null),Ai=Ci.exports,Ei=function(){var n=this,x=n._self._c;return x("div",{staticClass:"face-detection"},[x("div",{staticStyle:{"margin-bottom":"32px","margin-top":"12px","text-align":"center"}},[n._v(" 人脸识别中,请进入识别范围内 ")]),x("div",{staticClass:"face-detection-container flex-center align-center"},[x("div",{staticClass:"camera-container",class:{detecting:n.isDetecting}},[x("video",{ref:"video",staticStyle:{"border-radius":"50%","object-fit":"cover"},attrs:{width:n.videoWidth,height:n.videoHeight,autoplay:"",muted:"",playsinline:""},domProps:{muted:!0},on:{loadedmetadata:n.onVideoLoaded}}),x("canvas",{ref:"overlay",staticClass:"overlay-canvas",attrs:{width:n.videoWidth,height:n.videoHeight}}),n.capturedImages.length>0?x("div",{staticClass:"results"},[x("div",{staticClass:"captured-image-container"},[x("img",{staticClass:"captured-face-image",attrs:{src:n.capturedImages[0].dataUrl,width:n.videoWidth,height:n.videoHeight,alt:"检测到的人脸"}})])]):n._e()])]),x("div",{staticClass:"flex-center mt-12 w100"},[x("el-button",{on:{click:n.h_back}},[n._v("返回")])],1)])},Si=[],Ii=(e(1148),e(7642),e(8004),e(3853),e(5876),e(2475),e(5024),e(1698),function(n,x){return(Ii=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,x){n.__proto__=x}||function(n,x){for(var t in x)x.hasOwnProperty(t)&&(n[t]=x[t])})(n,x)});function Di(n,x){function t(){this.constructor=n}Ii(n,x),n.prototype=null===x?Object.create(x):(t.prototype=x.prototype,new t)}function Oi(n,x,t,e){return new(t||(t=Promise))(function(i,r){function o(n){try{h(e.next(n))}catch(n){r(n)}}function s(n){try{h(e.throw(n))}catch(n){r(n)}}function h(n){n.done?i(n.value):new t(function(x){x(n.value)}).then(o,s)}h((e=e.apply(n,x||[])).next())})}function _i(n,x){var t,e,i,r,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return r={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(r[Symbol.iterator]=function(){return this}),r;function s(r){return function(s){return function(r){if(t)throw new TypeError("Generator is already executing.");for(;o;)try{if(t=1,e&&(i=2&r[0]?e.return:r[0]?e.throw||((i=e.return)&&i.call(e),0):e.next)&&!(i=i.call(e,r[1])).done)return i;switch(e=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return o.label++,{value:r[1],done:!1};case 5:o.label++,e=r[1],r=[0];continue;case 7:r=o.ops.pop(),o.trys.pop();continue;default:if(!(i=(i=o.trys).length>0&&i[i.length-1])&&(6===r[0]||2===r[0])){o=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){o.label=r[1];break}if(6===r[0]&&o.label<i[1]){o.label=i[1],i=r;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(r);break}i[2]&&o.ops.pop(),o.trys.pop();continue}r=x.call(n,o)}catch(n){r=[6,n],e=0}finally{t=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,s])}}}var Ti=function(){function n(n){this.global=n,this.flags={},this.flagRegistry={},this.urlFlags={},this.populateURLFlags()}return n.prototype.setPlatform=function(n,x){null!=this.platform&&console.warn("Platform "+this.platformName+" has already been set. Overwriting the platform with "+x+"."),this.platformName=n,this.platform=x},n.prototype.registerFlag=function(n,x,t){if(this.flagRegistry[n]={evaluationFn:x,setHook:t},null!=this.urlFlags[n]){var e=this.urlFlags[n];console.warn("Setting feature override from URL "+n+": "+e+"."),this.set(n,e)}},n.prototype.get=function(n){return n in this.flags||(this.flags[n]=this.evaluateFlag(n)),this.flags[n]},n.prototype.getNumber=function(n){return this.get(n)},n.prototype.getBool=function(n){return this.get(n)},n.prototype.getFlags=function(){return this.flags},Object.defineProperty(n.prototype,"features",{get:function(){return this.flags},enumerable:!0,configurable:!0}),n.prototype.set=function(n,x){if(null==this.flagRegistry[n])throw new Error("Cannot set flag "+n+" as it has not been registered.");this.flags[n]=x,null!=this.flagRegistry[n].setHook&&this.flagRegistry[n].setHook(x)},n.prototype.evaluateFlag=function(n){if(null==this.flagRegistry[n])throw new Error("Cannot evaluate flag '"+n+"': no evaluation function found.");return this.flagRegistry[n].evaluationFn()},n.prototype.setFlags=function(n){this.flags=Object.assign({},n)},n.prototype.reset=function(){this.flags={},this.urlFlags={},this.populateURLFlags()},n.prototype.populateURLFlags=function(){var n=this;if(void 0!==this.global&&void 0!==this.global.location&&void 0!==this.global.location.search){var x,t,e=(x=this.global.location.search,t={},x.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,function(n){for(var x=[],e=1;e<arguments.length;e++)x[e-1]=arguments[e];return Ri(t,x[0],x[1]),x.join("=")}),t);"tfjsflags"in e&&e.tfjsflags.split(",").forEach(function(x){var t=x.split(":"),e=t[0],i=t[1];n.urlFlags[e]=function(n,x){if("true"===(x=x.toLowerCase())||"false"===x)return"true"===x;if(""+ +x===x)return+x;throw new Error("Could not parse value flag value "+x+" for flag "+n+".")}(e,i)})}},n}();function Ri(n,x,t){n[decodeURIComponent(x)]=decodeURIComponent(t||"")}function Bi(){return Mi}var Mi=null,Ni=new Map,Fi=new Map;function Pi(n,x){var t=Wi(n,x);return Ni.get(t)}function Li(n){return Fi.get(n)}function Hi(n){for(var x=Ni.entries(),t=[];;){var e=x.next(),i=e.done,r=e.value;if(i)break;var o=r[0],s=r[1];o.split("_")[0]===n&&t.push(s)}return t}function Ui(n){var x=n.kernelName,t=n.backendName,e=Wi(x,t);if(Ni.has(e))throw new Error("The kernel '"+x+"' for backend '"+t+"' is already registered");Ni.set(e,n)}function Vi(n){var x=n.kernelName;Fi.has(x)&&console.warn("Overriding the gradient for '"+x+"'"),Fi.set(x,n)}function Wi(n,x){return x+"_"+n}function Qi(n){for(var x=n.length,t=0,e=0;x>0;)e=Math.random()*x|0,t=n[--x],n[x]=n[e],n[e]=t}function Gi(n,x,t){return Math.max(n,Math.min(x,t))}function Ki(n){return n%2==0?n:n+1}function Yi(n){for(var x=0,t=0;t<n.length;t++)x+=n[t];return x}function Ji(n,x){if(!n)throw new Error("string"==typeof x?x:x())}function Xi(n,x,t){void 0===t&&(t=""),Ji(xr(n,x),function(){return t+" Shapes "+n+" and "+x+" must match"})}function Zi(n){Ji(null!=n,function(){return"The input to the tensor constructor must be a non-null value."})}function $i(n,x,t){if(void 0===x&&(x=[]),void 0===t&&(t=!1),null==x&&(x=[]),Array.isArray(n)||fr(n)&&!t)for(var e=0;e<n.length;++e)$i(n[e],x,t);else x.push(n);return x}function nr(n){if(0===n.length)return 1;for(var x=n[0],t=1;t<n.length;t++)x*=n[t];return x}function xr(n,x){if(n===x)return!0;if(null==n||null==x)return!1;if(n.length!==x.length)return!1;for(var t=0;t<n.length;t++)if(n[t]!==x[t])return!1;return!0}function tr(n){return n%1==0}function er(n){if(null!=Math.tanh)return Math.tanh(n);if(n===1/0)return 1;if(n===-1/0)return-1;var x=Math.exp(2*n);return(x-1)/(x+1)}function ir(n){var x=Math.ceil(Math.sqrt(n));return[x,Math.ceil(n/x)]}function rr(n,x){return x<=n.length?n:n+" ".repeat(x-n.length)}function or(n,x,t){return void 0===x&&(x=function(n){return 0}),new Promise(function(e,i){var r=0,o=function(){if(n())e();else{r++;var s=x(r);null!=t&&r>=t?i():setTimeout(o,s)}};o()})}function sr(n,x){for(var t=1,e=-1,i=0;i<n.length;++i)if(n[i]>=0)t*=n[i];else if(-1===n[i]){if(-1!==e)throw Error("Shapes can only have 1 implicit size. Found -1 at dim "+e+" and dim "+i);e=i}else if(n[i]<0)throw Error("Shapes can not be < 0. Found "+n[i]+" at dim "+i);if(-1===e){if(x>0&&x!==t)throw Error("Size("+x+") must match the product of shape "+n);return n}if(0===t)throw Error("Cannot infer the missing size in ["+n+"] when there are 0 elements");if(x%t!=0)throw Error("The implicit shape can't be a fractional number. Got "+x+" / "+t);var r=n.slice();return r[e]=x/t,r}function hr(n,x){var t=x.length;return Ji((n=null==n?x.map(function(n,x){return x}):[].concat(n)).every(function(n){return n>=-t&&n<t}),function(){return"All values in axis param must be in range [-"+t+", "+t+") but got axis "+n}),Ji(n.every(function(n){return tr(n)}),function(){return"All values in axis param must be integers but got axis "+n}),n.map(function(n){return n<0?t+n:n})}function ur(n,x){for(var t=[],e=[],i=null!=x&&Array.isArray(x)&&0===x.length,r=null==x||i?null:hr(x,n).sort(),o=0,s=0;s<n.length;++s){if(null!=r){if(r[o]===s&&1!==n[s])throw new Error("Can't squeeze axis "+s+" since its dim '"+n[s]+"' is not 1");(null==r[o]||r[o]>s)&&1===n[s]&&(t.push(n[s]),e.push(s)),r[o]<=s&&o++}1!==n[s]&&(t.push(n[s]),e.push(s))}return{newShape:t,keptDims:e}}function ar(n,x){var t=null;if(null==n||"float32"===n)t=new Float32Array(x);else if("int32"===n)t=new Int32Array(x);else{if("bool"!==n)throw new Error("Unknown data type "+n);t=new Uint8Array(x)}return t}function gr(n,x){var t=null;if(null==n||"float32"===n)t=new Float32Array(x);else if("int32"===n)t=new Int32Array(x);else if("bool"===n)t=new Uint8Array(x);else{if("string"!==n)throw new Error("Unknown data type "+n);t=new Array(x)}return t}function lr(n,x){for(var t=0;t<n.length;t++){var e=n[t];if(isNaN(e)||!isFinite(e))throw Error("A tensor of type "+x+" being uploaded contains "+e+".")}}function cr(n){return"bool"===n||"complex64"===n||"float32"===n||"int32"===n||"string"===n}function dr(n,x){return"complex64"!==x&&("float32"!==x||"complex64"===n)&&("int32"!==x||"float32"===n||"complex64"===n)&&("bool"!==x||"bool"!==n)}function fr(n){return n instanceof Float32Array||n instanceof Int32Array||n instanceof Uint8Array}function pr(n){if("float32"===n||"int32"===n)return 4;if("complex64"===n)return 8;if("bool"===n)return 1;throw new Error("Unknown dtype "+n)}function yr(n){if(null==n)return 0;var x=0;return n.forEach(function(n){return x+=n.length}),x}function mr(n){return"string"==typeof n||n instanceof String}function br(n){return"boolean"==typeof n}function zr(n){return"number"==typeof n}function vr(n){return Array.isArray(n)?vr(n[0]):n instanceof Float32Array?"float32":n instanceof Int32Array||n instanceof Uint8Array?"int32":zr(n)?"float32":mr(n)?"string":br(n)?"bool":"float32"}function jr(n){return!!(n&&n.constructor&&n.call&&n.apply)}function wr(n,x){for(var t=x;t<n;++t)if(n%t==0)return t;return n}function kr(n){var x=n.length;if(x<2)return[];var t=new Array(x-1);t[x-2]=n[x-1];for(var e=x-3;e>=0;--e)t[e]=t[e+1]*n[e+1];return t}function qr(n,x,t){if("string"===x)throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(n)&&(n=$i(n)),t&&lr(n,x),function(n,x){return n instanceof Float32Array&&"float32"===x||n instanceof Int32Array&&"int32"===x||n instanceof Uint8Array&&"bool"===x}(n,x))return n;if(null==x||"float32"===x||"complex64"===x)return new Float32Array(n);if("int32"===x)return new Int32Array(n);if("bool"===x){for(var e=new Uint8Array(n.length),i=0;i<e.length;++i)0!==Math.round(n[i])&&(e[i]=1);return e}throw new Error("Unknown data type "+x)}function Cr(n,x){if(0===n.length)return x[0];var t=n.reduce(function(n,x){return n*x});if(0===t)return[];if(t!==x.length)throw new Error("["+n+"] does not match the input size.");return function n(x,t,e){var i=new Array;if(1===t.length)for(var r=t[0],o=0;o<r;o++)i[o]=e[x+o];else{r=t[0];var s=t.slice(1),h=s.reduce(function(n,x){return n*x});for(o=0;o<r;o++)i[o]=n(x+o*h,s,e)}return i}(0,n,x)}function Ar(n,x){for(var t=Er(n,x),e=0;e<t.length;e++)t[e]=1;return t}function Er(n,x){if(null==x||"float32"===x||"complex64"===x)return new Float32Array(n);if("int32"===x)return new Int32Array(n);if("bool"===x)return new Uint8Array(n);throw new Error("Unknown data type "+x)}function Sr(){return Bi().platform.now()}function Ir(n){n.forEach(function(x){Ji(Number.isInteger(x)&&x>=0,function(){return"Tensor must have a shape comprised of positive integers but got shape ["+n+"]."})})}function Dr(n,x){return void 0===x&&(x="utf-8"),x=x||"utf-8",Bi().platform.encode(n,x)}function Or(n,x){return void 0===x&&(x="utf-8"),x=x||"utf-8",Bi().platform.decode(n,x)}function _r(n,x,t){if(0===x)return 0;if(1===x)return n[0];for(var e=n[n.length-1],i=0;i<n.length-1;++i)e+=t[i]*n[i];return e}function Tr(n,x,t){if(0===x)return[];if(1===x)return[n];for(var e=new Array(x),i=0;i<e.length-1;++i)e[i]=Math.floor(n/t[i]),n-=e[i]*t[i];return e[e.length-1]=n,e}Object.freeze({shuffle:Qi,clamp:Gi,nearestLargerEven:Ki,sum:Yi,randUniform:function(n,x){var t=Math.random();return x*t+(1-t)*n},distSquared:function(n,x){for(var t=0,e=0;e<n.length;e++){var i=Number(n[e])-Number(x[e]);t+=i*i}return t},assert:Ji,assertShapesMatch:Xi,assertNonNull:Zi,flatten:$i,sizeFromShape:nr,isScalarShape:function(n){return 0===n.length},arraysEqual:xr,isInt:tr,tanh:er,sizeToSquarishShape:ir,createShuffledIndices:function(n){for(var x=new Uint32Array(n),t=0;t<n;++t)x[t]=t;return Qi(x),x},rightPad:rr,repeatedTry:or,inferFromImplicitShape:sr,parseAxisParam:hr,squeezeShape:ur,getTypedArrayFromDType:ar,getArrayFromDType:gr,checkConversionForErrors:lr,isValidDtype:cr,hasEncodingLoss:dr,isTypedArray:fr,bytesPerElement:pr,bytesFromStringArray:yr,isString:mr,isBoolean:br,isNumber:zr,inferDtype:vr,isFunction:jr,nearestDivisor:wr,computeStrides:kr,toTypedArray:qr,toNestedArray:Cr,makeOnesTypedArray:Ar,makeZerosTypedArray:Er,now:Sr,assertNonNegativeIntegerDimensions:Ir,fetch:function(n,x){return Bi().platform.fetch(n,x)},encodeString:Dr,decodeString:Or,locToIndex:_r,indexToLoc:Tr});var Rr=function(){function n(n,x){this.backendTimer=n,this.logger=x,null==x&&(this.logger=new Br)}return n.prototype.profileKernel=function(n,x,t){var e,i=this,r=this.backendTimer.time(function(){e=t()});return e.forEach(function(t){t.data().then(function(e){!function(n,x,t){if("float32"!==x)return!1;for(var e=0;e<n.length;e++){var i=n[e];if(isNaN(i)||!isFinite(i))return console.warn("Found "+i+" in the result of '"+t+"'"),!0}}(e,t.dtype,n),r.then(function(r){var o="";null!=r.getExtraProfileInfo&&(o=r.getExtraProfileInfo()),i.logger.logKernelProfile(n,t,e,r.kernelMs,x,o)})})}),e},n}(),Br=function(){function n(){}return n.prototype.logKernelProfile=function(n,x,t,e,i,r){var o="number"==typeof e?rr(e+"ms",9):e.error,s=rr(n,25),h=x.rank,u=x.size,a=rr(x.shape.toString(),14),g="";for(var l in i){var c=i[l].shape||x.shape,d=c.length;g+=l+": "+d+"D "+(d>0?c:"")+" "}console.log("%c"+s+"\t%c"+o+"\t%c"+h+"D "+a+"\t%c"+u+"\t%c"+g+"\t%c"+r,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")},n}(),Mr=20,Nr=3,Fr=7;function Pr(n,x,t,e){var i=kr(x),r=function(n,x,t,e){var i=nr(x),r=e[e.length-1],o=new Array(r).fill(0),s=x.length,h="complex64"===t?Ur(n):n;if(s>1)for(var u=0;u<i/r;u++)for(var a=u*r,g=0;g<r;g++)o[g]=Math.max(o[g],Lr(h[a+g],0,t).length);return o}(n,x,t,i),o=x.length,s=function n(x,t,e,i,r,o){void 0===o&&(o=!0);var s="complex64"===e?2:1,h=t[0],u=t.length;if(0===u)return"complex64"===e?[Lr(Ur(x)[0],0,e)]:"bool"===e?[Hr(x[0])]:[x[0].toString()];if(1===u){if(h>Mr){var a=Nr*s,g=Array.from(x.slice(0,a)),l=Array.from(x.slice((h-Nr)*s,h*s));return"complex64"===e&&(g=Ur(g),l=Ur(l)),["["+g.map(function(n,x){return Lr(n,r[x],e)}).join(", ")+", ..., "+l.map(function(n,x){return Lr(n,r[h-Nr+x],e)}).join(", ")+"]"]}return["["+("complex64"===e?Ur(x):Array.from(x)).map(function(n,x){return Lr(n,r[x],e)}).join(", ")+"]"]}var c=t.slice(1),d=i.slice(1),f=i[0]*s,p=[];if(h>Mr){for(var y=0;y<Nr;y++){var m=(b=y*f)+f;p.push.apply(p,n(x.slice(b,m),c,e,d,r,!1))}for(p.push("..."),y=h-Nr;y<h;y++)m=(b=y*f)+f,p.push.apply(p,n(x.slice(b,m),c,e,d,r,y===h-1))}else for(y=0;y<h;y++){var b;m=(b=y*f)+f,p.push.apply(p,n(x.slice(b,m),c,e,d,r,y===h-1))}var z=2===u?",":"";for(p[0]="["+p[0]+z,y=1;y<p.length-1;y++)p[y]=" "+p[y]+z;var v=",\n";for(y=2;y<u;y++)v+="\n";return p[p.length-1]=" "+p[p.length-1]+"]"+(o?"":v),p}(n,x,t,i,r),h=["Tensor"];return e&&(h.push(" dtype: "+t),h.push(" rank: "+o),h.push(" shape: ["+x+"]"),h.push(" values:")),h.push(s.map(function(n){return" "+n}).join("\n")),h.join("\n")}function Lr(n,x,t){return rr(Array.isArray(n)?parseFloat(n[0].toFixed(Fr))+" + "+parseFloat(n[1].toFixed(Fr))+"j":mr(n)?"'"+n+"'":"bool"===t?Hr(n):parseFloat(n.toFixed(Fr)).toString(),x)}function Hr(n){return 0===n?"false":"true"}function Ur(n){for(var x=[],t=0;t<n.length;t+=2)x.push([n[t],n[t+1]]);return x}var Vr=function(){function n(n,x,t){var e=this;if(this.dtype=x,this.shape=n.slice(),this.size=nr(n),null!=t){var i=t.length;Ji(i===this.size,function(){return"Length of values '"+i+"' does not match the size inferred by the shape '"+e.size+"'."})}if("complex64"===x)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=t||gr(x,this.size),this.strides=kr(n)}return n.prototype.set=function(n){for(var x=this,t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];0===t.length&&(t=[0]),Ji(t.length===this.rank,function(){return"The number of provided coordinates ("+t.length+") must match the rank ("+x.rank+")"});var i=this.locToIndex(t);this.values[i]=n},n.prototype.get=function(){for(var n=[],x=0;x<arguments.length;x++)n[x]=arguments[x];0===n.length&&(n=[0]);for(var t=0,e=0,i=n;e<i.length;e++){var r=i[e];if(r<0||r>=this.shape[t]){var o="Requested out of range element at "+n+". Buffer shape="+this.shape;throw new Error(o)}t++}for(var s=n[n.length-1],h=0;h<n.length-1;++h)s+=this.strides[h]*n[h];return this.values[s]},n.prototype.locToIndex=function(n){if(0===this.rank)return 0;if(1===this.rank)return n[0];for(var x=n[n.length-1],t=0;t<n.length-1;++t)x+=this.strides[t]*n[t];return x},n.prototype.indexToLoc=function(n){if(0===this.rank)return[];if(1===this.rank)return[n];for(var x=new Array(this.shape.length),t=0;t<x.length-1;++t)x[t]=Math.floor(n/this.strides[t]),n-=x[t]*this.strides[t];return x[x.length-1]=n,x},Object.defineProperty(n.prototype,"rank",{get:function(){return this.shape.length},enumerable:!0,configurable:!0}),n.prototype.toTensor=function(){return Wr().makeTensor(this.values,this.shape,this.dtype)},n}(),Wr=null,Qr=null,Gr=null,Kr=function(){function n(n,x,t,e){this.kept=!1,this.isDisposedInternal=!1,this.shape=n.slice(),this.dtype=x||"float32",this.size=nr(n),this.strides=kr(n),this.dataId=t,this.id=e,this.rankType=this.rank<5?this.rank.toString():"higher"}return n.prototype.flatten=function(){return this.throwIfDisposed(),this.as1D()},n.prototype.asScalar=function(){return this.throwIfDisposed(),Ji(1===this.size,function(){return"The array must have only 1 element."}),this.reshape([])},n.prototype.as1D=function(){return this.throwIfDisposed(),this.reshape([this.size])},n.prototype.as2D=function(n,x){return this.throwIfDisposed(),this.reshape([n,x])},n.prototype.as3D=function(n,x,t){return this.throwIfDisposed(),this.reshape([n,x,t])},n.prototype.as4D=function(n,x,t,e){return this.throwIfDisposed(),this.reshape([n,x,t,e])},n.prototype.as5D=function(n,x,t,e,i){return this.throwIfDisposed(),this.reshape([n,x,t,e,i])},n.prototype.asType=function(n){return this.throwIfDisposed(),Qr.cast(this,n)},Object.defineProperty(n.prototype,"rank",{get:function(){return this.shape.length},enumerable:!0,configurable:!0}),n.prototype.buffer=function(){return Oi(this,void 0,void 0,function(){var n;return _i(this,function(x){switch(x.label){case 0:return[4,this.data()];case 1:return n=x.sent(),[2,Qr.buffer(this.shape,this.dtype,n)]}})})},n.prototype.bufferSync=function(){return Qr.buffer(this.shape,this.dtype,this.dataSync())},n.prototype.array=function(){return Oi(this,void 0,void 0,function(){var n;return _i(this,function(x){switch(x.label){case 0:return[4,this.data()];case 1:return n=x.sent(),[2,Cr(this.shape,n)]}})})},n.prototype.arraySync=function(){return Cr(this.shape,this.dataSync())},n.prototype.data=function(){return Oi(this,void 0,void 0,function(){var n,x;return _i(this,function(t){switch(t.label){case 0:return this.throwIfDisposed(),n=Wr().read(this.dataId),"string"!==this.dtype?[3,2]:[4,n];case 1:x=t.sent();try{return[2,x.map(function(n){return Or(n)})]}catch(n){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}case 2:return[2,n]}})})},n.prototype.dataSync=function(){this.throwIfDisposed();var n=Wr().readSync(this.dataId);if("string"===this.dtype)try{return n.map(function(n){return Or(n)})}catch(n){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return n},n.prototype.bytes=function(){return Oi(this,void 0,void 0,function(){var n;return _i(this,function(x){switch(x.label){case 0:return this.throwIfDisposed(),[4,Wr().read(this.dataId)];case 1:return n=x.sent(),"string"===this.dtype?[2,n]:[2,new Uint8Array(n.buffer)]}})})},n.prototype.dispose=function(){this.isDisposed||(Wr().disposeTensor(this),this.isDisposedInternal=!0)},Object.defineProperty(n.prototype,"isDisposed",{get:function(){return this.isDisposedInternal},enumerable:!0,configurable:!0}),n.prototype.throwIfDisposed=function(){if(this.isDisposed)throw new Error("Tensor is disposed.")},n.prototype.toFloat=function(){return this.asType("float32")},n.prototype.toInt=function(){return this.asType("int32")},n.prototype.toBool=function(){return this.asType("bool")},n.prototype.print=function(n){return void 0===n&&(n=!1),Qr.print(this,n)},n.prototype.reshape=function(n){return this.throwIfDisposed(),Qr.reshape(this,n)},n.prototype.reshapeAs=function(n){return this.throwIfDisposed(),this.reshape(n.shape)},n.prototype.expandDims=function(n){return void 0===n&&(n=0),Qr.expandDims(this,n)},n.prototype.cumsum=function(n,x,t){return void 0===n&&(n=0),void 0===x&&(x=!1),void 0===t&&(t=!1),Qr.cumsum(this,n,x,t)},n.prototype.squeeze=function(n){return this.throwIfDisposed(),Qr.squeeze(this,n)},n.prototype.clone=function(){return this.throwIfDisposed(),Qr.clone(this)},n.prototype.oneHot=function(n,x,t){return this.throwIfDisposed(),Qr.oneHot(this,n,x,t)},n.prototype.toString=function(n){return void 0===n&&(n=!1),Pr(this.dataSync(),this.shape,this.dtype,n)},n.prototype.tile=function(n){return this.throwIfDisposed(),Qr.tile(this,n)},n.prototype.gather=function(n,x){return void 0===x&&(x=0),this.throwIfDisposed(),Qr.gather(this,n,x)},n.prototype.matMul=function(n,x,t){return void 0===x&&(x=!1),void 0===t&&(t=!1),this.throwIfDisposed(),Qr.matMul(this,n,x,t)},n.prototype.dot=function(n){return this.throwIfDisposed(),Qr.dot(this,n)},n.prototype.norm=function(n,x,t){return void 0===n&&(n="euclidean"),void 0===x&&(x=null),void 0===t&&(t=!1),this.throwIfDisposed(),Qr.norm(this,n,x,t)},n.prototype.slice=function(n,x){return this.throwIfDisposed(),Qr.slice(this,n,x)},n.prototype.reverse=function(n){return this.throwIfDisposed(),Qr.reverse(this,n)},n.prototype.concat=function(x,t){return void 0===t&&(t=0),this.throwIfDisposed(),x instanceof n&&(x=[x]),Qr.concat([this].concat(x),t)},n.prototype.split=function(n,x){return void 0===x&&(x=0),this.throwIfDisposed(),Qr.split(this,n,x)},n.prototype.stack=function(n,x){return void 0===x&&(x=0),Qr.stack([this,n],x)},n.prototype.unstack=function(n){return void 0===n&&(n=0),Qr.unstack(this,n)},n.prototype.pad=function(n,x){return void 0===x&&(x=0),Qr.pad(this,n,x)},n.prototype.batchNormalization=function(n,x,t,e,i){return void 0===t&&(t=.001),Gr("tf.batchNormalization() is going away. Use tf.batchNorm() instead, and note the positional argument change of scale, offset, and varianceEpsilon"),this.batchNorm(n,x,i,e,t)},n.prototype.batchNorm=function(n,x,t,e,i){return void 0===i&&(i=.001),this.throwIfDisposed(),Qr.batchNorm(this,n,x,t,e,i)},n.prototype.all=function(n,x){return void 0===n&&(n=null),void 0===x&&(x=!1),this.throwIfDisposed(),Qr.all(this,n,x)},n.prototype.any=function(n,x){return void 0===n&&(n=null),void 0===x&&(x=!1),this.throwIfDisposed(),Qr.any(this,n,x)},n.prototype.logSumExp=function(n,x){return void 0===n&&(n=null),void 0===x&&(x=!1),this.throwIfDisposed(),Qr.logSumExp(this,n,x)},n.prototype.sum=function(n,x){return void 0===n&&(n=null),void 0===x&&(x=!1),this.throwIfDisposed(),Qr.sum(this,n,x)},n.prototype.prod=function(n,x){return void 0===n&&(n=null),void 0===x&&(x=!1),this.throwIfDisposed(),Qr.prod(this,n,x)},n.prototype.mean=function(n,x){return void 0===n&&(n=null),void 0===x&&(x=!1),this.throwIfDisposed(),Qr.mean(this,n,x)},n.prototype.min=function(n,x){return void 0===n&&(n=null),void 0===x&&(x=!1),this.throwIfDisposed(),Qr.min(this,n,x)},n.prototype.max=function(n,x){return void 0===n&&(n=null),void 0===x&&(x=!1),this.throwIfDisposed(),Qr.max(this,n,x)},n.prototype.argMin=function(n){return void 0===n&&(n=null),this.throwIfDisposed(),Qr.argMin(this,n)},n.prototype.argMax=function(n){return void 0===n&&(n=null),this.throwIfDisposed(),Qr.argMax(this,n)},n.prototype.cast=function(n){return this.throwIfDisposed(),Qr.cast(this,n)},n.prototype.add=function(n){return this.throwIfDisposed(),Qr.add(this,n)},n.prototype.addStrict=function(n){return this.throwIfDisposed(),Qr.addStrict(this,n)},n.prototype.atan2=function(n){return this.throwIfDisposed(),Qr.atan2(this,n)},n.prototype.sub=function(n){return this.throwIfDisposed(),Qr.sub(this,n)},n.prototype.subStrict=function(n){return this.throwIfDisposed(),Qr.subStrict(this,n)},n.prototype.pow=function(n){return this.throwIfDisposed(),Qr.pow(this,n)},n.prototype.powStrict=function(n){return this.throwIfDisposed(),Qr.powStrict(this,n)},n.prototype.mul=function(n){return this.throwIfDisposed(),Qr.mul(this,n)},n.prototype.mulStrict=function(n){return this.throwIfDisposed(),Qr.mulStrict(this,n)},n.prototype.div=function(n){return this.throwIfDisposed(),Qr.div(this,n)},n.prototype.divNoNan=function(n){return this.throwIfDisposed(),Qr.divNoNan(this,n)},n.prototype.floorDiv=function(n){return this.throwIfDisposed(),Qr.floorDiv(this,n)},n.prototype.divStrict=function(n){return this.throwIfDisposed(),Qr.divStrict(this,n)},n.prototype.minimum=function(n){return this.throwIfDisposed(),Qr.minimum(this,n)},n.prototype.minimumStrict=function(n){return this.throwIfDisposed(),Qr.minimumStrict(this,n)},n.prototype.maximum=function(n){return this.throwIfDisposed(),Qr.maximum(this,n)},n.prototype.maximumStrict=function(n){return this.throwIfDisposed(),Qr.maximumStrict(this,n)},n.prototype.mod=function(n){return this.throwIfDisposed(),Qr.mod(this,n)},n.prototype.modStrict=function(n){return this.throwIfDisposed(),Qr.modStrict(this,n)},n.prototype.squaredDifferenceStrict=function(n){return this.throwIfDisposed(),Qr.squaredDifferenceStrict(this,n)},n.prototype.transpose=function(n){return this.throwIfDisposed(),Qr.transpose(this,n)},n.prototype.notEqual=function(n){return this.throwIfDisposed(),Qr.notEqual(this,n)},n.prototype.notEqualStrict=function(n){return this.throwIfDisposed(),Qr.notEqualStrict(this,n)},n.prototype.less=function(n){return this.throwIfDisposed(),Qr.less(this,n)},n.prototype.lessStrict=function(n){return this.throwIfDisposed(),Qr.lessStrict(this,n)},n.prototype.equal=function(n){return this.throwIfDisposed(),Qr.equal(this,n)},n.prototype.equalStrict=function(n){return this.throwIfDisposed(),Qr.equalStrict(this,n)},n.prototype.lessEqual=function(n){return this.throwIfDisposed(),Qr.lessEqual(this,n)},n.prototype.lessEqualStrict=function(n){return this.throwIfDisposed(),Qr.lessEqualStrict(this,n)},n.prototype.greater=function(n){return this.throwIfDisposed(),Qr.greater(this,n)},n.prototype.greaterStrict=function(n){return this.throwIfDisposed(),Qr.greaterStrict(this,n)},n.prototype.greaterEqual=function(n){return this.throwIfDisposed(),Qr.greaterEqual(this,n)},n.prototype.greaterEqualStrict=function(n){return this.throwIfDisposed(),Qr.greaterEqualStrict(this,n)},n.prototype.logicalAnd=function(n){return this.throwIfDisposed(),Qr.logicalAnd(this,n)},n.prototype.logicalOr=function(n){return this.throwIfDisposed(),Qr.logicalOr(this,n)},n.prototype.logicalNot=function(){return this.throwIfDisposed(),Qr.logicalNot(this)},n.prototype.logicalXor=function(n){return this.throwIfDisposed(),Qr.logicalXor(this,n)},n.prototype.where=function(n,x){return this.throwIfDisposed(),Qr.where(n,this,x)},n.prototype.neg=function(){return this.throwIfDisposed(),Qr.neg(this)},n.prototype.ceil=function(){return this.throwIfDisposed(),Qr.ceil(this)},n.prototype.floor=function(){return this.throwIfDisposed(),Qr.floor(this)},n.prototype.sign=function(){return this.throwIfDisposed(),Qr.sign(this)},n.prototype.isNaN=function(){return this.throwIfDisposed(),Qr.isNaN(this)},n.prototype.isInf=function(){return this.throwIfDisposed(),Qr.isInf(this)},n.prototype.isFinite=function(){return this.throwIfDisposed(),Qr.isFinite(this)},n.prototype.exp=function(){return this.throwIfDisposed(),Qr.exp(this)},n.prototype.expm1=function(){return this.throwIfDisposed(),Qr.expm1(this)},n.prototype.log=function(){return this.throwIfDisposed(),Qr.log(this)},n.prototype.log1p=function(){return this.throwIfDisposed(),Qr.log1p(this)},n.prototype.sqrt=function(){return this.throwIfDisposed(),Qr.sqrt(this)},n.prototype.rsqrt=function(){return this.throwIfDisposed(),Qr.rsqrt(this)},n.prototype.square=function(){return this.throwIfDisposed(),Qr.square(this)},n.prototype.reciprocal=function(){return this.throwIfDisposed(),Qr.reciprocal(this)},n.prototype.abs=function(){return this.throwIfDisposed(),Qr.abs(this)},n.prototype.clipByValue=function(n,x){return this.throwIfDisposed(),Qr.clipByValue(this,n,x)},n.prototype.relu=function(){return this.throwIfDisposed(),Qr.relu(this)},n.prototype.relu6=function(){return this.throwIfDisposed(),Qr.relu6(this)},n.prototype.elu=function(){return this.throwIfDisposed(),Qr.elu(this)},n.prototype.selu=function(){return this.throwIfDisposed(),Qr.selu(this)},n.prototype.leakyRelu=function(n){return void 0===n&&(n=.2),this.throwIfDisposed(),Qr.leakyRelu(this,n)},n.prototype.prelu=function(n){return this.throwIfDisposed(),Qr.prelu(this,n)},n.prototype.sigmoid=function(){return this.throwIfDisposed(),Qr.sigmoid(this)},n.prototype.logSigmoid=function(){return this.throwIfDisposed(),Qr.logSigmoid(this)},n.prototype.softplus=function(){return this.throwIfDisposed(),Qr.softplus(this)},n.prototype.zerosLike=function(){return this.throwIfDisposed(),Qr.zerosLike(this)},n.prototype.onesLike=function(){return this.throwIfDisposed(),Qr.onesLike(this)},n.prototype.sin=function(){return this.throwIfDisposed(),Qr.sin(this)},n.prototype.cos=function(){return this.throwIfDisposed(),Qr.cos(this)},n.prototype.tan=function(){return this.throwIfDisposed(),Qr.tan(this)},n.prototype.asin=function(){return this.throwIfDisposed(),Qr.asin(this)},n.prototype.acos=function(){return this.throwIfDisposed(),Qr.acos(this)},n.prototype.atan=function(){return this.throwIfDisposed(),Qr.atan(this)},n.prototype.sinh=function(){return this.throwIfDisposed(),Qr.sinh(this)},n.prototype.cosh=function(){return this.throwIfDisposed(),Qr.cosh(this)},n.prototype.tanh=function(){return this.throwIfDisposed(),Qr.tanh(this)},n.prototype.asinh=function(){return this.throwIfDisposed(),Qr.asinh(this)},n.prototype.acosh=function(){return this.throwIfDisposed(),Qr.acosh(this)},n.prototype.atanh=function(){return this.throwIfDisposed(),Qr.atanh(this)},n.prototype.erf=function(){return this.throwIfDisposed(),Qr.erf(this)},n.prototype.round=function(){return this.throwIfDisposed(),Qr.round(this)},n.prototype.step=function(n){return void 0===n&&(n=0),this.throwIfDisposed(),Qr.step(this,n)},n.prototype.softmax=function(n){return void 0===n&&(n=-1),this.throwIfDisposed(),Qr.softmax(this,n)},n.prototype.logSoftmax=function(n){return void 0===n&&(n=-1),this.throwIfDisposed(),Qr.logSoftmax(this,n)},n.prototype.resizeBilinear=function(n,x){return void 0===x&&(x=!1),this.throwIfDisposed(),Qr.image.resizeBilinear(this,n,x)},n.prototype.resizeNearestNeighbor=function(n,x){return void 0===x&&(x=!1),this.throwIfDisposed(),Qr.image.resizeNearestNeighbor(this,n,x)},n.prototype.conv1d=function(n,x,t,e,i,r){return void 0===e&&(e="NWC"),void 0===i&&(i=1),this.throwIfDisposed(),Qr.conv1d(this,n,x,t,e,i,r)},n.prototype.conv2d=function(n,x,t,e,i,r){return void 0===e&&(e="NHWC"),void 0===i&&(i=[1,1]),this.throwIfDisposed(),Qr.conv2d(this,n,x,t,e,i,r)},n.prototype.conv2dTranspose=function(n,x,t,e,i){return this.throwIfDisposed(),Qr.conv2dTranspose(this,n,x,t,e,i)},n.prototype.depthwiseConv2D=function(n,x,t,e,i,r){return void 0===e&&(e="NHWC"),void 0===i&&(i=[1,1]),this.throwIfDisposed(),Qr.depthwiseConv2d(this,n,x,t,e,i,r)},n.prototype.separableConv2d=function(n,x,t,e,i,r){return void 0===i&&(i=[1,1]),void 0===r&&(r="NHWC"),this.throwIfDisposed(),Qr.separableConv2d(this,n,x,t,e,i,r)},n.prototype.avgPool=function(n,x,t,e){return this.throwIfDisposed(),Qr.avgPool(this,n,x,t,e)},n.prototype.maxPool=function(n,x,t,e){return this.throwIfDisposed(),Qr.maxPool(this,n,x,t,e)},n.prototype.localResponseNormalization=function(n,x,t,e){return void 0===n&&(n=5),void 0===x&&(x=1),void 0===t&&(t=1),void 0===e&&(e=.5),Qr.localResponseNormalization(this,n,x,t,e)},n.prototype.pool=function(n,x,t,e,i){return this.throwIfDisposed(),Qr.pool(this,n,x,t,e,i)},n.prototype.variable=function(n,x,t){return void 0===n&&(n=!0),this.throwIfDisposed(),Wr().makeVariable(this,n,x,t)},n.prototype.unsortedSegmentSum=function(n,x){return this.throwIfDisposed(),Qr.unsortedSegmentSum(this,n,x)},n.prototype.batchToSpaceND=function(n,x){return this.throwIfDisposed(),Qr.batchToSpaceND(this,n,x)},n.prototype.spaceToBatchND=function(n,x){return this.throwIfDisposed(),Qr.spaceToBatchND(this,n,x)},n.prototype.topk=function(n,x){return void 0===n&&(n=1),void 0===x&&(x=!0),this.throwIfDisposed(),Qr.topk(this,n,x)},n.prototype.stridedSlice=function(n,x,t,e,i,r,o,s){return void 0===e&&(e=0),void 0===i&&(i=0),void 0===r&&(r=0),void 0===o&&(o=0),void 0===s&&(s=0),this.throwIfDisposed(),Qr.stridedSlice(this,n,x,t,e,i,r,o,s)},n.prototype.depthToSpace=function(n,x){return this.throwIfDisposed(),Qr.depthToSpace(this,n,x)},n.prototype.fft=function(){return this.throwIfDisposed(),Qr.spectral.fft(this)},n.prototype.ifft=function(){return this.throwIfDisposed(),Qr.spectral.ifft(this)},n.prototype.rfft=function(){return this.throwIfDisposed(),Qr.spectral.rfft(this)},n.prototype.irfft=function(){return this.throwIfDisposed(),Qr.spectral.irfft(this)},n}();Object.defineProperty(Kr,Symbol.hasInstance,{value:function(n){return!!n&&null!=n.dataId&&null!=n.shape&&null!=n.dtype}});var Yr,Jr,Xr,Zr,$r,no=function(n){function x(x,t,e,i){var r=n.call(this,x.shape,x.dtype,x.dataId,i)||this;return r.trainable=t,r.name=e,r}return Di(x,n),x.prototype.assign=function(n){if(n.dtype!==this.dtype)throw new Error("dtype of the new value ("+n.dtype+") and previous value ("+this.dtype+") must match");if(!xr(n.shape,this.shape))throw new Error("shape of the new value ("+n.shape+") and previous value ("+this.shape+") must match");Wr().disposeTensor(this),this.dataId=n.dataId,Wr().incRef(this,null)},x.prototype.dispose=function(){Wr().disposeVariable(this),this.isDisposedInternal=!0},x}(Kr);Object.defineProperty(no,Symbol.hasInstance,{value:function(n){return n instanceof Kr&&null!=n.assign&&n.assign instanceof Function}}),function(n){n.R0="R0",n.R1="R1",n.R2="R2",n.R3="R3",n.R4="R4",n.R5="R5",n.R6="R6"}(Yr||(Yr={})),function(n){n.float32="float32",n.int32="int32",n.bool="int32",n.complex64="complex64"}(Jr||(Jr={})),function(n){n.float32="float32",n.int32="int32",n.bool="bool",n.complex64="complex64"}(Xr||(Xr={})),function(n){n.float32="float32",n.int32="float32",n.bool="float32",n.complex64="complex64"}(Zr||(Zr={})),function(n){n.float32="complex64",n.int32="complex64",n.bool="complex64",n.complex64="complex64"}($r||($r={}));var xo={float32:Zr,int32:Jr,bool:Xr,complex64:$r};function to(n,x){if("string"===n||"string"===x){if("string"===n&&"string"===x)return"string";throw new Error("Can not upcast "+n+" with "+x)}return xo[n][x]}function eo(n){return to(n,"int32")}function io(n,x){if(n.dtype===x.dtype)return[n,x];var t=to(n.dtype,x.dtype);return[n.cast(t),x.cast(t)]}function ro(n,x){Ji(n.dtype===x.dtype,function(){return"The dtypes of the first("+n.dtype+") and second("+x.dtype+") input must match"})}function oo(n){var x=[];return function n(x,t,e){if(null!=x)if(x instanceof Kr)t.push(x);else if(i=x,Array.isArray(i)||"object"==typeof i){var i,r=x;for(var o in r){var s=r[o];e.has(s)||(e.add(s),n(s,t,e))}}}(n,x,new Set),x}Object.freeze({makeTypesMatch:io,assertTypesMatch:ro,isTensorInList:function(n,x){return x.some(function(x){return x.id===n.id})},getTensorsInContainer:oo});var so,ho=function(){function n(){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 n.prototype.dispose=function(){for(var n in this.registeredVariables)this.registeredVariables[n].dispose()},n}(),uo=function(){function n(n){this.ENV=n,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new ho}return n.prototype.ready=function(){return Oi(this,void 0,void 0,function(){var n,x,t;return _i(this,function(e){switch(e.label){case 0:if(null!=this.pendingBackendInit)return[2,this.pendingBackendInit.then(function(){})];if(null!=this.backendInstance)return[2];n=this.getSortedBackends(),x=0,e.label=1;case 1:return x<n.length?(t=n[x],[4,this.initializeBackend(t).success]):[3,5];case 2:return e.sent()?[4,this.setBackend(t)]:[3,4];case 3:return e.sent(),[2];case 4:return x++,[3,1];case 5:throw new Error("Could not initialize any backends, all backend initializations failed.")}})})},Object.defineProperty(n.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 n=this.initializeBackendsAndReturnBest(),x=n.name;if(n.asyncInit)throw new Error("The highest priority backend '"+x+"' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods");this.setBackend(x)}return this.backendInstance},enumerable:!0,configurable:!0}),n.prototype.backendNames=function(){return Object.keys(this.registryFactory)},n.prototype.findBackend=function(n){if(!(n in this.registry)){if(!(n in this.registryFactory))return null;if(this.initializeBackend(n).asyncInit)return null}return this.registry[n]},n.prototype.findBackendFactory=function(n){return n in this.registryFactory?this.registryFactory[n].factory:null},n.prototype.registerBackend=function(n,x,t){return void 0===t&&(t=1),n in this.registryFactory?(console.warn(n+" backend was already registered. Reusing existing backend factory."),!1):(this.registryFactory[n]={factory:x,priority:t},!0)},n.prototype.setBackend=function(n){return Oi(this,void 0,void 0,function(){var x,t,e;return _i(this,function(i){switch(i.label){case 0:if(null==this.registryFactory[n])throw new Error("Backend name '"+n+"' not found in registry");return this.backendName=n,null!=this.registry[n]?[3,4]:(this.backendInstance=null,x=this.initializeBackend(n),t=x.success,x.asyncInit?[4,t]:[3,2]);case 1:return e=i.sent(),[3,3];case 2:e=t,i.label=3;case 3:if(!e)return[2,!1];i.label=4;case 4:return this.backendInstance=this.registry[n],this.setupRegisteredKernels(),this.profiler=new Rr(this.backendInstance),[2,!0]}})})},n.prototype.setupRegisteredKernels=function(){var n=this;Hi(this.backendName).forEach(function(x){null!=x.setupFunc&&x.setupFunc(n.backendInstance)})},n.prototype.disposeRegisteredKernels=function(n){var x=this;Hi(n).forEach(function(t){null!=t.disposeFunc&&t.disposeFunc(x.registry[n])})},n.prototype.initializeBackend=function(n){var x=this,t=this.registryFactory[n];if(null==t)throw new Error("Cannot initialize backend "+n+", no registration found.");try{var e=t.factory();if(Promise.resolve(e)===e){var i=++this.pendingBackendInitId,r=e.then(function(t){return!(i<x.pendingBackendInitId)&&(x.registry[n]=t,x.pendingBackendInit=null,!0)}).catch(function(t){return!(i<x.pendingBackendInitId)&&(x.pendingBackendInit=null,console.warn("Initialization of backend "+n+" failed"),console.warn(t.stack||t.message),!1)});return this.pendingBackendInit=r,{success:r,asyncInit:!0}}return this.registry[n]=e,{success:!0,asyncInit:!1}}catch(x){return console.warn("Initialization of backend "+n+" failed"),console.warn(x.stack||x.message),{success:!1,asyncInit:!1}}},n.prototype.removeBackend=function(n){if(!(n in this.registryFactory))throw new Error(n+" backend not found in registry");this.backendName===n&&null!=this.pendingBackendInit&&this.pendingBackendInitId++,n in this.registry&&(this.disposeRegisteredKernels(n),this.registry[n].dispose(),delete this.registry[n]),delete this.registryFactory[n],this.backendName===n&&(this.pendingBackendInit=null,this.backendName=null,this.backendInstance=null)},n.prototype.getSortedBackends=function(){var n=this;if(0===Object.keys(this.registryFactory).length)throw new Error("No backend found in registry.");return Object.keys(this.registryFactory).sort(function(x,t){return n.registryFactory[t].priority-n.registryFactory[x].priority})},n.prototype.initializeBackendsAndReturnBest=function(){for(var n=this.getSortedBackends(),x=0;x<n.length;x++){var t=n[x],e=this.initializeBackend(t),i=e.success,r=e.asyncInit;if(r||i)return{name:t,asyncInit:r}}throw new Error("Could not initialize any backends, all backend initializations failed.")},n.prototype.moveData=function(n,x){var t=this.state.tensorInfo.get(x),e=t.backend,i=this.readSync(x);e.disposeData(x),t.backend=n,n.move(x,i,t.shape,t.dtype),this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack[this.state.numDataMovesStack.length-1]++},n.prototype.tidy=function(n,x){var t,e=this,i=null;if(null==x){if("function"!=typeof n)throw new Error("Please provide a function to tidy()");x=n}else{if("string"!=typeof n&&!(n instanceof String))throw new Error("When calling with two arguments, the first argument to tidy() must be a string");if("function"!=typeof x)throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function");i=n}return this.scopedRun(function(){return e.startScope(i)},function(){return e.endScope(t)},function(){return(t=x())instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),t})},n.prototype.scopedRun=function(n,x,t){n();try{var e=t();return x(),e}catch(n){throw x(),n}},n.prototype.nextTensorId=function(){return n.nextTensorId++},n.prototype.nextVariableId=function(){return n.nextVariableId++},n.prototype.clone=function(n){var x=this.makeTensorFromDataId(n.dataId,n.shape,n.dtype),t={x:n};return this.addTapeNode(this.state.activeScope.name,t,[x],function(n){return{x:function(){return n.toFloat()}}},[]),x},n.prototype.runKernel=function(n,x,t,e,i){return this.runKernelFunc(null,x,null,n,t,e,i)},n.prototype.shouldCheckForMemLeaks=function(){return this.ENV.getBool("IS_TEST")},n.prototype.checkKernelForMemLeak=function(n,x,t){var e=this.backend.numDataIds(),i=0;t.forEach(function(n){i+="complex64"===n.dtype?3:1});var r=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],o=e-x-i-r;if(o>0)throw new Error("Backend '"+this.backendName+"' has an internal memory leak ("+o+" data ids) after running '"+n+"'")},n.prototype.runKernelFunc=function(n,x,t,e,i,r,o){var s,h=this;void 0===r&&(r=[]),void 0===o&&(o=[]);var u=[],a=this.isTapeOn();null==e&&(e=null!=this.state.activeScope?this.state.activeScope.name:"");var g,l=function(n){a&&(u=n.map(function(n){return h.keep(h.clone(n))}))},c=this.state.numBytes,d=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);var f,p=Pi(e,this.backendName);return g=null!=p?function(){var n=h.backend.numDataIds();f=p.kernelFunc({inputs:x,attrs:i,backend:h.backend});var t=Array.isArray(f)?f:[f];h.shouldCheckForMemLeaks()&&h.checkKernelForMemLeak(e,n,t);var s=t.map(function(n){var x=n.dataId,t=n.shape,e=n.dtype;return h.makeTensorFromDataId(x,t,e)}),u=s.filter(function(n,x){return o[x]});return l((r||[]).slice().concat(u)),s}:function(){var x=h.backend.numDataIds();f=h.tidy(function(){return n(h.backend,l)});var t=Array.isArray(f)?f:[f];return h.shouldCheckForMemLeaks()&&h.checkKernelForMemLeak(e,x,t),t},this.scopedRun(function(){return h.state.kernelDepth++},function(){return h.state.kernelDepth--},function(){s=h.ENV.getBool("DEBUG")?h.profiler.profileKernel(e,x,function(){return g()}):g()}),a&&this.addTapeNode(e,x,s,t,u),this.state.profiling&&this.state.activeProfile.kernels.push({name:e,bytesAdded:this.state.numBytes-c,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-d,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(x).map(function(n){return x[n].shape}),outputShapes:s.map(function(n){return n.shape})}),Array.isArray(f)?s:s[0]},n.prototype.makeTensor=function(n,x,t,e){if(null==n)throw new Error("Values passed to engine.makeTensor() are null");t=t||"float32",e=e||this.backend;var i=n;"string"===t&&mr(n[0])&&(i=n.map(function(n){return Dr(n)}));var r=e.write(i,x,t),o=new Kr(x,t,r,this.nextTensorId());if(this.incRef(o,e),"string"===t){var s=this.state.tensorInfo.get(r),h=yr(i);this.state.numBytes+=h-s.bytes,s.bytes=h}return o},n.prototype.makeTensorFromDataId=function(n,x,t,e){var i=new Kr(x,t=t||"float32",n,this.nextTensorId());return this.incRef(i,e),i},n.prototype.makeVariable=function(n,x,t,e){void 0===x&&(x=!0),t=t||this.nextVariableId().toString(),null!=e&&e!==n.dtype&&(n=n.asType(e));var i=new no(n,x,t,this.nextTensorId());if(null!=this.state.registeredVariables[i.name])throw new Error("Variable with name "+i.name+" was already registered");return this.state.registeredVariables[i.name]=i,this.incRef(i,this.backend),i},n.prototype.incRef=function(n,x){var t=this.state.tensorInfo.has(n.dataId)?this.state.tensorInfo.get(n.dataId).refCount:0;if(this.state.numTensors++,"string"===n.dtype&&this.state.numStringTensors++,0===t){this.state.numDataBuffers++;var e=0;"complex64"!==n.dtype&&"string"!==n.dtype&&(e=n.size*pr(n.dtype)),this.state.tensorInfo.set(n.dataId,{backend:x||this.backend,dtype:n.dtype,shape:n.shape,bytes:e,refCount:0}),this.state.numBytes+=e}this.state.tensorInfo.get(n.dataId).refCount++,n instanceof no||this.track(n)},n.prototype.disposeTensor=function(n){if(this.state.tensorInfo.has(n.dataId)){this.state.numTensors--,"string"===n.dtype&&this.state.numStringTensors--;var x=this.state.tensorInfo.get(n.dataId);x.refCount<=1?("complex64"!==n.dtype&&(this.state.numBytes-=x.bytes),this.state.numDataBuffers--,x.backend.disposeData(n.dataId),this.state.tensorInfo.delete(n.dataId)):this.state.tensorInfo.get(n.dataId).refCount--}},n.prototype.disposeVariables=function(){for(var n in this.state.registeredVariables){var x=this.state.registeredVariables[n];this.disposeVariable(x)}},n.prototype.disposeVariable=function(n){this.disposeTensor(n),null!=this.state.registeredVariables[n.name]&&delete this.state.registeredVariables[n.name]},n.prototype.memory=function(){var n=this.backend.memory();return n.numTensors=this.state.numTensors,n.numDataBuffers=this.state.numDataBuffers,n.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(n.unreliable=!0,null==n.reasons&&(n.reasons=[]),n.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),n},n.prototype.profile=function(n){return Oi(this,void 0,void 0,function(){var x,t;return _i(this,function(e){return this.state.profiling=!0,x=this.state.numBytes,t=this.state.numTensors,this.state.activeProfile.kernels=[],this.state.activeProfile.result=n(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max.apply(Math,this.state.activeProfile.kernels.map(function(n){return n.totalBytesSnapshot})),this.state.activeProfile.newBytes=this.state.numBytes-x,this.state.activeProfile.newTensors=this.state.numTensors-t,[2,this.state.activeProfile]})})},n.prototype.isTapeOn=function(){return this.state.gradientDepth>0&&0===this.state.kernelDepth},n.prototype.addTapeNode=function(n,x,t,e,i){var r=this,o={id:this.state.nextTapeNodeId++,kernelName:n,inputs:x,outputs:t,saved:i},s=Li(n);null!=s&&(e=s.gradFunc),null!=e&&(o.gradient=function(n){return n=n.map(function(n,x){if(null==n){var e=t[x],i=Er(e.size,e.dtype);return r.makeTensor(i,e.shape,e.dtype)}return n}),e(n.length>1?n:n[0],i)}),this.state.activeTape.push(o)},n.prototype.keep=function(n){return n.kept=!0,n},n.prototype.startTape=function(){0===this.state.gradientDepth&&(this.state.activeTape=[]),this.state.gradientDepth++},n.prototype.endTape=function(){this.state.gradientDepth--},n.prototype.startScope=function(n){var x={track:[],name:"unnamed scope",id:this.state.nextScopeId++};n&&(x.name=n),this.state.scopeStack.push(x),this.state.activeScope=x},n.prototype.endScope=function(n){for(var x=this,t=oo(n),e=new Set(t.map(function(n){return n.id})),i=0;i<this.state.activeScope.track.length;i++){var r=this.state.activeScope.track[i];r.kept||e.has(r.id)||r.dispose()}var o=this.state.scopeStack.pop();this.state.activeScope=0===this.state.scopeStack.length?null:this.state.scopeStack[this.state.scopeStack.length-1],t.forEach(function(n){n.kept||n.scopeId!==o.id||x.track(n)})},n.prototype.gradients=function(n,x,t,e){var i=this;if(void 0===e&&(e=!1),Ji(x.length>0,function(){return"gradients() received an empty list of xs."}),null!=t&&"float32"!==t.dtype)throw new Error("dy must have 'float32' dtype, but has '"+t.dtype+"'");var r=this.scopedRun(function(){return i.startTape()},function(){return i.endTape()},function(){return i.tidy("forward",n)});Ji(r instanceof Kr,function(){return"The result y returned by f() must be a tensor."});var o=function(n,x,t){for(var e={},i={},r=0;r<x.length;r++)e[x[r].id]=!0;for(r=0;r<n.length;r++){var o=(d=n[r]).inputs;for(var s in o){for(var h=o[s],u=!1,a=0;a<x.length;a++)if(e[h.id]){d.outputs.forEach(function(n){return e[n.id]=!0}),u=!0,i[d.id]=!0;break}if(u)break}}var g={};g[t.id]=!0;var l={};for(r=n.length-1;r>=0;r--)for(o=(d=n[r]).inputs,a=0;a<d.outputs.length;a++)if(g[d.outputs[a].id]){for(var s in o)g[o[s].id]=!0,l[d.id]=!0;break}var c=[];for(r=0;r<n.length;r++){var d;if(i[(d=n[r]).id]&&l[d.id]){var f={};for(var s in d.inputs){var p=d.inputs[s];e[p.id]&&(f[s]=p)}var y=Object.assign({},d);y.inputs=f,y.outputs=d.outputs,c.push(y)}}return c}(this.state.activeTape,x,r);if(!e&&0===o.length&&x.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 n,e,s={};s[r.id]=null==t?(n=r.shape,e=Ar(nr(n),"float32"),ao.makeTensor(e,n,"float32")):t,function(n,x,t){for(var e=function(e){var i=x[e],r=[];if(i.outputs.forEach(function(x){var t=n[x.id];null!=t?r.push(t):r.push(null)}),null==i.gradient)throw new Error("Cannot compute gradient: gradient function not found for "+i.kernelName+".");var o=i.gradient(r),s=function(x){if(!(x in o))throw new Error("Cannot backprop through input "+x+". Available gradients found: "+Object.keys(o)+".");var e=t(function(){return o[x]()});if("float32"!==e.dtype)throw new Error("Error in gradient for op "+i.kernelName+". The gradient of input "+x+" must have 'float32' dtype, but has '"+e.dtype+"'");var r=i.inputs[x];if(!xr(e.shape,r.shape))throw new Error("Error in gradient for op "+i.kernelName+". The gradient of input '"+x+"' has shape '"+e.shape+"', which does not match the shape of the input '"+r.shape+"'");if(null==n[r.id])n[r.id]=e;else{var s=n[r.id];n[r.id]=s.add(e),s.dispose()}};for(var h in i.inputs)s(h)},i=x.length-1;i>=0;i--)e(i)}(s,o,function(n){return i.tidy(n)});var h=x.map(function(n){return s[n.id]});return 0===i.state.gradientDepth&&(i.state.activeTape.forEach(function(n){for(var x=0,t=n.saved;x<t.length;x++)t[x].dispose()}),i.state.activeTape=null),{value:r,grads:h}})},n.prototype.customGrad=function(n){var x=this;return Ji(jr(n),function(){return"The f passed in customGrad(f) must be a function."}),function(){for(var t,e=[],i=0;i<arguments.length;i++)e[i]=arguments[i];Ji(e.every(function(n){return n instanceof Kr}),function(){return"The args passed in customGrad(f)(x1, x2,...) must all be tensors"});var r={};return e.forEach(function(n,x){r[x]=n}),x.runKernelFunc(function(x,i){return Ji((t=n.apply(void 0,e.concat([i]))).value instanceof Kr,function(){return"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"}),Ji(jr(t.gradFunc),function(){return"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."}),t.value},r,function(n,x){var i=t.gradFunc(n,x),r=Array.isArray(i)?i:[i];Ji(r.length===e.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(...)."}),Ji(r.every(function(n){return n instanceof Kr}),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 o={};return r.forEach(function(n,x){o[x]=function(){return n}}),o})}},n.prototype.readSync=function(n){return this.state.tensorInfo.get(n).backend.readSync(n)},n.prototype.read=function(n){return this.state.tensorInfo.get(n).backend.read(n)},n.prototype.time=function(n){return Oi(this,void 0,void 0,function(){var x,t;return _i(this,function(e){switch(e.label){case 0:return x=Sr(),[4,this.backend.time(n)];case 1:return(t=e.sent()).wallMs=Sr()-x,[2,t]}})})},n.prototype.track=function(n){return null!=this.state.activeScope&&(n.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(n)),n},Object.defineProperty(n.prototype,"registeredVariables",{get:function(){return this.state.registeredVariables},enumerable:!0,configurable:!0}),n.prototype.reset=function(){for(var n in this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new ho,this.registry)this.disposeRegisteredKernels(n),this.registry[n].dispose(),delete this.registry[n];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null},n.nextTensorId=0,n.nextVariableId=0,n}(),ao=function(){var n=function(){if(null==so){var n=void 0;if("undefined"!=typeof window)n=window;else if("undefined"!=typeof e.g)n=e.g;else if("undefined"!=typeof process)n=process;else{if("undefined"==typeof self)throw new Error("Could not find a global object");n=self}so=n}return so}();if(null==n._tfengine){var x=new Ti(n);n._tfengine=new uo(x)}return function(n){Mi=n}(n._tfengine.ENV),Wr=function(){return n._tfengine},n._tfengine}();function go(){return"undefined"!=typeof window&&null!=window.document||"undefined"!=typeof WorkerGlobalScope}var lo=Bi();lo.registerFlag("DEBUG",function(){return!1},function(n){n&&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.")}),lo.registerFlag("IS_BROWSER",function(){return go()}),lo.registerFlag("IS_NODE",function(){return"undefined"!=typeof process&&void 0!==process.versions&&void 0!==process.versions.node}),lo.registerFlag("IS_CHROME",function(){return"undefined"!=typeof navigator&&null!=navigator&&null!=navigator.userAgent&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor)}),lo.registerFlag("PROD",function(){return!1}),lo.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",function(){return lo.getBool("DEBUG")}),lo.registerFlag("DEPRECATION_WARNINGS_ENABLED",function(){return!0}),lo.registerFlag("IS_TEST",function(){return!1});var co,fo,po,yo={},mo={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function bo(n,x){yo[n]=x}function zo(n){n in yo||(yo[n]=function(n){if(1!==n&&2!==n)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");var x=function(n){if("undefined"!=typeof OffscreenCanvas&&2===n)return new OffscreenCanvas(300,150);if("undefined"!=typeof document)return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}(n);return x.addEventListener("webglcontextlost",function(x){x.preventDefault(),delete yo[n]},!1),1===n?x.getContext("webgl",mo)||x.getContext("experimental-webgl",mo):x.getContext("webgl2",mo)}(n));var x=yo[n];return x.isContextLost()?(delete yo[n],zo(n)):(x.disable(x.DEPTH_TEST),x.disable(x.STENCIL_TEST),x.disable(x.BLEND),x.disable(x.DITHER),x.disable(x.POLYGON_OFFSET_FILL),x.disable(x.SAMPLE_COVERAGE),x.enable(x.SCISSOR_TEST),x.enable(x.CULL_FACE),x.cullFace(x.BACK),yo[n])}function vo(n,x){return[x,n]}function jo(n){var x=nr(n);return ir(Math.ceil(x/4))}function wo(n,x){return[Math.max(1,Math.ceil(x/2)),Math.max(1,Math.ceil(n/2))]}function ko(n,x){var t,e,i,r,o,s,h,u,a,g=n;return 2===Bi().getNumber("WEBGL_VERSION")?(t=g.R32F,e=g.R16F,i=g.RGBA16F,r=g.RGBA32F,o=g.RED,s=4,h=1,u=g.HALF_FLOAT,a=g.FLOAT):(t=n.RGBA,e=n.RGBA,i=n.RGBA,r=g.RGBA,o=n.RGBA,s=4,h=4,u=null!=x?x.HALF_FLOAT_OES:null,a=n.FLOAT),{internalFormatFloat:t,internalFormatHalfFloat:e,internalFormatPackedHalfFloat:i,internalFormatPackedFloat:r,textureFormatFloat:o,downloadTextureFormat:n.RGBA,downloadUnpackNumChannels:s,defaultNumChannels:h,textureTypeHalfFloat:u,textureTypeFloat:a}}function qo(n,x,t){var e=t();return x&&function(n){var x=n.getError();if(x!==n.NO_ERROR)throw new Error("WebGL Error: "+So(n,x))}(n),e}!function(n){n[n.DENSE=0]="DENSE",n[n.SHARED_BATCH=1]="SHARED_BATCH"}(co||(co={})),function(n){n[n.RENDER=0]="RENDER",n[n.UPLOAD=1]="UPLOAD",n[n.PIXELS=2]="PIXELS",n[n.DOWNLOAD=3]="DOWNLOAD"}(fo||(fo={})),function(n){n[n.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",n[n.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",n[n.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",n[n.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",n[n.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"}(po||(po={}));var Co=5.96e-8,Ao=65504;function Eo(n){return!!(Bi().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||0===n||Co<Math.abs(n)&&Math.abs(n)<Ao)}function So(n,x){switch(x){case n.NO_ERROR:return"NO_ERROR";case n.INVALID_ENUM:return"INVALID_ENUM";case n.INVALID_VALUE:return"INVALID_VALUE";case n.INVALID_OPERATION:return"INVALID_OPERATION";case n.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case n.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case n.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return"Unknown error code "+x}}function Io(n,x,t){return $o(n,x,function(){return n.getExtension(t)},'Extension "'+t+'" not supported on this browser.')}function Do(n,x,t){var e=$o(n,x,function(){return n.createShader(n.VERTEX_SHADER)},"Unable to create vertex WebGLShader.");if(qo(n,x,function(){return n.shaderSource(e,t)}),qo(n,x,function(){return n.compileShader(e)}),!1===n.getShaderParameter(e,n.COMPILE_STATUS))throw console.log(n.getShaderInfoLog(e)),new Error("Failed to compile vertex shader.");return e}function Oo(n,x,t){var e=$o(n,x,function(){return n.createShader(n.FRAGMENT_SHADER)},"Unable to create fragment WebGLShader.");if(qo(n,x,function(){return n.shaderSource(e,t)}),qo(n,x,function(){return n.compileShader(e)}),!1===n.getShaderParameter(e,n.COMPILE_STATUS))throw function(n,x){var t=Ro.exec(x);if(null==t)return console.log("Couldn't parse line number in error: "+x),void console.log(n);for(var e=+t[1],i=n.split("\n"),r=i.length.toString().length+2,o=i.map(function(n,x){return rr((x+1).toString(),r)+n}),s=0,h=0;h<o.length;h++)s=Math.max(o[h].length,s);var u=o.slice(0,e-1),a=o.slice(e-1,e),g=o.slice(e);console.log(u.join("\n")),console.log(x.split("\n")[0]),console.log("%c "+rr(a[0],s),"border:1px solid red; background-color:#e3d2d2; color:#a61717"),console.log(g.join("\n"))}(t,n.getShaderInfoLog(e)),new Error("Failed to compile fragment shader.");return e}var _o,To,Ro=/ERROR: [0-9]+:([0-9]+):/g;function Bo(n,x){return $o(n,x,function(){return n.createProgram()},"Unable to create WebGLProgram.")}function Mo(n,x,t){if(qo(n,x,function(){return n.linkProgram(t)}),!1===n.getProgramParameter(t,n.LINK_STATUS))throw console.log(n.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function No(n,x,t){if(qo(n,x,function(){return n.validateProgram(t)}),!1===n.getProgramParameter(t,n.VALIDATE_STATUS))throw console.log(n.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function Fo(n,x,t){var e=$o(n,x,function(){return n.createBuffer()},"Unable to create WebGLBuffer");return qo(n,x,function(){return n.bindBuffer(n.ARRAY_BUFFER,e)}),qo(n,x,function(){return n.bufferData(n.ARRAY_BUFFER,t,n.STATIC_DRAW)}),e}function Po(n,x,t){var e=$o(n,x,function(){return n.createBuffer()},"Unable to create WebGLBuffer");return qo(n,x,function(){return n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,e)}),qo(n,x,function(){return n.bufferData(n.ELEMENT_ARRAY_BUFFER,t,n.STATIC_DRAW)}),e}function Lo(n,x){return $o(n,x,function(){return n.createTexture()},"Unable to create WebGLTexture.")}function Ho(n,x){var t=Bi().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(n<=0||x<=0){var e="["+n+"x"+x+"]";throw new Error("Requested texture size "+e+" is invalid.")}if(n>t||x>t)throw e="["+n+"x"+x+"]",new Error("Requested texture size "+e+" greater than WebGL maximum on this browser / GPU ["+t+"x"+t+"].")}function Uo(n,x){return $o(n,x,function(){return n.createFramebuffer()},"Unable to create WebGLFramebuffer.")}function Vo(n,x,t,e,i,r,o,s){var h=n.getAttribLocation(t,e);return-1!==h&&(qo(n,x,function(){return n.bindBuffer(n.ARRAY_BUFFER,i)}),qo(n,x,function(){return n.vertexAttribPointer(h,r,n.FLOAT,!1,o,s)}),qo(n,x,function(){return n.enableVertexAttribArray(h)}),!0)}function Wo(n,x,t,e){ns(n,e),qo(n,x,function(){return n.activeTexture(n.TEXTURE0+e)}),qo(n,x,function(){return n.bindTexture(n.TEXTURE_2D,t)})}function Qo(n,x,t,e){return $o(n,x,function(){return n.getUniformLocation(t,e)},'uniform "'+e+'" not present in program.')}function Go(n,x,t){return n.getUniformLocation(x,t)}function Ko(n,x,t,e,i,r){qo(n,x,function(){return Wo(n,x,e,r)}),qo(n,x,function(){return n.uniform1i(i,r)})}function Yo(n,x,t,e){qo(n,x,function(){return n.bindFramebuffer(n.FRAMEBUFFER,e)}),qo(n,x,function(){return n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,t,0)})}function Jo(n,x,t){qo(n,x,function(){return n.bindFramebuffer(n.FRAMEBUFFER,t)}),qo(n,x,function(){return n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,null,0)})}function Xo(n){var x=n.checkFramebufferStatus(n.FRAMEBUFFER);if(x!==n.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+Zo(n,x))}function Zo(n,x){switch(x){case n.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case n.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case n.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case n.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return"unknown error "+x}}function $o(n,x,t,e){var i=qo(n,x,function(){return t()});if(null==i)throw new Error(e);return i}function ns(n,x){var t=n.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,e=x+n.TEXTURE0;if(e<n.TEXTURE0||e>t)throw new Error("textureUnit must be in [gl.TEXTURE0, gl.TEXTURE"+t+"].")}function xs(n,x){return void 0===x&&(x=2),nr(n.slice(0,n.length-x))}function ts(n){if(0===n.length)throw Error("Cannot get rows and columns of an empty shape array.");return[n.length>1?n[n.length-2]:1,n[n.length-1]]}function es(n){var x=[1,1,1];return 0===n.length||1===n.length&&1===n[0]||(x=[xs(n)].concat(ts(n))),x}function is(n,x){var t;void 0===x&&(x=!1);var e=Bi().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(x&&(e*=2,1===(n=n.map(function(x,t){return t>=n.length-2?Ki(n[t]):n[t]})).length&&(n=[2,n[0]])),2!==n.length){var i=ur(n);n=i.newShape}var r=nr(n);if(n.length<=1&&r<=e)return[1,r];if(2===n.length&&n[0]<=e&&n[1]<=e)return n;if(3===n.length&&n[0]*n[1]<=e&&n[2]<=e)return[n[0]*n[1],n[2]];if(3===n.length&&n[0]<=e&&n[1]*n[2]<=e)return[n[0],n[1]*n[2]];if(4===n.length&&n[0]*n[1]*n[2]<=e&&n[3]<=e)return[n[0]*n[1]*n[2],n[3]];if(4===n.length&&n[0]<=e&&n[1]*n[2]*n[3]<=e)return[n[0],n[1]*n[2]*n[3]];if(x){var o=xs(n),s=2,h=2;return n.length&&(s=(t=ts(n))[0],h=t[1]),ir(r=o*(s/2)*(h/2)).map(function(n){return 2*n})}return ir(r)}function rs(n){return n%2==0}function os(n,x){if(xr(n=n.slice(-2),x=x.slice(-2)))return!0;if(!n.length||!x.length)return!0;if(0===n[0]||0===n[1]||0===x[0]||0===x[1])return!0;if(n.length!==x.length){var t=n.slice(-1)[0],e=x.slice(-1)[0];if(t===e)return!0;if(rs(t)&&rs(e)&&(1===n[0]||1===x[0]))return!0}return n[1]===x[1]&&rs(n[0])&&rs(x[0])}function ss(n){if(null==_o){var x=zo(n);_o=x.getParameter(x.MAX_TEXTURE_SIZE)}return _o}function hs(n){if(null==To){var x=zo(n);To=x.getParameter(x.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,To)}function us(n){if(0===n)return 0;var x=zo(n);return as(x,"EXT_disjoint_timer_query_webgl2")&&2===n?2:as(x,"EXT_disjoint_timer_query")?1:0}function as(n,x){return null!=n.getExtension(x)}function gs(n){try{if(null!=zo(n))return!0}catch(n){return!1}return!1}function ls(n){if(0===n)return!1;var x=zo(n);if(1===n){if(!as(x,"OES_texture_float"))return!1}else if(!as(x,"EXT_color_buffer_float"))return!1;return ds(x)}function cs(n){if(0===n)return!1;var x=zo(n);if(1!==n){if(as(x,"EXT_color_buffer_float"))return ds(x);if(as(x,"EXT_color_buffer_half_float")){var t=x.getExtension("EXT_color_buffer_half_float");return function(n,x){var t=ko(n,x),e=n.createTexture();n.bindTexture(n.TEXTURE_2D,e),n.texImage2D(n.TEXTURE_2D,0,t.internalFormatHalfFloat,1,1,0,t.textureFormatFloat,t.textureTypeHalfFloat,null);var i=n.createFramebuffer();n.bindFramebuffer(n.FRAMEBUFFER,i),n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,e,0);var r=n.checkFramebufferStatus(n.FRAMEBUFFER)===n.FRAMEBUFFER_COMPLETE;return n.bindTexture(n.TEXTURE_2D,null),n.bindFramebuffer(n.FRAMEBUFFER,null),n.deleteTexture(e),n.deleteFramebuffer(i),r}(x,t)}return!1}return!!as(x,"OES_texture_float")&&!!as(x,"WEBGL_color_buffer_float")&&ds(x)}function ds(n){var x=ko(n),t=n.createTexture();n.bindTexture(n.TEXTURE_2D,t),n.texImage2D(n.TEXTURE_2D,0,x.internalFormatFloat,1,1,0,x.textureFormatFloat,x.textureTypeFloat,null);var e=n.createFramebuffer();n.bindFramebuffer(n.FRAMEBUFFER,e),n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,t,0);var i=n.checkFramebufferStatus(n.FRAMEBUFFER)===n.FRAMEBUFFER_COMPLETE;return n.bindTexture(n.TEXTURE_2D,null),n.bindFramebuffer(n.FRAMEBUFFER,null),n.deleteTexture(t),n.deleteFramebuffer(e),i}function fs(n){return 2===n&&null!=zo(n).fenceSync}var ps=Object.freeze({callAndCheck:qo,canBeRepresented:Eo,getWebGLErrorMessage:So,getExtensionOrThrow:Io,createVertexShader:Do,createFragmentShader:Oo,createProgram:Bo,linkProgram:Mo,validateProgram:No,createStaticVertexBuffer:Fo,createStaticIndexBuffer:Po,getNumChannels:function(){return 2===Bi().getNumber("WEBGL_VERSION")?1:4},createTexture:Lo,validateTextureSize:Ho,createFramebuffer:Uo,bindVertexBufferToProgramAttribute:Vo,bindTextureUnit:Wo,unbindTextureUnit:function(n,x,t){ns(n,t),qo(n,x,function(){return n.activeTexture(n.TEXTURE0+t)}),qo(n,x,function(){return n.bindTexture(n.TEXTURE_2D,null)})},getProgramUniformLocationOrThrow:Qo,getProgramUniformLocation:Go,bindTextureToProgramUniformSampler:Ko,bindCanvasToFramebuffer:function(n,x){qo(n,x,function(){return n.bindFramebuffer(n.FRAMEBUFFER,null)}),qo(n,x,function(){return n.viewport(0,0,n.canvas.width,n.canvas.height)}),qo(n,x,function(){return n.scissor(0,0,n.canvas.width,n.canvas.height)})},bindColorTextureToFramebuffer:Yo,unbindColorTextureFromFramebuffer:Jo,validateFramebuffer:Xo,getFramebufferErrorMessage:Zo,getBatchDim:xs,getRowsCols:ts,getShapeAs3D:es,getTextureShapeFromLogicalShape:is,isReshapeFree:os,getWebGLMaxTextureSize:ss,resetMaxTextureSize:function(){_o=null},resetMaxTexturesInShader:function(){To=null},getMaxTexturesInShader:hs,getWebGLDisjointQueryTimerVersion:us,hasExtension:as,isWebGLVersionEnabled:gs,isCapableOfRenderingToFloatTexture:ls,isDownloadFloatTextureEnabled:cs,isWebGLFenceEnabled:fs}),ys=Bi();function ms(n){Bi().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(n+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}function bs(n,x){return ao.tidy(n,x)}function zs(n){oo(n).forEach(function(n){return n.dispose()})}function vs(n){return ao.keep(n)}function js(){for(var n=[],x=0;x<arguments.length;x++)n[x]=arguments[x];Bi().getBool("IS_TEST")||console.warn.apply(console,n)}function ws(n,x){var t=n;if(fr(n))return"string"===x?[]:[n.length];if(!Array.isArray(n))return[];for(var e=[];Array.isArray(t)||fr(t)&&"string"!==x;)e.push(t.length),t=t[0];return Array.isArray(n)&&Bi().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&function n(x,t,e){if(e=e||[],Array.isArray(x)||fr(x)){Ji(t.length>0,function(){return"Element arr["+e.join("][")+"] should be a primitive, but is an array of "+x.length+" elements"}),Ji(x.length===t[0],function(){return"Element arr["+e.join("][")+"] should have "+t[0]+" elements, but has "+x.length+" elements"});for(var i=t.slice(1),r=0;r<x.length;++r)n(x[r],i,e.concat(r))}else Ji(0===t.length,function(){return"Element arr["+e.join("][")+"] is a primitive, but should be an array/TypedArray of "+t[0]+" elements"})}(n,e,[]),e}function ks(n,x,t,e){if(null!=n&&("numeric"!==n&&n!==x||"numeric"===n&&"string"===x))throw new Error("Argument '"+t+"' passed to '"+e+"' must be "+n+" tensor, but got "+x+" tensor")}function qs(n,x,t,e){if(void 0===e&&(e="numeric"),n instanceof Kr)return ks(e,n.dtype,x,t),n;var i=vr(n);if("string"!==i&&["bool","int32","float32"].indexOf(e)>=0&&(i=e),ks(e,i,x,t),null==n||!fr(n)&&!Array.isArray(n)&&"number"!=typeof n&&"boolean"!=typeof n&&"string"!=typeof n){var r=null==n?"null":n.constructor.name;throw new Error("Argument '"+x+"' passed to '"+t+"' must be a Tensor or TensorLike, but got '"+r+"'")}var o=ws(n,i);fr(n)||Array.isArray(n)||(n=[n]);var s="string"!==i?qr(n,i,Bi().getBool("DEBUG")):$i(n,[],!0);return ao.makeTensor(s,o,i)}function Cs(n,x,t,e){if(void 0===e&&(e="numeric"),!Array.isArray(n))throw new Error("Argument "+x+" passed to "+t+" must be a `Tensor[]` or `TensorLike[]`");return n.map(function(n,e){return qs(n,x+"["+e+"]",t)},e)}function As(n,x){for(var t=0;t<n.length;++t)if(n[n.length-t-1]!==x-1-t)return!1;return!0}function Es(n,x,t){for(var e=n.length+x.length,i=[],r=0,o=0,s=0;s<e;s++)-1===t.indexOf(s)?i.push(n[r++]):i.push(x[o++]);return i}function Ss(n,x){for(var t=[],e=n.length,i=0;i<e;i++)-1===x.indexOf(i)&&t.push(n[i]);return[t,x.map(function(x){return n[x]})]}function Is(n,x){return Es(n,x.map(function(n){return 1}),x)}function Ds(n,x,t){Ji(As(x,t),function(){return n+" supports only inner-most axes for now. Got axes "+x+" and rank-"+t+" input."})}function Os(n,x){if(As(n,x))return null;for(var t=[],e=0;e<x;++e)-1===n.indexOf(e)&&t.push(e);return n.forEach(function(n){return t.push(n)}),t}function _s(n){return n.map(function(n,x){return[x,n]}).sort(function(n,x){return n[1]-x[1]}).map(function(n){return n[0]})}function Ts(n,x){for(var t=[],e=x-n;e<x;++e)t.push(e);return t}function Rs(n,x){var t=n[0].length;n.forEach(function(n,x){Ji(n.length===t,function(){return"Error in concat"+t+"D: rank of tensors["+x+"] must be the same as the rank of the rest ("+t+")"})}),Ji(x>=0&&x<t,function(){return"Error in concat"+t+"D: axis must be between 0 and "+(t-1)+"."});var e=n[0];n.forEach(function(n,i){for(var r=0;r<t;r++)Ji(r===x||n[r]===e[r],function(){return"Error in concat"+t+"D: Shape of tensors["+i+"] ("+n+") does not match the shape of the rest ("+e+") along the non-concatenated axis "+i+"."})})}function Bs(n,x){for(var t=n[0].slice(),e=1;e<n.length;e++)t[x]+=n[e][x];return t}function Ms(n){var x=Object.keys(n);if(1!==x.length)throw new Error("Please provide an object with a single key (operation name) mapping to a function. Got an object with "+x.length+" keys.");var t=x[0],e=n[t];t.endsWith("_")&&(t=t.substring(0,t.length-1));var i=function(){for(var n=[],x=0;x<arguments.length;x++)n[x]=arguments[x];ao.startScope(t);try{var i=e.apply(void 0,n);return i instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),ao.endScope(i),i}catch(n){throw ao.endScope(null),n}};return Object.defineProperty(i,"name",{value:t,configurable:!0}),i}ys.registerFlag("HAS_WEBGL",function(){return ys.getNumber("WEBGL_VERSION")>0}),ys.registerFlag("WEBGL_VERSION",function(){return gs(2)?2:gs(1)?1:0}),ys.registerFlag("WEBGL_BUFFER_SUPPORTED",function(){return 2===ys.get("WEBGL_VERSION")}),ys.registerFlag("WEBGL_CPU_FORWARD",function(){return!0}),ys.registerFlag("WEBGL_FORCE_F16_TEXTURES",function(){return!1}),ys.registerFlag("WEBGL_PACK",function(){return ys.getBool("HAS_WEBGL")}),ys.registerFlag("WEBGL_PACK_NORMALIZATION",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_PACK_CLIP",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_PACK_DEPTHWISECONV",function(){return!1}),ys.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_PACK_REDUCE",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_LAZILY_UNPACK",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_CONV_IM2COL",function(){return ys.getBool("WEBGL_PACK")}),ys.registerFlag("WEBGL_MAX_TEXTURE_SIZE",function(){return ss(ys.getNumber("WEBGL_VERSION"))}),ys.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",function(){return hs(ys.getNumber("WEBGL_VERSION"))}),ys.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",function(){var n=ys.getNumber("WEBGL_VERSION");return 0===n?0:us(n)}),ys.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",function(){return ys.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&(n=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(n)||/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(n.substr(0,4))));var n}),ys.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",function(){return ls(ys.getNumber("WEBGL_VERSION"))}),ys.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",function(){return!ys.getBool("WEBGL_FORCE_F16_TEXTURES")&&ys.getBool("WEBGL_RENDER_FLOAT32_CAPABLE")}),ys.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",function(){return cs(ys.getNumber("WEBGL_VERSION"))}),ys.registerFlag("WEBGL_FENCE_API_ENABLED",function(){return fs(ys.getNumber("WEBGL_VERSION"))}),ys.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",function(){return ys.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0}),Gr=ms;var Ns=Ms({complex_:function(n,x){var t=qs(n,"real","complex"),e=qs(x,"imag","complex");return Xi(t.shape,e.shape,"real and imag shapes, "+t.shape+" and "+e.shape+", must match in call to tf.complex()."),ao.runKernelFunc(function(n){return n.complex(t,e)},{$real:t,$imag:e})}}),Fs=Ms({real_:function(n){var x=qs(n,"input","real");return ao.runKernelFunc(function(n){return n.real(x)},{$input:x})}}),Ps=Ms({imag_:function(n){var x=qs(n,"input","imag");return ao.runKernelFunc(function(n){return n.imag(x)},{$input:x})}});function Ls(n,x,t){return Hs(n,x,ws(n,t),t)}function Hs(n,x,t,e){if(null==e&&(e=vr(n)),"complex64"===e)throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!fr(n)&&!Array.isArray(n)&&"number"!=typeof n&&"boolean"!=typeof n&&"string"!=typeof n)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!=x){Ir(x);var i=nr(x),r=nr(t);Ji(i===r,function(){return"Based on the provided shape, ["+x+"], the tensor should have "+i+" values but has "+r});for(var o=0;o<t.length;++o){var s=t[o],h=o!==t.length-1||s!==nr(x.slice(o));Ji(t[o]===x[o]||!h,function(){return"Error creating a new Tensor. Inferred shape ("+t+") does not match the provided shape ("+x+"). "})}}return fr(n)||Array.isArray(n)||(n=[n]),x=x||t,n="string"!==e?qr(n,e,Bi().getBool("DEBUG")):$i(n,[],!0),ao.makeTensor(n,x,e)}function Us(n,x){if((fr(n)&&"string"!==x||Array.isArray(n))&&"complex64"!==x)throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if("string"===x&&fr(n)&&!(n instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");return Hs(n,[],[],x)}function Vs(n,x){Zi(n);var t=ws(n,x);if(1!==t.length)throw new Error("tensor1d() requires values to be a flat/TypedArray");return Hs(n,null,t,x)}function Ws(n,x,t){if(Zi(n),null!=x&&2!==x.length)throw new Error("tensor2d() requires shape to have two numbers");var e=ws(n,t);if(2!==e.length&&1!==e.length)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(1===e.length&&null==x)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return Hs(n,x,e,t)}function Qs(n,x,t){if(Zi(n),null!=x&&3!==x.length)throw new Error("tensor3d() requires shape to have three numbers");var e=ws(n,t);if(3!==e.length&&1!==e.length)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(1===e.length&&null==x)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return Hs(n,x,e,t)}function Gs(n,x,t){if(Zi(n),null!=x&&4!==x.length)throw new Error("tensor4d() requires shape to have four numbers");var e=ws(n,t);if(4!==e.length&&1!==e.length)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(1===e.length&&null==x)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return Hs(n,x,e,t)}function Ks(n,x,t){if(Zi(n),null!=x&&5!==x.length)throw new Error("tensor5d() requires shape to have five numbers");var e=ws(n,t);if(5!==e.length&&1!==e.length)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(1===e.length&&null==x)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return Hs(n,x,e,t)}function Ys(n,x,t){if(Zi(n),null!=x&&6!==x.length)throw new Error("tensor6d() requires shape to have six numbers");var e=ws(n,t);if(6!==e.length&&1!==e.length)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(1===e.length&&null==x)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return Hs(n,x=x||e,e,t)}function Js(n,x,t,e){return void 0===x&&(x=!0),ao.makeVariable(n,x,t,e)}function Xs(n,x){if(void 0===x&&(x="float32"),"complex64"===x){var t=Xs(n,"float32"),e=Zs(n,"float32");return Ns(t,e)}var i=Ar(nr(n),x);return ao.makeTensor(i,n,x)}function Zs(n,x){if(void 0===x&&(x="float32"),"complex64"===x){var t=Zs(n,"float32"),e=Zs(n,"float32");return Ns(t,e)}var i=Er(nr(n),x);return ao.makeTensor(i,n,x)}function $s(n,x,t){return ao.runKernelFunc(function(e){return e.fill(n,x,t)},{})}function nh(n,x,t){if(t<=0)throw new Error("The number of values should be positive.");return ao.runKernelFunc(function(e){return e.linspace(n,x,t)},{})}function xh(n,x,t,e){if(void 0===t&&(t=1),void 0===e&&(e="float32"),0===t)throw new Error("Cannot have a step of zero");if(n===x||n<x&&t<0||x<n&&t>1)return Zs([0],e);var i=Er(Math.abs(Math.ceil((x-n)/t)),e);x<n&&1===t&&(t=-1),i[0]=n;for(var r=1;r<i.length;r++)i[r]=i[r-1]+t;return Vs(i,e)}var th=Ms({onesLike_:function(n){var x=qs(n,"x","onesLike");if("complex64"===x.dtype){var t=th(Fs(x)),e=eh(Ps(x));return Ns(t,e)}return ao.runKernelFunc(function(n){return n.onesLike(x)},{$x:x},function(n,x){return{$x:function(){return eh(n)}}})}}),eh=Ms({zerosLike_:function(n){var x=qs(n,"x","zerosLike");return ao.runKernelFunc(function(n){return n.zerosLike(x)},{$x:x},function(n,x){return{$x:function(){return eh(n)}}})}}),ih=Ms({concat_:function(n,x){void 0===x&&(x=0),Ji(n.length>=1,function(){return"Pass at least one tensor to concat"});var t=Cs(n,"tensors","concat");"complex64"===t[0].dtype&&t.forEach(function(n){if("complex64"!==n.dtype)throw new Error("Cannot concatenate complex64 tensors with a tensor\n with dtype "+n.dtype+". ")}),x=hr(x,t[0].shape)[0];var e=Bs(t.map(function(n){return n.shape}),x);if(0===nr(e))return Ls([],e);if(1===(t=t.filter(function(n){return n.size>0})).length)return t[0];var i=t.map(function(n){return n.shape});Rs(i,x);var r=t,o={axis:x};return ao.runKernelFunc(function(n){return n.concat(t,x)},r,function(n){var t=i.map(function(n){return n[x]});return uh(n,t,x).map(function(n){return function(){return n}})},"Concat",o)}}),rh=Ms({concat1d_:function(n){return ih(n,0)}}),oh=Ms({concat2d_:function(n,x){return ih(n,x)}}),sh=Ms({concat3d_:function(n,x){return ih(n,x)}}),hh=Ms({concat4d_:function(n,x){return ih(n,x)}}),uh=Ms({split_:function(n,x,t){void 0===t&&(t=0);var e,i=qs(n,"x","split");return t=hr(t,i.shape)[0],"number"==typeof x?(Ji(i.shape[t]%x==0,function(){return"Number of splits must evenly divide the axis."}),e=new Array(x).fill(i.shape[t]/x)):(Ji(i.shape[t]===x.reduce(function(n,x){return n+x}),function(){return"The sum of sizes must match the size of the axis dimension."}),e=x),ao.runKernelFunc(function(n){return n.split(i,e,t)},{$x:i},function(n){return{$x:function(){return ih(n,t)}}})}});function ah(n,x){return n(x={exports:{}},x.exports),x.exports}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof e.g?e.g:"undefined"!=typeof self&&self;var gh=ah(function(n){!function(n,x,t){function e(n){var x,t=this,e=(x=4022871197,function(n){n=n.toString();for(var t=0;t<n.length;t++){var e=.02519603282416938*(x+=n.charCodeAt(t));e-=x=e>>>0,x=(e*=x)>>>0,x+=4294967296*(e-=x)}return 2.3283064365386963e-10*(x>>>0)});t.next=function(){var n=2091639*t.s0+2.3283064365386963e-10*t.c;return t.s0=t.s1,t.s1=t.s2,t.s2=n-(t.c=0|n)},t.c=1,t.s0=e(" "),t.s1=e(" "),t.s2=e(" "),t.s0-=e(n),t.s0<0&&(t.s0+=1),t.s1-=e(n),t.s1<0&&(t.s1+=1),t.s2-=e(n),t.s2<0&&(t.s2+=1),e=null}function i(n,x){return x.c=n.c,x.s0=n.s0,x.s1=n.s1,x.s2=n.s2,x}function r(n,x){var t=new e(n),r=x&&x.state,o=t.next;return o.int32=function(){return 4294967296*t.next()|0},o.double=function(){return o()+11102230246251565e-32*(2097152*o()|0)},o.quick=o,r&&("object"==typeof r&&i(r,t),o.state=function(){return i(t,{})}),o}x&&x.exports?x.exports=r:t&&t.amd?t(function(){return r}):this.alea=r}(0,n,!1)}),lh=ah(function(n){!function(n,x,t){function e(n){var x=this,t="";x.x=0,x.y=0,x.z=0,x.w=0,x.next=function(){var n=x.x^x.x<<11;return x.x=x.y,x.y=x.z,x.z=x.w,x.w^=x.w>>>19^n^n>>>8},n===(0|n)?x.x=n:t+=n;for(var e=0;e<t.length+64;e++)x.x^=0|t.charCodeAt(e),x.next()}function i(n,x){return x.x=n.x,x.y=n.y,x.z=n.z,x.w=n.w,x}function r(n,x){var t=new e(n),r=x&&x.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var n=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===n);return n},o.int32=t.next,o.quick=o,r&&("object"==typeof r&&i(r,t),o.state=function(){return i(t,{})}),o}x&&x.exports?x.exports=r:t&&t.amd?t(function(){return r}):this.xor128=r}(0,n,!1)}),ch=ah(function(n){!function(n,x,t){function e(n){var x=this,t="";x.next=function(){var n=x.x^x.x>>>2;return x.x=x.y,x.y=x.z,x.z=x.w,x.w=x.v,(x.d=x.d+362437|0)+(x.v=x.v^x.v<<4^n^n<<1)|0},x.x=0,x.y=0,x.z=0,x.w=0,x.v=0,n===(0|n)?x.x=n:t+=n;for(var e=0;e<t.length+64;e++)x.x^=0|t.charCodeAt(e),e==t.length&&(x.d=x.x<<10^x.x>>>4),x.next()}function i(n,x){return x.x=n.x,x.y=n.y,x.z=n.z,x.w=n.w,x.v=n.v,x.d=n.d,x}function r(n,x){var t=new e(n),r=x&&x.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var n=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===n);return n},o.int32=t.next,o.quick=o,r&&("object"==typeof r&&i(r,t),o.state=function(){return i(t,{})}),o}x&&x.exports?x.exports=r:t&&t.amd?t(function(){return r}):this.xorwow=r}(0,n,!1)}),dh=ah(function(n){!function(n,x,t){function e(n){var x=this;x.next=function(){var n,t,e=x.x,i=x.i;return n=e[i],t=(n^=n>>>7)^n<<24,t^=(n=e[i+1&7])^n>>>10,t^=(n=e[i+3&7])^n>>>3,t^=(n=e[i+4&7])^n<<7,n=e[i+7&7],t^=(n^=n<<13)^n<<9,e[i]=t,x.i=i+1&7,t},function(n,x){var t,e=[];if(x===(0|x))e[0]=x;else for(x=""+x,t=0;t<x.length;++t)e[7&t]=e[7&t]<<15^x.charCodeAt(t)+e[t+1&7]<<13;for(;e.length<8;)e.push(0);for(t=0;t<8&&0===e[t];++t);for(8==t?e[7]=-1:e[t],n.x=e,n.i=0,t=256;t>0;--t)n.next()}(x,n)}function i(n,x){return x.x=n.x.slice(),x.i=n.i,x}function r(n,x){null==n&&(n=+new Date);var t=new e(n),r=x&&x.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var n=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===n);return n},o.int32=t.next,o.quick=o,r&&(r.x&&i(r,t),o.state=function(){return i(t,{})}),o}x&&x.exports?x.exports=r:t&&t.amd?t(function(){return r}):this.xorshift7=r}(0,n,!1)}),fh=ah(function(n){!function(n,x,t){function e(n){var x=this;x.next=function(){var n,t,e=x.w,i=x.X,r=x.i;return x.w=e=e+1640531527|0,t=i[r+34&127],n=i[r=r+1&127],t^=t<<13,n^=n<<17,t^=t>>>15,n^=n>>>12,t=i[r]=t^n,x.i=r,t+(e^e>>>16)|0},function(n,x){var t,e,i,r,o,s=[],h=128;for(x===(0|x)?(e=x,x=null):(x+="\0",e=0,h=Math.max(h,x.length)),i=0,r=-32;r<h;++r)x&&(e^=x.charCodeAt((r+32)%x.length)),0===r&&(o=e),e^=e<<10,e^=e>>>15,e^=e<<4,e^=e>>>13,r>=0&&(o=o+1640531527|0,i=0==(t=s[127&r]^=e+o)?i+1:0);for(i>=128&&(s[127&(x&&x.length||0)]=-1),i=127,r=512;r>0;--r)e=s[i+34&127],t=s[i=i+1&127],e^=e<<13,t^=t<<17,e^=e>>>15,t^=t>>>12,s[i]=e^t;n.w=o,n.X=s,n.i=i}(x,n)}function i(n,x){return x.i=n.i,x.w=n.w,x.X=n.X.slice(),x}function r(n,x){null==n&&(n=+new Date);var t=new e(n),r=x&&x.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var n=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===n);return n},o.int32=t.next,o.quick=o,r&&(r.X&&i(r,t),o.state=function(){return i(t,{})}),o}x&&x.exports?x.exports=r:t&&t.amd?t(function(){return r}):this.xor4096=r}(0,n,!1)}),ph=ah(function(n){!function(n,x,t){function e(n){var x=this,t="";x.next=function(){var n=x.b,t=x.c,e=x.d,i=x.a;return n=n<<25^n>>>7^t,t=t-e|0,e=e<<24^e>>>8^i,i=i-n|0,x.b=n=n<<20^n>>>12^t,x.c=t=t-e|0,x.d=e<<16^t>>>16^i,x.a=i-n|0},x.a=0,x.b=0,x.c=-1640531527,x.d=1367130551,n===Math.floor(n)?(x.a=n/4294967296|0,x.b=0|n):t+=n;for(var e=0;e<t.length+20;e++)x.b^=0|t.charCodeAt(e),x.next()}function i(n,x){return x.a=n.a,x.b=n.b,x.c=n.c,x.d=n.d,x}function r(n,x){var t=new e(n),r=x&&x.state,o=function(){return(t.next()>>>0)/4294967296};return o.double=function(){do{var n=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===n);return n},o.int32=t.next,o.quick=o,r&&("object"==typeof r&&i(r,t),o.state=function(){return i(t,{})}),o}x&&x.exports?x.exports=r:t&&t.amd?t(function(){return r}):this.tychei=r}(0,n,!1)}),yh=ah(function(n){!function(x,t){var i,r=this,o=256,s=6,h="random",u=t.pow(o,s),a=t.pow(2,52),g=2*a,l=o-1;function c(n,e,l){var c=[],m=p(function n(x,t){var e,i=[],r=typeof x;if(t&&"object"==r)for(e in x)try{i.push(n(x[e],t-1))}catch(n){}return i.length?i:"string"==r?x:x+"\0"}((e=1==e?{entropy:!0}:e||{}).entropy?[n,y(x)]:null==n?function(){try{var n;return i&&(n=i.randomBytes)?n=n(o):(n=new Uint8Array(o),(r.crypto||r.msCrypto).getRandomValues(n)),y(n)}catch(n){var t=r.navigator,e=t&&t.plugins;return[+new Date,r,e,r.screen,y(x)]}}():n,3),c),b=new d(c),z=function(){for(var n=b.g(s),x=u,t=0;n<a;)n=(n+t)*o,x*=o,t=b.g(1);for(;n>=g;)n/=2,x/=2,t>>>=1;return(n+t)/x};return z.int32=function(){return 0|b.g(4)},z.quick=function(){return b.g(4)/4294967296},z.double=z,p(y(b.S),x),(e.pass||l||function(n,x,e,i){return i&&(i.S&&f(i,b),n.state=function(){return f(b,{})}),e?(t[h]=n,x):n})(z,m,"global"in e?e.global:this==t,e.state)}function d(n){var x,t=n.length,e=this,i=0,r=e.i=e.j=0,s=e.S=[];for(t||(n=[t++]);i<o;)s[i]=i++;for(i=0;i<o;i++)s[i]=s[r=l&r+n[i%t]+(x=s[i])],s[r]=x;(e.g=function(n){for(var x,t=0,i=e.i,r=e.j,s=e.S;n--;)x=s[i=l&i+1],t=t*o+s[l&(s[i]=s[r=l&r+x])+(s[r]=x)];return e.i=i,e.j=r,t})(o)}function f(n,x){return x.i=n.i,x.j=n.j,x.S=n.S.slice(),x}function p(n,x){for(var t,e=n+"",i=0;i<e.length;)x[l&i]=l&(t^=19*x[l&i])+e.charCodeAt(i++);return y(x)}function y(n){return String.fromCharCode.apply(0,n)}if(t["seed"+h]=c,p(t.random(),x),n.exports){n.exports=c;try{i=e(8082)}catch(n){}}}([],Math)});yh.alea=gh,yh.xor128=lh,yh.xorwow=ch,yh.xorshift7=dh,yh.xor4096=fh,yh.tychei=ph;var mh=yh.alea,bh=function(){function n(n,x,t,e,i){this.mean=n,this.stdDev=x,this.dtype=t,this.nextVal=NaN,this.truncated=e,this.truncated&&(this.upper=this.mean+2*this.stdDev,this.lower=this.mean-2*this.stdDev);var r=i||Math.random();this.random=mh(r.toString())}return n.prototype.nextValue=function(){if(!isNaN(this.nextVal)){var n=this.nextVal;return this.nextVal=NaN,n}for(var x,t,e=!1;!e;){var i=void 0,r=void 0,o=void 0;do{o=(i=2*this.random()-1)*i+(r=2*this.random()-1)*r}while(o>=1||0===o);var s=Math.sqrt(-2*Math.log(o)/o);x=this.mean+this.stdDev*i*s,t=this.mean+this.stdDev*r*s,this.truncated&&!this.isValidTruncated(x)||(e=!0)}return this.truncated&&!this.isValidTruncated(t)||(this.nextVal=this.convertValue(t)),this.convertValue(x)},n.prototype.convertValue=function(n){return null==this.dtype||"float32"===this.dtype?n:Math.round(n)},n.prototype.isValidTruncated=function(n){return n<=this.upper&&n>=this.lower},n}(),zh=function(){function n(n,x,t,e){this.alpha=n,this.beta=1/x,this.dtype=t;var i=e||Math.random();this.randu=mh(i.toString()),this.randn=new bh(0,1,t,!1,this.randu()),this.d=n<1?n+2/3:n-1/3,this.c=1/Math.sqrt(9*this.d)}return n.prototype.nextValue=function(){for(var n,x,t,e,i,r;;){do{e=this.randn.nextValue(),r=1+this.c*e}while(r<=0);if(r*=r*r,x=1-.331*(n=e*e)*n,t=.5*n+this.d*(1-r+Math.log(r)),(i=this.randu())<x||Math.log(i)<t)break}return r=1/this.beta*this.d*r,this.alpha<1&&(r*=Math.pow(this.randu(),1/this.alpha)),this.convertValue(r)},n.prototype.convertValue=function(n){return"float32"===this.dtype?n:Math.round(n)},n}(),vh=function(){function n(n,x,t,e){var i=this;if(void 0===n&&(n=0),void 0===x&&(x=1),this.canReturnFloat=function(){return null==i.dtype||"float32"===i.dtype},this.min=n,this.range=x-n,this.dtype=t,null==e&&(e=Math.random()),"number"==typeof e&&(e=e.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error("The difference between "+n+" - "+x+" <= 1 and dtype is not float");this.random=mh(e)}return n.prototype.convertValue=function(n){return this.canReturnFloat()?n:Math.round(n)},n.prototype.nextValue=function(){return this.convertValue(this.min+this.range*this.random())},n}();function jh(n,x,t){return void 0===x&&(x="float32"),x=x||"float32",Ir(n),new Vr(n,x,t)}function wh(n,x){void 0===x&&(x=!1),console.log(n.toString(x))}var kh=Ms({batchToSpaceND_:function(n,x,t){var e=qs(n,"x","batchToSpaceND"),i=x.reduce(function(n,x){return n*x});return Ji(e.rank>=1+x.length,function(){return"input rank is "+e.rank+" but should be > than blockShape.length "+x.length}),Ji(t.length===x.length,function(){return"crops.length is "+t.length+" but should be equal to blockShape.length "+x.length}),Ji(e.shape[0]%i==0,function(){return"input tensor batch is "+e.shape[0]+" but is not divisible by the product of the elements of blockShape "+x.join(" * ")+" === "+i}),ao.runKernelFunc(function(n){return n.batchToSpaceND(e,x,t)},{$x:e},function(n){return{$x:function(){return n.spaceToBatchND(x,t)}}})}}),qh=Ms({broadcastTo_:function(n,x){var t=qs(n,"broadcastTo","x"),e=t.shape;if(x.some(function(n){return!(n>0)||n%1!=0}))throw new Error("broadcastTo(): Invalid broadcast shape ["+x+"].");if(x.length<t.rank)throw new Error("broadcastTo(): shape.length="+x.length+" < input.rank="+t.rank+".");if(x.length>t.rank){for(var i=t.shape.slice();i.length<x.length;)i.unshift(1);t=t.reshape(i)}for(var r=Array.from(x),o=x.length-1;o>=0;o--)if(t.shape[o]===x[o])r[o]=1;else if(1!==t.shape[o])throw new Error("broadcastTo(): ["+e+"] cannot be broadcast to ["+x+"].");var s=r.map(function(n,x){return n>1?x:-1}).filter(function(n){return n>=0});return 0===s.length?t.clone():ao.runKernelFunc(function(n){return n.tile(t,r)},{input:t},function(n){return{input:function(){return n.sum(s,!0)}}})}}),Ch=Ms({cast_:function(n,x){var t=qs(n,"x","cast");if(!cr(x))throw new Error("Failed to cast to unknown dtype "+x);if("string"===x&&"string"!==t.dtype||"string"!==x&&"string"===t.dtype)throw new Error("Only strings can be casted to strings");var e={dtype:x};return ao.runKernelFunc(function(n){return n.cast(t,x)},{x:t},function(n){return{x:function(){return n.clone()}}},"Cast",e)}}),Ah=Ms({clone_:function(n){var x=qs(n,"x","clone",null);return ao.runKernelFunc(function(){return ao.makeTensorFromDataId(x.dataId,x.shape,x.dtype)},{$x:x},function(n){return{$x:function(){return n.toFloat()}}})}}),Eh=Ms({cumsum_:function(n,x,t,e){void 0===x&&(x=0),void 0===t&&(t=!1),void 0===e&&(e=!1);var i=qs(n,"x","cumsum"),r=Os([x|=0],i.rank),o=i;null!=r&&(o=i.transpose(r));var s=Ts(1,i.rank)[0],h=ao.runKernelFunc(function(n){return n.cumsum(o,s,t,e)},{permutedX:o},function(n){return{permutedX:function(){return n.cumsum(x,t,!e)}}});return null!=r&&(h=h.transpose(r)),h}}),Sh=Ms({depthToSpace_:function(n,x,t){void 0===t&&(t="NHWC");var e=qs(n,"x","depthToSpace"),i="NHWC"===t?e.shape[1]:e.shape[2],r="NHWC"===t?e.shape[2]:e.shape[3],o="NHWC"===t?e.shape[3]:e.shape[1];return Ji(i*x>=0,function(){return"Negative dimension size caused by overflow when multiplying\n "+i+" and "+x+" for depthToSpace with input shape\n "+e.shape}),Ji(r*x>=0,function(){return"Negative dimension size caused by overflow when multiplying\n "+r+" and "+x+" for depthToSpace with input shape\n "+e.shape}),Ji(o%(x*x)==0,function(){return"Dimension size must be evenly divisible by "+x*x+" but is "+o+" for depthToSpace with input shape "+e.shape}),ao.runKernelFunc(function(n){return n.depthToSpace(e,x,t)},{$x:e})}}),Ih=Ms({expandDims_:function(n,x){void 0===x&&(x=0);var t=qs(n,"x","expandDims",null);Ji(x<=t.rank,function(){return"Axis must be <= rank of the tensor"});var e=t.shape.slice();return x<0&&(Ji(-(t.rank+1)<=x,function(){return"Axis must be in the interval ["+-(t.rank+1)+", "+t.rank+"]"}),x=t.rank+x+1),e.splice(x,0,1),Uh(t,e)}}),Dh=Ms({eye_:function(n,x,t,e){void 0===e&&(e="float32"),null==x&&(x=n);for(var i=jh([n,x],e),r=n<=x?n:x,o=0;o<r;++o)i.set(1,o,o);var s=i.toTensor().as2D(n,x);if(null==t)return s;if(1===t.length)return Gh(Ih(s,0),[t[0],1,1]);if(2===t.length)return Gh(Ih(Ih(s,0),0),[t[0],t[1],1,1]);if(3===t.length)return Gh(Ih(Ih(Ih(s,0),0),0),[t[0],t[1],t[2],1,1]);throw new Error("eye() currently supports only 1D and 2D batchShapes, but received "+t.length+"D.")}}),Oh=Ms({multinomial_:function(n,x,t,e){void 0===e&&(e=!1);var i=qs(n,"logits","multinomial"),r=i.size,o=i.rank;if(r<2)throw new Error("Error in multinomial: you need at least 2 outcomes, but got "+r+".");if(o>2)throw new Error("Rank of probabilities must be 1 or 2, but is "+o);t=t||Math.random();var s=1===o?i.as2D(1,-1):i,h=ao.runKernelFunc(function(n){return n.multinomial(s,e,x,t)},{logits2D:s});return 1===o?h.as1D():h}}),_h=Ms({oneHot_:function(n,x,t,e){if(void 0===t&&(t=1),void 0===e&&(e=0),x<2)throw new Error("Error in oneHot: depth must be >=2, but it is "+x);var i=qs(n,"indices","oneHot","int32"),r=i.shape.concat([x]);return i=i.flatten(),ao.runKernelFunc(function(n){return n.oneHot(i,x,t,e)},{$indices:i},function(n){return{$indices:function(){return Zs(i.shape,"float32")}}}).reshape(r)}}),Th=Ms({pad_:function(n,x,t){void 0===t&&(t=0);var e=qs(n,"x","pad");if(0===e.rank)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");var i={paddings:x,constantValue:t};return ao.runKernelFunc(function(n){return n.pad(e,x,t)},{x:e},function(n){var t=x.map(function(n){return n[0]});return{x:function(){return n.slice(t,e.shape)}}},"PadV2",i)}}),Rh=Ms({pad1d_:function(n,x,t){return void 0===t&&(t=0),Ji(2===x.length,function(){return"Invalid number of paddings. Must be length of 2."}),Th(n,[x],t)}}),Bh=Ms({pad2d_:function(n,x,t){return void 0===t&&(t=0),Ji(2===x.length&&2===x[0].length&&2===x[1].length,function(){return"Invalid number of paddings. Must be length of 2 each."}),Th(n,x,t)}}),Mh=Ms({pad3d_:function(n,x,t){return void 0===t&&(t=0),Ji(3===x.length&&2===x[0].length&&2===x[1].length&&2===x[2].length,function(){return"Invalid number of paddings. Must be length of 2 each."}),Th(n,x,t)}}),Nh=Ms({pad4d_:function(n,x,t){return void 0===t&&(t=0),Ji(4===x.length&&2===x[0].length&&2===x[1].length&&2===x[2].length&&2===x[3].length,function(){return"Invalid number of paddings. Must be length of 2 each."}),Th(n,x,t)}}),Fh=Ms({rand_:function(n,x,t){var e=nr(n),i=null;if(null==t||"float32"===t)i=new Float32Array(e);else if("int32"===t)i=new Int32Array(e);else{if("bool"!==t)throw new Error("Unknown data type "+t);i=new Uint8Array(e)}for(var r=0;r<e;r++)i[r]=x();return ao.makeTensor(i,n,t)}}),Ph=Ms({randomNormal_:function(n,x,t,e,i){if(void 0===x&&(x=0),void 0===t&&(t=1),null!=e&&"bool"===e)throw new Error("Unsupported data type "+e);for(var r=new bh(x,t,e,!1,i),o=jh(n,e),s=0;s<o.values.length;s++)o.values[s]=r.nextValue();return o.toTensor()}}),Lh=Ms({randomGamma_:function(n,x,t,e,i){if(void 0===t&&(t=1),void 0===e&&(e="float32"),null==t&&(t=1),null==e&&(e="float32"),"float32"!==e&&"int32"!==e)throw new Error("Unsupported data type "+e);for(var r=new zh(x,t,e,i),o=jh(n,e),s=0;s<o.values.length;s++)o.values[s]=r.nextValue();return o.toTensor()}}),Hh=Ms({randomUniform_:function(n,x,t,e,i){void 0===x&&(x=0),void 0===t&&(t=1),void 0===e&&(e="float32");for(var r=jh(n,e),o=new vh(x,t,null,i),s=0;s<r.values.length;s++)r.values[s]=o.nextValue();return r.toTensor()}}),Uh=Ms({reshape_:function(n,x){var t=qs(n,"x","reshape",null);x=sr(x,t.size),Ji(t.size===nr(x),function(){return"new shape and old shape must have the same number of elements."});var e={shape:x};return ao.runKernelFunc(function(n){return n.reshape(t,x)},{x:t},function(n){return{x:function(){return n.reshape(t.shape)}}},"Reshape",e)}}),Vh=Ms({spaceToBatchND_:function(n,x,t){var e=qs(n,"x","spaceToBatchND");return Ji(e.rank>=1+x.length,function(){return"input rank "+e.rank+" should be > than [blockShape] "+x.length}),Ji(t.length===x.length,function(){return"paddings.shape[0] "+t.length+" must be equal to [blockShape] "+x.length}),Ji(e.shape.reduce(function(n,e,i){return i>0&&i<=x.length?n&&(e+t[i-1][0]+t[i-1][1])%x[i-1]==0:n},!0),function(){return"input spatial dimensions "+e.shape.slice(1)+" with paddings "+t.toString()+" must be divisible by blockShapes "+x.toString()}),ao.runKernelFunc(function(n){return n.spaceToBatchND(e,x,t)},{$x:e},function(n){return{$x:function(){return n.batchToSpaceND(x,t)}}})}}),Wh=Ms({squeeze_:function(n,x){var t=qs(n,"x","squeeze");return Uh(t,ur(t.shape,x).newShape)}}),Qh=Ms({stack_:function(n,x){void 0===x&&(x=0);var t=Cs(n,"tensors","stack");if(Ji(t.length>=1,function(){return"Pass at least one tensor to tf.stack"}),1===t.length)return t[0].expandDims(x);var e=t[0].rank,i=t[0].shape,r=t[0].dtype;Ji(x<=e,function(){return"Axis must be <= rank of the tensor"}),t.forEach(function(n){Xi(i,n.shape,"All tensors passed to stack must have matching shapes")}),t.forEach(function(n){Ji(r===n.dtype,function(){return"All tensors passed to stack must have matching dtypes"})});var o=t.map(function(n){return n.expandDims(x)});return ih(o,x)}}),Gh=Ms({tile_:function(n,x){var t=qs(n,"x","tile",null);Ji(t.rank===x.length,function(){return"Error in transpose: rank of input "+t.rank+" must match length of reps "+x+"."});var e=[t],i={reps:x};return ao.runKernelFunc(function(n,e){var i=n.tile(t,x);return e([t]),i},{x:t},function(n,t){var e=t[0];return{x:function(){var t=eh(e);if(1===e.rank)for(var i=0;i<x[0];++i)t=t.add(n.slice([i*e.shape[0]],[e.shape[0]]));else if(2===e.rank)for(i=0;i<x[0];++i)for(var r=0;r<x[1];++r)t=t.add(n.slice([i*e.shape[0],r*e.shape[1]],[e.shape[0],e.shape[1]]));else if(3===e.rank)for(i=0;i<x[0];++i)for(r=0;r<x[1];++r)for(var o=0;o<x[2];++o)t=t.add(n.slice([i*e.shape[0],r*e.shape[1],o*e.shape[2]],[e.shape[0],e.shape[1],e.shape[2]]));else{if(4!==e.rank)throw new Error("Gradient for tile operation is not implemented for rank-"+e.rank+" tensors yet.");for(i=0;i<x[0];++i)for(r=0;r<x[1];++r)for(o=0;o<x[2];++o)for(var s=0;s<x[3];++s)t=t.add(n.slice([i*e.shape[0],r*e.shape[1],o*e.shape[2],s*e.shape[3]],[e.shape[0],e.shape[1],e.shape[2],e.shape[3]]))}return t}}},"Tile",i,e)}}),Kh=Ms({truncatedNormal_:function(n,x,t,e,i){if(void 0===x&&(x=0),void 0===t&&(t=1),null!=e&&"bool"===e)throw new Error("Unsupported data type "+e);for(var r=new bh(x,t,e,!0,i),o=jh(n,e),s=0;s<o.values.length;s++)o.values[s]=r.nextValue();return o.toTensor()}}),Yh=Ms({unstack_:function(n,x){void 0===x&&(x=0),x=x||0;var t=qs(n,"x","unstack");Ji(x>=-t.shape.length&&x<t.shape.length,function(){return"Axis = "+x+" is not in [-"+t.shape.length+", "+t.shape.length+")"}),x<0&&(x+=t.shape.length);var e={axis:x};return ao.runKernelFunc(function(n){return n.unstack(t,x)},{x:t},function(n){return{x:function(){return Qh(n,x)}}},"Unpack",e)}}),Jh=function(n,x){return Oi(this,void 0,void 0,function(){var t,e,i,r,o,s,h,u,a,g;return _i(this,function(l){switch(l.label){case 0:return t=qs(n,"x","setdiff1d"),e=qs(x,"y","setdiff1d"),Ji(t.dtype===e.dtype,function(){return"x and y should have the same dtype, but got x ("+t.dtype+") and y ("+e.dtype+")."}),Ji(1===t.rank,function(){return"x should be 1D tensor, but got x ("+t.shape+")."}),Ji(1===e.rank,function(){return"y should be 1D tensor, but got y ("+e.shape+")."}),[4,t.data()];case 1:return i=l.sent(),[4,e.data()];case 2:for(r=l.sent(),o=new Set(r),s=0,a=0;a<i.length;a++)o.has(i[a])||s++;for(h=new Vr([s],t.dtype),u=new Vr([s],"int32"),a=0,g=0;a<i.length;a++)o.has(i[a])||(h.values[g]=i[a],u.values[g]=a,g++);return[2,[h.toTensor(),u.toTensor()]]}})})};function Xh(n,x,t,e){void 0===e&&(e=!0);var i=[];if(e)(i=i.concat(x.slice(0))).push(n[0]/t),i=i.concat(n.slice(1));else{i=i.concat(n[0]);for(var r=x.length,o=0;o<r;++o)i=i.concat([n[o+1]/x[o],x[o]]);i=i.concat(n.slice(r+1))}return i}function Zh(n,x,t){void 0===t&&(t=!0);var e=[];if(t){e.push(x);for(var i=x+1;i<n;++i)i<=2*x?(e.push(i),e.push(i-(x+1))):e.push(i)}else{var r=[],o=[];for(i=1;i<n;++i)i>=2*x+1||i%2==1?o.push(i):r.push(i);e.push.apply(e,r),e.push(0),e.push.apply(e,o)}return e}function $h(n,x,t,e){void 0===e&&(e=!0);var i=[];e?i.push(n[0]/t):i.push(n[0]*t);for(var r=1;r<n.length;++r)r<=x.length?e?i.push(x[r-1]*n[r]):i.push(n[r]/x[r-1]):i.push(n[r]);return i}function nu(n,x){for(var t=[0],e=0;e<x;++e)t.push(n[e][0]);return t}function xu(n,x,t){for(var e=n.slice(0,1),i=0;i<t;++i)e.push(n[i+1]-x[i][0]-x[i][1]);return e}function tu(n,x){if(n.rank<1)throw new Error("tf.gatherND() expects the input to be rank 1 or higher, but the rank was "+n.rank+".");if(x.rank<1)throw new Error("tf.gatherND() expects the indices to be rank 1 or higher, but the rank was "+x.rank+".");if("int32"!==x.dtype)throw new Error("tf.gatherND() expects the indices to be int32 type, but the dtype was "+x.dtype+".");if(x.shape[x.rank-1]>n.rank)throw new Error("index innermost dimension length must be <= tensor rank; saw: "+x.shape[x.rank-1]+" vs. "+n.rank);if(0===n.size)throw new Error("Requested more than 0 entries, but input is empty. Input shape: "+n.shape+".");for(var t=x.shape,e=t[t.length-1],i=1,r=0;r<t.length-1;++r)i*=t[r];var o=n.shape,s=t.slice();s.pop();var h=1;for(r=e;r<n.rank;++r)h*=o[r],s.push(o[r]);var u=kr(n.shape).map(function(n){return n/h}).concat([1]).slice(0,e);return[s,i,h,u]}Object.freeze({prepareAndValidate:tu});var eu=30;function iu(n){return n<=eu?n:wr(n,Math.floor(Math.sqrt(n)))}function ru(n,x,t){var e=x.rank>1?x.shape[x.rank-1]:1,i=x.rank>1?x.rank-1:1,r="Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: "+t.shape+", indices.shape: "+x.shape+", shape: "+n+", sliceDim: "+e+", and batchDim: "+i+".";if(t.rank<i)throw new Error(r+" update.rank < "+i+". ");if(n.length<e+(t.rank-i))throw new Error(r+" Output shape length < "+(e+(t.rank-i)));if(t.rank!==i+n.length-e)throw new Error(r+" update.rank != "+(i+n.length-e));for(var o=0;o<i;++o)if(t.shape[o]!==x.shape[o])throw new Error(r+" updates.shape["+o+"] ("+t.shape[o]+") != indices.shape["+o+"] ("+x.shape[o]+").");for(o=0;o<t.rank-i;++o)if(t.shape[o+i]!==n[o+e])throw new Error(r+" updates.shape["+(o+i)+"] ("+t.shape[o+i]+") != shape["+(o+i)+"] ("+n[o+i]+")")}function ou(n,x,t){if(x.rank<1)throw new Error("tf.scatterND() expects the indices to be rank 1 or higher, but the rank was "+x.rank+".");if(n.rank<1)throw new Error("tf.scatterND() expects the updates to be rank 1 or higher, but the rank was "+n.rank+".");if("int32"!==x.dtype)throw new Error("The dtype of 'indices' should be int32, but got dtype: "+x.dtype);if(t.length<1)throw new Error("Output rank must be greater or equal to 1, but got shape: "+t);if(0===t.length){if(0===x.size)throw new Error("Indices specified for empty output. indices shape: "+x.shape);if(0===n.size)throw new Error("Updates specified for empty output. updates shape: "+n.shape)}ru(t,x,n)}function su(n,x,t){for(var e=x.shape.length,i=e>1?x.shape[e-1]:1,r=t.length,o=1,s=i;s<r;++s)o*=t[s];var h=i<1?1:i;return{sliceRank:i,numUpdates:nr(x.shape)/h,sliceSize:o,strides:kr(t.slice(0,i)).concat([1]),outputSize:nr(t)}}Object.freeze({validateUpdateShape:ru,validateInput:ou,calculateShapes:su});function hu(n,x,t){Ji(n.rank===x.length,function(){return"Error in slice"+n.rank+"D: Length of begin "+x+" must match the rank of the array ("+n.rank+")."}),Ji(n.rank===t.length,function(){return"Error in slice"+n.rank+"D: Length of size "+t+" must match the rank of the array ("+n.rank+")."});for(var e=function(e){Ji(x[e]+t[e]<=n.shape[e],function(){return"Error in slice"+n.rank+"D: begin["+e+"] + size["+e+"] ("+(x[e]+t[e])+") would overflow input.shape["+e+"] ("+n.shape[e]+")"})},i=0;i<n.rank;++i)e(i)}function uu(n){for(var x=[],t=0;n>0;)1&n&&x.push(t),n/=2,t++;return x}function au(n,x,t){for(var e=[],i=0;i<n.length;i++)e[i]=Math.ceil((x[i]-n[i])/t[i]);return e}function gu(n,x,t,e,i){var r=x[i],o=t[i]||1;(n&1<<i||null==r)&&(r=o>0?Number.MIN_SAFE_INTEGER:Number.MAX_SAFE_INTEGER);var s=e[i];return r<0&&(r+=s),Gi(0,r,s-1)}function lu(n,x,t,e,i){var r=x[i],o=t[i]||1;(n&1<<i||null==r)&&(r=o>0?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER);var s=e[i];return r<0&&(r+=s),o>0?Gi(0,r,s):Gi(-1,r,s-1)}function cu(n,x,t){for(var e=t.length,i=0;i<t.length;i++)if(t[i]>1){e=i;break}for(i=e+1;i<t.length;i++)if(x[i]>0||t[i]!==n[i])return!1;return!0}function du(n,x){for(var t=n.length>0?n[n.length-1]:1,e=0;e<n.length-1;e++)t+=n[e]*x[e];return t}Object.freeze({assertParamsValid:hu,maskToAxes:uu,computeOutShape:au,startForAxis:gu,stopForAxis:lu,isSliceContinous:cu,computeFlatOffset:du});function fu(n,x){Ji(jr(n),function(){return"The f passed in variableGrads(f) must be a function"}),Ji(null==x||Array.isArray(x)&&x.every(function(n){return n instanceof no}),function(){return"The varList passed in variableGrads(f, varList) must be an array of variables"});var t=null!=x;if(!t)for(var e in x=[],ao.registeredVariables)x.push(ao.registeredVariables[e]);var i=t?x.filter(function(n){return!n.trainable}):null,r=x.length;Ji((x=x.filter(function(n){return n.trainable})).length>0,function(){return"variableGrads() expects at least one of the input variables to be trainable, but none of the "+r+" variables is trainable."});var o=ao.gradients(n,x,null,!0),s=o.value,h=o.grads;Ji(h.some(function(n){return null!=n}),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()."}),Ji(0===s.rank,function(){return"The f passed in variableGrads(f) must return a scalar, but it returned a rank-"+s.rank+" tensor"});var u={};return x.forEach(function(n,x){null!=h[x]&&(u[n.name]=h[x])}),null!=i&&i.forEach(function(n){return u[n.name]=null}),{value:s,grads:u}}function pu(n){return ao.customGrad(n)}var yu=Ms({softmax_:function(n,x){void 0===x&&(x=-1);var t=qs(n,"logits","softmax","float32");if(-1===x&&(x=t.rank-1),x!==t.rank-1)throw Error("Softmax along a non-last dimension is not yet supported. Logits was rank "+t.rank+" and dim was "+x);return ao.runKernelFunc(function(n,e){var i=n.softmax(t,x);return e([i]),i},{logits:t},function(n,t){var e=t[0],i=n.mul(e);return{logits:function(){return i.sub(i.sum([x],!0).mul(e))}}},"Softmax",{dim:x},[],[!0])}}),mu=Ms({logSoftmax_:function(n,x){void 0===x&&(x=-1);var t=qs(n,"logits","logSoftmax");if(-1===x&&(x=t.rank-1),x!==t.rank-1)throw Error("Log Softmax along a non-last dimension is not yet supported. Logits was rank "+t.rank+" and axis was "+x);return pu(function(n,t){var e=n.max(x,!0),i=n.sub(e),r=i.toFloat().sub(i.exp().sum(x,!0).log());return t([r]),{value:r,gradFunc:function(n,t){var e=t[0].exp();return n.sub(n.sum(x,!0).mul(e))}}})(t)}}),bu=function(){function n(n,x){this.backend=n,this.dataMover=x,this.data=new WeakMap,this.dataIdsCount=0}return n.prototype.get=function(n){return this.data.has(n)||this.dataMover.moveData(this.backend,n),this.data.get(n)},n.prototype.set=function(n,x){this.dataIdsCount++,this.data.set(n,x)},n.prototype.has=function(n){return this.data.has(n)},n.prototype.delete=function(n){return this.dataIdsCount--,this.data.delete(n)},n.prototype.numDataIds=function(){return this.dataIdsCount},n}(),zu=function(){function n(){}return n.prototype.time=function(n){return vu("time")},n.prototype.read=function(n){return vu("read")},n.prototype.readSync=function(n){return vu("readSync")},n.prototype.numDataIds=function(){return vu("numDataIds")},n.prototype.disposeData=function(n){return vu("disposeData")},n.prototype.write=function(n,x,t){return vu("write")},n.prototype.move=function(n,x,t,e){return vu("move")},n.prototype.memory=function(){return vu("memory")},n.prototype.floatPrecision=function(){return vu("floatPrecision")},n.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},n.prototype.batchMatMul=function(n,x,t,e){return vu("batchMatMul")},n.prototype.fusedBatchMatMul=function(n){return n.a,n.b,n.transposeA,n.transposeB,n.bias,n.activation,n.preluActivationWeights,vu("fusedBatchMatMul")},n.prototype.slice=function(n,x,t){return vu("slice")},n.prototype.stridedSlice=function(n,x,t,e){return vu("stridedSlice")},n.prototype.unstack=function(n,x){return vu("unstack")},n.prototype.reverse=function(n,x){return vu("reverse")},n.prototype.concat=function(n,x){return vu("concat")},n.prototype.neg=function(n){return vu("neg")},n.prototype.add=function(n,x){return vu("add")},n.prototype.addN=function(n){return vu("addN")},n.prototype.subtract=function(n,x){return vu("subtract")},n.prototype.multiply=function(n,x){return vu("multiply")},n.prototype.realDivide=function(n,x){return vu("realDivide")},n.prototype.floorDiv=function(n,x){return vu("floorDiv")},n.prototype.sum=function(n,x){return vu("sum")},n.prototype.prod=function(n,x){return vu("prod")},n.prototype.unsortedSegmentSum=function(n,x,t){return vu("unsortedSegmentSum")},n.prototype.argMin=function(n,x){return vu("argMin")},n.prototype.argMax=function(n,x){return vu("argMax")},n.prototype.equal=function(n,x){return vu("equal")},n.prototype.notEqual=function(n,x){return vu("notEqual")},n.prototype.less=function(n,x){return vu("less")},n.prototype.lessEqual=function(n,x){return vu("lessEqual")},n.prototype.greater=function(n,x){return vu("greater")},n.prototype.greaterEqual=function(n,x){return vu("greaterEqual")},n.prototype.logicalNot=function(n){return vu("logicalNot")},n.prototype.logicalAnd=function(n,x){return vu("logicalAnd")},n.prototype.logicalOr=function(n,x){return vu("logicalOr")},n.prototype.where=function(n){return vu("where")},n.prototype.select=function(n,x,t){return vu("select")},n.prototype.topk=function(n,x,t){return vu("topk")},n.prototype.min=function(n,x){return vu("min")},n.prototype.minimum=function(n,x){return vu("minimum")},n.prototype.mod=function(n,x){return vu("mod")},n.prototype.max=function(n,x){return vu("max")},n.prototype.maximum=function(n,x){return vu("maximum")},n.prototype.all=function(n,x){return vu("all")},n.prototype.any=function(n,x){return vu("any")},n.prototype.squaredDifference=function(n,x){return vu("squaredDifference")},n.prototype.ceil=function(n){return vu("ceil")},n.prototype.floor=function(n){return vu("floor")},n.prototype.round=function(n){return vu("round")},n.prototype.sign=function(n){return vu("sign")},n.prototype.isNaN=function(n){return vu("isNaN")},n.prototype.isInf=function(n){return vu("isInf")},n.prototype.isFinite=function(n){return vu("isFinite")},n.prototype.pow=function(n,x){return vu("pow")},n.prototype.exp=function(n){return vu("exp")},n.prototype.expm1=function(n){return vu("expm1")},n.prototype.softmax=function(n,x){return vu("softmax")},n.prototype.log=function(n){return vu("log")},n.prototype.log1p=function(n){return vu("log1p")},n.prototype.sqrt=function(n){return vu("sqrt")},n.prototype.rsqrt=function(n){return vu("rsqrt")},n.prototype.square=function(n){return vu("square")},n.prototype.reciprocal=function(n){return vu("reciprocal")},n.prototype.relu=function(n){return vu("relu")},n.prototype.relu6=function(n){return vu("relu6")},n.prototype.prelu=function(n,x){return vu("prelu")},n.prototype.elu=function(n){return vu("elu")},n.prototype.eluDer=function(n,x){return vu("eluDer")},n.prototype.selu=function(n){return vu("selu")},n.prototype.int=function(n){return vu("int")},n.prototype.clip=function(n,x,t){return vu("clip")},n.prototype.abs=function(n){return vu("abs")},n.prototype.complexAbs=function(n){return vu("complexAbs")},n.prototype.sigmoid=function(n){return vu("sigmoid")},n.prototype.softplus=function(n){return vu("softplus")},n.prototype.sin=function(n){return vu("sin")},n.prototype.cos=function(n){return vu("cos")},n.prototype.tan=function(n){return vu("tan")},n.prototype.asin=function(n){return vu("asin")},n.prototype.acos=function(n){return vu("acos")},n.prototype.atan=function(n){return vu("atan")},n.prototype.atan2=function(n,x){return vu("atan2")},n.prototype.sinh=function(n){return vu("sinh")},n.prototype.cosh=function(n){return vu("cosh")},n.prototype.tanh=function(n){return vu("tanh")},n.prototype.asinh=function(n){return vu("asinh")},n.prototype.acosh=function(n){return vu("acosh")},n.prototype.atanh=function(n){return vu("atanh")},n.prototype.erf=function(n){return vu("erf")},n.prototype.step=function(n,x){return vu("step")},n.prototype.fusedConv2d=function(n){return n.input,n.filter,n.convInfo,n.bias,n.activation,n.preluActivationWeights,vu("fusedConv2d")},n.prototype.conv2d=function(n,x,t){return vu("conv2d")},n.prototype.conv2dDerInput=function(n,x,t){return vu("conv2dDerInput")},n.prototype.conv2dDerFilter=function(n,x,t){return vu("conv2dDerFilter")},n.prototype.fusedDepthwiseConv2D=function(n){return n.input,n.filter,n.convInfo,n.bias,n.activation,n.preluActivationWeights,vu("fusedDepthwiseConv2D")},n.prototype.depthwiseConv2D=function(n,x,t){return vu("depthwiseConv2D")},n.prototype.depthwiseConv2DDerInput=function(n,x,t){return vu("depthwiseConv2DDerInput")},n.prototype.depthwiseConv2DDerFilter=function(n,x,t){return vu("depthwiseConv2DDerFilter")},n.prototype.conv3d=function(n,x,t){return vu("conv3d")},n.prototype.conv3dDerInput=function(n,x,t){return vu("conv3dDerInput")},n.prototype.conv3dDerFilter=function(n,x,t){return vu("conv3dDerFilter")},n.prototype.maxPool=function(n,x){return vu("maxPool")},n.prototype.maxPoolBackprop=function(n,x,t,e){return vu("maxPoolBackprop")},n.prototype.avgPool=function(n,x){return vu("avgPool")},n.prototype.avgPoolBackprop=function(n,x,t){return vu("avgPoolBackprop")},n.prototype.avgPool3d=function(n,x){return vu("avgPool3d")},n.prototype.avgPool3dBackprop=function(n,x,t){return vu("avgPool3dBackprop")},n.prototype.maxPool3d=function(n,x){return vu("maxPool3d")},n.prototype.maxPool3dBackprop=function(n,x,t,e){return vu("maxPool3dBackprop")},n.prototype.reshape=function(n,x){return vu("reshape")},n.prototype.cast=function(n,x){return vu("cast")},n.prototype.tile=function(n,x){return vu("tile")},n.prototype.pad=function(n,x,t){return vu("pad")},n.prototype.transpose=function(n,x){return vu("transpose")},n.prototype.gather=function(n,x,t){return vu("gather")},n.prototype.gatherND=function(n,x){return vu("gatherND")},n.prototype.scatterND=function(n,x,t){return vu("scatterND")},n.prototype.batchToSpaceND=function(n,x,t){return vu("batchToSpaceND")},n.prototype.spaceToBatchND=function(n,x,t){return vu("spaceToBatchND")},n.prototype.resizeBilinear=function(n,x,t,e){return vu("resizeBilinear")},n.prototype.resizeBilinearBackprop=function(n,x,t){return vu("resizeBilinearBackprop")},n.prototype.resizeNearestNeighbor=function(n,x,t,e){return vu("resizeNearestNeighbor")},n.prototype.resizeNearestNeighborBackprop=function(n,x,t){return vu("resizeNearestNeighborBackprop")},n.prototype.batchNormalization=function(n,x,t,e,i,r){return vu("batchNormalization")},n.prototype.localResponseNormalization4D=function(n,x,t,e,i){return vu("localResponseNormalization4D")},n.prototype.LRNGrad=function(n,x,t,e,i,r,o){return vu("LRNGrad")},n.prototype.multinomial=function(n,x,t,e){return vu("multinomial")},n.prototype.oneHot=function(n,x,t,e){return vu("oneHot")},n.prototype.cumsum=function(n,x,t,e){return vu("cumsum")},n.prototype.nonMaxSuppression=function(n,x,t,e,i){return vu("nonMaxSuppression")},n.prototype.fft=function(n){return vu("fft")},n.prototype.ifft=function(n){return vu("ifft")},n.prototype.complex=function(n,x){return vu("complex")},n.prototype.real=function(n){return vu("real")},n.prototype.imag=function(n){return vu("imag")},n.prototype.cropAndResize=function(n,x,t,e,i,r){return vu("cropAndResize")},n.prototype.depthToSpace=function(n,x,t){return vu("depthToSpace")},n.prototype.split=function(n,x,t){return vu("split")},n.prototype.sparseToDense=function(n,x,t,e){return vu("sparseToDense")},n.prototype.diag=function(n){return vu("diag")},n.prototype.fill=function(n,x,t){return vu("fill")},n.prototype.onesLike=function(n){return vu("onesLike")},n.prototype.zerosLike=function(n){return vu("zerosLike")},n.prototype.linspace=function(n,x,t){return vu("linspace")},n.prototype.dispose=function(){return vu("dispose")},n}();function vu(n){throw new Error("'"+n+"' not yet implemented or not found in the registry. Did you forget to import the kernel?")}function ju(n,x){for(var t=n.length,e=[],i=0;i<t;i++){var r=t-1-i,o=n[r]||1;(x[x.length-1-i]||1)>1&&1===o&&e.unshift(r)}return e}function wu(n,x){for(var t=[],e=0;e<x.length;e++){var i=n[n.length-e-1],r=x.length-e-1,o=x[r];(null==i||1===i&&o>1)&&t.unshift(r)}return t}function ku(n,x){for(var t=[],e=Math.max(n.length,x.length),i=0;i<e;i++){var r=n[n.length-i-1];null==r&&(r=1);var o=x[x.length-i-1];if(null==o&&(o=1),1===r)t.unshift(o);else if(1===o)t.unshift(r);else{if(r!==o)throw Error("Operands could not be broadcast together with shapes "+n+" and "+x+".");t.unshift(r)}}return t}function qu(n,x,t,e,i,r,o){void 0===o&&(o="channelsLast");var s,h=Iu(x),u=h[0],a=h[1];if("channelsLast"===o)s=[u,a,n[3],n[3]];else{if("channelsFirst"!==o)throw new Error("Unknown dataFormat "+o);s=[u,a,n[1],n[1]]}return Au(n,s,t,e,i,r,!1,o)}function Cu(n,x,t,e,i,r,o){void 0===o&&(o="NDHWC");var s,h,u=Du(x),a=u[0],g=u[1],l=u[2];if("NDHWC"===o)h="channelsLast",s=[a,g,l,n[4],n[4]];else{if("NCDHW"!==o)throw new Error("Unknown dataFormat "+o);h="channelsFirst",s=[a,g,l,n[1],n[1]]}return Eu(n,s,t,e,i,!1,h,r)}function Au(n,x,t,e,i,r,o,s){void 0===o&&(o=!1),void 0===s&&(s="channelsLast");var h=[-1,-1,-1,-1],u=h[0],a=h[1],g=h[2],l=h[3];if("channelsLast"===s)u=n[0],a=n[1],g=n[2],l=n[3];else{if("channelsFirst"!==s)throw new Error("Unknown dataFormat "+s);u=n[0],l=n[1],a=n[2],g=n[3]}var c,d=x[0],f=x[1],p=x[3],y=Iu(t),m=y[0],b=y[1],z=Iu(e),v=z[0],j=z[1],w=Ou(d,v),k=Ou(f,j),q=function(n,x,t,e,i,r,o,s){var h,u,a;if("number"==typeof n){h={top:n,bottom:n,left:n,right:n,type:0===n?"VALID":"NUMBER"};var g=function(n,x,t,e,i){null==e&&(e=Su(n,x,t));var r=n[0],o=n[1],s=_u((r-x+2*e)/t+1,i);Ji(tr(s),function(){return"The output # of rows ("+s+") must be an integer. Change the stride and/or zero pad parameters"});var h=_u((o-x+2*e)/t+1,i);return Ji(tr(h),function(){return"The output # of columns ("+h+") must be an integer. Change the stride and/or zero pad parameters"}),[s,h]}([x,t],r,e,n,s);u=g[0],a=g[1]}else if("same"===n){u=Math.ceil(x/e),a=Math.ceil(t/i);var l=Math.max(0,(u-1)*e+r-x),c=Math.max(0,(a-1)*i+o-t),d=Math.floor(l/2),f=l-d,p=Math.floor(c/2);h={top:d,bottom:f,left:p,right:c-p,type:"SAME"}}else{if("valid"!==n)throw Error("Unknown padding parameter: "+n);h={top:0,bottom:0,left:0,right:0,type:"VALID"},u=Math.ceil((x-r+1)/e),a=Math.ceil((t-o+1)/i)}return{padInfo:h,outHeight:u,outWidth:a}}(i,a,g,m,b,w,k,r),C=q.padInfo,A=q.outHeight,E=q.outWidth,S=o?p*l:p;return"channelsFirst"===s?c=[u,S,A,E]:"channelsLast"===s&&(c=[u,A,E,S]),{batchSize:u,dataFormat:s,inHeight:a,inWidth:g,inChannels:l,outHeight:A,outWidth:E,outChannels:S,padInfo:C,strideHeight:m,strideWidth:b,filterHeight:d,filterWidth:f,effectiveFilterHeight:w,effectiveFilterWidth:k,dilationHeight:v,dilationWidth:j,inShape:n,outShape:c,filterShape:x}}function Eu(n,x,t,e,i,r,o,s){void 0===r&&(r=!1),void 0===o&&(o="channelsLast");var h=[-1,-1,-1,-1,-1],u=h[0],a=h[1],g=h[2],l=h[3],c=h[4];if("channelsLast"===o)u=n[0],a=n[1],g=n[2],l=n[3],c=n[4];else{if("channelsFirst"!==o)throw new Error("Unknown dataFormat "+o);u=n[0],c=n[1],a=n[2],g=n[3],l=n[4]}var d,f=x[0],p=x[1],y=x[2],m=x[4],b=Du(t),z=b[0],v=b[1],j=b[2],w=Du(e),k=w[0],q=w[1],C=w[2],A=Ou(f,k),E=Ou(p,q),S=Ou(y,C),I=function(n,x,t,e,i,r,o,s,h,u,a){var g,l,c,d;if("number"==typeof n){g={top:n,bottom:n,left:n,right:n,front:n,back:n,type:0===n?"VALID":"NUMBER"};var f=function(n,x,t,e,i,r){null==i&&(i=Su(n,x,e));var o=n[0],s=n[1],h=n[2],u=_u((o-x+2*i)/e+1,r);Ji(tr(u),function(){return"The output # of depths ("+u+") must be an integer. Change the stride and/or zero pad parameters"});var a=_u((s-x+2*i)/e+1,r);Ji(tr(a),function(){return"The output # of rows ("+a+") must be an integer. Change the stride and/or zero pad parameters"});var g=_u((h-x+2*i)/e+1,r);return Ji(tr(g),function(){return"The output # of columns ("+g+") must be an integer. Change the stride and/or zero pad parameters"}),[u,a,g,t]}([x,t,e,1],s,1,i,n,a);l=f[0],c=f[1],d=f[2]}else if("same"===n){l=Math.ceil(x/i),c=Math.ceil(t/r),d=Math.ceil(e/o);var p=(l-1)*i+s-x,y=(c-1)*r+h-t,m=(d-1)*o+u-e,b=Math.floor(p/2),z=p-b,v=Math.floor(y/2),j=y-v,w=Math.floor(m/2);g={top:v,bottom:j,left:w,right:m-w,front:b,back:z,type:"SAME"}}else{if("valid"!==n)throw Error("Unknown padding parameter: "+n);g={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},l=Math.ceil((x-s+1)/i),c=Math.ceil((t-h+1)/r),d=Math.ceil((e-u+1)/o)}return{padInfo:g,outDepth:l,outHeight:c,outWidth:d}}(i,a,g,l,z,v,j,A,E,S,s),D=I.padInfo,O=I.outDepth,_=I.outHeight,T=I.outWidth,R=r?m*c:m;return"channelsFirst"===o?d=[u,R,O,_,T]:"channelsLast"===o&&(d=[u,O,_,T,R]),{batchSize:u,dataFormat:o,inDepth:a,inHeight:g,inWidth:l,inChannels:c,outDepth:O,outHeight:_,outWidth:T,outChannels:R,padInfo:D,strideDepth:z,strideHeight:v,strideWidth:j,filterDepth:f,filterHeight:p,filterWidth:y,effectiveFilterDepth:A,effectiveFilterHeight:E,effectiveFilterWidth:S,dilationDepth:k,dilationHeight:q,dilationWidth:C,inShape:n,outShape:d,filterShape:x}}function Su(n,x,t,e){void 0===e&&(e=1);var i=Ou(x,e);return Math.floor((n[0]*(t-1)-t+i)/2)}function Iu(n){return"number"==typeof n?[n,n,n]:2===n.length?[n[0],n[1],1]:n}function Du(n){return"number"==typeof n?[n,n,n]:n}function Ou(n,x){return x<=1?n:n+(n-1)*(x-1)}function _u(n,x){if(!x)return n;switch(x){case"round":return Math.round(n);case"ceil":return Math.ceil(n);case"floor":return Math.floor(n);default:throw new Error("Unknown roundingMode "+x)}}function Tu(n){var x=Iu(n),t=x[0],e=x[1],i=x[2];return 1===t&&1===e&&1===i}function Ru(n,x){return Tu(n)||Tu(x)}function Bu(n){if("NHWC"===n)return"channelsLast";if("NCHW"===n)return"channelsFirst";throw new Error("Unknown dataFormat "+n)}function Mu(n,x,t){if("complex64"===x){if("complex64"===n.dtype)return n.clone();var e=Zs(n.shape),i=n.toFloat(),r=t.complex(i,e);return e.dispose(),i.dispose(),r}if(!dr(n.dtype,x))return ao.makeTensorFromDataId(n.dataId,n.shape,x);if("complex64"===n.dtype){var o=t.real(n);return r=o.cast(x),o.dispose(),r}if("int32"===x)return t.int(n);if("bool"===x){var s=Us(0,n.dtype);return r=t.notEqual(n,s),s.dispose(),r}throw new Error("Error in Cast: failed to cast "+n.dtype+" to "+x)}function Nu(n,x){return ao.makeTensorFromDataId(n.dataId,x,n.dtype)}function Fu(n,x,t){var e=(x-n)/(t-1),i=Er(t,"float32");i[0]=n;for(var r=1;r<i.length;r++)i[r]=i[r-1]+e;return Vs(i,"float32")}Object.freeze({castTensor:Mu,reshapeTensor:Nu,linspaceImpl:Fu,upcastType:to,axesAreInnerMostDims:As,combineLocations:Es,computeOutAndReduceShapes:Ss,expandShapeToKeepDim:Is,assertAxesAreInnerMostDims:Ds,getAxesPermutation:Os,getUndoAxesPermutation:_s,getInnerMostAxes:Ts,getBroadcastDims:ju,getReductionAxes:wu,assertAndGetBroadcastShape:ku,assertParamsConsistent:Rs,computeOutShape:Bs,computePool2DInfo:qu,computePool3DInfo:Cu,computeConv2DInfo:Au,computeConv3DInfo:Eu,computeDefaultPad:Su,tupleValuesAreOne:Tu,eitherStridesOrDilationsAreOne:Ru,convertConv2DDataFormat:Bu,PARALLELIZE_THRESHOLD:eu,computeOptimalWindowSize:iu});function Pu(n,x){if(n.length!==x.length)throw new Error("Cannot merge real and imag arrays of different lengths. real:"+n.length+", imag: "+x.length+".");for(var t=new Float32Array(2*n.length),e=0;e<t.length;e+=2)t[e]=n[e/2],t[e+1]=x[e/2];return t}function Lu(n,x){return{real:n[2*x],imag:n[2*x+1]}}function Hu(n,x,t,e){n[2*e]=x,n[2*e+1]=t}function Uu(n,x,t){var e=(t?2:-2)*Math.PI*(n/x);return{real:Math.cos(e),imag:Math.sin(e)}}function Vu(n,x,t){var e=function(n,x,t){return function(n,x,t){for(var e=0,i=n.length,r=0,o=!1;e<i;){var s=t(x,n[r=e+(i-e>>>1)]);s>0?e=r+1:(i=r,o=!s)}return o?e:-e-1}(n,x,t||Wu)}(n,x,t),i=e<0?-(e+1):e;n.splice(i,0,x)}function Wu(n,x){return n>x?1:n<x?-1:0}function Qu(n,x,t,e,i){return Ku(n,x,t,e,i,0).selectedIndices}function Gu(n,x,t,e,i,r){var o=Ku(n,x,t,e,i,r,!0);return o.numValidOutputs.dispose(),{selectedIndices:o.selectedIndices,selectedScores:o.selectedScores}}function Ku(n,x,t,e,i,r,o,s){void 0===o&&(o=!1),void 0===s&&(s=!1);for(var h=Array.from(x).map(function(n,x){return{score:n,boxIndex:x,suppressBeginIndex:0}}).filter(function(n){return n.score>i}).sort(Xu),u=r>0?-.5/r:0,a=[],g=[];a.length<t&&h.length>0;){var l=h.pop(),c=l.score,d=l.boxIndex,f=l.suppressBeginIndex;if(c<i)break;for(var p=!1,y=a.length-1;y>=f;--y){var m=Yu(n,d,a[y]);if(m>=e){p=!0;break}if(l.score=l.score*Ju(e,u,m),l.score<=i)break}l.suppressBeginIndex=a.length,p||(l.score===c?(a.push(d),g.push(l.score)):l.score>i&&Vu(h,l,Xu))}var b=a.length;return s&&(a.fill(0,b),g.fill(0,b)),{selectedIndices:Vs(a,"int32"),selectedScores:Vs(g,"float32"),numValidOutputs:Us(b,"int32")}}function Yu(n,x,t){var e=n.subarray(4*x,4*x+4),i=n.subarray(4*t,4*t+4),r=Math.min(e[0],e[2]),o=Math.min(e[1],e[3]),s=Math.max(e[0],e[2]),h=Math.max(e[1],e[3]),u=Math.min(i[0],i[2]),a=Math.min(i[1],i[3]),g=Math.max(i[0],i[2]),l=Math.max(i[1],i[3]),c=(s-r)*(h-o),d=(g-u)*(l-a);if(c<=0||d<=0)return 0;var f=Math.max(r,u),p=Math.max(o,a),y=Math.min(s,g),m=Math.min(h,l),b=Math.max(y-f,0)*Math.max(m-p,0);return b/(c+d-b)}function Ju(n,x,t){var e=Math.exp(x*t*t);return t<=n?e:0}function Xu(n,x){return n.score-x.score||n.score===x.score&&x.boxIndex-n.boxIndex}function Zu(n,x,t){var e=new Array(n.rank).fill(0),i=n.shape.slice();return x.map(function(x){i[t]=x;var r=n.slice(e,i);return e[t]+=x,r})}function $u(n,x){for(var t=new Array(n.rank),e=0;e<t.length;e++)t[e]=n.shape[e]*x[e];var i=jh(t,n.dtype);for(e=0;e<i.values.length;++e){for(var r=i.indexToLoc(e),o=new Array(n.rank),s=0;s<o.length;s++)o[s]=r[s]%n.shape[s];var h=n.locToIndex(o);i.values[e]=n.values[h]}return i.toTensor()}function na(n,x,t,e,i){for(var r=x[x.length-1],o=[n.length/r,r],s=o[0],h=o[1],u=ar(t,s*e),a=ar("int32",s*e),g=0;g<s;g++){for(var l=g*h,c=n.subarray(l,l+h),d=[],f=0;f<c.length;f++)d.push({value:c[f],index:f});d.sort(function(n,x){return x.value-n.value});var p=g*e,y=u.subarray(p,p+e),m=a.subarray(p,p+e);for(f=0;f<e;f++)y[f]=d[f].value,m[f]=d[f].index}var b=x.slice();return b[b.length-1]=e,[Ls(u,b,t),Ls(a,b,"int32")]}function xa(n,x){for(var t=[],e=0;e<x.length;e++)x[e]&&t.push(e);var i=jh(n,"int32"),r=jh([t.length,n.length],"int32");for(e=0;e<t.length;e++){var o=i.indexToLoc(t[e]),s=e*n.length;r.values.set(o,s)}return r.toTensor()}var ta=function(n,x){this.outputShape=[],this.outputShape=n,this.variableNames=x.map(function(n,x){return"T"+x});var t=[];this.variableNames.forEach(function(n){t.push("float v"+n+" = get"+n+"AtOutCoords();")});var e=this.variableNames.map(function(n){return"v"+n}).join(" + ");this.userCode="\n void main() {\n "+t.join("\n ")+"\n\n float result = "+e+";\n setOutput(result);\n }\n "},ea=function(n,x){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n,this.variableNames=x.map(function(n,x){return"T"+x});var t=[];this.variableNames.forEach(function(n){t.push("vec4 v"+n+" = get"+n+"AtOutCoords();")});var e=this.variableNames.map(function(n){return"v"+n}).join(" + ");this.userCode="\n void main() {\n "+t.join("\n ")+"\n\n vec4 result = "+e+";\n setOutput(result);\n }\n "},ia=function(n,x,t){this.variableNames=["A"];var e=n.windowSize,i=n.batchSize,r=n.inSize,o=Math.ceil(r/e);t||this.variableNames.push("bestIndicesA"),this.outputShape=[i,o];var s="max"===x?">":"<",h=t?"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 * "+e+";\n\n int bestIndex = inOffset;\n float bestValue = getA(batch, bestIndex);\n\n for (int i = 0; i < "+e+"; i++) {\n int inIdx = "+h+";\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 ra(n,x){return["x","y","z","w","u","v"].slice(0,x).map(function(x){return n+"."+x})}function oa(n,x){return 1===x?[n]:ra(n,x)}function sa(){var n,x,t,e,i,r,o,s,h,u;return 2===Bi().getNumber("WEBGL_VERSION")?(n="#version 300 es",x="in",t="out",e="in",i="texture",r="outputColor",o="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 ",h="",u="\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 "):(n="",x="attribute",t="varying",e="varying",i="texture2D",r="gl_FragColor",o="",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 ",h="\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 ",u="\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:n,attribute:x,varyingVs:t,varyingFs:e,texture2D:i,output:r,defineOutput:o,defineSpecialNaN:s,defineSpecialInf:h,defineRound:u}}function ha(n,x,t){void 0===t&&(t="index");var e=kr(x);return e.map(function(x,i){return"int "+n[i]+" = "+t+" / "+x+"; "+(i===e.length-1?"int "+n[i+1]+" = "+t+" - "+n[i]+" * "+x:"index -= "+n[i]+" * "+x)+";"}).join("")}function ua(n){var x=kr(n).map(function(n){return n.toString()});return"\n int getFlatIndex(ivec3 coords) {\n return coords.x * "+x[0]+" + coords.y * "+x[1]+" + coords.z;\n }\n"}var aa="\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 ga(n,x,t,e){var i=[];n.forEach(function(n){var x=nr(n.shapeInfo.logicalShape);n.shapeInfo.isUniform?i.push("uniform float "+n.name+(x>1?"["+x+"]":"")+";"):(i.push("uniform sampler2D "+n.name+";"),i.push("uniform int offset"+n.name+";"))});var r,o,s=i.join("\n"),h=n.map(function(n){return function(n,x,t){void 0===t&&(t=!1);var e="";e+=t?ca(n):la(n);var i=n.shapeInfo.logicalShape,r=x.logicalShape;return i.length<=r.length&&(e+=t?function(n,x){var t,e=n.name,i=e.charAt(0).toUpperCase()+e.slice(1),r="get"+i+"AtOutCoords",o=n.shapeInfo.logicalShape.length,s=x.logicalShape.length,h=ju(n.shapeInfo.logicalShape,x.logicalShape),u=za(s),a=s-o,g=["x","y","z","w","u","v"];t=0===o?"":s<2&&h.length>=1?"coords = 0;":h.map(function(n){return"coords."+g[n+a]+" = 0;"}).join("\n");var l="";l=s<2&&o>0?"coords":n.shapeInfo.logicalShape.map(function(n,x){return"coords."+g[x+a]}).join(", ");var c="return outputValue;",d=1===nr(n.shapeInfo.logicalShape),f=1===nr(x.logicalShape);if(1!==o||d||f){if(d&&!f)c=1===s?"\n return vec4(outputValue.x, outputValue.x, 0., 0.);\n ":"\n return vec4(outputValue.x);\n ";else if(h.length){var p=o-2,y=o-1;h.indexOf(p)>-1&&h.indexOf(y)>-1?c="return vec4(outputValue.x);":h.indexOf(p)>-1?c="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":h.indexOf(y)>-1&&(c="return vec4(outputValue.xx, outputValue.zz);")}}else c="\n return vec4(outputValue.xy, outputValue.xy);\n ";return"\n vec4 "+r+"() {\n "+u+" coords = getOutputCoords();\n "+t+"\n vec4 outputValue = get"+i+"("+l+");\n "+c+"\n }\n "}(n,x):function(n,x){var t=n.name,e=t.charAt(0).toUpperCase()+t.slice(1),i="get"+e+"AtOutCoords",r=x.texShape,o=n.shapeInfo.texShape,s=n.shapeInfo.logicalShape.length,h=x.logicalShape.length;if(!n.shapeInfo.isUniform&&s===h&&null==n.shapeInfo.flatOffset&&xr(o,r))return"\n float "+i+"() {\n return sampleTexture("+t+", resultUV);\n }\n ";var u,a=za(h),g=ju(n.shapeInfo.logicalShape,x.logicalShape),l=h-s,c=["x","y","z","w","u","v"];u=0===s?"":h<2&&g.length>=1?"coords = 0;":g.map(function(n){return"coords."+c[n+l]+" = 0;"}).join("\n");var d="";return d=h<2&&s>0?"coords":n.shapeInfo.logicalShape.map(function(n,x){return"coords."+c[x+l]}).join(", "),"\n float "+i+"() {\n "+a+" coords = getOutputCoords();\n "+u+"\n return get"+e+"("+d+");\n }\n "}(n,x)),e}(n,x,e)}).join("\n"),u=x.texShape,a=sa(),g=function(n){return"\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return "+n.texture2D+"(textureSampler, uv).r;\n }\n "}(a),l=function(n){return n.version+"\n precision highp float;\n precision highp int;\n precision highp sampler2D;\n "+n.varyingFs+" vec2 resultUV;\n "+n.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 "+n.defineSpecialNaN+"\n "+n.defineSpecialInf+"\n "+n.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 "+da+"\n "+fa+"\n "+pa+"\n "}(a);return x.isPacked?(r=function(n,x){switch(n.length){case 0:return"\n int getOutputCoords() {\n return 0;\n }\n ";case 1:return function(n,x){var t=[Math.ceil(x[0]/2),Math.ceil(x[1]/2)];return 1===t[0]?"\n int getOutputCoords() {\n return 2 * int(resultUV.x * "+t[1]+".0);\n }\n ":1===t[1]?"\n int getOutputCoords() {\n return 2 * int(resultUV.y * "+t[0]+".0);\n }\n ":"\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+t[0]+", "+t[1]+"));\n return 2 * (resTexRC.x * "+t[1]+" + resTexRC.y);\n }\n "}(0,x);case 2:return function(n,x){var t=[Math.ceil(x[0]/2),Math.ceil(x[1]/2)];if(xr(n,x))return"\n ivec2 getOutputCoords() {\n return 2 * ivec2(resultUV.yx * vec2("+t[0]+", "+t[1]+"));\n }\n ";var e=Math.ceil(n[1]/2);return"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+t[0]+", "+t[1]+"));\n\n int index = resTexRC.x * "+t[1]+" + resTexRC.y;\n int r = 2 * (index / "+e+");\n int c = imod(index, "+e+") * 2;\n\n return ivec2(r, c);\n }\n "}(n,x);case 3:return t=n,e=x,i=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],r=Math.ceil(t[2]/2),o=r*Math.ceil(t[1]/2),"\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+i[0]+", "+i[1]+"));\n int index = resTexRC.x * "+i[1]+" + resTexRC.y;\n\n int b = index / "+o+";\n index -= b * "+o+";\n\n int r = 2 * (index / "+r+");\n int c = imod(index, "+r+") * 2;\n\n return ivec3(b, r, c);\n }\n ";default:return function(n,x){for(var t=[Math.ceil(x[0]/2),Math.ceil(x[1]/2)],e=Math.ceil(n[n.length-1]/2),i=e*Math.ceil(n[n.length-2]/2),r=i,o="",s="b, r, c",h=2;h<n.length-1;h++)r*=n[n.length-h-1],o="\n int b"+h+" = index / "+r+";\n index -= b"+h+" * "+r+";\n "+o,s="b"+h+", "+s;return"\n ivec"+n.length+" getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+t[0]+", "+t[1]+"));\n int index = resTexRC.x * "+t[1]+" + resTexRC.y;\n\n "+o+"\n\n int b = index / "+i+";\n index -= b * "+i+";\n\n int r = 2 * (index / "+e+");\n int c = imod(index, "+e+") * 2;\n\n return ivec"+n.length+"("+s+");\n }\n "}(n,x)}var t,e,i,r,o}(x.logicalShape,u),o=function(n){return"\n void setOutput(vec4 val) {\n "+n.output+" = val;\n }\n "}(a)):(r=function(n,x){switch(n.length){case 0:return"\n int getOutputCoords() {\n return 0;\n }\n ";case 1:return function(n,x){return 1===x[0]?"\n int getOutputCoords() {\n return int(resultUV.x * "+x[1]+".0);\n }\n ":1===x[1]?"\n int getOutputCoords() {\n return int(resultUV.y * "+x[0]+".0);\n }\n ":"\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+x[0]+", "+x[1]+"));\n return resTexRC.x * "+x[1]+" + resTexRC.y;\n }\n "}(0,x);case 2:return function(n,x){return xr(n,x)?"\n ivec2 getOutputCoords() {\n return ivec2(resultUV.yx * vec2("+x[0]+", "+x[1]+"));\n }\n ":1===n[1]?"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+x[0]+", "+x[1]+"));\n int index = resTexRC.x * "+x[1]+" + resTexRC.y;\n return ivec2(index, 0);\n }\n ":1===n[0]?"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+x[0]+", "+x[1]+"));\n int index = resTexRC.x * "+x[1]+" + resTexRC.y;\n return ivec2(0, index);\n }\n ":"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+x[0]+", "+x[1]+"));\n int index = resTexRC.x * "+x[1]+" + resTexRC.y;\n int r = index / "+n[1]+";\n int c = index - r * "+n[1]+";\n return ivec2(r, c);\n }\n "}(n,x);case 3:return t=x,e=ha(["r","c","d"],n),"\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+t[0]+", "+t[1]+"));\n int index = resTexRC.x * "+t[1]+" + resTexRC.y;\n "+e+"\n return ivec3(r, c, d);\n }\n ";case 4:return function(n,x){var t=ha(["r","c","d","d2"],n);return"\n ivec4 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+x[0]+", "+x[1]+"));\n int index = resTexRC.x * "+x[1]+" + resTexRC.y;\n "+t+"\n return ivec4(r, c, d, d2);\n }\n "}(n,x);case 5:return function(n,x){var t=ha(["r","c","d","d2","d3"],n);return"\n ivec5 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx * vec2("+x[0]+",\n "+x[1]+"));\n\n int index = resTexRC.x * "+x[1]+" + resTexRC.y;\n\n "+t+"\n\n ivec5 outShape = ivec5(r, c, d, d2, d3);\n return outShape;\n }\n "}(n,x);case 6:return function(n,x){var t=ha(["r","c","d","d2","d3","d4"],n);return"\n ivec6 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+x[0]+", "+x[1]+"));\n int index = resTexRC.x * "+x[1]+" + resTexRC.y;\n\n "+t+"\n\n ivec6 result = ivec6(r, c, d, d2, d3, d4);\n return result;\n }\n "}(n,x);default:throw new Error(n.length+"-D output sampling is not yet supported")}var t,e}(x.logicalShape,u),o=function(n){return"\n void setOutput(float val) {\n "+n.output+" = vec4(val, 0, 0, 0);\n }\n "}(a)),e&&(l+=ya),[l,g,o,s,r,h,t].join("\n")}function la(n){var x=n.shapeInfo.logicalShape;switch(x.length){case 0:return function(n){var x=n.name,t="get"+x.charAt(0).toUpperCase()+x.slice(1);if(n.shapeInfo.isUniform)return"float "+t+"() {return "+x+";}";var e=n.shapeInfo.texShape,i=e[0],r=e[1];if(1===i&&1===r)return"\n float "+t+"() {\n return sampleTexture("+x+", halfCR);\n }\n ";var o=n.shapeInfo.texShape,s=o[0],h=o[1],u=ma(x);return"\n float "+t+"() {\n vec2 uv = uvFromFlat("+s+", "+h+", "+u+");\n return sampleTexture("+x+", uv);\n }\n "}(n);case 1:return function(n){var x=n.name,t="get"+x.charAt(0).toUpperCase()+x.slice(1);if(n.shapeInfo.isUniform)return"\n float "+t+"(int index) {\n "+ba(n)+"\n }\n ";var e=n.shapeInfo.texShape,i=e[0],r=e[1];if(1===r&&1===i)return"\n float "+t+"(int index) {\n return sampleTexture("+x+", halfCR);\n }\n ";var o=ma(x);return 1===r?"\n float "+t+"(int index) {\n vec2 uv = vec2(0.5, (float(index + "+o+") + 0.5) / "+i+".0);\n return sampleTexture("+x+", uv);\n }\n ":1===i?"\n float "+t+"(int index) {\n vec2 uv = vec2((float(index + "+o+") + 0.5) / "+r+".0, 0.5);\n return sampleTexture("+x+", uv);\n }\n ":"\n float "+t+"(int index) {\n vec2 uv = uvFromFlat("+i+", "+r+", index + "+o+");\n return sampleTexture("+x+", uv);\n }\n "}(n);case 2:return function(n){var x=n.shapeInfo.logicalShape,t=n.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),i=n.shapeInfo.texShape;if(null!=i&&xr(x,i)){var r=i[0],o=i[1];return"\n float "+e+"(int row, int col) {\n vec2 uv = (vec2(col, row) + halfCR) / vec2("+o+".0, "+r+".0);\n return sampleTexture("+t+", uv);\n }\n "}var s=ur(x),h=s.newShape,u=s.keptDims,a=h;if(a.length<x.length){var g=va(n,a);return"\n "+la(g)+"\n float "+e+"(int row, int col) {\n return "+e+"("+ja(["row","col"],u)+");\n }\n "}if(n.shapeInfo.isUniform)return"\n float "+e+"(int row, int col) {\n int index = round(dot(vec2(row, col), vec2("+x[1]+", 1)));\n "+ba(n)+"\n }\n ";var l=i[0],c=i[1],d=ma(t);return 1===c?"\n float "+e+"(int row, int col) {\n float index = dot(vec3(row, col, "+d+"), vec3("+x[1]+", 1, 1));\n vec2 uv = vec2(0.5, (index + 0.5) / "+l+".0);\n return sampleTexture("+t+", uv);\n }\n ":1===l?"\n float "+e+"(int row, int col) {\n float index = dot(vec3(row, col, "+d+"), vec3("+x[1]+", 1, 1));\n vec2 uv = vec2((index + 0.5) / "+c+".0, 0.5);\n return sampleTexture("+t+", uv);\n }\n ":"\n float "+e+"(int row, int col) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * "+x[1]+" + col + "+d+";\n vec2 uv = uvFromFlat("+l+", "+c+", index);\n return sampleTexture("+t+", uv);\n }\n"}(n);case 3:return function(n){var x=n.shapeInfo.logicalShape,t=n.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),i=x[1]*x[2],r=x[2],o=ur(x),s=o.newShape,h=o.keptDims,u=s;if(u.length<x.length){var a=va(n,u);return"\n "+la(a)+"\n float "+e+"(int row, int col, int depth) {\n return "+e+"("+ja(["row","col","depth"],h)+");\n }\n "}if(n.shapeInfo.isUniform)return"\n float "+e+"(int row, int col, int depth) {\n int index = round(dot(vec3(row, col, depth),\n vec3("+i+", "+r+", 1)));\n "+ba(n)+"\n }\n ";var g=n.shapeInfo.texShape,l=g[0],c=g[1],d=n.shapeInfo.flatOffset;if(c===i&&null==d)return"\n float "+e+"(int row, int col, int depth) {\n float texR = float(row);\n float texC = dot(vec2(col, depth), vec2("+r+", 1));\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+c+".0, "+l+".0);\n return sampleTexture("+t+", uv);\n }\n ";if(c===r&&null==d)return"\n float "+e+"(int row, int col, int depth) {\n float texR = dot(vec2(row, col), vec2("+x[1]+", 1));\n float texC = float(depth);\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+c+".0, "+l+".0);\n return sampleTexture("+t+", uv);\n }\n ";var f=ma(t);return"\n float "+e+"(int row, int col, int depth) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * "+i+" + col * "+r+" + depth + "+f+";\n vec2 uv = uvFromFlat("+l+", "+c+", index);\n return sampleTexture("+t+", uv);\n }\n "}(n);case 4:return function(n){var x=n.shapeInfo.logicalShape,t=n.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),i=x[3],r=x[2]*i,o=x[1]*r,s=ur(x),h=s.newShape,u=s.keptDims;if(h.length<x.length){var a=va(n,h);return"\n "+la(a)+"\n float "+e+"(int row, int col, int depth, int depth2) {\n return "+e+"("+ja(["row","col","depth","depth2"],u)+");\n }\n "}if(n.shapeInfo.isUniform)return"\n float "+e+"(int row, int col, int depth, int depth2) {\n int index = round(dot(vec4(row, col, depth, depth2),\n vec4("+o+", "+r+", "+i+", 1)));\n "+ba(n)+"\n }\n ";var g=n.shapeInfo.flatOffset,l=n.shapeInfo.texShape,c=l[0],d=l[1];if(d===o&&null==g)return"\n float "+e+"(int row, int col, int depth, int depth2) {\n float texR = float(row);\n float texC =\n dot(vec3(col, depth, depth2),\n vec3("+r+", "+i+", 1));\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+d+".0, "+c+".0);\n return sampleTexture("+t+", uv);\n }\n ";if(d===i&&null==g)return"\n float "+e+"(int row, int col, int depth, int depth2) {\n float texR = dot(vec3(row, col, depth),\n vec3("+x[1]*x[2]+", "+x[2]+", 1));\n float texC = float(depth2);\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+d+".0, "+c+".0);\n return sampleTexture("+t+", uv);\n }\n ";var f=ma(t);return"\n float "+e+"(int row, int col, int depth, int depth2) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * "+o+" + col * "+r+" +\n depth * "+i+" + depth2;\n vec2 uv = uvFromFlat("+c+", "+d+", index + "+f+");\n return sampleTexture("+t+", uv);\n }\n "}(n);case 5:return function(n){var x=n.shapeInfo.logicalShape,t=n.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),i=x[4],r=x[3]*i,o=x[2]*r,s=x[1]*o,h=ur(x),u=h.newShape,a=h.keptDims;if(u.length<x.length){var g=va(n,u);return"\n "+la(g)+"\n float "+e+"(int row, int col, int depth, int depth2, int depth3) {\n return "+e+"("+ja(["row","col","depth","depth2","depth3"],a)+");\n }\n "}if(n.shapeInfo.isUniform)return"\n float "+e+"(int row, int col, int depth, int depth2, int depth3) {\n float index = dot(\n vec4(row, col, depth, depth2),\n vec4("+s+", "+o+", "+r+", "+i+")) +\n depth3;\n "+ba(n)+"\n }\n ";var l=n.shapeInfo.flatOffset,c=n.shapeInfo.texShape,d=c[0],f=c[1];if(f===s&&null==l)return"\n float "+e+"(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("+o+", "+r+", "+i+", 1));\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+f+".0, "+d+".0);\n return sampleTexture("+t+", uv);\n }\n ";if(f===i&&null==l)return"\n float "+e+"(int row, int col, int depth, int depth2, int depth3) {\n float texR = dot(\n vec4(row, col, depth, depth2),\n vec4("+x[1]*x[2]*x[3]+",\n "+x[2]*x[3]+", "+x[3]+", 1));\n int texC = depth3;\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+f+".0, "+d+".0);\n return sampleTexture("+t+", uv);\n }\n ";var p=ma(t);return"\n float "+e+"(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 * "+s+" + col * "+o+" + depth * "+r+" +\n depth2 * "+i+" + depth3 + "+p+";\n vec2 uv = uvFromFlat("+d+", "+f+", index);\n return sampleTexture("+t+", uv);\n }\n "}(n);case 6:return function(n){var x=n.shapeInfo.logicalShape,t=n.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),i=ur(x),r=i.newShape,o=i.keptDims;if(r.length<x.length){var s=va(n,r);return"\n "+la(s)+"\n float "+e+"(int row, int col, int depth,\n int depth2, int depth3, int depth4) {\n return "+e+"("+ja(["row","col","depth","depth2","depth3","depth4"],o)+");\n }\n "}var h=x[5],u=x[4]*h,a=x[3]*u,g=x[2]*a,l=x[1]*g;if(n.shapeInfo.isUniform)return"\n float "+e+"(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("+l+", "+g+", "+a+", "+u+")) +\n dot(\n vec2(depth3, depth4),\n vec2("+h+", 1)));\n "+ba(n)+"\n }\n ";var c=n.shapeInfo.flatOffset,d=n.shapeInfo.texShape,f=d[0],p=d[1];if(p===l&&null==c)return"\n float "+e+"(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("+g+", "+a+", "+u+", "+h+")) +\n float(depth4);\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+p+".0, "+f+".0);\n return sampleTexture("+t+", uv);\n }\n ";if(p===h&&null==c)return"\n float "+e+"(int row, int col, int depth,\n int depth2, int depth3, int depth4) {\n float texR = dot(vec4(row, col, depth, depth2),\n vec4("+x[1]*x[2]*x[3]*x[4]+",\n "+x[2]*x[3]*x[4]+",\n "+x[3]*x[4]+",\n "+x[4]+")) + float(depth3);\n int texC = depth4;\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+p+".0, "+f+".0);\n return sampleTexture("+t+", uv);\n }\n ";var y=ma(t);return"\n float "+e+"(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 * "+l+" + col * "+g+" + depth * "+a+" +\n depth2 * "+u+" + depth3 * "+h+" + depth4 + "+y+";\n vec2 uv = uvFromFlat("+f+", "+p+", index);\n return sampleTexture("+t+", uv);\n }\n "}(n);default:throw new Error(x.length+"-D input sampling is not yet supported")}}function ca(n){var x,t,e;switch(n.shapeInfo.logicalShape.length){case 0:return x=n.name,t="get"+x.charAt(0).toUpperCase()+x.slice(1),e=sa(),"\n vec4 "+t+"() {\n return "+e.texture2D+"("+x+", halfCR);\n }\n ";case 1:return function(n){var x=n.name,t="get"+x.charAt(0).toUpperCase()+x.slice(1),e=n.shapeInfo.texShape,i=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],r=sa();return"\n vec4 "+t+"(int index) {\n vec2 uv = packedUVfrom1D(\n "+i[0]+", "+i[1]+", index);\n return "+r.texture2D+"("+x+", uv);\n }\n "}(n);case 2:return function(n){var x=n.shapeInfo.logicalShape,t=n.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),i=n.shapeInfo.texShape,r=i[0],o=i[1],s=sa();if(null!=i&&xr(x,i))return"\n vec4 "+e+"(int row, int col) {\n vec2 uv = (vec2(col, row) + halfCR) / vec2("+o+".0, "+r+".0);\n\n return "+s.texture2D+"("+t+", uv);\n }\n ";var h=[Math.ceil(i[0]/2),Math.ceil(i[1]/2)],u=Math.ceil(x[1]/2);return"\n vec4 "+e+"(int row, int col) {\n vec2 uv = packedUVfrom2D("+u+", "+h[0]+", "+h[1]+", row, col);\n return "+s.texture2D+"("+t+", uv);\n }\n "}(n);case 3:return function(n){var x=n.shapeInfo.logicalShape,t=n.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),i=n.shapeInfo.texShape,r=[Math.ceil(i[0]/2),Math.ceil(i[1]/2)];if(1===x[0]){var o=x.slice(1),s=va(n,o);return"\n "+ca(s)+"\n vec4 "+e+"(int b, int row, int col) {\n return "+e+"("+ja(["b","row","col"],[1,2])+");\n }\n "}var h=r[0],u=r[1],a=Math.ceil(x[2]/2),g=a*Math.ceil(x[1]/2),l=sa();return"\n vec4 "+e+"(int b, int row, int col) {\n vec2 uv = packedUVfrom3D(\n "+h+", "+u+", "+g+", "+a+", b, row, col);\n return "+l.texture2D+"("+t+", uv);\n }\n "}(n);default:return function(n){for(var x=n.shapeInfo.logicalShape,t=x.length,e=n.name,i="get"+e.charAt(0).toUpperCase()+e.slice(1),r=n.shapeInfo.texShape,o=[Math.ceil(r[0]/2),Math.ceil(r[1]/2)],s=o[0],h=o[1],u=Math.ceil(x[t-1]/2),a=u*Math.ceil(x[t-2]/2),g="int b, int row, int col",l="b * "+a+" + (row / 2) * "+u+" + (col / 2)",c=2;c<t-1;c++)g="int b"+c+", "+g,a*=x[t-c-1],l="b"+c+" * "+a+" + "+l;var d=sa();return"\n vec4 "+i+"("+g+") {\n int index = "+l+";\n int texR = index / "+h+";\n int texC = index - texR * "+h+";\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+h+", "+s+");\n return "+d.texture2D+"("+e+", uv);\n }\n "}(n)}}var da="\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",fa="\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",pa="\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",ya="\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 ma(n){return"offset"+n}function ba(n){var x=n.name,t=nr(n.shapeInfo.logicalShape);return t<2?"return "+x+";":"\n for (int i = 0; i < "+t+"; i++) {\n if (i == index) {\n return "+x+"[i];\n }\n }\n "}function za(n){if(n<=1)return"int";if(2===n)return"ivec2";if(3===n)return"ivec3";if(4===n)return"ivec4";if(5===n)return"ivec5";if(6===n)return"ivec6";throw Error("GPU for rank "+n+" is not yet supported")}function va(n,x){var t=JSON.parse(JSON.stringify(n));return t.shapeInfo.logicalShape=x,t}function ja(n,x){return x.map(function(x){return n[x]}).join(", ")}var wa=function(n,x,t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,Ji(n.length>2,function(){return"Packed arg"+(t.charAt(0).toUpperCase()+t.slice(1))+" supports only inputs with rank above 2."});var i=n[n.length-1],r=Math.ceil(i/x);this.outputShape=n.slice(0,-1),r>1&&this.outputShape.push(r),e||this.variableNames.push("bestIndicesA");var o,s,h=this.outputShape,u=h.length,a=za(u),g=oa("coords",u);if(1===r){var l=za(s=u+1);o="\n "+l+" sourceLocR = "+l+"("+g.join()+", 0);\n ++"+g[u-1]+";\n "+l+" sourceLocG = "+l+"("+g.join()+", 0);\n ++"+g[u-2]+";\n "+l+" sourceLocA = "+l+"("+g.join()+", 0);\n --"+g[u-1]+";\n "+l+" sourceLocB = "+l+"("+g.join()+", 0);\n --"+g[u-2]+";"}else s=u,o="\n "+a+" sourceLocR = coords;\n ++"+g[u-1]+";\n "+a+" sourceLocG = coords;\n ++"+g[u-2]+";\n "+a+" sourceLocA = coords;\n --"+g[u-1]+";\n "+a+" sourceLocB = coords;\n --"+g[u-2]+";";var c=["x","y","z","w","u","v"].slice(0,s),d="."+c[s-1],f=c.map(function(n){return"int "+n}),p=oa("sourceLocR",s-1).concat("inIdx.r"),y=oa("sourceLocG",s-1).concat("inIdx.g"),m=oa("sourceLocB",s-1).concat("inIdx.b"),b=oa("sourceLocA",s-1).concat("inIdx.a"),z="max"===t?"greaterThan":"lessThan",v=e?"":"\n inIdx = round(vec4(getBestIndicesAChannel("+p.join()+"),\n getBestIndicesAChannel("+y.join()+"),\n getBestIndicesAChannel("+m.join()+"),\n getBestIndicesAChannel("+b.join()+")));",j="vec4(\n getAChannel("+p.join()+"),\n hasNextCol ? getAChannel("+y.join()+") : 0.,\n hasNextRow ? getAChannel("+m.join()+") : 0.,\n hasNextRow && hasNextCol ? getAChannel("+b.join()+") : 0.)",w=e?"":"\n float getBestIndicesAChannel("+f.join()+") {\n return getChannel(getBestIndicesA("+c.join()+"),\n vec2("+c.slice(-2).join()+"));\n }";this.userCode="\n float getAChannel("+f.join()+") {\n return getChannel(getA("+c.join()+"),\n vec2("+c.slice(-2).join()+"));\n }\n "+w+"\n void main() {\n "+a+" coords = getOutputCoords();\n bool hasNextCol = "+g[u-1]+" < "+(h[u-1]-1)+";\n bool hasNextRow = "+g[u-2]+" < "+(h[u-2]-1)+";\n "+o+"\n ivec4 srcIdx = ivec4(sourceLocR"+d+", sourceLocG"+d+",\n sourceLocB"+d+", sourceLocA"+d+") * "+x+";\n ivec4 inIdx = srcIdx;\n vec4 bestIndex = vec4(inIdx);\n vec4 bestValue = "+j+";\n\n for (int i = 0; i < "+x+"; i++) {\n inIdx = srcIdx;\n "+v+"\n vec4 candidate = "+j+";\n bvec4 nan = isnan(candidate);\n bvec4 replace = bvec4(\n vec4("+z+"(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 "},ka=function(n){this.variableNames=["dy"],this.outputShape=n.inShape;var x=n.filterHeight,t=n.filterWidth,e=n.strideHeight,i=n.strideWidth,r=n.dilationHeight,o=n.dilationWidth,s=n.effectiveFilterHeight,h=n.effectiveFilterWidth,u=s-1-n.padInfo.top,a=h-1-n.padInfo.left,g=1/(x*t);this.userCode="\n const ivec2 pads = ivec2("+u+", "+a+");\n const float avgMultiplier = float("+g+");\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 += "+r+") {\n float dyR = float(dyRCorner + wR) / "+e+".0;\n\n if (dyR < 0.0 || dyR >= "+n.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+h+";\n wC+= "+o+") {\n float dyC = float(dyCCorner + wC) / "+i+".0;\n\n if (dyC < 0.0 || dyC >= "+n.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 "},qa=function(n){this.variableNames=["dy"],this.outputShape=n.inShape;var x=n.filterDepth,t=n.filterHeight,e=n.filterWidth,i=n.strideDepth,r=n.strideHeight,o=n.strideWidth,s=n.dilationDepth,h=n.dilationHeight,u=n.dilationWidth,a=n.effectiveFilterDepth,g=n.effectiveFilterHeight,l=n.effectiveFilterWidth,c=a-1-n.padInfo.front,d=g-1-n.padInfo.top,f=l-1-n.padInfo.left,p=1/(x*t*e);this.userCode="\n const ivec3 pads = ivec3("+c+", "+d+", "+f+");\n const float avgMultiplier = float("+p+");\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 < "+a+";\n wD += "+s+") {\n float dyD = float(dyDCorner + wD) / "+i+".0;\n\n if (dyD < 0.0 || dyD >= "+n.outDepth+".0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < "+g+";\n wR += "+h+") {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+n.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+l+";\n wC += "+u+") {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+n.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 "},Ca=function(n,x,t,e,i,r){this.outputShape=[],this.variableNames=["x","mean","variance"],ku(n,x),ku(n,t);var o="0.0";null!=e&&(ku(n,e),this.variableNames.push("offset"),o="getOffsetAtOutCoords()");var s="1.0";null!=i&&(ku(n,i),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=n,this.userCode="\n void main() {\n float x = getXAtOutCoords();\n float mean = getMeanAtOutCoords();\n float variance = getVarianceAtOutCoords();\n float offset = "+o+";\n float scale = "+s+";\n float inv = scale * inversesqrt(variance + float("+r+"));\n setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\n }\n "},Aa=function(n,x,t,e,i,r){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],ku(n,x),ku(n,t);var o="vec4(0.0)";null!=e&&(ku(n,e),this.variableNames.push("offset"),o="getOffsetAtOutCoords()");var s="vec4(1.0)";null!=i&&(ku(n,i),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=n,this.userCode="\n void main() {\n vec4 offset = "+o+";\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("+r+"));\n\n setOutput((x - mean) * inv + offset);\n }\n "},Ea="return areal * breal - aimag * bimag;",Sa="return areal * bimag + aimag * breal;",Ia=function(n,x,t){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=ku(x,t),this.userCode="\n float binaryOpComplex(\n float areal, float aimag, float breal, float bimag) {\n "+n+"\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 "},Da="return a + b;",Oa="return a - b;",_a="return a * b;",Ta="return (a < 0.) ? b * a : a;",Ra=function(n,x,t){this.variableNames=["A","B"],this.outputShape=ku(x,t),this.userCode="\n float binaryOperation(float a, float b) {\n "+n+"\n }\n\n void main() {\n float a = getAAtOutCoords();\n float b = getBAtOutCoords();\n setOutput(binaryOperation(a, b));\n }\n "},Ba="\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n",Ma=function(n,x,t,e){void 0===e&&(e=!1),this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=ku(x,t);var i=this.outputShape.length,r="";if(e)if(0===i||1===nr(this.outputShape))r="\n result.y = 0.;\n result.z = 0.;\n result.w = 0.;\n ";else if(r="\n "+za(i)+" coords = getOutputCoords();\n ",1===i)r+="\n result.y = (coords + 1) >= "+this.outputShape[0]+" ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n ";else{var o=oa("coords",i);r+="\n bool nextRowOutOfBounds =\n ("+o[i-2]+" + 1) >= "+this.outputShape[i-2]+";\n bool nextColOutOfBounds =\n ("+o[i-1]+" + 1) >= "+this.outputShape[i-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 "+n+"\n }\n\n void main() {\n vec4 a = getAAtOutCoords();\n vec4 b = getBAtOutCoords();\n\n vec4 result = binaryOperation(a, b);\n "+r+"\n\n setOutput(result);\n }\n "},Na=function(){function n(n){this.variableNames=["A"],this.outputShape=n,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 n.prototype.getCustomSetupFunc=function(n,x){var t=this;return function(e,i){null==t.minLoc&&(t.minLoc=e.getUniformLocationNoThrow(i,"minVal"),t.maxLoc=e.getUniformLocationNoThrow(i,"maxVal")),e.gl.uniform1f(t.minLoc,n),e.gl.uniform1f(t.maxLoc,x)}},n}(),Fa=function(){function n(n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n,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 n.prototype.getCustomSetupFunc=function(n,x){var t=this;return function(e,i){null==t.minLoc&&(t.minLoc=e.getUniformLocationNoThrow(i,"minVal"),t.maxLoc=e.getUniformLocationNoThrow(i,"maxVal")),e.gl.uniform1f(t.minLoc,n),e.gl.uniform1f(t.maxLoc,x)}},n}(),Pa=function(n){this.variableNames=["real","imag"],this.outputShape=n,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 "},La=function(n){this.outputShape=[],this.outputShape=Bs(n,1),this.variableNames=n.map(function(n,x){return"T"+x});var x=new Array(n.length-1);x[0]=n[0][1];for(var t=1;t<x.length;t++)x[t]=x[t-1]+n[t][1];var e=["if (yC < "+x[0]+") setOutput(getT0(yR, yC));"];for(t=1;t<x.length;t++){var i=x[t-1];e.push("else if (yC < "+x[t]+") setOutput(getT"+t+"(yR, yC-"+i+"));")}var r=x.length,o=x[x.length-1];e.push("else setOutput(getT"+r+"(yR, yC-"+o+"));"),this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int yR = coords.x;\n int yC = coords.y;\n\n "+e.join("\n ")+"\n }\n "},Ha=function(n,x){this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[],this.outputShape=Bs(n,x);var t=this.outputShape,e=t.length,i=za(e),r=oa("coords",e),o=["x","y","z","w","u","v"].slice(0,e);this.variableNames=n.map(function(n,x){return"T"+x});var s=new Array(n.length-1);s[0]=n[0][x];for(var h=1;h<s.length;h++)s[h]=s[h-1]+n[h][x];var u=o[x],a=o.slice(-2),g=o.join(),l="if ("+u+" < "+s[0]+") {\n return getChannel(\n getT0("+g+"), vec2("+a.join()+"));\n }";for(h=1;h<s.length;h++){var c=s[h-1];l+="\n if ("+u+" < "+s[h]+" && "+u+" >= "+s[h-1]+") {\n return getChannel(\n getT"+h+"("+Ua(o,u,c)+"),\n vec2("+Ua(a,u,c)+"));\n }"}var d=s.length,f=s[s.length-1];l+="\n return getChannel(\n getT"+d+"("+Ua(o,u,f)+"),\n vec2("+Ua(a,u,f)+"));",this.userCode="\n float getValue("+o.map(function(n){return"int "+n})+") {\n "+l+"\n }\n\n void main() {\n "+i+" coords = getOutputCoords();\n vec4 result = vec4(getValue("+r+"), 0., 0., 0.);\n\n "+r[e-1]+" = "+r[e-1]+" + 1;\n if ("+r[e-1]+" < "+t[e-1]+") {\n result.g = getValue("+r+");\n }\n\n "+r[e-2]+" = "+r[e-2]+" + 1;\n if ("+r[e-2]+" < "+t[e-2]+") {\n result.a = getValue("+r+");\n }\n\n "+r[e-1]+" = "+r[e-1]+" - 1;\n if ("+r[e-2]+" < "+t[e-2]+" &&\n "+r[e-1]+" < "+t[e-1]+") {\n result.b = getValue("+r+");\n }\n setOutput(result);\n }\n "};function Ua(n,x,t){var e=n.indexOf(x);return n.map(function(n,x){return x===e?n+" - "+t:n}).join()}var Va=function(n){this.variableNames=["x","dy"],this.outputShape=n.filterShape;var x=n.strideHeight,t=n.strideWidth,e=n.padInfo.top,i=n.padInfo.left,r="channelsLast"===n.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 < "+n.batchSize+"; b++) {\n for (int yR = 0; yR < "+n.outHeight+"; yR++) {\n int xR = wR + yR * "+x+" - "+e+";\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+n.outWidth+"; yC++) {\n int xC = wC + yC * "+t+" - "+i+";\n\n if (xC < 0 || xC >= "+n.inWidth+") {\n continue;\n }\n\n if ("+r+") {\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 "},Wa=function(n){this.variableNames=["dy","W"],this.outputShape=n.inShape;var x=n.filterHeight,t=n.filterWidth,e=n.strideHeight,i=n.strideWidth,r="channelsLast"===n.dataFormat,o=x-1-n.padInfo.top,s=t-1-n.padInfo.left,h=r?1:2,u=r?2:3,a=r?3:1;this.userCode="\n const ivec2 pads = ivec2("+o+", "+s+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords["+a+"];\n\n ivec2 dyCorner = ivec2(coords["+h+"], coords["+u+"]) - 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 < "+x+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+e+".0;\n\n if (dyR < 0.0 || dyR >= "+n.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+x+" - 1 - wR;\n\n for (int wC = 0; wC < "+t+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+i+".0;\n\n if (dyC < 0.0 || dyC >= "+n.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+t+" - 1 - wC;\n\n for (int d2 = 0; d2 < "+n.outChannels+"; d2++) {\n\n if ("+r+") {\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 "},Qa=function(n){this.variableNames=["x","dy"],this.outputShape=n.filterShape;var x=n.strideDepth,t=n.strideHeight,e=n.strideWidth,i=n.padInfo.front,r=n.padInfo.top,o=n.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 < "+n.batchSize+"; b++) {\n for (int yF = 0; yF < "+n.outDepth+"; yF++) {\n int xF = wF + yF * "+x+" - "+i+";\n\n if (xF < 0 || xF >= "+n.inDepth+") {\n continue;\n }\n\n for (int yR = 0; yR < "+n.outHeight+"; yR++) {\n int xR = wR + yR * "+t+" - "+r+";\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+n.outWidth+"; yC++) {\n int xC = wC + yC * "+e+" - "+o+";\n\n if (xC < 0 || xC >= "+n.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 "},Ga=function(n){this.variableNames=["dy","W"],this.outputShape=n.inShape;var x=n.filterDepth,t=n.filterHeight,e=n.filterWidth,i=n.strideDepth,r=n.strideHeight,o=n.strideWidth,s=x-1-n.padInfo.front,h=t-1-n.padInfo.top,u=e-1-n.padInfo.left;this.userCode="\n const ivec3 pads = ivec3("+s+", "+h+", "+u+");\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 < "+x+"; wF++) {\n float dyF = float(dyFCorner + wF) / "+i+".0;\n\n if (dyF < 0.0 || dyF >= "+n.outDepth+".0 || fract(dyF) > 0.0) {\n continue;\n }\n int idyF = int(dyF);\n\n int wFPerm = "+x+" - 1 - wF;\n\n for (int wR = 0; wR < "+t+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+n.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+t+" - 1 - wR;\n\n for (int wC = 0; wC < "+e+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+n.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+e+" - 1 - wC;\n\n for (int d2 = 0; d2 < "+n.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 "},Ka=function(n){this.variableNames=["x","dy"],this.outputShape=n.filterShape;var x=n.strideHeight,t=n.strideWidth,e=n.padInfo.top,i=n.padInfo.left,r=n.outChannels/n.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 * "+r+" + dm;\n\n float dotProd = 0.0;\n\n // TO DO: Vec4 over the batch size\n for (int b = 0; b < "+n.batchSize+"; b++) {\n for (int yR = 0; yR < "+n.outHeight+"; yR++) {\n int xR = wR + yR * "+x+" - "+e+";\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+n.outWidth+"; yC++) {\n int xC = wC + yC * "+t+" - "+i+";\n\n if (xC < 0 || xC >= "+n.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 "},Ya=function(n){this.variableNames=["dy","W"],this.outputShape=n.inShape;var x=n.filterHeight,t=n.filterWidth,e=n.strideHeight,i=n.strideWidth,r=x-1-n.padInfo.top,o=t-1-n.padInfo.left,s=n.outChannels/n.inChannels;this.userCode="\n const ivec2 pads = ivec2("+r+", "+o+");\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 < "+x+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+e+".0;\n\n if (dyR < 0.0 || dyR >= "+n.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+x+" - 1 - wR;\n\n for (int wC = 0; wC < "+t+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+i+".0;\n\n if (dyC < 0.0 || dyC >= "+n.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+t+" - 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 "},Ja=function(n,x,t,e){void 0===x&&(x=!1),void 0===t&&(t=null),void 0===e&&(e=!1),this.variableNames=["x","W"],this.outputShape=n.outShape;var i=n.padInfo.top,r=n.padInfo.left,o=n.strideHeight,s=n.strideWidth,h=n.dilationHeight,u=n.dilationWidth,a=n.filterHeight,g=n.filterWidth,l=4*Math.floor(n.inChannels/4),c=n.inChannels%4,d="channelsLast"===n.dataFormat,f=d?1:2,p=d?2:3,y=d?3:1,m="",b="";t&&(m=e?"float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n "+t+"\n }":"\n float activation(float x) {\n "+t+"\n }\n ",b="result = activation(result);");var z=x?"result += getBiasAtOutCoords();":"";x&&this.variableNames.push("bias"),e&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+m+"\n\n const ivec2 strides = ivec2("+o+", "+s+");\n const ivec2 pads = ivec2("+i+", "+r+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d2 = coords["+y+"];\n\n ivec2 xRCCorner =\n ivec2(coords["+f+"], coords["+p+"]) * 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 < "+a+"; wR++) {\n int xR = xRCorner + wR * "+h+";\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+g+"; wC++) {\n int xC = xCCorner + wC * "+u+";\n\n if (xC < 0 || xC >= "+n.inWidth+") {\n continue;\n }\n\n for (int d1 = 0; d1 < "+l+"; 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 ("+d+") {\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===c)+") {\n\n if ("+d+") {\n dotProd +=\n getX(batch, xR, xC, "+l+") *\n getW(wR, wC, "+l+", d2);\n } else {\n dotProd +=\n getX(batch, "+l+", xR, xC) *\n getW(wR, wC, "+l+", d2);\n }\n\n } else if ("+(2===c)+") {\n vec2 wValues = vec2(\n getW(wR, wC, "+l+", d2),\n getW(wR, wC, "+l+" + 1, d2)\n );\n\n if ("+d+") {\n vec2 xValues = vec2(\n getX(batch, xR, xC, "+l+"),\n getX(batch, xR, xC, "+l+" + 1)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec2 xValues = vec2(\n getX(batch, "+l+", xR, xC),\n getX(batch, "+l+" + 1, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n } else if ("+(3===c)+") {\n vec3 wValues = vec3(\n getW(wR, wC, "+l+", d2),\n getW(wR, wC, "+l+" + 1, d2),\n getW(wR, wC, "+l+" + 2, d2)\n );\n\n if ("+d+") {\n vec3 xValues = vec3(\n getX(batch, xR, xC, "+l+"),\n getX(batch, xR, xC, "+l+" + 1),\n getX(batch, xR, xC, "+l+" + 2)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec3 xValues = vec3(\n getX(batch, "+l+", xR, xC),\n getX(batch, "+l+" + 1, xR, xC),\n getX(batch, "+l+" + 2, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n }\n }\n }\n\n float result = dotProd;\n "+z+"\n "+b+"\n setOutput(result);\n }\n "},Xa=function(n){this.variableNames=["x","W"],this.outputShape=n.outShape;var x=n.padInfo.front,t=n.padInfo.top,e=n.padInfo.left,i=n.strideDepth,r=n.strideHeight,o=n.strideWidth,s=n.dilationDepth,h=n.dilationHeight,u=n.dilationWidth,a=n.filterDepth,g=n.filterHeight,l=n.filterWidth,c=4*Math.floor(n.inChannels/4),d=n.inChannels%4;this.userCode="\n const ivec3 strides = ivec3("+i+", "+r+", "+o+");\n const ivec3 pads = ivec3("+x+", "+t+", "+e+");\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 < "+a+"; wF++) {\n int xF = xFCorner + wF * "+s+";\n\n if (xF < 0 || xF >= "+n.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+g+"; wR++) {\n int xR = xRCorner + wR * "+h+";\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+l+"; wC++) {\n int xC = xCCorner + wC * "+u+";\n\n if (xC < 0 || xC >= "+n.inWidth+") {\n continue;\n }\n\n for (int d1 = 0; d1 < "+c+"; 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===d)+") {\n dotProd +=\n getX(batch, xF, xR, xC, "+c+") *\n getW(wF, wR, wC, "+c+", d2);\n } else if ("+(2===d)+") {\n vec2 xValues = vec2(\n getX(batch, xF, xR, xC, "+c+"),\n getX(batch, xF, xR, xC, "+c+" + 1)\n );\n vec2 wValues = vec2(\n getW(wF, wR, wC, "+c+", d2),\n getW(wF, wR, wC, "+c+" + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if ("+(3===d)+") {\n vec3 xValues = vec3(\n getX(batch, xF, xR, xC, "+c+"),\n getX(batch, xF, xR, xC, "+c+" + 1),\n getX(batch, xF, xR, xC, "+c+" + 2)\n );\n vec3 wValues = vec3(\n getW(wF, wR, wC, "+c+", d2),\n getW(wF, wR, wC, "+c+" + 1, d2),\n getW(wF, wR, wC, "+c+" + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n "},Za=function(n,x,t,e){void 0===x&&(x=!1),void 0===t&&(t=null),void 0===e&&(e=!1),this.variableNames=["x","W"],this.outputShape=n.outShape;var i=n.inHeight,r=n.inWidth,o=n.padInfo.top,s=n.padInfo.left,h=n.strideHeight,u=n.strideWidth,a=n.dilationHeight,g=n.dilationWidth,l=n.filterHeight,c=n.filterWidth,d=n.outChannels/n.inChannels,f="",p="";t&&(f=e?"float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n "+t+"\n }":"\n float activation(float x) {\n "+t+"\n }\n ",p="result = activation(result);");var y=x?"result += getBiasAtOutCoords();":"";x&&this.variableNames.push("bias"),e&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+f+"\n\n const ivec2 strides = ivec2("+h+", "+u+");\n const ivec2 pads = ivec2("+o+", "+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 / "+d+";\n int q = d2 - d1 * "+d+";\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 < "+l+"; wR++) {\n int xR = xRCorner + wR * "+a+";\n\n if (xR < 0 || xR >= "+i+") {\n continue;\n }\n\n for (int wC = 0; wC < "+c+"; wC++) {\n int xC = xCCorner + wC * "+g+";\n\n if (xC < 0 || xC >= "+r+") {\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 "+y+"\n "+p+"\n setOutput(result);\n }\n "},$a=function(n,x,t,e){void 0===x&&(x=!1),void 0===t&&(t=null),void 0===e&&(e=!1),this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n.outShape;for(var i=n.inHeight,r=n.inWidth,o=n.padInfo.top,s=n.padInfo.left,h=n.strideHeight,u=n.strideWidth,a=n.dilationHeight,g=n.dilationWidth,l=n.filterHeight,c=n.filterWidth,d=c,f="int xR; int xC; int xCOffset;",p=0;p<l;p++)for(var y=0;y<c;y++)f+="\n vec4 xTexelR"+p+"C"+2*y+" = vec4(0.);\n vec4 wR"+p+"C"+y+" = vec4(0.);\n vec4 xR"+p+"C"+y+" = vec4(0.);";for(p=0;p<l;p++)for(var m=0;m<d;m++){if(f+="\n xR = xRCorner + "+p*a+";\n xC = xCCorner + "+(y=2*m)*g+";\n ",1===u){if(y<c&&(f+=s%2==1?"\n xCOffset = xC + 1;\n if(xR >= 0 && xR < "+i+" && xCOffset >= 0 && xCOffset < "+r+") {\n xTexelR"+p+"C"+y+" = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if(xCOffset + 1 >= "+r+") {\n xTexelR"+p+"C"+y+".zw = vec2(0.);\n }\n } else {\n xTexelR"+p+"C"+y+" = vec4(0.);\n }\n\n xCOffset = xC + 1 - 2;\n if(xR >= 0 && xR < "+i+" && xCOffset >= 0 && xCOffset < "+r+") {\n vec4 previous = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if(xCOffset + 1 >= "+r+") {\n previous.zw = vec2(0.);\n }\n\n xR"+p+"C"+y+" = vec4(previous.zw, xTexelR"+p+"C"+y+".xy);\n } else {\n xR"+p+"C"+y+" = vec4(0, 0, xTexelR"+p+"C"+y+".xy);\n }\n ":"\n if(xR >= 0 && xR < "+i+" && xC >= 0 && xC < "+r+") {\n xTexelR"+p+"C"+y+" = getX(batch, xR, xC, d1);\n } else {\n xTexelR"+p+"C"+y+" = vec4(0.);\n }\n\n xR"+p+"C"+y+" = xTexelR"+p+"C"+y+";\n ",y+1<c)){var b=s%2==0?Ki(g):g;g%2==0&&s%2==1||g%2!=0&&s%2!=1?(f+="\n xCOffset = xC + "+s%2+" + "+b+";\n\n if(xR >= 0 && xR < "+i+" &&\n xCOffset >= 0 && xCOffset < "+r+") {\n xTexelR"+p+"C"+(y+2)+" = getX(batch, xR, xCOffset, d1);\n }\n ",g>1&&(f+="\n xCOffset -= 2;\n if(xR >= 0 && xR < "+i+" &&\n xCOffset >= 0 && xCOffset < "+r+") {\n xTexelR"+p+"C"+y+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+p+"C"+y+" = vec4(0.);\n }\n "),f+="\n xR"+p+"C"+(y+1)+" = vec4(\n xTexelR"+p+"C"+y+".zw, xTexelR"+p+"C"+(y+2)+".xy);\n "):f+="\n xCOffset = xC + "+b+";\n\n if(xR >= 0 && xR < "+i+" &&\n xCOffset >= 0 && xCOffset < "+r+") {\n xTexelR"+p+"C"+(y+2)+" = getX(batch, xR, xCOffset, d1);\n }\n\n xR"+p+"C"+(y+1)+" = xTexelR"+p+"C"+(y+2)+";\n "}}else y<c&&(f+="\n if(xR >= 0 && xR < "+i+") {\n ",s%2==1?(f+="\n xCOffset = xC + 1 - "+u+";\n if(xCOffset >= 0 && xCOffset < "+r+") {\n xTexelR"+p+"C"+y+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+p+"C"+y+" = vec4(0.);\n }\n\n if(xC + 1 >= 0 && xC + 1 < "+r+") {\n xTexelR"+p+"C"+(y+2)+" = getX(batch, xR, xC + 1, d1);\n } else {\n xTexelR"+p+"C"+(y+2)+" = vec4(0.);\n }\n\n xR"+p+"C"+y+" = vec4(\n xTexelR"+p+"C"+y+".zw, xTexelR"+p+"C"+(y+2)+".zw);\n ",y+1<c&&(f+="\n vec4 final = vec4(0.);\n xCOffset = xC + 1 + "+u+";\n if(xCOffset >= 0 && xCOffset < "+r+") {\n final = getX(batch, xR, xCOffset, d1);\n }\n xR"+p+"C"+(y+1)+" = vec4(xTexelR"+p+"C"+(y+2)+".xy, final.xy);\n ")):(f+="\n if(xC >= 0 && xC < "+r+") {\n xTexelR"+p+"C"+y+" = getX(batch, xR, xC, d1);\n } else {\n xTexelR"+p+"C"+y+" = vec4(0.);\n }\n\n xCOffset = xC + "+u+";\n if(xCOffset >= 0 && xCOffset < "+r+") {\n xTexelR"+p+"C"+(y+2)+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+p+"C"+(y+2)+" = vec4(0.);\n }\n\n xR"+p+"C"+y+" = vec4(\n xTexelR"+p+"C"+y+".xy, xTexelR"+p+"C"+(y+2)+".xy);\n ",y+1<c&&(f+="\n xR"+p+"C"+(y+1)+" = vec4(\n xTexelR"+p+"C"+y+".zw, xTexelR"+p+"C"+(y+2)+".zw);\n ")),f+="}");y<c&&(f+="\n vec4 wTexelR"+p+"C"+y+" = getW("+p+", "+y+", d1, q);\n wR"+p+"C"+y+" = vec4(wTexelR"+p+"C"+y+".xz, wTexelR"+p+"C"+y+".xz);\n ",y+1<c&&(f+="\n vec4 wTexelR"+p+"C"+(y+1)+" = getW("+p+", "+(y+1)+", d1, q);\n wR"+p+"C"+(y+1)+" =\n vec4(wTexelR"+p+"C"+(y+1)+".xz, wTexelR"+p+"C"+(y+1)+".xz);"))}for(p=0;p<l;p++)for(y=0;y<c;y++)f+="dotProd += xR"+p+"C"+y+" * wR"+p+"C"+y+";";var z="",v="";t&&(z=e?"vec4 activation(vec4 a) {\n vec4 b = getPreluActivationWeightsAtOutCoords();\n "+t+"\n }":"vec4 activation(vec4 x) {\n "+t+"\n }",v="result = activation(result);");var j=x?"result += getBiasAtOutCoords();":"";x&&this.variableNames.push("bias"),e&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+z+"\n\n const ivec2 strides = ivec2("+h+", "+u+");\n const ivec2 pads = ivec2("+o+", "+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 "+f+"\n\n vec4 result = dotProd;\n "+j+"\n "+v+"\n setOutput(result);\n }\n "},ng=function(n,x,t,e,i){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];var r=n[0],o=n[1],s=n[2],h=n[3],u=x[0],a=t[0],g=t[1];this.outputShape=[u,a,g,h];var l="bilinear"===e?1:0,c=[o-1+".0",s-1+".0"],d=c[0],f=c[1],p=a>1?[""+(o-1)/(a-1),"(y2-y1) * height_ratio","y1*"+d+" + float(y)*(height_scale)"]:["0.0","0.0","0.5 * (y1+y2) * "+d],y=p[0],m=p[1],b=p[2],z=g>1?[""+(s-1)/(g-1),"(x2-x1) * width_ratio","x1*"+f+" + float(x)*(width_scale)"]:["0.0","0.0","0.5 * (x1+x2) * "+f],v=z[0],j=z[1],w=z[2];this.userCode="\n const float height_ratio = float("+y+");\n const float width_ratio = float("+v+");\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 >= "+r+") {\n return;\n }\n\n float height_scale = "+m+";\n float width_scale = "+j+";\n\n float in_y = "+b+";\n if( in_y < 0.0 || in_y > "+d+" ) {\n setOutput(float("+i+"));\n return;\n }\n float in_x = "+w+";\n if( in_x < 0.0 || in_x > "+f+" ) {\n setOutput(float("+i+"));\n return;\n }\n\n vec2 sourceFracIndexCR = vec2(in_x,in_y);\n if("+l+" == 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 "},xg=function(n,x,t){this.variableNames=["x"],this.outputShape=n;var e=n.length,i=n[n.length-1],r=t?"<":">";this.userCode="\n int getIndex(int i) {\n "+(t?"return "+i+" -i - 1;":"return i;")+"\n }\n\n void main() {\n "+za(e)+" coords = getOutputCoords();\n int end = "+tg(e,"coords")+";\n float val = 0.0;\n for (int i = "+i+" - 1; i >= 0; i -= 1) {\n int idx = getIndex(i);\n if (idx "+r+" end) {\n continue;\n }\n if (idx == end && "+x+") {\n continue;\n }\n "+tg(e,"coords")+" = idx;\n val += getX("+function(n,x){if(1===n)return""+x;if(2===n)return x+".x, "+x+".y";if(3===n)return x+".x, "+x+".y, "+x+".z";if(4===n)return x+".x, "+x+".y, "+x+".z, "+x+".w";throw Error("Cumulative sum for rank "+n+" is not yet supported")}(e,"coords")+");\n }\n setOutput(val);\n }\n "};function tg(n,x){if(1===n)return""+x;if(2===n)return x+".y";if(3===n)return x+".z";if(4===n)return x+".w";throw Error("Cumulative sum for rank "+n+" is not yet supported")}var eg=function(n){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=co.DENSE;var x=jo(n),t=sa();this.outputShape=n,this.userCode="\n ivec3 outCoordsFromFlatIndex(int index) {\n "+ha(["r","c","d"],n)+"\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+x[0]+", "+x[1]+"));\n int index = 4 * (resTexRC.x * "+x[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 "+t.output+" = result;\n }\n "},ig=function(n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=co.DENSE;var x=jo(n),t=sa();this.outputShape=n,this.userCode="\n ivec3 outCoordsFromFlatIndex(int index) {\n "+ha(["r","c","d"],n)+"\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+x[0]+", "+x[1]+"));\n int index = 4 * (resTexRC.x * "+x[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 "+t.output+" = result;\n }\n "},rg=function(){function n(n,x,t){this.variableNames=["x"],this.outputShape=[],this.outputShape=n,this.blockSize=x,this.dataFormat=t,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 / "+x+";\n int offset_h = imod(h, "+x+");\n int in_w = w / "+x+";\n int offset_w = imod(w, "+x+");\n int offset_d = (offset_h * "+x+" + offset_w) *\n "+this.getOutputDepthSize()+";\n int in_d = d + offset_d;\n\n float result = "+this.getInputSamplingString()+";\n setOutput(result);\n }\n "}return n.prototype.getHeightCoordString=function(){return"NHWC"===this.dataFormat?"coords[1]":"coords[2]"},n.prototype.getWidthCoordString=function(){return"NHWC"===this.dataFormat?"coords[2]":"coords[3]"},n.prototype.getDepthCoordString=function(){return"NHWC"===this.dataFormat?"coords[3]":"coords[1]"},n.prototype.getOutputDepthSize=function(){return"NHWC"===this.dataFormat?this.outputShape[3]:this.outputShape[1]},n.prototype.getInputSamplingString=function(){return"NHWC"===this.dataFormat?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"},n}(),og=function(n){this.variableNames=["X"],this.outputShape=[n,n],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 "},sg=function(n){this.variableNames=["A"],this.outTexUsage=fo.DOWNLOAD;var x=sa();this.outputShape=n,this.userCode="\n "+aa+"\n\n void main() {\n float x = getAAtOutCoords();\n "+x.output+" = encode_float(x);\n }\n "},hg=function(n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=fo.DOWNLOAD;var x=sa();this.outputShape=n,this.userCode="\n "+aa+"\n\n void main() {\n ivec3 coords = getOutputCoords();\n float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\n "+x.output+" = encode_float(x);\n }\n "},ug=function(n,x,t){void 0===t&&(t=!1),this.variableNames=["A"];var e=sa(),i=x[0],r=x[1];this.outputShape=n;var o="result";t&&(o="floor(result * 255. + 0.5)"),this.userCode="\n "+ua(n)+"\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 / "+r+";\n int c = imod(flatIndex, "+r+");\n vec2 uv = (vec2(c, r) + halfCR) / vec2("+r+".0, "+i+".0);\n vec4 values = "+e.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 "+e.output+" = vec4("+o+", 0., 0., 0.);\n }\n "},ag=function(n,x,t){void 0===t&&(t=!1),this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;var e=sa(),i=x[0],r=x[1];this.outputShape=n;var o="",s="result";t&&(s="floor(result * 255. + 0.5)");for(var h=0;h<=1;h++)for(var u=0;u<=1;u++){var a=2*h+u;o+="\n localCoords = coords;\n if(localCoords[2] + "+u+" < "+n[2]+") {\n localCoords[2] += "+u+";\n if(localCoords[1] + "+h+" < "+n[1]+") {\n localCoords[1] += "+h+";\n\n flatIndex = getFlatIndex(localCoords);\n offset = imod(flatIndex, 4);\n\n flatIndex = idiv(flatIndex, 4, 1.);\n\n r = flatIndex / "+r+";\n c = imod(flatIndex, "+r+");\n uv = (vec2(c, r) + halfCR) / vec2("+r+".0, "+i+".0);\n values = "+e.texture2D+"(A, uv);\n\n if(offset == 0) {\n result["+a+"] = values[0];\n } else if(offset == 1) {\n result["+a+"] = values[1];\n } else if(offset == 2) {\n result["+a+"] = values[2];\n } else {\n result["+a+"] = values[3];\n }\n }\n }\n "}this.userCode="\n "+ua(n)+"\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 "+o+"\n\n "+e.output+" = "+s+";\n }\n "},gg="return real * expR - imag * expI;",lg="return real * expI + imag * expR;",cg=function(n,x,t){this.variableNames=["real","imag"];var e=x[1];this.outputShape=x;var i=t?"2.0 * "+Math.PI:"-2.0 * "+Math.PI,r=t?e+".0":"1.0";this.userCode="\n const float exponentMultiplier = "+i+";\n\n float unaryOpComplex(float real, float expR, float imag, float expI) {\n "+n+"\n }\n\n float mulMatDFT(int batch, int index) {\n float indexRatio = float(index) / float("+e+");\n float exponentMultiplierTimesIndexRatio =\n exponentMultiplier * indexRatio;\n\n float result = 0.0;\n\n for (int i = 0; i < "+e+"; 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) / "+r+";\n }\n\n return result;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n setOutput(mulMatDFT(coords[0], coords[1]));\n }\n "},dg=function(){function n(n,x){this.outputShape=[],this.variableNames=["x"],this.outputShape=n,this.userCode="\n uniform float value;\n void main() {\n // Input can be obtained from uniform value.\n setOutput(value);\n }\n "}return n.prototype.getCustomSetupFunc=function(n){var x=this;return function(t,e){null==x.valueLoc&&(x.valueLoc=t.getUniformLocationNoThrow(e,"value")),t.gl.uniform1f(x.valueLoc,n)}},n}(),fg=function(n,x,t){this.variableNames=["A","indices"];var e=n.slice();e[t]=x,this.outputShape=e,this.rank=e.length;var i=za(this.rank),r=function(n,x){var t=n.length;if(t>4)throw Error("Gather for rank "+t+" is not yet supported");if(1===t)return"int(getIndices(resRC))";for(var e=["resRC.x","resRC.y","resRC.z","resRC.w"],i=[],r=0;r<n.length;r++)r===x?i.push("int(getIndices("+e[r]+"))"):i.push(""+e[r]);return i.join()}(n,t);this.userCode="\n void main() {\n "+i+" resRC = getOutputCoords();\n setOutput(getA("+r+"));\n }\n "},pg=function(n,x,t){this.sliceDim=n,this.strides=x,this.variableNames=["x","indices"],this.outputShape=t;var e=za(x.length),i=za(t.length),r=this.sliceDim>1?"strides[j]":"strides";this.userCode="\n "+e+" strides = "+e+"("+this.strides+");\n void main() {\n "+i+" 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 * "+r+";\n }\n setOutput(getX(flattenIndex, coords[1]));\n }\n "};function yg(n,x){var t=sa();return Do(n,x,t.version+"\n precision highp float;\n "+t.attribute+" vec3 clipSpacePos;\n "+t.attribute+" vec2 uv;\n "+t.varyingVs+" vec2 resultUV;\n\n void main() {\n gl_Position = vec4(clipSpacePos, 1);\n resultUV = uv;\n }")}function mg(n,x){return Fo(n,x,new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]))}function bg(n,x){return Po(n,x,new Uint16Array([0,1,2,2,1,3]))}function zg(n,x,t,e,i,r,o){Ho(t,e);var s=Lo(n,x),h=n.TEXTURE_2D;return qo(n,x,function(){return n.bindTexture(h,s)}),qo(n,x,function(){return n.texParameteri(h,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE)}),qo(n,x,function(){return n.texParameteri(h,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE)}),qo(n,x,function(){return n.texParameteri(h,n.TEXTURE_MIN_FILTER,n.NEAREST)}),qo(n,x,function(){return n.texParameteri(h,n.TEXTURE_MAG_FILTER,n.NEAREST)}),qo(n,x,function(){return n.texImage2D(h,0,i,t,e,0,r,o,null)}),qo(n,x,function(){return n.bindTexture(n.TEXTURE_2D,null)}),s}function vg(n,x,t,e,i){var r=vo(t,e);return zg(n,x,r[0],r[1],i.internalFormatFloat,i.textureFormatFloat,n.FLOAT)}function jg(n,x,t,e,i){var r=vo(t,e);return zg(n,x,r[0],r[1],i.internalFormatHalfFloat,i.textureFormatFloat,i.textureTypeHalfFloat)}function wg(n,x,t,e,i){var r=vo(t,e);return zg(n,x,r[0],r[1],n.RGBA,n.RGBA,n.UNSIGNED_BYTE)}function kg(n,x,t,e,i){var r=wo(t,e);return zg(n,x,r[0],r[1],i.internalFormatPackedFloat,n.RGBA,n.FLOAT)}function qg(n,x,t,e,i){var r=wo(t,e);return zg(n,x,r[0],r[1],i.internalFormatPackedHalfFloat,n.RGBA,i.textureTypeHalfFloat)}function Cg(n,x,t,e){return qo(n,x,function(){return n.bindBuffer(n.ARRAY_BUFFER,e)}),Vo(n,x,t,"clipSpacePos",e,3,20,0)&&Vo(n,x,t,"uv",e,2,20,12)}function Ag(n,x,t,e,i,r,o){var s,h,u;qo(n,x,function(){return n.bindTexture(n.TEXTURE_2D,t)}),r instanceof Uint8Array?(s=new Uint8Array(e*i*4),h=n.UNSIGNED_BYTE,u=n.RGBA):(s=new Float32Array(e*i*4),h=n.FLOAT,u=o.internalFormatPackedFloat),s.set(r),qo(n,x,function(){return n.texImage2D(n.TEXTURE_2D,0,u,e,i,0,n.RGBA,h,s)}),qo(n,x,function(){return n.bindTexture(n.TEXTURE_2D,null)})}function Eg(n,x,t,e){qo(n,x,function(){return n.bindTexture(n.TEXTURE_2D,t)}),e.data instanceof Uint8Array?qo(n,x,function(){return n.texImage2D(n.TEXTURE_2D,0,n.RGBA,e.width,e.height,0,n.RGBA,n.UNSIGNED_BYTE,e.data)}):qo(n,x,function(){return n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,e)}),qo(n,x,function(){return n.bindTexture(n.TEXTURE_2D,null)})}function Sg(n,x,t,e,i){var r=n.createBuffer();qo(n,x,function(){return n.bindBuffer(n.PIXEL_PACK_BUFFER,r)});var o=16*t*e;return qo(n,x,function(){return n.bufferData(n.PIXEL_PACK_BUFFER,o,n.STREAM_READ)}),qo(n,x,function(){return n.readPixels(0,0,e,t,n.RGBA,n.FLOAT,0)}),qo(n,x,function(){return n.bindBuffer(n.PIXEL_PACK_BUFFER,null)}),r}function Ig(n,x,t){var e=n,i=new Float32Array(t);return e.bindBuffer(e.PIXEL_PACK_BUFFER,x),e.getBufferSubData(e.PIXEL_PACK_BUFFER,0,i),e.bindBuffer(e.PIXEL_PACK_BUFFER,null),i}function Dg(n,x,t,e,i){var r=vo(t,e),o=r[0],s=r[1],h=new Uint8Array(t*e*4);return qo(n,x,function(){return n.readPixels(0,0,o,s,i.downloadTextureFormat,n.UNSIGNED_BYTE,h)}),new Float32Array(h.buffer)}function Og(n,x,t,e,i,r,o,s){var h=n,u=new Float32Array(function(n,x){var t=wo(n,x);return t[0]*t[1]*4}(r,o));return h.bindBuffer(h.PIXEL_PACK_BUFFER,x),h.getBufferSubData(h.PIXEL_PACK_BUFFER,0,u),h.bindBuffer(h.PIXEL_PACK_BUFFER,null),u}function _g(n,x,t,e){var i=new Float32Array(t*e*4);return qo(n,x,function(){return n.readPixels(0,0,e,t,n.RGBA,n.FLOAT,i)}),i}var Tg=Object.freeze({createVertexShader:yg,createVertexBuffer:mg,createIndexBuffer:bg,createFloat32MatrixTexture:vg,createFloat16MatrixTexture:jg,createUnsignedBytesMatrixTexture:wg,createPackedMatrixTexture:kg,createFloat16PackedMatrixTexture:qg,bindVertexProgramAttributeStreams:Cg,uploadDenseMatrixToTexture:Ag,uploadPixelDataToTexture:Eg,createBufferFromOutputTexture:Sg,downloadFloat32MatrixFromBuffer:Ig,downloadByteEncodedFloatMatrixFromOutputTexture:Dg,downloadPackedMatrixFromBuffer:Og,downloadMatrixFromPackedOutputTexture:_g}),Rg=function(){function n(n){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];var x=Bi().getNumber("WEBGL_VERSION");null!=n?(this.gl=n,bo(x,n)):this.gl=zo(x);var t="WEBGL_color_buffer_float";if(1===Bi().getNumber("WEBGL_VERSION")){if(this.textureFloatExtension=Io(this.gl,this.debug,"OES_texture_float"),as(this.gl,"OES_texture_half_float"))this.textureHalfFloatExtension=Io(this.gl,this.debug,"OES_texture_half_float");else if(Bi().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(t),as(this.gl,"EXT_color_buffer_half_float"))this.colorBufferHalfFloatExtension=Io(this.gl,this.debug,"EXT_color_buffer_half_float");else if(Bi().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(t="EXT_color_buffer_float",as(this.gl,t))this.colorBufferFloatExtension=this.gl.getExtension(t);else{if(!as(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=mg(this.gl,this.debug),this.indexBuffer=bg(this.gl,this.debug),this.framebuffer=Uo(this.gl,this.debug),this.textureConfig=ko(this.gl,this.textureHalfFloatExtension)}return Object.defineProperty(n.prototype,"debug",{get:function(){return Bi().getBool("DEBUG")},enumerable:!0,configurable:!0}),n.prototype.dispose=function(){var n=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 x=this.gl;qo(x,this.debug,function(){return x.finish()}),qo(x,this.debug,function(){return x.bindFramebuffer(x.FRAMEBUFFER,null)}),qo(x,this.debug,function(){return x.deleteFramebuffer(n.framebuffer)}),qo(x,this.debug,function(){return x.bindBuffer(x.ARRAY_BUFFER,null)}),qo(x,this.debug,function(){return x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,null)}),qo(x,this.debug,function(){return x.deleteBuffer(n.indexBuffer)}),this.disposed=!0}},n.prototype.createFloat32MatrixTexture=function(n,x){return this.throwIfDisposed(),vg(this.gl,this.debug,n,x,this.textureConfig)},n.prototype.createFloat16MatrixTexture=function(n,x){return this.throwIfDisposed(),jg(this.gl,this.debug,n,x,this.textureConfig)},n.prototype.createUnsignedBytesMatrixTexture=function(n,x){return this.throwIfDisposed(),wg(this.gl,this.debug,n,x,this.textureConfig)},n.prototype.uploadPixelDataToTexture=function(n,x){this.throwIfDisposed(),Eg(this.gl,this.debug,n,x)},n.prototype.uploadDenseMatrixToTexture=function(n,x,t,e){this.throwIfDisposed(),Ag(this.gl,this.debug,n,x,t,e,this.textureConfig)},n.prototype.createFloat16PackedMatrixTexture=function(n,x){return this.throwIfDisposed(),qg(this.gl,this.debug,n,x,this.textureConfig)},n.prototype.createPackedMatrixTexture=function(n,x){return this.throwIfDisposed(),kg(this.gl,this.debug,n,x,this.textureConfig)},n.prototype.deleteMatrixTexture=function(n){var x=this;this.throwIfDisposed(),this.outputTexture===n&&(Jo(this.gl,this.debug,this.framebuffer),this.outputTexture=null),qo(this.gl,this.debug,function(){return x.gl.deleteTexture(n)})},n.prototype.downloadByteEncodedFloatMatrixFromOutputTexture=function(n,x,t){var e=this;return this.downloadMatrixDriver(n,function(){return Dg(e.gl,e.debug,x,t,e.textureConfig)})},n.prototype.downloadPackedMatrixFromBuffer=function(n,x,t,e,i,r){return Og(this.gl,n,0,0,0,i,r,this.textureConfig)},n.prototype.downloadFloat32MatrixFromBuffer=function(n,x){return Ig(this.gl,n,x)},n.prototype.createBufferFromTexture=function(n,x,t){this.bindTextureToFrameBuffer(n);var e=Sg(this.gl,this.debug,x,t,this.textureConfig);return this.unbindTextureToFrameBuffer(),e},n.prototype.createAndWaitForFence=function(){var n=this.createFence(this.gl);return this.pollFence(n)},n.prototype.createFence=function(n){var x,t,e=this;if(Bi().getBool("WEBGL_FENCE_API_ENABLED")){var i=n,r=i.fenceSync(i.SYNC_GPU_COMMANDS_COMPLETE,0);n.flush(),t=function(){var n=i.clientWaitSync(r,0,0);return n===i.ALREADY_SIGNALED||n===i.CONDITION_SATISFIED},x=r}else Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(x=this.beginQuery(),this.endQuery(),t=function(){return e.isQueryAvailable(x,Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}):t=function(){return!0};return{query:x,isFencePassed:t}},n.prototype.downloadMatrixFromPackedTexture=function(n,x,t){var e=this;return this.downloadMatrixDriver(n,function(){return _g(e.gl,e.debug,x,t)})},n.prototype.createProgram=function(n){this.throwIfDisposed();var x=this.gl,t=Oo(x,this.debug,n),e=yg(x,this.debug),i=Bo(x,this.debug);return qo(x,this.debug,function(){return x.attachShader(i,e)}),qo(x,this.debug,function(){return x.attachShader(i,t)}),Mo(x,this.debug,i),this.debug&&No(x,this.debug,i),this.vertexAttrsAreBound||(this.setProgram(i),this.vertexAttrsAreBound=Cg(x,this.debug,this.program,this.vertexBuffer)),i},n.prototype.deleteProgram=function(n){var x=this;this.throwIfDisposed(),n===this.program&&(this.program=null),null!=n&&qo(this.gl,this.debug,function(){return x.gl.deleteProgram(n)})},n.prototype.setProgram=function(n){var x=this;this.throwIfDisposed(),this.program=n,null!=this.program&&this.debug&&No(this.gl,this.debug,this.program),qo(this.gl,this.debug,function(){return x.gl.useProgram(n)})},n.prototype.getUniformLocation=function(n,x,t){return void 0===t&&(t=!0),this.throwIfDisposed(),t?Qo(this.gl,this.debug,n,x):Go(this.gl,n,x)},n.prototype.getAttributeLocation=function(n,x){var t=this;return this.throwIfDisposed(),qo(this.gl,this.debug,function(){return t.gl.getAttribLocation(n,x)})},n.prototype.getUniformLocationNoThrow=function(n,x){return this.throwIfDisposed(),this.gl.getUniformLocation(n,x)},n.prototype.setInputMatrixTexture=function(n,x,t){this.throwIfDisposed(),this.throwIfNoProgram(),Ko(this.gl,this.debug,this.program,n,x,t)},n.prototype.setOutputMatrixTexture=function(n,x,t){this.setOutputMatrixTextureDriver(n,t,x)},n.prototype.setOutputPackedMatrixTexture=function(n,x,t){this.throwIfDisposed();var e=wo(x,t),i=e[0],r=e[1];this.setOutputMatrixTextureDriver(n,i,r)},n.prototype.setOutputMatrixWriteRegion=function(n,x,t,e){this.setOutputMatrixWriteRegionDriver(t,n,e,x)},n.prototype.setOutputPackedMatrixWriteRegion=function(n,x,t,e){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")},n.prototype.debugValidate=function(){null!=this.program&&No(this.gl,this.debug,this.program),Xo(this.gl)},n.prototype.executeProgram=function(){this.throwIfDisposed(),this.throwIfNoProgram();var n=this.gl;this.debug&&this.debugValidate(),qo(n,this.debug,function(){return n.drawElements(n.TRIANGLES,6,n.UNSIGNED_SHORT,0)})},n.prototype.blockUntilAllProgramsCompleted=function(){var n=this;this.throwIfDisposed(),qo(this.gl,this.debug,function(){return n.gl.finish()})},n.prototype.getQueryTimerExtension=function(){return null==this.disjointQueryTimerExtension&&(this.disjointQueryTimerExtension=Io(this.gl,this.debug,2===Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension},n.prototype.getQueryTimerExtensionWebGL2=function(){return this.getQueryTimerExtension()},n.prototype.getQueryTimerExtensionWebGL1=function(){return this.getQueryTimerExtension()},n.prototype.beginQuery=function(){if(2===Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){var n=this.gl,x=this.getQueryTimerExtensionWebGL2(),t=n.createQuery();return n.beginQuery(x.TIME_ELAPSED_EXT,t),t}var e=this.getQueryTimerExtensionWebGL1(),i=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,i),i},n.prototype.endQuery=function(){if(2!==Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){var n=this.getQueryTimerExtensionWebGL1();n.endQueryEXT(n.TIME_ELAPSED_EXT)}else{var x=this.gl,t=this.getQueryTimerExtensionWebGL2();x.endQuery(t.TIME_ELAPSED_EXT)}},n.prototype.waitForQueryAndGetTime=function(n){return Oi(this,void 0,void 0,function(){var x=this;return _i(this,function(t){switch(t.label){case 0:return[4,or(function(){return x.disposed||x.isQueryAvailable(n,Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))})];case 1:return t.sent(),[2,this.getQueryTime(n,Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))]}})})},n.prototype.getQueryTime=function(n,x){if(0===x)return null;if(2===x){var t=this.gl;return t.getQueryParameter(n,t.QUERY_RESULT)/1e6}var e=this.getQueryTimerExtensionWebGL1();return e.getQueryObjectEXT(n,e.QUERY_RESULT_EXT)/1e6},n.prototype.isQueryAvailable=function(n,x){if(0===x)return!0;if(2===x){var t=this.gl,e=this.getQueryTimerExtensionWebGL2(),i=t.getQueryParameter(n,t.QUERY_RESULT_AVAILABLE);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(e.GPU_DISJOINT_EXT)),i&&!this.disjoint}return i=(e=this.getQueryTimerExtensionWebGL1()).getQueryObjectEXT(n,e.QUERY_RESULT_AVAILABLE_EXT),null==this.disjoint&&(this.disjoint=this.gl.getParameter(e.GPU_DISJOINT_EXT)),i&&!this.disjoint},n.prototype.pollFence=function(n){var x=this;return new Promise(function(t){x.addItemToPoll(function(){return n.isFencePassed()},function(){return t()})})},n.prototype.pollItems=function(){for(var n=function(n){for(var x=0;x<n.length;++x)if(!n[x]())break;return x-1}(this.itemsToPoll.map(function(n){return n.isDoneFn})),x=0;x<=n;++x)(0,this.itemsToPoll[x].resolveFn)();this.itemsToPoll=this.itemsToPoll.slice(n+1)},n.prototype.addItemToPoll=function(n,x){var t=this;this.itemsToPoll.push({isDoneFn:n,resolveFn:x}),this.itemsToPoll.length>1||or(function(){return t.pollItems(),0===t.itemsToPoll.length})},n.prototype.bindTextureToFrameBuffer=function(n){this.throwIfDisposed(),Yo(this.gl,this.debug,n,this.framebuffer),this.debug&&Xo(this.gl)},n.prototype.unbindTextureToFrameBuffer=function(){null!=this.outputTexture?(Yo(this.gl,this.debug,this.outputTexture,this.framebuffer),this.debug&&Xo(this.gl)):Jo(this.gl,this.debug,this.framebuffer)},n.prototype.downloadMatrixDriver=function(n,x){this.bindTextureToFrameBuffer(n);var t=x();return this.unbindTextureToFrameBuffer(),t},n.prototype.setOutputMatrixTextureDriver=function(n,x,t){this.throwIfDisposed();var e=this.gl;Yo(e,this.debug,n,this.framebuffer),this.debug&&Xo(e),this.outputTexture=n,qo(e,this.debug,function(){return e.viewport(0,0,x,t)}),qo(e,this.debug,function(){return e.scissor(0,0,x,t)})},n.prototype.setOutputMatrixWriteRegionDriver=function(n,x,t,e){var i=this;this.throwIfDisposed(),qo(this.gl,this.debug,function(){return i.gl.scissor(n,x,t,e)})},n.prototype.throwIfDisposed=function(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")},n.prototype.throwIfNoProgram=function(){if(null==this.program)throw new Error("No GPU program is currently set.")},n}();function Bg(n,x){if(n.length!==x.length)throw Error("Binary was compiled with "+n.length+" inputs, but was executed with "+x.length+" inputs");n.forEach(function(n,t){var e=n.logicalShape,i=x[t],r=i.shape;if(!xr(e,r))throw Error("Binary was compiled with different shapes than the current args. Shapes "+e+" and "+r+" must match");if(!n.isUniform||!i.isUniform){var o=n.texShape,s=i.isUniform?null:i.texData.texShape;if(!xr(o,s))throw Error("Binary was compiled with different texture shapes than the current args. Shape "+o+" and "+s+" must match")}})}var Mg=function(n,x,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n;for(var e=t.filterWidth,i=t.inChannels,r=t.strideWidth,o=t.strideHeight,s=t.padInfo,h=t.outWidth,u=t.dilationWidth,a=t.dilationHeight,g=t.dataFormat,l=s.left,c=s.top,d=i*e,f=sa(),p="channelsLast"===g,y=p?0:1,m=p?1:2,b="",z=0;z<=1;z++)for(var v=0;v<=1;v++)b+="\n blockIndex = rc.y + "+v+";\n pos = rc.x + "+z+";\n\n if(blockIndex < "+n[1]+" && pos < "+n[0]+") {\n offsetY = int(blockIndex / ("+h+")) * "+o+" - "+c+";\n d0 = offsetY + "+a+" * (pos / "+d+");\n\n if(d0 < "+x[y]+" && d0 >= 0) {\n\n offsetX = int(mod(float(blockIndex), "+h+".) * "+r+". - "+l+".);\n d1 = offsetX + "+u+" * (int(mod(float(pos), "+d+".) / "+i+".));\n\n if(d1 < "+x[m]+" && d1 >= 0) {\n\n ch = int(mod(float(pos), "+i+".));\n\n if ("+p+") {\n innerDims = vec2(d1, ch);\n result["+(2*z+v)+"] = getChannel(\n getA(d0, int(innerDims.x),\n int(innerDims.y)), innerDims);\n } else {\n innerDims = vec2(d0, d1);\n result["+(2*z+v)+"] = 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 "+b+"\n\n "+f.output+" = result;\n }\n "},Ng=function(n,x,t,e,i){this.variableNames=["x"],this.outputShape=[];var r,o=x,s=n[3]-1;this.outputShape=n;var h="float("+t+") + float("+e+") * sum";r=.5===i?"inversesqrt("+h+")":1===i?"1.0/("+h+")":"exp(log("+h+") * float(-"+i+"));",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 = -"+o+"; j <= "+o+"; 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 * "+r+";\n setOutput(val);\n }\n "},Fg=function(n,x,t,e,i){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=n,this.depth=n[3],this.depthRadius=x,this.bias=t,this.alpha=e,this.beta=i,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 - "+x+")));\n int depthEnd = int(min(float("+this.depth+"),\n float(d + "+x+" + 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("+e+") * norm + float("+t+");\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("+e+")\n * float("+i+")\n * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)\n / norm;\n if (k == d) {\n dyi += pow(norm, -1.0 * "+i+");\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 "},Pg=function(n,x,t,e,i){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;var r,o=x,s=n[3]-1;this.outputShape=n;var h="float("+t+") + float("+e+") * sum";r=.5===i?"inversesqrt("+h+")":1===i?"1.0/("+h+")":"exp(log("+h+") * float(-"+i+"));",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 - "+o+";\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 = - "+o+"; j <= "+o+"; 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 * "+r+";\n setOutput(result);\n }\n "},Lg=function(n){this.variableNames=["dy","maxPos"],this.outputShape=n.inShape;var x=n.strideHeight,t=n.strideWidth,e=n.dilationHeight,i=n.effectiveFilterHeight,r=n.effectiveFilterWidth,o=i-1-n.padInfo.top,s=r-1-n.padInfo.left,h=i*r-1;this.userCode="\n const ivec2 pads = ivec2("+o+", "+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 < "+i+";\n wR += "+e+") {\n float dyR = float(dyRCorner + wR) / "+x+".0;\n\n if (dyR < 0.0 || dyR >= "+n.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+r+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+t+".0;\n\n if (dyC < 0.0 || dyC >= "+n.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 = "+h+" - 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 * "+r+" + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n setOutput(dotProd);\n }\n "},Hg=function(n){this.variableNames=["dy","maxPos"],this.outputShape=n.inShape;var x=n.strideDepth,t=n.strideHeight,e=n.strideWidth,i=n.dilationDepth,r=n.dilationHeight,o=n.dilationWidth,s=n.effectiveFilterDepth,h=n.effectiveFilterHeight,u=n.effectiveFilterWidth,a=s-1-n.padInfo.front,g=h-1-n.padInfo.top,l=u-1-n.padInfo.left,c=s*h*u-1;this.userCode="\n const ivec3 pads = ivec3("+a+", "+g+", "+l+");\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 += "+i+") {\n float dyD = float(dyDCorner + wD) / "+x+".0;\n\n if (dyD < 0.0 || dyD >= "+n.outDepth+".0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < "+h+";\n wR += "+r+") {\n float dyR = float(dyRCorner + wR) / "+t+".0;\n\n if (dyR < 0.0 || dyR >= "+n.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+u+";\n wC += "+o+") {\n float dyC = float(dyCCorner + wC) / "+e+".0;\n\n if (dyC < 0.0 || dyC >= "+n.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 = "+c+" -\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 * "+h+" * "+u+" +\n wR * "+u+" + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n }\n setOutput(dotProd);\n }\n "},Ug=function(n,x,t,e,i,r,o){void 0===t&&(t=!1),void 0===e&&(e=!1),void 0===i&&(i=!1),void 0===r&&(r=null),void 0===o&&(o=!1),this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=x;var s=t?n[1]:n[2],h=Math.ceil(s/2),u=t?"i * 2, rc.y":"rc.y, i * 2",a=e?"rc.z, i * 2":"i * 2, rc.z",g=t?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],l=e?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],c="",d="";r&&(c=o?"vec4 activation(vec4 a) {\n vec4 b = getPreluActivationWeightsAtOutCoords();\n "+r+"\n }":"vec4 activation(vec4 x) {\n "+r+"\n }",d="result = activation(result);");var f=i?"result += getBiasAtOutCoords();":"";i&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),this.userCode="\n "+c+"\n\n const float sharedDimension = "+h+".0;\n\n vec4 dot2x2ARowBCol(ivec3 rc) {\n vec4 result = vec4(0);\n for (int i = 0; i < "+h+"; i++) {\n vec4 a = getMatrixA(rc.x, "+u+");\n vec4 b = getMatrixB(rc.x, "+a+");\n\n // These swizzled products need to be separately added.\n // See: https://github.com/tensorflow/tfjs/issues/1735\n result += ("+g[0]+" * "+l[0]+");\n result += ("+g[1]+" * "+l[1]+");\n }\n return result;\n }\n\n void main() {\n ivec3 rc = getOutputCoords();\n vec4 result = dot2x2ARowBCol(rc);\n\n "+f+"\n\n "+d+"\n\n setOutput(result);\n }\n "},Vg=function(){function n(n,x,t){this.variableNames=["probs"],this.outputShape=[n,t],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 < "+(x-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("+(x-1)+"));\n }\n "}return n.prototype.getCustomSetupFunc=function(n){var x=this;return function(t,e){null==x.seedLoc&&(x.seedLoc=t.getUniformLocation(e,"seed")),t.gl.uniform1f(x.seedLoc,n)}},n}(),Wg=function(n,x,t,e){this.variableNames=["indices"],this.outputShape=[n,x],this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int index = round(getIndices(coords.x));\n setOutput(mix(float("+e+"), float("+t+"),\n float(index == coords.y)));\n }\n "},Qg=function(n){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=n;var x=n.length;if(0===x)this.userCode="\n void main() {\n setOutput(vec4(getA(), 0., 0., 0.));\n }\n ";else{var t=oa("rc",x),e=za(x),i=function(n,x,t){if(1===n)return"rc > "+x[0];for(var e="",i=n-2;i<n;i++)e+=t[i]+" >= "+x[i],i<n-1&&(e+="||");return e}(x,n,t),r=function(n,x,t,e){if(1===n)return"";var i=e.slice(-2);return"\n int r = "+i[0]+";\n int c = "+i[1]+";\n int rp1 = r + 1;\n int cp1 = c + 1;\n\n bool cEdge = cp1 >= "+x+";\n bool rEdge = rp1 >= "+t+";\n "}(x,n[n.length-1],n[n.length-2],t),o=function(n,x){var t=n.length,e=function(n,x){for(var t=[],e=0;e<=1;e++)for(var i=0;i<=1;i++){for(var r=(0===e?"r":"rp1")+", "+(0===i?"c":"cp1"),o=2;o<n;o++)r=x[x.length-1-o]+","+r;t.push(r)}return t}(t,x);return 1===t?"getA(rc),\n rc + 1 >= "+n[0]+" ? 0. : getA(rc + 1),\n 0, 0":"getA("+e[0]+"),\n cEdge ? 0. : getA("+e[1]+"),\n rEdge ? 0. : getA("+e[2]+"),\n rEdge || cEdge ? 0. : getA("+e[3]+")"}(n,t);this.userCode="\n void main() {\n "+e+" rc = getOutputCoords();\n\n if("+i+") {\n setOutput(vec4(0));\n } else {\n "+r+"\n\n setOutput(vec4("+o+"));\n }\n }\n "}},Gg=function(n,x,t){this.variableNames=["x"],this.outputShape=x.map(function(x,t){return x[0]+n[t]+x[1]});var e=n.length,i=za(e),r=x.map(function(n){return n[0]}).join(","),o=x.map(function(x,t){return x[0]+n[t]}).join(","),s=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e);this.userCode=1!==e?"\n "+i+" start = "+i+"("+r+");\n "+i+" end = "+i+"("+o+");\n\n void main() {\n "+i+" outC = getOutputCoords();\n if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\n setOutput(float("+t+"));\n } else {\n "+i+" coords = outC - start;\n setOutput(getX("+s+"));\n }\n }\n ":"\n int start = "+r+";\n int end = "+o+";\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start || outC >= end) {\n setOutput(float("+t+"));\n } else {\n setOutput(getX(outC - start));\n }\n }\n "},Kg=function(n,x,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=x.map(function(x,t){return x[0]+n[t]+x[1]});for(var e=n.length,i=za(e),r=x.map(function(n){return n[0]}).join(","),o=x.map(function(x,t){return x[0]+n[t]}).join(","),s=oa("rc",e),h=oa("source",e),u=s[e-1]+" < "+this.outputShape[e-1],a=1===e?"source":"vec2("+h.slice(-2).join()+")",g=[i+" rc = outputLoc;",s[e-1]+" += 1;\n if("+u+") {\n ",1===e?"":"}\n rc = outputLoc;\n "+s[e-2]+" += 1;\n if("+s[e-2]+" < "+this.outputShape[e-2]+") {",1===e?"":" "+s[e-1]+" += 1;\n if("+u+") {"],l=1===e?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",c="",d=0,f=1===e?2:4;d<f;d++)c+="\n "+g[d]+"\n if ("+l+") {\n result["+d+"] = float("+t+");\n } else {\n "+i+" source = rc - start;\n result["+d+"] = getChannel(getX("+h.join()+"), "+a+");\n }\n ";c+=1===e?"} ":"}}",this.userCode="\n const "+i+" start = "+i+"("+r+");\n const "+i+" end = "+i+"("+o+");\n\n void main() {\n "+i+" outputLoc = getOutputCoords();\n vec4 result = vec4(0.);\n "+c+"\n setOutput(result);\n }\n "},Yg=function(n,x,t){if(this.variableNames=["x"],"avg"===x&&t)throw new Error("Cannot compute positions for average pool.");var e=n.filterWidth,i=n.strideHeight,r=n.strideWidth,o=n.dilationHeight,s=n.dilationWidth,h=n.effectiveFilterHeight,u=n.effectiveFilterWidth,a=n.padInfo.top,g=n.padInfo.left;this.outputShape=n.outShape;var l="avg"===x,c="0.0";if(l||(c="-1.0 / 1e-20"),t)this.userCode="\n const ivec2 strides = ivec2("+i+", "+r+");\n const ivec2 pads = ivec2("+a+", "+g+");\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 < "+h+";\n wR += "+o+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+u+";\n wC += "+s+") {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= "+n.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 * "+u+" + wC;\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n ";else{var d=x+"("+x+"("+x+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"avg"===x&&(d="avgValue / count");var f=4*Math.floor(e/4),p=e%4,y="\n if ("+l+") {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = max(values, minMaxValue);\n }\n ";this.userCode="\n const ivec2 strides = ivec2("+i+", "+r+");\n const ivec2 pads = ivec2("+a+", "+g+");\n const float initializationValue = "+c+";\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 >= "+n.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("+c+");\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wR = 0; wR < "+h+";\n wR += "+o+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+f+"; 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 "+y+"\n }\n\n int xC = xCCorner + "+f+";\n if ("+(1===p)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+y+"\n } else if ("+(2===p)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n initializationValue,\n initializationValue\n );\n\n "+y+"\n } else if ("+(3===p)+") {\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 "+y+"\n }\n }\n setOutput("+d+");\n }\n "}},Jg=function(n,x,t){if(this.variableNames=["x"],"avg"===x&&t)throw new Error("Cannot compute positions for average pool.");var e=n.filterWidth,i=n.strideDepth,r=n.strideHeight,o=n.strideWidth,s=n.dilationDepth,h=n.dilationHeight,u=n.dilationWidth,a=n.effectiveFilterDepth,g=n.effectiveFilterHeight,l=n.effectiveFilterWidth,c=n.padInfo.front,d=n.padInfo.top,f=n.padInfo.left;this.outputShape=n.outShape;var p="avg"===x,y="0.0";if(p||(y="-1.0 / 1e-20"),t)this.userCode="\n const ivec3 strides =\n ivec3("+i+", "+r+", "+o+");\n const ivec3 pads = ivec3("+c+", "+d+", "+f+");\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 < "+a+";\n wD += "+s+") {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= "+n.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+g+";\n wR += "+h+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+l+";\n wC += "+u+") {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= "+n.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 * "+g+" * "+l+" +\n wR * "+l+" + wC;;\n }\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n ";else{var m=x+"("+x+"("+x+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"avg"===x&&(m="avgValue / count");var b=4*Math.floor(e/4),z=e%4,v="\n if ("+p+") {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = max(values, minMaxValue);\n }\n ";this.userCode="\n const ivec3 strides =\n ivec3("+i+", "+r+", "+o+");\n const ivec3 pads = ivec3("+c+", "+d+", "+f+");\n const float initializationValue = "+y+";\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 >= "+n.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("+y+");\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wD = 0; wD < "+a+";\n wD += "+s+") {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= "+n.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+g+";\n wR += "+h+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+n.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+b+"; wC += 4) {\n int xC = xCCorner + wC * "+u+";\n\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+u+", ch),\n getValue(batch, xD, xR, xC + 2 * "+u+", ch),\n getValue(batch, xD, xR, xC + 3 * "+u+", ch)\n );\n\n "+v+"\n }\n\n int xC = xCCorner + "+b+";\n if ("+(1===z)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+v+"\n } else if ("+(2===z)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+u+", ch),\n initializationValue,\n initializationValue\n );\n\n "+v+"\n } else if ("+(3===z)+") {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + "+u+", ch),\n getValue(batch, xD, xR, xC + 2 * "+u+", ch),\n initializationValue\n );\n\n "+v+"\n }\n }\n setOutput("+m+");\n }\n }\n "}},Xg=function(n,x){this.variableNames=["x"];var t=n.windowSize,e=n.batchSize,i=n.inSize,r=Math.ceil(i/t);this.outputShape=[e,r];var o="0.0",s="";"prod"===x?o="1.0":"min"===x?(o="1.0 / 1e-20",s="min"):"max"===x&&(o="-1.0 / 1e-20",s="max");var h=x+"("+x+"("+x+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"sum"===x?h="sumValue":"prod"===x?h="prodValue":"all"===x?h="allValue":"any"===x&&(h="anyValue");var u=4*Math.floor(t/4),a=t%4,g="\n if ("+("sum"===x)+") {\n sumValue += dot(values, ones);\n } else if ("+("prod"===x)+") {\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 ",l="vec4";"all"===x?(o="1.0",g="\n bool reducedAllValue = all(values);\n float floatedReducedAllValue = float(reducedAllValue);\n allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n ",l="bvec4"):"any"===x&&(o="0.0",g="\n bool reducedAnyValue = any(values);\n float floatedReducedAnyValue = float(reducedAnyValue);\n anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n ",l="bvec4");var c="";i%t>0&&(c="\n if (inIdx < 0 || inIdx >= "+i+") {\n return initializationValue;\n }\n "),this.userCode="\n const float initializationValue = "+o+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n "+c+"\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 * "+t+";\n\n vec4 minMaxValue = vec4("+o+");\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 < "+u+"; i += 4) {\n int inIdx = inOffset + i;\n "+l+" values = "+l+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n "+g+"\n }\n\n int inIdx = inOffset + "+u+";\n if ("+(1===a)+") {\n "+l+" values = "+l+"(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+g+"\n } else if ("+(2===a)+") {\n "+l+" values = "+l+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n "+g+"\n } else if ("+(3===a)+") {\n "+l+" values = "+l+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n "+g+"\n }\n setOutput("+h+");\n }\n "},Zg=function(n,x){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n;for(var t="",e=0;e<4;e++){var i="thisRC = rc;";e%2==1&&(i+="thisRC.z += 1;"),e>1&&(i+="thisRC.y += 1;"),t+="\n "+i+"\n "+(e>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["+e+"] =\n getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\n "+(e>0?"}":"")+"\n "}this.userCode="\n \n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n "+ha(["r","c","d"],x)+"\n return ivec3(r, c, d);\n }\n \n "+ua(n)+"\n\n void main() {\n ivec3 rc = getOutputCoords();\n\n vec4 result = vec4(0.);\n\n ivec3 thisRC;\n int rows = "+n[1]+";\n int cols = "+n[2]+";\n\n "+t+"\n\n setOutput(result);\n }\n "},$g=function(n,x,t){this.variableNames=["dy"],this.outputShape=[],this.outputShape=x.shape;var e=x.shape,i=e[1],r=e[2],o=n.shape,s=o[1],h=o[2],u=[t&&s>1?i-1:i,t&&h>1?r-1:r],a=[t&&s>1?s-1:s,t&&h>1?h-1:h],g=u[0]/a[0],l=u[1]/a[1],c=1/g,d=1/l,f=2*Math.ceil(c)+2,p=2*Math.ceil(d)+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("+g+");\n const float widthScale = float("+l+");\n\n const float invHeightScale = float("+c+");\n const float invWidthScale = float("+d+");\n\n const int winHeight = int("+f+");\n const int winWidth = int("+p+");\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 >= "+h+") {\n continue;\n }\n\n float dxR = float(dyR) * heightScale;\n int topDxRIndex = int(floor(dxR));\n int bottomDxRIndex = int(min(ceil(dxR), "+(i-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), "+(r-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 "},nl=function(n,x,t,e){this.variableNames=["A"],this.outputShape=[];var i=n[0],r=n[1],o=n[2],s=n[3];this.outputShape=[i,x,t,s];var h=[e&&x>1?r-1:r,e&&t>1?o-1:o],u=[e&&x>1?x-1:x,e&&t>1?t-1:t];this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+h[0]/u[0]+",\n "+h[1]/u[1]+");\n const vec2 inputShapeRC = vec2("+r+".0, "+o+".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 "},xl=function(n,x,t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];var i=n[0],r=n[1],o=n[2],s=n[3];this.outputShape=[i,x,t,s];var h=[e&&x>1?r-1:r,e&&t>1?o-1:o],u=[e&&x>1?x-1:x,e&&t>1?t-1:t];this.userCode="\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n "+h[0]/u[0]+",\n "+h[1]/u[1]+",\n "+h[1]/u[1]+");\n const vec3 inputShapeRC = vec3("+r+".0, "+o+".0,\n "+o+".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 < "+(t-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 "},tl=function(n,x,t){this.variableNames=["dy"],this.outputShape=[],this.outputShape=x.shape;var e=x.shape,i=e[1],r=e[2],o=n.shape,s=o[1],h=o[2],u=[t&&s>1?i-1:i,t&&h>1?r-1:r],a=[t&&s>1?s-1:s,t&&h>1?h-1:h],g=u[0]/a[0],l=u[1]/a[1],c=1/g,d=1/l,f=2*Math.ceil(c)+2,p=2*Math.ceil(d)+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("+g+");\n const float widthScale = float("+l+");\n\n const float invHeightScale = float("+c+");\n const float invWidthScale = float("+d+");\n\n const int winHeight = int("+f+");\n const int winWidth = int("+p+");\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 >= "+h+") {\n continue;\n }\n\n float sourceFracRow =\n float("+u[0]+") *\n (float(dyR) / float("+a[0]+"));\n\n float sourceFracCol =\n float("+u[1]+") *\n (float(dyC) / float("+a[1]+"));\n\n int sourceNearestRow = int(min(\n float(int("+i+") - 1),\n "+t+" ? float(round(sourceFracRow)) :\n float(floor(sourceFracRow))));\n\n int sourceNearestCol = int(min(\n float(int("+r+") - 1),\n "+t+" ? 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 "},el=function(n,x,t,e){this.variableNames=["A"],this.outputShape=[];var i=n[0],r=n[1],o=n[2],s=n[3];this.outputShape=[i,x,t,s];var h=[e&&x>1?r-1:r,e&&t>1?o-1:o],u=[e&&x>1?x-1:x,e&&t>1?t-1:t],a=e?"0.5":"0.0";this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+h[0]/u[0]+",\n "+h[1]/u[1]+");\n const vec2 inputShapeRC = vec2("+r+".0, "+o+".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 + "+a+")));\n\n float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutput(newValue);\n }\n "},il=function(n,x){this.variableNames=["x"];var t=n.length;if(t>4)throw new Error("WebGL backend: Reverse of rank-"+t+" tensor is not yet supported");if(this.outputShape=n,1!==t){var e=n.map(function(t,e){return function(t){return-1!==x.indexOf(t)&&1!==n[t]?n[t]+" - coords["+t+"] - 1":"coords["+t+"]"}(e)}).join(","),i=za(t);this.userCode="\n void main() {\n "+i+" coords = getOutputCoords();\n setOutput(getX("+e+"));\n }\n "}else this.userCode="\n void main() {\n int coord = getOutputCoords();\n setOutput(getX("+n[0]+" - coord - 1));\n }\n "},rl=function(n,x){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;var t=n.length;if(t>4)throw new Error("WebGL backend: Reverse of rank-"+t+" tensor is not yet supported");this.outputShape=n;var e=oa("rc",t),i=e[t-1]+" + 1 < "+this.outputShape[t-1],r=e[t-2]+" + 1 < "+this.outputShape[t-2],o=za(t);function s(t){var e=n.map(function(e,i){return function(t,e){return-1!==x.indexOf(t)&&1!==n[t]?n[t]+" - "+e[t]+" - 1":""+e[t]}(i,t)});return"getChannel(getX("+e.join(",")+"), vec2("+e.slice(-2).join(",")+"))"}this.userCode=1===t?"\n void main(){\n int rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = getChannel(getX("+n[0]+" - rc - 1),\n "+n[0]+" - rc - 1);\n if("+i+"){\n result.g = getChannel(getX("+n[0]+" - (rc + 1) - 1),\n "+n[0]+" - (rc + 1) - 1);\n }\n setOutput(result);\n }\n ":"\n void main() {\n "+o+" rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = "+function(n){return s(n)}(e.slice())+";\n if("+i+"){\n result.g = "+function(n){return n[t-1]="("+n[t-1]+" + 1)",s(n)}(e.slice())+";\n }\n if("+r+") {\n result.b = "+function(n){return n[t-2]="("+n[t-2]+" + 1)",s(n)}(e.slice())+";\n if("+i+") {\n result.a = "+function(n){return n[t-1]="("+n[t-1]+" + 1)",n[t-2]="("+n[t-2]+" + 1)",s(n)}(e.slice())+";\n }\n }\n setOutput(result);\n }\n "},ol=function(n,x,t,e,i,r,o){void 0===o&&(o=!0),this.variableNames=["updates","indices","defaultValue"],this.outputShape=r;var s=za(i.length),h=za(r.length),u="";1===t?u="i":2===t&&(u="i, j");var a="getIndices("+u+")",g="";1===e?g="i":2===e&&(g="i, coords[1]");var l="getUpdates("+g+")",c=x>1?"strides[j]":"strides";this.userCode="\n "+s+" strides = "+s+"("+i+");\n\n void main() {\n "+h+" coords = getOutputCoords();\n float sum = 0.0;\n bool found = false;\n for (int i = 0; i < "+n+"; i++) {\n int flattenedIndex = 0;\n for (int j = 0; j < "+x+"; j++) {\n int index = round("+a+");\n flattenedIndex += index * "+c+";\n }\n if (flattenedIndex == coords[0]) {\n sum += "+l+";\n found = true;\n }\n }\n setOutput(mix(getDefaultValue(), sum, float(found)));\n }\n "},sl=function(n,x){this.variableNames=["x","segmentIds"];var t=n.windowSize,e=n.batchSize,i=n.inSize,r=n.numSegments,o=r*Math.ceil(i/t);this.outputShape=[e,o];var s=4*Math.floor(t/4),h=t%4,u="\n sumValue += dot(values, segFilter);\n ",a="";i%t>0&&(a="\n if (inIdx < 0 || inIdx >= "+i+") {\n return initializationValue;\n }\n ");var g="";i%t>0&&(g="\n if (inIdx < 0 || inIdx >= "+i+") {\n return -1.0;\n }\n "),this.userCode="\n const float initializationValue = 0.0;\n\n float getValue(int batch, int inIdx) {\n "+a+"\n return getX(batch, inIdx);\n }\n\n float getSegmentIdAtIndex(int inIdx) {\n "+g+"\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 "+r+")) * float("+t+"));\n int currentSeg = int(mod(float(outIdx), float("+r+")));\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 "+u+"\n }\n\n int inIdx = inOffset + "+s+";\n if ("+(1===h)+") {\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 "+u+"\n } else if ("+(2===h)+") {\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 "+u+"\n } else if ("+(3===h)+") {\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 "+u+"\n }\n setOutput(sumValue);\n }\n "},hl=function(n,x,t){var e,i;if(this.variableNames=["c","a","b"],this.outputShape=x,t>4)throw Error("Where for rank "+t+" is not yet supported");if(1===t)i="resRC",e="resRC";else{for(var r=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[],s=[],h=0;h<x.length;h++)s.push(""+r[h]),h<n&&o.push(""+r[h]);e=o.join(),i=s.join()}var u=za(t);this.userCode="\n void main() {\n "+u+" resRC = getOutputCoords();\n float cVal = getC("+e+");\n if (cVal >= 1.0) {\n setOutput(getA("+i+"));\n } else {\n setOutput(getB("+i+"));\n }\n }\n "},ul=function(){function n(n){this.variableNames=["source"],this.outputShape=n,this.rank=n.length;var x,t=za(this.rank),e="uniform int start["+this.rank+"];",i=function(n){if(1===n)return"sourceLoc";if(n<=6)return al.slice(0,n).map(function(n){return"sourceLoc."+n}).join(",");throw Error("Slicing for rank "+n+" is not yet supported")}(this.rank);x="\n "+t+" sourceLoc;\n "+t+" coords = getOutputCoords();\n "+n.map(function(n,x){return"sourceLoc."+al[x]+" = start["+x+"] + coords."+al[x]+";"}).join("\n")+"\n ",this.userCode="\n "+e+"\n void main() {\n "+x+"\n setOutput(getSource("+i+"));\n }\n "}return n.prototype.getCustomSetupFunc=function(n){var x=this;if(n.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+n.length+")");return function(t,e){null==x.startLoc&&(x.startLoc=t.getUniformLocationNoThrow(e,"start"),null==x.startLoc)||t.gl.uniform1iv(x.startLoc,n)}},n}(),al=["x","y","z","w","u","v"],gl=function(){function n(n){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n,this.rank=n.length;var x=za(this.rank),t=oa("coords",this.rank),e=oa("sourceLoc",this.rank),i=1===this.rank?"sourceLoc":"vec2("+e.slice(-2).join()+")",r="getChannel(getSource("+e.join()+"), "+i+")",o="\n result.x = "+r+";\n if (++"+t[this.rank-1]+" < "+n[this.rank-1]+") {\n ++"+e[this.rank-1]+";\n result.y = "+r+";\n --"+e[this.rank-1]+";\n }\n ",s=1===this.rank?"":"\n --"+t[this.rank-1]+";\n if (++"+t[this.rank-2]+" < "+n[this.rank-2]+") {\n ++"+e[this.rank-2]+";\n result.z = "+r+";\n if (++"+t[this.rank-1]+" < "+n[this.rank-1]+") {\n ++"+e[this.rank-1]+";\n result.w = "+r+";\n }\n }\n ",h=this.rank<=4?"sourceLoc = coords +\n "+x+"("+n.map(function(n,x){return"start["+x+"]"}).join()+");":n.map(function(n,x){return e[x]+" = "+t[x]+" + start["+x+"];"}).join("\n");this.userCode="\n uniform int start["+this.rank+"];\n void main() {\n "+x+" coords = getOutputCoords();\n "+x+" sourceLoc;\n "+h+"\n vec4 result = vec4(0.);\n "+o+"\n "+s+"\n setOutput(result);\n }\n "}return n.prototype.getCustomSetupFunc=function(n){var x=this;if(n.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+n.length+")");return function(t,e){null==x.startLoc&&(x.startLoc=t.getUniformLocationNoThrow(e,"start"),null==x.startLoc)||t.gl.uniform1iv(x.startLoc,n)}},n}(),ll=function(n,x,t){this.variableNames=["x"],this.outputShape=t;var e=t.length,i=za(t.length),r=za(t.length),o="";if(1===e)o="coords * strides + begin";else{var s=0;o=t.map(function(n,x){return s++,1===t.length?"coords * strides["+x+"] + begin["+x+"]":"coords["+(s-1)+"] * strides["+x+"] + begin["+x+"]"}).join(",")}this.userCode="\n "+i+" begin = "+i+"("+n+");\n "+i+" strides = "+i+"("+x+");\n\n void main() {\n "+r+" coords = getOutputCoords();\n setOutput(getX("+o+"));\n }\n "},cl=function(){function n(n){this.gpgpu=n,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}return n.prototype.acquireTexture=function(n,x,t){var e,i=dl(x,t),r=fl(n,i,t);if(r in this.freeTextures||(this.freeTextures[r]=[]),r in this.usedTextures||(this.usedTextures[r]=[]),this.freeTextures[r].length>0){this.numFreeTextures--,this.numUsedTextures++,this.log();var o=this.freeTextures[r].shift();return this.usedTextures[r].push(o),o}return this.numUsedTextures++,this.log(),i===po.PACKED_2X2_FLOAT32?e=this.gpgpu.createPackedMatrixTexture(n[0],n[1]):i===po.PACKED_2X2_FLOAT16?e=this.gpgpu.createFloat16PackedMatrixTexture(n[0],n[1]):i===po.UNPACKED_FLOAT32?e=this.gpgpu.createFloat32MatrixTexture(n[0],n[1]):i===po.UNPACKED_FLOAT16?e=this.gpgpu.createFloat16MatrixTexture(n[0],n[1]):i===po.PACKED_4X1_UNSIGNED_BYTE&&(e=this.gpgpu.createUnsignedBytesMatrixTexture(n[0],n[1])),this.usedTextures[r].push(e),e},n.prototype.releaseTexture=function(n,x,t,e){if(null!=this.freeTextures){var i=fl(x,dl(t,e),e);i in this.freeTextures||(this.freeTextures[i]=[]),this.freeTextures[i].push(n),this.numFreeTextures++,this.numUsedTextures--;var r=this.usedTextures[i],o=r.indexOf(n);if(o<0)throw new Error("Cannot release a texture that was never provided by this texture manager");r.splice(o,1),this.log()}},n.prototype.log=function(){if(this.logEnabled){var n=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",this.numFreeTextures+" / "+this.numUsedTextures,"("+n+")")}},n.prototype.getNumUsedTextures=function(){return this.numUsedTextures},n.prototype.getNumFreeTextures=function(){return this.numFreeTextures},n.prototype.dispose=function(){var n=this;if(null!=this.freeTextures){for(var x in this.freeTextures)this.freeTextures[x].forEach(function(x){n.gpgpu.deleteMatrixTexture(x)});for(var x in this.usedTextures)this.usedTextures[x].forEach(function(x){n.gpgpu.deleteMatrixTexture(x)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0}},n}();function dl(n,x){if(n===fo.UPLOAD)return po.PACKED_2X2_FLOAT32;if(n===fo.RENDER||null==n)return function(n){return Bi().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?n?po.PACKED_2X2_FLOAT32:po.UNPACKED_FLOAT32:n?po.PACKED_2X2_FLOAT16:po.UNPACKED_FLOAT16}(x);if(n===fo.DOWNLOAD||n===fo.PIXELS)return po.PACKED_4X1_UNSIGNED_BYTE;throw new Error("Unknown logical texture type "+n)}function fl(n,x,t){return n[0]+"_"+n[1]+"_"+x+"_"+t}var pl=function(n,x){this.variableNames=["A"];for(var t=new Array(n.length),e=0;e<t.length;e++)t[e]=n[e]*x[e];this.outputShape=t,this.rank=t.length;var i=za(this.rank),r=function(n){var x=n.length;if(x>5)throw Error("Tile for rank "+x+" is not yet supported");if(1===x)return"imod(resRC, "+n[0]+")";for(var t=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],e=[],i=0;i<n.length;i++)e.push("imod("+t[i]+", "+n[i]+")");return e.join()}(n);this.userCode="\n void main() {\n "+i+" resRC = getOutputCoords();\n setOutput(getA("+r+"));\n }\n "},yl=function(n,x){this.variableNames=["A"];for(var t=new Array(n.length),e=0;e<t.length;e++)t[e]=n[x[e]];this.outputShape=t,this.rank=t.length;var i=za(this.rank),r=function(n){var x=n.length;if(x>6)throw Error("Transpose for rank "+x+" is not yet supported");for(var t=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],e=new Array(x),i=0;i<n.length;i++)e[n[i]]=t[i];return e.join()}(x);this.userCode="\n void main() {\n "+i+" resRC = getOutputCoords();\n setOutput(getA("+r+"));\n }\n "},ml=function(n,x){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0;for(var t=new Array(n.length),e=0;e<t.length;e++)t[e]=n[x[e]];if(this.outputShape=t,this.rank=t.length,this.rank>6)throw Error("Packed transpose for rank "+this.rank+" is not yet supported.");var i=za(this.rank),r=ra("rc",this.rank),o=new Array(this.rank);for(e=0;e<x.length;e++)o[x[e]]=r[e];var s="vec2("+o.slice(-2).join()+")",h="++"+r[this.rank-1]+" < "+t[this.rank-1],u="getChannel(getA("+o.join()+"), "+s+")";this.userCode="\n void main() {\n "+i+" rc = getOutputCoords();\n vec4 result = vec4(0.);\n result[0] = "+u+";\n if("+h+") {\n result[1] = "+u+";\n }\n --"+r[this.rank-1]+";\n if(++"+r[this.rank-2]+" < "+t[this.rank-2]+") {\n result[2] = "+u+";\n if("+h+") {\n result[3] = "+u+";\n }\n }\n setOutput(result);\n }\n "},bl=1.7580993408473768,zl=1.0507009873554805,vl=function(n,x){this.variableNames=["A"],this.outputShape=n,this.userCode="\n float unaryOperation(float x) {\n "+x+"\n }\n\n void main() {\n float x = getAAtOutCoords();\n float y = unaryOperation(x);\n\n setOutput(y);\n }\n "},jl="if (isnan(x)) return x;",wl="return x;",kl="return abs(x);",ql=jl+"\n return (x < 0.0) ? 0.0 : x;\n",Cl=jl+"\n return (x < 0.0) ? 0.0 : min(6.0, x);\n",Al="return (x >= 0.0) ? x : (exp(x) - 1.0);",El="\n // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n // see: https://arxiv.org/abs/1706.02515\n float scaleAlpha = "+bl+";\n float scale = "+zl+";\n return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n",Sl="return -x;",Il="return ceil(x);",Dl="return floor(x);",Ol="return exp(x);",_l="return exp(x) - 1.0;",Tl=jl+"\n return sin(x);\n",Rl=jl+"\n return cos(x);\n",Bl=jl+"\n if (abs(x) > 1.) {\n return NAN;\n }\n return asin(x);\n",Ml=jl+"\n if (abs(x) > 1.) {\n return NAN;\n }\n return acos(x);\n",Nl=jl+"\n return atan(x);\n",Fl=jl+"return log(x + sqrt(x * x + 1.0));",Pl=jl+"\n if (x < 1.0) return NAN;\n return log(x + sqrt(x * x - 1.0));",Ll=jl+"\n if ((x < -1.0) || (x > 1.0)) return NAN;\n return (log(1.0 + x) - log(1.0 - x)) / 2.0;",Hl="return x;",Ul="return x;",Vl="\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",Wl="\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",Ql="\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",Gl=function(n,x){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n,this.userCode="\n vec4 unaryOperation(vec4 x) {\n "+x+"\n }\n\n void main() {\n vec4 x = getAAtOutCoords();\n vec4 y = unaryOperation(x);\n\n setOutput(y);\n }\n "},Kl=function(n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=n;var x=n.length,t=oa("rc",x),e=za(x),i=function(n,x){if(1===n)return"rc";for(var t="",e=0;e<n;e++)t+=x[e],e<n-1&&(t+=",");return t}(x,t),r=t.slice(-2),o=x<=1?"rc":"vec2("+r.join(",")+")";this.userCode="\n void main() {\n "+e+" rc = getOutputCoords();\n vec4 packedInput = getA("+i+");\n\n setOutput(getChannel(packedInput, "+o+"));\n }\n "},Yl={};function Jl(n,x){if(void 0===x&&(x=!1),"linear"===n)return x?Ul:wl;if("relu"===n)return x?Vl:ql;if("elu"===n)return x?Ql:Al;if("relu6"===n)return x?Wl:Cl;if("prelu"===n)return x?Ba:Ta;throw new Error("Activation "+n+" has not been implemented for the WebGL backend.")}var Xl=600,Zl=function(n){function x(x){var t,e=n.call(this)||this;if(e.pendingRead=new WeakMap,e.pendingDisposal=new WeakSet,e.dataRefCount=new WeakMap,e.numBytesInGPU=0,e.uploadWaitMs=0,e.downloadWaitMs=0,e.warnedAboutMemory=!1,e.pendingDeletes=0,e.disposed=!1,!Bi().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");if(null==x){var i=zo(Bi().getNumber("WEBGL_VERSION"));e.binaryCache=((t=Bi().getNumber("WEBGL_VERSION"))in Yl||(Yl[t]={}),Yl[t]),e.gpgpu=new Rg(i),e.canvas=i.canvas,e.gpgpuCreatedLocally=!0}else e.gpgpu=x,e.binaryCache={},e.gpgpuCreatedLocally=!1,e.canvas=x.gl.canvas;return e.textureManager=new cl(e.gpgpu),e.numMBBeforeWarning=null==Bi().global.screen?1024:Bi().global.screen.height*Bi().global.screen.width*window.devicePixelRatio*Xl/1024/1024,e.texData=new bu(e,ao),e}return Di(x,n),x.prototype.numDataIds=function(){return this.texData.numDataIds()+(this.cpuBackend?this.cpuBackend.numDataIds():0)-this.pendingDeletes},x.prototype.write=function(n,x,t){if(Bi().getBool("DEBUG")&&this.checkNumericalProblems(n),"complex64"===t&&null!=n)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");var e={};return this.texData.set(e,{shape:x,dtype:t,values:n,usage:fo.UPLOAD}),e},x.prototype.move=function(n,x,t,e){if(Bi().getBool("DEBUG")&&this.checkNumericalProblems(x),"complex64"===e)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(n,{shape:t,dtype:e,values:x,usage:fo.UPLOAD})},x.prototype.readSync=function(n){var x=this.texData.get(n),t=x.values,e=x.dtype,i=x.complexTensors,r=x.slice,o=x.shape,s=x.isPacked;if(null!=r){var h=void 0;h=s?new Gl(o,Hl):new vl(o,Hl);var u=this.runWebGLProgram(h,[{dataId:n,shape:o,dtype:e}],e),a=this.readSync(u.dataId);return this.disposeData(u.dataId),a}if(null!=t)return this.convertAndCacheOnCPU(n);if("string"===e)return t;var g,l,c=null!=this.activeTimers;return c&&(g=Sr()),l="complex64"===e?Pu(i.real.dataSync(),i.imag.dataSync()):this.getValuesFromTexture(n),c&&(this.downloadWaitMs+=Sr()-g),this.convertAndCacheOnCPU(n,l)},x.prototype.read=function(n){return Oi(this,void 0,void 0,function(){var x,t,e,i,r,o,s,h,u,a,g,l,c,d,f,p,y,m,b,z,v,j;return _i(this,function(w){switch(w.label){case 0:if(this.pendingRead.has(n))return x=this.pendingRead.get(n),[2,new Promise(function(n){return x.push(n)})];if(t=this.texData.get(n),e=t.values,i=t.shape,r=t.slice,o=t.dtype,s=t.complexTensors,h=t.isPacked,null!=r)return u=void 0,u=h?new Gl(i,Hl):new vl(i,Hl),a=this.runWebGLProgram(u,[{dataId:n,shape:i,dtype:o}],o),g=this.read(a.dataId),this.disposeData(a.dataId),[2,g];if(null!=e)return[2,this.convertAndCacheOnCPU(n)];if(!Bi().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&2===Bi().getNumber("WEBGL_VERSION"))throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");return l=null,"complex64"!==o&&Bi().get("WEBGL_BUFFER_SUPPORTED")&&(c=this.decode(n),d=this.texData.get(c.dataId),l=(j=this.gpgpu).createBufferFromTexture.apply(j,[d.texture].concat(jo(i)))),this.pendingRead.set(n,[]),"complex64"===o?[3,2]:[4,this.gpgpu.createAndWaitForFence()];case 1:w.sent(),w.label=2;case 2:return"complex64"!==o?[3,4]:[4,Promise.all([s.real.data(),s.imag.data()])];case 3:return p=w.sent(),y=p[0],m=p[1],f=Pu(y,m),[3,5];case 4:null==l?f=this.getValuesFromTexture(n):(b=nr(i),f=this.gpgpu.downloadFloat32MatrixFromBuffer(l,b)),w.label=5;case 5:return null!=c&&this.disposeData(c.dataId),z=this.convertAndCacheOnCPU(n,f),v=this.pendingRead.get(n),this.pendingRead.delete(n),v.forEach(function(n){return n(z)}),this.pendingDisposal.has(n)&&(this.pendingDisposal.delete(n),this.disposeData(n),this.pendingDeletes--),[2,z]}})})},x.prototype.checkNumericalProblems=function(n){if(null!=n)for(var x=0;x<n.length;x++){var t=n[x];if(!Eo(t)){if(Bi().getBool("WEBGL_RENDER_FLOAT32_CAPABLE"))throw Error("The value "+t+" cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'");throw Error("The value "+t+" cannot be represented on this device.")}}},x.prototype.getValuesFromTexture=function(n){var x,t=this.texData.get(n),e=t.shape,i=t.dtype,r=t.isPacked,o=nr(e);if(Bi().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")){var s=this.decode(n),h=this.texData.get(s.dataId),u=(x=this.gpgpu).downloadMatrixFromPackedTexture.apply(x,[h.texture].concat(jo(e))).subarray(0,o);return this.disposeData(s.dataId),u}var a=Bi().getBool("WEBGL_PACK")&&!0===r,g=a?es(e):e,l=a?new hg(g):new sg(g),c=this.runWebGLProgram(l,[{shape:g,dtype:i,dataId:n}],"float32"),d=this.texData.get(c.dataId),f=this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(d.texture,d.texShape[0],d.texShape[1]).subarray(0,o);return this.disposeData(c.dataId),f},x.prototype.time=function(n){return Oi(this,void 0,void 0,function(){var x,t,e,i,r,o,s;return _i(this,function(h){switch(h.label){case 0:return x=this.activeTimers,t=[],e=!1,null==this.programTimersStack?(this.programTimersStack=t,e=!0):this.activeTimers.push(t),this.activeTimers=t,n(),i=$i(this.activeTimers.map(function(n){return n.query})).filter(function(n){return null!=n}),r=$i(this.activeTimers.map(function(n){return n.name})).filter(function(n){return null!=n}),this.activeTimers=x,e&&(this.programTimersStack=null),o={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?[4,Promise.all(i)]:[3,2];case 1:return s=h.sent(),o.kernelMs=Yi(s),o.getExtraProfileInfo=function(){return s.map(function(n,x){return{name:r[x],ms:n}}).map(function(n){return n.name+": "+n.ms}).join(", ")},[3,3];case 2:o.kernelMs={error:"WebGL query timers are not supported in this environment."},h.label=3;case 3:return this.uploadWaitMs=0,this.downloadWaitMs=0,[2,o]}})})},x.prototype.memory=function(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU}},x.prototype.startTimer=function(){return Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:Sr(),endMs:null}},x.prototype.endTimer=function(n){return Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),n):(n.endMs=Sr(),n)},x.prototype.getQueryTime=function(n){return Oi(this,void 0,void 0,function(){var x;return _i(this,function(t){return Bi().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?[2,this.gpgpu.waitForQueryAndGetTime(n)]:[2,(x=n).endMs-x.startMs]})})},x.prototype.disposeData=function(n){if(!this.pendingDisposal.has(n)){if(this.pendingRead.has(n))return this.pendingDisposal.add(n),void this.pendingDeletes++;if(this.texData.has(n)){this.releaseGPUData(n);var x=this.texData.get(n).complexTensors;null!=x&&(x.real.dispose(),x.imag.dispose()),this.texData.delete(n)}}},x.prototype.releaseGPUData=function(n){var x=this.texData.get(n),t=x.texture,e=x.dtype,i=x.texShape,r=x.usage,o=x.isPacked,s=x.slice,h=s&&s.origDataId||n,u=this.dataRefCount.get(h);u>1?this.dataRefCount.set(h,u-1):(this.dataRefCount.delete(h),null!=t&&(this.numBytesInGPU-=this.computeBytes(i,e),this.textureManager.releaseTexture(t,i,r,o)));var a=this.texData.get(n);a.texture=null,a.texShape=null,a.isPacked=!1,a.slice=null},x.prototype.getTexture=function(n){return this.uploadToGPU(n),this.texData.get(n).texture},x.prototype.getDataInfo=function(n){return this.texData.get(n)},x.prototype.getCPUBackend=function(){return Bi().getBool("WEBGL_CPU_FORWARD")?(null==this.cpuBackend&&(this.cpuBackend=ao.findBackend("cpu")),this.cpuBackend):null},x.prototype.shouldExecuteOnCPU=function(n,x){var t=this;return void 0===x&&(x=128),null!=this.getCPUBackend()&&n.every(function(n){return null==t.texData.get(n.dataId).texture&&n.size<x})},x.prototype.getGPGPUContext=function(){return this.gpgpu},x.prototype.complex=function(n,x){var t=this.makeOutput(n.shape,"complex64");return this.texData.get(t.dataId).complexTensors={real:ao.keep(n.clone()),imag:ao.keep(x.clone())},t},x.prototype.real=function(n){return this.texData.get(n.dataId).complexTensors.real.clone()},x.prototype.imag=function(n){return this.texData.get(n.dataId).complexTensors.imag.clone()},x.prototype.slice=function(n,x,t){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.slice(n,x,t);if(0===nr(t))return Ls([],t,n.dtype);var e=this.texData.get(n.dataId).isPacked,i=cu(n.shape,x,t);if(e||!i){var r=Bi().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new gl(t):new ul(t),o=r.getCustomSetupFunc(x);return this.compileAndRun(r,[n],null,o)}return this.uploadToGPU(n.dataId),this.shallowSlice(n,x,t)},x.prototype.shallowSlice=function(n,x,t){var e=this.texData.get(n.dataId),i=this.makeOutput(t,n.dtype),r=this.texData.get(i.dataId);Object.assign(r,e),r.shape=t,r.dtype=n.dtype;var o=du(x,n.strides);e.slice&&(o+=e.slice.flatOffset),r.slice={flatOffset:o,origDataId:e.slice&&e.slice.origDataId||n.dataId};var s=this.dataRefCount.get(r.slice.origDataId)||1;return this.dataRefCount.set(r.slice.origDataId,s+1),i},x.prototype.stridedSlice=function(n,x,t,e){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.stridedSlice(n,x,t,e);var i=au(x,t,e);if(i.some(function(n){return 0===n}))return Ls([],i);var r=new ll(x,e,i);return this.compileAndRun(r,[n])},x.prototype.reverse=function(n,x){var t=Bi().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new rl(n.shape,x):new il(n.shape,x);return this.compileAndRun(t,[n])},x.prototype.concat=function(n,x){if("complex64"===n[0].dtype){var t=n.map(function(n){return Fs(n)}),e=n.map(function(n){return Ps(n)});return Ns(this.concat(t,x),this.concat(e,x))}if(this.shouldExecuteOnCPU(n))return this.cpuBackend.concat(n,x);if(1===n.length)return n[0];if(n.length>Bi().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){var i=Math.floor(n.length/2),r=this.concat(n.slice(0,i),x),o=this.concat(n.slice(i),x);return this.concat([r,o],x)}if(Bi().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&n[0].rank>1){var s=new Ha(n.map(function(n){return n.shape}),x);return this.compileAndRun(s,n)}var h=Bs(n.map(function(n){return n.shape}),x),u=n.map(function(n){return n.as2D(-1,nr(n.shape.slice(x)))}),a=new La(u.map(function(n){return n.shape}));return this.compileAndRun(a,u).reshape(h)},x.prototype.neg=function(n){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.neg(n);if(Bi().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(n,Sl,n.dtype);var x=new vl(n.shape,Sl);return this.compileAndRun(x,[n])},x.prototype.batchMatMul=function(n,x,t,e){var i=t?n.shape[2]:n.shape[1],r=e?x.shape[1]:x.shape[2],o=t?n.shape[1]:n.shape[2],s=n.shape[0];if((1===i||1===r)&&o>1e3){t&&(n=n.transpose([0,2,1])),e&&(x=x.transpose([0,2,1]));var h=1===r?n:n.as3D(s,o,1),u=1===r?2:1,a=1===r?x.as3D(s,1,o):x;return this.multiply(h,a).sum(u,!0)}var g=to(n.dtype,x.dtype),l=new Ug(n.shape,[s,i,r],t,e);return this.compileAndRun(l,[n,x],g)},x.prototype.fusedBatchMatMul=function(n){var x=n.a,t=n.b,e=n.transposeA,i=n.transposeB,r=n.bias,o=n.activation,s=n.preluActivationWeights,h=e?x.shape[2]:x.shape[1],u=i?t.shape[1]:t.shape[2],a=x.shape[0],g=to(x.dtype,t.dtype),l=null!=r,c=null!=s,d=o?Jl(o,!0):null,f=new Ug(x.shape,[a,h,u],e,i,l,d,c),p=[x,t];return r&&p.push(r),s&&p.push(s),this.compileAndRun(f,p,g)},x.prototype.multiply=function(n,x){if("complex64"===n.dtype){var t=this.texData.get(n.dataId),e=this.texData.get(x.dataId),i=new Ia(Ea,n.shape,x.shape),r=new Ia(Sa,n.shape,x.shape),o=[this.makeComplexComponentTensorInfo(n,t.complexTensors.real),this.makeComplexComponentTensorInfo(n,t.complexTensors.imag),this.makeComplexComponentTensorInfo(x,e.complexTensors.real),this.makeComplexComponentTensorInfo(x,e.complexTensors.imag)],s=this.compileAndRun(i,o),h=this.compileAndRun(r,o),u=this.complex(s,h);return s.dispose(),h.dispose(),u}if(this.shouldExecuteOnCPU([n,x]))return this.cpuBackend.multiply(n,x);if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,_a,n.dtype);var a=new Ra(_a,n.shape,x.shape);return this.compileAndRun(a,[n,x],n.dtype)},x.prototype.batchNormalization=function(n,x,t,e,i,r){var o=[n,x,t],s=null;null!=r&&(s=r.shape,o.push(r));var h=null;if(null!=i&&(h=i.shape,o.push(i)),Bi().getBool("WEBGL_PACK_NORMALIZATION")){var u=new Aa(n.shape,x.shape,t.shape,s,h,e);return this.compileAndRun(u,o)}var a=new Ca(n.shape,x.shape,t.shape,s,h,e);return this.compileAndRun(a,o)},x.prototype.localResponseNormalization4D=function(n,x,t,e,i){var r=Bi().getBool("WEBGL_PACK_NORMALIZATION")?new Pg(n.shape,x,t,e,i):new Ng(n.shape,x,t,e,i);return this.compileAndRun(r,[n])},x.prototype.LRNGrad=function(n,x,t,e,i,r,o){var s=new Fg(x.shape,e,i,r,o);return this.compileAndRun(s,[x,t,n])},x.prototype.tile=function(n,x){if("string"===n.dtype){var t=this.readSync(n.dataId).map(function(n){return Or(n)});return $u(jh(n.shape,n.dtype,t),x)}var e=new pl(n.shape,x);return this.compileAndRun(e,[n])},x.prototype.pad=function(n,x,t){var e=Bi().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Kg(n.shape,x,t):new Gg(n.shape,x,t);return this.compileAndRun(e,[n])},x.prototype.transpose=function(n,x){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.transpose(n,x);var t=Bi().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new ml(n.shape,x):new yl(n.shape,x);return this.compileAndRun(t,[n])},x.prototype.gather=function(n,x,t){if(this.shouldExecuteOnCPU([n,x]))return this.cpuBackend.gather(n,x,t);var e=new fg(n.shape,x.size,t);return this.compileAndRun(e,[n,x])},x.prototype.batchToSpaceND=function(n,x,t){Ji(n.rank<=4,function(){return"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"});var e=x.reduce(function(n,x){return n*x}),i=Xh(n.shape,x,e),r=Zh(i.length,x.length),o=$h(n.shape,x,e),s=nu(t,x.length),h=xu(o,t,x.length);return n.reshape(i).transpose(r).reshape(o).slice(s,h)},x.prototype.spaceToBatchND=function(n,x,t){Ji(n.rank<=4,function(){return"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"});var e=x.reduce(function(n,x){return n*x}),i=[[0,0]];i.push.apply(i,t);for(var r=1+x.length;r<n.shape.length;++r)i.push([0,0]);var o=n.pad(i),s=Xh(o.shape,x,e,!1),h=Zh(s.length,x.length,!1),u=$h(o.shape,x,e,!1);return o.reshape(s).transpose(h).reshape(u)},x.prototype.reduce=function(n,x,t){var e=n.shape[0],i=n.shape[1],r=iu(i),o=new Xg({windowSize:r,inSize:i,batchSize:e},x),s=this.compileAndRun(o,[n],t);return 1===s.shape[1]?s:this.reduce(s,x,t)},x.prototype.argReduce=function(n,x,t){void 0===t&&(t=null);var e=n.shape[0],i=n.shape[1];null!=t&&(e=t.shape[0],i=t.shape[1]);var r=iu(i),o=new ia({windowSize:r,inSize:i,batchSize:e},x,null==t),s=[n];null!=t&&s.push(t);var h=this.compileAndRun(o,s,"int32");return 1===h.shape[1]?h:this.argReduce(n,x,h)},x.prototype.argReducePacked=function(n,x,t){void 0===t&&(t=null);var e=null!=t?t.shape:n.shape,i=iu(e[e.length-1]),r=new wa(e,i,x,null==t),o=null==t?[n]:[n,t],s=this.compileAndRun(r,o,"int32");return s.rank===n.rank?this.argReducePacked(n,x,s):s},x.prototype.sum=function(n,x){Ds("sum",x,n.rank);var t=Ss(n.shape,x),e=t[0],i=nr(t[1]),r=n.as2D(-1,i),o=eo(n.dtype);return this.reduce(r,"sum",o).reshape(e)},x.prototype.prod=function(n,x){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.prod(n,x);var t=Ss(n.shape,x),e=t[0],i=nr(t[1]),r=n.as2D(-1,i),o=eo(n.dtype);return this.reduce(r,"prod",o).reshape(e)},x.prototype.unsortedSegmentSum=function(n,x,t){var e=0,i=Os([e],n.rank),r=n;null!=i&&(r=n.transpose(i),e=Ts(1,n.rank)[0]);var o=function(n,x,t){for(var e=[],i=n.length,r=0;r<i;r++)r!==x?e.push(n[r]):e.push(t);return e}(r.shape,e,t),s=nr([r.shape[e]]),h=r.as2D(-1,s),u=eo(n.dtype),a=this.segOpCompute(h,"unsortedSegmentSum",x,u,t).reshape(o);return null!=i&&(a=a.transpose(_s(i))),a},x.prototype.segOpCompute=function(n,x,t,e,i){var r=n.shape[0],o=n.shape[1],s=function(n,x){var t,e=!1;for(n<=eu?(t=n,e=!0):t=wr(n,Math.floor(Math.sqrt(n)));!e;)t>x||t===n?e=!0:t=wr(n,t+1);return t}(o,i),h=new sl({windowSize:s,inSize:o,batchSize:r,numSegments:i},x),u=this.compileAndRun(h,[n,t],e);return u.shape[1]===i?u:(t=xh(0,i).tile([o/s]),this.segOpCompute(u,x,t,e,i))},x.prototype.argMinMaxReduce=function(n,x,t){var e=[x];if(Ds("arg"+t.charAt(0).toUpperCase()+t.slice(1),e,n.rank),!Bi().getBool("WEBGL_PACK_REDUCE")||n.rank<=2){var i=Ss(n.shape,e),r=i[0],o=nr(i[1]),s=n.as2D(-1,o);return this.argReduce(s,t).reshape(r)}return this.argReducePacked(n,t)},x.prototype.argMin=function(n,x){return this.argMinMaxReduce(n,x,"min")},x.prototype.argMax=function(n,x){return this.argMinMaxReduce(n,x,"max")},x.prototype.cumsum=function(n,x,t,e){if(x!==n.rank-1)throw new Error("WebGL cumsum shader expects an inner-most axis="+(n.rank-1)+" but got axis="+x);var i=new xg(n.shape,t,e);return this.compileAndRun(i,[n])},x.prototype.equal=function(n,x){if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\n return vec4(equal(a, b));\n","bool");var t=new Ra("return float(a == b);",n.shape,x.shape);return this.compileAndRun(t,[n,x],"bool")},x.prototype.notEqual=function(n,x){if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\n return vec4(notEqual(a, b));\n","bool");var t=new Ra("return float(a != b);",n.shape,x.shape);return this.compileAndRun(t,[n,x],"bool")},x.prototype.less=function(n,x){if(this.shouldExecuteOnCPU([n,x]))return this.cpuBackend.less(n,x);if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\n return vec4(lessThan(a, b));\n","bool");var t=new Ra("return float(a < b);",n.shape,x.shape);return this.compileAndRun(t,[n,x],"bool")},x.prototype.lessEqual=function(n,x){if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\n return vec4(lessThanEqual(a, b));\n","bool");var t=new Ra("return float(a <= b);",n.shape,x.shape);return this.compileAndRun(t,[n,x],"bool")},x.prototype.greater=function(n,x){if(this.shouldExecuteOnCPU([n,x]))return this.cpuBackend.greater(n,x);if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\n return vec4(greaterThan(a, b));\n","bool");var t=new Ra("return float(a > b);",n.shape,x.shape);return this.compileAndRun(t,[n,x],"bool")},x.prototype.greaterEqual=function(n,x){if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\n return vec4(greaterThanEqual(a, b));\n","bool");var t=new Ra("return float(a >= b);",n.shape,x.shape);return this.compileAndRun(t,[n,x],"bool")},x.prototype.logicalNot=function(n){var x=new vl(n.shape,"return float(!(x >= 1.0));");return this.compileAndRun(x,[n])},x.prototype.logicalAnd=function(n,x){if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n","bool");var t=new Ra("return float(a >= 1.0 && b >= 1.0);",n.shape,x.shape);return this.compileAndRun(t,[n,x],"bool")},x.prototype.logicalOr=function(n,x){if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\n return min(\n vec4(greaterThanEqual(a, vec4(1.0))) +\n vec4(greaterThanEqual(b, vec4(1.0))),\n vec4(1.0));\n","bool");var t=new Ra("return float(a >= 1.0 || b >= 1.0);",n.shape,x.shape);return this.compileAndRun(t,[n,x],"bool")},x.prototype.select=function(n,x,t){var e=new hl(n.rank,x.shape,x.rank);return this.compileAndRun(e,[n,x,t],to(x.dtype,t.dtype))},x.prototype.where=function(n){js("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead");var x=n.dataSync();return xa(n.shape,x)},x.prototype.topk=function(n,x,t){return na(n.dataSync(),n.shape,n.dtype,x)},x.prototype.min=function(n,x){Ds("min",x,n.rank);var t=Ss(n.shape,x),e=t[0],i=nr(t[1]),r=n.as2D(-1,i);return this.reduce(r,"min",r.dtype).reshape(e)},x.prototype.minimum=function(n,x){if(this.shouldExecuteOnCPU([n,x]))return this.cpuBackend.minimum(n,x);var t=Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ma("\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",n.shape,x.shape):new Ra("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return min(a, b);\n",n.shape,x.shape);return this.compileAndRun(t,[n,x])},x.prototype.mod=function(n,x){var t=Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ma("\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",n.shape,x.shape):new Ra("if (b == 0.0) return NAN;\n return mod(a, b);",n.shape,x.shape);return this.compileAndRun(t,[n,x])},x.prototype.max=function(n,x){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.max(n,x);Ds("max",x,n.rank);var t=Ss(n.shape,x),e=t[0],i=nr(t[1]),r=n.as2D(-1,i);return this.reduce(r,"max",r.dtype).reshape(e)},x.prototype.maximum=function(n,x){if(this.shouldExecuteOnCPU([n,x]))return this.cpuBackend.maximum(n,x);var t=Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ma("\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",n.shape,x.shape):new Ra("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return max(a, b);\n",n.shape,x.shape);return this.compileAndRun(t,[n,x])},x.prototype.all=function(n,x){Ds("all",x,n.rank);var t=Ss(n.shape,x),e=t[0],i=nr(t[1]),r=n.as2D(-1,i);return this.reduce(r,"all",r.dtype).reshape(e)},x.prototype.any=function(n,x){Ds("any",x,n.rank);var t=Ss(n.shape,x),e=t[0],i=nr(t[1]),r=n.as2D(-1,i);return this.reduce(r,"any",r.dtype).reshape(e)},x.prototype.realDivide=function(n,x){if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\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 t=new Ra("\nif (a == b) {\n return 1.0;\n};\nreturn a / b;",n.shape,x.shape);return this.compileAndRun(t,[n,x],"float32")},x.prototype.floorDiv=function(n,x){if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,"\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 t=new Ra("\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",n.shape,x.shape);return this.compileAndRun(t,[n,x],"int32")},x.prototype.add=function(n,x){if("complex64"===n.dtype&&"complex64"===x.dtype)return this.complexSeparableBinaryOp(n,x,Da);if(this.shouldExecuteOnCPU([n,x]))return this.cpuBackend.add(n,x);var t=to(n.dtype,x.dtype);if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,Da,t);var e=new Ra(Da,n.shape,x.shape);return this.compileAndRun(e,[n,x],t)},x.prototype.packedUnaryOp=function(n,x,t){var e=new Gl(n.shape,x);return this.compileAndRun(e,[n],t)},x.prototype.packedBinaryOp=function(n,x,t,e,i){void 0===i&&(i=!1);var r=new Ma(t,n.shape,x.shape,i);return this.compileAndRun(r,[n,x],e)},x.prototype.complexSeparableBinaryOp=function(n,x,t){var e=this,i=this.texData.get(n.dataId),r=this.texData.get(x.dataId),o=[[i.complexTensors.real,r.complexTensors.real],[i.complexTensors.imag,r.complexTensors.imag]].map(function(i){var r=i[0],o=i[1],s=e.makeComplexComponentTensorInfo(n,r),h=e.makeComplexComponentTensorInfo(x,o),u=new Ra(t,n.shape,x.shape);return e.compileAndRun(u,[s,h],to(r.dtype,o.dtype))}),s=o[0],h=o[1],u=this.complex(s,h);return s.dispose(),h.dispose(),u},x.prototype.makeComplexComponentTensorInfo=function(n,x){return{dataId:x.dataId,dtype:x.dtype,shape:n.shape}},x.prototype.addN=function(n){if(1===n.length)return n[0];if(n.length>Bi().get("WEBGL_MAX_TEXTURES_IN_SHADER")){var x=Math.floor(n.length/2),t=this.addN(n.slice(0,x)),e=this.addN(n.slice(x));return this.addN([t,e])}var i=n.map(function(n){return n.dtype}).reduce(function(n,x){return to(n,x)}),r=n.map(function(n){return n.shape}),o=Bi().getBool("WEBGL_PACK")?new ea(n[0].shape,r):new ta(n[0].shape,r);return this.compileAndRun(o,n,i)},x.prototype.subtract=function(n,x){if("complex64"===n.dtype&&"complex64"===x.dtype)return this.complexSeparableBinaryOp(n,x,Oa);if(this.shouldExecuteOnCPU([n,x]))return this.cpuBackend.subtract(n,x);var t=to(n.dtype,x.dtype);if(Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(n,x,Oa,n.dtype);var e=new Ra(Oa,n.shape,x.shape);return this.compileAndRun(e,[n,x],t)},x.prototype.pow=function(n,x){var t=Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ma("\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",n.shape,x.shape):new Ra("\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",n.shape,x.shape),e=to(n.dtype,x.dtype);return this.compileAndRun(t,[n,x],e)},x.prototype.ceil=function(n){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.ceil(n);if(Bi().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(n,Il,n.dtype);var x=new vl(n.shape,Il);return this.compileAndRun(x,[n])},x.prototype.floor=function(n){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.floor(n);if(Bi().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(n,Dl,n.dtype);var x=new vl(n.shape,Dl);return this.compileAndRun(x,[n])},x.prototype.sign=function(n){var x=new vl(n.shape,"\n if (isnan(x)) { return 0.0; }\n return sign(x);\n");return this.compileAndRun(x,[n])},x.prototype.isNaN=function(n){var x=new vl(n.shape,"return float(isnan(x));");return this.compileAndRun(x,[n],"bool")},x.prototype.isInf=function(n){var x=new vl(n.shape,"return float(isinf(x));");return this.compileAndRun(x,[n],"bool")},x.prototype.isFinite=function(n){var x=new vl(n.shape,"return float(!isnan(x) && !isinf(x));");return this.compileAndRun(x,[n],"bool")},x.prototype.round=function(n){var x=new vl(n.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(x,[n])},x.prototype.exp=function(n){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.exp(n);if(Bi().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(n,Ol,n.dtype);var x=new vl(n.shape,Ol);return this.compileAndRun(x,[n])},x.prototype.expm1=function(n){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.expm1(n);if(Bi().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(n,_l,n.dtype);var x=new vl(n.shape,_l);return this.compileAndRun(x,[n])},x.prototype.softmax=function(n,x){var t=hr([x],n.shape),e=this.max(n,t),i=Is(e.shape,t),r=this.subtract(n,e.reshape(i)),o=this.exp(r),s=this.sum(o,t).reshape(i);return this.realDivide(o,s)},x.prototype.log=function(n){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.log(n);if(Bi().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(n,"\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",n.dtype);var x=new vl(n.shape,"if (x < 0.0) return NAN;\n return log(x);");return this.compileAndRun(x,[n])},x.prototype.log1p=function(n){var x=new vl(n.shape,"return log(1.0 + x);");return this.compileAndRun(x,[n])},x.prototype.sqrt=function(n){var x=new vl(n.shape,"return sqrt(x);");return this.compileAndRun(x,[n])},x.prototype.rsqrt=function(n){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.rsqrt(n);var x=new vl(n.shape,"return inversesqrt(x);");return this.compileAndRun(x,[n])},x.prototype.reciprocal=function(n){var x=new vl(n.shape,"return 1.0 / x;");return this.compileAndRun(x,[n])},x.prototype.relu=function(n){var x;return x=Bi().getBool("WEBGL_PACK")?new Gl(n.shape,Vl):new vl(n.shape,ql),this.compileAndRun(x,[n])},x.prototype.relu6=function(n){var x;return x=Bi().getBool("WEBGL_PACK")?new Gl(n.shape,Wl):new vl(n.shape,Cl),this.compileAndRun(x,[n])},x.prototype.prelu=function(n,x){var t=Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ma(Ba,n.shape,x.shape):new Ra(Ta,n.shape,x.shape);return this.compileAndRun(t,[n,x])},x.prototype.elu=function(n){if(Bi().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(n,Ql,n.dtype);var x=new vl(n.shape,Al);return this.compileAndRun(x,[n])},x.prototype.eluDer=function(n,x){var t=Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ma("\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n",n.shape,x.shape):new Ra("return (b >= 1.0) ? a : a * (b + 1.0);",n.shape,x.shape);return this.compileAndRun(t,[n,x])},x.prototype.selu=function(n){var x=new vl(n.shape,El);return this.compileAndRun(x,[n])},x.prototype.int=function(n){var x=new vl(n.shape,"return float(int(x));");return this.compileAndRun(x,[n],"int32")},x.prototype.clip=function(n,x,t){var e,i=(e=Bi().getBool("WEBGL_PACK_CLIP")?new Fa(n.shape):new Na(n.shape)).getCustomSetupFunc(x,t);return this.compileAndRun(e,[n],null,i)},x.prototype.abs=function(n){if(this.shouldExecuteOnCPU([n]))return this.cpuBackend.abs(n);if(Bi().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(n,kl,n.dtype);var x=new vl(n.shape,kl);return this.compileAndRun(x,[n])},x.prototype.complexAbs=function(n){var x=this.texData.get(n.dataId),t=new Pa(n.shape),e=[this.makeComplexComponentTensorInfo(n,x.complexTensors.real),this.makeComplexComponentTensorInfo(n,x.complexTensors.imag)];return this.compileAndRun(t,e)},x.prototype.sigmoid=function(n){var x=new vl(n.shape,"return 1.0 / (1.0 + exp(-1.0 * x));");return this.compileAndRun(x,[n])},x.prototype.softplus=function(n){var x=new vl(n.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(x,[n])},x.prototype.sin=function(n){var x=new vl(n.shape,Tl);return this.compileAndRun(x,[n])},x.prototype.cos=function(n){var x=new vl(n.shape,Rl);return this.compileAndRun(x,[n])},x.prototype.tan=function(n){var x=new vl(n.shape,"return tan(x);");return this.compileAndRun(x,[n])},x.prototype.asin=function(n){var x=new vl(n.shape,Bl);return this.compileAndRun(x,[n])},x.prototype.acos=function(n){var x=new vl(n.shape,Ml);return this.compileAndRun(x,[n])},x.prototype.atan=function(n){var x=new vl(n.shape,Nl);return this.compileAndRun(x,[n])},x.prototype.atan2=function(n,x){var t=Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ma("\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",n.shape,x.shape):new Ra("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return atan(a, b);\n",n.shape,x.shape);return this.compileAndRun(t,[n,x])},x.prototype.sinh=function(n){var x=new vl(n.shape,"\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n");return this.compileAndRun(x,[n])},x.prototype.cosh=function(n){var x=new vl(n.shape,"\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n");return this.compileAndRun(x,[n])},x.prototype.tanh=function(n){var x=new vl(n.shape,"\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n");return this.compileAndRun(x,[n])},x.prototype.asinh=function(n){var x=new vl(n.shape,Fl);return this.compileAndRun(x,[n])},x.prototype.acosh=function(n){var x=new vl(n.shape,Pl);return this.compileAndRun(x,[n])},x.prototype.atanh=function(n){var x=new vl(n.shape,Ll);return this.compileAndRun(x,[n])},x.prototype.erf=function(n){var x=new vl(n.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(x,[n])},x.prototype.step=function(n,x){var t=new vl(n.shape,function(n){return void 0===n&&(n=0),jl+"\n return x > 0.0 ? 1.0 : float("+n+");\n "}(x));return this.compileAndRun(t,[n])},x.prototype.conv2dByMatMul=function(n,x,t,e,i,r){var o=n.shape,s=this.texData.get(n.dataId),h=t.inChannels,u=o[0]*o[1]*o[2],a=t.outChannels,g="channelsLast"===t.dataFormat,l=(1===u||1===a)&&h>1e3,c=o[2]%2!=0&&!!s.isPacked;if(l||!Bi().getBool("WEBGL_LAZILY_UNPACK")||!Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")||!c){var d=g?o[0]*o[1]*o[2]:o[0]*o[2]*o[3],f=this.reshape(n,[1,d,t.inChannels]),p=this.reshape(x,[1,t.inChannels,t.outChannels]);return this.reshape(this.fusedBatchMatMul({a:f,b:p,transposeA:!1,transposeB:!1,bias:e,activation:i,preluActivationWeights:r}),t.outShape)}var y=g?o[0]*o[1]*(o[2]+1):o[0]*o[2]*(o[3]+1),m={dataId:n.dataId,shape:[1,y,t.inChannels],dtype:n.dtype},b=s.shape;s.shape=s.shape.slice(),s.shape[s.shape.length-2]++,Ji(os(s.shape,m.shape),function(){return"packed reshape "+s.shape+" to "+m.shape+" isn't free"});var z=this.reshape(x,[1,t.inChannels,t.outChannels]),v=this.fusedBatchMatMul({a:m,b:z,transposeA:!1,transposeB:!1,bias:e,activation:i,preluActivationWeights:r}),j=this.texData.get(v.dataId);return Ji(j.isPacked,function(){return"batchMatMul result is expected to be packed"}),s.shape=b,j.shape=t.outShape,ao.makeTensorFromDataId(v.dataId,t.outShape,v.dtype)},x.prototype.conv2dWithIm2Row=function(n,x,t,e,i,r){var o=t.filterWidth,s=t.filterHeight,h=t.inChannels,u=t.outWidth,a=t.outHeight,g="channelsLast"===t.dataFormat,l=o*s*h,c=a*u,d=[l,c],f=n.squeeze([0]),p=x.reshape([1,l,-1]),y=new Mg(d,f.shape,t),m=this.compileAndRun(y,[f]).reshape([1,d[0],d[1]]),b=null!=e,z=null!=r,v=i?Jl(i,!0):null,j=new Ug(m.shape,[1,c,t.outChannels],!0,!1,b,v,z),w=[m,p];e&&w.push(e),z&&w.push(r);var k=this.compileAndRun(j,w);return g?k.reshape([1,a,u,t.outChannels]):k.reshape([1,t.outChannels,a,u])},x.prototype.fusedConv2d=function(n){var x=n.input,t=n.filter,e=n.convInfo,i=n.bias,r=n.activation,o=n.preluActivationWeights;if(1===e.filterHeight&&1===e.filterWidth&&1===e.dilationHeight&&1===e.dilationWidth&&1===e.strideHeight&&1===e.strideWidth&&("SAME"===e.padInfo.type||"VALID"===e.padInfo.type))return this.conv2dByMatMul(x,t,e,i,r,o);if(Bi().getBool("WEBGL_CONV_IM2COL")&&1===x.shape[0])return this.conv2dWithIm2Row(x,t,e,i,r,o);var s=null!=i,h=null!=o,u=r?Jl(r,!1):null,a=new Ja(e,s,u,h),g=[x,t];return i&&g.push(i),o&&g.push(o),this.compileAndRun(a,g)},x.prototype.conv2d=function(n,x,t){if(1===t.filterHeight&&1===t.filterWidth&&1===t.dilationHeight&&1===t.dilationWidth&&1===t.strideHeight&&1===t.strideWidth&&("SAME"===t.padInfo.type||"VALID"===t.padInfo.type))return this.conv2dByMatMul(n,x,t);if(Bi().getBool("WEBGL_CONV_IM2COL")&&1===n.shape[0])return this.conv2dWithIm2Row(n,x,t);var e=new Ja(t);return this.compileAndRun(e,[n,x])},x.prototype.conv2dDerInput=function(n,x,t){var e=new Wa(t);return this.compileAndRun(e,[n,x])},x.prototype.conv2dDerFilter=function(n,x,t){var e=new Va(t);return this.compileAndRun(e,[n,x])},x.prototype.fusedDepthwiseConv2D=function(n){var x,t=n.input,e=n.filter,i=n.convInfo,r=n.bias,o=n.activation,s=n.preluActivationWeights,h=Bi().getBool("WEBGL_PACK_DEPTHWISECONV")&&i.strideWidth<=2&&i.outChannels/i.inChannels==1,u=o?Jl(o,h):null,a=[t,e],g=null!=r,l=null!=s;return g&&a.push(r),l&&a.push(s),h?(x=new $a(i,g,u,l),this.compileAndRun(x,a)):(x=new Za(i,g,u,l),this.compileAndRun(x,a))},x.prototype.depthwiseConv2D=function(n,x,t){var e;return Bi().getBool("WEBGL_PACK_DEPTHWISECONV")&&t.strideWidth<=2&&t.outChannels/t.inChannels==1?(e=new $a(t),this.compileAndRun(e,[n,x])):(e=new Za(t),this.compileAndRun(e,[n,x]))},x.prototype.depthwiseConv2DDerInput=function(n,x,t){var e=new Ya(t);return this.compileAndRun(e,[n,x])},x.prototype.depthwiseConv2DDerFilter=function(n,x,t){var e=new Ka(t);return this.compileAndRun(e,[n,x])},x.prototype.conv3d=function(n,x,t){var e=new Xa(t);return this.compileAndRun(e,[n,x])},x.prototype.conv3dDerInput=function(n,x,t){var e=new Ga(t);return this.compileAndRun(e,[n,x])},x.prototype.conv3dDerFilter=function(n,x,t){var e=new Qa(t);return this.compileAndRun(e,[n,x])},x.prototype.maxPool=function(n,x){var t=new Yg(x,"max",!1);return this.compileAndRun(t,[n])},x.prototype.avgPool=function(n,x){var t=new Yg(x,"avg",!1);return this.compileAndRun(t,[n],"float32")},x.prototype.maxPoolBackprop=function(n,x,t,e){var i=new Yg(e,"max",!0),r=this.compileAndRun(i,[x]),o=new Lg(e),s=this.compileAndRun(o,[n,r],x.dtype);return r.dispose(),s},x.prototype.avgPoolBackprop=function(n,x,t){var e=new ka(t);return this.compileAndRun(e,[n],x.dtype)},x.prototype.cast=function(n,x){return Mu(n,x,this)},x.prototype.unstack=function(n,x){for(var t=n.shape[x],e=new Array(n.rank-1),i=0,r=0;r<n.rank;r++)r!==x&&(e[i++]=n.shape[r]);var o=new Array(n.rank).fill(0),s=n.shape.slice();s[x]=1;var h=new Array(t);for(r=0;r<h.length;r++)o[x]=r,h[r]=this.slice(n,o,s).reshape(e);return h},x.prototype.avgPool3d=function(n,x){var t=new Jg(x,"avg",!1);return this.compileAndRun(t,[n],"float32")},x.prototype.avgPool3dBackprop=function(n,x,t){var e=new qa(t);return this.compileAndRun(e,[n],x.dtype)},x.prototype.maxPool3d=function(n,x){var t=new Jg(x,"max",!1);return this.compileAndRun(t,[n],"float32")},x.prototype.maxPool3dBackprop=function(n,x,t,e){var i=new Jg(e,"max",!0),r=this.compileAndRun(i,[x]),o=new Hg(e),s=this.compileAndRun(o,[n,r],x.dtype);return r.dispose(),s},x.prototype.reshape=function(n,x){var t=this.texData.get(n.dataId);if(t.isPacked&&!os(n.shape,x)&&(null===t.texture||!os(t.shape,x))){var e=this.packedReshape(n,x);return ao.makeTensorFromDataId(e.dataId,e.shape,e.dtype)}return Nu(n,x)},x.prototype.resizeBilinear=function(n,x,t,e){var i=Bi().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new xl(n.shape,x,t,e):new nl(n.shape,x,t,e);return this.compileAndRun(i,[n],"float32")},x.prototype.resizeBilinearBackprop=function(n,x,t){var e=new $g(n,x,t);return this.compileAndRun(e,[n])},x.prototype.resizeNearestNeighbor=function(n,x,t,e){var i=new el(n.shape,x,t,e);return this.compileAndRun(i,[n])},x.prototype.resizeNearestNeighborBackprop=function(n,x,t){var e=new tl(n,x,t);return this.compileAndRun(e,[n])},x.prototype.multinomial=function(n,x,t,e){var i=x?n:yu(n),r=i.shape[0],o=i.shape[1],s=new Vg(r,o,t),h=s.getCustomSetupFunc(e);return this.compileAndRun(s,[i],"int32",h)},x.prototype.oneHot=function(n,x,t,e){var i=new Wg(n.size,x,t,e);return this.compileAndRun(i,[n])},x.prototype.diag=function(n){var x=new og(n.size);return this.compileAndRun(x,[n])},x.prototype.nonMaxSuppression=function(n,x,t,e,i){return js("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"),Qu(n.dataSync(),x.dataSync(),t,e,i)},x.prototype.cropAndResize=function(n,x,t,e,i,r){var o=new ng(n.shape,x.shape,e,i,r);return this.compileAndRun(o,[n,x,t],"float32")},x.prototype.depthToSpace=function(n,x,t){Ji(x>1,function(){return"blockSize should be > 1 for depthToSpace, but was: "+x});var e=n.shape[0],i="NHWC"===t?n.shape[1]:n.shape[2],r="NHWC"===t?n.shape[2]:n.shape[3],o="NHWC"===t?n.shape[3]:n.shape[1],s=i*x,h=r*x,u=o/(x*x),a=new rg("NHWC"===t?[e,s,h,u]:[e,u,s,h],x,t);return this.compileAndRun(a,[n])},x.prototype.split=function(n,x,t){return Zu(n,x,t)},x.prototype.scatterND=function(n,x,t){var e=su(0,n,t),i=e.sliceRank,r=e.numUpdates,o=e.sliceSize,s=e.strides,h=e.outputSize,u=[h/o,o],a=n.reshape([r,i]),g=x.reshape([r,o]);if(0===h)return Nu(Ls([]),t);var l=Us(0),c=new ol(r,i,a.rank,g.rank,s,u);return this.compileAndRun(c,[g,a,l]).reshape(t)},x.prototype.sparseToDense=function(n,x,t,e){var i=su(0,n,t),r=i.sliceRank,o=i.numUpdates,s=i.strides,h=i.outputSize,u=new ol(o,r,n.rank,x.rank,s,[h,1],!1);return this.compileAndRun(u,[x,n,e]).reshape(t)},x.prototype.fft=function(n){return this.fftImpl(n,!1)},x.prototype.ifft=function(n){return this.fftImpl(n,!0)},x.prototype.fftImpl=function(n,x){var t=this.texData.get(n.dataId),e=new cg(gg,n.shape,x),i=new cg(lg,n.shape,x),r=[this.makeComplexComponentTensorInfo(n,t.complexTensors.real),this.makeComplexComponentTensorInfo(n,t.complexTensors.imag)],o=this.compileAndRun(e,r),s=this.compileAndRun(i,r),h=this.complex(o,s).as2D(n.shape[0],n.shape[1]);return o.dispose(),s.dispose(),h},x.prototype.gatherND=function(n,x){var t=x.shape,e=t[t.length-1],i=tu(n,x),r=i[0],o=i[1],s=i[2],h=i[3],u=x.reshape([o,e]),a=n.reshape([n.size/s,s]),g=new pg(e,h,[o,s]);return this.compileAndRun(g,[a,u]).reshape(r)},x.prototype.fill=function(n,x,t){if("string"===(t=t||vr(x))){var e=gr(t,nr(n));return e.fill(x),ao.makeTensor(e,n,t,this)}var i=new dg(n,x),r=i.getCustomSetupFunc(x);return this.compileAndRun(i,[],t,r)},x.prototype.onesLike=function(n){if("string"===n.dtype)throw new Error("onesLike is not supported under string dtype");return this.fill(n.shape,1,n.dtype)},x.prototype.zerosLike=function(n){return this.fill(n.shape,"string"===n.dtype?"":0,n.dtype)},x.prototype.linspace=function(n,x,t){return Fu(n,x,t)},x.prototype.makeTensorInfo=function(n,x){var t=this.write(null,n,x);return this.texData.get(t).usage=null,{dataId:t,shape:n,dtype:x}},x.prototype.makeOutput=function(n,x){var t=this.makeTensorInfo(n,x).dataId;return ao.makeTensorFromDataId(t,n,x,this)},x.prototype.unpackTensor=function(n){var x=new Kl(n.shape);return this.runWebGLProgram(x,[n],n.dtype)},x.prototype.packTensor=function(n){var x=new Qg(n.shape);return this.runWebGLProgram(x,[n],n.dtype,null,!0)},x.prototype.packedReshape=function(n,x){var t=[xs(n.shape)].concat(ts(n.shape)),e={dtype:n.dtype,shape:t,dataId:n.dataId},i=[xs(x)].concat(ts(x)),r=new Zg(i,t),o=this.runWebGLProgram(r,[e],n.dtype,null,!0);return{dataId:o.dataId,shape:x,dtype:o.dtype}},x.prototype.decode=function(n){var x,t=this.texData.get(n),e=t.isPacked,i=t.shape,r=t.dtype,o=es(i);return x=e?new ig(o):new eg(o),{dtype:r,shape:i,dataId:this.runWebGLProgram(x,[{shape:o,dtype:r,dataId:n}],r,null,!0).dataId}},x.prototype.runWebGLProgram=function(n,x,t,e,i){var r=this;void 0===i&&(i=!1);var o=this.makeTensorInfo(n.outputShape,t),s=this.texData.get(o.dataId);if(n.packedOutput&&(s.isPacked=!0),n.outPackingScheme===co.DENSE){var h=jo(n.outputShape);s.texShape=h.map(function(n){return 2*n})}if(null!=n.outTexUsage&&(s.usage=n.outTexUsage),0===nr(o.shape))return s.values=ar(o.dtype,0),o;var u=[],a=x.map(function(x){if("complex64"===x.dtype)throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");var t=r.texData.get(x.dataId);if(null==t.texture){if(!n.packedInputs&&nr(x.shape)<=Bi().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:x.shape,texData:null,isUniform:!0,uniformValues:t.values};n.packedInputs&&(t.isPacked=!0,t.shape=x.shape)}else if(!!t.isPacked!=!!n.packedInputs)x=t.isPacked?r.unpackTensor(x):r.packTensor(x),u.push(x),t=r.texData.get(x.dataId);else if(t.isPacked&&!os(t.shape,x.shape)){var e=x,i=x.shape;x.shape=t.shape,x=r.packedReshape(x,i),u.push(x),t=r.texData.get(x.dataId),e.shape=i}return r.uploadToGPU(x.dataId),{shape:x.shape,texData:t,isUniform:!1}});this.uploadToGPU(o.dataId);var g,l={shape:o.shape,texData:s,isUniform:!1},c=function(n,x,t){var e="";x.concat(t).forEach(function(n){var x=null!=n.texData&&null!=n.texData.slice&&n.texData.slice.flatOffset>0,t=n.isUniform?"uniform":n.texData.texShape;e+=n.shape+"_"+t+"_"+x});var i=n.userCode,r=n.constructor.name;return r+"_"+e+"_"+i}(n,a,l),d=this.getAndSaveBinary(c,function(){return function(n,x,t,e){var i=x.userCode,r=t.map(function(n,t){var e={logicalShape:n.shape,texShape:n.isUniform?null:n.texData.texShape,isUniform:n.isUniform,isPacked:!n.isUniform&&n.texData.isPacked,flatOffset:null};return null!=n.texData&&null!=n.texData.slice&&n.texData.slice.flatOffset>0&&(e.flatOffset=n.texData.slice.flatOffset),{name:x.variableNames[t],shapeInfo:e}}),o=r.map(function(n){return n.shapeInfo}),s={logicalShape:e.shape,texShape:e.texData.texShape,isUniform:!1,isPacked:e.texData.isPacked,flatOffset:null},h=ga(r,s,i,x.packedInputs),u=n.createProgram(h),a=null,g=n.getUniformLocation(u,"NAN",!1);1===Bi().getNumber("WEBGL_VERSION")&&(a=n.getUniformLocation(u,"INFINITY",!1));for(var l={},c=0;c<x.variableNames.length;c++){var d=x.variableNames[c];l[d]=n.getUniformLocation(u,d,!1),l["offset"+d]=n.getUniformLocation(u,"offset"+d,!1)}return{program:x,source:h,webGLProgram:u,uniformLocations:l,inShapeInfos:o,outShapeInfo:s,infLoc:a,nanLoc:g}}(r.gpgpu,n,a,l)}),f=null!=this.activeTimers;if(f&&(g=this.startTimer()),function(n,x,t,e,i){Bg(x.inShapeInfos,t),Bg([x.outShapeInfo],[e]);var r=e.texData.texture,o=e.texData.texShape;e.texData.isPacked?n.setOutputPackedMatrixTexture(r,o[0],o[1]):n.setOutputMatrixTexture(r,o[0],o[1]),n.setProgram(x.webGLProgram),1===Bi().getNumber("WEBGL_VERSION")&&null!==x.infLoc&&n.gl.uniform1f(x.infLoc,1/0),null!==x.nanLoc&&n.gl.uniform1f(x.nanLoc,NaN),t.forEach(function(t,e){var i=x.program.variableNames[e],r=x.uniformLocations[i],o=x.uniformLocations["offset"+i];if(null!=r)if(t.isUniform)if(nr(t.shape)<2)n.gl.uniform1f(r,t.uniformValues[0]);else{var s=t.uniformValues;s instanceof Float32Array||(s=new Float32Array(s)),n.gl.uniform1fv(r,s)}else null!=t.texData.slice&&null!=o&&n.gl.uniform1i(o,t.texData.slice.flatOffset),n.setInputMatrixTexture(t.texData.texture,r,e)}),null!=i&&i(n,x.webGLProgram),n.executeProgram()}(this.gpgpu,d,a,l,e),u.forEach(function(n){return r.disposeData(n.dataId)}),f&&(g=this.endTimer(g),this.activeTimers.push({name:n.constructor.name,query:this.getQueryTime(g)})),!Bi().getBool("WEBGL_LAZILY_UNPACK")&&s.isPacked&&!1===i){var p=this.unpackTensor(o);return this.disposeData(o.dataId),p}return o},x.prototype.compileAndRun=function(n,x,t,e,i){void 0===i&&(i=!1),t=t||x[0].dtype;var r=this.runWebGLProgram(n,x,t,e,i);return ao.makeTensorFromDataId(r.dataId,r.shape,r.dtype)},x.prototype.getAndSaveBinary=function(n,x){return n in this.binaryCache||(this.binaryCache[n]=x()),this.binaryCache[n]},x.prototype.getTextureManager=function(){return this.textureManager},x.prototype.dispose=function(){var n=this;this.disposed||(Bi().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(function(x){n.gpgpu.deleteProgram(n.binaryCache[x].webGLProgram),delete n.binaryCache[x]}),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)},x.prototype.floatPrecision=function(){var n=this;return null==this.floatPrecisionValue&&(this.floatPrecisionValue=bs(function(){if(!Bi().get("WEBGL_RENDER_FLOAT32_ENABLED")){var x=Bi().getBool("DEBUG");Bi().set("DEBUG",!1);var t=n.abs(Us(1e-8)).dataSync()[0];if(Bi().set("DEBUG",x),t>0)return 32}return 16})),this.floatPrecisionValue},x.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},x.prototype.uploadToGPU=function(n){var x,t=this.texData.get(n),e=t.shape,i=t.dtype,r=t.values,o=t.texture,s=t.usage,h=t.isPacked;if(null==o){var u,a=null!=this.activeTimers;a&&(u=Sr());var g=t.texShape;if(null==g&&(g=is(e,h),t.texShape=g),null!=r){var l=es(e),c=void 0,d=g[1],f=g[0],p=r instanceof Uint8Array;h?(d=(x=wo(g[0],g[1]))[0],f=x[1],c=new ag(l,[f,d],p)):c=new ug(l,[f,d],p);var y=this.makeTensorInfo([f,d],i);this.texData.get(y.dataId).usage=p?fo.PIXELS:fo.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(y.dataId),d,f,r);var m=this.runWebGLProgram(c,[y],i,null,!0),b=this.texData.get(m.dataId);t.texture=b.texture,t.texShape=b.texShape,t.isPacked=b.isPacked,t.usage=b.usage,this.disposeData(y.dataId),this.texData.delete(m.dataId),t.values=null,a&&(this.uploadWaitMs+=Sr()-u)}else{var z=this.acquireTexture(g,s,i,h);t.texture=z}}},x.prototype.convertAndCacheOnCPU=function(n,x){var t=this.texData.get(n),e=t.dtype;return this.releaseGPUData(n),null!=x&&(t.values=function(n,x){if("float32"===x||"complex64"===x)return n;if("int32"===x||"bool"===x){for(var t="int32"===x?new Int32Array(n.length):new Uint8Array(n.length),e=0;e<t.length;++e)t[e]=Math.round(n[e]);return t}throw new Error("Unknown dtype "+x)}(x,e)),t.values},x.prototype.acquireTexture=function(n,x,t,e){if(this.numBytesInGPU+=this.computeBytes(n,t),!this.warnedAboutMemory&&this.numBytesInGPU>1024*this.numMBBeforeWarning*1024){var i=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn("High memory usage in GPU: "+i+" MB, most likely due to a memory leak")}return this.textureManager.acquireTexture(n,x,e)},x.prototype.computeBytes=function(n,x){return n[0]*n[1]*pr(x)},x}(zu);go()&&ao.registerBackend("webgl",function(){return new Zl},2);var $l=Ms({square_:function(n){var x=qs(n,"x","square"),t=[x];return ao.runKernelFunc(function(n,t){return t([x]),n.square(x)},{x:x},null,"Square",{},t,[])}}),nc="SquaredDifference",xc=Ms({squaredDifference_:function(n,x){var t,e=qs(n,"a","squaredDifference"),i=qs(x,"b","squaredDifference");t=io(e,i),e=t[0],i=t[1],ku(e.shape,i.shape);var r={a:e,b:i},o=[e,i];return ao.runKernelFunc(function(n,x){var t=n.squaredDifference(e,i);return x([e,i]),t},r,function(n,x){var t=x[0],e=x[1],i=Us(2);return{a:function(){return n.mul(t.sub(e).mul(i))},b:function(){return n.mul(e.sub(t).mul(i))}}},nc,{},o,[])}}),tc=Ms({abs_:function(n){var x=qs(n,"x","abs");return"complex64"===x.dtype?ao.runKernelFunc(function(n){return n.complexAbs(x)},{$x:x}):ao.runKernelFunc(function(n,t){var e=n.abs(x);return t([x]),e},{x:x},function(n,x){var t=x[0];return{x:function(){return n.mul(t.toFloat().step(-1))}}},"Abs")}}),ec=Ms({acos_:function(n){var x=qs(n,"x","acos");return ao.runKernelFunc(function(n,t){var e=n.acos(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.divStrict(Us(1).sub(t.toFloat().square()).sqrt()).neg()}}})}}),ic=Ms({acosh_:function(n){var x=qs(n,"x","acosh");return ao.runKernelFunc(function(n,t){var e=n.acosh(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.divStrict(t.toFloat().square().sub(1).sqrt())}}})}}),rc=Ms({asin_:function(n){var x=qs(n,"x","asin");return ao.runKernelFunc(function(n,t){var e=n.asin(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.divStrict(Us(1).sub(t.toFloat().square()).sqrt())}}})}}),oc=Ms({asinh_:function(n){var x=qs(n,"x","asinh");return ao.runKernelFunc(function(n,t){var e=n.asinh(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.divStrict(Us(1).add(t.toFloat().square()).sqrt())}}})}}),sc=Ms({atan_:function(n){var x=qs(n,"x","atan");return ao.runKernelFunc(function(n,t){var e=n.atan(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.div(t.toFloat().square().add(1))}}})}}),hc=Ms({atanh_:function(n){var x=qs(n,"x","atanh");return ao.runKernelFunc(function(n,t){var e=n.atanh(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.div(Us(1).sub(t.toFloat().square()))}}})}}),uc=Ms({ceil_:function(n){var x=qs(n,"x","ceil");return ao.runKernelFunc(function(n){return n.ceil(x)},{$x:x},function(n){return{$x:function(){return eh(n)}}})}}),ac=Ms({clipByValue_:function(n,x,t){var e=qs(n,"x","clipByValue");Ji(x<=t,function(){return"Error in clip: min ("+x+") must be less than or equal to max ("+t+")."});var i=[e],r={min:x,max:t};return ao.runKernelFunc(function(n,i){var r=n.clip(e,x,t);return i([e]),r},{x:e},function(n,e){var i=e[0];return{x:function(){return n.where(i.greaterEqual(x).logicalAnd(i.lessEqual(t)),eh(n))}}},"ClipByValue",r,i)}}),gc=Ms({cos_:function(n){var x=qs(n,"x","cos"),t=[x];return ao.runKernelFunc(function(n,t){var e=n.cos(x);return t([x]),e},{x:x},function(n,x){var t=x[0];return{x:function(){return t.toFloat().sin().neg().mul(n)}}},"Cos",{},t)}}),lc=Ms({cosh_:function(n){var x=qs(n,"x","cosh");return ao.runKernelFunc(function(n,t){var e=n.cosh(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return t.toFloat().sinh().mulStrict(n)}}})}}),cc=Ms({erf_:function(n){var x=qs(n,"x","erf");return Ji("int32"===x.dtype||"float32"===x.dtype,function(){return"Input dtype must be `int32` or `float32`."}),"int32"===x.dtype&&(x=x.toFloat()),ao.runKernelFunc(function(n,t){var e=n.erf(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.mul(t.square().neg().exp().mul(2/Math.sqrt(Math.PI)))}}})}}),dc=Ms({exp_:function(n){var x=qs(n,"x","exp");return ao.runKernelFunc(function(n,t){var e=n.exp(x);return t([e]),e},{x:x},function(n,x){return{x:function(){return n.mulStrict(x[0])}}},"Exp",{},[],[!0])}}),fc=Ms({expm1_:function(n){var x=qs(n,"x","expm1");return ao.runKernelFunc(function(n,t){var e=n.expm1(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.mul(t.exp())}}})}}),pc=Ms({floor_:function(n){var x=qs(n,"x","floor");return ao.runKernelFunc(function(n){return n.floor(x)},{$x:x},function(n){return{$x:function(){return eh(n)}}})}}),yc=Ms({log_:function(n){var x=qs(n,"x","log"),t=[x];return ao.runKernelFunc(function(n,t){var e=n.log(x);return t([x]),e},{x:x},function(n,x){var t=x[0];return{x:function(){return n.div(t.toFloat())}}},"Log",{},t)}}),mc=Ms({log1p_:function(n){var x=qs(n,"x","log1p");return ao.runKernelFunc(function(n,t){var e=n.log1p(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.div(t.add(1))}}})}}),bc=Ms({logSigmoid_:function(n){var x=qs(n,"x","logSigmoid");return ao.runKernelFunc(function(n,t){var e=n.softplus(x.neg()).neg();return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.mul(t.neg().sigmoid())}}})}}),zc=Ms({neg_:function(n){var x=qs(n,"x","neg"),t=[x];return ao.runKernelFunc(function(n){return n.neg(x)},{x:x},function(n){return{x:function(){return n.neg()}}},"Neg",{},t)}}),vc=Ms({reciprocal_:function(n){var x=qs(n,"x","reciprocal");return ao.runKernelFunc(function(n,t){var e=n.reciprocal(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.div(t.square().neg())}}})}}),jc=Ms({round_:function(n){var x=qs(n,"x","round");return ao.runKernelFunc(function(n){return n.round(x)},{$x:x},function(n){return{$x:function(){return eh(n)}}})}}),wc=Ms({rsqrt_:function(n){var x=qs(n,"x","rsqrt"),t=[x];return ao.runKernelFunc(function(n,t){var e=n.rsqrt(x);return t([x]),e},{x:x},function(n,x){var t=x[0];return{x:function(){return n.div(t.pow(1.5).mul(2)).neg()}}},"Rsqrt",{},t)}}),kc=Ms({sigmoid_:function(n){var x=qs(n,"x","sigmoid");return ao.runKernelFunc(function(n,t){var e=n.sigmoid(x);return t([e]),e},{x:x},function(n,x){var t=x[0];return{x:function(){return n.mul(t.mul(Us(1).sub(t)))}}},"Sigmoid")}}),qc=Ms({sign_:function(n){var x=qs(n,"x","sign");return ao.runKernelFunc(function(n){return n.sign(x)},{$x:x},function(n){return{$x:function(){return eh(n)}}})}}),Cc=Ms({isNaN_:function(n){var x=qs(n,"x","isNaN");return ao.runKernelFunc(function(n){return n.isNaN(x)},{$x:x},function(n){return{$x:function(){return eh(n)}}})}}),Ac=Ms({isInf_:function(n){var x=qs(n,"x","isInf");return ao.runKernelFunc(function(n){return n.isInf(x)},{$x:x},function(n){return{$x:function(){return eh(n)}}})}}),Ec=Ms({isFinite_:function(n){var x=qs(n,"x","isFinite");return ao.runKernelFunc(function(n){return n.isFinite(x)},{$x:x},function(n){return{$x:function(){return eh(n)}}})}}),Sc=Ms({sin_:function(n){var x=qs(n,"x","sin"),t=[x];return ao.runKernelFunc(function(n,t){var e=n.sin(x);return t([x]),e},{x:x},function(n,x){var t=x[0];return{x:function(){return t.toFloat().cos().mul(n)}}},"Sin",{},t)}}),Ic=Ms({sinh_:function(n){var x=qs(n,"x","sinh");return ao.runKernelFunc(function(n,t){var e=n.sinh(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return t.toFloat().cosh().mulStrict(n)}}})}}),Dc=Ms({softplus_:function(n){var x=qs(n,"x","softplus");return ao.runKernelFunc(function(n,t){var e=n.softplus(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.mul(t.sigmoid())}}})}}),Oc=Ms({sqrt_:function(n){var x=qs(n,"x","sqrt");return ao.runKernelFunc(function(n,t){var e=n.sqrt(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.div(t.toFloat().sqrt().mul(2))}}})}}),_c=Ms({step_:function(n,x){void 0===x&&(x=0);var t=qs(n,"x","step");return ao.runKernelFunc(function(n){return n.step(t,x)},{$x:t},function(n){return{$x:function(){return eh(n)}}})}}),Tc=Ms({tan_:function(n){var x=qs(n,"x","tan");return ao.runKernelFunc(function(n,t){var e=n.tan(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return n.div(t.cos().square())}}})}}),Rc=Ms({tanh_:function(n){var x=qs(n,"x","tanh");return ao.runKernelFunc(function(n,t){var e=n.tanh(x);return t([e]),e},{x:x},function(n,x){var t=x[0];return{x:function(){return Us(1).sub(t.square()).mulStrict(n)}}},"Tanh",{},null,[!0])}});function Bc(n,x,t,e,i,r){var o,s,h=qs(n,"x","batchNorm"),u=qs(x,"mean","batchNorm"),a=qs(t,"variance","batchNorm");return null!=i&&(o=qs(i,"scale","batchNorm")),null!=e&&(s=qs(e,"offset","batchNorm")),Ji(2===h.rank,function(){return"Error in batchNorm3D: x must be rank 3 but got rank "+h.rank+"."}),Ji(2===u.rank||1===u.rank,function(){return"Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank "+u.rank+"."}),Ji(2===a.rank||1===a.rank,function(){return"Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank "+a.rank+"."}),null!=o&&Ji(2===o.rank||1===o.rank,function(){return"Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank "+o.rank+"."}),null!=s&&Ji(2===s.rank||1===s.rank,function(){return"Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank "+s.rank+"."}),Fc(h,u,a,s,o,r)}function Mc(n,x,t,e,i,r){var o,s,h=qs(n,"x","batchNorm"),u=qs(x,"mean","batchNorm"),a=qs(t,"variance","batchNorm");return null!=i&&(o=qs(i,"scale","batchNorm")),null!=e&&(s=qs(e,"offset","batchNorm")),Ji(3===h.rank,function(){return"Error in batchNorm3D: x must be rank 3 but got rank "+h.rank+"."}),Ji(3===u.rank||1===u.rank,function(){return"Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank "+u.rank+"."}),Ji(3===a.rank||1===a.rank,function(){return"Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank "+a.rank+"."}),null!=o&&Ji(3===o.rank||1===o.rank,function(){return"Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank "+o.rank+"."}),null!=s&&Ji(3===s.rank||1===s.rank,function(){return"Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank "+s.rank+"."}),Fc(h,u,a,s,o,r)}function Nc(n,x,t,e,i,r){var o,s,h=qs(n,"x","batchNorm"),u=qs(x,"mean","batchNorm"),a=qs(t,"variance","batchNorm");return null!=i&&(o=qs(i,"scale","batchNorm")),null!=e&&(s=qs(e,"offset","batchNorm")),Ji(4===h.rank,function(){return"Error in batchNorm4D: x must be rank 4 but got rank "+h.rank+"."}),Ji(4===u.rank||1===u.rank,function(){return"Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank "+u.rank+"."}),Ji(4===a.rank||1===a.rank,function(){return"Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank "+a.rank+"."}),null!=o&&Ji(4===o.rank||1===o.rank,function(){return"Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank "+o.rank+"."}),null!=s&&Ji(4===s.rank||1===s.rank,function(){return"Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank "+s.rank+"."}),Fc(h,u,a,s,o,r)}function Fc(n,x,t,e,i,r){null==r&&(r=.001);var o,s,h,u=qs(n,"x","batchNorm"),a=qs(x,"mean","batchNorm"),g=qs(t,"variance","batchNorm");null!=i&&(o=qs(i,"scale","batchNorm")),null!=e&&(s=qs(e,"offset","batchNorm")),Ji(a.rank===g.rank,function(){return"Batch normalization gradient requires mean and variance to have equal ranks."}),Ji(null==s||a.rank===s.rank,function(){return"Batch normalization gradient requires mean and offset to have equal ranks."}),Ji(null==o||a.rank===o.rank,function(){return"Batch normalization gradient requires mean and scale to have equal ranks."}),h=0===u.rank||1===u.rank?u.as4D(1,1,1,u.size):2===u.rank?u.as4D(1,1,u.shape[0],u.shape[1]):3===u.rank?u.as4D(1,u.shape[0],u.shape[1],u.shape[2]):u;var l=[u,a,g,o];return ao.runKernelFunc(function(n,x){var t=n.batchNormalization(h,Pc(a),Pc(g),r,Pc(o),Pc(s));return x([u,a,g,o]),t},{x:u,mean:a,variance:g,scale:o,offset:s},function(n,x){var t=x,e=t[0],i=t[1],o=t[2],s=t[3],u=null==s?Us(1):s,a=wu(i.shape,h.shape),g=[];if(1===i.rank){for(var l=0;l<h.shape.length-1;++l)g.push(h.shape[l]);g.push(1)}var c=e.sub(i),d=n.mul(u),f=wc(o.add(Us(r))),p=f.mul(f).mul(f).mul(Us(-.5));return{x:function(){return 1===i.rank?n.mul(Gh(f.as4D(1,1,1,i.shape[0]),g)).mul(u).reshape(e.shape):n.mul(f).mul(u).reshape(e.shape)},mean:function(){var n=f.mul(Us(-1)).mul(d);return 1===i.rank&&(n=n.sum(a)),n.reshape(i.shape)},variance:function(){var n=p.mul(c).mul(d);return 1===i.rank&&(n=n.sum(a)),n.reshape(i.shape)},scale:function(){var x=c.mul(f),t=n.mul(x);return 1===i.rank&&(t=t.sum(a)),t.reshape(i.shape)},offset:function(){var x=n;return 1===i.rank&&(x=x.sum(a)),x.reshape(i.shape)}}},"BatchNormalization",{varianceEpsilon:r},l).reshape(u.shape)}function Pc(n){return null==n?null:0===n.rank?n.as1D():1===n.rank?n:2===n.rank?n.as4D(1,1,n.shape[0],n.shape[1]):3===n.rank?n.as4D(1,n.shape[0],n.shape[1],n.shape[2]):n}function Lc(){ms("tf.batchNormalization() is going away. Use tf.batchNorm() instead, and note the positional argument change of scale, offset, and varianceEpsilon")}var Hc=Ms({batchNormalization2d_:function(n,x,t,e,i,r){return void 0===e&&(e=.001),Lc(),Bc(n,x,t,r,i,e)}}),Uc=Ms({batchNormalization3d_:function(n,x,t,e,i,r){return void 0===e&&(e=.001),Lc(),Mc(n,x,t,r,i,e)}}),Vc=Ms({batchNormalization4d_:function(n,x,t,e,i,r){return void 0===e&&(e=.001),Lc(),Nc(n,x,t,r,i,e)}}),Wc=Ms({batchNormalization_:function(n,x,t,e,i,r){return void 0===e&&(e=.001),Lc(),Fc(n,x,t,r,i,e)}}),Qc=Ms({batchNorm_:Fc}),Gc=Ms({batchNorm2d_:Bc}),Kc=Ms({batchNorm3d_:Mc}),Yc=Ms({batchNorm4d_:Nc}),Jc=Ms({logicalAnd_:function(n,x){var t=qs(n,"a","logicalAnd","bool"),e=qs(x,"b","logicalAnd","bool");return ku(t.shape,e.shape),ao.runKernelFunc(function(n){return n.logicalAnd(t,e)},{a:t,b:e},null,"LogicalAnd")}}),Xc=Ms({logicalNot_:function(n){var x=qs(n,"x","logicalNot","bool");return ao.runKernelFunc(function(n){return n.logicalNot(x)},{$x:x})}}),Zc=Ms({logicalOr_:function(n,x){var t=qs(n,"a","logicalOr","bool"),e=qs(x,"b","logicalOr","bool");return ku(t.shape,e.shape),ao.runKernelFunc(function(n){return n.logicalOr(t,e)},{$a:t,$b:e})}}),$c=Ms({logicalXor_:function(n,x){var t=qs(n,"a","logicalXor","bool"),e=qs(x,"b","logicalXor","bool");return ku(t.shape,e.shape),Zc(n,x).logicalAnd(Jc(n,x).logicalNot())}}),nd=Ms({where_:function(n,x,t){var e=qs(x,"a","where"),i=qs(t,"b","where"),r=qs(n,"condition","where","bool");return Xi(e.shape,i.shape,"Error in where: "),1===r.rank?Ji(r.shape[0]===e.shape[0],function(){return"The first dimension of `a` must match the size of `condition`."}):Xi(r.shape,i.shape,"Error in where: "),ao.runKernelFunc(function(n,x){var t=n.select(r,e,i);return x([r]),t},{$condition:r,$a:e,$b:i},function(n,x){var t=x[0];return{$condition:function(){return eh(t).toFloat()},$a:function(){return n.mul(t.cast(n.dtype))},$b:function(){return n.mul(t.logicalNot().cast(n.dtype))}}})}}),xd=function(n){return Oi(this,void 0,void 0,function(){var x,t,e;return _i(this,function(i){switch(i.label){case 0:return[4,(x=qs(n,"condition","whereAsync","bool")).data()];case 1:return t=i.sent(),e=xa(x.shape,t),n!==x&&x.dispose(),[2,e]}})})},td=Ms({add_:function(n,x){var t,e=qs(n,"a","add"),i=qs(x,"b","add");t=io(e,i),e=t[0],i=t[1];var r=ku(e.shape,i.shape);return ao.runKernelFunc(function(n){return n.add(e,i)},{a:e,b:i},function(n){return{a:function(){var x=n,t=wu(e.shape,r);return t.length>0&&(x=x.sum(t)),x.reshape(e.shape)},b:function(){var x=n,t=wu(i.shape,r);return t.length>0&&(x=x.sum(t)),x.reshape(i.shape)}}},"Add")}}),ed=Ms({addN_:function(n){Ji(Array.isArray(n),function(){return"The argument passed to tf.addN() must be a list of tensors"}),Ji(n.length>=1,function(){return"Must pass at least one tensor to tf.addN(), but got "+n.length});var x=n.map(function(n,x){return qs(n,"tensors"+x,"addN")}),t=x[0];x.forEach(function(n){if(n.dtype!==t.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),x.forEach(function(n){if(!xr(n.shape,t.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});var e=x;return ao.runKernelFunc(function(n){return n.addN(x)},e,function(n){var t={};return x.forEach(function(x,e){t[e]=function(){return n.clone()}}),t},"AddN")}}),id=Ms({addStrict_:function(n,x){var t=qs(n,"a","addStrict"),e=qs(x,"b","addStrict");return Xi(t.shape,e.shape,"Error in addStrict: "),t.add(e)}}),rd=Ms({atan2_:function(n,x){var t,e=qs(n,"a","atan2"),i=qs(x,"b","atan2");t=io(e,i),e=t[0],i=t[1];var r=ku(e.shape,i.shape);return ao.runKernelFunc(function(n,x){var t=n.atan2(e,i);return x([e,i]),t},{$a:e,$b:i},function(n,x){var t=x[0],e=x[1];return{$a:function(){var x=td(t.square(),e.square()),i=n.mul(e.div(x)),o=wu(t.shape,r);return o.length>0&&(i=i.sum(o)),i.reshape(t.shape)},$b:function(){var x=td(t.square(),e.square()),i=zc(n.mul(t.div(x))),o=wu(e.shape,r);return o.length>0&&(i=i.sum(o)),i.reshape(e.shape)}}})}}),od=Ms({div_:function(n,x){var t,e=qs(n,"a","div"),i=qs(x,"b","div");if(t=io(e,i),e=t[0],i=t[1],"int32"===e.dtype&&"int32"===i.dtype)return ud(e,i);var r=ku(e.shape,i.shape);return ao.runKernelFunc(function(n,x){var t=n.realDivide(e,i);return x([e,i]),t},{a:e,b:i},function(n,x){var t=x[0],e=x[1];return{a:function(){var x=n.div(e.toFloat()),i=wu(t.shape,r);return i.length>0?x.sum(i).reshape(t.shape):x},b:function(){var x=n.mul(t.toFloat()),i=wu(e.shape,r);i.length>0&&(x=x.sum(i).reshape(e.shape));var o=e.square();return x.div(o.toFloat()).neg()}}},"Div")}}),sd=Ms({divNoNan_:function(n,x){var t,e=qs(n,"a","div"),i=qs(x,"b","div");e=(t=io(e,i))[0],i=t[1];var r=od(e,i),o=eh(r),s=i.equal(o);return nd(s,o,r)}}),hd=Ms({divStrict_:function(n,x){var t=qs(n,"a","div"),e=qs(x,"b","div");return Xi(t.shape,e.shape,"Error in divideStrict: "),t.div(e)}}),ud=Ms({floorDiv_:function(n,x){var t,e=qs(n,"a","floorDiv"),i=qs(x,"b","floorDiv");t=io(e,i),e=t[0],i=t[1];var r=ku(e.shape,i.shape);return ao.runKernelFunc(function(n,x){var t=n.floorDiv(e,i);return x([e,i]),t},{a:e,b:i},function(n,x){var t=x[0],e=x[1];return{a:function(){var x=n.div(e.toFloat()),i=wu(t.shape,r);return i.length>0?x.sum(i).reshape(t.shape):x},b:function(){var x=n.mul(t.toFloat()),i=wu(e.shape,r);i.length>0&&(x=x.sum(i).reshape(e.shape));var o=e.square();return x.div(o.toFloat()).neg()}}},"FloorDiv")}}),ad=Ms({maximum_:function(n,x){var t,e=qs(n,"a","maximum"),i=qs(x,"b","maximum");return t=io(e,i),e=t[0],i=t[1],"bool"===e.dtype&&(e=e.toInt(),i=i.toInt()),ku(e.shape,i.shape),ao.runKernelFunc(function(n,x){var t=n.maximum(e,i);return x([e,i]),t},{a:e,b:i},function(n,x){var t=x[0],e=x[1];return{a:function(){return n.mul(t.greaterEqual(e).toFloat())},b:function(){return n.mul(t.less(e).toFloat())}}},"Maximum")}}),gd=Ms({maximumStrict_:function(n,x){var t=qs(n,"a","maximumStrict"),e=qs(x,"b","maximumStrict");return Xi(t.shape,e.shape,"Error in maximumStrict: "),t.maximum(e)}}),ld=Ms({minimum_:function(n,x){var t,e=qs(n,"a","minimum"),i=qs(x,"b","minimum");return t=io(e,i),e=t[0],i=t[1],"bool"===e.dtype&&(e=e.toInt(),i=i.toInt()),ku(e.shape,i.shape),ao.runKernelFunc(function(n,x){var t=n.minimum(e,i);return x([e,i]),t},{a:e,b:i},function(n,x){var t=x[0],e=x[1];return{a:function(){return n.mul(t.lessEqual(e).toFloat())},b:function(){return n.mul(t.greater(e).toFloat())}}},"Minimum")}}),cd=Ms({minimumStrict_:function(n,x){var t=qs(n,"a","minimumStrict"),e=qs(x,"b","minimumStrict");return Xi(t.shape,e.shape,"Error in minimumStrict: "),t.minimum(e)}}),dd=Ms({mod_:function(n,x){var t,e=qs(n,"a","mod"),i=qs(x,"b","mod");t=io(e,i),e=t[0],i=t[1];var r=ku(e.shape,i.shape);return ao.runKernelFunc(function(n,x){var t=n.mod(e,i);return x([e,i]),t},{$a:e,$b:i},function(n,x){var t=x[0],e=x[1];return{$a:function(){var x=wu(t.shape,r);return x.length>0?n.sum(x).reshape(t.shape):n},$b:function(){var x=n.mul(t.div(e).floor().neg()),i=wu(e.shape,r);return i.length>0?x.sum(i).reshape(e.shape):x}}})}}),fd=Ms({modStrict_:function(n,x){var t=qs(n,"a","modStrict"),e=qs(x,"b","modStrict");return Xi(t.shape,e.shape,"Error in modStrict: "),t.mod(e)}}),pd=Ms({mul_:function(n,x){var t,e=qs(n,"a","mul"),i=qs(x,"b","mul");t=io(e,i),e=t[0],i=t[1];var r=ku(e.shape,i.shape);return ao.runKernelFunc(function(n,x){var t=n.multiply(e,i);return x([e,i]),t},{a:e,b:i},function(n,x){var t=x[0],e=x[1];return{a:function(){var x=n.mul(e.toFloat()),i=wu(t.shape,r);return i.length>0?x.sum(i).reshape(t.shape):x},b:function(){var x=n.mul(t.toFloat()),i=wu(e.shape,r);return i.length>0?x.sum(i).reshape(e.shape):x}}},"Mul")}}),yd=Ms({mulStrict_:function(n,x){var t=qs(n,"a","mul"),e=qs(x,"b","mul");return Xi(t.shape,e.shape,"Error in multiplyStrict: "),t.mul(e)}}),md=Ms({pow_:function(n,x){var t,e=qs(n,"base","pow"),i=qs(x,"exp","pow");t=io(e,i),e=t[0],i=t[1];var r=ku(e.shape,i.shape),o=[e,i];return ao.runKernelFunc(function(n,x){var t=n.pow(e,i);return x([e,i,t]),t},{a:e,b:i},function(n,x){var t=x[0],e=x[1],i=x[2];return{a:function(){var x=e.toFloat(),i=n.mul(x.mul(t.pow(x.sub(Us(1))))),o=wu(t.shape,r);return o.length>0&&(i=i.sum(o)),i.reshape(t.shape)},b:function(){var x=t.greater(0),o=t.log().where(x,eh(t)),s=n.mul(i.mul(o)),h=wu(e.shape,r);return h.length>0&&(s=s.sum(h)),s.reshape(e.shape)}}},"Pow",{},o,[!0])}}),bd=Ms({powStrict_:function(n,x){return Xi(n.shape,x.shape,"Error in powStrict: "),n.pow(x)}}),zd=Ms({squaredDifferenceStrict_:function(n,x){var t=qs(n,"a","squaredDifferenceStrict"),e=qs(x,"b","squaredDifferenceStrict");return Xi(t.shape,e.shape,"Error in squaredDifferenceStrict: "),t.squaredDifference(e)}}),vd=Ms({sub_:function(n,x){var t,e=qs(n,"a","sub"),i=qs(x,"b","sub");t=io(e,i),e=t[0],i=t[1];var r=ku(e.shape,i.shape);return ao.runKernelFunc(function(n){return n.subtract(e,i)},{a:e,b:i},function(n){return{a:function(){var x=n,t=wu(e.shape,r);return t.length>0&&(x=x.sum(t)),x.reshape(e.shape)},b:function(){var x=n,t=wu(i.shape,r);return t.length>0&&(x=x.sum(t)),x.neg().reshape(i.shape)}}},"Sub")}}),jd=Ms({subStrict_:function(n,x){var t=qs(n,"a","subStrict"),e=qs(x,"b","subStrict");return Xi(t.shape,e.shape,"Error in subStrict: "),t.sub(e)}}),wd=Ms({equal_:function(n,x){var t,e=qs(n,"a","equal"),i=qs(x,"b","equal");return t=io(e,i),e=t[0],i=t[1],ku(e.shape,i.shape),ao.runKernelFunc(function(n){return n.equal(e,i)},{$a:e,$b:i})}}),kd=Ms({equalStrict_:function(n,x){var t=qs(n,"a","equalStrict"),e=qs(x,"b","equalStrict");return Xi(t.shape,e.shape,"Error in equalStrict: "),t.equal(e)}}),qd=Ms({greater_:function(n,x){var t,e=qs(n,"a","greater"),i=qs(x,"b","greater");return t=io(e,i),e=t[0],i=t[1],ku(e.shape,i.shape),ao.runKernelFunc(function(n){return n.greater(e,i)},{a:e,b:i},null,"Greater")}}),Cd=Ms({greaterEqual_:function(n,x){var t,e=qs(n,"a","greaterEqual"),i=qs(x,"b","greaterEqual");return t=io(e,i),e=t[0],i=t[1],ku(e.shape,i.shape),ao.runKernelFunc(function(n,x){var t=n.greaterEqual(e,i);return x([e,i]),t},{a:e,b:i},function(n,x){var t=x[0],e=x[1];return{a:function(){return eh(t)},b:function(){return eh(e)}}},"GreaterEqual")}}),Ad=Ms({greaterEqualStrict_:function(n,x){var t=qs(n,"a","greaterEqualStrict"),e=qs(x,"b","greaterEqualStrict");return Xi(t.shape,e.shape,"Error in greaterEqualStrict: "),t.greaterEqual(e)}}),Ed=Ms({greaterStrict_:function(n,x){var t=qs(n,"a","greaterStrict"),e=qs(x,"b","greaterStrict");return Xi(t.shape,e.shape,"Error in greaterStrict: "),t.greater(e)}}),Sd=Ms({less_:function(n,x){var t,e=qs(n,"a","less"),i=qs(x,"b","less");return t=io(e,i),e=t[0],i=t[1],ku(e.shape,i.shape),ao.runKernelFunc(function(n){return n.less(e,i)},{a:e,b:i},null,"Less")}}),Id=Ms({lessEqual_:function(n,x){var t,e=qs(n,"a","lessEqual"),i=qs(x,"b","lessEqual");return t=io(e,i),e=t[0],i=t[1],ku(e.shape,i.shape),ao.runKernelFunc(function(n,x){var t=n.lessEqual(e,i);return x([e,i]),t},{a:e,b:i},null,"LessEqual")}}),Dd=Ms({lessEqualStrict_:function(n,x){var t=qs(n,"a","lessEqualStrict"),e=qs(x,"b","lessEqualStrict");return Xi(t.shape,e.shape,"Error in lessEqualStrict: "),t.lessEqual(e)}}),Od=Ms({lessStrict_:function(n,x){var t=qs(n,"a","lessStrict"),e=qs(x,"b","lessStrict");return Xi(t.shape,e.shape,"Error in lessStrict: "),t.less(e)}}),_d=Ms({notEqual_:function(n,x){var t,e=qs(n,"a","notEqual"),i=qs(x,"b","notEqual");return t=io(e,i),e=t[0],i=t[1],ku(e.shape,i.shape),ao.runKernelFunc(function(n){return n.notEqual(e,i)},{a:e,b:i},null,"NotEqual")}}),Td=Ms({notEqualStrict_:function(n,x){var t=qs(n,"a","notEqualStrict"),e=qs(x,"b","notEqualStrict");return Xi(t.shape,e.shape,"Error in notEqualStrict: "),t.notEqual(e)}});function Rd(n,x){for(var t=[],e=n;e<x;++e)t.push(e);return t}function Bd(n){for(var x=[],t=0;t<n.length;++t)for(var e=0;e<n[t].length;++e)x.push(n[t][e]);return x}var Md=Ms({gather_:function(n,x,t){void 0===t&&(t=0);var e=qs(n,"x","gather"),i=qs(x,"indices","gather","int32");t=hr(t,e.shape)[0];var r=function(n,x,t){for(var e=n.shape[t],i=[],r=1,o=1,s=0;s<t;s++)i.push(n.shape[s]),r*=n.shape[s];for(s=0;s<x.rank;s++)i.push(x.shape[s]);for(s=t+1;s<n.rank;s++)i.push(n.shape[s]),o*=n.shape[s];return{batchSize:r,sliceSize:o,dimSize:e,outputShape:i}}(e,i,t);return ao.runKernelFunc(function(n,x){var r=n.gather(e,i.flatten(),t);return x([i]),r},{x:e,indices:i},function(n,x){var i=x[0];return{x:function(){var x=e.shape,r=i.size,o=x.slice(0,t),s=o.length,h=x.slice(t,x.length).slice(1),u=h.length,a=Rd(0,s),g=Rd(s+1,s+1+u),l=Bd([o,[r],h]),c=n.reshape(l),d=i.reshape([r]),f=Bd([[s],a,g]),p=c.transpose(f),y=Nd(p,d,e.shape[t]),m=_s(f);return y.transpose(m)},indices:function(){return i}}},"Gather",{axis:t}).reshape(r.outputShape)}}),Nd=Ms({unsortedSegmentSum_:function(n,x,t){var e=qs(n,"x","unsortedSegmentSum"),i=qs(x,"segmentIds","unsortedSegmentSum","int32");return Ji(tr(t),function(){return"numSegments must be of dtype int"}),ao.runKernelFunc(function(n,x){var r=n.unsortedSegmentSum(e,i,t);return x([i]),r},{$x:e},function(n,x){var t=x[0];return{$x:function(){return function(n,x){for(var t=ad(x,eh(x)),e=Md(n,t),i=Cd(x,Us(0,"int32")),r=e.rank-i.rank,o=0;o<r;++o)i=Ih(i,o+1);i=Jc(i,Xs(e.shape,"bool"));var s=eh(e);return nd(i,e,s)}(n,t)}}})}}),Fd=function(n,x,t){return Oi(this,void 0,void 0,function(){var e,i,r,o,s,h,u,a,g,l,c,d,f;return _i(this,function(p){switch(p.label){case 0:for(e=qs(n,"tensor","boolMask"),i=qs(x,"mask","boolMask","bool"),r=null==t?0:t,o=i.rank,s=e.shape,Ji(o>0,function(){return"mask cannot be scalar"}),Xi(s.slice(r,r+o),i.shape,"mask's shape must match the first K dimensions of tensor's shape,"),h=1,u=r;u<r+o;u++)h*=s[u];return a=s.slice(0,r).concat([h],s.slice(r+o)),g=e.reshape(a),l=i.reshape([-1]),[4,xd(l)];case 1:return c=p.sent(),d=c.squeeze([1]),f=Md(g,d,r),n!==e&&e.dispose(),x!==i&&i.dispose(),d.dispose(),g.dispose(),l.dispose(),c.dispose(),[2,f]}})})};function Pd(n,x,t,e,i,r,o){void 0===r&&(r="NHWC"),Ji(n.length===x.rank,function(){return"Length of inShape ("+n.length+") and rank of dy ("+x.rank+") must match"});var s=n,h=x,u=!1;3===x.rank&&(u=!0,h=x.as4D(1,x.shape[0],x.shape[1],x.shape[2]),s=[1,n[0],n[1],n[2]]),Ji(4===s.length,function(){return"Error in conv2dDerInput: inShape must be length 4, but got length "+s.length+"."}),Ji(4===h.rank,function(){return"Error in conv2dDerInput: dy must be rank 4, but got rank "+h.rank}),Ji(4===t.rank,function(){return"Error in conv2dDerInput: filter must be rank 4, but got rank "+t.rank});var a="NHWC"===r?s[3]:s[1],g="NHWC"===r?h.shape[3]:h.shape[1];Ji(a===t.shape[2],function(){return"Error in conv2dDerInput: depth of input ("+a+") must match input depth for filter "+t.shape[2]+"."}),Ji(g===t.shape[3],function(){return"Error in conv2dDerInput: depth of output ("+g+") must match output depth for filter "+t.shape[3]+"."}),null!=o&&Ji(tr(i),function(){return"Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+i+"."});var l=Bu(r),c=Au(s,t.shape,e,1,i,o,!1,l),d=ao.runKernelFunc(function(n,x){var e=n.conv2dDerInput(h,t,c);return x([t,h]),e},{dy4D:h,filter:t},function(n,x){var t=x[0],s=x[1];return{dy4D:function(){return Vd(n,t,e,i,r,1,o)},filter:function(){return Qd(n,s,t.shape,e,i,r,o)}}});return u?d.as3D(d.shape[1],d.shape[2],d.shape[3]):d}function Ld(n){var x=function(n){return"number"==typeof n?[n,n,n]:2===n.length?[n[0],n[1],1]:n}(n),t=x[0],e=x[1],i=x[2];return 1===t&&1===e&&1===i}function Hd(n,x,t,e,i){Ji(n.length===x.rank,function(){return"Length of inShape ("+n.length+") and rank of dy ("+x.rank+") must match"});var r=n,o=x,s=!1;4===x.rank&&(s=!0,o=x.as5D(1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]),r=[1,n[0],n[1],n[2],n[3]]);var h=r[4],u=o.shape[4];Ji(5===r.length,function(){return"Error in conv3dDerInput: inShape must be length 5, but got length "+r.length+"."}),Ji(5===o.rank,function(){return"Error in conv3dDerInput: dy must be rank 5, but got rank "+o.rank}),Ji(5===t.rank,function(){return"Error in conv3dDerInput: filter must be rank 5, but got rank "+t.rank}),Ji(h===t.shape[3],function(){return"Error in conv3dDerInput: depth of input ("+h+") must match input depth for filter "+t.shape[3]+"."}),Ji(u===t.shape[4],function(){return"Error in conv3dDerInput: depth of output ("+u+") must match output depth for filter "+t.shape[4]+"."});var a=Eu(r,t.shape,e,1,i),g=ao.runKernelFunc(function(n){return n.conv3dDerInput(o,t,a)},{dy5D:o});return s?g.as4D(g.shape[1],g.shape[2],g.shape[3],g.shape[4]):g}var Ud=Ms({conv1d_:function(n,x,t,e,i,r,o){void 0===i&&(i="NWC"),void 0===r&&(r=1);var s=qs(n,"x","conv1d"),h=qs(x,"filter","conv1d"),u=s,a=!1;2===s.rank&&(a=!0,u=s.as3D(1,s.shape[0],s.shape[1])),Ji(3===u.rank,function(){return"Error in conv1d: input must be rank 3, but got rank "+u.rank+"."}),Ji(3===h.rank,function(){return"Error in conv1d: filter must be rank 3, but got rank "+h.rank+"."}),null!=o&&Ji(tr(e),function(){return"Error in conv1d: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+e+"."}),Ji(u.shape[2]===h.shape[1],function(){return"Error in conv1d: depth of input ("+u.shape[2]+") must match input depth for filter "+h.shape[1]+"."}),Ji(Ru(t,r),function(){return"Error in conv1D: Either stride or dilation must be 1. Got stride "+t+" and dilation '"+r+"'"}),Ji("NWC"===i,function(){return"Error in conv1d: got dataFormat of "+i+" but only NWC is currently supported."});var g=h.as4D(1,h.shape[0],h.shape[1],h.shape[2]),l=u.as4D(u.shape[0],1,u.shape[1],u.shape[2]),c=Vd(l,g,[1,t],e,"NHWC",[1,r],o);return a?c.as2D(c.shape[2],c.shape[3]):c.as3D(c.shape[0],c.shape[2],c.shape[3])}}),Vd=Ms({conv2d_:function(n,x,t,e,i,r,o){void 0===i&&(i="NHWC"),void 0===r&&(r=[1,1]);var s=qs(n,"x","conv2d"),h=qs(x,"filter","conv2d"),u=s,a=!1;3===s.rank&&(a=!0,u=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),Ji(4===u.rank,function(){return"Error in conv2d: input must be rank 4, but got rank "+u.rank+"."}),Ji(4===h.rank,function(){return"Error in conv2d: filter must be rank 4, but got rank "+h.rank+"."}),null!=o&&Ji(tr(e),function(){return"Error in conv2d: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+e+"."});var g="NHWC"===i?u.shape[3]:u.shape[1];Ji(g===h.shape[2],function(){return"Error in conv2d: depth of input ("+g+") must match input depth for filter "+h.shape[2]+"."}),Ji(Ru(t,r),function(){return"Error in conv2D: Either strides or dilations must be 1. Got strides "+t+" and dilations '"+r+"'"});var l=Bu(i),c=Au(u.shape,h.shape,t,r,e,o,!1,l),d=[h,u],f=ao.runKernelFunc(function(n,x){var t=n.conv2d(u,h,c);return x([h,u]),t},{x:u,filter:h},function(n,x){var o=x,s=o[0],h=o[1];return Ji(Tu(r),function(){return"Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+r+"'"}),{x:function(){return Gd(h.shape,n,s,t,e,i)},filter:function(){return Qd(h,n,s.shape,t,e,i)}}},"Conv2D",c,d);return a?f.as3D(f.shape[1],f.shape[2],f.shape[3]):f}}),Wd=Ms({conv3d_:function(n,x,t,e,i,r){void 0===i&&(i="NDHWC"),void 0===r&&(r=[1,1,1]);var o=qs(n,"x","conv3d"),s=qs(x,"filter","conv3d"),h=o,u=!1;4===o.rank&&(u=!0,h=o.as5D(1,o.shape[0],o.shape[1],o.shape[2],o.shape[3])),Ji(5===h.rank,function(){return"Error in conv3d: input must be rank 5, but got rank "+h.rank+"."}),Ji(5===s.rank,function(){return"Error in conv3d: filter must be rank 5, but got rank "+s.rank+"."}),Ji(h.shape[4]===s.shape[3],function(){return"Error in conv3d: depth of input ("+h.shape[4]+") must match input depth for filter "+s.shape[3]+"."}),Ji(function(n,x){return Ld(n)||Ld(x)}(t,r),function(){return"Error in conv3D: Either strides or dilations must be 1. Got strides "+t+" and dilations '"+r+"'"}),Ji("NDHWC"===i,function(){return"Error in conv3d: got dataFormat of "+i+" but only NDHWC is currently supported."});var a=Eu(h.shape,s.shape,t,r,e),g=ao.runKernelFunc(function(n,x){var t=n.conv3d(h,s,a);return x([h,s]),t},{x:h,$filter:s},function(n,x){Ji(Ld(r),function(){return"Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+r+"'"});var i=x[0],o=x[1];return{x:function(){return Hd(i.shape,n,o,t,e)},$filter:function(){return function(n,x,t,e,i){var r=n;4===n.rank&&(r=n.as5D(1,n.shape[0],n.shape[1],n.shape[2],n.shape[3]));var o=x;4===o.rank&&(o=x.as5D(1,x.shape[0],x.shape[1],x.shape[2],x.shape[3])),Ji(5===r.rank,function(){return"Error in conv3dDerFilter: input must be rank 5, but got shape "+r.shape+"."}),Ji(5===o.rank,function(){return"Error in conv3dDerFilter: dy must be rank 5, but got shape "+o.shape+"."}),Ji(5===t.length,function(){return"Error in conv3dDerFilter: filterShape must be length 5, but got "+t+"."}),Ji(r.shape[4]===t[3],function(){return"Error in conv3dDerFilter: depth of input "+r.shape[4]+") must match input depth in filter ("+t[3]+"."}),Ji(o.shape[4]===t[4],function(){return"Error in conv3dDerFilter: depth of dy ("+o.shape[4]+") must match output depth for filter ("+t[4]+")."});var s=Eu(r.shape,t,e,1,i);return ao.runKernelFunc(function(n){return n.conv3dDerFilter(r,o,s)},{x5D:r,dy5D:o})}(i,n,o.shape,t,e)}}});return u?g.as4D(g.shape[1],g.shape[2],g.shape[3],g.shape[4]):g}}),Qd=Ms({conv2dDerFilter_:function(n,x,t,e,i,r,o){void 0===r&&(r="NHWC");var s=n;3===n.rank&&(s=n.as4D(1,n.shape[0],n.shape[1],n.shape[2]));var h=x;3===h.rank&&(h=x.as4D(1,x.shape[0],x.shape[1],x.shape[2])),Ji(4===s.rank,function(){return"Error in conv2dDerFilter: input must be rank 4, but got shape "+s.shape+"."}),Ji(4===h.rank,function(){return"Error in conv2dDerFilter: dy must be rank 4, but got shape "+h.shape+"."}),Ji(4===t.length,function(){return"Error in conv2dDerFilter: filterShape must be length 4, but got "+t+"."});var u="NHWC"===r?s.shape[3]:s.shape[1],a="NHWC"===r?h.shape[3]:h.shape[1];Ji(u===t[2],function(){return"Error in conv2dDerFilter: depth of input "+u+") must match input depth in filter ("+t[2]+"."}),Ji(a===t[3],function(){return"Error in conv2dDerFilter: depth of dy ("+a+") must match output depth for filter ("+t[3]+")."}),null!=o&&Ji(tr(i),function(){return"Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+i+"."});var g=Bu(r),l=Au(s.shape,t,e,1,i,o,!1,g);return ao.runKernelFunc(function(n){return n.conv2dDerFilter(s,h,l)},{x4D:s,dy4D:h})}}),Gd=Ms({conv2dDerInput_:Pd}),Kd=Ms({depthwiseConv2d_:function(n,x,t,e,i,r,o){void 0===i&&(i="NHWC"),void 0===r&&(r=[1,1]);var s=qs(n,"x","depthwiseConv2d"),h=qs(x,"filter","depthwiseConv2d"),u=s,a=!1;3===s.rank&&(a=!0,u=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),Ji(4===u.rank,function(){return"Error in depthwiseConv2d: input must be rank 4, but got rank "+u.rank+"."}),Ji(4===h.rank,function(){return"Error in depthwiseConv2d: filter must be rank 4, but got rank "+h.rank+"."}),Ji(u.shape[3]===h.shape[2],function(){return"Error in depthwiseConv2d: number of input channels ("+u.shape[3]+") must match the inChannels dimension in filter "+h.shape[2]+"."}),null==r&&(r=[1,1]),Ji(Ru(t,r),function(){return"Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides "+t+" and dilations '"+r+"'"}),null!=o&&Ji(tr(e),function(){return"Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+e+"."});var g=Au(u.shape,h.shape,t,r,e,o,!0),l=[u,h],c=ao.runKernelFunc(function(n,x){var t=n.depthwiseConv2D(u,h,g);return x([u,h]),t},{x:u,filter:h},function(n,x){Ji(Tu(r),function(){return"Error in gradient of depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '"+r+"'"});var t=x[0],e=x[1];return{x:function(){return Yd(t.shape,n,e,g)},filter:function(){return Jd(t,n,e.shape,g)}}},"DepthwiseConv2dNative",g,l);return a?c.as3D(c.shape[1],c.shape[2],c.shape[3]):c}}),Yd=Ms({depthwiseConv2dDerInput_:function(n,x,t,e){var i=x,r=!1;3===x.rank&&(r=!0,i=x.as4D(1,x.shape[0],x.shape[1],x.shape[2]));var o=ao.runKernelFunc(function(n){return n.depthwiseConv2DDerInput(i,t,e)},{dy4D:i});return r?o.as3D(o.shape[1],o.shape[2],o.shape[3]):o}}),Jd=Ms({depthwiseConv2dDerFilter_:function(n,x,t,e){var i=n;3===n.rank&&(i=n.as4D(1,n.shape[0],n.shape[1],n.shape[2]));var r=x;return 3===r.rank&&(r=x.as4D(1,x.shape[0],x.shape[1],x.shape[2])),ao.runKernelFunc(function(n){return n.depthwiseConv2DDerFilter(i,r,e)},{x4D:i,dy4D:r})}}),Xd=Ms({separableConv2d_:function(n,x,t,e,i,r,o){void 0===r&&(r=[1,1]),void 0===o&&(o="NHWC");var s=qs(n,"x","separableConv2d"),h=qs(x,"depthwiseFilter","separableConv2d"),u=qs(t,"pointwiseFilter","separableConv2d"),a=s,g=!1;if(3===s.rank&&(g=!0,a=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),"NCHW"===o)throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");Ji(4===a.rank,function(){return"Error in separableConv2d: input must be rank 4, but got rank "+a.rank+"."}),Ji(4===h.rank,function(){return"Error in separableConv2d: depthwise filter must be rank 4, but got rank "+h.rank+"."}),Ji(4===u.rank,function(){return"Error in separableConv2d: pointwise filter must be rank 4, but got rank "+h.rank+"."}),Ji(1===u.shape[0],function(){return"Error in separableConv2d: the first dimension of pointwise filter must be 1, but got "+u.shape[0]+"."}),Ji(1===u.shape[1],function(){return"Error in separableConv2d: the second dimension of pointwise filter must be 1, but got "+u.shape[1]+"."});var l=h.shape[2],c=h.shape[3];Ji(u.shape[2]===l*c,function(){return"Error in separableConv2d: the third dimension of pointwise filter must be "+l*c+", but got "+u.shape[2]+"."});var d=Kd(a,h,e,i,o,r),f=Vd(d,u,1,"valid",o);return g?f.as3D(f.shape[1],f.shape[2],f.shape[3]):f}}),Zd=Ms({conv2dTranspose_:function(n,x,t,e,i,r){return Pd(t,qs(n,"x","conv2dTranspose"),qs(x,"filter","conv2dTranspose"),e,i,"NHWC",r)}}),$d=Ms({conv3dTranspose_:function(n,x,t,e,i){return Hd(t,qs(n,"x","conv3dTranspose"),qs(x,"filter","conv3dTranspose"),e,i)}}),nf=Ms({matMul_:function(n,x,t,e){var i;void 0===t&&(t=!1),void 0===e&&(e=!1);var r=qs(n,"a","matMul"),o=qs(x,"b","matMul");i=io(r,o),r=i[0],o=i[1];var s=t?r.shape[r.rank-2]:r.shape[r.rank-1],h=e?o.shape[o.rank-1]:o.shape[o.rank-2],u=t?r.shape[r.rank-1]:r.shape[r.rank-2],a=e?o.shape[o.rank-2]:o.shape[o.rank-1],g=r.shape.slice(0,-2),l=o.shape.slice(0,-2),c=nr(g),d=nr(l);Ji(r.rank>=2&&o.rank>=2&&r.rank===o.rank,function(){return"Error in matMul: inputs must have the same rank of at least 2, got ranks "+r.rank+" and "+o.rank+"."}),Ji(xr(g,l),function(){return"Error in matMul: outer dimensions ("+g+") and ("+l+") of Tensors with shapes "+r.shape+" and "+o.shape+" must match."}),Ji(s===h,function(){return"Error in matMul: inner shapes ("+s+") and ("+h+") of Tensors with shapes "+r.shape+" and "+o.shape+" and transposeA="+t+" and transposeB="+e+" must match."});var f=r.shape.slice(0,-2).concat([u,a]),p=t?r.as3D(c,s,u):r.as3D(c,u,s),y=e?o.as3D(d,a,h):o.as3D(d,h,a),m={transposeA:t,transposeB:e};return ao.runKernelFunc(function(n,x){var i=n.batchMatMul(p,y,t,e);return x([p,y]),i},{a:p,b:y},function(n,x){var i=x,r=i[0],o=i[1];return t||e?!t&&e?{a:function(){return n.matMul(o,!1,!1)},b:function(){return n.matMul(r,!0,!1)}}:t&&!e?{a:function(){return o.matMul(n,!1,!0)},b:function(){return r.matMul(n,!1,!1)}}:{a:function(){return o.matMul(n,!0,!0)},b:function(){return n.matMul(r,!0,!0)}}:{a:function(){return n.matMul(o,!1,!0)},b:function(){return r.matMul(n,!0,!1)}}},"BatchMatMul",m).reshape(f)}}),xf=Ms({dot_:function(n,x){var t=qs(n,"t1","dot"),e=qs(x,"t2","dot");Ji(!(1!==t.rank&&2!==t.rank||1!==e.rank&&2!==e.rank),function(){return"Error in dot: inputs must all be rank 1 or 2, but got ranks "+t.rank+" and "+e.rank+"."});var i=1===t.rank?t.size:t.shape[1],r=1===e.rank?e.size:e.shape[0];return Ji(i===r,function(){return"Error in dot: inner dimensions of inputs must match, but got "+i+" and "+r+"."}),1===t.rank&&1===e.rank?t.as2D(1,-1).matMul(e.as2D(-1,1)).asScalar():1===t.rank&&2===e.rank?t.as2D(1,-1).matMul(e.as2D(e.shape[0],e.shape[1])).as1D():2===t.rank&&1===e.rank?t.matMul(e.as2D(-1,1)).as1D():t.matMul(e.as2D(e.shape[0],e.shape[1]))}}),tf=Ms({outerProduct_:function(n,x){var t=qs(n,"v1","outerProduct"),e=qs(x,"v2","outerProduct");return Ji(1===t.rank&&1===e.rank,function(){return"Error in outerProduct: inputs must be rank 1, but got ranks "+t.rank+" and "+e.rank+"."}),t.as2D(-1,1).matMul(e.as2D(1,-1))}}),ef=Ms({reverse_:function(n,x){var t=qs(n,"x","reverse");if(0===t.rank)return t.clone();var e=hr(x,t.shape);return ao.runKernelFunc(function(n){return n.reverse(t,e)},{$x:t},function(n){return{$x:function(){return n.reverse(e)}}}).reshapeAs(t)}}),rf=Ms({reverse1d_:function(n){var x=qs(n,"x","reverse");return Ji(1===x.rank,function(){return"Error in reverse1D: x must be rank 1 but got rank "+x.rank+"."}),ef(x,0)}}),of=Ms({reverse2d_:function(n,x){var t=qs(n,"x","reverse");return Ji(2===t.rank,function(){return"Error in reverse2D: x must be rank 2 but got rank "+t.rank+"."}),ef(t,x)}}),sf=Ms({reverse3d_:function(n,x){var t=qs(n,"x","reverse");return Ji(3===t.rank,function(){return"Error in reverse3D: x must be rank 3 but got rank "+t.rank+"."}),ef(t,x)}}),hf=Ms({reverse4d_:function(n,x){var t=qs(n,"x","reverse");return Ji(4===t.rank,function(){return"Error in reverse4D: x must be rank 4 but got rank "+t.rank+"."}),ef(t,x)}});function uf(n,x,t,e,i,r){var o=qs(n,"x","maxPool"),s=o,h=!1;3===o.rank&&(h=!0,s=o.as4D(1,o.shape[0],o.shape[1],o.shape[2])),null==e&&(e=[1,1]),Ji(4===s.rank,function(){return"Error in maxPool: input must be rank 4 but got rank "+s.rank+"."}),Ji(Ru(t,e),function(){return"Error in maxPool: Either strides or dilations must be 1. Got strides "+t+" and dilations '"+e+"'"}),null!=r&&Ji(tr(i),function(){return"Error in maxPool: pad must be an integer when using, dimRoundingMode "+r+" but got pad "+i+"."});var u=qu(s.shape,x,t,e,i,r);if(1===u.filterWidth&&1===u.filterHeight&&xr(u.inShape,u.outShape))return o.clone();var a=[s],g=ao.runKernelFunc(function(n,x){var t=n.maxPool(s,u);return x([s,t]),t},{x:s},function(n,r){var o=r[0],s=r[1];return{x:function(){return function(n,x,t,e,i,r,o,s){var h=qs(n,"dy","maxPoolBackprop"),u=qs(x,"input","maxPoolBackprop"),a=qs(t,"output","maxPoolBackprop");Ji(u.rank===h.rank,function(){return"Rank of input ("+u.rank+") does not match rank of dy ("+h.rank+")"}),null==r&&(r=[1,1]),Ji(Ru(i,r),function(){return"Error in maxPoolBackProp: Either strides or dilations must be 1. Got strides "+i+" and dilations '"+r+"'"}),Ji(4===h.rank,function(){return"Error in maxPoolBackprop: dy must be rank 4 but got rank "+h.rank+"."}),Ji(4===u.rank,function(){return"Error in maxPoolBackprop: input must be rank 4 but got rank "+u.rank+"."}),null!=s&&Ji(tr(o),function(){return"Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode "+s+" but got pad "+o+"."});var g=qu(u.shape,e,i,r,o,s);return ao.runKernelFunc(function(n){return n.maxPoolBackprop(h,u,a,g)},{$dy:h,$input:u})}(n,o,s,x,t,e,i)}}},"MaxPool",u,a);return h?g.as3D(g.shape[1],g.shape[2],g.shape[3]):g}function af(n,x,t,e,i,r){var o=qs(n,"x","avgPool","float32");null==e&&(e=[1,1]),Ji(Ru(t,e),function(){return"Error in avgPool: Either strides or dilations must be 1. Got strides "+t+" and dilations '"+e+"'"});var s=o,h=!1;3===o.rank&&(h=!0,s=o.as4D(1,o.shape[0],o.shape[1],o.shape[2])),Ji(4===s.rank,function(){return"Error in avgPool: x must be rank 4 but got rank "+s.rank+"."}),null!=r&&Ji(tr(i),function(){return"Error in avgPool: pad must be an integer when using, dimRoundingMode "+r+" but got pad "+i+"."});var u=qu(s.shape,x,t,e,i,r);if(1===u.filterWidth&&1===u.filterHeight&&xr(u.inShape,u.outShape))return o.clone();var a=ao.runKernelFunc(function(n){return n.avgPool(s,u)},{x:s},function(n){return{x:function(){return function(n,x,t,e,i,r){var o=qs(n,"dy","avgPoolBackprop"),s=qs(x,"input","avgPoolBackprop");Ji(s.rank===o.rank,function(){return"Rank of input ("+s.rank+") does not match rank of dy ("+o.rank+")"}),null==i&&(i=[1,1]),Ji(Ru(e,i),function(){return"Error in avgPoolBackprop: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+i+"'"});var h=s,u=o,a=!1;3===s.rank&&(a=!0,h=s.as4D(1,s.shape[0],s.shape[1],s.shape[2]),u=o.as4D(1,o.shape[0],o.shape[1],o.shape[2])),Ji(4===u.rank,function(){return"Error in avgPoolBackprop: dy must be rank 4 but got rank "+u.rank+"."}),Ji(4===h.rank,function(){return"Error in avgPoolBackprop: input must be rank 4 but got rank "+h.rank+"."});var g=qu(h.shape,t,e,i,r),l=ao.runKernelFunc(function(n){return n.avgPoolBackprop(u,h,g)},{dy4D:u,input4D:h});return a?l.as3D(l.shape[1],l.shape[2],l.shape[3]):l}(n,s,x,t,e,i)}}},"AvgPool",u);return a=a.cast(o.dtype),h?a.as3D(a.shape[1],a.shape[2],a.shape[3]):a}var gf=Ms({maxPool_:function(n,x,t,e,i){return uf(n,x,t,1,e,i)}}),lf=Ms({avgPool_:function(n,x,t,e,i){return af(n,x,t,1,e,i)}}),cf=Ms({pool_:function(n,x,t,e,i,r){null==i&&(i=[1,1]),null==r&&(r=1),0===e&&(e="valid");var o=qs(n,"x","maxPool"),s=o,h=!1;3===o.rank&&(h=!0,s=o.as4D(1,o.shape[0],o.shape[1],o.shape[2])),Ji(Ru(r,i),function(){return"Error in pool: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+i+"'"});var u,a=qu(s.shape,x,r,i,e),g=[a.dilationHeight,a.dilationWidth];u="same"===e?function(n,x){var t=n.map(function(n,t){return n+(n-1)*(x[t]-1)}).map(function(n){return n-1}),e=t.map(function(n){return Math.floor(n/2)}),i=t.map(function(n,x){return n-e[x]});return t.map(function(n,x){return[e[x],i[x]]})}([a.filterHeight,a.filterWidth],g):[[0,0],[0,0]];var l=1===g[0]&&1===g[1],c=function(n,x,t){var e=t.map(function(n){return n[0]}),i=t.map(function(n){return n[1]}),r=n.concat(e,i),o=x.map(function(n,x){return(n-r[x]%n)%n}),s=i.map(function(n,x){return n+o[x]}),h=x.map(function(n,x){return[e[x],s[x]]}),u=x.map(function(n,x){return[0,o[x]]});return[h,u]}([a.inHeight,a.inWidth],g,u),d=c[0],f=c[1],p=l?e:"valid",y=l?s:Vh(s,g,d),m=("avg"===t?function(){return af(y,x,r,1,p)}:function(){return uf(y,x,r,1,p)})(),b=l?m:kh(m,g,f);return h?b.as3D(b.shape[1],b.shape[2],b.shape[3]):b}}),df=Ms({maxPool3d_:function(n,x,t,e,i,r,o){void 0===r&&(r="NDHWC");var s=qs(n,"x","maxPool3d"),h=s,u=!1;4===s.rank&&(u=!0,h=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3])),null==o&&(o=[1,1,1]),Ji(5===h.rank,function(){return"Error in maxPool3d: x must be rank 5 but got rank "+h.rank+"."}),Ji("NDHWC"===r,function(){return"Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of "+r}),Ji(Ru(t,o),function(){return"Error in maxPool3d: Either strides or dilations must be 1. Got strides "+t+" and dilations '"+o+"'"}),null!=i&&Ji(tr(e),function(){return"Error in maxPool3d: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+e+"."});var a=Cu(h.shape,x,t,o,e,i,r),g=ao.runKernelFunc(function(n,x){var t=n.maxPool3d(h,a);return x([h,t]),t},{x:h},function(n,r){var s=r[0],h=r[1];return{x:function(){return function(n,x,t,e,i,r,o,s){var h=qs(n,"dy","maxPool3dBackprop"),u=qs(x,"input","maxPool3dBackprop"),a=qs(t,"output","maxPool3dBackprop"),g=h,l=u,c=a,d=!1;4===u.rank&&(d=!0,g=h.as5D(1,h.shape[0],h.shape[1],h.shape[2],h.shape[3]),l=u.as5D(1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]),c=a.as5D(1,a.shape[0],a.shape[1],a.shape[2],a.shape[3])),Ji(5===g.rank,function(){return"Error in maxPool3dBackprop: dy must be rank 5 but got rank "+g.rank+"."}),Ji(5===l.rank,function(){return"Error in maxPool3dBackprop: input must be rank 5 but got rank "+l.rank+"."}),Ji(5===c.rank,function(){return"Error in maxPool3dBackprop: output must be rank 5 but got rank "+c.rank+"."}),null==r&&(r=[1,1,1]),Ji(Ru(i,r),function(){return"Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides "+i+" and dilations '"+r+"'"}),null!=s&&Ji(tr(o),function(){return"Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode "+s+" but got pad "+o+"."});var f=Cu(l.shape,e,i,r,o,s),p=ao.runKernelFunc(function(n){return n.maxPool3dBackprop(g,l,c,f)},{dy5D:g,input5D:l});return d?p.as4D(p.shape[1],p.shape[2],p.shape[3],p.shape[4]):p}(n,s,h,x,t,o,e,i)}}});return u?g.as4D(g.shape[1],g.shape[2],g.shape[3],g.shape[4]):g}}),ff=Ms({avgPool3d_:function(n,x,t,e,i,r,o){void 0===r&&(r="NDHWC");var s=qs(n,"x","avgPool3d","float32"),h=s,u=!1;4===s.rank&&(u=!0,h=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3])),null==o&&(o=[1,1,1]),Ji(5===h.rank,function(){return"Error in avgPool3d: x must be rank 5 but got rank "+h.rank+"."}),Ji("NDHWC"===r,function(){return"Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of "+r}),Ji(Ru(t,o),function(){return"Error in avgPool3d: Either strides or dilations must be 1. Got strides "+t+" and dilations '"+o+"'"}),null!=i&&Ji(tr(e),function(){return"Error in avgPool3d: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+e+"."});var a=Cu(h.shape,x,t,o,e,i,r),g=ao.runKernelFunc(function(n){return n.avgPool3d(h,a)},{x:h},function(n){return{x:function(){return function(n,x,t,e,i,r,o){var s=qs(n,"dy","avgPool3dBackprop"),h=qs(x,"input","avgPool3dBackprop"),u=s,a=h,g=!1;4===h.rank&&(g=!0,u=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3]),a=h.as5D(1,h.shape[0],h.shape[1],h.shape[2],h.shape[3])),Ji(5===u.rank,function(){return"Error in avgPool3dBackprop: dy must be rank 5 but got rank "+u.rank+"."}),Ji(5===a.rank,function(){return"Error in avgPool3dBackprop: input must be rank 5 but got rank "+a.rank+"."}),null==i&&(i=[1,1,1]),Ji(Ru(e,i),function(){return"Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+i+"'"}),null!=o&&Ji(tr(r),function(){return"Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+r+"."});var l=Cu(a.shape,t,e,i,r,o),c=ao.runKernelFunc(function(n){return n.avgPool3dBackprop(u,a,l)},{dy5D:u,input5D:a});return g?c.as4D(c.shape[1],c.shape[2],c.shape[3],c.shape[4]):c}(n,h,x,t,o,e,i)}}});return g=g.cast(h.dtype),u?g.as4D(g.shape[1],g.shape[2],g.shape[3],g.shape[4]):g}}),pf=Ms({slice_:function(n,x,t){var e,i,r=qs(n,"x","slice");if(0===r.rank)throw new Error("Slicing scalar is not possible");(e="number"==typeof x?[x].concat(new Array(r.rank-1).fill(0)):x.length<r.rank?x.concat(new Array(r.rank-x.length).fill(0)):x.slice()).forEach(function(n){Ji(-1!==n,function(){return"slice() does not support negative begin indexing."})}),i=(i=null==t?new Array(r.rank).fill(-1):"number"==typeof t?[t].concat(new Array(r.rank-1).fill(-1)):t.length<r.rank?t.concat(new Array(r.rank-t.length).fill(-1)):t).map(function(n,x){return n>=0?n:(Ji(-1===n,function(){return"Negative size values should be exactly -1 but got "+n+" for the slice() size at index "+x+"."}),r.shape[x]-e[x])}),hu(r,e,i);var o=r.shape,s={begin:e,size:i};return ao.runKernelFunc(function(n){return n.slice(r,e,i)},{x:r},function(n){for(var x=[],t=0;t<n.rank;t++)x.push([e[t],o[t]-e[t]-i[t]]);return{x:function(){return n.pad(x)}}},"Slice",s)}}),yf=Ms({slice1d_:function(n,x,t){var e=qs(n,"x","slice1d");return Ji(1===e.rank,function(){return"slice1d expects a rank-1 tensor, but got a rank-"+e.rank+" tensor"}),pf(e,[x],[t])}}),mf=Ms({slice2d_:function(n,x,t){var e=qs(n,"x","slice2d");return Ji(2===e.rank,function(){return"slice2d expects a rank-2 tensor, but got a rank-"+e.rank+" tensor"}),pf(e,x,t)}}),bf=Ms({slice3d_:function(n,x,t){var e=qs(n,"x","slice3d");return Ji(3===e.rank,function(){return"slice3d expects a rank-3 tensor, but got a rank-"+e.rank+" tensor"}),pf(e,x,t)}}),zf=Ms({slice4d_:function(n,x,t){var e=qs(n,"x","slice4d");return Ji(4===e.rank,function(){return"slice4d expects a rank-4 tensor, but got a rank-"+e.rank+" tensor"}),pf(e,x,t)}});function vf(n,x,t,e,i){return x.rank<t.rank&&(x=x.reshape(Is(x.shape,e))),n.rank<t.rank&&(n=n.reshape(Is(n.shape,e))),{x:function(){var e=n.mul(t.equal(x).cast(n.dtype));return null==i?e:e.transpose(i)}}}var jf=Ms({all_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=qs(n,"x","all","bool"),i=hr(x,e.shape),r=i,o=Os(r,e.rank);null!=o&&(e=e.transpose(o),r=Ts(r.length,e.rank));var s=ao.runKernelFunc(function(n){return n.all(e,r)},{$x:e});if(t){var h=Is(s.shape,i);return s.reshape(h)}return s}}),wf=Ms({any_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=qs(n,"x","any","bool"),i=hr(x,e.shape),r=i,o=Os(r,e.rank);null!=o&&(e=e.transpose(o),r=Ts(r.length,e.rank));var s=ao.runKernelFunc(function(n){return n.any(e,r)},{$x:e});if(t){var h=Is(s.shape,i);return s.reshape(h)}return s}}),kf=Ms({argMax_:function(n,x){void 0===x&&(x=0);var t=qs(n,"x","argMax");null==x&&(x=0);var e=hr(x,t.shape),i=Os(e,t.rank);null!=i&&(t=t.transpose(i),e=Ts(e.length,t.rank));var r={axis:e[0]},o=[t];return ao.runKernelFunc(function(n,x){var i=n.argMax(t,e[0]);return x([t]),i},{x:t},function(n,x){var t=x[0];return{x:function(){return eh(t)}}},"ArgMax",r,o)}}),qf=Ms({argMin_:function(n,x){void 0===x&&(x=0);var t=qs(n,"x","argMin");null==x&&(x=0);var e=hr(x,t.shape),i=Os(e,t.rank);return null!=i&&(t=t.transpose(i),e=Ts(e.length,t.rank)),ao.runKernelFunc(function(n,x){var i=n.argMin(t,e[0]);return x([t]),i},{$x:t},function(n,x){var t=x[0];return{$x:function(){return eh(t)}}})}}),Cf=Ms({logSumExp_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=qs(n,"x","logSumExp"),i=hr(x,e.shape),r=e.max(i,!0),o=e.sub(r).exp().sum(i).log(),s=r.reshape(o.shape).add(o);if(t){var h=Is(s.shape,i);return s.reshape(h)}return s}}),Af=Ms({max_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=qs(n,"x","max"),i=e,r=hr(x,e.shape),o=r,s=Os(o,e.rank);null!=s&&(e=e.transpose(s),o=Ts(o.length,e.rank));var h=[e],u=ao.runKernelFunc(function(n,x){var t=n.max(e,o);return x([i,t]),t},{x:e},function(n,x){return vf(n,x[1],x[0],r,s)},"Max",{axes:o},h,[!0]);if(t){var a=Is(u.shape,r);u=u.reshape(a)}return u}}),Ef=Ms({mean_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=qs(n,"x","mean"),i=hr(x,e.shape),r=nr(Ss(e.shape,i)[1]);return pu(function(n){var e=Us(r);return{value:(e.dtype===n.dtype?n:n.cast(e.dtype)).div(e).sum(x,t),gradFunc:function(x){var t=n.shape.slice();return i.forEach(function(n){t[n]=1}),x.reshape(t).mul(Xs(n.shape,"float32")).div(r)}}})(e)}}),Sf=Ms({min_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=qs(n,"x","min"),i=e,r=hr(x,e.shape),o=r,s=Os(o,e.rank);null!=s&&(e=e.transpose(s),o=Ts(o.length,e.rank));var h=[e],u=ao.runKernelFunc(function(n,x){var t=n.min(e,o);return x([i,t]),t},{x:e},function(n,x){return vf(n,x[1],x[0],r,s)},"Min",{axes:o},h,[!0]);if(t){var a=Is(u.shape,r);u=u.reshape(a)}return u}}),If=Ms({moments_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=hr(x,(n=qs(n,"x","moments")).shape),i=n.mean(e,t),r=i.shape;t||(r=Is(i.shape,e));var o=n.toFloat().sub(i.reshape(r)).square();return{mean:i,variance:o.mean(e,t)}}}),Df=Ms({sum_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=qs(n,"x","sum");"bool"===e.dtype&&(e=e.toInt());var i=hr(x,e.shape);return pu(function(n){var x=Os(i,n.rank),e=i,r=n;null!=x&&(r=n.transpose(x),e=Ts(e.length,n.rank));var o=function(x){var t=n.shape.slice();return i.forEach(function(n){t[n]=1}),x.reshape(t).mul(Xs(n.shape,"float32"))},s={axes:e},h=ao.runKernelFunc(function(n){return n.sum(r,e)},{x:r},function(n){return{x:function(){return o(n)}}},"Sum",s);if(t){var u=Is(h.shape,i);h=h.reshape(u)}return{value:h,gradFunc:o}})(e)}}),Of=Ms({prod_:function(n,x,t){void 0===x&&(x=null),void 0===t&&(t=!1);var e=qs(n,"x","prod");"bool"===e.dtype&&(e=e.toInt());var i=hr(x,e.shape),r=Os(i,e.rank),o=i,s=e;null!=r&&(s=e.transpose(r),o=Ts(o.length,e.rank));var h=ao.runKernelFunc(function(n){return n.prod(s,o)},{permutedX:s});if(t){var u=Is(h.shape,i);h=h.reshape(u)}return h}}),_f=Ms({elu_:function(n){var x=qs(n,"x","elu");return ao.runKernelFunc(function(n,t){var e=n.elu(x);return t([e]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){return ao.runKernelFunc(function(x){return x.eluDer(n,t)},{dy:n,y:t})}}})}}),Tf=Ms({leakyRelu_:function(n,x){void 0===x&&(x=.2);var t=qs(n,"x","leakyRelu");return ad(Us(x).mul(t),t)}}),Rf=Ms({prelu_:function(n,x){var t=qs(n,"x","prelu"),e=qs(x,"alpha","prelu");return ao.runKernelFunc(function(n,x){var i=n.prelu(t,e);return x([t,e]),i},{x:t,alpha:e},function(n,x){var t=x[0],e=x[1],i=t.greater(0);return{x:function(){return nd(i,n,n.mul(e))},alpha:function(){var x=nd(i,eh(n),n.mul(t)),r=wu(e.shape,n.shape);return r.length>0&&(x=x.sum(r)),x.reshape(e.shape)}}},"Prelu")}}),Bf=Ms({relu_:function(n){var x=qs(n,"x","relu");return"bool"===x.dtype?x.toInt():ao.runKernelFunc(function(n,t){var e=n.relu(x);return t([x]),e},{x:x},function(n,x){var t=x[0];return{x:function(){return n.mulStrict(t.step().toFloat())}}},"Relu")}}),Mf=Ms({relu6_:function(n){var x=qs(n,"x","relu6");return"bool"===x.dtype?x.toInt():ao.runKernelFunc(function(n,t){var e=n.relu6(x);return t([x]),e},{x:x},function(n,x){var t=x[0],e=t.lessEqual(6).mul(t.step());return{x:function(){return n.mulStrict(e.toFloat())}}},"Relu6")}}),Nf=Ms({selu_:function(n){var x=qs(n,"x","selu");return ao.runKernelFunc(function(n,t){var e=n.selu(x);return t([x]),e},{$x:x},function(n,x){var t=x[0];return{$x:function(){var x=t.greater(Us(0)),e=Us(bl),i=Us(zl),r=n.mul(i),o=n.mul(e).mul(t.toFloat().exp());return nd(x,r,o)}}})}}),Ff=Ms({transpose_:function(n,x){var t=qs(n,"x","transpose");if(null==x&&(x=t.shape.map(function(n,x){return x}).reverse()),Ji(t.rank===x.length,function(){return"Error in transpose: rank of input "+t.rank+" must match length of perm "+x+"."}),x.forEach(function(n){Ji(n>=0&&n<t.rank,function(){return"All entries in 'perm' must be between 0 and "+(t.rank-1)+" but got "+x})}),t.rank<=1)return t.clone();var e={perm:x};return ao.runKernelFunc(function(n){return n.transpose(t,x)},{x:t},function(n){var t=_s(x);return{x:function(){return n.transpose(t)}}},"Transpose",e)}}),Pf=Ms({localResponseNormalization_:function(n,x,t,e,i){void 0===x&&(x=5),void 0===t&&(t=1),void 0===e&&(e=1),void 0===i&&(i=.5);var r=qs(n,"x","localResponseNormalization");Ji(4===r.rank||3===r.rank,function(){return"Error in localResponseNormalization: x must be rank 3 or 4 but got\n rank "+r.rank+"."}),Ji(tr(x),function(){return"Error in localResponseNormalization: depthRadius must be an integer but got depthRadius "+x+"."});var o=r,s=!1;3===r.rank&&(s=!0,o=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var h=ao.runKernelFunc(function(n,r){var s=n.localResponseNormalization4D(o,x,t,e,i);return r([o,s]),s},{x4D:o},function(n,r){var o=r[0],s=r[1];return{x4D:function(){return ao.runKernelFunc(function(r){return r.LRNGrad(n,o,s,x,t,e,i)},{})}}});return s?h.as3D(h.shape[1],h.shape[2],h.shape[3]):h}}),Lf=Ms({norm_:function(n,x,t,e){void 0===x&&(x="euclidean"),void 0===t&&(t=null),void 0===e&&(e=!1);var i=function n(x,t,e){if(void 0===e&&(e=null),0===x.rank)return x.abs();if(1!==x.rank&&null===e)return n(x.reshape([-1]),t,e);if(1===x.rank||"number"==typeof e||Array.isArray(e)&&1===e.length){if(1===t)return x.abs().sum(e);if(t===1/0)return x.abs().max(e);if(t===-1/0)return x.abs().min(e);if("euclidean"===t||2===t)return x.abs().pow(Us(2,"int32")).sum(e).sqrt();throw new Error("Error in norm: invalid ord value: "+t)}if(Array.isArray(e)&&2===e.length){if(1===t)return x.abs().sum(e[0]).max(e[1]-1);if(t===1/0)return x.abs().sum(e[1]).max(e[0]);if(t===-1/0)return x.abs().sum(e[1]).min(e[0]);if("fro"===t||"euclidean"===t)return x.square().sum(e).sqrt();throw new Error("Error in norm: invalid ord value: "+t)}throw new Error("Error in norm: invalid axis: "+e)}(n=qs(n,"x","norm"),x,t),r=i.shape;if(e){var o=hr(t,n.shape);r=Is(i.shape,o)}return i.reshape(r)}}),Hf=Ms({basicLSTMCell_:function(n,x,t,e,i,r){var o=qs(n,"forgetBias","basicLSTMCell"),s=qs(x,"lstmKernel","basicLSTMCell"),h=qs(t,"lstmBias","basicLSTMCell"),u=qs(e,"data","basicLSTMCell"),a=qs(i,"c","basicLSTMCell"),g=qs(r,"h","basicLSTMCell"),l=u.concat(g,1).matMul(s).add(h),c=l.shape[0],d=l.shape[1]/4,f=[c,d],p=l.slice([0,0],f),y=l.slice([0,d],f),m=l.slice([0,2*d],f),b=l.slice([0,3*d],f),z=p.sigmoid().mulStrict(y.tanh()).addStrict(a.mulStrict(o.add(m).sigmoid())),v=z.tanh().mulStrict(b.sigmoid());return[z,v]}}),Uf=Ms({multiRNNCell_:function(n,x,t,e){for(var i=qs(x,"data","multiRNNCell"),r=Cs(t,"c","multiRNNCell"),o=Cs(e,"h","multiRNNCell"),s=i,h=[],u=0;u<n.length;u++){var a=n[u](s,r[u],o[u]);h.push(a[0]),h.push(a[1]),s=a[1]}var g=[],l=[];for(u=0;u<h.length;u+=2)g.push(h[u]),l.push(h[u+1]);return[g,l]}}),Vf=Ms({movingAverage_:function(n,x,t,e,i){void 0===i&&(i=!0);var r=qs(n,"v","movingAverage"),o=qs(x,"x","movingAverage"),s=qs(t,"decay","movingAverage");ro(r,o),Ji(xr(r.shape,o.shape),function(){return"Shape mismatch in v and x"});var h=Us(1),u=h.sub(s),a=o.sub(r).mul(u);if(i){Ji(null!=e,function(){return"When using zeroDebias: true, step is required."});var g=qs(e,"step","movingAverage");a=a.div(h.sub(md(s,g)))}return r.add(a)}}),Wf=Ms({stridedSlice_:function(n,x,t,e,i,r,o,s,h){if(void 0===i&&(i=0),void 0===r&&(r=0),void 0===o&&(o=0),void 0===s&&(s=0),void 0===h&&(h=0),null==e&&(e=new Array(x.length)),0!==o)throw new Error("ellipsis mask is not yet supported");var u=qs(n,"x","stridedSlice"),a=uu(s),g=u.shape.slice();a.forEach(function(n){x[n]=0,t[n]=1,g.splice(n,0,1)}),u=u.reshape(g);for(var l=0;l<u.rank;l++)x[l]=gu(i,x,e,u.shape,l),t[l]=lu(r,t,e,u.shape,l),e[l]=e[l]||1;var c=uu(h);c.forEach(function(n){t[n]=x[n]+1,e[n]=1});var d=au(x,t,e),f=d.filter(function(n,x){return-1===c.indexOf(x)});return e.every(function(n){return 1===n})?pf(u,x,d).reshape(f):ao.runKernelFunc(function(n){return n.stridedSlice(u,x,t,e)},{$x:u}).reshape(f)}}),Qf=Ms({topk_:function(n,x,t){void 0===x&&(x=1),void 0===t&&(t=!0);var e=qs(n,"x","topk");if(0===e.rank)throw new Error("topk() expects the input to be of rank 1 or higher");var i=e.shape[e.shape.length-1];if(x>i)throw new Error("'k' passed to topk() must be <= the last dimension ("+i+") but got "+x);var r=ao.runKernelFunc(function(n){return n.topk(e,x,t)},{$x:e});return{values:r[0],indices:r[1]}}}),Gf=Ms({scatterND_:function(n,x,t){var e=qs(n,"indices","scatterND","int32"),i=qs(x,"updates","scatterND");return ou(i,e,t),ao.runKernelFunc(function(n){return n.scatterND(e,i,t)},{indices:e,updates:i},null,"ScatterNd",{shape:t})}}),Kf=Ms({fft_:function(n){Ji("complex64"===n.dtype,function(){return"The dtype for tf.spectral.fft() must be complex64 but got "+n.dtype+"."});var x=n.shape[n.shape.length-1],t=n.size/x,e=n.as2D(t,x);return ao.runKernelFunc(function(n){return n.fft(e)},{input:n}).reshape(n.shape)}}),Yf=Ms({ifft_:function(n){Ji("complex64"===n.dtype,function(){return"The dtype for tf.spectral.ifft() must be complex64 but got "+n.dtype+"."});var x=n.shape[n.shape.length-1],t=n.size/x,e=n.as2D(t,x);return ao.runKernelFunc(function(n){return n.ifft(e)},{input:n}).reshape(n.shape)}}),Jf=Ms({rfft_:function(n,x){Ji("float32"===n.dtype,function(){return"The dtype for rfft() must be real value but got "+n.dtype});var t,e=n.shape[n.shape.length-1],i=n.size/e;if(null!=x&&x<e){var r=n.shape.map(function(n){return 0}),o=n.shape.map(function(n){return n});o[n.shape.length-1]=x,t=n.slice(r,o),e=x}else if(null!=x&&x>e){var s=n.shape.map(function(n){return n});s[n.shape.length-1]=x-e,t=n.concat(Zs(s),n.shape.length-1),e=x}else t=n;var h=t.zerosLike(),u=Ns(t,h).as2D(i,e),a=Kf(u),g=Math.floor(e/2)+1,l=Fs(a),c=Ps(a),d=l.split([g,e-g],l.shape.length-1),f=c.split([g,e-g],c.shape.length-1),p=t.shape.slice();return p[t.shape.length-1]=g,Ns(d[0],f[0]).reshape(p)}}),Xf=Ms({irfft_:function(n){var x=n.shape[n.shape.length-1],t=n.size/x;if(x<=2){var e=n.as2D(t,x),i=Yf(e);return Fs(i)}var r=[t,2*(x-1)],o=Fs(n).as2D(t,x),s=Ps(n).as2D(t,x),h=o.slice([0,1],[t,x-2]).reverse(1),u=s.slice([0,1],[t,x-2]).reverse(1).mul(Us(-1)),a=o.concat(h,1),g=s.concat(u,1);return e=Ns(a,g).as2D(r[0],r[1]),i=Yf(e),Fs(i)}}),Zf=Object.freeze({fft:Kf,ifft:Yf,rfft:Jf,irfft:Xf}),$f=Ms({sparseToDense_:function(n,x,t,e){void 0===e&&(e=0);var i=qs(n,"sparseIndices","sparseToDense","int32"),r=qs(x,"sparseValues","sparseToDense"),o=qs(e,"defaultValue","sparseToDense",r.dtype);return function(n,x,t,e){if("int32"!==n.dtype)throw new Error("tf.sparseToDense() expects the indices to be int32 type, but the dtype was "+n.dtype+".");if(n.rank>2)throw new Error("sparseIndices should be a scalar, vector, or matrix, but got shape "+n.shape+".");var i=n.rank>0?n.shape[0]:1,r=n.rank>1?n.shape[1]:1;if(t.length!==r)throw new Error("outputShape has incorrect number of elements:, "+t.length+", should be: "+r+".");var o=x.size;if(0!==x.rank&&(1!==x.rank||o!==i))throw new Error("sparseValues has incorrect shape "+x.shape+", should be [] or ["+i+"]");if(x.dtype!==e.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}(i,r,t,o),ao.runKernelFunc(function(n){return n.sparseToDense(i,r,t,o)},{$sparseIndices:i,$sparseValues:r,$defaultValue:o})}}),np=Ms({gatherND_:function(n,x){var t=qs(x,"indices","gatherND","int32"),e=qs(n,"x","gatherND");return ao.runKernelFunc(function(n){return n.gatherND(e,t)},{x:e,indices:t},null,"GatherNd")}}),xp=Ms({diag_:function(n){var x=qs(n,"x","diag").flatten(),t=n.shape.concat(n.shape);return ao.runKernelFunc(function(n){return n.diag(x)},{$x:x}).reshape(t)}}),tp=Ms({dropout_:function(n,x,t,e){var i=qs(n,"x","dropout");if(Ji("float32"===i.dtype,function(){return"x has to be a floating point tensor since it's going to be scaled, but got a "+i.dtype+" tensor instead."}),Ji(x>=0&&x<1,function(){return"rate must be a float in the range [0, 1), but got "+x+"."}),0===x)return n instanceof Kr?i.clone():i;var r=function(n,x){if(null==x)return n.shape.slice();if(xr(n.shape,x))return x;if(n.shape.length===x.length){for(var t=[],e=0;e<n.shape.length;e++)null==x[e]&&null!=n.shape[e]?t.push(n.shape[e]):t.push(x[e]);return t}return x}(i,t),o=1-x,s=Hh(r,0,1,"float32",e).add(o).floor().div(o);return i.mul(s)}});function ep(n,x,t){for(var e=1-n%2,i=new Float32Array(n),r=0;r<n;++r){var o=2*Math.PI*r/(n+e-1);i[r]=x-t*Math.cos(o)}return Vs(i,"float32")}var ip,rp=Ms({hannWindow_:function(n){return ep(n,.5,.5)}}),op=Ms({hammingWindow_:function(n){return ep(n,.54,.46)}}),sp=Ms({frame_:function(n,x,t,e,i){void 0===e&&(e=!1),void 0===i&&(i=0);for(var r=0,o=[];r+x<=n.size;)o.push(pf(n,r,x)),r+=t;if(e)for(;r<n.size;){var s=r+x-n.size,h=ih([pf(n,r,x-s),$s([s],i)]);o.push(h),r+=t}return 0===o.length?Ws([],[0,x]):ih(o).as2D(o.length,x)}}),hp=Ms({stft_:function(n,x,t,e,i){var r;void 0===i&&(i=rp),null==e&&(r=x,e=Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2)))));for(var o=sp(n,x,t),s=pd(o,i(x)),h=[],u=0;u<o.shape[0];u++)h.push(Jf(s.slice([u,0],[1,x]),e));return ih(h)}}),up=Object.freeze({hannWindow:rp,hammingWindow:op,frame:sp,stft:hp}),ap=function(n,x,t){return void 0===t&&(t=1),Oi(this,void 0,void 0,function(){var e,i,r,o,s,h,u,a,g,l,c,d,f,p;return _i(this,function(y){switch(y.label){case 0:return e=qs(n,"predictions","inTopK"),i=qs(x,"targets","inTopK"),Ji(e.rank>1,function(){return"inTopK() expects the predictions to be of rank 2 or higher, but got "+e.rank}),Ji(e.rank-1===i.rank,function(){return"predictions rank should be 1 larger than targets rank, but got predictions rank "+e.rank+" and targets rank "+i.rank}),Xi(e.shape.slice(0,e.shape.length-1),i.shape,"predictions's shape should be align with the targets' shape, except the last dimension."),r=e.shape[e.shape.length-1],Ji(t>0&&t<=r,function(){return"'k' passed to inTopK() must be > 0 && <= the predictions last dimension ("+r+"), but got "+t}),[4,e.data()];case 1:return o=y.sent(),[4,i.data()];case 2:for(s=y.sent(),h=[o.length/r,r],a=h[1],g=ar("bool",u=h[0]),l=0;l<u;l++){for(c=l*a,d=o.subarray(c,c+a),f=[],p=0;p<d.length;p++)f.push({value:d[p],index:p});for(f.sort(function(n,x){return x.value-n.value}),g[l]=0,p=0;p<t;p++)if(f[p].index===s[l]){g[l]=1;break}}return n!==e&&e.dispose(),x!==i&&i.dispose(),[2,Ls(g,i.shape,"bool")]}})})};!function(n){n[n.NONE=0]="NONE",n[n.MEAN=1]="MEAN",n[n.SUM=2]="SUM",n[n.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"}(ip||(ip={}));var gp=Ms({absoluteDifference_:function(n,x,t,e){void 0===e&&(e=ip.SUM_BY_NONZERO_WEIGHTS);var i=qs(n,"labels","absoluteDifference"),r=qs(x,"predictions","absoluteDifference"),o=null;null!=t&&(o=qs(t,"weights","absoluteDifference")),Xi(i.shape,r.shape,"Error in absoluteDifference: ");var s=i.sub(r).abs();return lp(s,o,e)}}),lp=Ms({computeWeightedLoss_:function(n,x,t){void 0===t&&(t=ip.SUM_BY_NONZERO_WEIGHTS);var e=qs(n,"losses","computeWeightedLoss"),i=null;null!=x&&(i=qs(x,"weights","computeWeightedLoss"));var r=null==i?e:e.mul(i);if(t===ip.NONE)return r;if(t===ip.SUM)return r.sum();if(t===ip.MEAN){if(null==i)return r.mean();var o=e.size/i.size,s=r.sum().div(i.sum());return o>1?s.div(Us(o)):s}if(t===ip.SUM_BY_NONZERO_WEIGHTS){if(null==i)return r.sum().div(Us(e.size));var h=i.mul(Xs(e.shape)).notEqual(Us(0)).sum().toFloat();return r.sum().div(h)}throw Error("Unknown reduction: "+t)}}),cp=Ms({cosineDistance_:function(n,x,t,e,i){void 0===i&&(i=ip.SUM_BY_NONZERO_WEIGHTS);var r=qs(n,"labels","cosineDistance"),o=qs(x,"predictions","cosineDistance"),s=null;null!=e&&(s=qs(e,"weights","cosineDistance")),Xi(r.shape,o.shape,"Error in cosineDistance: ");var h=Us(1).sub(r.mul(o).sum(t,!0));return lp(h,s,i)}}),dp=Ms({hingeLoss_:function(n,x,t,e){void 0===e&&(e=ip.SUM_BY_NONZERO_WEIGHTS);var i=qs(n,"labels","hingeLoss"),r=qs(x,"predictions","hingeLoss"),o=null;null!=t&&(o=qs(t,"weights","hingeLoss")),Xi(i.shape,r.shape,"Error in hingeLoss: ");var s=Us(1);i=Us(2).mul(i).sub(s);var h=s.sub(i.mul(r)).relu();return lp(h,o,e)}}),fp=Ms({huberLoss_:function(n,x,t,e,i){void 0===e&&(e=1),void 0===i&&(i=ip.SUM_BY_NONZERO_WEIGHTS);var r=qs(n,"labels","huberLoss"),o=qs(x,"predictions","huberLoss"),s=null;null!=t&&(s=qs(t,"weights","huberLoss")),Xi(r.shape,o.shape,"Error in huberLoss: ");var h=Us(e),u=o.sub(r).abs(),a=ld(u,h),g=u.sub(a),l=Us(.5).mul(a.square()).add(h.mul(g));return lp(l,s,i)}}),pp=Ms({logLoss_:function(n,x,t,e,i){void 0===e&&(e=1e-7),void 0===i&&(i=ip.SUM_BY_NONZERO_WEIGHTS);var r=qs(n,"labels","logLoss"),o=qs(x,"predictions","logLoss"),s=null;null!=t&&(s=qs(t,"weights","logLoss")),Xi(r.shape,o.shape,"Error in logLoss: ");var h=Us(1),u=Us(e),a=r.mul(o.add(u).log()).neg().sub(h.sub(r).mul(h.sub(o).add(u).log()));return lp(a,s,i)}}),yp=Ms({meanSquaredError_:function(n,x,t,e){void 0===e&&(e=ip.SUM_BY_NONZERO_WEIGHTS);var i=qs(n,"labels","meanSquaredError"),r=qs(x,"predictions","meanSquaredError"),o=null;null!=t&&(o=qs(t,"weights","meanSquaredError")),Xi(i.shape,r.shape,"Error in meanSquaredError: ");var s=i.squaredDifference(r);return lp(s,o,e)}}),mp=Ms({sigmoidCrossEntropy_:function(n,x,t,e,i){void 0===e&&(e=0),void 0===i&&(i=ip.SUM_BY_NONZERO_WEIGHTS);var r=qs(n,"multiClassLabels","sigmoidCrossEntropy"),o=qs(x,"logits","sigmoidCrossEntropy"),s=null;if(null!=t&&(s=qs(t,"weights","sigmoidCrossEntropy")),Xi(r.shape,o.shape,"Error in sigmoidCrossEntropy: "),e>0){var h=Us(e),u=Us(1),a=Us(.5);r=r.mul(u.sub(h)).add(a.mul(h))}var g=function(n,x){var t=qs(n,"labels","sigmoidCrossEntropyWithLogits"),e=qs(x,"logits","sigmoidCrossEntropyWithLogits");Xi(t.shape,e.shape,"Error in sigmoidCrossEntropyWithLogits: ");var i=e.relu(),r=e.mul(t),o=e.abs().neg().exp().log1p();return i.sub(r).add(o)}(r,o);return lp(g,s,i)}}),bp=Ms({softmaxCrossEntropy_:function(n,x,t,e,i){void 0===e&&(e=0),void 0===i&&(i=ip.SUM_BY_NONZERO_WEIGHTS);var r=qs(n,"onehotLabels","softmaxCrossEntropy"),o=qs(x,"logits","softmaxCrossEntropy"),s=null;if(null!=t&&(s=qs(t,"weights","softmaxCrossEntropy")),Xi(r.shape,o.shape,"Error in softmaxCrossEntropy: "),e>0){var h=Us(e),u=Us(1),a=Us(r.shape[1]);r=r.mul(u.sub(h)).add(h.div(a))}var g=function(n,x,t){if(void 0===t&&(t=-1),-1===t&&(t=x.rank-1),t!==x.rank-1)throw Error("Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank "+x.rank+" and dim was "+t);return pu(function(n,x,e){var i=x.logSumExp([t],!0),r=x.toFloat().sub(i);return e([n,r]),{value:r.mul(n).neg().sum([t]),gradFunc:function(n,x){var e=x[0],i=x[1],r=Is(n.shape,[t]);return[n.reshape(r).mul(e.toFloat().sub(i.exp())),n.reshape(r).mul(i.exp().sub(e.toFloat()))]}}})(n,x)}(r,o);return lp(g,s,i)}}),zp=Object.freeze({get Reduction(){return ip},absoluteDifference:gp,computeWeightedLoss:lp,cosineDistance:cp,hingeLoss:dp,huberLoss:fp,logLoss:pp,meanSquaredError:yp,sigmoidCrossEntropy:mp,softmaxCrossEntropy:bp});function vp(n,x){return void 0===x&&(x=!1),ao.tidy(function(){if(2!==n.shape.length)throw new Error("qr2d() requires a 2D Tensor, but got a "+n.shape.length+"D Tensor.");for(var t=n.shape[0],e=n.shape[1],i=Dh(t),r=n.clone(),o=Ws([[1]],[1,1]),s=o.clone(),h=t>=e?e:t,u=function(n){var x,h=r,u=s,a=i;x=ao.tidy(function(){var x=r.slice([n,n],[t-n,1]),h=x.norm(),u=r.slice([n,n],[1,1]),a=Ws([[-1]]).where(u.greater(0),Ws([[1]])),g=u.sub(a.mul(h)),l=x.div(g);s=1===l.shape[0]?o.clone():o.concat(l.slice([1,0],[l.shape[0]-1,l.shape[1]]),0);var c=a.matMul(g).div(h).neg(),d=r.slice([n,0],[t-n,e]),f=c.mul(s);if(0===n)r=d.sub(f.matMul(s.transpose().matMul(d)));else{var p=d.sub(f.matMul(s.transpose().matMul(d)));r=r.slice([0,0],[n,e]).concat(p,0)}var y=i.slice([0,n],[t,i.shape[1]-n]);if(0===n)i=y.sub(y.matMul(s).matMul(f.transpose()));else{var m=y.sub(y.matMul(s).matMul(f.transpose()));i=i.slice([0,0],[t,n]).concat(m,1)}return[s,r,i]}),s=x[0],r=x[1],i=x[2],zs([h,u,a])},a=0;a<h;++a)u(a);return!x&&t>e&&(i=i.slice([0,0],[t,e]),r=r.slice([0,0],[e,e])),[i,r]})}var jp=Ms({bandPart_:function(n,x,t){if(x%1!=0)throw new Error("bandPart(): numLower must be an integer, got "+x+".");if(t%1!=0)throw new Error("bandPart(): numUpper must be an integer, got "+t+".");var e=qs(n,"a","bandPart");if(e.rank<2)throw new Error("bandPart(): Rank must be at least 2, got "+e.rank+".");var i=e.shape,r=e.shape.slice(-2),o=r[0],s=r[1];if(!(x<=o))throw new Error("bandPart(): numLower ("+x+") must not be greater than the number of rows ("+o+").");if(!(t<=s))throw new Error("bandPart(): numUpper ("+t+") must not be greater than the number of columns ("+s+").");x<0&&(x=o),t<0&&(t=s);var h=xh(0,o,1,"int32").reshape([-1,1]),u=xh(0,s,1,"int32"),a=vd(h,u),g=Jc(a.lessEqual(Us(+x,"int32")),a.greaterEqual(Us(-t,"int32"))),l=Zs([o,s],e.dtype);return Qh(Yh(e.reshape([-1,o,s])).map(function(n){return nd(g,n,l)})).reshape(i)}}),wp=Ms({gramSchmidt_:function(n){var x;if(Array.isArray(n)){x=!1,Ji(null!=n&&n.length>0,function(){return"Gram-Schmidt process: input must not be null, undefined, or empty"});for(var t=n[0].shape[0],e=function(x){Ji(n[x].shape[0]===t,function(){return"Gram-Schmidt: Non-unique lengths found in the input vectors: ("+n[x].shape[0]+" vs. "+t+")"})},i=1;i<n.length;++i)e(i)}else x=!0,n=uh(n,n.shape[0],0).map(function(n){return Wh(n,[0])});Ji(n.length<=n[0].shape[0],function(){return"Gram-Schmidt: Number of vectors ("+n.length+") exceeds number of dimensions ("+n[0].shape[0]+")."});var r=[],o=n,s=function(n){r.push(ao.tidy(function(){var x=o[n];if(n>0)for(var t=0;t<n;++t){var e=Df(r[t].mulStrict(x)).mul(r[t]);x=x.sub(e)}return x.div(Lf(x,"euclidean"))}))};for(i=0;i<n.length;++i)s(i);return x?Qh(r,0):r}}),kp=Ms({qr_:function(n,x){if(void 0===x&&(x=!1),n.rank<2)throw new Error("qr() requires input tensor to have a rank >= 2, but got rank "+n.rank);if(2===n.rank)return vp(n,x);var t=n.shape.slice(0,n.shape.length-2).reduce(function(n,x){return n*x}),e=Yh(n.reshape([t,n.shape[n.shape.length-2],n.shape[n.shape.length-1]]),0),i=[],r=[];return e.forEach(function(n){var t=vp(n,x),e=t[0],o=t[1];i.push(e),r.push(o)}),[Qh(i,0).reshape(n.shape),Qh(r,0).reshape(n.shape)]}}),qp=Object.freeze({bandPart:jp,gramSchmidt:wp,qr:kp});function Cp(n,x,t,e,i,r){null==e&&(e=.5),null==i&&(i=Number.NEGATIVE_INFINITY),null==r&&(r=0);var o=n.shape[0];return t=Math.min(t,o),Ji(0<=e&&e<=1,function(){return"iouThreshold must be in [0, 1], but was '"+e+"'"}),Ji(2===n.rank,function(){return"boxes must be a 2D tensor, but was of rank '"+n.rank+"'"}),Ji(4===n.shape[1],function(){return"boxes must have 4 columns, but 2nd dimension was "+n.shape[1]}),Ji(1===x.rank,function(){return"scores must be a 1D tensor"}),Ji(x.shape[0]===o,function(){return"scores has incompatible shape with boxes. Expected "+o+", but was "+x.shape[0]}),Ji(0<=r&&r<=1,function(){return"softNmsSigma must be in [0, 1], but was '"+r+"'"}),{maxOutputSize:t,iouThreshold:e,scoreThreshold:i,softNmsSigma:r}}var Ap=Ms({resizeBilinear_:function(n,x,t){void 0===t&&(t=!1);var e=qs(n,"images","resizeBilinear");Ji(3===e.rank||4===e.rank,function(){return"Error in resizeBilinear: x must be rank 3 or 4, but got rank "+e.rank+"."}),Ji(2===x.length,function(){return"Error in resizeBilinear: new shape must 2D, but got shape "+x+"."});var i=e,r=!1;3===e.rank&&(r=!0,i=e.as4D(1,e.shape[0],e.shape[1],e.shape[2]));var o=x[0],s=x[1],h=ao.runKernelFunc(function(n,x){return x([i]),n.resizeBilinear(i,o,s,t)},{x:i},function(n,x){return{x:function(){return ao.runKernelFunc(function(e){return e.resizeBilinearBackprop(n,x[0],t)},{})}}},"ResizeBilinear",{alignCorners:t,newHeight:o,newWidth:s});return r?h.as3D(h.shape[1],h.shape[2],h.shape[3]):h}}),Ep=Ms({resizeNearestNeighbor_:function(n,x,t){void 0===t&&(t=!1);var e=qs(n,"images","resizeNearestNeighbor");Ji(3===e.rank||4===e.rank,function(){return"Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank "+e.rank+"."}),Ji(2===x.length,function(){return"Error in resizeNearestNeighbor: new shape must 2D, but got shape "+x+"."}),Ji("float32"===e.dtype||"int32"===e.dtype,function(){return"`images` must have `int32` or `float32` as dtype"});var i=e,r=!1;3===e.rank&&(r=!0,i=e.as4D(1,e.shape[0],e.shape[1],e.shape[2]));var o=x[0],s=x[1],h=ao.runKernelFunc(function(n,x){return x([i]),n.resizeNearestNeighbor(i,o,s,t)},{batchImages:i},function(n,x){return{batchImages:function(){return ao.runKernelFunc(function(e){return e.resizeNearestNeighborBackprop(n,x[0],t)},{})}}});return r?h.as3D(h.shape[1],h.shape[2],h.shape[3]):h}}),Sp=Ms({nonMaxSuppression_:function(n,x,t,e,i){void 0===e&&(e=.5),void 0===i&&(i=Number.NEGATIVE_INFINITY);var r=qs(n,"boxes","nonMaxSuppression"),o=qs(x,"scores","nonMaxSuppression"),s=Cp(r,o,t,e,i);t=s.maxOutputSize,e=s.iouThreshold,i=s.scoreThreshold;var h={maxOutputSize:t,iouThreshold:e,scoreThreshold:i};return ao.runKernelFunc(function(n){return n.nonMaxSuppression(r,o,t,e,i)},{boxes:r,scores:o},null,"NonMaxSuppressionV3",h)}}),Ip=function(n,x,t,e,i){return void 0===e&&(e=.5),void 0===i&&(i=Number.NEGATIVE_INFINITY),Oi(this,void 0,void 0,function(){var r,o,s,h,u,a,g;return _i(this,function(l){switch(l.label){case 0:return r=qs(n,"boxes","nonMaxSuppressionAsync"),o=qs(x,"scores","nonMaxSuppressionAsync"),s=Cp(r,o,t,e,i),t=s.maxOutputSize,e=s.iouThreshold,i=s.scoreThreshold,[4,Promise.all([r.data(),o.data()])];case 1:return h=l.sent(),u=h[0],a=h[1],g=Qu(u,a,t,e,i),r!==n&&r.dispose(),o!==x&&o.dispose(),[2,g]}})})},Dp=Ms({nonMaxSuppressionWithScore_:function(n,x,t,e,i,r){void 0===e&&(e=.5),void 0===i&&(i=Number.NEGATIVE_INFINITY),void 0===r&&(r=0);var o=qs(n,"boxes","nonMaxSuppression"),s=qs(x,"scores","nonMaxSuppression"),h=Cp(o,s,t,e,i,r),u={maxOutputSize:t=h.maxOutputSize,iouThreshold:e=h.iouThreshold,scoreThreshold:i=h.scoreThreshold,softNmsSigma:r=h.softNmsSigma},a=ao.runKernel("NonMaxSuppressionV5",{boxes:o,scores:s},u);return{selectedIndices:a[0],selectedScores:a[1]}}}),Op=function(n,x,t,e,i,r){return void 0===e&&(e=.5),void 0===i&&(i=Number.NEGATIVE_INFINITY),void 0===r&&(r=0),Oi(this,void 0,void 0,function(){var o,s,h,u,a,g,l;return _i(this,function(c){switch(c.label){case 0:return o=qs(n,"boxes","nonMaxSuppressionAsync"),s=qs(x,"scores","nonMaxSuppressionAsync"),h=Cp(o,s,t,e,i,r),t=h.maxOutputSize,e=h.iouThreshold,i=h.scoreThreshold,r=h.softNmsSigma,[4,Promise.all([o.data(),s.data()])];case 1:return u=c.sent(),a=u[0],g=u[1],l=Gu(a,g,t,e,i,r),o!==n&&o.dispose(),s!==x&&s.dispose(),[2,l]}})})},_p=Ms({cropAndResize_:function(n,x,t,e,i,r){var o=qs(n,"image","cropAndResize"),s=qs(x,"boxes","cropAndResize","float32"),h=qs(t,"boxInd","cropAndResize","int32");i=i||"bilinear",r=r||0;var u=s.shape[0];return Ji(4===o.rank,function(){return"Error in cropAndResize: image must be rank 4,but got rank "+o.rank+"."}),Ji(2===s.rank&&4===s.shape[1],function(){return"Error in cropAndResize: boxes must be have size ["+u+",4] but had shape "+s.shape+"."}),Ji(1===h.rank&&h.shape[0]===u,function(){return"Error in cropAndResize: boxInd must be have size ["+u+"] but had shape "+s.shape+"."}),Ji(2===e.length,function(){return"Error in cropAndResize: cropSize must be of length 2, but got length "+e.length+"."}),Ji(e[0]>=1&&e[1]>=1,function(){return"cropSize must be atleast [1,1], but was "+e}),Ji("bilinear"===i||"nearest"===i,function(){return"method must be bilinear or nearest, but was "+i}),ao.runKernelFunc(function(n,x){return n.cropAndResize(o,s,h,e,i,r)},{images:o,boxes:s,boxInd:h},null,"CropAndResize",{method:i,extrapolationValue:r,cropSize:e})}}),Tp=Object.freeze({resizeBilinear:Ap,resizeNearestNeighbor:Ep,nonMaxSuppression:Sp,nonMaxSuppressionAsync:Ip,nonMaxSuppressionWithScore:Dp,nonMaxSuppressionWithScoreAsync:Op,cropAndResize:_p}),Rp=function(n,x){return!(n>0)||"linear"===x},Bp=function(n,x,t){if(null==t||"linear"===t)return n;if("relu"===t)return n.mul(x.step());throw new Error("Gradient for activation "+t+" has not been implemented yet.")},Mp=function(n,x){var t=x,e=wu(n.shape,x.shape);return e.length>0&&(t=t.sum(e)),t.reshape(n.shape)},Np=function(n,x,t){if("linear"===x)return n;if("relu"===x)return Bf(n);if("elu"===x)return _f(n);if("relu6"===x)return Mf(n);if("prelu"===x)return Rf(n,t);throw new Error("Unknown fused activation "+x+".")},Fp=Ms({fusedMatMul_:function(n){var x,t=n.a,e=n.b,i=n.transposeA,r=void 0!==i&&i,o=n.transposeB,s=void 0!==o&&o,h=n.bias,u=n.activation,a=void 0===u?"linear":u,g=n.preluActivationWeights;if(!1===Rp(ao.state.gradientDepth,a)){var l=nf(t,e,r,s);return null!=h&&(l=td(l,h)),Np(l,a,g)}var c=qs(t,"a","fused matMul"),d=qs(e,"b","fused matMul");x=io(c,d),c=x[0],d=x[1];var f=r?c.shape[c.rank-2]:c.shape[c.rank-1],p=s?d.shape[d.rank-1]:d.shape[d.rank-2],y=r?c.shape[c.rank-1]:c.shape[c.rank-2],m=s?d.shape[d.rank-2]:d.shape[d.rank-1],b=c.shape.slice(0,-2),z=d.shape.slice(0,-2),v=nr(b),j=nr(z);Ji(c.rank>=2&&d.rank>=2&&c.rank===d.rank,function(){return"Error in fused matMul: inputs must have the same rank of at least 2, got ranks "+c.rank+" and "+d.rank+"."}),Ji(xr(b,z),function(){return"Error in fused matMul: outer dimensions ("+b+") and ("+z+") of Tensors with shapes "+c.shape+" and "+d.shape+" must match."}),Ji(f===p,function(){return"Error in fused matMul: inner shapes ("+f+") and ("+p+") of Tensors with shapes "+c.shape+" and "+d.shape+" and transposeA="+r+" and transposeB="+s+" must match."});var w,k,q=c.shape.slice(0,-2).concat([y,m]),C=r?c.as3D(v,f,y):c.as3D(v,y,f),A=s?d.as3D(j,m,p):d.as3D(j,p,m);null!=h&&ku(q,(w=io(w=qs(h,"bias","fused matMul"),c)[0]).shape),null!=g&&(k=qs(g,"prelu weights","fused matMul"));var E={a:C,b:A};null!=h&&(E.bias=w),null!=g&&(E.preluActivationWeights=k);var S=[C,A];return ao.runKernelFunc(function(n,x){var t=n.fusedBatchMatMul({a:C,b:A,transposeA:r,transposeB:s,bias:w,activation:a,preluActivationWeights:k});return x([C,A,t]),t},E,function(n,x){var t=x[0],e=x[1],i=x[2],o=Bp(n,i,a),u={};return null!=h&&(u={bias:function(){return Mp(w,o)}}),r||s?!r&&s?Object.assign({a:function(){return o.matMul(e,!1,!1)},b:function(){return o.matMul(t,!0,!1)}},u):r&&!s?Object.assign({a:function(){return e.matMul(o,!1,!0)},b:function(){return t.matMul(o,!1,!1)}},u):Object.assign({a:function(){return e.matMul(o,!0,!0)},b:function(){return o.matMul(t,!0,!0)}},u):Object.assign({a:function(){return o.matMul(e,!1,!0)},b:function(){return t.matMul(o,!0,!1)}},u)},"_FusedMatMul",{transposeA:r,transposeB:s,activation:a},S,[!0]).reshape(q)}}),Pp=Ms({fusedConv2d_:function(n){var x=n.x,t=n.filter,e=n.strides,i=n.pad,r=n.dataFormat,o=void 0===r?"NHWC":r,s=n.dilations,h=void 0===s?[1,1]:s,u=n.dimRoundingMode,a=n.bias,g=n.activation,l=void 0===g?"linear":g,c=n.preluActivationWeights;if(l=l||"linear",!1===Rp(ao.state.gradientDepth,l)){var d=Vd(x,t,e,i,o,h,u);return null!=a&&(d=td(d,a)),Np(d,l,c)}var f=qs(x,"x","conv2d"),p=qs(t,"filter","conv2d"),y=f,m=!1;3===f.rank&&(m=!0,y=f.as4D(1,f.shape[0],f.shape[1],f.shape[2])),Ji(4===y.rank,function(){return"Error in fused conv2d: input must be rank 4, but got rank "+y.rank+"."}),Ji(4===p.rank,function(){return"Error in fused conv2d: filter must be rank 4, but got rank "+p.rank+"."}),null!=u&&Ji(tr(i),function(){return"Error in fused conv2d: pad must be an integer when using, dimRoundingMode "+u+" but got pad "+i+"."}),Ji(y.shape[3]===p.shape[2],function(){return"Error in conv2d: depth of input ("+y.shape[3]+") must match input depth for filter "+p.shape[2]+"."}),Ji(Ru(e,h),function(){return"Error in conv2D: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+h+"'"}),Ji("NHWC"===o,function(){return"Error in conv2d: got dataFormat of "+o+" but only NHWC is currently supported."});var b,z,v=Au(y.shape,p.shape,e,h,i,u);null!=a&&(b=io(b=qs(a,"bias","fused conv2d"),f)[0],ku(v.outShape,b.shape)),null!=c&&(z=qs(c,"prelu weights","fused conv2d"));var j={x:y,filter:p};null!=a&&(j.bias=b),null!=c&&(j.preluActivationWeights=z);var w=[p,y],k=ao.runKernelFunc(function(n,x){var t=n.fusedConv2d({input:y,filter:p,convInfo:v,bias:b,activation:l,preluActivationWeights:z});return x([p,y,t]),t},j,function(n,x){var t=x,r=t[0],o=t[1],s=t[2],u=Bp(n,s,l);Ji(Tu(h),function(){return"Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+h+"'"});var g={};return null!=a&&(g={bias:function(){return Mp(b,u)}}),Object.assign({x:function(){return Gd(o.shape,u,r,e,i)},filter:function(){return Qd(o,u,r.shape,e,i)}},g)},"FusedConv2D",{convInfo:v,activation:l},w,[!0]);return m?k.as3D(k.shape[1],k.shape[2],k.shape[3]):k}}),Lp=Ms({fusedDepthwiseConv2d_:function(n){var x=n.x,t=n.filter,e=n.strides,i=n.pad,r=n.dataFormat,o=void 0===r?"NHWC":r,s=n.dilations,h=void 0===s?[1,1]:s,u=n.dimRoundingMode,a=n.bias,g=n.activation,l=void 0===g?"linear":g,c=n.preluActivationWeights;if(!1===Rp(ao.state.gradientDepth,l)){var d=Kd(x,t,e,i,o,h,u);return null!=a&&(d=td(d,a)),Np(d,l,c)}var f=qs(x,"x","depthwiseConv2d"),p=qs(t,"filter","depthwiseConv2d"),y=f,m=!1;3===f.rank&&(m=!0,y=f.as4D(1,f.shape[0],f.shape[1],f.shape[2])),Ji(4===y.rank,function(){return"Error in fused depthwiseConv2d: input must be rank 4, but got rank "+y.rank+"."}),Ji(4===p.rank,function(){return"Error in fused depthwiseConv2d: filter must be rank 4, but got rank "+p.rank+"."}),Ji(y.shape[3]===p.shape[2],function(){return"Error in fused depthwiseConv2d: number of input channels ("+y.shape[3]+") must match the inChannels dimension in filter "+p.shape[2]+"."}),null==h&&(h=[1,1]),Ji(Ru(e,h),function(){return"Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+h+"'"}),null!=u&&Ji(tr(i),function(){return"Error in fused depthwiseConv2d: pad must be an integer when using dimRoundingMode "+u+" but got pad "+i+"."});var b,z,v=Au(y.shape,p.shape,e,h,i,u,!0);null!=a&&(b=io(b=qs(a,"bias","fused conv2d"),f)[0],ku(v.outShape,b.shape)),null!=c&&(z=qs(c,"prelu weights","fused depthwiseConv2d"));var j={x:y,filter:p};null!=a&&(j.bias=b),null!=c&&(j.preluActivationWeights=z);var w=[p,y],k=ao.runKernelFunc(function(n,x){var t=n.fusedDepthwiseConv2D({input:y,filter:p,convInfo:v,bias:b,activation:l,preluActivationWeights:z});return x([p,y,t]),t},j,function(n,x){Ji(Tu(h),function(){return"Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '"+h+"'"});var t=x[0],e=x[1],i=x[2],r=Bp(n,i,l),o={};return null!=a&&(o={bias:function(){return Mp(b,r)}}),Object.assign({x:function(){return Yd(e.shape,r,t,v)},filter:function(){return Jd(e,r,t.shape,v)}},o)},"FusedDepthwiseConv2D",{convInfo:v,activation:l},w,[!0]);return m?k.as3D(k.shape[1],k.shape[2],k.shape[3]):k}}),Hp=Object.freeze({matMul:Fp,conv2d:Pp,depthwiseConv2d:Lp}),Up=Object.freeze({image:Tp,linalg:qp,losses:zp,spectral:Zf,fused:Hp,signal:up,square:$l,squaredDifference:xc,conv1d:Ud,conv2d:Vd,conv3d:Wd,depthwiseConv2d:Kd,separableConv2d:Xd,conv2dTranspose:Zd,conv3dTranspose:$d,op:Ms,batchNormalization2d:Hc,batchNormalization3d:Uc,batchNormalization4d:Vc,batchNormalization:Wc,batchNorm:Qc,batchNorm2d:Gc,batchNorm3d:Kc,batchNorm4d:Yc,booleanMaskAsync:Fd,complex:Ns,real:Fs,imag:Ps,concat:ih,concat1d:rh,concat2d:oh,concat3d:sh,concat4d:hh,split:uh,matMul:nf,dot:xf,outerProduct:tf,reverse:ef,reverse1d:rf,reverse2d:of,reverse3d:sf,reverse4d:hf,maxPool:gf,avgPool:lf,pool:cf,maxPool3d:df,avgPool3d:ff,slice:pf,slice1d:yf,slice2d:mf,slice3d:bf,slice4d:zf,abs:tc,acos:ec,acosh:ic,asin:rc,asinh:oc,atan:sc,atanh:hc,ceil:uc,clipByValue:ac,cos:gc,cosh:lc,erf:cc,exp:dc,expm1:fc,floor:pc,log:yc,log1p:mc,logSigmoid:bc,neg:zc,reciprocal:vc,round:jc,rsqrt:wc,sigmoid:kc,sign:qc,isNaN:Cc,isInf:Ac,isFinite:Ec,sin:Sc,sinh:Ic,softplus:Dc,sqrt:Oc,step:_c,tan:Tc,tanh:Rc,all:jf,any:wf,argMax:kf,argMin:qf,logSumExp:Cf,max:Af,mean:Ef,min:Sf,moments:If,sum:Df,prod:Of,equal:wd,equalStrict:kd,greater:qd,greaterEqual:Cd,greaterEqualStrict:Ad,greaterStrict:Ed,less:Sd,lessEqual:Id,lessEqualStrict:Dd,lessStrict:Od,notEqual:_d,notEqualStrict:Td,add:td,addN:ed,addStrict:id,atan2:rd,div:od,divNoNan:sd,divStrict:hd,floorDiv:ud,maximum:ad,maximumStrict:gd,minimum:ld,minimumStrict:cd,mod:dd,modStrict:fd,mul:pd,mulStrict:yd,pow:md,powStrict:bd,squaredDifferenceStrict:zd,sub:vd,subStrict:jd,elu:_f,leakyRelu:Tf,prelu:Rf,relu:Bf,relu6:Mf,selu:Nf,logicalAnd:Jc,logicalNot:Xc,logicalOr:Zc,logicalXor:$c,where:nd,whereAsync:xd,buffer:jh,print:wh,batchToSpaceND:kh,broadcastTo:qh,cast:Ch,clone:Ah,cumsum:Eh,depthToSpace:Sh,expandDims:Ih,eye:Dh,multinomial:Oh,oneHot:_h,pad:Th,pad1d:Rh,pad2d:Bh,pad3d:Mh,pad4d:Nh,rand:Fh,randomNormal:Ph,randomGamma:Lh,randomUniform:Hh,reshape:Uh,spaceToBatchND:Vh,squeeze:Wh,stack:Qh,tile:Gh,truncatedNormal:Kh,unstack:Yh,setdiff1dAsync:Jh,fill:$s,linspace:nh,ones:Xs,range:xh,scalar:Us,tensor:Ls,tensor1d:Vs,tensor2d:Ws,tensor3d:Qs,tensor4d:Gs,tensor5d:Ks,tensor6d:Ys,variable:Js,zeros:Zs,onesLike:th,zerosLike:eh,transpose:Ff,softmax:yu,logSoftmax:mu,localResponseNormalization:Pf,norm:Lf,gather:Md,unsortedSegmentSum:Nd,basicLSTMCell:Hf,multiRNNCell:Uf,movingAverage:Vf,stridedSlice:Wf,topk:Qf,scatterND:Gf,fft:Kf,ifft:Yf,rfft:Jf,irfft:Xf,sparseToDense:$f,gatherND:np,diag:xp,dropout:tp,hannWindow:rp,hammingWindow:op,frame:sp,stft:hp,inTopKAsync:ap});function Vp(n,x){Array.isArray(n)||(n=[n]),n.forEach(function(n){null!=n&&Ji("complex64"!==n.dtype,function(){return x+" does not support complex64 tensors."})})}function Wp(n,x,t,e){if("linear"===t)return n.linear(x);if("relu"===t)return n.relu(x);if("elu"===t)return n.elu(x);if("relu6"===t)return n.relu6(x);if("prelu"===t)return n.prelu(x,e);throw new Error("Activation "+t+" has not been implemented for the CPU backend.")}var Qp=function(n){function x(){var x=n.call(this)||this;return x.blockSize=48,x.firstUse=!0,x.data=new bu(x,ao),x}return Di(x,n),x.prototype.write=function(n,x,t){this.firstUse&&(this.firstUse=!1,Bi().get("IS_NODE")&&js("\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 e={};return this.data.set(e,{values:n,dtype:t}),e},x.prototype.move=function(n,x,t,e){this.data.set(n,{values:x,dtype:e})},x.prototype.numDataIds=function(){return this.data.numDataIds()},x.prototype.read=function(n){return Oi(this,void 0,void 0,function(){return _i(this,function(x){return[2,this.readSync(n)]})})},x.prototype.readSync=function(n){var x=this.data.get(n),t=x.dtype,e=x.complexTensors;return"complex64"===t?Pu(this.readSync(e.real.dataId),this.readSync(e.imag.dataId)):this.data.get(n).values},x.prototype.bufferSync=function(n){var x=this.readSync(n.dataId),t=x;if("string"===n.dtype)try{t=x.map(function(n){return Or(n)})}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return jh(n.shape,n.dtype,t)},x.prototype.makeOutput=function(n,x,t){var e=this.write(n,x,t);return ao.makeTensorFromDataId(e,x,t,this)},x.prototype.disposeData=function(n){if(this.data.has(n)){var x=this.data.get(n).complexTensors;null!=x&&(x.real.dispose(),x.imag.dispose()),this.data.delete(n)}},x.prototype.time=function(n){return Oi(this,void 0,void 0,function(){var x;return _i(this,function(t){return x=Sr(),n(),[2,{kernelMs:Sr()-x}]})})},x.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."]}},x.prototype.complex=function(n,x){var t=this.makeOutput(null,n.shape,"complex64");return this.data.get(t.dataId).complexTensors={real:ao.keep(n.clone()),imag:ao.keep(x.clone())},t},x.prototype.real=function(n){return this.data.get(n.dataId).complexTensors.real.clone()},x.prototype.imag=function(n){return this.data.get(n.dataId).complexTensors.imag.clone()},x.prototype.slice=function(n,x,t){if(Vp(n,"slice"),cu(n.shape,x,t)){var e=du(x,n.strides),i=nr(t);return Ls(this.readSync(n.dataId).subarray(e,e+i),t,n.dtype)}for(var r=jh(t,n.dtype),o=this.bufferSync(n),s=0;s<r.size;++s){var h=r.indexToLoc(s).map(function(n,t){return n+x[t]});r.values[s]=o.get.apply(o,h)}return r.toTensor()},x.prototype.stridedSlice=function(n,x,t,e){Vp(n,"stridedSlice");var i=au(x,t,e);if(i.some(function(n){return 0===n}))return Ls([],i);for(var r=jh(i,n.dtype),o=this.bufferSync(n),s=0;s<r.size;s++){for(var h=r.indexToLoc(s),u=new Array(h.length),a=0;a<u.length;a++)u[a]=h[a]*e[a]+x[a];r.set.apply(r,[o.get.apply(o,u)].concat(h))}return r.toTensor()},x.prototype.diag=function(n){for(var x=this.readSync(n.dataId),t=jh([n.size,n.size],n.dtype),e=t.values,i=0;i<x.length;i++)e[i*n.size+i]=x[i];return t.toTensor()},x.prototype.unstack=function(n,x){for(var t=n.shape[x],e=new Array(n.rank-1),i=0,r=0;r<n.rank;r++)r!==x&&(e[i++]=n.shape[r]);var o=new Array(n.rank).fill(0),s=n.shape.slice();s[x]=1;var h=new Array(t);for(r=0;r<h.length;r++)o[x]=r,h[r]=this.slice(n,o,s).reshape(e);return h},x.prototype.reverse=function(n,x){Vp(n,"reverse");for(var t=jh(n.shape,n.dtype),e=this.bufferSync(n),i=function(i){var r=t.indexToLoc(i),o=r.slice();x.forEach(function(x){return o[x]=n.shape[x]-1-o[x]}),t.set.apply(t,[e.get.apply(e,o)].concat(r))},r=0;r<t.size;r++)i(r);return t.toTensor()},x.prototype.concat=function(n,x){var t=this;if("complex64"===n[0].dtype){var e=n.map(function(n){return Fs(n)}),i=n.map(function(n){return Ps(n)});return Ns(this.concat(e,x),this.concat(i,x))}var r=n.map(function(n){var t=nr(n.shape.slice(x));return n.as2D(-1,t)}),o=Bs(r.map(function(n){return n.shape}),1),s=jh(o,n[0].dtype).values;if(1===r[0].shape[0]){var h=0;r.forEach(function(n){s.set(t.readSync(n.dataId),h),h+=n.size})}else{var u=0;r.forEach(function(n){for(var x=t.readSync(n.dataId),e=0,i=0;i<n.shape[0];++i)for(var r=i*o[1]+u,h=0;h<n.shape[1];++h)s[r+h]=x[e++];u+=n.shape[1]})}var a=Bs(n.map(function(n){return n.shape}),x);return Ls(s,a,n[0].dtype)},x.prototype.neg=function(n){return Vp(n,"neg"),this.multiply(Us(-1),n)},x.prototype.add=function(n,x){return"complex64"===n.dtype||"complex64"===x.dtype?this.broadcastedBinaryComplexOp(n.cast("complex64"),x.cast("complex64"),function(n,x,t,e){return{real:n+t,imag:x+e}}):this.broadcastedBinaryOp(n,x,to(n.dtype,x.dtype),function(n,x){return n+x})},x.prototype.addN=function(n){var x=this;Vp(n,"addN");for(var t=n.map(function(n){return x.readSync(n.dataId)}),e=jh(n[0].shape,n[0].dtype),i=e.values,r=0;r<n.length;r++)for(var o=t[r],s=0;s<i.length;s++)i[s]+=o[s];return e.toTensor()},x.prototype.softmax=function(n,x){var t=hr([x],n.shape),e=this.max(n,t),i=Is(e.shape,t),r=this.subtract(n,e.reshape(i)),o=this.exp(r),s=this.sum(o,t).reshape(i);return this.realDivide(o,s)},x.prototype.subtract=function(n,x){return"complex64"===n.dtype||"complex64"===x.dtype?this.broadcastedBinaryComplexOp(n.cast("complex64"),x.cast("complex64"),function(n,x,t,e){return{real:n-t,imag:x-e}}):this.broadcastedBinaryOp(n,x,to(n.dtype,x.dtype),function(n,x){return n-x})},x.prototype.pow=function(n,x){return Vp([n,x],"pow"),this.broadcastedBinaryOp(n,x,n.dtype,function(n,x){return Math.pow(n,x)})},x.prototype.batchMatMul=function(n,x,t,e){Vp([n,x],"matMul");for(var i=t?n.shape[1]:n.shape[2],r=t?n.shape[2]:n.shape[1],o=e?x.shape[1]:x.shape[2],s=n.shape[0],h=this.readSync(n.dataId),u=this.readSync(x.dataId),a=t?[n.strides[0],1,n.strides[1]]:[n.strides[0],n.strides[1],1],g=a[0],l=a[1],c=a[2],d=e?[1,x.strides[1],x.strides[0]]:[x.strides[1],1,x.strides[0]],f=d[0],p=d[1],y=d[2],m=r*o,b=jh([s,r,o],n.dtype),z=b.values,v=this.blockSize,j=0;j<s;j++)for(var w=0;w<r;w+=v)for(var k=0;k<o;k+=v)for(var q=0;q<i;q+=v)for(var C=Math.min(w+v,r),A=Math.min(k+v,o),E=Math.min(q+v,i),S=w;S<C;S++)for(var I=k;I<A;I++){for(var D=0,O=q;O<E;O++)D+=h[j*g+S*l+O*c]*u[O*f+I*p+j*y];z[j*m+(S*o+I)]+=D}return b.toTensor()},x.prototype.fusedBatchMatMul=function(n){var x=n.a,t=n.b,e=n.transposeA,i=n.transposeB,r=n.bias,o=n.activation,s=n.preluActivationWeights,h=this.batchMatMul(x,t,e,i);return r&&(h=this.add(h,r)),o&&(h=Wp(this,h,o,s)),h},x.prototype.multiply=function(n,x){return"complex64"===n.dtype||"complex64"===x.dtype?this.broadcastedBinaryComplexOp(n.cast("complex64"),x.cast("complex64"),function(n,x,t,e){return{real:n*t-x*e,imag:n*e+x*t}}):this.broadcastedBinaryOp(n,x,to(n.dtype,x.dtype),function(n,x){return n*x})},x.prototype.realDivide=function(n,x){return Vp([n,x],"realDivide"),this.broadcastedBinaryOp(n,x,"float32",function(n,x){return n/x})},x.prototype.floorDiv=function(n,x){return Vp([n,x],"floorDiv"),this.broadcastedBinaryOp(n,x,"int32",function(n,x){return Math.floor(n/x)})},x.prototype.sum=function(n,x){Vp(n,"sum"),Ds("sum",x,n.rank);for(var t=Ss(n.shape,x),e=t[0],i=t[1],r=Zs(e,to(n.dtype,"int32")),o=nr(i),s=this.readSync(r.dataId),h=this.readSync(n.dataId),u=0;u<s.length;++u){for(var a=u*o,g=0,l=0;l<o;++l)g+=h[a+l];s[u]=g}return r},x.prototype.prod=function(n,x){Vp(n,"sum");for(var t=Ss(n.shape,x),e=t[0],i=t[1],r=Zs(e,to(n.dtype,"int32")),o=nr(i),s=this.readSync(r.dataId),h=this.readSync(n.dataId),u=0;u<s.length;++u){for(var a=u*o,g=1,l=0;l<o;++l)g*=h[a+l];s[u]=g}return r},x.prototype.unsortedSegmentSum=function(n,x,t){Vp(n,"unsortedSegmentSum");for(var e=[],i=n.rank-x.rank,r=0;r<i;++r)x=x.expandDims(r+1);for(r=0;r<t;++r){var o=Us(r,"int32"),s=wd(o,x).asType("float32").mul(n).sum(0);e.push(s)}return Qh(e)},x.prototype.argMin=function(n,x){Vp(n,"argMin");var t=[x];Ds("argMin",t,n.rank);for(var e=Ss(n.shape,t),i=e[0],r=e[1],o=Zs(i,"int32"),s=nr(r),h=this.readSync(o.dataId),u=this.readSync(n.dataId),a=0;a<h.length;++a){for(var g=a*s,l=u[g],c=0,d=0;d<s;++d){var f=u[g+d];f<l&&(l=f,c=d)}h[a]=c}return o},x.prototype.argMax=function(n,x){Vp(n,"argMax");var t=[x];Ds("argMax",t,n.rank);for(var e=Ss(n.shape,t),i=e[0],r=e[1],o=Zs(i,"int32"),s=nr(r),h=this.readSync(o.dataId),u=this.readSync(n.dataId),a=0;a<h.length;++a){for(var g=a*s,l=u[g],c=0,d=0;d<s;++d){var f=u[g+d];f>l&&(l=f,c=d)}h[a]=c}return o},x.prototype.cumsum=function(n,x,t,e){if(Vp(n,"cumsum"),x!==n.rank-1)throw new Error("backend.cumsum in CPU expects an inner-most axis="+(n.rank-1)+" but got axis="+x);for(var i=to(n.dtype,"int32"),r=Zs(n.shape,i),o=this.readSync(r.dataId),s=this.readSync(n.dataId),h=n.shape[n.rank-1],u=e?function(n,x){return n+h-x-1}:function(n,x){return n+x},a=0;a<s.length;a+=h)for(var g=0;g<h;g++){var l=u(a,g);if(0===g)o[l]=t?0:s[l];else{var c=u(a,g-1);o[l]=t?s[c]+o[c]:s[l]+o[c]}}return r},x.prototype.equal=function(n,x){return Vp([n,x],"equal"),this.broadcastedBinaryOp(n,x,"bool",function(n,x){return n===x?1:0})},x.prototype.notEqual=function(n,x){return Vp([n,x],"notEqual"),this.broadcastedBinaryOp(n,x,"bool",function(n,x){return n!==x?1:0})},x.prototype.less=function(n,x){return Vp([n,x],"less"),this.broadcastedBinaryOp(n,x,"bool",function(n,x){return n<x?1:0})},x.prototype.lessEqual=function(n,x){return Vp([n,x],"lessEqual"),this.broadcastedBinaryOp(n,x,"bool",function(n,x){return n<=x?1:0})},x.prototype.greater=function(n,x){return Vp([n,x],"greater"),this.broadcastedBinaryOp(n,x,"bool",function(n,x){return n>x?1:0})},x.prototype.greaterEqual=function(n,x){return Vp([n,x],"greaterEqual"),this.broadcastedBinaryOp(n,x,"bool",function(n,x){return n>=x?1:0})},x.prototype.logicalNot=function(n){Vp(n,"logicalNot");for(var x=this.readSync(n.dataId),t=new Uint8Array(x.length),e=0;e<x.length;++e)t[e]=x[e]?0:1;return this.makeOutput(t,n.shape,"bool")},x.prototype.logicalAnd=function(n,x){return Vp([n,x],"logicalAnd"),this.broadcastedBinaryOp(n,x,"bool",function(n,x){return n&&x})},x.prototype.logicalOr=function(n,x){return Vp([n,x],"logicalOr"),this.broadcastedBinaryOp(n,x,"bool",function(n,x){return n||x})},x.prototype.select=function(n,x,t){Vp([n,x,t],"select");for(var e=this.readSync(n.dataId),i=this.readSync(x.dataId),r=this.readSync(t.dataId),o=Zs(x.shape,to(x.dtype,t.dtype)),s=this.readSync(o.dataId),h=0,u=0===n.rank||n.rank>1||1===x.rank?1:nr(x.shape.slice(1)),a=0;a<e.length;a++)for(var g=0;g<u;g++)1===e[a]?s[h++]=i[a]:s[h++]=r[a];return o},x.prototype.where=function(n){Vp([n],"where");var x=this.readSync(n.dataId);return xa(n.shape,x)},x.prototype.topk=function(n,x,t){return Vp(n,"topk"),na(this.readSync(n.dataId),n.shape,n.dtype,x)},x.prototype.min=function(n,x){Vp(n,"min"),Ds("min",x,n.rank);for(var t=Ss(n.shape,x),e=t[0],i=t[1],r=Zs(e,n.dtype),o=nr(i),s=this.readSync(r.dataId),h=this.readSync(n.dataId),u=0;u<s.length;++u){for(var a=u*o,g=h[a],l=0;l<o;++l){var c=h[a+l];c<g&&(g=c)}s[u]=g}return r},x.prototype.minimum=function(n,x){return Vp([n,x],"minimum"),this.broadcastedBinaryOp(n,x,n.dtype,function(n,x){return Math.min(n,x)})},x.prototype.mod=function(n,x){return Vp([n,x],"mod"),this.broadcastedBinaryOp(n,x,n.dtype,function(n,x){var t=n%x;return n<0&&x<0||n>=0&&x>=0?t:(t+x)%x})},x.prototype.max=function(n,x){Vp(n,"max"),Ds("max",x,n.rank);for(var t=Ss(n.shape,x),e=t[0],i=t[1],r=Zs(e,n.dtype),o=nr(i),s=this.readSync(r.dataId),h=this.readSync(n.dataId),u=0;u<s.length;++u){for(var a=u*o,g=h[a],l=0;l<o;++l){var c=h[a+l];c>g&&(g=c)}s[u]=g}return r},x.prototype.maximum=function(n,x){return Vp([n,x],"maximum"),this.broadcastedBinaryOp(n,x,n.dtype,function(n,x){return Math.max(n,x)})},x.prototype.all=function(n,x){Vp(n,"all"),Ds("all",x,n.rank);for(var t=Ss(n.shape,x),e=t[0],i=t[1],r=Zs(e,n.dtype),o=nr(i),s=this.readSync(r.dataId),h=this.readSync(n.dataId),u=0;u<s.length;++u){for(var a=u*o,g=h[a],l=0;l<o;++l){var c=h[a+l];g=g&&c}s[u]=g}return r},x.prototype.any=function(n,x){Vp(n,"any"),Ds("any",x,n.rank);for(var t=Ss(n.shape,x),e=t[0],i=t[1],r=Zs(e,n.dtype),o=nr(i),s=this.readSync(r.dataId),h=this.readSync(n.dataId),u=0;u<s.length;++u){for(var a=u*o,g=h[a],l=0;l<o;++l){var c=h[a+l];g=g||c}s[u]=g}return r},x.prototype.squaredDifference=function(n,x){return Vp([n,x],"squaredDifference"),this.broadcastedBinaryOp(n,x,n.dtype,function(n,x){var t=n-x;return t*t})},x.prototype.ceil=function(n){Vp(n,"ceil");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e)t[e]=Math.ceil(x[e]);return this.makeOutput(t,n.shape,"float32")},x.prototype.floor=function(n){Vp(n,"floor");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e)t[e]=Math.floor(x[e]);return this.makeOutput(t,n.shape,"float32")},x.prototype.sign=function(n){Vp(n,"x");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e)x[e]<0?t[e]=-1:x[e]>0?t[e]=1:t[e]=0;return this.makeOutput(t,n.shape,"float32")},x.prototype.isNaN=function(n){Vp(n,"x");for(var x=this.readSync(n.dataId),t=new Uint8Array(x.length),e=0;e<x.length;++e)Number.isNaN(x[e])&&(t[e]=1);return this.makeOutput(t,n.shape,"bool")},x.prototype.isInf=function(n){Vp(n,"x");for(var x=this.readSync(n.dataId),t=new Uint8Array(x.length),e=0;e<x.length;++e)Math.abs(x[e])===1/0&&(t[e]=1);return this.makeOutput(t,n.shape,"bool")},x.prototype.isFinite=function(n){Vp(n,"x");for(var x=this.readSync(n.dataId),t=new Uint8Array(x.length),e=0;e<x.length;++e)Number.isFinite(x[e])&&(t[e]=1);return this.makeOutput(t,n.shape,"bool")},x.prototype.round=function(n){Vp(n,"round");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e){var i=Math.floor(x[e]);x[e]-i<.5?t[e]=Math.floor(x[e]):x[e]-i>.5?t[e]=Math.ceil(x[e]):t[e]=i%2==0?i:i+1}return this.makeOutput(t,n.shape,"float32")},x.prototype.exp=function(n){Vp(n,"exp");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e)t[e]=Math.exp(x[e]);return this.makeOutput(t,n.shape,"float32")},x.prototype.expm1=function(n){Vp(n,"expm1");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e)t[e]=Math.expm1(x[e]);return this.makeOutput(t,n.shape,"float32")},x.prototype.log=function(n){Vp(n,"log");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e){var i=x[e];t[e]=Math.log(i)}return this.makeOutput(t,n.shape,"float32")},x.prototype.log1p=function(n){Vp(n,"log1p");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e){var i=x[e];t[e]=Math.log1p(i)}return this.makeOutput(t,n.shape,"float32")},x.prototype.sqrt=function(n){Vp(n,"sqrt");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e){var i=x[e];t[e]=Math.sqrt(i)}return this.makeOutput(t,n.shape,"float32")},x.prototype.rsqrt=function(n){Vp(n,"rsqrt");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e){var i=x[e];t[e]=1/Math.sqrt(i)}return this.makeOutput(t,n.shape,"float32")},x.prototype.reciprocal=function(n){Vp(n,"reciprocal");for(var x=this.readSync(n.dataId),t=new Float32Array(x.length),e=0;e<x.length;++e)t[e]=1/x[e];return this.makeOutput(t,n.shape,"float32")},x.prototype.linear=function(n){return n},x.prototype.relu=function(n){Vp(n,"relu");for(var x=Zs(n.shape,n.dtype),t=this.readSync(x.dataId),e=this.readSync(n.dataId),i=0;i<e.length;++i)t[i]=Math.max(0,e[i]);return x},x.prototype.relu6=function(n){Vp(n,"relu");for(var x=Zs(n.shape,n.dtype),t=this.readSync(x.dataId),e=this.readSync(n.dataId),i=0;i<e.length;++i)t[i]=Math.min(Math.max(0,e[i]),6);return x},x.prototype.prelu=function(n,x){return Vp([n,x],"prelu"),this.broadcastedBinaryOp(n,x,n.dtype,function(n,x){return n<0?x*n:n})},x.prototype.elu=function(n){Vp(n,"elu");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e){var i=t[e];x[e]=i>=0?i:Math.exp(i)-1}return this.makeOutput(x,n.shape,"float32")},x.prototype.eluDer=function(n,x){Vp([n,x],"eluDer");for(var t=new Float32Array(x.size),e=this.readSync(x.dataId),i=this.readSync(n.dataId),r=0;r<e.length;++r){var o=e[r];t[r]=o>=1?i[r]:i[r]*(o+1)}return this.makeOutput(t,x.shape,"float32")},x.prototype.selu=function(n){Vp(n,"selu");for(var x=bl,t=zl,e=new Float32Array(n.size),i=this.readSync(n.dataId),r=0;r<i.length;++r){var o=i[r];e[r]=o>=0?t*o:x*(Math.exp(o)-1)}return this.makeOutput(e,n.shape,"float32")},x.prototype.clip=function(n,x,t){Vp(n,"clip");for(var e=new Float32Array(n.size),i=this.readSync(n.dataId),r=0;r<i.length;++r){var o=i[r];e[r]=o>t?t:o<x?x:o}return this.makeOutput(e,n.shape,"float32")},x.prototype.abs=function(n){for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.abs(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.complexAbs=function(n){for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<n.size;++e){var i=t[2*e],r=t[2*e+1];x[e]=Math.hypot(i,r)}return this.makeOutput(x,n.shape,"float32")},x.prototype.int=function(n){Vp(n,"int");for(var x=new Int32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=t[e];return this.makeOutput(x,n.shape,"int32")},x.prototype.sigmoid=function(n){Vp(n,"sigmoid");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=1/(1+Math.exp(-t[e]));return this.makeOutput(x,n.shape,"float32")},x.prototype.softplus=function(n){Vp(n,"softplus");for(var x=Math.log(1.1920928955078125e-7)+2,t=new Float32Array(n.size),e=this.readSync(n.dataId),i=0;i<e.length;++i){var r=e[i]>-x,o=e[i]<x,s=Math.exp(e[i]),h=void 0;h=o?s:r?e[i]:Math.log(1+s),t[i]=h}return this.makeOutput(t,n.shape,"float32")},x.prototype.sin=function(n){Vp(n,"sin");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.sin(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.cos=function(n){Vp(n,"cos");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.cos(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.tan=function(n){Vp(n,"tan");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.tan(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.asin=function(n){Vp(n,"asin");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.asin(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.acos=function(n){Vp(n,"acos");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.acos(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.atan=function(n){Vp(n,"atan");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.atan(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.atan2=function(n,x){return Vp([n,x],"atan2"),this.broadcastedBinaryOp(n,x,n.dtype,function(n,x){return Math.atan2(n,x)})},x.prototype.sinh=function(n){Vp(n,"sinh");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.sinh(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.cosh=function(n){Vp(n,"cosh");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.cosh(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.tanh=function(n){Vp(n,"tanh");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=er(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.asinh=function(n){Vp(n,"asinh");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.asinh(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.acosh=function(n){Vp(n,"acosh");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.acosh(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.atanh=function(n){Vp(n,"atanh");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e)x[e]=Math.atanh(t[e]);return this.makeOutput(x,n.shape,"float32")},x.prototype.erf=function(n){Vp(n,"erf");for(var x=new Float32Array(n.size),t=this.readSync(n.dataId),e=0;e<t.length;++e){var i=Math.sign(t[e]),r=Math.abs(t[e]),o=1/(1+.3275911*r);x[e]=i*(1-((((1.061405429*o-1.453152027)*o+1.421413741)*o-.284496736)*o+.254829592)*o*Math.exp(-r*r))}return this.makeOutput(x,n.shape,"float32")},x.prototype.step=function(n,x){void 0===x&&(x=0),Vp(n,"step");for(var t=new Float32Array(n.size),e=this.readSync(n.dataId),i=0;i<e.length;++i){var r=e[i];isNaN(r)?t[i]=NaN:t[i]=r>0?1:x}return this.makeOutput(t,n.shape,"float32")},x.prototype.fusedConv2d=function(n){var x=n.input,t=n.filter,e=n.convInfo,i=n.bias,r=n.activation,o=n.preluActivationWeights,s=this.conv2d(x,t,e);return i&&(s=this.add(s,i)),r&&(s=Wp(this,s,r,o)),s},x.prototype.conv2d=function(n,x,t){Vp([n,x],"conv2d");for(var e=t.filterHeight,i=t.filterWidth,r=t.dilationHeight,o=t.dilationWidth,s=t.padInfo.left,h=t.padInfo.top,u="channelsLast"===t.dataFormat,a=jh(t.outShape,n.dtype),g=n.strides[0],l=u?n.strides[1]:n.strides[2],c=u?n.strides[2]:1,d=u?1:n.strides[1],f=a.strides[0],p=u?a.strides[1]:a.strides[2],y=u?a.strides[2]:1,m=u?1:a.strides[1],b=this.readSync(n.dataId),z=this.readSync(x.dataId),v=a.values,j=0;j<t.batchSize;++j)for(var w=j*g,k=j*f,q=0;q<t.outHeight;++q)for(var C=k+q*p,A=q*t.strideHeight-h,E=0;E<e;E++){var S=A+E*r;if(!(S<0||S>=t.inHeight))for(var I=E*x.strides[0],D=w+S*l,O=0;O<t.outWidth;++O)for(var _=C+O*y,T=O*t.strideWidth-s,R=0;R<i;R++){var B=T+R*o;if(!(B<0||B>=t.inWidth))for(var M=D+B*c,N=I+R*x.strides[1],F=0;F<t.inChannels;++F){for(var P=b[M+F*d],L=0;L<t.outChannels;++L)v[_+L*m]+=P*z[N+L];N+=t.outChannels}}}return a.toTensor()},x.prototype.conv3d=function(n,x,t){for(var e=t.filterDepth,i=t.filterHeight,r=t.filterWidth,o=t.dilationDepth,s=t.dilationHeight,h=t.dilationWidth,u=t.padInfo.front,a=t.padInfo.left,g=t.padInfo.top,l=jh(t.outShape,n.dtype),c=this.readSync(n.dataId),d=this.readSync(x.dataId),f=l.values,p=0;p<t.batchSize;++p)for(var y=p*n.strides[0],m=p*l.strides[0],b=0;b<t.outDepth;++b)for(var z=m+b*l.strides[1],v=b*t.strideDepth-u,j=0;j<e;j++){var w=v+j*o;if(!(w<0||w>=t.inDepth))for(var k=j*x.strides[0],q=y+w*n.strides[1],C=0;C<t.outHeight;++C)for(var A=z+C*l.strides[2],E=C*t.strideHeight-g,S=0;S<i;S++){var I=E+S*s;if(!(I<0||I>=t.inHeight))for(var D=k+S*x.strides[1],O=q+I*n.strides[2],_=0;_<t.outWidth;++_)for(var T=A+_*t.outChannels,R=_*t.strideWidth-a,B=0;B<r;B++){var M=R+B*h;if(!(M<0||M>=t.inWidth))for(var N=D+B*x.strides[2],F=O+M*t.inChannels,P=N,L=0;L<t.inChannels;++L){for(var H=c[F+L],U=0;U<t.outChannels;++U)f[T+U]+=H*d[P+U];P+=t.outChannels}}}}return l.toTensor()},x.prototype.conv2dDerInput=function(n,x,t){Vp([n,x],"conv2dDerInput");for(var e=jh(t.inShape,"float32"),i=e.values,r=this.readSync(n.dataId),o=this.readSync(x.dataId),s=x.strides,h=s[0],u=s[1],a=s[2],g=t.batchSize,l=t.filterHeight,c=t.filterWidth,d=t.inChannels,f=t.inHeight,p=t.inWidth,y=t.outChannels,m=t.outHeight,b=t.outWidth,z=t.strideHeight,v=t.strideWidth,j=t.dataFormat,w=l-1-t.padInfo.top,k=c-1-t.padInfo.left,q="channelsLast"===j,C=e.strides[0],A=q?e.strides[1]:e.strides[2],E=q?e.strides[2]:1,S=q?1:e.strides[1],I=n.strides[0],D=q?n.strides[1]:n.strides[2],O=q?n.strides[2]:1,_=q?1:n.strides[1],T=0;T<g;++T)for(var R=0;R<d;++R)for(var B=0;B<f;++B)for(var M=B-w,N=Math.max(0,Math.ceil(M/z)),F=Math.min(m,(l+M)/z),P=0;P<p;++P){for(var L=P-k,H=Math.max(0,Math.ceil(L/v)),U=Math.min(b,(c+L)/v),V=0,W=N;W<F;++W)for(var Q=W*z-M,G=H;G<U;++G)for(var K=I*T+D*W+O*G,Y=h*(l-1-Q)+u*(c-1-(G*v-L))+a*R,J=0;J<y;++J)V+=r[K+_*J]*o[Y+J];i[C*T+A*B+E*P+S*R]=V}return e.toTensor()},x.prototype.conv3dDerInput=function(n,x,t){for(var e=jh(t.inShape,"float32"),i=e.values,r=e.strides,o=r[0],s=r[1],h=r[2],u=r[3],a=this.readSync(n.dataId),g=n.strides,l=g[0],c=g[1],d=g[2],f=g[3],p=this.readSync(x.dataId),y=x.strides,m=y[0],b=y[1],z=y[2],v=y[3],j=t.batchSize,w=t.filterDepth,k=t.filterHeight,q=t.filterWidth,C=t.inChannels,A=t.inDepth,E=t.inHeight,S=t.inWidth,I=t.outChannels,D=t.outDepth,O=t.outHeight,_=t.outWidth,T=t.strideDepth,R=t.strideHeight,B=t.strideWidth,M=w-1-t.padInfo.front,N=k-1-t.padInfo.top,F=q-1-t.padInfo.left,P=0;P<j;++P)for(var L=0;L<C;++L)for(var H=0;H<A;++H)for(var U=H-M,V=Math.max(0,Math.ceil(U/T)),W=Math.min(D,(w+U)/T),Q=0;Q<E;++Q)for(var G=Q-N,K=Math.max(0,Math.ceil(G/R)),Y=Math.min(O,(k+G)/R),J=0;J<S;++J){for(var X=J-F,Z=Math.max(0,Math.ceil(X/B)),$=Math.min(_,(q+X)/B),nn=0,xn=V;xn<W;++xn)for(var tn=xn*T-U,en=K;en<Y;++en)for(var rn=en*R-G,on=Z;on<$;++on)for(var sn=l*P+c*xn+d*en+f*on,hn=m*(w-1-tn)+b*(k-1-rn)+z*(q-1-(on*B-X))+v*L,un=0;un<I;++un)nn+=a[sn+un]*p[hn+un];i[o*P+s*H+h*Q+u*J+L]=nn}return e.toTensor()},x.prototype.conv2dDerFilter=function(n,x,t){Vp([n,x],"conv2dDerFilter");for(var e=t.strideHeight,i=t.strideWidth,r=t.filterHeight,o=t.filterWidth,s="channelsLast"===t.dataFormat,h=jh(t.filterShape,"float32"),u=t.padInfo.left,a=t.padInfo.top,g=this.bufferSync(n),l=this.bufferSync(x),c=0;c<r;++c)for(var d=Math.max(0,Math.ceil((a-c)/e)),f=Math.min(t.outHeight,(t.inHeight+a-c)/e),p=0;p<o;++p)for(var y=Math.max(0,Math.ceil((u-p)/i)),m=Math.min(t.outWidth,(t.inWidth+u-p)/i),b=0;b<t.inChannels;++b)for(var z=0;z<t.outChannels;++z){for(var v=0,j=0;j<t.batchSize;++j)for(var w=d;w<f;++w)for(var k=c+w*e-a,q=y;q<m;++q){var C=p+q*i-u;v+=s?g.get(j,k,C,b)*l.get(j,w,q,z):g.get(j,b,k,C)*l.get(j,z,w,q)}h.set(v,c,p,b,z)}return h.toTensor()},x.prototype.conv3dDerFilter=function(n,x,t){for(var e=t.strideDepth,i=t.strideHeight,r=t.strideWidth,o=t.filterDepth,s=t.filterHeight,h=t.filterWidth,u=jh(t.filterShape,"float32"),a=u.values,g=u.strides,l=g[0],c=g[1],d=g[2],f=g[3],p=this.readSync(x.dataId),y=x.strides,m=y[0],b=y[1],z=y[2],v=y[3],j=this.readSync(n.dataId),w=n.strides,k=w[0],q=w[1],C=w[2],A=w[3],E=t.padInfo.front,S=t.padInfo.left,I=t.padInfo.top,D=0;D<o;++D)for(var O=Math.max(0,Math.ceil((E-D)/e)),_=Math.min(t.outDepth,(t.inDepth+E-D)/e),T=D*l,R=0;R<s;++R)for(var B=Math.max(0,Math.ceil((I-R)/i)),M=Math.min(t.outHeight,(t.inHeight+I-R)/i),N=R*c+T,F=0;F<h;++F)for(var P=Math.max(0,Math.ceil((S-F)/r)),L=Math.min(t.outWidth,(t.inWidth+S-F)/r),H=F*d+N,U=0;U<t.inChannels;++U)for(var V=U*f+H,W=0;W<t.outChannels;++W){for(var Q=0,G=0;G<t.batchSize;++G)for(var K=G*k,Y=G*m,J=O;J<_;++J)for(var X=(D+J*e-E)*q+K,Z=J*b+Y,$=B;$<M;++$)for(var nn=(R+$*i-I)*C+X,xn=$*z+Z,tn=P;tn<L;++tn){var en=tn*v+xn;Q+=j[(F+tn*r-S)*A+nn+U]*p[en+W]}a[V+W]=Q}return u.toTensor()},x.prototype.fusedDepthwiseConv2D=function(n){var x=n.input,t=n.filter,e=n.convInfo,i=n.bias,r=n.activation,o=n.preluActivationWeights,s=this.depthwiseConv2D(x,t,e);return i&&(s=this.add(s,i)),r&&(s=Wp(this,s,r,o)),s},x.prototype.depthwiseConv2D=function(n,x,t){Vp([n,x],"depthwiseConv2D");for(var e=t.filterHeight,i=t.filterWidth,r=t.dilationHeight,o=t.dilationWidth,s=t.padInfo.left,h=t.padInfo.top,u=t.outChannels/t.inChannels,a=jh(t.outShape,n.dtype),g=this.readSync(n.dataId),l=this.readSync(x.dataId),c=a.values,d=0;d<t.batchSize;++d)for(var f=d*n.strides[0],p=d*a.strides[0],y=0;y<t.outHeight;++y)for(var m=p+y*a.strides[1],b=y*t.strideHeight-s,z=0;z<e;++z){var v=b+z*r;if(!(v<0||v>=t.inHeight))for(var j=z*x.strides[0],w=f+v*n.strides[1],k=0;k<t.outWidth;++k)for(var q=m+k*a.strides[2],C=k*t.strideWidth-h,A=0;A<i;++A){var E=C+A*o;if(!(E<0||E>=t.inWidth))for(var S=j+A*x.strides[1],I=w+E*t.inChannels,D=q,O=S,_=0;_<t.inChannels;++_){for(var T=g[I+_],R=0;R<u;++R)c[D+R]+=T*l[O+R];D+=u,O+=u}}}return a.toTensor()},x.prototype.depthwiseConv2DDerInput=function(n,x,t){Vp([n,x],"depthwiseConv2DDerInput");for(var e=jh(t.inShape,"float32"),i=e.values,r=e.strides,o=r[0],s=r[1],h=r[2],u=this.readSync(n.dataId),a=n.strides,g=a[0],l=a[1],c=a[2],d=this.readSync(x.dataId),f=x.strides,p=f[0],y=f[1],m=f[2],b=t.batchSize,z=t.filterHeight,v=t.filterWidth,j=t.inChannels,w=t.inHeight,k=t.inWidth,q=t.outChannels,C=t.outHeight,A=t.outWidth,E=t.strideHeight,S=t.strideWidth,I=z-1-t.padInfo.top,D=v-1-t.padInfo.left,O=q/j,_=0;_<b;++_)for(var T=0;T<j;++T)for(var R=0;R<w;++R)for(var B=R-I,M=Math.max(0,Math.ceil(B/E)),N=Math.min(C,(z+B)/E),F=0;F<k;++F){for(var P=F-D,L=Math.max(0,Math.ceil(P/S)),H=Math.min(A,(v+P)/S),U=0,V=M;V<N;++V)for(var W=V*E-B,Q=L;Q<H;++Q)for(var G=g*_+l*V+c*Q,K=p*(z-1-W)+y*(v-1-(Q*S-P))+m*T,Y=0;Y<O;++Y)U+=u[G+(T*O+Y)]*d[K+Y];i[o*_+s*R+h*F+T]=U}return e.toTensor()},x.prototype.depthwiseConv2DDerFilter=function(n,x,t){Vp([n,x],"depthwiseConv2DDerFilter");for(var e=t.strideHeight,i=t.strideWidth,r=t.filterHeight,o=t.filterWidth,s=jh(t.filterShape,"float32"),h=t.padInfo.left,u=t.padInfo.top,a=t.outChannels/t.inChannels,g=this.bufferSync(n),l=this.bufferSync(x),c=0;c<r;++c)for(var d=Math.max(0,Math.ceil((u-c)/e)),f=Math.min(t.outHeight,(t.inHeight+u-c)/e),p=0;p<o;++p)for(var y=Math.max(0,Math.ceil((h-p)/i)),m=Math.min(t.outWidth,(t.inWidth+h-p)/i),b=0;b<t.outChannels;++b){for(var z=Math.trunc(b/a),v=b%a,j=0,w=0;w<t.batchSize;++w)for(var k=d;k<f;++k)for(var q=c+k*e-u,C=y;C<m;++C){var A=p+C*i-h;j+=g.get(w,q,A,z)*l.get(w,k,C,b)}s.set(j,c,p,z,v)}return s.toTensor()},x.prototype.tile=function(n,x){return Vp(n,"tile"),$u(this.bufferSync(n),x)},x.prototype.pad=function(n,x,t){Vp(n,"pad");var e=x.map(function(x,t){return x[0]+n.shape[t]+x[1]}),i=x.map(function(n){return n[0]}),r=this.bufferSync(n),o=jh(e,n.dtype);0!==t&&o.values.fill(t);for(var s=0;s<n.size;s++){var h=r.indexToLoc(s),u=h.map(function(n,x){return n+i[x]});o.set.apply(o,[r.get.apply(r,h)].concat(u))}return o.toTensor()},x.prototype.transpose=function(n,x){Vp(n,"transpose");for(var t=new Array(n.rank),e=0;e<t.length;e++)t[e]=n.shape[x[e]];var i=this.readSync(n.dataId),r=jh(t,n.dtype),o=this.bufferSync(n);for(e=0;e<n.size;++e){for(var s=o.indexToLoc(e),h=new Array(s.length),u=0;u<h.length;u++)h[u]=s[x[u]];var a=r.locToIndex(h);r.values[a]=i[e]}return r.toTensor()},x.prototype.gather=function(n,x,t){Vp([n,x],"gather");var e=n.shape.slice(),i=this.readSync(x.dataId);e[t]=i.length;for(var r=jh(e,n.dtype),o=this.bufferSync(n),s=0;s<r.size;++s){var h=r.indexToLoc(s),u=h.slice();u[t]=i[h[t]];var a=o.locToIndex(u);r.values[s]=o.values[a]}return r.toTensor()},x.prototype.batchToSpaceND=function(n,x,t){Vp([n],"batchToSpaceND");var e=x.reduce(function(n,x){return n*x}),i=Xh(n.shape,x,e),r=Zh(i.length,x.length),o=$h(n.shape,x,e),s=nu(t,x.length),h=xu(o,t,x.length);return n.reshape(i).transpose(r).reshape(o).slice(s,h)},x.prototype.spaceToBatchND=function(n,x,t){Vp([n],"spaceToBatchND");var e=x.reduce(function(n,x){return n*x}),i=[[0,0]];i.push.apply(i,t);for(var r=1+x.length;r<n.shape.length;++r)i.push([0,0]);var o=n.pad(i),s=Xh(o.shape,x,e,!1),h=Zh(s.length,x.length,!1),u=$h(o.shape,x,e,!1);return o.reshape(s).transpose(h).reshape(u)},x.prototype.pool=function(n,x,t){Vp(n,"pool");for(var e=x.strideHeight,i=x.strideWidth,r=x.dilationHeight,o=x.dilationWidth,s=x.effectiveFilterHeight,h=x.effectiveFilterWidth,u=x.padInfo.top,a=x.padInfo.left,g="max"===t?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,l=this.readSync(n.dataId),c=jh(x.outShape,n.dtype),d=c.values,f=x.outShape[1]*x.outShape[2]*x.outShape[3],p=x.outShape[2]*x.outShape[3],y=x.outShape[3],m=0;m<x.batchSize;++m)for(var b=m*f,z=m*n.strides[0],v=0;v<x.inChannels;++v)for(var j=0;j<x.outHeight;++j)for(var w=j*e-u,k=Math.max(0,w),q=Math.min(x.inHeight,s+w),C=b+j*p,A=0;A<x.outWidth;++A){for(var E=A*i-a,S=Math.max(0,E),I=Math.min(x.inWidth,h+E),D=g,O=0,_=0,T=k;T<q;T+=r){for(var R=z+T*n.strides[1],B=S;B<I;B+=o){var M=l[R+B*n.strides[2]+v];"max"===t&&M>D?D=M:"avg"===t&&(O+=M,_++)}if(isNaN(D))break}d[C+A*y+v]="avg"===t?O/_:D}return c.toTensor()},x.prototype.maxPool=function(n,x){return this.pool(n,x,"max")},x.prototype.maxPoolPositions=function(n,x){for(var t=jh(x.outShape,"int32"),e=x.strideHeight,i=x.strideWidth,r=x.dilationHeight,o=x.dilationWidth,s=x.effectiveFilterHeight,h=x.effectiveFilterWidth,u=x.padInfo.top,a=x.padInfo.left,g=this.bufferSync(n),l=0;l<x.batchSize;++l)for(var c=0;c<x.inChannels;++c)for(var d=0;d<x.outHeight;++d){for(var f=d*e-u,p=f;p<0;)p+=r;for(var y=Math.min(x.inHeight,s+f),m=0;m<x.outWidth;++m){for(var b=m*i-a,z=b;z<0;)z+=o;for(var v=Math.min(x.inWidth,h+b),j=Number.NEGATIVE_INFINITY,w=-1,k=p;k<y;k+=r)for(var q=k-f,C=z;C<v;C+=o){var A=C-b,E=g.get(l,k,C,c);E>j&&(j=E,w=q*h+A)}t.set(w,l,d,m,c)}}return t.toTensor()},x.prototype.maxPoolBackprop=function(n,x,t,e){Vp([x,t],"maxPoolBackprop");for(var i=this.maxPoolPositions(x,e),r=e.strideHeight,o=e.strideWidth,s=e.dilationHeight,h=e.dilationWidth,u=e.effectiveFilterHeight,a=e.effectiveFilterWidth,g=a-1-e.padInfo.left,l=u-1-e.padInfo.top,c=jh(x.shape,"float32"),d=this.bufferSync(i),f=this.bufferSync(n),p=0;p<e.batchSize;++p)for(var y=0;y<e.inChannels;++y)for(var m=0;m<e.inHeight;++m)for(var b=0;b<e.inWidth;++b){for(var z=m-l,v=b-g,j=0,w=0;w<u;w+=s){var k=(z+w)/r;if(!(k<0||k>=e.outHeight||Math.floor(k)!==k))for(var q=0;q<a;q+=h){var C=(v+q)/o;if(!(C<0||C>=e.outWidth||Math.floor(C)!==C)){var A=u*a-1-d.get(p,k,C,y)===w*a+q?1:0;0!==A&&(j+=f.get(p,k,C,y)*A)}}}c.set(j,p,m,b,y)}return c.toTensor()},x.prototype.avgPoolBackprop=function(n,x,t){Vp([n,x],"avgPoolBackprop");for(var e=t.strideHeight,i=t.strideWidth,r=t.filterHeight,o=t.filterWidth,s=t.dilationHeight,h=t.dilationWidth,u=t.effectiveFilterHeight,a=t.effectiveFilterWidth,g=a-1-t.padInfo.left,l=u-1-t.padInfo.top,c=jh(x.shape,"float32"),d=1/(r*o),f=this.bufferSync(n),p=0;p<t.batchSize;++p)for(var y=0;y<t.inChannels;++y)for(var m=0;m<t.inHeight;++m)for(var b=0;b<t.inWidth;++b){for(var z=m-l,v=b-g,j=0,w=0;w<u;w+=s){var k=(z+w)/e;if(!(k<0||k>=t.outHeight||Math.floor(k)!==k))for(var q=0;q<a;q+=h){var C=(v+q)/i;C<0||C>=t.outWidth||Math.floor(C)!==C||(j+=f.get(p,k,C,y))}}c.set(j*d,p,m,b,y)}return c.toTensor()},x.prototype.pool3d=function(n,x,t){Vp(n,"pool3d");for(var e=x.strideDepth,i=x.strideHeight,r=x.strideWidth,o=x.dilationDepth,s=x.dilationHeight,h=x.dilationWidth,u=x.effectiveFilterDepth,a=x.effectiveFilterHeight,g=x.effectiveFilterWidth,l=x.padInfo.front,c=x.padInfo.top,d=x.padInfo.left,f="max"===t?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,p=this.readSync(n.dataId),y=jh(x.outShape,n.dtype),m=y.values,b=x.outShape[1]*x.outShape[2]*x.outShape[3]*x.outShape[4],z=x.outShape[2]*x.outShape[3]*x.outShape[4],v=x.outShape[3]*x.outShape[4],j=x.outShape[4],w=0;w<x.batchSize;++w)for(var k=w*b,q=w*n.strides[0],C=0;C<x.inChannels;++C)for(var A=0;A<x.outDepth;++A){for(var E=A*e-l,S=E;S<0;)S+=o;for(var I=Math.min(x.inDepth,u+E),D=k+A*z,O=0;O<x.outHeight;++O){for(var _=O*i-c,T=_;T<0;)T+=s;for(var R=Math.min(x.inHeight,a+_),B=D+O*v,M=0;M<x.outWidth;++M){for(var N=M*r-d,F=N;F<0;)F+=h;for(var P=Math.min(x.inWidth,g+N),L=B+M*j,H=f,U=0,V=0,W=S;W<I;W+=o){for(var Q=q+W*n.strides[1],G=T;G<R;G+=s){for(var K=Q+G*n.strides[2],Y=F;Y<P;Y+=h){var J=p[K+Y*n.strides[3]+C];if("max"===t&&J>H?H=J:"avg"===t&&(U+=J,V++),isNaN(H))break}if(isNaN(H))break}if(isNaN(H))break}m[L+C]="avg"===t?U/V:H}}}return y.toTensor()},x.prototype.avgPool3d=function(n,x){return Vp(n,"avgPool3d"),this.pool3d(n,x,"avg").toFloat()},x.prototype.avgPool3dBackprop=function(n,x,t){Vp([n,x],"avgPool3dBackprop");for(var e=t.strideDepth,i=t.strideHeight,r=t.strideWidth,o=t.filterDepth,s=t.filterHeight,h=t.filterWidth,u=t.dilationDepth,a=t.dilationHeight,g=t.dilationWidth,l=t.effectiveFilterDepth,c=t.effectiveFilterHeight,d=t.effectiveFilterWidth,f=l-1-t.padInfo.front,p=d-1-t.padInfo.left,y=c-1-t.padInfo.top,m=jh(x.shape,"float32"),b=1/(o*s*h),z=this.bufferSync(n),v=0;v<t.batchSize;++v)for(var j=0;j<t.inChannels;++j)for(var w=0;w<t.inDepth;++w)for(var k=0;k<t.inHeight;++k)for(var q=0;q<t.inWidth;++q){for(var C=w-f,A=k-y,E=q-p,S=0,I=0;I<l;I+=u){var D=(C+I)/e;if(!(D<0||D>=t.outDepth||Math.floor(D)!==D))for(var O=0;O<c;O+=a){var _=(A+O)/i;if(!(_<0||_>=t.outHeight||Math.floor(_)!==_))for(var T=0;T<d;T+=g){var R=(E+T)/r;R<0||R>=t.outWidth||Math.floor(R)!==R||(S+=z.get(v,D,_,R,j))}}}m.set(S*b,v,w,k,q,j)}return m.toTensor()},x.prototype.maxPool3d=function(n,x){return Vp(n,"maxPool3d"),this.pool3d(n,x,"max").toFloat()},x.prototype.maxPool3dPositions=function(n,x){for(var t=jh(x.outShape,"int32"),e=x.strideDepth,i=x.strideHeight,r=x.strideWidth,o=x.dilationDepth,s=x.dilationHeight,h=x.dilationWidth,u=x.effectiveFilterDepth,a=x.effectiveFilterHeight,g=x.effectiveFilterWidth,l=x.padInfo.front,c=x.padInfo.top,d=x.padInfo.left,f=this.bufferSync(n),p=0;p<x.batchSize;++p)for(var y=0;y<x.inChannels;++y)for(var m=0;m<x.outDepth;++m){for(var b=m*e-l,z=b;z<0;)z+=o;for(var v=Math.min(x.inDepth,u+b),j=0;j<x.outHeight;++j){for(var w=j*i-c,k=w;k<0;)k+=s;for(var q=Math.min(x.inHeight,a+w),C=0;C<x.outWidth;++C){for(var A=C*r-d,E=A;E<0;)E+=h;for(var S=Math.min(x.inWidth,g+A),I=Number.NEGATIVE_INFINITY,D=-1,O=z;O<v;O+=o)for(var _=O-b,T=k;T<q;T+=s)for(var R=T-w,B=E;B<S;B+=h){var M=B-A,N=f.get(p,O,T,B,y);N>=I&&(I=N,D=_*a*g+R*a+M)}t.set(D,p,m,j,C,y)}}}return t.toTensor()},x.prototype.maxPool3dBackprop=function(n,x,t,e){Vp([x,t],"maxPool3dBackprop");for(var i=this.maxPool3dPositions(x,e),r=e.strideDepth,o=e.strideHeight,s=e.strideWidth,h=e.dilationDepth,u=e.dilationHeight,a=e.dilationWidth,g=e.effectiveFilterDepth,l=e.effectiveFilterHeight,c=e.effectiveFilterWidth,d=g-1-e.padInfo.front,f=c-1-e.padInfo.left,p=l-1-e.padInfo.top,y=jh(x.shape,"float32"),m=this.bufferSync(i),b=this.bufferSync(n),z=0;z<e.batchSize;++z)for(var v=0;v<e.inChannels;++v)for(var j=0;j<e.inDepth;++j)for(var w=0;w<e.inHeight;++w)for(var k=0;k<e.inWidth;++k){for(var q=j-d,C=w-p,A=k-f,E=0,S=0;S<g;S+=h){var I=(q+S)/r;if(!(I<0||I>=e.outDepth||Math.floor(I)!==I))for(var D=0;D<l;D+=u){var O=(C+D)/o;if(!(O<0||O>=e.outHeight||Math.floor(O)!==O))for(var _=0;_<c;_+=a){var T=(A+_)/s;if(!(T<0||T>=e.outWidth||Math.floor(T)!==T)){var R=g*l*c-1-m.get(z,I,O,T,v)===S*l*c+D*c+_?1:0;0!==R&&(E+=b.get(z,I,O,T,v)*R)}}}}y.set(E,z,j,w,k,v)}return y.toTensor()},x.prototype.cast=function(n,x){return Mu(n,x,this)},x.prototype.reshape=function(n,x){return Nu(n,x)},x.prototype.avgPool=function(n,x){return Vp(n,"avgPool"),this.pool(n,x,"avg").toFloat()},x.prototype.resizeBilinear=function(n,x,t,e){Vp(n,"resizeBilinear");for(var i=n.shape,r=i[0],o=i[1],s=i[2],h=i[3],u=this.readSync(n.dataId),a=new Float32Array(nr([r,x,t,h])),g=[e&&x>1?o-1:o,e&&t>1?s-1:s],l=[e&&x>1?x-1:x,e&&t>1?t-1:t],c=0,d=g[0]/l[0],f=g[1]/l[1],p=0;p<r;p++)for(var y=0;y<x;y++)for(var m=d*y,b=Math.floor(m),z=m-b,v=Math.min(o-1,Math.ceil(m)),j=p*n.strides[0]+b*n.strides[1],w=p*n.strides[0]+v*n.strides[1],k=0;k<t;k++)for(var q=f*k,C=Math.floor(q),A=q-C,E=Math.min(s-1,Math.ceil(q)),S=j+C*n.strides[2],I=w+C*n.strides[2],D=j+E*n.strides[2],O=w+E*n.strides[2],_=0;_<h;_++){var T=u[S+_],R=u[I+_],B=T+(u[D+_]-T)*A,M=B+(R+(u[O+_]-R)*A-B)*z;a[c++]=M}return Ls(a,[r,x,t,h])},x.prototype.resizeBilinearBackprop=function(n,x,t){Vp([n,x],"resizeBilinearBackprop");for(var e=x.shape,i=e[0],r=e[1],o=e[2],s=e[3],h=n.shape,u=h[1],a=h[2],g=new Float32Array(i*r*o*s),l=[t&&u>1?r-1:r,t&&a>1?o-1:o],c=[t&&u>1?u-1:u,t&&a>1?a-1:a],d=l[0]/c[0],f=l[1]/c[1],p=this.readSync(n.dataId),y=0,m=0;m<i;m++)for(var b=m*x.strides[0],z=0;z<u;z++)for(var v=z*d,j=Math.floor(v),w=Math.min(Math.ceil(v),r-1),k=b+j*x.strides[1],q=b+w*x.strides[1],C=v-j,A=1-C,E=0;E<a;E++)for(var S=E*f,I=Math.floor(S),D=Math.min(Math.ceil(S),o-1),O=S-I,_=1-O,T=k+I*x.strides[2],R=k+D*x.strides[2],B=q+I*x.strides[2],M=q+D*x.strides[2],N=A*_,F=A*O,P=C*_,L=C*O,H=0;H<s;H++){var U=p[y++];g[T+H]+=U*N,g[R+H]+=U*F,g[B+H]+=U*P,g[M+H]+=U*L}return Gs(g,[i,o,r,s],x.dtype)},x.prototype.resizeNearestNeighbor=function(n,x,t,e){Vp(n,"resizeNearestNeighbor");for(var i=n.shape,r=i[0],o=i[1],s=i[2],h=i[3],u=this.readSync(n.dataId),a=new Float32Array(r*x*t*h),g=[e&&x>1?o-1:o,e&&t>1?s-1:s],l=[e&&x>1?x-1:x,e&&t>1?t-1:t],c=g[0]/l[0],d=g[1]/l[1],f=0,p=0;p<r;p++)for(var y=p*n.strides[0],m=0;m<x;m++)for(var b=c*m,z=y+Math.min(o-1,e?Math.round(b):Math.floor(b))*n.strides[1],v=0;v<t;v++)for(var j=d*v,w=z+Math.min(s-1,e?Math.round(j):Math.floor(j))*n.strides[2],k=0;k<h;k++){var q=u[w+k];a[f++]=q}return Ls(a,[r,x,t,h],n.dtype)},x.prototype.resizeNearestNeighborBackprop=function(n,x,t){Vp([n,x],"resizeNearestNeighborBackprop");for(var e=x.shape,i=e[0],r=e[1],o=e[2],s=e[3],h=n.shape,u=h[1],a=h[2],g=new Float32Array(i*r*o*s),l=this.readSync(n.dataId),c=[t&&u>1?r-1:r,t&&a>1?o-1:o],d=[t&&u>1?u-1:u,t&&a>1?a-1:a],f=c[0]/d[0],p=c[1]/d[1],y=1/f,m=1/p,b=2*Math.ceil(y)+2,z=2*Math.ceil(m)+2,v=0;v<i;v++)for(var j=v*x.strides[0],w=0;w<r;w++)for(var k=j+w*x.strides[1],q=Math.floor(w*y),C=Math.floor(q-b/2),A=0;A<o;A++)for(var E=k+A*x.strides[2],S=Math.floor(A*m),I=Math.floor(S-z/2),D=0;D<s;D++){for(var O=0,_=0;_<b;_++){var T=_+C;if(!(T<0||T>=u)){var R=j+T*n.strides[1],B=T*f;if(w===Math.min(r-1,t?Math.round(B):Math.floor(B)))for(var M=0;M<z;M++){var N=M+I;if(!(N<0||N>=a)){var F=R+N*n.strides[2],P=N*p;A===Math.min(o-1,t?Math.round(P):Math.floor(P))&&(O+=l[F+D])}}}}g[E+D]=O}return Gs(g,x.shape,x.dtype)},x.prototype.batchNormalization=function(n,x,t,e,i,r){Vp([n,x,t,i,r],"batchNorm");for(var o=this.readSync(n.dataId),s=this.readSync(x.dataId),h=this.readSync(t.dataId),u=i?this.readSync(i.dataId):new Float32Array([1]),a=r?this.readSync(r.dataId):new Float32Array([0]),g=new Float32Array(o.length),l=a.length,c=u.length,d=h.length,f=s.length,p=0,y=0,m=0,b=0,z=0;z<o.length;++z)g[z]=a[p++]+(o[z]-s[y++])*u[m++]/Math.sqrt(h[b++]+e),p>=l&&(p=0),y>=f&&(y=0),m>=c&&(m=0),b>=d&&(b=0);return Gs(g,n.shape)},x.prototype.localResponseNormalization4D=function(n,x,t,e,i){Vp(n,"localResponseNormalization4D");var r=n.shape[3],o=r-1,s=this.readSync(n.dataId),h=n.size,u=new Float32Array(h);function a(n){for(var t=n%r,e=n-t+Math.max(0,t-x),i=n-t+Math.min(t+x,o),h=0;e<=i;e++){var u=s[e];h+=u*u}return h}for(var g=0;g<h;g++){var l=a(g),c=s[g]*Math.pow(t+e*l,-i);u[g]=c}return Gs(u,n.shape)},x.prototype.LRNGrad=function(n,x,t,e,i,r,o){Vp(n,"LRNGrad");for(var s=n.shape[3],h=this.readSync(n.dataId),u=this.readSync(x.dataId),a=this.readSync(t.dataId),g=new Float32Array(n.size),l=n.size,c=0;c<l;c++){for(var d=c%s,f=c-d+Math.max(0,d-e),p=c-d+Math.min(s,d+e+1),y=0,m=f;m<p;m++)y+=Math.pow(u[m],2);for(y=r*y+i,m=f;m<p;m++){var b=-2*r*o*u[m]*a[c]/y;c===m&&(b+=Math.pow(y,-o)),b*=h[c],g[m]+=b}}return Gs(g,n.shape)},x.prototype.multinomial=function(n,x,t,e){Vp(n,"multinomial");for(var i=x?n:yu(n),r=i.shape[0],o=i.shape[1],s=Zs([r,t],"int32"),h=this.readSync(s.dataId),u=this.readSync(i.dataId),a=0;a<r;++a){var g=a*o,l=new Float32Array(o-1);l[0]=u[g];for(var c=1;c<l.length;++c)l[c]=l[c-1]+u[g+c];for(var d=mh(e.toString()),f=a*t,p=0;p<t;++p){var y=d();h[f+p]=l.length;for(var m=0;m<l.length;m++)if(y<l[m]){h[f+p]=m;break}}}return s},x.prototype.oneHot=function(n,x,t,e){Vp(n,"oneHot");var i=new Float32Array(n.size*x);i.fill(e);for(var r=this.readSync(n.dataId),o=0;o<n.size;++o)r[o]>=0&&r[o]<x&&(i[o*x+r[o]]=t);return Ws(i,[n.size,x],"int32")},x.prototype.nonMaxSuppression=function(n,x,t,e,i){return Vp(n,"nonMaxSuppression"),Qu(this.readSync(n.dataId),this.readSync(x.dataId),t,e,i)},x.prototype.fft=function(n){return this.fftBatch(n,!1)},x.prototype.ifft=function(n){return this.fftBatch(n,!0)},x.prototype.fftBatch=function(n,x){for(var t=n.shape[0],e=n.shape[1],i=jh(n.shape,"float32"),r=jh(n.shape,"float32"),o=Fs(n).as2D(t,e),s=Ps(n).as2D(t,e),h=0;h<t;h++)for(var u=o.slice([h,0],[1,e]),a=s.slice([h,0],[1,e]),g=Ns(u,a),l=this.readSync(this.fftImpl(g,x).dataId),c=0;c<e;c++){var d=Lu(l,c);i.values[h*e+c]=d.real,r.values[h*e+c]=d.imag}return Ns(i.toTensor(),r.toTensor()).as2D(t,e)},x.prototype.fftImpl=function(n,x){var t=n.as1D(),e=t.size;if(this.isExponentOf2(e)){var i=this.fftRadix2(t,e,x).as2D(n.shape[0],n.shape[1]);return x&&(i=Ns(Fs(i).div(Us(e)),Ps(i).div(Us(e)))),i}var r=this.readSync(n.dataId),o=function(n){for(var x=new Float32Array(n.length/2),t=new Float32Array(n.length/2),e=0;e<n.length;e+=2)x[e/2]=n[e],t[e/2]=n[e+1];return{real:x,imag:t}}(this.fourierTransformByMatmul(r,e,x));return Ns(o.real,o.imag).as2D(n.shape[0],n.shape[1])},x.prototype.isExponentOf2=function(n){return 0==(n&n-1)},x.prototype.fftRadix2=function(n,x,t){if(1===x)return n;var e=this.readSync(n.dataId),i=x/2,r=function(n){for(var x=Math.ceil(n.length/4),t=new Float32Array(x),e=new Float32Array(x),i=0;i<n.length;i+=4)t[Math.floor(i/4)]=n[i],e[Math.floor(i/4)]=n[i+1];return{real:t,imag:e}}(e),o=Ns(r.real,r.imag).as1D(),s=function(n){for(var x=Math.floor(n.length/4),t=new Float32Array(x),e=new Float32Array(x),i=2;i<n.length;i+=4)t[Math.floor(i/4)]=n[i],e[Math.floor(i/4)]=n[i+1];return{real:t,imag:e}}(e),h=Ns(s.real,s.imag).as1D();o=this.fftRadix2(o,i,t),h=this.fftRadix2(h,i,t);var u=function(n,x){for(var t=new Float32Array(n/2),e=new Float32Array(n/2),i=0;i<Math.ceil(n/2);i++){var r=(x?2:-2)*Math.PI*(i/n);t[i]=Math.cos(r),e[i]=Math.sin(r)}return{real:t,imag:e}}(x,t),a=Ns(u.real,u.imag).mul(h),g=o.add(a),l=o.sub(a),c=Fs(g).concat(Fs(l)),d=Ps(g).concat(Ps(l));return Ns(c,d).as1D()},x.prototype.fourierTransformByMatmul=function(n,x,t){for(var e=new Float32Array(2*x),i=0;i<x;i++){for(var r=0,o=0,s=0;s<x;s++){var h=Uu(i*s,x,t),u=Lu(n,s);r+=u.real*h.real-u.imag*h.imag,o+=u.real*h.imag+u.imag*h.real}t&&(r/=x,o/=x),Hu(e,r,o,i)}return e},x.prototype.depthToSpace=function(n,x,t){Ji("NHWC"===t,function(){return"Only NHWC dataFormat supported on CPU for depthToSpace. Got "+t}),Ji(x>1,function(){return"blockSize should be > 1 for depthToSpace, but was: "+x});for(var e=n.shape[0],i=n.shape[1],r=n.shape[2],o=n.shape[3],s=i*x,h=r*x,u=o/(x*x),a=this.readSync(n.dataId),g=new Float32Array(e*s*h*u),l=0,c=0;c<e;++c)for(var d=0;d<s;++d)for(var f=Math.floor(d/x),p=d%x,y=0;y<h;++y)for(var m=Math.floor(y/x),b=(p*x+y%x)*u,z=0;z<u;++z){var v=z+b+o*(m+r*(f+i*c));g[l++]=a[v]}return Gs(g,[e,s,h,u])},x.prototype.broadcastedBinaryOp=function(n,x,t,e){var i=ku(n.shape,x.shape),r=jh(i,t),o=this.readSync(n.dataId),s=this.readSync(x.dataId),h=ju(n.shape,i),u=ju(x.shape,i),a=r.values;if(h.length+u.length===0)for(var g=0;g<a.length;++g)a[g]=e(o[g%o.length],s[g%s.length]);else{var l=this.bufferSync(n),c=this.bufferSync(x),d=function(t){var i=r.indexToLoc(t),g=i.slice(-n.rank);h.forEach(function(n){return g[n]=0});var d=l.locToIndex(g),f=i.slice(-x.rank);u.forEach(function(n){return f[n]=0});var p=c.locToIndex(f);a[t]=e(o[d],s[p])};for(g=0;g<a.length;++g)d(g)}return r.toTensor()},x.prototype.broadcastedBinaryComplexOp=function(n,x,t){var e=ku(n.shape,x.shape),i=jh(e,"float32"),r=jh(e,"float32"),o=this.readSync(n.dataId),s=this.readSync(x.dataId),h=ju(n.shape,e),u=ju(x.shape,e),a=i.values,g=r.values;if(h.length+u.length===0)for(var l=0;l<a.length;l++){var c=l%o.length,d=l%s.length,f=t(o[2*c],o[2*c+1],s[2*d],s[2*d+1]);a[l]=f.real,g[l]=f.imag}else{var p=this.bufferSync(this.data.get(n.dataId).complexTensors.real),y=this.bufferSync(this.data.get(x.dataId).complexTensors.real),m=function(e){var r=i.indexToLoc(e),l=r.slice(-n.rank);h.forEach(function(n){return l[n]=0});var c=p.locToIndex(l),d=r.slice(-x.rank);u.forEach(function(n){return d[n]=0});var f=y.locToIndex(d),m=t(o[2*c],o[2*c+1],s[2*f],s[2*f+1]);a[e]=m.real,g[e]=m.imag};for(l=0;l<a.length;l++)m(l)}return this.complex(i.toTensor(),r.toTensor())},x.prototype.split=function(n,x,t){return Zu(n,x,t)},x.prototype.dispose=function(){},x.prototype.floatPrecision=function(){return 32},x.prototype.epsilon=function(){return 1e-7},x.prototype.cropAndResize=function(n,x,t,e,i,r){for(var o=n.shape,s=o[0],h=o[1],u=o[2],a=o[3],g=x.shape[0],l=e[0],c=e[1],d=jh([g,l,c,a],"float32"),f=this.readSync(x.dataId),p=this.readSync(t.dataId),y=this.readSync(n.dataId),m=n.strides,b=d.strides,z=0;z<g;z++){var v=4*z,j=f[v],w=f[v+1],k=f[v+2],q=f[v+3],C=p[z];if(!(C>=s))for(var A=l>1?(k-j)*(h-1)/(l-1):0,E=c>1?(q-w)*(u-1)/(c-1):0,S=0;S<l;S++){var I=l>1?j*(h-1)+S*A:.5*(j+k)*(h-1);if(I<0||I>h-1)for(var D=0;D<c;D++)for(var O=0;O<a;O++){var _=O+D*b[2]+S*b[1]+z*b[0];d.values[_]=r}else if("bilinear"===i){var T=Math.floor(I),R=Math.ceil(I),B=I-T;for(D=0;D<c;D++)if((W=c>1?w*(u-1)+D*E:.5*(w+q)*(u-1))<0||W>u-1)for(O=0;O<a;O++)_=O+D*b[2]+S*b[1]+z*b[0],d.values[_]=r;else{var M=Math.floor(W),N=Math.ceil(W),F=W-M;for(O=0;O<a;O++){var P=y[_=O+M*m[2]+T*m[1]+C*m[0]],L=y[_=O+N*m[2]+T*m[1]+C*m[0]],H=y[_=O+M*m[2]+R*m[1]+C*m[0]],U=P+(L-P)*F,V=H+(y[_=O+N*m[2]+R*m[1]+C*m[0]]-H)*F;_=O+D*b[2]+S*b[1]+z*b[0],d.values[_]=U+(V-U)*B}}}else for(D=0;D<c;++D){var W;if((W=c>1?w*(u-1)+D*E:.5*(w+q)*(u-1))<0||W>u-1)for(O=0;O<a;O++)_=O+D*b[2]+S*b[1]+z*b[0],d.values[_]=r;else{var Q=Math.round(W),G=Math.round(I);for(O=0;O<a;O++){var K=O+Q*m[2]+G*m[1]+C*m[0],Y=O+D*b[2]+S*b[1]+z*b[0];d.values[Y]=y[K]}}}}}return d.toTensor()},x.prototype.sparseToDense=function(n,x,t,e){var i=su(0,n,t),r=i.sliceRank,o=i.numUpdates,s=i.sliceSize,h=i.strides,u=i.outputSize;return this.scatter(n,x,t,u,s,o,r,h,e,!1)},x.prototype.gatherND=function(n,x){var t=x.shape,e=t[t.length-1],i=tu(n,x),r=i[0],o=i[1],s=i[2],h=i[3];if(0===o)return Ls([],r,n.dtype);for(var u=new Vr([o,s],n.dtype),a=this.readSync(x.dataId),g=this.readSync(n.dataId),l=0;l<o;l++){for(var c=[],d=0,f=0;f<e;f++){var p=a[l*e+f];d+=p*h[f],c.push(p)}if(d<0||d>=n.size/s)throw new Error("Invalid indices: "+c+" does not index into "+n.shape);for(var y=0;y<s;y++)u.values[l*s+y]=g[d*s+y]}return u.toTensor().reshape(r)},x.prototype.scatterND=function(n,x,t){var e=su(0,n,t),i=e.sliceRank,r=e.numUpdates,o=e.sliceSize,s=e.strides,h=e.outputSize,u=Us(0);return this.scatter(n,x,t,h,o,r,i,s,u,!0)},x.prototype.fill=function(n,x,t){var e=gr(t=t||vr(x),nr(n));return e.fill(x),ao.makeTensor(e,n,t,this)},x.prototype.onesLike=function(n){if("string"===n.dtype)throw new Error("onesLike is not supported for string tensors");return this.fill(n.shape,1,n.dtype)},x.prototype.zerosLike=function(n){var x=gr(n.dtype,nr(n.shape));return this.makeOutput(x,n.shape,n.dtype)},x.prototype.linspace=function(n,x,t){return Fu(n,x,t)},x.prototype.scatter=function(n,x,t,e,i,r,o,s,h,u){var a=[e/i,i],g=this.readSync(n.dataId),l=this.readSync(x.dataId);if(0===e)return Ls([],t,x.dtype);var c=new Vr(a,x.dtype);c.values.fill(this.readSync(h.dataId)[0]);for(var d=0;d<r;d++){for(var f=[],p=0,y=0;y<o;y++){var m=g[d*o+y];f.push(m),p+=m*s[y]}if(p<0||p>=e/i)throw new Error("Invalid indices: "+f+" does not index into "+t);for(var b=0;b<i;b++)u?c.values[p*i+b]+=l[d*i+b]:c.values[p*i+b]=0===x.rank?l[0]:l[d*i+b]}return c.toTensor().reshape(t)},x}(zu);ao.registerBackend("cpu",function(){return new Qp},1);for(var Gp=0,Kp=[{kernelName:"NonMaxSuppressionV5",backendName:"cpu",kernelFunc:function(n){var x=n.inputs,t=n.backend,e=n.attrs,i=x,r=i.boxes,o=i.scores,s=e,h=s.maxOutputSize,u=s.iouThreshold,a=s.scoreThreshold,g=s.softNmsSigma,l=t;Vp(r,"NonMaxSuppressionWithScore");var c=Gu(l.data.get(r.dataId).values,l.data.get(o.dataId).values,h,u,a,g);return[c.selectedIndices,c.selectedScores]}},{kernelName:"Square",backendName:"cpu",kernelFunc:function(n){var x=n.inputs,t=n.backend,e=x.x,i=t;Vp(e,"square");for(var r=i.data.get(e.dataId).values,o=new Float32Array(r.length),s=0;s<r.length;++s){var h=r[s];o[s]=h*h}return{dataId:i.write(o,e.shape,e.dtype),shape:e.shape,dtype:e.dtype}}},{kernelName:nc,backendName:"cpu",kernelFunc:function(n){var x=n.inputs,t=n.backend,e=x,i=e.a,r=e.b,o=t;Vp([i,r],nc);var s=o.data.get(i.dataId).values,h=o.data.get(r.dataId).values,u=function(n,x,t,e,i,r){var o=ku(n,x),s=o.length,h=kr(o),u=ar(i,nr(o)),a=n.length,g=x.length,l=kr(n),c=kr(x),d=ju(n,o),f=ju(x,o);if(d.length+f.length===0)for(var p=0;p<u.length;++p)u[p]=r(t[p%t.length],e[p%e.length]);else{var y=function(n){var x=Tr(n,s,h),i=x.slice(-a);d.forEach(function(n){return i[n]=0});var o=_r(i,a,l),p=x.slice(-g);f.forEach(function(n){return p[n]=0});var y=_r(p,g,c);u[n]=r(t[o],e[y])};for(p=0;p<u.length;++p)y(p)}return[u,o]}(i.shape,r.shape,s,h,i.dtype,function(n,x){var t=n-x;return t*t}),a=u[0],g=u[1];return{dataId:o.write(a,g,i.dtype),shape:g,dtype:i.dtype}}}];Gp<Kp.length;Gp++)Ui(Kp[Gp]);for(var Yp,Jp=function(n){this.variableNames=["A"];var x=sa(),t=n[0],e=n[1];this.outputShape=n,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("+e+".0, "+t+".0);\n\n vec4 values = "+x.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 "},Xp=function(n){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;var x=sa(),t=n[0],e=n[1];this.outputShape=n,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("+e+".0, "+t+".0);\n vec4 values = "+x.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 "+x.output+" = result;\n }\n "},Zp=0,$p=[{kernelName:"FromPixels",backendName:"webgl",kernelFunc:function(n){var x=n.inputs,t=n.backend,e=n.attrs,i=x.pixels,r=e.numChannels,o="undefined"!=typeof HTMLVideoElement&&i instanceof HTMLVideoElement,s="undefined"!=typeof HTMLImageElement&&i instanceof HTMLImageElement,h=o?[i.videoWidth,i.videoHeight]:[i.width,i.height],u=h[0],a=h[1],g=[a,u],l=[a,u,r];(s||o)&&(null==Yp&&(Yp=document.createElement("canvas").getContext("2d")),Yp.canvas.width=u,Yp.canvas.height=a,Yp.drawImage(i,0,0,u,a),i=Yp.canvas);var c=t.makeTensorInfo(g,"int32");t.texData.get(c.dataId).usage=fo.PIXELS,t.gpgpu.uploadPixelDataToTexture(t.getTexture(c.dataId),i);var d=Bi().getBool("WEBGL_PACK")?new Xp(l):new Jp(l),f=t.runWebGLProgram(d,[c],"int32");return t.disposeData(c.dataId),f}},{kernelName:"NonMaxSuppressionV5",backendName:"webgl",kernelFunc:function(n){var x=n.inputs,t=n.backend,e=n.attrs;js("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");var i=x,r=i.boxes,o=i.scores,s=e,h=s.maxOutputSize,u=s.iouThreshold,a=s.scoreThreshold,g=s.softNmsSigma,l=t,c=Gu(l.readSync(r.dataId),l.readSync(o.dataId),h,u,a,g);return[c.selectedIndices,c.selectedScores]}},{kernelName:"Square",backendName:"webgl",kernelFunc:function(n){var x=n.inputs,t=n.backend,e=x.x,i=t,r=new vl(e.shape,"return x * x;");return i.runWebGLProgram(r,[e],e.dtype)}},{kernelName:nc,backendName:"webgl",kernelFunc:function(n){var x=n.inputs,t=n.backend,e=x,i=e.a,r=e.b,o=t,s=Bi().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ma("return (a - b) * (a - b);",i.shape,r.shape):new Ra("return (a - b) * (a - b);",i.shape,r.shape);return o.compileAndRun(s,[i,r])}}];Zp<$p.length;Zp++)Ui($p[Zp]);for(var ny=0,xy=[{kernelName:"Square",gradFunc:function(n,x){var t=x[0];return{x:function(){return n.mul(t.toFloat().mul(2))}}}},{kernelName:nc,gradFunc:function(n,x){var t=x[0],e=x[1],i=Us(2);return{a:function(){return pd(n,pd(i,vd(t,e)))},b:function(){return pd(n,pd(i,vd(e,t)))}}}}];ny<xy.length;ny++)Vi(xy[ny]);var ty=function(){function n(){}return n.prototype.fetch=function(n,x){return fetch(n,x)},n.prototype.now=function(){return performance.now()},n.prototype.encode=function(n,x){if("utf-8"!==x&&"utf8"!==x)throw new Error("Browser's encoder only supports utf-8, but got "+x);return null==this.textEncoder&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(n)},n.prototype.decode=function(n,x){return new TextDecoder(x).decode(n)},n}();Bi().get("IS_BROWSER")&&Bi().setPlatform("browser",new ty);var ey,iy=function(){return e(7318)},ry=function(){function n(){this.util=e(745),this.textEncoder=new this.util.TextEncoder}return n.prototype.fetch=function(n,x){return null!=Bi().global.fetch?Bi().global.fetch(n,x):(null==ey&&(ey=iy()),ey(n,x))},n.prototype.now=function(){var n=process.hrtime();return 1e3*n[0]+n[1]/1e6},n.prototype.encode=function(n,x){if("utf-8"!==x&&"utf8"!==x)throw new Error("Node built-in encoder only supports utf-8, but got "+x);return this.textEncoder.encode(n)},n.prototype.decode=function(n,x){return 0===n.length?"":new this.util.TextDecoder(x).decode(n)},n}();Bi().get("IS_NODE")&&Bi().setPlatform("node",new ry);var oy={float32:4,int32:4,uint16:2,uint8:1,bool:1},sy=4;function hy(n,x){for(var t={},e=0,i=function(x){var i=x.name,r=x.dtype,o=x.shape,s=nr(o),h=void 0;if("quantization"in x){var u=x.quantization;if("uint8"!==u.dtype&&"uint16"!==u.dtype)throw new Error("Weight "+x.name+" has unknown quantization dtype "+u.dtype+". Supported quantization dtypes are: 'uint8' and 'uint16'.");var a=oy[u.dtype],g=n.slice(e,e+s*a),l="uint8"===u.dtype?new Uint8Array(g):new Uint16Array(g);if("float32"===r)h=Float32Array.from(l,function(n){return n*u.scale+u.min});else{if("int32"!==r)throw new Error("Unsupported dtype in weight '"+i+"': "+r);h=Int32Array.from(l,function(n){return Math.round(n*u.scale+u.min)})}e+=s*a}else if("string"===r){var c=nr(x.shape);h=[];for(var d=0;d<c;d++){var f=new Uint32Array(n.slice(e,e+sy))[0];e+=sy;var p=new Uint8Array(n.slice(e,e+f));h.push(p),e+=f}}else{var y=oy[r];if(g=n.slice(e,e+s*y),"float32"===r)h=new Float32Array(g);else if("int32"===r)h=new Int32Array(g);else{if("bool"!==r)throw new Error("Unsupported dtype in weight '"+i+"': "+r);h=new Uint8Array(g)}e+=s*y}t[i]=Ls(h,o,r)},r=0,o=x;r<o.length;r++)i(o[r]);return t}function uy(n){if(null===n)throw new Error("Invalid input value: "+JSON.stringify(n));var x=0,t=[];n.forEach(function(n){if(x+=n.byteLength,t.push(n.byteLength===n.buffer.byteLength?n:new n.constructor(n)),!(n instanceof Float32Array||n instanceof Int32Array||n instanceof Uint8Array))throw new Error("Unsupported TypedArray subtype: "+n.constructor.name)});var e=new Uint8Array(x),i=0;return t.forEach(function(n){e.set(new Uint8Array(n.buffer),i),i+=n.byteLength}),e.buffer}var ay="undefined"!=typeof Buffer&&("undefined"==typeof Blob||"undefined"==typeof atob||"undefined"==typeof btoa);function gy(n){return ay?Buffer.byteLength(n):new Blob([n]).size}function ly(n){var x=0;n.forEach(function(n){x+=n.byteLength});var t=new Uint8Array(x),e=0;return n.forEach(function(n){t.set(new Uint8Array(n),e),e+=n.byteLength}),t.buffer}function cy(n){for(n=n.trim();n.endsWith("/");)n=n.slice(0,n.length-1);var x=n.split("/");return x[x.length-1]}function dy(n){if(n.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:null==n.modelTopology?0:gy(JSON.stringify(n.modelTopology)),weightSpecsBytes:null==n.weightSpecs?0:gy(JSON.stringify(n.weightSpecs)),weightDataBytes:null==n.weightData?0:n.weightData.byteLength}}var fy=function(){function n(){this.saveRouters=[],this.loadRouters=[]}return n.getInstance=function(){return null==n.instance&&(n.instance=new n),n.instance},n.registerSaveRouter=function(x){n.getInstance().saveRouters.push(x)},n.registerLoadRouter=function(x){n.getInstance().loadRouters.push(x)},n.getSaveHandlers=function(x){return n.getHandlers(x,"save")},n.getLoadHandlers=function(x,t){return n.getHandlers(x,"load",t)},n.getHandlers=function(x,t,e){var i=[];return("load"===t?n.getInstance().loadRouters:n.getInstance().saveRouters).forEach(function(n){var t=n(x,e);null!==t&&i.push(t)}),i},n}(),py="://",yy=function(){function n(){this.managers={}}return n.getInstance=function(){return null==n.instance&&(n.instance=new n),n.instance},n.registerManager=function(x,t){Ji(null!=x,function(){return"scheme must not be undefined or null."}),x.endsWith(py)&&(x=x.slice(0,x.indexOf(py))),Ji(x.length>0,function(){return"scheme must not be an empty string."});var e=n.getInstance();Ji(null==e.managers[x],function(){return"A model store manager is already registered for scheme '"+x+"'."}),e.managers[x]=t},n.getManager=function(n){var x=this.getInstance().managers[n];if(null==x)throw new Error("Cannot find model manager for scheme '"+n+"'");return x},n.getSchemes=function(){return Object.keys(this.getInstance().managers)},n}();function my(n){if(-1===n.indexOf(py))throw new Error("The url string provided does not contain a scheme. Supported schemes are: "+yy.getSchemes().join(","));return{scheme:n.split(py)[0],path:n.split(py)[1]}}function by(n,x,t){return void 0===t&&(t=!1),Oi(this,void 0,void 0,function(){var e,i,r,o,s,h,u,a,g;return _i(this,function(l){switch(l.label){case 0:return Ji(n!==x,function(){return"Old path and new path are the same: '"+n+"'"}),Ji((e=fy.getLoadHandlers(n)).length>0,function(){return"Copying failed because no load handler is found for source URL "+n+"."}),Ji(e.length<2,function(){return"Copying failed because more than one ("+e.length+") load handlers for source URL "+n+"."}),i=e[0],Ji((r=fy.getSaveHandlers(x)).length>0,function(){return"Copying failed because no save handler is found for destination URL "+x+"."}),Ji(r.length<2,function(){return"Copying failed because more than one ("+e.length+") save handlers for destination URL "+x+"."}),o=r[0],s=my(n).scheme,h=my(n).path,u=s===my(n).scheme,[4,i.load()];case 1:return a=l.sent(),t&&u?[4,yy.getManager(s).removeModel(h)]:[3,3];case 2:l.sent(),l.label=3;case 3:return[4,o.save(a)];case 4:return g=l.sent(),!t||u?[3,6]:[4,yy.getManager(s).removeModel(h)];case 5:l.sent(),l.label=6;case 6:return[2,g.modelArtifactsInfo]}})})}var zy="models_store",vy="model_info_store";function jy(){if(!Bi().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");var n=window||self,x=n.indexedDB||n.mozIndexedDB||n.webkitIndexedDB||n.msIndexedDB||n.shimIndexedDB;if(null==x)throw new Error("The current browser does not appear to support IndexedDB.");return x}function wy(n){var x=n.result;x.createObjectStore(zy,{keyPath:"modelPath"}),x.createObjectStore(vy,{keyPath:"modelPath"})}var ky=function(){function n(n){if(this.indexedDB=jy(),null==n||!n)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=n}return n.prototype.save=function(n){return Oi(this,void 0,void 0,function(){return _i(this,function(x){if(n.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return[2,this.databaseAction(this.modelPath,n)]})})},n.prototype.load=function(){return Oi(this,void 0,void 0,function(){return _i(this,function(n){return[2,this.databaseAction(this.modelPath)]})})},n.prototype.databaseAction=function(n,x){var t=this;return new Promise(function(n,e){var i=t.indexedDB.open("tensorflowjs",1);i.onupgradeneeded=function(){return wy(i)},i.onsuccess=function(){var r=i.result;if(null==x){var o=r.transaction(zy,"readonly"),s=o.objectStore(zy).get(t.modelPath);s.onsuccess=function(){if(null==s.result)return r.close(),e(new Error("Cannot find model with path '"+t.modelPath+"' in IndexedDB."));n(s.result.modelArtifacts)},s.onerror=function(n){return r.close(),e(s.error)},o.oncomplete=function(){return r.close()}}else{var h,u=dy(x),a=r.transaction(vy,"readwrite"),g=a.objectStore(vy),l=g.put({modelPath:t.modelPath,modelArtifactsInfo:u});l.onsuccess=function(){var i=(h=r.transaction(zy,"readwrite")).objectStore(zy).put({modelPath:t.modelPath,modelArtifacts:x,modelArtifactsInfo:u});i.onsuccess=function(){return n({modelArtifactsInfo:u})},i.onerror=function(n){var x=(g=a.objectStore(vy)).delete(t.modelPath);x.onsuccess=function(){return r.close(),e(i.error)},x.onerror=function(n){return r.close(),e(i.error)}}},l.onerror=function(n){return r.close(),e(l.error)},a.oncomplete=function(){null==h?r.close():h.oncomplete=function(){return r.close()}}}},i.onerror=function(n){return e(i.error)}})},n.URL_SCHEME="indexeddb://",n}(),qy=function(n){return Bi().getBool("IS_BROWSER")&&!Array.isArray(n)&&n.startsWith(ky.URL_SCHEME)?(x=n.slice(ky.URL_SCHEME.length),new ky(x)):null;var x};fy.registerSaveRouter(qy),fy.registerLoadRouter(qy);var Cy=function(){function n(){this.indexedDB=jy()}return n.prototype.listModels=function(){return Oi(this,void 0,void 0,function(){var n=this;return _i(this,function(x){return[2,new Promise(function(x,t){var e=n.indexedDB.open("tensorflowjs",1);e.onupgradeneeded=function(){return wy(e)},e.onsuccess=function(){var n=e.result,i=n.transaction(vy,"readonly"),r=i.objectStore(vy).getAll();r.onsuccess=function(){for(var n={},t=0,e=r.result;t<e.length;t++){var i=e[t];n[i.modelPath]=i.modelArtifactsInfo}x(n)},r.onerror=function(x){return n.close(),t(r.error)},i.oncomplete=function(){return n.close()}},e.onerror=function(n){return t(e.error)}})]})})},n.prototype.removeModel=function(n){return Oi(this,void 0,void 0,function(){var x=this;return _i(this,function(t){var e;return n=(e=n).startsWith(ky.URL_SCHEME)?e.slice(ky.URL_SCHEME.length):e,[2,new Promise(function(t,e){var i=x.indexedDB.open("tensorflowjs",1);i.onupgradeneeded=function(){return wy(i)},i.onsuccess=function(){var x,r=i.result,o=r.transaction(vy,"readwrite"),s=o.objectStore(vy),h=s.get(n);h.onsuccess=function(){if(null==h.result)return r.close(),e(new Error("Cannot find model with path '"+n+"' in IndexedDB."));var i=s.delete(n),o=function(){var i=(x=r.transaction(zy,"readwrite")).objectStore(zy).delete(n);i.onsuccess=function(){return t(h.result.modelArtifactsInfo)},i.onerror=function(n){return e(h.error)}};i.onsuccess=o,i.onerror=function(n){return o(),r.close(),e(h.error)}},h.onerror=function(n){return r.close(),e(h.error)},o.oncomplete=function(){null==x?r.close():x.oncomplete=function(){return r.close()}}},i.onerror=function(n){return e(i.error)}})]})})},n}();if(Bi().getBool("IS_BROWSER"))try{yy.registerManager(ky.URL_SCHEME,new Cy)}catch(Ii){}var Ay="/",Ey="tensorflowjs_models",Sy="info",Iy="model_topology",Dy="weight_specs",Oy="weight_data",_y="model_metadata";function Ty(n){return{info:[Ey,n,Sy].join(Ay),topology:[Ey,n,Iy].join(Ay),weightSpecs:[Ey,n,Dy].join(Ay),weightData:[Ey,n,Oy].join(Ay),modelMetadata:[Ey,n,_y].join(Ay)}}function Ry(n){var x=n.split(Ay);if(x.length<3)throw new Error("Invalid key format: "+n);return x.slice(1,x.length-1).join(Ay)}var By=function(){function n(n){if(!Bi().getBool("IS_BROWSER")||"undefined"==typeof window||void 0===window.localStorage)throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,null==n||!n)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=n,this.keys=Ty(this.modelPath)}return n.prototype.save=function(n){return Oi(this,void 0,void 0,function(){var x,t,e;return _i(this,function(i){if(n.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");x=JSON.stringify(n.modelTopology),t=JSON.stringify(n.weightSpecs),e=dy(n);try{return this.LS.setItem(this.keys.info,JSON.stringify(e)),this.LS.setItem(this.keys.topology,x),this.LS.setItem(this.keys.weightSpecs,t),this.LS.setItem(this.keys.weightData,function(n){if(ay)return Buffer.from(n).toString("base64");for(var x=new Uint8Array(n),t="",e=0,i=x.length;e<i;e++)t+=String.fromCharCode(x[e]);return btoa(t)}(n.weightData)),this.LS.setItem(this.keys.modelMetadata,JSON.stringify({format:n.format,generatedBy:n.generatedBy,convertedBy:n.convertedBy,userDefinedMetadata:n.userDefinedMetadata})),[2,{modelArtifactsInfo:e}]}catch(n){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="+e.modelTopologyBytes+", weightSpecsBytes="+e.weightSpecsBytes+", weightDataBytes="+e.weightDataBytes+".")}})})},n.prototype.load=function(){return Oi(this,void 0,void 0,function(){var n,x,t,e,i,r,o;return _i(this,function(s){if(null==(n=JSON.parse(this.LS.getItem(this.keys.info))))throw new Error("In local storage, there is no model with name '"+this.modelPath+"'");if("JSON"!==n.modelTopologyType)throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");if(x={},null==(t=JSON.parse(this.LS.getItem(this.keys.topology))))throw new Error("In local storage, the topology of model '"+this.modelPath+"' is missing.");if(x.modelTopology=t,null==(e=JSON.parse(this.LS.getItem(this.keys.weightSpecs))))throw new Error("In local storage, the weight specs of model '"+this.modelPath+"' are missing.");if(x.weightSpecs=e,null!=(i=this.LS.getItem(this.keys.modelMetadata))&&(r=JSON.parse(i),x.format=r.format,x.generatedBy=r.generatedBy,x.convertedBy=r.convertedBy,x.userDefinedMetadata=r.userDefinedMetadata),null==(o=this.LS.getItem(this.keys.weightData)))throw new Error("In local storage, the binary weight values of model '"+this.modelPath+"' are missing.");return x.weightData=function(n){if(ay){var x=Buffer.from(n,"base64");return x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength)}for(var t=atob(n),e=new Uint8Array(t.length),i=0;i<t.length;++i)e.set([t.charCodeAt(i)],i);return e.buffer}(o),[2,x]})})},n.URL_SCHEME="localstorage://",n}(),My=function(n){return Bi().getBool("IS_BROWSER")&&!Array.isArray(n)&&n.startsWith(By.URL_SCHEME)?(x=n.slice(By.URL_SCHEME.length),new By(x)):null;var x};fy.registerSaveRouter(My),fy.registerLoadRouter(My);var Ny=function(){function n(){Ji(Bi().getBool("IS_BROWSER"),function(){return"Current environment is not a web browser"}),Ji("undefined"==typeof window||void 0!==window.localStorage,function(){return"Current browser does not appear to support localStorage"}),this.LS=window.localStorage}return n.prototype.listModels=function(){return Oi(this,void 0,void 0,function(){var n,x,t,e,i,r;return _i(this,function(o){for(n={},x=Ey+Ay,t=Ay+Sy,e=0;e<this.LS.length;++e)(i=this.LS.key(e)).startsWith(x)&&i.endsWith(t)&&(r=Ry(i),n[r]=JSON.parse(this.LS.getItem(i)));return[2,n]})})},n.prototype.removeModel=function(n){return Oi(this,void 0,void 0,function(){var x,t;return _i(this,function(e){var i;if(n=(i=n).startsWith(By.URL_SCHEME)?i.slice(By.URL_SCHEME.length):i,x=Ty(n),null==this.LS.getItem(x.info))throw new Error("Cannot find model at path '"+n+"'");return t=JSON.parse(this.LS.getItem(x.info)),this.LS.removeItem(x.info),this.LS.removeItem(x.topology),this.LS.removeItem(x.weightSpecs),this.LS.removeItem(x.weightData),[2,t]})})},n}();if(Bi().getBool("IS_BROWSER"))try{yy.registerManager(By.URL_SCHEME,new Ny)}catch(Ii){}var Fy="model",Py=".json",Ly=".weights.bin";function Hy(n){return new Promise(function(n){return setTimeout(n)}).then(n)}var Uy=function(){function n(x){if(!Bi().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");x.startsWith(n.URL_SCHEME)&&(x=x.slice(n.URL_SCHEME.length)),null!=x&&0!==x.length||(x=Fy),this.modelTopologyFileName=x+Py,this.weightDataFileName=x+Ly}return n.prototype.save=function(n){return Oi(this,void 0,void 0,function(){var x,t,e,i,r,o;return _i(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(x=window.URL.createObjectURL(new Blob([n.weightData],{type:"application/octet-stream"})),!(n.modelTopology instanceof ArrayBuffer))return[3,1];throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");case 1:return t=[{paths:["./"+this.weightDataFileName],weights:n.weightSpecs}],e={modelTopology:n.modelTopology,format:n.format,generatedBy:n.generatedBy,convertedBy:n.convertedBy,weightsManifest:t},i=window.URL.createObjectURL(new Blob([JSON.stringify(e)],{type:"application/json"})),(r=null==this.jsonAnchor?document.createElement("a"):this.jsonAnchor).download=this.modelTopologyFileName,r.href=i,[4,Hy(function(){return r.dispatchEvent(new MouseEvent("click"))})];case 2:return s.sent(),null==n.weightData?[3,4]:((o=null==this.weightDataAnchor?document.createElement("a"):this.weightDataAnchor).download=this.weightDataFileName,o.href=x,[4,Hy(function(){return o.dispatchEvent(new MouseEvent("click"))})]);case 3:s.sent(),s.label=4;case 4:return[2,{modelArtifactsInfo:dy(n)}]}})})},n.URL_SCHEME="downloads://",n}(),Vy=function(){function n(n){if(null==n||n.length<1)throw new Error("When calling browserFiles, at least 1 file is required, but received "+n);this.files=n}return n.prototype.load=function(){return Oi(this,void 0,void 0,function(){var n,x,t=this;return _i(this,function(e){return n=this.files[0],x=this.files.slice(1),[2,new Promise(function(e,i){var r=new FileReader;r.onload=function(r){var o=JSON.parse(r.target.result),s=o.modelTopology;if(null!=s){0===x.length&&e({modelTopology:s});var h=o.weightsManifest;if(null!=h){var u;try{u=t.checkManifestAndWeightFiles(h,x)}catch(n){return void i(n)}var a=[],g=[],l=[];h.forEach(function(n){n.paths.forEach(function(n){g.push(n),l.push(null)}),a.push.apply(a,n.weights)}),h.forEach(function(n){n.paths.forEach(function(n){var x=new FileReader;x.onload=function(x){var t=x.target.result,i=g.indexOf(n);l[i]=t,-1===l.indexOf(null)&&e({modelTopology:s,weightSpecs:a,weightData:ly(l),format:o.format,generatedBy:o.generatedBy,convertedBy:o.convertedBy,userDefinedMetadata:o.userDefinedMetadata})},x.onerror=function(x){return i("Failed to weights data from file of path '"+n+"'.")},x.readAsArrayBuffer(u[n])})})}else i(new Error("weightManifest field is missing from file "+n.name))}else i(new Error("modelTopology field is missing from file "+n.name))},r.onerror=function(x){return i("Failed to read model topology and weights manifest JSON from file '"+n.name+"'. BrowserFiles supports loading Keras-style tf.Model artifacts only.")},r.readAsText(n)})]})})},n.prototype.checkManifestAndWeightFiles=function(n,x){for(var t=[],e=x.map(function(n){return cy(n.name)}),i={},r=0,o=n;r<o.length;r++)o[r].paths.forEach(function(n){var r=cy(n);if(-1!==t.indexOf(r))throw new Error("Duplicate file basename found in weights manifest: '"+r+"'");if(t.push(r),-1===e.indexOf(r))throw new Error("Weight file with basename '"+r+"' is not provided.");i[n]=x[e.indexOf(r)]});if(t.length!==x.length)throw new Error("Mismatch in the number of files in weights manifest ("+t.length+") and the number of weight files provided ("+x.length+").");return i},n}();function Wy(n,x,t,e){!function(n){Ji(null!=n&&Array.isArray(n)&&n.length>0,function(){return"promises must be a none empty array"})}(n),function(n,x){Ji(n>=0&&n<=1,function(){return"Progress fraction must be in range [0, 1], but got startFraction "+n}),Ji(x>=0&&x<=1,function(){return"Progress fraction must be in range [0, 1], but got endFraction "+x}),Ji(x>=n,function(){return"startFraction must be no more than endFraction, but got startFraction "+n+" and endFraction "+x})}(t=null==t?0:t,e=null==e?1:e);var i=0;return Promise.all(n.map(function(r){return r.then(function(r){var o=t+ ++i/n.length*(e-t);return x(o),r}),r}))}function Qy(n,x){return Oi(this,void 0,void 0,function(){var t,e,i,r,o,s,h,u,a;return _i(this,function(g){switch(g.label){case 0:return null==x&&(x={}),t=null==x.fetchFunc?Bi().platform.fetch:x.fetchFunc,e=n.map(function(n){return t(n,x.requestInit,{isBinary:!0})}),i=0,r=.5,null!=x.onProgress?[3,2]:[4,Promise.all(e)];case 1:return o=g.sent(),[3,4];case 2:return[4,Wy(e,x.onProgress,i,r)];case 3:o=g.sent(),g.label=4;case 4:return s=o.map(function(n){return n.arrayBuffer()}),h=.5,u=1,null!=x.onProgress?[3,6]:[4,Promise.all(s)];case 5:return a=g.sent(),[3,8];case 6:return[4,Wy(s,x.onProgress,h,u)];case 7:a=g.sent(),g.label=8;case 8:return[2,a]}})})}function Gy(n){var x=this;return function(t,e,i){return void 0===e&&(e=""),Oi(x,void 0,void 0,function(){var x,r,o,s,h,u,a,g,l,c;return _i(this,function(d){switch(d.label){case 0:if(x=t.map(function(){return!1}),r={},o=null!=i?i.map(function(){return!1}):[],s=[],t.forEach(function(n,t){var e=0;n.weights.forEach(function(n){var h="quantization"in n?n.quantization.dtype:n.dtype,u=oy[h]*nr(n.shape),a=function(){x[t]=!0,null==r[t]&&(r[t]=[]),r[t].push({manifestEntry:n,groupOffset:e,sizeBytes:u})};null!=i?i.forEach(function(x,t){x===n.name&&(a(),o[t]=!0)}):a(),s.push(n.name),e+=u})}),!o.every(function(n){return n}))throw h=i.filter(function(n,x){return!o[x]}),new Error("Could not find weights in manifest with names: "+h.join(", ")+". \nManifest JSON has weights with names: "+s.join(", ")+".");return u=x.reduce(function(n,x,t){return x&&n.push(t),n},[]),a=[],u.forEach(function(n){t[n].paths.forEach(function(n){var x=e+(e.endsWith("/")?"":"/")+n;a.push(x)})}),[4,n(a)];case 1:return g=d.sent(),l={},c=0,u.forEach(function(n){for(var x=t[n].paths.length,e=0,i=0;i<x;i++)e+=g[c+i].byteLength;for(var o=new ArrayBuffer(e),s=new Uint8Array(o),h=0,u=0;u<x;u++){var a=new Uint8Array(g[c+u]);s.set(a,h),h+=a.byteLength}r[n].forEach(function(n){var x=hy(o.slice(n.groupOffset,n.groupOffset+n.sizeBytes),[n.manifestEntry]);for(var t in x)l[t]=x[t]}),c+=x}),[2,l]}})})}}fy.registerSaveRouter(function(n){return Bi().getBool("IS_BROWSER")&&!Array.isArray(n)&&n.startsWith(Uy.URL_SCHEME)?function(n){return void 0===n&&(n="model"),new Uy(n)}(n.slice(Uy.URL_SCHEME.length)):null});var Ky=function(){function n(n,x){if(this.DEFAULT_METHOD="POST",null==x&&(x={}),this.weightPathPrefix=x.weightPathPrefix,this.onProgress=x.onProgress,null!=x.fetchFunc?(Ji("function"==typeof x.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=x.fetchFunc):this.fetch=Bi().platform.fetch,Ji(null!=n&&n.length>0,function(){return"URL path for http must not be null, undefined or empty."}),Array.isArray(n)&&Ji(2===n.length,function(){return"URL paths for http must have a length of 2, (actual length is "+n.length+")."}),this.path=n,null!=x.requestInit&&null!=x.requestInit.body)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=x.requestInit||{}}return n.prototype.save=function(n){return Oi(this,void 0,void 0,function(){var x,t,e,i;return _i(this,function(r){switch(r.label){case 0:if(n.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");return(x=Object.assign({method:this.DEFAULT_METHOD},this.requestInit)).body=new FormData,t=[{paths:["./model.weights.bin"],weights:n.weightSpecs}],e={modelTopology:n.modelTopology,format:n.format,generatedBy:n.generatedBy,convertedBy:n.convertedBy,userDefinedMetadata:n.userDefinedMetadata,weightsManifest:t},x.body.append("model.json",new Blob([JSON.stringify(e)],{type:"application/json"}),"model.json"),null!=n.weightData&&x.body.append("model.weights.bin",new Blob([n.weightData],{type:"application/octet-stream"}),"model.weights.bin"),[4,this.fetch(this.path,x)];case 1:if((i=r.sent()).ok)return[2,{modelArtifactsInfo:dy(n),responses:[i]}];throw new Error("BrowserHTTPRequest.save() failed due to HTTP response status "+i.status+".")}})})},n.prototype.load=function(){return Oi(this,void 0,void 0,function(){var n,x,t,e,i,r,o,s,h,u,a,g;return _i(this,function(l){switch(l.label){case 0:return[4,this.fetch(this.path,this.requestInit)];case 1:if(!(n=l.sent()).ok)throw new Error("Request to "+this.path+" failed with status code "+n.status+". Please verify this URL points to the model JSON of the model to load.");l.label=2;case 2:return l.trys.push([2,4,,5]),[4,n.json()];case 3:return x=l.sent(),[3,5];case 4:throw l.sent(),t="Failed to parse model JSON of response from "+this.path+".",this.path.endsWith(".pb")?t+=" 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.":t+=" Please make sure the server is serving valid JSON for this request.",new Error(t);case 5:if(e=x.modelTopology,i=x.weightsManifest,r=x.generatedBy,o=x.convertedBy,s=x.format,h=x.userDefinedMetadata,null==e&&null==i)throw new Error("The JSON from HTTP path "+this.path+" contains neither model topology or manifest for weights.");return null==i?[3,7]:[4,this.loadWeights(i)];case 6:g=l.sent(),u=g[0],a=g[1],l.label=7;case 7:return[2,{modelTopology:e,weightSpecs:u,weightData:a,userDefinedMetadata:h,generatedBy:r,convertedBy:o,format:s}]}})})},n.prototype.loadWeights=function(n){return Oi(this,void 0,void 0,function(){var x,t,e,i,r,o,s,h,u,a,g;return _i(this,function(l){switch(l.label){case 0:for(x=Array.isArray(this.path)?this.path[1]:this.path,t=function(n){var x=n.lastIndexOf("/"),t=n.lastIndexOf("?"),e=n.substring(0,x),i=t>x?n.substring(t):"";return[e+"/",i]}(x),e=t[0],i=t[1],r=this.weightPathPrefix||e,o=[],s=0,h=n;s<h.length;s++)u=h[s],o.push.apply(o,u.weights);return a=[],n.forEach(function(n){n.paths.forEach(function(n){a.push(r+n+i)})}),[4,Qy(a,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress})];case 1:return g=l.sent(),[2,[o,ly(g)]]}})})},n.URL_SCHEME_REGEX=/^https?:\/\//,n}();function Yy(n){return null!=n.match(Ky.URL_SCHEME_REGEX)}var Jy=function(n,x){return"undefined"==typeof fetch?null:(Array.isArray(n)?n.every(function(n){return Yy(n)}):Yy(n))?Xy(n,{onProgress:x}):null};function Xy(n,x){return new Ky(n,x)}fy.registerSaveRouter(Jy),fy.registerLoadRouter(Jy);var Zy,$y=function(){function n(n){this.modelArtifacts=n}return n.prototype.load=function(){return Oi(this,void 0,void 0,function(){return _i(this,function(n){return[2,this.modelArtifacts]})})},n}(),nm=function(){function n(n){this.saveHandler=n}return n.prototype.save=function(n){return Oi(this,void 0,void 0,function(){return _i(this,function(x){return[2,this.saveHandler(n)]})})},n}(),xm=Object.freeze({browserFiles:function(n){return new Vy(n)},browserHTTPRequest:function(n,x){return Xy(n,x)},concatenateArrayBuffers:ly,decodeWeights:hy,encodeWeights:function(n,x){return Oi(this,void 0,void 0,function(){var t,e,i,r,o,s=this;return _i(this,function(h){switch(h.label){case 0:for(t=[],e=[],i=Array.isArray(n)?n.map(function(n){return n.name}):Object.keys(n),r=function(r){var o=i[r],h=Array.isArray(n)?n[r].tensor:n[o];if("float32"!==h.dtype&&"int32"!==h.dtype&&"bool"!==h.dtype&&"string"!==h.dtype)throw new Error("Unsupported dtype in weight '"+o+"': "+h.dtype);var u={name:o,shape:h.shape,dtype:h.dtype};if("string"===h.dtype){var a=new Promise(function(n){return Oi(s,void 0,void 0,function(){var x,t,e,i,r,o,s;return _i(this,function(u){switch(u.label){case 0:return[4,h.bytes()];case 1:for(x=u.sent(),t=x.reduce(function(n,x){return n+x.length},0)+sy*x.length,e=new Uint8Array(t),i=0,r=0;r<x.length;r++)o=x[r],s=new Uint8Array(new Uint32Array([o.length]).buffer),e.set(s,i),i+=sy,e.set(o,i),i+=o.length;return n(e),[2]}})})});e.push(a)}else e.push(h.data());null!=x&&(u.group=x),t.push(u)},o=0;o<i.length;++o)r(o);return[4,Promise.all(e)];case 1:return[2,{data:uy(h.sent()),specs:t}]}})})},fromMemory:function(n,x,t,e){return 1===arguments.length?null!=n.modelTopology||null!=n.weightSpecs?new $y(n):(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 $y({modelTopology:n})):(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 $y({modelTopology:n,weightSpecs:x,weightData:t,trainingConfig:e}))},getLoadHandlers:function(n,x){return fy.getLoadHandlers(n,x)},getModelArtifactsInfoForJSON:dy,getSaveHandlers:function(n){return fy.getSaveHandlers(n)},http:Xy,isHTTPScheme:Yy,loadWeights:function(n,x,t,e){return void 0===x&&(x=""),Oi(this,void 0,void 0,function(){return _i(this,function(i){return[2,Gy(function(n){return Qy(n,{requestInit:e})})(n,x,t)]})})},registerLoadRouter:function(n){return fy.registerLoadRouter(n)},registerSaveRouter:function(n){return fy.registerSaveRouter(n)},weightsLoaderFactory:Gy,withSaveHandler:function(n){return new nm(n)},copyModel:function(n,x){return Oi(this,void 0,void 0,function(){return _i(this,function(t){return[2,by(n,x,!1)]})})},listModels:function(){return Oi(this,void 0,void 0,function(){var n,x,t,e,i,r,o;return _i(this,function(s){switch(s.label){case 0:n=yy.getSchemes(),x={},t=0,e=n,s.label=1;case 1:return t<e.length?(i=e[t],[4,yy.getManager(i).listModels()]):[3,4];case 2:for(o in r=s.sent())x[i+py+o]=r[o];s.label=3;case 3:return t++,[3,1];case 4:return[2,x]}})})},moveModel:function(n,x){return Oi(this,void 0,void 0,function(){return _i(this,function(t){return[2,by(n,x,!0)]})})},removeModel:function(n){return Oi(this,void 0,void 0,function(){var x;return _i(this,function(t){return x=my(n),[2,yy.getManager(x.scheme).removeModel(x.path)]})})}}),tm=Ms({confusionMatrix_:function(n,x,t){var e=qs(n,"labels","confusionMatrix"),i=qs(x,"predictions","confusionMatrix");Ji(null==t||t>0&&Number.isInteger(t),function(){return"If provided, numClasses must be a positive integer, but got "+t}),Ji(1===e.rank,function(){return"Expected the rank of labels to be 1, but got "+e.rank}),Ji(1===i.rank,function(){return"Expected the rank of predictions to be 1, but got "+i.rank}),Ji(e.shape[0]===i.shape[0],function(){return"Mismatch in the number of examples: "+e.shape[0]+" vs. "+i.shape[0]+". Labels and predictions should have the same number of elements."}),Ji(t>0&&Number.isInteger(t),function(){return"numClasses is required to be a positive integer, but got "+t});var r=_h(e.asType("int32"),t),o=_h(i.asType("int32"),t);return r.transpose().matMul(o).asType("int32")}}),em=(Object.freeze({confusionMatrix:tm}),Ms({fromPixels_:function(n,x){if(void 0===x&&(x=3),x>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(null==n)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");var t=!1,e=!1,i=!1,r=!1,o=!1;if(n.data instanceof Uint8Array)t=!0;else if("undefined"!=typeof ImageData&&n instanceof ImageData)e=!0;else if("undefined"!=typeof HTMLVideoElement&&n instanceof HTMLVideoElement)i=!0;else if("undefined"!=typeof HTMLImageElement&&n instanceof HTMLImageElement)r=!0;else{if(null==n.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 "+n.constructor.name);o=!0}if(i&&i&&n.readyState<2)throw new Error("The video element has not loaded data yet. Please wait for `loadeddata` event on the <video> element.");if(null!=Pi("FromPixels",ao.backendName))return ao.runKernel("FromPixels",{pixels:n},{numChannels:x});var s,h,u=i?[n.videoWidth,n.videoHeight]:[n.width,n.height],a=u[0],g=u[1];if(o?s=n.getContext("2d").getImageData(0,0,a,g).data:e||t?s=n.data:(r||i)&&(null==Zy&&(Zy=document.createElement("canvas").getContext("2d")),Zy.canvas.width=a,Zy.canvas.height=g,Zy.drawImage(n,0,0,a,g),s=Zy.getImageData(0,0,a,g).data),4===x)h=new Int32Array(s);else{var l=a*g;h=new Int32Array(l*x);for(var c=0;c<l;c++)for(var d=0;d<x;++d)h[c*x+d]=s[4*c+d]}return Qs(h,[g,a,x],"int32")}})),im=Object.freeze({toPixels:function(n,x){return Oi(this,void 0,void 0,function(){var t,e,i,r,o,s,h,u,a,g,l,c,d,f,p,y,m,b,z,v,j,w,k;return _i(this,function(q){switch(q.label){case 0:if(t=qs(n,"img","toPixels"),n instanceof Kr||(t=t.toInt()),2!==t.rank&&3!==t.rank)throw new Error("toPixels only supports rank 2 or 3 tensors, got rank "+t.rank+".");if(e=t.shape.slice(0,2),i=e[0],r=e[1],(o=2===t.rank?1:t.shape[2])>4||2===o)throw new Error("toPixels only supports depth of size 1, 3 or 4 but got "+o);return[4,t.data()];case 1:return s=q.sent(),h=t.min(),u=t.max(),[4,Promise.all([h.data(),u.data()])];case 2:if(a=q.sent(),g=a[0],l=a[1],c=g[0],d=l[0],h.dispose(),u.dispose(),"float32"===t.dtype){if(c<0||d>1)throw new Error("Tensor values for a float32 Tensor must be in the range [0 - 1] but got range ["+c+" - "+d+"].")}else{if("int32"!==t.dtype)throw new Error("Unsupported type for toPixels: "+t.dtype+". Please use float32 or int32 tensors.");if(c<0||d>255)throw new Error("Tensor values for a int32 Tensor must be in the range [0 - 255] but got range ["+c+" - "+d+"].")}for(f="float32"===t.dtype?255:1,p=new Uint8ClampedArray(r*i*4),y=0;y<i*r;++y)m=void 0,b=void 0,z=void 0,v=void 0,1===o?(m=s[y]*f,b=s[y]*f,z=s[y]*f,v=255):3===o?(m=s[3*y]*f,b=s[3*y+1]*f,z=s[3*y+2]*f,v=255):4===o&&(m=s[4*y]*f,b=s[4*y+1]*f,z=s[4*y+2]*f,v=s[4*y+3]*f),p[0+(j=4*y)]=Math.round(m),p[j+1]=Math.round(b),p[j+2]=Math.round(z),p[j+3]=Math.round(v);return null!=x&&(x.width=r,x.height=i,w=x.getContext("2d"),k=new ImageData(p,r,i),w.putImageData(k,0,0)),t!==n&&t.dispose(),[2,p]}})})},fromPixels:em}),rm=function(){function n(){}return n.prototype.getClassName=function(){return this.constructor.className},n.fromConfig=function(n,x){return new n(x)},n}(),om=function(){function n(){this.classNameMap={}}return n.getMap=function(){return null==n.instance&&(n.instance=new n),n.instance},n.register=function(x){n.getMap().classNameMap[x.className]=[x,x.fromConfig]},n}();function sm(n){Ji(null!=n.className,function(){return"Class being registered does not have the static className property defined."}),Ji("string"==typeof n.className,function(){return"className is required to be a string, but got type "+typeof n.className}),Ji(n.className.length>0,function(){return"Class being registered has an empty-string as its className, which is disallowed."}),om.register(n)}Object.freeze({Serializable:rm,SerializationMap:om,registerClass:sm});var hm=.001,um=.1;function am(){return 32===ao.backend.floatPrecision()?hm:um}function gm(n,x,t){var e=!0;if((fr(n)||fr(x))&&(e=!1),fr(n)&&fr(x)&&(e=!0),e){var i=n.constructor.name,r=x.constructor.name;if(i!==r)throw new Error("Arrays are of different type. Actual: "+i+". Expected: "+r)}if(Array.isArray(n)&&Array.isArray(x)){var o=ws(n),s=ws(x);if(!xr(o,s))throw new Error("Arrays have different shapes. Actual: ["+o+"]. Expected: ["+s+"]")}var h=fr(n)?n:$i(n),u=fr(x)?x:$i(x);if(h.length!==u.length)throw new Error("Arrays have different lengths actual: "+h.length+" vs expected: "+u.length+".\nActual: "+h+".\nExpected: "+u+".");for(var a=0;a<u.length;++a){var g=h[a],l=u[a];if(!t(g,l))throw new Error("Arrays differ: actual["+a+"] = "+g+", expected["+a+"] = "+l+".\nActual: "+h+".\nExpected: "+u+".")}}function lm(n,x,t){return!isFinite(n)&&!isFinite(x)||!(isNaN(n)||isNaN(x)||Math.abs(n-x)>t)}Object.freeze({TEST_EPSILON_FLOAT16:um,expectArraysClose:function(n,x,t){return null==t&&(t=am()),gm(n,x,function(n,x){return lm(n,x,t)})},testEpsilon:am,expectPromiseToFail:function(n,x){n().then(function(){return x.fail()},function(){return x()})},expectArraysEqual:function(n,x){var t="string"==typeof x||"number"==typeof x||"boolean"==typeof x?[x]:x;return mr(n)||mr(n[0])||mr(x)||mr(x[0])?gm(n,t,function(n,x){return n==x}):gm(n,x,function(n,x){return lm(n,x,0)})},expectNumbersClose:function(n,x,t){if(null==t&&(t=am()),!lm(n,x,t))throw new Error("Numbers differ: actual === "+n+", expected === "+x)},expectValuesInRange:function(n,x,t){for(var e=0;e<n.length;e++)if(n[e]<x||n[e]>t)throw new Error("Value out of range:"+n[e]+" low: "+x+", high: "+t)},expectArrayBuffersEqual:function(n,x){expect(new Float32Array(n)).toEqual(new Float32Array(x))}}),Object.freeze({gpgpu_util:Tg,webgl_util:ps,forceHalfFloat:function(){Bi().set("WEBGL_FORCE_F16_TEXTURES",!0)},MathBackendWebGL:Zl,setWebGLContext:bo,GPGPUContext:Rg});var cm=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return Di(x,n),x.prototype.minimize=function(n,x,t){void 0===x&&(x=!1);var e=this.computeGradients(n,t),i=e.value,r=e.grads;if(null!=t){var o=t.map(function(n){return{name:n.name,tensor:r[n.name]}});this.applyGradients(o)}else this.applyGradients(r);return zs(r),x?i:(i.dispose(),null)},Object.defineProperty(x.prototype,"iterations",{get:function(){return null==this.iterations_&&(this.iterations_=0),this.iterations_},enumerable:!0,configurable:!0}),x.prototype.incrementIterations=function(){this.iterations_=this.iterations+1},x.prototype.computeGradients=function(n,x){return fu(n,x)},x.prototype.dispose=function(){null!=this.iterations_&&zs(this.iterations_)},x.prototype.saveIterations=function(){return Oi(this,void 0,void 0,function(){return _i(this,function(n){return null==this.iterations_&&(this.iterations_=0),[2,{name:"iter",tensor:Us(this.iterations_,"int32")}]})})},x.prototype.getWeights=function(){return Oi(this,void 0,void 0,function(){return _i(this,function(n){throw new Error("getWeights() is not implemented for this optimizer yet.")})})},x.prototype.setWeights=function(n){return Oi(this,void 0,void 0,function(){return _i(this,function(n){throw new Error("setWeights() is not implemented for this optimizer class "+this.getClassName())})})},x.prototype.extractIterations=function(n){return Oi(this,void 0,void 0,function(){var x;return _i(this,function(t){switch(t.label){case 0:return x=this,[4,n[0].tensor.data()];case 1:return x.iterations_=t.sent()[0],[2,n.slice(1)]}})})},x}(rm);Object.defineProperty(cm,Symbol.hasInstance,{value:function(n){return null!=n.minimize&&null!=n.computeGradients&&null!=n.applyGradients}});var dm=function(n){function x(x,t,e){void 0===e&&(e=null);var i=n.call(this)||this;return i.learningRate=x,i.rho=t,i.epsilon=e,i.accumulatedGrads=[],i.accumulatedUpdates=[],null==e&&(i.epsilon=ao.backend.epsilon()),i}return Di(x,n),x.prototype.applyGradients=function(n){var x=this;(Array.isArray(n)?n.map(function(n){return n.name}):Object.keys(n)).forEach(function(t,e){var i=ao.registeredVariables[t];null==x.accumulatedGrads[e]&&(x.accumulatedGrads[e]={originalName:t+"/accum_grad",variable:bs(function(){return eh(i).variable(!1)})}),null==x.accumulatedUpdates[e]&&(x.accumulatedUpdates[e]={originalName:t+"/accum_var",variable:bs(function(){return eh(i).variable(!1)})});var r=Array.isArray(n)?n[e].tensor:n[t];if(null!=r){var o=x.accumulatedGrads[e].variable,s=x.accumulatedUpdates[e].variable;bs(function(){var n=o.mul(x.rho).add(r.square().mul(1-x.rho)),t=s.add(x.epsilon).sqrt().div(o.add(x.epsilon).sqrt()).mul(r),e=s.mul(x.rho).add(t.square().mul(1-x.rho));o.assign(n),s.assign(e);var h=t.mul(-x.learningRate).add(i);i.assign(h)})}}),this.incrementIterations()},x.prototype.dispose=function(){null!=this.accumulatedUpdates&&(zs(this.accumulatedGrads.map(function(n){return n.variable})),zs(this.accumulatedUpdates.map(function(n){return n.variable})))},x.prototype.getWeights=function(){return Oi(this,void 0,void 0,function(){var n;return _i(this,function(x){switch(x.label){case 0:return n=this.accumulatedGrads.concat(this.accumulatedUpdates),[4,this.saveIterations()];case 1:return[2,[x.sent()].concat(n.map(function(n){return{name:n.originalName,tensor:n.variable}}))]}})})},x.prototype.setWeights=function(n){return Oi(this,void 0,void 0,function(){var x;return _i(this,function(t){switch(t.label){case 0:return[4,this.extractIterations(n)];case 1:return n=t.sent(),x=n.length/2,this.accumulatedGrads=n.slice(0,x).map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}}),this.accumulatedUpdates=n.slice(x,2*x).map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}}),[2]}})})},x.prototype.getConfig=function(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}},x.fromConfig=function(n,x){return new n(x.learningRate,x.rho,x.epsilon)},x.className="Adadelta",x}(cm);sm(dm);var fm=function(n){function x(x,t){void 0===t&&(t=.1);var e=n.call(this)||this;return e.learningRate=x,e.initialAccumulatorValue=t,e.accumulatedGrads=[],e}return Di(x,n),x.prototype.applyGradients=function(n){var x=this;(Array.isArray(n)?n.map(function(n){return n.name}):Object.keys(n)).forEach(function(t,e){var i=ao.registeredVariables[t];null==x.accumulatedGrads[e]&&(x.accumulatedGrads[e]={originalName:t+"/accumulator",variable:bs(function(){return $s(i.shape,x.initialAccumulatorValue).variable(!1)})});var r=Array.isArray(n)?n[e].tensor:n[t];if(null!=r){var o=x.accumulatedGrads[e].variable;bs(function(){var n=o.add(r.square());o.assign(n);var t=r.div(n.add(ao.backend.epsilon()).sqrt()).mul(-x.learningRate).add(i);i.assign(t)})}}),this.incrementIterations()},x.prototype.dispose=function(){null!=this.accumulatedGrads&&zs(this.accumulatedGrads.map(function(n){return n.variable}))},x.prototype.getWeights=function(){return Oi(this,void 0,void 0,function(){return _i(this,function(n){switch(n.label){case 0:return[4,this.saveIterations()];case 1:return[2,[n.sent()].concat(this.accumulatedGrads.map(function(n){return{name:n.originalName,tensor:n.variable}}))]}})})},x.prototype.setWeights=function(n){return Oi(this,void 0,void 0,function(){return _i(this,function(x){switch(x.label){case 0:return[4,this.extractIterations(n)];case 1:return n=x.sent(),this.accumulatedGrads=n.map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}}),[2]}})})},x.prototype.getConfig=function(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}},x.fromConfig=function(n,x){return new n(x.learningRate,x.initialAccumulatorValue)},x.className="Adagrad",x}(cm);sm(fm);var pm=function(n){function x(x,t,e,i){void 0===i&&(i=null);var r=n.call(this)||this;return r.learningRate=x,r.beta1=t,r.beta2=e,r.epsilon=i,r.accumulatedFirstMoment=[],r.accumulatedSecondMoment=[],bs(function(){r.accBeta1=Us(t).variable(),r.accBeta2=Us(e).variable()}),null==i&&(r.epsilon=ao.backend.epsilon()),r}return Di(x,n),x.prototype.applyGradients=function(n){var x=this,t=Array.isArray(n)?n.map(function(n){return n.name}):Object.keys(n);bs(function(){var e=vd(1,x.accBeta1),i=vd(1,x.accBeta2);t.forEach(function(t,r){var o=ao.registeredVariables[t];null==x.accumulatedFirstMoment[r]&&(x.accumulatedFirstMoment[r]={originalName:t+"/m",variable:bs(function(){return eh(o).variable(!1)})}),null==x.accumulatedSecondMoment[r]&&(x.accumulatedSecondMoment[r]={originalName:t+"/v",variable:bs(function(){return eh(o).variable(!1)})});var s=Array.isArray(n)?n[r].tensor:n[t];if(null!=s){var h=x.accumulatedFirstMoment[r].variable,u=x.accumulatedSecondMoment[r].variable,a=h.mul(x.beta1).add(s.mul(1-x.beta1)),g=u.mul(x.beta2).add(s.square().mul(1-x.beta2)),l=a.div(e),c=g.div(i);h.assign(a),u.assign(g);var d=l.div(c.sqrt().add(x.epsilon)).mul(-x.learningRate).add(o);o.assign(d)}}),x.accBeta1.assign(x.accBeta1.mul(x.beta1)),x.accBeta2.assign(x.accBeta2.mul(x.beta2))}),this.incrementIterations()},x.prototype.dispose=function(){this.accBeta1.dispose(),this.accBeta2.dispose(),null!=this.accumulatedFirstMoment&&zs(this.accumulatedFirstMoment.map(function(n){return n.variable})),null!=this.accumulatedSecondMoment&&zs(this.accumulatedSecondMoment.map(function(n){return n.variable}))},x.prototype.getWeights=function(){return Oi(this,void 0,void 0,function(){var n;return _i(this,function(x){switch(x.label){case 0:return n=this.accumulatedFirstMoment.concat(this.accumulatedSecondMoment),[4,this.saveIterations()];case 1:return[2,[x.sent()].concat(n.map(function(n){return{name:n.originalName,tensor:n.variable}}))]}})})},x.prototype.setWeights=function(n){return Oi(this,void 0,void 0,function(){var x,t=this;return _i(this,function(e){switch(e.label){case 0:return[4,this.extractIterations(n)];case 1:return n=e.sent(),bs(function(){t.accBeta1.assign(md(t.beta1,t.iterations_+1)),t.accBeta2.assign(md(t.beta2,t.iterations_+1))}),x=n.length/2,this.accumulatedFirstMoment=n.slice(0,x).map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}}),this.accumulatedSecondMoment=n.slice(x,2*x).map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}}),[2]}})})},x.prototype.getConfig=function(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}},x.fromConfig=function(n,x){return new n(x.learningRate,x.beta1,x.beta2,x.epsilon)},x.className="Adam",x}(cm);sm(pm);var ym=function(n){function x(x,t,e,i,r){void 0===i&&(i=null),void 0===r&&(r=0);var o=n.call(this)||this;return o.learningRate=x,o.beta1=t,o.beta2=e,o.epsilon=i,o.decay=r,o.accumulatedFirstMoment=[],o.accumulatedWeightedInfNorm=[],bs(function(){o.iteration=Us(0).variable(),o.accBeta1=Us(t).variable()}),null==i&&(o.epsilon=ao.backend.epsilon()),o}return Di(x,n),x.prototype.applyGradients=function(n){var x=this,t=Array.isArray(n)?n.map(function(n){return n.name}):Object.keys(n);bs(function(){var e=vd(1,x.accBeta1),i=od(-x.learningRate,x.iteration.mul(x.decay).add(1));t.forEach(function(t,r){var o=ao.registeredVariables[t];null==x.accumulatedFirstMoment[r]&&(x.accumulatedFirstMoment[r]={originalName:t+"/m",variable:eh(o).variable(!1)}),null==x.accumulatedWeightedInfNorm[r]&&(x.accumulatedWeightedInfNorm[r]={originalName:t+"/v",variable:eh(o).variable(!1)});var s=Array.isArray(n)?n[r].tensor:n[t];if(null!=s){var h=x.accumulatedFirstMoment[r].variable,u=x.accumulatedWeightedInfNorm[r].variable,a=h.mul(x.beta1).add(s.mul(1-x.beta1)),g=u.mul(x.beta2),l=s.abs(),c=g.maximum(l);h.assign(a),u.assign(c);var d=i.div(e).mul(a.div(c.add(x.epsilon))).add(o);o.assign(d)}}),x.iteration.assign(x.iteration.add(1)),x.accBeta1.assign(x.accBeta1.mul(x.beta1))}),this.incrementIterations()},x.prototype.dispose=function(){this.accBeta1.dispose(),this.iteration.dispose(),null!=this.accumulatedFirstMoment&&zs(this.accumulatedFirstMoment.map(function(n){return n.variable})),null!=this.accumulatedWeightedInfNorm&&zs(this.accumulatedWeightedInfNorm.map(function(n){return n.variable}))},x.prototype.getWeights=function(){return Oi(this,void 0,void 0,function(){return _i(this,function(n){throw new Error("getWeights() is not implemented for Adamax yet.")})})},x.prototype.setWeights=function(n){return Oi(this,void 0,void 0,function(){return _i(this,function(n){throw new Error("setWeights() is not implemented for Adamax yet.")})})},x.prototype.getConfig=function(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}},x.fromConfig=function(n,x){return new n(x.learningRate,x.beta1,x.beta2,x.epsilon,x.decay)},x.className="Adamax",x}(cm);sm(ym);var mm=function(n){function x(x){var t=n.call(this)||this;return t.learningRate=x,t.setLearningRate(x),t}return Di(x,n),x.prototype.applyGradients=function(n){var x=this;(Array.isArray(n)?n.map(function(n){return n.name}):Object.keys(n)).forEach(function(t,e){var i=Array.isArray(n)?n[e].tensor:n[t];if(null!=i){var r=ao.registeredVariables[t];bs(function(){var n=x.c.mul(i).add(r);r.assign(n)})}}),this.incrementIterations()},x.prototype.setLearningRate=function(n){this.learningRate=n,null!=this.c&&this.c.dispose(),this.c=vs(Us(-n))},x.prototype.dispose=function(){this.c.dispose()},x.prototype.getWeights=function(){return Oi(this,void 0,void 0,function(){return _i(this,function(n){switch(n.label){case 0:return[4,this.saveIterations()];case 1:return[2,[n.sent()]]}})})},x.prototype.setWeights=function(n){return Oi(this,void 0,void 0,function(){return _i(this,function(x){switch(x.label){case 0:return[4,this.extractIterations(n)];case 1:if(0!==(n=x.sent()).length)throw new Error("SGD optimizer does not have settable weights.");return[2]}})})},x.prototype.getConfig=function(){return{learningRate:this.learningRate}},x.fromConfig=function(n,x){return new n(x.learningRate)},x.className="SGD",x}(cm);sm(mm);var bm=function(n){function x(x,t,e){void 0===e&&(e=!1);var i=n.call(this,x)||this;return i.learningRate=x,i.momentum=t,i.useNesterov=e,i.accumulations=[],i.m=Us(i.momentum),i}return Di(x,n),x.prototype.applyGradients=function(n){var x=this;(Array.isArray(n)?n.map(function(n){return n.name}):Object.keys(n)).forEach(function(t,e){var i=ao.registeredVariables[t];null==x.accumulations[e]&&(x.accumulations[e]={originalName:t+"/momentum",variable:bs(function(){return eh(i).variable(!1)})});var r=x.accumulations[e].variable,o=Array.isArray(n)?n[e].tensor:n[t];null!=o&&bs(function(){var n,t=x.m.mul(r).add(o);n=x.useNesterov?x.c.mul(o.add(t.mul(x.m))).add(i):x.c.mul(t).add(i),r.assign(t),i.assign(n)})}),this.incrementIterations()},x.prototype.dispose=function(){this.m.dispose(),null!=this.accumulations&&zs(this.accumulations.map(function(n){return n.variable}))},x.prototype.setMomentum=function(n){this.momentum=n},x.prototype.getWeights=function(){return Oi(this,void 0,void 0,function(){return _i(this,function(n){switch(n.label){case 0:return[4,this.saveIterations()];case 1:return[2,[n.sent()].concat(this.accumulations.map(function(n){return{name:n.originalName,tensor:n.variable}}))]}})})},x.prototype.setWeights=function(n){return Oi(this,void 0,void 0,function(){return _i(this,function(x){switch(x.label){case 0:return[4,this.extractIterations(n)];case 1:return n=x.sent(),this.accumulations=n.map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}}),[2]}})})},x.prototype.getConfig=function(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}},x.fromConfig=function(n,x){return new n(x.learningRate,x.momentum,x.useNesterov)},x.className="Momentum",x}(mm);sm(bm);var zm=function(n){function x(x,t,e,i,r){void 0===t&&(t=.9),void 0===e&&(e=0),void 0===i&&(i=null),void 0===r&&(r=!1);var o=n.call(this)||this;if(o.learningRate=x,o.decay=t,o.momentum=e,o.epsilon=i,o.accumulatedMeanSquares=[],o.accumulatedMoments=[],o.accumulatedMeanGrads=[],o.centered=r,null==i&&(o.epsilon=ao.backend.epsilon()),null==x)throw new Error("learningRate for RMSPropOptimizer must be defined.");return o}return Di(x,n),x.prototype.applyGradients=function(n){var x=this;(Array.isArray(n)?n.map(function(n){return n.name}):Object.keys(n)).forEach(function(t,e){var i=ao.registeredVariables[t];null==x.accumulatedMeanSquares[e]&&(x.accumulatedMeanSquares[e]={originalName:t+"/rms",variable:bs(function(){return eh(i).variable(!1)})}),null==x.accumulatedMoments[e]&&(x.accumulatedMoments[e]={originalName:t+"/momentum",variable:bs(function(){return eh(i).variable(!1)})}),null==x.accumulatedMeanGrads[e]&&x.centered&&(x.accumulatedMeanGrads[e]={originalName:t+"/mg",variable:bs(function(){return eh(i).variable(!1)})});var r=Array.isArray(n)?n[e].tensor:n[t];if(null!=r){var o=x.accumulatedMeanSquares[e].variable,s=x.accumulatedMoments[e].variable;bs(function(){var n=o.mul(x.decay).add(r.square().mul(1-x.decay));if(x.centered){var t=x.accumulatedMeanGrads[e].variable,h=t.mul(x.decay).add(r.mul(1-x.decay)),u=s.mul(x.momentum).add(r.mul(x.learningRate).div(n.sub(h.square().add(x.epsilon)).sqrt()));o.assign(n),t.assign(h),s.assign(u);var a=i.sub(u);i.assign(a)}else{var g=o.mul(x.decay).add(r.square().mul(1-x.decay));u=s.mul(x.momentum).add(r.mul(x.learningRate).div(g.add(x.epsilon).sqrt())),o.assign(g),s.assign(u),a=i.sub(u),i.assign(a)}})}}),this.incrementIterations()},x.prototype.dispose=function(){null!=this.accumulatedMeanSquares&&zs(this.accumulatedMeanSquares.map(function(n){return n.variable})),null!=this.accumulatedMeanGrads&&this.centered&&zs(this.accumulatedMeanGrads.map(function(n){return n.variable})),null!=this.accumulatedMoments&&zs(this.accumulatedMoments.map(function(n){return n.variable}))},x.prototype.getWeights=function(){return Oi(this,void 0,void 0,function(){var n;return _i(this,function(x){switch(x.label){case 0:return n=this.accumulatedMeanSquares.concat(this.accumulatedMoments),this.centered&&n.push.apply(n,this.accumulatedMeanGrads),[4,this.saveIterations()];case 1:return[2,[x.sent()].concat(n.map(function(n){return{name:n.originalName,tensor:n.variable}}))]}})})},x.prototype.setWeights=function(n){return Oi(this,void 0,void 0,function(){var x;return _i(this,function(t){switch(t.label){case 0:return[4,this.extractIterations(n)];case 1:return n=t.sent(),x=this.centered?n.length/3:n.length/2,this.accumulatedMeanSquares=n.slice(0,x).map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}}),this.accumulatedMoments=n.slice(x,2*x).map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}}),this.centered&&(this.accumulatedMeanGrads=n.slice(2*x,3*x).map(function(n){return{originalName:n.name,variable:n.tensor.variable(!1)}})),[2]}})})},x.prototype.getConfig=function(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}},x.fromConfig=function(n,x){return new n(x.learningRate,x.decay,x.momentum,x.epsilon,x.centered)},x.className="RMSProp",x}(cm);sm(zm);var vm=function(){function n(){}return n.sgd=function(n){return new mm(n)},n.momentum=function(n,x,t){return void 0===t&&(t=!1),new bm(n,x,t)},n.rmsprop=function(n,x,t,e,i){return void 0===x&&(x=.9),void 0===t&&(t=0),void 0===e&&(e=null),void 0===i&&(i=!1),new zm(n,x,t,e,i)},n.adam=function(n,x,t,e){return void 0===n&&(n=.001),void 0===x&&(x=.9),void 0===t&&(t=.999),void 0===e&&(e=null),new pm(n,x,t,e)},n.adadelta=function(n,x,t){return void 0===n&&(n=.001),void 0===x&&(x=.95),void 0===t&&(t=null),new dm(n,x,t)},n.adamax=function(n,x,t,e,i){return void 0===n&&(n=.002),void 0===x&&(x=.9),void 0===t&&(t=.999),void 0===e&&(e=null),void 0===i&&(i=0),new ym(n,x,t,e,i)},n.adagrad=function(n,x){return void 0===x&&(x=.1),new fm(n,x)},n}();vm.sgd,vm.momentum,vm.adadelta,vm.adagrad,vm.rmsprop,vm.adamax,vm.adam,"undefined"!=typeof requestAnimationFrame?requestAnimationFrame:"undefined"!=typeof setImmediate&&setImmediate;function jm(n,x,t){if(void 0===t&&(t=!1),n.beginPath(),x.slice(1).forEach(function(t,e){var i=t.x,r=t.y,o=x[e];n.moveTo(o.x,o.y),n.lineTo(i,r)}),t){var e=x[x.length-1],i=x[0];if(!e||!i)return;n.moveTo(e.x,e.y),n.lineTo(i.x,i.y)}n.stroke()}Kr.prototype.squaredDifference=function(n){return xc(this,n)},Qr=Up;
56
56
  /*! *****************************************************************************
57
57
  Copyright (c) Microsoft Corporation.
58
58
 
@@ -67,4 +67,4 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
67
67
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
68
68
  PERFORMANCE OF THIS SOFTWARE.
69
69
  ***************************************************************************** */
70
- var wm=function(n,x){return wm=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,x){n.__proto__=x}||function(n,x){for(var t in x)x.hasOwnProperty(t)&&(n[t]=x[t])},wm(n,x)};function km(n,x){function t(){this.constructor=n}wm(n,x),n.prototype=null===x?Object.create(x):(t.prototype=x.prototype,new t)}var qm=function(){return qm=Object.assign||function(n){for(var x,t=1,e=arguments.length;t<e;t++)for(var i in x=arguments[t],x)Object.prototype.hasOwnProperty.call(x,i)&&(n[i]=x[i]);return n},qm.apply(this,arguments)};function Cm(n,x,t,e){function i(n){return n instanceof t?n:new t(function(x){x(n)})}return new(t||(t=Promise))(function(t,r){function o(n){try{h(e.next(n))}catch(Di){r(Di)}}function s(n){try{h(e["throw"](n))}catch(Di){r(Di)}}function h(n){n.done?t(n.value):i(n.value).then(o,s)}h((e=e.apply(n,x||[])).next())})}function Am(n,x){var t,e,i,r,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return r={next:s(0),throw:s(1),return:s(2)},"function"===typeof Symbol&&(r[Symbol.iterator]=function(){return this}),r;function s(n){return function(x){return h([n,x])}}function h(r){if(t)throw new TypeError("Generator is already executing.");while(o)try{if(t=1,e&&(i=2&r[0]?e["return"]:r[0]?e["throw"]||((i=e["return"])&&i.call(e),0):e.next)&&!(i=i.call(e,r[1])).done)return i;switch(e=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return o.label++,{value:r[1],done:!1};case 5:o.label++,e=r[1],r=[0];continue;case 7:r=o.ops.pop(),o.trys.pop();continue;default:if(i=o.trys,!(i=i.length>0&&i[i.length-1])&&(6===r[0]||2===r[0])){o=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){o.label=r[1];break}if(6===r[0]&&o.label<i[1]){o.label=i[1],i=r;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(r);break}i[2]&&o.ops.pop(),o.trys.pop();continue}r=x.call(n,o)}catch(Di){r=[6,Di],e=0}finally{t=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}}function Em(){for(var n=0,x=0,t=arguments.length;x<t;x++)n+=arguments[x].length;var e=Array(n),i=0;for(x=0;x<t;x++)for(var r=arguments[x],o=0,s=r.length;o<s;o++,i++)e[i]=r[o];return e}var Sm=function(){function n(n,x){if(!Lm(n)||!Lm(x))throw new Error("Dimensions.constructor - expected width and height to be valid numbers, instead have "+JSON.stringify({width:n,height:x}));this._width=n,this._height=x}return Object.defineProperty(n.prototype,"width",{get:function(){return this._width},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"height",{get:function(){return this._height},enumerable:!0,configurable:!0}),n.prototype.reverse=function(){return new n(1/this.width,1/this.height)},n}();function Im(n,x){return n instanceof Kr&&n.shape.length===x}function Dm(n){return Im(n,2)}function Om(n){return Im(n,3)}function _m(n){return Im(n,4)}function Tm(n){return n%1!==0}function Rm(n){return n%2===0}function Bm(n,x){void 0===x&&(x=2);var t=Math.pow(10,x);return Math.floor(n*t)/t}function Mm(n){return n&&n.width&&n.height}function Nm(n,x){var t=n.width,e=n.height,i=x/Math.max(e,t);return new Sm(Math.round(t*i),Math.round(e*i))}function Fm(n){return n.reduce(function(n,x){return n.add(x)},new Um(0,0)).div(new Um(n.length,n.length))}function Pm(n,x,t){return Array(n).fill(0).map(function(n,e){return x+e*t})}function Lm(n){return!!n&&n!==1/0&&n!==-1/0&&!isNaN(n)||0===n}function Hm(n){return Lm(n)&&0<=n&&n<=1}var Um=function(){function n(n,x){this._x=n,this._y=x}return Object.defineProperty(n.prototype,"x",{get:function(){return this._x},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"y",{get:function(){return this._y},enumerable:!0,configurable:!0}),n.prototype.add=function(x){return new n(this.x+x.x,this.y+x.y)},n.prototype.sub=function(x){return new n(this.x-x.x,this.y-x.y)},n.prototype.mul=function(x){return new n(this.x*x.x,this.y*x.y)},n.prototype.div=function(x){return new n(this.x/x.x,this.y/x.y)},n.prototype.abs=function(){return new n(Math.abs(this.x),Math.abs(this.y))},n.prototype.magnitude=function(){return Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2))},n.prototype.floor=function(){return new n(Math.floor(this.x),Math.floor(this.y))},n}(),Vm=function(){function n(x,t){void 0===t&&(t=!0);var e=x||{},i=[e.left,e.top,e.right,e.bottom].every(Lm),r=[e.x,e.y,e.width,e.height].every(Lm);if(!r&&!i)throw new Error("Box.constructor - expected box to be IBoundingBox | IRect, instead have "+JSON.stringify(e));var o=r?[e.x,e.y,e.width,e.height]:[e.left,e.top,e.right-e.left,e.bottom-e.top],s=o[0],h=o[1],u=o[2],a=o[3];n.assertIsValidBox({x:s,y:h,width:u,height:a},"Box.constructor",t),this._x=s,this._y=h,this._width=u,this._height=a}return n.isRect=function(n){return!!n&&[n.x,n.y,n.width,n.height].every(Lm)},n.assertIsValidBox=function(x,t,e){if(void 0===e&&(e=!1),!n.isRect(x))throw new Error(t+" - invalid box: "+JSON.stringify(x)+", expected object with properties x, y, width, height");if(!e&&(x.width<0||x.height<0))throw new Error(t+" - width ("+x.width+") and height ("+x.height+") must be positive numbers")},Object.defineProperty(n.prototype,"x",{get:function(){return this._x},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"y",{get:function(){return this._y},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"width",{get:function(){return this._width},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"height",{get:function(){return this._height},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"left",{get:function(){return this.x},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"top",{get:function(){return this.y},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"right",{get:function(){return this.x+this.width},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"bottom",{get:function(){return this.y+this.height},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"area",{get:function(){return this.width*this.height},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"topLeft",{get:function(){return new Um(this.left,this.top)},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"topRight",{get:function(){return new Um(this.right,this.top)},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"bottomLeft",{get:function(){return new Um(this.left,this.bottom)},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"bottomRight",{get:function(){return new Um(this.right,this.bottom)},enumerable:!0,configurable:!0}),n.prototype.round=function(){var x=[this.x,this.y,this.width,this.height].map(function(n){return Math.round(n)}),t=x[0],e=x[1],i=x[2],r=x[3];return new n({x:t,y:e,width:i,height:r})},n.prototype.floor=function(){var x=[this.x,this.y,this.width,this.height].map(function(n){return Math.floor(n)}),t=x[0],e=x[1],i=x[2],r=x[3];return new n({x:t,y:e,width:i,height:r})},n.prototype.toSquare=function(){var x=this,t=x.x,e=x.y,i=x.width,r=x.height,o=Math.abs(i-r);return i<r&&(t-=o/2,i+=o),r<i&&(e-=o/2,r+=o),new n({x:t,y:e,width:i,height:r})},n.prototype.rescale=function(x){var t=Mm(x)?x.width:x,e=Mm(x)?x.height:x;return new n({x:this.x*t,y:this.y*e,width:this.width*t,height:this.height*e})},n.prototype.pad=function(x,t){var e=[this.x-x/2,this.y-t/2,this.width+x,this.height+t],i=e[0],r=e[1],o=e[2],s=e[3];return new n({x:i,y:r,width:o,height:s})},n.prototype.clipAtImageBorders=function(x,t){var e=this,i=e.x,r=e.y,o=e.right,s=e.bottom,h=Math.max(i,0),u=Math.max(r,0),a=o-h,g=s-u,l=Math.min(a,x-h),c=Math.min(g,t-u);return new n({x:h,y:u,width:l,height:c}).floor()},n.prototype.shift=function(x,t){var e=this,i=e.width,r=e.height,o=this.x+x,s=this.y+t;return new n({x:o,y:s,width:i,height:r})},n.prototype.padAtBorders=function(n,x){var t=this.width+1,e=this.height+1,i=1,r=1,o=t,s=e,h=this.left,u=this.top,a=this.right,g=this.bottom;return a>x&&(o=-a+x+t,a=x),g>n&&(s=-g+n+e,g=n),h<1&&(s=2-h,h=1),u<1&&(s=2-u,u=1),{dy:r,edy:s,dx:i,edx:o,y:u,ey:g,x:h,ex:a,w:t,h:e}},n.prototype.calibrate=function(x){return new n({left:this.left+x.left*this.width,top:this.top+x.top*this.height,right:this.right+x.right*this.width,bottom:this.bottom+x.bottom*this.height}).toSquare().round()},n}(),Wm=function(n){function x(x,t,e,i,r){return void 0===r&&(r=!1),n.call(this,{left:x,top:t,right:e,bottom:i},r)||this}return km(x,n),x}(Vm),Qm=function(){function n(n,x,t,e,i){this._imageDims=new Sm(i.width,i.height),this._score=n,this._classScore=x,this._className=t,this._box=new Vm(e).rescale(this._imageDims)}return Object.defineProperty(n.prototype,"score",{get:function(){return this._score},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"classScore",{get:function(){return this._classScore},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"className",{get:function(){return this._className},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"box",{get:function(){return this._box},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"imageDims",{get:function(){return this._imageDims},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"imageWidth",{get:function(){return this.imageDims.width},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"imageHeight",{get:function(){return this.imageDims.height},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"relativeBox",{get:function(){return new Vm(this._box).rescale(this.imageDims.reverse())},enumerable:!0,configurable:!0}),n.prototype.forSize=function(x,t){return new n(this.score,this.classScore,this.className,this.relativeBox,{width:x,height:t})},n}(),Gm=function(n){function x(x,t,e){return n.call(this,x,x,"",t,e)||this}return km(x,n),x.prototype.forSize=function(t,e){var i=n.prototype.forSize.call(this,t,e),r=i.score,o=i.relativeBox,s=i.imageDims;return new x(r,o,s)},x}(Qm);function Km(n){var x=n.map(function(n){return n.x}),t=n.map(function(n){return n.y}),e=x.reduce(function(n,x){return x<n?x:n},1/0),i=t.reduce(function(n,x){return x<n?x:n},1/0),r=x.reduce(function(n,x){return n<x?x:n},0),o=t.reduce(function(n,x){return n<x?x:n},0);return new Wm(e,i,r,o)}function Ym(n,x,t){void 0===t&&(t=!0);var e=Math.max(0,Math.min(n.right,x.right)-Math.max(n.left,x.left)),i=Math.max(0,Math.min(n.bottom,x.bottom)-Math.max(n.top,x.top)),r=e*i;return t?r/(n.area+x.area-r):r/Math.min(n.area,x.area)}function Jm(n,x,t,e){void 0===e&&(e=!0);var i=x.map(function(n,x){return{score:n,boxIndex:x}}).sort(function(n,x){return n.score-x.score}).map(function(n){return n.boxIndex}),r=[],o=function(){var x=i.pop();r.push(x);for(var o=i,s=[],h=0;h<o.length;h++){var u=o[h],a=n[x],g=n[u];s.push(Ym(a,g,e))}i=i.filter(function(n,x){return s[x]<=t})};while(i.length>0)o();return r}function Xm(n,x){return bs(function(){var t=x[0],e=x[1],i=x[2],r=$s(Em(n.shape.slice(0,3),[1]),t),o=$s(Em(n.shape.slice(0,3),[1]),e),s=$s(Em(n.shape.slice(0,3),[1]),i),h=ih([r,o,s],3);return vd(n,h)})}function Zm(n,x){return void 0===x&&(x=!1),bs(function(){var t=n.shape.slice(1),e=t[0],i=t[1];if(e===i)return n;var r=Math.abs(e-i),o=Math.round(r*(x?.5:1)),s=e>i?2:1,h=function(x){var t=n.shape.slice();return t[s]=x,$s(t,0)},u=h(o),a=r-u.shape[s],g=x&&a?h(a):null,l=[g,n,u].filter(function(n){return!!n}).map(function(n){return n.toFloat()});return ih(l,s)})}function $m(n){return 1/(1+Math.exp(-n))}var nb,xb=function(n){function x(x,t,e,i,r){return void 0===r&&(r=!1),n.call(this,{x:x,y:t,width:e,height:i},r)||this}return km(x,n),x}(Vm),tb=.5,eb=.43,ib=.45,rb=function(){function n(n,x,t){void 0===t&&(t=new Um(0,0));var e=x.width,i=x.height;this._imgDims=new Sm(e,i),this._shift=t,this._positions=n.map(function(n){return n.mul(new Um(e,i)).add(t)})}return Object.defineProperty(n.prototype,"shift",{get:function(){return new Um(this._shift.x,this._shift.y)},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"imageWidth",{get:function(){return this._imgDims.width},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"imageHeight",{get:function(){return this._imgDims.height},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"positions",{get:function(){return this._positions},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"relativePositions",{get:function(){var n=this;return this._positions.map(function(x){return x.sub(n._shift).div(new Um(n.imageWidth,n.imageHeight))})},enumerable:!0,configurable:!0}),n.prototype.forSize=function(n,x){return new this.constructor(this.relativePositions,{width:n,height:x})},n.prototype.shiftBy=function(n,x){return new this.constructor(this.relativePositions,this._imgDims,new Um(n,x))},n.prototype.shiftByPoint=function(n){return this.shiftBy(n.x,n.y)},n.prototype.align=function(n,x){if(void 0===x&&(x={}),n){var t=n instanceof Gm?n.box.floor():new Vm(n);return this.shiftBy(t.x,t.y).align(null,x)}var e=Object.assign({},{useDlibAlignment:!1,minBoxPadding:.2},x),i=e.useDlibAlignment,r=e.minBoxPadding;return i?this.alignDlib():this.alignMinBbox(r)},n.prototype.alignDlib=function(){var n=this.getRefPointsForAlignment(),x=n[0],t=n[1],e=n[2],i=function(n){return e.sub(n).magnitude()},r=(i(x)+i(t))/2,o=Math.floor(r/ib),s=Fm(n),h=Math.floor(Math.max(0,s.x-tb*o)),u=Math.floor(Math.max(0,s.y-eb*o));return new xb(h,u,Math.min(o,this.imageWidth+h),Math.min(o,this.imageHeight+u))},n.prototype.alignMinBbox=function(n){var x=Km(this.positions);return x.pad(x.width*n,x.height*n)},n.prototype.getRefPointsForAlignment=function(){throw new Error("getRefPointsForAlignment not implemented by base class")},n}(),ob=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.getRefPointsForAlignment=function(){var n=this.positions;return[n[0],n[1],Fm([n[3],n[4]])]},x}(rb),sb=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.getJawOutline=function(){return this.positions.slice(0,17)},x.prototype.getLeftEyeBrow=function(){return this.positions.slice(17,22)},x.prototype.getRightEyeBrow=function(){return this.positions.slice(22,27)},x.prototype.getNose=function(){return this.positions.slice(27,36)},x.prototype.getLeftEye=function(){return this.positions.slice(36,42)},x.prototype.getRightEye=function(){return this.positions.slice(42,48)},x.prototype.getMouth=function(){return this.positions.slice(48,68)},x.prototype.getRefPointsForAlignment=function(){return[this.getLeftEye(),this.getRightEye(),this.getMouth()].map(Fm)},x}(rb),hb=function(){function n(n,x){this._label=n,this._distance=x}return Object.defineProperty(n.prototype,"label",{get:function(){return this._label},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"distance",{get:function(){return this._distance},enumerable:!0,configurable:!0}),n.prototype.toString=function(n){return void 0===n&&(n=!0),this.label+(n?" ("+Bm(this.distance)+")":"")},n}(),ub=function(n){function x(x,t){var e=n.call(this,x)||this;return e._label=t,e}return km(x,n),x.assertIsValidLabeledBox=function(n,x){if(Vm.assertIsValidBox(n,x),!Lm(n.label))throw new Error(x+" - expected property label ("+n.label+") to be a number")},Object.defineProperty(x.prototype,"label",{get:function(){return this._label},enumerable:!0,configurable:!0}),x}(Vm),ab=function(){function n(n,x){if("string"!==typeof n)throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(x)||x.some(function(n){return!(n instanceof Float32Array)}))throw new Error("LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array");this._label=n,this._descriptors=x}return Object.defineProperty(n.prototype,"label",{get:function(){return this._label},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"descriptors",{get:function(){return this._descriptors},enumerable:!0,configurable:!0}),n.prototype.toJSON=function(){return{label:this.label,descriptors:this.descriptors.map(function(n){return Array.from(n)})}},n.fromJSON=function(x){var t=x.descriptors.map(function(n){return new Float32Array(n)});return new n(x.label,t)},n}();(function(n){function x(x,t,e,i){var r=n.call(this,x,t)||this;return r._score=e,r._classScore=i,r}km(x,n),x.assertIsValidPredictedBox=function(n,x){if(ub.assertIsValidLabeledBox(n,x),!Hm(n.score)||!Hm(n.classScore))throw new Error(x+" - expected properties score ("+n.score+") and ("+n.classScore+") to be a number between [0, 1]")},Object.defineProperty(x.prototype,"score",{get:function(){return this._score},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,"classScore",{get:function(){return this._classScore},enumerable:!0,configurable:!0})})(ub);function gb(n){return n["detection"]instanceof Gm}function lb(n,x){var t={detection:x};return Object.assign({},n,t)}function cb(){var n=window["fetch"]||function(){throw new Error("fetch - missing fetch implementation for browser environment")},x=function(){throw new Error("readFile - filesystem not available for browser environment")};return{Canvas:HTMLCanvasElement,CanvasRenderingContext2D:CanvasRenderingContext2D,Image:HTMLImageElement,ImageData:ImageData,Video:HTMLVideoElement,createCanvasElement:function(){return document.createElement("canvas")},createImageElement:function(){return document.createElement("img")},fetch:n,readFile:x}}function db(n){var x="";if(!n)try{n=e(Object(function(){var n=new Error("Cannot find module 'fs'");throw n.code="MODULE_NOT_FOUND",n}()))}catch(i){x=i.toString()}var t=n?function(x){return new Promise(function(t,e){n.readFile(x,function(n,x){return n?e(n):t(x)})})}:function(){throw new Error("readFile - failed to require fs in nodejs environment with error: "+x)};return{readFile:t}}function fb(){var n=e.g["Canvas"]||e.g["HTMLCanvasElement"],x=e.g["Image"]||e.g["HTMLImageElement"],t=function(){if(n)return new n;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},i=function(){if(x)return new x;throw new Error("createImageElement - missing Image implementation for nodejs environment")},r=e.g["fetch"]||function(){throw new Error("fetch - missing fetch implementation for nodejs environment")},o=db();return qm({Canvas:n||function(){function n(){}return n}(),CanvasRenderingContext2D:e.g["CanvasRenderingContext2D"]||function(){function n(){}return n}(),Image:x||function(){function n(){}return n}(),ImageData:e.g["ImageData"]||function(){function n(){}return n}(),Video:e.g["HTMLVideoElement"]||function(){function n(){}return n}(),createCanvasElement:t,createImageElement:i,fetch:r},o)}function pb(){return"object"===typeof window&&"undefined"!==typeof document&&"undefined"!==typeof HTMLImageElement&&"undefined"!==typeof HTMLCanvasElement&&"undefined"!==typeof HTMLVideoElement&&"undefined"!==typeof ImageData&&"undefined"!==typeof CanvasRenderingContext2D}function yb(){return"object"===typeof e.g&&"undefined"!==typeof process&&!!process.version}function mb(){if(!nb)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return nb}function bb(n){nb=n}function zb(){pb()&&bb(cb()),yb()&&bb(fb())}function vb(n){if(nb||zb(),!nb)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");var x=n.Canvas,t=void 0===x?nb.Canvas:x,e=n.Image,i=void 0===e?nb.Image:e;nb.Canvas=t,nb.Image=i,nb.createCanvasElement=n.createCanvasElement||function(){return new t},nb.createImageElement=n.createImageElement||function(){return new i},nb.ImageData=n.ImageData||nb.ImageData,nb.Video=n.Video||nb.Video,nb.fetch=n.fetch||nb.fetch,nb.readFile=n.readFile||nb.readFile}var jb,wb={getEnv:mb,setEnv:bb,initialize:zb,createBrowserEnv:cb,createFileSystem:db,createNodejsEnv:fb,monkeyPatch:vb,isBrowser:pb,isNodejs:yb};function kb(n){return wb.isNodejs()||"string"!==typeof n?n:document.getElementById(n)}function qb(n){var x=wb.getEnv(),t=x.Canvas,e=x.CanvasRenderingContext2D;if(n instanceof e)return n;var i=kb(n);if(!(i instanceof t))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");var r=i.getContext("2d");if(!r)throw new Error("resolveContext2d - canvas 2d context is null");return r}zb(),function(n){n["TOP_LEFT"]="TOP_LEFT",n["TOP_RIGHT"]="TOP_RIGHT",n["BOTTOM_LEFT"]="BOTTOM_LEFT",n["BOTTOM_RIGHT"]="BOTTOM_RIGHT"}(jb||(jb={}));var Cb=function(){function n(n){void 0===n&&(n={});var x=n.anchorPosition,t=n.backgroundColor,e=n.fontColor,i=n.fontSize,r=n.fontStyle,o=n.padding;this.anchorPosition=x||jb.TOP_LEFT,this.backgroundColor=t||"rgba(0, 0, 0, 0.5)",this.fontColor=e||"rgba(255, 255, 255, 1)",this.fontSize=i||14,this.fontStyle=r||"Georgia",this.padding=o||4}return n}(),Ab=function(){function n(x,t,e){void 0===e&&(e={}),this.text="string"===typeof x?[x]:x instanceof n?x.text:x,this.anchor=t,this.options=new Cb(e)}return n.prototype.measureWidth=function(n){var x=this.options.padding;return this.text.map(function(x){return n.measureText(x).width}).reduce(function(n,x){return n<x?x:n},0)+2*x},n.prototype.measureHeight=function(){var n=this.options,x=n.fontSize,t=n.padding;return this.text.length*x+2*t},n.prototype.getUpperLeft=function(n,x){var t=this.options.anchorPosition,e=t===jb.BOTTOM_RIGHT||t===jb.TOP_RIGHT,i=t===jb.BOTTOM_LEFT||t===jb.BOTTOM_RIGHT,r=this.measureWidth(n),o=this.measureHeight(),s=e?this.anchor.x-r:this.anchor.x,h=i?this.anchor.y-o:this.anchor.y;if(x){var u=x.width,a=x.height,g=Math.max(Math.min(s,u-r),0),l=Math.max(Math.min(h,a-o),0);return{x:g,y:l}}return{x:s,y:h}},n.prototype.draw=function(n){var x=kb(n),t=qb(x),e=this.options,i=e.backgroundColor,r=e.fontColor,o=e.fontSize,s=e.fontStyle,h=e.padding;t.font=o+"px "+s;var u=this.measureWidth(t),a=this.measureHeight();t.fillStyle=i;var g=this.getUpperLeft(t,x);t.fillRect(g.x,g.y,u,a),t.fillStyle=r,this.text.forEach(function(n,x){var e=h+g.x,i=h+g.y+(x+1)*o;t.fillText(n,e,i)})},n}(),Eb=function(){function n(n){void 0===n&&(n={});var x=n.boxColor,t=n.lineWidth,e=n.label,i=n.drawLabelOptions;this.boxColor=x||"rgba(0, 0, 255, 1)",this.lineWidth=t||2,this.label=e;var r={anchorPosition:jb.BOTTOM_LEFT,backgroundColor:this.boxColor};this.drawLabelOptions=new Cb(Object.assign({},r,i))}return n}();(function(){function n(n,x){void 0===x&&(x={}),this.box=new Vm(n),this.options=new Eb(x)}n.prototype.draw=function(n){var x=qb(n),t=this.options,e=t.boxColor,i=t.lineWidth,r=this.box,o=r.x,s=r.y,h=r.width,u=r.height;x.strokeStyle=e,x.lineWidth=i,x.strokeRect(o,s,h,u);var a=this.options.label;a&&new Ab([a],{x:o-i/2,y:s},this.options.drawLabelOptions).draw(n)}})();function Sb(n){var x=wb.getEnv(),t=x.Image,e=x.Video;return n instanceof t&&n.complete||n instanceof e&&n.readyState>=3}function Ib(n){return new Promise(function(x,t){if(n instanceof wb.getEnv().Canvas||Sb(n))return x();function e(n){n.currentTarget&&(n.currentTarget.removeEventListener("load",e),n.currentTarget.removeEventListener("error",i),x(n))}function i(n){n.currentTarget&&(n.currentTarget.removeEventListener("load",e),n.currentTarget.removeEventListener("error",i),t(n))}n.addEventListener("load",e),n.addEventListener("error",i)})}function Db(n){var x=wb.getEnv(),t=x.Image,e=x.Video;return n instanceof t?new Sm(n.naturalWidth,n.naturalHeight):n instanceof e?new Sm(n.videoWidth,n.videoHeight):new Sm(n.width,n.height)}function Ob(n){var x=n.width,t=n.height,e=wb.getEnv().createCanvasElement,i=e();return i.width=x,i.height=t,i}function _b(n,x){var t=wb.getEnv().ImageData;if(!(n instanceof t)&&!Sb(n))throw new Error("createCanvasFromMedia - media has not finished loading yet");var e=x||Db(n),i=e.width,r=e.height,o=Ob({width:i,height:r});return n instanceof t?qb(o).putImageData(n,0,0):qb(o).drawImage(n,0,0,i,r),o}function Tb(n,x){return Cm(this,void 0,void 0,function(){var t,e,i,r,o,s;return Am(this,function(h){switch(h.label){case 0:return t=x||wb.getEnv().createCanvasElement(),e=n.shape.slice(_m(n)?1:0),i=e[0],r=e[1],o=e[2],s=bs(function(){return n.as3D(i,r,o).toInt()}),[4,im.toPixels(s,t)];case 1:return h.sent(),s.dispose(),[2,t]}})})}function Rb(n){var x=wb.getEnv(),t=x.Image,e=x.Canvas,i=x.Video;return n instanceof t||n instanceof e||n instanceof i}function Bb(n,x,t){void 0===t&&(t=!1);var e=wb.getEnv(),i=e.Image,r=e.Canvas;if(!(n instanceof i||n instanceof r))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");var o=Db(n),s=x/Math.max(o.height,o.width),h=s*o.width,u=s*o.height,a=Ob({width:x,height:x}),g=n instanceof r?n:_b(n),l=Math.abs(h-u)/2,c=t&&h<u?l:0,d=t&&u<h?l:0;return qb(a).drawImage(g,c,d,h,u),a}var Mb=function(){function n(n,x){var t=this;if(void 0===x&&(x=!1),this._imageTensors=[],this._canvases=[],this._treatAsBatchInput=!1,this._inputDimensions=[],!Array.isArray(n))throw new Error("NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have "+n);this._treatAsBatchInput=x,this._batchSize=n.length,n.forEach(function(n,x){if(Om(n))return t._imageTensors[x]=n,void(t._inputDimensions[x]=n.shape);if(_m(n)){var e=n.shape[0];if(1!==e)throw new Error("NetInput - tf.Tensor4D with batchSize "+e+" passed, but not supported in input array");return t._imageTensors[x]=n,void(t._inputDimensions[x]=n.shape.slice(1))}var i=n instanceof wb.getEnv().Canvas?n:_b(n);t._canvases[x]=i,t._inputDimensions[x]=[i.height,i.width,3]})}return Object.defineProperty(n.prototype,"imageTensors",{get:function(){return this._imageTensors},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"canvases",{get:function(){return this._canvases},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"isBatchInput",{get:function(){return this.batchSize>1||this._treatAsBatchInput},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"batchSize",{get:function(){return this._batchSize},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"inputDimensions",{get:function(){return this._inputDimensions},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"inputSize",{get:function(){return this._inputSize},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"reshapedInputDimensions",{get:function(){var n=this;return Pm(this.batchSize,0,1).map(function(x,t){return n.getReshapedInputDimensions(t)})},enumerable:!0,configurable:!0}),n.prototype.getInput=function(n){return this.canvases[n]||this.imageTensors[n]},n.prototype.getInputDimensions=function(n){return this._inputDimensions[n]},n.prototype.getInputHeight=function(n){return this._inputDimensions[n][0]},n.prototype.getInputWidth=function(n){return this._inputDimensions[n][1]},n.prototype.getReshapedInputDimensions=function(n){if("number"!==typeof this.inputSize)throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");var x=this.getInputWidth(n),t=this.getInputHeight(n);return Nm({width:x,height:t},this.inputSize)},n.prototype.toBatchTensor=function(n,x){var t=this;return void 0===x&&(x=!0),this._inputSize=n,bs(function(){var e=Pm(t.batchSize,0,1).map(function(e){var i=t.getInput(e);if(i instanceof Kr){var r=_m(i)?i:i.expandDims();return r=Zm(r,x),r.shape[1]===n&&r.shape[2]===n||(r=Tp.resizeBilinear(r,[n,n])),r.as3D(n,n,3)}if(i instanceof wb.getEnv().Canvas)return im.fromPixels(Bb(i,n,x));throw new Error("toBatchTensor - at batchIdx "+e+", expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have "+i)}),i=Qh(e.map(function(n){return n.toFloat()})).as4D(t.batchSize,n,n,3);return i})},n}();function Nb(n){return Cm(this,void 0,void 0,function(){var x,t,e;return Am(this,function(i){switch(i.label){case 0:if(n instanceof Mb)return[2,n];if(x=Array.isArray(n)?n:[n],!x.length)throw new Error("toNetInput - empty array passed as input");return t=function(x){return Array.isArray(n)?" at input index "+x+":":""},e=x.map(kb),e.forEach(function(n,e){if(!Rb(n)&&!Om(n)&&!_m(n)){if("string"===typeof x[e])throw new Error("toNetInput -"+t(e)+" string passed, but could not resolve HTMLElement for element id "+x[e]);throw new Error("toNetInput -"+t(e)+" expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id")}if(_m(n)){var i=n.shape[0];if(1!==i)throw new Error("toNetInput -"+t(e)+" tf.Tensor4D with batchSize "+i+" passed, but not supported in input array")}}),[4,Promise.all(e.map(function(n){return Rb(n)&&Ib(n)}))];case 1:return i.sent(),[2,new Mb(e,Array.isArray(n))]}})})}function Fb(n,x){return Cm(this,void 0,void 0,function(){var t,e,i,r,o,s,h;return Am(this,function(u){switch(u.label){case 0:return t=wb.getEnv().Canvas,e=n,n instanceof t?[3,5]:[4,Nb(n)];case 1:if(i=u.sent(),i.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");return r=i.getInput(0),r instanceof t?(o=r,[3,4]):[3,2];case 2:return[4,Tb(r)];case 3:o=u.sent(),u.label=4;case 4:e=o,u.label=5;case 5:return s=qb(e),h=x.map(function(n){return n instanceof Gm?n.forSize(e.width,e.height).box.floor():n}).map(function(n){return n.clipAtImageBorders(e.width,e.height)}),[2,h.map(function(n){var x=n.x,t=n.y,e=n.width,i=n.height,r=Ob({width:e,height:i});return qb(r).putImageData(s.getImageData(x,t,e,i),0,0),r})]}})})}function Pb(n,x){return Cm(this,void 0,void 0,function(){return Am(this,function(t){if(!Om(n)&&!_m(n))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(_m(n)&&n.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return[2,bs(function(){var t=n.shape.slice(_m(n)?1:0),e=t[0],i=t[1],r=t[2],o=x.map(function(n){return n instanceof Gm?n.forSize(i,e).box:n}).map(function(n){return n.clipAtImageBorders(i,e)}),s=o.map(function(x){var t=x.x,o=x.y,s=x.width,h=x.height;return bf(n.as3D(e,i,r),[o,t,0],[h,s,r])});return s})]})})}function Lb(n,x){return Cm(this,void 0,void 0,function(){var t,e;return Am(this,function(i){switch(i.label){case 0:return t=wb.getEnv().fetch,[4,t(n,x)];case 1:if(e=i.sent(),!(e.status<400))throw new Error("failed to fetch: ("+e.status+") "+e.statusText+", from url: "+e.url);return[2,e]}})})}function Hb(n){return Cm(this,void 0,void 0,function(){return Am(this,function(x){switch(x.label){case 0:return[4,Lb(n)];case 1:return[2,x.sent().json()]}})})}function Ub(n,x){var t=x+"-weights_manifest.json";if(!n)return{modelBaseUri:"",manifestUri:t};if("/"===n)return{modelBaseUri:"/",manifestUri:"/"+t};var e=n.startsWith("http://")?"http://":n.startsWith("https://")?"https://":"";n=n.replace(e,"");var i=n.split("/").filter(function(n){return n}),r=n.endsWith(".json")?i[i.length-1]:t,o=e+(n.endsWith(".json")?i.slice(0,i.length-1):i).join("/");return o=n.startsWith("/")?"/"+o:o,{modelBaseUri:o,manifestUri:"/"===o?"/"+r:o+"/"+r}}function Vb(n,x){return Cm(this,void 0,void 0,function(){var t,e,i,r;return Am(this,function(o){switch(o.label){case 0:return t=Ub(n,x),e=t.manifestUri,i=t.modelBaseUri,[4,Hb(e)];case 1:return r=o.sent(),[2,xm.loadWeights(r,i)]}})})}var Wb=function(){function n(n){this._name=n,this._params=void 0,this._paramMappings=[]}return Object.defineProperty(n.prototype,"params",{get:function(){return this._params},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"paramMappings",{get:function(){return this._paramMappings},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"isLoaded",{get:function(){return!!this.params},enumerable:!0,configurable:!0}),n.prototype.getParamFromPath=function(n){var x=this.traversePropertyPath(n),t=x.obj,e=x.objProp;return t[e]},n.prototype.reassignParamFromPath=function(n,x){var t=this.traversePropertyPath(n),e=t.obj,i=t.objProp;e[i].dispose(),e[i]=x},n.prototype.getParamList=function(){var n=this;return this._paramMappings.map(function(x){var t=x.paramPath;return{path:t,tensor:n.getParamFromPath(t)}})},n.prototype.getTrainableParams=function(){return this.getParamList().filter(function(n){return n.tensor instanceof no})},n.prototype.getFrozenParams=function(){return this.getParamList().filter(function(n){return!(n.tensor instanceof no)})},n.prototype.variable=function(){var n=this;this.getFrozenParams().forEach(function(x){var t=x.path,e=x.tensor;n.reassignParamFromPath(t,e.variable())})},n.prototype.freeze=function(){var n=this;this.getTrainableParams().forEach(function(x){var t=x.path,e=x.tensor,i=Ls(e.dataSync());e.dispose(),n.reassignParamFromPath(t,i)})},n.prototype.dispose=function(n){void 0===n&&(n=!0),this.getParamList().forEach(function(x){if(n&&x.tensor.isDisposed)throw new Error("param tensor has already been disposed for path "+x.path);x.tensor.dispose()}),this._params=void 0},n.prototype.serializeParams=function(){return new Float32Array(this.getParamList().map(function(n){var x=n.tensor;return Array.from(x.dataSync())}).reduce(function(n,x){return n.concat(x)}))},n.prototype.load=function(n){return Cm(this,void 0,void 0,function(){return Am(this,function(x){switch(x.label){case 0:return n instanceof Float32Array?(this.extractWeights(n),[2]):[4,this.loadFromUri(n)];case 1:return x.sent(),[2]}})})},n.prototype.loadFromUri=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:if(n&&"string"!==typeof n)throw new Error(this._name+".loadFromUri - expected model uri");return[4,Vb(n,this.getDefaultModelName())];case 1:return x=t.sent(),this.loadFromWeightMap(x),[2]}})})},n.prototype.loadFromDisk=function(n){return Cm(this,void 0,void 0,function(){var x,t,e,i,r,o,s,h,u,a;return Am(this,function(g){switch(g.label){case 0:if(n&&"string"!==typeof n)throw new Error(this._name+".loadFromDisk - expected model file path");return x=wb.getEnv().readFile,t=Ub(n,this.getDefaultModelName()),e=t.manifestUri,i=t.modelBaseUri,r=function(n){return Promise.all(n.map(function(n){return x(n).then(function(n){return n.buffer})}))},o=xm.weightsLoaderFactory(r),u=(h=JSON).parse,[4,x(e)];case 1:return s=u.apply(h,[g.sent().toString()]),[4,o(s,i)];case 2:return a=g.sent(),this.loadFromWeightMap(a),[2]}})})},n.prototype.loadFromWeightMap=function(n){var x=this.extractParamsFromWeigthMap(n),t=x.paramMappings,e=x.params;this._paramMappings=t,this._params=e},n.prototype.extractWeights=function(n){var x=this.extractParams(n),t=x.paramMappings,e=x.params;this._paramMappings=t,this._params=e},n.prototype.traversePropertyPath=function(n){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");var x=n.split("/").reduce(function(x,t){if(!x.nextObj.hasOwnProperty(t))throw new Error("traversePropertyPath - object does not have property "+t+", for path "+n);return{obj:x.nextObj,objProp:t,nextObj:x.nextObj[t]}},{nextObj:this.params}),t=x.obj,e=x.objProp;if(!t||!e||!(t[e]instanceof Kr))throw new Error("traversePropertyPath - parameter is not a tensor, for path "+n);return{obj:t,objProp:e}},n}();function Qb(n,x,t){return bs(function(){var e=Xd(n,x.depthwise_filter,x.pointwise_filter,t,"same");return e=td(e,x.bias),e})}function Gb(n,x,t){return void 0===t&&(t=!1),bs(function(){var e=Bf(t?td(Vd(n,x.conv0.filters,[2,2],"same"),x.conv0.bias):Qb(n,x.conv0,[2,2])),i=Qb(e,x.conv1,[1,1]),r=Bf(td(e,i)),o=Qb(r,x.conv2,[1,1]);return Bf(td(e,td(i,o)))})}function Kb(n,x,t,e){return void 0===t&&(t=!1),void 0===e&&(e=!0),bs(function(){var i=Bf(t?td(Vd(n,x.conv0.filters,e?[2,2]:[1,1],"same"),x.conv0.bias):Qb(n,x.conv0,e?[2,2]:[1,1])),r=Qb(i,x.conv1,[1,1]),o=Bf(td(i,r)),s=Qb(o,x.conv2,[1,1]),h=Bf(td(i,td(r,s))),u=Qb(h,x.conv3,[1,1]);return Bf(td(i,td(r,td(s,u))))})}function Yb(n,x,t,e){return void 0===t&&(t="same"),void 0===e&&(e=!1),bs(function(){var i=td(Vd(n,x.filters,[1,1],t),x.bias);return e?Bf(i):i})}function Jb(n,x){Object.keys(n).forEach(function(t){x.some(function(n){return n.originalPath===t})||n[t].dispose()})}function Xb(n,x){return function(t,e,i,r){var o=Gs(n(t*e*i*i),[i,i,t,e]),s=Vs(n(e));return x.push({paramPath:r+"/filters"},{paramPath:r+"/bias"}),{filters:o,bias:s}}}function Zb(n,x){return function(t,e,i){var r=Ws(n(t*e),[t,e]),o=Vs(n(e));return x.push({paramPath:i+"/weights"},{paramPath:i+"/bias"}),{weights:r,bias:o}}}var $b=function(){function n(n,x,t){this.depthwise_filter=n,this.pointwise_filter=x,this.bias=t}return n}();function nz(n,x){return function(t,e,i){var r=Gs(n(9*t),[3,3,t,1]),o=Gs(n(t*e),[1,1,t,e]),s=Vs(n(e));return x.push({paramPath:i+"/depthwise_filter"},{paramPath:i+"/pointwise_filter"},{paramPath:i+"/bias"}),new $b(r,o,s)}}function xz(n){return function(x){var t=n(x+"/depthwise_filter",4),e=n(x+"/pointwise_filter",4),i=n(x+"/bias",1);return new $b(t,e,i)}}function tz(n,x){return function(t,e,i){var r=n[t];if(!Im(r,e))throw new Error("expected weightMap["+t+"] to be a Tensor"+e+"D, instead have "+r);return x.push({originalPath:t,paramPath:i||t}),r}}function ez(n){var x=n;function t(n){var t=x.slice(0,n);return x=x.slice(n),t}function e(){return x}return{extractWeights:t,getRemainingWeights:e}}function iz(n,x){var t=Xb(n,x),e=nz(n,x);function i(n,x,i,r){void 0===r&&(r=!1);var o=r?t(n,x,3,i+"/conv0"):e(n,x,i+"/conv0"),s=e(x,x,i+"/conv1"),h=e(x,x,i+"/conv2");return{conv0:o,conv1:s,conv2:h}}function r(n,x,t,r){void 0===r&&(r=!1);var o=i(n,x,t,r),s=o.conv0,h=o.conv1,u=o.conv2,a=e(x,x,t+"/conv3");return{conv0:s,conv1:h,conv2:u,conv3:a}}return{extractDenseBlock3Params:i,extractDenseBlock4Params:r}}function rz(n){var x=[],t=ez(n),e=t.extractWeights,i=t.getRemainingWeights,r=iz(e,x).extractDenseBlock4Params,o=r(3,32,"dense0",!0),s=r(32,64,"dense1"),h=r(64,128,"dense2"),u=r(128,256,"dense3");if(0!==i().length)throw new Error("weights remaing after extract: "+i().length);return{paramMappings:x,params:{dense0:o,dense1:s,dense2:h,dense3:u}}}function oz(n){return function(x){var t=n(x+"/filters",4),e=n(x+"/bias",1);return{filters:t,bias:e}}}function sz(n,x){var t=tz(n,x),e=oz(t),i=xz(t);function r(n,x){void 0===x&&(x=!1);var t=x?e(n+"/conv0"):i(n+"/conv0"),r=i(n+"/conv1"),o=i(n+"/conv2");return{conv0:t,conv1:r,conv2:o}}function o(n,x){void 0===x&&(x=!1);var t=x?e(n+"/conv0"):i(n+"/conv0"),r=i(n+"/conv1"),o=i(n+"/conv2"),s=i(n+"/conv3");return{conv0:t,conv1:r,conv2:o,conv3:s}}return{extractDenseBlock3Params:r,extractDenseBlock4Params:o}}function hz(n){var x=[],t=sz(n,x).extractDenseBlock4Params,e={dense0:t("dense0",!0),dense1:t("dense1"),dense2:t("dense2"),dense3:t("dense3")};return Jb(n,x),{params:e,paramMappings:x}}var uz=function(n){function x(){return n.call(this,"FaceFeatureExtractor")||this}return km(x,n),x.prototype.forwardInput=function(n){var x=this.params;if(!x)throw new Error("FaceFeatureExtractor - load model before inference");return bs(function(){var t=n.toBatchTensor(112,!0),e=[122.782,117.001,104.298],i=Xm(t,e).div(Us(255)),r=Kb(i,x.dense0,!0);return r=Kb(r,x.dense1),r=Kb(r,x.dense2),r=Kb(r,x.dense3),r=lf(r,[7,7],[2,2],"valid"),r})},x.prototype.forward=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=this.forwardInput,[4,Nb(n)];case 1:return[2,x.apply(this,[t.sent()])]}})})},x.prototype.getDefaultModelName=function(){return"face_feature_extractor_model"},x.prototype.extractParamsFromWeigthMap=function(n){return hz(n)},x.prototype.extractParams=function(n){return rz(n)},x}(Wb);function az(n,x){return bs(function(){return td(nf(n,x.weights),x.bias)})}function gz(n,x,t){var e=[],i=ez(n),r=i.extractWeights,o=i.getRemainingWeights,s=Zb(r,e),h=s(x,t,"fc");if(0!==o().length)throw new Error("weights remaing after extract: "+o().length);return{paramMappings:e,params:{fc:h}}}function lz(n){var x=[],t=tz(n,x);function e(n){var x=t(n+"/weights",2),e=t(n+"/bias",1);return{weights:x,bias:e}}var i={fc:e("fc")};return Jb(n,x),{params:i,paramMappings:x}}function cz(n){var x={},t={};return Object.keys(n).forEach(function(e){var i=e.startsWith("fc")?t:x;i[e]=n[e]}),{featureExtractorMap:x,classifierMap:t}}var dz=function(n){function x(x,t){var e=n.call(this,x)||this;return e._faceFeatureExtractor=t,e}return km(x,n),Object.defineProperty(x.prototype,"faceFeatureExtractor",{get:function(){return this._faceFeatureExtractor},enumerable:!0,configurable:!0}),x.prototype.runNet=function(n){var x=this,t=this.params;if(!t)throw new Error(this._name+" - load model before inference");return bs(function(){var e=n instanceof Mb?x.faceFeatureExtractor.forwardInput(n):n;return az(e.as2D(e.shape[0],-1),t.fc)})},x.prototype.dispose=function(x){void 0===x&&(x=!0),this.faceFeatureExtractor.dispose(x),n.prototype.dispose.call(this,x)},x.prototype.loadClassifierParams=function(n){var x=this.extractClassifierParams(n),t=x.params,e=x.paramMappings;this._params=t,this._paramMappings=e},x.prototype.extractClassifierParams=function(n){return gz(n,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())},x.prototype.extractParamsFromWeigthMap=function(n){var x=cz(n),t=x.featureExtractorMap,e=x.classifierMap;return this.faceFeatureExtractor.loadFromWeightMap(t),lz(e)},x.prototype.extractParams=function(n){var x=this.getClassifierChannelsIn(),t=this.getClassifierChannelsOut(),e=t*x+t,i=n.slice(0,n.length-e),r=n.slice(n.length-e);return this.faceFeatureExtractor.extractWeights(i),this.extractClassifierParams(r)},x}(Wb),fz=["neutral","happy","sad","angry","fearful","disgusted","surprised"],pz=function(){function n(n){var x=this;if(7!==n.length)throw new Error("FaceExpressions.constructor - expected probabilities.length to be 7, have: "+n.length);fz.forEach(function(t,e){x[t]=n[e]})}return n.prototype.asSortedArray=function(){var n=this;return fz.map(function(x){return{expression:x,probability:n[x]}}).sort(function(n,x){return x.probability-n.probability})},n}(),yz=function(n){function x(x){return void 0===x&&(x=new uz),n.call(this,"FaceExpressionNet",x)||this}return km(x,n),x.prototype.forwardInput=function(n){var x=this;return bs(function(){return yu(x.runNet(n))})},x.prototype.forward=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=this.forwardInput,[4,Nb(n)];case 1:return[2,x.apply(this,[t.sent()])]}})})},x.prototype.predictExpressions=function(n){return Cm(this,void 0,void 0,function(){var x,t,e,i,r=this;return Am(this,function(o){switch(o.label){case 0:return[4,Nb(n)];case 1:return x=o.sent(),[4,this.forwardInput(x)];case 2:return t=o.sent(),[4,Promise.all(Yh(t).map(function(n){return Cm(r,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return[4,n.data()];case 1:return x=t.sent(),n.dispose(),[2,x]}})})}))];case 3:return e=o.sent(),t.dispose(),i=e.map(function(n){return new pz(n)}),[2,x.isBatchInput?i:i[0]]}})})},x.prototype.getDefaultModelName=function(){return"face_expression_model"},x.prototype.getClassifierChannelsIn=function(){return 256},x.prototype.getClassifierChannelsOut=function(){return 7},x}(dz);function mz(n,x){var t={expressions:x};return Object.assign({},n,t)}function bz(n){return gb(n)&&n["landmarks"]instanceof rb&&n["unshiftedLandmarks"]instanceof rb&&n["alignedRect"]instanceof Gm}function zz(n,x){var t=n.detection.box,e=x.shiftBy(t.x,t.y),i=e.align(),r=n.detection.imageDims,o=new Gm(n.detection.score,i.rescale(r.reverse()),r),s={landmarks:e,unshiftedLandmarks:x,alignedRect:o};return Object.assign({},n,s)}var vz=function(){function n(n){void 0===n&&(n={});var x=n.drawLines,t=void 0===x||x,e=n.drawPoints,i=void 0===e||e,r=n.lineWidth,o=n.lineColor,s=n.pointSize,h=n.pointColor;this.drawLines=t,this.drawPoints=i,this.lineWidth=r||1,this.pointSize=s||2,this.lineColor=o||"rgba(0, 255, 255, 1)",this.pointColor=h||"rgba(255, 0, 255, 1)"}return n}();(function(){function n(n,x){void 0===x&&(x={}),this.faceLandmarks=n,this.options=new vz(x)}n.prototype.draw=function(n){var x=qb(n),t=this.options,e=t.drawLines,i=t.drawPoints,r=t.lineWidth,o=t.lineColor,s=t.pointSize,h=t.pointColor;if(e&&this.faceLandmarks instanceof sb&&(x.strokeStyle=o,x.lineWidth=r,jm(x,this.faceLandmarks.getJawOutline()),jm(x,this.faceLandmarks.getLeftEyeBrow()),jm(x,this.faceLandmarks.getRightEyeBrow()),jm(x,this.faceLandmarks.getNose()),jm(x,this.faceLandmarks.getLeftEye(),!0),jm(x,this.faceLandmarks.getRightEye(),!0),jm(x,this.faceLandmarks.getMouth(),!0)),i){x.strokeStyle=h,x.fillStyle=h;var u=function(n){x.beginPath(),x.arc(n.x,n.y,s,0,2*Math.PI),x.fill()};this.faceLandmarks.positions.forEach(u)}}})();function jz(n,x){var t=Xb(n,x),e=nz(n,x);function i(n,x,i){var r=e(n,x,i+"/separable_conv0"),o=e(x,x,i+"/separable_conv1"),s=t(n,x,1,i+"/expansion_conv");return{separable_conv0:r,separable_conv1:o,expansion_conv:s}}function r(n,x){var t=e(n,n,x+"/separable_conv0"),i=e(n,n,x+"/separable_conv1"),r=e(n,n,x+"/separable_conv2");return{separable_conv0:t,separable_conv1:i,separable_conv2:r}}return{extractConvParams:t,extractSeparableConvParams:e,extractReductionBlockParams:i,extractMainBlockParams:r}}function wz(n,x){var t=[],e=ez(n),i=e.extractWeights,r=e.getRemainingWeights,o=jz(i,t),s=o.extractConvParams,h=o.extractSeparableConvParams,u=o.extractReductionBlockParams,a=o.extractMainBlockParams,g=s(3,32,3,"entry_flow/conv_in"),l=u(32,64,"entry_flow/reduction_block_0"),c=u(64,128,"entry_flow/reduction_block_1"),d={conv_in:g,reduction_block_0:l,reduction_block_1:c},f={};Pm(x,0,1).forEach(function(n){f["main_block_"+n]=a(128,"middle_flow/main_block_"+n)});var p=u(128,256,"exit_flow/reduction_block"),y=h(256,512,"exit_flow/separable_conv"),m={reduction_block:p,separable_conv:y};if(0!==r().length)throw new Error("weights remaing after extract: "+r().length);return{paramMappings:t,params:{entry_flow:d,middle_flow:f,exit_flow:m}}}function kz(n,x){var t=tz(n,x),e=oz(t),i=xz(t);function r(n){var x=i(n+"/separable_conv0"),t=i(n+"/separable_conv1"),r=e(n+"/expansion_conv");return{separable_conv0:x,separable_conv1:t,expansion_conv:r}}function o(n){var x=i(n+"/separable_conv0"),t=i(n+"/separable_conv1"),e=i(n+"/separable_conv2");return{separable_conv0:x,separable_conv1:t,separable_conv2:e}}return{extractConvParams:e,extractSeparableConvParams:i,extractReductionBlockParams:r,extractMainBlockParams:o}}function qz(n,x){var t=[],e=kz(n,t),i=e.extractConvParams,r=e.extractSeparableConvParams,o=e.extractReductionBlockParams,s=e.extractMainBlockParams,h=i("entry_flow/conv_in"),u=o("entry_flow/reduction_block_0"),a=o("entry_flow/reduction_block_1"),g={conv_in:h,reduction_block_0:u,reduction_block_1:a},l={};Pm(x,0,1).forEach(function(n){l["main_block_"+n]=s("middle_flow/main_block_"+n)});var c=o("exit_flow/reduction_block"),d=r("exit_flow/separable_conv"),f={reduction_block:c,separable_conv:d};return Jb(n,t),{params:{entry_flow:g,middle_flow:l,exit_flow:f},paramMappings:t}}function Cz(n,x,t){return td(Vd(n,x.filters,t,"same"),x.bias)}function Az(n,x,t){void 0===t&&(t=!0);var e=t?Bf(n):n;return e=Qb(e,x.separable_conv0,[1,1]),e=Qb(Bf(e),x.separable_conv1,[1,1]),e=gf(e,[3,3],[2,2],"same"),e=td(e,Cz(n,x.expansion_conv,[2,2])),e}function Ez(n,x){var t=Qb(Bf(n),x.separable_conv0,[1,1]);return t=Qb(Bf(t),x.separable_conv1,[1,1]),t=Qb(Bf(t),x.separable_conv2,[1,1]),t=td(t,n),t}var Sz,Iz=function(n){function x(x){var t=n.call(this,"TinyXception")||this;return t._numMainBlocks=x,t}return km(x,n),x.prototype.forwardInput=function(n){var x=this,t=this.params;if(!t)throw new Error("TinyXception - load model before inference");return bs(function(){var e=n.toBatchTensor(112,!0),i=[122.782,117.001,104.298],r=Xm(e,i).div(Us(256)),o=Bf(Cz(r,t.entry_flow.conv_in,[2,2]));return o=Az(o,t.entry_flow.reduction_block_0,!1),o=Az(o,t.entry_flow.reduction_block_1),Pm(x._numMainBlocks,0,1).forEach(function(n){o=Ez(o,t.middle_flow["main_block_"+n])}),o=Az(o,t.exit_flow.reduction_block),o=Bf(Qb(o,t.exit_flow.separable_conv,[1,1])),o})},x.prototype.forward=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=this.forwardInput,[4,Nb(n)];case 1:return[2,x.apply(this,[t.sent()])]}})})},x.prototype.getDefaultModelName=function(){return"tiny_xception_model"},x.prototype.extractParamsFromWeigthMap=function(n){return qz(n,this._numMainBlocks)},x.prototype.extractParams=function(n){return wz(n,this._numMainBlocks)},x}(Wb);function Dz(n){var x=[],t=ez(n),e=t.extractWeights,i=t.getRemainingWeights,r=Zb(e,x),o=r(512,1,"fc/age"),s=r(512,2,"fc/gender");if(0!==i().length)throw new Error("weights remaing after extract: "+i().length);return{paramMappings:x,params:{fc:{age:o,gender:s}}}}function Oz(n){var x=[],t=tz(n,x);function e(n){var x=t(n+"/weights",2),e=t(n+"/bias",1);return{weights:x,bias:e}}var i={fc:{age:e("fc/age"),gender:e("fc/gender")}};return Jb(n,x),{params:i,paramMappings:x}}(function(n){n["FEMALE"]="female",n["MALE"]="male"})(Sz||(Sz={}));var _z=function(n){function x(x){void 0===x&&(x=new Iz(2));var t=n.call(this,"AgeGenderNet")||this;return t._faceFeatureExtractor=x,t}return km(x,n),Object.defineProperty(x.prototype,"faceFeatureExtractor",{get:function(){return this._faceFeatureExtractor},enumerable:!0,configurable:!0}),x.prototype.runNet=function(n){var x=this,t=this.params;if(!t)throw new Error(this._name+" - load model before inference");return bs(function(){var e=n instanceof Mb?x.faceFeatureExtractor.forwardInput(n):n,i=lf(e,[7,7],[2,2],"valid").as2D(e.shape[0],-1),r=az(i,t.fc.age).as1D(),o=az(i,t.fc.gender);return{age:r,gender:o}})},x.prototype.forwardInput=function(n){var x=this;return bs(function(){var t=x.runNet(n),e=t.age,i=t.gender;return{age:e,gender:yu(i)}})},x.prototype.forward=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=this.forwardInput,[4,Nb(n)];case 1:return[2,x.apply(this,[t.sent()])]}})})},x.prototype.predictAgeAndGender=function(n){return Cm(this,void 0,void 0,function(){var x,t,e,i,r,o,s=this;return Am(this,function(h){switch(h.label){case 0:return[4,Nb(n)];case 1:return x=h.sent(),[4,this.forwardInput(x)];case 2:return t=h.sent(),e=Yh(t.age),i=Yh(t.gender),r=e.map(function(n,x){return{ageTensor:n,genderTensor:i[x]}}),[4,Promise.all(r.map(function(n){var x=n.ageTensor,t=n.genderTensor;return Cm(s,void 0,void 0,function(){var n,e,i,r,o;return Am(this,function(s){switch(s.label){case 0:return[4,x.data()];case 1:return n=s.sent()[0],[4,t.data()];case 2:return e=s.sent()[0],i=e>.5,r=i?Sz.MALE:Sz.FEMALE,o=i?e:1-e,x.dispose(),t.dispose(),[2,{age:n,gender:r,genderProbability:o}]}})})}))];case 3:return o=h.sent(),t.age.dispose(),t.gender.dispose(),[2,x.isBatchInput?o:o[0]]}})})},x.prototype.getDefaultModelName=function(){return"age_gender_model"},x.prototype.dispose=function(x){void 0===x&&(x=!0),this.faceFeatureExtractor.dispose(x),n.prototype.dispose.call(this,x)},x.prototype.loadClassifierParams=function(n){var x=this.extractClassifierParams(n),t=x.params,e=x.paramMappings;this._params=t,this._paramMappings=e},x.prototype.extractClassifierParams=function(n){return Dz(n)},x.prototype.extractParamsFromWeigthMap=function(n){var x=cz(n),t=x.featureExtractorMap,e=x.classifierMap;return this.faceFeatureExtractor.loadFromWeightMap(t),Oz(e)},x.prototype.extractParams=function(n){var x=1539,t=n.slice(0,n.length-x),e=n.slice(n.length-x);return this.faceFeatureExtractor.extractWeights(t),this.extractClassifierParams(e)},x}(Wb),Tz=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.postProcess=function(n,x,t){var e=t.map(function(n){var t=n.width,e=n.height,i=x/Math.max(e,t);return{width:t*i,height:e*i}}),i=e.length;return bs(function(){var t=function(n,x){return Qh([$s([68],n),$s([68],x)],1).as2D(1,136).as1D()},r=function(n,x){var t=e[n],i=t.width,r=t.height;return x(i,r)?Math.abs(i-r)/2:0},o=function(n){return r(n,function(n,x){return n<x})},s=function(n){return r(n,function(n,x){return x<n})},h=n.mul($s([i,136],x)).sub(Qh(Array.from(Array(i),function(n,x){return t(o(x),s(x))}))).div(Qh(Array.from(Array(i),function(n,x){return t(e[x].width,e[x].height)})));return h})},x.prototype.forwardInput=function(n){var x=this;return bs(function(){var t=x.runNet(n);return x.postProcess(t,n.inputSize,n.inputDimensions.map(function(n){var x=n[0],t=n[1];return{height:x,width:t}}))})},x.prototype.forward=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=this.forwardInput,[4,Nb(n)];case 1:return[2,x.apply(this,[t.sent()])]}})})},x.prototype.detectLandmarks=function(n){return Cm(this,void 0,void 0,function(){var x,t,e,i=this;return Am(this,function(r){switch(r.label){case 0:return[4,Nb(n)];case 1:return x=r.sent(),t=bs(function(){return Yh(i.forwardInput(x))}),[4,Promise.all(t.map(function(n,t){return Cm(i,void 0,void 0,function(){var e,i,r,o,s;return Am(this,function(h){switch(h.label){case 0:return r=(i=Array).from,[4,n.data()];case 1:return e=r.apply(i,[h.sent()]),o=e.filter(function(n,x){return Rm(x)}),s=e.filter(function(n,x){return!Rm(x)}),[2,new sb(Array(68).fill(0).map(function(n,x){return new Um(o[x],s[x])}),{height:x.getInputHeight(t),width:x.getInputWidth(t)})]}})})}))];case 2:return e=r.sent(),t.forEach(function(n){return n.dispose()}),[2,x.isBatchInput?e:e[0]]}})})},x.prototype.getClassifierChannelsOut=function(){return 136},x}(dz),Rz=function(n){function x(x){return void 0===x&&(x=new uz),n.call(this,"FaceLandmark68Net",x)||this}return km(x,n),x.prototype.getDefaultModelName=function(){return"face_landmark_68_model"},x.prototype.getClassifierChannelsIn=function(){return 256},x}(Tz);function Bz(n){var x=[],t=sz(n,x).extractDenseBlock3Params,e={dense0:t("dense0",!0),dense1:t("dense1"),dense2:t("dense2")};return Jb(n,x),{params:e,paramMappings:x}}function Mz(n){var x=[],t=ez(n),e=t.extractWeights,i=t.getRemainingWeights,r=iz(e,x).extractDenseBlock3Params,o=r(3,32,"dense0",!0),s=r(32,64,"dense1"),h=r(64,128,"dense2");if(0!==i().length)throw new Error("weights remaing after extract: "+i().length);return{paramMappings:x,params:{dense0:o,dense1:s,dense2:h}}}var Nz=function(n){function x(){return n.call(this,"TinyFaceFeatureExtractor")||this}return km(x,n),x.prototype.forwardInput=function(n){var x=this.params;if(!x)throw new Error("TinyFaceFeatureExtractor - load model before inference");return bs(function(){var t=n.toBatchTensor(112,!0),e=[122.782,117.001,104.298],i=Xm(t,e).div(Us(255)),r=Gb(i,x.dense0,!0);return r=Gb(r,x.dense1),r=Gb(r,x.dense2),r=lf(r,[14,14],[2,2],"valid"),r})},x.prototype.forward=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=this.forwardInput,[4,Nb(n)];case 1:return[2,x.apply(this,[t.sent()])]}})})},x.prototype.getDefaultModelName=function(){return"face_feature_extractor_tiny_model"},x.prototype.extractParamsFromWeigthMap=function(n){return Bz(n)},x.prototype.extractParams=function(n){return Mz(n)},x}(Wb),Fz=function(n){function x(x){return void 0===x&&(x=new Nz),n.call(this,"FaceLandmark68TinyNet",x)||this}return km(x,n),x.prototype.getDefaultModelName=function(){return"face_landmark_68_tiny_model"},x.prototype.getClassifierChannelsIn=function(){return 128},x}(Tz);(function(n){function x(){return null!==n&&n.apply(this,arguments)||this}km(x,n)})(Rz);function Pz(n,x){return td(pd(n,x.weights),x.biases)}function Lz(n,x,t,e,i){void 0===i&&(i="same");var r=x.conv,o=r.filters,s=r.bias,h=Vd(n,o,t,i);return h=td(h,s),h=Pz(h,x.scale),e?Bf(h):h}function Hz(n,x){return Lz(n,x,[1,1],!0)}function Uz(n,x){return Lz(n,x,[1,1],!1)}function Vz(n,x){return Lz(n,x,[2,2],!0,"valid")}function Wz(n,x){function t(x,t,e){var i=n(x),r=i.length/(t*e*e);if(Tm(r))throw new Error("depth has to be an integer: "+r+", weights.length: "+i.length+", numFilters: "+t+", filterSize: "+e);return bs(function(){return Ff(Gs(i,[t,r,e,e]),[2,3,1,0])})}function e(e,i,r,o){var s=t(e,i,r),h=Vs(n(i));return x.push({paramPath:o+"/filters"},{paramPath:o+"/bias"}),{filters:s,bias:h}}function i(t,e){var i=Vs(n(t)),r=Vs(n(t));return x.push({paramPath:e+"/weights"},{paramPath:e+"/biases"}),{weights:i,biases:r}}function r(n,x,t,r){var o=e(n,x,t,r+"/conv"),s=i(x,r+"/scale");return{conv:o,scale:s}}function o(n,x,t,e,i){void 0===i&&(i=!1);var o=r((i?.5:1)*n,x,t,e+"/conv1"),s=r(n,x,t,e+"/conv2");return{conv1:o,conv2:s}}return{extractConvLayerParams:r,extractResidualLayerParams:o}}function Qz(n){var x=ez(n),t=x.extractWeights,e=x.getRemainingWeights,i=[],r=Wz(t,i),o=r.extractConvLayerParams,s=r.extractResidualLayerParams,h=o(4704,32,7,"conv32_down"),u=s(9216,32,3,"conv32_1"),a=s(9216,32,3,"conv32_2"),g=s(9216,32,3,"conv32_3"),l=s(36864,64,3,"conv64_down",!0),c=s(36864,64,3,"conv64_1"),d=s(36864,64,3,"conv64_2"),f=s(36864,64,3,"conv64_3"),p=s(147456,128,3,"conv128_down",!0),y=s(147456,128,3,"conv128_1"),m=s(147456,128,3,"conv128_2"),b=s(589824,256,3,"conv256_down",!0),z=s(589824,256,3,"conv256_1"),v=s(589824,256,3,"conv256_2"),j=s(589824,256,3,"conv256_down_out"),w=bs(function(){return Ff(Ws(t(32768),[128,256]),[1,0])});if(i.push({paramPath:"fc"}),0!==e().length)throw new Error("weights remaing after extract: "+e().length);var k={conv32_down:h,conv32_1:u,conv32_2:a,conv32_3:g,conv64_down:l,conv64_1:c,conv64_2:d,conv64_3:f,conv128_down:p,conv128_1:y,conv128_2:m,conv256_down:b,conv256_1:z,conv256_2:v,conv256_down_out:j,fc:w};return{params:k,paramMappings:i}}function Gz(n,x){var t=tz(n,x);function e(n){var x=t(n+"/scale/weights",1),e=t(n+"/scale/biases",1);return{weights:x,biases:e}}function i(n){var x=t(n+"/conv/filters",4),i=t(n+"/conv/bias",1),r=e(n);return{conv:{filters:x,bias:i},scale:r}}function r(n){return{conv1:i(n+"/conv1"),conv2:i(n+"/conv2")}}return{extractConvLayerParams:i,extractResidualLayerParams:r}}function Kz(n){var x=[],t=Gz(n,x),e=t.extractConvLayerParams,i=t.extractResidualLayerParams,r=e("conv32_down"),o=i("conv32_1"),s=i("conv32_2"),h=i("conv32_3"),u=i("conv64_down"),a=i("conv64_1"),g=i("conv64_2"),l=i("conv64_3"),c=i("conv128_down"),d=i("conv128_1"),f=i("conv128_2"),p=i("conv256_down"),y=i("conv256_1"),m=i("conv256_2"),b=i("conv256_down_out"),z=n["fc"];if(x.push({originalPath:"fc",paramPath:"fc"}),!Dm(z))throw new Error("expected weightMap[fc] to be a Tensor2D, instead have "+z);var v={conv32_down:r,conv32_1:o,conv32_2:s,conv32_3:h,conv64_down:u,conv64_1:a,conv64_2:g,conv64_3:l,conv128_down:c,conv128_1:d,conv128_2:f,conv256_down:p,conv256_1:y,conv256_2:m,conv256_down_out:b,fc:z};return Jb(n,x),{params:v,paramMappings:x}}function Yz(n,x){var t=Hz(n,x.conv1);return t=Uz(t,x.conv2),t=td(t,n),t=Bf(t),t}function Jz(n,x){var t=Vz(n,x.conv1);t=Uz(t,x.conv2);var e=lf(n,2,2,"valid"),i=Zs(e.shape),r=e.shape[3]!==t.shape[3],o=e.shape[1]!==t.shape[1]||e.shape[2]!==t.shape[2];if(o){var s=Em(t.shape);s[1]=1;var h=Zs(s);t=ih([t,h],1);var u=Em(t.shape);u[2]=1;var a=Zs(u);t=ih([t,a],2)}return e=r?ih([e,i],3):e,t=td(e,t),t=Bf(t),t}var Xz=function(n){function x(){return n.call(this,"FaceRecognitionNet")||this}return km(x,n),x.prototype.forwardInput=function(n){var x=this.params;if(!x)throw new Error("FaceRecognitionNet - load model before inference");return bs(function(){var t=n.toBatchTensor(150,!0).toFloat(),e=[122.782,117.001,104.298],i=Xm(t,e).div(Us(256)),r=Vz(i,x.conv32_down);r=gf(r,3,2,"valid"),r=Yz(r,x.conv32_1),r=Yz(r,x.conv32_2),r=Yz(r,x.conv32_3),r=Jz(r,x.conv64_down),r=Yz(r,x.conv64_1),r=Yz(r,x.conv64_2),r=Yz(r,x.conv64_3),r=Jz(r,x.conv128_down),r=Yz(r,x.conv128_1),r=Yz(r,x.conv128_2),r=Jz(r,x.conv256_down),r=Yz(r,x.conv256_1),r=Yz(r,x.conv256_2),r=Jz(r,x.conv256_down_out);var o=r.mean([1,2]),s=nf(o,x.fc);return s})},x.prototype.forward=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=this.forwardInput,[4,Nb(n)];case 1:return[2,x.apply(this,[t.sent()])]}})})},x.prototype.computeFaceDescriptor=function(n){return Cm(this,void 0,void 0,function(){var x,t,e,i=this;return Am(this,function(r){switch(r.label){case 0:return[4,Nb(n)];case 1:return x=r.sent(),t=bs(function(){return Yh(i.forwardInput(x))}),[4,Promise.all(t.map(function(n){return n.data()}))];case 2:return e=r.sent(),t.forEach(function(n){return n.dispose()}),[2,x.isBatchInput?e:e[0]]}})})},x.prototype.getDefaultModelName=function(){return"face_recognition_model"},x.prototype.extractParamsFromWeigthMap=function(n){return Kz(n)},x.prototype.extractParams=function(n){return Qz(n)},x}(Wb);function Zz(n,x,t){var e={gender:x,genderProbability:t};return Object.assign({},n,e)}var $z=function(){function n(n){var x=void 0===n?{}:n,t=x.minFaceSize,e=x.scaleFactor,i=x.maxNumScales,r=x.scoreThresholds,o=x.scaleSteps;if(this._name="MtcnnOptions",this._minFaceSize=t||20,this._scaleFactor=e||.709,this._maxNumScales=i||10,this._scoreThresholds=r||[.6,.7,.7],this._scaleSteps=o,"number"!==typeof this._minFaceSize||this._minFaceSize<0)throw new Error(this._name+" - expected minFaceSize to be a number > 0");if("number"!==typeof this._scaleFactor||this._scaleFactor<=0||this._scaleFactor>=1)throw new Error(this._name+" - expected scaleFactor to be a number between 0 and 1");if("number"!==typeof this._maxNumScales||this._maxNumScales<0)throw new Error(this._name+" - expected maxNumScales to be a number > 0");if(!Array.isArray(this._scoreThresholds)||3!==this._scoreThresholds.length||this._scoreThresholds.some(function(n){return"number"!==typeof n}))throw new Error(this._name+" - expected scoreThresholds to be an array of numbers of length 3");if(this._scaleSteps&&(!Array.isArray(this._scaleSteps)||this._scaleSteps.some(function(n){return"number"!==typeof n})))throw new Error(this._name+" - expected scaleSteps to be an array of numbers")}return Object.defineProperty(n.prototype,"minFaceSize",{get:function(){return this._minFaceSize},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"scaleFactor",{get:function(){return this._scaleFactor},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"maxNumScales",{get:function(){return this._maxNumScales},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"scoreThresholds",{get:function(){return this._scoreThresholds},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"scaleSteps",{get:function(){return this._scaleSteps},enumerable:!0,configurable:!0}),n}();function nv(n,x){function t(t,e){var i=Gs(n(9*t),[3,3,t,1]),r=Vs(n(t)),o=Vs(n(t)),s=Vs(n(t)),h=Vs(n(t));return x.push({paramPath:e+"/filters"},{paramPath:e+"/batch_norm_scale"},{paramPath:e+"/batch_norm_offset"},{paramPath:e+"/batch_norm_mean"},{paramPath:e+"/batch_norm_variance"}),{filters:i,batch_norm_scale:r,batch_norm_offset:o,batch_norm_mean:s,batch_norm_variance:h}}function e(t,e,i,r,o){var s=Gs(n(t*e*i*i),[i,i,t,e]),h=Vs(n(e));return x.push({paramPath:r+"/filters"},{paramPath:r+"/"+(o?"batch_norm_offset":"bias")}),{filters:s,bias:h}}function i(n,x,t,i){var r=e(n,x,t,i,!0),o=r.filters,s=r.bias;return{filters:o,batch_norm_offset:s}}function r(n,x,e){var r=t(n,e+"/depthwise_conv"),o=i(n,x,1,e+"/pointwise_conv");return{depthwise_conv:r,pointwise_conv:o}}function o(){var n=i(3,32,3,"mobilenetv1/conv_0"),x=r(32,64,"mobilenetv1/conv_1"),t=r(64,128,"mobilenetv1/conv_2"),e=r(128,128,"mobilenetv1/conv_3"),o=r(128,256,"mobilenetv1/conv_4"),s=r(256,256,"mobilenetv1/conv_5"),h=r(256,512,"mobilenetv1/conv_6"),u=r(512,512,"mobilenetv1/conv_7"),a=r(512,512,"mobilenetv1/conv_8"),g=r(512,512,"mobilenetv1/conv_9"),l=r(512,512,"mobilenetv1/conv_10"),c=r(512,512,"mobilenetv1/conv_11"),d=r(512,1024,"mobilenetv1/conv_12"),f=r(1024,1024,"mobilenetv1/conv_13");return{conv_0:n,conv_1:x,conv_2:t,conv_3:e,conv_4:o,conv_5:s,conv_6:h,conv_7:u,conv_8:a,conv_9:g,conv_10:l,conv_11:c,conv_12:d,conv_13:f}}function s(){var n=i(1024,256,1,"prediction_layer/conv_0"),x=i(256,512,3,"prediction_layer/conv_1"),t=i(512,128,1,"prediction_layer/conv_2"),r=i(128,256,3,"prediction_layer/conv_3"),o=i(256,128,1,"prediction_layer/conv_4"),s=i(128,256,3,"prediction_layer/conv_5"),h=i(256,64,1,"prediction_layer/conv_6"),u=i(64,128,3,"prediction_layer/conv_7"),a=e(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),g=e(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),l=e(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),c=e(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),d=e(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),f=e(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),p=e(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),y=e(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),m=e(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),b=e(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),z=e(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),v=e(128,18,1,"prediction_layer/box_predictor_5/class_predictor"),j={box_encoding_predictor:a,class_predictor:g},w={box_encoding_predictor:l,class_predictor:c},k={box_encoding_predictor:d,class_predictor:f},q={box_encoding_predictor:p,class_predictor:y},C={box_encoding_predictor:m,class_predictor:b},A={box_encoding_predictor:z,class_predictor:v};return{conv_0:n,conv_1:x,conv_2:t,conv_3:r,conv_4:o,conv_5:s,conv_6:h,conv_7:u,box_predictor_0:j,box_predictor_1:w,box_predictor_2:k,box_predictor_3:q,box_predictor_4:C,box_predictor_5:A}}return{extractMobilenetV1Params:o,extractPredictionLayerParams:s}}function xv(n){var x=[],t=ez(n),e=t.extractWeights,i=t.getRemainingWeights,r=nv(e,x),o=r.extractMobilenetV1Params,s=r.extractPredictionLayerParams,h=o(),u=s(),a=Qs(e(20472),[1,5118,4]),g={extra_dim:a};if(x.push({paramPath:"output_layer/extra_dim"}),0!==i().length)throw new Error("weights remaing after extract: "+i().length);return{params:{mobilenetv1:h,prediction_layer:u,output_layer:g},paramMappings:x}}function tv(n,x){var t=tz(n,x);function e(n,x,e){var i=t(n+"/Conv2d_"+x+"_pointwise/weights",4,e+"/filters"),r=t(n+"/Conv2d_"+x+"_pointwise/convolution_bn_offset",1,e+"/batch_norm_offset");return{filters:i,batch_norm_offset:r}}function i(n){var x="mobilenetv1/conv_"+n,i="MobilenetV1/Conv2d_"+n+"_depthwise",r=x+"/depthwise_conv",o=x+"/pointwise_conv",s=t(i+"/depthwise_weights",4,r+"/filters"),h=t(i+"/BatchNorm/gamma",1,r+"/batch_norm_scale"),u=t(i+"/BatchNorm/beta",1,r+"/batch_norm_offset"),a=t(i+"/BatchNorm/moving_mean",1,r+"/batch_norm_mean"),g=t(i+"/BatchNorm/moving_variance",1,r+"/batch_norm_variance");return{depthwise_conv:{filters:s,batch_norm_scale:h,batch_norm_offset:u,batch_norm_mean:a,batch_norm_variance:g},pointwise_conv:e("MobilenetV1",n,o)}}function r(){return{conv_0:e("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:i(1),conv_2:i(2),conv_3:i(3),conv_4:i(4),conv_5:i(5),conv_6:i(6),conv_7:i(7),conv_8:i(8),conv_9:i(9),conv_10:i(10),conv_11:i(11),conv_12:i(12),conv_13:i(13)}}function o(n,x){var e=t(n+"/weights",4,x+"/filters"),i=t(n+"/biases",1,x+"/bias");return{filters:e,bias:i}}function s(n){var x=o("Prediction/BoxPredictor_"+n+"/BoxEncodingPredictor","prediction_layer/box_predictor_"+n+"/box_encoding_predictor"),t=o("Prediction/BoxPredictor_"+n+"/ClassPredictor","prediction_layer/box_predictor_"+n+"/class_predictor");return{box_encoding_predictor:x,class_predictor:t}}function h(){return{conv_0:e("Prediction",0,"prediction_layer/conv_0"),conv_1:e("Prediction",1,"prediction_layer/conv_1"),conv_2:e("Prediction",2,"prediction_layer/conv_2"),conv_3:e("Prediction",3,"prediction_layer/conv_3"),conv_4:e("Prediction",4,"prediction_layer/conv_4"),conv_5:e("Prediction",5,"prediction_layer/conv_5"),conv_6:e("Prediction",6,"prediction_layer/conv_6"),conv_7:e("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:s(0),box_predictor_1:s(1),box_predictor_2:s(2),box_predictor_3:s(3),box_predictor_4:s(4),box_predictor_5:s(5)}}return{extractMobilenetV1Params:r,extractPredictionLayerParams:h}}function ev(n){var x=[],t=tv(n,x),e=t.extractMobilenetV1Params,i=t.extractPredictionLayerParams,r=n["Output/extra_dim"];if(x.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!Om(r))throw new Error("expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have "+r);var o={mobilenetv1:e(),prediction_layer:i(),output_layer:{extra_dim:r}};return Jb(n,x),{params:o,paramMappings:x}}function iv(n,x,t){return bs(function(){var e=Vd(n,x.filters,t,"same");return e=td(e,x.batch_norm_offset),ac(e,0,6)})}var rv=.0010000000474974513;function ov(n,x,t){return bs(function(){var e=Kd(n,x.filters,t,"same");return e=Qc(e,x.batch_norm_mean,x.batch_norm_variance,x.batch_norm_offset,x.batch_norm_scale,rv),ac(e,0,6)})}function sv(n){return[2,4,6,12].some(function(x){return x===n})?[2,2]:[1,1]}function hv(n,x){return bs(function(){var t=null,e=iv(n,x.conv_0,[2,2]),i=[x.conv_1,x.conv_2,x.conv_3,x.conv_4,x.conv_5,x.conv_6,x.conv_7,x.conv_8,x.conv_9,x.conv_10,x.conv_11,x.conv_12,x.conv_13];if(i.forEach(function(n,x){var i=x+1,r=sv(i);e=ov(e,n.depthwise_conv,r),e=iv(e,n.pointwise_conv,[1,1]),11===i&&(t=e)}),null===t)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:e,conv11:t}})}function uv(n,x,t,e,i){var r=n.shape[0],o=Math.min(t,r),s=x.map(function(n,x){return{score:n,boxIndex:x}}).filter(function(n){return n.score>i}).sort(function(n,x){return x.score-n.score}),h=function(n){return n<=e?1:0},u=[];return s.forEach(function(x){if(!(u.length>=o)){for(var t=x.score,e=u.length-1;e>=0;--e){var r=av(n,x.boxIndex,u[e]);if(0!==r&&(x.score*=h(r),x.score<=i))break}t===x.score&&u.push(x.boxIndex)}}),u}function av(n,x,t){var e=n.arraySync(),i=Math.min(e[x][0],e[x][2]),r=Math.min(e[x][1],e[x][3]),o=Math.max(e[x][0],e[x][2]),s=Math.max(e[x][1],e[x][3]),h=Math.min(e[t][0],e[t][2]),u=Math.min(e[t][1],e[t][3]),a=Math.max(e[t][0],e[t][2]),g=Math.max(e[t][1],e[t][3]),l=(o-i)*(s-r),c=(a-h)*(g-u);if(l<=0||c<=0)return 0;var d=Math.max(i,h),f=Math.max(r,u),p=Math.min(o,a),y=Math.min(s,g),m=Math.max(p-d,0)*Math.max(y-f,0);return m/(l+c-m)}function gv(n){var x=Yh(Ff(n,[1,0])),t=[vd(x[2],x[0]),vd(x[3],x[1])],e=[td(x[0],od(t[0],Us(2))),td(x[1],od(t[1],Us(2)))];return{sizes:t,centers:e}}function lv(n,x){var t=gv(n),e=t.sizes,i=t.centers,r=Yh(Ff(x,[1,0])),o=od(pd(dc(od(r[2],Us(5))),e[0]),Us(2)),s=td(pd(od(r[0],Us(10)),e[0]),i[0]),h=od(pd(dc(od(r[3],Us(5))),e[1]),Us(2)),u=td(pd(od(r[1],Us(10)),e[1]),i[1]);return Ff(Qh([vd(s,o),vd(u,h),td(s,o),td(u,h)]),[1,0])}function cv(n,x,t){return bs(function(){var e=n.shape[0],i=lv(Uh(Gh(t.extra_dim,[e,1,1]),[-1,4]),Uh(n,[-1,4]));i=Uh(i,[e,i.shape[0]/e,4]);var r=kc(pf(x,[0,0,1],[-1,-1,-1])),o=pf(r,[0,0,0],[-1,-1,1]);o=Uh(o,[e,o.shape[1]]);var s=Yh(i),h=Yh(o);return{boxes:s,scores:h}})}function dv(n,x){return bs(function(){var t=n.shape[0],e=Uh(Yb(n,x.box_encoding_predictor),[t,-1,1,4]),i=Uh(Yb(n,x.class_predictor),[t,-1,3]);return{boxPredictionEncoding:e,classPrediction:i}})}function fv(n,x,t){return bs(function(){var e=iv(n,t.conv_0,[1,1]),i=iv(e,t.conv_1,[2,2]),r=iv(i,t.conv_2,[1,1]),o=iv(r,t.conv_3,[2,2]),s=iv(o,t.conv_4,[1,1]),h=iv(s,t.conv_5,[2,2]),u=iv(h,t.conv_6,[1,1]),a=iv(u,t.conv_7,[2,2]),g=dv(x,t.box_predictor_0),l=dv(n,t.box_predictor_1),c=dv(i,t.box_predictor_2),d=dv(o,t.box_predictor_3),f=dv(h,t.box_predictor_4),p=dv(a,t.box_predictor_5),y=ih([g.boxPredictionEncoding,l.boxPredictionEncoding,c.boxPredictionEncoding,d.boxPredictionEncoding,f.boxPredictionEncoding,p.boxPredictionEncoding],1),m=ih([g.classPrediction,l.classPrediction,c.classPrediction,d.classPrediction,f.classPrediction,p.classPrediction],1);return{boxPredictions:y,classPredictions:m}})}var pv=function(){function n(n){var x=void 0===n?{}:n,t=x.minConfidence,e=x.maxResults;if(this._name="SsdMobilenetv1Options",this._minConfidence=t||.5,this._maxResults=e||100,"number"!==typeof this._minConfidence||this._minConfidence<=0||this._minConfidence>=1)throw new Error(this._name+" - expected minConfidence to be a number between 0 and 1");if("number"!==typeof this._maxResults)throw new Error(this._name+" - expected maxResults to be a number")}return Object.defineProperty(n.prototype,"minConfidence",{get:function(){return this._minConfidence},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"maxResults",{get:function(){return this._maxResults},enumerable:!0,configurable:!0}),n}(),yv=function(n){function x(){return n.call(this,"SsdMobilenetv1")||this}return km(x,n),x.prototype.forwardInput=function(n){var x=this.params;if(!x)throw new Error("SsdMobilenetv1 - load model before inference");return bs(function(){var t=n.toBatchTensor(512,!1).toFloat(),e=vd(pd(t,Us(.007843137718737125)),Us(1)),i=hv(e,x.mobilenetv1),r=fv(i.out,i.conv11,x.prediction_layer),o=r.boxPredictions,s=r.classPredictions;return cv(o,s,x.output_layer)})},x.prototype.forward=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=this.forwardInput,[4,Nb(n)];case 1:return[2,x.apply(this,[t.sent()])]}})})},x.prototype.locateFaces=function(n,x){return void 0===x&&(x={}),Cm(this,void 0,void 0,function(){var t,e,i,r,o,s,h,u,a,g,l,c,d,f,p,y,m,b,z,v,j;return Am(this,function(w){switch(w.label){case 0:return t=new pv(x),e=t.maxResults,i=t.minConfidence,[4,Nb(n)];case 1:for(r=w.sent(),o=this.forwardInput(r),s=o.boxes,h=o.scores,u=s[0],a=h[0],g=1;g<s.length;g++)s[g].dispose(),h[g].dispose();return d=(c=Array).from,[4,a.data()];case 2:return l=d.apply(c,[w.sent()]),f=.5,p=uv(u,l,e,f,i),y=r.getReshapedInputDimensions(0),m=r.inputSize,b=m/y.width,z=m/y.height,v=u.arraySync(),j=p.map(function(n){var x=[Math.max(0,v[n][0]),Math.min(1,v[n][2])].map(function(n){return n*z}),t=x[0],e=x[1],i=[Math.max(0,v[n][1]),Math.min(1,v[n][3])].map(function(n){return n*b}),o=i[0],s=i[1];return new Gm(l[n],new xb(o,t,s-o,e-t),{height:r.getInputHeight(0),width:r.getInputWidth(0)})}),u.dispose(),a.dispose(),[2,j]}})})},x.prototype.getDefaultModelName=function(){return"ssd_mobilenetv1_model"},x.prototype.extractParamsFromWeigthMap=function(n){return ev(n)},x.prototype.extractParams=function(n){return xv(n)},x}(Wb);(function(n){function x(){return null!==n&&n.apply(this,arguments)||this}km(x,n)})(yv);var mv,bv=.4,zv=[new Um(.738768,.874946),new Um(2.42204,2.65704),new Um(4.30971,7.04493),new Um(10.246,4.59428),new Um(12.6868,11.8741)],vv=[new Um(1.603231,2.094468),new Um(6.041143,7.080126),new Um(2.882459,3.518061),new Um(4.266906,5.178857),new Um(9.041765,10.66308)],jv=[117.001,114.697,97.404],wv="tiny_yolov2_model",kv="tiny_yolov2_separable_conv_model",qv=function(n){return"number"===typeof n};function Cv(n){if(!n)throw new Error("invalid config: "+n);if("boolean"!==typeof n.withSeparableConvs)throw new Error("config.withSeparableConvs has to be a boolean, have: "+n.withSeparableConvs);if(!qv(n.iouThreshold)||n.iouThreshold<0||n.iouThreshold>1)throw new Error("config.iouThreshold has to be a number between [0, 1], have: "+n.iouThreshold);if(!Array.isArray(n.classes)||!n.classes.length||!n.classes.every(function(n){return"string"===typeof n}))throw new Error("config.classes has to be an array class names: string[], have: "+JSON.stringify(n.classes));if(!Array.isArray(n.anchors)||!n.anchors.length||!n.anchors.map(function(n){return n||{}}).every(function(n){return qv(n.x)&&qv(n.y)}))throw new Error("config.anchors has to be an array of { x: number, y: number }, have: "+JSON.stringify(n.anchors));if(n.meanRgb&&(!Array.isArray(n.meanRgb)||3!==n.meanRgb.length||!n.meanRgb.every(qv)))throw new Error("config.meanRgb has to be an array of shape [number, number, number], have: "+JSON.stringify(n.meanRgb))}function Av(n){return bs(function(){var x=pd(n,Us(.10000000149011612));return td(Bf(vd(n,x)),x)})}function Ev(n,x){return bs(function(){var t=Th(n,[[0,0],[1,1],[1,1],[0,0]]);return t=Vd(t,x.conv.filters,[1,1],"valid"),t=vd(t,x.bn.sub),t=pd(t,x.bn.truediv),t=td(t,x.conv.bias),Av(t)})}function Sv(n,x){return bs(function(){var t=Th(n,[[0,0],[1,1],[1,1],[0,0]]);return t=Xd(t,x.depthwise_filter,x.pointwise_filter,[1,1],"valid"),t=td(t,x.bias),Av(t)})}function Iv(n,x){var t=Xb(n,x);function e(t,e){var i=Vs(n(t)),r=Vs(n(t));return x.push({paramPath:e+"/sub"},{paramPath:e+"/truediv"}),{sub:i,truediv:r}}function i(n,x,i){var r=t(n,x,3,i+"/conv"),o=e(x,i+"/bn");return{conv:r,bn:o}}var r=nz(n,x);return{extractConvParams:t,extractConvWithBatchNormParams:i,extractSeparableConvParams:r}}function Dv(n,x,t,e){var i,r=ez(n),o=r.extractWeights,s=r.getRemainingWeights,h=[],u=Iv(o,h),a=u.extractConvParams,g=u.extractConvWithBatchNormParams,l=u.extractSeparableConvParams;if(x.withSeparableConvs){var c=e[0],d=e[1],f=e[2],p=e[3],y=e[4],m=e[5],b=e[6],z=e[7],v=e[8],j=x.isFirstLayerConv2d?a(c,d,3,"conv0"):l(c,d,"conv0"),w=l(d,f,"conv1"),k=l(f,p,"conv2"),q=l(p,y,"conv3"),C=l(y,m,"conv4"),A=l(m,b,"conv5"),E=z?l(b,z,"conv6"):void 0,S=v?l(z,v,"conv7"):void 0,I=a(v||z||b,5*t,1,"conv8");i={conv0:j,conv1:w,conv2:k,conv3:q,conv4:C,conv5:A,conv6:E,conv7:S,conv8:I}}else{c=e[0],d=e[1],f=e[2],p=e[3],y=e[4],m=e[5],b=e[6],z=e[7],v=e[8],j=g(c,d,"conv0"),w=g(d,f,"conv1"),k=g(f,p,"conv2"),q=g(p,y,"conv3"),C=g(y,m,"conv4"),A=g(m,b,"conv5"),E=g(b,z,"conv6"),S=g(z,v,"conv7"),I=a(v,5*t,1,"conv8");i={conv0:j,conv1:w,conv2:k,conv3:q,conv4:C,conv5:A,conv6:E,conv7:S,conv8:I}}if(0!==s().length)throw new Error("weights remaing after extract: "+s().length);return{params:i,paramMappings:h}}function Ov(n,x){var t=tz(n,x);function e(n){var x=t(n+"/sub",1),e=t(n+"/truediv",1);return{sub:x,truediv:e}}function i(n){var x=t(n+"/filters",4),e=t(n+"/bias",1);return{filters:x,bias:e}}function r(n){var x=i(n+"/conv"),t=e(n+"/bn");return{conv:x,bn:t}}var o=xz(t);return{extractConvParams:i,extractConvWithBatchNormParams:r,extractSeparableConvParams:o}}function _v(n,x){var t,e=[],i=Ov(n,e),r=i.extractConvParams,o=i.extractConvWithBatchNormParams,s=i.extractSeparableConvParams;if(x.withSeparableConvs){var h=x.filterSizes&&x.filterSizes.length||9;t={conv0:x.isFirstLayerConv2d?r("conv0"):s("conv0"),conv1:s("conv1"),conv2:s("conv2"),conv3:s("conv3"),conv4:s("conv4"),conv5:s("conv5"),conv6:h>7?s("conv6"):void 0,conv7:h>8?s("conv7"):void 0,conv8:r("conv8")}}else t={conv0:o("conv0"),conv1:o("conv1"),conv2:o("conv2"),conv3:o("conv3"),conv4:o("conv4"),conv5:o("conv5"),conv6:o("conv6"),conv7:o("conv7"),conv8:r("conv8")};return Jb(n,e),{params:t,paramMappings:e}}(function(n){n[n["XS"]=224]="XS",n[n["SM"]=320]="SM",n[n["MD"]=416]="MD",n[n["LG"]=608]="LG"})(mv||(mv={}));var Tv=function(){function n(n){var x=void 0===n?{}:n,t=x.inputSize,e=x.scoreThreshold;if(this._name="TinyYolov2Options",this._inputSize=t||416,this._scoreThreshold=e||.5,"number"!==typeof this._inputSize||this._inputSize%32!==0)throw new Error(this._name+" - expected inputSize to be a number divisible by 32");if("number"!==typeof this._scoreThreshold||this._scoreThreshold<=0||this._scoreThreshold>=1)throw new Error(this._name+" - expected scoreThreshold to be a number between 0 and 1")}return Object.defineProperty(n.prototype,"inputSize",{get:function(){return this._inputSize},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"scoreThreshold",{get:function(){return this._scoreThreshold},enumerable:!0,configurable:!0}),n}(),Rv=function(n){function x(x){var t=n.call(this,"TinyYolov2")||this;return Cv(x),t._config=x,t}return km(x,n),Object.defineProperty(x.prototype,"config",{get:function(){return this._config},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,"withClassScores",{get:function(){return this.config.withClassScores||this.config.classes.length>1},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,"boxEncodingSize",{get:function(){return 5+(this.withClassScores?this.config.classes.length:0)},enumerable:!0,configurable:!0}),x.prototype.runTinyYolov2=function(n,x){var t=Ev(n,x.conv0);return t=gf(t,[2,2],[2,2],"same"),t=Ev(t,x.conv1),t=gf(t,[2,2],[2,2],"same"),t=Ev(t,x.conv2),t=gf(t,[2,2],[2,2],"same"),t=Ev(t,x.conv3),t=gf(t,[2,2],[2,2],"same"),t=Ev(t,x.conv4),t=gf(t,[2,2],[2,2],"same"),t=Ev(t,x.conv5),t=gf(t,[2,2],[1,1],"same"),t=Ev(t,x.conv6),t=Ev(t,x.conv7),Yb(t,x.conv8,"valid",!1)},x.prototype.runMobilenet=function(n,x){var t=this.config.isFirstLayerConv2d?Av(Yb(n,x.conv0,"valid",!1)):Sv(n,x.conv0);return t=gf(t,[2,2],[2,2],"same"),t=Sv(t,x.conv1),t=gf(t,[2,2],[2,2],"same"),t=Sv(t,x.conv2),t=gf(t,[2,2],[2,2],"same"),t=Sv(t,x.conv3),t=gf(t,[2,2],[2,2],"same"),t=Sv(t,x.conv4),t=gf(t,[2,2],[2,2],"same"),t=Sv(t,x.conv5),t=gf(t,[2,2],[1,1],"same"),t=x.conv6?Sv(t,x.conv6):t,t=x.conv7?Sv(t,x.conv7):t,Yb(t,x.conv8,"valid",!1)},x.prototype.forwardInput=function(n,x){var t=this,e=this.params;if(!e)throw new Error("TinyYolov2 - load model before inference");return bs(function(){var i=n.toBatchTensor(x,!1).toFloat();return i=t.config.meanRgb?Xm(i,t.config.meanRgb):i,i=i.div(Us(256)),t.config.withSeparableConvs?t.runMobilenet(i,e):t.runTinyYolov2(i,e)})},x.prototype.forward=function(n,x){return Cm(this,void 0,void 0,function(){var t;return Am(this,function(e){switch(e.label){case 0:return t=this.forwardInput,[4,Nb(n)];case 1:return[4,t.apply(this,[e.sent(),x])];case 2:return[2,e.sent()]}})})},x.prototype.detect=function(n,x){return void 0===x&&(x={}),Cm(this,void 0,void 0,function(){var t,e,i,r,o,s,h,u,a,g,l,c,d,f,p=this;return Am(this,function(y){switch(y.label){case 0:return t=new Tv(x),e=t.inputSize,i=t.scoreThreshold,[4,Nb(n)];case 1:return r=y.sent(),[4,this.forwardInput(r,e)];case 2:return o=y.sent(),s=bs(function(){return Yh(o)[0].expandDims()}),h={width:r.getInputWidth(0),height:r.getInputHeight(0)},[4,this.extractBoxes(s,r.getReshapedInputDimensions(0),i)];case 3:return u=y.sent(),o.dispose(),s.dispose(),a=u.map(function(n){return n.box}),g=u.map(function(n){return n.score}),l=u.map(function(n){return n.classScore}),c=u.map(function(n){return p.config.classes[n.label]}),d=Jm(a.map(function(n){return n.rescale(e)}),g,this.config.iouThreshold,!0),f=d.map(function(n){return new Qm(g[n],l[n],c[n],a[n],h)}),[2,f]}})})},x.prototype.getDefaultModelName=function(){return""},x.prototype.extractParamsFromWeigthMap=function(n){return _v(n,this.config)},x.prototype.extractParams=function(n){var t=this.config.filterSizes||x.DEFAULT_FILTER_SIZES,e=t?t.length:void 0;if(7!==e&&8!==e&&9!==e)throw new Error("TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found "+e+" filterSizes in config");return Dv(n,this.config,this.boxEncodingSize,t)},x.prototype.extractBoxes=function(n,x,t){return Cm(this,void 0,void 0,function(){var e,i,r,o,s,h,u,a,g,l,c,d,f,p,y,m,b,z,v,j,w,k,q,C,A,E,S,I,D,O=this;return Am(this,function(_){switch(_.label){case 0:return e=x.width,i=x.height,r=Math.max(e,i),o=r/e,s=r/i,h=n.shape[1],u=this.config.anchors.length,a=bs(function(){var x=n.reshape([h,h,u,O.boxEncodingSize]),t=x.slice([0,0,0,0],[h,h,u,4]),e=x.slice([0,0,0,4],[h,h,u,1]),i=O.withClassScores?yu(x.slice([0,0,0,5],[h,h,u,O.config.classes.length]),3):Us(0);return[t,e,i]}),g=a[0],l=a[1],c=a[2],d=[],[4,l.array()];case 1:return f=_.sent(),[4,g.array()];case 2:p=_.sent(),y=0,_.label=3;case 3:if(!(y<h))return[3,12];m=0,_.label=4;case 4:if(!(m<h))return[3,11];b=0,_.label=5;case 5:return b<u?(z=$m(f[y][m][b][0]),!t||z>t?(v=(m+$m(p[y][m][b][0]))/h*o,j=(y+$m(p[y][m][b][1]))/h*s,w=Math.exp(p[y][m][b][2])*this.config.anchors[b].x/h*o,k=Math.exp(p[y][m][b][3])*this.config.anchors[b].y/h*s,q=v-w/2,C=j-k/2,A={row:y,col:m,anchor:b},this.withClassScores?[4,this.extractPredictedClass(c,A)]:[3,7]):[3,9]):[3,10];case 6:return D=_.sent(),[3,8];case 7:D={classScore:1,label:0},_.label=8;case 8:E=D,S=E.classScore,I=E.label,d.push(qm({box:new Wm(q,C,q+w,C+k),score:z,classScore:z*S,label:I},A)),_.label=9;case 9:return b++,[3,5];case 10:return m++,[3,4];case 11:return y++,[3,3];case 12:return g.dispose(),l.dispose(),c.dispose(),[2,d]}})})},x.prototype.extractPredictedClass=function(n,x){return Cm(this,void 0,void 0,function(){var t,e,i,r;return Am(this,function(o){switch(o.label){case 0:return t=x.row,e=x.col,i=x.anchor,[4,n.array()];case 1:return r=o.sent(),[2,Array(this.config.classes.length).fill(0).map(function(n,x){return r[t][e][i][x]}).map(function(n,x){return{classScore:n,label:x}}).reduce(function(n,x){return n.classScore>x.classScore?n:x})]}})})},x.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024],x}(Wb),Bv=function(n){function x(x){void 0===x&&(x=!0);var t=this,e=Object.assign({},{withSeparableConvs:x,iouThreshold:bv,classes:["face"]},x?{anchors:vv,meanRgb:jv}:{anchors:zv,withClassScores:!0});return t=n.call(this,e)||this,t}return km(x,n),Object.defineProperty(x.prototype,"withSeparableConvs",{get:function(){return this.config.withSeparableConvs},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,"anchors",{get:function(){return this.config.anchors},enumerable:!0,configurable:!0}),x.prototype.locateFaces=function(n,x){return Cm(this,void 0,void 0,function(){var t;return Am(this,function(e){switch(e.label){case 0:return[4,this.detect(n,x)];case 1:return t=e.sent(),[2,t.map(function(n){return new Gm(n.score,n.relativeBox,{width:n.imageWidth,height:n.imageHeight})})]}})})},x.prototype.getDefaultModelName=function(){return this.withSeparableConvs?kv:wv},x.prototype.extractParamsFromWeigthMap=function(x){return n.prototype.extractParamsFromWeigthMap.call(this,x)},x}(Rv);var Mv=function(n){function x(){var x=null!==n&&n.apply(this,arguments)||this;return x._name="TinyFaceDetectorOptions",x}return km(x,n),x}(Tv),Nv=function(){function n(){}return n.prototype.then=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=n,[4,this.run()];case 1:return[2,x.apply(void 0,[t.sent()])]}})})},n.prototype.run=function(){return Cm(this,void 0,void 0,function(){return Am(this,function(n){throw new Error("ComposableTask - run is not implemented")})})},n}();function Fv(n,x){var t={descriptor:x};return Object.assign({},n,t)}function Pv(n,x,t,e,i){return void 0===i&&(i=function(n){var x=n.alignedRect;return x}),Cm(this,void 0,void 0,function(){var r,o,s,h,u;return Am(this,function(a){switch(a.label){case 0:return r=n.map(function(n){return bz(n)?i(n):n.detection}),s=e,s?[3,5]:x instanceof Kr?[4,Pb(x,r)]:[3,2];case 1:return h=a.sent(),[3,4];case 2:return[4,Fb(x,r)];case 3:h=a.sent(),a.label=4;case 4:s=h,a.label=5;case 5:return o=s,[4,t(o)];case 6:return u=a.sent(),o.forEach(function(n){return n instanceof Kr&&n.dispose()}),[2,u]}})})}function Lv(n,x,t,e,i){return Cm(this,void 0,void 0,function(){var r=this;return Am(this,function(o){return[2,Pv([n],x,function(n){return Cm(r,void 0,void 0,function(){return Am(this,function(x){return[2,t(n[0])]})})},e,i)]})})}function Hv(n){return bs(function(){return Qh(Yh(n,3).reverse(),3)})}var Uv=2,Vv=12;function Wv(n,x){var t=Xb(n,x),e=Zb(n,x);function i(t,e){var i=Vs(n(t));return x.push({paramPath:e}),i}function r(n,x,e){void 0===e&&(e=!1);var r=t(n[0],n[1],3,x+"/conv1"),o=i(n[1],x+"/prelu1_alpha"),s=t(n[1],n[2],3,x+"/conv2"),h=i(n[2],x+"/prelu2_alpha"),u=t(n[2],n[3],e?2:3,x+"/conv3"),a=i(n[3],x+"/prelu3_alpha");return{conv1:r,prelu1_alpha:o,conv2:s,prelu2_alpha:h,conv3:u,prelu3_alpha:a}}function o(){var n=r([3,10,16,32],"pnet"),x=t(32,2,1,"pnet/conv4_1"),e=t(32,4,1,"pnet/conv4_2");return qm(qm({},n),{conv4_1:x,conv4_2:e})}function s(){var n=r([3,28,48,64],"rnet",!0),x=e(576,128,"rnet/fc1"),t=i(128,"rnet/prelu4_alpha"),o=e(128,2,"rnet/fc2_1"),s=e(128,4,"rnet/fc2_2");return qm(qm({},n),{fc1:x,prelu4_alpha:t,fc2_1:o,fc2_2:s})}function h(){var n=r([3,32,64,64],"onet"),x=t(64,128,2,"onet/conv4"),o=i(128,"onet/prelu4_alpha"),s=e(1152,256,"onet/fc1"),h=i(256,"onet/prelu5_alpha"),u=e(256,2,"onet/fc2_1"),a=e(256,4,"onet/fc2_2"),g=e(256,10,"onet/fc2_3");return qm(qm({},n),{conv4:x,prelu4_alpha:o,fc1:s,prelu5_alpha:h,fc2_1:u,fc2_2:a,fc2_3:g})}return{extractPNetParams:o,extractRNetParams:s,extractONetParams:h}}function Qv(n){var x=ez(n),t=x.extractWeights,e=x.getRemainingWeights,i=[],r=Wv(t,i),o=r.extractPNetParams,s=r.extractRNetParams,h=r.extractONetParams,u=o(),a=s(),g=h();if(0!==e().length)throw new Error("weights remaing after extract: "+e().length);return{params:{pnet:u,rnet:a,onet:g},paramMappings:i}}function Gv(n,x){var t=tz(n,x);function e(n){var x=t(n+"/weights",4,n+"/filters"),e=t(n+"/bias",1);return{filters:x,bias:e}}function i(n){var x=t(n+"/weights",2),e=t(n+"/bias",1);return{weights:x,bias:e}}function r(n){return t(n,1)}function o(n){var x=e(n+"/conv1"),t=r(n+"/prelu1_alpha"),i=e(n+"/conv2"),o=r(n+"/prelu2_alpha"),s=e(n+"/conv3"),h=r(n+"/prelu3_alpha");return{conv1:x,prelu1_alpha:t,conv2:i,prelu2_alpha:o,conv3:s,prelu3_alpha:h}}function s(){var n=o("pnet"),x=e("pnet/conv4_1"),t=e("pnet/conv4_2");return qm(qm({},n),{conv4_1:x,conv4_2:t})}function h(){var n=o("rnet"),x=i("rnet/fc1"),t=r("rnet/prelu4_alpha"),e=i("rnet/fc2_1"),s=i("rnet/fc2_2");return qm(qm({},n),{fc1:x,prelu4_alpha:t,fc2_1:e,fc2_2:s})}function u(){var n=o("onet"),x=e("onet/conv4"),t=r("onet/prelu4_alpha"),s=i("onet/fc1"),h=r("onet/prelu5_alpha"),u=i("onet/fc2_1"),a=i("onet/fc2_2"),g=i("onet/fc2_3");return qm(qm({},n),{conv4:x,prelu4_alpha:t,fc1:s,prelu5_alpha:h,fc2_1:u,fc2_2:a,fc2_3:g})}return{extractPNetParams:s,extractRNetParams:h,extractONetParams:u}}function Kv(n){var x=[],t=Gv(n,x),e=t.extractPNetParams,i=t.extractRNetParams,r=t.extractONetParams,o=e(),s=i(),h=r();return Jb(n,x),{params:{pnet:o,rnet:s,onet:h},paramMappings:x}}function Yv(n,x){var t=x[0],e=x[1];return{height:Math.floor(t*n),width:Math.floor(e*n)}}function Jv(n,x,t){var e=t[0],i=t[1],r=Vv/n,o=[],s=Math.min(e,i)*r,h=0;while(s>=12)o.push(r*Math.pow(x,h)),s*=x,h+=1;return o}var Xv=function(n){function x(x,t,e,i){return n.call(this,{left:x,top:t,right:e,bottom:i},!0)||this}return km(x,n),x}(Vm);function Zv(n){return bs(function(){return pd(vd(n,Us(127.5)),Us(.0078125))})}function $v(n,x){return bs(function(){return td(Bf(n),pd(x,zc(Bf(zc(n)))))})}function nj(n,x,t){return void 0===t&&(t=!1),bs(function(){var e=Yb(n,x.conv1,"valid");return e=$v(e,x.prelu1_alpha),e=gf(e,t?[2,2]:[3,3],[2,2],"same"),e=Yb(e,x.conv2,"valid"),e=$v(e,x.prelu2_alpha),e=t?e:gf(e,[3,3],[2,2],"valid"),e=Yb(e,x.conv3,"valid"),e=$v(e,x.prelu3_alpha),e})}function xj(n,x){return bs(function(){var t=nj(n,x,!0),e=Yb(t,x.conv4_1,"valid"),i=Ih(Af(e,3),3),r=yu(vd(e,i),3),o=Yb(t,x.conv4_2,"valid");return{prob:r,regions:o}})}function tj(n,x){return bs(function(){var t=Yv(x,n.shape.slice(1)),e=t.height,i=t.width,r=Tp.resizeBilinear(n,[e,i]),o=Zv(r);return Ff(o,[0,2,1,3])})}function ej(n,x,t,e){for(var i=[],r=n.arraySync(),o=0;o<n.shape[0];o++)for(var s=0;s<n.shape[1];s++)r[o][s]>=e&&i.push(new Um(s,o));var h=i.map(function(n){var e=new Wm(Math.round((n.y*Uv+1)/t),Math.round((n.x*Uv+1)/t),Math.round((n.y*Uv+Vv)/t),Math.round((n.x*Uv+Vv)/t)),i=r[n.y][n.x],o=x.arraySync(),s=new Xv(o[n.y][n.x][0],o[n.y][n.x][1],o[n.y][n.x][2],o[n.y][n.x][3]);return{cell:e,score:i,region:s}});return h}function ij(n,x,t,e,i){i.stage1=[];var r=x.map(function(x){return bs(function(){var t={scale:x},i=tj(n,x),r=Date.now(),o=xj(i,e),s=o.prob,h=o.regions;t.pnet=Date.now()-r;var u=Yh(Yh(s,3)[1])[0],a=Yh(h)[0];return{scoresTensor:u,regionsTensor:a,scale:x,statsForScale:t}})}),o=r.map(function(n){var x=n.scoresTensor,e=n.regionsTensor,r=n.scale,o=n.statsForScale,s=ej(x,e,r,t);if(x.dispose(),e.dispose(),!s.length)return i.stage1.push(o),[];var h=Date.now(),u=Jm(s.map(function(n){return n.cell}),s.map(function(n){return n.score}),.5);return o.nms=Date.now()-h,o.numBoxes=u.length,i.stage1.push(o),u.map(function(n){return s[n]})}),s=o.reduce(function(n,x){return n.concat(x)},[]),h=[],u=[];if(s.length>0){var a=Date.now(),g=Jm(s.map(function(n){return n.cell}),s.map(function(n){return n.score}),.7);i.stage1_nms=Date.now()-a,u=g.map(function(n){return s[n].score}),h=g.map(function(n){return s[n]}).map(function(n){var x=n.cell,t=n.region;return new Wm(x.left+t.left*x.width,x.top+t.top*x.height,x.right+t.right*x.width,x.bottom+t.bottom*x.height).toSquare().round()})}return{boxes:h,scores:u}}function rj(n,x,t){var e=t.width,i=t.height;return Cm(this,void 0,void 0,function(){var t,r,o,s=this;return Am(this,function(h){switch(h.label){case 0:return t=qb(n),[4,Promise.all(x.map(function(x){return Cm(s,void 0,void 0,function(){var e,i,r,o,s,h,u,a;return Am(this,function(g){return e=x.padAtBorders(n.height,n.width),i=e.y,r=e.ey,o=e.x,s=e.ex,h=o-1,u=i-1,a=t.getImageData(h,u,s-h,r-u),[2,wb.isNodejs()?_b(a):createImageBitmap(a)]})})}))];case 1:return r=h.sent(),o=[],r.forEach(function(n){var x=Ob({width:e,height:i}),t=qb(x);t.drawImage(n,0,0,e,i);for(var r=t.getImageData(0,0,e,i).data,s=[],h=0;h<r.length;h+=4)s.push(r[h+2]),s.push(r[h+1]),s.push(r[h]);o.push(s)}),[2,o.map(function(n){var x=bs(function(){var x=Ff(Gs(n,[1,e,i,3]),[0,2,1,3]).toFloat();return Zv(x)});return x})]}})})}function oj(n,x){return bs(function(){var t=nj(n,x),e=Uh(t,[t.shape[0],x.fc1.weights.shape[0]]),i=az(e,x.fc1),r=$v(i,x.prelu4_alpha),o=az(r,x.fc2_1),s=Ih(Af(o,1),1),h=yu(vd(o,s),1),u=az(r,x.fc2_2),a=Yh(h,1)[1];return{scores:a,regions:u}})}function sj(n,x,t,e,i){return Cm(this,void 0,void 0,function(){var r,o,s,h,u,a,g,l,c,d,f,p,y,m;return Am(this,function(b){switch(b.label){case 0:return r=Date.now(),[4,rj(n,x,{width:24,height:24})];case 1:return o=b.sent(),i.stage2_extractImagePatches=Date.now()-r,r=Date.now(),s=o.map(function(n){var x=oj(n,e);return n.dispose(),x}),i.stage2_rnet=Date.now()-r,h=s.length>1?ih(s.map(function(n){return n.scores})):s[0].scores,g=(a=Array).from,[4,h.data()];case 2:return u=g.apply(a,[b.sent()]),h.dispose(),l=u.map(function(n,x){return{score:n,idx:x}}).filter(function(n){return n.score>t}).map(function(n){var x=n.idx;return x}),c=l.map(function(n){return x[n]}),d=l.map(function(n){return u[n]}),f=[],p=[],c.length>0&&(r=Date.now(),y=Jm(c,d,.7),i.stage2_nms=Date.now()-r,m=y.map(function(n){var x=s[l[n]].regions.arraySync();return new Xv(x[0][0],x[0][1],x[0][2],x[0][3])}),p=y.map(function(n){return d[n]}),f=y.map(function(n,x){return c[n].calibrate(m[x])})),s.forEach(function(n){n.regions.dispose(),n.scores.dispose()}),[2,{boxes:f,scores:p}]}})})}function hj(n,x){return bs(function(){var t=nj(n,x);t=gf(t,[2,2],[2,2],"same"),t=Yb(t,x.conv4,"valid"),t=$v(t,x.prelu4_alpha);var e=Uh(t,[t.shape[0],x.fc1.weights.shape[0]]),i=az(e,x.fc1),r=$v(i,x.prelu5_alpha),o=az(r,x.fc2_1),s=Ih(Af(o,1),1),h=yu(vd(o,s),1),u=az(r,x.fc2_2),a=az(r,x.fc2_3),g=Yh(h,1)[1];return{scores:g,regions:u,points:a}})}function uj(n,x,t,e,i){return Cm(this,void 0,void 0,function(){var r,o,s,h,u,a,g,l,c,d,f,p,y,m,b;return Am(this,function(z){switch(z.label){case 0:return r=Date.now(),[4,rj(n,x,{width:48,height:48})];case 1:return o=z.sent(),i.stage3_extractImagePatches=Date.now()-r,r=Date.now(),s=o.map(function(n){var x=hj(n,e);return n.dispose(),x}),i.stage3_onet=Date.now()-r,h=s.length>1?ih(s.map(function(n){return n.scores})):s[0].scores,g=(a=Array).from,[4,h.data()];case 2:return u=g.apply(a,[z.sent()]),h.dispose(),l=u.map(function(n,x){return{score:n,idx:x}}).filter(function(n){return n.score>t}).map(function(n){var x=n.idx;return x}),c=l.map(function(n){var x=s[n].regions.arraySync();return new Xv(x[0][0],x[0][1],x[0][2],x[0][3])}),d=l.map(function(n,t){return x[n].calibrate(c[t])}),f=l.map(function(n){return u[n]}),p=[],y=[],m=[],d.length>0&&(r=Date.now(),b=Jm(d,f,.7,!1),i.stage3_nms=Date.now()-r,p=b.map(function(n){return d[n]}),y=b.map(function(n){return f[n]}),m=b.map(function(n,x){return Array(5).fill(0).map(function(t,e){var i=s[n].points.arraySync();return new Um(i[0][e]*(p[x].width+1)+p[x].left,i[0][e+5]*(p[x].height+1)+p[x].top)})})),s.forEach(function(n){n.regions.dispose(),n.scores.dispose(),n.points.dispose()}),[2,{boxes:p,scores:y,points:m}]}})})}var aj=function(n){function x(){return n.call(this,"Mtcnn")||this}return km(x,n),x.prototype.load=function(x){return Cm(this,void 0,void 0,function(){return Am(this,function(t){return console.warn("mtcnn is deprecated and will be removed soon"),[2,n.prototype.load.call(this,x)]})})},x.prototype.loadFromDisk=function(x){return Cm(this,void 0,void 0,function(){return Am(this,function(t){return console.warn("mtcnn is deprecated and will be removed soon"),[2,n.prototype.loadFromDisk.call(this,x)]})})},x.prototype.forwardInput=function(n,x){return void 0===x&&(x={}),Cm(this,void 0,void 0,function(){var t,e,i,r,o,s,h,u,a,g,l,c,d,f,p,y,m,b,z,v,j;return Am(this,function(w){switch(w.label){case 0:if(t=this.params,!t)throw new Error("Mtcnn - load model before inference");if(e=n.canvases[0],!e)throw new Error("Mtcnn - inputCanvas is not defined, note that passing tensors into Mtcnn.forwardInput is not supported yet.");return i={},r=Date.now(),o=bs(function(){return Hv(Ih(im.fromPixels(e)).toFloat())}),s=function(n){return o.dispose(),i.total=Date.now()-r,n},h=o.shape.slice(1),u=h[0],a=h[1],g=new $z(x),l=g.minFaceSize,c=g.scaleFactor,d=g.maxNumScales,f=g.scoreThresholds,p=g.scaleSteps,y=(p||Jv(l,c,[u,a])).filter(function(n){var x=Yv(n,[u,a]);return Math.min(x.width,x.height)>Vv}).slice(0,d),i.scales=y,i.pyramid=y.map(function(n){return Yv(n,[u,a])}),m=Date.now(),[4,ij(o,y,f[0],t.pnet,i)];case 1:return b=w.sent(),i.total_stage1=Date.now()-m,b.boxes.length?(i.stage2_numInputBoxes=b.boxes.length,m=Date.now(),[4,sj(e,b.boxes,f[1],t.rnet,i)]):[2,s({results:[],stats:i})];case 2:return z=w.sent(),i.total_stage2=Date.now()-m,z.boxes.length?(i.stage3_numInputBoxes=z.boxes.length,m=Date.now(),[4,uj(e,z.boxes,f[2],t.onet,i)]):[2,s({results:[],stats:i})];case 3:return v=w.sent(),i.total_stage3=Date.now()-m,j=v.boxes.map(function(n,x){return zz(lb({},new Gm(v.scores[x],new xb(n.left/a,n.top/u,n.width/a,n.height/u),{height:u,width:a})),new ob(v.points[x].map(function(x){return x.sub(new Um(n.left,n.top)).div(new Um(n.width,n.height))}),{width:n.width,height:n.height}))}),[2,s({results:j,stats:i})]}})})},x.prototype.forward=function(n,x){return void 0===x&&(x={}),Cm(this,void 0,void 0,function(){var t;return Am(this,function(e){switch(e.label){case 0:return t=this.forwardInput,[4,Nb(n)];case 1:return[4,t.apply(this,[e.sent(),x])];case 2:return[2,e.sent().results]}})})},x.prototype.forwardWithStats=function(n,x){return void 0===x&&(x={}),Cm(this,void 0,void 0,function(){var t;return Am(this,function(e){switch(e.label){case 0:return t=this.forwardInput,[4,Nb(n)];case 1:return[2,t.apply(this,[e.sent(),x])]}})})},x.prototype.getDefaultModelName=function(){return"mtcnn_model"},x.prototype.extractParamsFromWeigthMap=function(n){return Kv(n)},x.prototype.extractParams=function(n){return Qv(n)},x}(Wb),gj=.4,lj=[new Um(1.603231,2.094468),new Um(6.041143,7.080126),new Um(2.882459,3.518061),new Um(4.266906,5.178857),new Um(9.041765,10.66308)],cj=[117.001,114.697,97.404],dj=function(n){function x(){var x=this,t={withSeparableConvs:!0,iouThreshold:gj,classes:["face"],anchors:lj,meanRgb:cj,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};return x=n.call(this,t)||this,x}return km(x,n),Object.defineProperty(x.prototype,"anchors",{get:function(){return this.config.anchors},enumerable:!0,configurable:!0}),x.prototype.locateFaces=function(n,x){return Cm(this,void 0,void 0,function(){var t;return Am(this,function(e){switch(e.label){case 0:return[4,this.detect(n,x)];case 1:return t=e.sent(),[2,t.map(function(n){return new Gm(n.score,n.relativeBox,{width:n.imageWidth,height:n.imageHeight})})]}})})},x.prototype.getDefaultModelName=function(){return"tiny_face_detector_model"},x.prototype.extractParamsFromWeigthMap=function(x){return n.prototype.extractParamsFromWeigthMap.call(this,x)},x}(Rv),fj={ssdMobilenetv1:new yv,tinyFaceDetector:new dj,tinyYolov2:new Bv,mtcnn:new aj,faceLandmark68Net:new Rz,faceLandmark68TinyNet:new Fz,faceRecognitionNet:new Xz,faceExpressionNet:new yz,ageGenderNet:new _z};function pj(n,x){var t={age:x};return Object.assign({},n,t)}var yj=function(n){function x(x,t,e){var i=n.call(this)||this;return i.parentTask=x,i.input=t,i.extractedFaces=e,i}return km(x,n),x}(Nv),mj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x,t=this;return Am(this,function(e){switch(e.label){case 0:return[4,this.parentTask];case 1:return n=e.sent(),[4,Pv(n,this.input,function(n){return Cm(t,void 0,void 0,function(){return Am(this,function(x){switch(x.label){case 0:return[4,Promise.all(n.map(function(n){return fj.faceExpressionNet.predictExpressions(n)}))];case 1:return[2,x.sent()]}})})},this.extractedFaces)];case 2:return x=e.sent(),[2,n.map(function(n,t){return mz(n,x[t])})]}})})},x.prototype.withAgeAndGender=function(){return new wj(this,this.input)},x}(yj),bj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x;return Am(this,function(t){switch(t.label){case 0:return[4,this.parentTask];case 1:return n=t.sent(),n?[4,Lv(n,this.input,function(n){return fj.faceExpressionNet.predictExpressions(n)},this.extractedFaces)]:[2];case 2:return x=t.sent(),[2,mz(n,x)]}})})},x.prototype.withAgeAndGender=function(){return new kj(this,this.input)},x}(yj),zj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.withAgeAndGender=function(){return new qj(this,this.input)},x.prototype.withFaceDescriptors=function(){return new Ej(this,this.input)},x}(mj),vj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.withAgeAndGender=function(){return new Cj(this,this.input)},x.prototype.withFaceDescriptor=function(){return new Sj(this,this.input)},x}(bj),jj=function(n){function x(x,t,e){var i=n.call(this)||this;return i.parentTask=x,i.input=t,i.extractedFaces=e,i}return km(x,n),x}(Nv),wj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x,t=this;return Am(this,function(e){switch(e.label){case 0:return[4,this.parentTask];case 1:return n=e.sent(),[4,Pv(n,this.input,function(n){return Cm(t,void 0,void 0,function(){return Am(this,function(x){switch(x.label){case 0:return[4,Promise.all(n.map(function(n){return fj.ageGenderNet.predictAgeAndGender(n)}))];case 1:return[2,x.sent()]}})})},this.extractedFaces)];case 2:return x=e.sent(),[2,n.map(function(n,t){var e=x[t],i=e.age,r=e.gender,o=e.genderProbability;return pj(Zz(n,r,o),i)})]}})})},x.prototype.withFaceExpressions=function(){return new mj(this,this.input)},x}(jj),kj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x,t,e,i;return Am(this,function(r){switch(r.label){case 0:return[4,this.parentTask];case 1:return n=r.sent(),n?[4,Lv(n,this.input,function(n){return fj.ageGenderNet.predictAgeAndGender(n)},this.extractedFaces)]:[2];case 2:return x=r.sent(),t=x.age,e=x.gender,i=x.genderProbability,[2,pj(Zz(n,e,i),t)]}})})},x.prototype.withFaceExpressions=function(){return new bj(this,this.input)},x}(jj),qj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.withFaceExpressions=function(){return new zj(this,this.input)},x.prototype.withFaceDescriptors=function(){return new Ej(this,this.input)},x}(wj),Cj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.withFaceExpressions=function(){return new vj(this,this.input)},x.prototype.withFaceDescriptor=function(){return new Sj(this,this.input)},x}(kj),Aj=function(n){function x(x,t){var e=n.call(this)||this;return e.parentTask=x,e.input=t,e}return km(x,n),x}(Nv),Ej=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x;return Am(this,function(t){switch(t.label){case 0:return[4,this.parentTask];case 1:return n=t.sent(),[4,Pv(n,this.input,function(n){return Promise.all(n.map(function(n){return fj.faceRecognitionNet.computeFaceDescriptor(n)}))},null,function(n){return n.landmarks.align(null,{useDlibAlignment:!0})})];case 2:return x=t.sent(),[2,x.map(function(x,t){return Fv(n[t],x)})]}})})},x.prototype.withFaceExpressions=function(){return new zj(this,this.input)},x.prototype.withAgeAndGender=function(){return new qj(this,this.input)},x}(Aj),Sj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x;return Am(this,function(t){switch(t.label){case 0:return[4,this.parentTask];case 1:return n=t.sent(),n?[4,Lv(n,this.input,function(n){return fj.faceRecognitionNet.computeFaceDescriptor(n)},null,function(n){return n.landmarks.align(null,{useDlibAlignment:!0})})]:[2];case 2:return x=t.sent(),[2,Fv(n,x)]}})})},x.prototype.withFaceExpressions=function(){return new vj(this,this.input)},x.prototype.withAgeAndGender=function(){return new Cj(this,this.input)},x}(Aj),Ij=function(n){function x(x,t,e){var i=n.call(this)||this;return i.parentTask=x,i.input=t,i.useTinyLandmarkNet=e,i}return km(x,n),Object.defineProperty(x.prototype,"landmarkNet",{get:function(){return this.useTinyLandmarkNet?fj.faceLandmark68TinyNet:fj.faceLandmark68Net},enumerable:!0,configurable:!0}),x}(Nv),Dj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x,t,e,i,r=this;return Am(this,function(o){switch(o.label){case 0:return[4,this.parentTask];case 1:return n=o.sent(),x=n.map(function(n){return n.detection}),this.input instanceof Kr?[4,Pb(this.input,x)]:[3,3];case 2:return e=o.sent(),[3,5];case 3:return[4,Fb(this.input,x)];case 4:e=o.sent(),o.label=5;case 5:return t=e,[4,Promise.all(t.map(function(n){return r.landmarkNet.detectLandmarks(n)}))];case 6:return i=o.sent(),t.forEach(function(n){return n instanceof Kr&&n.dispose()}),[2,n.map(function(n,x){return zz(n,i[x])})]}})})},x.prototype.withFaceExpressions=function(){return new zj(this,this.input)},x.prototype.withAgeAndGender=function(){return new qj(this,this.input)},x.prototype.withFaceDescriptors=function(){return new Ej(this,this.input)},x}(Ij),Oj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x,t,e,i;return Am(this,function(r){switch(r.label){case 0:return[4,this.parentTask];case 1:return n=r.sent(),n?(x=n.detection,this.input instanceof Kr?[4,Pb(this.input,[x])]:[3,3]):[2];case 2:return e=r.sent(),[3,5];case 3:return[4,Fb(this.input,[x])];case 4:e=r.sent(),r.label=5;case 5:return t=e,[4,this.landmarkNet.detectLandmarks(t[0])];case 6:return i=r.sent(),t.forEach(function(n){return n instanceof Kr&&n.dispose()}),[2,zz(n,i)]}})})},x.prototype.withFaceExpressions=function(){return new vj(this,this.input)},x.prototype.withAgeAndGender=function(){return new Cj(this,this.input)},x.prototype.withFaceDescriptor=function(){return new Sj(this,this.input)},x}(Ij),_j=function(n){function x(x,t){void 0===t&&(t=new pv);var e=n.call(this)||this;return e.input=x,e.options=t,e}return km(x,n),x}(Nv),Tj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x,t,e;return Am(this,function(i){switch(i.label){case 0:return n=this,x=n.input,t=n.options,t instanceof $z?[4,fj.mtcnn.forward(x,t)]:[3,2];case 1:return[2,i.sent().map(function(n){return n.detection})];case 2:if(e=t instanceof Mv?function(n){return fj.tinyFaceDetector.locateFaces(n,t)}:t instanceof pv?function(n){return fj.ssdMobilenetv1.locateFaces(n,t)}:t instanceof Tv?function(n){return fj.tinyYolov2.locateFaces(n,t)}:null,!e)throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options");return[2,e(x)]}})})},x.prototype.runAndExtendWithFaceDetections=function(){var n=this;return new Promise(function(x){return Cm(n,void 0,void 0,function(){var n;return Am(this,function(t){switch(t.label){case 0:return[4,this.run()];case 1:return n=t.sent(),[2,x(n.map(function(n){return lb({},n)}))]}})})})},x.prototype.withFaceLandmarks=function(n){return void 0===n&&(n=!1),new Dj(this.runAndExtendWithFaceDetections(),this.input,n)},x.prototype.withFaceExpressions=function(){return new mj(this.runAndExtendWithFaceDetections(),this.input)},x.prototype.withAgeAndGender=function(){return new wj(this.runAndExtendWithFaceDetections(),this.input)},x}(_j);(function(n){function x(){return null!==n&&n.apply(this,arguments)||this}km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x;return Am(this,function(t){switch(t.label){case 0:return[4,new Tj(this.input,this.options)];case 1:return n=t.sent(),x=n[0],n.forEach(function(n){n.score>x.score&&(x=n)}),[2,x]}})})},x.prototype.runAndExtendWithFaceDetection=function(){var n=this;return new Promise(function(x){return Cm(n,void 0,void 0,function(){var n;return Am(this,function(t){switch(t.label){case 0:return[4,this.run()];case 1:return n=t.sent(),[2,x(n?lb({},n):void 0)]}})})})},x.prototype.withFaceLandmarks=function(n){return void 0===n&&(n=!1),new Oj(this.runAndExtendWithFaceDetection(),this.input,n)},x.prototype.withFaceExpressions=function(){return new bj(this.runAndExtendWithFaceDetection(),this.input)},x.prototype.withAgeAndGender=function(){return new kj(this.runAndExtendWithFaceDetection(),this.input)}})(_j);function Rj(n,x){return void 0===x&&(x=new pv),new Tj(n,x)}function Bj(n,x){if(n.length!==x.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");var t=Array.from(n),e=Array.from(x);return Math.sqrt(t.map(function(n,x){return n-e[x]}).reduce(function(n,x){return n+Math.pow(x,2)},0))}(function(){function n(n,x){void 0===x&&(x=.6),this._distanceThreshold=x;var t=Array.isArray(n)?n:[n];if(!t.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");var e=1,i=function(){return"person "+e++};this._labeledDescriptors=t.map(function(n){if(n instanceof ab)return n;if(n instanceof Float32Array)return new ab(i(),[n]);if(n.descriptor&&n.descriptor instanceof Float32Array)return new ab(i(),[n.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor<any> | Float32Array | Array<LabeledFaceDescriptors | WithFaceDescriptor<any> | Float32Array>")})}Object.defineProperty(n.prototype,"labeledDescriptors",{get:function(){return this._labeledDescriptors},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"distanceThreshold",{get:function(){return this._distanceThreshold},enumerable:!0,configurable:!0}),n.prototype.computeMeanDistance=function(n,x){return x.map(function(x){return Bj(x,n)}).reduce(function(n,x){return n+x},0)/(x.length||1)},n.prototype.matchDescriptor=function(n){var x=this;return this.labeledDescriptors.map(function(t){var e=t.descriptors,i=t.label;return new hb(i,x.computeMeanDistance(n,e))}).reduce(function(n,x){return n.distance<x.distance?n:x})},n.prototype.findBestMatch=function(n){var x=this.matchDescriptor(n);return x.distance<this.distanceThreshold?x:new hb("unknown",x.distance)},n.prototype.toJSON=function(){return{distanceThreshold:this.distanceThreshold,labeledDescriptors:this.labeledDescriptors.map(function(n){return n.toJSON()})}},n.fromJSON=function(x){var t=x.labeledDescriptors.map(function(n){return ab.fromJSON(n)});return new n(t,x.distanceThreshold)}})();var Mj={name:"FaceDetection",emits:["face-detected","face-lost","error","detection-complete"],props:{videoWidth:{type:Number,default:240},videoHeight:{type:Number,default:240},minConfidence:{type:Number,default:.5},captureInterval:{type:Number,default:2e3},maxCaptures:{type:Number,default:1}},data(){return{modelPath:ae.getters.faceApiUrl,loading:!1,modelsLoaded:!1,cameraStarted:!1,cameraReady:!1,isDetecting:!1,stream:null,detectionInterval:null,capturedImages:[],lastCaptureTime:0}},created(){const n=window.location.href.split("?")?.[1]?.split("=")?.[1];n&&(this.modelPath=n);const x=localStorage.getItem("xc_modelPath");x&&(this.modelPath=x)},async mounted(){await this.loadModels(),await this.autoStartDetection()},beforeDestroy(){this.cleanup()},methods:{h_back(){this.$emit("back")},async loadModels(){try{this.loading=!0,await Promise.all([fj.tinyFaceDetector.loadFromUri(this.modelPath),fj.faceLandmark68Net.loadFromUri(this.modelPath),fj.faceRecognitionNet.loadFromUri(this.modelPath)]),this.modelsLoaded=!0,console.log("人脸检测模型加载完成")}catch(n){this.$emit("error",{type:"model-load-error",error:n})}finally{this.loading=!1}},async autoStartDetection(){if(this.modelsLoaded)try{await this.startCamera(),setTimeout(()=>{this.cameraReady&&this.startDetection()},1e3)}catch(n){console.error("自动开始检测失败:",n)}},async startCamera(){try{this.stream=await navigator.mediaDevices.getUserMedia({video:{width:this.videoWidth,height:this.videoHeight,facingMode:"user"}}),this.$refs.video.srcObject=this.stream,this.cameraStarted=!0}catch(n){console.error("摄像头启动失败:",n),this.$emit("error",{type:"camera-error",error:n})}},onVideoLoaded(){this.cameraReady=!0,console.log("摄像头准备就绪"),this.modelsLoaded&&!this.isDetecting&&setTimeout(()=>{this.startDetection()},500)},stopCamera(){this.stopDetection(),this.stream&&(this.stream.getTracks().forEach(n=>n.stop()),this.stream=null),this.cameraStarted=!1,this.cameraReady=!1},startDetection(){this.modelsLoaded&&this.cameraReady&&(this.isDetecting=!0,this.detectionInterval=setInterval(()=>{this.detectFaces()},100))},stopDetection(){this.isDetecting=!1,this.detectionInterval&&(clearInterval(this.detectionInterval),this.detectionInterval=null);const n=this.$refs.overlay,x=n.getContext("2d");x.clearRect(0,0,n.width,n.height)},toggleDetection(){this.isDetecting?this.stopDetection():this.startDetection()},async detectFaces(){const n=this.$refs.video,x=this.$refs.overlay;if(n&&x)try{const t=await Rj(n,new Mv).withFaceLandmarks().withFaceDescriptors(),e=x.getContext("2d");if(e.clearRect(0,0,x.width,x.height),t.length>0){t.forEach(n=>{const{x:x,y:t,width:i,height:r}=n.detection.box;e.strokeStyle="#00ff00",e.lineWidth=2,e.strokeRect(x,t,i,r),e.fillStyle="#00ff00",e.font="16px Arial",e.fillText(`${(100*n.detection.score).toFixed(1)}%`,x,t-10)});const n=Date.now();n-this.lastCaptureTime>this.captureInterval&&(this.captureHighConfidenceFaces(t),this.lastCaptureTime=n),this.$emit("face-detected",t),this.onFaceDetectedComplete(t)}else this.$emit("face-lost")}catch(t){console.error("人脸检测失败:",t),this.$emit("error",{type:"detection-error",error:t})}},captureHighConfidenceFaces(n){const x=this.$refs.video;n.forEach(n=>{if(n.detection.score>=this.minConfidence){const t=document.createElement("canvas"),e=t.getContext("2d"),{x:i,y:r,width:o,height:s}=n.detection.box,h=1,u=1,a=1,g=s*(1+h+a),l=o*(1+2*u),c=Math.max(0,i-o*u),d=Math.max(0,r-s*h),f=x.videoWidth||this.videoWidth,p=x.videoHeight||this.videoHeight,y=Math.max(0,c),m=Math.max(0,d),b=Math.min(l,f-y),z=Math.min(g,p-m);t.width=b,t.height=z,e.drawImage(x,y,m,b,z,0,0,b,z);const v=t.toDataURL("image/jpeg",.8);this.capturedImages.unshift({dataUrl:v,confidence:n.detection.score,timestamp:Date.now(),box:n.detection.box,expandedBox:{x:y,y:m,width:b,height:z}}),this.capturedImages.length>this.maxCaptures&&(this.capturedImages=this.capturedImages.slice(0,this.maxCaptures)),console.log("捕获到高置信度人脸:",n.detection.score)}})},async copyToClipboard(n){try{await navigator.clipboard.writeText(n),console.log("Base64已复制到剪贴板")}catch(x){console.error("复制失败:",x)}},onFaceDetectedComplete(n){this.stopDetection(),this.stopCamera(),this.$emit("detection-complete",{detections:n,capturedImages:this.capturedImages})},cleanup(){this.stopCamera(),this.capturedImages=[]},async restartAuthentication(){try{console.log("开始重新认证..."),this.cleanup(),this.capturedImages=[],this.lastCaptureTime=0,this.modelsLoaded||await this.loadModels(),await this.autoStartDetection(),this.$emit("restart-authentication")}catch(n){console.error("重新认证启动失败:",n),this.$emit("error",{type:"restart-error",error:n})}}}},Nj=Mj,Fj=Ie(Nj,Ei,Si,!1,null,"5308c508",null),Pj=Fj.exports,Lj=function(){var n=this,x=n._self._c;return x("div",{directives:[{name:"loading",rawName:"v-loading",value:n.loading,expression:"loading"}],staticClass:"face-picture"},[x("img",{attrs:{src:n.src,width:"100%",height:"100%"}}),x("div",{staticClass:"delete-batn",on:{click:n.handleDelete}},[x("i",{staticClass:"el-icon-delete",staticStyle:{size:"20px"}})])])},Hj=[],Uj={props:{row:Object},data(){return{src:null,loading:!1}},created(){},mounted(){this.loadFaceImage()},methods:{handleDelete(){this.handleClearFaceInfo()},loadFaceImage(){if(!this.row?.userId)return void console.warn("用户ID不存在,无法加载人脸信息");const n=!1;this.src=n?`/face/photo?userId=${this.row?.userId}`:ae.getters.authUrl+`/face/photo?userId=${this.row?.userId}`},handleClearFaceInfo(){this.$confirm("确定要清除人脸信息吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{this.loading=!0,fi({userId:this.row?.userId}).then(()=>{this.$emit("clear-face"),this.$message.success("人脸信息已清除")}).finally(()=>{this.loading=!1})}).catch(()=>{})}}},Vj=Uj,Wj=Ie(Vj,Lj,Hj,!1,null,"8a1623a6",null),Qj=Wj.exports,Gj={name:"FaceRegister",props:{row:Object,options:Array},components:{ChooseCameraOrPicture:vi,UploadPicture:Ai,FaceDetected:Pj,FacePicture:Qj},data(){const n=this.row?.userId;return{userId:n,chooseType:"loading",uploading:!1,userIdMissing:!1}},created(){this.checkFaceInfo()},methods:{checkFaceInfo(){di({userId:this.userId}).then(n=>{this.chooseType=n.data?"face-info":""})},handleBack(){this.chooseType=""},handleClose(){},handleChoose(n){this.chooseType="camera"===n?"camera":"picture"},handleClearFace(){this.checkFaceInfo()},handleRefresh(){window.location.reload()},handleUploadSuccess(){this.checkFaceInfo()},async handleDetectionComplete(n){if(this.userId)if(n.capturedImages&&0!==n.capturedImages.length)try{this.uploading=!0,this.chooseType="";const x=n.capturedImages[0],t=x.dataUrl,e=this.base64ToFile(t,"face-detected.jpg"),i=new FormData;i.append("file",e),i.append("userId",this.userId),i.append("userName",this.row?.row?.name||""),await ci(i),this.$message.success("人脸注册成功!"),this.checkFaceInfo()}catch(x){console.error("人脸上传失败:",x),this.chooseType=""}finally{this.uploading=!1}else this.$message.error("未检测到人脸图片");else this.$message.error("用户信息不完整,无法进行人脸注册")},base64ToFile(n,x){const t=n.split(","),e=t[0].match(/:(.*?);/)[1],i=atob(t[1]);let r=i.length;const o=new Uint8Array(r);while(r--)o[r]=i.charCodeAt(r);return new File([o],x,{type:e})}}},Kj=Gj,Yj=Ie(Kj,ui,ai,!1,null,"d4c502b4",null),Jj=Yj.exports,Xj=function(){var n=this,x=n._self._c;return x("div",{directives:[{name:"loading",rawName:"v-loading",value:n.loading,expression:"loading"}],staticClass:"p-12"},[x("el-table",{ref:"table",attrs:{data:n.tableData,stripe:"","header-cell-style":{background:"#f7f8fa"}},on:{"selection-change":n.h_selectionChange,"row-click":n.h_rowClick}},[x("el-table-column",{attrs:{type:"selection",width:"75"}}),x("el-table-column",{attrs:{type:"index",label:"序号",width:"80"}}),x("el-table-column",{attrs:{prop:"icCard",label:"身份卡号"}})],1),x("div",{staticClass:"flex-center mt-12"},[x("el-button",{staticStyle:{"border-radius":"8px",padding:"7px 20px"},attrs:{type:"primary",icon:"el-icon-circle-plus-outline"},on:{click:n.h_add}},[n._v("添加")]),x("el-button",{staticStyle:{"border-radius":"8px",padding:"7px 20px"},attrs:{icon:"el-icon-delete",type:"danger"},on:{click:n.h_remove}},[n._v("移除")])],1),n.visible?x("register-dialog",{attrs:{row:n.row},on:{closed:function(x){n.visible=!1},refresh:n.h_loadData}}):n._e()],1)},Zj=[];const $j=n=>li({url:"/userICCard/add",method:"post",data:n}),nw=n=>li({url:"/icCard/findNoBindICCard",method:"get",params:n}),xw=n=>li({url:"/userICCard/deleteByIcCard",method:"post",data:n}),tw=n=>li({url:"/userICCard/findByUserId",method:"get",params:n});var ew=function(){var n=this,x=n._self._c;return x("el-dialog",{attrs:{visible:n.visible,width:"580px",title:"normal"===n.component?"新增身份卡":"选择身份卡","append-to-body":""},on:{closed:n.closed,close:n.h_close}},["normal"===n.component?x("div",[x("div",{staticClass:"p-12 pr-32"},[x("el-form",{attrs:{model:n.form,"label-width":"100px"}},[x("el-form-item",{attrs:{label:"身份卡号"}},[x("el-input",{attrs:{placeholder:"请输入或者使用刷卡器刷卡"},model:{value:n.form.cardNo,callback:function(x){n.$set(n.form,"cardNo",x)},expression:"form.cardNo"}})],1)],1)],1),x("div",{staticClass:"select-section"},[x("el-button",{staticClass:"select-button",attrs:{type:"text"},on:{click:n.h_selectCard}},[n._v(" 选择已录入身份卡 >> ")])],1),x("div",{staticClass:"dialog-footer f_center",staticStyle:{"margin-top":"100px"}},[x("el-button",{attrs:{loading:n.loading},on:{click:n.h_close}},[n._v("取消")]),x("el-button",{attrs:{type:"primary",loading:n.loading},on:{click:n.h_submit}},[n._v("确定")])],1)]):n._e(),"table"===n.component?x("div",[x("card-table",{attrs:{loading:n.loading},on:{back:n.h_back,submit:n.h_submit}})],1):n._e()])},iw=[],rw=function(){var n=this,x=n._self._c;return x("div",{directives:[{name:"loading",rawName:"v-loading",value:n.loading,expression:"loading"}]},[x("el-table",{ref:"table",attrs:{data:n.tableData,stripe:"","header-cell-style":{background:"#f7f8fa"}},on:{"selection-change":n.h_selectionChange,"row-click":n.h_rowClick}},[x("el-table-column",{attrs:{type:"selection",width:"75"}}),x("el-table-column",{attrs:{type:"index",label:"序号",width:"80"}}),x("el-table-column",{attrs:{prop:"icCard",label:"IC卡号"}}),x("el-table-column",{attrs:{prop:"createdTime",label:"录入时间"}})],1),n._e(),x("div",{staticClass:"flex-center mt-42"},[x("el-button",{on:{click:n.h_back}},[n._v("返回")]),x("el-button",{attrs:{type:"primary"},on:{click:n.h_submit}},[n._v("确定")])],1)],1)},ow=[],sw={name:"CardTable",props:{loading:{type:Boolean,default:!1}},data(){return{tableData:[],selection:[],pagination:{current:1,size:5,total:0}}},created(){this.f_loadData()},methods:{h_rowClick(n){this.$refs.table.toggleRowSelection(n)},h_currentChange(n){this.table.pagination.current=n,this.f_loadData()},h_back(){this.$emit("back")},h_submit(){0!==this.selection.length?this.$emit("submit",this.selection):this.$message.warning("请选择要添加的IC卡")},f_loadData(){nw({keyword:null}).then(n=>{this.tableData=n.data})},h_selectionChange(n){this.selection=n}}},hw=sw,uw=Ie(hw,rw,ow,!1,null,"49d6fcb9",null),aw=uw.exports,gw={name:"RegisterDialog",components:{CardTable:aw},props:{row:{type:Object,default:()=>{}}},data(){return{loading:!1,component:"normal",visible:!1,form:{cardNo:""}}},created(){},mounted(){this.visible=!0,this.$authEventBus.$on("card",this.h_card)},beforeDestroy(){this.$authEventBus.$off("card",this.h_card)},methods:{h_card(n){0!==n.result&&200!==n.status||(this.form.cardNo=n.data)},h_back(){this.component="normal"},h_submit(n){this.loading=!0;let x={userId:this.row.userId,userName:this.row.row.name,icCards:[this.form.cardNo],tenantId:""};n&&(x={userId:this.row.userId,userName:this.row.row.name,icCards:n.map(n=>n.icCard),tenantId:""}),$j(x).then(()=>{this.$message.success("新增成功"),this.visible=!1,this.$emit("refresh")}).finally(()=>{this.loading=!1})},h_close(){this.visible=!1},closed(){this.$emit("closed")},h_selectCard(){this.component="table"}}},lw=gw,cw=Ie(lw,ew,iw,!1,null,"1e4a3a1e",null),dw=cw.exports,fw={name:"CardRegister",components:{RegisterDialog:dw},props:{row:{type:Object,default:()=>{}}},data(){return{tableData:[],selection:[],visible:!1,loading:!1}},created(){this.h_loadData()},methods:{h_rowClick(n){this.$refs.table.toggleRowSelection(n)},h_loadData(){this.loading=!0,tw({userId:this.row.userId}).then(n=>{this.tableData=n.data}).finally(()=>{this.loading=!1})},h_add(){this.visible=!0},h_remove(){this.$confirm("确定移除选中的身份卡吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{this.loading=!0,xw(this.selection.map(n=>n.icCardId)).then(()=>{this.$message.success("移除成功"),this.h_loadData()}).finally(()=>{this.loading=!1})}).catch(()=>{})},h_selectionChange(n){this.selection=n}}},pw=fw,yw=Ie(pw,Xj,Zj,!1,null,"6f88fce1",null),mw=yw.exports,bw=function(){var n=this,x=n._self._c;return x("div",{staticClass:"flex-center align-center h100 w100"},[x("div",{staticClass:"finger-dialog"},[x("div",{staticClass:"finger-register-content"},[x("div",{staticStyle:{color:"#333","font-size":"24px","margin-bottom":"12px","padding-top":"48px","text-align":"center","margin-top":"24px"}},[n._v(" "+n._s(n.stepTips)+" ")]),x("div",{staticStyle:{display:"flex","justify-content":"center","align-items":"center","padding-top":"50px"}},[x("div",{staticClass:"hand-area left-hand"},[x("div",{staticClass:"hand-image-wrapper"},[x("img",{staticClass:"hand-image",attrs:{src:n.leftHandleImg}}),x("div",{staticClass:"finger-buttons-overlay"},n._l(n.leftFingers,function(t,e){return x("div",{key:"left-"+e,class:["finger-circle",{active:n.selectedFinger&&n.selectedFinger.value===t.value,ready:!!t.fingerInfo}],style:{top:t.top+"px",left:t.left+"px"},on:{click:function(x){return n.handleSelectFinger(t)}}})}),0)])]),x("div",{staticClass:"hand-area right-hand"},[x("div",{staticClass:"hand-image-wrapper"},[x("img",{staticClass:"hand-image",attrs:{src:n.rightHandleImg}}),x("div",{staticClass:"finger-buttons-overlay"},n._l(n.rightFingers,function(t,e){return x("div",{key:"right-"+e,class:["finger-circle",{active:n.selectedFinger&&n.selectedFinger.value===t.value,ready:!!t.fingerInfo}],style:{top:t.top+"px",left:t.left+"px"},on:{click:function(x){return n.handleSelectFinger(t)}}})}),0)])]),x("div",{staticClass:"fingerprint-status"},[x("div",{staticClass:"fingerprint-image-container"},[x("div",{staticClass:"delete-button"},[n.selectedFinger&&n.selectedFinger.fingerInfo?x("el-button",{attrs:{type:"text",size:"large"},on:{click:n.handleDeleteFinger}},[x("i",{staticClass:"el-icon-delete",staticStyle:{"font-size":"20px",color:"#999"}})]):n._e()],1),x("img",{staticClass:"fingerprint-image",attrs:{src:n.realFingerprintImage}}),x("p",{staticClass:"status-text"},[n._v(" "+n._s(n.fingerStatusText)+" ")])])])])])])])},zw=[];function vw(n){return li({url:"/finger/maxFingerSeq",method:"post",data:n})}function jw(n){return li({url:"/finger/upload",method:"post",data:n})}function ww(n){return li({url:"/finger/findByUserId",method:"post",data:n})}function kw(n){return li({url:"/finger/delete",method:"post",params:n})}const qw="data:image/gif;base64,R0lGODlhlACSANU/ANra2srT/nuK//Pz89XV1eHh4e7u7qe0/I2v/oWW/v39/bDI/tPT03Wl/+Xq//r6+nFu/9nj//P1/9za0+Tj2vr7//Py7Ovx/8TJ4vv69dvZ0N/d0uvq5NfX19XV0///+nl8//b4/9PT1c/Pz9jX0ubm5pqg++/u5/f28M3P3Wmb/9rd/re+5fv9/+Hg1r7C/+7v//f3+fHw5tPV1ujn3tjY1v3899bZ5urq6tXT0/f399PV0/39+dbW3P///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjM0NUE0Rjg1MTVEMjExRjBCMEY3RDJBMDcwMEY1MzZBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjM0NUE0Rjg2MTVEMjExRjBCMEY3RDJBMDcwMEY1MzZBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MzQ1QTRGODMxNUQyMTFGMEIwRjdEMkEwNzAwRjUzNkEiIHN0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",Cw="data:image/gif;base64,R0lGODlhlACSANU/AOfn5/z8/a2x/9TU1HJs/6/H/3Sn/+Xp/3mX/9vb2/Pz83qH/4SZ/9Xa/9nk/4Wm/8TJ//P0/8PW/4WH/5qq/5Wa/5u6/+Li4erx/9zb03t5/4Wx/26e//X068fK3Pn5+NrY0Nnc6by+/+De0sDH5KOh//T4/4+O/9fX15qZ79/f/9HR0aCl7djW0m6O/+3t7c/Q/83S687Q2qK17e/v/7e75d7e3vDv5GCa//f39vj4/9fX1dnZ2ZCM8v///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUwNEUwRkYwMTVEMjExRjBBRjI1ODNFMDZCQjRGNkUzIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUwNEUwRkYxMTVEMjExRjBBRjI1ODNFMDZCQjRGNkUzIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NTA0RTBGRUUxNUQyMTFGMEFGMjU4M0UwNkJCNEY2RTMiIHN0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",Aw="data:image/gif;base64,R0lGODlhlACSANU/AHNv/3Sn/7HJ/3mY/+Xq//z8/9TU1ISY/4Sm/3uI/9Ta/9rl/8TW/8XK//L0/4WI/5Wp/5m4/6a9/6ap/7W5/+jo55aY/+vx/3x6/4ax/26e//Pz8+Pj4KCf/5CO//T4/25j//X06/389q+v/7/A/9ra226N/7m+5cTI38/Q/6q56Nzb0qik7Juo7+7v/5ya7bq34N/g/2GZ/83R5u3s6Zy079/f2/j38fj4/7Cv5+/v7pKM8Yyq8vj4+P///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjU4OTAzMDZBMTVEMjExRjA5QTQ2OTYxODk3MjlGQjU3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjU4OTAzMDZCMTVEMjExRjA5QTQ2OTYxODk3MjlGQjU3Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NTg5MDMwNjgxNUQyMTFGMDlBNDY5NjE4OTcyOUZCNTciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NTg5MDMwNjkxNUQyMTFGMDlBNDY5NjE4OTcyOUZCNTciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQFAAA/ACwAAAAAlACSAAAG/0CfcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW67t4V44U0/FxwXwmK/UDD+gAwKfAsEFx91iVU4eX4CEREZkpMBlZWTkpASAgwLh4qgSXcXCwwSkZUalqusrRqqARkRnIaIoaAOpY8ZAbCtv8CssBGbChdzt22MCwK8wc/QwbIMBB/IyWYfpRLOv7CymwKcgYHij6i93gGzDMfYYzgEzcDfm52GDh8fOHL9OPp4CDhCF0yCsWvvtuBgxstXqlj2PNmickcgg13pVqmS0C7hFgcMuknKGKHTpy4VFcz7tkrCgokep4jQISCAjFgN13FyRyYXA/9UqhpqyCCAAMKYTjbQmGEzVrqS1dQUuKAywyunQRk4QOqkwAYbK1BYtUTU6BsHCiSQzVmU65IeFUoYMBCWxzpqR6V4pUFDh44NG3oIziuKqtqgliIowOH2yAYOcw2UWLFiBt4mOBxYXMB4SIG4c0uILmGDA4e+Fy44IFxkakiWQ7U2JqJDruTIHEL0YPJBoDhUGRh09rEhsnHjYSVE5ClK3li2BGYXoGHbtoEKu5XcYUawkowM0YUUP458Bo+rEKnBPKItQtCGEi64hRvZtg0drIX0vpiT1ffwPsBl3XFhNWWJKrN4soQ8Gd20AFf0SWYbB9khUYBzwbyCgHBE9KD/QwU0VFCBaTaQhgIPMjhElkFbJQGSVRp892BMEYo2F3bN/ZTRgbFAIoAC6wnRj2A9bBACDT/1181QArwkygIRIBBckLf0ANltc9GQH0gRpIMAAr0g+CM+U/RAiilKktVkfno46dFnoYWGn4XMeJlTBhxFlcVU3IGpgZRhBtfibERMF6dkOrj42p9+6qTgF/GYgoCGObmU35s0HFrCBklcUBNir5R16UcKdPleL1M24eGcdWwgV3WJHrGQe0NNyuQCo3pxgY6gIiCAfEpYeWOFbQiLZaxG4MDApAF8+UoEuHaVWR5t8kFALXE44SmzzmoQnxKZRlZBrmMUcGWWSIA0/+mXqP7KxFR6XHRKJJjIQsw4Er1bai/dQptEBYci24arNxL2gQAa2grtqPtxw+4r6KUCsSpSznLQEtsy2ou/jtlg3KZvFPAhq0U48KmzAUgA4BFTVRVms9EI82dJCwwq62swa8CxEbVhSSEdrB2c8J+ydcorxWBqNPHEq3zp558uDWdEAVBSjOrKRIQr1woCg1IAA/wyy6GFpaLn9FVfgqPc2pBk0G2zD/9ZVH5V5xwB1kIYSxkHN9yi7LqTBid1awpkkKLT6eApSCGpOeC443n0cVGUaD9NFLBHECCB1TpjTgTBJZygwgzElpvrAlY5u+GlOAhwuK0I0HzB4KJ8QP/VSnCHubMRBLjX7CsC2DyEDiuogIAMCChgBjMG0T5EDzNoSLTzhYKdIpMXU+GTBNzammrm7qHMQJAiKHDes3jrGoEMyCtAmAgVnAjx2Eu86KubWLhGK6CquHsE6oz604yKQIDU9UIA1NNC6yAmAwEESWSUQUENeNAAKiFBGzXzwoV+MoAAeit9BShcACPgOf0g7HcZGOAXFgCBASBgAANAoBEIRhkD2KB0Q9gAiMgFhwVIAIZfguHdWMYAIMIweLyLgAuPyEO9CMCIQyyCseRiAxGwjDpZaqIPGFEta6mmCRdowAsP8EITRLEIOPjhEpM3tWUt8YxduIASX7g6nh3/igZX/BgO2eObU0Dgj4D0kUmWgAMFQMAESzRj+uToQgSY4FtFYOQLB9AALXbFjS8koRGMNRcOECYEK8DSDbVDikdMEoaoTKULIZAnCwoBSkZ8pPBeSUcYMuAoBWiAESGQvitIEoaVNEK4QrPHG3CAMrYhmRF2JYEWqvKZMDwAKhEAgSYlEEqInKQMW/PEJUJAhULo3RIHcEsufK2W35zaua7DnhmoAAUeu07QSpXKIEJTlfZ04a9Yw8JGurCcBHSkI8k5NV2iUgKztMIHfijNGFJpmKNEYwOkyQMUrABHmRPAJA/A0WlCgBhrO8UpyXhKxViQhSb4kgnS2ZoimmCl/+AMZwtfyFItEGCmA6ipFOPCAU4ZQQEDHUALOGDFqcGykQ2NHSc80bjUCKQBzZxmGQ+AxDZKc5ISyMvBYhctIyx0AA1tQAKjEMIxDgChogjMERwQAROQ0QQ1cAHLDJnNSbKSGqsRhQti0IAIJPUAiIRkET4w0TUqzwiacQFrviZNaWoyCwdD5QEAGgUGXNWF7mujI8kI2AO4JKGFYYAz7amyI1xAAm6laS8XhFM2ZuGmhp0CbBEgTQdODaiphSEEiqYXH14VqyUUAlDHGcwotA6sR3TlExj7xuCixRgW6iZNY+qDm+b2rKt9wgeWdV20SjSaA4gAaImjgz0OF4beVf9oNzla3CEcrLbB9YELcErJvIhgBkY8a3ynEMJDvrW+SUTkAGrQtRx6LKJEEKdjs+sEFyjxqoclQgwc6VYGHMGyyIWjEESQqRYMAJFVtZBmrmWIsfYXrIDV6RCG2wIUEHWT8VwBDYo6hONCGAuwXfB3o9kArzKUoylwTChR0IIDkAC0d+CrHyEwgWIQgHplTSlgJSDXItxgBieYAWUKTLC52KBvhZpoY8V6BUOi2LZEcABDwRrhISygsTmNAYzpEsoZ+BSxpoBAQ/E5gTWxrLCTJHMRQBlKA3iyCCLggAR5oAI5F0EBcKayFZgLZCP0M8XgtLE0KSA8Q93my0jQHGD/UczRUu8ZAimgkppRvFK83SCeNsRhBVrw0gGQYD2XzimDlxBZILbZBwVIQaSFN1/kHuDXAYI1O297SFJ3NJqmdqv/ipDryR6FkyArQgyabcYqD8HBKIaAo6nggjWLe7DrPUCPCahnwEbA28OzDoI9Q1fORhOQENgobV/K6YKiOLzBHaY8Cfjg8GItsqWmrBQIMAHkqrjcyHUtESDdUUE/D2CRwSPv/EtbF0qgATEgsQJIoGdWqztIKG1sZj9nnRcTAeFxbo2YpXnrKmybowmYANZumoADJICX3y01srssmTsP4b4+93nOFeCCwWlmoj23QM9TcJQPkKDnPu93h2Bd/4LS5dLUQX50qRNAAXhHAdI9T8AIhHdzn4/A7GpOuwXGPQSBH3rQKHhBAvZOgeziAOo4n4DZfaAAqftc5zs1ToGFXWqLC2HbaX+7zaW+d8f7IAYWwLnWvz2BtAO9Q+sssLCIfICyMwEHwsb6AaheBBeMwPPg9HQWxa554fH88LtOgg5OwNEcVOCnmecoCQZ308BjrQdcN7oQdDCXOis/CTi4Os4lH2ZTD73lRyl85M3O8LQjnr+ZQsEJDBCC1jCevdkf++bFA5a9eZ0GlKFM+Z8AeZ9bANnnV/e1W166+qvd7K7nfbnHMhUQfzagfCGUdKtnfmNXc0Twas03Loh2Jf8rcIDskVclQwGq117CpX7Cg3y4UTq3l3NY4wIa6HOfpxcYV3TAt3f3J3MH8ADsNTgbQGQtcAIa94Az0AI36HKeEQMUMAINMEupx3dsR3lkZ3Yg6GUi2Hl7l4JC4AAa+IQDaASJVh/Ph3YJ8IJE8Hd7V3lHgXkYgAHHxjstMIbqRmMyNYYJwHoShoTfNwSY94VxmDfn0nXs9oUdgDVSqId0BwXYpnx/9wB7t4BdeHUJQIiWV4QJwIE+wIhr92iEaITaBodYM4d7V4fJVh8iCAFfOHcl83ou+IfLBVGlE31f+ADrVmOI+ACqeBRF+IpFAInCg3aEuH6XZ4mVSIdYAyf/TNh6r4cBJNgaVwcAGLCHVSAsJaBMPtCHhRh2rPiFqweLSmeIRMCIuKiFZHeEvLiLmTh4X2FDz3dfencAKABmCdZ5qzdWTFAkPZAXPOeCv+aMPfdrwVaN9siIwyd2X+iAcoiE1PePXxiQHaJWVqhoJ+Biaigke/VkYZAChPgAx1iCTriFf4iK8ihzX5gAJJB9HvCFloeJ//doADl4b3FM7rcGBNABwpgAGNCRBGQBwjiRGTiGGACKLzeFlWd+k9iIHrl3GBCJE/eRLimUTxCOofQzaWB1YyiRHkCKCjCJQcl9E2CTOPltI9CSDwCNQtIAG+mIDSCRY4iLKfCRYzle/0gQjp20R2LgACQgkYT4koNTAIgIhpU4k8iYjjN5lUKAkYnohkJSlxw5OBD5hRSgXI7Bf2hAABqIAYQIAHwpBC5QlXv3lEZQmC6piWLoknk5BFKolb+GAzrpk0UQlv1oScYUfxglBgUgAhuQAh3gkq4ojI4YbF94jGYnmi1JdoOjAESJAYLXepSZAJZJBK6nlVwpBF65d6qIBC4AWiEwAzAAAygwY2OgQ4rmAcboigAwmEbgAiwZl4dJQCzJnMn5iFKJiyu5lztHmTf5h3T5hR6AbKjXASOQPjHQAns3VGMAgiuQAwAAABLZnbgoBCnAho4JlWJ5k71IAjZJmhLmAf822QFmJ4ZjaAF8SAFWqaAgAADBWZoYEKBtOAbhYgMnEKIB6gFDmDkW0J0hSgFz6aBjCADjaZwTYIwYUJxE0AA2CQBGKVwSGqIUKpw4GpkOMAIBaozIJqNj6IhdwHx0YQAs4JgjEAMGg6TCKKB4A544upVGEAPaGaIYGoo4igGOCJEz+qO5aIyQuXMd0KX2qKFNeZ5dICAlYBopwHQW4qAC+qJ5AZFsOqZh1qMfOgQE0KJNSYpM+pIeyaad+XiIyqChaJM6GgZeYZCiAKgDKqjG+aZpSmw3apP7OHFiCZm5KaeOiX+lWqiPF6QAMKQ2WqRVCA+A6pICimw+wKPdeav/XxqmAFCpytmjasqlF4o1ummTMDqLpaqmh4qjj9oGLvCW3fkAxgiTJeOpIaqmuUSop1qmgNmqjkqRXZqc2yqqvemrzyoVMZCV22mMBUqXIUqtD4Bsk4mjbXgUK4mjHoA3PDqjrHp5YZqjF7mo34qe/mqSZ+AADaCdONqhaipc1JqmQXKggYo3KZAAjio8H4Cl1UqYEfuqcMex+2oEMhqgBVoGrRkCPNqhEtmh/xqF2AoC8/qdnhqganqkbOqjgwOmbDqzhcKnNmt7iGqqJROqxuikrLkBH1IBNvACHRqiIIABppcsFBCgKGqtnqGrIYoB5xkDH4sBKzcEWguyaMSx/2aafdQaoB0gtD2Lq2EgIM33nwDQob+aAtSzsmMIArBqo1Ebov9Kl1b7qrNUtSiarJ3KpsCaqzPqo+sRlUnKqWTgi6ERFi9ApVaKBBDZtzKLbNvatjTLpmfbejXrs6SapHsbhUbLqCCapBOAliihbM1nADMQA+OVuXkbujHZtx5KhB87ssrqqGYHr0mqpjwbr6QopybLjuYkcHdaATewkIViu2lruF2IpD17nvWKoiOASxyrs6ILulhroFsruGV7vWkAF6VRAYFxKVb3AFFLrSDwsoSHAVEbtJc5vlzbq6DLgcHWu/BJuDaLr0MLuWZQAIPBBCZIvzOqt+lzqJrru/9pNgH1S75FQAKBS8AFULXDKzwOkLrnCagB2rrvEANviqNzm67NKMHG2KHha6AfS7ruVbOqm2Yy7IjFS7QVjKKMmwzw0wFPS78emj7RF69z+7LEGsK047ghmrheW7FGoKshfBQOIMMtTAdFQgMooMBzO5V/trX0G5nAZsErnL9oZLTe24UabLPr0cE5SwFoW7+J6wZFwgGTgQI7AAJ4LJdIEJWaS8ba5gH1G79EuLVR27WAvLUt7LX1C7Ykq8MiDDRKQcdetgIwMIYdQKdAqrk0Oks4YL30m7gFcKMrfLphbLUgAKyAG6B622miHKBVrAZwWx/NhwIpgLCEd8j0CwL/D9u5V3sETazA2OvDhSvFNQsAJPCdiHrKbosGkjsgJVAB0EtvgMymDOzLuAwCBNyMJUy/j0yqUXvKpAimcEyKFOu3tnwGS3gcPZUfueS+C4zCk/m0hXwEDWDKfuyZrXzGniHGAdwa1muylvQFsmdDHMCMEuW+1AzGW6TBhUs7LnDNpDy/Y1ywzYrI+gvMiTAdpVFeo3JfCgy1KKy4gZzNqUy/MCyZPjzKwSvGn6yoppzNbSAH73IDNAADW3zCvcTHeXvSj+fOc0u9K+bOUeuI4DnBIzA1+fzKCSEglXHHDttL4ny7TlrUeZu4OLvC3bxiCgzOvBOmXO0WXgFrNpB3/w9wsrn4tHO7yyztyn9KyPcchf/so7i01iOAmIrgFZKMHDYQA9SDeWjtoSap09w8eA6ctxGt0/Pceod8tFzxGNZhHdCcBA6c0A1sAX2Mq/U80Yilwl8cvJnd0jSCReRhAzTAlsQxAnk8t3F8pH9dxQSw2D46Swqw1WaKWJadpECNDeOBJcOiBK92x6ocx4AbyFkN1/L8AKS4sXSrt4MXA4SM3EgBpfVR0OysA8dUyXg8n5irxaecPgcayCNAO9+twKtYY6ityuGNFJxU0KYdIFi0AiWQAzvQAaTYqn1Mpy5w21+8pSk9t9k829/81ks9IuV1kvWBTAWGuvJszHlx1f8YbX5bDQCOyNorDNPvkC3aoQPxZCPXEc0+kGhOjcfFLb7EPUtUXcSDV9R4LOEBPeCy3NtHABeUnMswLQKo3aFfrW0hzsgFlcsRTSieoeEvXgJaggTCAt8w8AI5AEJY7NRca182kAO5/LBR2AATUKVAbuQrKG8bwBpTtDfoWATwFxY7sAOjWigFaADyveTakQ9ZjgTDVB2ruUlXMiFhThtbE0rZVgQ9034J/uZOsIJeZtDPU+dykpbVYWjR3AOvQhfWCehToJbP3N6SHhpdHuMbPhcJ7ouv8ueQrioicukWItrV8Xx2eCgSaEdYUuSfThGXInv2YerAZuiGRhigs5Z9rQ4GzdxJss7pv0jncbLnud4F48HhSjk1GBfraXlHLT7sTEB018GWnlbqSbDbte7sAq01hC4eodHpwXIlFojtAv0hsl53H+PpzxMi5S7ue/LssNIVzc7ucPAYPSXvsyEY9p7v+r7v/N7v/v7vAB/wAj/wBF/wBn/wCJ8GQQAAIfkEBQAAPwAsCgAQAIAAcAAABv/An3BILBqPxItAqEE6n9CodEqtSh2KyK9p7Xq/4DCRIAhoAhmxes0O+3QCzTndrtvvRtqPdw6Y8UQbPyI+gIZdKmZnS4dCFQuQPx+NlEcrPyo1EgwOlSgZoJWiRiuXFwWUlzV9AaOuQiGFlZc8Mj+tr7miHDYniri6wYY3OgwSwshDwHUFFwRQXMnSdcvTdnTW2WvVuQhb2uDh4uPk5eZSCufkk+prFSLt7aXx8SUoNSfPrt6oUdzkN3rx0SDhwiFv9MDQWCUnAANAF479SyjlQ5wACAGVQKAhI0UrC9bYQuIjhAGGGhhlyxCNDQ4xLZHY+DGjBg8BBs01CQnFo67/SzMEfSS3IsSRN9kGtCsxRFaRgEPJuUBxosSlqNocSBhwQMWPq1WUfnEqRiwbs2AEKB0w4AQNeFEQyA0LBu0hLW28mRDQww5PJD4NLQlMaQCEv4Y82j2yWFSDNmSndXp1AKsbdSacxCCMDEJOQ41/PFZDIIKJygeHPEQywNsABv2QcLhx52/oIQhdGPmwtfXtvE4KNOB6wPDkYL9VHyEA4TTbglXwsmFuYoAJCBWOzDyhYgaU5GIyHxHBQcUBE9f1BSuQ4vyBE++OmB/QQkHsbJdO8KgRY81qKboVsQEKKqDwAwdwEaEAaiZQcJwUqKVyVYLCiEBDKWAZgcBaP3zG/0aEYViFIGBWsBVGCPPcIZ0oOhyBGBWuPQFeFS8awYhtKxLBISBanbbhjEJw9sNLYg1wjBj/EYGQkcehRoERISUwBQRfxGBBAqgdqUZ/uQhXWWVPGgGBlIaIYEMLCZiQwAhTjPYDmdksmACWKRxxAJx4hGADCi0cMIF6Q/lQwQkHdJUdEZEdYoMBKBxqyEuU0MAoCiUYVUSdQ7g5RDpt0EDbUGhhOJOdQoBYhKl4SICpnagKwWmrVcA6RIR9QbGqrA8U6gSeR/B6SIBfUPmEsFDcBwWZxv7wgBiyWhPmF82y8awRvlpm7bW2HrEsFZAiMUE7XyZAbBWaIrHttkaAmP/sRwksK2W3REhZrRBzzkvCEOiaiwRqCUw7K73+BjPnGvM+KMWqQ9Q58BPzTrGCDRlKe0QDGFBhARQeeFGuExUPaUVAKBgYH7bIbHDCDgmwMCIV8BCwcTkGP9FxF1YCAEACDax7BCo02JBDAhgk4EHDX3AKCNFP6Jwp0Bhg4OAUgqyAgrtvzoyElPkakbGUHVw9Z9bxIi02Eqh4AMATDwxMArxRSL0DAB1fzI4RXS9rNRJ3E5H3EKiQubfe3x4xM6B6O9EAmWBPAUMCZ2NLuBf3hjFTA/fGXMTfl5MchggiKK25OIlLwyU9llOCeS6nq4H0EEFTgvTFQsC+qysuRK7/7A+NQ4Eu2/RG8QDmx6UuRepNSyJGITGwCbcQuevefBGBCy88FNOPQgMHLNhste2Csx5GxqJUv8YlL4Dwg/jxeG7Iwyc8AMLzuSRqB/zrrwDDCxMoMDcU9IcBLLYV0IEO/iezKqBPF4HDg/yGUDpKuO9zQ3hcHQ4IwXMgjBwOSAH4rEDBChoBHiTAAAjEFzojdNAQ/bvDhcoHt8a9LAwpHEIMY/iDDVJvFvYT4ftkJw4emjCGFTthFUpggxLkoGkBOwINhWE+34kCKArgHT2aiIQmdk0UsfDgOBwQQi3qwgEjWKIX7VAIEgBghGO0ng1Y2LEEphEQpcjBGdH4xlT894AFO7BAAxpYxzaUogQE0Nno+riGEFCICAVQwMXEaIdtLVGIuiCABd43PQwwEgovORskw1ESFJwRd1Q44P6soMl46IADKNAhCGwYPioYzRwrMKIlPfBKIlgJMmm8BAxIIMEfuKADlITCC4ugj0t+pCiHHIIIKGa+GBIgY8tDAg7MGE0tJlMIFkolCLbpgUEOoQcjCKYTJPk+IbhxnJqrwCWyt8paEoGF2xxBzOBRvm0+wJt9nEkOchADndkABu4DQQd6uScWYGAHKVCfF1cwmyewbwcswKcQZjITStWKkESwQRafADGmtK2hGP0CMqewwJBK4aLgCAIAIfkEBQAAPwAsCgAQAIAAcQAABv/An3BILBqPwwJyyWw6n9CodEqtWq/YbHEh0Xq/YOxHEQmbz2ijQ5DRBDI/TZp4E30+87zzNgu4MwF6QjYcMwICDASCi0MhHCcBkZERCnorKDxuP2WMjCszERpuAoIrPzVugZ2dK5c1EgwOpT8qoqqrrD8XSoIVFaCqt7iCIqvFBAykw8tLcm9heBdNwk2KzFHWy9TX3GcL3WnZ4ERw41nb5ulWgOrl6u/w8fJGJT82N52y6XhnrT8cPealedbvEg8elQQqHCKiAiYNMjJ8m8NroZYNElJh8WGxUwEGgRDoIcBJy0SB+kTOcZBRWEVzKtXJWbIAgQwE6DquKicKiYj/EqhElTSHQ0jPOE78/FDabOlMMBVcIaghTp2ymEyUdTOFogKSEKZ0FhnArFWFYkUK6DDww1/HhFKGaqlnA8mCGjxqoGgrVqAJEwNqGKAx5UCVBj9eCjI8zAQPDlEOMJ5DlhnWKpUHSNDn5PISBQyQVGbi+YviIqXlnRySuq/r17Bjy1Y3+Zrh0U0Mc0Sy4uzsL62JjJZmBDIKA17zhGaCO4mCAwMQ1Ka5XO6TzHZ/RB8wgIFifCcOntjQROvYI8SFpFZJdrUQkmSnV7FOBUeDAbcl8CMyg8df+eo9sZwZPjxnwgEHwsVIVT8sAAFgJkDA2RApaEdWF1I0d8ZPLQwA/5gARXXzAQl/DaDCEQpA8AOA4ICFQgsHUDAhFn9hcVcLJxKmkxL+dHUEgyoaYZ4W+LRlSkBexKCdFhrSswIHRRLhAhK7LGGCEGQNSMSQR3DglhMKCrdEk1hqF0F6YrZX333bkcnElUggQJabXswpQXqMkYAEi1+4MEECkv0wwRwMnuECDiQksGICDZxmwWSnaaGDCglUCoGSshWQwgGVHhDmD5+mccILLaQQKRinhuFDBSpIpoIORezGRIVYBGSKASWQJxZniv4gAg0GoIBCCVEKoemKhtFKhLJa+DhFqETEAAGfGeZGRCsr1JXWE4EuoWICFjDRqxF+JnAgEtMaNv/CERDg98O6VAzKGKZGBOreEtQK8QCf1CpIQRVBehtbpVrAKw8GTgQMxgO/NfwDR/k6fATDVujZsLZeqAgpEgwrXAWLEefRg5d8hQHunkIoOuOUio5rRK+eGpECxRQv4fIQz6VcxQ0l5NDCCb6GYTERRd3MRAdNhOuErFMYDQUBI2AAwAMNILkIwij+gDUTW1/RtREYfB2FAg8AAAAGI8zYhA890LuK2GbUzCwUM2OQANpTQoHPDEjr2xfcQ4SNRIhLzEzwFBwY0MLZNTvh9ByDVvH4FIAzsYLiZ99deeA/TN754WqvW6nSRVR4uM1NKNo3EnYbwcvpUbRywg5ne9D/BAV2P1D5BK0vYQHCgOMOO+tIdAD86i+Le0VdKFDwb0eIMeE2Mzf04ADhEjcBQPace1GoQnlzL8X24JBvuxPRU7F5EefL0zg3+zWx/jAOpIC8EGjj8jzxXGOw/xHrm98TQvCDE9SMZk94H8d+oEAw4I5CTKNc+5b3gxeAYGrjo1jkjkA++XnwCrIK4BeylQMAXBAcqcKCwQQ4l0u84GxTAMETOuiE70lhg+CwQQkaMLd00FAsIkjhB9KHsB9SIX1M8IARxTcEAODQCEukwv/mAK08pHAJUWRiFVyARC3iIgaDyqIX0SCCG3CABTJk4TzEuIrE7eCC5LtfFtTINSfQ/9ESK8gBBk4IhSKycXxMYGPkYBhID0zPDCUwRQ5eMIEemuOPMxTCE9PQGx1gTyxTHIdX0BIbGcqwI34a4zAKEIMOfFKUjBBBDDxwwa0ZDJVnuEEFTmBCwUESlsu7xANAwEvbxe+RSVNHtmCguw4cEpdo+EQKwhcrZIKhBDTgJIommIZP/VJimmLlLauQRYpBcpvcUOUbzwbOJ9yRY9sr5zVoMINdmvCUP7rGObnRCj3y0phIsKEVmCk+G+TxBSP4np/gaUdnHuFJP7BaERwwAl5KjQkukCOKGPbQ7NVDCDeIIENK4E6/HaEAFNje5nDQUEIa9AdeYcE7H+DIH8Rgl1MPtcAxf4BGXgJgaM68HAswsIOWimAGe+TlA0JlRmLek5/INMUMYnAqyNgTA43izQpGxYKZ4pID0jxoAXOQgksWwZ9hOSkVWhHNJ/hGrFTA6jyCAAAh+QQFAAA/ACwKABQAgABwAAAG/8CfcEgsGouEo3LJPIZuF8IF16xar9jrIqL5ZbLgom0WiUh+ikV4zQ4XFpnut9u+rlBxTUD4rfv/RCI/NTIBGXuAVSsqGnqJj4A0g3oBARE/H5BHdwiUmp9hK3cBMhoSSaBHDBEZCEJ0qbFKKwYqNQIXgGdVIj0XarLBTSsVVFWIwsnCIYLKYcjO0dLT1NXWzn3X2tvY2WA+3OFDwEPQVish4uptoj8lG+vxWCs/KDU8Ag7y+0w6KDwaSjEowK+gEQaNAsCK58pgETg/EDRkQ9ChxTYTL7bZJSuXxosFGCj86NCFBA0SmRTQ8YMlyU8Lj4jgwEiDCQTkAoWwsS0mE/86Po8ErXOnxgAEA49IevnjwA8TkJw24UnrxIweRxbUaIFCSAmmViBoWsGhmREIJjTw6Aq22lIlA34MUPEDXDK7basgGDCAgTyo0sQCguoxL7e4wgpr9HvRheGLUh9LZnKDGSgHAl4CroLYCEEOP0CDUTy5qZXIS1CoUCE6VoM1eIk4FhaBNBYDLfiqsM1YyGtQGa8x6IzFGJEGfOX2NoJYXxjiSzIXwYH8KHRtAw7E5W36Ou0mBCBkd0oikyxUTBxQGH9AQcU2OYUp0H7ABAT0Q2I7G67dhADjDokwQ30mDNDAe36gtkYMCJhQIAlHQIiFhI8oSMQNP6igXQ34CeH/HBubheEACQccUMMPGMIFxl5CcKSEi1nQg8IJNphFhFQWMhHiGoKg0NUK8KiIRQpD5EhEXOYV4V0RotiQDhKCCXGJFUQKseQPu3jnQwii0FNBHQOM4FuJpgXDkxHzmWbBYx+QkMAQv6ViwBE+KNDCAQkkEKcV8VFjWwEN4JmABQoUgWAqgmh4wAgdlnQETSWe4JIRbwZzQAtfKSHmEVUmU+kSlYpQgQEozFDCk0aQ2Skkgr0wA6hMfKqErG0YicQQXTJhq2m7lqlEr0MkWUSvwDbhVJRL9FnFqsM+YGwVFCzhrBLIxpKnEq9hkEqvD+z5UQtDYIVFkJ94y9SoKMxZ/5o2gpBqQAU2BkPruhugYEECrlZYxbRNdHBEtEMwe0WxbRDQAQYYJDDCbHUk4NS8WHTwJsRCTIztEB78cOgP/P46RHlgzJcnBhM0WofJQ1DMLMNFUJyFyz/AXIUH107AMi8fZqGtECgLsXMbPx+BMKxtFPrDzjkzAU4FJ2TcBoBFBM2EsMpsrMTOVC9xQwUo7BCG1KmArYS/Qosty0o/nNDxH/phsoTZmqwpDQovDA2G07AafcSbZB/hrMvXArw3Exg8AHOeHuhthSQoUDAChUQf3UQCcE9s9sGHW3y15EYkAXcRcmeBIbnrVvF5NDKDAUAskMuTtB9tV2Fu6WHEsP8s7Sr1rM3rSqyuzs3UVLop6E3MXkTffRMxwulYYFjCBNomLITvTTCPBeUUy9pz4RobgbcVtrdhwwosAACA9UdQXwTvQmPBfOhDWM1E8mvQwwIIP6hfhe/6EyFwMOhLxgrUhr8w9K99zhgeGzDQuvoNcAIKhEQBCxLBSITABezzEBGcNUE2/O8aB8RdA3FHQmqMEBIBlIwDUkC/NeiuhErYAAW0FUIYpoIGM3gACOzWhEPVcAg/pJ0oUKBD83WQHyNsoTV4Ur4duu8RE+Dc/piwuiAqgx4wGEEKMmiQE16DBimyoTRiBz4xpgIHCrCAFYWxRouoJ4VmrIMPZAgAELT/MY51oEEJdmBHDNwRjw68HwjsCMhYrMAGdMOAB7xYSEDQYwYxkN82jmiRCtwgXkSgztqiAUc3kiB61vgZ8JjSAAzs0I/WON8VRimOEHBAkAZ8RCcLIgoYmNKOUWzkJ+iRgx3sgASsdIG//qhLIRhAFCUgANSG4IIR4I95zqyCA3JZQhpgkggkqCMql1CAFFjPm1IEpKhyMEhtLkEBOuThEXrgTELCL453eEEdPfBBEbRzeiRomwhoYMtBYuCDNkQkC1gQSZnQIAd1HOQI2IfFB+ygAcs0oyhac4QK2M+PNmPCEEsgrmKGcQk8gcEJWEkEslyzmEsoATFOSieUguGjBy7VhCTDEQQAIfkEBQAAPwAsCgAUAH8AcgAABv/An3BILBqPyKRy+QsRFoufg0mtWq/YbLW0QkUymZ9ASy5nFebs6pfRaALpuNz4YQQ0c2o3IAvA84BldXcBYXiBRms1hIiNViIKCBpgh45FNBwCEUJhlp5FIjQofoyfQz4iHxcEpq1CFYpuCAxTrra3QiszNREKOElRQ523lbhmNFR/xkTKy1c3zmnN0dTVRiLRw9aAK8jU2ttG4EtdKKzh6GRdPBoRwenwVCEG7G4SF/H5Swvskvr/SRxI+BEAAcCDSqZd8YGwocOHWmpB3CZjSbGJ+RaMO+IjBMYhHwDBuTikhwANCPwhKeAtnBsmCo+QTHKOiYoBA37kPFJAgQr/FUM2ODS401UFFDVwSpBIRAEEEwiA2qAG4V+BHyt0nUDhQglOBChCMGy06WOiNUsMIlCA7dMYs0M4tF0igCncu2ZMRPvlySCVoh/VmgJshfAVfFr84nWleLFjJCKgKTnwuJWPGzYM2JBcpatDz65E2FDBo8WMq44YaEGNpUG1EwdMmIBQk0rjTykNB3KdJSSRDwN1ktnJOsttM7qHl10CWkgB3pSZLK9c5J2ZGESCK8HeqniZ6XOuUj6gG3E8gQMOqLdy3FH6HxGaC3mbRLWxGAhyzrbOhC+TFHQwQcBTPxyAAHe3xHcGeQOYIIF8V+2UHBKAmWeFQCbgdAAaWPBn/wR9RUxIhG7YJAWVAt4JodcPKxY2hH1GTNhTbAPU8MNYRPg1AIgjCgFeEvkJwRsWHPygQgsocOYcgDtVdYWIVNyAQgtA0TDXEBDsdA+FgK0HYCM22LDGlT98QEICBUZnBYJlYJaLFp6hKQUFcqoJiFBY/dBSSSQckEACELBpS1Y/TJUGDg34CaigPwzpyAawJXAACXYNoZ0WcrrCQQ7qnYAnEa5lWoYJdhLRghAHOHpFqY6ImoQIFfyAAgolKEkEq4HgikSlf7niZFZr2HrrZAUmsZ6xuqKaLKpJVLWsEg5QUEWmsLRywJeBdPBJCUPMoIQF1G3bQgIvcAuRq3Mwiv+FCyP8mQAFn5IxQRH+NfJAPjFYgCagtXmCLhkcppPvnz9M0C8Wzw5xLxIDYpmGrglfB+4PaMqHhaQPYKBEAvfiqoCfFCPRwb5J1HkECQofkQJlaKpaRXQJjHBFAS4EbEWmFoes8xH/GtGzEH96gMS9Py+RggcES2uFDfMaoXEVviWBrdPhirCpxpkCMNHEvy2BIyAdGfACABgUHS4WT1fhUQ4YaO3I1BdXIXM4IuhQQg7aMuGyGWYDLfQRRCcBLppN8/zvB3QSfAU2G7iQM9VFz4tm2k4rfoTQCWCQN88//J0EBnPzjEHhRTy9uTNoLrwE5ViQfoTSD7l9tjGsV9P/9+yWRP1QAQTsvQzsV6B8Ba95VECCvmnXTkYKt6+78eqeIMM20PmwpnzpcVxfxQpiA0C29knc67kRgSfh+ifgY6Bx6FqswAIAIMi+BBpaq56E7Ow3or7gQoCfBwos8MDpqGC/1w0BAAXMgv9AZY1YEeBgRdDdAosAPNwRQQRfw4XW5GfBDuKlbUzgYAdd4DssqMuDR+iBAs73gwcIbw4TBIEZHiDDaNwgBDPwQPyskEEUXmEqL4jf/u7CQlyswAY5gN8PRKgEBPpQDT94n+aukMAjkI0JT2PiFTQ2wU/YoAQNSMHjiHCvLgKiikbYYAhNQaYrQFAIWnwiFQbojBri/+WN8UAjPHrCNTk64jIz2IEQ/YiIq9AAiUI0IyGrEKusoICGO1xGH81Ax2VkhW2gQ4Qd/biGGaSAeEMYHy70GA9uhaCNRHBBBRcZCAJMII6sNIMPCNABGSpSf44JwQmUaEZYNqJeB7HBI0FAzFvGkhw2gAEGQOABuBHBlYHQHXXWcAISnPAHtIykHJ5jQQ54JAkumIAt8xADoRlzMTeYAQ3dpkcCgEt+KSrACIpJSB0UKYjEfEAKeigFcf7AfyHIATGJuUoP2uAEOwBAM1P0A6utE36V/MENOICCsYGgA2PEnSNRcE0auA9+ILDANbFiABjAYKQW7AYqicC9F2BApBtMOOI3WbnSIkzFHIys6TGNsBl+7vSn1UNIEAAAIfkEBQAAPwAsCgAUAIAAcwAABv/An3BILBqPyKRSqSMoFMuodEqtWpcF6WoWCWR+kat4TC6TVyqNJhAwu9/wd022jtvfDkGxfS+uUBkaP3x9hVQXAoSGRjQ/CgISEouTSnmCGV+URD4FHxeaoEUMARoZbYqhqaEiNGlspQyqsql/gaUKWbO6mic8EQu7uhsikys/BgTBsysrjcUhyqoVQignMbnR2UoIUjR/NRo8UNrkZCIlPGo/meXtVgQZMgioug3uZDijQ20+927soT75MwJwYBJuBhMqXMiwoUMzHx62u+FM4g8Hqi5IioJDAQoUxizG+SRICYMBPxAmYYBgAA8UNm4oQ1jSTM0o/VQiEdFgAMr/JdzUtPhBTCGwWT5CGKgxwASEZAd/OJ0WbcCBgVRV1Bi3ZECDiA+vxhGLBJvIhjLPql3LdkjTVALbptIpt+4djHZ//IRT4sSMDVbiLhQMagYPqw1w3Osn0UUNE2QgyIKsKtYVvGTLML6yt1DnKGADV65CF4meJJ8/C1FdBOqSjW9YR5HNecyEH5lBudCW24xkSlDI4iVz+uikBb9Rxqhi1iSZn0+XpCgkgXCUAvYOHGCtGFQYIxSs9i4y/sdyIruLkFhyush3JBrFH5h+p3SV7NsFhFbV/ciA90MQAIEJ20FgnBA+cEWbaW7B5p99Cmh3gAkSDGcESukREcFP72XW/9xqZOigwgEJJCBBhkQsqMSB9kUhoAkmJLDeFZL4RN54m5FxgwEtHNCCAkUN4cIECZQHCgratVBCkGQ4QEECQhzAVR8HqEBUa0SSOIFrU0wphggcfPQDB0yO0QMJJSZgwXlDdGckFT4i8dsPJFhIBGVIQPnDbWKsYIOfZej5gw05HGDBCToU0Z2gZLxJxH5HQDoFo0ZwsASfQnCJhA86GCBmD0Y0oF0S9mSjoqNRXDXACEkwWpQNIeRIxKheDjFqErd+iNubo85YhGRGAvsDq1aceVUCFABmxAi5iXADqIXQJ0StCxFA5A8JbPnGA3mJIeAQ0fmmCqq6fCsEpnaRW/9IB+iFQiklsv7ArUTqWiAGcuCa4ei8skB1W5FX8WsEtw+8K4SvdB4hlsFC6Fmew0uoW0SEDVuxwQzsEsEtlJJaASW1DTNMhcjYMtzfEiVaMcMOAGCwiL1JuOxGxkTYSYbMVuQAALZG2ExFqUP4rES8N89yAwoJtFyIyyA7hDMVNJzQAcx90NwHyVU8DYcPGxCgaRRaF4FBwT9QkMTGZEBJcspSCM32ImMLjITLYROBgcgppOlyx3UPgaaeCBNRYt8d9G2I4dHqwibidhC7xANNDwF0t1cP0THlU0QkrUiTS4HiHVynwOoDO9/RAONHEC1L5EoQg4IHO2OAulyzj5H/lAEvtKy12VFgXUUCqBvugRCIr018GdPk/kPturD+hq5noMCy3EuUPgX1RwRfBvaW20EDBzOQsHn18v5g/RGkk0MCzrxnDwcx0Kci8+WY17/W+farxXxCLtCHfx//O0IAqzDAVThiAhgoIByYp0AhNFAZNCjBC0CwvPyp4g87oOADLWiHFbAAABQ0BAg2mJc/sMACE+gcBydRgQ044GRKIGEFZxiFAk5AaXCQoVpip8Cd6VAhjiMCushROu6RAwcpGN4KQxEDBC4RFDfgAAso6LIfPhFqHDBABltmxTgokS2JYsYUQRDChHRRF394wQ46oMKBXbEMxoiBC+J3j6/d6aNMRmDTGxeBxOFZz4r02+MPTjdCKlhtF0NsBzS2mEBB9sEGP9hiGZXArg1SoHQFhGFdVgADDIAAA0HMIyXO6A9mwCAHKRBaAWJgL1K+0QY0SAsSFOCBEaIuBl+sxG1cmRDV/aAfY2ykEghwyCSkgG7mu2IIVjBBMk7SCEOyZRRgQEYhWMCO9WPGCR5ARqoZgScgFOZOaCA9MmJgfBw0BgxeMAJssiIHzgRBLo3ADOntIAV0pBwKfuAnGkALCRgkI+SiYAxLOTJWUbABCljAAlxIoQJ4fGI+hwAoKvzTkVRAKEYLoYOJkiMIACH5BAUAAD8ALAoAEgB/AHYAAAb/wJ9wSCwaj8ikcslsIj/OqHRKrVqv2Kz2KPotGOCteEwe4pQi2qwWCGTK8Dj8tlK12/K8/kpXaTR4e4KDS2kzPHeEiotEIiFfAj+RjHsXRAiKPgUfDg6UehcCgJ+kex+iP29UmIwBpU04DAEaP65Sqq+5Rz4VNYCzGQpTtK+sU45xIT92f8FMxLpZFSgnDJ5kKz++ztGCNCg8gAJnZSgoC0y23Ui4Sr2jmAVlKyE+Uujr10LtSBsSgMbgdNmjTgmCgHkUIIC2Tk9BOQ0aSpxIsaLFixgzatzIsWMpAk4KEODwY6DHiR8YROBx4oe9KPJOLmFIRN6sH3+WyJDBY4aV/wgZggatkmEUzSPEjhoZpSTmkgsRfhxsgmDAgBM9SkVtImwIQiRbscTgMUAIAnxJMCHoKuUAnLISRXCoMcDEAAFOlUwq45ZIxJM+dKCo0UKAJZk/4EZLY+PHBsQUfYgweaQvExNwMIs57BGuYkKf93zVYywsZEGhLY4usoHA4ySpoZw2ojmKZSM6ThR2IYX3Rc6MHAioe1c2RuBHGGyRYIUAhMQDzkpZDVm5X1hFfFOnarBU6iiskDux/n12FXzbh0Q/gq+8+LZNym95nt48KRJkYiS2T4gcGbb8LRGBb4ygNYR1QuyFBAVU6JNHXylo0YB/iuQVhXzRsPKdflUo9v9Sh+xBMMABJpg2RlllcXjPDwccMMAIBAqBDoomqkcEfglcAeARCljgVgIUOPgDSK84l2MCEBCpRYty9JhAAgdMWMQCz5XiwgRPIqmkFS4wJ8QBOw6RoxU9/gBlhEX02CKQSYy5BIxTOEDCkwec8FoSWx7xwZxPWqBiEbdNIQyEHyIhJBMGViFCCTm0AENJWlSQA5Qo3BkFfrq4icSYcBZBwxAkFUHACFAi6QQHKMygA2RwjYAEhjdwkM0RBGDpYpJR3FDoEBOwKMSfRDB5RYuBBlvsEFX+4KoRzx0LX7JIWIiEs3E88Nd/EvX6wBDSBuitFNtqYdy3r1BISrhMUKv/BLBZoFuGBVaYK+YPaCoBbRHuUrHsD/AaweAQYfrKxLhbEECBBRY8kGOLGPwgpRFYCqEpERELbIS6EpvZphLXUnsvoFRsMELDRTSM6aZCeMBEB0rkWG8RE0sBRZZM7GvEk1LEsC3JJGtxshAED9FzEd0iMXQSLBNCwAsAHN2R0yUrAQAcPSjQgQdJk9tEzFFLUYAL7DIxdctOQC2F2VTE2HUcKjORArptG9GvFk9mfQTOV3A9Bgb5HjEBBk+ifSTaZuItd8NoA6534YtbQPIEaovh5r9Gb+tB2D+Q/MDLVRAuxNxWeI6F6EL0rXWc0ZBs80kiXbuOhZwPgjkTMziO/9GuF1XA9OiUxI2vLovuAELmQ5iexeJyRz4F4cgLQToS9uSAwdg/UL43wEYcanTZ8RKfhQgVnDDB6mQ8ILrxMvnQgwvaIzE1+kPY7cQE2vcsv9BiPJ8L9VW0f3oUw/vfafgnk6IJUA8FiAEJOgA/qR3wGD2aGv8IWBHrxU9QY/BBCHIAABBgQH9reyATwMfB4VGwCaRrmgg1+IMXfNB3IpQDMhrQgDw5YWqzowQI77cFyYjAgEY4IRJgKJYbDoECQKwI+QYhxCIQUSKgK4PrHuiAFPBQCP7DSBP14INRNeyEuIuhFbpQQhWKUQ50eAEImrbFM2IhBCuQHgg86IQnuv/RHT/IwQ46EKEw3jELNKABAZRnHhsOwgd+HIIDpjiFAGZRjCJZIkWS2I0Ieu+PY+iCGj34vF6RIWiQUYbwADA2T27hWiA8DQ1WAAMMzNEDjBxEAz1CEhi8YAQxKFoBYqcEQ4oxkDqQlxlI8EUyFIAEbURMIkuSAleycWU/CKASFLCzMzoiB3MUnQtGIE0l9ICbdBTjDWzQyjkC4Io/cAAFpvbBJdwABh1cIwWEqTUbGECPD6AAIeXiyukJgZdCuAGjPjiCR3qrAitYwQxiQM8f3OAHwssmQIWQhhWkylIxpIGulABHGOwAANaiZAhCQJkYUlIINrAoDHLphGVikggKq9KoS186Ro4EAQAh+QQFAAA/ACwKAAcAgACBAAAG/8CfcEgsGo/IpHJZWDqf0Kh0GsX9CNSsdsvtLn4CyTFQJCcJjmZ3zeYKfhmhpk2v2+9aK35PVfD/gF1vdINicT9zgYpOH19PEVIfPw4XP19hRImHQxEMi3iSVGpZOJVgn6hlqUSeShF+q1kXrUeHWJ+DSY6xbQsOvD9iP2ZFv8BJv5t4BcxdkEUyx1kZArtbDgoCuUMXoVG0QnGJ3tJJEtZK5EYOAgFmZnFi4FSbAQKmwDjzZvNK/T/eFgSIdiRROTrGjtyCQozILoEy3N2BdfAHvnVLvgjTxa2dQSkUKy4R8+7HszVkyM3SJmQjAiENRU7ZqAzQB0kfLj5BIEFBQv8jOEKu2ihFHJw6o5Zo4PkE3SdiL9UVoQlTCCSnbGrKLPLhTcN/UITWURdTpD4yGV4KSTqVo6JZRLQ+meXTTgEFGTSk/YEA7A+hZbcqISBBgz2dXRwUDhCnL1skaqnkFIJVS2QoBQRomDNH6jUJMjYHYPC4yOUpYp2geZJaSWbDcUbTuYsgtADPP4cJaT3kceCqRH4nqRRTLmVIp9sElcAgd6bnS/TIGZJ8DN8jzp0Y/zHvJJsCOEoj2TZ+SAC11VUlUes543iDc8QLBk7Eu3q3dNJ/kg5ZySCniKkmk3xKCDcFgURkdwSCLxk4nxO8IRQFeUIEKMVCSgTIn3/6PUj/xxwSKDhVduAhc5AP1/2hlhlSOYXhEPowJ+IyWXwESGVR1BZAA+0hseEa2w1B1BIOFvHiESh+1EASAWwmAwI4KiHXkDtlYOCL9hnRpAA/JmFjEQZl+VxtEBxphFibTWfQJiI2AUGKFToxwA8/5qLBm10U0MCcCMz5xJwMdFlfZAjod9mbCvT4w5sdtvQEnm0oZsIPfiIhJhSNDnGAEQIQgKATjmT6hDGVLsjAACaYUCYUFhpRaBd+8TUpKpDqxw4CESxQ2qactOECEUseUSoSvMKoBG9UJrZAqyaIygaFfpp5CitILCCtpkv8NGyeSkS27RM4SHupSbN62F8S/UBK/0e5TlAohbNssHsuZZ9mK8S3nGK2AAPXmvhDsUpI8Gu7ghrRLxXe/tBAl5DiexcEA0AQ5RGtDhEhEkc6J0HFQmDhiKJEvDSAswMTQQAEk5oQIleCALvOuGsdUbIRlQSrLhURHFztSwAXEawQt0UxMxIXC9EwFPgae8TP/i2hE9NF8NqqeD2bY0RXUGB1QNVK5LYqIJDOaNoafXJRatJT8OxEBENjiIBQflZWKVtfVHpkCkLoV69pcyYrMxW3oH1vETeb7W5Trh6xjVoCKFgu3kX4wfUQFBARgxFQC3G5FE4dPsTmSgw9hAtdboMvyEfguGkKu46Os+hFgL6IWoX/Rf/EBEcQxXoR4FAo+xBQqyOUc7W77rISgh/PeREbknBEsZUjES0VXCqB+xK/AyLd5P8e2yjuAAswAK8NPAavwEnMeSR5BRvxu1jzdOmn3xnWN8T4SKiRNOSUTmIEnkmbE9pgN7j+FSyAlJoA7ARYOMUM4IFHsABQhMC9zBlha5tyXuygMAIk8E8IQ1OABXhFpVtsjQ4dPKEWEqCEFGBQYY8BWNuKd4QJ9MuGRgLfonRWBJ0swAUdpKBYNIgE1H2wfEQowAdHtUEunCwBB4DixLIXOxyQIAEmSAAEsuc8Fh4BdVvBYYIokIAyKtAI19OcEYg4BAJQYGu7ayHLlIcEC0r/IXpG8GIai+BFJMQAAgeAgALk08cjFPIHLlDAAtq3GyosSYVFSEoCKCCiOXlGhWbi3g8KQAAFeAp5x6KTE9QASWJxAYPce6GgHuBHCnZBk1N4U7EYmQU8mmsINNSCJlmJyC4ssSISbGM5YtABu+SRCIqiABiJULQs8IqKTvilEYopBGpGwpZLYCEtL3gNXGLOCdYkQuX6uMzbYasIQCSCNHlpryN8cAQENMJdRiDLNXpGluz83w/y2U4i5NIJVrSD2D4nQQx4EXoLIgILUxPFHxyyjs8TwkOrycKJiq0Jm8LAHvNEAgw4VKLIhII6HqOgMkL0CRNV6BpSmr8GHJKf/8UIohAeAE11dsGjSWDpE3DqhAdIEwkuoIAHfhDMJbBRCIws6hZgSoVwqlEIPE3QD6IqBQfEoJlRCKdMx7KGkDj1Ew1gKub6KNahVtVIQ8CAUimXVmweZGhUPYJYNwlSKGQOFjqNJGrqykMpTCABGGBlXPkIVdshoaJ2NChRlaBTxTL2GB5lZzyZAAWdOmCjSODpi4b2O5JyQQ12FKMWvpoFsyaBiADY6hCKulYhTAAAbMCGEdg5yUDAYq5QO5gF53oErBpsBIKtK/C6MNkofKqvQoDtHhxAAQCAYLCqXYJYXQrOKACAtz9QLhr9qgUXWAAEAIiqF0X0UydgVqUeuP9bWo/AH+0WwbR/+EBzYTtY9kZBKr8srijnKMyP/uCoEvWoR4fmjfoKTagdcCt22GjgHywxulPA7hKi1+DCJoYAyJXCWms6BNIWobV6wIBHMavf8v5BhEVwb2YlvIah2dFkRqhchQEBWw8XAQMAsHFhdRzKW7Zhxsnt51m5wGJSYIG0HlWQiZXAYy4IZckd0O8UXJACGUcwCXvzX3ZnqgSPgiAJ2oUvEVSsBDKvgQAj8KiZR8BDyT5Bwb4S0BCKHAUHjAAEz53mEiAX2J4SwQPZc4E1zbyHJk+BAB74MpCRwMvWdvjLrtnyGpp7DOY6l9BJwCmdl6AzJeIU01nIMhT/HEACDxj6CkYAgaPH3AZDg9oIq14DDlwwUCG01gI15eeShQBh3w4BwkWAcyq0C9vzNtK6c5YZ7hZ93Qi9WhFDDS8R4LkGAC8Bti+eap1jkW0pdICHpzZThREt7VjgIAU6FjU0xbygoyKR02s8RlAxAF4igGDTFoOCgjlMhKiSgC3e1fYPRlBONjTg0osWQgpgmhorPPsHxpYqpJMgFF+zgQR4BsDDk70FKmYuN01I+BBqXQcCdADPHu02xZPA4gw7Iaq7xkMMRtABa+s5CtmjwDYtyDQAWDviqcBBGqgwcSQUdeODiTURlC6TyyF9CvyeQkCr+SAXlPrQXFD5E4oZ0vVYABG2T6fmA3D60zubEyORWwKtH0QC54pYr3dgdxK2+aA7F30JIZkxkMXi8q0oINHPBXoS7Nh1qvtYCgWY+QRSICKSL30ITwfI4QHavqCqWMKRn7yvRkDfIXhgkEjYqNyvIMHMaz5/KXCutr8MTRdMoOgPSI2e3H76NqSA3igH9iTMru0Gpx7PIIhy7blgZ7eTQEGzfy5Osy1oPAN6+MQlwQhSULACUCDjz7W5ySgwghiIGvo+ghDuMUCCbeKA7uCXdQosYIGFpV8wnHTB948RBAAh+QQFAAA/ACwKAAcAgACBAAAG/8CfcEgsGo/IpHLpWzqf0Kh0Gi38LtSsdsvtEn4MwTFTJCcvn2Z3zeYyfhFhoE2v2+9aK35PXfD/gF1vdINicT9zgYpOOF9PElI4Px8OP19hRImJQxIKi3iSVGpZBZVgn6hFGqlEnkoSfqxZDq5Hh1ifg0mOsm0EH70/Yj+rRsDBScCHf6NakKrIWREMvGtvtT8OoVHYiN4/29FJAtVK4U5mcWLdU5sZDKbBBd3F7En250mb4m3HR7hQzBQpxycWv2zJlnwZtsvIvigGDy4RU2zVszUIwClhaKaYxCwMMy7aFi+ggAX+jBSIyErAwyfL7DRTEiADQyUEWZHJRySkkP9ikHKuifkRir0nDFjWOeexqB45Q2b2dChE6J2SRZFkOPqDZdOsYJ28jGLKKhWBUKTy/DQWilInaJ68lYKAK5e2k6B1ZWJE5JGvfqFUCgynIaCbR/bhHfL0m2OxR1JCIdqqyEVZDZzo0qDJSVPCZtbi1DdkjlR+c7/+uFyEsBGzWRYrajxG9ZBBBLE+AcjvtBPXWnwbS7tkju2wbgNJVqKLiO4pvJM8p52EAVrkfAQsP6L9iA/qQ7azsoKWNZuOQvIRjC5kHmLksuvAjtI87Pskx5GwR7Kvvtb5tnBHhXFKRGceVeAhMQAUBxphQnJEVBShEBCEl0QTEXi0ynOt/UD/XXOUZdFchUksKIUEJAph4hEHGLGAaIW1OBFMdYhnRINPrLiEjkNcIBwUjsjYxTFCOhEiEhwacUCRWdgFAY+BLJMiX30RgeMUJfknxINLEJagEHMJU8SXUHxg1gBM4uHCD5kVweV+bBZxFAFwDgEcESmlycWPK+rpRAFw4ngldlBWVsSRXBSKRJta+ImHorv8+ISNRzDqBICRqfiEAHUS0QCZRHRKRYoPMgDeMo4OgWgSay4RJqvDFSFAkj1akh4ULZowZYFOSAbjE5b698GgkhpRySCrOiGBqE/sKkRzDfwaqhOvqirEAVw6kaqHXFiaFxGtXqulpgghUeyMReDg/61hRgwAaayqMmvEuUQsQyk/77bR4p1WRscbBCzJGIMTM5UT7hCutBiipEfmOy10UTCZ7BTrAmmEs0oK0YB4K7Iz8BIkEFHtECwdfARBFYtchFK0VkpEtmvApoCkLR8x6F6oyBjix0KESEErvi247lv1ncOzEMutilUKdDA9RTm0VezXfdcKYTKwZE48ch2gCsHvDzFgXO8PPB5gIgP0EhFYy1erBFERRwvhNLs7rmbE1R+IsaBrxXZz790Tl6uEn19PMcHdP0uhRwJJzJ2EBUMMzaBgcKeYOBKMt3H5FqnaJQTkrB4OxQhtD0F6EaWTNVDNKd+65xpbK+GC6D9YgP9pEn5klsCDt7uOXREjxGzEuq2CPsU5jh+RQtpHhKxE8FzELQWTDsRAQNfSO5H84CSI1uKvqcseQ/g/ZI7EwF2rkTntUjQgZPblV4H5E5sHw/4ezivxgET3U3GO8UfIXM2W4LledABc4ugdcYqwvyHAqHtTgF8XGggbACJMCmIzR/6csL+uGcGCVBhY/7Z3seb9oIEaSQL0gDcEEGLFHtsiIBEoMEAiHJAIDYzWEUTHuA0OoX9LoNQNFccoEHpIAUBs3t+SgEIfCmEmB5CgEixFQld1oRkrXIMPWpeCGp5ji+lKAga847j6YccHVUzG5jwwnwLCK357AID5lOABNxr/YYhTdJsS8KgFD6yhf7ABxhwVMUYkHK6BZizCIKEgLSccbQI15FoK/DgFSn5wCpI5GB+FkL8EOFEcDmjdGrI4hA1u75FPYB7YUGcHUkpBiidM4xL2V0gtZA6FKsQDAIrgxSI0AZdIAGYRPjCCWj7BZFgphyoJJjcknG4LSZyCET01BAwkcpMsbIP0zPeAT0ohBYuEmxDCKTdckm95RrDkE2DJqvoZ8weyfEIklVAsk5nlnUtZQiKToE4ipECYRoimETDQzyFQEgNADB4+nWmHBtrIjtUUgiuJMEYLXM1zHpymHXBAgoUqwQoFPUI+IEoE6pyjVYWsGC6TtEuSHgF0/wX8wLpG8JxuUGA75LRD/jxqQ3GUjo/zEagQNkkbV9bMpdrcpFAXsbSXIrAIIdulEOapBW+B4AdL/eETsnoEdv4uCgA9Ak99J4Ul0nEPBVgTEB+gwyMgVQhczUIM1Ok5SNohHgDF5hOFcNUlhKKQIR3CLqUq1hYiYaxFQCweKEA+IdRygN5kQ80OFtg9CNUVhD1rC3MT1zp0FgoapYJesZpZ7/xAsU/oKDI4qoUGovaYBFNAWK+Ih9Cy8gd9HapZctuFrL52qGiN5CY7YJV+unGfVEBuKaNBAWFOVAhePUJIHfBcJIDAA9ENBgitSVWXUSGeUTCrHWRJqcxOoLFYhf9C22ZrNdt+dSBIcC8Y/VnP4R2EtwCorBKi+0lM4bIBM3HAAaVKgUY27betKGj2rICB0h6BlNIDhoPFSYTstsFSE0aCfi+lPGayFwkG5gN4z8dP2NIBl28V3gREqdUoEIQEHiSh4zBQMVKi9yMZHsIQ+yreu422p+/9AoKloEAnsJgf3f3BjZEwYiccrsjYEV2DhXAUCmR2osuBpQN6LAsHL7PDRHAvY967hBwTwQdHM7MQPgzdfi75dw+orhKqeLvPkvkHcv6WFHacxzDeuQvv3DBu/8wPC0iQlGImNG1PlksiYJeMiu6FlaUw5EgnIXFstdH24mlnSx8hlO1Rgg8Xj/yDyHr6Drj04KlZkQJVr/oTb+ZHEAAAIfkEBQAAPwAsAAAAAAEAAQAABgPAXxAAIfkEBQAAPwAsAAAAAAEAAQAABgPAXxAAIfkEBQAAPwAsAAAAAAEAAQAABgPAXxAAIfkEBQAAPwAsAAAAAAEAAQAABgPAXxAAOw==",Ew="data:image/png;base64,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",Sw="data:image/png;base64,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",Iw="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJQAAACSCAYAAACjZePJAAAgAElEQVR4nO29aVdUWbbu/wQ9iIAiKIo9KjZg36Zmn1mVVXXO/b+43+J+ifN57hj3vrnnnKosMzVbTfteQATBFgQREemJ+I/fmmsbkZmxNoGCTRZzDBJTo9l7rWfN+cxnzrV2IpVK/bekRknjklJasAWbvSUkFUtqBVCPJK1YGMQFmwPryZM0vDCSCzZHNgygJhZGc8HmyCbyfPxbsAWbC0vkLQzjgs2lLQBqwebUChaGM95SSdNSUikpkUj/LFh2+5cF1OSUNDJhP2NT0nTS/0zb78lpaWxCmuLvPLAgCAUJqbhAKiqQCvjJk/L5SUgF+VJpoVRWJC0q/tdkp/8ygBqflJ6PScPj0sALqf+5/X42Io1OGnCSSQ+gVAa4vNSb6aEAEEDK83+O/h+QLSqSKsuk2sX2s7hUKi+Ryov/NTzbHxZQE1PS6ISBBeDceyI9eiY9HZGejUovxqXxKQMRwMjzbDICDXHu5d9F/8kIf9Fv+d/JVPr/872nqiyRqsqkZYulVVXSyiUGLOfFit/OuMy3/eEANTQqPXku3emXHj83r9TnvREAAiyF+QaWkkIPjKQBIpkBEnmQRJZIpetSEaAS/nXRZyY8IAHo1LTU81y6/9Q82OISqaZcqlokLSmT1iyVVlbZ/xf9gWbhD3ErhDM8zsOnUssjqfuJgWl0yoelhPcaRb9+H8CIwpvzSBkhLS9hiInClAOU91ypCHxJ+w3wpqaMY+VneDpAVuiVPnha1xNput/AXFEira6SGmqlhhXmyQiXee953k0t76akre/AtczaINQPB8wbPRiU7g5I/cN+Mv1SSaXSoAI4E550w3kgzouLPc8psgktLrT38u+JvDTIPJZeejOACLGf8OQdboY3fD4uvRgzAPHdgAqyzgcQXuXBBlcDhIS/VUuk+ippdbW0fpm0tDwNzPfMWt5LQDGBvUPSlXvSzYfmjaY952EiXEhL2ISPeZ4UAaiqVFq6SKpeJNVWSMvKpUUlGZlbXjpsJSIvlfHdmbyJ73REftrCKQCH5ANqwuyTYeNsQx5gGNcGaPl8SP+kBzifx/VtrJGa66WNtUbu3zNgvV+AGps0cn2rR2rtMa+Eh3ChpcB+MzmQcX6z+msW2w8hZbn/c6UPL6XFPrTNsXFNI2PmseBugP/JC+npsIF/YDR9fSUF3nN6qSI5bde6ebm0ZYW0vsau+T3JEN8PQOEFWPEXu6RL9+zPhAw8SpQtuaxt0kJbRalUv8T4CWFkaZmt/pKi+QHQTBZpXiQMj4ek231SV795Mv6ea8ZLFuWbpyMzJawC+k210oH15rHeg8zw3QfU0xdSR6906a55pReTtrLL/eAOT9iEwYVqfHq+bpm0ptpC2rsWMghtw2MmYXT3G/+LPBieCj4HsAAVvIzX41l3rZF21tsCeYfD4LsLKAays086fVtqeSgNjplHIv12k+I9EuACQE310tpqA1XZPIWyuTY4FEB6OGj32NJjIZJLx2Mha0SEH4Ue4n5wg7RrnY3DO2jvJqDIktp7pBO3pPZeA0dlqfEkVi6DDHnGG+1YKW1bJdVV+WxqngziLS9azjVWCW/PR6WOx+aJWUiAiCwTT8y9PhuzcSF8718nHdgg1Ve/c9Wddw9QyACnOqSr9y1LwtvwA9Fl0BnADTXS9pVGXFGf51MYHBqRbj+W+oakvHzzGhBpwlJRoWWH/B0aV5mXHV7V4Ip4KPhV5LEGR+3z+eyUF27RxOCHxzZL2+qk4qJX/845tpZ3RtgkjN3ulU62SFce2KqtLjevA+cgw0MMxCMdbjAgFc/26lNGesc8P4HcD48a11q77PdgAMA/tks/3TbyXOJlBa4JHgOouAYmuyKjzFK92EKSy+IKc/ecyB68f8kiWzQblkm/3DFB9HnKvBWSB9d+s8fqkf2bpP0bTHF/F+ydABR1t6v3pBMtNnisOAYPksqgFedL2+ukfeukzSss7Z+NAQa8Xe8z+zzCB2SfFJ4Vjxb10WZpz7pfgwpZ4od2qXfYQg1KOen92HS6fkean4qU8TzzpkwuEx9pXnWVtjj4//wcwAVYETcPbLSwdrFbuvnIrsd1MpSYV+4bkb6+KQ2MmLeilPO2Y+BbBxS84EyndKLV0mjAwqSMepGwqsQ8EquQbCfX0gSch5X8+JnU2msZFQAa8S0pGJMCQK4/MIDULTGCH1nUxpL3mzKL/LxFnQZRAsCvkSlpaMC+Dw7EYgCMcLyGGmldjXmgshzCFJwRz4nXIsSx4JAcCP9IIyQggyPSd7fsOr9qMu/4Nu2tAmrwhfTzLen7W5b+L/MhbnDY+ERjrXRwo7Sj3lpAcjGAiCdCAKUwe/eJFWkBGJwHzYeJTvmbn0h5sCR/vysRz3Jkg3Sh2xIB+RbXlDK6C7ya/rIOmPH5gI3XPBqSHjyV2h6ZPrZ6qQGFP+OJZjI0NMaAxXa6Q7p8V3r63EBFyejBiHT9vrR37b8woAg93900WWAqZb1DGAOFKyA1/nSr6S65eCW0KPSca/ellgcmII754jCeqLTAJjzpAZSall5M22rfuEw62iCtqPz1Zy4pt2tA06KDISq74OHgYaPj5vFeTFh5ZWTcPEXCZ4N5HlRFeVKywK6RrJUfOJcrs6yWNtRKFTOEca6d6wBUdRXSj63Svad+bKZ9HfIdIDBvJcuDz5y4If3cbrxk2SKbCDIcuNOBddKRxt9PcDbjfT2DJjPQaYBQODHpC7y+2s9kjPnOTIg0dTwINBPA6t9UJ21dGa9E836HJ8+dJn0dju8aoefK1+8I04CMsgsgpFgMqCDodHhGRWHey59rFkmNddI2dLSa3PQlgIm3+6HNvDHXfWij0YK3rKa/edmAgT9+TTrdaasLPjE+YXUu3P8nW6V9G8ydz2Twhyvd0uVuI6xkcHgjV2Lxtb8ICHiE2koTP6mPQZxL/Gtz+a5cDA/Fd3Id8DfXCdFngO/3/VjUG8u8tuQyTn99EHZAvX+9hcNcyDvtOtAGapIsvt+257wFe7OAYsC/uSF9e0NK5VmYG/VggnB/2STtXW9cJ85Y3fefSGc7pUtd0tC4DWbUT0QIwnPggQASXGXTCql+qVRT8eZWcaQrkRhQPuros8SD63PdBSUZZRavsa2rtuyuec3ss9l3wN4coAATcf/kTWk8aen0mM/kyID+3CztXjczX+L1gOh8p5FuONLiMvtNgRiAAqQ1y6QtdZZKQ66XVbzd0cYLU2KB5wEuOibwLgnfzckiYowAFv9PKYkQtq52fisAc2xvBlC49tNt0t+vGIgIPfymV4jyyV92STvXz/w5hLWfW6ULnSY3VPgugjHfsQlXqi2Xtq+Wdqyx8PYubmUFSO2PpCuUWR7bWBT6zgm8FD3vABBO9WGj1Lx29uGMMPp4UOp+LBUWSuuXG2+cZ5t/QKHlXLsn/ecF04Hoq4aMQliJ+4Bpz4Z4QY4i8K1H0k9tRkZJzRmcpC+N8B0rqqStq4yHrK9Nd2y+y0Y5p+2h1PbAqgSQe+SRssI0sceT72+w2l1NDklKZA8GpBPXpctdxiv5jA+3mqY1jzb/pRfI6bW7Us8z8yhkdWR53NgXzdKu9TOD6VyHdPKGfUalFwXxepRGANf2VdIHjdLmulcPD4Cc7Invw+NFnZTR9qpURkdoQca2qRJfv8vze/NmY/A5frasNK97rtPkFNeOU2KfSzfCP6+aNvflLhMzZzKu9fpd+7zJlImtSDRc85fNds3zZfO/jlOWcZEqP2MfXMJ6lz7aJu3dGM+Z8D5wpR9ajNySBTKJAAnSTQ1uz3oj8rNZvfKpN3wF/YgfPpMyDOGIv49A5booUxm96fm+MEy25ut3FV7dJ1skW+P/CVG5dlkCqs+apFVLpTO3TQKBDgAqJA6u7/wdkz0+3W4eOHbI/fUWeKWezyG7vnjHaqC7189fT9W8AwoXDqfp7JE6e40/wQv2b7QbDtmLUenkdeNMCJ9oVUzQ0LCp3g11BsrGVbl7JYCBGDkwJHX1WUpP2IF/Oe80ZZ+dytiTF5VWUn7nS7RBIdr5UuCLxIRYkgFkELLJdXRCLPUNczmMMnJC0xqr3Z1tl35uk54O+W1XJRb+LlGkHpH+tt9KOCHAcu2Ef3jarYdSmS//DCAmX7fskZ0289FW/GZI+aR0857U+cgGuWmdVB6j/eAtfmqRvrshTU7aJHHzeA88BF7p2DZpZXVu30/xGWkCXgFJvdNrSjrXBSAAw68a8hJeTQ8dEJn49esT3itM+Z0w/JlJq18mbVgura01D5prUxze92Kn9P11u05CFB6PPnW4FZ/5593S5lXxn3P+tvRf50yvg2LA0RhbIsNf9ppnnGN7c7LBtN8d4s4CiPEoDNrxK+aZ8ASEFCaI7gAmBGJ5cItJBTMZeOh7Jl3rllruGQcb841reA04z8tdwBk7WpKpNG+KtqArs9RH6JOv3+WldxZngmzSl3VQ6uF9pP8sBDxXSQ49U3x/R4+NResDu3d0K7wpVICs7X8ektbEhD+A+T263zUbf0CO7MJ1AigW5Rx3tr65fqj8vJnjNp7kYod0qs0mJCqcAiZES3jGoS25NZTx/lsPpJ9apdsPrd2W90UbFQBC0m9/chse8k1xLvaNcyXFRv6jBZDwQGNi8GwjvkdrwhP5cb+xoNBvxyL88Wcnbg4bsAn7yBlktXCZgpjRJ2xtWpne0tX+0P4e3sb3dD2W/nFJ+tu+sKfmPvBGlITOtZs8ATCf+P+vW2qJzFzaO5NcEyrO3ZK+vWqTBHfAOxDmcM2fNkl7NubGR5j0m3elv1+0rgOXihdZxyWhbNQDgfoanI62FX6qytO7YwgxBfm/3ugZta64bU+T/vSWceN7cDFKIb2DXrCUAbTIb+/CO5OpEcpvPzJgkeGuWBJ/LxtX2LWcvCZd6PAKe6ld0837Brz/cSCclCxdLB1okB4+sbGgL4vk4W6/dLrVZIm5FH3nHFBRRjTbLKKr10g4ksJS3/cEiQQMn+wwHSWX+pZ88//dPqm7zzwFqxLA4u6jcwZYmXgAFHVCEkAq+C2XysGiRjsUesRWirUdD82DuO3wI367V5H9xqvdH5AeDUj3+qSPdkgNK8PfC3BWVUufNluWd73bxobrBaRXu9MLLkQDCI+HNpmnHPaCcMG4eXCK0tUVc9eXl/8f//Ef/4vMdS4+jJUHkbxxz0LOkvLcMjAG9+vL1ktNnGfgh14YmD7fZStsVkKlJ/CA6qkvyjJhkGS83JEt0u6NlikymHgAF9ZeYVSjkMQ1c721VfY9a2rM6+HthkcsKeC1Zb7bkjDbMyTd7zePByjivC/ZIjIJHIr3sDAAKTyNIjS8jBBWmGW83SaPRfZeEhOyVe4Zgo5xnYvnpkDeP2eA6n1qoDjVavIAnIGwxUDFaU1MPGGOrKa8zCZgyBdKv9wpHW6cuVj8W2MAWYVwJngDBeK9DdLRbVbGINOE4M6HFuNOgC+0xYSutHqZiZGAZsC3HLM4Fvuw1e/358HBZipcc08kKS60PvP97MXmeeFFq2vCSngkwOK18VSL/HY0hFT4KQsg1wgQY3MDKCbtTJv0S7s/CyBlwhyrAncbWnm47IteBc/zoWjEdwoc2ix9uCO+hpXyn5ENGAweRWcmdCu1vXVWnsm2gufL8nyPOTyJsMV4EHrd0UKTab5GqITTPB+xRKQyZsMBHpzQBlfD+3KfLDj+TFTg4I1FAXmC74Pz8V2EaQfGUfPggL9q8WuHvtcHFChH2yE95aZqPcEj1G1bLa1fEQ573Njxy2nexGAzuE2rpS932yoPGa+9cseIJV6O1/521wqeYKnfhfI2uxnxRHgkREvCkmsLfmpiJZPKQoJb0a5MqOd6qwL3zmdBoglxiJYkGNHpeIRCZArAm82rMw+ESfqziCBFnjNyHUv84n9NGaH/tYeZVUFKiwtGrEQ7gh9sWGEqdmifGpzilzYbxEqf0UVbmvBMcaUUVhmi3Q837P24ebwa+tTr9jpFZ00hC8BPXupRGafbMWluH16x73XPcRIAOJOGl2ECz3eYcElIhssxJlfv2nd9tSesMeGRCd0sSPQ6rhfvA+GmvLJmua+RZjG8JTyS+WIcuX4cwW0vaeQqFofstQEFL0B5nkxKFUXpfh5KK6sCO1txtwiNeBhXYC2wOh/brSHMiH8hm/Rh8p+XzF0DYlbb+XZLseOEvpAxsNzHkyFLECjIunrhVDprjQROVnCBD2UsBDomkB6WVOS+QQCvSXa3vEo6cc3GD+BGHvn6PfuOv+wzj5bN4IfHthoHo2OhwG+94h6udln2ujTL9cCTyG6vdUkt901GwXvf67dkquY1acFrAQqiSTkFQl6C6kwn4qS01qfkoVDHILR0Sy9e2KBOjlmjPSWZvTE1PvjSjS7px2vSs+dpLzb+woTJ2ZBsrh2PwLVwD3cfm0703HOKlOdAmWduZvaUR8VXt8lzkWV3ZI0soiWLTSuKMzx3s98H+O1lqf2BlJiWqkulAeSATmtj+cuBMKfiOwFV31MLlSRB1O1u35Nu1EiHGrNnx2zrp4O165E0PmZeClLfdk/avsaSlle11wIUO1Ta7lrBErFsdFQqzrNqeGjbE6BouSvd7bE9dwwi71++RDq23TK9kN3pkU5elh4/scypMGXeiVbiA5tz7zjgPQzenUfWhNY/lD54wx0VXZgGTfJlXcbem8jL2C7FSXST0iNO0OuTOu7bNaykW3SNL7PEJBW8v7HeFkNBysYynx3TZVLfpHS53bzOx7vC1GHTKuOcP10zzYvzO1kkF9uMaG9Y+fv3ALItq6RWGvweSgm21CekvidSV4953FdtA3plQOGi+XJWdp4XMiHK9TU2kCHdCK7TO+D3lfkKOHNFJhYXrkiNf7lpqwoOwuQ/8anzoa1S84aZ5QUIP6A83ya137fslJBb5M8rSPkaXjKZPnfTWWYtbzpdu8v34HKbNhMWIjsemR7Xdl/a3SDt3CAtq4onuxvqpC/32WJDFMUzEj77BqUzqNm06WzK7oEZ592bpNsPbC4IadwXyji97OtXZqcdhLbG1dLDfml0zLaZIc7y/2Pr4hd2nL0yoPjyu71GXiGotIWwsjetlpbHuEzaUQkLFT71ZUK3rZd2bgrrVXgPwESYdGS4xMJTfoF0eJt0cGs4VY6MAb5wy0oyhAgGnvQ74UHDYqCzwanQpVKlPyqxNDqbIM8XuKdsAgY9z2LyeI87m5M2llIDxuOn0smLUnePtGeLTV5cwrC+Tvp8nzT+i3TvsSUapPGEop+uS8sqLWPOZqsIb9tskSJyAqAtteb1QzgGiBtXGoVgHikTQVce9JsHX1T2ahLCKwPq+QsLF+5DCqSRFwYkXHBJzMAx6Ds2mLegv4ebPrJDqovJLlq6pLM3rc+alTXqs7C9W6TD28MptjJ43veXLdQmvOjJgEb1ODwT4MJDkgXVLTOv4rY7ZdTzUql0HW/Q3z8ruueJeVoOQwNYDojFVuNjwpy32Grgj9OYGlZJR5ukf/xin19dadkbAGMxoMBn8/x4rt2bLdu70mFk/Mh2EzrjjPDM4r7fZ5k5n4NXJPIA0lc51eaVAEVIeOQHUX7SWPGEOrKSmZDNoH7QJG1h1Zb6vpzAm2jVAHhoVajE1OlIj1nRTFB1TGEzIvHfXbJaIXwGPQhehIfDIa5Yamk2SvFKLz7iAWfafQNPAgDDL2xFMymEHOpzjAuAImzgkfEcP16xRXB0h1QbKAjDyxBgaSL8/ooJnVwv3hPvjIci9GUrEQF+QAQnKy2xMDlTkkKoZyGX+rMkSAIAJWPVtMG84mztlQA16utJTCwrZtyvTCanNEcdiFW8aIYH0+IRrnUa7+Hzi0usi5HB+nBndsIZGWC61CF9e948SMVi+84R3+oLD4PfbF9vg0qYm62oxwpeWmk/8CB3fOND6VybgYtsEYDWLJEGn0s/Xzev9dnesN4DMPZulnoGzCtx34sXpd8PkENSAhJKXOPibw3A4fXwVHC/ghIbAzwqntcVjWc5Jq9UzSLdZkUm/cGp8Ap3ZPPi+G1LqVRMF2QWwwteajfO4tTkMWPGrOLNq8M3i8e82iEdP2ufAQCpV7HyUaQ310tfHZS+2GefE+3rex3DE5HG79si/e2QdGSb9c4PDknTU6ZT8R14W7wVXi1kyA57N9kCRdcr9OcjkEnicWfzpPHkDC+GQhBZSG5IKvDMfCcOY/QVnvU6a0AxWaTJEFuX3RGtkqYnwT9CE4P7vtFtE/30+czfA1ivdUgPH9vNInqiW9Gv3bw+nuB23pdOsm1rwMIpZQo3sZOmEjPhBxpfPZOJMzgi3urP+6Uv91r98NmQaW3uWgospf/pivQs5mnPG1YZqGj4w6u6pCMptd81Lz2TMU8kBJfapPuPwwuZsAfXwmOjSbn5nDaODFecrc0aULTQ4o75cuIlmREkfHWtZUbZDMSTpf3fk9L/+U764bKl/HGGcNnpOy1Jy/leYnzTepMmQobnhH+wmqNdMkwo7v3ANgs3XOt8n/sNDyNpwAsSVvCOk+OmE+Gxzt808XJiKvv7CXU7fMswnrnAH+jfyzntd+M9DwT7Zpf0X6ek/31S+vsZqbs3+2vd5tgqAzsdrACKnxcj6SOMZmOvBChWSMI/H47MyynFMccdM7kXWmylkE5fbDVRMWTuBOCH5gUL/DE8fE/Damn7Bgsv2Qx+cq5Faus2TuSq6c9td8pBwLTPsrdcjMFFfaYKwHWTWnMfLISxidxCN9cOR/vioLR6uWlpAIjsze03bDEvEjLCUUO9b8ybsKSC9+G547wUY3zqmnSj07jXzTvmqV6MZn89joDvisba7Z0ckvoHcxurX93zbN/gOhNH04+tIDS5in6AwOE2Hzy2kIdYh3aU8sQ++B1jJgzyGjeIfqs2GldNIENixXY8kG502IDAi5AmKFaTUh9tjk/Z5cMsIGKb1UMf1skyJ31NL9/3ncPJ6r20wJ/jBFXes3Wtvf/vp2ySqqukinLpUZ905rrJHjVZgM57KWOtWCbd6zHyT+iH8HOvvC9bDxPehXDKdS2vsP9HEEYSyFYS4nXwX7yiq1l6WYhItKl+dofCzhpQAGN0PE2wWT1oSaHJYlJZMaCI0Ehxl3AQykb4TMIWLtod1lVoKT7ZDTpXKFQRCs63GCCW+O4DrnXzGtN2lszQN837bt2z8gkDjyca94/4iHa2JP1gA268MouovtYGvT6mOgDRbVxjPO74eX900WJpfNzC11rODd2eHZhkdACS+3NPisj3onKP1LRRKs0CKHddNcZVCZNFRQYwPCx//9vNEU6bW2TAee7bpMmS8YJEpNkAalYhL2q0ByR4AVY/mgerK/Sl3Air0lXq883lQ4ZDvU4M2u370tBzG7yUr/CjOy0PhCtuGrdOys7gMbFRsxrke2UM5wLA93ql42eMc5xrNbUYL8oC4P7wkoWF6f9nkriv1m7pxAXp/52SLrRZ10LIuCYU8+aN5gmd7lNqv6krPg0QdMYVeYQxRsdiDAEECnrIy1dVSOvqLOQzniwIfpOkZLtG5gZSXu5V/qgozj3ONtObFaC4KFDL6k/4x4VlnhryW+PfuQnXTx0VVfOMBC4NeAzCHal+wm/7ZhCpopM5hSr4gJxaFi00TqH2JHbXZmnL2rBXc4XqLum/T0tnWrw8UWafkVD6MbHIIu5xsf4n6QFSXm5Ag18dPyd9f8nCZci4/v2NJlCOeNoAYAivhKSpAEEntK5Z4TsgfPvMwDMbp+iRaZnGawAg9zLuM7WEP+4olASU+y31mY/CZVHSVjQbmxWgJiYstjKiVMdT/kS2iMz91ggZT55aRojEQNpeVmCi3uJAiOQmCD9oL3hz0m1Cau3S7Gp60ssY/QPW6cD3jI8aAHdtMY+SzQhfrZ3S1z9LbV2WSeLR+F6yMTIrlGuyn7XLre5FOzFdFNwH95Tyh1rADZ8PSyfPST9cNPU8ZIRIQhgOfcIXZem2aLtjCyObIRk40bjAxp76I2MErwoBBKLN/XCNFLS5F+YvBFq8JVQBvQsZiK4HZBqAOz2dO0ZmxaHcBsdRmzSHxGm7ydBOWEKR01qm/fPhOLy+0rxTNgAyycT90Re+aDstleRbja0iECLxRl0PrHUGDjIxbgXdxrUGxJDd77HJv/vIyC6TBpjxvqzuVbVGhqnrlZamn28HtyLJAMRoZENDFio4wZh/u9RiK/1gc/aCtSPaKwwgZI8lSBsJux5HvLNs6sjzzXO0+rKDhrDHpNNuMj6RvUWGa6r2AMnzXaeMEV44m0HI4XXoZGS4fD5gRe5gTLJxtWw2K0CN+k2NL7ddp4xgh7wAN4sGledfPz5tbj8kKHLh/U+9d8gzjsbAMLGhviJef7/XAE4oABR1HgihXRyk0qevWpiBrDPxyAuEOPqY9m6VVtZaxf23RBnyTSrPQkGeOHvNgARvAcBkhj9fNg+8pzH7NXA/DWutJETYJXwO+0wMaSSb9+bv8CB4jEUF5o2hH3jGbPofobTC99lHz6nBc7Jg16Z+L0Az3nwO4/zce1gW+IhfZKE5/q3NKuQ5sSuD1LldHaVScUC1dlu1J3w5JmHfFulD2QyR1LlYf/63O1u8OHwz/DupNwObn58OiSuqw1kdg3Pjtmk08B/A/czvGGneLH15RNq+SVpSGZYDABqAO7JTOrbHdCUmAUGRzwOw12/b72wGR1u30jzjy9OFE/b6kYAH4XOrfbHWKTb59p0kPNlETgBCEpFX4A//8A6B7wiFSbcVv8j3gnkb84+Py9VyBhTu/oU/lykCN8Jm9HjVbAZAotXhWmbzbaUFATKV4dJ9/1FxzLNSeC2rPEoSAAUDT4ZTEeBoeJPWOwZ0KvmEAN6/dYP06X7zHrkag793m/TxPgsXjvsVmlclHHY9/PXkZBphFSkk6Z9hDHdDRpgIZFVM9rIl9p2RqHh0pf8AACAASURBVAoFeTIULpGwIAry0k9wj+ZwMvB6dyRR9PlRR+r0zPXATMsZUHwwCI9IXQQQvE2oqX1yKgNQXlnHQ4WUblYnN+zOZPIDUVYS9hSAARee8uouk0FYcKp9lmtiYOgWpY+p2HdZ8p0Q5Q+abcJma3wO5L9ps30ek1zkN2vcvmshKZuRgS2vtvcn/OEdLBCIeTYVnsQHQZSIEHWT4skJ8SGAEL6KfDuz/HgSYaYDHod54Xoym1WTsyzo5+6hkmnFOHo0BRfgCGsAUC7djlaobxN2x+hk+VYuGhcOaKMImfDhJaRx4Y5HPd9K+Oex4JnKAvICg0mI5D0A1nGDYqlpk7T6NU4hIeRvXmdEe8wfHktFADkA2STbfBT6thQmPeEFU8D9ZDAcYhZ5Tcw9q8aHCe5lKpCFASbA7c668n+Xuch/d035Gb3r/poiD5qr5Qwod6DWlD3Sguwr5c8+Kgkc/ZeMXu/TVpe6eteerSMh5U+Xm5qwDINBINUtLwk36Ls0eNKyGPnCJis/1DEKB+wbsGyT60ceoHxRP8Mhr0zas+HwRGA0zZG95Xk5BdJMUfphX9iDFPuQFI0PrxseCYcwrpEMllZdlzlPm/QQSutdv3yeXU+ez9wY39Dr3RPlfVYo/5Ocmp2HyjnLcwIf8X0q44jAZBiRIJsJn56wdgi3CjPaabO93pU6Jg1MTEyh3y4dytZ+BdikDR4pe0jGABgjw6ah5fn+cHbrlAU4Hd71wSPp2i3zHmtXSds2SuVZ+BncjS6G1mLvZeF0HJ09aN+bLWy7PvSETZobEw+QkFbEAkNikO9bYoGyKEIAcQV8pTdWMF9cUzYxNHq9a5/38+qi0bTNR66WO6D8xfAFbLtRKv7YwGQUIjMvJgCm6PPH/eBEkkQiL72zJJtNeuU64cMwK7ikOHyQF2kzWkxeXjqxKC8Ld5kSfr79RbruT9Nr7bDvaG7MHrYrOeyizEsr/t/5vvGAxynwz6OJDoR1D4icsPvKannpHV3RwuSzp2IAkvBnTUQ3HKn9oddL6RDM7+npMAADl5ibRaWWCR+D3e+YdNKFvGmbiMzNkqF4nPKv5+ITifTgBV+vjJvN8yfSxZDIKKQC8qgM9PKpUYFRwLv09FlWikZDyHz02HeOZjFXr4yyKv/5kzETksrc7+e9/nQy3oOkEhlzMJE+0zP0+cnkr6/n5RaxLBZde8Sz2Iof9/nZLGcPxSquWWordMjX5urrbFUGLfX759DFITgi4tEyTKTS25yyj9ivf+dFn5/FoyWiVe1df+Qto0nK9tEu8ci3pCAvLz3ZMWe5ps/jjK4pEd60EbUAZS60RMzrCf/U9aJeLd6DlhXS9RJZPi8vEe6qxbujv+X54neerzWGsvJsljOg+OAdW0wYu9pqGcqB5nAln9SUjIcJyMtLn2oX1zuU2XPuZIkC8w7Zwksi4yc68jk/24m+Wd6U8r9fPpUzAMCEX7Wu70sZnx83UKn0r+jzQyE72jCaSqQXUH7MhJO9Ik/09pnORX3z0C5T6UMWfVR04AdgyQvMOuF301r77Fud9rm7t5tckavNqvSCTvPJIWnHZvNYIb1Hnq+QUXFHAAP3TApbGkjpCZ8Q32QqreyyMpANsoWkyHVH3juZsI2mxcXhrHPah2BFnQ/5XsbIcg8RuCMVO+EPb+WaQjLJtE+x8/LSB8PmxYTUKGT/9vVBACZM3vj3z6064A7oqAp/fjKVHs/IG8d5TGxFjfTlB9L+JgPwsqWz25836wa7ysX2E2euSe6RZUiukOyzEVL6UJcBZHTwmZF+XLoru5SHCTP/Dqeh6k+WJH/eQEizYrLhPlPea0Yeyj02NgAQB9opn4X5KnwIgL99vfNqMxyj7dpjJtOfz+/8RPxJcoAH6lGTy4EWqYyWG3/qsetWiHmL2wa/xH5exeblGK7H/dLVFunZMwPQxKiluPRVhy4UwszrnQY1ZekzLSWhOiEAfE5daiTt1/NS4TINHjACYESAC4sMgCEP5XQuADuZPiCjMD8ckuh0GPevT+WlARU6TYZ/dzLJlFMCXr4+1wd1z2SpDIBP+Se45yXm7vOz2Zx/NF7gGkcnd9vq5wbQYXCd61eHORQhcnjY8xkfbqoqwyIlgHKP6ZhKk3/AFFrdk/5scYTQ6PXuEbGBPXmRkDsdrehUukEw2xIHoLT2TE6kW4YT/sif0F5FrimSPaLkIz/mHmZrLgRHskoy3Rf/3gCK0snpC9L5K3YD1O0oj8ChdvBA6sCjJFCG+/rNgyR81wDxe9WKcJcmIKVO5jhKfroUFPIGAJDPV5R++/blRYFWGiaapMKp43lGnCmn8B0hYTYqg7hLyEgqQrXOl7JHIs014ZlzdZjslJd2XnK0RPqshvmyOQt5Pb3S+av2g0CJd2EFEpY2rpO2NthgZTO8U9ddez1ZlHuKAgfSZ2mojwy+Rd+5O1vcZ5GIisUB1ZvJHh5OewsmkgQh5AHRX1xInbDXRI/NLyrKPiGTvq7I+yLpgmsrK8uedkcHb7wElH8KAwCMe8LCbOzliTL+PYnUOwwovANNaSjBtPm2dUi3u+wmKv1psoQkONOBXVJtoC2EVdp9X+p+YJPl2lAmrTlsUQyBf9RjE17oq+m8d1l19rKIfDjiJwonyQiAcRxtOJ0lQWajjQrZDC877PuqXO0xaa8tD2SpikJe8uXHGwBzOO4awZX7DXnXyKJe+ESG2FocU0mYC5v1R3ORHWwpv2lAcn3mI9Z/TNoOgPBQj/vsgIoPD0rNW8PiGOnvVb/9KfJqrF5E09CAMaAPek0xpgEPEgz5p+kt1Nk56nuNXj62LN+AH6rjRfcV6VBMfElMd+qY72aN6l5JD6i4kDrhARUJpSUeJMFS05R0s126dEWqqJCO7JNWxD08aCq9DSzlfxcVze8zjGcNqIc90okfpNbbhvRC33MTPX9k6Jk/InGxdHS/tG+nTUQ2AziEuo5OOxaQbGdsxMLdpg1hbwCgnvT7Pu8py6xWrwjvCmYRPB+yz46ec4e6zD6/kMwAgXdbuRI+C5uwzodQUgFX5Iws0jVSdADD4WhBjzZhIXhyLC1sFhWEAe42snZJX5+QOu/YmJJgfPGxqdvZDKlmymeRrnvDP4F0rkh/NpsVoJiMu/el27eti4DdpmQRSf+cEyaWcvX6NdLBfdL2LRZWQoYXu3zVOgDwTmMv7HMpvq4MPCDQnf7fLz17artoSevpZsA7hRRjyHjvY2l02BYAk13OZoklAdE0JQ08tcWBFMH98UMYDvFAzrd88dyuJel3l5QWhQEbySTIIwU+qciP0awI1y1t0r1u6/nCk7e0Ss3bsgMq6Yv5keyBoEsoLptDjpbNZv3RuPxSf0Ar25UiRZmJgSdt2iTtbpbW1ocVZfkBOnNBartlN8kKwrPV1kjN28Mrm923cC53IkmpTRz1xLVrpJJARohH6/VHN8vvteM+QvwJck2S8WLYviN6bBnSR7DX6kW6cS866BU+F+y3HzPO5cRG/8DHOA0KwLKIAB1hEbA4gp395en2oel0Ebq4ILfD1F7HZgUoPAYZ29FD0o0WGzg8yxK/2letlFbWSYtjjiiUV7kvXJHOXvAbHfyuEz5/5w4DVcg6u6Subr/KEsYrlqIcBw7wcvv2eqX+J+myDJPHJs0QOAhFADCaDO6T7V8rlmdf3ZEGFaXorheeMxCqwt/BggSE+XlpjlMUE47gW+6Mh8I02WbMqwJhntfjmaem07IZjiCU6MyVzdpDcQMAanODXSyrkBUDKApz2APPe65dl348ZYO6bJmReEJA4yZp765w9+TTZ9KNmxaOADKDxmRCTMsDIKZrEp6GRgYJp3+I66xbHh5cQt2TJ8aXnGI+aeBYEpo8+NDzjA0GKeOQZJ2h8EIG6RIZ/+/wKCY81J2KR4sAmPIlFcY+xE/HvEwC+AoK0rpbrtuhXtVeKZoyeaEJjDPi/rUb0jffSQMDNkH8HSFpea308QdSTcyuk9sdUmd3WnsCiLx+08ZwHzngI3xFD6CGpPJda2JOFcFb4nFe9mOnLJyHJg9wsHMZQAFWQA6gKgJkGYBy/ywowtaU39KPpw99B2AiUSgoTHc0IEmEPBqf7UKqzzoTXhebT0Ku+Si9hIxBP3PespTefvN03BwTzsQe3i9t3hR+P6uNzJLPAcy4f3dw/CZpbeB4RPd41qemh7msyIew+pXmPbIZIB0Y9MdF+8M68GT1q2IA+MzeE/UfJf1JMyFvAziod/IdUWUArlZdbTJItvuAn0WH40aiaWVl2Jvz+ojTRZWBgld8JuBsbN6f0YTLvf9AunhZunLdQo/LSlIWVnDBHxywUBdsw0ia9tJ+yzI75AJS9BUrrKQT0npI++FchCM82LjveNi4PszzCJEP7lvKDYnFo9GmQxkotLrJOgefen1n2oqxruQSABTb158M+Ax5ygrElTUWVrPN95R/2gREPN9vOij1AMwPzCD86YXX0ZK+g6O4eH41KM0noAABg3azRbp4Sbp/31YHYGJAaBJjwI8elj46Ki2OaYlp58HWv0jPBqTqpdKLQWtDaVhn3iabOY2rW2pr9Wl/vjQ5KtXUS6vqwuBFXnhwL31QB5OIaBoCIKGRexsatEkm7JGt4QGz9X5xXXi0ITK2pP8OXxkIbdFnITxli37kaTmko9oSkdCWtKcDJmNEmzFAKp8fkj3myuYUUNwIA8yAURqBQLe2mYfApS8qt8GhDofHOLhfOnY4HkwuVJ6VHjxIeyJKLqvqpW2NYc6BvHCzVRp4YmCIdnvU1obBwYq+c8c4HWEVYguHAsQhco13evjIPp97whPgadDRsk0eYzTkS1Z85rSv/ZGxhWQPwj3eHOC5jZvTNhYhz8wcUGxHaiBZchpUsXHWUK1zrmxOAAX56+mx1BwgPX4s9fXZqiI8VfvHnAE0yhOEKjzT3j3GA0IGTzr9i9TSYvyFSYYTLa6UPjgibdyQ/Y0Ap6PDNC54EEQZsCAvNGwIi62PHhnxj7oo4UKVVUb6Qxks4iwAxNtGG2GXLw8nF3gLJ2h6CcBla4ulurpwYsGCHPSPE4n2NQCMUAgGsJD+6al0izHjTEY9H4/FzbTXBhQgOn1Gun49fVyM6xrINwBw03gl15oiqXGzdOwDadu2sOgX2aXL0g8/2orDvY+N2mft2S3tag57DUgvYALQlf7oQUfgN0vrAgeQRXvwAAhejwnHE6xZLa1enT1E4m3wBPCbYv8eOErdSgNJNmOy+/s8H/KAIDwCwmBiMWDv47qS/nwoJIMQoJ4N+mZFX4PEyyKzxC3eubLXAhQh4ex56cRJc68ULN0RgsW28phIvAxIQvDc2ijtbDYBdKb0Fa3q2xM2MHgW9ziNQWntOunAPvuubMYA3rptHio6DI33MWFNO8LvwwvAhbhmlHdAAgfauiXsOQjdCKB0ajoZJWVeANU+FO4IkYA2lfGI/oqKsNfkOminZlHB5Ua9dID4GyL9g76e6spMfqtbZUyz4lzaawGKwb97z1YEMgA3iMaSTKY3E0LCN2+R9uySVteHNylExiBTo/r7P6TeHov7pNKE0aol0kfHpA3rwu8n1J47b56T9477A2YbGuz7Q3aPFppuvyva9yqhjPO+EIGHOxHqo/1vGMCl0T/rk0yT9nom3HkbH7/gQqEmPLwsNOJlo5/M2yBjZPPQ7iRjf2QP/+5KNIW2KGeKCHNhrwUoBgUe09lp1XwGllWxZIlNhlutq23F5uJuCZUQ6X8el+49sIEjlLCqGZxjR83DhVJlPCYZZfttuzbeg4dbVis1NkplIWV8yEpJfI8j4/4MrPrVYXWca6VLAk5XWpreEMnrQ+QaT0nmSfjHC0IReC+cMrTQuCZCnuNok+nEYlmAo0W99nC1Qq+Q4wF5z2z2172qvRagQPz+PXbx7e0mAJLdrFljN+BKMjk+/oLBhTOd/N48Ex6P8MkKRav54Jh06GD8Ecd3ug1QrMolNRbGANXunebVQt0LEHGIf7SdnQlhEiDwodD88KHpYhTIy5eZlyaLrQtkdwCB96BxRcwaLw55h6dl8zaMK4Ad8Y/Td4e3pUzpD3kbrp3MFlmlwIuacDS+Z75FTc0FKWfiP8RzNNmguAPFZvkMFVbhhYvS6VO+Tldl6fGTPhv0Q4ekjz+yckbIKK/8/LPU32tEHEESr4lnovshxIPcgalt0kC/lUrgguy8oVa5IfBkcQyO1tdrfVxua9a0dViwmLKFSO6jx3eZAg4SDMBB6Ap5QV7DeDiOtsgWFmMQCncYY0avmDvkYsq6KxbHHHE01zYnskGcJhJn7jGz3dL3J6XWVvMsbFyk+v7ksdW4Dh6SPvssXCqR12l++lG6dsX28UE+ESi5pp07jdeE7E6X1Hk7vUWKAvSyGpM04ojy3W7r/0LTop+L3idKR9WB6yQcOwI/ZmEV7wmAyTpDWhrX8rjHesSSxSZSws/q68PeBtAO+SelTvvuV9cDNc8KeWTzXnrJZnh8lFxEz/NnpdttUlGJcSZW8lOvon9wWPr08/h2FsLApUvShfPW3IYa7PjctLR7t9TUHHN466B06YJ5NcIVpw/zvo0bpQ0BjQuDvD+8lz4mh25Oss/168PfhTfreej37PmtTYTHVasC+wI9OHifayScMG+DABoSgtEDXaY6YvQDrgZYIeS5dILMhb1xQMGJbrdLN28YeaY8AGEnk0M/AgyEgCPHpMNHpCUxO2ThGFcum4ej25PXklbTfgKQPvooHE5479XL0o3rfkt6oYmHS6ulbVvDJQo8zdUrRpRLfH0Qj7pmrXm2bAboCZF4XbiP621PmOcMyRjOC96xe8HTjvkjgiqXxPO6Rw9NKoj6viDvK2NC5FzbG/kashMGhvLJjRtS6w3zDqyaCn8uN5OJ5FC3yrzSnj3hUBAZrcgnv5Ee3vdZj69h1XBm5lEbyJBB/C9cMADjAeFOZI+N26WNDeH3dULgb1oaz2FlEGAmGWIdIsp9j42nAXakD8YCnlm7PJx59T6Suu8YOEj7p4dtcdQHOJo8oBjXfK/aAypE1riWoLm2eQUUdTi4hls5D6R796wmJV/SYNXAf1iNrMLtTdL+g1JTU/znot/g5b49blkTLp1BZHIB6NEP40Hh5IUL0sMH0uIKCy94x3UN0pEj4V4vwvF1vxgAe7RDZ1ODtC6QRZIcdNy26ywoTB/aQS1yzbpwdse4RV2mSAEp7wWRYLIZ7yF0w0Pde8aNRlDSmW2S9Do2b4BCYDx1Srp8wXQet68+34t4hSYTDHntqnaFdOCgtH9/mNRGxuQDpv/+L+n2La8Al1qmyIQeOSodOhzuxmQyCVlnz9ifARTekcHfucuAETIWBOAgXAEogEWY27k7HJoBKgVnQhY8bcTzms2Nlv5nM7wloQvg8x5625FQWCSh+0JvYwy4JyeaTpvXhsC/qXCn+QIUg3bmtPTN323FcGPRbhNSYHgTbJYq/qbN0o6dpqbHnR0lvwrRfk4clzrbLcMiHQYQEN39h6TDH8R3L7Dyf/7RGv7hS2RdXBOci/piyCC8p70sQRaZ9Cl541ZpfYDAs1goOD+6nz4rioxtzUbzaqFwh2eCkCva1p408TMuUYBOwNHkz8XkuyD8NTEZ7nzY/ADqhfUUDQ+Zau4a4obTe/kXVdgK3bXbMqqQgp1pvBcC/s0/LMPCM5XytPABA8WeA9LnX0g1MRkhq/j8GSO79B8hFdBpiap/+KiFh2yGV4T33bhsE4y34HvJSjdvDodIvNONa9JAn8kK6FVIE3ia0HfBfe5A4HtNZJ32D59cu1ZaEXgPfK6rw/ggB9ZO+SK168l6g+FO8wUoBnjTFnP1z/yz8qi+UwJhUNZvtO1WlTmejAbPIkx9/63U88DaVxgoyC1coXmP9PmfwgMuX3c894t06bxNKqWOQb+lG962pTH8Xog+7+U6CJHT/jBaFsXqtdnf457Dd1e61WJ/poSEJyU0wp8KAt4JjtnRbuEOT0tdDj2MykOIjKNVdXkCX7bYFk7VUqm65s3pT5HNC6DgNAcOWZi7ed1405at0tr1XiIInG2ezej6/P4b6ewvJiQSpvIL01nhbp4+/pW0MtC5KT+5eLfvvjV+ArD5DY/btdd+ggeVTZuXudNpnolrRzIgg9x3wBKCbAY/vHJR6n9sgJj2J+4xBmhW2cCBp7ndKnV3ZjyeZNqywTUxwEWY7X3467+jDlkf6LWfT5s3uoaXghwjLjIw7okLs2juQqvB9Z/+Sbpx1e8BrLLUHq/Hv+/ZJ/3pL/GeicG9xWPtvzePhodg4iiBkGUd/SheSYebnD3tn86+2PgWk4RXXBfDaQASab87T6DYOgyW1kjbm8OFcrglnoZWFcYP0MPXGjaHJRB4Zc8j34NWZIuELA9eFwL7fNq88n9I56tUuNFtLp611B6luLjUeBaZC9IA4QPh89hHYTExMnSj43+XujrTUgVhBXB++oUlAyHDC/5wQrp/z8IPgiLhb91Gaeu2sPgJWK9fM0/mGu98T9K2HUbiQwsLYPBd7jzPAuNEeDPCcejQMu4F+UP+ZBXC+Lr15gnne8tUNnsrpZeQuYc6t0g//yR1tHkCX24DxS4U+sTJ7I59YsJl+QwPpmagAUR7q6XbrnthwDKuvQekbdtjDlRNSq0t0tVLln2yMCDZeFo4V5xoime9etEyweIy86iLq3zaH9rsMGL3TpGaOhz3y3du3GzgyHqN0/aeHh/u3JGK+dKGhnivPZ/2TgAK14763HZTutNueop7pu9if2b2U3PtSAyHj9lKn6lRD4/07dfSzWtWMIbHDfm9c3g3xM+47BJZ4ufvfCtMle1OGX8hHflQat4Zs2mhT7pwxnc9VFqBlkyNvrE4jQs5g2ul1lfuNa4l1da9EOwdfya1XLczTElSqEWWzdBfNd/2VgGFAow4efWCdKvVJhz9BP5Q7PkAVXlERzQm+E792pm5GAVS5IUrF2ygCXXPn9lnQeKPfSwtjSlHUJY5eVzq7rAkABA+HzQyv2d/eEewPBDb29Lh3tUHa0xrC4mfyCs3rli5BSBEHaCUWUJZpPNObUbgC/zh/Nwj44NQ/LbsrQGKFXj+F+mXn4wX5fkO0GLfiE8RmZlcv8lA0BQzIZExEaTcgKHlmn0eXoJQRRretEv69Mv4cICAee60vZ8wCSjY/AmPO/qptCamR4ry0sVz/niiKstK4UJc/5Zt8S0ndFxg7ll7z6UqitTNMQr8iF2jU9PL/DnwxVLjtrcX7vQ2AQXPQFd6/NBWPuEH3oAbJ7yho+w9aCCoD3Q0/tbwcv/4T0u98XJoRoAJDkPR98u/mgYWMjKlK+elMz/bqifkumfuTkhHP5b2HQonGWhUaFVwmlJ/5sDTJ+YxtjWFe6vwwmxGJfmIdrXwg8yydXsYhLyes6KijRjcI99FkvEmesdD9tYARfo98lwvH4VAaHDPLllqRVo3oDtyO34GMn/tsvTjd1LXbXtPRZV5Cn4A0xd/iU/z3eaI69J3xy27olzkjsR5Lm3YIn3wUfy14GHwTk5eWGTvI1Q37Q5rZE5D6pCuXbJxAAhkiByGtnlbzGEb46bcD/knkyb9mQcAd0WMHvcm7K0BitQWD3TmlLl4COimrTYoGzbaYOYiyrEyCVHoTE/7jS+VlFlphM/d2ix99e+W+cR9HOWYk/+0jAkpgnLLkCfGH38eH0ZouYWIU0uDc0HEXYjdbeEuVP5A0Ua5p9ZHaKZ/iTDZ2GQaWTZzCny3dP2SlbQKfPZJ9QA5I7RB4k3ZWwPU8jrpkz9JlUtt4vEelDIIdbmKu2RGZ34yzYr6YZXfKhQJn9t3Sp9/Fd/KglHZ//YfRqgr/XYw9B1404efm6cMgZuQiPBJhuqOkC621J++J6SJEEEGGIT9Wzf9M2SKDMDcw47msCjJ99HqTAnKNdsVmIfettb6wN62vdUsj+avz//sz6OchZIOeAhPqOiAwD3/pNZC5uNeG+T9R6SPPrW6WZyhaB//byuToBERrgAE13TkY+nQ0XhxllQfzgX/wrMRLnkv3gmFO7Q40MOuXTTw453c8YVJU+CRRYLPh5k04FHjm/aP34Dr8X2h0+zepL11HQqPkiuJRLgjpb/siTN6FbtA6F6g44DJKVlkwuOHn828YvFCaFWXz1p2CYkn9YY77donffhJvJ5DeDzrW1qql/mnL4wakJA5QtvRAc/1K8aD3GNiC2x3S43vrYqTJQifW7ZbTxgyA8DbuVfa1Bjer/gm7Z1SyuOMlX/zqnEOREuIKXwFFZsVi9dauVo68pG1xVTO8DQleA+e6ewpqaDIt+YOWra2fZf0p7/FA5IDMpAnOm4ZEAt8xygV/mN4xkBnpTxfI0ySMABEwhieZmuTtHIGj0poREIhC6XZD8DvO/hmzi3Ixd4LQJEB/vSddPoHkxUouSAWuo2Q/uAuUuxjn5neM9MZSKjZJ74274ISD/FmcukQWN9gWlVcqKStF+4GEcfwKCQBKR+yyFBDp5wgE1DOud/lPVjC/g59i66HkFfLNMLy7n2WCbrnybxlIp5p7wWg6Db44VsDE17D7ZB5bk3/CH/Nu0wjQlmeKTNERf/ua+nSOfMqkHCUajxgwxbpi79KDTFHM5KiI1GcO2WAxiPhYaKsbv/hcEnHtcJcNVJNqIL0A2IWyMEP7PpzNRZCXGfq27L3w0MN2oRHJ+DiDZjMhkarreERZlrZEHZCzTdfGxmGMwHGF37rNh7is69so0QcKCkVESrxckszdtogmH7yRXzRmHYWtDLeC18ibMO5+M7GHW/m7IH5tvcCUMgJKOZkdoSm5StNrISMrgk0q2UaIar1pvTD8bSSTZga9vU9PNOnf7LugzgwsXsH7/agy3QfVGqyRLIrhM/1MfIEGw0u/CJ1t9vWcNqPeX4zsgLty0tf8Qma75q9F4BC6PzrXII1VwAAAtxJREFU/2eFUkIOngmPkMtBHPCTi79IP9I+fN8INCEGAk5WuLFR+tO/GSGOAxNyxD//U2q7ZoBgh/Jgn1SUZ0VruFMI2HhTwty1C/b6Ct8Lz3NX2FTBgnnTnZXzZe8FoEiH124wz8TAw6FyGX/4yflT0o/HbaMA5JueKA5/JSsk/f70Kws3cRMKdztJ98IZ61WCu7iD7selgx9LB4+Fwe3KK+3SqZMmSbiD/kct1DXvN3nibavbc2nvjWwgzbyTONPoVvj5hHT6pE3esuUGzH4vWjbtN6UeTxfqhpQH5ff/lC6eMjCxi8dtdx+Smvaakh7XBQFfOv29dL/Tl5Py7Npq6qQDx6ww/key9wpQuVpU7zrzvYmO7IOj+EqtjczuICr6l7btPc4ADbyLcAn5BjiIkpBwQuVnf5XqYuQFroPtZJ1t5gHhbnQgkAUe/tjEyD+a/SEBFT2Ggmo/qTrhzj0Uu9q8wsGjM/dWEdLQvX78xlp5ESAh92SEq9ZJX/xbfPfCy+vIt6cluBA5aR7q6CfS3sNvt81kvuwPCSgMGeDgR8Zznj0xL/Xhl1LTnpmFQIh/5y3p1AnbNElYciLqE6l2pfTl3+Ib5jKNHiWK1HR8EnpRueFc74qyPdf2hwUUJ74d/sjScVJ7WjsIU7loPU7remrtMNTZkBdoEaleLn3x7yZg5lrIpgTk6orLfWvKDml1TG/5+25/WEBh7JDZfdBC1WyeIABYqMWtbZDab5hnqVsjff5vlpXNpgiLEyM7XbLM7yD+A4a5TPtDA0r+YdWz3Z9GKFvjeRLcCYChM23f/epq9nw/Y+VdsT88oF7VqOqzU4V+dtwMckGcvLBgZguAijE8U9x2qwX7vS2suQWbU1sA1ILNqS0AasHm1BYAtWBzaguAWrA5tbz0Q9sXbMFe2zj9Wv8iktuCvQGjf1CBI7AWbMFmbeUImxzVQGfO+EL4W7BXNEqWxZJa/39TQHY21KuLiQAAAABJRU5ErkJggg==",Dw="data:image/png;base64,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",Ow="data:image/png;base64,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";var _w={name:"FingerRegisterView",props:{row:{type:Object,default:()=>{}}},data(){return{fingerRegisterStep:0,currentFingerprintImage:"/public/finger-status-start.png",gifTimeoutId:null,selectedFinger:null,fingerTemp:null,fingerId:null,fid:null,loading:!1,leftFingers:[{label:"大拇指",value:"left-thumb",top:122,left:6,index:0,fingerInfo:null},{label:"食指",value:"left-index",top:20,left:60,index:1,fingerInfo:null},{label:"中指",value:"left-middle",top:3,left:98,index:2,fingerInfo:null},{label:"无名指",value:"left-ring",top:12,left:136,index:3,fingerInfo:null},{label:"小拇指",value:"left-little",top:35,left:176,index:4,fingerInfo:null}],rightFingers:[{label:"大拇指",value:"right-thumb",top:118,left:178,index:5,fingerInfo:null},{label:"食指",value:"right-index",top:16,left:121,index:6,fingerInfo:null},{label:"中指",value:"right-middle",top:0,left:83,index:7,fingerInfo:null},{label:"无名指",value:"right-ring",top:11,left:43,index:8,fingerInfo:null},{label:"小拇指",value:"right-little",top:42,left:5,index:9,fingerInfo:null}]}},computed:{userId(){return this.row.userId},devSn(){return ae.getters.getFingerprintDeviceSN},devType(){return 1},tenantId(){return null},leftHandleImg(){return this.selectedFinger&&this.selectedFinger.value.includes("left")?e(9165):e(288)},rightHandleImg(){return this.selectedFinger&&this.selectedFinger.value.includes("right")?e(4862):e(9637)},realFingerprintImage(){return"/public/finger-status-start.png"===this.currentFingerprintImage?Ow:"/public/finger-status-1.gif"===this.currentFingerprintImage?qw:"/public/finger-status-1-last.png"===this.currentFingerprintImage?Ew:"/public/finger-status-2.gif"===this.currentFingerprintImage?Cw:"/public/finger-status-2-last.png"===this.currentFingerprintImage?Sw:"/public/finger-status-3.gif"===this.currentFingerprintImage?Aw:"/public/finger-status-3-last.png"===this.currentFingerprintImage?Iw:"/public/finger-status-compeleted.png"===this.currentFingerprintImage?Dw:Ow},stepTips(){return-1===this.fingerRegisterStep?"指纹采集异常,请重试!":0===this.fingerRegisterStep?"请选择需要采集的手指":1===this.fingerRegisterStep?"请将手指放在设备上":2===this.fingerRegisterStep?"请再次将手指放在设备上":3===this.fingerRegisterStep?"最后一次将手指放在设备上":4===this.fingerRegisterStep?"正在指纹采集":5===this.fingerRegisterStep?"指纹采集成功":"未知状态"},fingerStatusText(){return-1===this.fingerRegisterStep?"指纹采集异常,请重试!":0===this.fingerRegisterStep?"采集指纹一共需要三次按压":1===this.fingerRegisterStep?"请将手指放在设备上":2===this.fingerRegisterStep?"请再次将手指放在设备上":3===this.fingerRegisterStep?"最后一次将手指放在设备上":4===this.fingerRegisterStep?"正在处理指纹数据...":5===this.fingerRegisterStep?"指纹采集成功":"准备采集指纹"}},watch:{fingerRegisterStep(n){clearTimeout(this.gifTimeoutId);const x=800;1===n||0===n||-1===n?this.currentFingerprintImage="/public/finger-status-start.png":2===n?(this.currentFingerprintImage="/public/finger-status-1.gif",this.gifTimeoutId=setTimeout(()=>{this.currentFingerprintImage="/public/finger-status-1-last.png"},x)):3===n?(this.currentFingerprintImage="/public/finger-status-2.gif",this.gifTimeoutId=setTimeout(()=>{this.currentFingerprintImage="/public/finger-status-2-last.png"},x)):4===n?(this.currentFingerprintImage="/public/finger-status-3.gif",this.gifTimeoutId=setTimeout(()=>{this.currentFingerprintImage="/public/finger-status-3-last.png"},x)):5===n&&(this.currentFingerprintImage="/public/finger-status-compeleted.png")}},mounted(){this.loadCurrentUserFingerInfo(),this.$authEventBus.$on("startCollectionMessage",this.startCollectionMessage)},beforeDestroy(){clearTimeout(this.gifTimeoutId),this.$authEventBus.$off("startCollectionMessage",this.startCollectionMessage),this.fingerRegisterStep>0&&this.fingerRegisterStep<5&&this.cancelCollection()},methods:{cancelCollection(){this.$authEventBus.$emit("cancelCollection")},handleCancelCollection(){this.$confirm("确定要退出指纹采集吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{this.cancelCollection(),this.$message.info("已退出指纹采集")}).catch(()=>{})},startCollectionMessage(n){if(console.log("startCollectionMessage:",n),200===n.status||0===n.result){const{count:x,temp:t,image:e}=n.data;console.log(`指纹采集进度: ${x}/4`),1===x?this.fingerRegisterStep=2:2===x?this.fingerRegisterStep=3:3===x?this.fingerRegisterStep=4:4===x&&(this.fingerRegisterStep=5,this.fingerTemp=t,console.log("✅ 指纹采集完成,获取到指纹模板"),this.$nextTick(()=>{this.addFingerprint()})),e&&console.log("收到指纹图像数据")}else console.error("指纹采集失败:",n.msg||"未知错误"),this.fingerRegisterStep=-1,this.$message?.error?.(n.msg||"指纹采集失败,请重试")},handleClose(){},async handleSelectFinger(n){if(this.fingerRegisterStep>0&&this.fingerRegisterStep<5)this.$message({message:"指纹采集尚未完成,请先完成当前采集",type:"warning"});else if(n.fingerInfo)this.selectedFinger=n;else try{const x=await vw({devSn:this.devSn,devType:this.devType,fingerNo:n.index,tenantId:this.tenantId,userId:this.userId});this.fingerId=x.data.fingerId,this.fid=x.data.fingerSeq,this.selectedFinger=n,this.fingerRegisterStep=1,this.fingerTemp=null,console.log(`开始采集 ${n.label} 指纹,fingerId: ${this.fingerId}, fid: ${this.fid}`),this.startCollection()}catch(x){console.error("获取指纹信息失败:",x)}},handleSaveFingerprint(){this.addFingerprint()},handleDeleteFinger(){this.$confirm("确定删除指纹吗?").then(()=>{kw({fingerId:this.selectedFinger.fingerInfo.id}).then(()=>{this.selectedFinger=null,this.fingerRegisterStep=0,this.$message.success("删除成功"),this.loadCurrentUserFingerInfo()})}).catch(()=>{})},startCollection(){this.$authEventBus.$emit("startCollection")},loadCurrentUserFingerInfo(){ww({devType:this.devType,tenantId:this.tenantId,userId:this.userId}).then(n=>{const x=n.data,t=this.leftFingers.map(n=>{const t=x.find(x=>x.fingerNo===n.index);return{...n,fingerInfo:t}}),e=this.rightFingers.map(n=>{const t=x.find(x=>x.fingerNo===n.index);return{...n,fingerInfo:t}});this.leftFingers=t,this.rightFingers=e})},addFingerprint(){this.fingerId?this.fingerTemp?this.selectedFinger?this.fid?(this.loading=!0,console.log("开始保存指纹到服务器..."),jw({data:this.fingerTemp,fingerId:this.fingerId}).then(()=>{console.log("✅ 指纹保存成功"),this.loadCurrentUserFingerInfo(),this.selectedFinger=null,this.fingerRegisterStep=0,this.fingerTemp=null,this.fingerId=null,this.fid=null,this.$message.success("指纹录入成功!")}).catch(n=>{console.error("❌ 指纹保存失败:",n),this.fingerRegisterStep=-1}).finally(()=>{this.loading=!1})):this.$message.error("未获取到指纹序列号"):this.$message.error("请先选择手指"):this.$message.error("未获取到指纹模板"):this.$message.error("未获取到指纹ID")}}},Tw=_w,Rw=Ie(Tw,bw,zw,!1,null,"334b3efe",null),Bw=Rw.exports,Mw={name:"auth-com",components:{FaceRegister:Jj,CardRegister:mw,FingerRegister:Bw},props:{authCollect:{type:Array,default:()=>[]},drawerInfo:{type:Object,default:()=>{}}},data(){return{authList:[],activeName:""}},computed:{modules(){return this.authCollect??[]},options(){return this.modules&&this.modules.find(n=>"face"===n.value).options||[]}},mounted(){this.h_init()},methods:{h_init(){this.modules.length&&(this.activeName=this.modules[0].value)}}},Nw=Mw,Fw=Ie(Nw,si,hi,!1,null,"4bde6ad6",null),Pw=Fw.exports,Lw=function(){var n=this,x=n._self._c;return x("div",{staticClass:"flex-center align-center h100"},[x("el-empty",{staticStyle:{"font-size":"20px"},attrs:{description:"请先保存用户信息"}})],1)},Hw=[],Uw={name:"empty-view"},Vw=Uw,Ww=Ie(Vw,Lw,Hw,!1,null,"9e253eac",null),Qw=Ww.exports,Gw={name:"user-drawer",components:{UserInfo:oi,AuthCom:Pw,EmptyView:Qw},props:{drawerStyle:{type:String,default:""},authCollect:{required:!1,type:Array,default:()=>[]},drawerInfo:{type:Object},userBeforeCreate:{type:Function,default:()=>!0}},data(){return{visible:!1,loading:!1}},mounted(){this.visible=!0},methods:{closed(){this.$emit("closed")},h_back(){this.visible=!1},async f_save(){const n=this.userBeforeCreate(this.$refs["user-info"].h_getFormData(),this.drawerInfo);this.userBeforeCreate&&!n||this.$refs["user-info"].h_validate().then(n=>{if(console.log("valid",n),!n)return;const x=this.$refs["user-info"].h_getFormData();this.loading=!0,ve({...x,organId:this.drawerInfo.organ.id,accountEnabled:x.accountEnabled}).then(()=>{this.$emit("refresh"),this.visible=!1}).catch(n=>{console.error("用户状态 err",n)}).finally(()=>{this.loading=!1})})}}},Kw=Gw,Yw=Ie(Kw,Xe,Ze,!1,null,"8c86d64a",null),Jw=Yw.exports,Xw=e(4747),Zw=e.n(Xw);class $w{constructor(n,x={}){this.url=n,this.options={reconnectInterval:5e3,maxReconnectAttempts:10,heartbeatInterval:12e4,...x},this.ws=null,this.reconnectAttempts=0,this.isConnected=!1,this.heartbeatTimer=null,this.eventListeners=new Map,this.onOpen=this.onOpen.bind(this),this.onMessage=this.onMessage.bind(this),this.onError=this.onError.bind(this),this.onClose=this.onClose.bind(this)}connect(){try{this.ws=new WebSocket(this.url),this.ws.onopen=this.onOpen,this.ws.onmessage=this.onMessage,this.ws.onerror=this.onError,this.ws.onclose=this.onClose}catch(n){console.error("WebSocket连接失败:",n),this.handleReconnect()}}onOpen(n){console.log("WebSocket连接成功"),this.isConnected=!0,this.reconnectAttempts=0,this.startHeartbeat(),this.emit("open",n)}onMessage(n){try{const x=JSON.parse(n.data);if(console.log("收到WebSocket消息:",x),"pong"===x.type)return;this.emit("message",x)}catch(x){console.error("解析WebSocket消息失败:",x),this.emit("message",n.data)}}onError(n){console.error("WebSocket错误:",n),this.emit("error",n)}onClose(n){console.log("WebSocket连接关闭:",n.code,n.reason),this.isConnected=!1,this.stopHeartbeat(),this.emit("close",n),1e3!==n.code&&this.handleReconnect()}send(n){if(!this.isConnected||this.ws.readyState!==WebSocket.OPEN)return console.warn("WebSocket未连接,无法发送消息"),!1;try{const x="string"===typeof n?n:JSON.stringify(n);return this.ws.send(x),console.log("发送WebSocket消息:",n),!0}catch(x){return console.error("发送WebSocket消息失败:",x),!1}}on(n,x){this.eventListeners.has(n)||this.eventListeners.set(n,[]),this.eventListeners.get(n).push(x)}off(n,x){const t=this.eventListeners.get(n);if(t){const n=t.indexOf(x);n>-1&&t.splice(n,1)}}emit(n,x){const t=this.eventListeners.get(n);t&&t.forEach(t=>{try{t(x)}catch(e){console.error(`事件监听器执行失败 [${n}]:`,e)}})}handleReconnect(){this.reconnectAttempts<this.options.maxReconnectAttempts?(this.reconnectAttempts++,console.log(`尝试重连WebSocket (${this.reconnectAttempts}/${this.options.maxReconnectAttempts})`),setTimeout(()=>{this.connect()},this.options.reconnectInterval)):(console.error("WebSocket重连次数已达上限"),this.emit("reconnectFailed"))}startHeartbeat(){this.stopHeartbeat(),this.heartbeatTimer=setInterval(()=>{this.isConnected&&this.send({type:"ping",timestamp:Date.now()})},this.options.heartbeatInterval)}stopHeartbeat(){this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null)}close(){this.stopHeartbeat(),this.ws&&this.ws.close(1e3,"主动关闭"),this.isConnected=!1}getReadyState(){return this.ws?this.ws.readyState:WebSocket.CLOSED}isOpen(){return this.isConnected&&this.ws&&this.ws.readyState===WebSocket.OPEN}}var nk=$w,xk={name:"auth-manage",props:{drawerStyle:{type:String,default:""},authCollect:{required:!1,type:Array,default:()=>["face","finger","idCard"]},userBeforeCreate:{type:Function,default:()=>!0},beforeCreate:{type:Function,default:()=>!0},baseUrl:{type:String},authUrl:{type:String}},components:{OrganTree:Pe,UserTable:Je,UserDrawer:Jw},data(){return{visible:!1,drawerInfo:{},organTreeKey:"1",websocket:null,cardReader:null,fingerprintDeviceCount:0}},created(){this.baseUrl&&ae.commit("SET_BASE_URL",this.baseUrl),this.authUrl&&ae.commit("SET_AUTH_URL",this.authUrl)},mounted(){console.log("LD-AUTH打包时间为",Zw()(1758182885174).format("YYYY-MM-DD HH:mm:ss")),this.$authEventBus.$on("startCollection",this.handleStartCollection),this.$authEventBus.$on("cancelCollection",this.handleCancelCollection),this.initWebSocket()},beforeDestroy(){this.websocket&&(console.log("🔌 组件销毁,关闭WebSocket连接"),this.websocket.close(),this.websocket=null),this.$authEventBus.$off("startCollection",this.handleStartCollection),this.$authEventBus.$off("cancelCollection",this.handleCancelCollection)},methods:{handleCancelCollection(){this.websocket&&this.websocket.send({action:1010})},handleStartCollection(){if(ae.getters.getFingerprintDeviceSN){const n={action:1001};this.websocket.send(n)}},initWebSocket(){try{this.websocket=new nk(`${ae.state.websocketUrl}`,{reconnectInterval:5e3,maxReconnectAttempts:10,heartbeatInterval:12e4}),this.websocket.on("open",()=>{this.checkCardReaderConnection(),this.getFingerprintDeviceSN()}),this.websocket.on("message",n=>{console.log("📨 收到WebSocket消息:",n),this.handleWebSocketMessage(n)}),this.websocket.on("error",n=>{console.error("❌ WebSocket连接错误:",n)}),this.websocket.on("close",n=>{console.log("🔌 WebSocket连接已关闭:",n.code,n.reason),n.code}),this.websocket.on("reconnectFailed",()=>{console.error("💥 WebSocket重连失败,已达最大重连次数")}),this.websocket.connect()}catch(n){console.error("WebSocket初始化失败:",n)}},handleWebSocketMessage(n){if(n.action)switch(n.action){case 1009:this.handleFingerprintDeviceSNResponse(n);break;case 2001:this.handleCheckCardReaderResponse(n);break;case 2002:this.handleCardReaderListResponse(n);break;case 2003:this.handleOpenCardReaderResponse(n);break;case 2004:this.$authEventBus.$emit("card",n);break;case 1001:this.$authEventBus.$emit("startCollectionMessage",n);break;default:console.log("未知action类型:",n)}else switch(n.type){case"user_update":console.log("用户信息更新:",n.payload),this.f_userData();break;case"organ_update":console.log("组织架构更新:",n.payload),this.f_refreshTree();break;case"auth_status":console.log("认证状态更新:",n.payload),this.$message?.info?.(n.payload.message||"认证状态已更新");break;case"notification":console.log("系统通知:",n.payload),this.$message?.info?.(n.payload.message||"收到系统通知");break;default:console.log("未知消息类型:",n)}},sendWebSocketMessage(n,x={}){if(this.websocket&&this.websocket.isOpen()){const t={type:n,payload:x,timestamp:Date.now()};this.websocket.send(t),console.log("📤 发送WebSocket消息:",t)}},getFingerprintDeviceSN(){console.log("🔢 获取指纹设备SN码...");const n={action:1009};this.websocket.send(n),console.log("📤 发送获取指纹设备SN码消息:",n)},handleFingerprintDeviceSNResponse(n){if(console.log("📊 收到指纹设备SN响应:",n),200===n.status||0===n.result){const x=n.data?.sn||"";x?(console.log("✅ 获取到指纹设备SN:",x),ae.dispatch("updateFingerprintDeviceSN",x)):(console.warn("⚠️ 指纹设备SN为空"),ae.dispatch("updateFingerprintDeviceSN",""))}else console.error("❌ 获取指纹设备SN失败:",n.msg||"未知错误")},getFingerprintDeviceStatus(){return{deviceCount:this.fingerprintDeviceCount,hasDevice:this.fingerprintDeviceCount>0,deviceSN:this.$store.getters.getFingerprintDeviceSN}},refreshFingerprintDeviceCount(){this.websocket&&this.websocket.isOpen()?this.getFingerprintDeviceCount():console.warn("WebSocket未连接,无法获取指纹设备数量")},refreshFingerprintDeviceSN(){this.websocket&&this.websocket.isOpen()?this.getFingerprintDeviceSN():console.warn("WebSocket未连接,无法获取指纹设备SN")},refreshAllFingerprintInfo(){this.websocket&&this.websocket.isOpen()?(this.getFingerprintDeviceCount(),this.getFingerprintDeviceSN()):console.warn("WebSocket未连接,无法获取指纹设备信息")},checkCardReaderConnection(){console.log("🔍 检查读卡器连接状态...");const n={action:2001};this.websocket.send(n),console.log("📤 发送检查读卡器连接状态消息:",n)},handleCheckCardReaderResponse(n){console.log("📊 收到读卡器连接状态响应:",n),200===n.status||0===n.result?n.data&&n.data.isOpen?(this.cardReader=n.data.devName||"读卡器",console.log("✅ 读卡器已连接:",this.cardReader)):(console.log("⚠️ 读卡器未连接,开始获取读卡器列表..."),this.getCardReaderList()):(console.error("❌ 检查读卡器状态失败:",n.msg||"未知错误"),this.getCardReaderList())},getCardReaderList(){console.log("📡 请求获取读卡器列表...");const n={action:2002};this.websocket.send(n),console.log("📤 发送获取读卡器列表消息:",n)},handleCardReaderListResponse(n){if(console.log("📋 收到读卡器列表响应:",n),n.data&&Array.isArray(n.data)&&n.data.length>0){const x=n.data[0];console.log("🎯 找到读卡器:",x),this.openCardReader(x)}else console.warn("⚠️ 未找到可用的读卡器")},openCardReader(n){const x={action:2003,devName:n};this.websocket.send(x)},handleOpenCardReaderResponse(n){0===n.result||200===n.status?this.cardReader=n.devName||"读卡器":this.$message?.error?.(`读卡器打开失败: ${n.message||n.error||"未知错误"}`)},getCardReaderStatus(){return{isConnected:!!this.cardReader,deviceName:this.cardReader}},reinitCardReader(){this.cardReader=null,this.websocket&&this.websocket.isOpen()?this.checkCardReaderConnection():this.$message?.warning?.("WebSocket未连接,无法初始化读卡器")},getAllDeviceStatus(){return{fingerprint:this.getFingerprintDeviceStatus(),cardReader:this.getCardReaderStatus()}},refreshAllDevices(){this.websocket&&this.websocket.isOpen()?(this.refreshAllFingerprintInfo(),this.checkCardReaderConnection()):this.$message?.warning?.("WebSocket未连接,无法刷新设备状态")},f_refreshTree(){this.organTreeKey=this.organTreeKey+1},f_userData(n){n&&this.$set(this.drawerInfo,"organ",n),this.$refs["user-table"].f_init(this.drawerInfo.organ)},h_setVisible(){this.visible=!1},h_setUserId(n,x){this.$set(this.drawerInfo,"userId",n),this.$set(this.drawerInfo,"row",x),this.visible=!0}}},tk=xk,ek=Ie(tk,r,o,!1,null,"81b3c05e",null),ik=ek.exports;const rk=new(At());var ok=rk;const sk=function(n,x={}){sk.installed||(n.component(ik.name,ik),n.prototype.$authEventBus=ok,void 0!==x.baseUrl&&null!==x.baseUrl&&ae.commit("SET_BASE_URL",x.baseUrl),void 0!==x.authUrl&&null!==x.authUrl&&ae.commit("SET_AUTH_URL",x.authUrl),void 0!==x.websocketUrl&&null!==x.websocketUrl&&ae.commit("SET_WEBSOCKET_URL",x.websocketUrl),void 0!==x.faceApiUrl&&null!==x.faceApiUrl&&ae.commit("SET_FACE_API_URL",x.faceApiUrl))};var hk={install:sk,authManage:ik},uk=hk}(),i=i["default"],i}()});
70
+ var wm=function(n,x){return wm=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,x){n.__proto__=x}||function(n,x){for(var t in x)x.hasOwnProperty(t)&&(n[t]=x[t])},wm(n,x)};function km(n,x){function t(){this.constructor=n}wm(n,x),n.prototype=null===x?Object.create(x):(t.prototype=x.prototype,new t)}var qm=function(){return qm=Object.assign||function(n){for(var x,t=1,e=arguments.length;t<e;t++)for(var i in x=arguments[t],x)Object.prototype.hasOwnProperty.call(x,i)&&(n[i]=x[i]);return n},qm.apply(this,arguments)};function Cm(n,x,t,e){function i(n){return n instanceof t?n:new t(function(x){x(n)})}return new(t||(t=Promise))(function(t,r){function o(n){try{h(e.next(n))}catch(Di){r(Di)}}function s(n){try{h(e["throw"](n))}catch(Di){r(Di)}}function h(n){n.done?t(n.value):i(n.value).then(o,s)}h((e=e.apply(n,x||[])).next())})}function Am(n,x){var t,e,i,r,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return r={next:s(0),throw:s(1),return:s(2)},"function"===typeof Symbol&&(r[Symbol.iterator]=function(){return this}),r;function s(n){return function(x){return h([n,x])}}function h(r){if(t)throw new TypeError("Generator is already executing.");while(o)try{if(t=1,e&&(i=2&r[0]?e["return"]:r[0]?e["throw"]||((i=e["return"])&&i.call(e),0):e.next)&&!(i=i.call(e,r[1])).done)return i;switch(e=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return o.label++,{value:r[1],done:!1};case 5:o.label++,e=r[1],r=[0];continue;case 7:r=o.ops.pop(),o.trys.pop();continue;default:if(i=o.trys,!(i=i.length>0&&i[i.length-1])&&(6===r[0]||2===r[0])){o=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){o.label=r[1];break}if(6===r[0]&&o.label<i[1]){o.label=i[1],i=r;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(r);break}i[2]&&o.ops.pop(),o.trys.pop();continue}r=x.call(n,o)}catch(Di){r=[6,Di],e=0}finally{t=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}}function Em(){for(var n=0,x=0,t=arguments.length;x<t;x++)n+=arguments[x].length;var e=Array(n),i=0;for(x=0;x<t;x++)for(var r=arguments[x],o=0,s=r.length;o<s;o++,i++)e[i]=r[o];return e}var Sm=function(){function n(n,x){if(!Lm(n)||!Lm(x))throw new Error("Dimensions.constructor - expected width and height to be valid numbers, instead have "+JSON.stringify({width:n,height:x}));this._width=n,this._height=x}return Object.defineProperty(n.prototype,"width",{get:function(){return this._width},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"height",{get:function(){return this._height},enumerable:!0,configurable:!0}),n.prototype.reverse=function(){return new n(1/this.width,1/this.height)},n}();function Im(n,x){return n instanceof Kr&&n.shape.length===x}function Dm(n){return Im(n,2)}function Om(n){return Im(n,3)}function _m(n){return Im(n,4)}function Tm(n){return n%1!==0}function Rm(n){return n%2===0}function Bm(n,x){void 0===x&&(x=2);var t=Math.pow(10,x);return Math.floor(n*t)/t}function Mm(n){return n&&n.width&&n.height}function Nm(n,x){var t=n.width,e=n.height,i=x/Math.max(e,t);return new Sm(Math.round(t*i),Math.round(e*i))}function Fm(n){return n.reduce(function(n,x){return n.add(x)},new Um(0,0)).div(new Um(n.length,n.length))}function Pm(n,x,t){return Array(n).fill(0).map(function(n,e){return x+e*t})}function Lm(n){return!!n&&n!==1/0&&n!==-1/0&&!isNaN(n)||0===n}function Hm(n){return Lm(n)&&0<=n&&n<=1}var Um=function(){function n(n,x){this._x=n,this._y=x}return Object.defineProperty(n.prototype,"x",{get:function(){return this._x},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"y",{get:function(){return this._y},enumerable:!0,configurable:!0}),n.prototype.add=function(x){return new n(this.x+x.x,this.y+x.y)},n.prototype.sub=function(x){return new n(this.x-x.x,this.y-x.y)},n.prototype.mul=function(x){return new n(this.x*x.x,this.y*x.y)},n.prototype.div=function(x){return new n(this.x/x.x,this.y/x.y)},n.prototype.abs=function(){return new n(Math.abs(this.x),Math.abs(this.y))},n.prototype.magnitude=function(){return Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2))},n.prototype.floor=function(){return new n(Math.floor(this.x),Math.floor(this.y))},n}(),Vm=function(){function n(x,t){void 0===t&&(t=!0);var e=x||{},i=[e.left,e.top,e.right,e.bottom].every(Lm),r=[e.x,e.y,e.width,e.height].every(Lm);if(!r&&!i)throw new Error("Box.constructor - expected box to be IBoundingBox | IRect, instead have "+JSON.stringify(e));var o=r?[e.x,e.y,e.width,e.height]:[e.left,e.top,e.right-e.left,e.bottom-e.top],s=o[0],h=o[1],u=o[2],a=o[3];n.assertIsValidBox({x:s,y:h,width:u,height:a},"Box.constructor",t),this._x=s,this._y=h,this._width=u,this._height=a}return n.isRect=function(n){return!!n&&[n.x,n.y,n.width,n.height].every(Lm)},n.assertIsValidBox=function(x,t,e){if(void 0===e&&(e=!1),!n.isRect(x))throw new Error(t+" - invalid box: "+JSON.stringify(x)+", expected object with properties x, y, width, height");if(!e&&(x.width<0||x.height<0))throw new Error(t+" - width ("+x.width+") and height ("+x.height+") must be positive numbers")},Object.defineProperty(n.prototype,"x",{get:function(){return this._x},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"y",{get:function(){return this._y},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"width",{get:function(){return this._width},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"height",{get:function(){return this._height},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"left",{get:function(){return this.x},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"top",{get:function(){return this.y},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"right",{get:function(){return this.x+this.width},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"bottom",{get:function(){return this.y+this.height},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"area",{get:function(){return this.width*this.height},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"topLeft",{get:function(){return new Um(this.left,this.top)},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"topRight",{get:function(){return new Um(this.right,this.top)},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"bottomLeft",{get:function(){return new Um(this.left,this.bottom)},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"bottomRight",{get:function(){return new Um(this.right,this.bottom)},enumerable:!0,configurable:!0}),n.prototype.round=function(){var x=[this.x,this.y,this.width,this.height].map(function(n){return Math.round(n)}),t=x[0],e=x[1],i=x[2],r=x[3];return new n({x:t,y:e,width:i,height:r})},n.prototype.floor=function(){var x=[this.x,this.y,this.width,this.height].map(function(n){return Math.floor(n)}),t=x[0],e=x[1],i=x[2],r=x[3];return new n({x:t,y:e,width:i,height:r})},n.prototype.toSquare=function(){var x=this,t=x.x,e=x.y,i=x.width,r=x.height,o=Math.abs(i-r);return i<r&&(t-=o/2,i+=o),r<i&&(e-=o/2,r+=o),new n({x:t,y:e,width:i,height:r})},n.prototype.rescale=function(x){var t=Mm(x)?x.width:x,e=Mm(x)?x.height:x;return new n({x:this.x*t,y:this.y*e,width:this.width*t,height:this.height*e})},n.prototype.pad=function(x,t){var e=[this.x-x/2,this.y-t/2,this.width+x,this.height+t],i=e[0],r=e[1],o=e[2],s=e[3];return new n({x:i,y:r,width:o,height:s})},n.prototype.clipAtImageBorders=function(x,t){var e=this,i=e.x,r=e.y,o=e.right,s=e.bottom,h=Math.max(i,0),u=Math.max(r,0),a=o-h,g=s-u,l=Math.min(a,x-h),c=Math.min(g,t-u);return new n({x:h,y:u,width:l,height:c}).floor()},n.prototype.shift=function(x,t){var e=this,i=e.width,r=e.height,o=this.x+x,s=this.y+t;return new n({x:o,y:s,width:i,height:r})},n.prototype.padAtBorders=function(n,x){var t=this.width+1,e=this.height+1,i=1,r=1,o=t,s=e,h=this.left,u=this.top,a=this.right,g=this.bottom;return a>x&&(o=-a+x+t,a=x),g>n&&(s=-g+n+e,g=n),h<1&&(s=2-h,h=1),u<1&&(s=2-u,u=1),{dy:r,edy:s,dx:i,edx:o,y:u,ey:g,x:h,ex:a,w:t,h:e}},n.prototype.calibrate=function(x){return new n({left:this.left+x.left*this.width,top:this.top+x.top*this.height,right:this.right+x.right*this.width,bottom:this.bottom+x.bottom*this.height}).toSquare().round()},n}(),Wm=function(n){function x(x,t,e,i,r){return void 0===r&&(r=!1),n.call(this,{left:x,top:t,right:e,bottom:i},r)||this}return km(x,n),x}(Vm),Qm=function(){function n(n,x,t,e,i){this._imageDims=new Sm(i.width,i.height),this._score=n,this._classScore=x,this._className=t,this._box=new Vm(e).rescale(this._imageDims)}return Object.defineProperty(n.prototype,"score",{get:function(){return this._score},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"classScore",{get:function(){return this._classScore},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"className",{get:function(){return this._className},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"box",{get:function(){return this._box},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"imageDims",{get:function(){return this._imageDims},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"imageWidth",{get:function(){return this.imageDims.width},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"imageHeight",{get:function(){return this.imageDims.height},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"relativeBox",{get:function(){return new Vm(this._box).rescale(this.imageDims.reverse())},enumerable:!0,configurable:!0}),n.prototype.forSize=function(x,t){return new n(this.score,this.classScore,this.className,this.relativeBox,{width:x,height:t})},n}(),Gm=function(n){function x(x,t,e){return n.call(this,x,x,"",t,e)||this}return km(x,n),x.prototype.forSize=function(t,e){var i=n.prototype.forSize.call(this,t,e),r=i.score,o=i.relativeBox,s=i.imageDims;return new x(r,o,s)},x}(Qm);function Km(n){var x=n.map(function(n){return n.x}),t=n.map(function(n){return n.y}),e=x.reduce(function(n,x){return x<n?x:n},1/0),i=t.reduce(function(n,x){return x<n?x:n},1/0),r=x.reduce(function(n,x){return n<x?x:n},0),o=t.reduce(function(n,x){return n<x?x:n},0);return new Wm(e,i,r,o)}function Ym(n,x,t){void 0===t&&(t=!0);var e=Math.max(0,Math.min(n.right,x.right)-Math.max(n.left,x.left)),i=Math.max(0,Math.min(n.bottom,x.bottom)-Math.max(n.top,x.top)),r=e*i;return t?r/(n.area+x.area-r):r/Math.min(n.area,x.area)}function Jm(n,x,t,e){void 0===e&&(e=!0);var i=x.map(function(n,x){return{score:n,boxIndex:x}}).sort(function(n,x){return n.score-x.score}).map(function(n){return n.boxIndex}),r=[],o=function(){var x=i.pop();r.push(x);for(var o=i,s=[],h=0;h<o.length;h++){var u=o[h],a=n[x],g=n[u];s.push(Ym(a,g,e))}i=i.filter(function(n,x){return s[x]<=t})};while(i.length>0)o();return r}function Xm(n,x){return bs(function(){var t=x[0],e=x[1],i=x[2],r=$s(Em(n.shape.slice(0,3),[1]),t),o=$s(Em(n.shape.slice(0,3),[1]),e),s=$s(Em(n.shape.slice(0,3),[1]),i),h=ih([r,o,s],3);return vd(n,h)})}function Zm(n,x){return void 0===x&&(x=!1),bs(function(){var t=n.shape.slice(1),e=t[0],i=t[1];if(e===i)return n;var r=Math.abs(e-i),o=Math.round(r*(x?.5:1)),s=e>i?2:1,h=function(x){var t=n.shape.slice();return t[s]=x,$s(t,0)},u=h(o),a=r-u.shape[s],g=x&&a?h(a):null,l=[g,n,u].filter(function(n){return!!n}).map(function(n){return n.toFloat()});return ih(l,s)})}function $m(n){return 1/(1+Math.exp(-n))}var nb,xb=function(n){function x(x,t,e,i,r){return void 0===r&&(r=!1),n.call(this,{x:x,y:t,width:e,height:i},r)||this}return km(x,n),x}(Vm),tb=.5,eb=.43,ib=.45,rb=function(){function n(n,x,t){void 0===t&&(t=new Um(0,0));var e=x.width,i=x.height;this._imgDims=new Sm(e,i),this._shift=t,this._positions=n.map(function(n){return n.mul(new Um(e,i)).add(t)})}return Object.defineProperty(n.prototype,"shift",{get:function(){return new Um(this._shift.x,this._shift.y)},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"imageWidth",{get:function(){return this._imgDims.width},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"imageHeight",{get:function(){return this._imgDims.height},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"positions",{get:function(){return this._positions},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"relativePositions",{get:function(){var n=this;return this._positions.map(function(x){return x.sub(n._shift).div(new Um(n.imageWidth,n.imageHeight))})},enumerable:!0,configurable:!0}),n.prototype.forSize=function(n,x){return new this.constructor(this.relativePositions,{width:n,height:x})},n.prototype.shiftBy=function(n,x){return new this.constructor(this.relativePositions,this._imgDims,new Um(n,x))},n.prototype.shiftByPoint=function(n){return this.shiftBy(n.x,n.y)},n.prototype.align=function(n,x){if(void 0===x&&(x={}),n){var t=n instanceof Gm?n.box.floor():new Vm(n);return this.shiftBy(t.x,t.y).align(null,x)}var e=Object.assign({},{useDlibAlignment:!1,minBoxPadding:.2},x),i=e.useDlibAlignment,r=e.minBoxPadding;return i?this.alignDlib():this.alignMinBbox(r)},n.prototype.alignDlib=function(){var n=this.getRefPointsForAlignment(),x=n[0],t=n[1],e=n[2],i=function(n){return e.sub(n).magnitude()},r=(i(x)+i(t))/2,o=Math.floor(r/ib),s=Fm(n),h=Math.floor(Math.max(0,s.x-tb*o)),u=Math.floor(Math.max(0,s.y-eb*o));return new xb(h,u,Math.min(o,this.imageWidth+h),Math.min(o,this.imageHeight+u))},n.prototype.alignMinBbox=function(n){var x=Km(this.positions);return x.pad(x.width*n,x.height*n)},n.prototype.getRefPointsForAlignment=function(){throw new Error("getRefPointsForAlignment not implemented by base class")},n}(),ob=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.getRefPointsForAlignment=function(){var n=this.positions;return[n[0],n[1],Fm([n[3],n[4]])]},x}(rb),sb=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.getJawOutline=function(){return this.positions.slice(0,17)},x.prototype.getLeftEyeBrow=function(){return this.positions.slice(17,22)},x.prototype.getRightEyeBrow=function(){return this.positions.slice(22,27)},x.prototype.getNose=function(){return this.positions.slice(27,36)},x.prototype.getLeftEye=function(){return this.positions.slice(36,42)},x.prototype.getRightEye=function(){return this.positions.slice(42,48)},x.prototype.getMouth=function(){return this.positions.slice(48,68)},x.prototype.getRefPointsForAlignment=function(){return[this.getLeftEye(),this.getRightEye(),this.getMouth()].map(Fm)},x}(rb),hb=function(){function n(n,x){this._label=n,this._distance=x}return Object.defineProperty(n.prototype,"label",{get:function(){return this._label},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"distance",{get:function(){return this._distance},enumerable:!0,configurable:!0}),n.prototype.toString=function(n){return void 0===n&&(n=!0),this.label+(n?" ("+Bm(this.distance)+")":"")},n}(),ub=function(n){function x(x,t){var e=n.call(this,x)||this;return e._label=t,e}return km(x,n),x.assertIsValidLabeledBox=function(n,x){if(Vm.assertIsValidBox(n,x),!Lm(n.label))throw new Error(x+" - expected property label ("+n.label+") to be a number")},Object.defineProperty(x.prototype,"label",{get:function(){return this._label},enumerable:!0,configurable:!0}),x}(Vm),ab=function(){function n(n,x){if("string"!==typeof n)throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(x)||x.some(function(n){return!(n instanceof Float32Array)}))throw new Error("LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array");this._label=n,this._descriptors=x}return Object.defineProperty(n.prototype,"label",{get:function(){return this._label},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"descriptors",{get:function(){return this._descriptors},enumerable:!0,configurable:!0}),n.prototype.toJSON=function(){return{label:this.label,descriptors:this.descriptors.map(function(n){return Array.from(n)})}},n.fromJSON=function(x){var t=x.descriptors.map(function(n){return new Float32Array(n)});return new n(x.label,t)},n}();(function(n){function x(x,t,e,i){var r=n.call(this,x,t)||this;return r._score=e,r._classScore=i,r}km(x,n),x.assertIsValidPredictedBox=function(n,x){if(ub.assertIsValidLabeledBox(n,x),!Hm(n.score)||!Hm(n.classScore))throw new Error(x+" - expected properties score ("+n.score+") and ("+n.classScore+") to be a number between [0, 1]")},Object.defineProperty(x.prototype,"score",{get:function(){return this._score},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,"classScore",{get:function(){return this._classScore},enumerable:!0,configurable:!0})})(ub);function gb(n){return n["detection"]instanceof Gm}function lb(n,x){var t={detection:x};return Object.assign({},n,t)}function cb(){var n=window["fetch"]||function(){throw new Error("fetch - missing fetch implementation for browser environment")},x=function(){throw new Error("readFile - filesystem not available for browser environment")};return{Canvas:HTMLCanvasElement,CanvasRenderingContext2D:CanvasRenderingContext2D,Image:HTMLImageElement,ImageData:ImageData,Video:HTMLVideoElement,createCanvasElement:function(){return document.createElement("canvas")},createImageElement:function(){return document.createElement("img")},fetch:n,readFile:x}}function db(n){var x="";if(!n)try{n=e(Object(function(){var n=new Error("Cannot find module 'fs'");throw n.code="MODULE_NOT_FOUND",n}()))}catch(i){x=i.toString()}var t=n?function(x){return new Promise(function(t,e){n.readFile(x,function(n,x){return n?e(n):t(x)})})}:function(){throw new Error("readFile - failed to require fs in nodejs environment with error: "+x)};return{readFile:t}}function fb(){var n=e.g["Canvas"]||e.g["HTMLCanvasElement"],x=e.g["Image"]||e.g["HTMLImageElement"],t=function(){if(n)return new n;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},i=function(){if(x)return new x;throw new Error("createImageElement - missing Image implementation for nodejs environment")},r=e.g["fetch"]||function(){throw new Error("fetch - missing fetch implementation for nodejs environment")},o=db();return qm({Canvas:n||function(){function n(){}return n}(),CanvasRenderingContext2D:e.g["CanvasRenderingContext2D"]||function(){function n(){}return n}(),Image:x||function(){function n(){}return n}(),ImageData:e.g["ImageData"]||function(){function n(){}return n}(),Video:e.g["HTMLVideoElement"]||function(){function n(){}return n}(),createCanvasElement:t,createImageElement:i,fetch:r},o)}function pb(){return"object"===typeof window&&"undefined"!==typeof document&&"undefined"!==typeof HTMLImageElement&&"undefined"!==typeof HTMLCanvasElement&&"undefined"!==typeof HTMLVideoElement&&"undefined"!==typeof ImageData&&"undefined"!==typeof CanvasRenderingContext2D}function yb(){return"object"===typeof e.g&&"undefined"!==typeof process&&!!process.version}function mb(){if(!nb)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return nb}function bb(n){nb=n}function zb(){pb()&&bb(cb()),yb()&&bb(fb())}function vb(n){if(nb||zb(),!nb)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");var x=n.Canvas,t=void 0===x?nb.Canvas:x,e=n.Image,i=void 0===e?nb.Image:e;nb.Canvas=t,nb.Image=i,nb.createCanvasElement=n.createCanvasElement||function(){return new t},nb.createImageElement=n.createImageElement||function(){return new i},nb.ImageData=n.ImageData||nb.ImageData,nb.Video=n.Video||nb.Video,nb.fetch=n.fetch||nb.fetch,nb.readFile=n.readFile||nb.readFile}var jb,wb={getEnv:mb,setEnv:bb,initialize:zb,createBrowserEnv:cb,createFileSystem:db,createNodejsEnv:fb,monkeyPatch:vb,isBrowser:pb,isNodejs:yb};function kb(n){return wb.isNodejs()||"string"!==typeof n?n:document.getElementById(n)}function qb(n){var x=wb.getEnv(),t=x.Canvas,e=x.CanvasRenderingContext2D;if(n instanceof e)return n;var i=kb(n);if(!(i instanceof t))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");var r=i.getContext("2d");if(!r)throw new Error("resolveContext2d - canvas 2d context is null");return r}zb(),function(n){n["TOP_LEFT"]="TOP_LEFT",n["TOP_RIGHT"]="TOP_RIGHT",n["BOTTOM_LEFT"]="BOTTOM_LEFT",n["BOTTOM_RIGHT"]="BOTTOM_RIGHT"}(jb||(jb={}));var Cb=function(){function n(n){void 0===n&&(n={});var x=n.anchorPosition,t=n.backgroundColor,e=n.fontColor,i=n.fontSize,r=n.fontStyle,o=n.padding;this.anchorPosition=x||jb.TOP_LEFT,this.backgroundColor=t||"rgba(0, 0, 0, 0.5)",this.fontColor=e||"rgba(255, 255, 255, 1)",this.fontSize=i||14,this.fontStyle=r||"Georgia",this.padding=o||4}return n}(),Ab=function(){function n(x,t,e){void 0===e&&(e={}),this.text="string"===typeof x?[x]:x instanceof n?x.text:x,this.anchor=t,this.options=new Cb(e)}return n.prototype.measureWidth=function(n){var x=this.options.padding;return this.text.map(function(x){return n.measureText(x).width}).reduce(function(n,x){return n<x?x:n},0)+2*x},n.prototype.measureHeight=function(){var n=this.options,x=n.fontSize,t=n.padding;return this.text.length*x+2*t},n.prototype.getUpperLeft=function(n,x){var t=this.options.anchorPosition,e=t===jb.BOTTOM_RIGHT||t===jb.TOP_RIGHT,i=t===jb.BOTTOM_LEFT||t===jb.BOTTOM_RIGHT,r=this.measureWidth(n),o=this.measureHeight(),s=e?this.anchor.x-r:this.anchor.x,h=i?this.anchor.y-o:this.anchor.y;if(x){var u=x.width,a=x.height,g=Math.max(Math.min(s,u-r),0),l=Math.max(Math.min(h,a-o),0);return{x:g,y:l}}return{x:s,y:h}},n.prototype.draw=function(n){var x=kb(n),t=qb(x),e=this.options,i=e.backgroundColor,r=e.fontColor,o=e.fontSize,s=e.fontStyle,h=e.padding;t.font=o+"px "+s;var u=this.measureWidth(t),a=this.measureHeight();t.fillStyle=i;var g=this.getUpperLeft(t,x);t.fillRect(g.x,g.y,u,a),t.fillStyle=r,this.text.forEach(function(n,x){var e=h+g.x,i=h+g.y+(x+1)*o;t.fillText(n,e,i)})},n}(),Eb=function(){function n(n){void 0===n&&(n={});var x=n.boxColor,t=n.lineWidth,e=n.label,i=n.drawLabelOptions;this.boxColor=x||"rgba(0, 0, 255, 1)",this.lineWidth=t||2,this.label=e;var r={anchorPosition:jb.BOTTOM_LEFT,backgroundColor:this.boxColor};this.drawLabelOptions=new Cb(Object.assign({},r,i))}return n}();(function(){function n(n,x){void 0===x&&(x={}),this.box=new Vm(n),this.options=new Eb(x)}n.prototype.draw=function(n){var x=qb(n),t=this.options,e=t.boxColor,i=t.lineWidth,r=this.box,o=r.x,s=r.y,h=r.width,u=r.height;x.strokeStyle=e,x.lineWidth=i,x.strokeRect(o,s,h,u);var a=this.options.label;a&&new Ab([a],{x:o-i/2,y:s},this.options.drawLabelOptions).draw(n)}})();function Sb(n){var x=wb.getEnv(),t=x.Image,e=x.Video;return n instanceof t&&n.complete||n instanceof e&&n.readyState>=3}function Ib(n){return new Promise(function(x,t){if(n instanceof wb.getEnv().Canvas||Sb(n))return x();function e(n){n.currentTarget&&(n.currentTarget.removeEventListener("load",e),n.currentTarget.removeEventListener("error",i),x(n))}function i(n){n.currentTarget&&(n.currentTarget.removeEventListener("load",e),n.currentTarget.removeEventListener("error",i),t(n))}n.addEventListener("load",e),n.addEventListener("error",i)})}function Db(n){var x=wb.getEnv(),t=x.Image,e=x.Video;return n instanceof t?new Sm(n.naturalWidth,n.naturalHeight):n instanceof e?new Sm(n.videoWidth,n.videoHeight):new Sm(n.width,n.height)}function Ob(n){var x=n.width,t=n.height,e=wb.getEnv().createCanvasElement,i=e();return i.width=x,i.height=t,i}function _b(n,x){var t=wb.getEnv().ImageData;if(!(n instanceof t)&&!Sb(n))throw new Error("createCanvasFromMedia - media has not finished loading yet");var e=x||Db(n),i=e.width,r=e.height,o=Ob({width:i,height:r});return n instanceof t?qb(o).putImageData(n,0,0):qb(o).drawImage(n,0,0,i,r),o}function Tb(n,x){return Cm(this,void 0,void 0,function(){var t,e,i,r,o,s;return Am(this,function(h){switch(h.label){case 0:return t=x||wb.getEnv().createCanvasElement(),e=n.shape.slice(_m(n)?1:0),i=e[0],r=e[1],o=e[2],s=bs(function(){return n.as3D(i,r,o).toInt()}),[4,im.toPixels(s,t)];case 1:return h.sent(),s.dispose(),[2,t]}})})}function Rb(n){var x=wb.getEnv(),t=x.Image,e=x.Canvas,i=x.Video;return n instanceof t||n instanceof e||n instanceof i}function Bb(n,x,t){void 0===t&&(t=!1);var e=wb.getEnv(),i=e.Image,r=e.Canvas;if(!(n instanceof i||n instanceof r))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");var o=Db(n),s=x/Math.max(o.height,o.width),h=s*o.width,u=s*o.height,a=Ob({width:x,height:x}),g=n instanceof r?n:_b(n),l=Math.abs(h-u)/2,c=t&&h<u?l:0,d=t&&u<h?l:0;return qb(a).drawImage(g,c,d,h,u),a}var Mb=function(){function n(n,x){var t=this;if(void 0===x&&(x=!1),this._imageTensors=[],this._canvases=[],this._treatAsBatchInput=!1,this._inputDimensions=[],!Array.isArray(n))throw new Error("NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have "+n);this._treatAsBatchInput=x,this._batchSize=n.length,n.forEach(function(n,x){if(Om(n))return t._imageTensors[x]=n,void(t._inputDimensions[x]=n.shape);if(_m(n)){var e=n.shape[0];if(1!==e)throw new Error("NetInput - tf.Tensor4D with batchSize "+e+" passed, but not supported in input array");return t._imageTensors[x]=n,void(t._inputDimensions[x]=n.shape.slice(1))}var i=n instanceof wb.getEnv().Canvas?n:_b(n);t._canvases[x]=i,t._inputDimensions[x]=[i.height,i.width,3]})}return Object.defineProperty(n.prototype,"imageTensors",{get:function(){return this._imageTensors},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"canvases",{get:function(){return this._canvases},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"isBatchInput",{get:function(){return this.batchSize>1||this._treatAsBatchInput},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"batchSize",{get:function(){return this._batchSize},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"inputDimensions",{get:function(){return this._inputDimensions},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"inputSize",{get:function(){return this._inputSize},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"reshapedInputDimensions",{get:function(){var n=this;return Pm(this.batchSize,0,1).map(function(x,t){return n.getReshapedInputDimensions(t)})},enumerable:!0,configurable:!0}),n.prototype.getInput=function(n){return this.canvases[n]||this.imageTensors[n]},n.prototype.getInputDimensions=function(n){return this._inputDimensions[n]},n.prototype.getInputHeight=function(n){return this._inputDimensions[n][0]},n.prototype.getInputWidth=function(n){return this._inputDimensions[n][1]},n.prototype.getReshapedInputDimensions=function(n){if("number"!==typeof this.inputSize)throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");var x=this.getInputWidth(n),t=this.getInputHeight(n);return Nm({width:x,height:t},this.inputSize)},n.prototype.toBatchTensor=function(n,x){var t=this;return void 0===x&&(x=!0),this._inputSize=n,bs(function(){var e=Pm(t.batchSize,0,1).map(function(e){var i=t.getInput(e);if(i instanceof Kr){var r=_m(i)?i:i.expandDims();return r=Zm(r,x),r.shape[1]===n&&r.shape[2]===n||(r=Tp.resizeBilinear(r,[n,n])),r.as3D(n,n,3)}if(i instanceof wb.getEnv().Canvas)return im.fromPixels(Bb(i,n,x));throw new Error("toBatchTensor - at batchIdx "+e+", expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have "+i)}),i=Qh(e.map(function(n){return n.toFloat()})).as4D(t.batchSize,n,n,3);return i})},n}();function Nb(n){return Cm(this,void 0,void 0,function(){var x,t,e;return Am(this,function(i){switch(i.label){case 0:if(n instanceof Mb)return[2,n];if(x=Array.isArray(n)?n:[n],!x.length)throw new Error("toNetInput - empty array passed as input");return t=function(x){return Array.isArray(n)?" at input index "+x+":":""},e=x.map(kb),e.forEach(function(n,e){if(!Rb(n)&&!Om(n)&&!_m(n)){if("string"===typeof x[e])throw new Error("toNetInput -"+t(e)+" string passed, but could not resolve HTMLElement for element id "+x[e]);throw new Error("toNetInput -"+t(e)+" expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id")}if(_m(n)){var i=n.shape[0];if(1!==i)throw new Error("toNetInput -"+t(e)+" tf.Tensor4D with batchSize "+i+" passed, but not supported in input array")}}),[4,Promise.all(e.map(function(n){return Rb(n)&&Ib(n)}))];case 1:return i.sent(),[2,new Mb(e,Array.isArray(n))]}})})}function Fb(n,x){return Cm(this,void 0,void 0,function(){var t,e,i,r,o,s,h;return Am(this,function(u){switch(u.label){case 0:return t=wb.getEnv().Canvas,e=n,n instanceof t?[3,5]:[4,Nb(n)];case 1:if(i=u.sent(),i.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");return r=i.getInput(0),r instanceof t?(o=r,[3,4]):[3,2];case 2:return[4,Tb(r)];case 3:o=u.sent(),u.label=4;case 4:e=o,u.label=5;case 5:return s=qb(e),h=x.map(function(n){return n instanceof Gm?n.forSize(e.width,e.height).box.floor():n}).map(function(n){return n.clipAtImageBorders(e.width,e.height)}),[2,h.map(function(n){var x=n.x,t=n.y,e=n.width,i=n.height,r=Ob({width:e,height:i});return qb(r).putImageData(s.getImageData(x,t,e,i),0,0),r})]}})})}function Pb(n,x){return Cm(this,void 0,void 0,function(){return Am(this,function(t){if(!Om(n)&&!_m(n))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(_m(n)&&n.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return[2,bs(function(){var t=n.shape.slice(_m(n)?1:0),e=t[0],i=t[1],r=t[2],o=x.map(function(n){return n instanceof Gm?n.forSize(i,e).box:n}).map(function(n){return n.clipAtImageBorders(i,e)}),s=o.map(function(x){var t=x.x,o=x.y,s=x.width,h=x.height;return bf(n.as3D(e,i,r),[o,t,0],[h,s,r])});return s})]})})}function Lb(n,x){return Cm(this,void 0,void 0,function(){var t,e;return Am(this,function(i){switch(i.label){case 0:return t=wb.getEnv().fetch,[4,t(n,x)];case 1:if(e=i.sent(),!(e.status<400))throw new Error("failed to fetch: ("+e.status+") "+e.statusText+", from url: "+e.url);return[2,e]}})})}function Hb(n){return Cm(this,void 0,void 0,function(){return Am(this,function(x){switch(x.label){case 0:return[4,Lb(n)];case 1:return[2,x.sent().json()]}})})}function Ub(n,x){var t=x+"-weights_manifest.json";if(!n)return{modelBaseUri:"",manifestUri:t};if("/"===n)return{modelBaseUri:"/",manifestUri:"/"+t};var e=n.startsWith("http://")?"http://":n.startsWith("https://")?"https://":"";n=n.replace(e,"");var i=n.split("/").filter(function(n){return n}),r=n.endsWith(".json")?i[i.length-1]:t,o=e+(n.endsWith(".json")?i.slice(0,i.length-1):i).join("/");return o=n.startsWith("/")?"/"+o:o,{modelBaseUri:o,manifestUri:"/"===o?"/"+r:o+"/"+r}}function Vb(n,x){return Cm(this,void 0,void 0,function(){var t,e,i,r;return Am(this,function(o){switch(o.label){case 0:return t=Ub(n,x),e=t.manifestUri,i=t.modelBaseUri,[4,Hb(e)];case 1:return r=o.sent(),[2,xm.loadWeights(r,i)]}})})}var Wb=function(){function n(n){this._name=n,this._params=void 0,this._paramMappings=[]}return Object.defineProperty(n.prototype,"params",{get:function(){return this._params},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"paramMappings",{get:function(){return this._paramMappings},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"isLoaded",{get:function(){return!!this.params},enumerable:!0,configurable:!0}),n.prototype.getParamFromPath=function(n){var x=this.traversePropertyPath(n),t=x.obj,e=x.objProp;return t[e]},n.prototype.reassignParamFromPath=function(n,x){var t=this.traversePropertyPath(n),e=t.obj,i=t.objProp;e[i].dispose(),e[i]=x},n.prototype.getParamList=function(){var n=this;return this._paramMappings.map(function(x){var t=x.paramPath;return{path:t,tensor:n.getParamFromPath(t)}})},n.prototype.getTrainableParams=function(){return this.getParamList().filter(function(n){return n.tensor instanceof no})},n.prototype.getFrozenParams=function(){return this.getParamList().filter(function(n){return!(n.tensor instanceof no)})},n.prototype.variable=function(){var n=this;this.getFrozenParams().forEach(function(x){var t=x.path,e=x.tensor;n.reassignParamFromPath(t,e.variable())})},n.prototype.freeze=function(){var n=this;this.getTrainableParams().forEach(function(x){var t=x.path,e=x.tensor,i=Ls(e.dataSync());e.dispose(),n.reassignParamFromPath(t,i)})},n.prototype.dispose=function(n){void 0===n&&(n=!0),this.getParamList().forEach(function(x){if(n&&x.tensor.isDisposed)throw new Error("param tensor has already been disposed for path "+x.path);x.tensor.dispose()}),this._params=void 0},n.prototype.serializeParams=function(){return new Float32Array(this.getParamList().map(function(n){var x=n.tensor;return Array.from(x.dataSync())}).reduce(function(n,x){return n.concat(x)}))},n.prototype.load=function(n){return Cm(this,void 0,void 0,function(){return Am(this,function(x){switch(x.label){case 0:return n instanceof Float32Array?(this.extractWeights(n),[2]):[4,this.loadFromUri(n)];case 1:return x.sent(),[2]}})})},n.prototype.loadFromUri=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:if(n&&"string"!==typeof n)throw new Error(this._name+".loadFromUri - expected model uri");return[4,Vb(n,this.getDefaultModelName())];case 1:return x=t.sent(),this.loadFromWeightMap(x),[2]}})})},n.prototype.loadFromDisk=function(n){return Cm(this,void 0,void 0,function(){var x,t,e,i,r,o,s,h,u,a;return Am(this,function(g){switch(g.label){case 0:if(n&&"string"!==typeof n)throw new Error(this._name+".loadFromDisk - expected model file path");return x=wb.getEnv().readFile,t=Ub(n,this.getDefaultModelName()),e=t.manifestUri,i=t.modelBaseUri,r=function(n){return Promise.all(n.map(function(n){return x(n).then(function(n){return n.buffer})}))},o=xm.weightsLoaderFactory(r),u=(h=JSON).parse,[4,x(e)];case 1:return s=u.apply(h,[g.sent().toString()]),[4,o(s,i)];case 2:return a=g.sent(),this.loadFromWeightMap(a),[2]}})})},n.prototype.loadFromWeightMap=function(n){var x=this.extractParamsFromWeigthMap(n),t=x.paramMappings,e=x.params;this._paramMappings=t,this._params=e},n.prototype.extractWeights=function(n){var x=this.extractParams(n),t=x.paramMappings,e=x.params;this._paramMappings=t,this._params=e},n.prototype.traversePropertyPath=function(n){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");var x=n.split("/").reduce(function(x,t){if(!x.nextObj.hasOwnProperty(t))throw new Error("traversePropertyPath - object does not have property "+t+", for path "+n);return{obj:x.nextObj,objProp:t,nextObj:x.nextObj[t]}},{nextObj:this.params}),t=x.obj,e=x.objProp;if(!t||!e||!(t[e]instanceof Kr))throw new Error("traversePropertyPath - parameter is not a tensor, for path "+n);return{obj:t,objProp:e}},n}();function Qb(n,x,t){return bs(function(){var e=Xd(n,x.depthwise_filter,x.pointwise_filter,t,"same");return e=td(e,x.bias),e})}function Gb(n,x,t){return void 0===t&&(t=!1),bs(function(){var e=Bf(t?td(Vd(n,x.conv0.filters,[2,2],"same"),x.conv0.bias):Qb(n,x.conv0,[2,2])),i=Qb(e,x.conv1,[1,1]),r=Bf(td(e,i)),o=Qb(r,x.conv2,[1,1]);return Bf(td(e,td(i,o)))})}function Kb(n,x,t,e){return void 0===t&&(t=!1),void 0===e&&(e=!0),bs(function(){var i=Bf(t?td(Vd(n,x.conv0.filters,e?[2,2]:[1,1],"same"),x.conv0.bias):Qb(n,x.conv0,e?[2,2]:[1,1])),r=Qb(i,x.conv1,[1,1]),o=Bf(td(i,r)),s=Qb(o,x.conv2,[1,1]),h=Bf(td(i,td(r,s))),u=Qb(h,x.conv3,[1,1]);return Bf(td(i,td(r,td(s,u))))})}function Yb(n,x,t,e){return void 0===t&&(t="same"),void 0===e&&(e=!1),bs(function(){var i=td(Vd(n,x.filters,[1,1],t),x.bias);return e?Bf(i):i})}function Jb(n,x){Object.keys(n).forEach(function(t){x.some(function(n){return n.originalPath===t})||n[t].dispose()})}function Xb(n,x){return function(t,e,i,r){var o=Gs(n(t*e*i*i),[i,i,t,e]),s=Vs(n(e));return x.push({paramPath:r+"/filters"},{paramPath:r+"/bias"}),{filters:o,bias:s}}}function Zb(n,x){return function(t,e,i){var r=Ws(n(t*e),[t,e]),o=Vs(n(e));return x.push({paramPath:i+"/weights"},{paramPath:i+"/bias"}),{weights:r,bias:o}}}var $b=function(){function n(n,x,t){this.depthwise_filter=n,this.pointwise_filter=x,this.bias=t}return n}();function nz(n,x){return function(t,e,i){var r=Gs(n(9*t),[3,3,t,1]),o=Gs(n(t*e),[1,1,t,e]),s=Vs(n(e));return x.push({paramPath:i+"/depthwise_filter"},{paramPath:i+"/pointwise_filter"},{paramPath:i+"/bias"}),new $b(r,o,s)}}function xz(n){return function(x){var t=n(x+"/depthwise_filter",4),e=n(x+"/pointwise_filter",4),i=n(x+"/bias",1);return new $b(t,e,i)}}function tz(n,x){return function(t,e,i){var r=n[t];if(!Im(r,e))throw new Error("expected weightMap["+t+"] to be a Tensor"+e+"D, instead have "+r);return x.push({originalPath:t,paramPath:i||t}),r}}function ez(n){var x=n;function t(n){var t=x.slice(0,n);return x=x.slice(n),t}function e(){return x}return{extractWeights:t,getRemainingWeights:e}}function iz(n,x){var t=Xb(n,x),e=nz(n,x);function i(n,x,i,r){void 0===r&&(r=!1);var o=r?t(n,x,3,i+"/conv0"):e(n,x,i+"/conv0"),s=e(x,x,i+"/conv1"),h=e(x,x,i+"/conv2");return{conv0:o,conv1:s,conv2:h}}function r(n,x,t,r){void 0===r&&(r=!1);var o=i(n,x,t,r),s=o.conv0,h=o.conv1,u=o.conv2,a=e(x,x,t+"/conv3");return{conv0:s,conv1:h,conv2:u,conv3:a}}return{extractDenseBlock3Params:i,extractDenseBlock4Params:r}}function rz(n){var x=[],t=ez(n),e=t.extractWeights,i=t.getRemainingWeights,r=iz(e,x).extractDenseBlock4Params,o=r(3,32,"dense0",!0),s=r(32,64,"dense1"),h=r(64,128,"dense2"),u=r(128,256,"dense3");if(0!==i().length)throw new Error("weights remaing after extract: "+i().length);return{paramMappings:x,params:{dense0:o,dense1:s,dense2:h,dense3:u}}}function oz(n){return function(x){var t=n(x+"/filters",4),e=n(x+"/bias",1);return{filters:t,bias:e}}}function sz(n,x){var t=tz(n,x),e=oz(t),i=xz(t);function r(n,x){void 0===x&&(x=!1);var t=x?e(n+"/conv0"):i(n+"/conv0"),r=i(n+"/conv1"),o=i(n+"/conv2");return{conv0:t,conv1:r,conv2:o}}function o(n,x){void 0===x&&(x=!1);var t=x?e(n+"/conv0"):i(n+"/conv0"),r=i(n+"/conv1"),o=i(n+"/conv2"),s=i(n+"/conv3");return{conv0:t,conv1:r,conv2:o,conv3:s}}return{extractDenseBlock3Params:r,extractDenseBlock4Params:o}}function hz(n){var x=[],t=sz(n,x).extractDenseBlock4Params,e={dense0:t("dense0",!0),dense1:t("dense1"),dense2:t("dense2"),dense3:t("dense3")};return Jb(n,x),{params:e,paramMappings:x}}var uz=function(n){function x(){return n.call(this,"FaceFeatureExtractor")||this}return km(x,n),x.prototype.forwardInput=function(n){var x=this.params;if(!x)throw new Error("FaceFeatureExtractor - load model before inference");return bs(function(){var t=n.toBatchTensor(112,!0),e=[122.782,117.001,104.298],i=Xm(t,e).div(Us(255)),r=Kb(i,x.dense0,!0);return r=Kb(r,x.dense1),r=Kb(r,x.dense2),r=Kb(r,x.dense3),r=lf(r,[7,7],[2,2],"valid"),r})},x.prototype.forward=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=this.forwardInput,[4,Nb(n)];case 1:return[2,x.apply(this,[t.sent()])]}})})},x.prototype.getDefaultModelName=function(){return"face_feature_extractor_model"},x.prototype.extractParamsFromWeigthMap=function(n){return hz(n)},x.prototype.extractParams=function(n){return rz(n)},x}(Wb);function az(n,x){return bs(function(){return td(nf(n,x.weights),x.bias)})}function gz(n,x,t){var e=[],i=ez(n),r=i.extractWeights,o=i.getRemainingWeights,s=Zb(r,e),h=s(x,t,"fc");if(0!==o().length)throw new Error("weights remaing after extract: "+o().length);return{paramMappings:e,params:{fc:h}}}function lz(n){var x=[],t=tz(n,x);function e(n){var x=t(n+"/weights",2),e=t(n+"/bias",1);return{weights:x,bias:e}}var i={fc:e("fc")};return Jb(n,x),{params:i,paramMappings:x}}function cz(n){var x={},t={};return Object.keys(n).forEach(function(e){var i=e.startsWith("fc")?t:x;i[e]=n[e]}),{featureExtractorMap:x,classifierMap:t}}var dz=function(n){function x(x,t){var e=n.call(this,x)||this;return e._faceFeatureExtractor=t,e}return km(x,n),Object.defineProperty(x.prototype,"faceFeatureExtractor",{get:function(){return this._faceFeatureExtractor},enumerable:!0,configurable:!0}),x.prototype.runNet=function(n){var x=this,t=this.params;if(!t)throw new Error(this._name+" - load model before inference");return bs(function(){var e=n instanceof Mb?x.faceFeatureExtractor.forwardInput(n):n;return az(e.as2D(e.shape[0],-1),t.fc)})},x.prototype.dispose=function(x){void 0===x&&(x=!0),this.faceFeatureExtractor.dispose(x),n.prototype.dispose.call(this,x)},x.prototype.loadClassifierParams=function(n){var x=this.extractClassifierParams(n),t=x.params,e=x.paramMappings;this._params=t,this._paramMappings=e},x.prototype.extractClassifierParams=function(n){return gz(n,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())},x.prototype.extractParamsFromWeigthMap=function(n){var x=cz(n),t=x.featureExtractorMap,e=x.classifierMap;return this.faceFeatureExtractor.loadFromWeightMap(t),lz(e)},x.prototype.extractParams=function(n){var x=this.getClassifierChannelsIn(),t=this.getClassifierChannelsOut(),e=t*x+t,i=n.slice(0,n.length-e),r=n.slice(n.length-e);return this.faceFeatureExtractor.extractWeights(i),this.extractClassifierParams(r)},x}(Wb),fz=["neutral","happy","sad","angry","fearful","disgusted","surprised"],pz=function(){function n(n){var x=this;if(7!==n.length)throw new Error("FaceExpressions.constructor - expected probabilities.length to be 7, have: "+n.length);fz.forEach(function(t,e){x[t]=n[e]})}return n.prototype.asSortedArray=function(){var n=this;return fz.map(function(x){return{expression:x,probability:n[x]}}).sort(function(n,x){return x.probability-n.probability})},n}(),yz=function(n){function x(x){return void 0===x&&(x=new uz),n.call(this,"FaceExpressionNet",x)||this}return km(x,n),x.prototype.forwardInput=function(n){var x=this;return bs(function(){return yu(x.runNet(n))})},x.prototype.forward=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=this.forwardInput,[4,Nb(n)];case 1:return[2,x.apply(this,[t.sent()])]}})})},x.prototype.predictExpressions=function(n){return Cm(this,void 0,void 0,function(){var x,t,e,i,r=this;return Am(this,function(o){switch(o.label){case 0:return[4,Nb(n)];case 1:return x=o.sent(),[4,this.forwardInput(x)];case 2:return t=o.sent(),[4,Promise.all(Yh(t).map(function(n){return Cm(r,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return[4,n.data()];case 1:return x=t.sent(),n.dispose(),[2,x]}})})}))];case 3:return e=o.sent(),t.dispose(),i=e.map(function(n){return new pz(n)}),[2,x.isBatchInput?i:i[0]]}})})},x.prototype.getDefaultModelName=function(){return"face_expression_model"},x.prototype.getClassifierChannelsIn=function(){return 256},x.prototype.getClassifierChannelsOut=function(){return 7},x}(dz);function mz(n,x){var t={expressions:x};return Object.assign({},n,t)}function bz(n){return gb(n)&&n["landmarks"]instanceof rb&&n["unshiftedLandmarks"]instanceof rb&&n["alignedRect"]instanceof Gm}function zz(n,x){var t=n.detection.box,e=x.shiftBy(t.x,t.y),i=e.align(),r=n.detection.imageDims,o=new Gm(n.detection.score,i.rescale(r.reverse()),r),s={landmarks:e,unshiftedLandmarks:x,alignedRect:o};return Object.assign({},n,s)}var vz=function(){function n(n){void 0===n&&(n={});var x=n.drawLines,t=void 0===x||x,e=n.drawPoints,i=void 0===e||e,r=n.lineWidth,o=n.lineColor,s=n.pointSize,h=n.pointColor;this.drawLines=t,this.drawPoints=i,this.lineWidth=r||1,this.pointSize=s||2,this.lineColor=o||"rgba(0, 255, 255, 1)",this.pointColor=h||"rgba(255, 0, 255, 1)"}return n}();(function(){function n(n,x){void 0===x&&(x={}),this.faceLandmarks=n,this.options=new vz(x)}n.prototype.draw=function(n){var x=qb(n),t=this.options,e=t.drawLines,i=t.drawPoints,r=t.lineWidth,o=t.lineColor,s=t.pointSize,h=t.pointColor;if(e&&this.faceLandmarks instanceof sb&&(x.strokeStyle=o,x.lineWidth=r,jm(x,this.faceLandmarks.getJawOutline()),jm(x,this.faceLandmarks.getLeftEyeBrow()),jm(x,this.faceLandmarks.getRightEyeBrow()),jm(x,this.faceLandmarks.getNose()),jm(x,this.faceLandmarks.getLeftEye(),!0),jm(x,this.faceLandmarks.getRightEye(),!0),jm(x,this.faceLandmarks.getMouth(),!0)),i){x.strokeStyle=h,x.fillStyle=h;var u=function(n){x.beginPath(),x.arc(n.x,n.y,s,0,2*Math.PI),x.fill()};this.faceLandmarks.positions.forEach(u)}}})();function jz(n,x){var t=Xb(n,x),e=nz(n,x);function i(n,x,i){var r=e(n,x,i+"/separable_conv0"),o=e(x,x,i+"/separable_conv1"),s=t(n,x,1,i+"/expansion_conv");return{separable_conv0:r,separable_conv1:o,expansion_conv:s}}function r(n,x){var t=e(n,n,x+"/separable_conv0"),i=e(n,n,x+"/separable_conv1"),r=e(n,n,x+"/separable_conv2");return{separable_conv0:t,separable_conv1:i,separable_conv2:r}}return{extractConvParams:t,extractSeparableConvParams:e,extractReductionBlockParams:i,extractMainBlockParams:r}}function wz(n,x){var t=[],e=ez(n),i=e.extractWeights,r=e.getRemainingWeights,o=jz(i,t),s=o.extractConvParams,h=o.extractSeparableConvParams,u=o.extractReductionBlockParams,a=o.extractMainBlockParams,g=s(3,32,3,"entry_flow/conv_in"),l=u(32,64,"entry_flow/reduction_block_0"),c=u(64,128,"entry_flow/reduction_block_1"),d={conv_in:g,reduction_block_0:l,reduction_block_1:c},f={};Pm(x,0,1).forEach(function(n){f["main_block_"+n]=a(128,"middle_flow/main_block_"+n)});var p=u(128,256,"exit_flow/reduction_block"),y=h(256,512,"exit_flow/separable_conv"),m={reduction_block:p,separable_conv:y};if(0!==r().length)throw new Error("weights remaing after extract: "+r().length);return{paramMappings:t,params:{entry_flow:d,middle_flow:f,exit_flow:m}}}function kz(n,x){var t=tz(n,x),e=oz(t),i=xz(t);function r(n){var x=i(n+"/separable_conv0"),t=i(n+"/separable_conv1"),r=e(n+"/expansion_conv");return{separable_conv0:x,separable_conv1:t,expansion_conv:r}}function o(n){var x=i(n+"/separable_conv0"),t=i(n+"/separable_conv1"),e=i(n+"/separable_conv2");return{separable_conv0:x,separable_conv1:t,separable_conv2:e}}return{extractConvParams:e,extractSeparableConvParams:i,extractReductionBlockParams:r,extractMainBlockParams:o}}function qz(n,x){var t=[],e=kz(n,t),i=e.extractConvParams,r=e.extractSeparableConvParams,o=e.extractReductionBlockParams,s=e.extractMainBlockParams,h=i("entry_flow/conv_in"),u=o("entry_flow/reduction_block_0"),a=o("entry_flow/reduction_block_1"),g={conv_in:h,reduction_block_0:u,reduction_block_1:a},l={};Pm(x,0,1).forEach(function(n){l["main_block_"+n]=s("middle_flow/main_block_"+n)});var c=o("exit_flow/reduction_block"),d=r("exit_flow/separable_conv"),f={reduction_block:c,separable_conv:d};return Jb(n,t),{params:{entry_flow:g,middle_flow:l,exit_flow:f},paramMappings:t}}function Cz(n,x,t){return td(Vd(n,x.filters,t,"same"),x.bias)}function Az(n,x,t){void 0===t&&(t=!0);var e=t?Bf(n):n;return e=Qb(e,x.separable_conv0,[1,1]),e=Qb(Bf(e),x.separable_conv1,[1,1]),e=gf(e,[3,3],[2,2],"same"),e=td(e,Cz(n,x.expansion_conv,[2,2])),e}function Ez(n,x){var t=Qb(Bf(n),x.separable_conv0,[1,1]);return t=Qb(Bf(t),x.separable_conv1,[1,1]),t=Qb(Bf(t),x.separable_conv2,[1,1]),t=td(t,n),t}var Sz,Iz=function(n){function x(x){var t=n.call(this,"TinyXception")||this;return t._numMainBlocks=x,t}return km(x,n),x.prototype.forwardInput=function(n){var x=this,t=this.params;if(!t)throw new Error("TinyXception - load model before inference");return bs(function(){var e=n.toBatchTensor(112,!0),i=[122.782,117.001,104.298],r=Xm(e,i).div(Us(256)),o=Bf(Cz(r,t.entry_flow.conv_in,[2,2]));return o=Az(o,t.entry_flow.reduction_block_0,!1),o=Az(o,t.entry_flow.reduction_block_1),Pm(x._numMainBlocks,0,1).forEach(function(n){o=Ez(o,t.middle_flow["main_block_"+n])}),o=Az(o,t.exit_flow.reduction_block),o=Bf(Qb(o,t.exit_flow.separable_conv,[1,1])),o})},x.prototype.forward=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=this.forwardInput,[4,Nb(n)];case 1:return[2,x.apply(this,[t.sent()])]}})})},x.prototype.getDefaultModelName=function(){return"tiny_xception_model"},x.prototype.extractParamsFromWeigthMap=function(n){return qz(n,this._numMainBlocks)},x.prototype.extractParams=function(n){return wz(n,this._numMainBlocks)},x}(Wb);function Dz(n){var x=[],t=ez(n),e=t.extractWeights,i=t.getRemainingWeights,r=Zb(e,x),o=r(512,1,"fc/age"),s=r(512,2,"fc/gender");if(0!==i().length)throw new Error("weights remaing after extract: "+i().length);return{paramMappings:x,params:{fc:{age:o,gender:s}}}}function Oz(n){var x=[],t=tz(n,x);function e(n){var x=t(n+"/weights",2),e=t(n+"/bias",1);return{weights:x,bias:e}}var i={fc:{age:e("fc/age"),gender:e("fc/gender")}};return Jb(n,x),{params:i,paramMappings:x}}(function(n){n["FEMALE"]="female",n["MALE"]="male"})(Sz||(Sz={}));var _z=function(n){function x(x){void 0===x&&(x=new Iz(2));var t=n.call(this,"AgeGenderNet")||this;return t._faceFeatureExtractor=x,t}return km(x,n),Object.defineProperty(x.prototype,"faceFeatureExtractor",{get:function(){return this._faceFeatureExtractor},enumerable:!0,configurable:!0}),x.prototype.runNet=function(n){var x=this,t=this.params;if(!t)throw new Error(this._name+" - load model before inference");return bs(function(){var e=n instanceof Mb?x.faceFeatureExtractor.forwardInput(n):n,i=lf(e,[7,7],[2,2],"valid").as2D(e.shape[0],-1),r=az(i,t.fc.age).as1D(),o=az(i,t.fc.gender);return{age:r,gender:o}})},x.prototype.forwardInput=function(n){var x=this;return bs(function(){var t=x.runNet(n),e=t.age,i=t.gender;return{age:e,gender:yu(i)}})},x.prototype.forward=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=this.forwardInput,[4,Nb(n)];case 1:return[2,x.apply(this,[t.sent()])]}})})},x.prototype.predictAgeAndGender=function(n){return Cm(this,void 0,void 0,function(){var x,t,e,i,r,o,s=this;return Am(this,function(h){switch(h.label){case 0:return[4,Nb(n)];case 1:return x=h.sent(),[4,this.forwardInput(x)];case 2:return t=h.sent(),e=Yh(t.age),i=Yh(t.gender),r=e.map(function(n,x){return{ageTensor:n,genderTensor:i[x]}}),[4,Promise.all(r.map(function(n){var x=n.ageTensor,t=n.genderTensor;return Cm(s,void 0,void 0,function(){var n,e,i,r,o;return Am(this,function(s){switch(s.label){case 0:return[4,x.data()];case 1:return n=s.sent()[0],[4,t.data()];case 2:return e=s.sent()[0],i=e>.5,r=i?Sz.MALE:Sz.FEMALE,o=i?e:1-e,x.dispose(),t.dispose(),[2,{age:n,gender:r,genderProbability:o}]}})})}))];case 3:return o=h.sent(),t.age.dispose(),t.gender.dispose(),[2,x.isBatchInput?o:o[0]]}})})},x.prototype.getDefaultModelName=function(){return"age_gender_model"},x.prototype.dispose=function(x){void 0===x&&(x=!0),this.faceFeatureExtractor.dispose(x),n.prototype.dispose.call(this,x)},x.prototype.loadClassifierParams=function(n){var x=this.extractClassifierParams(n),t=x.params,e=x.paramMappings;this._params=t,this._paramMappings=e},x.prototype.extractClassifierParams=function(n){return Dz(n)},x.prototype.extractParamsFromWeigthMap=function(n){var x=cz(n),t=x.featureExtractorMap,e=x.classifierMap;return this.faceFeatureExtractor.loadFromWeightMap(t),Oz(e)},x.prototype.extractParams=function(n){var x=1539,t=n.slice(0,n.length-x),e=n.slice(n.length-x);return this.faceFeatureExtractor.extractWeights(t),this.extractClassifierParams(e)},x}(Wb),Tz=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.postProcess=function(n,x,t){var e=t.map(function(n){var t=n.width,e=n.height,i=x/Math.max(e,t);return{width:t*i,height:e*i}}),i=e.length;return bs(function(){var t=function(n,x){return Qh([$s([68],n),$s([68],x)],1).as2D(1,136).as1D()},r=function(n,x){var t=e[n],i=t.width,r=t.height;return x(i,r)?Math.abs(i-r)/2:0},o=function(n){return r(n,function(n,x){return n<x})},s=function(n){return r(n,function(n,x){return x<n})},h=n.mul($s([i,136],x)).sub(Qh(Array.from(Array(i),function(n,x){return t(o(x),s(x))}))).div(Qh(Array.from(Array(i),function(n,x){return t(e[x].width,e[x].height)})));return h})},x.prototype.forwardInput=function(n){var x=this;return bs(function(){var t=x.runNet(n);return x.postProcess(t,n.inputSize,n.inputDimensions.map(function(n){var x=n[0],t=n[1];return{height:x,width:t}}))})},x.prototype.forward=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=this.forwardInput,[4,Nb(n)];case 1:return[2,x.apply(this,[t.sent()])]}})})},x.prototype.detectLandmarks=function(n){return Cm(this,void 0,void 0,function(){var x,t,e,i=this;return Am(this,function(r){switch(r.label){case 0:return[4,Nb(n)];case 1:return x=r.sent(),t=bs(function(){return Yh(i.forwardInput(x))}),[4,Promise.all(t.map(function(n,t){return Cm(i,void 0,void 0,function(){var e,i,r,o,s;return Am(this,function(h){switch(h.label){case 0:return r=(i=Array).from,[4,n.data()];case 1:return e=r.apply(i,[h.sent()]),o=e.filter(function(n,x){return Rm(x)}),s=e.filter(function(n,x){return!Rm(x)}),[2,new sb(Array(68).fill(0).map(function(n,x){return new Um(o[x],s[x])}),{height:x.getInputHeight(t),width:x.getInputWidth(t)})]}})})}))];case 2:return e=r.sent(),t.forEach(function(n){return n.dispose()}),[2,x.isBatchInput?e:e[0]]}})})},x.prototype.getClassifierChannelsOut=function(){return 136},x}(dz),Rz=function(n){function x(x){return void 0===x&&(x=new uz),n.call(this,"FaceLandmark68Net",x)||this}return km(x,n),x.prototype.getDefaultModelName=function(){return"face_landmark_68_model"},x.prototype.getClassifierChannelsIn=function(){return 256},x}(Tz);function Bz(n){var x=[],t=sz(n,x).extractDenseBlock3Params,e={dense0:t("dense0",!0),dense1:t("dense1"),dense2:t("dense2")};return Jb(n,x),{params:e,paramMappings:x}}function Mz(n){var x=[],t=ez(n),e=t.extractWeights,i=t.getRemainingWeights,r=iz(e,x).extractDenseBlock3Params,o=r(3,32,"dense0",!0),s=r(32,64,"dense1"),h=r(64,128,"dense2");if(0!==i().length)throw new Error("weights remaing after extract: "+i().length);return{paramMappings:x,params:{dense0:o,dense1:s,dense2:h}}}var Nz=function(n){function x(){return n.call(this,"TinyFaceFeatureExtractor")||this}return km(x,n),x.prototype.forwardInput=function(n){var x=this.params;if(!x)throw new Error("TinyFaceFeatureExtractor - load model before inference");return bs(function(){var t=n.toBatchTensor(112,!0),e=[122.782,117.001,104.298],i=Xm(t,e).div(Us(255)),r=Gb(i,x.dense0,!0);return r=Gb(r,x.dense1),r=Gb(r,x.dense2),r=lf(r,[14,14],[2,2],"valid"),r})},x.prototype.forward=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=this.forwardInput,[4,Nb(n)];case 1:return[2,x.apply(this,[t.sent()])]}})})},x.prototype.getDefaultModelName=function(){return"face_feature_extractor_tiny_model"},x.prototype.extractParamsFromWeigthMap=function(n){return Bz(n)},x.prototype.extractParams=function(n){return Mz(n)},x}(Wb),Fz=function(n){function x(x){return void 0===x&&(x=new Nz),n.call(this,"FaceLandmark68TinyNet",x)||this}return km(x,n),x.prototype.getDefaultModelName=function(){return"face_landmark_68_tiny_model"},x.prototype.getClassifierChannelsIn=function(){return 128},x}(Tz);(function(n){function x(){return null!==n&&n.apply(this,arguments)||this}km(x,n)})(Rz);function Pz(n,x){return td(pd(n,x.weights),x.biases)}function Lz(n,x,t,e,i){void 0===i&&(i="same");var r=x.conv,o=r.filters,s=r.bias,h=Vd(n,o,t,i);return h=td(h,s),h=Pz(h,x.scale),e?Bf(h):h}function Hz(n,x){return Lz(n,x,[1,1],!0)}function Uz(n,x){return Lz(n,x,[1,1],!1)}function Vz(n,x){return Lz(n,x,[2,2],!0,"valid")}function Wz(n,x){function t(x,t,e){var i=n(x),r=i.length/(t*e*e);if(Tm(r))throw new Error("depth has to be an integer: "+r+", weights.length: "+i.length+", numFilters: "+t+", filterSize: "+e);return bs(function(){return Ff(Gs(i,[t,r,e,e]),[2,3,1,0])})}function e(e,i,r,o){var s=t(e,i,r),h=Vs(n(i));return x.push({paramPath:o+"/filters"},{paramPath:o+"/bias"}),{filters:s,bias:h}}function i(t,e){var i=Vs(n(t)),r=Vs(n(t));return x.push({paramPath:e+"/weights"},{paramPath:e+"/biases"}),{weights:i,biases:r}}function r(n,x,t,r){var o=e(n,x,t,r+"/conv"),s=i(x,r+"/scale");return{conv:o,scale:s}}function o(n,x,t,e,i){void 0===i&&(i=!1);var o=r((i?.5:1)*n,x,t,e+"/conv1"),s=r(n,x,t,e+"/conv2");return{conv1:o,conv2:s}}return{extractConvLayerParams:r,extractResidualLayerParams:o}}function Qz(n){var x=ez(n),t=x.extractWeights,e=x.getRemainingWeights,i=[],r=Wz(t,i),o=r.extractConvLayerParams,s=r.extractResidualLayerParams,h=o(4704,32,7,"conv32_down"),u=s(9216,32,3,"conv32_1"),a=s(9216,32,3,"conv32_2"),g=s(9216,32,3,"conv32_3"),l=s(36864,64,3,"conv64_down",!0),c=s(36864,64,3,"conv64_1"),d=s(36864,64,3,"conv64_2"),f=s(36864,64,3,"conv64_3"),p=s(147456,128,3,"conv128_down",!0),y=s(147456,128,3,"conv128_1"),m=s(147456,128,3,"conv128_2"),b=s(589824,256,3,"conv256_down",!0),z=s(589824,256,3,"conv256_1"),v=s(589824,256,3,"conv256_2"),j=s(589824,256,3,"conv256_down_out"),w=bs(function(){return Ff(Ws(t(32768),[128,256]),[1,0])});if(i.push({paramPath:"fc"}),0!==e().length)throw new Error("weights remaing after extract: "+e().length);var k={conv32_down:h,conv32_1:u,conv32_2:a,conv32_3:g,conv64_down:l,conv64_1:c,conv64_2:d,conv64_3:f,conv128_down:p,conv128_1:y,conv128_2:m,conv256_down:b,conv256_1:z,conv256_2:v,conv256_down_out:j,fc:w};return{params:k,paramMappings:i}}function Gz(n,x){var t=tz(n,x);function e(n){var x=t(n+"/scale/weights",1),e=t(n+"/scale/biases",1);return{weights:x,biases:e}}function i(n){var x=t(n+"/conv/filters",4),i=t(n+"/conv/bias",1),r=e(n);return{conv:{filters:x,bias:i},scale:r}}function r(n){return{conv1:i(n+"/conv1"),conv2:i(n+"/conv2")}}return{extractConvLayerParams:i,extractResidualLayerParams:r}}function Kz(n){var x=[],t=Gz(n,x),e=t.extractConvLayerParams,i=t.extractResidualLayerParams,r=e("conv32_down"),o=i("conv32_1"),s=i("conv32_2"),h=i("conv32_3"),u=i("conv64_down"),a=i("conv64_1"),g=i("conv64_2"),l=i("conv64_3"),c=i("conv128_down"),d=i("conv128_1"),f=i("conv128_2"),p=i("conv256_down"),y=i("conv256_1"),m=i("conv256_2"),b=i("conv256_down_out"),z=n["fc"];if(x.push({originalPath:"fc",paramPath:"fc"}),!Dm(z))throw new Error("expected weightMap[fc] to be a Tensor2D, instead have "+z);var v={conv32_down:r,conv32_1:o,conv32_2:s,conv32_3:h,conv64_down:u,conv64_1:a,conv64_2:g,conv64_3:l,conv128_down:c,conv128_1:d,conv128_2:f,conv256_down:p,conv256_1:y,conv256_2:m,conv256_down_out:b,fc:z};return Jb(n,x),{params:v,paramMappings:x}}function Yz(n,x){var t=Hz(n,x.conv1);return t=Uz(t,x.conv2),t=td(t,n),t=Bf(t),t}function Jz(n,x){var t=Vz(n,x.conv1);t=Uz(t,x.conv2);var e=lf(n,2,2,"valid"),i=Zs(e.shape),r=e.shape[3]!==t.shape[3],o=e.shape[1]!==t.shape[1]||e.shape[2]!==t.shape[2];if(o){var s=Em(t.shape);s[1]=1;var h=Zs(s);t=ih([t,h],1);var u=Em(t.shape);u[2]=1;var a=Zs(u);t=ih([t,a],2)}return e=r?ih([e,i],3):e,t=td(e,t),t=Bf(t),t}var Xz=function(n){function x(){return n.call(this,"FaceRecognitionNet")||this}return km(x,n),x.prototype.forwardInput=function(n){var x=this.params;if(!x)throw new Error("FaceRecognitionNet - load model before inference");return bs(function(){var t=n.toBatchTensor(150,!0).toFloat(),e=[122.782,117.001,104.298],i=Xm(t,e).div(Us(256)),r=Vz(i,x.conv32_down);r=gf(r,3,2,"valid"),r=Yz(r,x.conv32_1),r=Yz(r,x.conv32_2),r=Yz(r,x.conv32_3),r=Jz(r,x.conv64_down),r=Yz(r,x.conv64_1),r=Yz(r,x.conv64_2),r=Yz(r,x.conv64_3),r=Jz(r,x.conv128_down),r=Yz(r,x.conv128_1),r=Yz(r,x.conv128_2),r=Jz(r,x.conv256_down),r=Yz(r,x.conv256_1),r=Yz(r,x.conv256_2),r=Jz(r,x.conv256_down_out);var o=r.mean([1,2]),s=nf(o,x.fc);return s})},x.prototype.forward=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=this.forwardInput,[4,Nb(n)];case 1:return[2,x.apply(this,[t.sent()])]}})})},x.prototype.computeFaceDescriptor=function(n){return Cm(this,void 0,void 0,function(){var x,t,e,i=this;return Am(this,function(r){switch(r.label){case 0:return[4,Nb(n)];case 1:return x=r.sent(),t=bs(function(){return Yh(i.forwardInput(x))}),[4,Promise.all(t.map(function(n){return n.data()}))];case 2:return e=r.sent(),t.forEach(function(n){return n.dispose()}),[2,x.isBatchInput?e:e[0]]}})})},x.prototype.getDefaultModelName=function(){return"face_recognition_model"},x.prototype.extractParamsFromWeigthMap=function(n){return Kz(n)},x.prototype.extractParams=function(n){return Qz(n)},x}(Wb);function Zz(n,x,t){var e={gender:x,genderProbability:t};return Object.assign({},n,e)}var $z=function(){function n(n){var x=void 0===n?{}:n,t=x.minFaceSize,e=x.scaleFactor,i=x.maxNumScales,r=x.scoreThresholds,o=x.scaleSteps;if(this._name="MtcnnOptions",this._minFaceSize=t||20,this._scaleFactor=e||.709,this._maxNumScales=i||10,this._scoreThresholds=r||[.6,.7,.7],this._scaleSteps=o,"number"!==typeof this._minFaceSize||this._minFaceSize<0)throw new Error(this._name+" - expected minFaceSize to be a number > 0");if("number"!==typeof this._scaleFactor||this._scaleFactor<=0||this._scaleFactor>=1)throw new Error(this._name+" - expected scaleFactor to be a number between 0 and 1");if("number"!==typeof this._maxNumScales||this._maxNumScales<0)throw new Error(this._name+" - expected maxNumScales to be a number > 0");if(!Array.isArray(this._scoreThresholds)||3!==this._scoreThresholds.length||this._scoreThresholds.some(function(n){return"number"!==typeof n}))throw new Error(this._name+" - expected scoreThresholds to be an array of numbers of length 3");if(this._scaleSteps&&(!Array.isArray(this._scaleSteps)||this._scaleSteps.some(function(n){return"number"!==typeof n})))throw new Error(this._name+" - expected scaleSteps to be an array of numbers")}return Object.defineProperty(n.prototype,"minFaceSize",{get:function(){return this._minFaceSize},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"scaleFactor",{get:function(){return this._scaleFactor},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"maxNumScales",{get:function(){return this._maxNumScales},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"scoreThresholds",{get:function(){return this._scoreThresholds},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"scaleSteps",{get:function(){return this._scaleSteps},enumerable:!0,configurable:!0}),n}();function nv(n,x){function t(t,e){var i=Gs(n(9*t),[3,3,t,1]),r=Vs(n(t)),o=Vs(n(t)),s=Vs(n(t)),h=Vs(n(t));return x.push({paramPath:e+"/filters"},{paramPath:e+"/batch_norm_scale"},{paramPath:e+"/batch_norm_offset"},{paramPath:e+"/batch_norm_mean"},{paramPath:e+"/batch_norm_variance"}),{filters:i,batch_norm_scale:r,batch_norm_offset:o,batch_norm_mean:s,batch_norm_variance:h}}function e(t,e,i,r,o){var s=Gs(n(t*e*i*i),[i,i,t,e]),h=Vs(n(e));return x.push({paramPath:r+"/filters"},{paramPath:r+"/"+(o?"batch_norm_offset":"bias")}),{filters:s,bias:h}}function i(n,x,t,i){var r=e(n,x,t,i,!0),o=r.filters,s=r.bias;return{filters:o,batch_norm_offset:s}}function r(n,x,e){var r=t(n,e+"/depthwise_conv"),o=i(n,x,1,e+"/pointwise_conv");return{depthwise_conv:r,pointwise_conv:o}}function o(){var n=i(3,32,3,"mobilenetv1/conv_0"),x=r(32,64,"mobilenetv1/conv_1"),t=r(64,128,"mobilenetv1/conv_2"),e=r(128,128,"mobilenetv1/conv_3"),o=r(128,256,"mobilenetv1/conv_4"),s=r(256,256,"mobilenetv1/conv_5"),h=r(256,512,"mobilenetv1/conv_6"),u=r(512,512,"mobilenetv1/conv_7"),a=r(512,512,"mobilenetv1/conv_8"),g=r(512,512,"mobilenetv1/conv_9"),l=r(512,512,"mobilenetv1/conv_10"),c=r(512,512,"mobilenetv1/conv_11"),d=r(512,1024,"mobilenetv1/conv_12"),f=r(1024,1024,"mobilenetv1/conv_13");return{conv_0:n,conv_1:x,conv_2:t,conv_3:e,conv_4:o,conv_5:s,conv_6:h,conv_7:u,conv_8:a,conv_9:g,conv_10:l,conv_11:c,conv_12:d,conv_13:f}}function s(){var n=i(1024,256,1,"prediction_layer/conv_0"),x=i(256,512,3,"prediction_layer/conv_1"),t=i(512,128,1,"prediction_layer/conv_2"),r=i(128,256,3,"prediction_layer/conv_3"),o=i(256,128,1,"prediction_layer/conv_4"),s=i(128,256,3,"prediction_layer/conv_5"),h=i(256,64,1,"prediction_layer/conv_6"),u=i(64,128,3,"prediction_layer/conv_7"),a=e(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),g=e(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),l=e(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),c=e(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),d=e(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),f=e(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),p=e(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),y=e(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),m=e(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),b=e(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),z=e(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),v=e(128,18,1,"prediction_layer/box_predictor_5/class_predictor"),j={box_encoding_predictor:a,class_predictor:g},w={box_encoding_predictor:l,class_predictor:c},k={box_encoding_predictor:d,class_predictor:f},q={box_encoding_predictor:p,class_predictor:y},C={box_encoding_predictor:m,class_predictor:b},A={box_encoding_predictor:z,class_predictor:v};return{conv_0:n,conv_1:x,conv_2:t,conv_3:r,conv_4:o,conv_5:s,conv_6:h,conv_7:u,box_predictor_0:j,box_predictor_1:w,box_predictor_2:k,box_predictor_3:q,box_predictor_4:C,box_predictor_5:A}}return{extractMobilenetV1Params:o,extractPredictionLayerParams:s}}function xv(n){var x=[],t=ez(n),e=t.extractWeights,i=t.getRemainingWeights,r=nv(e,x),o=r.extractMobilenetV1Params,s=r.extractPredictionLayerParams,h=o(),u=s(),a=Qs(e(20472),[1,5118,4]),g={extra_dim:a};if(x.push({paramPath:"output_layer/extra_dim"}),0!==i().length)throw new Error("weights remaing after extract: "+i().length);return{params:{mobilenetv1:h,prediction_layer:u,output_layer:g},paramMappings:x}}function tv(n,x){var t=tz(n,x);function e(n,x,e){var i=t(n+"/Conv2d_"+x+"_pointwise/weights",4,e+"/filters"),r=t(n+"/Conv2d_"+x+"_pointwise/convolution_bn_offset",1,e+"/batch_norm_offset");return{filters:i,batch_norm_offset:r}}function i(n){var x="mobilenetv1/conv_"+n,i="MobilenetV1/Conv2d_"+n+"_depthwise",r=x+"/depthwise_conv",o=x+"/pointwise_conv",s=t(i+"/depthwise_weights",4,r+"/filters"),h=t(i+"/BatchNorm/gamma",1,r+"/batch_norm_scale"),u=t(i+"/BatchNorm/beta",1,r+"/batch_norm_offset"),a=t(i+"/BatchNorm/moving_mean",1,r+"/batch_norm_mean"),g=t(i+"/BatchNorm/moving_variance",1,r+"/batch_norm_variance");return{depthwise_conv:{filters:s,batch_norm_scale:h,batch_norm_offset:u,batch_norm_mean:a,batch_norm_variance:g},pointwise_conv:e("MobilenetV1",n,o)}}function r(){return{conv_0:e("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:i(1),conv_2:i(2),conv_3:i(3),conv_4:i(4),conv_5:i(5),conv_6:i(6),conv_7:i(7),conv_8:i(8),conv_9:i(9),conv_10:i(10),conv_11:i(11),conv_12:i(12),conv_13:i(13)}}function o(n,x){var e=t(n+"/weights",4,x+"/filters"),i=t(n+"/biases",1,x+"/bias");return{filters:e,bias:i}}function s(n){var x=o("Prediction/BoxPredictor_"+n+"/BoxEncodingPredictor","prediction_layer/box_predictor_"+n+"/box_encoding_predictor"),t=o("Prediction/BoxPredictor_"+n+"/ClassPredictor","prediction_layer/box_predictor_"+n+"/class_predictor");return{box_encoding_predictor:x,class_predictor:t}}function h(){return{conv_0:e("Prediction",0,"prediction_layer/conv_0"),conv_1:e("Prediction",1,"prediction_layer/conv_1"),conv_2:e("Prediction",2,"prediction_layer/conv_2"),conv_3:e("Prediction",3,"prediction_layer/conv_3"),conv_4:e("Prediction",4,"prediction_layer/conv_4"),conv_5:e("Prediction",5,"prediction_layer/conv_5"),conv_6:e("Prediction",6,"prediction_layer/conv_6"),conv_7:e("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:s(0),box_predictor_1:s(1),box_predictor_2:s(2),box_predictor_3:s(3),box_predictor_4:s(4),box_predictor_5:s(5)}}return{extractMobilenetV1Params:r,extractPredictionLayerParams:h}}function ev(n){var x=[],t=tv(n,x),e=t.extractMobilenetV1Params,i=t.extractPredictionLayerParams,r=n["Output/extra_dim"];if(x.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!Om(r))throw new Error("expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have "+r);var o={mobilenetv1:e(),prediction_layer:i(),output_layer:{extra_dim:r}};return Jb(n,x),{params:o,paramMappings:x}}function iv(n,x,t){return bs(function(){var e=Vd(n,x.filters,t,"same");return e=td(e,x.batch_norm_offset),ac(e,0,6)})}var rv=.0010000000474974513;function ov(n,x,t){return bs(function(){var e=Kd(n,x.filters,t,"same");return e=Qc(e,x.batch_norm_mean,x.batch_norm_variance,x.batch_norm_offset,x.batch_norm_scale,rv),ac(e,0,6)})}function sv(n){return[2,4,6,12].some(function(x){return x===n})?[2,2]:[1,1]}function hv(n,x){return bs(function(){var t=null,e=iv(n,x.conv_0,[2,2]),i=[x.conv_1,x.conv_2,x.conv_3,x.conv_4,x.conv_5,x.conv_6,x.conv_7,x.conv_8,x.conv_9,x.conv_10,x.conv_11,x.conv_12,x.conv_13];if(i.forEach(function(n,x){var i=x+1,r=sv(i);e=ov(e,n.depthwise_conv,r),e=iv(e,n.pointwise_conv,[1,1]),11===i&&(t=e)}),null===t)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:e,conv11:t}})}function uv(n,x,t,e,i){var r=n.shape[0],o=Math.min(t,r),s=x.map(function(n,x){return{score:n,boxIndex:x}}).filter(function(n){return n.score>i}).sort(function(n,x){return x.score-n.score}),h=function(n){return n<=e?1:0},u=[];return s.forEach(function(x){if(!(u.length>=o)){for(var t=x.score,e=u.length-1;e>=0;--e){var r=av(n,x.boxIndex,u[e]);if(0!==r&&(x.score*=h(r),x.score<=i))break}t===x.score&&u.push(x.boxIndex)}}),u}function av(n,x,t){var e=n.arraySync(),i=Math.min(e[x][0],e[x][2]),r=Math.min(e[x][1],e[x][3]),o=Math.max(e[x][0],e[x][2]),s=Math.max(e[x][1],e[x][3]),h=Math.min(e[t][0],e[t][2]),u=Math.min(e[t][1],e[t][3]),a=Math.max(e[t][0],e[t][2]),g=Math.max(e[t][1],e[t][3]),l=(o-i)*(s-r),c=(a-h)*(g-u);if(l<=0||c<=0)return 0;var d=Math.max(i,h),f=Math.max(r,u),p=Math.min(o,a),y=Math.min(s,g),m=Math.max(p-d,0)*Math.max(y-f,0);return m/(l+c-m)}function gv(n){var x=Yh(Ff(n,[1,0])),t=[vd(x[2],x[0]),vd(x[3],x[1])],e=[td(x[0],od(t[0],Us(2))),td(x[1],od(t[1],Us(2)))];return{sizes:t,centers:e}}function lv(n,x){var t=gv(n),e=t.sizes,i=t.centers,r=Yh(Ff(x,[1,0])),o=od(pd(dc(od(r[2],Us(5))),e[0]),Us(2)),s=td(pd(od(r[0],Us(10)),e[0]),i[0]),h=od(pd(dc(od(r[3],Us(5))),e[1]),Us(2)),u=td(pd(od(r[1],Us(10)),e[1]),i[1]);return Ff(Qh([vd(s,o),vd(u,h),td(s,o),td(u,h)]),[1,0])}function cv(n,x,t){return bs(function(){var e=n.shape[0],i=lv(Uh(Gh(t.extra_dim,[e,1,1]),[-1,4]),Uh(n,[-1,4]));i=Uh(i,[e,i.shape[0]/e,4]);var r=kc(pf(x,[0,0,1],[-1,-1,-1])),o=pf(r,[0,0,0],[-1,-1,1]);o=Uh(o,[e,o.shape[1]]);var s=Yh(i),h=Yh(o);return{boxes:s,scores:h}})}function dv(n,x){return bs(function(){var t=n.shape[0],e=Uh(Yb(n,x.box_encoding_predictor),[t,-1,1,4]),i=Uh(Yb(n,x.class_predictor),[t,-1,3]);return{boxPredictionEncoding:e,classPrediction:i}})}function fv(n,x,t){return bs(function(){var e=iv(n,t.conv_0,[1,1]),i=iv(e,t.conv_1,[2,2]),r=iv(i,t.conv_2,[1,1]),o=iv(r,t.conv_3,[2,2]),s=iv(o,t.conv_4,[1,1]),h=iv(s,t.conv_5,[2,2]),u=iv(h,t.conv_6,[1,1]),a=iv(u,t.conv_7,[2,2]),g=dv(x,t.box_predictor_0),l=dv(n,t.box_predictor_1),c=dv(i,t.box_predictor_2),d=dv(o,t.box_predictor_3),f=dv(h,t.box_predictor_4),p=dv(a,t.box_predictor_5),y=ih([g.boxPredictionEncoding,l.boxPredictionEncoding,c.boxPredictionEncoding,d.boxPredictionEncoding,f.boxPredictionEncoding,p.boxPredictionEncoding],1),m=ih([g.classPrediction,l.classPrediction,c.classPrediction,d.classPrediction,f.classPrediction,p.classPrediction],1);return{boxPredictions:y,classPredictions:m}})}var pv=function(){function n(n){var x=void 0===n?{}:n,t=x.minConfidence,e=x.maxResults;if(this._name="SsdMobilenetv1Options",this._minConfidence=t||.5,this._maxResults=e||100,"number"!==typeof this._minConfidence||this._minConfidence<=0||this._minConfidence>=1)throw new Error(this._name+" - expected minConfidence to be a number between 0 and 1");if("number"!==typeof this._maxResults)throw new Error(this._name+" - expected maxResults to be a number")}return Object.defineProperty(n.prototype,"minConfidence",{get:function(){return this._minConfidence},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"maxResults",{get:function(){return this._maxResults},enumerable:!0,configurable:!0}),n}(),yv=function(n){function x(){return n.call(this,"SsdMobilenetv1")||this}return km(x,n),x.prototype.forwardInput=function(n){var x=this.params;if(!x)throw new Error("SsdMobilenetv1 - load model before inference");return bs(function(){var t=n.toBatchTensor(512,!1).toFloat(),e=vd(pd(t,Us(.007843137718737125)),Us(1)),i=hv(e,x.mobilenetv1),r=fv(i.out,i.conv11,x.prediction_layer),o=r.boxPredictions,s=r.classPredictions;return cv(o,s,x.output_layer)})},x.prototype.forward=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=this.forwardInput,[4,Nb(n)];case 1:return[2,x.apply(this,[t.sent()])]}})})},x.prototype.locateFaces=function(n,x){return void 0===x&&(x={}),Cm(this,void 0,void 0,function(){var t,e,i,r,o,s,h,u,a,g,l,c,d,f,p,y,m,b,z,v,j;return Am(this,function(w){switch(w.label){case 0:return t=new pv(x),e=t.maxResults,i=t.minConfidence,[4,Nb(n)];case 1:for(r=w.sent(),o=this.forwardInput(r),s=o.boxes,h=o.scores,u=s[0],a=h[0],g=1;g<s.length;g++)s[g].dispose(),h[g].dispose();return d=(c=Array).from,[4,a.data()];case 2:return l=d.apply(c,[w.sent()]),f=.5,p=uv(u,l,e,f,i),y=r.getReshapedInputDimensions(0),m=r.inputSize,b=m/y.width,z=m/y.height,v=u.arraySync(),j=p.map(function(n){var x=[Math.max(0,v[n][0]),Math.min(1,v[n][2])].map(function(n){return n*z}),t=x[0],e=x[1],i=[Math.max(0,v[n][1]),Math.min(1,v[n][3])].map(function(n){return n*b}),o=i[0],s=i[1];return new Gm(l[n],new xb(o,t,s-o,e-t),{height:r.getInputHeight(0),width:r.getInputWidth(0)})}),u.dispose(),a.dispose(),[2,j]}})})},x.prototype.getDefaultModelName=function(){return"ssd_mobilenetv1_model"},x.prototype.extractParamsFromWeigthMap=function(n){return ev(n)},x.prototype.extractParams=function(n){return xv(n)},x}(Wb);(function(n){function x(){return null!==n&&n.apply(this,arguments)||this}km(x,n)})(yv);var mv,bv=.4,zv=[new Um(.738768,.874946),new Um(2.42204,2.65704),new Um(4.30971,7.04493),new Um(10.246,4.59428),new Um(12.6868,11.8741)],vv=[new Um(1.603231,2.094468),new Um(6.041143,7.080126),new Um(2.882459,3.518061),new Um(4.266906,5.178857),new Um(9.041765,10.66308)],jv=[117.001,114.697,97.404],wv="tiny_yolov2_model",kv="tiny_yolov2_separable_conv_model",qv=function(n){return"number"===typeof n};function Cv(n){if(!n)throw new Error("invalid config: "+n);if("boolean"!==typeof n.withSeparableConvs)throw new Error("config.withSeparableConvs has to be a boolean, have: "+n.withSeparableConvs);if(!qv(n.iouThreshold)||n.iouThreshold<0||n.iouThreshold>1)throw new Error("config.iouThreshold has to be a number between [0, 1], have: "+n.iouThreshold);if(!Array.isArray(n.classes)||!n.classes.length||!n.classes.every(function(n){return"string"===typeof n}))throw new Error("config.classes has to be an array class names: string[], have: "+JSON.stringify(n.classes));if(!Array.isArray(n.anchors)||!n.anchors.length||!n.anchors.map(function(n){return n||{}}).every(function(n){return qv(n.x)&&qv(n.y)}))throw new Error("config.anchors has to be an array of { x: number, y: number }, have: "+JSON.stringify(n.anchors));if(n.meanRgb&&(!Array.isArray(n.meanRgb)||3!==n.meanRgb.length||!n.meanRgb.every(qv)))throw new Error("config.meanRgb has to be an array of shape [number, number, number], have: "+JSON.stringify(n.meanRgb))}function Av(n){return bs(function(){var x=pd(n,Us(.10000000149011612));return td(Bf(vd(n,x)),x)})}function Ev(n,x){return bs(function(){var t=Th(n,[[0,0],[1,1],[1,1],[0,0]]);return t=Vd(t,x.conv.filters,[1,1],"valid"),t=vd(t,x.bn.sub),t=pd(t,x.bn.truediv),t=td(t,x.conv.bias),Av(t)})}function Sv(n,x){return bs(function(){var t=Th(n,[[0,0],[1,1],[1,1],[0,0]]);return t=Xd(t,x.depthwise_filter,x.pointwise_filter,[1,1],"valid"),t=td(t,x.bias),Av(t)})}function Iv(n,x){var t=Xb(n,x);function e(t,e){var i=Vs(n(t)),r=Vs(n(t));return x.push({paramPath:e+"/sub"},{paramPath:e+"/truediv"}),{sub:i,truediv:r}}function i(n,x,i){var r=t(n,x,3,i+"/conv"),o=e(x,i+"/bn");return{conv:r,bn:o}}var r=nz(n,x);return{extractConvParams:t,extractConvWithBatchNormParams:i,extractSeparableConvParams:r}}function Dv(n,x,t,e){var i,r=ez(n),o=r.extractWeights,s=r.getRemainingWeights,h=[],u=Iv(o,h),a=u.extractConvParams,g=u.extractConvWithBatchNormParams,l=u.extractSeparableConvParams;if(x.withSeparableConvs){var c=e[0],d=e[1],f=e[2],p=e[3],y=e[4],m=e[5],b=e[6],z=e[7],v=e[8],j=x.isFirstLayerConv2d?a(c,d,3,"conv0"):l(c,d,"conv0"),w=l(d,f,"conv1"),k=l(f,p,"conv2"),q=l(p,y,"conv3"),C=l(y,m,"conv4"),A=l(m,b,"conv5"),E=z?l(b,z,"conv6"):void 0,S=v?l(z,v,"conv7"):void 0,I=a(v||z||b,5*t,1,"conv8");i={conv0:j,conv1:w,conv2:k,conv3:q,conv4:C,conv5:A,conv6:E,conv7:S,conv8:I}}else{c=e[0],d=e[1],f=e[2],p=e[3],y=e[4],m=e[5],b=e[6],z=e[7],v=e[8],j=g(c,d,"conv0"),w=g(d,f,"conv1"),k=g(f,p,"conv2"),q=g(p,y,"conv3"),C=g(y,m,"conv4"),A=g(m,b,"conv5"),E=g(b,z,"conv6"),S=g(z,v,"conv7"),I=a(v,5*t,1,"conv8");i={conv0:j,conv1:w,conv2:k,conv3:q,conv4:C,conv5:A,conv6:E,conv7:S,conv8:I}}if(0!==s().length)throw new Error("weights remaing after extract: "+s().length);return{params:i,paramMappings:h}}function Ov(n,x){var t=tz(n,x);function e(n){var x=t(n+"/sub",1),e=t(n+"/truediv",1);return{sub:x,truediv:e}}function i(n){var x=t(n+"/filters",4),e=t(n+"/bias",1);return{filters:x,bias:e}}function r(n){var x=i(n+"/conv"),t=e(n+"/bn");return{conv:x,bn:t}}var o=xz(t);return{extractConvParams:i,extractConvWithBatchNormParams:r,extractSeparableConvParams:o}}function _v(n,x){var t,e=[],i=Ov(n,e),r=i.extractConvParams,o=i.extractConvWithBatchNormParams,s=i.extractSeparableConvParams;if(x.withSeparableConvs){var h=x.filterSizes&&x.filterSizes.length||9;t={conv0:x.isFirstLayerConv2d?r("conv0"):s("conv0"),conv1:s("conv1"),conv2:s("conv2"),conv3:s("conv3"),conv4:s("conv4"),conv5:s("conv5"),conv6:h>7?s("conv6"):void 0,conv7:h>8?s("conv7"):void 0,conv8:r("conv8")}}else t={conv0:o("conv0"),conv1:o("conv1"),conv2:o("conv2"),conv3:o("conv3"),conv4:o("conv4"),conv5:o("conv5"),conv6:o("conv6"),conv7:o("conv7"),conv8:r("conv8")};return Jb(n,e),{params:t,paramMappings:e}}(function(n){n[n["XS"]=224]="XS",n[n["SM"]=320]="SM",n[n["MD"]=416]="MD",n[n["LG"]=608]="LG"})(mv||(mv={}));var Tv=function(){function n(n){var x=void 0===n?{}:n,t=x.inputSize,e=x.scoreThreshold;if(this._name="TinyYolov2Options",this._inputSize=t||416,this._scoreThreshold=e||.5,"number"!==typeof this._inputSize||this._inputSize%32!==0)throw new Error(this._name+" - expected inputSize to be a number divisible by 32");if("number"!==typeof this._scoreThreshold||this._scoreThreshold<=0||this._scoreThreshold>=1)throw new Error(this._name+" - expected scoreThreshold to be a number between 0 and 1")}return Object.defineProperty(n.prototype,"inputSize",{get:function(){return this._inputSize},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"scoreThreshold",{get:function(){return this._scoreThreshold},enumerable:!0,configurable:!0}),n}(),Rv=function(n){function x(x){var t=n.call(this,"TinyYolov2")||this;return Cv(x),t._config=x,t}return km(x,n),Object.defineProperty(x.prototype,"config",{get:function(){return this._config},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,"withClassScores",{get:function(){return this.config.withClassScores||this.config.classes.length>1},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,"boxEncodingSize",{get:function(){return 5+(this.withClassScores?this.config.classes.length:0)},enumerable:!0,configurable:!0}),x.prototype.runTinyYolov2=function(n,x){var t=Ev(n,x.conv0);return t=gf(t,[2,2],[2,2],"same"),t=Ev(t,x.conv1),t=gf(t,[2,2],[2,2],"same"),t=Ev(t,x.conv2),t=gf(t,[2,2],[2,2],"same"),t=Ev(t,x.conv3),t=gf(t,[2,2],[2,2],"same"),t=Ev(t,x.conv4),t=gf(t,[2,2],[2,2],"same"),t=Ev(t,x.conv5),t=gf(t,[2,2],[1,1],"same"),t=Ev(t,x.conv6),t=Ev(t,x.conv7),Yb(t,x.conv8,"valid",!1)},x.prototype.runMobilenet=function(n,x){var t=this.config.isFirstLayerConv2d?Av(Yb(n,x.conv0,"valid",!1)):Sv(n,x.conv0);return t=gf(t,[2,2],[2,2],"same"),t=Sv(t,x.conv1),t=gf(t,[2,2],[2,2],"same"),t=Sv(t,x.conv2),t=gf(t,[2,2],[2,2],"same"),t=Sv(t,x.conv3),t=gf(t,[2,2],[2,2],"same"),t=Sv(t,x.conv4),t=gf(t,[2,2],[2,2],"same"),t=Sv(t,x.conv5),t=gf(t,[2,2],[1,1],"same"),t=x.conv6?Sv(t,x.conv6):t,t=x.conv7?Sv(t,x.conv7):t,Yb(t,x.conv8,"valid",!1)},x.prototype.forwardInput=function(n,x){var t=this,e=this.params;if(!e)throw new Error("TinyYolov2 - load model before inference");return bs(function(){var i=n.toBatchTensor(x,!1).toFloat();return i=t.config.meanRgb?Xm(i,t.config.meanRgb):i,i=i.div(Us(256)),t.config.withSeparableConvs?t.runMobilenet(i,e):t.runTinyYolov2(i,e)})},x.prototype.forward=function(n,x){return Cm(this,void 0,void 0,function(){var t;return Am(this,function(e){switch(e.label){case 0:return t=this.forwardInput,[4,Nb(n)];case 1:return[4,t.apply(this,[e.sent(),x])];case 2:return[2,e.sent()]}})})},x.prototype.detect=function(n,x){return void 0===x&&(x={}),Cm(this,void 0,void 0,function(){var t,e,i,r,o,s,h,u,a,g,l,c,d,f,p=this;return Am(this,function(y){switch(y.label){case 0:return t=new Tv(x),e=t.inputSize,i=t.scoreThreshold,[4,Nb(n)];case 1:return r=y.sent(),[4,this.forwardInput(r,e)];case 2:return o=y.sent(),s=bs(function(){return Yh(o)[0].expandDims()}),h={width:r.getInputWidth(0),height:r.getInputHeight(0)},[4,this.extractBoxes(s,r.getReshapedInputDimensions(0),i)];case 3:return u=y.sent(),o.dispose(),s.dispose(),a=u.map(function(n){return n.box}),g=u.map(function(n){return n.score}),l=u.map(function(n){return n.classScore}),c=u.map(function(n){return p.config.classes[n.label]}),d=Jm(a.map(function(n){return n.rescale(e)}),g,this.config.iouThreshold,!0),f=d.map(function(n){return new Qm(g[n],l[n],c[n],a[n],h)}),[2,f]}})})},x.prototype.getDefaultModelName=function(){return""},x.prototype.extractParamsFromWeigthMap=function(n){return _v(n,this.config)},x.prototype.extractParams=function(n){var t=this.config.filterSizes||x.DEFAULT_FILTER_SIZES,e=t?t.length:void 0;if(7!==e&&8!==e&&9!==e)throw new Error("TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found "+e+" filterSizes in config");return Dv(n,this.config,this.boxEncodingSize,t)},x.prototype.extractBoxes=function(n,x,t){return Cm(this,void 0,void 0,function(){var e,i,r,o,s,h,u,a,g,l,c,d,f,p,y,m,b,z,v,j,w,k,q,C,A,E,S,I,D,O=this;return Am(this,function(_){switch(_.label){case 0:return e=x.width,i=x.height,r=Math.max(e,i),o=r/e,s=r/i,h=n.shape[1],u=this.config.anchors.length,a=bs(function(){var x=n.reshape([h,h,u,O.boxEncodingSize]),t=x.slice([0,0,0,0],[h,h,u,4]),e=x.slice([0,0,0,4],[h,h,u,1]),i=O.withClassScores?yu(x.slice([0,0,0,5],[h,h,u,O.config.classes.length]),3):Us(0);return[t,e,i]}),g=a[0],l=a[1],c=a[2],d=[],[4,l.array()];case 1:return f=_.sent(),[4,g.array()];case 2:p=_.sent(),y=0,_.label=3;case 3:if(!(y<h))return[3,12];m=0,_.label=4;case 4:if(!(m<h))return[3,11];b=0,_.label=5;case 5:return b<u?(z=$m(f[y][m][b][0]),!t||z>t?(v=(m+$m(p[y][m][b][0]))/h*o,j=(y+$m(p[y][m][b][1]))/h*s,w=Math.exp(p[y][m][b][2])*this.config.anchors[b].x/h*o,k=Math.exp(p[y][m][b][3])*this.config.anchors[b].y/h*s,q=v-w/2,C=j-k/2,A={row:y,col:m,anchor:b},this.withClassScores?[4,this.extractPredictedClass(c,A)]:[3,7]):[3,9]):[3,10];case 6:return D=_.sent(),[3,8];case 7:D={classScore:1,label:0},_.label=8;case 8:E=D,S=E.classScore,I=E.label,d.push(qm({box:new Wm(q,C,q+w,C+k),score:z,classScore:z*S,label:I},A)),_.label=9;case 9:return b++,[3,5];case 10:return m++,[3,4];case 11:return y++,[3,3];case 12:return g.dispose(),l.dispose(),c.dispose(),[2,d]}})})},x.prototype.extractPredictedClass=function(n,x){return Cm(this,void 0,void 0,function(){var t,e,i,r;return Am(this,function(o){switch(o.label){case 0:return t=x.row,e=x.col,i=x.anchor,[4,n.array()];case 1:return r=o.sent(),[2,Array(this.config.classes.length).fill(0).map(function(n,x){return r[t][e][i][x]}).map(function(n,x){return{classScore:n,label:x}}).reduce(function(n,x){return n.classScore>x.classScore?n:x})]}})})},x.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024],x}(Wb),Bv=function(n){function x(x){void 0===x&&(x=!0);var t=this,e=Object.assign({},{withSeparableConvs:x,iouThreshold:bv,classes:["face"]},x?{anchors:vv,meanRgb:jv}:{anchors:zv,withClassScores:!0});return t=n.call(this,e)||this,t}return km(x,n),Object.defineProperty(x.prototype,"withSeparableConvs",{get:function(){return this.config.withSeparableConvs},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,"anchors",{get:function(){return this.config.anchors},enumerable:!0,configurable:!0}),x.prototype.locateFaces=function(n,x){return Cm(this,void 0,void 0,function(){var t;return Am(this,function(e){switch(e.label){case 0:return[4,this.detect(n,x)];case 1:return t=e.sent(),[2,t.map(function(n){return new Gm(n.score,n.relativeBox,{width:n.imageWidth,height:n.imageHeight})})]}})})},x.prototype.getDefaultModelName=function(){return this.withSeparableConvs?kv:wv},x.prototype.extractParamsFromWeigthMap=function(x){return n.prototype.extractParamsFromWeigthMap.call(this,x)},x}(Rv);var Mv=function(n){function x(){var x=null!==n&&n.apply(this,arguments)||this;return x._name="TinyFaceDetectorOptions",x}return km(x,n),x}(Tv),Nv=function(){function n(){}return n.prototype.then=function(n){return Cm(this,void 0,void 0,function(){var x;return Am(this,function(t){switch(t.label){case 0:return x=n,[4,this.run()];case 1:return[2,x.apply(void 0,[t.sent()])]}})})},n.prototype.run=function(){return Cm(this,void 0,void 0,function(){return Am(this,function(n){throw new Error("ComposableTask - run is not implemented")})})},n}();function Fv(n,x){var t={descriptor:x};return Object.assign({},n,t)}function Pv(n,x,t,e,i){return void 0===i&&(i=function(n){var x=n.alignedRect;return x}),Cm(this,void 0,void 0,function(){var r,o,s,h,u;return Am(this,function(a){switch(a.label){case 0:return r=n.map(function(n){return bz(n)?i(n):n.detection}),s=e,s?[3,5]:x instanceof Kr?[4,Pb(x,r)]:[3,2];case 1:return h=a.sent(),[3,4];case 2:return[4,Fb(x,r)];case 3:h=a.sent(),a.label=4;case 4:s=h,a.label=5;case 5:return o=s,[4,t(o)];case 6:return u=a.sent(),o.forEach(function(n){return n instanceof Kr&&n.dispose()}),[2,u]}})})}function Lv(n,x,t,e,i){return Cm(this,void 0,void 0,function(){var r=this;return Am(this,function(o){return[2,Pv([n],x,function(n){return Cm(r,void 0,void 0,function(){return Am(this,function(x){return[2,t(n[0])]})})},e,i)]})})}function Hv(n){return bs(function(){return Qh(Yh(n,3).reverse(),3)})}var Uv=2,Vv=12;function Wv(n,x){var t=Xb(n,x),e=Zb(n,x);function i(t,e){var i=Vs(n(t));return x.push({paramPath:e}),i}function r(n,x,e){void 0===e&&(e=!1);var r=t(n[0],n[1],3,x+"/conv1"),o=i(n[1],x+"/prelu1_alpha"),s=t(n[1],n[2],3,x+"/conv2"),h=i(n[2],x+"/prelu2_alpha"),u=t(n[2],n[3],e?2:3,x+"/conv3"),a=i(n[3],x+"/prelu3_alpha");return{conv1:r,prelu1_alpha:o,conv2:s,prelu2_alpha:h,conv3:u,prelu3_alpha:a}}function o(){var n=r([3,10,16,32],"pnet"),x=t(32,2,1,"pnet/conv4_1"),e=t(32,4,1,"pnet/conv4_2");return qm(qm({},n),{conv4_1:x,conv4_2:e})}function s(){var n=r([3,28,48,64],"rnet",!0),x=e(576,128,"rnet/fc1"),t=i(128,"rnet/prelu4_alpha"),o=e(128,2,"rnet/fc2_1"),s=e(128,4,"rnet/fc2_2");return qm(qm({},n),{fc1:x,prelu4_alpha:t,fc2_1:o,fc2_2:s})}function h(){var n=r([3,32,64,64],"onet"),x=t(64,128,2,"onet/conv4"),o=i(128,"onet/prelu4_alpha"),s=e(1152,256,"onet/fc1"),h=i(256,"onet/prelu5_alpha"),u=e(256,2,"onet/fc2_1"),a=e(256,4,"onet/fc2_2"),g=e(256,10,"onet/fc2_3");return qm(qm({},n),{conv4:x,prelu4_alpha:o,fc1:s,prelu5_alpha:h,fc2_1:u,fc2_2:a,fc2_3:g})}return{extractPNetParams:o,extractRNetParams:s,extractONetParams:h}}function Qv(n){var x=ez(n),t=x.extractWeights,e=x.getRemainingWeights,i=[],r=Wv(t,i),o=r.extractPNetParams,s=r.extractRNetParams,h=r.extractONetParams,u=o(),a=s(),g=h();if(0!==e().length)throw new Error("weights remaing after extract: "+e().length);return{params:{pnet:u,rnet:a,onet:g},paramMappings:i}}function Gv(n,x){var t=tz(n,x);function e(n){var x=t(n+"/weights",4,n+"/filters"),e=t(n+"/bias",1);return{filters:x,bias:e}}function i(n){var x=t(n+"/weights",2),e=t(n+"/bias",1);return{weights:x,bias:e}}function r(n){return t(n,1)}function o(n){var x=e(n+"/conv1"),t=r(n+"/prelu1_alpha"),i=e(n+"/conv2"),o=r(n+"/prelu2_alpha"),s=e(n+"/conv3"),h=r(n+"/prelu3_alpha");return{conv1:x,prelu1_alpha:t,conv2:i,prelu2_alpha:o,conv3:s,prelu3_alpha:h}}function s(){var n=o("pnet"),x=e("pnet/conv4_1"),t=e("pnet/conv4_2");return qm(qm({},n),{conv4_1:x,conv4_2:t})}function h(){var n=o("rnet"),x=i("rnet/fc1"),t=r("rnet/prelu4_alpha"),e=i("rnet/fc2_1"),s=i("rnet/fc2_2");return qm(qm({},n),{fc1:x,prelu4_alpha:t,fc2_1:e,fc2_2:s})}function u(){var n=o("onet"),x=e("onet/conv4"),t=r("onet/prelu4_alpha"),s=i("onet/fc1"),h=r("onet/prelu5_alpha"),u=i("onet/fc2_1"),a=i("onet/fc2_2"),g=i("onet/fc2_3");return qm(qm({},n),{conv4:x,prelu4_alpha:t,fc1:s,prelu5_alpha:h,fc2_1:u,fc2_2:a,fc2_3:g})}return{extractPNetParams:s,extractRNetParams:h,extractONetParams:u}}function Kv(n){var x=[],t=Gv(n,x),e=t.extractPNetParams,i=t.extractRNetParams,r=t.extractONetParams,o=e(),s=i(),h=r();return Jb(n,x),{params:{pnet:o,rnet:s,onet:h},paramMappings:x}}function Yv(n,x){var t=x[0],e=x[1];return{height:Math.floor(t*n),width:Math.floor(e*n)}}function Jv(n,x,t){var e=t[0],i=t[1],r=Vv/n,o=[],s=Math.min(e,i)*r,h=0;while(s>=12)o.push(r*Math.pow(x,h)),s*=x,h+=1;return o}var Xv=function(n){function x(x,t,e,i){return n.call(this,{left:x,top:t,right:e,bottom:i},!0)||this}return km(x,n),x}(Vm);function Zv(n){return bs(function(){return pd(vd(n,Us(127.5)),Us(.0078125))})}function $v(n,x){return bs(function(){return td(Bf(n),pd(x,zc(Bf(zc(n)))))})}function nj(n,x,t){return void 0===t&&(t=!1),bs(function(){var e=Yb(n,x.conv1,"valid");return e=$v(e,x.prelu1_alpha),e=gf(e,t?[2,2]:[3,3],[2,2],"same"),e=Yb(e,x.conv2,"valid"),e=$v(e,x.prelu2_alpha),e=t?e:gf(e,[3,3],[2,2],"valid"),e=Yb(e,x.conv3,"valid"),e=$v(e,x.prelu3_alpha),e})}function xj(n,x){return bs(function(){var t=nj(n,x,!0),e=Yb(t,x.conv4_1,"valid"),i=Ih(Af(e,3),3),r=yu(vd(e,i),3),o=Yb(t,x.conv4_2,"valid");return{prob:r,regions:o}})}function tj(n,x){return bs(function(){var t=Yv(x,n.shape.slice(1)),e=t.height,i=t.width,r=Tp.resizeBilinear(n,[e,i]),o=Zv(r);return Ff(o,[0,2,1,3])})}function ej(n,x,t,e){for(var i=[],r=n.arraySync(),o=0;o<n.shape[0];o++)for(var s=0;s<n.shape[1];s++)r[o][s]>=e&&i.push(new Um(s,o));var h=i.map(function(n){var e=new Wm(Math.round((n.y*Uv+1)/t),Math.round((n.x*Uv+1)/t),Math.round((n.y*Uv+Vv)/t),Math.round((n.x*Uv+Vv)/t)),i=r[n.y][n.x],o=x.arraySync(),s=new Xv(o[n.y][n.x][0],o[n.y][n.x][1],o[n.y][n.x][2],o[n.y][n.x][3]);return{cell:e,score:i,region:s}});return h}function ij(n,x,t,e,i){i.stage1=[];var r=x.map(function(x){return bs(function(){var t={scale:x},i=tj(n,x),r=Date.now(),o=xj(i,e),s=o.prob,h=o.regions;t.pnet=Date.now()-r;var u=Yh(Yh(s,3)[1])[0],a=Yh(h)[0];return{scoresTensor:u,regionsTensor:a,scale:x,statsForScale:t}})}),o=r.map(function(n){var x=n.scoresTensor,e=n.regionsTensor,r=n.scale,o=n.statsForScale,s=ej(x,e,r,t);if(x.dispose(),e.dispose(),!s.length)return i.stage1.push(o),[];var h=Date.now(),u=Jm(s.map(function(n){return n.cell}),s.map(function(n){return n.score}),.5);return o.nms=Date.now()-h,o.numBoxes=u.length,i.stage1.push(o),u.map(function(n){return s[n]})}),s=o.reduce(function(n,x){return n.concat(x)},[]),h=[],u=[];if(s.length>0){var a=Date.now(),g=Jm(s.map(function(n){return n.cell}),s.map(function(n){return n.score}),.7);i.stage1_nms=Date.now()-a,u=g.map(function(n){return s[n].score}),h=g.map(function(n){return s[n]}).map(function(n){var x=n.cell,t=n.region;return new Wm(x.left+t.left*x.width,x.top+t.top*x.height,x.right+t.right*x.width,x.bottom+t.bottom*x.height).toSquare().round()})}return{boxes:h,scores:u}}function rj(n,x,t){var e=t.width,i=t.height;return Cm(this,void 0,void 0,function(){var t,r,o,s=this;return Am(this,function(h){switch(h.label){case 0:return t=qb(n),[4,Promise.all(x.map(function(x){return Cm(s,void 0,void 0,function(){var e,i,r,o,s,h,u,a;return Am(this,function(g){return e=x.padAtBorders(n.height,n.width),i=e.y,r=e.ey,o=e.x,s=e.ex,h=o-1,u=i-1,a=t.getImageData(h,u,s-h,r-u),[2,wb.isNodejs()?_b(a):createImageBitmap(a)]})})}))];case 1:return r=h.sent(),o=[],r.forEach(function(n){var x=Ob({width:e,height:i}),t=qb(x);t.drawImage(n,0,0,e,i);for(var r=t.getImageData(0,0,e,i).data,s=[],h=0;h<r.length;h+=4)s.push(r[h+2]),s.push(r[h+1]),s.push(r[h]);o.push(s)}),[2,o.map(function(n){var x=bs(function(){var x=Ff(Gs(n,[1,e,i,3]),[0,2,1,3]).toFloat();return Zv(x)});return x})]}})})}function oj(n,x){return bs(function(){var t=nj(n,x),e=Uh(t,[t.shape[0],x.fc1.weights.shape[0]]),i=az(e,x.fc1),r=$v(i,x.prelu4_alpha),o=az(r,x.fc2_1),s=Ih(Af(o,1),1),h=yu(vd(o,s),1),u=az(r,x.fc2_2),a=Yh(h,1)[1];return{scores:a,regions:u}})}function sj(n,x,t,e,i){return Cm(this,void 0,void 0,function(){var r,o,s,h,u,a,g,l,c,d,f,p,y,m;return Am(this,function(b){switch(b.label){case 0:return r=Date.now(),[4,rj(n,x,{width:24,height:24})];case 1:return o=b.sent(),i.stage2_extractImagePatches=Date.now()-r,r=Date.now(),s=o.map(function(n){var x=oj(n,e);return n.dispose(),x}),i.stage2_rnet=Date.now()-r,h=s.length>1?ih(s.map(function(n){return n.scores})):s[0].scores,g=(a=Array).from,[4,h.data()];case 2:return u=g.apply(a,[b.sent()]),h.dispose(),l=u.map(function(n,x){return{score:n,idx:x}}).filter(function(n){return n.score>t}).map(function(n){var x=n.idx;return x}),c=l.map(function(n){return x[n]}),d=l.map(function(n){return u[n]}),f=[],p=[],c.length>0&&(r=Date.now(),y=Jm(c,d,.7),i.stage2_nms=Date.now()-r,m=y.map(function(n){var x=s[l[n]].regions.arraySync();return new Xv(x[0][0],x[0][1],x[0][2],x[0][3])}),p=y.map(function(n){return d[n]}),f=y.map(function(n,x){return c[n].calibrate(m[x])})),s.forEach(function(n){n.regions.dispose(),n.scores.dispose()}),[2,{boxes:f,scores:p}]}})})}function hj(n,x){return bs(function(){var t=nj(n,x);t=gf(t,[2,2],[2,2],"same"),t=Yb(t,x.conv4,"valid"),t=$v(t,x.prelu4_alpha);var e=Uh(t,[t.shape[0],x.fc1.weights.shape[0]]),i=az(e,x.fc1),r=$v(i,x.prelu5_alpha),o=az(r,x.fc2_1),s=Ih(Af(o,1),1),h=yu(vd(o,s),1),u=az(r,x.fc2_2),a=az(r,x.fc2_3),g=Yh(h,1)[1];return{scores:g,regions:u,points:a}})}function uj(n,x,t,e,i){return Cm(this,void 0,void 0,function(){var r,o,s,h,u,a,g,l,c,d,f,p,y,m,b;return Am(this,function(z){switch(z.label){case 0:return r=Date.now(),[4,rj(n,x,{width:48,height:48})];case 1:return o=z.sent(),i.stage3_extractImagePatches=Date.now()-r,r=Date.now(),s=o.map(function(n){var x=hj(n,e);return n.dispose(),x}),i.stage3_onet=Date.now()-r,h=s.length>1?ih(s.map(function(n){return n.scores})):s[0].scores,g=(a=Array).from,[4,h.data()];case 2:return u=g.apply(a,[z.sent()]),h.dispose(),l=u.map(function(n,x){return{score:n,idx:x}}).filter(function(n){return n.score>t}).map(function(n){var x=n.idx;return x}),c=l.map(function(n){var x=s[n].regions.arraySync();return new Xv(x[0][0],x[0][1],x[0][2],x[0][3])}),d=l.map(function(n,t){return x[n].calibrate(c[t])}),f=l.map(function(n){return u[n]}),p=[],y=[],m=[],d.length>0&&(r=Date.now(),b=Jm(d,f,.7,!1),i.stage3_nms=Date.now()-r,p=b.map(function(n){return d[n]}),y=b.map(function(n){return f[n]}),m=b.map(function(n,x){return Array(5).fill(0).map(function(t,e){var i=s[n].points.arraySync();return new Um(i[0][e]*(p[x].width+1)+p[x].left,i[0][e+5]*(p[x].height+1)+p[x].top)})})),s.forEach(function(n){n.regions.dispose(),n.scores.dispose(),n.points.dispose()}),[2,{boxes:p,scores:y,points:m}]}})})}var aj=function(n){function x(){return n.call(this,"Mtcnn")||this}return km(x,n),x.prototype.load=function(x){return Cm(this,void 0,void 0,function(){return Am(this,function(t){return console.warn("mtcnn is deprecated and will be removed soon"),[2,n.prototype.load.call(this,x)]})})},x.prototype.loadFromDisk=function(x){return Cm(this,void 0,void 0,function(){return Am(this,function(t){return console.warn("mtcnn is deprecated and will be removed soon"),[2,n.prototype.loadFromDisk.call(this,x)]})})},x.prototype.forwardInput=function(n,x){return void 0===x&&(x={}),Cm(this,void 0,void 0,function(){var t,e,i,r,o,s,h,u,a,g,l,c,d,f,p,y,m,b,z,v,j;return Am(this,function(w){switch(w.label){case 0:if(t=this.params,!t)throw new Error("Mtcnn - load model before inference");if(e=n.canvases[0],!e)throw new Error("Mtcnn - inputCanvas is not defined, note that passing tensors into Mtcnn.forwardInput is not supported yet.");return i={},r=Date.now(),o=bs(function(){return Hv(Ih(im.fromPixels(e)).toFloat())}),s=function(n){return o.dispose(),i.total=Date.now()-r,n},h=o.shape.slice(1),u=h[0],a=h[1],g=new $z(x),l=g.minFaceSize,c=g.scaleFactor,d=g.maxNumScales,f=g.scoreThresholds,p=g.scaleSteps,y=(p||Jv(l,c,[u,a])).filter(function(n){var x=Yv(n,[u,a]);return Math.min(x.width,x.height)>Vv}).slice(0,d),i.scales=y,i.pyramid=y.map(function(n){return Yv(n,[u,a])}),m=Date.now(),[4,ij(o,y,f[0],t.pnet,i)];case 1:return b=w.sent(),i.total_stage1=Date.now()-m,b.boxes.length?(i.stage2_numInputBoxes=b.boxes.length,m=Date.now(),[4,sj(e,b.boxes,f[1],t.rnet,i)]):[2,s({results:[],stats:i})];case 2:return z=w.sent(),i.total_stage2=Date.now()-m,z.boxes.length?(i.stage3_numInputBoxes=z.boxes.length,m=Date.now(),[4,uj(e,z.boxes,f[2],t.onet,i)]):[2,s({results:[],stats:i})];case 3:return v=w.sent(),i.total_stage3=Date.now()-m,j=v.boxes.map(function(n,x){return zz(lb({},new Gm(v.scores[x],new xb(n.left/a,n.top/u,n.width/a,n.height/u),{height:u,width:a})),new ob(v.points[x].map(function(x){return x.sub(new Um(n.left,n.top)).div(new Um(n.width,n.height))}),{width:n.width,height:n.height}))}),[2,s({results:j,stats:i})]}})})},x.prototype.forward=function(n,x){return void 0===x&&(x={}),Cm(this,void 0,void 0,function(){var t;return Am(this,function(e){switch(e.label){case 0:return t=this.forwardInput,[4,Nb(n)];case 1:return[4,t.apply(this,[e.sent(),x])];case 2:return[2,e.sent().results]}})})},x.prototype.forwardWithStats=function(n,x){return void 0===x&&(x={}),Cm(this,void 0,void 0,function(){var t;return Am(this,function(e){switch(e.label){case 0:return t=this.forwardInput,[4,Nb(n)];case 1:return[2,t.apply(this,[e.sent(),x])]}})})},x.prototype.getDefaultModelName=function(){return"mtcnn_model"},x.prototype.extractParamsFromWeigthMap=function(n){return Kv(n)},x.prototype.extractParams=function(n){return Qv(n)},x}(Wb),gj=.4,lj=[new Um(1.603231,2.094468),new Um(6.041143,7.080126),new Um(2.882459,3.518061),new Um(4.266906,5.178857),new Um(9.041765,10.66308)],cj=[117.001,114.697,97.404],dj=function(n){function x(){var x=this,t={withSeparableConvs:!0,iouThreshold:gj,classes:["face"],anchors:lj,meanRgb:cj,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};return x=n.call(this,t)||this,x}return km(x,n),Object.defineProperty(x.prototype,"anchors",{get:function(){return this.config.anchors},enumerable:!0,configurable:!0}),x.prototype.locateFaces=function(n,x){return Cm(this,void 0,void 0,function(){var t;return Am(this,function(e){switch(e.label){case 0:return[4,this.detect(n,x)];case 1:return t=e.sent(),[2,t.map(function(n){return new Gm(n.score,n.relativeBox,{width:n.imageWidth,height:n.imageHeight})})]}})})},x.prototype.getDefaultModelName=function(){return"tiny_face_detector_model"},x.prototype.extractParamsFromWeigthMap=function(x){return n.prototype.extractParamsFromWeigthMap.call(this,x)},x}(Rv),fj={ssdMobilenetv1:new yv,tinyFaceDetector:new dj,tinyYolov2:new Bv,mtcnn:new aj,faceLandmark68Net:new Rz,faceLandmark68TinyNet:new Fz,faceRecognitionNet:new Xz,faceExpressionNet:new yz,ageGenderNet:new _z};function pj(n,x){var t={age:x};return Object.assign({},n,t)}var yj=function(n){function x(x,t,e){var i=n.call(this)||this;return i.parentTask=x,i.input=t,i.extractedFaces=e,i}return km(x,n),x}(Nv),mj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x,t=this;return Am(this,function(e){switch(e.label){case 0:return[4,this.parentTask];case 1:return n=e.sent(),[4,Pv(n,this.input,function(n){return Cm(t,void 0,void 0,function(){return Am(this,function(x){switch(x.label){case 0:return[4,Promise.all(n.map(function(n){return fj.faceExpressionNet.predictExpressions(n)}))];case 1:return[2,x.sent()]}})})},this.extractedFaces)];case 2:return x=e.sent(),[2,n.map(function(n,t){return mz(n,x[t])})]}})})},x.prototype.withAgeAndGender=function(){return new wj(this,this.input)},x}(yj),bj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x;return Am(this,function(t){switch(t.label){case 0:return[4,this.parentTask];case 1:return n=t.sent(),n?[4,Lv(n,this.input,function(n){return fj.faceExpressionNet.predictExpressions(n)},this.extractedFaces)]:[2];case 2:return x=t.sent(),[2,mz(n,x)]}})})},x.prototype.withAgeAndGender=function(){return new kj(this,this.input)},x}(yj),zj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.withAgeAndGender=function(){return new qj(this,this.input)},x.prototype.withFaceDescriptors=function(){return new Ej(this,this.input)},x}(mj),vj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.withAgeAndGender=function(){return new Cj(this,this.input)},x.prototype.withFaceDescriptor=function(){return new Sj(this,this.input)},x}(bj),jj=function(n){function x(x,t,e){var i=n.call(this)||this;return i.parentTask=x,i.input=t,i.extractedFaces=e,i}return km(x,n),x}(Nv),wj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x,t=this;return Am(this,function(e){switch(e.label){case 0:return[4,this.parentTask];case 1:return n=e.sent(),[4,Pv(n,this.input,function(n){return Cm(t,void 0,void 0,function(){return Am(this,function(x){switch(x.label){case 0:return[4,Promise.all(n.map(function(n){return fj.ageGenderNet.predictAgeAndGender(n)}))];case 1:return[2,x.sent()]}})})},this.extractedFaces)];case 2:return x=e.sent(),[2,n.map(function(n,t){var e=x[t],i=e.age,r=e.gender,o=e.genderProbability;return pj(Zz(n,r,o),i)})]}})})},x.prototype.withFaceExpressions=function(){return new mj(this,this.input)},x}(jj),kj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x,t,e,i;return Am(this,function(r){switch(r.label){case 0:return[4,this.parentTask];case 1:return n=r.sent(),n?[4,Lv(n,this.input,function(n){return fj.ageGenderNet.predictAgeAndGender(n)},this.extractedFaces)]:[2];case 2:return x=r.sent(),t=x.age,e=x.gender,i=x.genderProbability,[2,pj(Zz(n,e,i),t)]}})})},x.prototype.withFaceExpressions=function(){return new bj(this,this.input)},x}(jj),qj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.withFaceExpressions=function(){return new zj(this,this.input)},x.prototype.withFaceDescriptors=function(){return new Ej(this,this.input)},x}(wj),Cj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.withFaceExpressions=function(){return new vj(this,this.input)},x.prototype.withFaceDescriptor=function(){return new Sj(this,this.input)},x}(kj),Aj=function(n){function x(x,t){var e=n.call(this)||this;return e.parentTask=x,e.input=t,e}return km(x,n),x}(Nv),Ej=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x;return Am(this,function(t){switch(t.label){case 0:return[4,this.parentTask];case 1:return n=t.sent(),[4,Pv(n,this.input,function(n){return Promise.all(n.map(function(n){return fj.faceRecognitionNet.computeFaceDescriptor(n)}))},null,function(n){return n.landmarks.align(null,{useDlibAlignment:!0})})];case 2:return x=t.sent(),[2,x.map(function(x,t){return Fv(n[t],x)})]}})})},x.prototype.withFaceExpressions=function(){return new zj(this,this.input)},x.prototype.withAgeAndGender=function(){return new qj(this,this.input)},x}(Aj),Sj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x;return Am(this,function(t){switch(t.label){case 0:return[4,this.parentTask];case 1:return n=t.sent(),n?[4,Lv(n,this.input,function(n){return fj.faceRecognitionNet.computeFaceDescriptor(n)},null,function(n){return n.landmarks.align(null,{useDlibAlignment:!0})})]:[2];case 2:return x=t.sent(),[2,Fv(n,x)]}})})},x.prototype.withFaceExpressions=function(){return new vj(this,this.input)},x.prototype.withAgeAndGender=function(){return new Cj(this,this.input)},x}(Aj),Ij=function(n){function x(x,t,e){var i=n.call(this)||this;return i.parentTask=x,i.input=t,i.useTinyLandmarkNet=e,i}return km(x,n),Object.defineProperty(x.prototype,"landmarkNet",{get:function(){return this.useTinyLandmarkNet?fj.faceLandmark68TinyNet:fj.faceLandmark68Net},enumerable:!0,configurable:!0}),x}(Nv),Dj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x,t,e,i,r=this;return Am(this,function(o){switch(o.label){case 0:return[4,this.parentTask];case 1:return n=o.sent(),x=n.map(function(n){return n.detection}),this.input instanceof Kr?[4,Pb(this.input,x)]:[3,3];case 2:return e=o.sent(),[3,5];case 3:return[4,Fb(this.input,x)];case 4:e=o.sent(),o.label=5;case 5:return t=e,[4,Promise.all(t.map(function(n){return r.landmarkNet.detectLandmarks(n)}))];case 6:return i=o.sent(),t.forEach(function(n){return n instanceof Kr&&n.dispose()}),[2,n.map(function(n,x){return zz(n,i[x])})]}})})},x.prototype.withFaceExpressions=function(){return new zj(this,this.input)},x.prototype.withAgeAndGender=function(){return new qj(this,this.input)},x.prototype.withFaceDescriptors=function(){return new Ej(this,this.input)},x}(Ij),Oj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x,t,e,i;return Am(this,function(r){switch(r.label){case 0:return[4,this.parentTask];case 1:return n=r.sent(),n?(x=n.detection,this.input instanceof Kr?[4,Pb(this.input,[x])]:[3,3]):[2];case 2:return e=r.sent(),[3,5];case 3:return[4,Fb(this.input,[x])];case 4:e=r.sent(),r.label=5;case 5:return t=e,[4,this.landmarkNet.detectLandmarks(t[0])];case 6:return i=r.sent(),t.forEach(function(n){return n instanceof Kr&&n.dispose()}),[2,zz(n,i)]}})})},x.prototype.withFaceExpressions=function(){return new vj(this,this.input)},x.prototype.withAgeAndGender=function(){return new Cj(this,this.input)},x.prototype.withFaceDescriptor=function(){return new Sj(this,this.input)},x}(Ij),_j=function(n){function x(x,t){void 0===t&&(t=new pv);var e=n.call(this)||this;return e.input=x,e.options=t,e}return km(x,n),x}(Nv),Tj=function(n){function x(){return null!==n&&n.apply(this,arguments)||this}return km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x,t,e;return Am(this,function(i){switch(i.label){case 0:return n=this,x=n.input,t=n.options,t instanceof $z?[4,fj.mtcnn.forward(x,t)]:[3,2];case 1:return[2,i.sent().map(function(n){return n.detection})];case 2:if(e=t instanceof Mv?function(n){return fj.tinyFaceDetector.locateFaces(n,t)}:t instanceof pv?function(n){return fj.ssdMobilenetv1.locateFaces(n,t)}:t instanceof Tv?function(n){return fj.tinyYolov2.locateFaces(n,t)}:null,!e)throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options");return[2,e(x)]}})})},x.prototype.runAndExtendWithFaceDetections=function(){var n=this;return new Promise(function(x){return Cm(n,void 0,void 0,function(){var n;return Am(this,function(t){switch(t.label){case 0:return[4,this.run()];case 1:return n=t.sent(),[2,x(n.map(function(n){return lb({},n)}))]}})})})},x.prototype.withFaceLandmarks=function(n){return void 0===n&&(n=!1),new Dj(this.runAndExtendWithFaceDetections(),this.input,n)},x.prototype.withFaceExpressions=function(){return new mj(this.runAndExtendWithFaceDetections(),this.input)},x.prototype.withAgeAndGender=function(){return new wj(this.runAndExtendWithFaceDetections(),this.input)},x}(_j);(function(n){function x(){return null!==n&&n.apply(this,arguments)||this}km(x,n),x.prototype.run=function(){return Cm(this,void 0,void 0,function(){var n,x;return Am(this,function(t){switch(t.label){case 0:return[4,new Tj(this.input,this.options)];case 1:return n=t.sent(),x=n[0],n.forEach(function(n){n.score>x.score&&(x=n)}),[2,x]}})})},x.prototype.runAndExtendWithFaceDetection=function(){var n=this;return new Promise(function(x){return Cm(n,void 0,void 0,function(){var n;return Am(this,function(t){switch(t.label){case 0:return[4,this.run()];case 1:return n=t.sent(),[2,x(n?lb({},n):void 0)]}})})})},x.prototype.withFaceLandmarks=function(n){return void 0===n&&(n=!1),new Oj(this.runAndExtendWithFaceDetection(),this.input,n)},x.prototype.withFaceExpressions=function(){return new bj(this.runAndExtendWithFaceDetection(),this.input)},x.prototype.withAgeAndGender=function(){return new kj(this.runAndExtendWithFaceDetection(),this.input)}})(_j);function Rj(n,x){return void 0===x&&(x=new pv),new Tj(n,x)}function Bj(n,x){if(n.length!==x.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");var t=Array.from(n),e=Array.from(x);return Math.sqrt(t.map(function(n,x){return n-e[x]}).reduce(function(n,x){return n+Math.pow(x,2)},0))}(function(){function n(n,x){void 0===x&&(x=.6),this._distanceThreshold=x;var t=Array.isArray(n)?n:[n];if(!t.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");var e=1,i=function(){return"person "+e++};this._labeledDescriptors=t.map(function(n){if(n instanceof ab)return n;if(n instanceof Float32Array)return new ab(i(),[n]);if(n.descriptor&&n.descriptor instanceof Float32Array)return new ab(i(),[n.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor<any> | Float32Array | Array<LabeledFaceDescriptors | WithFaceDescriptor<any> | Float32Array>")})}Object.defineProperty(n.prototype,"labeledDescriptors",{get:function(){return this._labeledDescriptors},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"distanceThreshold",{get:function(){return this._distanceThreshold},enumerable:!0,configurable:!0}),n.prototype.computeMeanDistance=function(n,x){return x.map(function(x){return Bj(x,n)}).reduce(function(n,x){return n+x},0)/(x.length||1)},n.prototype.matchDescriptor=function(n){var x=this;return this.labeledDescriptors.map(function(t){var e=t.descriptors,i=t.label;return new hb(i,x.computeMeanDistance(n,e))}).reduce(function(n,x){return n.distance<x.distance?n:x})},n.prototype.findBestMatch=function(n){var x=this.matchDescriptor(n);return x.distance<this.distanceThreshold?x:new hb("unknown",x.distance)},n.prototype.toJSON=function(){return{distanceThreshold:this.distanceThreshold,labeledDescriptors:this.labeledDescriptors.map(function(n){return n.toJSON()})}},n.fromJSON=function(x){var t=x.labeledDescriptors.map(function(n){return ab.fromJSON(n)});return new n(t,x.distanceThreshold)}})();var Mj={name:"FaceDetection",emits:["face-detected","face-lost","error","detection-complete"],props:{videoWidth:{type:Number,default:240},videoHeight:{type:Number,default:240},minConfidence:{type:Number,default:.5},captureInterval:{type:Number,default:2e3},maxCaptures:{type:Number,default:1}},data(){return{modelPath:ae.getters.faceApiUrl,loading:!1,modelsLoaded:!1,cameraStarted:!1,cameraReady:!1,isDetecting:!1,stream:null,detectionInterval:null,capturedImages:[],lastCaptureTime:0}},created(){const n=window.location.href.split("?")?.[1]?.split("=")?.[1];n&&(this.modelPath=n);const x=localStorage.getItem("xc_modelPath");x&&(this.modelPath=x)},async mounted(){await this.loadModels(),await this.autoStartDetection()},beforeDestroy(){this.cleanup()},methods:{h_back(){this.$emit("back")},async loadModels(){try{this.loading=!0,await Promise.all([fj.tinyFaceDetector.loadFromUri(this.modelPath),fj.faceLandmark68Net.loadFromUri(this.modelPath),fj.faceRecognitionNet.loadFromUri(this.modelPath)]),this.modelsLoaded=!0,console.log("人脸检测模型加载完成")}catch(n){this.$emit("error",{type:"model-load-error",error:n})}finally{this.loading=!1}},async autoStartDetection(){if(this.modelsLoaded)try{await this.startCamera(),setTimeout(()=>{this.cameraReady&&this.startDetection()},1e3)}catch(n){console.error("自动开始检测失败:",n)}},async startCamera(){try{this.stream=await navigator.mediaDevices.getUserMedia({video:{width:this.videoWidth,height:this.videoHeight,facingMode:"user"}}),this.$refs.video.srcObject=this.stream,this.cameraStarted=!0}catch(n){console.error("摄像头启动失败:",n),this.$emit("error",{type:"camera-error",error:n})}},onVideoLoaded(){this.cameraReady=!0,console.log("摄像头准备就绪"),this.modelsLoaded&&!this.isDetecting&&setTimeout(()=>{this.startDetection()},500)},stopCamera(){this.stopDetection(),this.stream&&(this.stream.getTracks().forEach(n=>n.stop()),this.stream=null),this.cameraStarted=!1,this.cameraReady=!1},startDetection(){this.modelsLoaded&&this.cameraReady&&(this.isDetecting=!0,this.detectionInterval=setInterval(()=>{this.detectFaces()},100))},stopDetection(){this.isDetecting=!1,this.detectionInterval&&(clearInterval(this.detectionInterval),this.detectionInterval=null);const n=this.$refs.overlay,x=n.getContext("2d");x.clearRect(0,0,n.width,n.height)},toggleDetection(){this.isDetecting?this.stopDetection():this.startDetection()},async detectFaces(){const n=this.$refs.video,x=this.$refs.overlay;if(n&&x)try{const t=await Rj(n,new Mv).withFaceLandmarks().withFaceDescriptors(),e=x.getContext("2d");if(e.clearRect(0,0,x.width,x.height),t.length>0){t.forEach(n=>{const{x:x,y:t,width:i,height:r}=n.detection.box;e.strokeStyle="#00ff00",e.lineWidth=2,e.strokeRect(x,t,i,r),e.fillStyle="#00ff00",e.font="16px Arial",e.fillText(`${(100*n.detection.score).toFixed(1)}%`,x,t-10)});const n=Date.now();n-this.lastCaptureTime>this.captureInterval&&(this.captureHighConfidenceFaces(t),this.lastCaptureTime=n),this.$emit("face-detected",t),this.onFaceDetectedComplete(t)}else this.$emit("face-lost")}catch(t){console.error("人脸检测失败:",t),this.$emit("error",{type:"detection-error",error:t})}},captureHighConfidenceFaces(n){const x=this.$refs.video;n.forEach(n=>{if(n.detection.score>=this.minConfidence){const t=document.createElement("canvas"),e=t.getContext("2d"),{x:i,y:r,width:o,height:s}=n.detection.box,h=1,u=1,a=1,g=s*(1+h+a),l=o*(1+2*u),c=Math.max(0,i-o*u),d=Math.max(0,r-s*h),f=x.videoWidth||this.videoWidth,p=x.videoHeight||this.videoHeight,y=Math.max(0,c),m=Math.max(0,d),b=Math.min(l,f-y),z=Math.min(g,p-m);t.width=b,t.height=z,e.drawImage(x,y,m,b,z,0,0,b,z);const v=t.toDataURL("image/jpeg",.8);this.capturedImages.unshift({dataUrl:v,confidence:n.detection.score,timestamp:Date.now(),box:n.detection.box,expandedBox:{x:y,y:m,width:b,height:z}}),this.capturedImages.length>this.maxCaptures&&(this.capturedImages=this.capturedImages.slice(0,this.maxCaptures)),console.log("捕获到高置信度人脸:",n.detection.score)}})},async copyToClipboard(n){try{await navigator.clipboard.writeText(n),console.log("Base64已复制到剪贴板")}catch(x){console.error("复制失败:",x)}},onFaceDetectedComplete(n){this.stopDetection(),this.stopCamera(),this.$emit("detection-complete",{detections:n,capturedImages:this.capturedImages})},cleanup(){this.stopCamera(),this.capturedImages=[]},async restartAuthentication(){try{console.log("开始重新认证..."),this.cleanup(),this.capturedImages=[],this.lastCaptureTime=0,this.modelsLoaded||await this.loadModels(),await this.autoStartDetection(),this.$emit("restart-authentication")}catch(n){console.error("重新认证启动失败:",n),this.$emit("error",{type:"restart-error",error:n})}}}},Nj=Mj,Fj=Ie(Nj,Ei,Si,!1,null,"5308c508",null),Pj=Fj.exports,Lj=function(){var n=this,x=n._self._c;return x("div",{directives:[{name:"loading",rawName:"v-loading",value:n.loading,expression:"loading"}],staticClass:"face-picture"},[x("img",{attrs:{src:n.src,width:"100%",height:"100%"}}),x("div",{staticClass:"delete-batn",on:{click:n.handleDelete}},[x("i",{staticClass:"el-icon-delete",staticStyle:{size:"20px"}})])])},Hj=[],Uj={props:{row:Object},data(){return{src:null,loading:!1}},created(){},mounted(){this.loadFaceImage()},methods:{handleDelete(){this.handleClearFaceInfo()},loadFaceImage(){if(!this.row?.userId)return void console.warn("用户ID不存在,无法加载人脸信息");const n=!1;this.src=n?`/face/photo?userId=${this.row?.userId}`:ae.getters.authUrl+`/face/photo?userId=${this.row?.userId}`},handleClearFaceInfo(){this.$confirm("确定要清除人脸信息吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{this.loading=!0,fi({userId:this.row?.userId}).then(()=>{this.$emit("clear-face"),this.$message.success("人脸信息已清除")}).finally(()=>{this.loading=!1})}).catch(()=>{})}}},Vj=Uj,Wj=Ie(Vj,Lj,Hj,!1,null,"8a1623a6",null),Qj=Wj.exports,Gj={name:"FaceRegister",props:{row:Object,options:Array},components:{ChooseCameraOrPicture:vi,UploadPicture:Ai,FaceDetected:Pj,FacePicture:Qj},data(){const n=this.row?.userId;return{userId:n,chooseType:"loading",uploading:!1,userIdMissing:!1}},created(){this.checkFaceInfo()},methods:{checkFaceInfo(){di({userId:this.userId}).then(n=>{this.chooseType=n.data?"face-info":""})},handleBack(){this.chooseType=""},handleClose(){},handleChoose(n){this.chooseType="camera"===n?"camera":"picture"},handleClearFace(){this.checkFaceInfo()},handleRefresh(){window.location.reload()},handleUploadSuccess(){this.checkFaceInfo()},async handleDetectionComplete(n){if(this.userId)if(n.capturedImages&&0!==n.capturedImages.length)try{this.uploading=!0,this.chooseType="";const x=n.capturedImages[0],t=x.dataUrl,e=this.base64ToFile(t,"face-detected.jpg"),i=new FormData;i.append("file",e),i.append("userId",this.userId),i.append("userName",this.row?.row?.name||""),await ci(i),this.$message.success("人脸注册成功!"),this.checkFaceInfo()}catch(x){console.error("人脸上传失败:",x),this.chooseType=""}finally{this.uploading=!1}else this.$message.error("未检测到人脸图片");else this.$message.error("用户信息不完整,无法进行人脸注册")},base64ToFile(n,x){const t=n.split(","),e=t[0].match(/:(.*?);/)[1],i=atob(t[1]);let r=i.length;const o=new Uint8Array(r);while(r--)o[r]=i.charCodeAt(r);return new File([o],x,{type:e})}}},Kj=Gj,Yj=Ie(Kj,ui,ai,!1,null,"d4c502b4",null),Jj=Yj.exports,Xj=function(){var n=this,x=n._self._c;return x("div",{directives:[{name:"loading",rawName:"v-loading",value:n.loading,expression:"loading"}],staticClass:"p-12"},[x("el-table",{ref:"table",attrs:{data:n.tableData,stripe:"","header-cell-style":{background:"#f7f8fa"}},on:{"selection-change":n.h_selectionChange,"row-click":n.h_rowClick}},[x("el-table-column",{attrs:{type:"selection",width:"75"}}),x("el-table-column",{attrs:{type:"index",label:"序号",width:"80"}}),x("el-table-column",{attrs:{prop:"icCard",label:"身份卡号"}})],1),x("div",{staticClass:"flex-center mt-12"},[x("el-button",{staticStyle:{"border-radius":"8px",padding:"7px 20px"},attrs:{type:"primary",icon:"el-icon-circle-plus-outline"},on:{click:n.h_add}},[n._v("添加")]),x("el-button",{staticStyle:{"border-radius":"8px",padding:"7px 20px"},attrs:{icon:"el-icon-delete",type:"danger"},on:{click:n.h_remove}},[n._v("移除")])],1),n.visible?x("register-dialog",{attrs:{row:n.row},on:{closed:function(x){n.visible=!1},refresh:n.h_loadData}}):n._e()],1)},Zj=[];const $j=n=>li({url:"/userICCard/add",method:"post",data:n}),nw=n=>li({url:"/icCard/findNoBindICCard",method:"get",params:n}),xw=n=>li({url:"/userICCard/deleteByIcCard",method:"post",data:n}),tw=n=>li({url:"/userICCard/findByUserId",method:"get",params:n});var ew=function(){var n=this,x=n._self._c;return x("el-dialog",{attrs:{visible:n.visible,width:"580px",title:"normal"===n.component?"新增身份卡":"选择身份卡","append-to-body":""},on:{closed:n.closed,close:n.h_close}},["normal"===n.component?x("div",[x("div",{staticClass:"p-12 pr-32"},[x("el-form",{attrs:{model:n.form,"label-width":"100px"}},[x("el-form-item",{attrs:{label:"身份卡号"}},[x("el-input",{attrs:{placeholder:"请输入或者使用刷卡器刷卡"},model:{value:n.form.cardNo,callback:function(x){n.$set(n.form,"cardNo",x)},expression:"form.cardNo"}})],1)],1)],1),x("div",{staticClass:"select-section"},[x("el-button",{staticClass:"select-button",attrs:{type:"text"},on:{click:n.h_selectCard}},[n._v(" 选择已录入身份卡 >> ")])],1),x("div",{staticClass:"dialog-footer f_center",staticStyle:{"margin-top":"100px"}},[x("el-button",{attrs:{loading:n.loading},on:{click:n.h_close}},[n._v("取消")]),x("el-button",{attrs:{type:"primary",loading:n.loading},on:{click:n.h_submit}},[n._v("确定")])],1)]):n._e(),"table"===n.component?x("div",[x("card-table",{attrs:{loading:n.loading},on:{back:n.h_back,submit:n.h_submit}})],1):n._e()])},iw=[],rw=function(){var n=this,x=n._self._c;return x("div",{directives:[{name:"loading",rawName:"v-loading",value:n.loading,expression:"loading"}]},[x("el-table",{ref:"table",attrs:{data:n.tableData,stripe:"","header-cell-style":{background:"#f7f8fa"}},on:{"selection-change":n.h_selectionChange,"row-click":n.h_rowClick}},[x("el-table-column",{attrs:{type:"selection",width:"75"}}),x("el-table-column",{attrs:{type:"index",label:"序号",width:"80"}}),x("el-table-column",{attrs:{prop:"icCard",label:"IC卡号"}}),x("el-table-column",{attrs:{prop:"createdTime",label:"录入时间"}})],1),n._e(),x("div",{staticClass:"flex-center mt-42"},[x("el-button",{on:{click:n.h_back}},[n._v("返回")]),x("el-button",{attrs:{type:"primary"},on:{click:n.h_submit}},[n._v("确定")])],1)],1)},ow=[],sw={name:"CardTable",props:{loading:{type:Boolean,default:!1}},data(){return{tableData:[],selection:[],pagination:{current:1,size:5,total:0}}},created(){this.f_loadData()},methods:{h_rowClick(n){this.$refs.table.toggleRowSelection(n)},h_currentChange(n){this.table.pagination.current=n,this.f_loadData()},h_back(){this.$emit("back")},h_submit(){0!==this.selection.length?this.$emit("submit",this.selection):this.$message.warning("请选择要添加的IC卡")},f_loadData(){nw({keyword:null}).then(n=>{this.tableData=n.data})},h_selectionChange(n){this.selection=n}}},hw=sw,uw=Ie(hw,rw,ow,!1,null,"49d6fcb9",null),aw=uw.exports,gw={name:"RegisterDialog",components:{CardTable:aw},props:{row:{type:Object,default:()=>{}}},data(){return{loading:!1,component:"normal",visible:!1,form:{cardNo:""}}},created(){},mounted(){this.visible=!0,this.$authEventBus.$on("card",this.h_card)},beforeDestroy(){this.$authEventBus.$off("card",this.h_card)},methods:{h_card(n){0!==n.result&&200!==n.status||(this.form.cardNo=n.data)},h_back(){this.component="normal"},h_submit(n){this.loading=!0;let x={userId:this.row.userId,userName:this.row.row.name,icCards:[this.form.cardNo],tenantId:""};n&&(x={userId:this.row.userId,userName:this.row.row.name,icCards:n.map(n=>n.icCard),tenantId:""}),$j(x).then(()=>{this.$message.success("新增成功"),this.visible=!1,this.$emit("refresh")}).finally(()=>{this.loading=!1})},h_close(){this.visible=!1},closed(){this.$emit("closed")},h_selectCard(){this.component="table"}}},lw=gw,cw=Ie(lw,ew,iw,!1,null,"1e4a3a1e",null),dw=cw.exports,fw={name:"CardRegister",components:{RegisterDialog:dw},props:{row:{type:Object,default:()=>{}}},data(){return{tableData:[],selection:[],visible:!1,loading:!1}},created(){this.h_loadData()},methods:{h_rowClick(n){this.$refs.table.toggleRowSelection(n)},h_loadData(){this.loading=!0,tw({userId:this.row.userId}).then(n=>{this.tableData=n.data}).finally(()=>{this.loading=!1})},h_add(){this.visible=!0},h_remove(){this.$confirm("确定移除选中的身份卡吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{this.loading=!0,xw(this.selection.map(n=>n.icCardId)).then(()=>{this.$message.success("移除成功"),this.h_loadData()}).finally(()=>{this.loading=!1})}).catch(()=>{})},h_selectionChange(n){this.selection=n}}},pw=fw,yw=Ie(pw,Xj,Zj,!1,null,"6f88fce1",null),mw=yw.exports,bw=function(){var n=this,x=n._self._c;return x("div",{staticClass:"flex-center align-center h100 w100"},[x("div",{staticClass:"finger-dialog"},[x("div",{staticClass:"finger-register-content"},[x("div",{staticStyle:{color:"#333","font-size":"24px","margin-bottom":"12px","padding-top":"48px","text-align":"center","margin-top":"24px"}},[n._v(" "+n._s(n.stepTips)+" ")]),x("div",{staticStyle:{display:"flex","justify-content":"center","align-items":"center","padding-top":"50px"}},[x("div",{staticClass:"hand-area left-hand"},[x("div",{staticClass:"hand-image-wrapper"},[x("img",{staticClass:"hand-image",attrs:{src:n.leftHandleImg}}),x("div",{staticClass:"finger-buttons-overlay"},n._l(n.leftFingers,function(t,e){return x("div",{key:"left-"+e,class:["finger-circle",{active:n.selectedFinger&&n.selectedFinger.value===t.value,ready:!!t.fingerInfo}],style:{top:t.top+"px",left:t.left+"px"},on:{click:function(x){return n.handleSelectFinger(t)}}})}),0)])]),x("div",{staticClass:"hand-area right-hand"},[x("div",{staticClass:"hand-image-wrapper"},[x("img",{staticClass:"hand-image",attrs:{src:n.rightHandleImg}}),x("div",{staticClass:"finger-buttons-overlay"},n._l(n.rightFingers,function(t,e){return x("div",{key:"right-"+e,class:["finger-circle",{active:n.selectedFinger&&n.selectedFinger.value===t.value,ready:!!t.fingerInfo}],style:{top:t.top+"px",left:t.left+"px"},on:{click:function(x){return n.handleSelectFinger(t)}}})}),0)])]),x("div",{staticClass:"fingerprint-status"},[x("div",{staticClass:"fingerprint-image-container"},[x("div",{staticClass:"delete-button"},[n.selectedFinger&&n.selectedFinger.fingerInfo?x("el-button",{attrs:{type:"text",size:"large"},on:{click:n.handleDeleteFinger}},[x("i",{staticClass:"el-icon-delete",staticStyle:{"font-size":"20px",color:"#999"}})]):n._e()],1),x("img",{staticClass:"fingerprint-image",attrs:{src:n.realFingerprintImage}}),x("p",{staticClass:"status-text"},[n._v(" "+n._s(n.fingerStatusText)+" ")])])])])])])])},zw=[];function vw(n){return li({url:"/finger/maxFingerSeq",method:"post",data:n})}function jw(n){return li({url:"/finger/upload",method:"post",data:n})}function ww(n){return li({url:"/finger/findByUserId",method:"post",data:n})}function kw(n){return li({url:"/finger/delete",method:"post",params:n})}const qw="data:image/gif;base64,R0lGODlhlACSANU/ANra2srT/nuK//Pz89XV1eHh4e7u7qe0/I2v/oWW/v39/bDI/tPT03Wl/+Xq//r6+nFu/9nj//P1/9za0+Tj2vr7//Py7Ovx/8TJ4vv69dvZ0N/d0uvq5NfX19XV0///+nl8//b4/9PT1c/Pz9jX0ubm5pqg++/u5/f28M3P3Wmb/9rd/re+5fv9/+Hg1r7C/+7v//f3+fHw5tPV1ujn3tjY1v3899bZ5urq6tXT0/f399PV0/39+dbW3P///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjM0NUE0Rjg1MTVEMjExRjBCMEY3RDJBMDcwMEY1MzZBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjM0NUE0Rjg2MTVEMjExRjBCMEY3RDJBMDcwMEY1MzZBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MzQ1QTRGODMxNUQyMTFGMEIwRjdEMkEwNzAwRjUzNkEiIHN0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",Cw="data:image/gif;base64,R0lGODlhlACSANU/AOfn5/z8/a2x/9TU1HJs/6/H/3Sn/+Xp/3mX/9vb2/Pz83qH/4SZ/9Xa/9nk/4Wm/8TJ//P0/8PW/4WH/5qq/5Wa/5u6/+Li4erx/9zb03t5/4Wx/26e//X068fK3Pn5+NrY0Nnc6by+/+De0sDH5KOh//T4/4+O/9fX15qZ79/f/9HR0aCl7djW0m6O/+3t7c/Q/83S687Q2qK17e/v/7e75d7e3vDv5GCa//f39vj4/9fX1dnZ2ZCM8v///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUwNEUwRkYwMTVEMjExRjBBRjI1ODNFMDZCQjRGNkUzIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUwNEUwRkYxMTVEMjExRjBBRjI1ODNFMDZCQjRGNkUzIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NTA0RTBGRUUxNUQyMTFGMEFGMjU4M0UwNkJCNEY2RTMiIHN0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",Aw="data:image/gif;base64,R0lGODlhlACSANU/AHNv/3Sn/7HJ/3mY/+Xq//z8/9TU1ISY/4Sm/3uI/9Ta/9rl/8TW/8XK//L0/4WI/5Wp/5m4/6a9/6ap/7W5/+jo55aY/+vx/3x6/4ax/26e//Pz8+Pj4KCf/5CO//T4/25j//X06/389q+v/7/A/9ra226N/7m+5cTI38/Q/6q56Nzb0qik7Juo7+7v/5ya7bq34N/g/2GZ/83R5u3s6Zy079/f2/j38fj4/7Cv5+/v7pKM8Yyq8vj4+P///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjU4OTAzMDZBMTVEMjExRjA5QTQ2OTYxODk3MjlGQjU3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjU4OTAzMDZCMTVEMjExRjA5QTQ2OTYxODk3MjlGQjU3Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NTg5MDMwNjgxNUQyMTFGMDlBNDY5NjE4OTcyOUZCNTciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NTg5MDMwNjkxNUQyMTFGMDlBNDY5NjE4OTcyOUZCNTciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQFAAA/ACwAAAAAlACSAAAG/0CfcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW67t4V44U0/FxwXwmK/UDD+gAwKfAsEFx91iVU4eX4CEREZkpMBlZWTkpASAgwLh4qgSXcXCwwSkZUalqusrRqqARkRnIaIoaAOpY8ZAbCtv8CssBGbChdzt22MCwK8wc/QwbIMBB/IyWYfpRLOv7CymwKcgYHij6i93gGzDMfYYzgEzcDfm52GDh8fOHL9OPp4CDhCF0yCsWvvtuBgxstXqlj2PNmickcgg13pVqmS0C7hFgcMuknKGKHTpy4VFcz7tkrCgokep4jQISCAjFgN13FyRyYXA/9UqhpqyCCAAMKYTjbQmGEzVrqS1dQUuKAywyunQRk4QOqkwAYbK1BYtUTU6BsHCiSQzVmU65IeFUoYMBCWxzpqR6V4pUFDh44NG3oIziuKqtqgliIowOH2yAYOcw2UWLFiBt4mOBxYXMB4SIG4c0uILmGDA4e+Fy44IFxkakiWQ7U2JqJDruTIHEL0YPJBoDhUGRh09rEhsnHjYSVE5ClK3li2BGYXoGHbtoEKu5XcYUawkowM0YUUP458Bo+rEKnBPKItQtCGEi64hRvZtg0drIX0vpiT1ffwPsBl3XFhNWWJKrN4soQ8Gd20AFf0SWYbB9khUYBzwbyCgHBE9KD/QwU0VFCBaTaQhgIPMjhElkFbJQGSVRp892BMEYo2F3bN/ZTRgbFAIoAC6wnRj2A9bBACDT/1181QArwkygIRIBBckLf0ANltc9GQH0gRpIMAAr0g+CM+U/RAiilKktVkfno46dFnoYWGn4XMeJlTBhxFlcVU3IGpgZRhBtfibERMF6dkOrj42p9+6qTgF/GYgoCGObmU35s0HFrCBklcUBNir5R16UcKdPleL1M24eGcdWwgV3WJHrGQe0NNyuQCo3pxgY6gIiCAfEpYeWOFbQiLZaxG4MDApAF8+UoEuHaVWR5t8kFALXE44SmzzmoQnxKZRlZBrmMUcGWWSIA0/+mXqP7KxFR6XHRKJJjIQsw4Er1bai/dQptEBYci24arNxL2gQAa2grtqPtxw+4r6KUCsSpSznLQEtsy2ou/jtlg3KZvFPAhq0U48KmzAUgA4BFTVRVms9EI82dJCwwq62swa8CxEbVhSSEdrB2c8J+ydcorxWBqNPHEq3zp558uDWdEAVBSjOrKRIQr1woCg1IAA/wyy6GFpaLn9FVfgqPc2pBk0G2zD/9ZVH5V5xwB1kIYSxkHN9yi7LqTBid1awpkkKLT6eApSCGpOeC443n0cVGUaD9NFLBHECCB1TpjTgTBJZygwgzElpvrAlY5u+GlOAhwuK0I0HzB4KJ8QP/VSnCHubMRBLjX7CsC2DyEDiuogIAMCChgBjMG0T5EDzNoSLTzhYKdIpMXU+GTBNzammrm7qHMQJAiKHDes3jrGoEMyCtAmAgVnAjx2Eu86KubWLhGK6CquHsE6oz604yKQIDU9UIA1NNC6yAmAwEESWSUQUENeNAAKiFBGzXzwoV+MoAAeit9BShcACPgOf0g7HcZGOAXFgCBASBgAANAoBEIRhkD2KB0Q9gAiMgFhwVIAIZfguHdWMYAIMIweLyLgAuPyEO9CMCIQyyCseRiAxGwjDpZaqIPGFEta6mmCRdowAsP8EITRLEIOPjhEpM3tWUt8YxduIASX7g6nh3/igZX/BgO2eObU0Dgj4D0kUmWgAMFQMAESzRj+uToQgSY4FtFYOQLB9AALXbFjS8koRGMNRcOECYEK8DSDbVDikdMEoaoTKULIZAnCwoBSkZ8pPBeSUcYMuAoBWiAESGQvitIEoaVNEK4QrPHG3CAMrYhmRF2JYEWqvKZMDwAKhEAgSYlEEqInKQMW/PEJUJAhULo3RIHcEsufK2W35zaua7DnhmoAAUeu07QSpXKIEJTlfZ04a9Yw8JGurCcBHSkI8k5NV2iUgKztMIHfijNGFJpmKNEYwOkyQMUrABHmRPAJA/A0WlCgBhrO8UpyXhKxViQhSb4kgnS2ZoimmCl/+AMZwtfyFItEGCmA6ipFOPCAU4ZQQEDHUALOGDFqcGykQ2NHSc80bjUCKQBzZxmGQ+AxDZKc5ISyMvBYhctIyx0AA1tQAKjEMIxDgChogjMERwQAROQ0QQ1cAHLDJnNSbKSGqsRhQti0IAIJPUAiIRkET4w0TUqzwiacQFrviZNaWoyCwdD5QEAGgUGXNWF7mujI8kI2AO4JKGFYYAz7amyI1xAAm6laS8XhFM2ZuGmhp0CbBEgTQdODaiphSEEiqYXH14VqyUUAlDHGcwotA6sR3TlExj7xuCixRgW6iZNY+qDm+b2rKt9wgeWdV20SjSaA4gAaImjgz0OF4beVf9oNzla3CEcrLbB9YELcErJvIhgBkY8a3ynEMJDvrW+SUTkAGrQtRx6LKJEEKdjs+sEFyjxqoclQgwc6VYGHMGyyIWjEESQqRYMAJFVtZBmrmWIsfYXrIDV6RCG2wIUEHWT8VwBDYo6hONCGAuwXfB3o9kArzKUoylwTChR0IIDkAC0d+CrHyEwgWIQgHplTSlgJSDXItxgBieYAWUKTLC52KBvhZpoY8V6BUOi2LZEcABDwRrhISygsTmNAYzpEsoZ+BSxpoBAQ/E5gTWxrLCTJHMRQBlKA3iyCCLggAR5oAI5F0EBcKayFZgLZCP0M8XgtLE0KSA8Q93my0jQHGD/UczRUu8ZAimgkppRvFK83SCeNsRhBVrw0gGQYD2XzimDlxBZILbZBwVIQaSFN1/kHuDXAYI1O297SFJ3NJqmdqv/ipDryR6FkyArQgyabcYqD8HBKIaAo6nggjWLe7DrPUCPCahnwEbA28OzDoI9Q1fORhOQENgobV/K6YKiOLzBHaY8Cfjg8GItsqWmrBQIMAHkqrjcyHUtESDdUUE/D2CRwSPv/EtbF0qgATEgsQJIoGdWqztIKG1sZj9nnRcTAeFxbo2YpXnrKmybowmYANZumoADJICX3y01srssmTsP4b4+93nOFeCCwWlmoj23QM9TcJQPkKDnPu93h2Bd/4LS5dLUQX50qRNAAXhHAdI9T8AIhHdzn4/A7GpOuwXGPQSBH3rQKHhBAvZOgeziAOo4n4DZfaAAqftc5zs1ToGFXWqLC2HbaX+7zaW+d8f7IAYWwLnWvz2BtAO9Q+sssLCIfICyMwEHwsb6AaheBBeMwPPg9HQWxa554fH88LtOgg5OwNEcVOCnmecoCQZ308BjrQdcN7oQdDCXOis/CTi4Os4lH2ZTD73lRyl85M3O8LQjnr+ZQsEJDBCC1jCevdkf++bFA5a9eZ0GlKFM+Z8AeZ9bANnnV/e1W166+qvd7K7nfbnHMhUQfzagfCGUdKtnfmNXc0Twas03Loh2Jf8rcIDskVclQwGq117CpX7Cg3y4UTq3l3NY4wIa6HOfpxcYV3TAt3f3J3MH8ADsNTgbQGQtcAIa94Az0AI36HKeEQMUMAINMEupx3dsR3lkZ3Yg6GUi2Hl7l4JC4AAa+IQDaASJVh/Ph3YJ8IJE8Hd7V3lHgXkYgAHHxjstMIbqRmMyNYYJwHoShoTfNwSY94VxmDfn0nXs9oUdgDVSqId0BwXYpnx/9wB7t4BdeHUJQIiWV4QJwIE+wIhr92iEaITaBodYM4d7V4fJVh8iCAFfOHcl83ou+IfLBVGlE31f+ADrVmOI+ACqeBRF+IpFAInCg3aEuH6XZ4mVSIdYAyf/TNh6r4cBJNgaVwcAGLCHVSAsJaBMPtCHhRh2rPiFqweLSmeIRMCIuKiFZHeEvLiLmTh4X2FDz3dfencAKABmCdZ5qzdWTFAkPZAXPOeCv+aMPfdrwVaN9siIwyd2X+iAcoiE1PePXxiQHaJWVqhoJ+Biaigke/VkYZAChPgAx1iCTriFf4iK8ihzX5gAJJB9HvCFloeJ//doADl4b3FM7rcGBNABwpgAGNCRBGQBwjiRGTiGGACKLzeFlWd+k9iIHrl3GBCJE/eRLimUTxCOofQzaWB1YyiRHkCKCjCJQcl9E2CTOPltI9CSDwCNQtIAG+mIDSCRY4iLKfCRYzle/0gQjp20R2LgACQgkYT4koNTAIgIhpU4k8iYjjN5lUKAkYnohkJSlxw5OBD5hRSgXI7Bf2hAABqIAYQIAHwpBC5QlXv3lEZQmC6piWLoknk5BFKolb+GAzrpk0UQlv1oScYUfxglBgUgAhuQAh3gkq4ojI4YbF94jGYnmi1JdoOjAESJAYLXepSZAJZJBK6nlVwpBF65d6qIBC4AWiEwAzAAAygwY2OgQ4rmAcboigAwmEbgAiwZl4dJQCzJnMn5iFKJiyu5lztHmTf5h3T5hR6AbKjXASOQPjHQAns3VGMAgiuQAwAAABLZnbgoBCnAho4JlWJ5k71IAjZJmhLmAf822QFmJ4ZjaAF8SAFWqaAgAADBWZoYEKBtOAbhYgMnEKIB6gFDmDkW0J0hSgFz6aBjCADjaZwTYIwYUJxE0AA2CQBGKVwSGqIUKpw4GpkOMAIBaozIJqNj6IhdwHx0YQAs4JgjEAMGg6TCKKB4A544upVGEAPaGaIYGoo4igGOCJEz+qO5aIyQuXMd0KX2qKFNeZ5dICAlYBopwHQW4qAC+qJ5AZFsOqZh1qMfOgQE0KJNSYpM+pIeyaad+XiIyqChaJM6GgZeYZCiAKgDKqjG+aZpSmw3apP7OHFiCZm5KaeOiX+lWqiPF6QAMKQ2WqRVCA+A6pICimw+wKPdeav/XxqmAFCpytmjasqlF4o1ummTMDqLpaqmh4qjj9oGLvCW3fkAxgiTJeOpIaqmuUSop1qmgNmqjkqRXZqc2yqqvemrzyoVMZCV22mMBUqXIUqtD4Bsk4mjbXgUK4mjHoA3PDqjrHp5YZqjF7mo34qe/mqSZ+AADaCdONqhaipc1JqmQXKggYo3KZAAjio8H4Cl1UqYEfuqcMex+2oEMhqgBVoGrRkCPNqhEtmh/xqF2AoC8/qdnhqganqkbOqjgwOmbDqzhcKnNmt7iGqqJROqxuikrLkBH1IBNvACHRqiIIABppcsFBCgKGqtnqGrIYoB5xkDH4sBKzcEWguyaMSx/2aafdQaoB0gtD2Lq2EgIM33nwDQob+aAtSzsmMIArBqo1Ebov9Kl1b7qrNUtSiarJ3KpsCaqzPqo+sRlUnKqWTgi6ERFi9ApVaKBBDZtzKLbNvatjTLpmfbejXrs6SapHsbhUbLqCCapBOAliihbM1nADMQA+OVuXkbujHZtx5KhB87ssrqqGYHr0mqpjwbr6QopybLjuYkcHdaATewkIViu2lruF2IpD17nvWKoiOASxyrs6ILulhroFsruGV7vWkAF6VRAYFxKVb3AFFLrSDwsoSHAVEbtJc5vlzbq6DLgcHWu/BJuDaLr0MLuWZQAIPBBCZIvzOqt+lzqJrru/9pNgH1S75FQAKBS8AFULXDKzwOkLrnCagB2rrvEANviqNzm67NKMHG2KHha6AfS7ruVbOqm2Yy7IjFS7QVjKKMmwzw0wFPS78emj7RF69z+7LEGsK047ghmrheW7FGoKshfBQOIMMtTAdFQgMooMBzO5V/trX0G5nAZsErnL9oZLTe24UabLPr0cE5SwFoW7+J6wZFwgGTgQI7AAJ4LJdIEJWaS8ba5gH1G79EuLVR27WAvLUt7LX1C7Ykq8MiDDRKQcdetgIwMIYdQKdAqrk0Oks4YL30m7gFcKMrfLphbLUgAKyAG6B622miHKBVrAZwWx/NhwIpgLCEd8j0CwL/D9u5V3sETazA2OvDhSvFNQsAJPCdiHrKbosGkjsgJVAB0EtvgMymDOzLuAwCBNyMJUy/j0yqUXvKpAimcEyKFOu3tnwGS3gcPZUfueS+C4zCk/m0hXwEDWDKfuyZrXzGniHGAdwa1muylvQFsmdDHMCMEuW+1AzGW6TBhUs7LnDNpDy/Y1ywzYrI+gvMiTAdpVFeo3JfCgy1KKy4gZzNqUy/MCyZPjzKwSvGn6yoppzNbSAH73IDNAADW3zCvcTHeXvSj+fOc0u9K+bOUeuI4DnBIzA1+fzKCSEglXHHDttL4ny7TlrUeZu4OLvC3bxiCgzOvBOmXO0WXgFrNpB3/w9wsrn4tHO7yyztyn9KyPcchf/so7i01iOAmIrgFZKMHDYQA9SDeWjtoSap09w8eA6ctxGt0/Pceod8tFzxGNZhHdCcBA6c0A1sAX2Mq/U80Yilwl8cvJnd0jSCReRhAzTAlsQxAnk8t3F8pH9dxQSw2D46Swqw1WaKWJadpECNDeOBJcOiBK92x6ocx4AbyFkN1/L8AKS4sXSrt4MXA4SM3EgBpfVR0OysA8dUyXg8n5irxaecPgcayCNAO9+twKtYY6ityuGNFJxU0KYdIFi0AiWQAzvQAaTYqn1Mpy5w21+8pSk9t9k829/81ks9IuV1kvWBTAWGuvJszHlx1f8YbX5bDQCOyNorDNPvkC3aoQPxZCPXEc0+kGhOjcfFLb7EPUtUXcSDV9R4LOEBPeCy3NtHABeUnMswLQKo3aFfrW0hzsgFlcsRTSieoeEvXgJaggTCAt8w8AI5AEJY7NRca182kAO5/LBR2AATUKVAbuQrKG8bwBpTtDfoWATwFxY7sAOjWigFaADyveTakQ9ZjgTDVB2ruUlXMiFhThtbE0rZVgQ9034J/uZOsIJeZtDPU+dykpbVYWjR3AOvQhfWCehToJbP3N6SHhpdHuMbPhcJ7ouv8ueQrioicukWItrV8Xx2eCgSaEdYUuSfThGXInv2YerAZuiGRhigs5Z9rQ4GzdxJss7pv0jncbLnud4F48HhSjk1GBfraXlHLT7sTEB018GWnlbqSbDbte7sAq01hC4eodHpwXIlFojtAv0hsl53H+PpzxMi5S7ue/LssNIVzc7ucPAYPSXvsyEY9p7v+r7v/N7v/v7vAB/wAj/wBF/wBn/wCJ8GQQAAIfkEBQAAPwAsCgAQAIAAcAAABv/An3BILBqPxItAqEE6n9CodEqtSh2KyK9p7Xq/4DCRIAhoAhmxes0O+3QCzTndrtvvRtqPdw6Y8UQbPyI+gIZdKmZnS4dCFQuQPx+NlEcrPyo1EgwOlSgZoJWiRiuXFwWUlzV9AaOuQiGFlZc8Mj+tr7miHDYniri6wYY3OgwSwshDwHUFFwRQXMnSdcvTdnTW2WvVuQhb2uDh4uPk5eZSCufkk+prFSLt7aXx8SUoNSfPrt6oUdzkN3rx0SDhwiFv9MDQWCUnAANAF479SyjlQ5wACAGVQKAhI0UrC9bYQuIjhAGGGhhlyxCNDQ4xLZHY+DGjBg8BBs01CQnFo67/SzMEfSS3IsSRN9kGtCsxRFaRgEPJuUBxosSlqNocSBhwQMWPq1WUfnEqRiwbs2AEKB0w4AQNeFEQyA0LBu0hLW28mRDQww5PJD4NLQlMaQCEv4Y82j2yWFSDNmSndXp1AKsbdSacxCCMDEJOQ41/PFZDIIKJygeHPEQywNsABv2QcLhx52/oIQhdGPmwtfXtvE4KNOB6wPDkYL9VHyEA4TTbglXwsmFuYoAJCBWOzDyhYgaU5GIyHxHBQcUBE9f1BSuQ4vyBE++OmB/QQkHsbJdO8KgRY81qKboVsQEKKqDwAwdwEaEAaiZQcJwUqKVyVYLCiEBDKWAZgcBaP3zG/0aEYViFIGBWsBVGCPPcIZ0oOhyBGBWuPQFeFS8awYhtKxLBISBanbbhjEJw9sNLYg1wjBj/EYGQkcehRoERISUwBQRfxGBBAqgdqUZ/uQhXWWVPGgGBlIaIYEMLCZiQwAhTjPYDmdksmACWKRxxAJx4hGADCi0cMIF6Q/lQwQkHdJUdEZEdYoMBKBxqyEuU0MAoCiUYVUSdQ7g5RDpt0EDbUGhhOJOdQoBYhKl4SICpnagKwWmrVcA6RIR9QbGqrA8U6gSeR/B6SIBfUPmEsFDcBwWZxv7wgBiyWhPmF82y8awRvlpm7bW2HrEsFZAiMUE7XyZAbBWaIrHttkaAmP/sRwksK2W3REhZrRBzzkvCEOiaiwRqCUw7K73+BjPnGvM+KMWqQ9Q58BPzTrGCDRlKe0QDGFBhARQeeFGuExUPaUVAKBgYH7bIbHDCDgmwMCIV8BCwcTkGP9FxF1YCAEACDax7BCo02JBDAhgk4EHDX3AKCNFP6Jwp0Bhg4OAUgqyAgrtvzoyElPkakbGUHVw9Z9bxIi02Eqh4AMATDwxMArxRSL0DAB1fzI4RXS9rNRJ3E5H3EKiQubfe3x4xM6B6O9EAmWBPAUMCZ2NLuBf3hjFTA/fGXMTfl5MchggiKK25OIlLwyU9llOCeS6nq4H0EEFTgvTFQsC+qysuRK7/7A+NQ4Eu2/RG8QDmx6UuRepNSyJGITGwCbcQuevefBGBCy88FNOPQgMHLNhste2Csx5GxqJUv8YlL4Dwg/jxeG7Iwyc8AMLzuSRqB/zrrwDDCxMoMDcU9IcBLLYV0IEO/iezKqBPF4HDg/yGUDpKuO9zQ3hcHQ4IwXMgjBwOSAH4rEDBChoBHiTAAAjEFzojdNAQ/bvDhcoHt8a9LAwpHEIMY/iDDVJvFvYT4ftkJw4emjCGFTthFUpggxLkoGkBOwINhWE+34kCKArgHT2aiIQmdk0UsfDgOBwQQi3qwgEjWKIX7VAIEgBghGO0ng1Y2LEEphEQpcjBGdH4xlT894AFO7BAAxpYxzaUogQE0Nno+riGEFCICAVQwMXEaIdtLVGIuiCABd43PQwwEgovORskw1ESFJwRd1Q44P6soMl46IADKNAhCGwYPioYzRwrMKIlPfBKIlgJMmm8BAxIIMEfuKADlITCC4ugj0t+pCiHHIIIKGa+GBIgY8tDAg7MGE0tJlMIFkolCLbpgUEOoQcjCKYTJPk+IbhxnJqrwCWyt8paEoGF2xxBzOBRvm0+wJt9nEkOchADndkABu4DQQd6uScWYGAHKVCfF1cwmyewbwcswKcQZjITStWKkESwQRafADGmtK2hGP0CMqewwJBK4aLgCAIAIfkEBQAAPwAsCgAQAIAAcQAABv/An3BILBqPwwJyyWw6n9CodEqtWq/YbHEh0Xq/YOxHEQmbz2ijQ5DRBDI/TZp4E30+87zzNgu4MwF6QjYcMwICDASCi0MhHCcBkZERCnorKDxuP2WMjCszERpuAoIrPzVugZ2dK5c1EgwOpT8qoqqrrD8XSoIVFaCqt7iCIqvFBAykw8tLcm9heBdNwk2KzFHWy9TX3GcL3WnZ4ERw41nb5ulWgOrl6u/w8fJGJT82N52y6XhnrT8cPealedbvEg8elQQqHCKiAiYNMjJ8m8NroZYNElJh8WGxUwEGgRDoIcBJy0SB+kTOcZBRWEVzKtXJWbIAgQwE6DquKicKiYj/EqhElTSHQ0jPOE78/FDabOlMMBVcIaghTp2ymEyUdTOFogKSEKZ0FhnArFWFYkUK6DDww1/HhFKGaqlnA8mCGjxqoGgrVqAJEwNqGKAx5UCVBj9eCjI8zAQPDlEOMJ5DlhnWKpUHSNDn5PISBQyQVGbi+YviIqXlnRySuq/r17Bjy1Y3+Zrh0U0Mc0Sy4uzsL62JjJZmBDIKA17zhGaCO4mCAwMQ1Ka5XO6TzHZ/RB8wgIFifCcOntjQROvYI8SFpFZJdrUQkmSnV7FOBUeDAbcl8CMyg8df+eo9sZwZPjxnwgEHwsVIVT8sAAFgJkDA2RApaEdWF1I0d8ZPLQwA/5gARXXzAQl/DaDCEQpA8AOA4ICFQgsHUDAhFn9hcVcLJxKmkxL+dHUEgyoaYZ4W+LRlSkBexKCdFhrSswIHRRLhAhK7LGGCEGQNSMSQR3DglhMKCrdEk1hqF0F6YrZX333bkcnElUggQJabXswpQXqMkYAEi1+4MEECkv0wwRwMnuECDiQksGICDZxmwWSnaaGDCglUCoGSshWQwgGVHhDmD5+mccILLaQQKRinhuFDBSpIpoIORezGRIVYBGSKASWQJxZniv4gAg0GoIBCCVEKoemKhtFKhLJa+DhFqETEAAGfGeZGRCsr1JXWE4EuoWICFjDRqxF+JnAgEtMaNv/CERDg98O6VAzKGKZGBOreEtQK8QCf1CpIQRVBehtbpVrAKw8GTgQMxgO/NfwDR/k6fATDVujZsLZeqAgpEgwrXAWLEefRg5d8hQHunkIoOuOUio5rRK+eGpECxRQv4fIQz6VcxQ0l5NDCCb6GYTERRd3MRAdNhOuErFMYDQUBI2AAwAMNILkIwij+gDUTW1/RtREYfB2FAg8AAAAGI8zYhA890LuK2GbUzCwUM2OQANpTQoHPDEjr2xfcQ4SNRIhLzEzwFBwY0MLZNTvh9ByDVvH4FIAzsYLiZ99deeA/TN754WqvW6nSRVR4uM1NKNo3EnYbwcvpUbRywg5ne9D/BAV2P1D5BK0vYQHCgOMOO+tIdAD86i+Le0VdKFDwb0eIMeE2Mzf04ADhEjcBQPace1GoQnlzL8X24JBvuxPRU7F5EefL0zg3+zWx/jAOpIC8EGjj8jzxXGOw/xHrm98TQvCDE9SMZk94H8d+oEAw4I5CTKNc+5b3gxeAYGrjo1jkjkA++XnwCrIK4BeylQMAXBAcqcKCwQQ4l0u84GxTAMETOuiE70lhg+CwQQkaMLd00FAsIkjhB9KHsB9SIX1M8IARxTcEAODQCEukwv/mAK08pHAJUWRiFVyARC3iIgaDyqIX0SCCG3CABTJk4TzEuIrE7eCC5LtfFtTINSfQ/9ESK8gBBk4IhSKycXxMYGPkYBhID0zPDCUwRQ5eMIEemuOPMxTCE9PQGx1gTyxTHIdX0BIbGcqwI34a4zAKEIMOfFKUjBBBDDxwwa0ZDJVnuEEFTmBCwUESlsu7xANAwEvbxe+RSVNHtmCguw4cEpdo+EQKwhcrZIKhBDTgJIommIZP/VJimmLlLauQRYpBcpvcUOUbzwbOJ9yRY9sr5zVoMINdmvCUP7rGObnRCj3y0phIsKEVmCk+G+TxBSP4np/gaUdnHuFJP7BaERwwAl5KjQkukCOKGPbQ7NVDCDeIIENK4E6/HaEAFNje5nDQUEIa9AdeYcE7H+DIH8Rgl1MPtcAxf4BGXgJgaM68HAswsIOWimAGe+TlA0JlRmLek5/INMUMYnAqyNgTA43izQpGxYKZ4pID0jxoAXOQgksWwZ9hOSkVWhHNJ/hGrFTA6jyCAAAh+QQFAAA/ACwKABQAgABwAAAG/8CfcEgsGouEo3LJPIZuF8IF16xar9jrIqL5ZbLgom0WiUh+ikV4zQ4XFpnut9u+rlBxTUD4rfv/RCI/NTIBGXuAVSsqGnqJj4A0g3oBARE/H5BHdwiUmp9hK3cBMhoSSaBHDBEZCEJ0qbFKKwYqNQIXgGdVIj0XarLBTSsVVFWIwsnCIYLKYcjO0dLT1NXWzn3X2tvY2WA+3OFDwEPQVish4uptoj8lG+vxWCs/KDU8Ag7y+0w6KDwaSjEowK+gEQaNAsCK58pgETg/EDRkQ9ChxTYTL7bZJSuXxosFGCj86NCFBA0SmRTQ8YMlyU8Lj4jgwEiDCQTkAoWwsS0mE/86Po8ErXOnxgAEA49IevnjwA8TkJw24UnrxIweRxbUaIFCSAmmViBoWsGhmREIJjTw6Aq22lIlA34MUPEDXDK7basgGDCAgTyo0sQCguoxL7e4wgpr9HvRheGLUh9LZnKDGSgHAl4CroLYCEEOP0CDUTy5qZXIS1CoUCE6VoM1eIk4FhaBNBYDLfiqsM1YyGtQGa8x6IzFGJEGfOX2NoJYXxjiSzIXwYH8KHRtAw7E5W36Ou0mBCBkd0oikyxUTBxQGH9AQcU2OYUp0H7ABAT0Q2I7G67dhADjDokwQ30mDNDAe36gtkYMCJhQIAlHQIiFhI8oSMQNP6igXQ34CeH/HBubheEACQccUMMPGMIFxl5CcKSEi1nQg8IJNphFhFQWMhHiGoKg0NUK8KiIRQpD5EhEXOYV4V0RotiQDhKCCXGJFUQKseQPu3jnQwii0FNBHQOM4FuJpgXDkxHzmWbBYx+QkMAQv6ViwBE+KNDCAQkkEKcV8VFjWwEN4JmABQoUgWAqgmh4wAgdlnQETSWe4JIRbwZzQAtfKSHmEVUmU+kSlYpQgQEozFDCk0aQ2Skkgr0wA6hMfKqErG0YicQQXTJhq2m7lqlEr0MkWUSvwDbhVJRL9FnFqsM+YGwVFCzhrBLIxpKnEq9hkEqvD+z5UQtDYIVFkJ94y9SoKMxZ/5o2gpBqQAU2BkPruhugYEECrlZYxbRNdHBEtEMwe0WxbRDQAQYYJDDCbHUk4NS8WHTwJsRCTIztEB78cOgP/P46RHlgzJcnBhM0WofJQ1DMLMNFUJyFyz/AXIUH107AMi8fZqGtECgLsXMbPx+BMKxtFPrDzjkzAU4FJ2TcBoBFBM2EsMpsrMTOVC9xQwUo7BCG1KmArYS/Qosty0o/nNDxH/phsoTZmqwpDQovDA2G07AafcSbZB/hrMvXArw3Exg8AHOeHuhthSQoUDAChUQf3UQCcE9s9sGHW3y15EYkAXcRcmeBIbnrVvF5NDKDAUAskMuTtB9tV2Fu6WHEsP8s7Sr1rM3rSqyuzs3UVLop6E3MXkTffRMxwulYYFjCBNomLITvTTCPBeUUy9pz4RobgbcVtrdhwwosAACA9UdQXwTvQmPBfOhDWM1E8mvQwwIIP6hfhe/6EyFwMOhLxgrUhr8w9K99zhgeGzDQuvoNcAIKhEQBCxLBSITABezzEBGcNUE2/O8aB8RdA3FHQmqMEBIBlIwDUkC/NeiuhErYAAW0FUIYpoIGM3gACOzWhEPVcAg/pJ0oUKBD83WQHyNsoTV4Ur4duu8RE+Dc/piwuiAqgx4wGEEKMmiQE16DBimyoTRiBz4xpgIHCrCAFYWxRouoJ4VmrIMPZAgAELT/MY51oEEJdmBHDNwRjw68HwjsCMhYrMAGdMOAB7xYSEDQYwYxkN82jmiRCtwgXkSgztqiAUc3kiB61vgZ8JjSAAzs0I/WON8VRimOEHBAkAZ8RCcLIgoYmNKOUWzkJ+iRgx3sgASsdIG//qhLIRhAFCUgANSG4IIR4I95zqyCA3JZQhpgkggkqCMql1CAFFjPm1IEpKhyMEhtLkEBOuThEXrgTELCL453eEEdPfBBEbRzeiRomwhoYMtBYuCDNkQkC1gQSZnQIAd1HOQI2IfFB+ygAcs0oyhac4QK2M+PNmPCEEsgrmKGcQk8gcEJWEkEslyzmEsoATFOSieUguGjBy7VhCTDEQQAIfkEBQAAPwAsCgAUAH8AcgAABv/An3BILBqPyKRy+QsRFoufg0mtWq/YbLW0QkUymZ9ASy5nFebs6pfRaALpuNz4YQQ0c2o3IAvA84BldXcBYXiBRms1hIiNViIKCBpgh45FNBwCEUJhlp5FIjQofoyfQz4iHxcEpq1CFYpuCAxTrra3QiszNREKOElRQ523lbhmNFR/xkTKy1c3zmnN0dTVRiLRw9aAK8jU2ttG4EtdKKzh6GRdPBoRwenwVCEG7G4SF/H5Swvskvr/SRxI+BEAAcCDSqZd8YGwocOHWmpB3CZjSbGJ+RaMO+IjBMYhHwDBuTikhwANCPwhKeAtnBsmCo+QTHKOiYoBA37kPFJAgQr/FUM2ODS401UFFDVwSpBIRAEEEwiA2qAG4V+BHyt0nUDhQglOBChCMGy06WOiNUsMIlCA7dMYs0M4tF0igCncu2ZMRPvlySCVoh/VmgJshfAVfFr84nWleLFjJCKgKTnwuJWPGzYM2JBcpatDz65E2FDBo8WMq44YaEGNpUG1EwdMmIBQk0rjTykNB3KdJSSRDwN1ktnJOsttM7qHl10CWkgB3pSZLK9c5J2ZGESCK8HeqniZ6XOuUj6gG3E8gQMOqLdy3FH6HxGaC3mbRLWxGAhyzrbOhC+TFHQwQcBTPxyAAHe3xHcGeQOYIIF8V+2UHBKAmWeFQCbgdAAaWPBn/wR9RUxIhG7YJAWVAt4JodcPKxY2hH1GTNhTbAPU8MNYRPg1AIgjCgFeEvkJwRsWHPygQgsocOYcgDtVdYWIVNyAQgtA0TDXEBDsdA+FgK0HYCM22LDGlT98QEICBUZnBYJlYJaLFp6hKQUFcqoJiFBY/dBSSSQckEACELBpS1Y/TJUGDg34CaigPwzpyAawJXAACXYNoZ0WcrrCQQ7qnYAnEa5lWoYJdhLRghAHOHpFqY6ImoQIFfyAAgolKEkEq4HgikSlf7niZFZr2HrrZAUmsZ6xuqKaLKpJVLWsEg5QUEWmsLRywJeBdPBJCUPMoIQF1G3bQgIvcAuRq3Mwiv+FCyP8mQAFn5IxQRH+NfJAPjFYgCagtXmCLhkcppPvnz9M0C8Wzw5xLxIDYpmGrglfB+4PaMqHhaQPYKBEAvfiqoCfFCPRwb5J1HkECQofkQJlaKpaRXQJjHBFAS4EbEWmFoes8xH/GtGzEH96gMS9Py+RggcES2uFDfMaoXEVviWBrdPhirCpxpkCMNHEvy2BIyAdGfACABgUHS4WT1fhUQ4YaO3I1BdXIXM4IuhQQg7aMuGyGWYDLfQRRCcBLppN8/zvB3QSfAU2G7iQM9VFz4tm2k4rfoTQCWCQN88//J0EBnPzjEHhRTy9uTNoLrwE5ViQfoTSD7l9tjGsV9P/9+yWRP1QAQTsvQzsV6B8Ba95VECCvmnXTkYKt6+78eqeIMM20PmwpnzpcVxfxQpiA0C29knc67kRgSfh+ifgY6Bx6FqswAIAIMi+BBpaq56E7Ow3or7gQoCfBwos8MDpqGC/1w0BAAXMgv9AZY1YEeBgRdDdAosAPNwRQQRfw4XW5GfBDuKlbUzgYAdd4DssqMuDR+iBAs73gwcIbw4TBIEZHiDDaNwgBDPwQPyskEEUXmEqL4jf/u7CQlyswAY5gN8PRKgEBPpQDT94n+aukMAjkI0JT2PiFTQ2wU/YoAQNSMHjiHCvLgKiikbYYAhNQaYrQFAIWnwiFQbojBri/+WN8UAjPHrCNTk64jIz2IEQ/YiIq9AAiUI0IyGrEKusoICGO1xGH81Ax2VkhW2gQ4Qd/biGGaSAeEMYHy70GA9uhaCNRHBBBRcZCAJMII6sNIMPCNABGSpSf44JwQmUaEZYNqJeB7HBI0FAzFvGkhw2gAEGQOABuBHBlYHQHXXWcAISnPAHtIykHJ5jQQ54JAkumIAt8xADoRlzMTeYAQ3dpkcCgEt+KSrACIpJSB0UKYjEfEAKeigFcf7AfyHIATGJuUoP2uAEOwBAM1P0A6utE36V/MENOICCsYGgA2PEnSNRcE0auA9+ILDANbFiABjAYKQW7AYqicC9F2BApBtMOOI3WbnSIkzFHIys6TGNsBl+7vSn1UNIEAAAIfkEBQAAPwAsCgAUAIAAcwAABv/An3BILBqPyKRSqSMoFMuodEqtWpcF6WoWCWR+kat4TC6TVyqNJhAwu9/wd022jtvfDkGxfS+uUBkaP3x9hVQXAoSGRjQ/CgISEouTSnmCGV+URD4FHxeaoEUMARoZbYqhqaEiNGlspQyqsql/gaUKWbO6mic8EQu7uhsikys/BgTBsysrjcUhyqoVQignMbnR2UoIUjR/NRo8UNrkZCIlPGo/meXtVgQZMgioug3uZDijQ20+927soT75MwJwYBJuBhMqXMiwoUMzHx62u+FM4g8Hqi5IioJDAQoUxizG+SRICYMBPxAmYYBgAA8UNm4oQ1jSTM0o/VQiEdFgAMr/JdzUtPhBTCGwWT5CGKgxwASEZAd/OJ0WbcCBgVRV1Bi3ZECDiA+vxhGLBJvIhjLPql3LdkjTVALbptIpt+4djHZ//IRT4sSMDVbiLhQMagYPqw1w3Osn0UUNE2QgyIKsKtYVvGTLML6yt1DnKGADV65CF4meJJ8/C1FdBOqSjW9YR5HNecyEH5lBudCW24xkSlDI4iVz+uikBb9Rxqhi1iSZn0+XpCgkgXCUAvYOHGCtGFQYIxSs9i4y/sdyIruLkFhyush3JBrFH5h+p3SV7NsFhFbV/ciA90MQAIEJ20FgnBA+cEWbaW7B5p99Cmh3gAkSDGcESukREcFP72XW/9xqZOigwgEJJCBBhkQsqMSB9kUhoAkmJLDeFZL4RN54m5FxgwEtHNCCAkUN4cIECZQHCgratVBCkGQ4QEECQhzAVR8HqEBUa0SSOIFrU0wphggcfPQDB0yO0QMJJSZgwXlDdGckFT4i8dsPJFhIBGVIQPnDbWKsYIOfZej5gw05HGDBCToU0Z2gZLxJxH5HQDoFo0ZwsASfQnCJhA86GCBmD0Y0oF0S9mSjoqNRXDXACEkwWpQNIeRIxKheDjFqErd+iNubo85YhGRGAvsDq1aceVUCFABmxAi5iXADqIXQJ0StCxFA5A8JbPnGA3mJIeAQ0fmmCqq6fCsEpnaRW/9IB+iFQiklsv7ArUTqWiAGcuCa4ei8skB1W5FX8WsEtw+8K4SvdB4hlsFC6Fmew0uoW0SEDVuxwQzsEsEtlJJaASW1DTNMhcjYMtzfEiVaMcMOAGCwiL1JuOxGxkTYSYbMVuQAALZG2ExFqUP4rES8N89yAwoJtFyIyyA7hDMVNJzQAcx90NwHyVU8DYcPGxCgaRRaF4FBwT9QkMTGZEBJcspSCM32ImMLjITLYROBgcgppOlyx3UPgaaeCBNRYt8d9G2I4dHqwibidhC7xANNDwF0t1cP0THlU0QkrUiTS4HiHVynwOoDO9/RAONHEC1L5EoQg4IHO2OAulyzj5H/lAEvtKy12VFgXUUCqBvugRCIr018GdPk/kPturD+hq5noMCy3EuUPgX1RwRfBvaW20EDBzOQsHn18v5g/RGkk0MCzrxnDwcx0Kci8+WY17/W+farxXxCLtCHfx//O0IAqzDAVThiAhgoIByYp0AhNFAZNCjBC0CwvPyp4g87oOADLWiHFbAAABQ0BAg2mJc/sMACE+gcBydRgQ044GRKIGEFZxiFAk5AaXCQoVpip8Cd6VAhjiMCushROu6RAwcpGN4KQxEDBC4RFDfgAAso6LIfPhFqHDBABltmxTgokS2JYsYUQRDChHRRF394wQ46oMKBXbEMxoiBC+J3j6/d6aNMRmDTGxeBxOFZz4r02+MPTjdCKlhtF0NsBzS2mEBB9sEGP9hiGZXArg1SoHQFhGFdVgADDIAAA0HMIyXO6A9mwCAHKRBaAWJgL1K+0QY0SAsSFOCBEaIuBl+sxG1cmRDV/aAfY2ykEghwyCSkgG7mu2IIVjBBMk7SCEOyZRRgQEYhWMCO9WPGCR5ARqoZgScgFOZOaCA9MmJgfBw0BgxeMAJssiIHzgRBLo3ADOntIAV0pBwKfuAnGkALCRgkI+SiYAxLOTJWUbABCljAAlxIoQJ4fGI+hwAoKvzTkVRAKEYLoYOJkiMIACH5BAUAAD8ALAoAEgB/AHYAAAb/wJ9wSCwaj8ikcslsIj/OqHRKrVqv2Kz2KPotGOCteEwe4pQi2qwWCGTK8Dj8tlK12/K8/kpXaTR4e4KDS2kzPHeEiotEIiFfAj+RjHsXRAiKPgUfDg6UehcCgJ+kex+iP29UmIwBpU04DAEaP65Sqq+5Rz4VNYCzGQpTtK+sU45xIT92f8FMxLpZFSgnDJ5kKz++ztGCNCg8gAJnZSgoC0y23Ui4Sr2jmAVlKyE+Uujr10LtSBsSgMbgdNmjTgmCgHkUIIC2Tk9BOQ0aSpxIsaLFixgzatzIsWMpAk4KEODwY6DHiR8YROBx4oe9KPJOLmFIRN6sH3+WyJDBY4aV/wgZggatkmEUzSPEjhoZpSTmkgsRfhxsgmDAgBM9SkVtImwIQiRbscTgMUAIAnxJMCHoKuUAnLISRXCoMcDEAAFOlUwq45ZIxJM+dKCo0UKAJZk/4EZLY+PHBsQUfYgweaQvExNwMIs57BGuYkKf93zVYywsZEGhLY4usoHA4ySpoZw2ojmKZSM6ThR2IYX3Rc6MHAioe1c2RuBHGGyRYIUAhMQDzkpZDVm5X1hFfFOnarBU6iiskDux/n12FXzbh0Q/gq+8+LZNym95nt48KRJkYiS2T4gcGbb8LRGBb4ygNYR1QuyFBAVU6JNHXylo0YB/iuQVhXzRsPKdflUo9v9Sh+xBMMABJpg2RlllcXjPDwccMMAIBAqBDoomqkcEfglcAeARCljgVgIUOPgDSK84l2MCEBCpRYty9JhAAgdMWMQCz5XiwgRPIqmkFS4wJ8QBOw6RoxU9/gBlhEX02CKQSYy5BIxTOEDCkwec8FoSWx7xwZxPWqBiEbdNIQyEHyIhJBMGViFCCTm0AENJWlSQA5Qo3BkFfrq4icSYcBZBwxAkFUHACFAi6QQHKMygA2RwjYAEhjdwkM0RBGDpYpJR3FDoEBOwKMSfRDB5RYuBBlvsEFX+4KoRzx0LX7JIWIiEs3E88Nd/EvX6wBDSBuitFNtqYdy3r1BISrhMUKv/BLBZoFuGBVaYK+YPaCoBbRHuUrHsD/AaweAQYfrKxLhbEECBBRY8kGOLGPwgpRFYCqEpERELbIS6EpvZphLXUnsvoFRsMELDRTSM6aZCeMBEB0rkWG8RE0sBRZZM7GvEk1LEsC3JJGtxshAED9FzEd0iMXQSLBNCwAsAHN2R0yUrAQAcPSjQgQdJk9tEzFFLUYAL7DIxdctOQC2F2VTE2HUcKjORArptG9GvFk9mfQTOV3A9Bgb5HjEBBk+ifSTaZuItd8NoA6534YtbQPIEaovh5r9Gb+tB2D+Q/MDLVRAuxNxWeI6F6EL0rXWc0ZBs80kiXbuOhZwPgjkTMziO/9GuF1XA9OiUxI2vLovuAELmQ5iexeJyRz4F4cgLQToS9uSAwdg/UL43wEYcanTZ8RKfhQgVnDDB6mQ8ILrxMvnQgwvaIzE1+kPY7cQE2vcsv9BiPJ8L9VW0f3oUw/vfafgnk6IJUA8FiAEJOgA/qR3wGD2aGv8IWBHrxU9QY/BBCHIAABBgQH9reyATwMfB4VGwCaRrmgg1+IMXfNB3IpQDMhrQgDw5YWqzowQI77cFyYjAgEY4IRJgKJYbDoECQKwI+QYhxCIQUSKgK4PrHuiAFPBQCP7DSBP14INRNeyEuIuhFbpQQhWKUQ50eAEImrbFM2IhBCuQHgg86IQnuv/RHT/IwQ46EKEw3jELNKABAZRnHhsOwgd+HIIDpjiFAGZRjCJZIkWS2I0Ieu+PY+iCGj34vF6RIWiQUYbwADA2T27hWiA8DQ1WAAMMzNEDjBxEAz1CEhi8YAQxKFoBYqcEQ4oxkDqQlxlI8EUyFIAEbURMIkuSAleycWU/CKASFLCzMzoiB3MUnQtGIE0l9ICbdBTjDWzQyjkC4Io/cAAFpvbBJdwABh1cIwWEqTUbGECPD6AAIeXiyukJgZdCuAGjPjiCR3qrAitYwQxiQM8f3OAHwssmQIWQhhWkylIxpIGulABHGOwAANaiZAhCQJkYUlIINrAoDHLphGVikggKq9KoS186Ro4EAQAh+QQFAAA/ACwKAAcAgACBAAAG/8CfcEgsGo/IpHJZWDqf0Kh0GsX9CNSsdsvtLn4CyTFQJCcJjmZ3zeYKfhmhpk2v2+9aK35PVfD/gF1vdINicT9zgYpOH19PEVIfPw4XP19hRImHQxEMi3iSVGpZOJVgn6hlqUSeShF+q1kXrUeHWJ+DSY6xbQsOvD9iP2ZFv8BJv5t4BcxdkEUyx1kZArtbDgoCuUMXoVG0QnGJ3tJJEtZK5EYOAgFmZnFi4FSbAQKmwDjzZvNK/T/eFgSIdiRROTrGjtyCQozILoEy3N2BdfAHvnVLvgjTxa2dQSkUKy4R8+7HszVkyM3SJmQjAiENRU7ZqAzQB0kfLj5BIEFBQv8jOEKu2ihFHJw6o5Zo4PkE3SdiL9UVoQlTCCSnbGrKLPLhTcN/UITWURdTpD4yGV4KSTqVo6JZRLQ+meXTTgEFGTSk/YEA7A+hZbcqISBBgz2dXRwUDhCnL1skaqnkFIJVS2QoBQRomDNH6jUJMjYHYPC4yOUpYp2geZJaSWbDcUbTuYsgtADPP4cJaT3kceCqRH4nqRRTLmVIp9sElcAgd6bnS/TIGZJ8DN8jzp0Y/zHvJJsCOEoj2TZ+SAC11VUlUes543iDc8QLBk7Eu3q3dNJ/kg5ZySCniKkmk3xKCDcFgURkdwSCLxk4nxO8IRQFeUIEKMVCSgTIn3/6PUj/xxwSKDhVduAhc5AP1/2hlhlSOYXhEPowJ+IyWXwESGVR1BZAA+0hseEa2w1B1BIOFvHiESh+1EASAWwmAwI4KiHXkDtlYOCL9hnRpAA/JmFjEQZl+VxtEBxphFibTWfQJiI2AUGKFToxwA8/5qLBm10U0MCcCMz5xJwMdFlfZAjod9mbCvT4w5sdtvQEnm0oZsIPfiIhJhSNDnGAEQIQgKATjmT6hDGVLsjAACaYUCYUFhpRaBd+8TUpKpDqxw4CESxQ2qactOECEUseUSoSvMKoBG9UJrZAqyaIygaFfpp5CitILCCtpkv8NGyeSkS27RM4SHupSbN62F8S/UBK/0e5TlAohbNssHsuZZ9mK8S3nGK2AAPXmvhDsUpI8Gu7ghrRLxXe/tBAl5DiexcEA0AQ5RGtDhEhEkc6J0HFQmDhiKJEvDSAswMTQQAEk5oQIleCALvOuGsdUbIRlQSrLhURHFztSwAXEawQt0UxMxIXC9EwFPgae8TP/i2hE9NF8NqqeD2bY0RXUGB1QNVK5LYqIJDOaNoafXJRatJT8OxEBENjiIBQflZWKVtfVHpkCkLoV69pcyYrMxW3oH1vETeb7W5Trh6xjVoCKFgu3kX4wfUQFBARgxFQC3G5FE4dPsTmSgw9hAtdboMvyEfguGkKu46Os+hFgL6IWoX/Rf/EBEcQxXoR4FAo+xBQqyOUc7W77rISgh/PeREbknBEsZUjES0VXCqB+xK/AyLd5P8e2yjuAAswAK8NPAavwEnMeSR5BRvxu1jzdOmn3xnWN8T4SKiRNOSUTmIEnkmbE9pgN7j+FSyAlJoA7ARYOMUM4IFHsABQhMC9zBlha5tyXuygMAIk8E8IQ1OABXhFpVtsjQ4dPKEWEqCEFGBQYY8BWNuKd4QJ9MuGRgLfonRWBJ0swAUdpKBYNIgE1H2wfEQowAdHtUEunCwBB4DixLIXOxyQIAEmSAAEsuc8Fh4BdVvBYYIokIAyKtAI19OcEYg4BAJQYGu7ayHLlIcEC0r/IXpG8GIai+BFJMQAAgeAgALk08cjFPIHLlDAAtq3GyosSYVFSEoCKCCiOXlGhWbi3g8KQAAFeAp5x6KTE9QASWJxAYPce6GgHuBHCnZBk1N4U7EYmQU8mmsINNSCJlmJyC4ssSISbGM5YtABu+SRCIqiABiJULQs8IqKTvilEYopBGpGwpZLYCEtL3gNXGLOCdYkQuX6uMzbYasIQCSCNHlpryN8cAQENMJdRiDLNXpGluz83w/y2U4i5NIJVrSD2D4nQQx4EXoLIgILUxPFHxyyjs8TwkOrycKJiq0Jm8LAHvNEAgw4VKLIhII6HqOgMkL0CRNV6BpSmr8GHJKf/8UIohAeAE11dsGjSWDpE3DqhAdIEwkuoIAHfhDMJbBRCIws6hZgSoVwqlEIPE3QD6IqBQfEoJlRCKdMx7KGkDj1Ew1gKub6KNahVtVIQ8CAUimXVmweZGhUPYJYNwlSKGQOFjqNJGrqykMpTCABGGBlXPkIVdshoaJ2NChRlaBTxTL2GB5lZzyZAAWdOmCjSODpi4b2O5JyQQ12FKMWvpoFsyaBiADY6hCKulYhTAAAbMCGEdg5yUDAYq5QO5gF53oErBpsBIKtK/C6MNkofKqvQoDtHhxAAQCAYLCqXYJYXQrOKACAtz9QLhr9qgUXWAAEAIiqF0X0UydgVqUeuP9bWo/AH+0WwbR/+EBzYTtY9kZBKr8srijnKMyP/uCoEvWoR4fmjfoKTagdcCt22GjgHywxulPA7hKi1+DCJoYAyJXCWms6BNIWobV6wIBHMavf8v5BhEVwb2YlvIah2dFkRqhchQEBWw8XAQMAsHFhdRzKW7Zhxsnt51m5wGJSYIG0HlWQiZXAYy4IZckd0O8UXJACGUcwCXvzX3ZnqgSPgiAJ2oUvEVSsBDKvgQAj8KiZR8BDyT5Bwb4S0BCKHAUHjAAEz53mEiAX2J4SwQPZc4E1zbyHJk+BAB74MpCRwMvWdvjLrtnyGpp7DOY6l9BJwCmdl6AzJeIU01nIMhT/HEACDxj6CkYAgaPH3AZDg9oIq14DDlwwUCG01gI15eeShQBh3w4BwkWAcyq0C9vzNtK6c5YZ7hZ93Qi9WhFDDS8R4LkGAC8Bti+eap1jkW0pdICHpzZThREt7VjgIAU6FjU0xbygoyKR02s8RlAxAF4igGDTFoOCgjlMhKiSgC3e1fYPRlBONjTg0osWQgpgmhorPPsHxpYqpJMgFF+zgQR4BsDDk70FKmYuN01I+BBqXQcCdADPHu02xZPA4gw7Iaq7xkMMRtABa+s5CtmjwDYtyDQAWDviqcBBGqgwcSQUdeODiTURlC6TyyF9CvyeQkCr+SAXlPrQXFD5E4oZ0vVYABG2T6fmA3D60zubEyORWwKtH0QC54pYr3dgdxK2+aA7F30JIZkxkMXi8q0oINHPBXoS7Nh1qvtYCgWY+QRSICKSL30ITwfI4QHavqCqWMKRn7yvRkDfIXhgkEjYqNyvIMHMaz5/KXCutr8MTRdMoOgPSI2e3H76NqSA3igH9iTMru0Gpx7PIIhy7blgZ7eTQEGzfy5Osy1oPAN6+MQlwQhSULACUCDjz7W5ySgwghiIGvo+ghDuMUCCbeKA7uCXdQosYIGFpV8wnHTB948RBAAh+QQFAAA/ACwKAAcAgACBAAAG/8CfcEgsGo/IpHLpWzqf0Kh0Gi38LtSsdsvtEn4MwTFTJCcvn2Z3zeYyfhFhoE2v2+9aK35PXfD/gF1vdINicT9zgYpOOF9PElI4Px8OP19hRImJQxIKi3iSVGpZBZVgn6hFGqlEnkoSfqxZDq5Hh1ifg0mOsm0EH70/Yj+rRsDBScCHf6NakKrIWREMvGtvtT8OoVHYiN4/29FJAtVK4U5mcWLdU5sZDKbBBd3F7En250mb4m3HR7hQzBQpxycWv2zJlnwZtsvIvigGDy4RU2zVszUIwClhaKaYxCwMMy7aFi+ggAX+jBSIyErAwyfL7DRTEiADQyUEWZHJRySkkP9ikHKuifkRir0nDFjWOeexqB45Q2b2dChE6J2SRZFkOPqDZdOsYJ28jGLKKhWBUKTy/DQWilInaJ68lYKAK5e2k6B1ZWJE5JGvfqFUCgynIaCbR/bhHfL0m2OxR1JCIdqqyEVZDZzo0qDJSVPCZtbi1DdkjlR+c7/+uFyEsBGzWRYrajxG9ZBBBLE+AcjvtBPXWnwbS7tkju2wbgNJVqKLiO4pvJM8p52EAVrkfAQsP6L9iA/qQ7azsoKWNZuOQvIRjC5kHmLksuvAjtI87Pskx5GwR7Kvvtb5tnBHhXFKRGceVeAhMQAUBxphQnJEVBShEBCEl0QTEXi0ynOt/UD/XXOUZdFchUksKIUEJAph4hEHGLGAaIW1OBFMdYhnRINPrLiEjkNcIBwUjsjYxTFCOhEiEhwacUCRWdgFAY+BLJMiX30RgeMUJfknxINLEJagEHMJU8SXUHxg1gBM4uHCD5kVweV+bBZxFAFwDgEcESmlycWPK+rpRAFw4ngldlBWVsSRXBSKRJta+ImHorv8+ISNRzDqBICRqfiEAHUS0QCZRHRKRYoPMgDeMo4OgWgSay4RJqvDFSFAkj1akh4ULZowZYFOSAbjE5b698GgkhpRySCrOiGBqE/sKkRzDfwaqhOvqirEAVw6kaqHXFiaFxGtXqulpgghUeyMReDg/61hRgwAaayqMmvEuUQsQyk/77bR4p1WRscbBCzJGIMTM5UT7hCutBiipEfmOy10UTCZ7BTrAmmEs0oK0YB4K7Iz8BIkEFHtECwdfARBFYtchFK0VkpEtmvApoCkLR8x6F6oyBjix0KESEErvi247lv1ncOzEMutilUKdDA9RTm0VezXfdcKYTKwZE48ch2gCsHvDzFgXO8PPB5gIgP0EhFYy1erBFERRwvhNLs7rmbE1R+IsaBrxXZz790Tl6uEn19PMcHdP0uhRwJJzJ2EBUMMzaBgcKeYOBKMt3H5FqnaJQTkrB4OxQhtD0F6EaWTNVDNKd+65xpbK+GC6D9YgP9pEn5klsCDt7uOXREjxGzEuq2CPsU5jh+RQtpHhKxE8FzELQWTDsRAQNfSO5H84CSI1uKvqcseQ/g/ZI7EwF2rkTntUjQgZPblV4H5E5sHw/4ezivxgET3U3GO8UfIXM2W4LledABc4ugdcYqwvyHAqHtTgF8XGggbACJMCmIzR/6csL+uGcGCVBhY/7Z3seb9oIEaSQL0gDcEEGLFHtsiIBEoMEAiHJAIDYzWEUTHuA0OoX9LoNQNFccoEHpIAUBs3t+SgEIfCmEmB5CgEixFQld1oRkrXIMPWpeCGp5ji+lKAga847j6YccHVUzG5jwwnwLCK357AID5lOABNxr/YYhTdJsS8KgFD6yhf7ABxhwVMUYkHK6BZizCIKEgLSccbQI15FoK/DgFSn5wCpI5GB+FkL8EOFEcDmjdGrI4hA1u75FPYB7YUGcHUkpBiidM4xL2V0gtZA6FKsQDAIrgxSI0AZdIAGYRPjCCWj7BZFgphyoJJjcknG4LSZyCET01BAwkcpMsbIP0zPeAT0ohBYuEmxDCKTdckm95RrDkE2DJqvoZ8weyfEIklVAsk5nlnUtZQiKToE4ipECYRoimETDQzyFQEgNADB4+nWmHBtrIjtUUgiuJMEYLXM1zHpymHXBAgoUqwQoFPUI+IEoE6pyjVYWsGC6TtEuSHgF0/wX8wLpG8JxuUGA75LRD/jxqQ3GUjo/zEagQNkkbV9bMpdrcpFAXsbSXIrAIIdulEOapBW+B4AdL/eETsnoEdv4uCgA9Ak99J4Ul0nEPBVgTEB+gwyMgVQhczUIM1Ok5SNohHgDF5hOFcNUlhKKQIR3CLqUq1hYiYaxFQCweKEA+IdRygN5kQ80OFtg9CNUVhD1rC3MT1zp0FgoapYJesZpZ7/xAsU/oKDI4qoUGovaYBFNAWK+Ih9Cy8gd9HapZctuFrL52qGiN5CY7YJV+unGfVEBuKaNBAWFOVAhePUJIHfBcJIDAA9ENBgitSVWXUSGeUTCrHWRJqcxOoLFYhf9C22ZrNdt+dSBIcC8Y/VnP4R2EtwCorBKi+0lM4bIBM3HAAaVKgUY27betKGj2rICB0h6BlNIDhoPFSYTstsFSE0aCfi+lPGayFwkG5gN4z8dP2NIBl28V3gREqdUoEIQEHiSh4zBQMVKi9yMZHsIQ+yreu422p+/9AoKloEAnsJgf3f3BjZEwYiccrsjYEV2DhXAUCmR2osuBpQN6LAsHL7PDRHAvY967hBwTwQdHM7MQPgzdfi75dw+orhKqeLvPkvkHcv6WFHacxzDeuQvv3DBu/8wPC0iQlGImNG1PlksiYJeMiu6FlaUw5EgnIXFstdH24mlnSx8hlO1Rgg8Xj/yDyHr6Drj04KlZkQJVr/oTb+ZHEAAAIfkEBQAAPwAsAAAAAAEAAQAABgPAXxAAIfkEBQAAPwAsAAAAAAEAAQAABgPAXxAAIfkEBQAAPwAsAAAAAAEAAQAABgPAXxAAIfkEBQAAPwAsAAAAAAEAAQAABgPAXxAAOw==",Ew="data:image/png;base64,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",Sw="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJQAAACSCAYAAACjZePJAAAAAXNSR0IArs4c6QAAAGhlWElmTU0AKgAAAAgABAEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEoAAMAAAABAAIAAIdpAAQAAAABAAAAPgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAlKADAAQAAAABAAAAkgAAAAC0CPscAAACC2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K7U2YxAAANl5JREFUeAHtnWmXXMWZ56OyVKVapVpVWhBoAYEENmBssHE3MIzdp8fd08uZeTEv56PMp5m37Tlnxj6n6bExM8Z4AYQBCYSRhHbVLqn2tZ/fjfxXRt26EZlZlSVViXrOybyZN2OPfzxbPHGzadXI7dHeCDRoBEoNKmevmL0RyEZgD1B7QGjoCOwBqqHDuVfYHqD2MNDQEdgDVEOHc6+wPUDtYaChI7CvoaU9hoUtL6+s61Vz894aXDcguS/fWkABlNm5kptddm5xzrmpxfUjszTj3PgS94oB1Gcjt6+jkqerxX9uaXOuY79znfb6NtK3BlDz887dtxfgmbwHWEpu1K6jD/y0D88WT/+EAStPvQGQwt8OtftvA93ODRx07tAB53rt87cJYE2Pq6c85EATBprh+859ccNPOOARUBbsc2sZCCE4NvOZsiCVB/AAmQB2qt+5x52DPXaAmpo2TmSvy2PGfcocSABqJHg8dKq/h3U+a4CCANgZ+zw45Fxf54p7nPSyxwJQEmdwogvX7TVc4UB+Cnfeu7jXc084B+c6aCKybd/uB9euBtS06UQ3RyviTJyoGnxCrqGJJQ+cI7va5NZCcEARupj0sFrFqdoB55JYfPbY7uZauxJQcKQxm8w/XK6NG2nimHwBSBOI4oyFhm7T3uxcU9lM4bLPOEaMlkypz4xAS7BqH2QteoV/o7iNlZO/D7heP7F7xeGuAhRA+sY4UijWQrCEk6P7RQDabstLBgG6HO4IDIJa9Tm1+8cGKixFONaggX630K4BFMr2+WvOvffVev0IwECIGU0G31np6Cc7wXQPAQYHu2QGw4Wynhe2mb5IXNIHiH68cc65YwO7w7e14wHFZNy7N+neu9TnfnvV+40QV0VA4t65Q5WVvVMtKBbHrcmNup/AJWDxHRoyUNGvV0/xeWcr7jsaUFNTU2556Z67/M2M+58Xn8mckAJTyJHEjWQt7RYvNYtlfLrkQuv0rnEvCF9WCCx9f+MZ51560vS+Tp9up73vSEBlImJ2xo2MjLilhftu7H6X+9Xt047BltOQgWTAGWCAtNNXbrWJh2tdu+Xc+1ed+7IMKvWRa7iA0K/gVkeNa+002nGAmpubdZOmaExOTrqFhQXX2rrPtZi1dWO01/12+Fg2sCFH2m4gCdy0RdTa2qqPZgk2u1KplH1vbm7ZkpNSHGvkrtezEPF5MaiKGQOswdPGrfbvoH3DHQUoRNzExLi9TMEwYuKYrKZVr0zAqZa6Tmccqd8soM0MJJbiopn5oQWG4v6UKb358pjgkZHhDNzLy8sGFvMrGNGmCoiaM1Bxv7OzK2vz7EoXXzM3RHtb/TqPgPXlTW+EhJw5FIPoVjtNBO4YQAGmO3fuuJmZmWziNHlwBj4fONDt+vs63L6Wbpu0+pYkDtB7Zl3FfEQSnT8wMRKCijbduHEj45RqT4aUgrd9pRUD2Uomnj+bPJ2lCH1duCrqNRIA1t2x0pq/TcAKQYUKgAj8sVmCO8G98MijDRg0rLjh4eGyiPNcaWVlZe17T0+P6+vrrQtIlEt4CtYUfit5svNmOTP/lYkYCF0sr5fAmapRc3OTcakm43oda7oeeaTvAQBvfZbWtllqMRzY46M9PzVufM78b+9dcO5T2+CesLIp09mL/vz6IrXtDFA9UkAtLMy78fEJNzY25pg4ibjFRfMGGnV3d9se10F79dSsm4gbXbaVjTPxwvB6hTYruMa31tYW19/fvybyYtmaVgGdAWq2I5vg+yZS4U4iTToAQ/fht3PHDRR2rYWrAL4z5uDEo09edCtxK+qgPu5RZi3lkWe76JEBKgamubm5NRE3ODjo2tpsFmqgvHjIcyJxi7Ao+XmesV1/dBH0spAQrXDGrq4uh/gD8KFyvri44JaWlrPFsK951u1vnss4B9xQyrTKU/1YcLwAOqEtKNZPHq3NDQC3+om5C/Cg4+AFVKKMY+nLI7w+Eh0qBBN9b2lpcZsVcQIS4SrEOzFZ+cnU+Oo+gx8GwxFK8pRZSykxRD0hLS97Lkq7AVWpac7NzZfc1Zsr7qM7A9lGMaBWneSl3hDo/CanJdylVm84bfn6TikTgdqQZkG8bDpgqg9h+7fr80MHVB5MUna9i6DVHTp0qGYRp+2YPJC0WjWhDF5e3IQbwo10EtK/e3P7M2elgvoUBZECF21GzwJYpw/XZhmO2B4hTlH6QvjLowYT4/xQAcXKwgxHZ4LynKlWMIkrEW2A7qCJ6uUpDSYSBCRAJG4Uxh09rIGnnaEnPDMMTLmeaPJtHrIIh7C99i3jWDvNFUC7aqWHBiiBCYclCngIpo6ODnf48OFMV6nWcHGlUIfIJsYyaqLEjcLN4UetrCrkRpGkF66YDmTx7VAeWLQfV0A93CoraAe8PRRAAabQNdDW1ramM9UDJlj8by/kuFJZL4FLQdJJdvJGan6bZY3DWl8gcVg5LjerGyF+p6wyjIn29o6aLWXfis29PxRAYSHdunXLYcHROQidCWAdPXq0KmdSHJT8MORnsJ3tf62tcvterw5COY+SWCB4w4t0wDVQmVg8d7J+HxNbWOyF3r//ILOaN+PL28zYbDugWCV3797NtlNQwHmFCnhfX1+y3YDpj6YrvXfegyfTi8pPtBKYvmNxT8QM1arMFlUIFyUKk20ZRV+SLn9eDwVYpBMsxIJDmz1sIM4rMRjr4z++VrufiV0H+ffUXnTUwcFDm26nykldt90PxYapCN2JF6Cic9XAtKYvlcGU6RoGJulKEm+VbYeSqqp6lcKsQ57D970jlIwoz5BMcv+t8i6XA3f89oqvd7PBfOh3//kHK6YzeVcArg8WC/3lxWc85NDPXtzozfe/FL9rETPu6K/41HhtF207h6Lhocijg3ifq60UPN7vfFzZVsjAZGVtlStVPOle1GSgMdEJSCHpYv5bZftE3/O/c3+No5iFqXN4mz0mledW6ne4iP77D6uDCpF3+/Yd9+DBg3VqRj06q/pcz/WhAApuMGvxTfI2V9tKgTP926cV5VuDCphkAdUTDyRupLCQC8MVxVeAqGfQUmkFONp8yCIYZGke7anNG07Za2K+7A0XYENQ/ddX/HZMqi2Mtza30V0lIXp7e9zQ0JABrb5N9lRd+u2hAEqVMbHV9IwUZ2KS3nipvojFIsWX9oSTpPaFVwEjvJf/TBkpUhm0G8UaN0BRmExRGYyVvOGIu7C9lIu4r4VTjY+PG6e6nVWBq4Z9UiIjDh/pcwd7jhVVvaV7DxVQ1VrKIP7uUsn9r08Cx59lEmf6R9Mf8iEmsTLzE0I6ASBzgNp3rXj9pvs4G/N6EmmgDfpVWVwKPJp40ubFqIBVj0vjklmBsm5VttqNMVJNpwqNIrhUy74lt2L6VFtHr6kdte+V0p9aaMcAao3Nhwq49QAwyR9TD5i+vFxyP79o+b1T3jsPyyOiCckmyHw/gAfRpCeqaFuG5JzVy5OsQCxAPaVl7ZiUecKl5wkA5FedfN5oTHA3TrdMRP/CFlkRpwJU1aw/RB9W3+rytFttane3xzvdtfF29/zxFffsmYGGbtk03MqDM0DVRFt++Dhvl3m/AZCJCEicia2IH52pLi59LptkM/85qkSc0wHrYVgeafh+yCZC2zGY/wdMnQiD61RW0TWzkYKzcvR5zuqcMUMir6epDxn3s3oAFiDnBbfD3UFoSoqIMoATQVk8lC0AyrPuZd+xNH/ynbiOhlU3ONDu7tyedVdudrmPRo66r6acu27hPeYKdOdsfBtFDQUU7PnCdW9CY+XUGu+ceXTHH9ggmxZbpowzWWffKIu5egDKid+Bg6XMpM9ElIEUEmdAl9lMBKUvZeM7bes0TsYeIS4AwlFeNVGoCIjhMtda41jWL/oHOLAy3zAHZzVveBGoWBiUw34mIS2pMrq6j7imsRYD06EsDwuNvO9b3h7LS/mNoOb/YdSIglB+/9XE1TuXzPtrLHrEBnHIdJG+HkJjyzZ5QUWsbhxwYwYoN9PnhhfMAb7kE/7s+7XrTGHR1GfRwq7HVvKUcY0uW82v2ip88zlT6C0690ivn/xUu8Ly6v3MZkC39f1Y34p76lBTduQJyXl73PdtscUDwCSmebKd+4txK/xh/QbG1MY1ZR42bvQXK4d8XQYKXvct75iN9/FBX0ZRe+nr/FKnO29zM41Sb2CkHbTJzoG4k5Z3n123Sg0BFPrPrz517vfm0d5vDIrXtHXwgHGpp4aasgYXNRQwscc3OX7LHsq14Lrbp12bYa/P5PxbBoCXz5oOs0nLlkllgo6buX7uKedetNcRaw+D97CISQQgAOvogSZ31Oofs8kEDEzqgLVFgLhq40UoCoABODHqsEMPgxZufMM44F1LL1DBbeZsHgBVDJQlq8/cUo66ABNik8U7a9djNk6M11apIYC6bML8N6Y0AqIhaxh7bBY9614y1v/E4TjyFxbmbFtm2GK/l0x/aXad7UtusGvKPfvUtHvuTIeBKT37KJuYxX4rZ/8GTgh4GCReAOxREcASxzpiwOqytozcNEvWANBqnAJQMGY3bhnYbHJToKIsuH6zhRx/83WljE4D6PC4cyvGCp8wDlzUX8bjgNV977bVM+Hrpt4FA9mxLntZHBblb4XSM1ZDyXAZ9KYpU/A6TcSITvYbGz0RV3TRm9i85JQL5ix7aE2ri66rY9UdOXbU7sVZkzjb6Ojoug3nag5TtS11hdvq0Yn5fTzlkxWIBVhPcB66Fgp4FktuXPw3Bohs3Oxzl+kx0Kef+WvKHUA5WLxYln8wNYMysvx2ZT8Q/TWmaHOO8ewLJTcS5CP/hW+YL38owrdgc+9bBhQBZCPXfeV0Sp07+wJKMBafjVYBEVahnXDOuPmDCSXXffBITWDSKRmKhkPBqTo62s26DFBdUG/RLW3H6EEW8jWtThal9veajBP7fTyzGI0D1nrggNwo7gdetDy9plDbxH52w8qw+/WACouUPUzaetmACZH/7h2XKdo8Ha8oBgww8kQXIhyYK9EV0+OuXPVzRprN0pYABaf48qYBqqxEqxFsOdDoWMPgTtPT9twCc7DBnYjLhjh7B5dJ0fycHQQdv2MgWsnykhZAsUdYD9H2MJqSRUE/wkFOlmcTYCpjNomDNooATG6IWsJxAQRcJHuS8Ps2mVZep4EjD6r/9rrdi+hUAAa3A1akFjJS4q5xqS+fsPG0OopcIZwPPGtWMO1XPq6N4FJbAhQTIqSLOzEJZ22l0OgUd5qe9gc6SQ+w9lvP8dzGQEg6gDg2PpN5ejs7mjMxqVAYjlu1tMTFJPlFfjvGt12Tod86g8U57XGun9ZdlW7VQHCFdAYIyrpoIzpobolat1kyH5SBxhmo8pwKzvNv3c79p5eLgUGDCNk5d9IOgxqnC8Fx0UQnnLPIx8UYnzxhIs7EHEAW8RlXx1aO928aUOJODGJI6E6DCe5EPriTuApXCOdb6sgUYunLSw/c59e73DODi+7IwIxbsn0pOBPBY7XoT5TxzTUvEiQmqBtwNNnEQQAkBSSfyqcRqMRVmNApS8DEoMu8edom1FwV1U4Mh6Aib5eVoQVKOfiYYo5dwMFWDukQd+TDgqScs2ZNFgGKPgCac0+VsnS0m77Qb/QyDsjGuCJ5U7RpQOEZpnI1hivE6uQ4UIwYAJ4BgP4EZ4I40NmDdy1CKMrnP3Hu3fMDWafnpvvc/PJN98TAhDvY1Z+dnUtxNopl+yJ7hKINvNoqQPC77vGZSZEY4zu6EhTqVuvEo/WdsgQsQEl5/+cj41h2fd2U3WrHtASqkfc8MIbMOqY8QOK5jVfofUvWvwOON14quV/8xqfnVxY2J6FjlOdS2YKytiL6b9kcnomI2Vh5ur9pQPGsACnjagwDAKuP+UFUaZfBn5gozP79+1tNOe1Lcqevr3mLaNhMXHQEVl/rYrt7cmihalwVHFG79uJK4cSLG3EPELEg4AhStNVmLDr28CA9PH9iwgNmTWzamECUBZcBVFht6DTPfze9PUI+xBfA+M3/83kpR/0dtImORaQCDrzkLHA4FTosulXKKKI+dD36y3iyCCA+nzOXRq1RET5X5X1TgGKSJu9VlHE1hhAN4n6qES4BAuzgSlh4KRcBsVHvX/Ur75CtGsDLqi09iZV00kRevLZMLNsmsSwpJkdgEkfKRHQZRKzoA1ZH7IkpgCQj003YqqD85x+UHEDHrwQ3AjyULY7Fld+nTceBKtGl/nv4LmA02eS+m9OJAMqZ/lLUHcAiZj8P8cfeZDUxS72ELrNFRRtZWLrSjzMmFQZrU0nDLrhNAQpxx+arJkWNYWUzGTFlPKyZwavFxD9/zU8SYABM1Ik4eOWZPhOV8bqYbEJhslh0A6DACPiZYL7DNeCoG4PfbIRrIPpg6lv2YkUzCVhXiChWurO2AuChcrtRnBGbKR8TwEDvYlLhbgIm/WZhpPbd0Hsquk/1PtB+FtHFXt9eSRo4LpvcRW6HasNSvdaCEkJxpxVPYwj/oJGNIvQeJgfAUk/ICdFJYnWJM+XBxKRQ1gs26W/+tV/R6C6VSdh8yzHPmQCU5zfNanv1JQ8GLTqNE2L3F5/YhJnCHCPKef2EXzi0VwRI8RXRv0YRz3NA7EEaX9oMw8CIqZfqnn06g2k5PLG+KuQ2zrQYIboufOVfqcFUfupBic5Wevkmg4uIqqan8UwlVjOiUZxJE3vqtHN/96Zzf3W2MUBSe3UF5ID0py970AIk2sFkhaDifCFjEiMiNbASIdoOp4LgXFhhtRBx5Th8ucaIhYBnnbaF4IWT8vz1eqm2lgWlyrpT5QwUna34noLE5Y8g/ZPPnfuXX/sXg1kNVA9MN5HST2e1etjoRbzECF/VnbujGRBDMUl6uAbBaI0K1Yi1gfuILrjVP33fcxrErECFWY/4Y0xi3CabaBN9LCDSa7z3L9re5fx4qursNwweDinctvBfrilQIUZhCJCAy2ee8lcv1Q2oReuczGcqp6OIO7YRYiKIv89g34pB5fX5n03XMCU2RZ/drnBBJoJ64C4nT8SdfEzO7Myoa1qZcM8e8IMOd4AAE0prrXoBZcFBAD6iVy++48aohRiPZ095UCFm6QN9gWsCEsYECzRGtPXH1m50RghwPdk3W/bjxRsBeNgn5cQL8eM8+JYdhhh4EXtyjfiabOxtztiKqpfqVspnzA+Z3+PC3I65kRh8LKCMbZtiDWUgtIGNERxt2MQj6bRiuH7fLKsUd+FkzejohOtoXXXPPjNhIZtWRnOfe/Zp514zMFXTlTJAlp96N8KWktW/YmAaC+au3zhPydqBmKDPTAbcJEYCFYbKyJ+8+AMgVkQmCj/7ML0PeOr4rPvbuWk3fHfBDQ1Ou662GQNUi7lcusz/Vlyxnlm1v6XJQn5b3Oz8gsWn2fOr2uYLDSECEgfN2tZY0xfmC7cI85fqX77fdQMK1OLUCwmlDp9GEc3aShSXEEfjCkeLERztYpmzkAZgsTo7EqJOq3J6ZsV1dpTcYK8N4PMrbtVW6LlnOpN+LuqAG52/Zi4AAyEAQkek3jyZ9W7synRB6y8LCRHMzkDMR0RygerNiZJ71xYSk4UY77Ty/2RlDX3hN4uLJo7dg+dOTbv+rjGKMnC02C7DUsalYrsDPMcA/97l0fYsdnxl0uDcY3pd1z17KEl5VWel+Tfap/nQIubKvM2e2UZAsYL5J0zpMzQHcJywNsacmYi4cIXD6k8a+w//XjXoW7YieCamOqbfAG3Mx0W7eBS1Hvi6vNJiAfnzru/AnDN3V1UwyYuOKKa96F70i1eMAMWU/YjRwJ7YzJmSe8Z0ntg4MGkvPm9BcFb+//3Siz7Kpz6/KRvnvqXmTrdirlLfP9wtzeUn57H1tJFLUVdLS6u7dP1wtj9IHzpNVB+1fnXbQi5qI/NxyH4LjSDmDYlkWKyZ6uJQeYWcSWeltVpjioiJnhm1VW+rXcRkITZi4ICjSRknj4CVWSKmexTR4uK8HSSdNR3BRy8oFGZ/e7/r6IyzNdrH6RgsQg0k+k2eaINIINOV+2zq0sfnre0pxyUi96yB6rJxYOqjDMaDvKlNWZy/7e3tGaDUDvq4sLAYdQrfXz68Jkmog4V8z7gjOrDbiMEs/IZ5yTiwJaFt2fbSomqs7ZpYgxsLoDHoFFA4oB0t/l7+HQBetTz5Ccn2qQomjvysCDqi8hkIVk7KJYHOMG/CPgxhIRQmtT8oMP3c9BoAQX0sDoj2qs3UjbjVCwMk/J3vgBBOg+VWzR3gN2V9PbxTL+URtUH0RhGxk0CYT9g/AIUlRz+KiCBARPIatzVQieMUped/kdENQ0IS8RS+WB1hWn22KmsnJjsUX+Sk0QsRQOUByMAxaZLXRTWjo60TqTYQ6CnE9hQRbgI/sP4hHNpwZgM6Fb1Q5KuiXrXxOQMJwEc/YnJEtO+2TT5cBs6SGRuGgxBUg/b9pRdtMgvajDiiTIWOaOGwZXPTJrTvheLjYgBqn50i0MKhnzw0NkbhPh19EsWiUNmGySvm5Js3PWrulD/VozJS17oAtTBjLHPSryoKbbLPzlZvOOBhZXkAkn7Q0qcsQiwLOqKB5goAixRW6iI4D0CJGGgeCMEExIgVd+fuuImdAddlegInhadND4JOmmsCU/3ooG0jGZjz9WJlckzqrHGkK1f9ntuMeSg6+iyosMtAYaKMfTjA9J0IOIjGOGUviVn6SBmXrQ1PP10cOsJfgKBoS0+krfNmvSHui7aw8gBhTFkA5lWxcBByrycp5r1NFtu+7Mef+UqJyfUl+G/WldppxuTpxKrvvHIhdzsic1e0GlLpiSvHsqAjDACDTAdjCjxtmJmZNQW1slIRCww8lk6M8MkszN1zJ0tWkRH1QK+c8150IinZo8uDyaeyBWQABFjfNy701kseTJTB2AAsPv/xEidMiocXsB0xw+SJ5krdlA33jzkT0aNQtEOxt7S0lCnnald4BSB5DsmY4pKJ+dFQXVqs3xr/sLxaPxf3OJKbCplgiEFbtcoRC6zkImo1AMLRRKQ/aDrHvkCE6DeuS5aeQSWdOBQdjHFAxB0BepjRENyJAUfcMaBFhHuBqM/ujjl35rvT7syTFotuIHj7NXu94YFSlK/oHoADVH9neQUk0tF+uMFV4zgx/QMOeHioUip5UsRztvJ6FP1N6VEylgASBFCwMlm4RaT0+d+QNLVS8ahHcvf23HSnTtoZOpsABuCsTcbpJ+9EVzIcLSRA0maruyUiaGl4CMAwb9FnxB3WXbhq0TNS4g4FnvBjPMgE6L38wg33X974wr32g6mMKxXVk7oHqM6au+CHxtVEoQiLcSkiJViMjKUIEKKjFRELhH7BqbRwitLl74kB6D4ijIVbK+V15mr5IlO7MZtW2oknJl07R3GNhnoeuAPdxWY56Rdm7M8FfdJ1Bfo/h96IZQaT9OJOZEqJSBXa1eGXIAcX9u/vXvt3KP2uK23iDx15AompJEarxjGbzFc1YO4FU4A2SYDquDkAj/3F61ACyZ275gMd8eIzX3ReJKnPKe90+FdqgApCMech/EX+KFSFTIR97RlAvg3576gujPfV8g/VuGY+P983zmpRqvK92Tl7RmbTojsxNJ692vcvupXVtmiOIhaKXC8SRx6A64uiQ4jIlohIzf7BwNyLs/PN2Yvc6BmxwwoM/P0Hy3bCtqnscV7JHIapPlAmegeedC0q7uUJvxpbPCJAhXILQGL5GB84iEQSakRKJFF2yI1VV+xapCrAceoRYbGyY/dr5lAqYGFp39qxp+bYTFtigYYBmzHZbQaiO2YWXhHIVDYTBzWhn5VFASIy1cird/vc1csecUOH5tyrgyiuxesEETky2eE+/dRzI9I//+ySiZJipQ4gXL9ecl9f8dbO0GHv7S7aE+Rev7UZINH+rB/2lm1fRIL+5b9Dt2F8oGoiCS4VEouqFqKOahTqtmvpbc7qodRcbShHfo+lFT9hTeXzdBsSbuIGj+CBWKVQp10lhGIicnS0y31u4LhlEw7dOGEm/VPmyymDMbsZvI3fb3cfftHuvvnM3yR99wFTxI+WtdYgLR/xVb3zRzsp87H/YdXSptwBuENYQDeDcmS5FYEwSLbuIxzEGN4GQn/Kk0Rf/n7sez06KmWQHndRrbSxhZGc+rMcdYCrDmgWZcE0hd1Pml9GhH6UahzsPiR9FdjC3/iMzrUwZdzMJpoXYEyJmOHb3voK04uD5MtW+dM3KuVzb8zqqDXArajMavdqUYLDOaC81DwU1Zeag6L09dyrGVCYrfKDqEMczsyz4LByACJQcL+T72WxFqbLfzbpkZGunkPlU/nv00pkX4OPxYmDu7WmVfm1pg+qaPhHzQEFV+bAW35FlUnJDn9DSY+pHZwHwPKEmu77FzsUsfQ+5fr3OgBVys6/cfwJxZB/QUid1i3ydTA5eWfb+ub4b4CQF/tL1dIDUpHSx3Qo0im9sqH010JKX0varaRJWbX0iwOxnGPEhcCVI2ixU0MdHfPuxMlRd6LPK1Dod2eO37QoDNsgLSDKP3nCO3jh4u32+YUXTTc0UV4r1aVD0XD9ISGcCWsqNnl4fNnvgljdTAj6RQztABCFNCQASPqiOrzltH49KH1Yhj4XpddvMb+Yfs9fm+oYtRRA8uXW8h1AYUT4SAOcnbbqEnR0cMktvHzPHb83Y1tes/bInpbMlxXLwub122+U3Pe+68e+WgBhvpw6hsZn9Tvf6U6QEn1lxPwfIlhoi+2Txfbx5CVXeq4AUJZQeJ/P6FXoMyOBCCV9ihC3PAczTzGln3RwtFAnrWZ15stOfc87flNpw99qnQN0Kwwpgg15eSq2aFU+i1dHw3Svnuv6JV5PzkRaAtY++8QmwkAk7kRyNkT9adaNmfNecgAIVeNoSudTxwFIKM0Gnc4yAZAYB0R5jQNQNVauAAQjQaS2hea4ftO13vTKV+sVt8LS4mr2gBGu200NBxRc4OLnFt/zhbeO6AADOzBoYbIniyePNFhsoUXIPfa6YhvPiFRZRJSvySNfERFKg0gN00nnKkpfdI/FkdLpQgCG9RSVxb3ttLbCOnHz4D+Uuyf8rdGfGwoovMkfvG/P2vy9b2bInb7zku2wHyluvlwMln2NUAqxOPzp4LXbax+YDPlUSCuKcTQ4oAC4ltYcXVERXBapYZuUr+iKjsZiUnq5JjJPf0KxCDkgeUhfj45W1BbdgzthDbJv2dxcRR9Qpi1eE12tr2TE3AcfOPfhBc8FOsqTPGdevtPf9aGv7HkVEWG/V4yjsaoFDs7VHzuU5mjyQalMTOIYhQAkTcZBEp57GQlhm8gXMxLQ6fJ+NNJnOpcFr9W6y0V6/3dpjVnrhPKs2D+2m6PBLS03Za4f2rVdtGlAsSJxdmJt/OXrrkxnunhrPZjQofqP2RN4E6Yn5Vz9puTI68ogZBJbTTyiHBYRHC2vkANEdLSYiSv9RoClXAAYE6lFRgIiMmYksCgkUlUHiwIRWaSjUX/eJyeRGktPHmhy0ocAVfO+80/to+P2f4Ujfv8EK4898PAv53yJjXvfFKCIweGFBXH5ZrP7+Hdd7vplW1kGHnQl2PiYcSa+v/aajxmKcSfCO1DgARFcTSKDjdbYVuGY6Vu3r6/naEwGe2mxekL9RsOHSR9TmIuMBECeEqnsWYbUmhCpLKQ5iyFXf8kHYGPl8zsL6aJxcsarwxbDD3+Yjt8aHhlwf/7cHmxyzQbGiNivY4enogDPEm3xrW5A6fwbp1FL5uC8Nn40A1O7yX5zGbnREduaMOUXMBG09tqr8Umm7QShocCLBCwU+JgCjAI/Wt7SIT3UY+kPHfGf8+9M3ti4/XWGpW0q/wh4s+DAyNNiAGBogZENr3GMo5GepwdDahPh0TGAsH0jjuZzea4c44Ck4TlZv/ilX6x8B8B//w9xTn7T1JCvPutzczYf0CXX514c73PHj/vv2/Fet6Am5JYjzitmOexrXnWDrXMOMAEiuBLX46fskTVvezCl2DJ61/t/8HkQE0w4+Z87F1fgAQeHBABuSFiEscOmcMG80xRukNLRmAzVAUBoF1whytEW1wOQ9CkAIlIBBOlCigEQg+eLixUwkYeFSLxVjKTTMT+86AdiljHcLqqbQ+Hy5zVvobf7Wkru+JEJ98wLbdlKYNUDBrysx48Xn95QR+gYSjyRAnQWDwmDi84FK4+JLsCBuCMt+SDqPfVUgqPZxF0zJ2uYB3GUmrxs0ziog7qqcbTQYiN9EoBmdYqj+V6k33GTSKTC/QEH/Y6RB816fkH6lE4XK6ue+5sAVIspyz2ZDgUIDtij+d/+6yk7FWt7Sh0m0wfFgtd3JmwUnT3/Scl9ZICC6CjcCULnSj3KDxF5zRR4gQmQHK0i7m4O2/NAbSWHeVLcg8kj2jIk2pjiaCwQ9UH5cAHEHsCmSAm1iTy0KUUCoERqT7+NdWSfTSI1LA+uHEsfptvK500Ayj/OkD0liH0ltgJqlcuA6dPP7DmSv6pwJIk6uRdiVg7WDQqpFH4NLOKORxkWERwNl0TInZjEI6ZHxA5XyMkaTnY2eSbyighlGY4WEsYJJ1tifSkyEuBoKR0NnS5sU2pRSKSGbUpx5TDdVj7XDSgqY5AEqHoq91aKPa32lx4UiDdjBpnSyOe33kpbLZ9fqijw4GfMuBP5njvrjzYVtQUQSoHX7/Lax8QqMVV5bgNoY/oTLgPpQ5rwlIUnt0e+joyj+eBTNXXtCshDkcoPtYjUcCFV44BrlW3hw6YAtZn6mNgPP/ZedDgMQIBwfDIJiDqepRRzAKKUhpyGySAfOhsHL4sIblgk7gaek1jemIvJljIb/oqOFhVfBaBNTR4ALNIDY24P+jE9763UsE0pL7xEapj+YXyOKzoNqp3BuHrV/v7sPed+/Y7nTFrFAIvP3zMlHPdCTDxQxu//4LkT6dFnWHlcU9wpFHfqDgotMT6xLR35uChfBEfDJRFrnyxC9StrW0J8FXHNlH4T88IDwFjwoURqrW1SX7d63VZAZXt7H9p///6LPUTCwMRAizMBJggw/c1/jIss0vCEFPYHBSKJCrgTD2+NkRR4/U5+DkqkwEHYTV7pH7A8MR0NZVwWoephEusRX7SLOmI7A9oGIp2oGsjHxteLbQErJrZV7lavDQcU3IQTvTP253kffnrT/fLn9t+2lz0nAkyAQQPz45/607opXxWg/Oh3Fc6m/NKdos5PE0NS4DWYDFZKgacuni8gsGtw0VViQXgjADCI+6JvcE4U8iIdjfHRZNMujUVKH8pbneRBR4sp8PQDv5vK1rXi9lDPGn9tiA7FIPE4Qn8s3BwsRvOzI+7Sn4+vdYp7migG8j8YmF55Ob4qszJs9UvU8Z2JkphM6Vy053N7RnnogWdQqRddKAZgXAtfXKAmT8qDWI0F4UncKQ9XdDrcJ0WE+NJkC+hcK5O9cY3L6gzLQ0eLcZs8AMnH2PHQkZjYDsveyuctAwpuND4+kfmleHgD4RJt+1ezk7mtXSjZnrRK8KK/9bY/vl20gpWe65/MRYDepYldE3WmVAPG2OCEupMmjfKes3wnDFBFBAi/vmJRoGVRrDT4uABIrC65C6hHfUy5JGQRqnyuiK+Uj0tWZ9gXOFoszKUIgD392++Doi9bAhSTAJj4E2qAxOEFXv6AwlL24NSFqZL75mqPV6BN56nFi07DzhuY5KvSQDJhiLrv/SjO2WLcqVo+eeCpW+DgSqREyrrLuwuoJybuKJutEnS0kFL6E+JLOlrYLnS0WJiLAEgdAnlK1Idt2ernLQGKyv3Z+uW1duh4z7LF3vQfmHKv/3jOvfKjJddnz0BgJXpxs5GtrxVgHwCTfFUMYijq3jTulnIvcDjzE8vPQJJXlHIvkCavwHOP9p48EedORXlS4g6w377hzX+Bg3pS+hNiONTRsvQmvlLRr3J7qA6uKRcDZTaKtgyo/Fk9GsZ5PQK7+I3HEvrTMdWb7B2fxWAiN3oXj8+JiR/yf/CB7cr/uVKXuFpKdwo98JoESnjSDlXEtoEAx2WL45JOJ04AOGIeeHHBEOzUV01/0ia1etVj4guwFxFjkNfRWJAxH1dRGVu5tyVAMbEcq4J4rI4/WtWaedHZkiGQKzb5+UZjfkvMaZLEmUj78g+83pTSuwjvkFIdAgPu9PTT+Ror3+E0oQLPL+QHhLH288yDPOcQOIoUeABIIOEGcWfAiOlP5CHsRu0RaBFfMasTP1p+HxIAxkJ7ssIb+LYlQNEO9vH4qzIdVa8HROqHvOihAp4H09t/G9ebKIdQmHffrViBKhsjgOiFmGWHjoJ7IeQa5EWBT4GQB2jkOQcK/MkTxSDUsS8ZFgIHXDDGbdjgzXvUBfTYwsKPlj/sgUUY86PR10bSlgFFY1jFRc8nqqWhV6869//fc+7jP/rUDBgkawvOBJhS/6AAKCTqyB+CkcMRMbFFPX+xZzqFXIOJlgIfAyHcNJxogZEo01hdGCpFeVLiDsDm9yEBbcxSzcZtvOLQFGhTFiF5GkmenzayxBrLgp3fuXOnEEwaiFrAhM6Ar6ooFEZiMia28rqTmo5ifTrhged/i0MQkg8uk1KUM+U6Z92lOBplFvm44DYxHY2FFYKWMlhgFYuQO9tLDeFQ9TTRPxdzMXuS3JdXK7qLOJNWO1syPPMyth1BnYDyTxZXpW0ZypAnnVCYlJgk74cfFzs/2euLiRQAHHru1XdEV+qYGCJSXFd50IViUaZF7gLy4eMq0tH4DZDXC3TyNZIeGqAEpImJ8exxyC12tGd/c4c9ZvqBu/age81fgrjBNYA1F5tUDQB7fPiqpMRzX4B83TabU2ISpfrT85X04orVdCcOCYQKvOpDgY+197bpNdQFAXrlQdzFfElwNBkYPqfPm4qxIjRaOprypHxcStPI67YCCi6gLZnpaXt04eyc+a0Ws/a3dNhqG5hxz774wI2M2SgbMZlwBx4aX434M8d//d8bwUQ+3AsphTrjMuZaYI8xJBT4vzKuGNOd6M9nxhEFPuWtxQOfrwsRmbLu8NrnwUE9iOMiom23bZEIrLrC0VJ/pVtU1lbubRugtCUzaYqKnJ00FE86T2KbsoNynGg9fXzE9fzzrGttO+hOHR9Iijh1VGDSpjP3NclsOLMtkwIFYlI6lzgGZaDAnzjBp2LKXAVlPUj5uLIIYqJZvidKVB4+p05SK49AoSvgiPWLPHkFHtCmOBrtaDRtC6BYLWzJDA+bLW+kLRk+Ay69Wuzvu7sPHHBPnezN3A/8niLKRczBmcIVLzChhOMiiE0uZQOKP/62InZUH9zp7PP6tvGKToM1GopXUlUTkUVbLdSFAh8TkRgLReBItQ9fWt6NgbiLbVJv7GFj7mwToBazLZmwiXkuxZ/78LAs/vEgZoWtz+9j0cMtGX4PwVTNvcBEAYo8GOEcb72d1rn4O9ci3QnuFOMagDA8+qS2phR4Fg3iLg+OWrz2Kl/Xhy3umI9tARTOTf7N4P79B2viDi7Flgx/00U8eq1AopHoPIipIgWc32XRpZRwyiAEOfR3aeCxKM+afhIjgFjE1VK6E2VhcUmxlrjjigIfs9TYi/zSfGO0LcyDAh9beOSR1z7Mw3ZLLE+sr1u9v02AKpk53JO1DWUcAmBdtpTr9aSzYj+/NG6BegNrg0x5AkMtvirSKxSGzwy6CDAiJmPih/pxL+S5mpyfMfEKCIvcCwJh0URT10U7Os5ZxZCkwIf3ws88PilsH7/h43pY2y1hW7YFUFTAgAEqAatoAMOG5D8zuPzTEn/0M3zXHlRvK1akz7WCCSU+Fgrz1ltpUYfOhZ8LCoHI/mDK+ZnXncRxThonjFldRco49SLuYsYCnBdnpkhjk/LaK+12XLcNUDS2XhCpg7IQeSAH/qqhwTb35AnzV12t+Kuw5uAsKTFHeWztFLkXAEe1UBjpXKEizoShVBPXFeNq5At1J/UL7sTfxMbGJQ9C8qkulZG/shksBV7iTkp/rJ58GY38vq2AqrehcCX8Vjg/0b+gJdO9+O/g194Ydh3dy25kvCc7csUpmZgyrHrZMP7FO+vFgVYwelNqcmkLYcTSuShTeTH5OWofO/KFxZV3SzDZ9Sjw6gPcKVaXRGRe3JFn8IhKeLjXHQEoAUmPCeJfKyEUeWhubjl76OhPfjrh9nf2VP1re/LAmQCTYqO0evktE5UJByZp5IXnM3lF5E2FH4cPAAnzSXdSOflrSoGPcRpEZMwDHzu8ka+30d8fOaAAERwp9KLL+YlXHXcD3w929WexV/acjqokzlQEJlmEMWWawotCYeBOACQVfkzeK1crIOa78qWcn7gXpMCTR5SKLBAHzXOnagq8yt6u6yMDFHrSlI3k6Ojo2nYMnRRX0hYND3fnAftYiMReVSMA+sEHXes4k/KgW/zMdK+U3sXkKhRG+STq2NJJKuImYnEvQCFHRLymtoLCTV3l40o8ewz4xEoR6pwnxF1skzqfdju+P0JALWaedI5e8XggkRygAIunvBBCnPozauXjqoehjd2x4KPy3+8IDIDpn/45bi2RH0kbhsJocvkNUZd6eJqAmOcYmXvBFPiYvkdsVUyBf/4MNRcTjk+5F9RO1RUzFopLauzdRwgo/jjQH27Qla61tLSY07Otbi/6vXuT9k+dU/Y87mmzjPZnJ21CMP3N36fBRN1EEoRRo9yDACNe+BgoSEOgXl4R5z7uhRTH+MrqzOcDILgXYtwJ4H9km9vqH/VA1eryqbb3/ZEBChHG9svEhN88hkt1dnaU/7uk+l9OaFjkYmATGm7X2VFyT5+YMQTccl9+0u36B7uzCIKYH0floMS/+6uKzsN9JozJrbYtg5tAT+Ijvaia05R8Cj9WHq4KvAvvhZ+LYuepNxVCE+bfzs+PDFA+Fn1w7THHAKpWPUkDgoibtFONOhdIGcv2qMbm0pxFMUxnwOrrWzRl3vYgEoS4KtrjIwt6U2pbhrw8CEQGAHkExFRMFko1hxa0PwggxHHQnWKhxNQnERmC91F5xulvSI8MUDQC3WiQZy8bxUzj7MfcG5OBiLt3756bmTFuZMS/Y/HfJnNzc5li398/lB2eqFYuZU2M37D/wDtgpfRkZWliq+lNJI6KOhNZKUUck1/cKQQTdaI7xdodPkhM7aQdKRDy+8Oi0sOqKFYPAxcbvKI8iLiRkeFMoefhsSjv6F2ACZHHd/6CjeNd1cpVWQvz901Pmlnnb5J7IaU3AUYerqGJ1RWdKxWoR7/m5u64sRHvvFU+gFXNLUE8OfpVyJ2qgbBoHLfr3iPlUPV0SlwJxVtRDIg4gvXkr+ro6MjEG/uHtYDp7t27WVltxiSld12/3OH6D/dU3dahPVMPbrv+Q7bXduJAti1Ef5hodK6Yd5s0AJlzjD1HWi1atQJI3AuxiEzyQVhwePihK6bQc6KlWgyYT/1w3ptWjR5OVZuvJa94w4V4QXAlCH/V4OBgTWExKk8BgIjL5tJC9o9NbR29WTnVXBWc2Hlw7272rPYbo73u/G8Rmba98j0zAl6P7/MBRDgseflDn+u3ezPj4fgz3VVBnFVQfqMcfFE8MONRecXD9ujzrgDU+Pi4u22R/vKaAyY+84JL1eOvAkziTAwC4lIcrre3xw0NDVV1oOI8vXHjxppVyfPap2ZKrqVt0D15rDvpN6MvAJm2d3WsZP+/QjsGBnrdwZ5jfNzVtCtEHlyICYD4VyWBSV70WkQceeX4xFUBKKV7UR5cKvV3q+SHABPciTYBZg5wLtkWES6QoaGDSTBSP4BS3tn5JtfctOgODQ24ru4jvoJd/r4rAEWEJzoHSvjy8qrpEfuzqM96vOgAYWRkJCsjBBOTi+51+PDhTFym5lOAxLIMRS7AIoAwtTWEiMLFsT7vUpaned9BK++R20eprtf8264BFA/iIHwYqieEmInExcCeoVwKoZgTmKo9JhtRmQckohJgIXIVSBgbedqA85X0LAgiKpSXcOjHhXYFoBjszfisBCZ0FomZ0CqUIl8NTJTDKZ4iUXno0KGq/i64Yyjq9KQ/dLZa3Bu7CWy7BlAMaj1iARBgTeFFhxBLEFwKYjKxCqtZc2E5cBRe8nnVAgg4G+E5iDq1AXDXqrNljd1Fb4+H4C4YcCI/dcgUEEBMJJ9lzdUDJvKH5Yi7pfQmX+eibVp7b/6+ffsyg4JyBgYGqups5N9ttKs41GYHFyBBcAj0HcRMNSCEnIm8sggpC72rFu5GvpC0TQSga7VMw/y74fNjy6FQdAGPuAogkL5TDUxMXMjhQjAhqrAIq+ldmnye5Ec7ROJs9Yhv5d0N18eWQzFhPFmPiUcp5lorCJg4OJE4mxyfgAlRVU85gNdzxNasvHpcHbsBQPk27gpPeb7R9X5HfNXLEeTAlJhCXMLhqoXCxNpGG6B62xErb6fe/1YAajODDwB0pIv8eNHr4UybqfNxyLMHqCqziNkP1aJ3VSnqW/HzHqC+FdP88Dr52Fp5D28I92oKR2APUOFo7H3e8gjsAWrLQ7hXQDgCe4AKR2Pv85ZHYA9QWx7CvQLCEdgDVDgae5+3PAJ7gNryEO4VEI7AHqDC0dj7vOUR2APUlodwr4BwBP4dNSlqmAgWU58AAAAASUVORK5CYII=",Iw="data:image/png;base64,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",Dw="data:image/png;base64,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",Ow="data:image/png;base64,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";var _w={name:"FingerRegisterView",props:{row:{type:Object,default:()=>{}}},data(){return{fingerRegisterStep:0,currentFingerprintImage:"/public/finger-status-start.png",gifTimeoutId:null,selectedFinger:null,fingerTemp:null,fingerId:null,fid:null,loading:!1,leftFingers:[{label:"大拇指",value:"left-thumb",top:122,left:6,index:0,fingerInfo:null},{label:"食指",value:"left-index",top:20,left:60,index:1,fingerInfo:null},{label:"中指",value:"left-middle",top:3,left:98,index:2,fingerInfo:null},{label:"无名指",value:"left-ring",top:12,left:136,index:3,fingerInfo:null},{label:"小拇指",value:"left-little",top:35,left:176,index:4,fingerInfo:null}],rightFingers:[{label:"大拇指",value:"right-thumb",top:118,left:178,index:5,fingerInfo:null},{label:"食指",value:"right-index",top:16,left:121,index:6,fingerInfo:null},{label:"中指",value:"right-middle",top:0,left:83,index:7,fingerInfo:null},{label:"无名指",value:"right-ring",top:11,left:43,index:8,fingerInfo:null},{label:"小拇指",value:"right-little",top:42,left:5,index:9,fingerInfo:null}]}},computed:{userId(){return this.row.userId},devSn(){return ae.getters.getFingerprintDeviceSN},devType(){return 1},tenantId(){return null},leftHandleImg(){return this.selectedFinger&&this.selectedFinger.value.includes("left")?e(9165):e(288)},rightHandleImg(){return this.selectedFinger&&this.selectedFinger.value.includes("right")?e(4862):e(9637)},realFingerprintImage(){return"/public/finger-status-start.png"===this.currentFingerprintImage?Ow:"/public/finger-status-1.gif"===this.currentFingerprintImage?qw:"/public/finger-status-1-last.png"===this.currentFingerprintImage?Ew:"/public/finger-status-2.gif"===this.currentFingerprintImage?Cw:"/public/finger-status-2-last.png"===this.currentFingerprintImage?Sw:"/public/finger-status-3.gif"===this.currentFingerprintImage?Aw:"/public/finger-status-3-last.png"===this.currentFingerprintImage?Iw:"/public/finger-status-compeleted.png"===this.currentFingerprintImage?Dw:Ow},stepTips(){return-1===this.fingerRegisterStep?"指纹采集异常,请重试!":0===this.fingerRegisterStep?"请选择需要采集的手指":1===this.fingerRegisterStep?"请将手指放在设备上":2===this.fingerRegisterStep?"请再次将手指放在设备上":3===this.fingerRegisterStep?"最后一次将手指放在设备上":4===this.fingerRegisterStep?"正在指纹采集":5===this.fingerRegisterStep?"指纹采集成功":"未知状态"},fingerStatusText(){return-1===this.fingerRegisterStep?"指纹采集异常,请重试!":0===this.fingerRegisterStep?"采集指纹一共需要三次按压":1===this.fingerRegisterStep?"请将手指放在设备上":2===this.fingerRegisterStep?"请再次将手指放在设备上":3===this.fingerRegisterStep?"最后一次将手指放在设备上":4===this.fingerRegisterStep?"正在处理指纹数据...":5===this.fingerRegisterStep?"指纹采集成功":"准备采集指纹"}},watch:{fingerRegisterStep(n){clearTimeout(this.gifTimeoutId);const x=800;1===n||0===n||-1===n?this.currentFingerprintImage="/public/finger-status-start.png":2===n?(this.currentFingerprintImage="/public/finger-status-1.gif",this.gifTimeoutId=setTimeout(()=>{this.currentFingerprintImage="/public/finger-status-1-last.png"},x)):3===n?(this.currentFingerprintImage="/public/finger-status-2.gif",this.gifTimeoutId=setTimeout(()=>{this.currentFingerprintImage="/public/finger-status-2-last.png"},x)):4===n?(this.currentFingerprintImage="/public/finger-status-3.gif",this.gifTimeoutId=setTimeout(()=>{this.currentFingerprintImage="/public/finger-status-3-last.png"},x)):5===n&&(this.currentFingerprintImage="/public/finger-status-compeleted.png")}},mounted(){this.loadCurrentUserFingerInfo(),this.$authEventBus.$on("startCollectionMessage",this.startCollectionMessage)},beforeDestroy(){clearTimeout(this.gifTimeoutId),this.$authEventBus.$off("startCollectionMessage",this.startCollectionMessage),this.fingerRegisterStep>0&&this.fingerRegisterStep<5&&this.cancelCollection()},methods:{cancelCollection(){this.$authEventBus.$emit("cancelCollection")},handleCancelCollection(){this.$confirm("确定要退出指纹采集吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{this.cancelCollection(),this.$message.info("已退出指纹采集")}).catch(()=>{})},startCollectionMessage(n){if(console.log("startCollectionMessage:",n),200===n.status||0===n.result){const{count:x,temp:t,image:e}=n.data;console.log(`指纹采集进度: ${x}/4`),1===x?this.fingerRegisterStep=2:2===x?this.fingerRegisterStep=3:3===x?this.fingerRegisterStep=4:4===x&&(this.fingerRegisterStep=5,this.fingerTemp=t,console.log("✅ 指纹采集完成,获取到指纹模板"),this.$nextTick(()=>{this.addFingerprint()})),e&&console.log("收到指纹图像数据")}else console.error("指纹采集失败:",n.msg||"未知错误"),this.fingerRegisterStep=-1,this.$message?.error?.(n.msg||"指纹采集失败,请重试")},handleClose(){},async handleSelectFinger(n){if(this.fingerRegisterStep>0&&this.fingerRegisterStep<5)this.$message({message:"指纹采集尚未完成,请先完成当前采集",type:"warning"});else if(n.fingerInfo)this.selectedFinger=n;else try{const x=await vw({devSn:this.devSn,devType:this.devType,fingerNo:n.index,tenantId:this.tenantId,userId:this.userId});this.fingerId=x.data.fingerId,this.fid=x.data.fingerSeq,this.selectedFinger=n,this.fingerRegisterStep=1,this.fingerTemp=null,console.log(`开始采集 ${n.label} 指纹,fingerId: ${this.fingerId}, fid: ${this.fid}`),this.startCollection()}catch(x){console.error("获取指纹信息失败:",x)}},handleSaveFingerprint(){this.addFingerprint()},handleDeleteFinger(){this.$confirm("确定删除指纹吗?").then(()=>{kw({fingerId:this.selectedFinger.fingerInfo.id}).then(()=>{this.selectedFinger=null,this.fingerRegisterStep=0,this.$message.success("删除成功"),this.loadCurrentUserFingerInfo()})}).catch(()=>{})},startCollection(){this.$authEventBus.$emit("startCollection")},loadCurrentUserFingerInfo(){ww({devType:this.devType,tenantId:this.tenantId,userId:this.userId}).then(n=>{const x=n.data,t=this.leftFingers.map(n=>{const t=x.find(x=>x.fingerNo===n.index);return{...n,fingerInfo:t}}),e=this.rightFingers.map(n=>{const t=x.find(x=>x.fingerNo===n.index);return{...n,fingerInfo:t}});this.leftFingers=t,this.rightFingers=e})},addFingerprint(){this.fingerId?this.fingerTemp?this.selectedFinger?this.fid?(this.loading=!0,console.log("开始保存指纹到服务器..."),jw({data:this.fingerTemp,fingerId:this.fingerId}).then(()=>{console.log("✅ 指纹保存成功"),this.loadCurrentUserFingerInfo(),this.selectedFinger=null,this.fingerRegisterStep=0,this.fingerTemp=null,this.fingerId=null,this.fid=null,this.$message.success("指纹录入成功!")}).catch(n=>{console.error("❌ 指纹保存失败:",n),this.fingerRegisterStep=-1}).finally(()=>{this.loading=!1})):this.$message.error("未获取到指纹序列号"):this.$message.error("请先选择手指"):this.$message.error("未获取到指纹模板"):this.$message.error("未获取到指纹ID")}}},Tw=_w,Rw=Ie(Tw,bw,zw,!1,null,"334b3efe",null),Bw=Rw.exports,Mw={name:"auth-com",components:{FaceRegister:Jj,CardRegister:mw,FingerRegister:Bw},props:{authCollect:{type:Array,default:()=>[]},drawerInfo:{type:Object,default:()=>{}}},data(){return{authList:[],activeName:""}},computed:{modules(){return this.authCollect??[]},options(){return this.modules&&this.modules.find(n=>"face"===n.value).options||[]}},mounted(){this.h_init()},methods:{h_init(){this.modules.length&&(this.activeName=this.modules[0].value)}}},Nw=Mw,Fw=Ie(Nw,si,hi,!1,null,"4bde6ad6",null),Pw=Fw.exports,Lw=function(){var n=this,x=n._self._c;return x("div",{staticClass:"flex-center align-center h100"},[x("el-empty",{staticStyle:{"font-size":"20px"},attrs:{description:"请先保存用户信息"}})],1)},Hw=[],Uw={name:"empty-view"},Vw=Uw,Ww=Ie(Vw,Lw,Hw,!1,null,"9e253eac",null),Qw=Ww.exports,Gw={name:"user-drawer",components:{UserInfo:oi,AuthCom:Pw,EmptyView:Qw},props:{drawerStyle:{type:String,default:""},authCollect:{required:!1,type:Array,default:()=>[]},drawerInfo:{type:Object},userBeforeCreate:{type:Function,default:()=>!0}},data(){return{visible:!1,loading:!1}},mounted(){this.visible=!0},methods:{closed(){this.$emit("closed")},h_back(){this.visible=!1},async f_save(){const n=this.userBeforeCreate(this.$refs["user-info"].h_getFormData(),this.drawerInfo);this.userBeforeCreate&&!n||this.$refs["user-info"].h_validate().then(n=>{if(console.log("valid",n),!n)return;const x=this.$refs["user-info"].h_getFormData();this.loading=!0,ve({...x,organId:this.drawerInfo.organ.id,accountEnabled:x.accountEnabled}).then(()=>{this.$emit("refresh"),this.visible=!1}).catch(n=>{console.error("用户状态 err",n)}).finally(()=>{this.loading=!1})})}}},Kw=Gw,Yw=Ie(Kw,Xe,Ze,!1,null,"8c86d64a",null),Jw=Yw.exports,Xw=e(4747),Zw=e.n(Xw);class $w{constructor(n,x={}){this.url=n,this.options={reconnectInterval:5e3,maxReconnectAttempts:10,heartbeatInterval:12e4,...x},this.ws=null,this.reconnectAttempts=0,this.isConnected=!1,this.heartbeatTimer=null,this.eventListeners=new Map,this.onOpen=this.onOpen.bind(this),this.onMessage=this.onMessage.bind(this),this.onError=this.onError.bind(this),this.onClose=this.onClose.bind(this)}connect(){try{this.ws=new WebSocket(this.url),this.ws.onopen=this.onOpen,this.ws.onmessage=this.onMessage,this.ws.onerror=this.onError,this.ws.onclose=this.onClose}catch(n){console.error("WebSocket连接失败:",n),this.handleReconnect()}}onOpen(n){console.log("WebSocket连接成功"),this.isConnected=!0,this.reconnectAttempts=0,this.startHeartbeat(),this.emit("open",n)}onMessage(n){try{const x=JSON.parse(n.data);if(console.log("收到WebSocket消息:",x),"pong"===x.type)return;this.emit("message",x)}catch(x){console.error("解析WebSocket消息失败:",x),this.emit("message",n.data)}}onError(n){console.error("WebSocket错误:",n),this.emit("error",n)}onClose(n){console.log("WebSocket连接关闭:",n.code,n.reason),this.isConnected=!1,this.stopHeartbeat(),this.emit("close",n),1e3!==n.code&&this.handleReconnect()}send(n){if(!this.isConnected||this.ws.readyState!==WebSocket.OPEN)return console.warn("WebSocket未连接,无法发送消息"),!1;try{const x="string"===typeof n?n:JSON.stringify(n);return this.ws.send(x),console.log("发送WebSocket消息:",n),!0}catch(x){return console.error("发送WebSocket消息失败:",x),!1}}on(n,x){this.eventListeners.has(n)||this.eventListeners.set(n,[]),this.eventListeners.get(n).push(x)}off(n,x){const t=this.eventListeners.get(n);if(t){const n=t.indexOf(x);n>-1&&t.splice(n,1)}}emit(n,x){const t=this.eventListeners.get(n);t&&t.forEach(t=>{try{t(x)}catch(e){console.error(`事件监听器执行失败 [${n}]:`,e)}})}handleReconnect(){this.reconnectAttempts<this.options.maxReconnectAttempts?(this.reconnectAttempts++,console.log(`尝试重连WebSocket (${this.reconnectAttempts}/${this.options.maxReconnectAttempts})`),setTimeout(()=>{this.connect()},this.options.reconnectInterval)):(console.error("WebSocket重连次数已达上限"),this.emit("reconnectFailed"))}startHeartbeat(){this.stopHeartbeat(),this.heartbeatTimer=setInterval(()=>{this.isConnected&&this.send({type:"ping",timestamp:Date.now()})},this.options.heartbeatInterval)}stopHeartbeat(){this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null)}close(){this.stopHeartbeat(),this.ws&&this.ws.close(1e3,"主动关闭"),this.isConnected=!1}getReadyState(){return this.ws?this.ws.readyState:WebSocket.CLOSED}isOpen(){return this.isConnected&&this.ws&&this.ws.readyState===WebSocket.OPEN}}var nk=$w,xk={name:"auth-manage",props:{drawerStyle:{type:String,default:""},authCollect:{required:!1,type:Array,default:()=>["face","finger","idCard"]},userBeforeCreate:{type:Function,default:()=>!0},beforeCreate:{type:Function,default:()=>!0},baseUrl:{type:String},authUrl:{type:String}},components:{OrganTree:Pe,UserTable:Je,UserDrawer:Jw},data(){return{visible:!1,drawerInfo:{},organTreeKey:"1",websocket:null,cardReader:null,fingerprintDeviceCount:0}},created(){this.baseUrl&&ae.commit("SET_BASE_URL",this.baseUrl),this.authUrl&&ae.commit("SET_AUTH_URL",this.authUrl)},mounted(){console.log("LD-AUTH打包时间为",Zw()(1758188577134).format("YYYY-MM-DD HH:mm:ss")),this.$authEventBus.$on("startCollection",this.handleStartCollection),this.$authEventBus.$on("cancelCollection",this.handleCancelCollection),this.initWebSocket()},beforeDestroy(){this.websocket&&(console.log("🔌 组件销毁,关闭WebSocket连接"),this.websocket.close(),this.websocket=null),this.$authEventBus.$off("startCollection",this.handleStartCollection),this.$authEventBus.$off("cancelCollection",this.handleCancelCollection)},methods:{handleCancelCollection(){this.websocket&&this.websocket.send({action:1010})},handleStartCollection(){if(ae.getters.getFingerprintDeviceSN){const n={action:1001};this.websocket.send(n)}},initWebSocket(){try{this.websocket=new nk(`${ae.state.websocketUrl}`,{reconnectInterval:5e3,maxReconnectAttempts:10,heartbeatInterval:12e4}),this.websocket.on("open",()=>{this.checkCardReaderConnection(),this.getFingerprintDeviceSN()}),this.websocket.on("message",n=>{console.log("📨 收到WebSocket消息:",n),this.handleWebSocketMessage(n)}),this.websocket.on("error",n=>{console.error("❌ WebSocket连接错误:",n)}),this.websocket.on("close",n=>{console.log("🔌 WebSocket连接已关闭:",n.code,n.reason),n.code}),this.websocket.on("reconnectFailed",()=>{console.error("💥 WebSocket重连失败,已达最大重连次数")}),this.websocket.connect()}catch(n){console.error("WebSocket初始化失败:",n)}},handleWebSocketMessage(n){if(n.action)switch(n.action){case 1009:this.handleFingerprintDeviceSNResponse(n);break;case 2001:this.handleCheckCardReaderResponse(n);break;case 2002:this.handleCardReaderListResponse(n);break;case 2003:this.handleOpenCardReaderResponse(n);break;case 2004:this.$authEventBus.$emit("card",n);break;case 1001:this.$authEventBus.$emit("startCollectionMessage",n);break;default:console.log("未知action类型:",n)}else switch(n.type){case"user_update":console.log("用户信息更新:",n.payload),this.f_userData();break;case"organ_update":console.log("组织架构更新:",n.payload),this.f_refreshTree();break;case"auth_status":console.log("认证状态更新:",n.payload),this.$message?.info?.(n.payload.message||"认证状态已更新");break;case"notification":console.log("系统通知:",n.payload),this.$message?.info?.(n.payload.message||"收到系统通知");break;default:console.log("未知消息类型:",n)}},sendWebSocketMessage(n,x={}){if(this.websocket&&this.websocket.isOpen()){const t={type:n,payload:x,timestamp:Date.now()};this.websocket.send(t),console.log("📤 发送WebSocket消息:",t)}},getFingerprintDeviceSN(){console.log("🔢 获取指纹设备SN码...");const n={action:1009};this.websocket.send(n),console.log("📤 发送获取指纹设备SN码消息:",n)},handleFingerprintDeviceSNResponse(n){if(console.log("📊 收到指纹设备SN响应:",n),200===n.status||0===n.result){const x=n.data?.sn||"";x?(console.log("✅ 获取到指纹设备SN:",x),ae.dispatch("updateFingerprintDeviceSN",x)):(console.warn("⚠️ 指纹设备SN为空"),ae.dispatch("updateFingerprintDeviceSN",""))}else console.error("❌ 获取指纹设备SN失败:",n.msg||"未知错误")},getFingerprintDeviceStatus(){return{deviceCount:this.fingerprintDeviceCount,hasDevice:this.fingerprintDeviceCount>0,deviceSN:this.$store.getters.getFingerprintDeviceSN}},refreshFingerprintDeviceCount(){this.websocket&&this.websocket.isOpen()?this.getFingerprintDeviceCount():console.warn("WebSocket未连接,无法获取指纹设备数量")},refreshFingerprintDeviceSN(){this.websocket&&this.websocket.isOpen()?this.getFingerprintDeviceSN():console.warn("WebSocket未连接,无法获取指纹设备SN")},refreshAllFingerprintInfo(){this.websocket&&this.websocket.isOpen()?(this.getFingerprintDeviceCount(),this.getFingerprintDeviceSN()):console.warn("WebSocket未连接,无法获取指纹设备信息")},checkCardReaderConnection(){console.log("🔍 检查读卡器连接状态...");const n={action:2001};this.websocket.send(n),console.log("📤 发送检查读卡器连接状态消息:",n)},handleCheckCardReaderResponse(n){console.log("📊 收到读卡器连接状态响应:",n),200===n.status||0===n.result?n.data&&n.data.isOpen?(this.cardReader=n.data.devName||"读卡器",console.log("✅ 读卡器已连接:",this.cardReader)):(console.log("⚠️ 读卡器未连接,开始获取读卡器列表..."),this.getCardReaderList()):(console.error("❌ 检查读卡器状态失败:",n.msg||"未知错误"),this.getCardReaderList())},getCardReaderList(){console.log("📡 请求获取读卡器列表...");const n={action:2002};this.websocket.send(n),console.log("📤 发送获取读卡器列表消息:",n)},handleCardReaderListResponse(n){if(console.log("📋 收到读卡器列表响应:",n),n.data&&Array.isArray(n.data)&&n.data.length>0){const x=n.data[0];console.log("🎯 找到读卡器:",x),this.openCardReader(x)}else console.warn("⚠️ 未找到可用的读卡器")},openCardReader(n){const x={action:2003,devName:n};this.websocket.send(x)},handleOpenCardReaderResponse(n){0===n.result||200===n.status?this.cardReader=n.devName||"读卡器":this.$message?.error?.(`读卡器打开失败: ${n.message||n.error||"未知错误"}`)},getCardReaderStatus(){return{isConnected:!!this.cardReader,deviceName:this.cardReader}},reinitCardReader(){this.cardReader=null,this.websocket&&this.websocket.isOpen()?this.checkCardReaderConnection():this.$message?.warning?.("WebSocket未连接,无法初始化读卡器")},getAllDeviceStatus(){return{fingerprint:this.getFingerprintDeviceStatus(),cardReader:this.getCardReaderStatus()}},refreshAllDevices(){this.websocket&&this.websocket.isOpen()?(this.refreshAllFingerprintInfo(),this.checkCardReaderConnection()):this.$message?.warning?.("WebSocket未连接,无法刷新设备状态")},f_refreshTree(){this.organTreeKey=this.organTreeKey+1},f_userData(n){n&&this.$set(this.drawerInfo,"organ",n),this.$refs["user-table"].f_init(this.drawerInfo.organ)},h_setVisible(){this.visible=!1},h_setUserId(n,x){this.$set(this.drawerInfo,"userId",n),this.$set(this.drawerInfo,"row",x),this.visible=!0}}},tk=xk,ek=Ie(tk,r,o,!1,null,"81b3c05e",null),ik=ek.exports;const rk=new(At());var ok=rk;const sk=function(n,x={}){sk.installed||(n.component(ik.name,ik),n.prototype.$authEventBus=ok,void 0!==x.baseUrl&&null!==x.baseUrl&&ae.commit("SET_BASE_URL",x.baseUrl),void 0!==x.authUrl&&null!==x.authUrl&&ae.commit("SET_AUTH_URL",x.authUrl),void 0!==x.websocketUrl&&null!==x.websocketUrl&&ae.commit("SET_WEBSOCKET_URL",x.websocketUrl),void 0!==x.faceApiUrl&&null!==x.faceApiUrl&&ae.commit("SET_FACE_API_URL",x.faceApiUrl))};var hk={install:sk,authManage:ik},uk=hk}(),i=i["default"],i}()});