@datagrok/bio 2.11.38 → 2.11.39

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.
package/dist/package.js CHANGED
@@ -5,5 +5,5 @@ var bio;(()=>{var e={2012:(e,t,s)=>{"use strict";s.d(t,{f:()=>r});var n=s(9976);
5
5
  || ${a} === "boolean" || ${r} === null`).assign(l,o._`[${r}]`)}}n.else(),m(e),n.endIf(),n.if(o._`${l} !== undefined`,(()=>{n.assign(r,l),function({gen:e,parentData:t,parentDataProperty:s},n){e.if(o._`${t} !== undefined`,(()=>e.assign(o._`${t}[${s}]`,n)))}(e,l)}))}(e,t,a):m(e)}))}return c};const h=new Set(["string","number","integer","boolean","null"]);function u(e,t,s,n=l.Correct){const r=n===l.Correct?o.operators.EQ:o.operators.NEQ;let i;switch(e){case"null":return o._`${t} ${r} null`;case"array":i=o._`Array.isArray(${t})`;break;case"object":i=o._`${t} && typeof ${t} == "object" && !Array.isArray(${t})`;break;case"integer":i=a(o._`!(${t} % 1) && !isNaN(${t})`);break;case"number":i=a();break;default:return o._`typeof ${t} ${r} ${e}`}return n===l.Correct?i:(0,o.not)(i);function a(e=o.nil){return(0,o.and)(o._`typeof ${t} == "number"`,e,s?o._`isFinite(${t})`:o.nil)}}function d(e,t,s,n){if(1===e.length)return u(e[0],t,s,n);let r;const i=(0,a.toHash)(e);if(i.array&&i.object){const e=o._`typeof ${t} != "object"`;r=i.null?e:o._`!${t} || ${e}`,delete i.null,delete i.array,delete i.object}else r=o.nil;i.number&&delete i.integer;for(const e in i)r=(0,o.and)(r,u(e,t,s,n));return r}t.checkDataType=u,t.checkDataTypes=d;const p={message:({schema:e})=>`must be ${e}`,params:({schema:e,schemaValue:t})=>"string"==typeof e?o._`{type: ${e}}`:o._`{type: ${t}}`};function m(e){const t=function(e){const{gen:t,data:s,schema:n}=e,r=(0,a.schemaRefOrVal)(e,n,"type");return{gen:t,keyword:"type",data:s,schema:n.type,schemaCode:r,schemaValue:r,parentSchema:n,params:{},it:e}}(e);(0,i.reportError)(t,p)}t.reportTypeError=m},313:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.assignDefaults=void 0;const n=s(3487),r=s(6776);function i(e,t,s){const{gen:i,compositeRule:o,data:a,opts:l}=e;if(void 0===s)return;const c=n._`${a}${(0,n.getProperty)(t)}`;if(o)return void(0,r.checkStrictMode)(e,`default is ignored for: ${c}`);let h=n._`${c} === undefined`;"empty"===l.useDefaults&&(h=n._`${h} || ${c} === null || ${c} === ""`),i.if(h,n._`${c} = ${(0,n.stringify)(s)}`)}t.assignDefaults=function(e,t){const{properties:s,items:n}=e.schema;if("object"===t&&s)for(const t in s)i(e,t,s[t].default);else"array"===t&&Array.isArray(n)&&n.forEach(((t,s)=>i(e,s,t.default)))}},4815:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getData=t.KeywordCxt=t.validateFunctionCode=void 0;const n=s(5667),r=s(453),i=s(8876),o=s(453),a=s(313),l=s(5005),c=s(3099),h=s(3487),u=s(2141),d=s(2531),p=s(6776),m=s(4181);function f({gen:e,validateName:t,schema:s,schemaEnv:n,opts:r},i){r.code.es5?e.func(t,h._`${u.default.data}, ${u.default.valCxt}`,n.$async,(()=>{e.code(h._`"use strict"; ${g(s,r)}`),function(e,t){e.if(u.default.valCxt,(()=>{e.var(u.default.instancePath,h._`${u.default.valCxt}.${u.default.instancePath}`),e.var(u.default.parentData,h._`${u.default.valCxt}.${u.default.parentData}`),e.var(u.default.parentDataProperty,h._`${u.default.valCxt}.${u.default.parentDataProperty}`),e.var(u.default.rootData,h._`${u.default.valCxt}.${u.default.rootData}`),t.dynamicRef&&e.var(u.default.dynamicAnchors,h._`${u.default.valCxt}.${u.default.dynamicAnchors}`)}),(()=>{e.var(u.default.instancePath,h._`""`),e.var(u.default.parentData,h._`undefined`),e.var(u.default.parentDataProperty,h._`undefined`),e.var(u.default.rootData,u.default.data),t.dynamicRef&&e.var(u.default.dynamicAnchors,h._`{}`)}))}(e,r),e.code(i)})):e.func(t,h._`${u.default.data}, ${function(e){return h._`{${u.default.instancePath}="", ${u.default.parentData}, ${u.default.parentDataProperty}, ${u.default.rootData}=${u.default.data}${e.dynamicRef?h._`, ${u.default.dynamicAnchors}={}`:h.nil}}={}`}(r)}`,n.$async,(()=>e.code(g(s,r)).code(i)))}function g(e,t){const s="object"==typeof e&&e[t.schemaId];return s&&(t.code.source||t.code.process)?h._`/*# sourceURL=${s} */`:h.nil}function y({schema:e,self:t}){if("boolean"==typeof e)return!e;for(const s in e)if(t.RULES.all[s])return!0;return!1}function b(e){return"boolean"!=typeof e.schema}function v(e){(0,p.checkUnknownRules)(e),function(e){const{schema:t,errSchemaPath:s,opts:n,self:r}=e;t.$ref&&n.ignoreKeywordsWithRef&&(0,p.schemaHasRulesButRef)(t,r.RULES)&&r.logger.warn(`$ref: keywords ignored in schema at path "${s}"`)}(e)}function w(e,t){if(e.opts.jtd)return S(e,[],!1,t);const s=(0,r.getSchemaTypes)(e.schema);S(e,s,!(0,r.coerceAndCheckDataType)(e,s),t)}function C({gen:e,schemaEnv:t,schema:s,errSchemaPath:n,opts:r}){const i=s.$comment;if(!0===r.$comment)e.code(h._`${u.default.self}.logger.log(${i})`);else if("function"==typeof r.$comment){const s=h.str`${n}/$comment`,r=e.scopeValue("root",{ref:t.root});e.code(h._`${u.default.self}.opts.$comment(${i}, ${s}, ${r}.schema)`)}}function S(e,t,s,n){const{gen:r,schema:a,data:l,allErrors:c,opts:d,self:m}=e,{RULES:f}=m;function g(p){(0,i.shouldUseGroup)(a,p)&&(p.type?(r.if((0,o.checkDataType)(p.type,l,d.strictNumbers)),x(e,p),1===t.length&&t[0]===p.type&&s&&(r.else(),(0,o.reportTypeError)(e)),r.endIf()):x(e,p),c||r.if(h._`${u.default.errors} === ${n||0}`))}!a.$ref||!d.ignoreKeywordsWithRef&&(0,p.schemaHasRulesButRef)(a,f)?(d.jtd||function(e,t){!e.schemaEnv.meta&&e.opts.strictTypes&&(function(e,t){t.length&&(e.dataTypes.length?(t.forEach((t=>{A(e.dataTypes,t)||E(e,`type "${t}" not allowed by context "${e.dataTypes.join(",")}"`)})),function(e,t){const s=[];for(const n of e.dataTypes)A(t,n)?s.push(n):t.includes("integer")&&"number"===n&&s.push("integer");e.dataTypes=s}(e,t)):e.dataTypes=t)}(e,t),e.opts.allowUnionTypes||function(e,t){t.length>1&&(2!==t.length||!t.includes("null"))&&E(e,"use allowUnionTypes to allow union type keyword")}(e,t),function(e,t){const s=e.self.RULES.all;for(const n in s){const r=s[n];if("object"==typeof r&&(0,i.shouldUseRule)(e.schema,r)){const{type:s}=r.definition;s.length&&!s.some((e=>{return n=e,(s=t).includes(n)||"number"===n&&s.includes("integer");var s,n}))&&E(e,`missing type "${s.join(",")}" for keyword "${n}"`)}}}(e,e.dataTypes))}(e,t),r.block((()=>{for(const e of f.rules)g(e);g(f.post)}))):r.block((()=>T(e,"$ref",f.all.$ref.definition)))}function x(e,t){const{gen:s,schema:n,opts:{useDefaults:r}}=e;r&&(0,a.assignDefaults)(e,t.type),s.block((()=>{for(const s of t.rules)(0,i.shouldUseRule)(n,s)&&T(e,s.keyword,s.definition,t.type)}))}function A(e,t){return e.includes(t)||"integer"===t&&e.includes("number")}function E(e,t){t+=` at "${e.schemaEnv.baseId+e.errSchemaPath}" (strictTypes)`,(0,p.checkStrictMode)(e,t,e.opts.strictTypes)}t.validateFunctionCode=function(e){b(e)&&(v(e),y(e))?function(e){const{schema:t,opts:s,gen:n}=e;f(e,(()=>{s.$comment&&t.$comment&&C(e),function(e){const{schema:t,opts:s}=e;void 0!==t.default&&s.useDefaults&&s.strictSchema&&(0,p.checkStrictMode)(e,"default is ignored in the schema root")}(e),n.let(u.default.vErrors,null),n.let(u.default.errors,0),s.unevaluated&&function(e){const{gen:t,validateName:s}=e;e.evaluated=t.const("evaluated",h._`${s}.evaluated`),t.if(h._`${e.evaluated}.dynamicProps`,(()=>t.assign(h._`${e.evaluated}.props`,h._`undefined`))),t.if(h._`${e.evaluated}.dynamicItems`,(()=>t.assign(h._`${e.evaluated}.items`,h._`undefined`)))}(e),w(e),function(e){const{gen:t,schemaEnv:s,validateName:n,ValidationError:r,opts:i}=e;s.$async?t.if(h._`${u.default.errors} === 0`,(()=>t.return(u.default.data)),(()=>t.throw(h._`new ${r}(${u.default.vErrors})`))):(t.assign(h._`${n}.errors`,u.default.vErrors),i.unevaluated&&function({gen:e,evaluated:t,props:s,items:n}){s instanceof h.Name&&e.assign(h._`${t}.props`,s),n instanceof h.Name&&e.assign(h._`${t}.items`,n)}(e),t.return(h._`${u.default.errors} === 0`))}(e)}))}(e):f(e,(()=>(0,n.topBoolOrEmptySchema)(e)))};class _{constructor(e,t,s){if((0,l.validateKeywordUsage)(e,t,s),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=s,this.data=e.data,this.schema=e.schema[s],this.$data=t.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,p.schemaRefOrVal)(e,this.schema,s,this.$data),this.schemaType=t.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=t,this.$data)this.schemaCode=e.gen.const("vSchema",M(this.$data,e));else if(this.schemaCode=this.schemaValue,!(0,l.validSchemaType)(this.schema,t.schemaType,t.allowUndefined))throw new Error(`${s} value must be ${JSON.stringify(t.schemaType)}`);("code"in t?t.trackErrors:!1!==t.errors)&&(this.errsCount=e.gen.const("_errs",u.default.errors))}result(e,t,s){this.failResult((0,h.not)(e),t,s)}failResult(e,t,s){this.gen.if(e),s?s():this.error(),t?(this.gen.else(),t(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(e,t){this.failResult((0,h.not)(e),void 0,t)}fail(e){if(void 0===e)return this.error(),void(this.allErrors||this.gen.if(!1));this.gen.if(e),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);const{schemaCode:t}=this;this.fail(h._`${t} !== undefined && (${(0,h.or)(this.invalid$data(),e)})`)}error(e,t,s){if(t)return this.setParams(t),this._error(e,s),void this.setParams({});this._error(e,s)}_error(e,t){(e?m.reportExtraError:m.reportError)(this,this.def.error,t)}$dataError(){(0,m.reportError)(this,this.def.$dataError||m.keyword$DataError)}reset(){if(void 0===this.errsCount)throw new Error('add "trackErrors" to keyword definition');(0,m.resetErrorsCount)(this.gen,this.errsCount)}ok(e){this.allErrors||this.gen.if(e)}setParams(e,t){t?Object.assign(this.params,e):this.params=e}block$data(e,t,s=h.nil){this.gen.block((()=>{this.check$data(e,s),t()}))}check$data(e=h.nil,t=h.nil){if(!this.$data)return;const{gen:s,schemaCode:n,schemaType:r,def:i}=this;s.if((0,h.or)(h._`${n} === undefined`,t)),e!==h.nil&&s.assign(e,!0),(r.length||i.validateSchema)&&(s.elseIf(this.invalid$data()),this.$dataError(),e!==h.nil&&s.assign(e,!1)),s.else()}invalid$data(){const{gen:e,schemaCode:t,schemaType:s,def:n,it:r}=this;return(0,h.or)(function(){if(s.length){if(!(t instanceof h.Name))throw new Error("ajv implementation error");const e=Array.isArray(s)?s:[s];return h._`${(0,o.checkDataTypes)(e,t,r.opts.strictNumbers,o.DataType.Wrong)}`}return h.nil}(),function(){if(n.validateSchema){const s=e.scopeValue("validate$data",{ref:n.validateSchema});return h._`!${s}(${t})`}return h.nil}())}subschema(e,t){const s=(0,c.getSubschema)(this.it,e);(0,c.extendSubschemaData)(s,this.it,e),(0,c.extendSubschemaMode)(s,e);const r={...this.it,...s,items:void 0,props:void 0};return function(e,t){b(e)&&(v(e),y(e))?function(e,t){const{schema:s,gen:n,opts:r}=e;r.$comment&&s.$comment&&C(e),function(e){const t=e.schema[e.opts.schemaId];t&&(e.baseId=(0,d.resolveUrl)(e.opts.uriResolver,e.baseId,t))}(e),function(e){if(e.schema.$async&&!e.schemaEnv.$async)throw new Error("async schema in sync schema")}(e);const i=n.const("_errs",u.default.errors);w(e,i),n.var(t,h._`${i} === ${u.default.errors}`)}(e,t):(0,n.boolOrEmptySchema)(e,t)}(r,t),r}mergeEvaluated(e,t){const{it:s,gen:n}=this;s.opts.unevaluated&&(!0!==s.props&&void 0!==e.props&&(s.props=p.mergeEvaluated.props(n,e.props,s.props,t)),!0!==s.items&&void 0!==e.items&&(s.items=p.mergeEvaluated.items(n,e.items,s.items,t)))}mergeValidEvaluated(e,t){const{it:s,gen:n}=this;if(s.opts.unevaluated&&(!0!==s.props||!0!==s.items))return n.if(t,(()=>this.mergeEvaluated(e,h.Name))),!0}}function T(e,t,s,n){const r=new _(e,s,t);"code"in s?s.code(r,n):r.$data&&s.validate?(0,l.funcKeywordCode)(r,s):"macro"in s?(0,l.macroKeywordCode)(r,s):(s.compile||s.validate)&&(0,l.funcKeywordCode)(r,s)}t.KeywordCxt=_;const I=/^\/(?:[^~]|~0|~1)*$/,$=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function M(e,{dataLevel:t,dataNames:s,dataPathArr:n}){let r,i;if(""===e)return u.default.rootData;if("/"===e[0]){if(!I.test(e))throw new Error(`Invalid JSON-pointer: ${e}`);r=e,i=u.default.rootData}else{const o=$.exec(e);if(!o)throw new Error(`Invalid JSON-pointer: ${e}`);const a=+o[1];if(r=o[2],"#"===r){if(a>=t)throw new Error(l("property/index",a));return n[t-a]}if(a>t)throw new Error(l("data",a));if(i=s[t-a],!r)return i}let o=i;const a=r.split("/");for(const e of a)e&&(i=h._`${i}${(0,h.getProperty)((0,p.unescapeJsonPointer)(e))}`,o=h._`${o} && ${i}`);return o;function l(e,s){return`Cannot access ${e} ${s} levels up, current level is ${t}`}}t.getData=M},5005:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateKeywordUsage=t.validSchemaType=t.funcKeywordCode=t.macroKeywordCode=void 0;const n=s(3487),r=s(2141),i=s(412),o=s(4181);function a(e){const{gen:t,data:s,it:r}=e;t.if(r.parentData,(()=>t.assign(s,n._`${r.parentData}[${r.parentDataProperty}]`)))}function l(e,t,s){if(void 0===s)throw new Error(`keyword "${t}" failed to compile`);return e.scopeValue("keyword","function"==typeof s?{ref:s}:{ref:s,code:(0,n.stringify)(s)})}t.macroKeywordCode=function(e,t){const{gen:s,keyword:r,schema:i,parentSchema:o,it:a}=e,c=t.macro.call(a.self,i,o,a),h=l(s,r,c);!1!==a.opts.validateSchema&&a.self.validateSchema(c,!0);const u=s.name("valid");e.subschema({schema:c,schemaPath:n.nil,errSchemaPath:`${a.errSchemaPath}/${r}`,topSchemaRef:h,compositeRule:!0},u),e.pass(u,(()=>e.error(!0)))},t.funcKeywordCode=function(e,t){var s;const{gen:c,keyword:h,schema:u,parentSchema:d,$data:p,it:m}=e;!function({schemaEnv:e},t){if(t.async&&!e.$async)throw new Error("async keyword in sync schema")}(m,t);const f=!p&&t.compile?t.compile.call(m.self,u,d,m):t.validate,g=l(c,h,f),y=c.let("valid");function b(s=(t.async?n._`await `:n.nil)){const o=m.opts.passContext?r.default.this:r.default.self,a=!("compile"in t&&!p||!1===t.schema);c.assign(y,n._`${s}${(0,i.callValidateCode)(e,g,o,a)}`,t.modifying)}function v(e){var s;c.if((0,n.not)(null!==(s=t.valid)&&void 0!==s?s:y),e)}e.block$data(y,(function(){if(!1===t.errors)b(),t.modifying&&a(e),v((()=>e.error()));else{const s=t.async?function(){const e=c.let("ruleErrs",null);return c.try((()=>b(n._`await `)),(t=>c.assign(y,!1).if(n._`${t} instanceof ${m.ValidationError}`,(()=>c.assign(e,n._`${t}.errors`)),(()=>c.throw(t))))),e}():function(){const e=n._`${g}.errors`;return c.assign(e,null),b(n.nil),e}();t.modifying&&a(e),v((()=>function(e,t){const{gen:s}=e;s.if(n._`Array.isArray(${t})`,(()=>{s.assign(r.default.vErrors,n._`${r.default.vErrors} === null ? ${t} : ${r.default.vErrors}.concat(${t})`).assign(r.default.errors,n._`${r.default.vErrors}.length`),(0,o.extendErrors)(e)}),(()=>e.error()))}(e,s)))}})),e.ok(null!==(s=t.valid)&&void 0!==s?s:y)},t.validSchemaType=function(e,t,s=!1){return!t.length||t.some((t=>"array"===t?Array.isArray(e):"object"===t?e&&"object"==typeof e&&!Array.isArray(e):typeof e==t||s&&void 0===e))},t.validateKeywordUsage=function({schema:e,opts:t,self:s,errSchemaPath:n},r,i){if(Array.isArray(r.keyword)?!r.keyword.includes(i):r.keyword!==i)throw new Error("ajv implementation error");const o=r.dependencies;if(null==o?void 0:o.some((t=>!Object.prototype.hasOwnProperty.call(e,t))))throw new Error(`parent schema must have dependencies of ${i}: ${o.join(",")}`);if(r.validateSchema&&!r.validateSchema(e[i])){const e=`keyword "${i}" value is invalid at path "${n}": `+s.errorsText(r.validateSchema.errors);if("log"!==t.validateSchema)throw new Error(e);s.logger.error(e)}}},3099:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.extendSubschemaMode=t.extendSubschemaData=t.getSubschema=void 0;const n=s(3487),r=s(6776);t.getSubschema=function(e,{keyword:t,schemaProp:s,schema:i,schemaPath:o,errSchemaPath:a,topSchemaRef:l}){if(void 0!==t&&void 0!==i)throw new Error('both "keyword" and "schema" passed, only one allowed');if(void 0!==t){const i=e.schema[t];return void 0===s?{schema:i,schemaPath:n._`${e.schemaPath}${(0,n.getProperty)(t)}`,errSchemaPath:`${e.errSchemaPath}/${t}`}:{schema:i[s],schemaPath:n._`${e.schemaPath}${(0,n.getProperty)(t)}${(0,n.getProperty)(s)}`,errSchemaPath:`${e.errSchemaPath}/${t}/${(0,r.escapeFragment)(s)}`}}if(void 0!==i){if(void 0===o||void 0===a||void 0===l)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:i,schemaPath:o,topSchemaRef:l,errSchemaPath:a}}throw new Error('either "keyword" or "schema" must be passed')},t.extendSubschemaData=function(e,t,{dataProp:s,dataPropType:i,data:o,dataTypes:a,propertyName:l}){if(void 0!==o&&void 0!==s)throw new Error('both "data" and "dataProp" passed, only one allowed');const{gen:c}=t;if(void 0!==s){const{errorPath:o,dataPathArr:a,opts:l}=t;h(c.let("data",n._`${t.data}${(0,n.getProperty)(s)}`,!0)),e.errorPath=n.str`${o}${(0,r.getErrorPath)(s,i,l.jsPropertySyntax)}`,e.parentDataProperty=n._`${s}`,e.dataPathArr=[...a,e.parentDataProperty]}function h(s){e.data=s,e.dataLevel=t.dataLevel+1,e.dataTypes=[],t.definedProperties=new Set,e.parentData=t.data,e.dataNames=[...t.dataNames,s]}void 0!==o&&(h(o instanceof n.Name?o:c.let("data",o,!0)),void 0!==l&&(e.propertyName=l)),a&&(e.dataTypes=a)},t.extendSubschemaMode=function(e,{jtdDiscriminator:t,jtdMetadata:s,compositeRule:n,createErrors:r,allErrors:i}){void 0!==n&&(e.compositeRule=n),void 0!==r&&(e.createErrors=r),void 0!==i&&(e.allErrors=i),e.jtdDiscriminator=t,e.jtdMetadata=s}},7159:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CodeGen=t.Name=t.nil=t.stringify=t.str=t._=t.KeywordCxt=void 0;var n=s(4815);Object.defineProperty(t,"KeywordCxt",{enumerable:!0,get:function(){return n.KeywordCxt}});var r=s(3487);Object.defineProperty(t,"_",{enumerable:!0,get:function(){return r._}}),Object.defineProperty(t,"str",{enumerable:!0,get:function(){return r.str}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return r.stringify}}),Object.defineProperty(t,"nil",{enumerable:!0,get:function(){return r.nil}}),Object.defineProperty(t,"Name",{enumerable:!0,get:function(){return r.Name}}),Object.defineProperty(t,"CodeGen",{enumerable:!0,get:function(){return r.CodeGen}});const i=s(7426),o=s(6646),a=s(3141),l=s(5173),c=s(3487),h=s(2531),u=s(453),d=s(6776),p=s(4775),m=s(3589),f=(e,t)=>new RegExp(e,t);f.code="new RegExp";const g=["removeAdditional","useDefaults","coerceTypes"],y=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),b={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},v={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},w=200;function C(e){var t,s,n,r,i,o,a,l,c,h,u,d,p,g,y,b,v,C,S,x,A,E,_,T,I;const $=e.strict,M=null===(t=e.code)||void 0===t?void 0:t.optimize,N=!0===M||void 0===M?1:M||0,L=null!==(n=null===(s=e.code)||void 0===s?void 0:s.regExp)&&void 0!==n?n:f,P=null!==(r=e.uriResolver)&&void 0!==r?r:m.default;return{strictSchema:null===(o=null!==(i=e.strictSchema)&&void 0!==i?i:$)||void 0===o||o,strictNumbers:null===(l=null!==(a=e.strictNumbers)&&void 0!==a?a:$)||void 0===l||l,strictTypes:null!==(h=null!==(c=e.strictTypes)&&void 0!==c?c:$)&&void 0!==h?h:"log",strictTuples:null!==(d=null!==(u=e.strictTuples)&&void 0!==u?u:$)&&void 0!==d?d:"log",strictRequired:null!==(g=null!==(p=e.strictRequired)&&void 0!==p?p:$)&&void 0!==g&&g,code:e.code?{...e.code,optimize:N,regExp:L}:{optimize:N,regExp:L},loopRequired:null!==(y=e.loopRequired)&&void 0!==y?y:w,loopEnum:null!==(b=e.loopEnum)&&void 0!==b?b:w,meta:null===(v=e.meta)||void 0===v||v,messages:null===(C=e.messages)||void 0===C||C,inlineRefs:null===(S=e.inlineRefs)||void 0===S||S,schemaId:null!==(x=e.schemaId)&&void 0!==x?x:"$id",addUsedSchema:null===(A=e.addUsedSchema)||void 0===A||A,validateSchema:null===(E=e.validateSchema)||void 0===E||E,validateFormats:null===(_=e.validateFormats)||void 0===_||_,unicodeRegExp:null===(T=e.unicodeRegExp)||void 0===T||T,int32range:null===(I=e.int32range)||void 0===I||I,uriResolver:P}}class S{constructor(e={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...C(e)};const{es5:t,lines:s}=this.opts.code;this.scope=new c.ValueScope({scope:{},prefixes:y,es5:t,lines:s}),this.logger=function(e){if(!1===e)return $;if(void 0===e)return console;if(e.log&&e.warn&&e.error)return e;throw new Error("logger must implement log, warn and error methods")}(e.logger);const n=e.validateFormats;e.validateFormats=!1,this.RULES=(0,a.getRules)(),x.call(this,b,e,"NOT SUPPORTED"),x.call(this,v,e,"DEPRECATED","warn"),this._metaOpts=I.call(this),e.formats&&_.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords&&T.call(this,e.keywords),"object"==typeof e.meta&&this.addMetaSchema(e.meta),E.call(this),e.validateFormats=n}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data:e,meta:t,schemaId:s}=this.opts;let n=p;"id"===s&&(n={...p},n.id=n.$id,delete n.$id),t&&e&&this.addMetaSchema(n,n[s],!1)}defaultMeta(){const{meta:e,schemaId:t}=this.opts;return this.opts.defaultMeta="object"==typeof e?e[t]||e:void 0}validate(e,t){let s;if("string"==typeof e){if(s=this.getSchema(e),!s)throw new Error(`no schema with key or ref "${e}"`)}else s=this.compile(e);const n=s(t);return"$async"in s||(this.errors=s.errors),n}compile(e,t){const s=this._addSchema(e,t);return s.validate||this._compileSchemaEnv(s)}compileAsync(e,t){if("function"!=typeof this.opts.loadSchema)throw new Error("options.loadSchema should be a function");const{loadSchema:s}=this.opts;return n.call(this,e,t);async function n(e,t){await r.call(this,e.$schema);const s=this._addSchema(e,t);return s.validate||i.call(this,s)}async function r(e){e&&!this.getSchema(e)&&await n.call(this,{$ref:e},!0)}async function i(e){try{return this._compileSchemaEnv(e)}catch(t){if(!(t instanceof o.default))throw t;return a.call(this,t),await l.call(this,t.missingSchema),i.call(this,e)}}function a({missingSchema:e,missingRef:t}){if(this.refs[e])throw new Error(`AnySchema ${e} is loaded but ${t} cannot be resolved`)}async function l(e){const s=await c.call(this,e);this.refs[e]||await r.call(this,s.$schema),this.refs[e]||this.addSchema(s,e,t)}async function c(e){const t=this._loading[e];if(t)return t;try{return await(this._loading[e]=s(e))}finally{delete this._loading[e]}}}addSchema(e,t,s,n=this.opts.validateSchema){if(Array.isArray(e)){for(const t of e)this.addSchema(t,void 0,s,n);return this}let r;if("object"==typeof e){const{schemaId:t}=this.opts;if(r=e[t],void 0!==r&&"string"!=typeof r)throw new Error(`schema ${t} must be string`)}return t=(0,h.normalizeId)(t||r),this._checkUnique(t),this.schemas[t]=this._addSchema(e,s,t,n,!0),this}addMetaSchema(e,t,s=this.opts.validateSchema){return this.addSchema(e,t,!0,s),this}validateSchema(e,t){if("boolean"==typeof e)return!0;let s;if(s=e.$schema,void 0!==s&&"string"!=typeof s)throw new Error("$schema must be a string");if(s=s||this.opts.defaultMeta||this.defaultMeta(),!s)return this.logger.warn("meta-schema not available"),this.errors=null,!0;const n=this.validate(s,e);if(!n&&t){const e="schema is invalid: "+this.errorsText();if("log"!==this.opts.validateSchema)throw new Error(e);this.logger.error(e)}return n}getSchema(e){let t;for(;"string"==typeof(t=A.call(this,e));)e=t;if(void 0===t){const{schemaId:s}=this.opts,n=new l.SchemaEnv({schema:{},schemaId:s});if(t=l.resolveSchema.call(this,n,e),!t)return;this.refs[e]=t}return t.validate||this._compileSchemaEnv(t)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const t=A.call(this,e);return"object"==typeof t&&this._cache.delete(t.schema),delete this.schemas[e],delete this.refs[e],this}case"object":{const t=e;this._cache.delete(t);let s=e[this.opts.schemaId];return s&&(s=(0,h.normalizeId)(s),delete this.schemas[s],delete this.refs[s]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(e){for(const t of e)this.addKeyword(t);return this}addKeyword(e,t){let s;if("string"==typeof e)s=e,"object"==typeof t&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),t.keyword=s);else{if("object"!=typeof e||void 0!==t)throw new Error("invalid addKeywords parameters");if(s=(t=e).keyword,Array.isArray(s)&&!s.length)throw new Error("addKeywords: keyword must be string or non-empty array")}if(N.call(this,s,t),!t)return(0,d.eachItem)(s,(e=>L.call(this,e))),this;O.call(this,t);const n={...t,type:(0,u.getJSONTypes)(t.type),schemaType:(0,u.getJSONTypes)(t.schemaType)};return(0,d.eachItem)(s,0===n.type.length?e=>L.call(this,e,n):e=>n.type.forEach((t=>L.call(this,e,n,t)))),this}getKeyword(e){const t=this.RULES.all[e];return"object"==typeof t?t.definition:!!t}removeKeyword(e){const{RULES:t}=this;delete t.keywords[e],delete t.all[e];for(const s of t.rules){const t=s.rules.findIndex((t=>t.keyword===e));t>=0&&s.rules.splice(t,1)}return this}addFormat(e,t){return"string"==typeof t&&(t=new RegExp(t)),this.formats[e]=t,this}errorsText(e=this.errors,{separator:t=", ",dataVar:s="data"}={}){return e&&0!==e.length?e.map((e=>`${s}${e.instancePath} ${e.message}`)).reduce(((e,s)=>e+t+s)):"No errors"}$dataMetaSchema(e,t){const s=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(const n of t){const t=n.split("/").slice(1);let r=e;for(const e of t)r=r[e];for(const e in s){const t=s[e];if("object"!=typeof t)continue;const{$data:n}=t.definition,i=r[e];n&&i&&(r[e]=k(i))}}return e}_removeAllSchemas(e,t){for(const s in e){const n=e[s];t&&!t.test(s)||("string"==typeof n?delete e[s]:n&&!n.meta&&(this._cache.delete(n.schema),delete e[s]))}}_addSchema(e,t,s,n=this.opts.validateSchema,r=this.opts.addUsedSchema){let i;const{schemaId:o}=this.opts;if("object"==typeof e)i=e[o];else{if(this.opts.jtd)throw new Error("schema must be object");if("boolean"!=typeof e)throw new Error("schema must be object or boolean")}let a=this._cache.get(e);if(void 0!==a)return a;s=(0,h.normalizeId)(i||s);const c=h.getSchemaRefs.call(this,e,s);return a=new l.SchemaEnv({schema:e,schemaId:o,meta:t,baseId:s,localRefs:c}),this._cache.set(a.schema,a),r&&!s.startsWith("#")&&(s&&this._checkUnique(s),this.refs[s]=a),n&&this.validateSchema(e,!0),a}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw new Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta?this._compileMetaSchema(e):l.compileSchema.call(this,e),!e.validate)throw new Error("ajv implementation error");return e.validate}_compileMetaSchema(e){const t=this.opts;this.opts=this._metaOpts;try{l.compileSchema.call(this,e)}finally{this.opts=t}}}function x(e,t,s,n="error"){for(const r in e){const i=r;i in t&&this.logger[n](`${s}: option ${r}. ${e[i]}`)}}function A(e){return e=(0,h.normalizeId)(e),this.schemas[e]||this.refs[e]}function E(){const e=this.opts.schemas;if(e)if(Array.isArray(e))this.addSchema(e);else for(const t in e)this.addSchema(e[t],t)}function _(){for(const e in this.opts.formats){const t=this.opts.formats[e];t&&this.addFormat(e,t)}}function T(e){if(Array.isArray(e))this.addVocabulary(e);else{this.logger.warn("keywords option as map is deprecated, pass array");for(const t in e){const s=e[t];s.keyword||(s.keyword=t),this.addKeyword(s)}}}function I(){const e={...this.opts};for(const t of g)delete e[t];return e}t.default=S,S.ValidationError=i.default,S.MissingRefError=o.default;const $={log(){},warn(){},error(){}},M=/^[a-z_$][a-z0-9_$:-]*$/i;function N(e,t){const{RULES:s}=this;if((0,d.eachItem)(e,(e=>{if(s.keywords[e])throw new Error(`Keyword ${e} is already defined`);if(!M.test(e))throw new Error(`Keyword ${e} has invalid name`)})),t&&t.$data&&!("code"in t)&&!("validate"in t))throw new Error('$data keyword must have "code" or "validate" function')}function L(e,t,s){var n;const r=null==t?void 0:t.post;if(s&&r)throw new Error('keyword with "post" flag cannot have "type"');const{RULES:i}=this;let o=r?i.post:i.rules.find((({type:e})=>e===s));if(o||(o={type:s,rules:[]},i.rules.push(o)),i.keywords[e]=!0,!t)return;const a={keyword:e,definition:{...t,type:(0,u.getJSONTypes)(t.type),schemaType:(0,u.getJSONTypes)(t.schemaType)}};t.before?P.call(this,o,a,t.before):o.rules.push(a),i.all[e]=a,null===(n=t.implements)||void 0===n||n.forEach((e=>this.addKeyword(e)))}function P(e,t,s){const n=e.rules.findIndex((e=>e.keyword===s));n>=0?e.rules.splice(n,0,t):(e.rules.push(t),this.logger.warn(`rule ${s} is not defined`))}function O(e){let{metaSchema:t}=e;void 0!==t&&(e.$data&&this.opts.$data&&(t=k(t)),e.validateSchema=this.compile(t,!0))}const R={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function k(e){return{anyOf:[e,R]}}},4087:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(2577),r=s(996),i=s(5568),o=s(6795),a=s(235),l=s(2567),c=s(1233),h=s(1968),u=["/properties"];t.default=function(e){return[n,r,i,o,a,t(this,l),c,t(this,h)].forEach((e=>this.addMetaSchema(e,void 0,!1))),this;function t(t,s){return e?t.$dataMetaSchema(s,u):s}}},3510:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(4063);n.code='require("ajv/dist/runtime/equal").default',t.default=n},4499:(e,t)=>{"use strict";function s(e){const t=e.length;let s,n=0,r=0;for(;r<t;)n++,s=e.charCodeAt(r++),s>=55296&&s<=56319&&r<t&&(s=e.charCodeAt(r),56320==(64512&s)&&r++);return n}Object.defineProperty(t,"__esModule",{value:!0}),t.default=s,s.code='require("ajv/dist/runtime/ucs2length").default'},3589:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(540);n.code='require("ajv/dist/runtime/uri").default',t.default=n},7426:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});class s extends Error{constructor(e){super("validation failed"),this.errors=e,this.ajv=this.validation=!0}}t.default=s},4783:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateAdditionalItems=void 0;const n=s(3487),r=s(6776),i={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:{message:({params:{len:e}})=>n.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>n._`{limit: ${e}}`},code(e){const{parentSchema:t,it:s}=e,{items:n}=t;Array.isArray(n)?o(e,n):(0,r.checkStrictMode)(s,'"additionalItems" is ignored when "items" is not an array of schemas')}};function o(e,t){const{gen:s,schema:i,data:o,keyword:a,it:l}=e;l.items=!0;const c=s.const("len",n._`${o}.length`);if(!1===i)e.setParams({len:t.length}),e.pass(n._`${c} <= ${t.length}`);else if("object"==typeof i&&!(0,r.alwaysValidSchema)(l,i)){const i=s.var("valid",n._`${c} <= ${t.length}`);s.if((0,n.not)(i),(()=>function(i){s.forRange("i",t.length,c,(t=>{e.subschema({keyword:a,dataProp:t,dataPropType:r.Type.Num},i),l.allErrors||s.if((0,n.not)(i),(()=>s.break()))}))}(i))),e.ok(i)}}t.validateAdditionalItems=o,t.default=i},9351:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(412),r=s(3487),i=s(2141),o=s(6776),a={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:{message:"must NOT have additional properties",params:({params:e})=>r._`{additionalProperty: ${e.additionalProperty}}`},code(e){const{gen:t,schema:s,parentSchema:a,data:l,errsCount:c,it:h}=e;if(!c)throw new Error("ajv implementation error");const{allErrors:u,opts:d}=h;if(h.props=!0,"all"!==d.removeAdditional&&(0,o.alwaysValidSchema)(h,s))return;const p=(0,n.allSchemaProperties)(a.properties),m=(0,n.allSchemaProperties)(a.patternProperties);function f(e){t.code(r._`delete ${l}[${e}]`)}function g(n){if("all"===d.removeAdditional||d.removeAdditional&&!1===s)f(n);else{if(!1===s)return e.setParams({additionalProperty:n}),e.error(),void(u||t.break());if("object"==typeof s&&!(0,o.alwaysValidSchema)(h,s)){const s=t.name("valid");"failing"===d.removeAdditional?(y(n,s,!1),t.if((0,r.not)(s),(()=>{e.reset(),f(n)}))):(y(n,s),u||t.if((0,r.not)(s),(()=>t.break())))}}}function y(t,s,n){const r={keyword:"additionalProperties",dataProp:t,dataPropType:o.Type.Str};!1===n&&Object.assign(r,{compositeRule:!0,createErrors:!1,allErrors:!1}),e.subschema(r,s)}t.forIn("key",l,(s=>{p.length||m.length?t.if(function(s){let i;if(p.length>8){const e=(0,o.schemaRefOrVal)(h,a.properties,"properties");i=(0,n.isOwnProperty)(t,e,s)}else i=p.length?(0,r.or)(...p.map((e=>r._`${s} === ${e}`))):r.nil;return m.length&&(i=(0,r.or)(i,...m.map((t=>r._`${(0,n.usePattern)(e,t)}.test(${s})`)))),(0,r.not)(i)}(s),(()=>g(s))):g(s)})),e.ok(r._`${c} === ${i.default.errors}`)}};t.default=a},1125:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(6776),r={keyword:"allOf",schemaType:"array",code(e){const{gen:t,schema:s,it:r}=e;if(!Array.isArray(s))throw new Error("ajv implementation error");const i=t.name("valid");s.forEach(((t,s)=>{if((0,n.alwaysValidSchema)(r,t))return;const o=e.subschema({keyword:"allOf",schemaProp:s},i);e.ok(i),e.mergeEvaluated(o)}))}};t.default=r},19:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:s(412).validateUnion,error:{message:"must match a schema in anyOf"}};t.default=n},9864:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:{message:({params:{min:e,max:t}})=>void 0===t?n.str`must contain at least ${e} valid item(s)`:n.str`must contain at least ${e} and no more than ${t} valid item(s)`,params:({params:{min:e,max:t}})=>void 0===t?n._`{minContains: ${e}}`:n._`{minContains: ${e}, maxContains: ${t}}`},code(e){const{gen:t,schema:s,parentSchema:i,data:o,it:a}=e;let l,c;const{minContains:h,maxContains:u}=i;a.opts.next?(l=void 0===h?1:h,c=u):l=1;const d=t.const("len",n._`${o}.length`);if(e.setParams({min:l,max:c}),void 0===c&&0===l)return void(0,r.checkStrictMode)(a,'"minContains" == 0 without "maxContains": "contains" keyword ignored');if(void 0!==c&&l>c)return(0,r.checkStrictMode)(a,'"minContains" > "maxContains" is always invalid'),void e.fail();if((0,r.alwaysValidSchema)(a,s)){let t=n._`${d} >= ${l}`;return void 0!==c&&(t=n._`${t} && ${d} <= ${c}`),void e.pass(t)}a.items=!0;const p=t.name("valid");function m(){const e=t.name("_valid"),s=t.let("count",0);f(e,(()=>t.if(e,(()=>function(e){t.code(n._`${e}++`),void 0===c?t.if(n._`${e} >= ${l}`,(()=>t.assign(p,!0).break())):(t.if(n._`${e} > ${c}`,(()=>t.assign(p,!1).break())),1===l?t.assign(p,!0):t.if(n._`${e} >= ${l}`,(()=>t.assign(p,!0))))}(s)))))}function f(s,n){t.forRange("i",0,d,(t=>{e.subschema({keyword:"contains",dataProp:t,dataPropType:r.Type.Num,compositeRule:!0},s),n()}))}void 0===c&&1===l?f(p,(()=>t.if(p,(()=>t.break())))):0===l?(t.let(p,!0),void 0!==c&&t.if(n._`${o}.length > 0`,m)):(t.let(p,!1),m()),e.result(p,(()=>e.reset()))}};t.default=i},7772:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateSchemaDeps=t.validatePropertyDeps=t.error=void 0;const n=s(3487),r=s(6776),i=s(412);t.error={message:({params:{property:e,depsCount:t,deps:s}})=>{const r=1===t?"property":"properties";return n.str`must have ${r} ${s} when property ${e} is present`},params:({params:{property:e,depsCount:t,deps:s,missingProperty:r}})=>n._`{property: ${e},
6
6
  missingProperty: ${r},
7
7
  depsCount: ${t},
8
- deps: ${s}}`};const o={keyword:"dependencies",type:"object",schemaType:"object",error:t.error,code(e){const[t,s]=function({schema:e}){const t={},s={};for(const n in e)"__proto__"!==n&&((Array.isArray(e[n])?t:s)[n]=e[n]);return[t,s]}(e);a(e,t),l(e,s)}};function a(e,t=e.schema){const{gen:s,data:r,it:o}=e;if(0===Object.keys(t).length)return;const a=s.let("missing");for(const l in t){const c=t[l];if(0===c.length)continue;const h=(0,i.propertyInData)(s,r,l,o.opts.ownProperties);e.setParams({property:l,depsCount:c.length,deps:c.join(", ")}),o.allErrors?s.if(h,(()=>{for(const t of c)(0,i.checkReportMissingProp)(e,t)})):(s.if(n._`${h} && (${(0,i.checkMissingProp)(e,c,a)})`),(0,i.reportMissingProp)(e,a),s.else())}}function l(e,t=e.schema){const{gen:s,data:n,keyword:o,it:a}=e,l=s.name("valid");for(const c in t)(0,r.alwaysValidSchema)(a,t[c])||(s.if((0,i.propertyInData)(s,n,c,a.opts.ownProperties),(()=>{const t=e.subschema({keyword:o,schemaProp:c},l);e.mergeValidEvaluated(t,l)}),(()=>s.var(l,!0))),e.ok(l))}t.validatePropertyDeps=a,t.validateSchemaDeps=l,t.default=o},7274:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(7772),r={keyword:"dependentSchemas",type:"object",schemaType:"object",code:e=>(0,n.validateSchemaDeps)(e)};t.default=r},9434:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:{message:({params:e})=>n.str`must match "${e.ifClause}" schema`,params:({params:e})=>n._`{failingKeyword: ${e.ifClause}}`},code(e){const{gen:t,parentSchema:s,it:i}=e;void 0===s.then&&void 0===s.else&&(0,r.checkStrictMode)(i,'"if" without "then" and "else" is ignored');const a=o(i,"then"),l=o(i,"else");if(!a&&!l)return;const c=t.let("valid",!0),h=t.name("_valid");if(function(){const t=e.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},h);e.mergeEvaluated(t)}(),e.reset(),a&&l){const s=t.let("ifClause");e.setParams({ifClause:s}),t.if(h,u("then",s),u("else",s))}else a?t.if(h,u("then")):t.if((0,n.not)(h),u("else"));function u(s,r){return()=>{const i=e.subschema({keyword:s},h);t.assign(c,h),e.mergeValidEvaluated(i,c),r?t.assign(r,n._`${s}`):e.setParams({ifClause:s})}}e.pass(c,(()=>e.error(!0)))}};function o(e,t){const s=e.schema[t];return void 0!==s&&!(0,r.alwaysValidSchema)(e,s)}t.default=i},8200:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(4783),r=s(2924),i=s(4665),o=s(1119),a=s(9864),l=s(7772),c=s(3708),h=s(9351),u=s(6239),d=s(2296),p=s(2182),m=s(19),f=s(4200),g=s(1125),y=s(9434),b=s(6552);t.default=function(e=!1){const t=[p.default,m.default,f.default,g.default,y.default,b.default,c.default,h.default,l.default,u.default,d.default];return e?t.push(r.default,o.default):t.push(n.default,i.default),t.push(a.default),t}},4665:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateTuple=void 0;const n=s(3487),r=s(6776),i=s(412),o={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(e){const{schema:t,it:s}=e;if(Array.isArray(t))return a(e,"additionalItems",t);s.items=!0,(0,r.alwaysValidSchema)(s,t)||e.ok((0,i.validateArray)(e))}};function a(e,t,s=e.schema){const{gen:i,parentSchema:o,data:a,keyword:l,it:c}=e;!function(e){const{opts:n,errSchemaPath:i}=c,o=s.length,a=o===e.minItems&&(o===e.maxItems||!1===e[t]);if(n.strictTuples&&!a){const e=`"${l}" is ${o}-tuple, but minItems or maxItems/${t} are not specified or different at path "${i}"`;(0,r.checkStrictMode)(c,e,n.strictTuples)}}(o),c.opts.unevaluated&&s.length&&!0!==c.items&&(c.items=r.mergeEvaluated.items(i,s.length,c.items));const h=i.name("valid"),u=i.const("len",n._`${a}.length`);s.forEach(((t,s)=>{(0,r.alwaysValidSchema)(c,t)||(i.if(n._`${u} > ${s}`,(()=>e.subschema({keyword:l,schemaProp:s,dataProp:s},h))),e.ok(h))}))}t.validateTuple=a,t.default=o},1119:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i=s(412),o=s(4783),a={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:{message:({params:{len:e}})=>n.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>n._`{limit: ${e}}`},code(e){const{schema:t,parentSchema:s,it:n}=e,{prefixItems:a}=s;n.items=!0,(0,r.alwaysValidSchema)(n,t)||(a?(0,o.validateAdditionalItems)(e,a):e.ok((0,i.validateArray)(e)))}};t.default=a},2182:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(6776),r={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(e){const{gen:t,schema:s,it:r}=e;if((0,n.alwaysValidSchema)(r,s))return void e.fail();const i=t.name("valid");e.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},i),e.failResult(i,(()=>e.reset()),(()=>e.error()))},error:{message:"must NOT be valid"}};t.default=r},4200:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:{message:"must match exactly one schema in oneOf",params:({params:e})=>n._`{passingSchemas: ${e.passing}}`},code(e){const{gen:t,schema:s,parentSchema:i,it:o}=e;if(!Array.isArray(s))throw new Error("ajv implementation error");if(o.opts.discriminator&&i.discriminator)return;const a=s,l=t.let("valid",!1),c=t.let("passing",null),h=t.name("_valid");e.setParams({passing:c}),t.block((function(){a.forEach(((s,i)=>{let a;(0,r.alwaysValidSchema)(o,s)?t.var(h,!0):a=e.subschema({keyword:"oneOf",schemaProp:i,compositeRule:!0},h),i>0&&t.if(n._`${h} && ${l}`).assign(l,!1).assign(c,n._`[${c}, ${i}]`).else(),t.if(h,(()=>{t.assign(l,!0),t.assign(c,i),a&&e.mergeEvaluated(a,n.Name)}))}))})),e.result(l,(()=>e.reset()),(()=>e.error(!0)))}};t.default=i},2296:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(412),r=s(3487),i=s(6776),o=s(6776),a={keyword:"patternProperties",type:"object",schemaType:"object",code(e){const{gen:t,schema:s,data:a,parentSchema:l,it:c}=e,{opts:h}=c,u=(0,n.allSchemaProperties)(s),d=u.filter((e=>(0,i.alwaysValidSchema)(c,s[e])));if(0===u.length||d.length===u.length&&(!c.opts.unevaluated||!0===c.props))return;const p=h.strictSchema&&!h.allowMatchingProperties&&l.properties,m=t.name("valid");!0===c.props||c.props instanceof r.Name||(c.props=(0,o.evaluatedPropsToName)(t,c.props));const{props:f}=c;function g(e){for(const t in p)new RegExp(e).test(t)&&(0,i.checkStrictMode)(c,`property ${t} matches pattern ${e} (use allowMatchingProperties)`)}function y(s){t.forIn("key",a,(i=>{t.if(r._`${(0,n.usePattern)(e,s)}.test(${i})`,(()=>{const n=d.includes(s);n||e.subschema({keyword:"patternProperties",schemaProp:s,dataProp:i,dataPropType:o.Type.Str},m),c.opts.unevaluated&&!0!==f?t.assign(r._`${f}[${i}]`,!0):n||c.allErrors||t.if((0,r.not)(m),(()=>t.break()))}))}))}!function(){for(const e of u)p&&g(e),c.allErrors?y(e):(t.var(m,!0),y(e),t.if(m))}()}};t.default=a},2924:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(4665),r={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:e=>(0,n.validateTuple)(e,"items")};t.default=r},6239:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(4815),r=s(412),i=s(6776),o=s(9351),a={keyword:"properties",type:"object",schemaType:"object",code(e){const{gen:t,schema:s,parentSchema:a,data:l,it:c}=e;"all"===c.opts.removeAdditional&&void 0===a.additionalProperties&&o.default.code(new n.KeywordCxt(c,o.default,"additionalProperties"));const h=(0,r.allSchemaProperties)(s);for(const e of h)c.definedProperties.add(e);c.opts.unevaluated&&h.length&&!0!==c.props&&(c.props=i.mergeEvaluated.props(t,(0,i.toHash)(h),c.props));const u=h.filter((e=>!(0,i.alwaysValidSchema)(c,s[e])));if(0===u.length)return;const d=t.name("valid");for(const s of u)p(s)?m(s):(t.if((0,r.propertyInData)(t,l,s,c.opts.ownProperties)),m(s),c.allErrors||t.else().var(d,!0),t.endIf()),e.it.definedProperties.add(s),e.ok(d);function p(e){return c.opts.useDefaults&&!c.compositeRule&&void 0!==s[e].default}function m(t){e.subschema({keyword:"properties",schemaProp:t,dataProp:t},d)}}};t.default=a},3708:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:{message:"property name must be valid",params:({params:e})=>n._`{propertyName: ${e.propertyName}}`},code(e){const{gen:t,schema:s,data:i,it:o}=e;if((0,r.alwaysValidSchema)(o,s))return;const a=t.name("valid");t.forIn("key",i,(s=>{e.setParams({propertyName:s}),e.subschema({keyword:"propertyNames",data:s,dataTypes:["string"],propertyName:s,compositeRule:!0},a),t.if((0,n.not)(a),(()=>{e.error(!0),o.allErrors||t.break()}))})),e.ok(a)}};t.default=i},6552:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(6776),r={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:e,parentSchema:t,it:s}){void 0===t.if&&(0,n.checkStrictMode)(s,`"${e}" without "if" is ignored`)}};t.default=r},412:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateUnion=t.validateArray=t.usePattern=t.callValidateCode=t.schemaProperties=t.allSchemaProperties=t.noPropertyInData=t.propertyInData=t.isOwnProperty=t.hasPropFunc=t.reportMissingProp=t.checkMissingProp=t.checkReportMissingProp=void 0;const n=s(3487),r=s(6776),i=s(2141),o=s(6776);function a(e){return e.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:n._`Object.prototype.hasOwnProperty`})}function l(e,t,s){return n._`${a(e)}.call(${t}, ${s})`}function c(e,t,s,r){const i=n._`${t}${(0,n.getProperty)(s)} === undefined`;return r?(0,n.or)(i,(0,n.not)(l(e,t,s))):i}function h(e){return e?Object.keys(e).filter((e=>"__proto__"!==e)):[]}t.checkReportMissingProp=function(e,t){const{gen:s,data:r,it:i}=e;s.if(c(s,r,t,i.opts.ownProperties),(()=>{e.setParams({missingProperty:n._`${t}`},!0),e.error()}))},t.checkMissingProp=function({gen:e,data:t,it:{opts:s}},r,i){return(0,n.or)(...r.map((r=>(0,n.and)(c(e,t,r,s.ownProperties),n._`${i} = ${r}`))))},t.reportMissingProp=function(e,t){e.setParams({missingProperty:t},!0),e.error()},t.hasPropFunc=a,t.isOwnProperty=l,t.propertyInData=function(e,t,s,r){const i=n._`${t}${(0,n.getProperty)(s)} !== undefined`;return r?n._`${i} && ${l(e,t,s)}`:i},t.noPropertyInData=c,t.allSchemaProperties=h,t.schemaProperties=function(e,t){return h(t).filter((s=>!(0,r.alwaysValidSchema)(e,t[s])))},t.callValidateCode=function({schemaCode:e,data:t,it:{gen:s,topSchemaRef:r,schemaPath:o,errorPath:a},it:l},c,h,u){const d=u?n._`${e}, ${t}, ${r}${o}`:t,p=[[i.default.instancePath,(0,n.strConcat)(i.default.instancePath,a)],[i.default.parentData,l.parentData],[i.default.parentDataProperty,l.parentDataProperty],[i.default.rootData,i.default.rootData]];l.opts.dynamicRef&&p.push([i.default.dynamicAnchors,i.default.dynamicAnchors]);const m=n._`${d}, ${s.object(...p)}`;return h!==n.nil?n._`${c}.call(${h}, ${m})`:n._`${c}(${m})`};const u=n._`new RegExp`;t.usePattern=function({gen:e,it:{opts:t}},s){const r=t.unicodeRegExp?"u":"",{regExp:i}=t.code,a=i(s,r);return e.scopeValue("pattern",{key:a.toString(),ref:a,code:n._`${"new RegExp"===i.code?u:(0,o.useFunc)(e,i)}(${s}, ${r})`})},t.validateArray=function(e){const{gen:t,data:s,keyword:i,it:o}=e,a=t.name("valid");if(o.allErrors){const e=t.let("valid",!0);return l((()=>t.assign(e,!1))),e}return t.var(a,!0),l((()=>t.break())),a;function l(o){const l=t.const("len",n._`${s}.length`);t.forRange("i",0,l,(s=>{e.subschema({keyword:i,dataProp:s,dataPropType:r.Type.Num},a),t.if((0,n.not)(a),o)}))}},t.validateUnion=function(e){const{gen:t,schema:s,keyword:i,it:o}=e;if(!Array.isArray(s))throw new Error("ajv implementation error");if(s.some((e=>(0,r.alwaysValidSchema)(o,e)))&&!o.opts.unevaluated)return;const a=t.let("valid",!1),l=t.name("_valid");t.block((()=>s.forEach(((s,r)=>{const o=e.subschema({keyword:i,schemaProp:r,compositeRule:!0},l);t.assign(a,n._`${a} || ${l}`),e.mergeValidEvaluated(o,l)||t.if((0,n.not)(a))})))),e.result(a,(()=>e.reset()),(()=>e.error(!0)))}},8386:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};t.default=s},5684:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(8386),r=s(8280),i=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",n.default,r.default];t.default=i},8280:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.callRef=t.getValidate=void 0;const n=s(6646),r=s(412),i=s(3487),o=s(2141),a=s(5173),l=s(6776),c={keyword:"$ref",schemaType:"string",code(e){const{gen:t,schema:s,it:r}=e,{baseId:o,schemaEnv:l,validateName:c,opts:d,self:p}=r,{root:m}=l;if(("#"===s||"#/"===s)&&o===m.baseId)return function(){if(l===m)return u(e,c,l,l.$async);const s=t.scopeValue("root",{ref:m});return u(e,i._`${s}.validate`,m,m.$async)}();const f=a.resolveRef.call(p,m,o,s);if(void 0===f)throw new n.default(r.opts.uriResolver,o,s);return f instanceof a.SchemaEnv?function(t){const s=h(e,t);u(e,s,t,t.$async)}(f):function(n){const r=t.scopeValue("schema",!0===d.code.source?{ref:n,code:(0,i.stringify)(n)}:{ref:n}),o=t.name("valid"),a=e.subschema({schema:n,dataTypes:[],schemaPath:i.nil,topSchemaRef:r,errSchemaPath:s},o);e.mergeEvaluated(a),e.ok(o)}(f)}};function h(e,t){const{gen:s}=e;return t.validate?s.scopeValue("validate",{ref:t.validate}):i._`${s.scopeValue("wrapper",{ref:t})}.validate`}function u(e,t,s,n){const{gen:a,it:c}=e,{allErrors:h,schemaEnv:u,opts:d}=c,p=d.passContext?o.default.this:i.nil;function m(e){const t=i._`${e}.errors`;a.assign(o.default.vErrors,i._`${o.default.vErrors} === null ? ${t} : ${o.default.vErrors}.concat(${t})`),a.assign(o.default.errors,i._`${o.default.vErrors}.length`)}function f(e){var t;if(!c.opts.unevaluated)return;const n=null===(t=null==s?void 0:s.validate)||void 0===t?void 0:t.evaluated;if(!0!==c.props)if(n&&!n.dynamicProps)void 0!==n.props&&(c.props=l.mergeEvaluated.props(a,n.props,c.props));else{const t=a.var("props",i._`${e}.evaluated.props`);c.props=l.mergeEvaluated.props(a,t,c.props,i.Name)}if(!0!==c.items)if(n&&!n.dynamicItems)void 0!==n.items&&(c.items=l.mergeEvaluated.items(a,n.items,c.items));else{const t=a.var("items",i._`${e}.evaluated.items`);c.items=l.mergeEvaluated.items(a,t,c.items,i.Name)}}n?function(){if(!u.$async)throw new Error("async schema referenced by sync schema");const s=a.let("valid");a.try((()=>{a.code(i._`await ${(0,r.callValidateCode)(e,t,p)}`),f(t),h||a.assign(s,!0)}),(e=>{a.if(i._`!(${e} instanceof ${c.ValidationError})`,(()=>a.throw(e))),m(e),h||a.assign(s,!1)})),e.ok(s)}():e.result((0,r.callValidateCode)(e,t,p),(()=>f(t)),(()=>m(t)))}t.getValidate=h,t.callRef=u,t.default=c},1240:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(9306),i=s(5173),o=s(6776),a={keyword:"discriminator",type:"object",schemaType:"object",error:{message:({params:{discrError:e,tagName:t}})=>e===r.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:t,tagName:s}})=>n._`{error: ${e}, tag: ${s}, tagValue: ${t}}`},code(e){const{gen:t,data:s,schema:a,parentSchema:l,it:c}=e,{oneOf:h}=l;if(!c.opts.discriminator)throw new Error("discriminator: requires discriminator option");const u=a.propertyName;if("string"!=typeof u)throw new Error("discriminator: requires propertyName");if(a.mapping)throw new Error("discriminator: mapping is not supported");if(!h)throw new Error("discriminator: requires oneOf keyword");const d=t.let("valid",!1),p=t.const("tag",n._`${s}${(0,n.getProperty)(u)}`);function m(s){const r=t.name("valid"),i=e.subschema({keyword:"oneOf",schemaProp:s},r);return e.mergeEvaluated(i,n.Name),r}t.if(n._`typeof ${p} == "string"`,(()=>function(){const s=function(){var e;const t={},s=r(l);let n=!0;for(let t=0;t<h.length;t++){let l=h[t];(null==l?void 0:l.$ref)&&!(0,o.schemaHasRulesButRef)(l,c.self.RULES)&&(l=i.resolveRef.call(c.self,c.schemaEnv.root,c.baseId,null==l?void 0:l.$ref),l instanceof i.SchemaEnv&&(l=l.schema));const d=null===(e=null==l?void 0:l.properties)||void 0===e?void 0:e[u];if("object"!=typeof d)throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${u}"`);n=n&&(s||r(l)),a(d,t)}if(!n)throw new Error(`discriminator: "${u}" must be required`);return t;function r({required:e}){return Array.isArray(e)&&e.includes(u)}function a(e,t){if(e.const)d(e.const,t);else{if(!e.enum)throw new Error(`discriminator: "properties/${u}" must have "const" or "enum"`);for(const s of e.enum)d(s,t)}}function d(e,s){if("string"!=typeof e||e in t)throw new Error(`discriminator: "${u}" values must be unique strings`);t[e]=s}}();t.if(!1);for(const e in s)t.elseIf(n._`${p} === ${e}`),t.assign(d,m(s[e]));t.else(),e.error(!1,{discrError:r.DiscrError.Mapping,tag:p,tagName:u}),t.endIf()}()),(()=>e.error(!1,{discrError:r.DiscrError.Tag,tag:p,tagName:u}))),e.ok(d)}};t.default=a},9306:(e,t)=>{"use strict";var s;Object.defineProperty(t,"__esModule",{value:!0}),t.DiscrError=void 0,(s=t.DiscrError||(t.DiscrError={})).Tag="tag",s.Mapping="mapping"},7299:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(5684),r=s(2649),i=s(8200),o=s(6121),a=s(1448),l=s(808),c=s(9502),h=s(6167),u=[o.default,n.default,r.default,(0,i.default)(!0),c.default,h.metadataVocabulary,h.contentVocabulary,a.default,l.default];t.default=u},3924:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(5684),r=s(2649),i=s(8200),o=s(9502),a=s(6167),l=[n.default,r.default,(0,i.default)(),o.default,a.metadataVocabulary,a.contentVocabulary];t.default=l},6215:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.dynamicAnchor=void 0;const n=s(3487),r=s(2141),i=s(5173),o=s(8280),a={keyword:"$dynamicAnchor",schemaType:"string",code:e=>l(e,e.schema)};function l(e,t){const{gen:s,it:a}=e;a.schemaEnv.root.dynamicAnchors[t]=!0;const l=n._`${r.default.dynamicAnchors}${(0,n.getProperty)(t)}`,c="#"===a.errSchemaPath?a.validateName:function(e){const{schemaEnv:t,schema:s,self:n}=e.it,{root:r,baseId:a,localRefs:l,meta:c}=t.root,{schemaId:h}=n.opts,u=new i.SchemaEnv({schema:s,schemaId:h,root:r,baseId:a,localRefs:l,meta:c});return i.compileSchema.call(n,u),(0,o.getValidate)(e,u)}(e);s.if(n._`!${l}`,(()=>s.assign(l,c)))}t.dynamicAnchor=l,t.default=a},1919:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.dynamicRef=void 0;const n=s(3487),r=s(2141),i=s(8280),o={keyword:"$dynamicRef",schemaType:"string",code:e=>a(e,e.schema)};function a(e,t){const{gen:s,keyword:o,it:a}=e;if("#"!==t[0])throw new Error(`"${o}" only supports hash fragment reference`);const l=t.slice(1);if(a.allErrors)c();else{const t=s.let("valid",!1);c(t),e.ok(t)}function c(e){if(a.schemaEnv.root.dynamicAnchors[l]){const t=s.let("_v",n._`${r.default.dynamicAnchors}${(0,n.getProperty)(l)}`);s.if(t,h(t,e),h(a.validateName,e))}else h(a.validateName,e)()}function h(t,n){return n?()=>s.block((()=>{(0,i.callRef)(e,t),s.let(n,!0)})):()=>(0,i.callRef)(e,t)}}t.dynamicRef=a,t.default=o},6121:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(6215),r=s(1919),i=s(4094),o=s(3944),a=[n.default,r.default,i.default,o.default];t.default=a},4094:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(6215),r=s(6776),i={keyword:"$recursiveAnchor",schemaType:"boolean",code(e){e.schema?(0,n.dynamicAnchor)(e,""):(0,r.checkStrictMode)(e.it,"$recursiveAnchor: false is ignored")}};t.default=i},3944:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(1919),r={keyword:"$recursiveRef",schemaType:"string",code:e=>(0,n.dynamicRef)(e,e.schema)};t.default=r},9651:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:{message:({schemaCode:e})=>n.str`must match format "${e}"`,params:({schemaCode:e})=>n._`{format: ${e}}`},code(e,t){const{gen:s,data:r,$data:i,schema:o,schemaCode:a,it:l}=e,{opts:c,errSchemaPath:h,schemaEnv:u,self:d}=l;c.validateFormats&&(i?function(){const i=s.scopeValue("formats",{ref:d.formats,code:c.code.formats}),o=s.const("fDef",n._`${i}[${a}]`),l=s.let("fType"),h=s.let("format");s.if(n._`typeof ${o} == "object" && !(${o} instanceof RegExp)`,(()=>s.assign(l,n._`${o}.type || "string"`).assign(h,n._`${o}.validate`)),(()=>s.assign(l,n._`"string"`).assign(h,o))),e.fail$data((0,n.or)(!1===c.strictSchema?n.nil:n._`${a} && !${h}`,function(){const e=u.$async?n._`(${o}.async ? await ${h}(${r}) : ${h}(${r}))`:n._`${h}(${r})`,s=n._`(typeof ${h} == "function" ? ${e} : ${h}.test(${r}))`;return n._`${h} && ${h} !== true && ${l} === ${t} && !${s}`}()))}():function(){const i=d.formats[o];if(!i)return void function(){if(!1!==c.strictSchema)throw new Error(e());function e(){return`unknown format "${o}" ignored in schema at path "${h}"`}d.logger.warn(e())}();if(!0===i)return;const[a,l,p]=function(e){const t=e instanceof RegExp?(0,n.regexpCode)(e):c.code.formats?n._`${c.code.formats}${(0,n.getProperty)(o)}`:void 0,r=s.scopeValue("formats",{key:o,ref:e,code:t});return"object"!=typeof e||e instanceof RegExp?["string",e,r]:[e.type||"string",e.validate,n._`${r}.validate`]}(i);a===t&&e.pass(function(){if("object"==typeof i&&!(i instanceof RegExp)&&i.async){if(!u.$async)throw new Error("async format in sync schema");return n._`await ${p}(${r})`}return"function"==typeof l?n._`${p}(${r})`:n._`${p}.test(${r})`}())}())}};t.default=r},9502:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=[s(9651).default];t.default=n},6167:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.contentVocabulary=t.metadataVocabulary=void 0,t.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"],t.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]},1448:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(8921),r=s(7274),i=s(3633),o=[n.default,r.default,i.default];t.default=o},808:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(1782),r=s(4641),i=[n.default,r.default];t.default=i},4641:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i={keyword:"unevaluatedItems",type:"array",schemaType:["boolean","object"],error:{message:({params:{len:e}})=>n.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>n._`{limit: ${e}}`},code(e){const{gen:t,schema:s,data:i,it:o}=e,a=o.items||0;if(!0===a)return;const l=t.const("len",n._`${i}.length`);if(!1===s)e.setParams({len:a}),e.fail(n._`${l} > ${a}`);else if("object"==typeof s&&!(0,r.alwaysValidSchema)(o,s)){const s=t.var("valid",n._`${l} <= ${a}`);t.if((0,n.not)(s),(()=>function(s,i){t.forRange("i",i,l,(i=>{e.subschema({keyword:"unevaluatedItems",dataProp:i,dataPropType:r.Type.Num},s),o.allErrors||t.if((0,n.not)(s),(()=>t.break()))}))}(s,a))),e.ok(s)}o.items=!0}};t.default=i},1782:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i=s(2141),o={keyword:"unevaluatedProperties",type:"object",schemaType:["boolean","object"],trackErrors:!0,error:{message:"must NOT have unevaluated properties",params:({params:e})=>n._`{unevaluatedProperty: ${e.unevaluatedProperty}}`},code(e){const{gen:t,schema:s,data:o,errsCount:a,it:l}=e;if(!a)throw new Error("ajv implementation error");const{allErrors:c,props:h}=l;function u(i){if(!1===s)return e.setParams({unevaluatedProperty:i}),e.error(),void(c||t.break());if(!(0,r.alwaysValidSchema)(l,s)){const s=t.name("valid");e.subschema({keyword:"unevaluatedProperties",dataProp:i,dataPropType:r.Type.Str},s),c||t.if((0,n.not)(s),(()=>t.break()))}}h instanceof n.Name?t.if(n._`${h} !== true`,(()=>t.forIn("key",o,(e=>t.if(function(e,t){return n._`!${e} || !${e}[${t}]`}(h,e),(()=>u(e))))))):!0!==h&&t.forIn("key",o,(e=>void 0===h?u(e):t.if(function(e,t){const s=[];for(const r in e)!0===e[r]&&s.push(n._`${t} !== ${r}`);return(0,n.and)(...s)}(h,e),(()=>u(e))))),l.props=!0,e.ok(n._`${a} === ${i.default.errors}`)}};t.default=o},4693:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i=s(3510),o={keyword:"const",$data:!0,error:{message:"must be equal to constant",params:({schemaCode:e})=>n._`{allowedValue: ${e}}`},code(e){const{gen:t,data:s,$data:o,schemaCode:a,schema:l}=e;o||l&&"object"==typeof l?e.fail$data(n._`!${(0,r.useFunc)(t,i.default)}(${s}, ${a})`):e.fail(n._`${l} !== ${s}`)}};t.default=o},8921:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(7772),r={keyword:"dependentRequired",type:"object",schemaType:"object",error:n.error,code:e=>(0,n.validatePropertyDeps)(e)};t.default=r},966:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i=s(3510),o={keyword:"enum",schemaType:"array",$data:!0,error:{message:"must be equal to one of the allowed values",params:({schemaCode:e})=>n._`{allowedValues: ${e}}`},code(e){const{gen:t,data:s,$data:o,schema:a,schemaCode:l,it:c}=e;if(!o&&0===a.length)throw new Error("enum must have non-empty array");const h=a.length>=c.opts.loopEnum;let u;const d=()=>null!=u?u:u=(0,r.useFunc)(t,i.default);let p;if(h||o)p=t.let("valid"),e.block$data(p,(function(){t.assign(p,!1),t.forOf("v",l,(e=>t.if(n._`${d()}(${s}, ${e})`,(()=>t.assign(p,!0).break()))))}));else{if(!Array.isArray(a))throw new Error("ajv implementation error");const e=t.const("vSchema",l);p=(0,n.or)(...a.map(((t,r)=>function(e,t){const r=a[t];return"object"==typeof r&&null!==r?n._`${d()}(${s}, ${e}[${t}])`:n._`${s} === ${r}`}(e,r))))}e.pass(p)}};t.default=o},2649:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3983),r=s(430),i=s(3229),o=s(4336),a=s(498),l=s(3301),c=s(1687),h=s(2958),u=s(4693),d=s(966),p=[n.default,r.default,i.default,o.default,a.default,l.default,c.default,h.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},u.default,d.default];t.default=p},3633:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(6776),r={keyword:["maxContains","minContains"],type:"array",schemaType:"number",code({keyword:e,parentSchema:t,it:s}){void 0===t.contains&&(0,n.checkStrictMode)(s,`"${e}" without "contains" is ignored`)}};t.default=r},1687:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:{message({keyword:e,schemaCode:t}){const s="maxItems"===e?"more":"fewer";return n.str`must NOT have ${s} than ${t} items`},params:({schemaCode:e})=>n._`{limit: ${e}}`},code(e){const{keyword:t,data:s,schemaCode:r}=e,i="maxItems"===t?n.operators.GT:n.operators.LT;e.fail$data(n._`${s}.length ${i} ${r}`)}};t.default=r},3229:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i=s(4499),o={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:{message({keyword:e,schemaCode:t}){const s="maxLength"===e?"more":"fewer";return n.str`must NOT have ${s} than ${t} characters`},params:({schemaCode:e})=>n._`{limit: ${e}}`},code(e){const{keyword:t,data:s,schemaCode:o,it:a}=e,l="maxLength"===t?n.operators.GT:n.operators.LT,c=!1===a.opts.unicode?n._`${s}.length`:n._`${(0,r.useFunc)(e.gen,i.default)}(${s})`;e.fail$data(n._`${c} ${l} ${o}`)}};t.default=o},3983:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=n.operators,i={maximum:{okStr:"<=",ok:r.LTE,fail:r.GT},minimum:{okStr:">=",ok:r.GTE,fail:r.LT},exclusiveMaximum:{okStr:"<",ok:r.LT,fail:r.GTE},exclusiveMinimum:{okStr:">",ok:r.GT,fail:r.LTE}},o={message:({keyword:e,schemaCode:t})=>n.str`must be ${i[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>n._`{comparison: ${i[e].okStr}, limit: ${t}}`},a={keyword:Object.keys(i),type:"number",schemaType:"number",$data:!0,error:o,code(e){const{keyword:t,data:s,schemaCode:r}=e;e.fail$data(n._`${s} ${i[t].fail} ${r} || isNaN(${s})`)}};t.default=a},498:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:{message({keyword:e,schemaCode:t}){const s="maxProperties"===e?"more":"fewer";return n.str`must NOT have ${s} than ${t} properties`},params:({schemaCode:e})=>n._`{limit: ${e}}`},code(e){const{keyword:t,data:s,schemaCode:r}=e,i="maxProperties"===t?n.operators.GT:n.operators.LT;e.fail$data(n._`Object.keys(${s}).length ${i} ${r}`)}};t.default=r},430:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:{message:({schemaCode:e})=>n.str`must be multiple of ${e}`,params:({schemaCode:e})=>n._`{multipleOf: ${e}}`},code(e){const{gen:t,data:s,schemaCode:r,it:i}=e,o=i.opts.multipleOfPrecision,a=t.let("res"),l=o?n._`Math.abs(Math.round(${a}) - ${a}) > 1e-${o}`:n._`${a} !== parseInt(${a})`;e.fail$data(n._`(${r} === 0 || (${a} = ${s}/${r}, ${l}))`)}};t.default=r},4336:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(412),r=s(3487),i={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:{message:({schemaCode:e})=>r.str`must match pattern "${e}"`,params:({schemaCode:e})=>r._`{pattern: ${e}}`},code(e){const{data:t,$data:s,schema:i,schemaCode:o,it:a}=e,l=a.opts.unicodeRegExp?"u":"",c=s?r._`(new RegExp(${o}, ${l}))`:(0,n.usePattern)(e,i);e.fail$data(r._`!${c}.test(${t})`)}};t.default=i},3301:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(412),r=s(3487),i=s(6776),o={keyword:"required",type:"object",schemaType:"array",$data:!0,error:{message:({params:{missingProperty:e}})=>r.str`must have required property '${e}'`,params:({params:{missingProperty:e}})=>r._`{missingProperty: ${e}}`},code(e){const{gen:t,schema:s,schemaCode:o,data:a,$data:l,it:c}=e,{opts:h}=c;if(!l&&0===s.length)return;const u=s.length>=h.loopRequired;if(c.allErrors?function(){if(u||l)e.block$data(r.nil,d);else for(const t of s)(0,n.checkReportMissingProp)(e,t)}():function(){const i=t.let("missing");if(u||l){const s=t.let("valid",!0);e.block$data(s,(()=>function(s,i){e.setParams({missingProperty:s}),t.forOf(s,o,(()=>{t.assign(i,(0,n.propertyInData)(t,a,s,h.ownProperties)),t.if((0,r.not)(i),(()=>{e.error(),t.break()}))}),r.nil)}(i,s))),e.ok(s)}else t.if((0,n.checkMissingProp)(e,s,i)),(0,n.reportMissingProp)(e,i),t.else()}(),h.strictRequired){const t=e.parentSchema.properties,{definedProperties:n}=e.it;for(const e of s)if(void 0===(null==t?void 0:t[e])&&!n.has(e)){const t=`required property "${e}" is not defined at "${c.schemaEnv.baseId+c.errSchemaPath}" (strictRequired)`;(0,i.checkStrictMode)(c,t,c.opts.strictRequired)}}function d(){t.forOf("prop",o,(s=>{e.setParams({missingProperty:s}),t.if((0,n.noPropertyInData)(t,a,s,h.ownProperties),(()=>e.error()))}))}}};t.default=o},2958:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(453),r=s(3487),i=s(6776),o=s(3510),a={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:{message:({params:{i:e,j:t}})=>r.str`must NOT have duplicate items (items ## ${t} and ${e} are identical)`,params:({params:{i:e,j:t}})=>r._`{i: ${e}, j: ${t}}`},code(e){const{gen:t,data:s,$data:a,schema:l,parentSchema:c,schemaCode:h,it:u}=e;if(!a&&!l)return;const d=t.let("valid"),p=c.items?(0,n.getSchemaTypes)(c.items):[];function m(i,o){const a=t.name("item"),l=(0,n.checkDataTypes)(p,a,u.opts.strictNumbers,n.DataType.Wrong),c=t.const("indices",r._`{}`);t.for(r._`;${i}--;`,(()=>{t.let(a,r._`${s}[${i}]`),t.if(l,r._`continue`),p.length>1&&t.if(r._`typeof ${a} == "string"`,r._`${a} += "_"`),t.if(r._`typeof ${c}[${a}] == "number"`,(()=>{t.assign(o,r._`${c}[${a}]`),e.error(),t.assign(d,!1).break()})).code(r._`${c}[${a}] = ${i}`)}))}function f(n,a){const l=(0,i.useFunc)(t,o.default),c=t.name("outer");t.label(c).for(r._`;${n}--;`,(()=>t.for(r._`${a} = ${n}; ${a}--;`,(()=>t.if(r._`${l}(${s}[${n}], ${s}[${a}])`,(()=>{e.error(),t.assign(d,!1).break(c)}))))))}e.block$data(d,(function(){const n=t.let("i",r._`${s}.length`),i=t.let("j");e.setParams({i:n,j:i}),t.assign(d,!0),t.if(r._`${n} > 1`,(()=>(p.length>0&&!p.some((e=>"object"===e||"array"===e))?m:f)(n,i)))}),r._`${h} === false`),e.ok(d)}};t.default=a},5362:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});var n=s(7537),r=s.n(n),i=s(3645),o=s.n(i)()(r());o.push([e.id,".macromolecule-cell-comp-analysis-host{\n max-height: 250px;\n overflow-y: scroll;\n}\n\n.macromolecule-cell-comp-analysis-bar{\n height: inherit;\n display: block;\n margin-top: 1.5px;\n margin-bottom: 1.5px;\n margin-right: 3px;\n}\n\n.macromolecule-cell-comp-analysis-value{\n display: flex;\n}","",{version:3,sources:["webpack://./css/composition-analysis.css"],names:[],mappings:"AAAA;IACI,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,cAAc;IACd,iBAAiB;IACjB,oBAAoB;IACpB,iBAAiB;AACrB;;AAEA;IACI,aAAa;AACjB",sourcesContent:[".macromolecule-cell-comp-analysis-host{\n max-height: 250px;\n overflow-y: scroll;\n}\n\n.macromolecule-cell-comp-analysis-bar{\n height: inherit;\n display: block;\n margin-top: 1.5px;\n margin-bottom: 1.5px;\n margin-right: 3px;\n}\n\n.macromolecule-cell-comp-analysis-value{\n display: flex;\n}"],sourceRoot:""}]);const a=o},9564:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});var n=s(7537),r=s.n(n),i=s(3645),o=s.n(i)()(r());o.push([e.id,".kalign-version {\n margin-bottom: 0;\n text-align: end;\n font-size: 12px;\n opacity: 0.8;\n}\nbutton.msa-params-button.ui-btn {\n justify-content: end;\n}","",{version:3,sources:["webpack://./css/msa.css"],names:[],mappings:"AAAA;IACI,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,YAAY;AAChB;AACA;IACI,oBAAoB;AACxB",sourcesContent:[".kalign-version {\n margin-bottom: 0;\n text-align: end;\n font-size: 12px;\n opacity: 0.8;\n}\nbutton.msa-params-button.ui-btn {\n justify-content: end;\n}"],sourceRoot:""}]);const a=o},9414:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});var n=s(7537),r=s.n(n),i=s(3645),o=s.n(i)()(r());o.push([e.id,".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/ml/css/styles.css"],names:[],mappings:"AAAA;IACI,4BAA4B;IAC5B,WAAW;AACf;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,YAAY;AAChB",sourcesContent:[".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n"],sourceRoot:""}]);const a=o},8710:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});var n=s(7537),r=s.n(n),i=s(3645),o=s.n(i)()(r());o.push([e.id,".monomer-lib-controls-form {\n margin-left: auto;\n margin-right: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n}\n","",{version:3,sources:["webpack://./src/utils/monomer-lib/library-file-manager/style.css"],names:[],mappings:"AAAA;EACE,iBAAiB;EACjB,kBAAkB;EAClB,aAAa;EACb,sBAAsB;EACtB,mBAAmB;EACnB,WAAW;AACb",sourcesContent:[".monomer-lib-controls-form {\n margin-left: auto;\n margin-right: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n}\n"],sourceRoot:""}]);const a=o},3645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var s="",n=void 0!==t[5];return t[4]&&(s+="@supports (".concat(t[4],") {")),t[2]&&(s+="@media ".concat(t[2]," {")),n&&(s+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),s+=e(t),n&&(s+="}"),t[2]&&(s+="}"),t[4]&&(s+="}"),s})).join("")},t.i=function(e,s,n,r,i){"string"==typeof e&&(e=[[null,e,void 0]]);var o={};if(n)for(var a=0;a<this.length;a++){var l=this[a][0];null!=l&&(o[l]=!0)}for(var c=0;c<e.length;c++){var h=[].concat(e[c]);n&&o[h[0]]||(void 0!==i&&(void 0===h[5]||(h[1]="@layer".concat(h[5].length>0?" ".concat(h[5]):""," {").concat(h[1],"}")),h[5]=i),s&&(h[2]?(h[1]="@media ".concat(h[2]," {").concat(h[1],"}"),h[2]=s):h[2]=s),r&&(h[4]?(h[1]="@supports (".concat(h[4],") {").concat(h[1],"}"),h[4]=r):h[4]="".concat(r)),t.push(h))}},t}},7537:e=>{"use strict";e.exports=function(e){var t=e[1],s=e[3];if(!s)return t;if("function"==typeof btoa){var n=btoa(unescape(encodeURIComponent(JSON.stringify(s)))),r="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(n),i="/*# ".concat(r," */");return[t].concat([i]).join("\n")}return[t].join("\n")}},4063:e=>{"use strict";e.exports=function e(t,s){if(t===s)return!0;if(t&&s&&"object"==typeof t&&"object"==typeof s){if(t.constructor!==s.constructor)return!1;var n,r,i;if(Array.isArray(t)){if((n=t.length)!=s.length)return!1;for(r=n;0!=r--;)if(!e(t[r],s[r]))return!1;return!0}if(t.constructor===RegExp)return t.source===s.source&&t.flags===s.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===s.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===s.toString();if((n=(i=Object.keys(t)).length)!==Object.keys(s).length)return!1;for(r=n;0!=r--;)if(!Object.prototype.hasOwnProperty.call(s,i[r]))return!1;for(r=n;0!=r--;){var o=i[r];if(!e(t[o],s[o]))return!1}return!0}return t!=t&&s!=s}},9133:function(e,t,s){var n;!function(t,r){var i={};!function(e){"use strict";e.__esModule=!0,e.digestLength=32,e.blockSize=64;var t=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function s(e,s,n,r,i){for(var o,a,l,c,h,u,d,p,m,f,g,y,b;i>=64;){for(o=s[0],a=s[1],l=s[2],c=s[3],h=s[4],u=s[5],d=s[6],p=s[7],f=0;f<16;f++)g=r+4*f,e[f]=(255&n[g])<<24|(255&n[g+1])<<16|(255&n[g+2])<<8|255&n[g+3];for(f=16;f<64;f++)y=((m=e[f-2])>>>17|m<<15)^(m>>>19|m<<13)^m>>>10,b=((m=e[f-15])>>>7|m<<25)^(m>>>18|m<<14)^m>>>3,e[f]=(y+e[f-7]|0)+(b+e[f-16]|0);for(f=0;f<64;f++)y=(((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))+(h&u^~h&d)|0)+(p+(t[f]+e[f]|0)|0)|0,b=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&a^o&l^a&l)|0,p=d,d=u,u=h,h=c+y|0,c=l,l=a,a=o,o=y+b|0;s[0]+=o,s[1]+=a,s[2]+=l,s[3]+=c,s[4]+=h,s[5]+=u,s[6]+=d,s[7]+=p,r+=64,i-=64}return r}var n=function(){function t(){this.digestLength=e.digestLength,this.blockSize=e.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return t.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},t.prototype.clean=function(){for(var e=0;e<this.buffer.length;e++)this.buffer[e]=0;for(e=0;e<this.temp.length;e++)this.temp[e]=0;this.reset()},t.prototype.update=function(e,t){if(void 0===t&&(t=e.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var n=0;if(this.bytesHashed+=t,this.bufferLength>0){for(;this.bufferLength<64&&t>0;)this.buffer[this.bufferLength++]=e[n++],t--;64===this.bufferLength&&(s(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(t>=64&&(n=s(this.temp,this.state,e,n,t),t%=64);t>0;)this.buffer[this.bufferLength++]=e[n++],t--;return this},t.prototype.finish=function(e){if(!this.finished){var t=this.bytesHashed,n=this.bufferLength,r=t/536870912|0,i=t<<3,o=t%64<56?64:128;this.buffer[n]=128;for(var a=n+1;a<o-8;a++)this.buffer[a]=0;this.buffer[o-8]=r>>>24&255,this.buffer[o-7]=r>>>16&255,this.buffer[o-6]=r>>>8&255,this.buffer[o-5]=r>>>0&255,this.buffer[o-4]=i>>>24&255,this.buffer[o-3]=i>>>16&255,this.buffer[o-2]=i>>>8&255,this.buffer[o-1]=i>>>0&255,s(this.temp,this.state,this.buffer,0,o),this.finished=!0}for(a=0;a<8;a++)e[4*a+0]=this.state[a]>>>24&255,e[4*a+1]=this.state[a]>>>16&255,e[4*a+2]=this.state[a]>>>8&255,e[4*a+3]=this.state[a]>>>0&255;return this},t.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},t.prototype._saveState=function(e){for(var t=0;t<this.state.length;t++)e[t]=this.state[t]},t.prototype._restoreState=function(e,t){for(var s=0;s<this.state.length;s++)this.state[s]=e[s];this.bytesHashed=t,this.finished=!1,this.bufferLength=0},t}();e.Hash=n;var r=function(){function e(e){this.inner=new n,this.outer=new n,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var t=new Uint8Array(this.blockSize);if(e.length>this.blockSize)(new n).update(e).finish(t).clean();else for(var s=0;s<e.length;s++)t[s]=e[s];for(s=0;s<t.length;s++)t[s]^=54;for(this.inner.update(t),s=0;s<t.length;s++)t[s]^=106;for(this.outer.update(t),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate),s=0;s<t.length;s++)t[s]=0}return e.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},e.prototype.clean=function(){for(var e=0;e<this.istate.length;e++)this.ostate[e]=this.istate[e]=0;this.inner.clean(),this.outer.clean()},e.prototype.update=function(e){return this.inner.update(e),this},e.prototype.finish=function(e){return this.outer.finished?this.outer.finish(e):(this.inner.finish(e),this.outer.update(e,this.digestLength).finish(e)),this},e.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},e}();function i(e){var t=(new n).update(e),s=t.digest();return t.clean(),s}function o(e,t){var s=new r(e).update(t),n=s.digest();return s.clean(),n}function a(e,t,s,n){var r=n[0];if(0===r)throw new Error("hkdf: cannot expand more");t.reset(),r>1&&t.update(e),s&&t.update(s),t.update(n),t.finish(e),n[0]++}e.HMAC=r,e.hash=i,e.default=i,e.hmac=o;var l=new Uint8Array(e.digestLength);e.hkdf=function(e,t,s,n){void 0===t&&(t=l),void 0===n&&(n=32);for(var i=new Uint8Array([1]),c=o(t,e),h=new r(c),u=new Uint8Array(h.digestLength),d=u.length,p=new Uint8Array(n),m=0;m<n;m++)d===u.length&&(a(u,h,s,i),d=0),p[m]=u[d++];return h.clean(),u.fill(0),i.fill(0),p},e.pbkdf2=function(e,t,s,n){for(var i=new r(e),o=i.digestLength,a=new Uint8Array(4),l=new Uint8Array(o),c=new Uint8Array(o),h=new Uint8Array(n),u=0;u*o<n;u++){var d=u+1;a[0]=d>>>24&255,a[1]=d>>>16&255,a[2]=d>>>8&255,a[3]=d>>>0&255,i.reset(),i.update(t),i.update(a),i.finish(c);for(var p=0;p<o;p++)l[p]=c[p];for(p=2;p<=s;p++){i.reset(),i.update(c).finish(c);for(var m=0;m<o;m++)l[m]^=c[m]}for(p=0;p<o&&u*o+p<n;p++)h[u*o+p]=l[p]}for(u=0;u<o;u++)l[u]=c[u]=0;for(u=0;u<4;u++)a[u]=0;return i.clean(),h}}(i);var o=i.default;for(var a in i)o[a]=i[a];"object"==typeof e.exports?e.exports=o:void 0===(n=function(){return o}.call(i,s,i,e))||(e.exports=n)}()},1811:(e,t,s)=>{"use strict";s.d(t,{T:()=>r});const n=new Uint32Array(65536),r=(e,t)=>{if(e.length<t.length){const s=t;t=e,e=s}return 0===t.length?e.length:e.length<=32?((e,t)=>{const s=e.length,r=t.length,i=1<<s-1;let o=-1,a=0,l=s,c=s;for(;c--;)n[e.charCodeAt(c)]|=1<<c;for(c=0;c<r;c++){let e=n[t.charCodeAt(c)];const s=e|a;e|=(e&o)+o^o,a|=~(e|o),o&=e,a&i&&l++,o&i&&l--,a=a<<1|1,o=o<<1|~(s|a),a&=s}for(c=s;c--;)n[e.charCodeAt(c)]=0;return l})(e,t):((e,t)=>{const s=t.length,r=e.length,i=[],o=[],a=Math.ceil(s/32),l=Math.ceil(r/32);for(let e=0;e<a;e++)o[e]=-1,i[e]=0;let c=0;for(;c<l-1;c++){let a=0,l=-1;const h=32*c,u=Math.min(32,r)+h;for(let t=h;t<u;t++)n[e.charCodeAt(t)]|=1<<t;for(let e=0;e<s;e++){const s=n[t.charCodeAt(e)],r=o[e/32|0]>>>e&1,c=i[e/32|0]>>>e&1,h=s|a,u=((s|c)&l)+l^l|s|c;let d=a|~(u|l),p=l&u;d>>>31^r&&(o[e/32|0]^=1<<e),p>>>31^c&&(i[e/32|0]^=1<<e),d=d<<1|r,p=p<<1|c,l=p|~(h|d),a=d&h}for(let t=h;t<u;t++)n[e.charCodeAt(t)]=0}let h=0,u=-1;const d=32*c,p=Math.min(32,r-d)+d;for(let t=d;t<p;t++)n[e.charCodeAt(t)]|=1<<t;let m=r;for(let e=0;e<s;e++){const s=n[t.charCodeAt(e)],a=o[e/32|0]>>>e&1,l=i[e/32|0]>>>e&1,c=s|h,d=((s|l)&u)+u^u|s|l;let p=h|~(d|u),f=u&d;m+=p>>>r-1&1,m-=f>>>r-1&1,p>>>31^a&&(o[e/32|0]^=1<<e),f>>>31^l&&(i[e/32|0]^=1<<e),p=p<<1|a,f=f<<1|l,u=f|~(c|p),h=p&c}for(let t=d;t<p;t++)n[e.charCodeAt(t)]=0;return m})(e,t)}},3979:(e,t)=>{"use strict";t.H$=void 0,t.H$=function(e,t,s){var n=function(e,t,s){if(0===e.length||0===t.length)return 0;if(s&&!s.caseSensitive&&(e=e.toUpperCase(),t=t.toUpperCase()),e===t)return 1;for(var n=0,r=e.length,i=t.length,o=Math.floor(Math.max(r,i)/2)-1,a=new Array(r),l=new Array(i),c=0;c<r;c++)for(var h=Math.max(0,c-o);h<=Math.min(i,c+o+1);h++)if(!a[c]&&!l[h]&&e[c]===t[h]){++n,a[c]=l[h]=!0;break}if(0===n)return 0;var u=0,d=0;for(c=0;c<r;c++)if(a[c]){for(;!l[d];)d++;e.charAt(c)!==t.charAt(d++)&&u++}return(n/r+n/i+(n-(u/=2))/n)/3}(e,t,s),r=0;if(n>.7){for(var i=Math.min(e.length,t.length),o=0;e[o]===t[o]&&o<4&&o<i;)++r,o++;n+=.1*r*(1-n)}return n}},9461:e=>{"use strict";var t=e.exports=function(e,t,n){"function"==typeof t&&(n=t,t={}),s(t,"function"==typeof(n=t.cb||n)?n:n.pre||function(){},n.post||function(){},e,"",e)};function s(e,n,r,i,o,a,l,c,h,u){if(i&&"object"==typeof i&&!Array.isArray(i)){for(var d in n(i,o,a,l,c,h,u),i){var p=i[d];if(Array.isArray(p)){if(d in t.arrayKeywords)for(var m=0;m<p.length;m++)s(e,n,r,p[m],o+"/"+d+"/"+m,a,o,d,i,m)}else if(d in t.propsKeywords){if(p&&"object"==typeof p)for(var f in p)s(e,n,r,p[f],o+"/"+d+"/"+f.replace(/~/g,"~0").replace(/\//g,"~1"),a,o,d,i,f)}else(d in t.keywords||e.allKeys&&!(d in t.skipKeywords))&&s(e,n,r,p,o+"/"+d,a,o,d,i)}r(i,o,a,l,c,h,u)}}t.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0},t.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},t.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},t.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0}},3379:e=>{"use strict";var t=[];function s(e){for(var s=-1,n=0;n<t.length;n++)if(t[n].identifier===e){s=n;break}return s}function n(e,n){for(var i={},o=[],a=0;a<e.length;a++){var l=e[a],c=n.base?l[0]+n.base:l[0],h=i[c]||0,u="".concat(c," ").concat(h);i[c]=h+1;var d=s(u),p={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==d)t[d].references++,t[d].updater(p);else{var m=r(p,n);n.byIndex=a,t.splice(a,0,{identifier:u,updater:m,references:1})}o.push(u)}return o}function r(e,t){var s=t.domAPI(t);return s.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;s.update(e=t)}else s.remove()}}e.exports=function(e,r){var i=n(e=e||[],r=r||{});return function(e){e=e||[];for(var o=0;o<i.length;o++){var a=s(i[o]);t[a].references--}for(var l=n(e,r),c=0;c<i.length;c++){var h=s(i[c]);0===t[h].references&&(t[h].updater(),t.splice(h,1))}i=l}}},569:e=>{"use strict";var t={};e.exports=function(e,s){var n=function(e){if(void 0===t[e]){var s=document.querySelector(e);if(window.HTMLIFrameElement&&s instanceof window.HTMLIFrameElement)try{s=s.contentDocument.head}catch(e){s=null}t[e]=s}return t[e]}(e);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");n.appendChild(s)}},9216:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},3565:(e,t,s)=>{"use strict";e.exports=function(e){var t=s.nc;t&&e.setAttribute("nonce",t)}},7795:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(s){!function(e,t,s){var n="";s.supports&&(n+="@supports (".concat(s.supports,") {")),s.media&&(n+="@media ".concat(s.media," {"));var r=void 0!==s.layer;r&&(n+="@layer".concat(s.layer.length>0?" ".concat(s.layer):""," {")),n+=s.css,r&&(n+="}"),s.media&&(n+="}"),s.supports&&(n+="}");var i=s.sourceMap;i&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),t.styleTagTransform(n,e,t.options)}(t,e,s)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},4589:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},7241:(e,t,s)=>{"use strict";s.d(t,{D:()=>h});var n=s(4469),r=s(976),i=s(6414),o=s.n(i),a=s(3348),l=s(499);const c=31;async function h(e,t=!1,s){const i=l.Cn.getOrCreate(e);let h;s??(s=new Map);const d=i.isHelm()?(0,a.getHelmMonomers)(e):Object.keys(i.stats.freq).filter((e=>""!==e));for(let e=0;e<d.length;e++)s.has(d[e])||s.set(d[e],`${s.size+1}`);if(i.isHelm())h=await n.functions.call("HELM:getMolFiles",{col:e}),h=function(e,t,s=!1){const n=new Array(e.length);for(let r=0;r<e.length;r++){let i=0,o=0,a="\n Datagrok macromolecule handler\n\n 0 0 0 0 0 0 999 V3000\nM V30 BEGIN CTAB\n";const l=e.get(r);i=l.indexOf("\n",i)+1,i=l.indexOf("\n",i)+1,i=l.indexOf("\n",i)+1;const h=parseInt(l.substring(i,i+3)),u=parseInt(l.substring(i+3,i+6));a+=`M V30 COUNTS ${h} ${u} 0 0 0\n`,a+="M V30 BEGIN ATOM\n";for(let e=0;e<h;e++){i=l.indexOf("\n",i)+1+c,o=l.indexOf(" ",i);const n=l.substring(i,o);a+=s?`M V30 ${e+1} R${t.get(n)} 0.000 0.000 0 0\n`:`M V30 ${e+1} At 0.000 0.000 0 0 MASS=${t.get(n)}\n`}a+="M V30 END ATOM\n",a+="M V30 BEGIN BOND\n";for(let e=0;e<u;e++){i=l.indexOf("\n",i)+1;const t=parseInt(l.substring(i,i+3).trim()),s=parseInt(l.substring(i+3,i+6).trim());a+=`M V30 ${e+1} ${parseInt(l.substring(i+6,i+9).trim())} ${t} ${s}\n`}a+="M V30 END BOND\n",a+="M V30 END CTAB\n",a+="M END",n[r]=a}return n}(h,s,t);else{h=new Array(e.length);for(let n=0;n<e.length;n++){const e=u(o()(i.splitted[n]).filter((e=>""!==e)).toArray(),s,t);h[n]=e}}return r.Column.fromStrings("monomericMols",h)}function u(e,t,s=!1){let n="\n Datagrok macromolecule handler\n\n 0 0 0 0 0 0 999 V3000\nM V30 BEGIN CTAB\n";n+=`M V30 COUNTS ${e.length} ${e.length?e.length-1:0} 0 0 0\n`,n+="M V30 BEGIN ATOM\n";for(let r=0;r<e.length;r++)n+=s?`M V30 ${r+1} R${t.get(e[r])} 0.000 0.000 0 0\n`:`M V30 ${r+1} At 0.000 0.000 0 0 MASS=${t.get(e[r])}\n`;n+="M V30 END ATOM\n",n+="M V30 BEGIN BOND\n";for(let t=0;t<e.length-1;t++)n+=`M V30 ${t+1} 1 ${t+1} ${t+2}\n`;return n+="M V30 END BOND\n",n+="M V30 END CTAB\n",n+="M END",n}},3348:(e,t,s)=>{"use strict";s.r(t),s.d(t,{GetRegionEditor:()=>Gs,SeqActivityCliffsEditor:()=>Bs,SeqPaletteCustom:()=>Ns,SequenceSpaceEditor:()=>Vs,SplitToMonomersEditor:()=>Ds,SubsequenceSearchTopMenu:()=>wn,_package:()=>Is,activityCliffs:()=>Js,addCopyMenu:()=>Mn,alignSequences:()=>rn,bioSubstructureFilter:()=>En,compositionAnalysis:()=>on,compositionAnalysisWidget:()=>Ws,convertDialog:()=>cn,createMonomerLibraryForPolyTool:()=>Fn,demoBioActivityCliffs:()=>Pn,demoBioAtomicLevel:()=>On,demoBioHelmMsaSequenceSpace:()=>Rn,demoBioSequenceSpace:()=>Ln,demoBioSimilarityDiversity:()=>Nn,detectMacromoleculeProbe:()=>Dn,diversitySearchTopMenu:()=>bn,diversitySearchViewer:()=>yn,fastaSequenceCellRenderer:()=>Hs,getBioLib:()=>Os,getHelmMonomers:()=>mn,getMonomerLibHelper:()=>$s,getRegion:()=>zs,getRegionApp:()=>In,getRegionHelmApp:()=>$n,getRegionPanel:()=>ks,getRegionTopMenu:()=>Xs,getUnitsHandler:()=>Rs,helmPreprocessingFunction:()=>en,hydrophobPalette:()=>Ms,importBam:()=>ln,importFasta:()=>an,initBio:()=>Ls,libraryPanel:()=>Fs,macroMolColumnPropertyPanel:()=>js,macromoleculeDifferenceCellRenderer:()=>Zs,macromoleculePreprocessingFunction:()=>Qs,manageMonomerLibraries:()=>xn,monomerCellRenderer:()=>un,multipleSequenceAlignmentDialog:()=>nn,polyTool:()=>hn,polyToolColumnChoice:()=>kn,saveAsFasta:()=>An,sdfToJsonLib:()=>Gn,searchSubsequenceEditor:()=>vn,separatorSequenceCellRenderer:()=>Us,sequenceAlignment:()=>Ys,sequenceIdentityScoring:()=>Cn,sequenceSimilarityScoring:()=>Sn,sequenceSpaceTopMenu:()=>tn,sequenceTooltip:()=>Ps,similaritySearchTopMenu:()=>gn,similaritySearchViewer:()=>fn,splitToMonomersTopMenu:()=>pn,testDetectMacromolecule:()=>dn,toAtomicLevel:()=>sn,vdRegionsViewer:()=>qs,webLogoAggApp:()=>Tn,webLogoLargeApp:()=>_n,webLogoViewer:()=>Ks});var n,r,i=s(4469),o=s(3870),a=s(976),l=s(3277),c=s(4628);(r=n||(n={})).EUCLIDEAN="EUCLIDEAN",r.MANHATTAN="MANHATTAN";class h{learningRate={uiName:"Learinig rate",value:1,tooltip:"The initial learning rate for the embedding optimization"};nComponents={uiName:"Components",value:2,tooltip:"The number of components (dimensions) to project the data to"};nEpochs={uiName:"Epochs",value:0,tooltip:"The number of epochs to optimize embeddings via SGD. Computed automatically if set to 0"};nNeighbors={uiName:"Neighbors",value:15,tooltip:"The number of nearest neighbors to construct the fuzzy manifold"};spread={uiName:"Spread",value:1,tooltip:"The effective scale of embedded points, used with min distance to control \n the clumped/dispersed nature of the embedding"};minDist={uiName:"Min distance",value:.1,tooltip:"The effective minimum distance between embedded points, \n used with spread to control the clumped/dispersed nature of the embedding"};randomSeed={uiName:"Random seed",value:null,tooltip:"Random seed",type:"string"};constructor(){}}class u{epsilon={uiName:"Epsilon",value:10,tooltip:"Epsilon is learning rate"};perplexity={uiName:"Perplexity",value:30,tooltip:"Roughly how many neighbors each point influences"};dim={uiName:"Dimensionality",value:2,tooltip:"Dimensionality of the embedding"};constructor(){}}const d="MCL";a.SEMTYPE.MOLECULE,a.SEMTYPE.MACROMOLECULE;class p{epsilon={uiName:"Epsilon",value:.01,tooltip:"Minimum distance between cluster points",min:0,max:2,step:.005};minPts={uiName:"Minimum points",value:4,tooltip:"Minimum number of points in cluster",min:1,max:1e3,step:1};constructor(){}}class m{editorSettings={};tableInput;colInput;preprocessingFunctionInput;plotEmbeddingsInput=o.boolInput("Plot embeddings",!0);clusterEmbeddingsInput=o.boolInput("Cluster embeddings",!0);preprocessingFunctionInputRoot=null;colInputRoot;methods=[c.A.UMAP,c.A.T_SNE];methodInput;methodSettingsIcon;dbScanSettingsIcon;preprocessingFuncSettingsIcon;columnFunctionsMap={};supportedFunctions={};availableMetrics=[];similarityMetricInputRoot;methodSettingsDiv=o.inputs([]);dbScanSettingsDiv=o.inputs([]);preprocessingFuncSettingsDiv=o.inputs([]);preprocessingFunctionSettings={};methodsParams={[c.A.UMAP]:new h,[c.A.T_SNE]:new u};dbScanParams=new p;similarityMetricInput;get algorithmOptions(){const e=this.methodsParams[this.methodInput.value],t={};return Object.keys(e).forEach((s=>{null!=e[s].value&&(t[s]=e[s].value)})),t}get dbScanOptions(){return{dbScanEpsilon:this.dbScanParams.epsilon.value??.01,dbScanMinPts:this.dbScanParams.minPts.value??4}}constructor(e={}){this.editorSettings=e,this.editorSettings.enableMCL&&this.methods.push(d),a.Func.find({tags:[l.n3]}).forEach((e=>{const t=e.options.get(l.vO)??"",s=e.friendlyName??e.name,n=e.options.get(l.ts)??"",r=e.options.get(l.q6)??"",i=e.options.get(l.dB)??"";this.editorSettings.semtype&&!t.includes(this.editorSettings.semtype)||this.editorSettings.type&&!n.includes(this.editorSettings.type)||this.editorSettings.units&&!r.includes(this.editorSettings.units)||(this.supportedFunctions[s]={func:e,semTypes:t?t.split(","):[],types:n?n.split(","):[],units:r?r.split(","):[],distanceFunctions:i?i.split(","):[]})})),this.tableInput=o.tableInput("Table",i.shell.tv.dataFrame,i.shell.tables,(()=>{this.onTableInputChanged()})),this.onTableInputChanged(),this.regenerateColInput(),this.onColumnInputChanged();let t=!1,s=!1;this.methodInput=o.choiceInput("Method",c.A.UMAP,this.methods,(()=>{t&&this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[this.methodInput.value])})),this.methodSettingsIcon=o.icons.settings((()=>{t=!t,t?this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[this.methodInput.value]):o.empty(this.methodSettingsDiv)}),"Modify methods parameters"),this.dbScanSettingsIcon=o.icons.settings((()=>{s=!s,s?this.createAlgorithmSettingsDiv(this.dbScanSettingsDiv,this.dbScanParams):o.empty(this.dbScanSettingsDiv)}),"Modify clustering parameters"),this.clusterEmbeddingsInput.classList.add("ml-dim-reduction-settings-input"),this.clusterEmbeddingsInput.root.prepend(this.dbScanSettingsIcon),this.methodInput.root.classList.add("ml-dim-reduction-settings-input"),this.methodInput.root.prepend(this.methodSettingsIcon),this.methodSettingsDiv=o.inputs([]);const n=this.columnFunctionsMap[this.colInput.value.name];this.preprocessingFunctionInput=o.choiceInput("Encoding function",n[0],n,(()=>{this.onPreprocessingFunctionChanged()}));let r=!1;this.preprocessingFunctionInputRoot||(this.preprocessingFunctionInputRoot=this.preprocessingFunctionInput.root,r=!0),r||(o.empty(this.preprocessingFunctionInputRoot),Array.from(this.preprocessingFunctionInput.root.children).forEach((e=>this.preprocessingFunctionInputRoot.append(e)))),this.preprocessingFunctionInputRoot.classList.add("ml-dim-reduction-settings-input");let h=!1;this.preprocessingFuncSettingsIcon=o.icons.settings((async()=>{h?o.empty(this.preprocessingFuncSettingsDiv):await this.createPreprocessingFuncParamsDiv(this.preprocessingFuncSettingsDiv,this.supportedFunctions[this.preprocessingFunctionInput.value].func),h=!h}),"Modify encoding function parameters"),this.preprocessingFunctionInputRoot.prepend(this.preprocessingFuncSettingsIcon),this.similarityMetricInput=o.choiceInput("Similarity","",[],null),this.similarityMetricInput.nullable=!1,this.similarityMetricInputRoot||(this.similarityMetricInputRoot=this.similarityMetricInput.root),this.onPreprocessingFunctionChanged()}getColInput(){const e=this.tableInput.value?.columns.toList().find((e=>!!this.columnFunctionsMap[e.name]))??null,t=o.columnInput("Column",this.tableInput.value,e,(()=>this.onColumnInputChanged()),{filter:e=>!!this.columnFunctionsMap[e.name]});return this.colInputRoot||(this.colInputRoot=t.root),t}regenerateColInput(){let e=!1;this.colInputRoot&&(e=!0,o.empty(this.colInputRoot)),this.colInput=this.getColInput(),e&&Array.from(this.colInput.root.children).forEach((e=>this.colInputRoot.append(e))),this.onColumnInputChanged()}onTableInputChanged(){const e=this.tableInput.value;e&&(this.columnFunctionsMap={},e.columns.toList().forEach((e=>{Object.keys(this.supportedFunctions).forEach((t=>{const s=this.supportedFunctions[t].semTypes,n=this.supportedFunctions[t].types,r=this.supportedFunctions[t].units,i=!s.length||e.semType&&s.includes(e.semType),o=!n.length||n.includes(e.type),l=!r.length||e.getTag(a.TAGS.UNITS)&&r.includes(e.getTag(a.TAGS.UNITS));i&&o&&l&&(this.columnFunctionsMap[e.name]||(this.columnFunctionsMap[e.name]=[]),this.columnFunctionsMap[e.name].push(t))}))})),this.regenerateColInput())}onColumnInputChanged(){const e=this.colInput.value;if(!e)return;const t=this.columnFunctionsMap[e.name];this.preprocessingFunctionInput=o.choiceInput("Preprocessing function",t[0],t,(()=>{this.onPreprocessingFunctionChanged()}));let s=!1;this.preprocessingFunctionInputRoot||(this.preprocessingFunctionInputRoot=this.preprocessingFunctionInput.root,s=!0),s||(o.empty(this.preprocessingFunctionInputRoot),Array.from(this.preprocessingFunctionInput.root.children).forEach((e=>this.preprocessingFunctionInputRoot.append(e)))),this.onPreprocessingFunctionChanged()}onPreprocessingFunctionChanged(){o.empty(this.preprocessingFuncSettingsDiv),this.preprocessingFunctionSettings={};const e=this.preprocessingFunctionInput.value,t=this.supportedFunctions[e].distanceFunctions;this.availableMetrics=[...t],this.similarityMetricInput=o.choiceInput("Similarity",this.availableMetrics[0],this.availableMetrics,null),this.similarityMetricInput.nullable=!1,this.similarityMetricInputRoot||(this.similarityMetricInputRoot=this.similarityMetricInput.root),o.empty(this.similarityMetricInputRoot),Array.from(this.similarityMetricInput.root.children).forEach((e=>this.similarityMetricInputRoot.append(e))),this.preprocessingFuncSettingsIcon&&(this.supportedFunctions[e].func.inputs.length<3?this.preprocessingFuncSettingsIcon.style.display="none":this.preprocessingFuncSettingsIcon.style.display="flex")}createAlgorithmSettingsDiv(e,t){return o.empty(e),Object.keys(t).forEach((s=>{const n=t[s],r="string"===n.type?o.stringInput(n.uiName,n.value??"",(()=>{n.value=r.value})):o.floatInput(n.uiName,n.value,(()=>{n.value=r.value}));o.tooltip.bind(r.input??r.root,n.tooltip),e.append(r.root)})),e}async createPreprocessingFuncParamsDiv(e,t){if(o.empty(e),t.inputs.length<3)return o.div();const s=t.prepare(),n=await s.buildEditor(o.div());for(let r=2;r<t.inputs.length;r++){const i=t.inputs[r];(this.preprocessingFunctionSettings[i.name]||s.inputParams[t.inputs[r].name].value||i.defaultValue)&&(this.preprocessingFunctionSettings[i.name]=this.preprocessingFunctionSettings[i.name]??s.inputParams[i.name].value??i.defaultValue);const o=n.find((e=>e.property.name===i.name));o&&(null!==this.preprocessingFunctionSettings[i.name]&&void 0!==this.preprocessingFunctionSettings[i.name]&&(o.value=this.preprocessingFunctionSettings[i.name]),o.onChanged((()=>{this.preprocessingFunctionSettings[i.name]=o.value})),e.append(o.root))}return e}getEditor(){return o.div([this.tableInput,this.colInputRoot,this.preprocessingFunctionInputRoot,this.preprocessingFuncSettingsDiv,this.methodInput,this.methodSettingsDiv,this.similarityMetricInputRoot,this.plotEmbeddingsInput,this.clusterEmbeddingsInput,this.dbScanSettingsDiv],{style:{minWidth:"320px"},classes:"ui-form"})}getParams(){return{table:this.tableInput.value,col:this.colInput.value,methodName:this.methodInput.value,preprocessingFunction:this.supportedFunctions[this.preprocessingFunctionInput.value].func,similarityMetric:this.similarityMetricInput.value,plotEmbeddings:this.plotEmbeddingsInput.value,clusterEmbeddings:this.clusterEmbeddingsInput.value,options:{...this.algorithmOptions,...this.dbScanOptions,preprocessingFuncArgs:this.preprocessingFunctionSettings??{}}}}}var f=s(442),g=s(5697),y=s(701),b=s(3379),v=s.n(b),w=s(7795),C=s.n(w),S=s(569),x=s.n(S),A=s(3565),E=s.n(A),_=s(9216),T=s.n(_),I=s(4589),$=s.n(I),M=s(9414),N={};N.styleTagTransform=$(),N.setAttributes=E(),N.insert=x().bind(null,"head"),N.domAPI=C(),N.insertStyleElement=T(),v()(M.Z,N),M.Z&&M.Z.locals&&M.Z.locals;const L=e=>null==e;function P(e,t,s,n){if(s>e[e.length-1])return;const r=e.findIndex((e=>s<e));e.pop(),e.splice(r,0,s),t.pop(),t.splice(r,0,n)}var O=s(6254);class R{_workers;_workerCount;_terminateOnComplete;constructor(e=!0,t=!0){const n=navigator.hardwareConcurrency;this._workerCount=e?Math.max(n-2,1):1,this._workers=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(s.p+s.u(65),s.b)))),this._terminateOnComplete=t}async calc(e,t,s=!0,r){return await this.calcMulti([e],[t],s,[r??{}],[1],n.MANHATTAN)}async calcMulti(e,t,s=!0,r=[{}],i=[1],o=n.MANHATTAN){if(e.length<1)throw new Error("values must contain at least one array");if(t.length!==e.length||r.length!==e.length||i.length!==e.length)throw new Error("values, fnNames, weights and opts must have the same length");return new Promise((async(n,a)=>{try{const a=e[0].length,l=new Array(this._workerCount),c=a*(a-1)/2;this._workerCount=Math.min(this._workerCount,c);const h=c/this._workerCount,u=new Float32Array(c);let d=0,p=1,m=0,f=Number.MIN_VALUE;for(let s=0;s<this._workerCount;s++){const n=Math.floor(s*h),g=s===this._workerCount-1?c:Math.floor((s+1)*h),y=d,b=p;s!==this._workerCount-1&&(d=a-2-Math.floor(Math.sqrt(-8*g+4*a*(a-1)-7)/2-.5),p=g-a*d+Math.floor((d+1)*(d+2)/2)),this._workers[s].postMessage({values:e,fnNames:t,startRow:y,startCol:b,chunckSize:g-n,opts:r,weights:i,aggregationMethod:o}),l[s]=new Promise(((e,t)=>{this._workers[s].onmessage=({data:{error:r,distanceMatrixData:i,min:o,max:a}})=>{this._terminateOnComplete&&setTimeout((()=>this._workers[s].terminate())),r?t(r):(u.set(i,n),o<m&&(m=o),a>f&&(f=a),e())}}))}await Promise.all(l),s&&u.forEach(((e,t)=>{u[t]=(e-m)/(f-m)})),n(u)}catch(e){a(e)}}))}terminate(){this._workers.forEach((e=>e.terminate()))}}class k{_workerCount;constructor(){this._workerCount=Math.max(navigator.hardwareConcurrency-2,1)}async calcMultiColumn(e,t,r,i=[{}],o=[1],a=n.EUCLIDEAN){const l=e[0].length*(e[0].length-1)/2,c=Math.floor(l/this._workerCount),h=e[0].length>2e4?await this.getMinimalThreshold(e,t,i,o,a):0;r<h&&(console.log(`using threshold ${h}`),r=h),i.forEach(((e,t)=>i[t].threshold=r));const u=new Array(this._workerCount),d=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(s.p+s.u(23),s.b))));for(let s=0;s<this._workerCount;s++)u[s]=new Promise(((n,h)=>{const u=s*c,p=s===this._workerCount-1?l:(s+1)*c;p<=u&&n({i:new Int32Array(0),j:new Int32Array(0),distance:new Float32Array(0),idx:s}),d[s].postMessage({values:e,startIdx:u,endIdx:p,threshold:r,fnNames:t,opts:i,weights:o,aggregationMethod:a}),d[s].onmessage=({data:{error:e,i:t,j:r,distance:i}})=>{e?(d[s].terminate(),h(e)):(d[s].terminate(),n({i:t,j:r,distance:i,idx:s}))}}));const p=await Promise.all(u),m=p.reduce(((e,t)=>e+t.i.length),0),f=new Int32Array(m),g=new Int32Array(m),y=new Float32Array(m);let b=0;for(const e of p)f.set(e.i,b),g.set(e.j,b),y.set(e.distance,b),b+=e.i.length;return{i:f,j:g,distance:y}}async calc(e,t,s,n={}){return await this.calcMultiColumn([e],[t],s,[n],[1])}async getKNN(e,t,s=15,n={}){return await this.multiColumnKNN([e],[t],s,[n],[1])}async getThresholdKNN(e,t,s=.8,n={}){return await this.multiColumnThresholdKnn([e],[t],s,[n],[1])}async multiColumnThresholdKnn(e,t,r=.8,i,o,a=n.EUCLIDEAN){if(e.length!==t.length||e.length!==i.length||e.length!==o.length)throw new Error("values, distance functions, options and weights arrays should have the same length");if(e.some((t=>t.length!==e[0].length)))throw new Error("all values arrays should have the same length");const l=e[0].length*(e[0].length-1)/2,c=Math.floor(l/this._workerCount),h=new Array(this._workerCount),u=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(s.p+s.u(427),s.b))));for(let s=0;s<this._workerCount;s++)h[s]=new Promise(((n,h)=>{const d=s*c,p=s===this._workerCount-1?l:(s+1)*c;p<=d&&n({knnDistances:new Array(0),knnIndexes:new Array(0)}),u[s].postMessage({values:e,startIdx:d,endIdx:p,fnNames:t,opts:i,threshold:r,weights:o,aggregationMethod:a}),u[s].onmessage=({data:{error:e,knnDistances:t,knnIndexes:r}})=>{e?(u[s].terminate(),h(e)):(u[s].terminate(),n({knnDistances:t,knnIndexes:r}))}}));const d=await Promise.all(h),p=new Int32Array(e[0].length);for(const t of d)for(let s=0;s<e[0].length;++s)p[s]+=t.knnIndexes[s]?.length??0;const m={knnDistances:new Array(e[0].length).fill(null).map(((e,t)=>new Array(p[t]))),knnIndexes:new Array(e[0].length).fill(null).map(((e,t)=>new Array(p[t])))};for(const t of d)for(let s=0;s<e[0].length;++s)for(let e=0;e<t.knnDistances[s]?.length;++e)m.knnDistances[s][p[s]-1]=t.knnDistances[s][e],m.knnIndexes[s][p[s]-1]=t.knnIndexes[s][e],p[s]-=1;return m}async multiColumnKNN(e,t,r=15,i,o,a=n.EUCLIDEAN){if(e.length!==t.length||e.length!==i.length||e.length!==o.length)throw new Error("values, distance functions, options and weights arrays should have the same length");if(e.some((t=>t.length!==e[0].length)))throw new Error("all values arrays should have the same length");const l=e[0].length*(e[0].length-1)/2,c=Math.floor(l/this._workerCount),h=new Array(this._workerCount),u=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(s.p+s.u(282),s.b))));for(let s=0;s<this._workerCount;s++)h[s]=new Promise(((n,h)=>{const d=s*c,p=s===this._workerCount-1?l:(s+1)*c;p<=d&&n({knnDistances:new Array(0),knnIndexes:new Array(0)}),u[s].postMessage({values:e,startIdx:d,endIdx:p,fnNames:t,opts:i,nNeighbours:r,weights:o,aggregationMethod:a}),u[s].onmessage=({data:{error:e,knnDistances:t,knnIndexes:r}})=>{e?(u[s].terminate(),h(e)):(u[s].terminate(),n({knnDistances:t,knnIndexes:r}))}}));const d=await Promise.all(h),p={knnDistances:new Array(e[0].length).fill(null).map((()=>new Array(r).fill(99999))),knnIndexes:new Array(e[0].length).fill(null).map((()=>new Array(r).fill(-1)))};for(const t of d)for(let s=0;s<e[0].length;++s)for(let e=0;e<t.knnDistances[s]?.length;++e)P(p.knnDistances[s],p.knnIndexes[s],t.knnDistances[s][e],t.knnIndexes[s][e]);return p}async getSampleDistances(e,t,r=[],i,o=n.EUCLIDEAN){const a=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(s.p+s.u(40),s.b))));try{const s=e[0].length*(e[0].length-1)/2,n=Math.floor(s/this._workerCount),l=1e6,c=Math.max(Math.min(s/1e3,l),Math.min(s,l)),h=Math.floor(c/this._workerCount),u=new Array(this._workerCount);for(let l=0;l<this._workerCount;l++)u[l]=new Promise(((c,u)=>{const d=l*n,p=l===this._workerCount-1?s:(l+1)*n;a[l].postMessage({values:e,startIdx:d,endIdx:p,sampleLength:h,fnNames:t,opts:r,weights:i,aggregationMethod:o}),a[l].onmessage=({data:{error:e,distance:t}})=>{a[l].terminate(),e?u(e):c({distance:t})}}));const d=await Promise.all(u),p=d.reduce(((e,t)=>e+t.distance.length),0),m=new Float32Array(p);let f=0;for(const e of d)m.set(e.distance,f),f+=e.distance.length;return m.sort(),m}catch(e){return a?.forEach((e=>e?.terminate())),console.error(e),new Float32Array(1).fill(.5)}}async getMinimalThreshold(e,t,s=[],r,i=n.EUCLIDEAN){try{const n=e.length*(e.length-1)/2,o=await this.getSampleDistances(e,t,s,r,i);return 1-o[Math.floor(7e7/n*o.length)]}catch(e){return console.error(e),.5}}static calcSync(e,t,s,n){const r=[],i=[],o=[];let a=0,l=0,c=0;const h=e.length*(e.length-1)/2;for(;a<h;){const t=L(e[l])||L(e[c])?1:s(e[l],e[c]);1-t>=n&&(r.push(l),i.push(c),o.push(t)),a++,c++,c===e.length&&(l++,c=l+1)}return{i:new Int32Array(r),j:new Int32Array(i),distance:new Float32Array(o)}}}var F,G=s(9657);!function(e){e.none="none",e.bold="bold",e.dashed="dashed"}(F||(F={}));class D{get currentLineId(){return this._currentLineIdx}set currentLineId(e){e!==this._currentLineIdx&&(this._currentLineIdx=e,this.sp.render(this.ctx))}set linesToRender(e){this.updateLines(e),this.sp.render(this.ctx)}set linesVisibility(e){this.visibility=e,this.sp.render(this.ctx)}constructor(e,t,s,n,r=F.none){var i;this._currentLineIdx=-1,this.lineClicked=new y.Subject,this.lineHover=new y.Subject,this.mouseOverLineId=-1,this.arrowWidth=15,this.sp=e,this.xAxisCol=this.sp.dataFrame.columns.byName(t),this.yAxisCol=this.sp.dataFrame.columns.byName(s),this.canvas=this.sp.getInfo().canvas,this.ctx=this.canvas.getContext("2d"),this.currentLineStyle=r,this.updateLines(n),this.visibility=null!==(i=n.visibility)&&void 0!==i?i:new G.Z(this.lines.from.length),n.visibility||this.visibility.setAll(!0,!1),n.arrowSize&&(this.arrowWidth=n.arrowSize),this.canvas.onmousedown=e=>{-1!==this.mouseOverLineId&&this.lineClicked.next({x:e.clientX,y:e.clientY,id:this.mouseOverLineId,event:e})},this.canvas.onmousemove=e=>{this.mouseOverLineId=this.checkCoordsOnLine(e.offsetX,e.offsetY),-1!==this.mouseOverLineId&&this.lineHover.next({x:e.clientX,y:e.clientY,id:this.mouseOverLineId,event:e})},e.onEvent("d4-before-draw-scene").subscribe((e=>{this.renderLines()}))}updateLines(e){this.lines=e,this.multipleLinesCounts=new Uint8Array(this.lines.from.length),e.skipMultiLineCalculation?this.multipleLinesCounts.fill(0):this.createMultiLinesIndices()}renderLines(){var e,t,s,n,r,i,o,a,l,c,h,u,d;const p=this.sp.getOptions().look,m=this.lines.colors||this.lines.width||this.lines.opacities||this.lines.drawArrowsArr;m||(this.ctx.lineWidth=null!==(e=this.lines.width)&&void 0!==e?e:1,this.ctx.strokeStyle=`rgba(${null!==(t=this.lines.color)&&void 0!==t?t:"0,128,0"},${null!==(s=this.lines.opacity)&&void 0!==s?s:1})`);const f=p.sizeColumnName?this.sp.dataFrame.col(p.sizeColumnName):null,g=this.sp.dataFrame.filter;for(let e=0;e<this.lines.from.length;e++)if(g.get(this.lines.from[e])&&g.get(this.lines.to[e])&&this.visibility.getBit(e)){let t=0;const{sizeFrom:s,sizeTo:g}=this.getMarkersSizes(p,f,e),y=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[e]),this.yAxisCol.get(this.lines.from[e]));let b=null==y?void 0:y.x,v=null==y?void 0:y.y;const w=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[e]),this.yAxisCol.get(this.lines.to[e]));let C=null==w?void 0:w.x,S=null==w?void 0:w.y;const x=Math.min(this.sp.viewBox.width,this.sp.viewBox.height);if(this.ctx.beginPath(),b&&v&&C&&S&&Math.hypot(C-b,S-v)/x>.01){if(m){const t=(null===(n=this.lines.colors)||void 0===n?void 0:n[e])?null===(r=this.lines.colors)||void 0===r?void 0:r[e]:"0,128,0",s=(null===(i=this.lines.opacities)||void 0===i?void 0:i[e])?null===(o=this.lines.opacities)||void 0===o?void 0:o[e]:1;this.ctx.strokeStyle=`rgba(${t},${s})`,this.ctx.lineWidth=(null===(a=this.lines.widths)||void 0===a?void 0:a[e])?null===(l=this.lines.widths)||void 0===l?void 0:l[e]:1}e===this._currentLineIdx&&this.toggleCurrentLineStyle(!0);const p=this.multipleLinesCounts[e];let f=null;if(p){t=this.getLineLength(b,v,C,S);const n=this.getPointOnDistance(b,v,C,S,g,t),r=this.getPointOnDistance(C,S,b,v,s,t);b=n.x,v=n.y,C=r.x,S=r.y,f=this.lines.from[e]>this.lines.to[e]?this.findControlPoint(p,b,v,C,S,e):this.findControlPoint(p,C,S,b,v,e),this.ctx.moveTo(b,v),this.ctx.quadraticCurveTo(f.x,f.y,C,S)}else this.ctx.moveTo(b,v),this.ctx.lineTo(C,S);if((null!==(c=this.lines.drawArrows)&&void 0!==c?c:null===(h=this.lines.drawArrowsArr)||void 0===h?void 0:h.getBit(e))&&(t||(t=this.getLineLength(b,v,C,S)),t>this.arrowWidth)){const e=p?null:this.getPointOnDistance(b,v,C,S,g,t),s=p?f.x:b,n=p?f.y:v;this.canvasArrow(this.ctx,null!==(u=null==e?void 0:e.x)&&void 0!==u?u:b,null!==(d=null==e?void 0:e.y)&&void 0!==d?d:v,s,n)}this.ctx.stroke(),this.ctx.closePath(),e===this._currentLineIdx&&this.toggleCurrentLineStyle(!1)}}this.fillLeftBottomRect()}toggleCurrentLineStyle(e){switch(this.currentLineStyle){case F.bold:e?this.ctx.lineWidth+=2:this.ctx.lineWidth-=2;break;case F.dashed:e?this.ctx.setLineDash([5,5]):this.ctx.setLineDash([]);break;default:return}}getMarkersSizes(e,t,s){let n=3,r=3;return t?(n=(e.markerMinSize+(e.markerMaxSize-e.markerMinSize)*t.scale(this.lines.from[s]))/2,r=(e.markerMinSize+(e.markerMaxSize-e.markerMinSize)*t.scale(this.lines.to[s]))/2):e.markerDefaultSize&&(n=e.markerDefaultSize/2,r=e.markerDefaultSize/2),{sizeFrom:n,sizeTo:r}}fillLeftBottomRect(){const e=new Path2D;e.rect(this.sp.yAxisBox.minX,this.sp.yAxisBox.maxY,this.sp.yAxisBox.width,this.sp.xAxisBox.height),this.ctx.fillStyle="white",this.ctx.beginPath(),this.ctx.fill(e),this.ctx.closePath()}createMultiLinesIndices(){const e=new G.Z(this.lines.from.length);e.setAll(!0);for(let t=-1;-1!==(t=e.findNext(t));){const s=t,n=this.lines.from[s],r=this.lines.to[s];let i=1;for(let s=t;-1!==(s=e.findNext(s));){const t=this.lines.from[s],o=this.lines.to[s];(t===n&&o===r||o===n&&t===r)&&(this.multipleLinesCounts[s]=++i,e.setBit(s,!1,!1))}i>1&&(this.multipleLinesCounts[s]=1),e.setBit(t,!1,!1)}}checkCoordsOnLine(e,t){let s=-1,n=null,r=null;const i=this.sp.getOptions().look,o=i.sizeColumnName?this.sp.dataFrame.col(i.sizeColumnName):null,a=this.sp.dataFrame.filter;for(let l=0;l<this.lines.from.length;l++)if(a.get(this.lines.from[l])&&a.get(this.lines.to[l])&&this.visibility.getBit(l)){const{sizeFrom:a,sizeTo:c}=this.getMarkersSizes(i,o,l),h=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[l]),this.yAxisCol.get(this.lines.from[l])),u=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[l]),this.yAxisCol.get(this.lines.to[l]));if(this.multipleLinesCounts[l]){const s=this.getLineLength(h.x,h.y,u.x,u.y),n=this.getPointOnDistance(h.x,h.y,u.x,u.y,c,s),i=this.getPointOnDistance(u.x,u.y,null==h?void 0:h.x,null==h?void 0:h.y,a,s),o=this.lines.from[l]>this.lines.to[l]?this.findControlPoint(this.multipleLinesCounts[l],n.x,n.y,i.x,i.y,l):this.findControlPoint(this.multipleLinesCounts[l],i.x,i.y,n.x,n.y,l);r=this.calculateDistToCurveLine(l,e,t,n,i,o)}else r=this.calculateDistToStraightLine(e,t,h,u);(!n&&null!==r&&r<5||n&&null!==r&&r<n)&&(n=r,s=l)}return s}calculateDistToStraightLine(e,t,s,n){const r=Math.min(s.x,n.x),i=Math.max(s.x,n.x),o=Math.min(s.y,n.y),a=Math.max(s.y,n.y);return e>=r-2&&e<=i+2&&t>=o-2&&t<=a+2?this.distToStraightLineSegment(e,t,s,n):null}distToStraightLineSegment(e,t,s,n){const r=(e,t,s,n)=>Math.pow(e-s,2)+Math.pow(t-n,2),i=r(s.x,s.y,n.x,n.y);if(0==i)return r(e,t,s.x,s.y);let o=((e-s.x)*(n.x-s.x)+(t-s.y)*(n.y-s.y))/i;return o=Math.max(0,Math.min(1,o)),r(e,t,s.x+o*(n.x-s.x),s.y+o*(n.y-s.y))}calculateDistToCurveLine(e,t,s,n,r,i){const o=Math.min(n.x,r.x,i.x),a=Math.max(n.x,r.x,i.x),l=Math.min(n.y,r.y,i.y),c=Math.max(n.y,r.y,i.y);if(t>=o-2&&t<=a+2&&s>=l-2&&s<=c+2){const e=a-o,h=c-l;return this.calculateDistToCurveInRect(t,s,n,i,r,e,h)}return null}calculateDistToCurveInRect(e,t,s,n,r,i,o){const a=Math.floor((i+o)/3),l=1/a,c=new Uint32Array(a),h=new Uint32Array(a),u=new Uint32Array(a);let d=null;const p=new G.Z(a);for(let i=0;i<c.length;i++){const o=i*l,a=Math.pow(1-o,2)*s.x+2*o*(1-o)*n.x+Math.pow(o,2)*r.x,p=Math.pow(1-o,2)*s.y+2*o*(1-o)*n.y+Math.pow(o,2)*r.y,m=Math.abs(e-a),f=Math.abs(t-p),g=m+f;(!d||d>g)&&(d=g),u[i]=Math.max(m,f),c[i]=a,h[i]=p}for(let e=0;e<c.length;e++)u[e]<d&&p.setBit(e,!0,!1);let m=null;for(let s=-1;-1!==(s=p.findNext(s));){const n=Math.hypot(c[s]-e,h[s]-t);(!m||m>n)&&(m=n)}return m}getLineLength(e,t,s,n){return Math.sqrt(Math.pow(s-e,2)+Math.pow(n-t,2))}getPointOnDistance(e,t,s,n,r,i){const o=s-r*((s-e)/i),l=n-r*((n-t)/i);return new a.Point(o,l)}findControlPoint(e,t,s,n,r,i){const o=t+(n-t)/2,l=s+(r-s)/2;let c=o-t,h=l-s;const u=Math.sqrt(c*c+h*h);c/=u,h/=u;const d=50*Math.ceil(e/2);return e%2==0?new a.Point(o+d/2*h,l-d/2*c):new a.Point(o-d/2*h,l+d/2*c)}canvasArrow(e,t,s,n,r){const i=Math.atan2(n-t,r-s)+Math.PI;e.moveTo(t-this.arrowWidth*Math.sin(i-Math.PI/10),s-this.arrowWidth*Math.cos(i-Math.PI/10)),e.lineTo(t,s),e.lineTo(t-this.arrowWidth*Math.sin(i+Math.PI/10),s-this.arrowWidth*Math.cos(i+Math.PI/10))}}const V="dimensionality-reducer-terminate-event";var B=s(850);async function H(e,t,n,r,o,a,l){let c=await async function(e,t,n,r,o,a,l){if(!a.distanceFnArgs)throw new Error("options.distanceFnArgs must be defined");if(e.length!==t.length||e.length!==a.distanceFnArgs.length||e.length!==r.length)throw new Error("data, metrics and options and weights must have the same length");return new Promise((function(c,h){const u=new Worker(new URL(s.p+s.u(42),s.b));u.postMessage({columnsData:e,distanceMetrics:t,method:n,options:a,weights:r,aggregationMethod:o});const d=i.events.onCustomEvent(V).subscribe((()=>{try{u?.terminate()}finally{d.unsubscribe()}}));u.onmessage=({data:{error:e,embedding:t,epochNum:s,epochsLength:n}})=>{L(s)||L(n)?(d.unsubscribe(),e?h(e):c(t),setTimeout((()=>u.terminate()),100)):l&&l(s,n,t)}}))}(e,n,t,r,o,a,l);return c=c.map((e=>(0,B.Fv)(e))),c}let j=0;const W="cliffsDf",U=new y.Subject,Z="activity_difference",Y="SALI_index",K="similarity",q="line_index",z=["1_molecule","2_molecule"],X="filterCliffs";var J,Q=s(499),ee=s(5226),te=s(7228),se=s(8457),ne=s(8260);async function re(e,t,s,n){const r=(0,se.O)(t),i=(0,ne.vU)(t.getTag(a.TAGS.UNITS),t.getTag("separator"))(s),o=n===J.IDENTITY?function(e,t){const s=t.columns.length,n=new Array(s),r=new Array(s),i=new Array(s);for(let o=0;o<s;++o){const s=t.columns.byIndex(o);n[o]=s.getRawData(),r[o]=s.categories.indexOf(""),i[o]=s.categories.indexOf(e[o]??"")}const o=a.Column.float("Identity",t.rowCount),l=o.getRawData();for(let s=0;s<t.rowCount;++s){l[s]=0;for(let t=0;t<e.length;++t)n[t][s]===i[t]&&++l[s];l[s]/=e.length}return o}(i,r):n===J.SIMILARITY?await async function(e,t){const s=t.columns.toList();return await(0,te.Qx)(s,e)}(i,r):null;if(null===o)throw new Error(`In bio library: Unkown sequence scoring method: ${n}`);return o.name=e.columns.getUnusedName(o.name),e.columns.add(o),o}!function(e){e.IDENTITY="identity",e.SIMILARITY="similarity"}(J||(J={}));var ie=s(7945),oe=s(4293),ae=s(6414),le=s.n(ae);const ce="rgb(100,100,100)",he="#808080",ue="rgb(0,0,0)",de=ne.GU;var pe,me;function fe(e,t,s,n,r,i,o=ce,a=0,l=!1,c=1,h="",u=!1,d=me.classic,p=[],m=0,f=null,g=[],y=null,b={}){r.textAlign="start";let v=i.substring(0),w=u?"":h;d===me.MSA&&(w="");let C=!0,S=!0,x="difference";null!=f&&null!=f.cell.column&&(C=f.cell.column.temp["color-code"]??!0,S=f.cell.column.temp["compare-with-current"]??!0,x=f.cell.column.temp["highlight-difference"]??"difference");const A=g[m];S&&g.length>0&&"difference"===x&&(c=v==A?.3:c),S&&g.length>0&&"equal"===x&&(c=v!=A?.3:c),null!=y&&(v=de(v,y));const E=v+w;b[E]??(b[E]=r.measureText(E));let _=b[E];b[v]??(b[v]=r.measureText(v));let T=b[v].width;b[w]??(b[w]=r.measureText(w));const I=b[w].width,$=n/2-(_.fontBoundingBoxAscent+_.fontBoundingBoxDescent)/2+1;function M(s,n){const i=C?o:ue;r.fillStyle=i,r.globalAlpha=c,d===me.classic&&(r.fillText(v,e+s,t+$),r.fillStyle=he,r.fillText(w,e+n,t+$)),d===me.MSA&&r.fillText(v,e+s,t+$)}_=_.width,d===me.MSA&&(T=p[m],_=p[m]);const N=(p[m]??0)-(p[0]??0);if(l||_>s)return M(N,N+T),e+N+T+I;{const t=(s-_)/2;return M(t,t+T),e+N+t+T}}!function(e){e.maxMonomerLength=".mm.cellRenderer.maxMonomerLength"}(pe||(pe={})),function(e){e.MSA="MSA",e.classic="classic"}(me||(me={}));var ge,ye=s(9611),be=s(8447),ve=s(7331);!function(e){e.long="long",e.short="short"}(ge||(ge={}));const we={true:"1",false:"0"};var Ce=s(3553);const Se="rgb(100,100,100)",xe=be.GU;function Ae(e,t,s,n,r){return e?Math.max(Math.min(e.canvas.width/r-s,n)):Math.max(t.canvas.width/r-s,0)}function Ee(e){const t=!le().enumerate(e).some((([t,s])=>t.length>1&&0!=s&&s!=e.length-1)),s=[],n=t?"":" ";for(const[t,r]of le().enumerate(e)){let i=t;r<e.length&&(i+=`${t?"":"-"}${n}`),s.push(i)}return[s,t]}class _e extends a.GridCellRenderer{constructor(){super(...arguments),this.padding=5}get name(){return"sequence"}get cellType(){return"sequence"}get defaultHeight(){return 30}get defaultWidth(){return 230}onClick(e,t){e.cell.column.temp["current-word"]=e.cell.value,e.grid.invalidate()}onMouseMove(e,t){const s=e.cell.column.temp["bio-seqCol"];if(!s)return;const n=e.bounds,r=t.offsetX-e.gridColumn.left+(e.gridColumn.left-n.x),a=s.getPosition(e.tableRowIndex,r),l=s.getSeqMonList(e.tableRowIndex);if(null!==a&&a<l.length){const e=l[a],n=[o.div(e)];if(s._monomerStructureMap[e])n.push(s._monomerStructureMap[e]);else{const t=s.getMonomer(e);if(t){const r={autoCrop:!0,autoCropMargin:0,suppressChiralText:!0},o=i.chem.svgMol(t.smiles,void 0,void 0,r);n.push(o),s._monomerStructureMap[e]=o}}o.tooltip.show(o.divV(n),t.x+16,t.y+16)}else o.tooltip.hide()}render(e,t,s,n,r,i,o){let l,c=0,h=50;try{l=i.grid}catch(e){l=void 0;const[t,s]=(0,ie.yf)(e);Is.logger.error(t,void 0,s)}const u=i.cell.column;if(!l||!u)return;const d=u.temp,p=d["monomer-width"];if("short"===(null!=p?p:"short")){const e=parseInt(u.getTag(pe.maxMonomerLength));h=(isNaN(e)?Is.properties?.MaxMonomerLength:e)??4}let m=u.temp["bio-seqCol"];m||(m=new ye.A(l,u,(()=>{const e=Q.Cn.getOrCreate(u);return{unitsHandler:e,monomerCharWidth:7,separatorWidth:e.isMsa()?8:c,monomerToShort:xe,monomerLengthLimit:h,monomerLib:Os()}}))),u.tags[".mm.cellRenderer.settingsChanged"]===we.true&&(c=d[".mm.cellRenderer.gapLength"]??c,m.setMonomerLengthLimit(h),m.setSeparatorWidth(m.isMsa()?8:c),u.setTag(".mm.cellRenderer.settingsChanged",we.false));const[f,g]=m.getCellMonomerLengths(i.tableRowIndex);f.length,m.updated&&(d["bio-seqCol"]=m),e.save();try{const o=window.devicePixelRatio,l=-1!==i.gridRow?i.grid:null,c=i.cell.value,p=u.getTag("alphabet"),f=50;n=Ae(l,e,t,n,o),e.beginPath(),e.rect(t+this.padding,s+this.padding,n-this.padding-1,r-2*this.padding),e.clip(),e.font="12px monospace",e.textBaseline="top";const y=u.getTag(a.TAGS.UNITS),b=u.getTag("aligned"),v=(0,be.py)(p),w=u.getTag("separator")??"",C=n/5,S=Q.Cn.getOrCreate(u).getSplitter(C),x=d["reference-sequence"],A=d["current-word"];A&&-1===u?.dataFrame?.currentRowIdx&&(d["current-word"]=null);const E=S(null!=x&&""!=x?x:A??""),_=S(c);let T=Se,I=me.classic;b&&b.includes("MSA")&&y==be.r2.SEPARATOR&&(I=me.MSA);for(const[o,a]of le().enumerate(_)){T=v.get(o),e.fillStyle=Se;const l=a===_.length-1;if(fe(t+this.padding,s,n,r,e,o,T,0,!0,1,w,l,I,g,a,i,E,h,m._monomerLengthMap),f>n)break}}catch(e){const t=e instanceof Error?e.message:e?e.toString():"Error 'undefined'";Is.logger.error(`Bio: MacromoleculeSequenceCellRenderer.render() error: ${t}`)}finally{e.restore()}}}class Te extends a.GridCellRenderer{get name(){return"MacromoleculeDifferenceCR"}get cellType(){return Ce.Of.MACROMOLECULE_DIFFERENCE}get defaultHeight(){return 30}get defaultWidth(){return 230}render(e,t,s,n,r,i,o){const l=window.devicePixelRatio,c=i.grid,h=i.cell,u=i.tableColumn,d=h.value??"",p=u.tags.separator,m=u.tags[a.TAGS.UNITS];n=Ae(c,e,t,n,l);const[f,g]=d.split("#"),y=(0,ne.vU)(m,p);Ie(e,t,s,n,r,y(f),y(g),m)}}function Ie(e,t,s,n,r,i,o,a,l,c){if(i.length!==o.length){const e=function(e,t){let s=0,n=0;const r=e.length>t.length?e:t,i=e.length>t.length?t:e;for(let e=0;e<i.length;e++)r[e]===i[e]&&s++;const o=r.length-i.length;for(let e=r.length-1;e>o;e--)r[e]===i[e-o]&&n++;const a=new Array(Math.abs(e.length-t.length)).fill("");function l(e){return s>n?e.concat(a):a.concat(e)}return e.length>t.length?t=l(t):e=l(e),{subParts1:e,subParts2:t}}(le()(i).toArray(),le()(o).toArray());i=e.subParts1,o=e.subParts2}const h=e.measureText(Ee(i).join("")),u=e.measureText(Ee(o).join("")),d=Math.max(h.width,u.width);l&&(n=d+4*i.length,e.canvas.width=d+4*i.length);let p=Math.max(t,t+(n-(d+4*i.length))/2)+5;const m=Math.max(s,s+(r-28)/2);e.save(),e.beginPath(),e.rect(t,s,l?d+4*i.length:n,r),e.clip(),e.font="12px monospace",e.textBaseline="top";let f=ve.UE.Color;"HELM"!=a&&(f=(0,be.py)(a.substring(a.length-2)));for(let t=0;t<i.length;t++){const s=i[t],a=o[t],l=f.get(s);if(s!=a){const i=f.get(a),o=fe(p,m-7,n,r,e,s,l,0,!0),h=fe(p,m+7,n,r,e,a,i,0,!0);p=Math.max(h,o),c&&(c[t]=$e(s,a,l,i,m,7,r))}else p=fe(p,m,n,r,e,s,l,0,!0,.5);p+=4}e.restore()}function $e(e,t,s,n,r,i,o){const a=document.createElement("canvas"),l=a.getContext("2d");l.font="12px monospace";const c=l.measureText(Ee([e]).join("")).width,h=l.measureText(Ee([t]).join("")).width,u=Math.max(c,h);return a.height=o,a.width=u+4,l.font="12px monospace",l.textBaseline="top",fe(0,r-i,u,o,l,e,s,0,!0),fe(0,r+i,u,o,l,t,n,0,!0),a}var Me,Ne=s(8467),Le=s(9298);!function(e){e.Unknown="unknown",e.FR="framework",e.CDR="cdr"}(Me||(Me={}));const Pe=new class{constructor(){this.regionTypes=[Me.CDR],this.chains=["Heavy","Light"],this.skipEmptyPositions=!1,this.fitWidth=!1,this.positionWidth=16,this.positionHeight=Le.ES.Entropy,this.filterSource=Le.vS.filterSource}};var Oe=s(172),Re=s(8415);const ke=Me;var Fe,Ge;!function(e){e.STYLE="Style",e.BEHAVIOR="Behavior",e.LAYOUT="Layout",e.DATA="Data"}(Fe||(Fe={})),function(e){e.skipEmptyPositions="skipEmptyPositions",e.regionTypes="regionTypes",e.chains="chains",e.fitWidth="fitWidth",e.positionWidth="positionWidth",e.positionHeight="positionHeight",e.filterSource="filterSource"}(Ge||(Ge={}));const De=Pe;class Ve extends a.JsViewer{constructor(){super(),this.viewed=!1,this.regionsFg=null,this.regionsRoot=null,this.isOpened=!1,this.panelNode=null,this.regions=[],this.viewerId=++Ve.viewerCounter,this.setDataInProgress=!1,this.host=null,this.mainLayout=null,this.logos=[],this.viewSubs=[],this.calcSizeRequested=!1,this._onRendered=new y.Subject,this.skipEmptyPositions=this.bool(Ge.skipEmptyPositions,De.skipEmptyPositions,{category:Fe.DATA}),this.regionTypes=this.stringList(Ge.regionTypes,De.regionTypes,{category:Fe.DATA,choices:Object.values(ke).filter((e=>e!=ke.Unknown))}),this.chains=this.stringList(Ge.chains,De.chains,{category:Fe.DATA,choices:["Heavy","Light"]}),this.fitWidth=this.bool(Ge.fitWidth,De.fitWidth,{category:Fe.LAYOUT}),this.positionWidth=this.float(Ge.positionWidth,De.positionWidth,{category:Fe.LAYOUT,editor:"slider",min:0,max:64,description:"Internal WebLogo viewers property width of position."}),this.positionHeight=this.string(Ge.positionHeight,De.positionHeight,{category:Fe.LAYOUT,choices:Object.keys(Le.ES)}),this.filterSource=this.string(Ge.filterSource,De.filterSource,{category:Fe.BEHAVIOR,choices:Object.values(Le.Ct)}),this.viewSyncer=new Oe.c(Is.logger)}viewerToLog(){return`VdRegionsViewer<${this.viewerId}>`}async init(){this.subs.push((0,y.fromEvent)(this.root,"mousemove").subscribe(this.rootOnMouseMove.bind(this)))}detach(){const e=`${this.viewerToLog()}.detach()`,t=super.detach.bind(this);this.viewSyncer.sync(`${e}`,(async()=>{this.setDataInProgress||(this.viewed&&(await this.destroyView("detach"),this.viewed=!1),t())}))}onTableAttached(){super.onTableAttached(),this.setData(this.regions)}onPropertyChanged(e){if(super.onPropertyChanged(e),e){switch(e.name){case Ge.regionTypes:case Ge.chains:this.setData(this.regions)}switch(e.name){case Ge.skipEmptyPositions:for(let e=0;e<this.logos.length;++e)for(const t of this.chains)this.logos[e][t].setOptions({[Re.bo.skipEmptyPositions]:this.skipEmptyPositions});this.calcSize();break;case Ge.fitWidth:case Ge.positionWidth:this.calcSize();break;case Ge.positionHeight:for(let e=0;e<this.logos.length;++e)for(const t of this.chains)this.logos[e][t].setOptions({[Re.bo.positionHeight]:this.positionHeight});this.calcSize();break;case Ge.filterSource:this.filterSourceInput.value=this.filterSource;break;default:this.setData(this.regions)}}else console.warn("Bio: VdRegionsViewer.onPropertyChanged() property is null")}setData(e){const t=`${this.viewerToLog()}.setData()`;Is.logger.debug(`${t}, in, regions.length = ${e.length}`),this.viewSyncer.sync(`${t}`,(async()=>{if(!this.setDataInProgress){this.setDataInProgress=!0;try{this.viewed&&(await this.destroyView("setData"),this.viewed=!1),this.regions=e,this.viewed||(await this.buildView("setData"),this.viewed=!0)}finally{this.setDataInProgress=!1}}}))}async destroyView(e){Is.logger.debug(`Bio: VdRegionsViewer.destroyView( mainLayout = ${this.mainLayout?"value":"none"} ), purpose = '${e}', this.regions.length = ${this.regions.length}`),this.filterSourceInput&&o.empty(this.filterSourceInput.root),null!=this.mainLayout&&(this.mainLayout.remove(),this.host.remove(),this.host=null,this.mainLayout=null);for(const e of this.viewSubs)e.unsubscribe()}async buildView(e){Is.logger.debug(`Bio: VdRegionsViewer.buildView() begin, purpose = '${e}', this.regions.length = ${this.regions.length}`);const t=this.regions.filter((e=>this.regionTypes.includes(e.type))),s=Array.from(new Set(t.map((e=>e.order)))).sort(),n=[];for(let e=0;e<s.length;e++)for(const r of this.chains){const i=t.find((t=>t.order==s[e]&&t.chain==r));n.push((async()=>{const t=await this.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:i.sequenceColumnName,startPositionName:i.positionStartName,endPositionName:i.positionEndName,fixWidth:!0,skipEmptyPositions:this.skipEmptyPositions,positionWidth:this.positionWidth,positionHeight:this.positionHeight,filterSource:this.filterSource});return t.onSizeChanged.subscribe((()=>{this.calcSize()})),[e,r,t]})())}const r=await Promise.all(n);this.logos=new Array(s.length);for(let e=0;e<s.length;++e)this.logos[e]={};for(const[e,t,s]of r)this.logos[e][t]=s,this.viewSubs.push(s.onFreqsCalculated.subscribe((()=>{this.calcSize()})));this.mainLayout=o.table(this.chains,(e=>[...s.length>0?[o.div(e,{style:{transform:"rotate(-90deg)",font:"12px Roboto, Roboto Local, sans-serif",textAlign:"center",width:"16px",marginTop:"24px",marginLeft:"6px"}})]:[],...[...Array(s.length).keys()].map((t=>{const s=this.logos[t][e];return s.root.style.height="100%",o.div([s.root],{style:{marginTop:"4px",marginBottom:"4px"}})}))]),["",...[...Array(s.length).keys()].map((e=>t.find((t=>t.order==s[e]&&t.chain==this.chains[0])).name||"Name"))]),this.mainLayout.className="mlb-vd-regions-viewer-table2",this.filterSourceInput=o.choiceInput("Data source",this.filterSource,Object.values(Le.Ct),this.filterSourceInputOnValueChanged.bind(this)),this.filterSourceInput.root.style.position="absolute",this.filterSourceInput.root.style.right="9px",this.filterSourceInput.root.style.top="-4px",Math.ceil(255*Math.random()).toString(16),this.host=o.div([this.mainLayout,this.filterSourceInput.root],{}),this.root.appendChild(this.host),this.root.style.overflowX="auto",this.calcSize(),this.viewSubs.push(o.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this))),Is.logger.debug("Bio: VdRegionsViewer.buildView() end")}calcSize(){Is.logger.debug("Bio: VdRegionsViewer.calcSize(), start");const e=()=>{if(!this.host)return;const e=(this.root.clientHeight-54)/this.chains.length;let t=0;for(let s=0;s<this.logos.length;s++){for(const t of this.chains)this.logos[s][t].root.style.height=`${e}px`;t+=Math.max(...this.chains.map((e=>this.logos[s][e].Length)))}if(this.fitWidth){if(this.logos.length>0&&t>0){const e=22,s=13,n=9,r=(this.root.clientWidth-e-(this.logos.length-1)*n-s)/t;for(let e=0;e<this.logos.length;e++)for(const t of this.chains){const s=this.logos[e][t];s.setOptions({[Re.bo.positionWidth]:r-s.positionMarginValue}),s.root.style.width=r*s.Length+"px"}}this.host.style.setProperty("overflow","hidden","important")}else{for(let e=0;e<this.logos.length;e++)for(const t of this.chains)this.logos[e][t].setOptions({[Re.bo.positionWidth]:this.positionWidth});this.host.style.removeProperty("overflow")}0===this.positionWidth?this.host.style.setProperty("overflow-x","hidden","important"):this.host.style.removeProperty("overflow-x")};this.calcSizeRequested||(this.calcSizeRequested=!0,window.setTimeout((()=>{e(),this.calcSizeRequested=!1}),0))}rootOnSizeChanged(e){this.calcSize()}rootOnMouseMove(e){}filterSourceInputOnValueChanged(){const e=`${this.viewerToLog()}.filterSourceInputOnValueChanged()`,t=this.filterSourceInput.value;this.viewSyncer.sync(`${e}`,(async()=>{if(this.filterSource!==t){this.props.getProperty(Ge.filterSource).set(this,t);for(let e=0;e<this.logos.length;e++)for(let t=0;t<this.chains.length;t++){const s=this.chains[t];this.logos[e][s].setOptions({[Re.bo.filterSource]:this.filterSource})}}}))}get onRendered(){return this._onRendered}invalidate(e){const t=`${this.viewerToLog()}.invalidate(${e?` <- ${e} `:""})`;this.viewSyncer.sync(`${t}`,(async()=>{this._onRendered.next()}))}async awaitRendered(e=5e3){await(0,Ne.zg)(this.onRendered,(()=>{}),(()=>{this.invalidate()}),e);const t=this.viewSyncer.resetErrors();if(t.length>0)throw t[0]}}Ve.viewerCounter=-1;var Be=s(9017),He=s(708);async function je(e,t,s="Morgan"){const n=Q.Cn.getOrCreate(e),r=e.toList(),i=n.getSplitter(),o=r.length;let a=36;const l=new Map;for(let t=0;t<o;t++){const s=r[t];if(null===r[t]||e.isNone(t)){r[t]=null;continue}r[t]="";const n=i(s);for(let e=0;e<n.length;e++){const s=n[e];l.has(s)||(l.set(s,String.fromCharCode(a)),a++),r[t]+=l.get(s)}}let c={};if(t===He.U.MONOMER_CHEMICAL_DISTANCE){const e=Array.from(l.keys()),t=await(0,te.GR)(e,s);t.scoringMatrix.forEach(((e,s)=>{e.forEach(((e,n)=>{t.scoringMatrix[s][n]=1-e}))}));const n={};Object.entries(t.alphabetIndexes).forEach((([e,t])=>{n[l.get(e)]=t})),c={scoringMatrix:t.scoringMatrix,alphabetIndexes:n}}else if(t===He.U.NEEDLEMANN_WUNSCH){const e=Array.from(l.keys()),t=await(0,te.GR)(e,s),n={};Object.entries(t.alphabetIndexes).forEach((([e,t])=>{n[l.get(e)]=t})),c={scoringMatrix:t.scoringMatrix,alphabetIndexes:n}}return{seqList:r,options:c}}var We=s(6361),Ue=s(7983);function Ze(e){const t=o.divH([],{style:{gap:"10px"}}),s=o.divV([o.divText(e.seqCol.name),o.divText(e.activityCol.name)]);return s.style.fontWeight="bold",s.style.display="flex",s.style.justifyContent="space-between",t.append(s),e.points.forEach((s=>{const n=o.divText(e.activityCol.get(s).toFixed(2));n.style.display="flex",n.style.justifyContent="left",n.style.paddingLeft="30px",t.append(o.divV([o.divText(e.seqCol.get(s)),n]))})),t}function Ye(e){const t=o.div();t.append(o.divText(e.seqCol.name,{style:{fontWeight:"bold"}}));const s=new Array(2),n=new Array(2);e.points.forEach(((t,r)=>{s[r]=e.seqCol.get(t),n[r]=e.activityCol.get(t)}));const r={},i=Q.Cn.getOrCreate(e.seqCol),a=i.getSplitter(),l=qe(a(s[0]),a(s[1]),i.units,r);return t.append(o.div(l,{style:{width:"300px",overflow:"scroll"}})),t.append(ze(r)),t.append(Ke("Activity delta",Math.abs(n[0]-n[1]))),t.append(Ke("Cliff",e.sali)),t}function Ke(e,t){return o.divH([o.divText(`${e}: `,{style:{fontWeight:"bold",paddingRight:"5px"}}),o.divText(t.toFixed(2))],{style:{paddingTop:"10px"}})}function qe(e,t,s,n){const r=document.createElement("canvas"),i=r.getContext("2d");return r.height=30,Ie(i,0,0,0,30,e,t,s,!0,n),r}function ze(e){const t=o.div();if(Object.keys(e).length>0){const s=o.divV([]);s.append(o.divH([o.divText("Pos",{style:{fontWeight:"bold",width:"30px",borderBottom:"1px solid"}}),o.divText("Difference",{style:{fontWeight:"bold",borderBottom:"1px solid"}})]));for(const t of Object.keys(e))e[t].style.borderBottom="1px solid lightgray",s.append(o.divH([o.divText((parseInt(t)+1).toString(),{style:{width:"30px",borderBottom:"1px solid lightgray"}}),e[t]]));t.append(s)}return t}function Xe(e,t){const s=a.Column.string("seq_diff",e.rowCount).init((s=>`${e.get(t[0],s)}#${e.get(t[1],s)}`));s.semType="MacromoleculeDifference",s.setTag(a.TAGS.UNITS,e.col(t[0]).getTag(a.TAGS.UNITS)),s.setTag("separator",e.col(t[0]).getTag("separator")),e.columns.add(s);const n=e.plot.grid();return n.col(t[0]).visible=!1,n.col(t[1]).visible=!1,n}class Je extends a.JsViewer{constructor(e){super(),this.name="",this.metricsProperties=["distanceMetric","fingerprint"],this.fingerprintChoices=["Morgan","Pattern"],this.initialized=!1,this.tags=[a.TAGS.UNITS,"aligned","separator","alphabet"],this.preComputeDistanceMatrix=!1,this.renderPromise=Promise.resolve(),this.fingerprint=this.string("fingerprint",this.fingerprintChoices[0],{choices:this.fingerprintChoices}),this.limit=this.int("limit",10),this.distanceMetric=this.string("distanceMetric",g.kg[0],{choices:g.kg}),this.moleculeColumnName=this.string("moleculeColumnName"),this.name=e}init(){this.initialized=!0}detach(){this.subs.forEach((e=>e.unsubscribe()))}async onTableAttached(){if(this.init(),this.dataFrame){this.preComputeDistanceMatrix=this.dataFrame.rowCount<=22e3,this.subs.push(a.debounce(this.dataFrame.onRowsRemoved,50).subscribe((e=>this.render(!0))));const e="diversity"!==this.name;this.subs.push(a.debounce(this.dataFrame.onCurrentRowChanged,50).subscribe((t=>this.render(e)))),this.subs.push(a.debounce(this.dataFrame.selection.onChanged,50).subscribe((e=>this.render(!1)))),this.subs.push(a.debounce(o.onSizeChanged(this.root),50).subscribe((e=>this.render(!1)))),this.moleculeColumn=this.dataFrame.columns.bySemType(a.SEMTYPE.MACROMOLECULE),this.moleculeColumnName=this.moleculeColumn?.name,this.getProperty("limit").fromOptions({min:1,max:this.dataFrame.rowCount})}this.render()}onPropertyChanged(e){if(super.onPropertyChanged(e),this.initialized){if("moleculeColumnName"===e.name){const t=this.dataFrame.col(e.get(this));t.semType===a.SEMTYPE.MACROMOLECULE&&(this.moleculeColumn=t)}this.render()}}render(e=!0){this.renderPromise=this.renderPromise.then((async()=>{this.computeRequested=this.computeRequested||e,await this.renderInt(e)}))}async renderInt(e){}beforeRender(){return!(!this.initialized||this.dataFrame&&this.moleculeColumnName&&this.dataFrame.col(this.moleculeColumnName).semType!==a.SEMTYPE.MACROMOLECULE&&(i.shell.error(`${this.moleculeColumnName} is not Macromolecule type`),1))}}var Qe=s(7241);const et={gapPenalty:1,matchScore:1,gapSymbol:"-",localAlignment:!1};class tt extends Je{constructor(){super("similarity"),this.sketchedMolecule="",this.curIdx=0,this.molCol=null,this.idxs=null,this.scores=null,this.gridSelect=!1,this.targetMoleculeIdx=0,this.computeCompleted=new y.Subject,this.distanceMatrixComputed=!1,this.kPrevNeighbors=0,this.cutoff=this.float("cutoff",.01,{min:0,max:1}),this.hotSearch=this.bool("hotSearch",!0),this.similarColumnLabel=this.string("similarColumnLabel",null)}init(){this.hotSearch=!0,this.initialized=!0}async renderInt(e){if(this.beforeRender()&&this.moleculeColumn&&(this.curIdx=-1==this.dataFrame.currentRowIdx?0:this.dataFrame.currentRowIdx,e&&!this.gridSelect)){this.targetMoleculeIdx=-1==this.dataFrame.currentRowIdx?0:this.dataFrame.currentRowIdx;const e=Q.Cn.getOrCreate(this.moleculeColumn);await(e.isHelm()?this.computeByChem():this.computeByMM());const t=null!=this.similarColumnLabel?this.similarColumnLabel:`similar (${this.moleculeColumnName})`;this.molCol=a.Column.string(t,this.idxs.length).init((e=>this.moleculeColumn?.get(this.idxs?.get(e)))),this.molCol.semType=a.SEMTYPE.MACROMOLECULE,this.tags.forEach((e=>this.molCol.setTag(e,this.moleculeColumn.getTag(e))));const s=a.DataFrame.fromColumns([this.idxs,this.molCol,this.scores]);s.onCurrentRowChanged.subscribe((e=>{this.dataFrame.currentRowIdx=s.col("indexes").get(s.currentRowIdx),setTimeout((()=>{this.createPropertyPanel(s)}),1e3),this.gridSelect=!0}));const n=s.plot.grid();n.col("indexes").visible=!1;const r=this.idxs?.getRawData().findIndex((e=>e==this.targetMoleculeIdx));n.cell("score",r).cell.value=null,i.shell.v.grid.root.addEventListener("click",(e=>{this.gridSelect=!1})),(0,oe.Y)(this.root,n.root),this.computeCompleted.next(!0)}}async computeByChem(){const e=await(0,Qe.D)(this.moleculeColumn),t=(a.DataFrame.fromColumns([e]),await i.functions.call("Chem:callChemSimilaritySearch",{df:this.dataFrame,col:e,molecule:e.get(this.targetMoleculeIdx),metricName:this.distanceMetric,limit:this.limit,minScore:this.cutoff,fingerprint:this.fingerprint}));this.idxs=t.getCol("indexes"),this.scores=t.getCol("score")}async computeByMM(){const e=this.moleculeColumn.length,t=Math.min(this.limit,e-1);if(!this.knn||this.kPrevNeighbors!==t){const s=(await je(this.moleculeColumn,He.U.LEVENSHTEIN)).seqList;this.kPrevNeighbors=t,this.knn=await(new k).getKNN(s,He.U.LEVENSHTEIN,Math.min(this.limit,e-1))}const s=new Array(t).fill(0).map(((e,t)=>({idx:this.knn.knnIndexes[this.targetMoleculeIdx][t],score:1-this.knn.knnDistances[this.targetMoleculeIdx][t]})));s.sort(((e,t)=>t.score-e.score)),s.unshift({idx:this.targetMoleculeIdx,score:a.FLOAT_NULL}),this.idxs=a.Column.int("indexes",t+1).init((e=>s[e].idx)),this.scores=a.Column.float("score",t+1).init((e=>s[e].score))}createPropertyPanel(e){const t=o.div(),s={},n=this.molCol?.name,r=e.col(n),a=Q.Cn.getOrCreate(r),l=a.getSplitter(),c=l(this.moleculeColumn.get(this.targetMoleculeIdx)),h=l(e.get(n,e.currentRowIdx)),u=function(e,t,s={}){const n={...et,...s},r=e.length,i=t.length,o=Array(r+1).fill(0).map((()=>Array(i+1).fill(0)));let a=-9999,l=[1,1];for(let s=1;s<r+1;s++)for(let r=1;r<i+1;r++)o[s][r]=Math.max(0,o[s-1][r-1]+(e[s-1]===t[r-1]?n.matchScore:-n.matchScore),o[s-1][r]-n.gapPenalty,o[s][r-1]-n.gapPenalty),o[s][r]>=a&&(a=o[s][r],l=[s,r]);let c=n.localAlignment?l[0]:r,h=n.localAlignment?l[1]:i,u=new Array(0),d=new Array(0);for(;c>0&&h>0;){const s=Math.max(o[c-1][h-1],o[c-1][h],o[c][h-1]);o[c][h]==o[c-1][h-1]+n.matchScore&&s==o[c-1][h-1]?(u.push(e[c-1]),d.push(t[h-1]),c-=1,h-=1):o[c][h]==o[c-1][h]-n.gapPenalty?(d.push(n.gapSymbol.valueOf()),u.push(e[c-1]),c-=1):o[c][h]==o[c][h-1]-n.gapPenalty?(u.push(n.gapSymbol.valueOf()),d.push(t[h-1]),h-=1):(u.push(e[c-1]),d.push(t[h-1]),c-=1,h-=1)}u=[...Array.from(e).splice(0,c),...u.reverse(),...n.localAlignment?Array.from(e).splice(l[0],r):[]],d=[...Array.from(t).splice(0,h),...d.reverse(),...n.localAlignment?Array.from(t).splice(l[1],i):[]];const p=c,m=h;return p>m?d=[...new Array(p-m).fill(n.gapSymbol.valueOf()),...d]:u=[...new Array(m-p).fill(n.gapSymbol.valueOf()),...u],d.length>u.length?u.push(...new Array(d.length-u.length).fill(n.gapSymbol.valueOf())):d.push(...new Array(u.length-d.length).fill(n.gapSymbol.valueOf())),{seq1:u.join(""),seq2:d.join(""),seq1Splitted:u,seq2Splitted:d}}(Array.from(c),Array.from(h)),d=qe(u.seq1Splitted,u.seq2Splitted,a.units,s);t.append(o.div(d,{style:{width:"300px",overflow:"scroll"}})),c.length!==h.length&&t.append(o.divV([o.divText("Different sequence length:",{style:{fontWeight:"bold"}}),o.divText(`target: ${c.length} monomers`),o.divText(`selected: ${h.length} monomers`)],{style:{paddingBottom:"10px"}})),t.append(ze(s));const p=o.accordion(),m=o.element("i");m.className="grok-icon svg-icon svg-view-layout",p.addTitle(o.span([m,o.label("Similarity search")])),p.addPane("Differences",(()=>t),!0),i.shell.o=p.root}}var st=s(279);class nt extends Je{constructor(){super("diversity"),this.renderMolIds=null,this.columnNames=[],this.computeCompleted=new y.Subject,this.diverseColumnLabel=this.string("diverseColumnLabel",null)}async renderInt(e){if(this.beforeRender()&&this.dataFrame&&e&&this.moleculeColumn){const e=Q.Cn.getOrCreate(this.moleculeColumn);await(e.isFasta()?this.computeByMM():this.computeByChem());const t=null!=this.diverseColumnLabel?this.diverseColumnLabel:`diverse (${this.moleculeColumnName})`,s=a.Column.string(t,this.renderMolIds.length).init((e=>this.moleculeColumn?.get(this.renderMolIds[e])));s.semType=a.SEMTYPE.MACROMOLECULE,this.tags.forEach((e=>s.setTag(e,this.moleculeColumn.getTag(e))));const n=a.DataFrame.fromColumns([s]);n.onCurrentRowChanged.subscribe((e=>{this.dataFrame.currentRowIdx=this.renderMolIds[n.currentRowIdx]})),(0,oe.Y)(this.root,n.plot.grid().root),this.computeCompleted.next(!0)}}async computeByChem(){const e=await(0,Qe.D)(this.moleculeColumn);a.DataFrame.fromColumns([e]),this.renderMolIds=await i.functions.call("Chem:callChemDiversitySearch",{col:e,metricName:this.distanceMetric,limit:this.limit,fingerprint:this.fingerprint})}async computeByMM(){const e=(await je(this.moleculeColumn,He.U.LEVENSHTEIN)).seqList,t=new R(!0,!1),s=await t.calc(e,He.U.LEVENSHTEIN);t.terminate();const n=this.moleculeColumn.length,r=(0,O.y)(n);this.renderMolIds=(0,st.L)(n,Math.min(n,this.limit),((e,t)=>this.moleculeColumn.isNone(e)||this.moleculeColumn.isNone(t)?0:s[r(e,t)]))}}var rt=s(4004),it=s(9943),ot=s(5393),at=s(7572),lt=s(3336),ct=s.n(lt),ht=s(8710),ut={};ut.styleTagTransform=$(),ut.setAttributes=E(),ut.insert=x().bind(null,"head"),ut.domAPI=C(),ut.insertStyleElement=T(),v()(ht.Z,ut),ht.Z&&ht.Z.locals&&ht.Z.locals;var dt=s(6584),pt=s(3776),mt=s(2428);async function ft(){await bt.showDialog()}class gt{constructor(e){this.eventManager=e}static async getContent(e){return gt._instance||(gt._instance=new gt(e)),gt._instance.widget||(gt._instance.widget=await gt._instance.createWidget()),gt._instance.widget}async createWidget(){this.monomerLibFileManager=await pt.t.getInstance(this.eventManager);const e=await this.getWidgetContent();return this.eventManager.addLibraryFileRequested$.subscribe((async()=>await this.promptToAddLibraryFiles())),new a.Widget(e)}async getWidgetContent(){this.monomerLibFileManager=await pt.t.getInstance(this.eventManager);const e=await yt.createControlsForm(this.eventManager);return ct()(e).addClass("monomer-lib-controls-form"),o.divV([e])}async promptToAddLibraryFiles(){a.Utils.openFile({accept:".json",open:async e=>{const t=await e.text(),s=e.name,n=a.TaskBarProgressIndicator.create(`Adding ${s} as a monomer library`);try{await this.monomerLibFileManager.addLibraryFile(t,s)}catch(e){i.shell.error(`File ${s} is not a valid monomer library, verify it is aligned to HELM JSON schema.`)}finally{n.close()}}})}}class yt{constructor(e){this.eventManager=e,this.eventManager.updateUIControlsRequested$.subscribe((async()=>await this.updateControlsForm())),this.eventManager.librarySelectionRequested$.subscribe((async([e,t])=>await this.updateLibrarySelectionStatus(t,e)))}static async createControlsForm(e){const t=new yt(e);return await t.initialize(),await t._createControlsForm()}async _createControlsForm(){this.monomerLibFileManager=await pt.t.getInstance(this.eventManager);const e=await this.createLibraryControls(),t=o.form(e);return ct()(t).addClass("monomer-lib-controls-form"),t}async initialize(){this.userLibSettings=await(0,dt.nW)()}async updateControlsForm(){const e=await this._createControlsForm();ct()(".monomer-lib-controls-form").replaceWith(e)}async createLibraryControls(){return(await pt.t.getInstance(this.eventManager)).getValidLibraryPaths().map((e=>this.createLibInput(e)))}createLibInput(e){const t=!this.userLibSettings.exclude.includes(e),s=o.boolInput(e,t,(t=>this.eventManager.updateLibrarySelectionStatus(e,t)));o.tooltip.bind(s.root,`Include monomers from ${e}`);const n=o.iconFA("trash-alt",(()=>this.promptForLibraryDeletion(e)));return o.tooltip.bind(n,`Delete ${e}`),s.addOptions(n),s}async updateLibrarySelectionStatus(e,t){this.updateLibrarySettings(e,t),await(0,dt.tW)(this.userLibSettings),await at.A.instance.loadLibraries(!0),i.shell.info("Monomer library user settings saved")}updateLibrarySettings(e,t){e?this.userLibSettings.exclude=this.userLibSettings.exclude.filter((e=>e!==t)):this.userLibSettings.exclude.includes(t)||this.userLibSettings.exclude.push(t)}promptForLibraryDeletion(e){o.dialog("Warning").add(o.divText(`Delete file ${e}?`)).onOK((async()=>{try{const t=a.TaskBarProgressIndicator.create(`Deleting ${e} library`);this.updateLibrarySelectionStatus(!1,e),await this.monomerLibFileManager.deleteLibraryFile(e),t.close()}catch(t){console.error(t),i.shell.error(`Failed to delete ${e} library`)}})).showModal(!1)}}class bt{constructor(){this.closeDialogSubject$=new y.Subject}static async showDialog(){bt._instance||(bt._instance=new bt,bt._instance.closeDialogSubject$.subscribe((()=>{bt._instance.dialog=void 0}))),bt._instance.dialog||(bt._instance.dialog=await bt._instance.getDialog()),bt._instance.dialog.show()}async getDialog(){const e=mt.A.getInstance(),t=await gt.getContent(e),s=o.dialog({title:"Manage monomer libraries",helpUrl:"/help/datagrok/solutions/domains/bio/bio.md#manage-monomer-libraries"});return ct()(s.root).css("width","350px"),s.clear(),s.addButton("Add",(()=>e.addLibraryFile()),void 0,"Upload new HELM monomer library"),s.add(t),s.onClose.subscribe((()=>this.closeDialogSubject$.next())),s}}var vt,wt=function(e,t,s,n){return new(s||(s=Promise))((function(r,i){function o(e){try{l(n.next(e))}catch(e){i(e)}}function a(e){try{l(n.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,a)}l((n=n.apply(e,t||[])).next())}))};class Ct{constructor(e,t,s=!1,n){var r;this.name="",this.description="",this._isAutomatic=!1,this._autoStartFirstStep=!1,this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._isStepProcessed=!1,this._root=o.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._steps=[],this._mainHeader=o.panel([],"tutorials-main-header"),this._header=o.h2(""),this._headerDiv=o.divH([],"tutorials-root-header"),this._stopStartBtn=o.button(o.iconFA("pause"),(()=>this._changeStopState()),"Play / pause"),this._restartBtn=o.button(o.iconFA("redo"),(()=>this._restartScript()),"Restart"),this._nextStepBtn=o.button(o.iconFA("play"),(()=>{this._isStepProcessed||this._nextStep()}),"Next step"),this._activity=o.panel([],"tutorials-root-description"),this._progressDiv=o.divV([],"tutorials-root-progress"),this._progress=o.element("progress"),this._progressSteps=o.divText(""),this._closeBtn=o.button(o.iconFA("chevron-left"),(()=>this._closeDock()),"Back to demo"),this.name=e,this.description=t,this._isAutomatic=s,this._autoStartFirstStep=null!==(r=null==n?void 0:n.autoStartFirstStep)&&void 0!==r&&r,this._progress.max=0,this._progress.value=1,Ct.currentObject=this}get steps(){return this._steps}get stepNumber(){return this._steps.length}_addHeader(){this._createHeaderDiv(),this._createProgressDiv(),this._mainHeader.append(this._headerDiv,this._progressDiv)}_createHeaderDiv(){this._header.innerText=this.name,this._headerDiv.append(this._closeBtn),this._headerDiv.append(this._header),this._nextStepBtn.firstChild.className="grok-icon fas fa-play",this._headerDiv.append(this._isAutomatic?this._stopStartBtn:this._nextStepBtn)}_createProgressDiv(){this._progress.max=this.stepNumber,this._progressDiv.append(this._progress),this._progressSteps=o.divText(`Step: ${this._progress.value} of ${this.stepNumber}`),this._progressDiv.append(this._progressSteps)}_addDescription(){var e;this._activity.append(o.div(this.description,"tutorials-root-description"));for(let t=0;t<this.stepNumber;t++){let s=o.iconFA("clock");this._isAutomatic||0===t&&(s=o.iconFA("play",(()=>this._nextStep()),"Next step"),s.className="grok-icon fas fa-play");const n=o.div(this._steps[t].name,"grok-tutorial-entry-instruction"),r=o.div(null===(e=this._steps[t].options)||void 0===e?void 0:e.description,"grok-tutorial-step-description hidden"),i=o.divH([s,n],"grok-tutorial-entry");this._activity.append(i,r)}}_initRoot(){var e,t,s;i.shell.windows.showContextPanel=!0,i.shell.windows.showHelp=!1;const n=Array.from(i.shell.dockManager.rootNode.children)[0];this._node=i.shell.dockManager.dock(this._root,a.DOCK_TYPE.FILL,n,""),(null===(t=null===(e=n.parent.container.containerElement.firstElementChild)||void 0===e?void 0:e.lastElementChild)||void 0===t?void 0:t.classList.contains("tab-handle-list-container"))&&(null===(s=n.parent.container.containerElement.firstElementChild)||void 0===s||s.lastElementChild.remove()),this._node.container.containerElement.classList.add("tutorials-demo-script-container"),this._addHeader(),this._root.append(this._mainHeader),this._addDescription(),this._root.append(this._activity)}_nextStep(){var e,t;return wt(this,void 0,void 0,(function*(){this._isStepProcessed=!0,this._isAutomatic||(this._nextStepBtn.classList.add("disabled"),this._nextStepBtn.firstChild.classList.add("fa-disabled"));const s=this._activity.getElementsByClassName("grok-tutorial-entry")[this._currentStep],n=this._activity.getElementsByClassName("grok-icon")[this._currentStep],r=this._activity.getElementsByClassName("grok-tutorial-step-description")[this._currentStep];n.className="grok-icon far fa-spinner-third fa-spin",r.classList.remove("hidden"),r.classList.add("visible");const i=s,a=(null===(e=this._steps[this._currentStep].options)||void 0===e?void 0:e.delay)?null===(t=this._steps[this._currentStep].options)||void 0===t?void 0:t.delay:2e3;yield this._steps[this._currentStep].func(),this._scrollTo(this._root,i.offsetTop-this._mainHeader.offsetHeight),this._isAutomatic&&(yield this._countdown(s,n,a),yield(0,Ne.gw)(a));const l=o.iconFA("check");if(n.replaceWith(l),l.className="grok-icon far fa-check",this._progress.value++,this._progressSteps.innerText=`Step: ${this._progress.value} of ${this.stepNumber}`,this._currentStep++,this._isStepProcessed=!1,this._currentStep!==this.stepNumber){if(!this._isAutomatic){const e=this._activity.getElementsByClassName("grok-icon")[this._currentStep],t=o.iconFA("play",(()=>this._nextStep()),"Next step");t.className="grok-icon fas fa-play",e.replaceWith(t),this._nextStepBtn.classList.remove("disabled"),this._nextStepBtn.firstChild.classList.remove("fa-disabled")}}else this._isAutomatic?this._stopStartBtn.replaceWith(this._restartBtn):this._nextStepBtn.replaceWith(this._restartBtn)}))}_startScript(){return wt(this,void 0,void 0,(function*(){for(let e=this._currentStep;e<this.stepNumber&&!this._isStopped&&!this._isCancelled;e++)yield this._nextStep()}))}_scrollTo(e,t){e.focus(),e.scrollTop=t}_countdown(e,t,s){return wt(this,void 0,void 0,(function*(){const n=o.div([],"demo-script-countdown");t.classList.add("hidden");let r=s/1e3;const i=this._createSVGIndicator(r);n.append(i),e.prepend(n);const a=setInterval((()=>{r--,0===r&&(clearInterval(a),n.remove(),t.classList.remove("hidden"),t.classList.add("visible"))}),1e3)}))}_createSVGIndicator(e){const t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","circle");return s.setAttributeNS(null,"cx","7"),s.setAttributeNS(null,"cy","7"),s.setAttributeNS(null,"r","6"),s.setAttributeNS(null,"style",`animation: countdown ${e}s linear infinite forwards`),t.append(s),t}_changeStopState(){const e=this._stopStartBtn.getElementsByClassName("grok-icon");e[0].className="grok-icon fas fa-play",this._isStopped=!this._isStopped,this._isStopped||(e[0].className="grok-icon fal fa-pause",this._isStepProcessed||this._startScript())}_restartScript(){i.shell.dockManager.close(this._node),i.shell.closeAll(),this._clearRoot(),this._setInitParams(),this.start()}_clearRoot(){this._root=o.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._mainHeader=o.panel([],"tutorials-main-header"),this._header=o.h2(""),this._headerDiv=o.divH([],"tutorials-root-header"),this._activity=o.panel([],"tutorials-root-description"),this._progressDiv=o.divV([],"tutorials-root-progress"),this._progress=o.element("progress"),this._progressSteps=o.divText(""),this._progress.max=0,this._progress.value=1}_setInitParams(){this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._stopStartBtn.getElementsByClassName("grok-icon")[0].className="grok-icon fal fa-pause",this._nextStepBtn.classList.remove("disabled")}_closeDock(){i.shell.dockManager.close(this._node),this.cancelScript()}cancelScript(){this._isCancelled=!0,Ct.currentObject=null}step(e,t,s){return this._steps[this.steps.length]={name:e,func:t,options:s},this}start(){return wt(this,void 0,void 0,(function*(){this._initRoot(),i.shell.newView(this.name),this._isAutomatic?this._startScript():this._autoStartFirstStep&&(yield this._nextStep())}))}}function St(e){const t=e instanceof Error?e.message:e.toString(),s=e instanceof Error?e.stack:void 0;i.shell.error(t),Is.logger.error(e.message,void 0,s)}Ct.currentObject=null,function(e){e.X="Embed_X",e.Y="Embed_Y"}(vt||(vt={}));const xt="samples/FASTA_PT_activity.csv";async function At(){const e="Dendrogram",t=a.Func.find({package:e,name:"getTreeHelper"});if(0===t.length)throw new Error(`Package "${e}" must be installed for TreeHelper.`);return(await t[0].prepare().call()).getOutputParamValue()}async function Et(){return await i.functions.call("Dendrogram:getDendrogramService",{})}var _t=function(e,t,s,n){return new(s||(s=Promise))((function(r,i){function o(e){try{l(n.next(e))}catch(e){i(e)}}function a(e){try{l(n.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,a)}l((n=n.apply(e,t||[])).next())}))};function Tt(e,t,n){return _t(this,void 0,void 0,(function*(){return new Promise((function(r,i){const o=new Worker(new URL(s.p+s.u(356),s.b));o.postMessage({distMatArray:e,n:t,methodCode:n}),o.onmessage=({data:{error:e,clusterMatrix:t}})=>{o.terminate(),e?i(e):r(t)}}))}))}var It=function(e,t,s,n){return new(s||(s=Promise))((function(r,i){function o(e){try{l(n.next(e))}catch(e){i(e)}}function a(e){try{l(n.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,a)}l((n=n.apply(e,t||[])).next())}))};s(7905);const $t="samples/FASTA_PT_activity.csv",Mt="sequence";const Nt="samples/FASTA_PT_activity.csv";var Lt=s(8341);const Pt="samples/HELM.csv";var Ot=s(2568),Rt=s(525);class kt{constructor(e,t,s={}){this.urlParams=e,this.funcName=t,this.options=s}async init(e){this.df=e,await this.buildView()}async buildView(){const e=le()(this.urlParams.entries()).map((([e,t])=>`${e}=${encodeURIComponent(t)}`)).toArray().join("&");this.view=i.shell.addTableView(this.df),this.view.path=this.view.basePath=`func/${Is.name}.${this.funcName}?${e}`;const t={...this.options,sequenceColumnName:"sequence"};for(const[e,s]of this.urlParams.entries())switch(e){case Re.bo.fixWidth:case Re.bo.fitArea:t[e]=["1","on","true"].includes(s.toLowerCase());break;default:t[e]=s}const s=await this.view.dataFrame.plot.fromType("WebLogo",t);this.view.dockManager.dock(s,a.DOCK_TYPE.DOWN,null,"WebLogo",.35)}}class Ft{get funcParams(){return{table:this.tableInput.value,sequence:this.seqColInput.value}}get paramsUI(){return this.funcParamsDiv}constructor(){this.tableInput=o.tableInput("Table",i.shell.tv.dataFrame,void 0,(()=>{this.onTableInputChanged()}));const e=this.tableInput.value.columns.bySemType(a.SEMTYPE.MACROMOLECULE),t={filter:e=>e.semType===a.SEMTYPE.MACROMOLECULE};this.seqColInput=o.columnInput("Sequence",this.tableInput.value,e,null,t),this.funcParamsDiv=o.inputs([this.tableInput,this.seqColInput],{style:{minWidth:"320px"}})}onTableInputChanged(){this.seqColInput=o.columnInput("Sequence",this.tableInput.value,this.tableInput.value.columns.bySemType(a.SEMTYPE.MACROMOLECULE))}}var Gt=s(9416);class Dt{constructor(e){this.monomerLib=e}getCappedRotatedMonomer(e,t){const s=this.monomerLib.getMonomer(e,t);return s?s.molfile:null}}const Vt=new class{constructor(){this.tooltipHandlerTemp="tooltip-handler.Monomer"}},Bt={autoCrop:!0,autoCropMargin:0,suppressChiralText:!0};class Ht{constructor(e){this.gridCol=e,this.gridCol.grid.onCellTooltip(this.onCellTooltip.bind(this))}onCellTooltip(e,t,s){if(e.grid.dart!=this.gridCol.grid.dart||e.gridColumn.dart!=this.gridCol.dart||!e.tableColumn||!e.isTableCell)return!1;const n=e.tableColumn.getTag("alphabet"),r=e.cell.value,a="DNA"===n||"RNA"===n?"RNA":"PEPTIDE",l=new Dt($s().getBioLib()).getCappedRotatedMonomer(a,r),c=o.div(r),h=l?i.chem.svgMol(l,void 0,void 0,Bt):null,u=e.grid.canvas.getBoundingClientRect(),d=e.bounds.right+u.left-4,p=e.bounds.bottom+u.top-4;return o.tooltip.show(o.divV([c,...h?[h]:[]]),d,p),!0}static getOrCreate(e){let t=e.temp[Vt.tooltipHandlerTemp];return t||(t=e.temp[Vt.tooltipHandlerTemp]=new Ht(e)),t}}class jt extends a.GridCellRenderer{get name(){return Ce.Of.MONOMER}get cellType(){return Ce.Of.MONOMER}get defaultHeight(){return 15}get defaultWidth(){return 40}render(e,t,s,n,r,i,o){if(i.gridRow<0)return;Ht.getOrCreate(i.gridColumn),e.font="12px monospace",e.textBaseline="middle",e.textAlign="center";const a=(0,be.py)(i.cell.column.getTag("alphabet")),l=i.cell.value;if(!l)return;const c=a.get(l);e.fillStyle=c,e.fillText((0,be.GU)(l,6),t+n/2,s+r/2,n)}}class Wt extends Map{get onPropertyChanged(){return this._onPropertyChanged}get MaxMonomerLength(){return super.get("MaxMonomerLength")}set MaxMonomerLength(e){super.set("MaxMonomerLength",e),this._onPropertyChanged.next("MaxMonomerLength")}get TooltipWebLogo(){return super.get("TooltipWebLogo")}set TooltipWebLogo(e){super.set("TooltipWebLogo",e),this._onPropertyChanged.next("TooltipWebLogo")}get DefaultSeparator(){return super.get("DefaultSeparator")}set DefaultSeparator(e){if(1!==e.length)throw new Error("The separator must be of length one.");super.set("DefaultSeparator",e),this._onPropertyChanged.next("DefaultSeparator")}constructor(e){super(Object.entries(e)),this._onPropertyChanged=new y.Subject}}class Ut extends a.Package{constructor(){super(...arguments),this._initialized=!1}get properties(){return this._properties}set properties(e){this._properties=e}get initialized(){return this._initialized}completeInit(){this._initialized=!0}handleErrorUI(e){const[t,s]=(0,ie.yf)(e);i.shell.error(t),this.logger.error(t,void 0,s)}}var Zt=s(8770);class Yt extends a.Widget{constructor(e){super(o.divV([])),this.viewed=!1,this.seqCol=e}async init(){const e=Q.Cn.getOrCreate(this.seqCol),t=Is.properties.TooltipWebLogo,s=this.seqCol.getTag(Le.DX.tooltipWebLogo);!1===t||["false","off","disable","disabled"].includes(s)||(this.wlViewer=await this.seqCol.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:this.seqCol.name,backgroundColor:0,positionHeight:"Entropy",positionWidth:e.getAlphabetIsMultichar()?24:16,fixWidth:!0,fitArea:!1}),this.wlViewer.root.style.height="50px",this.root.appendChild(this.wlViewer.root),this.root.style.width="100%")}detach(){this.wlViewer.detach(),super.detach()}}var Kt=s(922);async function qt(e,t){const s=new zt(t,e),n=await s.convertToRdKitBeautifiedMolfileColumn();return n.semType=a.SEMTYPE.MOLECULE,n}class zt{constructor(e,t){this.helmColumn=e,this.df=t,this.helmColumn=e}async convertToSmiles(){const e=await this.getSmilesList(),t=this.df.columns.getUnusedName(`smiles(${this.helmColumn.name})`);return a.Column.fromStrings(t,e.map((e=>null===e?"":e)))}async getSmilesList(){return(await this.convertToMolfileV2KColumn()).toList().map((e=>a.chem.convert(e,a.chem.Notation.MolBlock,a.chem.Notation.Smiles)))}async convertToRdKitBeautifiedMolfileColumn(){const e=await this.getSmilesList(),t=await i.functions.call("Chem:getRdKitModule"),s=e.map((e=>{if(""===e)return null;const s=t.get_mol(e);return s?(s.normalize_depiction(1),s.straighten_depiction(!0),s):null})),n=this.df.columns.getUnusedName(`molfile(${this.helmColumn.name})`);return a.Column.fromStrings(n,s.map((e=>{if(null===e)return"";const t=e.get_v3Kmolblock();return e.delete(),t})))}async convertToMolfileV2KColumn(){const e=(await this.getPolymerGraphColumn()).toList().map(((e,t)=>{const s=this.helmColumn.get(t);if(!s)return"";let n="";try{n=this.getPolymerMolfile(s,e)}catch(e){const[t,s]=(0,ie.yf)(e);Is.logger.error(t,void 0,s)}finally{return n}})),t=this.df.columns.getUnusedName(`molfileV2K(${this.helmColumn.name})`);return a.Column.fromList("string",t,e)}async getPolymerGraphColumn(){return await i.functions.call("HELM:getMolfiles",{col:this.helmColumn})}getPolymerMolfile(e,t){const s=new Xt(t),n=new os(e);return s.monomerSymbols.forEach(((e,t)=>{const r=s.getMonomerShifts(t);n.addMonomer(e,t,r)})),n.compileToMolfile()}}class Xt{constructor(e){this.molfileHandler=Kt._.getInstance(e)}get monomerSymbols(){return this.molfileHandler.atomTypes}getMonomerShifts(e){return{x:this.molfileHandler.x[e],y:this.molfileHandler.y[e]}}}class Jt{constructor(e,t){this.capGroupElements=[];const s=at.A.instance.getBioLib().getMonomer(t,e);if(!s)throw new Error(`Monomer ${e} is not found in the library`);this.molfileWrapper=new ss(s.molfile,e),this.capGroupElements=s.rgroups.map((e=>(e.capGroupSMILES||e.capGroupSMILES).replace(/(\[|\]|\*|:|\d)/g,"")))}shiftCoordinates(e){this.molfileWrapper.shiftCoordinates(e)}getAtomLines(){return this.molfileWrapper.getAtomLines()}getBondLines(){return this.molfileWrapper.getBondLines()}removeBondedRGroups(e){this.molfileWrapper.removeRGroups(e)}capTrailingRGroups(){this.molfileWrapper.capRGroups(this.capGroupElements)}replaceRGroupWithAttachmentAtom(e,t){this.molfileWrapper.replaceRGroupWithAttachmentAtom(e,t)}getAttachmentAtomByRGroupId(e){return this.molfileWrapper.getAttachmentAtomByRGroupId(e)}deleteBondLineWithSpecifiedRGroup(e){this.molfileWrapper.deleteBondLineWithSpecifiedRGroup(e)}shiftBonds(e){this.molfileWrapper.shiftBonds(e)}}class Qt{constructor(e,t,s){this.atoms=t,this.bonds=s,this.rGroupBondPositionMap=new Map,this.rGroupIdToAtomicIndexMap=this.getRGroupIdToAtomicIdxMap(e)}getAtomicIdx(e){const t=this.rGroupIdToAtomicIndexMap.get(e);return void 0===t?null:t}removeRGroupsFromAtomBlock(e){e.forEach((e=>{if(void 0===this.rGroupIdToAtomicIndexMap.get(e))throw new Error(`Cannot find atomic index for R group ${e}`)}));const t=Array.from(this.rGroupIdToAtomicIndexMap.entries()).filter((([t,s])=>e.includes(t))).map((([e,t])=>t));this.atoms.deleteAtoms(t)}removeRGroups(e){this.removeRGroupsFromAtomBlock(e),e.forEach((e=>{const t=this.replaceRGroupInBondsByDummy(e);this.rGroupBondPositionMap.set(e,t)}))}replaceRGroupInBondsByDummy(e){const t=this.rGroupIdToAtomicIndexMap.get(e);if(this.rGroupBondPositionMap.has(e))throw new Error(`R group ${e} is already handled`);const s=this.bonds.getPositionsInBonds(t+1);if(0===s.length)throw new Error(`Cannot find position for R group ${e}`);if(s.length>1)throw new Error(`More than one position for R group ${e}`);const n=s[0];return this.bonds.replacePositionsInBondsByDummy([n]),this.bonds.removeAtomIdFromBonds(t+1),this.removeRGroupFromAtomicIdxMap(e,t),n}removeRGroupFromAtomicIdxMap(e,t){this.rGroupIdToAtomicIndexMap.delete(e);for(const[e,s]of this.rGroupIdToAtomicIndexMap)s>t&&this.rGroupIdToAtomicIndexMap.set(e,s-1)}getRGroupIdToAtomicIdxMap(e){const t=new Map;e.filter((e=>e.startsWith("M RGP"))).forEach((e=>{const s=function(e){const t=e.split(/\s+/).filter((e=>e)).slice(3).map((e=>parseInt(e))),s=new Array(t.length/2);for(let e=0;e<t.length;e+=2)s[e/2]=[t[e+1],t[e]-1];return s}(e);for(const[e,n]of s){if(t.has(e))throw new Error(`R group ${e} is already in the map`);t.set(e,n)}}));const s=e.map(((e,t)=>{if(e.startsWith("A "))return t})).filter((e=>void 0!==e)),n=s.map((t=>e[t])),r=s.map((t=>e[t+1]));n.forEach(((e,s)=>{const n=parseInt(e.split(/\s+/)[1])-1,i=parseInt(r[s].substring(1));if(t.has(i))throw new Error(`R group ${i} is already in the map`);t.set(i,n)}));const i=this.atoms.getRGroupAtomicIndices().filter((e=>!Array.from(t.values()).includes(e)));if(0!==i.length)throw new Error(`Unaccounted R group indices: ${i}`);return t}deleteBondLineWithSpecifiedRGroup(e){const t=this.rGroupBondPositionMap.get(e);if(!t)throw new Error(`Cannot find position for R group ${e}`);const{bondLineIdx:s}=t;this.bonds.deleteBondLines([s]),this.rGroupBondPositionMap.delete(e),this.rGroupIdToAtomicIndexMap.delete(e),this.rGroupBondPositionMap.forEach((e=>{e.bondLineIdx>s&&(e.bondLineIdx-=1)}))}replaceRGroupWithAttachmentAtom(e,t){const s=this.rGroupBondPositionMap.get(e);if(!s)throw new Error(`Cannot find position for R group ${e}`);const{bondLineIdx:n,nodeIdx:r}=s;this.bonds.bondedAtoms[n][r]=t}getAttachmentAtomIdByRGroupId(e){const t=this.rGroupBondPositionMap.get(e);if(!t)throw new Error(`Cannot find position for R group ${e}`);const{bondLineIdx:s,nodeIdx:n}=t;return this.bonds.bondedAtoms[s][(n+1)%2]}capRGroups(e){this.rGroupIdToAtomicIndexMap.forEach(((t,s)=>{const n=e[s-1];"H"===n?(this.removeRGroups([s]),this.deleteBondLineWithSpecifiedRGroup(s)):this.atoms.replaceElementSymbol(t,n)}))}}class es{constructor(e){this.bondedPairs=[],this.rawBondLines=[],this.rawBondLines=e,this.bondedPairs=this.rawBondLines.map((e=>[parseInt(e.substring(0,3)),parseInt(e.substring(3,6))]))}getBondLines(){return this.bondedPairs.map(((e,t)=>{if(e.some((e=>-1===e)))throw new Error(`Bonded pair ${e} contains -1`);return`${e[0].toString().padStart(3," ")}${e[1].toString().padStart(3," ")}${this.rawBondLines[t].substring(6)}`}))}get bondedAtoms(){return this.bondedPairs}deleteBondLines(e){this.rawBondLines=this.rawBondLines.filter(((t,s)=>!e.includes(s))),this.bondedPairs=this.bondedPairs.filter(((t,s)=>!e.includes(s)))}getPositionsInBonds(e){const t=[];return this.bondedPairs.forEach(((s,n)=>{s.forEach(((s,r)=>{s===e&&t.push({bondLineIdx:n,nodeIdx:r})}))})),t}replacePositionsInBondsByDummy(e,t){void 0===t&&(t=-1),e.forEach((e=>{const{bondLineIdx:s,nodeIdx:n}=e;this.bondedPairs[s][n]=t}))}removeAtomIdFromBonds(e){this.bondedPairs=this.bondedPairs.map((t=>t.map((t=>t>e?t-1:t))))}shift(e){this.bondedPairs=this.bondedPairs.map((t=>t.map((t=>t+e))))}}class ts{constructor(e){this.coordinates=[],this.rawAtomLines=[],this.rawAtomLines=e,this.coordinates=this.rawAtomLines.map((e=>({x:parseFloat(e.substring(0,10)),y:parseFloat(e.substring(10,20))})))}get atomCoordinates(){return this.coordinates}get atomLines(){return this.rawAtomLines.map(((e,t)=>{const s=this.coordinates[t];return`${s.x.toFixed(4).padStart(10," ")}${s.y.toFixed(4).padStart(10," ")}${e.substring(20)}`}))}replaceElementSymbol(e,t){this.rawAtomLines[e]=this.rawAtomLines[e].replace("R#",t)}deleteAtoms(e){this.coordinates=this.coordinates.filter(((t,s)=>!e.includes(s))),this.rawAtomLines=this.rawAtomLines.filter(((t,s)=>!e.includes(s)))}shift(e){this.coordinates=this.coordinates.map((t=>{const s=t.x+e.x,n=t.y+e.y;if(isNaN(s)||isNaN(n))throw new Error(`Cannot shift coordinates by ${e.x}, ${e.y}`);return{x:s,y:n}}))}rotate(e){this.coordinates=this.coordinates.map((t=>{const s=t.x,n=t.y,r=s*Math.cos(e)-n*Math.sin(e),i=s*Math.sin(e)+n*Math.cos(e);if(isNaN(r)||isNaN(i))throw new Error(`Cannot rotate coordinates by ${e}`);return{x:r,y:i}}))}getRGroupAtomicIndices(){return this.rawAtomLines.map(((e,t)=>{if(e.includes("R#"))return t})).filter((e=>void 0!==e))}}class ss{constructor(e,t){this.monomerSymbol=t;const s=e.split("\n"),n=parseInt(s[3].substring(0,3)),r=parseInt(s[3].substring(3,6)),i=s.slice(4,4+n);this.atoms=new ts(i);const o=s.slice(4+n,4+n+r);this.bonds=new es(o),this.rGroups=new Qt(s,this.atoms,this.bonds),this.shiftMonomerToDefaultPosition()}deleteBondLineWithSpecifiedRGroup(e){this.rGroups.deleteBondLineWithSpecifiedRGroup(e)}shiftCoordinates(e){this.atoms.shift(e)}rotateCoordinates(e){this.atoms.rotate(e)}getBondLines(){return this.bonds.getBondLines()}getAtomLines(){return this.atoms.atomLines}removeRGroups(e){this.rGroups.removeRGroups(e)}replaceRGroupWithAttachmentAtom(e,t){this.rGroups.replaceRGroupWithAttachmentAtom(e,t)}getAttachmentAtomByRGroupId(e){return this.rGroups.getAttachmentAtomIdByRGroupId(e)}shiftR1GroupToOrigin(){const e=this.rGroups.getAtomicIdx(1);if(null===e)throw new Error(`Cannot find R1 group for monomer ${this.monomerSymbol}`);const{x:t,y:s}=this.atoms.atomCoordinates[e];this.atoms.shift({x:-t,y:-s})}alignR2AlongX(){const e=this.rGroups.getAtomicIdx(2);if(null===e)throw new Error(`Cannot find R2 group for monomer ${this.monomerSymbol}`);const t=this.atoms.atomCoordinates[e],s=t.y/t.x,n=Math.atan(s);if(isNaN(n))throw new Error(`Cannot calculate angle for R2 group for monomer ${this.monomerSymbol}`);this.rotateCoordinates(-n)}shiftMonomerToDefaultPosition(){this.shiftR1GroupToOrigin(),null!==this.rGroups.getAtomicIdx(2)&&this.alignR2AlongX()}shiftBonds(e){this.bonds.shift(e)}capRGroups(e){this.rGroups.capRGroups(e)}}class ns{constructor(e){this.simplePolymer=e,this.polymerType=this.getPolymerType(),this.idx=this.getIdx();const{monomers:t,monomerTypes:s}=this.getMonomerSymbolsAndTypes();this.monomers=t,this.monomerTypes=s}get id(){return this.polymerType+this.idx.toString()}getPolymerType(){const e=new RegExp("(PEPTIDE|RNA)[0-9]+{"),t=this.simplePolymer.match(e);if(!t)throw new Error(`Unsupported polymer type in ${this.simplePolymer}`);return t[1]}getIdx(){const e=new RegExp(`${this.polymerType}([0-9]+){`),t=this.simplePolymer.match(e);if(!t)throw new Error(`Cannot parse simple polymer id from ${this.simplePolymer}`);return parseInt(t[1])}getMonomerSymbolsAndTypes(){const e=new RegExp(`${this.polymerType}${this.idx}{|}`,"g"),t=this.simplePolymer.replace(e,"").split("."),s=[],n=[];return t.forEach((e=>{const t=e.split(/\(|\)/).map((e=>e.replace(/[\[\]]/g,"")));s.push(...t);const r=t.map(((e,t)=>t%2==0?0:1));n.push(...r)})),{monomers:s,monomerTypes:n}}getBondData(){const e=[],t=this.monomerTypes.map(((e,t)=>{if(0===e)return t})).filter((e=>void 0!==e)),s=this.monomerTypes.map(((e,t)=>{if(1===e)return t})).filter((e=>void 0!==e));for(let s=0;s<t.length-1;s++){const n=t[s],r=t[s+1];e.push([{monomerIdx:n,rGroupId:2},{monomerIdx:r,rGroupId:1}])}for(let t=0;t<s.length;t++){const n=s[t],r=n-1;e.push([{monomerIdx:r,rGroupId:3},{monomerIdx:n,rGroupId:1}])}return e}}class rs{constructor(e){const t=e.split("|");t.forEach((e=>this.validateConnectionItem(e))),this.connectionItems=t}validateConnectionItem(e){const t="(PEPTIDE|RNA)",s=new RegExp(`${t}[0-9]+,${t}[0-9]+,[0-9]+:R[0-9]+-[0-9]+:R[0-9]+`,"g");if(!e.match(s))throw new Error(`Cannot parse connection item from ${e}`)}getConnectionData(){const e=[];return this.connectionItems.forEach((t=>{const s=[],n=t.split(",");n[2].split("-").forEach(((e,t)=>{const r=n[t],i=e.split(":"),o={monomerIdx:parseInt(i[0])-1,rGroupId:parseInt(i[1].slice(1))};s.push({polymerId:r,bond:o})})),e.push(s)})),e}}class is{constructor(e){this.helm=e;const t=this.helm.split("$"),s=t[0].split("|");this.simplePolymers=s.map((e=>new ns(e))),""!==t[1]&&(this.connectionList=new rs(t[1])),this.bondData=this.getBondData()}toString(){return this.helm}getPolymerTypeByMonomerIdx(e){return this.getSimplePolymerByMonomerIdx(e).polymerType}getSimplePolymerByMonomerIdx(e){const t=this.getMonomerIdxShifts(),s=Object.values(t).sort(((e,t)=>e-t)).find((t=>e>=t));if(void 0===s)throw new Error(`Cannot find simple polymer for monomer ${e}`);const n=Object.keys(t).find((e=>t[e]===s));return this.simplePolymers.find((e=>e.id===n))}shiftBondMonomerIds(e,t){t.forEach((t=>{t.forEach((t=>{t.monomerIdx+=e}))}))}getMonomerIdxShifts(){const e={};let t=0;return this.simplePolymers.forEach((s=>{e[s.id]=t,t+=s.monomers.length})),e}getBondData(){const e=this.getMonomerIdxShifts(),t=[];return this.simplePolymers.forEach((s=>{const n=s.getBondData(),r=e[s.id];this.shiftBondMonomerIds(r,n),t.push(...n)})),this.connectionList&&this.connectionList.getConnectionData().forEach((s=>{const n=[];s.forEach((t=>{const s=e[t.polymerId],r=t.bond;r.monomerIdx+=s,n.push(r)})),t.push(n)})),t}}class os{constructor(e){this.monomerWrappers=[],this.helm=new is(e),this.bondedRGroupsMap=new Map,this.helm.bondData.forEach((e=>{e.forEach((e=>{const t=e.monomerIdx,s=e.rGroupId;this.bondedRGroupsMap.get(t)||this.bondedRGroupsMap.set(t,[]),this.bondedRGroupsMap.get(t).push(s)}))}))}addMonomer(e,t,s){const n=this.helm.getPolymerTypeByMonomerIdx(t),r=new Jt(e,n);r.shiftCoordinates(s),this.monomerWrappers.push(r)}removeRGroups(){this.monomerWrappers.forEach(((e,t)=>{this.bondedRGroupsMap.has(t)&&e.removeBondedRGroups(this.bondedRGroupsMap.get(t)),e.capTrailingRGroups()}))}getAtomNumberShifts(){const e=[];let t=0;return this.monomerWrappers.forEach((s=>{e.push(t),t+=s.getAtomLines().length})),e}restoreBondsBetweenMonomers(){this.helm.bondData.forEach((e=>{const t=e.map((e=>e.monomerIdx)),s=e.map((e=>e.rGroupId)),n=t.map((e=>this.monomerWrappers[e])),r=n[1].getAttachmentAtomByRGroupId(s[1]);n[0].replaceRGroupWithAttachmentAtom(s[0],r),n[1].deleteBondLineWithSpecifiedRGroup(s[1])}))}compileToMolfile(){const e=[],t=[];this.removeRGroups();const s=this.getAtomNumberShifts();this.monomerWrappers.forEach(((e,t)=>{e.shiftBonds(s[t])})),this.restoreBondsBetweenMonomers(),this.monomerWrappers.forEach((s=>{e.push(...s.getAtomLines()),t.push(...s.getBondLines())}));const n=e.length;if(n>999)throw new Error(`Atom count in polymer ${this.helm.toString()} is ${n} and exceeds 999`);const r=t.length;return["\nDatagrok\n",`${n.toString().padStart(3," ")}${r.toString().padStart(3," ")} 0 0 1 0 0 V2000`,e.join("\n"),t.join("\n"),"M END\n"].join("\n")}}const as="System:AppData/Bio/polytool-rules/";class ls{constructor(e){this.helmColumn=e}hasTerminals(e){let t=!1;return e.includes("(1)")&&(t=!0),e.includes("(2)")&&(t=!0),t}getLinkedPositions(e,t){const s=e.replace("PEPTIDE1{","").replace("}$$$$","").split(".").map((e=>e.replace("[","").replace("]",""))),n=new Array(t.length);for(let e=0;e<t.length;e++){let r=!1,i=!1,o=!1,a=-1,l=-1;const c=`(${t[e].code})`;for(let n=0;n<s.length;n++)if(s[n].includes(c)){if(r){if(o&&s[n]==t[e].secondMonomer+c){i=!0,l=n;break}if(o||s[n]!=t[e].firstMonomer+c)continue;i=!0,l=n;break}if(s[n]==t[e].firstMonomer+c)r=!0,o=!0,a=n;else{if(s[n]!=t[e].secondMonomer+c)continue;r=!0,o=!1,a=n}}n[e]=r&&i?o?[a,l]:[l,a]:[-1,-1]}return n}getRules(e){const t=e.rowCount,s=new Array(t),n=e.columns.byName("code"),r=e.columns.byName("monomer1"),i=e.columns.byName("monomer2"),o=e.columns.byName("modification1"),a=e.columns.byName("modification2"),l=e.columns.byName("R1"),c=e.columns.byName("R2");for(let e=0;e<t;e++)s[e]={code:n.get(e),firstMonomer:r.get(e),secondMonomer:i.get(e),firstModification:o.get(e),secondModification:a.get(e),firstR:l.get(e),secondR:c.get(e)};return s}getTransformedHelm(e,t){const s=t.length,n=this.getLinkedPositions(e,t),r=[],i=[],o=[],a=[];for(let l=0;l<s;l++){if(-1==n[l][0])continue;const s=e.replace("PEPTIDE1{","").replace("}$$$$","").split("."),c=s[n[l][0]].replace("[","").replace("]",""),h=s[n[l][1]].replace("[","").replace("]","");s[n[l][0]]=s[n[l][0]].replace(c,t[l].firstModification),s[n[l][1]]=s[n[l][1]].replace(h,t[l].secondModification),r.push(n[l][0]+1),i.push(n[l][1]+1),o.push(t[l].firstR),a.push(t[l].secondR),e="PEPTIDE1{";for(let t=0;t<s.length;t++)t!=s.length-1?e=e+s[t]+".":e+=s[t];e+="}$$$$"}const l=function(e,t){let s=e.replace("}$$$$","}$");for(let e=0;e<t.allPos1.length;e++)s+=0==e?"PEPTIDE1,PEPTIDE1,":"|PEPTIDE1,PEPTIDE1,",s+=`${t.allPos1[e]}:R${t.allAttaches1[e]}-${t.allPos2[e]}:R${t.allAttaches2[e]}`;return s+="$$$",s}(e,{allPos1:r,allPos2:i,allAttaches1:o,allAttaches2:a});return l}transform(e){const t=this.getRules(e);return this.helmColumn.toList().map((e=>this.hasTerminals(e)?this.getTransformedHelm(e,t):(console.log(e),e)))}}class cs{constructor(){}static getInstance(e){return new ls(e)}}async function hs(e,t){const s=e.dataFrame,n=Q.Cn.getOrCreate(e).convert(be.r2.HELM),r=cs.getInstance(n),o=new a.FileSource(as),l=await o.readAsText("rules.csv"),c=a.DataFrame.fromCsv(l),h=r.transform(c),u=s.columns.getUnusedName("transformed("+e.name+")"),d=a.Column.fromList("string",u,h);var p;(p=d).setTag("quality",a.SEMTYPE.MACROMOLECULE),p.setTag("aligned","SEQ"),p.setTag("alphabet","PT"),d.setTag("units",be.r2.HELM);const m=await qt(s,d);m.name=s.columns.getUnusedName("molfile("+e.name+")"),t&&(d.setTag("cell.renderer","helm"),s.columns.add(d)),s.columns.add(m,!0),await i.data.detectSemanticTypes(s)}const us="System:AppData/Bio/polytool-rules/";var ds=s(1047);const ps={symbol:"Short Name",name:"Medium Name",smiles:"SMILES"},ms=[{capGroupSMILES:"[*:1][H]",alternateId:"R1-H",capGroupName:"H",label:"R1"},{capGroupSMILES:"O[*:2]",alternateId:"R2-OH",capGroupName:"OH",label:"R2"},{capGroupSMILES:"[*:3][H]",alternateId:"R3-H",capGroupName:"H",label:"R3"}];class fs{constructor(e){this.rawLib=e}isValid(){return this.rawLib.every((e=>"object"==typeof e&&Object.values(ps).every((t=>t in e&&"string"==typeof e[t]))))}getJsonMonomerLib(){const e=[];return this.rawLib.forEach((t=>{const s=this.prepareMonomer(t);e.push(s)})),e}prepareMonomer(e){const t={...ds.Z2};Object.entries(ps).forEach((([s,n])=>{const r=e[n];t[s]=r}));let s="smiles";const n=e[ps[s]],r=new gs(n),i=r.getCappedSmiles();return t[s]=i,s="rgroups",t[s]=ys.getRGroups(r.getNumberOfRGroups()),s="molfile",t[s]=new bs(r.getSmilesWithRGroups()).getMolfile(),t}}class gs{constructor(e){let t=0;this.smilesWithRGroups=e.replace(/\[R(\d+)\]/g,((e,s)=>(++t,`[${s}*]`))),this.numberOfRGroups=t}getSmilesWithRGroups(){return this.smilesWithRGroups}getCappedSmiles(){return this.capRGroups()}getNumberOfRGroups(){return this.numberOfRGroups}capRGroups(){let e=this.smilesWithRGroups.replace("[1*]","[H:1]");return e=e.replace("[2*]","[OH:2]"),e.replace("[3*]","[H:3]")}}class ys{constructor(){}static getRGroups(e){return ms.slice(0,e)}}class bs{constructor(e){this.smilesWithRGroups=e}getMolfile(){let e=a.chem.convert(this.smilesWithRGroups,a.chem.Notation.Smiles,a.chem.Notation.MolBlock);return e=this.restoreRGPLine(e),e=this.fixRGroupSymbols(e),e}restoreRGPLine(e){return e.replace("M ISO","M RGP")}fixRGroupSymbols(e){return e.replace(/\bR\b/g,"R#")}}class vs{constructor(e,t){this.fileName=e,this.fileContent=t,this.validateFileType();const s=a.DataFrame.fromCsv(this.fileContent),n=this.toJson(s);this.polyToolMonomerLib=new fs(n),this.validateContent()}async getJson(){return this.polyToolMonomerLib.getJsonMonomerLib()}toJson(e){return Array.from({length:e.rowCount},((t,s)=>e.columns.names().reduce(((t,n)=>(t[n]=e.get(n,s),t)),{})))}validateFileType(){if(!this.fileName.endsWith(".csv"))throw new Error(`File ${this.fileName} is not an CSV file`)}validateContent(){if(!this.polyToolMonomerLib.isValid())throw new Error("Invalid format of CSV monomer lib")}}function ws(e,t,s,n){const r=Q.Cn.getOrCreate(e);let i=null,o=null;for(let e=0;e<r.posList.length;++e)r.posList[e]==t&&(i=e),r.posList[e]==s&&(o=e);if(null===i&&null!==t)throw new Error(`Start position ${t} not found.`);if(null===o&&null!==s)throw new Error(`End position ${s} not found.`);if(r.posList.length<o)throw new Error(`End position ${o} exceeds positions length`);const a=n||`${e.name}: (${t??""}-${s??""})`;return r.getRegion(i,o,a)}const Cs={df:a.DataFrame.fromCsv("seq,value\nATCCGTCGT,0.5\nTGTTCGTCA,0.4\nATGGTCGTA,0.7\nATCCGTGCA,0.1"),colName:"seq",positionNames:["1","1A","1C","2","4","4A","4B","5","6"].join(be.CI),regions:[{name:"first region",start:"1",end:"2"},{name:"second region",start:"1C",end:"4"},{name:"overlapping second",start:"1C",end:"4A"},{name:"whole sequence",start:"1",end:"6"},{name:"bad start",start:"0",end:"6"},{name:"bad end",start:"1",end:"4C"},{name:"bad start & end",start:"0",end:"4C"}]};class Ss{constructor(e,t){this.urlParams=e,this.funcName=t}async init(e){this.data=e??Cs;const t=this.data.df.getCol(this.data.colName);this.data.positionNames&&t.setTag(".positionNames",this.data.positionNames),this.data.regions&&t.setTag(".regions",JSON.stringify(this.data.regions)),await this.buildView()}async buildView(){await i.data.detectSemanticTypes(this.data.df),this.view=i.shell.addTableView(this.data.df),this.view.path=this.view.basePath=`func/${Is.name}.${this.funcName}`;const e=await this.view.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:this.data.colName});this.view.dockManager.dock(e,a.DOCK_TYPE.DOWN,null,"WebLogo",.35)}}class xs{constructor(e){this.call=e,this.inputs=new class{},this.fixRegion=!1,this.defaultName=!0,this.defaultNameUpdating=!1;const t=e=>this.call.inputParams[e].property.description;this.inputs.table=o.tableInput("Table",this.call.inputParams.table.value??i.shell.tv.dataFrame,void 0,(()=>{}));const s=this.call.inputParams.sequence.value??this.inputs.table.value.columns.bySemType(a.SEMTYPE.MACROMOLECULE),n={filter:e=>e.semType===a.SEMTYPE.MACROMOLECULE};this.inputs.sequence=o.columnInput("Sequence",i.shell.tv.dataFrame,s,this.sequenceInputChanged.bind(this),n),this.inputs.start=o.choiceInput("Start",void 0,[],this.startInputChanged.bind(this)),this.inputs.end=o.choiceInput("End",void 0,[],this.endInputChanged.bind(this)),this.inputs.region=o.choiceInput("Region",null,[],this.regionInputChanged.bind(this)),this.inputs.name=o.stringInput("Column name",this.getDefaultName(),this.nameInputChanged.bind(this),{clearIcon:!0}),this.inputs.name.onInput(this.nameInputInput.bind(this));for(const e in this.call.inputParams)o.tooltip.bind(this.inputs[e].captionLabel,t(e));this.sequenceInputChanged()}sequenceInputChanged(){const e=this.inputs.sequence.value;e&&Q.Cn.getOrCreate(e),this.updateRegionItems(),this.updateStartEndInputItems(),this.updateRegion(!0),this.updateNameInput()}regionInputChanged(){this.fixRegion=!0;try{const e=this.inputs.region.stringValue,t=e?JSON.parse(e):null;if(null!==t)this.inputs.start.value=t?.start,this.inputs.end.value=t?.end;else{const e=Q.Cn.getOrCreate(this.inputs.sequence.value);this.inputs.start.value=e.posList[0],this.inputs.end.value=e.posList[e.posList.length-1]}}finally{this.fixRegion=!1}}startInputChanged(){this.updateRegion(!1),this.updateNameInput()}endInputChanged(){this.updateRegion(!1),this.updateNameInput()}nameInputChanged(){this.defaultNameUpdating||(this.defaultName=!1)}nameInputInput(){this.inputs.name.value||(this.defaultName=!0,this.inputs.name.input.focus())}updateStartEndInputItems(){const e=this.inputs.sequence.value,t=e?Q.Cn.getOrCreate(e):null,s=this.inputs.start.input,n=this.inputs.end.input;for(let e=s.options.length-1;e>=0;--e)s.options.remove(e);for(let e=n.options.length-1;e>=0;--e)n.options.remove(e);for(const e of t?.posList??[]){const t=document.createElement("option"),r=document.createElement("option");t.text=r.text=e,t.value=r.value=e,s.options.add(t),n.options.add(r)}s.value=t?.posList[0]??"",n.value=t?.posList[t?.posList.length-1]??""}updateRegionItems(){const e=this.inputs.sequence.value,t=e?e.getTag(".regions"):null,s=t?JSON.parse(t):null,n=this.inputs.region.input;for(let e=n.options.length-1;e>=0;--e)n.options.remove(e);const r=document.createElement("option");if(r.text="",r.value=JSON.stringify(null),n.options.add(r),null!=s){this.inputs.region.root.style.removeProperty("display");for(const e of s){const t=document.createElement("option");t.text=`${e.name}: ${e.start}-${e.end}`,t.value=JSON.stringify(e),n.options.add(t)}}else this.inputs.region.root.style.display="none"}updateRegion(e){const t=this.inputs.start.stringValue??"",s=this.inputs.end.stringValue??"";if(!this.fixRegion){const e=this.inputs.region.input;e.selectedIndex=-1;for(let n=e.options.length-1;n>=0;--n){const r=e.options[n],i=JSON.parse(r.value);i&&t===i.start&&s===i.end&&(e.selectedIndex=n)}}}updateNameInput(){this.defaultNameUpdating=!0;try{this.defaultName&&(this.inputs.name.value=this.getDefaultName())}finally{this.defaultNameUpdating=!1}}getDefaultName(){const e=this.inputs.region.stringValue,t=e?JSON.parse(e):null,s=this.inputs.sequence.value,n=this.inputs.start.stringValue??"",r=this.inputs.end.stringValue??"";return null!=t?`${s.name}(${t.name}): ${t.start}-${t.end}`:`${s?.name}: (${n}-${r})`}getParams(){return{table:this.inputs.table.value,sequence:this.inputs.sequence.value,start:this.getStart(),end:this.getEnd(),name:this.getName()}}getStart(){return this.inputs.start.stringValue}getEnd(){return this.inputs.end.stringValue}getName(){const e=this.inputs.name.stringValue;return""==e?null:e}dialog(){const e=o.inputs(Object.values(this.inputs),{style:{minWidth:"320px"}});o.dialog({title:"Get Region"}).add(e).onOK((()=>{(async()=>{const e=this.getParams();await this.call.func.prepare(e).call(!0)})().catch((e=>{Is.handleErrorUI(e)}))})).show()}widget(){const e=o.inputs(Object.entries(this.inputs).filter((([e,t])=>!["table","sequence"].includes(e))).map((([e,t])=>t))),t=o.button("Get Region",(()=>{(async()=>{const e=this.getParams();await this.call.func.prepare(e).call(!0)})().catch((e=>{Is.handleErrorUI(e)}))}));return a.Widget.fromRoot(o.divV([e,o.div(t)]))}}var As=s(8601);class Es{maxIterations={uiName:"Max iterations",value:0,tooltip:"Maximum iterations for MCL process.Default is \n 0 which will construct the clusters with plain sparse matrix. Values greater than 0 will \n perform MCL with the given number of iterations and will result in trans-cluster activity cliff lines."};constructor(){}}class _s extends m{activitiesInput;activitiesInputRoot;similarityInput;constructor(e={}){super({...e,enableMCL:!0});const t=this.tableInput.value.columns.numerical;this.activitiesInput=o.columnInput("Activities",this.tableInput.value,a.Utils.firstOrNull(t),null,{filter:e=>Array.from(t).includes(e)}),this.activitiesInputRoot=this.activitiesInput.root,this.similarityInput=o.intInput("Similarity cutoff",80),this.methodsParams[d]=new Es}onTableInputChanged(){if(super.onTableInputChanged(),this.activitiesInputRoot){o.empty(this.activitiesInputRoot);const e=this.tableInput.value.columns.numerical;this.activitiesInput=o.columnInput("Activities",this.tableInput.value,a.Utils.firstOrNull(e),null,{filter:t=>Array.from(e).includes(t)}),Array.from(this.activitiesInput.root.children).forEach((e=>this.activitiesInputRoot.append(e)))}}getEditor(){return o.div([this.tableInput,this.colInputRoot,this.preprocessingFunctionInputRoot,this.preprocessingFuncSettingsDiv,this.activitiesInputRoot,this.similarityMetricInputRoot,this.methodInput,this.methodSettingsDiv,this.similarityMetricInputRoot,this.similarityInput],{style:{minWidth:"320px"},classes:"ui-form"})}getParams(){return{...super.getParams(),activities:this.activitiesInput.value,similarityThreshold:this.similarityInput.value}}}function Ts(e){const t=["Embed_X","Embed_Y"],s=e.columns.names().filter((e=>e.includes(t[0]))).length+1;return t.map((e=>`${e}_${s}`))}const Is=new Ut;function $s(){return at.A.instance}let Ms=null;class Ns{constructor(e){this._palette=e}get(e){return this._palette[e]}}async function Ls(){Is.logger.debug("Bio: initBio(), started");const e=await i.functions.call("Chem:getRdKitModule");await Promise.all([(async()=>{await at.A.instance.loadLibraries()})(),(async()=>{const e=await Is.getProperties(),t=new Wt(e);Is.properties=t})()]).finally((()=>{Is.completeInit()}));const t=at.A.instance.getBioLib(),s=[],n=[],r=t.getMonomerMolsByPolymerType("PEPTIDE");Object.keys(r).forEach((t=>{s.push(t);const i=r[t].replaceAll("#R","O "),o=e.get_mol(i),a=JSON.parse(o.get_descriptors()).CrippenClogP;n.push(a),o?.delete()}));const o=n.reduce(((e,t)=>e+t),0)/n.length||0,a={};for(let e=0;e<s.length;e++)a[s[e]]=n[e]<o?"#4682B4":"#DC143C";Ms=new Ns(a),Is.logger.debug("Bio: initBio(), completed")}function Ps(e){const t=new Yt(e);return t.init().then((()=>{})).catch((e=>{const t=e instanceof Error?e.message:e.toString();i.shell.error(t)})),t}function Os(){return at.A.instance.getBioLib()}function Rs(e){return Q.Cn.getOrCreate(e)}function ks(e){const t="getRegionTopMenu",s=a.Func.find({package:Is.name,name:t});if(1!==s.length)throw new Error(`Package '${Is.name}' func '${t}' not found`);const n=s[0].prepare({table:e.dataFrame,sequence:e});return new xs(n).widget()}async function Fs(e){return async function(){const e=o.label("Manage monomer libraries");return ct()(e).addClass("d4-link-action"),e.onclick=async()=>await ft(),new a.Widget(e)}()}function Gs(e){try{new xs(e).dialog()}catch(e){const t=e instanceof Error?e.message:e.toString(),s=e instanceof Error?e.stack:void 0;i.shell.error(`Get region editor error: ${t}`),Is.logger.error(t,void 0,s)}}function Ds(e){const t=new Ft;o.dialog({title:"Split to Monomers"}).add(t.paramsUI).onOK((async()=>e.func.prepare(t.funcParams).call(!0))).show()}function Vs(e){const t=new m({semtype:a.SEMTYPE.MACROMOLECULE});o.dialog({title:"Sequence Space"}).add(t.getEditor()).onOK((async()=>{const s=t.getParams();return e.func.prepare({molecules:s.col,table:s.table,methodName:s.methodName,similarityMetric:s.similarityMetric,plotEmbeddings:s.plotEmbeddings,options:s.options,preprocessingFunction:s.preprocessingFunction,clusterEmbeddings:s.clusterEmbeddings}).call()})).show()}function Bs(e){const t=new _s({semtype:a.SEMTYPE.MACROMOLECULE});o.dialog({title:"Activity Cliffs"}).add(t.getEditor()).onOK((async()=>{const s=t.getParams();return e.func.prepare({table:s.table,molecules:s.col,activities:s.activities,similarity:s.similarityThreshold,methodName:s.methodName,similarityMetric:s.similarityMetric,preprocessingFunction:s.preprocessingFunction,options:s.options}).call()})).show()}function Hs(){return new _e}function js(e){return function(e){const t=Array.from(e.dataFrame.columns).filter((e=>e.semType===a.SEMTYPE.MOLECULE)).map((e=>e.name));new Set(t).delete(e.name);const s=o.choiceInput("Monomer width",null!=e?.temp["monomer-width"]?e.temp["monomer-width"]:ge.short,[ge.short,ge.long],(t=>{e.temp["monomer-width"]=t,e.setTag(".mm.cellRenderer.settingsChanged",we.true),e.dataFrame.fireValuesChanged()}));s.setTooltip("In short mode, only the 'Max monomer length' characters are displayed, followed by .. if there are more");const n=parseInt(e.getTag(pe.maxMonomerLength)),r=o.intInput("Max monomer length",isNaN(n)?Is.properties.MaxMonomerLength:n,(t=>{e.setTag(pe.maxMonomerLength,t.toString()),e.setTag(".mm.cellRenderer.settingsChanged",we.true),e.dataFrame.fireValuesChanged()}));r.setTooltip(`The max length of monomer name displayed without shortening in '${ge.short}' monomer width mode.`);const i=o.intInput("Monomer margin",e.temp[".mm.cellRenderer.gapLength"]??0,(t=>{e.temp[".mm.cellRenderer.gapLength"]=t,e.setTag(".mm.cellRenderer.settingsChanged",we.true),e.dataFrame.fireValuesChanged()}));i.setTooltip("The size of margin between monomers (in pixels)");const l=o.boolInput("Color code",null==e?.temp["color-code"]||e.temp["color-code"],(t=>{e.temp["color-code"]=t,e.dataFrame.fireValuesChanged()}));l.setTooltip("Color code");const c=o.stringInput("Reference sequence",null!=e?.temp["reference-sequence"]?e?.temp["reference-sequence"]:"",(t=>{e.temp["reference-sequence"]=t,e.dataFrame.fireValuesChanged()}));c.setTooltip("Reference sequence is not empty, then the sequence will be render \nas a difference from the reference sequence");const h=o.boolInput("Compare with current",null==e?.temp["compare-with-current"]||e.temp["compare-with-current"],(t=>{e.temp["compare-with-current"]=t,e.dataFrame.fireValuesChanged()}));h.setTooltip('When on, all sequences get rendered in the "diff" mode');const u=o.inputs([s,r,i,c,l,h]);return new a.Widget(u)}(e)}function Ws(e){return(0,Zt.t)(e)}function Us(){return new _e}function Zs(){return new Te}function Ys(e,t,s,n,r){const i=new Be.k(n,r,s,t);return"Local alignment"==e?i.smithWaterman():i.needlemanWunch()}function Ks(){return new Re.OZ}function qs(){return new Ve}function zs(e,t,s,n){return ws(e,t??null,s??null,n??null)}async function Xs(e,t,s,n,r){const o=ws(t,s??null,n??null,r??null);t.dataFrame.columns.add(o),await i.data.detectSemanticTypes(t.dataFrame)}async function Js(e,t,n,r,h,u,p,m){if(!(0,Ot.n)(t,"Activity Cliffs"))return;const g=Ts(e),y={units:t.getTag(a.TAGS.UNITS),aligned:t.getTag("aligned"),separator:t.getTag("separator"),alphabet:t.getTag("alphabet")},b=u,v=t,w=async()=>await async function(e,t,n,r,l,c,h,u,p,m,g,y,b,v,w,C){j++;const S=c/100;let x,A=!1;const E=y.inputs,_=await y.apply({[E[0].name]:t,[E[1].name]:h,...p.preprocessingFuncArgs??{}});let T=[];if(u===d){const t=await function(e,t,n,r,i,o,a=10){const l=new Worker(new URL(s.p+s.u(709),s.b));let c;return l.postMessage({data:e,threshold:t,weights:n,aggregationMethod:r,distanceFns:i,distanceFnArgs:o,maxIterations:a}),{promise:new Promise(((e,t)=>{c=e,l.onmessage=t=>{setTimeout((()=>l.terminate()),100),e(t.data.res)},l.onerror=e=>{setTimeout((()=>l.terminate()),100),t(e)}})),terminate:()=>{try{c(null),l.terminate()}catch(e){console.error(e)}}}}([_.entries],c,[1],"MANHATTAN",[h],[_.options??{}],p?.maxIterations??5).promise;e.columns.addNewInt(e.columns.getUnusedName("MCL Cluster")).init((e=>t.clusters[e])),T=[t.embedX,t.embedY]}else T=await H([_.entries],u,[h],[1],"MANHATTAN",{...p,distanceFnArgs:[_.options??{}]});if(T.length!==n.length)throw new Error("Number of axes names should be equal to number of embedding dimensions");for(let t=0;t<T.length;++t)e.columns.addNewFloat(n[t]).init((e=>T[t][e]));const I=await(new k).calc(_.entries,h,S,_.options),$=await async function(e,t){const s=e.distance.map(((s,n)=>{const r=Math.abs(t.get(e.i[n])-t.get(e.j[n]));return 0!=s?r/s:1/0})),n=e.distance.map((e=>1-e)),r=e.i,i=e.j,o=new Set;return e.distance.forEach(((t,s)=>{o.add(e.i[s]),o.add(e.j[s])})),{simVals:n,saliVals:s,n1:r,n2:i,cliffsMolIds:o}}(I,l),M=function(e,t,s,n,r,i){const o=new Array(e).fill(0);for(let e=0;e!=s.length;++e)t[e]!=1/0&&(i.get(s[e])>i.get(n[e])?o[s[e]]+=t[e]:o[n[e]]+=t[e]);return a.Column.fromList("double",`sali_${r[0].substring(r[0].lastIndexOf("_"))}`,o)}(t.length,$.saliVals,$.n1,$.n2,n,l);e.columns.add(M);const N=function(e,t){const s=a.BitSet.create(e.rowCount);for(let n=0;n<e.rowCount;n++)s.set(n,t.has(n));return s}(e,$.cliffsMolIds),L=function(e){const t=e.filter((e=>e!==1/0)),s=t.reduce(((e,t)=>Math.min(e,t)),Number.MAX_VALUE),n=t.reduce(((e,t)=>Math.max(e,t)),s);return{max:n,min:s}}($.saliVals),P=.8/(L.max-L.min),O=i.shell.getTableView(e.name),R=O.addViewer(a.VIEWER.SCATTER_PLOT,{xColumnName:n[0],yColumnName:n[1],size:M.name,color:l.name,showXSelector:!1,showYSelector:!1,showSizeSelector:!1,showColorSelector:!1,markerMinSize:5,markerMaxSize:25,title:r}),G=function(e,t,s,n,r,i,o,l){const c={from:new Uint32Array(t.n1.length),to:new Uint32Array(t.n1.length),opacities:new Float32Array(t.n1.length),colors:new Array(t.n1.length),widths:new Float32Array(t.n1.length)};for(let s=0;s<t.n1.length;s++)c.from[s]=t.n1[s],c.to[s]=t.n2[s],c.opacities[s]=t.saliVals[s]===1/0?1:.2+(t.saliVals[s]-o.min)*l,c.colors[s]=e.selection.get(c.from[s])&&e.selection.get(c.to[s])?"255,255,0":"0,128,0",c.widths[s]=1;const h=a.DataFrame.create(c.from.length);return z.forEach(((e,t)=>{h.columns.addNewString(e).init((e=>s.get(0===t?c.from[e]:c.to[e]))),function(e,t){Object.keys(t).forEach((s=>{e.tags[s]=t[s]}))}(h.col(e),i),h.col(e).semType=r})),h.columns.addNewFloat(Z).init((e=>Math.abs(n.get(c.from[e])-n.get(c.to[e])))),h.columns.addNewInt(q).init((e=>e)),h.columns.addNewFloat(Y).init((e=>t.saliVals[e])),h.columns.addNewFloat(K).init((e=>t.simVals[e])),h.name=`${W}${j}`,{lines:c,linesDf:h}}(e,$,t,l,m,g,L,P);G.lines.skipMultiLineCalculation=!0,G.linesDf.col(Y).setTag("description","Structure−Activity Landscape Index (activity difference divided by 1 minus similarity)");const V=new D(R,n[0],n[1],G.lines,F.none),B=w?w(G.linesDf,z).sort([Y],[!1]):G.linesDf.plot.grid().sort([Y],[!1]);B.col(q)&&(B.col(q).visible=!1),e.temp[".cliffsDfGrid"]=B;const J=o.button(`${G.linesDf.rowCount} cliffs`,(()=>{O.dockManager.dock(B,"down",null,"Activity cliffs",C??.2)}));J.classList.add("scatter_plot_link","cliffs_grid"),R.root.append(J);const Q=o.switchInput("Show only cliffs",!1,(()=>{Q.value?(R.dataFrame.setTag(X,n[0]),e.filter.and(N),U.next(n[0])):(R.dataFrame.setTag(X,""),e.filter.setAll(!0),U.next(""))}));Q.root.classList.add("scatter_plot_link","show_only_cliffs"),R.root.append(Q.root),U.subscribe((e=>{Q.enabled=""===e||e===n[0]}));let ee=!1;R.onEvent("d4-before-draw-scene").subscribe((t=>{ee?ee=!1:Q.value&&(setTimeout((()=>{e.filter.and(N)}),100),ee=!0)}));const te=i.events.onViewerClosed.subscribe((e=>{e.args.viewer===R&&(O.dockManager.close(B.root),te.unsubscribe(),O.subs=O.subs.filter((e=>e!==te)))}));return O.subs.push(te),G.linesDf.onCurrentCellChanged.subscribe((()=>{for(let e=0;e<G.linesDf.rowCount;e++)G.lines.widths[e]=e===G.linesDf.currentRowIdx?3:1;V.linesToRender=G.lines;const s=G.linesDf.currentCol&&G.linesDf.currentCol.name===z[1]?G.lines.to:G.lines.from,r=-1!==G.linesDf.currentRowIdx?G.linesDf.currentRowIdx:null;if(R.dataFrame.currentRowIdx=r?s[r]:-1,null!==r){const s=G.linesDf.currentRowIdx;V.currentLineId=s;const{zoomLeft:a,zoomRight:c,zoomTop:h,zoomBottom:u}=function(e,t,s,n,r,i){const o=Math.abs(s-r),a=Math.abs(n-i),l=e/o,c=t/a,h=Math.min(l,c),u=e/h*5,d=t/h*5,p=(s<r?s:r)+o/2-u/2,m=(n>i?n:i)-a/2+d/2;return{zoomLeft:p,zoomRight:p+u,zoomTop:m,zoomBottom:m-d}}(R.viewport.width,R.viewport.height,R.dataFrame.get(n[0],G.lines.from[s]),R.dataFrame.get(n[1],G.lines.from[s]),R.dataFrame.get(n[0],G.lines.to[s]),R.dataFrame.get(n[1],G.lines.to[s]));R.zoom(a,h,c,u),Q.value?e.filter.and(N):!0===Q.enabled&&e.filter.setAll(!0),setTimeout((()=>{!function(e,t,s,n,r,a,l,c,h){const u=t.getPane("Cliff Details");o.empty(u.root);const d=h({points:[s,n],lineId:r,df:e,seqCol:a,activityCol:l,sali:c});u.root.append(d),setTimeout((()=>{i.shell.o=t.root}),500)}(e,x,G.lines.from[r],G.lines.to[r],r,t,l,G.linesDf.get(Y,r),v);const s=R.dataFrame.getSortedOrder(O.grid.sortByColumns,O.grid.sortTypes);O.grid.scrollToCell(t.name,s.indexOf(R.dataFrame.currentRowIdx))}),1e3)}})),G.linesDf.onSelectionChanged.subscribe((t=>{setTimeout((()=>(()=>{const t=a.BitSet.create(e.rowCount);for(let e=0;e<G.linesDf.rowCount;e++){const s=G.linesDf.selection.get(e);s&&(t.set(G.lines.from[e],!0),t.set(G.lines.to[e],!0)),G.lines.colors[e]=s?"255,255,0":"0,128,0"}e.selection.copyFrom(t),V.linesToRender=G.lines})()),100)})),e.onSelectionChanged.subscribe((t=>{!1===e.selection.anyTrue&&"number"==typeof t&&(A?A=!1:(e=>{e.selection.setAll(!1);for(let e=0;e<G.lines.colors.length;e++)G.lines.colors[e]="0,128,0";V.linesToRender=G.lines})(B.dataFrame))})),V.lineClicked.subscribe((t=>{if(A=!0,V.currentLineId=t.id,-1!==t.id){const s=G.linesDf.selection.clone();setTimeout((()=>{t.event.ctrlKey?(s.set(t.id,!s.get(t.id)),G.linesDf.selection.copyFrom(s)):(G.linesDf.currentRowIdx!==t.id&&(G.linesDf.currentRowIdx=t.id,e.currentRowIdx=G.lines.from[t.id]),G.linesDf.selection.copyFrom(s));const n=G.linesDf.getSortedOrder(B.sortByColumns,B.sortTypes);B.scrollToCell(z[0],n.indexOf(t.id))}),500)}})),V.lineHover.pipe((0,f.debounceTime)(500)).subscribe((s=>{-1!==s.id&&-1===e.mouseOverRowIdx&&o.tooltip.show(b({lineId:s.id,points:[G.lines.from[s.id],G.lines.to[s.id]],df:e,seqCol:t,activityCol:l}),s.x,s.y)})),R.addProperty("similarityLimit","double",S),x=function(){const e=o.accordion(),t=o.element("i");return t.className="grok-icon svg-icon svg-view-layout",e.addTitle(o.span([t,o.label("Activity cliffs")])),e.addPane("Cliff Details",(()=>o.divText("Cliff has not been selected")),!0),i.shell.o=e.root,e}(),R}(e,v,g,"Activity cliffs",n,r,b,h,{...m??{}},a.SEMTYPE.MACROMOLECULE,y,p,Ze,Ye,Xe),C=h===c.A.UMAP?2e5:2e4,S=h===c.A.UMAP?5e3:2e3;if(e.rowCount>C)return void i.shell.warning(`Too many rows, maximum for sequence activity cliffs is ${C}`);const x=a.TaskBarProgressIndicator.create("Running sequence activity cliffs ...");return new Promise(((t,s)=>{e.rowCount>S&&!m?.[l.sS]?o.dialog().add(o.divText("Activity cliffs analysis might take several minutes.\n Do you want to continue?")).onOK((async()=>{w().then((e=>t(e))).catch((e=>s(e)))})).onCancel((()=>{t(void 0)})).show():w().then((e=>t(e))).catch((e=>s(e)))})).catch((e=>{const[t,s]=(0,ie.yf)(e);throw Is.logger.error(t,void 0,s),e})).finally((()=>{x.close()}))}async function Qs(e,t,s=1,n=.6,r="Morgan"){if(e.semType!==a.SEMTYPE.MACROMOLECULE)return{entries:e.toList(),options:{}};const{seqList:i,options:o}=await je(e,t,r);return{entries:i,options:{...o,gapOpen:s,gapExtend:n}}}async function en(e,t){e.version!==e.temp["last-invalidated-version"]&&await(0,Ue.HV)(e,!1);const s=e.temp["monomeric-mols"],n=await i.functions.call("Chem:getMorganFingerprints",{molColumn:s}),r=new Array(n.length).fill(null);for(let e=0;e<n.length;e++){if(n.isNone(e)||!n.get(e))continue;const t=n.get(e);r[e]=G.Z.fromUint32Array(t.length,new Uint32Array(t.getBuffer().buffer))}return{entries:r,options:{}}}async function tn(e,t,n,r,c,h,u,d){if((0,Ot.n)(t,"Sequence Space"))return h||(h=a.Func.find({name:"macromoleculePreprocessingFunction",package:"Bio"})[0]),u??(u={}),await async function(e,t,n,r,c,h,u,d=!0,p=!1,m={preprocessingFuncArgs:[]},f={}){const g={showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1};if(t.length!==r.length||t.length!==h.length||t.length!==c.length||t.length!==m.preprocessingFuncArgs.length)throw new Error("columns, metrics and preprocessing functions, weights and function argumentsmust have the same length");const y=i.shell.tableView(e.name)??i.shell.addTableView(e),b=async()=>{const b=a.TaskBarProgressIndicator.create(`Initializing ${f.scatterPlotName??"dimensionality reduction"} ...`);let v;try{const w=Ts(e);function C(t,s,n){let r=null,i=null;e.columns.names().includes(w[0])?(r=e.columns.byName(w[0]),i=e.columns.byName(w[1])):(r=e.columns.add(a.Column.float(w[0],e.rowCount)),i=e.columns.add(a.Column.float(w[1],e.rowCount)),d&&!v&&(v=y.scatterPlot({...g,x:w[0],y:w[1],title:f.scatterPlotName??"Embedding space"}))),f[l.Ec]&&(v?.root&&o.setUpdateIndicator(v.root,!1),r.init((e=>n[0]?n[0][e]:void 0)),i.init((e=>n[1]?n[1][e]:void 0)));const c=t/s*100;b.update(c,`Running ${f.scatterPlotName??"dimensionality reduction"}... ${c.toFixed(0)}%`)}async function S(){e.columns.add(a.Column.float(w[0],e.rowCount)),e.columns.add(a.Column.float(w[1],e.rowCount));let s=null;d&&(v=y.scatterPlot({...g,x:w[0],y:w[1],title:f.scatterPlotName??"Embedding space"}),o.setUpdateIndicator(v.root,!0));const p=i.events.onViewerClosed.subscribe((e=>{const t=e.args.viewer;t?.getOptions()?.look?.title&&v?.getOptions()?.look?.title&&t?.getOptions()?.look?.title===v?.getOptions()?.look?.title&&(i.events.fireCustomEvent(V,{}),p.unsubscribe(),s?.(),b.close())})),S=new Promise((async(e,i)=>{try{s=e;const i=[];for(let e=0;e<h.length;++e){const s=h[e];if(m.distanceFnArgs||(m.distanceFnArgs=[]),s){const n=s.inputs[0].name,o=s.inputs[1].name,{entries:a,options:l}=await s.apply({[n]:t[e],[o]:r[e],...m.preprocessingFuncArgs[e]??{}});i.push({entries:a,options:l}),m.distanceFnArgs.push(l)}else{const s=t[e].toList(),n={};i.push({entries:s,options:n}),m.distanceFnArgs.push(n)}}e(await H(i.map((e=>e.entries)),n,r,c,u,m,f[l.sS]?void 0:C))}catch(e){i(e)}})),x=await S;return b.close(),p.unsubscribe(),x}const x=await S();if(p&&x){const A=a.TaskBarProgressIndicator.create("Clustering embeddings ...");try{const E=await function(e,t,n,r){return It(this,void 0,void 0,(function*(){return new Promise((function(i,o){const a=new Worker(new URL(s.p+s.u(796),s.b));a.postMessage({embedX:e,embedY:t,minPts:r,epsilon:n}),a.onmessage=({data:{error:e,clusters:t}})=>{a.terminate(),e?o(e):i(t)}}))}))}(x[0],x[1],m.dbScanEpsilon??.01,m.dbScanMinPts??4),_=e.columns.getUnusedName("Cluster");e.columns.addNewString(_).init((e=>E[e].toString())),v&&(v.props.colorColumnName=_)}catch(T){i.shell.error("Clustering embeddings failed"),console.error(T)}finally{A.close()}}if(x&&d&&v){o.setUpdateIndicator(v.root,!1);const I=e.columns.byName(w[0]),$=e.columns.byName(w[1]);return I.init((e=>x[0][e])),$.init((e=>x[1][e])),v.helpUrl="/help/compute/sequence-space",v}}catch(M){i.shell.error("Dimensionality reduction failed"),console.error(M),b.close(),v&&o.setUpdateIndicator(v.root,!1)}};return new Promise((async(t,s)=>{try{if(f.fastRowCount&&e.rowCount>f.fastRowCount&&!f[l.sS])o.dialog().add(o.divText("Analysis might take several minutes. Do you want to continue?")).onOK((async()=>{try{const e=await b();t(e)}catch(e){s(e)}})).onCancel((()=>t(void 0))).show();else{const e=await b();t(e)}}catch(e){s(e)}}))}(e,[t],n,[r],[1],[h],"MANHATTAN",c,d??!1,{...u,preprocessingFuncArgs:[u.preprocessingFuncArgs??{}]},{fastRowCount:1e4,scatterPlotName:"Sequence space",bypassLargeDataWarning:u?.[l.sS]})}async function sn(e,t,s){const n=a.TaskBarProgressIndicator.create("Converting to atomic level ...");try{await async function(e,t,s){if(0===a.Func.find({package:"Chem",name:"getRdKitModule"}).length)return void i.shell.warning('Transformation to atomic level requires package "Chem" installed.');if(s){const s=Q.Cn.getOrCreate(t);return s.isHelm()||(t=s.convert(be.r2.HELM)),void async function(e,t){const s=await qt(e,t);e.columns.add(s,!0),await i.data.detectSemanticTypes(e)}(e,t)}if(!(0,Ot.n)(t,"To Atomic Level"))return;const n=$s().getBioLib(),r=await(0,As.i0)(e,t,n);null!==r.col&&(e.columns.add(r.col,!0),await i.data.detectSemanticTypes(e)),r.warnings&&r.warnings.length>0&&i.shell.warning(o.list(r.warnings))}(e,t,s)}finally{n.close()}}function nn(){(0,Rt.K)()}async function rn(e=null,t=null){return(0,Rt.K)({col:e,clustersCol:t})}async function on(){const e=i.shell.tv,t=e.dataFrame.columns.toList().filter((e=>e.semType==a.SEMTYPE.MACROMOLECULE&&(Q.Cn.getOrCreate(e),!0))),s=async t=>{if(!(0,Ot.n)(t,"Composition"))return;const s=e.addViewer("WebLogo",{sequenceColumnName:t.name});i.shell.tv.dockManager.dock(s,a.DOCK_TYPE.DOWN,null,"Composition analysis",.25)};let n=null;if(0!=t.length){if(t.length>1){const e=t.map((e=>e.name)),n=t.find((e=>Q.Cn.getOrCreate(e).isMsa())),r=o.choiceInput("Column",n?n.name:e[0],e);o.dialog({title:"Composition Analysis",helpUrl:"https://datagrok.ai/help/datagrok/solutions/domains/bio/#sequence-composition"}).add(o.div([r])).onOK((async()=>{const e=t.find((e=>e.name==r.value))??null;e&&await s(e)})).show()}else n=t[0];n&&await s(n)}else i.shell.error("Current table does not contain sequences")}function an(e){return new ee.i(e).importFasta()}function ln(e){return console.log(e),[]}function cn(){const e=(0,oe.B)()[0];(0,rt.O)(e)}function hn(){let e;try{e=function(){const e=i.shell.t.columns.bySemTypeAll(a.SEMTYPE.MACROMOLECULE);if(!e)throw new Error("No dataframe with macromolecule columns open");const t=o.columnInput("Column",i.shell.t,e[0],null,{filter:e=>e.semType===a.SEMTYPE.MACROMOLECULE}),s=o.boolInput("Get HELM",!0);o.tooltip.bind(s.root,"Add HELM column");const n=o.button("ADD RULES",(()=>{a.Utils.openFile({accept:".csv",open:async e=>{const t=await e.text();await i.dapi.files.writeAsText(us+`${e.name}`,t)}})})),r=o.div([t,s,n]);return o.dialog("Poly Tool").add(r).onOK((async()=>{const e=t.value;e?hs(e,s.value):i.shell.warning("No marcomolecule column chosen!")}))}(),e.show()}catch(e){i.shell.warning("To run PolyTool, open a dataframe with macromolecules")}}function un(){return new jt}async function dn(e){const t=a.TaskBarProgressIndicator.create("Test detectMacromolecule..."),s=(await i.dapi.files.list(e,!0,"")).filter((e=>e.fileName.endsWith(".csv")));let n=0;const r=[];for(const o of s)try{const t=await i.dapi.files.readAsText(e+o.fullPath),s=a.DataFrame.fromCsv(t);for(const e of s.columns)await i.functions.call("Bio:detectMacromolecule",{col:e})===a.SEMTYPE.MACROMOLECULE&&r.push({file:o.path,result:"detected",column:e.name,message:`units: ${e.getTag(a.TAGS.UNITS)}`})}catch(e){r.push({file:o.path,result:"error",column:null,message:e instanceof Error?e.message:e.toString()})}finally{n+=1,t.update(100*n/s.length,`Test ${o.fileName}`)}i.shell.info("Test Demo:Files for detectMacromolecule finished."),t.close();const o=a.DataFrame.fromObjects(r);return o.name=`datasets_detectMacromolecule_${e}`,o}async function pn(e,t){await(0,Gt.n)(e,t)}function mn(e){const t=Q.Cn.getOrCreate(e).stats;return Object.keys(t.freq)}function fn(){return new tt}function gn(){const e=i.shell.v,t=e.addViewer("Sequence Similarity Search");e.dockManager.dock(t,"down")}function yn(){return new nt}function bn(){const e=i.shell.v,t=e.addViewer("Sequence Diversity Search");e.dockManager.dock(t,"down")}function vn(e){const t=(0,oe.B)();1===t.length?e.func.prepare({macromolecules:t[0]}).call(!0):new Ue.uH(t)}function wn(e){i.shell.tv.getFiltersGroup({createDefaultFilters:!1}).updateOrAdd({type:"Bio:bioSubstructureFilter",column:e.name,columnName:e.name}),i.shell.tv.grid.scrollToCell(e,0)}async function Cn(e,t,s){return re(e,t,s,J.IDENTITY)}async function Sn(e,t,s){return re(e,t,s,J.SIMILARITY)}async function xn(){ft()}function An(){(0,it.C2)()}function En(){return new ot.ST}async function _n(){const e=a.TaskBarProgressIndicator.create("WebLogo");try{const e=new URLSearchParams(window.location.search),t=new kt(e,"webLogoLargeApp"),s=await Is.files.readCsv("data/sample_PT_100000x5.csv");await i.data.detectSemanticTypes(s),await t.init(s)}finally{e.close()}}async function Tn(){const e=a.TaskBarProgressIndicator.create("WebLogo ...");try{const e=new URLSearchParams(window.location.search),t=new kt(e,"webLogoAggApp"),s=await Is.files.readCsv("samples/FASTA_PT_activity.csv");await i.data.detectSemanticTypes(s),await t.init(s)}finally{e.close()}}async function In(){const e=a.TaskBarProgressIndicator.create("getRegion ...");try{const e=new URLSearchParams(window.location.search),t=new Ss(e,"getRegionApp");await t.init()}finally{e.close()}}async function $n(){const e=a.TaskBarProgressIndicator.create("getRegion ...");try{const e=new URLSearchParams(window.location.search),t=await Is.files.readCsv("samples/HELM_empty_vals.csv"),s=new Ss(e,"getRegionHelmApp");await s.init({df:t,colName:"HELM"})}finally{e.close()}}function Mn(e,t){!function(e,t){const s=Q.Cn.getOrCreate(e.column),n=Object.values(be.r2).filter((e=>e!==s.units));t.group("Copy").items(n,(t=>{const s=Q.Cn.getOrCreate(e.column),n=t===be.r2.SEPARATOR?Is.properties.DefaultSeparator:void 0,r=s.getConverter(t,n)(e.value);navigator.clipboard?(navigator.clipboard.writeText(r),i.shell.info(`Value of notation '${t}' copied to clipboard`)):i.shell.warning("The clipboard functionality requires a secure origin — either HTTPS or localhost")}))}(e,t)}async function Nn(){await async function(){let e,t;try{const s=new Ct("Similarity, Diversity","Sequence similarity tracking and evaluation dataset diversity");await s.step("Load DNA sequences",(async()=>{i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1,t=await Is.files.readCsv(xt),e=i.shell.addTableView(t),e.grid.columns.byName("cluster").visible=!1,e.grid.columns.byName("sequence_id").visible=!1,e.grid.columns.byName("sequence").width=300,e.grid.columns.byName("activity").visible=!1,e.grid.columns.byName("is_cliff").visible=!1}),{description:"Load dataset with macromolecules of 'fasta' notation, 'DNA' alphabet.",delay:2e3}).step("Find the most similar sequences to the current one",(async()=>{const s=await t.plot.fromType("Sequence Similarity Search",{moleculeColumnName:"sequence",similarColumnLabel:"Similar to current"});e.dockManager.dock(s,a.DOCK_TYPE.RIGHT,null,"Similarity search",.35)}),{description:"Add 'Sequence Similarity Search' viewer.",delay:2e3}).step("Explore most diverse sequences in a dataset",(async()=>{const s=await t.plot.fromType("Sequence Diversity Search",{moleculeColumnName:"sequence",diverseColumnLabel:"Top diverse sequences of all data"});e.dockManager.dock(s,a.DOCK_TYPE.DOWN,null,"Diversity search",.27)}),{description:"Add 'Sequence Deversity Search' viewer.",delay:2e3}).step("Choose another sequence for similarity search",(async()=>{t.currentRowIdx=3}),{description:"Handling current row changed of data frame showing update of similar sequences.",delay:2e3}).step("One more sequence for similarity search",(async()=>{t.currentRowIdx=7}),{description:"Just one more sequence to search similar ones.",delay:2e3}).start()}catch(e){St(e)}}()}async function Ln(){await async function(){let e,t,s,n,r;try{const o=new Ct("Sequence Space","Exploring sequence space of Macromolecules, comparison with hierarchical clustering results");await o.step("Load DNA sequences",(async()=>{[n,e,t]=await Promise.all([Is.files.readCsv($t),At(),Et()]),s=i.shell.addTableView(n),s.grid.props.rowHeight=22,s.grid.columns.byName("cluster").visible=!1,s.grid.columns.byName("sequence").width=200,s.grid.columns.byName("is_cliff").visible=!1,i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1}),{description:"Load dataset with macromolecules of 'fasta' notation, 'DNA' alphabet.",delay:2e3}).step("Build sequence space",(async()=>{r=await async function(e,t,s,n){let r;{const e=Object.values(vt);for(let s=0;s<e.length;s++){const n=e[s];if(!t.col(n)){const r=s==e.length-1;t.columns.add(a.Column.float(n,t.rowCount),r)}}if(t.rowCount>=1){const n=t.getCol(s).toList(),r=Date.now();Is.logger.debug("Bio: demoBio01aUI(), calc reduceDimensionality start...");const i=await H([n],"UMAP",[We.W.Levenshtein],[1],"MANHATTAN",{distanceFnArgs:[{}]}),o=Date.now();Is.logger.debug(`Bio: demoBio01aUI(), calc reduceDimensionality ET: ${(o-r)/1e3} s`);for(let s=0;s<e.length;s++){const n=e[s],r=t.getCol(n),o=i[s];r.init((e=>o[e]))}const a=Date.now();Is.logger.debug(`MLB: MlbVrSpaceBrowser.buildView(), postprocess reduceDimensionality ET: ${(a-o)/1e3} s`)}r=await t.plot.fromType(a.VIEWER.SCATTER_PLOT,{xColumnName:vt.X,yColumnName:vt.Y,lassoTool:!0})}return e.dockManager.dock(r,a.DOCK_TYPE.RIGHT,null,"Sequence Space",.35),r}(s,n,Mt),r.setOptions({color:"activity"})}),{description:"Reduce sequence space dimensionality to display on 2D representation.",delay:2e3}).step("Cluster sequences",(async()=>{const r=await e.calcDistanceMatrix(n,[Mt]),i=await Tt(r.data,n.rowCount,1),o=e.parseClusterMatrix(i);t.injectTreeForGrid(s.grid,o,void 0,150,void 0)}),{description:"Perform hierarchical clustering to reveal relationships between sequences.",delay:2e3}).step("Select a sequence",(async()=>{n.selection.set(65,!0)}),{description:"Handling selection of data frame row reflecting on linked viewers.",delay:2e3}).step("Select a bunch of sequences",(async()=>{[67,72,77,82,83,84,85,91,93].forEach((e=>n.selection.set(e,!0))),n.currentRowIdx=27}),{description:"Selecting a group of rows from a data frame to show their similarity and proximity to each other on a viewer..",delay:2e3}).start()}catch(e){St(e)}}()}async function Pn(){await async function(){let e,t,s,n,r;const o=c.A.UMAP;try{const l=new Ct("Activity Cliffs","Activity Cliffs analysis on Macromolecules data");await l.step("Load DNA sequences",(async()=>{i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1,[s,e,t]=await Promise.all([Is.files.readCsv(Nt),At(),Et()]),n=i.shell.addTableView(s),n.grid.props.rowHeight=22,n.grid.columns.byName("cluster").visible=!1,n.grid.columns.byName("sequence").width=300,n.grid.columns.byName("is_cliff").visible=!1}),{description:"Load dataset with macromolecules of 'fasta' notation, 'DNA' alphabet.",delay:2e3}).step("Find activity cliffs",(async()=>{const e=a.Func.find({name:"macromoleculePreprocessingFunction",package:"Bio"})[0];r=await Js(s,s.getCol("Sequence"),s.getCol("Activity"),80,o,He.U.LEVENSHTEIN,e,{}),n.dockManager.dock(r,a.DOCK_TYPE.RIGHT,null,"Activity Cliffs",.35),ct()(r.root).find("button.scatter_plot_link,cliffs_grid").get()[0].click()}),{description:"Reveal similar sequences with a cliff of activity.",delay:2e3}).step("Cluster sequences",(async()=>{const r=a.TaskBarProgressIndicator.create("Running sequence clustering..."),i=await e.calcDistanceMatrix(s,["sequence"]),o=await Tt(i.data,s.rowCount,1),l=e.parseClusterMatrix(o);r.close(),t.injectTreeForGrid(n.grid,l,void 0,150,void 0),n.grid.columns.byName("Activity").scrollIntoView()}),{description:"Perform hierarchical clustering to reveal relationships between sequences.",delay:2e3}).step("Browse the cliff",(async()=>{const e=r.dataFrame.temp[".cliffsDfGrid"];e.dataFrame.rowCount>0&&(e.dataFrame.currentRowIdx=0)}),{description:"Zoom in to explore selected activity cliff details.",delay:2e3}).start()}catch(e){St(e)}}()}async function On(){await async function(){const e="HELM";let t,s,n;try{await new Ct("Atomic Level","Atomic level structure of Macromolecules").step("Loading Macromolecules notation 'Helm'",(async()=>{i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1,t=await Is.files.readCsv("samples/HELM.csv"),s=i.shell.addTableView(t);for(let t=0;t<s.grid.columns.length;t++){const n=s.grid.columns.byIndex(t);[e,"Activity"].includes(n.name)||(n.visible=!1)}}),{description:"Load dataset with macromolecules of 'fasta' notation, 'PT' alphabet (protein, aminoacids).",delay:2e3}).step("To atomic level",(async()=>{const s=t.getCol(e);await sn(t,s,!1)}),{description:"Get atomic level structures of Macromolecules.",delay:2e3}).step("Sketcher",(async()=>{const s=`molfile(${e})`;t.currentCell=t.cell(1,s);const r=t.currentCell.value,i=new a.chem.Sketcher(a.chem.SKETCHER_MODE.INPLACE);i.setMolFile(r),n=o.dialog().add(i).show(),await(0,Ne.gw)(3e3),n.close()}),{description:"Display atomic level structure within a sketcher.",delay:2e3}).start()}catch(e){St(e)}}()}async function Rn(){await async function(){let e,t,s,n,r,o;const l="msa(HELM)",h=c.A.UMAP,u=(await Lt.lp.getDockerContainer()).id,d=Lt.lp.getDockerContainer();let p,m;try{const c=new Ct("Helm, MSA, Sequence Space","MSA and composition analysis on Helm data");await c.step("Load peptides with non-natural aminoacids in 'HELM' notation",(async()=>{[p,t]=await Promise.all([(async()=>(await d).status)(),Is.files.readCsv(Pt)]),e=i.shell.addTableView(t),i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1,"started"===p||"checking"===p?(Is.logger.debug(`demoBio05UI(), PepSeA ('${Lt.lp.dcName}') docker container status = '${p}'.`),m=Promise.resolve()):(Is.logger.warning(`demoBio05UI(), PepSeA ('${Lt.lp.dcName}') docker container is trying to start...`),await i.dapi.docker.dockerContainers.run(u),m=async function(e,t,s=3e4,n){const r=window.performance.now(),o=new y.Subject,a=async()=>{const s=await i.dapi.docker.dockerContainers.find(e);return s.status===t&&o.next(s),s};let l;try{await(0,Ne.zg)(o,(e=>{const s=window.performance.now();n.debug(`awaitStatus(), docker container ('${e.name}') GET status = '${t}' in ${s-r} ms.`)}),(async()=>{const e=await a();n.debug(`awaitStatus(), docker container ('${e.name}') HAS status = '${e.status}'.`),l=window.setInterval(a,200)}),s)}finally{window.clearInterval(l)}}(u,"started",3e4,Is.logger))}),{description:"Load dataset with macromolecules of 'Helm' notation.",delay:2e3}).step("Align peptides with non-natural aminoacids with PepSeA",(async()=>{const e=a.TaskBarProgressIndicator.create("MSA by PepSeA ...");try{await m,s=t.getCol("HELM");const e=Lt.Jy[0],r=1.53,o=0;if(n=await(0,Lt.f3)(s,l,e,r,o,void 0),!n)throw new Error("Empty MSA result.");t.columns.add(n),await i.data.detectSemanticTypes(t)}finally{e.close()}}),{description:"Multiple sequence alignment (MSA) performed with PepSeA tool operating on non-natural aminoacids as well.",delay:2e3}).step("Build sequence space",(async()=>{const s=a.Func.find({package:"Bio",name:"macromoleculePreprocessingFunction"})[0];o=await tn(t,n,h,He.U.LEVENSHTEIN,!0,s),e.dockManager.dock(o,a.DOCK_TYPE.RIGHT,null,"Sequence Space",.35)}),{description:"Reduce sequence space dimensionality to display on 2D representation.",delay:2e3}).step("Analyse sequence composition",(async()=>{r=await t.plot.fromType("WebLogo",{sequenceColumnName:l,positionWidth:40,maxHeight:50}),e.dockManager.dock(r,a.DOCK_TYPE.DOWN,null,"Composition analysis",.2)}),{description:"Composition analysis allows to reveal functional features of sequences like motifs, or variable loops.",delay:2e3}).start()}catch(e){St(e)}}()}async function kn(e,t){var s;(function(e){e.setTag("quality",a.SEMTYPE.MACROMOLECULE),e.setTag("aligned","SEQ"),e.setTag("alphabet","PT")})(s=t),s.setTag("units",be.r2.SEPARATOR),s.setTag("separator","-"),await i.data.detectSemanticTypes(e)}async function Fn(e){const t=await e.readAsString(),s=new vs(e.fileName,t),n=await s.getJson(),r=e.fileName.replace(/\.csv$/,".json"),i=JSON.stringify(n,null,2);a.Utils.download(r,i)}async function Gn(e){const t=(0,te.Xk)(e),s=JSON.stringify(t);a.Utils.download(`${e.name}.json`,s)}async function Dn(e,t,s){const n=await e.readAsString();await async function(e,t,s){const n=a.TaskBarProgressIndicator.create("detectMacromolecule probe ...");try{let r=0;const o=await i.functions.call("Bio:detectMacromoleculeEnableStore");let l=0;for(let c=0;c<s;++c){const h=a.DataFrame.fromCsv(e),u=t?h.getCol(t):h.columns.byIndex(0);await i.functions.call("Bio:detectMacromolecule",{col:u})!==a.SEMTYPE.MACROMOLECULE&&(++l,console.warn(`Reject reason: ${o.last.rejectReason}`));const d=c/s;d-r>=.1&&(r=d,n.update(100*d,`detectMacromolecule probe ${l}/${c}/${s} ...`),await(0,Ne.gw)(0))}l>0?i.shell.warning(`detectMacromolecule failed ${l} / ${s}`):i.shell.info(`detectMacromolecule success ${s}`)}finally{n.close()}}(n,t,s)}},9017:(e,t,s)=>{"use strict";s.d(t,{k:()=>i});class n{constructor(){this.value=0,this.parentI=0,this.parentJ=0}}class r{constructor(e,t,s){this.seq1=e,this.seq2=t,this.score=s}}class i{fillNeedleman(){for(let e=0;e<=this.len1;e++)this.dpGrid[e][0].value=-e*this.gap,this.dpGrid[e][0].parentI=e-1,this.dpGrid[e][0].parentJ=0;for(let e=1;e<=this.len2;e++)this.dpGrid[0][e].value=-e*this.gap,this.dpGrid[0][e].parentI=0,this.dpGrid[0][e].parentJ=e-1}fillOne(e,t){this.dpGrid[e][t].value=Math.max(this.dpGrid[e-1][t-1].value+this.scores[e-1][t-1],Math.max(this.dpGrid[e-1][t].value-this.gap,this.dpGrid[e][t-1].value-this.gap)),this.dpGrid[e][t].value==this.dpGrid[e-1][t-1].value+this.scores[e-1][t-1]?(this.dpGrid[e][t].parentI=e-1,this.dpGrid[e][t].parentJ=t-1):this.dpGrid[e][t].value==this.dpGrid[e-1][t].value-this.gap?(this.dpGrid[e][t].parentI=e-1,this.dpGrid[e][t].parentJ=t):(this.dpGrid[e][t].parentI=e,this.dpGrid[e][t].parentJ=t-1)}gridFromName(e){switch(e){case"BLOSUM45":this.alignGrid=this.BLOSUM45,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM50":this.alignGrid=this.BLOSUM50,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM62":this.alignGrid=this.BLOSUM62,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM80":this.alignGrid=this.BLOSUM80,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM90":this.alignGrid=this.BLOSUM90,this.connections=this.CONBLO,this.step=1;break;case"PAM30":this.alignGrid=this.PAM30,this.connections=this.CONBLO,this.step=1;break;case"PAM70":this.alignGrid=this.PAM70,this.connections=this.CONBLO,this.step=1;break;case"PAM250":this.alignGrid=this.PAM250,this.connections=this.CONBLO,this.step=1;break;case"NUCLEOTIDES":this.alignGrid=this.NUCLEOTIDES,this.connections=this.CONNUCL,this.step=1;break;case"TRANS":this.alignGrid=this.TRANS,this.connections=this.CONNUCL,this.step=1;break;case"SCHNEIDER":this.alignGrid=this.SCHNEIDER,this.connections=this.CONSCHN,this.step=3}this.fillScores()}constructResult(e,t){let s="",n="",i="";const o=this.dpGrid[e][t].value;for(let e=0;e<this.step;e++)i+="|";for(;e>0||t>0;){this.dpGrid[e][t].parentI==e?(s=i+s,n=this.seq2.substr((t-1)*this.step,this.step)+n):this.dpGrid[e][t].parentJ==t?(n=i+n,s=this.seq1.substr((e-1)*this.step,this.step)+s):(s=e-1>=0?this.seq1.substr((e-1)*this.step,this.step)+s:i+s,n=t-1>=0?this.seq2.substr((t-1)*this.step,this.step)+n:i+n);const r=e;e=this.dpGrid[e][t].parentI,t=this.dpGrid[r][t].parentJ}return new r(s,n,o)}fillScores(){this.scores=[];for(let e=0;e<this.len1;e++){this.scores.push([]);for(let t=0;t<this.len2;t++)this.scores[e].push(this.alignGrid[this.connections[this.seq1.substr(e*this.step,this.step)]][this.connections[this.seq2.substr(t*this.step,this.step)]])}}typeRec(){if(/[ATGC]*/.test(this.seq1)&&/[ATGC]*/.test(this.seq2))return"NUCLEOTIDES";if(/[ARNDCQEGHILKMFPSTWYVBZX*]*/.test(this.seq1)&&/[ARNDCQEGHILKMFPSTWYVBZX*]*/.test(this.seq2))return"BLOSUM62";throw Error("Can't recognize sequence type")}needlemanWunch(){this.dpGrid=[];for(let e=0;e<this.len1+1;e++){const e=[];for(let t=0;t<this.len2+1;t++)e.push(new n);this.dpGrid.push(e)}this.fillNeedleman();for(let e=1;e<=this.len1;e++)for(let t=1;t<=this.len2;t++)this.fillOne(e,t);return this.constructResult(this.len1,this.len2)}smithWaterman(){this.dpGrid=[];for(let e=0;e<this.len1+1;e++){const e=[];for(let t=0;t<this.len2+1;t++)e.push(new n);this.dpGrid.push(e)}let e=0,t=0,s=0;for(let n=1;n<=this.len1;n++)for(let r=1;r<=this.len2;r++)this.fillOne(n,r),this.dpGrid[n][r].value<=0?(this.dpGrid[n][r].value=0,this.dpGrid[n][r].parentI=0,this.dpGrid[n][r].parentJ=0):0==this.dpGrid[this.dpGrid[n][r].parentI][this.dpGrid[n][r].parentJ].value&&(this.dpGrid[n][r].parentI=0,this.dpGrid[n][r].parentJ=0),this.dpGrid[n][r].value>e&&(e=this.dpGrid[n][r].value,t=n,s=r);return this.constructResult(t,s)}setSequences(e,t){this.seq1=e,this.seq2=t,this.len1=this.seq1.length/this.step,this.len2=this.seq2.length/this.step,this.fillScores()}setGap(e){this.gap=e}setMethod(e=""){"AUTO"==e&&(e=this.typeRec()),this.gridFromName(e)}constructor(e,t,s,n=""){this.seq1="",this.seq2="",this.gap=1,this.len1=0,this.len2=0,this.step=1,this.alignGrid=[],this.scores=[],this.dpGrid=[],this.connections={},this.BLOSUM45=[[5,-2,-1,-2,-1,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-2,-2,0,-1,-1,0,-5],[-2,7,0,-1,-3,1,0,-2,0,-3,-2,3,-1,-2,-2,-1,-1,-2,-1,-2,-1,0,-1,-5],[-1,0,6,2,-2,0,0,0,1,-2,-3,0,-2,-2,-2,1,0,-4,-2,-3,4,0,-1,-5],[-2,-1,2,7,-3,0,2,-1,0,-4,-3,0,-3,-4,-1,0,-1,-4,-2,-3,5,1,-1,-5],[-1,-3,-2,-3,12,-3,-3,-3,-3,-3,-2,-3,-2,-2,-4,-1,-1,-5,-3,-1,-2,-3,-2,-5],[-1,1,0,0,-3,6,2,-2,1,-2,-2,1,0,-4,-1,0,-1,-2,-1,-3,0,4,-1,-5],[-1,0,0,2,-3,2,6,-2,0,-3,-2,1,-2,-3,0,0,-1,-3,-2,-3,1,4,-1,-5],[0,-2,0,-1,-3,-2,-2,7,-2,-4,-3,-2,-2,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-5],[-2,0,1,0,-3,1,0,-2,10,-3,-2,-1,0,-2,-2,-1,-2,-3,2,-3,0,0,-1,-5],[-1,-3,-2,-4,-3,-2,-3,-4,-3,5,2,-3,2,0,-2,-2,-1,-2,0,3,-3,-3,-1,-5],[-1,-2,-3,-3,-2,-2,-2,-3,-2,2,5,-3,2,1,-3,-3,-1,-2,0,1,-3,-2,-1,-5],[-1,3,0,0,-3,1,1,-2,-1,-3,-3,5,-1,-3,-1,-1,-1,-2,-1,-2,0,1,-1,-5],[-1,-1,-2,-3,-2,0,-2,-2,0,2,2,-1,6,0,-2,-2,-1,-2,0,1,-2,-1,-1,-5],[-2,-2,-2,-4,-2,-4,-3,-3,-2,0,1,-3,0,8,-3,-2,-1,1,3,0,-3,-3,-1,-5],[-1,-2,-2,-1,-4,-1,0,-2,-2,-2,-3,-1,-2,-3,9,-1,-1,-3,-3,-3,-2,-1,-1,-5],[1,-1,1,0,-1,0,0,0,-1,-2,-3,-1,-2,-2,-1,4,2,-4,-2,-1,0,0,0,-5],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-1,-1,2,5,-3,-1,0,0,-1,0,-5],[-2,-2,-4,-4,-5,-2,-3,-2,-3,-2,-2,-2,-2,1,-3,-4,-3,15,3,-3,-4,-2,-2,-5],[-2,-1,-2,-2,-3,-1,-2,-3,2,0,0,-1,0,3,-3,-2,-1,3,8,-1,-2,-2,-1,-5],[0,-2,-3,-3,-1,-3,-3,-3,-3,3,1,-2,1,0,-3,-1,0,-3,-1,5,-3,-3,-1,-5],[-1,-1,4,5,-2,0,1,-1,0,-3,-3,0,-2,-3,-2,0,0,-4,-2,-3,4,2,-1,-5],[-1,0,0,1,-3,4,4,-2,0,-3,-2,1,-1,-3,-1,0,-1,-2,-2,-3,2,4,-1,-5],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,-2,-1,-1,-1,-1,-1,-5],[-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,1]],this.BLOSUM50=[[5,-2,-1,-2,-1,-1,-1,0,-2,-1,-2,-1,-1,-3,-1,1,0,-3,-2,0,-2,-1,-1,-5],[-2,7,-1,-2,-4,1,0,-3,0,-4,-3,3,-2,-3,-3,-1,-1,-3,-1,-3,-1,0,-1,-5],[-1,-1,7,2,-2,0,0,0,1,-3,-4,0,-2,-4,-2,1,0,-4,-2,-3,4,0,-1,-5],[-2,-2,2,8,-4,0,2,-1,-1,-4,-4,-1,-4,-5,-1,0,-1,-5,-3,-4,5,1,-1,-5],[-1,-4,-2,-4,13,-3,-3,-3,-3,-2,-2,-3,-2,-2,-4,-1,-1,-5,-3,-1,-3,-3,-2,-5],[-1,1,0,0,-3,7,2,-2,1,-3,-2,2,0,-4,-1,0,-1,-1,-1,-3,0,4,-1,-5],[-1,0,0,2,-3,2,6,-3,0,-4,-3,1,-2,-3,-1,-1,-1,-3,-2,-3,1,5,-1,-5],[0,-3,0,-1,-3,-2,-3,8,-2,-4,-4,-2,-3,-4,-2,0,-2,-3,-3,-4,-1,-2,-2,-5],[-2,0,1,-1,-3,1,0,-2,10,-4,-3,0,-1,-1,-2,-1,-2,-3,2,-4,0,0,-1,-5],[-1,-4,-3,-4,-2,-3,-4,-4,-4,5,2,-3,2,0,-3,-3,-1,-3,-1,4,-4,-3,-1,-5],[-2,-3,-4,-4,-2,-2,-3,-4,-3,2,5,-3,3,1,-4,-3,-1,-2,-1,1,-4,-3,-1,-5],[-1,3,0,-1,-3,2,1,-2,0,-3,-3,6,-2,-4,-1,0,-1,-3,-2,-3,0,1,-1,-5],[-1,-2,-2,-4,-2,0,-2,-3,-1,2,3,-2,7,0,-3,-2,-1,-1,0,1,-3,-1,-1,-5],[-3,-3,-4,-5,-2,-4,-3,-4,-1,0,1,-4,0,8,-4,-3,-2,1,4,-1,-4,-4,-2,-5],[-1,-3,-2,-1,-4,-1,-1,-2,-2,-3,-4,-1,-3,-4,10,-1,-1,-4,-3,-3,-2,-1,-2,-5],[1,-1,1,0,-1,0,-1,0,-1,-3,-3,0,-2,-3,-1,5,2,-4,-2,-2,0,0,-1,-5],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,2,5,-3,-2,0,0,-1,0,-5],[-3,-3,-4,-5,-5,-1,-3,-3,-3,-3,-2,-3,-1,1,-4,-4,-3,15,2,-3,-5,-2,-3,-5],[-2,-1,-2,-3,-3,-1,-2,-3,2,-1,-1,-2,0,4,-3,-2,-2,2,8,-1,-3,-2,-1,-5],[0,-3,-3,-4,-1,-3,-3,-4,-4,4,1,-3,1,-1,-3,-2,0,-3,-1,5,-4,-3,-1,-5],[-2,-1,4,5,-3,0,1,-1,0,-4,-4,0,-3,-4,-2,0,0,-5,-3,-4,5,2,-1,-5],[-1,0,0,1,-3,4,5,-2,0,-3,-3,1,-1,-4,-1,0,-1,-2,-2,-3,2,5,-1,-5],[-1,-1,-1,-1,-2,-1,-1,-2,-1,-1,-1,-1,-1,-2,-2,-1,0,-3,-1,-1,-1,-1,-1,-5],[-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,1]],this.BLOSUM62=[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]],this.BLOSUM80=[[7,-3,-3,-3,-1,-2,-2,0,-3,-3,-3,-1,-2,-4,-1,2,0,-5,-4,-1,-3,-2,-1,-8],[-3,9,-1,-3,-6,1,-1,-4,0,-5,-4,3,-3,-5,-3,-2,-2,-5,-4,-4,-2,0,-2,-8],[-3,-1,9,2,-5,0,-1,-1,1,-6,-6,0,-4,-6,-4,1,0,-7,-4,-5,5,-1,-2,-8],[-3,-3,2,10,-7,-1,2,-3,-2,-7,-7,-2,-6,-6,-3,-1,-2,-8,-6,-6,6,1,-3,-8],[-1,-6,-5,-7,13,-5,-7,-6,-7,-2,-3,-6,-3,-4,-6,-2,-2,-5,-5,-2,-6,-7,-4,-8],[-2,1,0,-1,-5,9,3,-4,1,-5,-4,2,-1,-5,-3,-1,-1,-4,-3,-4,-1,5,-2,-8],[-2,-1,-1,2,-7,3,8,-4,0,-6,-6,1,-4,-6,-2,-1,-2,-6,-5,-4,1,6,-2,-8],[0,-4,-1,-3,-6,-4,-4,9,-4,-7,-7,-3,-5,-6,-5,-1,-3,-6,-6,-6,-2,-4,-3,-8],[-3,0,1,-2,-7,1,0,-4,12,-6,-5,-1,-4,-2,-4,-2,-3,-4,3,-5,-1,0,-2,-8],[-3,-5,-6,-7,-2,-5,-6,-7,-6,7,2,-5,2,-1,-5,-4,-2,-5,-3,4,-6,-6,-2,-8],[-3,-4,-6,-7,-3,-4,-6,-7,-5,2,6,-4,3,0,-5,-4,-3,-4,-2,1,-7,-5,-2,-8],[-1,3,0,-2,-6,2,1,-3,-1,-5,-4,8,-3,-5,-2,-1,-1,-6,-4,-4,-1,1,-2,-8],[-2,-3,-4,-6,-3,-1,-4,-5,-4,2,3,-3,9,0,-4,-3,-1,-3,-3,1,-5,-3,-2,-8],[-4,-5,-6,-6,-4,-5,-6,-6,-2,-1,0,-5,0,10,-6,-4,-4,0,4,-2,-6,-6,-3,-8],[-1,-3,-4,-3,-6,-3,-2,-5,-4,-5,-5,-2,-4,-6,12,-2,-3,-7,-6,-4,-4,-2,-3,-8],[2,-2,1,-1,-2,-1,-1,-1,-2,-4,-4,-1,-3,-4,-2,7,2,-6,-3,-3,0,-1,-1,-8],[0,-2,0,-2,-2,-1,-2,-3,-3,-2,-3,-1,-1,-4,-3,2,8,-5,-3,0,-1,-2,-1,-8],[-5,-5,-7,-8,-5,-4,-6,-6,-4,-5,-4,-6,-3,0,-7,-6,-5,16,3,-5,-8,-5,-5,-8],[-4,-4,-4,-6,-5,-3,-5,-6,3,-3,-2,-4,-3,4,-6,-3,-3,3,11,-3,-5,-4,-3,-8],[-1,-4,-5,-6,-2,-4,-4,-6,-5,4,1,-4,1,-2,-4,-3,0,-5,-3,7,-6,-4,-2,-8],[-3,-2,5,6,-6,-1,1,-2,-1,-6,-7,-1,-5,-6,-4,0,-1,-8,-5,-6,6,0,-3,-8],[-2,0,-1,1,-7,5,6,-4,0,-6,-5,1,-3,-6,-2,-1,-2,-5,-4,-4,0,6,-1,-8],[-1,-2,-2,-3,-4,-2,-2,-3,-2,-2,-2,-2,-2,-3,-3,-1,-1,-5,-3,-2,-3,-1,-2,-8],[-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,1]],this.BLOSUM90=[[5,-2,-2,-3,-1,-1,-1,0,-2,-2,-2,-1,-2,-3,-1,1,0,-4,-3,-1,-2,-1,-1,-6],[-2,6,-1,-3,-5,1,-1,-3,0,-4,-3,2,-2,-4,-3,-1,-2,-4,-3,-3,-2,0,-2,-6],[-2,-1,7,1,-4,0,-1,-1,0,-4,-4,0,-3,-4,-3,0,0,-5,-3,-4,4,-1,-2,-6],[-3,-3,1,7,-5,-1,1,-2,-2,-5,-5,-1,-4,-5,-3,-1,-2,-6,-4,-5,4,0,-2,-6],[-1,-5,-4,-5,9,-4,-6,-4,-5,-2,-2,-4,-2,-3,-4,-2,-2,-4,-4,-2,-4,-5,-3,-6],[-1,1,0,-1,-4,7,2,-3,1,-4,-3,1,0,-4,-2,-1,-1,-3,-3,-3,-1,4,-1,-6],[-1,-1,-1,1,-6,2,6,-3,-1,-4,-4,0,-3,-5,-2,-1,-1,-5,-4,-3,0,4,-2,-6],[0,-3,-1,-2,-4,-3,-3,6,-3,-5,-5,-2,-4,-5,-3,-1,-3,-4,-5,-5,-2,-3,-2,-6],[-2,0,0,-2,-5,1,-1,-3,8,-4,-4,-1,-3,-2,-3,-2,-2,-3,1,-4,-1,0,-2,-6],[-2,-4,-4,-5,-2,-4,-4,-5,-4,5,1,-4,1,-1,-4,-3,-1,-4,-2,3,-5,-4,-2,-6],[-2,-3,-4,-5,-2,-3,-4,-5,-4,1,5,-3,2,0,-4,-3,-2,-3,-2,0,-5,-4,-2,-6],[-1,2,0,-1,-4,1,0,-2,-1,-4,-3,6,-2,-4,-2,-1,-1,-5,-3,-3,-1,1,-1,-6],[-2,-2,-3,-4,-2,0,-3,-4,-3,1,2,-2,7,-1,-3,-2,-1,-2,-2,0,-4,-2,-1,-6],[-3,-4,-4,-5,-3,-4,-5,-5,-2,-1,0,-4,-1,7,-4,-3,-3,0,3,-2,-4,-4,-2,-6],[-1,-3,-3,-3,-4,-2,-2,-3,-3,-4,-4,-2,-3,-4,8,-2,-2,-5,-4,-3,-3,-2,-2,-6],[1,-1,0,-1,-2,-1,-1,-1,-2,-3,-3,-1,-2,-3,-2,5,1,-4,-3,-2,0,-1,-1,-6],[0,-2,0,-2,-2,-1,-1,-3,-2,-1,-2,-1,-1,-3,-2,1,6,-4,-2,-1,-1,-1,-1,-6],[-4,-4,-5,-6,-4,-3,-5,-4,-3,-4,-3,-5,-2,0,-5,-4,-4,11,2,-3,-6,-4,-3,-6],[-3,-3,-3,-4,-4,-3,-4,-5,1,-2,-2,-3,-2,3,-4,-3,-2,2,8,-3,-4,-3,-2,-6],[-1,-3,-4,-5,-2,-3,-3,-5,-4,3,0,-3,0,-2,-3,-2,-1,-3,-3,5,-4,-3,-2,-6],[-2,-2,4,4,-4,-1,0,-2,-1,-5,-5,-1,-4,-4,-3,0,-1,-6,-4,-4,4,0,-2,-6],[-1,0,-1,0,-5,4,4,-3,0,-4,-4,1,-2,-4,-2,-1,-1,-4,-3,-3,0,4,-1,-6],[-1,-2,-2,-2,-3,-1,-2,-2,-2,-2,-2,-1,-1,-2,-2,-1,-1,-3,-2,-2,-2,-1,-2,-6],[-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,1]],this.NUCLEOTIDES=[[1,-1,-1,-1],[-1,1,-1,-1],[-1,-1,1,-1],[-1,-1,-1,1]],this.PAM30=[[6,-7,-4,-3,-6,-4,-2,-2,-7,-5,-6,-7,-5,-8,-2,0,-1,-13,-8,-2,-3,-3,-3,-17],[-7,8,-6,-10,-8,-2,-9,-9,-2,-5,-8,0,-4,-9,-4,-3,-6,-2,-10,-8,-7,-4,-6,-17],[-4,-6,8,2,-11,-3,-2,-3,0,-5,-7,-1,-9,-9,-6,0,-2,-8,-4,-8,6,-3,-3,-17],[-3,-10,2,8,-14,-2,2,-3,-4,-7,-12,-4,-11,-15,-8,-4,-5,-15,-11,-8,6,1,-5,-17],[-6,-8,-11,-14,10,-14,-14,-9,-7,-6,-15,-14,-13,-13,-8,-3,-8,-15,-4,-6,-12,-14,-9,-17],[-4,-2,-3,-2,-14,8,1,-7,1,-8,-5,-3,-4,-13,-3,-5,-5,-13,-12,-7,-3,6,-5,-17],[-2,-9,-2,2,-14,1,8,-4,-5,-5,-9,-4,-7,-14,-5,-4,-6,-17,-8,-6,1,6,-5,-17],[-2,-9,-3,-3,-9,-7,-4,6,-9,-11,-10,-7,-8,-9,-6,-2,-6,-15,-14,-5,-3,-5,-5,-17],[-7,-2,0,-4,-7,1,-5,-9,9,-9,-6,-6,-10,-6,-4,-6,-7,-7,-3,-6,-1,-1,-5,-17],[-5,-5,-5,-7,-6,-8,-5,-11,-9,8,-1,-6,-1,-2,-8,-7,-2,-14,-6,2,-6,-6,-5,-17],[-6,-8,-7,-12,-15,-5,-9,-10,-6,-1,7,-8,1,-3,-7,-8,-7,-6,-7,-2,-9,-7,-6,-17],[-7,0,-1,-4,-14,-3,-4,-7,-6,-6,-8,7,-2,-14,-6,-4,-3,-12,-9,-9,-2,-4,-5,-17],[-5,-4,-9,-11,-13,-4,-7,-8,-10,-1,1,-2,11,-4,-8,-5,-4,-13,-11,-1,-10,-5,-5,-17],[-8,-9,-9,-15,-13,-13,-14,-9,-6,-2,-3,-14,-4,9,-10,-6,-9,-4,2,-8,-10,-13,-8,-17],[-2,-4,-6,-8,-8,-3,-5,-6,-4,-8,-7,-6,-8,-10,8,-2,-4,-14,-13,-6,-7,-4,-5,-17],[0,-3,0,-4,-3,-5,-4,-2,-6,-7,-8,-4,-5,-6,-2,6,0,-5,-7,-6,-1,-5,-3,-17],[-1,-6,-2,-5,-8,-5,-6,-6,-7,-2,-7,-3,-4,-9,-4,0,7,-13,-6,-3,-3,-6,-4,-17],[-13,-2,-8,-15,-15,-13,-17,-15,-7,-14,-6,-12,-13,-4,-14,-5,-13,13,-5,-15,-10,-14,-11,-17],[-8,-10,-4,-11,-4,-12,-8,-14,-3,-6,-7,-9,-11,2,-13,-7,-6,-5,10,-7,-6,-9,-7,-17],[-2,-8,-8,-8,-6,-7,-6,-5,-6,2,-2,-9,-1,-8,-6,-6,-3,-15,-7,7,-8,-6,-5,-17],[-3,-7,6,6,-12,-3,1,-3,-1,-6,-9,-2,-10,-10,-7,-1,-3,-10,-6,-8,6,0,-5,-17],[-3,-4,-3,1,-14,6,6,-5,-1,-6,-7,-4,-5,-13,-4,-5,-6,-14,-9,-6,0,6,-5,-17],[-3,-6,-3,-5,-9,-5,-5,-5,-5,-5,-6,-5,-5,-8,-5,-3,-4,-11,-7,-5,-5,-5,-5,-17],[-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,1]],this.PAM70=[[5,-4,-2,-1,-4,-2,-1,0,-4,-2,-4,-4,-3,-6,0,1,1,-9,-5,-1,-1,-1,-2,-11],[-4,8,-3,-6,-5,0,-5,-6,0,-3,-6,2,-2,-7,-2,-1,-4,0,-7,-5,-4,-2,-3,-11],[-2,-3,6,3,-7,-1,0,-1,1,-3,-5,0,-5,-6,-3,1,0,-6,-3,-5,5,-1,-2,-11],[-1,-6,3,6,-9,0,3,-1,-1,-5,-8,-2,-7,-10,-4,-1,-2,-10,-7,-5,5,2,-3,-11],[-4,-5,-7,-9,9,-9,-9,-6,-5,-4,-10,-9,-9,-8,-5,-1,-5,-11,-2,-4,-8,-9,-6,-11],[-2,0,-1,0,-9,7,2,-4,2,-5,-3,-1,-2,-9,-1,-3,-3,-8,-8,-4,-1,5,-2,-11],[-1,-5,0,3,-9,2,6,-2,-2,-4,-6,-2,-4,-9,-3,-2,-3,-11,-6,-4,2,5,-3,-11],[0,-6,-1,-1,-6,-4,-2,6,-6,-6,-7,-5,-6,-7,-3,0,-3,-10,-9,-3,-1,-3,-3,-11],[-4,0,1,-1,-5,2,-2,-6,8,-6,-4,-3,-6,-4,-2,-3,-4,-5,-1,-4,0,1,-3,-11],[-2,-3,-3,-5,-4,-5,-4,-6,-6,7,1,-4,1,0,-5,-4,-1,-9,-4,3,-4,-4,-3,-11],[-4,-6,-5,-8,-10,-3,-6,-7,-4,1,6,-5,2,-1,-5,-6,-4,-4,-4,0,-6,-4,-4,-11],[-4,2,0,-2,-9,-1,-2,-5,-3,-4,-5,6,0,-9,-4,-2,-1,-7,-7,-6,-1,-2,-3,-11],[-3,-2,-5,-7,-9,-2,-4,-6,-6,1,2,0,10,-2,-5,-3,-2,-8,-7,0,-6,-3,-3,-11],[-6,-7,-6,-10,-8,-9,-9,-7,-4,0,-1,-9,-2,8,-7,-4,-6,-2,4,-5,-7,-9,-5,-11],[0,-2,-3,-4,-5,-1,-3,-3,-2,-5,-5,-4,-5,-7,7,0,-2,-9,-9,-3,-4,-2,-3,-11],[1,-1,1,-1,-1,-3,-2,0,-3,-4,-6,-2,-3,-4,0,5,2,-3,-5,-3,0,-2,-1,-11],[1,-4,0,-2,-5,-3,-3,-3,-4,-1,-4,-1,-2,-6,-2,2,6,-8,-4,-1,-1,-3,-2,-11],[-9,0,-6,-10,-11,-8,-11,-10,-5,-9,-4,-7,-8,-2,-9,-3,-8,13,-3,-10,-7,-10,-7,-11],[-5,-7,-3,-7,-2,-8,-6,-9,-1,-4,-4,-7,-7,4,-9,-5,-4,-3,9,-5,-4,-7,-5,-11],[-1,-5,-5,-5,-4,-4,-4,-3,-4,3,0,-6,0,-5,-3,-3,-1,-10,-5,6,-5,-4,-2,-11],[-1,-4,5,5,-8,-1,2,-1,0,-4,-6,-1,-6,-7,-4,0,-1,-7,-4,-5,5,1,-2,-11],[-1,-2,-1,2,-9,5,5,-3,1,-4,-4,-2,-3,-9,-2,-2,-3,-10,-7,-4,1,5,-3,-11],[-2,-3,-2,-3,-6,-2,-3,-3,-3,-3,-4,-3,-3,-5,-3,-1,-2,-7,-5,-2,-2,-3,-3,-11],[-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,1]],this.PAM250=[[2,-2,0,0,-2,0,0,1,-1,-1,-2,-1,-1,-3,1,1,1,-6,-3,0,0,0,0,-8],[-2,6,0,-1,-4,1,-1,-3,2,-2,-3,3,0,-4,0,0,-1,2,-4,-2,-1,0,-1,-8],[0,0,2,2,-4,1,1,0,2,-2,-3,1,-2,-3,0,1,0,-4,-2,-2,2,1,0,-8],[0,-1,2,4,-5,2,3,1,1,-2,-4,0,-3,-6,-1,0,0,-7,-4,-2,3,3,-1,-8],[-2,-4,-4,-5,12,-5,-5,-3,-3,-2,-6,-5,-5,-4,-3,0,-2,-8,0,-2,-4,-5,-3,-8],[0,1,1,2,-5,4,2,-1,3,-2,-2,1,-1,-5,0,-1,-1,-5,-4,-2,1,3,-1,-8],[0,-1,1,3,-5,2,4,0,1,-2,-3,0,-2,-5,-1,0,0,-7,-4,-2,3,3,-1,-8],[1,-3,0,1,-3,-1,0,5,-2,-3,-4,-2,-3,-5,0,1,0,-7,-5,-1,0,0,-1,-8],[-1,2,2,1,-3,3,1,-2,6,-2,-2,0,-2,-2,0,-1,-1,-3,0,-2,1,2,-1,-8],[-1,-2,-2,-2,-2,-2,-2,-3,-2,5,2,-2,2,1,-2,-1,0,-5,-1,4,-2,-2,-1,-8],[-2,-3,-3,-4,-6,-2,-3,-4,-2,2,6,-3,4,2,-3,-3,-2,-2,-1,2,-3,-3,-1,-8],[-1,3,1,0,-5,1,0,-2,0,-2,-3,5,0,-5,-1,0,0,-3,-4,-2,1,0,-1,-8],[-1,0,-2,-3,-5,-1,-2,-3,-2,2,4,0,6,0,-2,-2,-1,-4,-2,2,-2,-2,-1,-8],[-3,-4,-3,-6,-4,-5,-5,-5,-2,1,2,-5,0,9,-5,-3,-3,0,7,-1,-4,-5,-2,-8],[1,0,0,-1,-3,0,-1,0,0,-2,-3,-1,-2,-5,6,1,0,-6,-5,-1,-1,0,-1,-8],[1,0,1,0,0,-1,0,1,-1,-1,-3,0,-2,-3,1,2,1,-2,-3,-1,0,0,0,-8],[1,-1,0,0,-2,-1,0,0,-1,0,-2,0,-1,-3,0,1,3,-5,-3,0,0,-1,0,-8],[-6,2,-4,-7,-8,-5,-7,-7,-3,-5,-2,-3,-4,0,-6,-2,-5,17,0,-6,-5,-6,-4,-8],[-3,-4,-2,-4,0,-4,-4,-5,0,-1,-1,-4,-2,7,-5,-3,-3,0,10,-2,-3,-4,-2,-8],[0,-2,-2,-2,-2,-2,-2,-1,-2,4,2,-2,2,-1,-1,-1,0,-6,-2,4,-2,-2,-1,-8],[0,-1,2,3,-4,1,3,0,1,-2,-3,1,-2,-4,-1,0,0,-5,-3,-2,3,2,-1,-8],[0,0,1,3,-5,3,3,0,2,-2,-3,0,-2,-5,0,0,-1,-6,-4,-2,2,3,-1,-8],[0,-1,0,-1,-3,-1,-1,-1,-1,-1,-1,-1,-1,-2,-1,0,0,-4,-2,-1,-1,-1,-1,-8],[-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,1]],this.SCHNEIDER=[[11.6,-2.7,9.7,-1.7,-2.7,-6.4,-3.9,-5.6,5.1,-5,3.6,-4.2,-6.3,-13,-7.1,-11.5,.4,-6,-1.9,-5.3,-8.5,-11.2,-8.9,-10.8,2.1,0,1.4,.2,-10.2,-13.5,-13,-12.5,-2.6,-8.5,-5,-8.1,-6.3,-9.9,-7.5,-9,-7.1,-10.2,-8.2,-9.2,-8.2,-12.5,-11.1,-11.4,-50,-14.8,-50,-13.8,-7.3,-10.1,-8.4,-9.1,-50,-13,-13.5,-12.4,-10.7,-18.1,-11.8,-17.2],[-2.7,13,-3.3,10.9,-3.5,-.4,-3.3,-1.8,-5.4,4.6,-5.5,3,-10.2,-7.9,-9.9,-9.6,-5,.5,-5.5,-1,-10.3,-8.1,-9.4,-9.6,-8.1,-5,-7.3,-6.3,-13.4,-11.3,-14.4,-12.9,-6.3,.8,-6.4,-1.1,-7.4,-5,-6.2,-6.5,-5.6,-1.6,-4.7,-3,-10.8,-8.7,-11.9,-10,-50,-6.2,-50,-7.5,-6.3,-4.3,-6.2,-5.4,-50,-7,-16.3,-8.2,-13.2,-12.3,-13.1,-13.3],[9.7,-3.3,11.6,-2.8,-4.5,-6.7,-3.1,-6.9,3.3,-5.5,4.8,-5.1,-8.9,-13.2,-5.7,-12.6,-1.5,-6.1,-.6,-6.1,-10,-11.8,-8.6,-11.9,1.2,.5,2.2,.1,-11.8,-14,-11.9,-13.4,-4.9,-9.1,-3.4,-8.9,-8,-10,-7.2,-10,-9.1,-10.2,-7.1,-9.9,-10.1,-13,-10.6,-12.7,-50,-14.9,-50,-14.4,-8.9,-10.8,-8.9,-10.4,-50,-13.1,-11.8,-13,-12.4,-19.4,-11.5,-17.8],[-1.7,10.9,-2.8,12.9,-2.7,-2.2,-2.8,.2,-4.8,2.9,-5.2,5.2,-9.1,-9.5,-9,-7,-4,-1,-5,1,-9,-8.8,-8.9,-7.7,-7,-6.8,-7.1,-4.3,-12.4,-12.9,-13.9,-10,-4.9,-.7,-5.6,1.4,-6,-6.5,-6.2,-4.8,-5.1,-3.2,-5,-1.2,-9.8,-9.9,-11.3,-8.2,-50,-7.6,-50,-5.1,-5.5,-5.8,-5.9,-4.2,-50,-8.3,-15.5,-5.9,-11.6,-14.2,-12,-11.6],[-2.7,-3.5,-4.5,-2.7,11.7,9,10.6,9.6,-3.2,-.7,-5.1,-.4,.7,-4.6,-.4,-3.6,-4.8,-8.9,-6.5,-7.8,-1.4,-4.1,-2.9,-3.3,-8,-9.1,-8,-8.2,-6,-9.3,-7.7,-8.5,-6.4,-10.1,-7.5,-8.6,2.8,-.7,.9,.1,-5.9,-7.3,-6.5,-6.5,-.4,-3.9,-2.6,-3.1,-50,-14.6,-50,-12.6,2.9,.1,1.8,1,-50,-9.2,-13.6,-7.7,-4.8,-12.2,-6.2,-11],[-6.4,-.4,-6.7,-2.2,9,12.3,9.8,9.6,-7.1,2.4,-7.2,.3,-2.9,-1.2,-3,-3.3,-7.6,-6.7,-8.1,-7.9,-4.9,-1.9,-4.5,-3.8,-9.5,-7.8,-9.3,-8.9,-9.4,-7.1,-9,-9,-9.4,-7.5,-9.3,-9.2,-.7,2.6,.2,-.1,-8,-4.6,-7.7,-6.1,-3.6,-1,-4.1,-3.1,-50,-11.6,-50,-11.6,.2,2.3,.4,.5,-50,-6.5,-15.3,-7.8,-8.4,-9.5,-8.3,-11.1],[-3.9,-3.3,-3.1,-2.8,10.6,9.8,12.2,9.8,-4.9,.1,-3.6,-.2,-1.7,-4.1,.9,-3.5,-5.9,-8.9,-5.6,-8.5,-3.9,-3.9,-2.2,-4.5,-7.3,-7.5,-6.4,-8.5,-7.1,-8.2,-6.7,-7.8,-7.9,-9.1,-7.1,-9.4,.9,-.2,2.5,-.3,-6.9,-6.5,-5.5,-6.8,-1.7,-3.4,-1.7,-2.8,-50,-13,-50,-11.5,1.5,.7,2.7,.6,-50,-8.9,-12.1,-7.4,-6.1,-11.5,-5.4,-10.4],[-5.6,-1.8,-6.9,.2,9.6,9.6,9.8,11.6,-6.6,.9,-7.2,2.5,-2.3,-3.4,-2.3,-.6,-6.5,-8.2,-8,-6.3,-3.7,-3.5,-3.9,-1.6,-9.9,-8.9,-9.6,-7,-8.6,-8.9,-8.8,-6.8,-8.6,-8.2,-8.8,-6.8,.3,.1,.2,2.4,-7.4,-6.2,-6.9,-4.4,-2.9,-2.9,-3.5,-.9,-50,-12.2,-50,-10.1,1.2,.6,1.2,2.4,-50,-7.6,-16.1,-5.8,-7.2,-10.8,-7.4,-9],[5.1,-5.4,3.3,-4.8,-3.2,-7.1,-4.9,-6.6,13.3,-2.8,11.2,-1.9,-5.7,-12.5,-7.2,-11.6,-.7,-4.8,-3.1,-4.3,-10,-11.6,-8.8,-11.7,10.5,7.7,9.1,8.5,-9.8,-12.7,-11.7,-11.8,-6.3,-11.4,-8.8,-11,-7.5,-10.3,-8.3,-9.9,-1.9,-6.7,-4.1,-6.4,-7.9,-12.5,-11.4,-11.7,-50,-14,-50,-13.2,-8.5,-10.4,-9.1,-9.6,-50,-9.8,-7.7,-8.8,-10.3,-17.9,-11.8,-16],[-5,4.6,-5.5,2.9,-.7,2.4,.1,.9,-2.8,12.8,-2.6,11,-8.4,-6.3,-8.3,-7.7,-6.1,-2.9,-6.5,-4.2,-8.5,-5.9,-7.5,-7.7,-5.5,-2.4,-5.5,-4.1,-12.9,-10.3,-12.7,-11.3,-7.4,-3.1,-7.4,-4.9,-4.4,-1.8,-3.5,-3.5,-1.6,3,-.8,.9,-8.4,-6.3,-9.6,-7.3,-50,-9,-50,-9.7,-2.3,-.2,-1.2,-1.5,-50,-.7,-13.3,-2,-11.8,-11.9,-12.3,-12.7],[3.6,-5.5,4.8,-5.2,-5.1,-7.2,-3.6,-7.2,11.2,-2.6,13.4,-2.1,-7.7,-12.5,-5.3,-11.9,-2.2,-4.4,-1.9,-4.8,-10.2,-11.5,-8.1,-12,9.3,8.2,10,8,-10.8,-11.9,-10.7,-12.4,-8.2,-11.8,-6.9,-11.5,-8.4,-9.9,-7.1,-10.6,-4.7,-6.8,-1.2,-7,-9.8,-11.6,-9.6,-12.1,-50,-14.1,-50,-12.7,-10,-10.8,-8.8,-10.5,-50,-9.2,-4.2,-9.3,-11,-18.2,-11.1,-16.1],[-4.2,3,-5.1,5.2,-.4,.3,-.2,2.5,-1.9,11,-2.1,13.2,-7.6,-8.5,-8,-5.3,-5.6,-4.5,-6.8,-2.4,-7.8,-7.9,-7.9,-6.2,-5.7,-5.1,-5.4,-2.1,-12.4,-12.3,-13.1,-10.1,-6.6,-4.4,-6.9,-2.6,-3.6,-3.8,-3.7,-2,-1.4,.8,-.9,3,-8.2,-8.1,-9.2,-5.8,-50,-10.1,-50,-7.4,-1.7,-2,-1.5,-.5,-50,-2.1,-12.6,-.4,-11.6,-13.9,-11.4,-11.1],[-6.3,-10.2,-8.9,-9.1,.7,-2.9,-1.7,-2.3,-5.7,-8.4,-7.7,-7.6,13.2,9.6,3.5,9.7,-8.7,-12.4,-10.7,-10.7,-7.8,-10.2,-8.8,-9.6,-9.5,-11.9,-10.9,-10.5,2.3,-.4,-.2,-.3,-9.7,-15.5,-11.4,-13.7,-3,-6.4,-4.1,-5.4,-9.6,-11.9,-10.5,-11.8,6.2,3.3,3.7,3.6,-50,-13.6,-50,-11.9,-5.6,-8.8,-7.2,-8.9,-50,-12.4,-14.1,-11.6,2.8,-6.4,.5,-5.2],[-13,-7.9,-13.2,-9.5,-4.6,-1.2,-4.1,-3.4,-12.5,-6.3,-12.5,-8.5,9.6,12.7,.2,10.5,-12.4,-11.6,-13.2,-12,-12.4,-10.1,-11.6,-12,-15.1,-13.1,-14.3,-13.4,-1.4,1.4,-1.6,-.5,-14.9,-14.3,-15.2,-16.8,-7.7,-4.7,-6.3,-6.6,-14.6,-10.8,-12.8,-13,2.3,6,2.5,3.6,-50,-11.2,-50,-11.9,-10.5,-9.2,-10.5,-10.5,-50,-10.3,-16.2,-11.3,-1.7,-3.7,-2.5,-5.4],[-7.1,-9.9,-5.7,-9,-.4,-3,.9,-2.3,-7.2,-8.3,-5.3,-8,3.5,.2,14.3,1,-7.3,-11.2,-6.9,-9.7,-8.5,-10.2,-7.7,-9.8,-10,-10.4,-8.4,-10.2,1,-.6,1.7,-.5,-11.1,-14.8,-9.7,-14.5,-3.7,-5.8,-3.1,-5.6,-10.4,-11.5,-8.2,-11.1,.6,-1.6,1.6,-1.1,-50,-12.4,-50,-11.5,-5.5,-8,-4.9,-7.2,-50,-12.4,-10.3,-11.6,.7,-6.8,2.4,-6],[-11.5,-9.6,-12.6,-7,-3.6,-3.3,-3.5,-.6,-11.6,-7.7,-11.9,-5.3,9.7,10.5,1,12.6,-12,-12.2,-12.5,-9.7,-11.1,-11.2,-11.9,-9.4,-12.9,-14.3,-14,-11.9,-1,-.4,-1.6,1.2,-13.9,-15.4,-13.7,-12.6,-6.2,-6.7,-6.3,-4.4,-13,-12.2,-13,-10.4,2.9,3.8,2.5,5.8,-50,-12.5,-50,-10.2,-9.6,-9.7,-9.6,-8.3,-50,-11.6,-15.4,-9.4,-1.1,-5.4,-1.6,-3.3],[.4,-5,-1.5,-4,-4.8,-7.6,-5.9,-6.5,-.7,-6.1,-2.2,-5.6,-8.7,-12.4,-7.3,-12,12.8,2.3,10.2,3,0,-3.4,-.7,-3.2,2.5,-.8,.9,.2,-3,-7.2,-5.7,-6.1,-.2,-6.6,-1.8,-6,-5.3,-8.2,-5.7,-7.6,-6.7,-9.6,-7.5,-9.3,-7.1,-10.5,-9.6,-9.4,-50,-8.1,-50,-7.2,-4.3,-6.8,-5.7,-6.3,-50,-9.5,-9.6,-8.9,-6.2,-12.8,-6.8,-11.8],[-6,.5,-6.1,-1,-8.9,-6.7,-8.9,-8.2,-4.8,-2.9,-4.4,-4.5,-12.4,-11.6,-11.2,-12.2,2.3,14.6,1.9,12.9,-5.5,-2.6,-4.1,-4.7,-1.2,3,-1.1,1.6,-8,-4.7,-8.7,-6,-8.2,-4.7,-7.8,-6.7,-10,-8.3,-8.9,-9.9,-10.8,-7.1,-10,-9.2,-11.6,-10.1,-12.3,-11.9,-50,2.2,-50,.9,-7.9,-5.9,-7.4,-6.9,-50,-4.6,-11.6,-5.6,-9.7,-5.9,-9.9,-7.3],[-1.9,-5.5,-.6,-5,-6.5,-8.1,-5.6,-8,-3.1,-6.5,-1.9,-6.8,-10.7,-13.2,-6.9,-12.5,10.2,1.9,11.9,2.1,-2.3,-4.1,-.5,-4.6,-.1,-.9,2.4,-.8,-5.1,-6.9,-4.8,-6.7,-2.3,-7.1,-.8,-7.2,-7.2,-8,-5.6,-8.5,-9.4,-9.7,-7.2,-9.8,-9.2,-11.1,-9.5,-10.7,-50,-8.7,-50,-8.6,-6.1,-7.5,-5.5,-7.7,-50,-10.4,-7.7,-10,-7.3,-13.6,-6.4,-13.3],[-5.3,-1,-6.1,1,-7.8,-7.9,-8.5,-6.3,-4.3,-4.2,-4.8,-2.4,-10.7,-12,-9.7,-9.7,3,12.9,2.1,14.7,-4.9,-3.8,-4,-2.4,-1,.8,-1.3,3.4,-7.6,-5.7,-8.1,-3.5,-6.8,-5.8,-7.2,-4.2,-8.9,-10.2,-8.4,-8.2,-9.9,-8.4,-9.7,-6.4,-11.1,-11.1,-11.8,-10,-50,.4,-50,2.6,-7.2,-7,-7.4,-5.1,-50,-5.7,-9.8,-3.2,-8.4,-7.4,-8.9,-5.9],[-8.5,-10.3,-10,-9,-1.4,-4.9,-3.9,-3.7,-10,-8.5,-10.2,-7.8,-7.8,-12.4,-8.5,-11.1,0,-5.5,-2.3,-4.9,12.6,10,11.1,10.5,-6,-8.3,-6.9,-7.5,-2.2,-7.4,-5.3,-5.9,-8.9,-12.5,-9.4,-11.6,-.7,-3.9,-2.3,-3,-9.1,-9.8,-9.2,-9.5,-5.6,-9,-8,-8.5,-50,-15.3,-50,-14.1,2.3,-1.4,.3,-.5,-50,-13.6,-14.3,-11.5,-5.3,-13.7,-6.1,-12.7],[-11.2,-8.1,-11.8,-8.8,-4.1,-1.9,-3.9,-3.5,-11.6,-5.9,-11.5,-7.9,-10.2,-10.1,-10.2,-11.2,-3.4,-2.6,-4.1,-3.8,10,13.1,10.7,10.6,-8.1,-5.2,-8,-6.7,-6.1,-3.7,-7.5,-5.6,-11.1,-10.3,-10.6,-11.9,-3.2,-1,-2.2,-2.8,-10.5,-8.1,-9.4,-9.5,-8.3,-6.9,-9.4,-8.8,-50,-11.3,-50,-12.8,-.6,2.2,-.3,.1,-50,-10.1,-17.5,-11.1,-8.6,-9.9,-8.6,-11.9],[-8.9,-9.4,-8.6,-8.9,-2.9,-4.5,-2.2,-3.9,-8.8,-7.5,-8.1,-7.9,-8.8,-11.6,-7.7,-11.9,-.7,-4.1,-.5,-4,11.1,10.7,13.2,10.4,-5.7,-5.8,-3.5,-6.1,-3.6,-6.5,-3.3,-5.5,-9.4,-11,-8.7,-11.2,-1.8,-2.7,.7,-3,-9.1,-8.2,-7.3,-9.4,-7.2,-8.2,-7.2,-8.2,-50,-13.2,-50,-13.3,.5,-.9,1.8,-.6,-50,-11.4,-11.1,-10.5,-6.1,-12.9,-5,-11.9],[-10.8,-9.6,-11.9,-7.7,-3.3,-3.8,-4.5,-1.6,-11.7,-7.7,-12,-6.2,-9.6,-12,-9.8,-9.4,-3.2,-4.7,-4.6,-2.4,10.5,10.6,10.4,12.6,-8.2,-7.9,-9,-4.7,-6.1,-6,-7.5,-2.9,-10.9,-12.2,-11.2,-10.9,-2.4,-2.9,-2.7,-.9,-10.4,-9.7,-10.2,-8,-8.4,-9.1,-9.3,-6.5,-50,-13.3,-50,-11,-0,-.4,-.4,2.3,-50,-10.9,-17.2,-8.3,-8.3,-12.7,-7.8,-9.3],[2.1,-8.1,1.2,-7,-8,-9.5,-7.3,-9.9,10.5,-5.5,9.3,-5.7,-9.5,-15.1,-10,-12.9,2.5,-1.2,-.1,-1,-6,-8.1,-5.7,-8.2,13.8,11.3,11.8,12.1,-6,-9.1,-9,-9.5,-8.9,-13.4,-10,-13.1,-9.9,-11.7,-9.8,-12.8,-5.9,-9.4,-6.5,-8.1,-10.7,-14,-13.3,-13.9,-50,-11.9,-50,-9.7,-8.9,-10.8,-9,-11.1,-50,-6.5,-5.3,-6.3,-10.5,-16.2,-10.4,-15.2],[0,-5,.5,-6.8,-9.1,-7.8,-7.5,-8.9,7.7,-2.4,8.2,-5.1,-11.9,-13.1,-10.4,-14.3,-.8,3,-.9,.8,-8.3,-5.2,-5.8,-7.9,11.3,15,11.2,12.8,-9.7,-5.3,-9.2,-7.8,-11.7,-10.6,-10.1,-12.2,-11.7,-8.8,-8.9,-11.8,-9.3,-5,-8,-8.2,-13.6,-11.4,-12.8,-13,-50,-7.2,-50,-8.4,-11,-7.7,-8.7,-10.2,-50,-1.5,-7.1,-4.9,-11.2,-11.6,-11.6,-15],[1.4,-7.3,2.2,-7.1,-8,-9.3,-6.4,-9.6,9.1,-5.5,10,-5.4,-10.9,-14.3,-8.4,-14,.9,-1.1,2.4,-1.3,-6.9,-8,-3.5,-9,11.8,11.2,13.4,11.4,-7.3,-8.8,-6.5,-8.5,-10,-12.5,-7.8,-12.5,-9.6,-11,-7.1,-10.7,-7.9,-8,-4.3,-9.4,-11.4,-12.3,-10.9,-12.9,-50,-11.8,-50,-11.2,-9.4,-9.8,-7.3,-10.5,-50,-6.2,-2.2,-6.7,-9.8,-15.2,-8.5,-14.9],[.2,-6.3,.1,-4.3,-8.2,-8.9,-8.5,-7,8.5,-4.1,8,-2.1,-10.5,-13.4,-10.2,-11.9,.2,1.6,-.8,3.4,-7.5,-6.7,-6.1,-4.7,12.1,12.8,11.4,14.7,-8.7,-7.4,-9.4,-5.3,-9.9,-11.8,-10.5,-10.3,-9.9,-10.1,-9.3,-9.3,-8.1,-7.2,-8,-5.2,-12,-12.1,-12.6,-10.9,-50,-7.9,-50,-5.3,-9.3,-8.8,-8.9,-7,-50,-3.6,-7.1,-1.2,-10.2,-12.7,-9.9,-11],[-10.2,-13.4,-11.8,-12.4,-6,-9.4,-7.1,-8.6,-9.8,-12.9,-10.8,-12.4,2.3,-1.4,1,-1,-3,-8,-5.1,-7.6,-2.2,-6.1,-3.6,-6.1,-6,-9.7,-7.3,-8.7,11.2,7.9,8.9,8.1,-12.1,-17.4,-13.2,-16.8,-6.3,-9.5,-7.5,-8.8,-12.7,-15.2,-13.1,-14.2,0,-3.1,-1.8,-3.1,-50,-10.7,-50,-9.3,-4.6,-8.9,-5.9,-8.3,-50,-12.8,-9.6,-10.6,9.5,-3.2,8.2,-2.8],[-13.5,-11.3,-14,-12.9,-9.3,-7.1,-8.2,-8.9,-12.7,-10.3,-11.9,-12.3,-.4,1.4,-.6,-.4,-7.2,-4.7,-6.9,-5.7,-7.4,-3.7,-6.5,-6,-9.1,-5.3,-8.8,-7.4,7.9,11.9,7.8,9.3,-15.2,-15.1,-14.6,-17.2,-9.7,-7.3,-8.2,-9.2,-15,-12.8,-14.1,-14.9,-2.8,.2,-2.9,-2.3,-50,-7.4,-50,-8.7,-9.4,-7.3,-9.4,-9.4,-50,-8,-11.9,-9.7,6.5,.5,6.4,-1.8],[-13,-14.4,-11.9,-13.9,-7.7,-9,-6.7,-8.8,-11.7,-12.7,-10.7,-13.1,-.2,-1.6,1.7,-1.6,-5.7,-8.7,-4.8,-8.1,-5.3,-7.5,-3.3,-7.5,-9,-9.2,-6.5,-9.4,8.9,7.8,10.1,7.8,-14.3,-17.7,-13,-17.8,-8,-9.4,-6.2,-9.2,-15.1,-14.9,-12.2,-14.9,-1.8,-3.2,-.8,-3.2,-50,-10.8,-50,-9.9,-7.3,-9.6,-6.4,-9.4,-50,-12.3,-8.7,-11.3,7.6,-3.3,8.7,-2.9],[-12.5,-12.9,-13.4,-10,-8.5,-9,-7.8,-6.8,-11.8,-11.3,-12.4,-10.1,-.3,-.5,-.5,1.2,-6.1,-6,-6.7,-3.5,-5.9,-5.6,-5.5,-2.9,-9.5,-7.8,-8.5,-5.3,8.1,9.3,7.8,11.8,-14.4,-15.7,-14.5,-14.6,-8.4,-8.7,-7.9,-7.1,-14.3,-13.8,-13.8,-12.3,-2.4,-2.2,-2.9,-.2,-50,-8.9,-50,-7.1,-8.1,-9.1,-8.7,-6.6,-50,-9.7,-11.4,-8,6.8,-1.8,6.9,.4],[-2.6,-6.3,-4.9,-4.9,-6.4,-9.4,-7.9,-8.6,-6.3,-7.4,-8.2,-6.6,-9.7,-14.9,-11.1,-13.9,-.2,-8.2,-2.3,-6.8,-8.9,-11.1,-9.4,-10.9,-8.9,-11.7,-10,-9.9,-12.1,-15.2,-14.3,-14.4,11.1,2.9,9.2,3.5,-3,-7,-4.3,-6.2,-2.2,-6.6,-3.7,-5.7,-6,-10.4,-8.6,-9.5,-50,-15.5,-50,-13.9,-7.8,-10.5,-8.7,-9.6,-50,-16.5,-17.1,-14.8,-12.1,-18.9,-12.4,-17.4],[-8.5,.8,-9.1,-.7,-10.1,-7.5,-9.1,-8.2,-11.4,-3.1,-11.8,-4.4,-15.5,-14.3,-14.8,-15.4,-6.6,-4.7,-7.1,-5.8,-12.5,-10.3,-11,-12.2,-13.4,-10.6,-12.5,-11.8,-17.4,-15.1,-17.7,-15.7,2.9,12.5,3.1,10.3,-7.7,-5.2,-6.2,-7.3,-5.4,-1.7,-5.4,-3.7,-11.6,-9.1,-13,-10.8,-50,-10.3,-50,-11.2,-9.8,-8.3,-9.1,-9.7,-50,-12.7,-20.6,-13.1,-16,-16.6,-17,-18.4],[-5,-6.4,-3.4,-5.6,-7.5,-9.3,-7.1,-8.8,-8.8,-7.4,-6.9,-6.9,-11.4,-15.2,-9.7,-13.7,-1.8,-7.8,-.8,-7.2,-9.4,-10.6,-8.7,-11.2,-10,-10.1,-7.8,-10.5,-13.2,-14.6,-13,-14.5,9.2,3.1,10.8,3,-4.5,-6.7,-2.7,-6.7,-5,-6.8,-2.5,-6.7,-7.5,-10.4,-7.4,-10.2,-50,-15.5,-50,-14.2,-8.9,-10.2,-8.5,-10,-50,-15.6,-15.3,-15.5,-13,-18.8,-12.6,-18.3],[-8.1,-1.1,-8.9,1.4,-8.6,-9.2,-9.4,-6.8,-11,-4.9,-11.5,-2.6,-13.7,-16.8,-14.5,-12.6,-6,-6.7,-7.2,-4.2,-11.6,-11.9,-11.2,-10.9,-13.1,-12.2,-12.5,-10.3,-16.8,-17.2,-17.8,-14.6,3.5,10.3,3,12.4,-6.9,-7.5,-6.8,-4.9,-5.4,-4.2,-5.4,-1.3,-10.8,-11.5,-12.4,-8.2,-50,-12.5,-50,-8.9,-9.2,-10,-9.4,-7.9,-50,-14.3,-19.9,-11.4,-16.2,-19.2,-15.8,-15.9],[-6.3,-7.4,-8,-6,2.8,-.7,.9,.3,-7.5,-4.4,-8.4,-3.6,-3,-7.7,-3.7,-6.2,-5.3,-10,-7.2,-8.9,-.7,-3.2,-1.8,-2.4,-9.9,-11.7,-9.6,-9.9,-6.3,-9.7,-8,-8.4,-3,-7.7,-4.5,-6.9,11.3,8.2,9.4,9.1,-1,-3.3,-1.8,-2.4,1.5,-2.1,-.4,-1.1,-50,-14.5,-50,-12.9,2.8,-0,1.4,.7,-50,-8.7,-14.1,-7.5,-5.2,-12.5,-6.5,-10.7],[-9.9,-5,-10,-6.5,-.7,2.6,-.2,.1,-10.3,-1.8,-9.9,-3.8,-6.4,-4.7,-5.8,-6.7,-8.2,-8.3,-8,-10.2,-3.9,-1,-2.7,-2.9,-11.7,-8.8,-11,-10.1,-9.5,-7.3,-9.4,-8.7,-7,-5.2,-6.7,-7.5,8.2,11.6,8.8,9.1,-3.7,-.9,-3.1,-3,-2,1.2,-2.3,-1.3,-50,-12.1,-50,-12.6,.1,2.5,.7,.6,-50,-6,-14.8,-7.5,-8.6,-9.4,-8.5,-11.2],[-7.5,-6.2,-7.2,-6.2,.9,.2,2.5,.2,-8.3,-3.5,-7.1,-3.7,-4.1,-6.3,-3.1,-6.3,-5.7,-8.9,-5.6,-8.4,-2.3,-2.2,.7,-2.7,-9.8,-8.9,-7.1,-9.3,-7.5,-8.2,-6.2,-7.9,-4.3,-6.2,-2.7,-6.8,9.4,8.8,12.1,8.8,-2.1,-2,.1,-2.4,0,-1.1,1.3,-.8,-50,-11.9,-50,-12.6,1.2,.7,3.5,.8,-50,-7.1,-12.4,-7.1,-7.1,-10.6,-5,-10.6],[-9,-6.5,-10,-4.8,.1,-.1,-.3,2.4,-9.9,-3.5,-10.6,-2,-5.4,-6.6,-5.6,-4.4,-7.6,-9.9,-8.5,-8.2,-3,-2.8,-3,-.9,-12.8,-11.8,-10.7,-9.3,-8.8,-9.2,-9.2,-7.1,-6.2,-7.3,-6.7,-4.9,9.1,9.1,8.8,11.2,-3.1,-3,-3.3,-1,-1.1,-1.4,-2,1.2,-50,-12.8,-50,-10.9,.8,.5,.7,2.3,-50,-7.5,-16.5,-5.9,-7.8,-11.1,-7.8,-9],[-7.1,-5.6,-9.1,-5.1,-5.9,-8,-6.9,-7.4,-1.9,-1.6,-4.7,-1.4,-9.6,-14.6,-10.4,-13,-6.7,-10.8,-9.4,-9.9,-9.1,-10.5,-9.1,-10.4,-5.9,-9.3,-7.9,-8.1,-12.7,-15,-15.1,-14.3,-2.2,-5.4,-5,-5.4,-1,-3.7,-2.1,-3.1,12.8,9.6,11.1,10.1,-4.8,-9.4,-8.1,-8.6,-50,-18.3,-50,-15.4,-5.9,-7.5,-6.6,-7.1,-50,-9.5,-11.7,-8.4,-12.5,-17.3,-13.2,-15.4],[-10.2,-1.6,-10.2,-3.2,-7.3,-4.6,-6.5,-6.2,-6.7,3,-6.8,.8,-11.9,-10.8,-11.5,-12.2,-9.6,-7.1,-9.7,-8.4,-9.8,-8.1,-8.2,-9.7,-9.4,-5,-8,-7.2,-15.2,-12.8,-14.9,-13.8,-6.6,-1.7,-6.8,-4.2,-3.3,-.9,-2,-3,9.6,12.8,9.7,10.5,-8.5,-5.6,-9.3,-7.8,-50,-12.7,-50,-13.8,-6.8,-5.1,-5.3,-6.5,-50,-4.1,-12.8,-5.8,-14.4,-14.1,-13.6,-14.8],[-8.2,-4.7,-7.1,-5,-6.5,-7.7,-5.5,-6.9,-4.1,-.8,-1.2,-.9,-10.5,-12.8,-8.2,-13,-7.5,-10,-7.2,-9.7,-9.2,-9.4,-7.3,-10.2,-6.5,-8,-4.3,-8,-13.1,-14.1,-12.2,-13.8,-3.7,-5.4,-2.5,-5.4,-1.8,-3.1,.1,-3.3,11.1,9.7,12.9,9.8,-5.5,-8.1,-5.4,-7.8,-50,-16.4,-50,-14.8,-5.9,-7.1,-4.7,-7.2,-50,-8.4,-6.4,-8.1,-12.1,-16.2,-10.3,-15.8],[-9.2,-3,-9.9,-1.2,-6.5,-6.1,-6.8,-4.4,-6.4,.9,-7,3,-11.8,-13,-11.1,-10.4,-9.3,-9.2,-9.8,-6.4,-9.5,-9.5,-9.4,-8,-8.1,-8.2,-9.4,-5.2,-14.2,-14.9,-14.9,-12.3,-5.7,-3.7,-6.7,-1.3,-2.4,-3,-2.4,-1,10.1,10.5,9.8,13.1,-7.2,-8,-8.4,-5,-50,-14.7,-50,-11.4,-6.3,-6.7,-5.8,-5,-50,-6.1,-13.4,-3.6,-13,-16,-13.7,-13.3],[-8.2,-10.8,-10.1,-9.8,-.4,-3.6,-1.7,-2.9,-7.9,-8.4,-9.8,-8.2,6.2,2.3,.6,2.9,-7.1,-11.6,-9.2,-11.1,-5.6,-8.3,-7.2,-8.4,-10.7,-13.6,-11.4,-12,0,-2.8,-1.8,-2.4,-6,-11.6,-7.5,-10.8,1.5,-2,0,-1.1,-4.8,-8.5,-5.5,-7.2,11.9,8.6,10,9,-50,-14.2,-50,-12.8,-4.1,-7.4,-5.7,-6.5,-50,-11,-14.3,-9.9,1.4,-7.9,-.7,-6.8],[-12.5,-8.7,-13,-9.9,-3.9,-1,-3.4,-2.9,-12.5,-6.3,-11.6,-8.1,3.3,6,-1.6,3.8,-10.5,-10.1,-11.1,-11.1,-9,-6.9,-8.2,-9.1,-14,-11.4,-12.3,-12.1,-3.1,.2,-3.2,-2.2,-10.4,-9.1,-10.4,-11.5,-2.1,1.2,-1.1,-1.4,-9.4,-5.6,-8.1,-8,8.6,12.4,8.6,9.5,-50,-10.4,-50,-11.6,-7.2,-5.7,-7.5,-7.4,-50,-8.6,-15.7,-9.7,-3,-3.7,-3.2,-5.9],[-11.1,-11.9,-10.6,-11.3,-2.6,-4.1,-1.7,-3.5,-11.4,-9.6,-9.6,-9.2,3.7,2.5,1.6,2.5,-9.6,-12.3,-9.5,-11.8,-8,-9.4,-7.2,-9.3,-13.3,-12.8,-10.9,-12.6,-1.8,-2.9,-.8,-2.9,-8.6,-13,-7.4,-12.4,-.4,-2.3,1.3,-2,-8.1,-9.3,-5.4,-8.4,10,8.6,11.4,8.9,-50,-13.7,-50,-13.2,-6.1,-8.1,-5.5,-7.5,-50,-11.3,-12.7,-10.1,-1.6,-7.8,-.3,-7.2],[-11.4,-10,-12.7,-8.2,-3.1,-3.1,-2.8,-.9,-11.7,-7.3,-12.1,-5.8,3.6,3.6,-1.1,5.8,-9.4,-11.9,-10.7,-10,-8.5,-8.8,-8.2,-6.5,-13.9,-13,-12.9,-10.9,-3.1,-2.3,-3.2,-.2,-9.5,-10.8,-10.2,-8.2,-1.1,-1.3,-.8,1.2,-8.6,-7.8,-7.8,-5,9,9.5,8.9,12,-50,-13,-50,-10.3,-6.2,-7,-7.1,-5.4,-50,-9.3,-14,-8.2,-2.4,-6.3,-2.4,-3.9],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,33.3,-50,30.6,-50,-50,-50,-50,-50,29.2,-50,-50,-50,-50,-50,-50,-50],[-14.8,-6.2,-14.9,-7.6,-14.6,-11.6,-13,-12.2,-14,-9,-14.1,-10.1,-13.6,-11.2,-12.4,-12.5,-8.1,2.2,-8.7,.4,-15.3,-11.3,-13.2,-13.3,-11.9,-7.2,-11.8,-7.9,-10.7,-7.4,-10.8,-8.9,-15.5,-10.3,-15.5,-12.5,-14.5,-12.1,-11.9,-12.8,-18.3,-12.7,-16.4,-14.7,-14.2,-10.4,-13.7,-13,-50,15.1,-50,13.3,-9.9,-5.8,-8.9,-7.6,-50,-1.5,-7.8,-3,-8.1,3.6,-9.4,2],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,30.6,-50,35.2,-50,-50,-50,-50,-50,28.5,-50,-50,-50,-50,-50,-50,-50],[-13.8,-7.5,-14.4,-5.1,-12.6,-11.6,-11.5,-10.1,-13.2,-9.7,-12.7,-7.4,-11.9,-11.9,-11.5,-10.2,-7.2,.9,-8.6,2.6,-14.1,-12.8,-13.3,-11,-9.7,-8.4,-11.2,-5.3,-9.3,-8.7,-9.9,-7.1,-13.9,-11.2,-14.2,-8.9,-12.9,-12.6,-12.6,-10.9,-15.4,-13.8,-14.8,-11.4,-12.8,-11.6,-13.2,-10.3,-50,13.3,-50,15.2,-8.6,-7,-8.4,-4.8,-50,-3,-7.1,-.1,-7.3,2.3,-8.7,3.9],[-7.3,-6.3,-8.9,-5.5,2.9,.2,1.5,1.2,-8.5,-2.3,-10,-1.7,-5.6,-10.5,-5.5,-9.6,-4.3,-7.9,-6.1,-7.2,2.3,-.6,.5,-0,-8.9,-11,-9.4,-9.3,-4.6,-9.4,-7.3,-8.1,-7.8,-9.8,-8.9,-9.2,2.8,.1,1.2,.8,-5.9,-6.8,-5.9,-6.3,-4.1,-7.2,-6.1,-6.2,-50,-9.9,-50,-8.6,12.5,9.4,11,9.8,-50,-4.8,-8.7,-3.5,-0,-8.6,-2.1,-7],[-10.1,-4.3,-10.8,-5.8,.1,2.3,.7,.6,-10.4,-.2,-10.8,-2,-8.8,-9.2,-8,-9.7,-6.8,-5.9,-7.5,-7,-1.4,2.2,-.9,-.4,-10.8,-7.7,-9.8,-8.8,-8.9,-7.3,-9.6,-9.1,-10.5,-8.3,-10.2,-10,-0,2.5,.7,.5,-7.5,-5.1,-7.1,-6.7,-7.4,-5.7,-8.1,-7,-50,-5.8,-50,-7,9.4,12.7,10.1,10,-50,-1.5,-11.3,-3.3,-5.4,-4.2,-5.6,-6.8],[-8.4,-6.2,-8.9,-5.9,1.8,.4,2.7,1.2,-9.1,-1.2,-8.8,-1.5,-7.2,-10.5,-4.9,-9.6,-5.7,-7.4,-5.5,-7.4,.3,-.3,1.8,-.4,-9,-8.7,-7.3,-8.9,-5.9,-9.4,-6.4,-8.7,-8.7,-9.1,-8.5,-9.4,1.4,.7,3.5,.7,-6.6,-5.3,-4.7,-5.8,-5.7,-7.5,-5.5,-7.1,-50,-8.9,-50,-8.4,11,10.1,13.2,10.2,-50,-4.2,-6.1,-3.6,-3.5,-8.4,-1.2,-6.8],[-9.1,-5.4,-10.4,-4.2,1,.5,.6,2.4,-9.6,-1.5,-10.5,-.5,-8.9,-10.5,-7.2,-8.3,-6.3,-6.9,-7.7,-5.1,-.5,.1,-.6,2.3,-11.1,-10.2,-10.5,-7,-8.3,-9.4,-9.4,-6.6,-9.6,-9.7,-10,-7.9,.7,.6,.8,2.3,-7.1,-6.5,-7.2,-5,-6.5,-7.4,-7.5,-5.4,-50,-7.6,-50,-4.8,9.8,10,10.2,12.1,-50,-3.1,-11.4,-.7,-4.6,-6.6,-4.9,-3.9],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,29.2,-50,28.5,-50,-50,-50,-50,-50,33.3,-50,-50,-50,-50,-50,-50,-50],[-13,-7,-13.1,-8.3,-9.2,-6.5,-8.9,-7.6,-9.8,-.7,-9.2,-2.1,-12.4,-10.3,-12.4,-11.6,-9.5,-4.6,-10.4,-5.7,-13.6,-10.1,-11.4,-10.9,-6.5,-1.5,-6.2,-3.6,-12.8,-8,-12.3,-9.7,-16.5,-12.7,-15.6,-14.3,-8.7,-6,-7.1,-7.5,-9.5,-4.1,-8.4,-6.1,-11,-8.6,-11.3,-9.3,-50,-1.5,-50,-3,-4.8,-1.5,-4.2,-3.1,-50,16.4,-5.1,14.2,-10.1,-4.3,-10,-5.4],[-13.5,-16.3,-11.8,-15.5,-13.6,-15.3,-12.1,-16.1,-7.7,-13.3,-4.2,-12.6,-14.1,-16.2,-10.3,-15.4,-9.6,-11.6,-7.7,-9.8,-14.3,-17.5,-11.1,-17.2,-5.3,-7.1,-2.2,-7.1,-9.6,-11.9,-8.7,-11.4,-17.1,-20.6,-15.3,-19.9,-14.1,-14.8,-12.4,-16.5,-11.7,-12.8,-6.4,-13.4,-14.3,-15.7,-12.7,-14,-50,-7.8,-50,-7.1,-8.7,-11.3,-6.1,-11.4,-50,-5.1,18.6,-4.8,-8.6,-8.1,-4.5,-7.3],[-12.4,-8.2,-13,-5.9,-7.7,-7.8,-7.4,-5.8,-8.8,-2,-9.3,-.4,-11.6,-11.3,-11.6,-9.4,-8.9,-5.6,-10,-3.2,-11.5,-11.1,-10.5,-8.3,-6.3,-4.9,-6.7,-1.2,-10.6,-9.7,-11.3,-8,-14.8,-13.1,-15.5,-11.4,-7.5,-7.5,-7.1,-5.9,-8.4,-5.8,-8.1,-3.6,-9.9,-9.7,-10.1,-8.2,-50,-3,-50,-.1,-3.5,-3.3,-3.6,-.7,-50,14.2,-4.8,16.4,-8.9,-5.8,-8.9,-3.4],[-10.7,-13.2,-12.4,-11.6,-4.8,-8.4,-6.1,-7.2,-10.3,-11.8,-11,-11.6,2.8,-1.7,.7,-1.1,-6.2,-9.7,-7.3,-8.4,-5.3,-8.6,-6.1,-8.3,-10.5,-11.2,-9.8,-10.2,9.5,6.5,7.6,6.8,-12.1,-16,-13,-16.2,-5.2,-8.6,-7.1,-7.8,-12.5,-14.4,-12.1,-13,1.4,-3,-1.6,-2.4,-50,-8.1,-50,-7.3,-0,-5.4,-3.5,-4.6,-50,-10.1,-8.6,-8.9,13.2,-.9,9.7,-.3],[-18.1,-12.3,-19.4,-14.2,-12.2,-9.5,-11.5,-10.8,-17.9,-11.9,-18.2,-13.9,-6.4,-3.7,-6.8,-5.4,-12.8,-5.9,-13.6,-7.4,-13.7,-9.9,-12.9,-12.7,-16.2,-11.6,-15.2,-12.7,-3.2,.5,-3.3,-1.8,-18.9,-16.6,-18.8,-19.2,-12.5,-9.4,-10.6,-11.1,-17.3,-14.1,-16.2,-16,-7.9,-3.7,-7.8,-6.3,-50,3.6,-50,2.3,-8.6,-4.2,-8.4,-6.6,-50,-4.3,-8.1,-5.8,-.9,14.2,-1.8,11.6],[-11.8,-13.1,-11.5,-12,-6.2,-8.3,-5.4,-7.4,-11.8,-12.3,-11.1,-11.4,.5,-2.5,2.4,-1.6,-6.8,-9.9,-6.4,-8.9,-6.1,-8.6,-5,-7.8,-10.4,-11.6,-8.5,-9.9,8.2,6.4,8.7,6.9,-12.4,-17,-12.6,-15.8,-6.5,-8.5,-5,-7.8,-13.2,-13.6,-10.3,-13.7,-.7,-3.2,-.3,-2.4,-50,-9.4,-50,-8.7,-2.1,-5.6,-1.2,-4.9,-50,-10,-4.5,-8.9,9.7,-1.8,11.3,-.9],[-17.2,-13.3,-17.8,-11.6,-11,-11.1,-10.4,-9,-16,-12.7,-16.1,-11.1,-5.2,-5.4,-6,-3.3,-11.8,-7.3,-13.3,-5.9,-12.7,-11.9,-11.9,-9.3,-15.2,-15,-14.9,-11,-2.8,-1.8,-2.9,.4,-17.4,-18.4,-18.3,-15.9,-10.7,-11.2,-10.6,-9,-15.4,-14.8,-15.8,-13.3,-6.8,-5.9,-7.2,-3.9,-50,2,-50,3.9,-7,-6.8,-6.8,-3.9,-50,-5.4,-7.3,-3.4,-.3,11.6,-.9,14.1]],this.TRANS=[[5,0,0,4],[0,5,4,0],[0,4,5,0],[4,0,0,5]],this.CONBLO={A:0,R:1,N:2,D:3,C:4,Q:5,E:6,G:7,H:8,I:9,L:10,K:11,M:12,F:13,P:14,S:15,T:16,W:17,Y:18,V:19,B:20,Z:21,X:22,"*":23},this.CONNUCL={A:0,T:1,C:2,G:3},this.CONSCHN={AAA:0,AAC:1,AAG:2,AAT:3,ACA:4,ACC:5,ACG:6,ACT:7,AGA:8,AGC:9,AGG:10,AGT:11,ATA:12,ATC:13,ATG:14,ATT:15,CAA:16,CAC:17,CAG:18,CAT:19,CCA:20,CCC:21,CCG:22,CCT:23,CGA:24,CGC:25,CGG:26,CGT:27,CTA:28,CTC:29,CTG:30,CTT:31,GAA:32,GAC:33,GAG:34,GAT:35,GCA:36,GCC:37,GCG:38,GCT:39,GGA:40,GGC:41,GGG:42,GGT:43,GTA:44,GTC:45,GTG:46,GTT:47,TAA:48,TAC:49,TAG:50,TAT:51,TCA:52,TCC:53,TCG:54,TCT:55,TGA:56,TGC:57,TGG:58,TGT:59,TTA:60,TTC:61,TTG:62,TTT:63},this.setMethod(n),this.setSequences(e,t),this.setGap(s)}}},7983:(e,t,s)=>{"use strict";s.d(t,{HV:()=>m,QF:()=>p,pf:()=>d,uH:()=>u});var n=s(4469),r=s(3870),i=s(976),o=s(7241),a=s(4293),l=s(8467),c=s(8447);const h="substr_helm";class u{constructor(e){this.col=e[0],this.createUI()}editHelmLinkAction(){(0,a.Y)(this.inputsDiv,this.grid.root),r.tools.waitForElementInDom(this.grid.root).then((()=>{setTimeout((()=>{this.grid.cell(h,0).element.children[0].dispatchEvent(new KeyboardEvent("keydown",{key:"Enter"}))}),100)}))}updateInputs(){const e=this.units===c.r2.HELM?r.divV([this.columnsInput,this.editHelmLink]):this.units===c.r2.SEPARATOR?r.inputs([this.columnsInput,this.substructureInput,this.separatorInput]):r.inputs([this.columnsInput,this.substructureInput]);(0,a.Y)(this.inputsDiv,e)}updateNotationDiv(){this.units=this.col.getTag(i.TAGS.UNITS),this.separator=this.col.getTag("separator");const e=this.dialog.root.getElementsByClassName("notation-text")[0];e&&(e.textContent=`Notation: ${this.units}`)}createUI(){const e=n.shell.tv.dataFrame,t={filter:e=>e.semType===i.SEMTYPE.MACROMOLECULE};this.columnsInput=r.columnInput("Column",e,this.col,(e=>{this.col=e,this.updateNotationDiv(),this.updateInputs()}),t),this.substructureInput=r.stringInput("Substructure",""),this.editHelmLink=r.link("Edit helm",(()=>this.editHelmLinkAction()),void 0,{style:{position:"relative",left:"95px"}});const s=i.DataFrame.create(1);s.columns.addNewString(h).init((e=>"")),s.col(h).semType=this.col.semType,s.col(h).setTag(i.TAGS.UNITS,c.r2.HELM),this.grid=s.plot.grid(),this.separatorInput=r.stringInput("Separator",this.separator),this.inputsDiv=r.div(),this.units=this.col.getTag(i.TAGS.UNITS),this.separator=this.col.getTag("separator"),this.updateInputs(),this.dialog=r.dialog("Substructure Search").add(r.divV([r.divText(`Notation: ${this.units}`,"notation-text"),this.inputsDiv])).onOK((async()=>{let e,t=this.units===c.r2.HELM?s.get(h,0):this.substructureInput.value;this.units===c.r2.SEPARATOR&&this.separatorInput.value!==this.separator&&""!==this.separatorInput.value&&(t=t.replaceAll(this.separatorInput.value,this.separator)),e=this.units===c.r2.HELM?await p(t,this.col):d(t,this.col),this.col.dataFrame.filter.and(e)})).show()}}function d(e,t,s){const n=s?function(e,t){const s=`${t}`.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),n=e.charAt(0)===t,r=e.charAt(e.length-1)===t,i=e.replace(new RegExp(`^${s}|${s}$`,"g"),"");return n?r?`${s}${i}${s}`:`${s}${i}${s}|${s}${i}$`:r?`^${i}${s}|${s}${i}${s}`:`^${i}${s}|${s}${i}${s}|${s}${i}$`}(e,s):e,r=i.BitSet.create(t.length);for(let s=0;s<t.length;s++){const i=t.get(s);(i.match(n)||i===e)&&r.set(s,!0,!1)}return r}async function p(e,t){t.version!==t.temp["last-invalidated-version"]&&await m(t,!0);const s=i.Column.string("helm",1).init((t=>e));s.semType=i.SEMTYPE.MACROMOLECULE,s.setTag(i.TAGS.UNITS,c.r2.HELM);const r=await(0,o.D)(s,!0,t.temp["monomers-dict"]);return(await n.functions.call("Chem:searchSubstructure",{molStringsColumn:t.temp["monomeric-mols"],molString:r.get(0),molBlockFailover:""})).get(0)}async function m(e,t){const s=i.TaskBarProgressIndicator.create(`Invalidating molfiles for ${e.name}`);try{await(0,l.gw)(10);const s=new Map,n=await(0,o.D)(e,t,s);e.temp["monomeric-mols"]=n,e.temp["monomers-dict"]=s,e.temp["last-invalidated-version"]=e.version}finally{s.close()}}},2568:(e,t,s)=>{"use strict";s.d(t,{n:()=>o});var n=s(4469),r=s(976),i=s(499);function o(e,t,s=[],o=[],a=!0){const[l,c]=function(e,t,s=[],o=[]){let a=!0,l="";const c=i.Cn.getOrCreate(e);if(e.semType!==r.SEMTYPE.MACROMOLECULE)n.shell.warning(t+" analysis is allowed for Macromolecules semantic type"),a=!1;else{const e=c.notation;if(s.length>0&&!s.some((t=>e.toUpperCase()==t.toUpperCase())))l=`${t} + ' analysis is allowed for Macromolecules with notation ${0==s.length?"any notation":`notation${s.length>1?"s":""} ${s.map((e=>`"${e}"`)).join(", ")} `}.`,a=!1;else if(!c.isHelm()){const e=c.alphabet;o.length>0&&!o.some((t=>e.toUpperCase()==t.toUpperCase()))&&(l=`${t} + ' analysis is allowed for Macromolecules with alphabet ${0==o.length?"any alphabet":`alphabet${o.length>1?"s":""} ${o.map((e=>`"${e}"`)).join(", ")}.`}.`,a=!1)}}return[a,l]}(e,t,s,o);return a&&!l&&n.shell.warning(c),l}},3553:(e,t,s)=>{"use strict";s.d(t,{Of:()=>i,WY:()=>c,jB:()=>h,rs:()=>a});var n,r,i,o,a,l=s(8341);!function(e){e.SPLIT_COL="~split",e.ACTIVITY="~activity",e.ACTIVITY_SCALED="activity_scaled",e.ALIGNED_SEQUENCE="~aligned_sequence",e.AMINO_ACID_RESIDUE="AAR",e.POSITION="Pos",e.P_VALUE="pValue",e.MEAN_DIFFERENCE="Mean difference"}(n||(n={})),function(e){e.AAR="AAR",e.POSITION="Pos",e.SELECTION="selection"}(r||(r={})),function(e){e.MONOMER="Monomer",e.MACROMOLECULE_DIFFERENCE="MacromoleculeDifference",e.ACTIVITY="activity",e.ACTIVITY_SCALED="activityScaled"}(i||(i={})),function(e){e.CELL_CHANGING="isCellChanging"}(o||(o={})),function(e){e.SEPARATOR="."}(a||(a={}));const c="3.3.1",h={pepsea:{gapOpen:1.53,gapExtend:0,method:l.Jy[0]},kalign:{gapOpen:-1,gapExtend:-1,terminalGap:-1}}},4004:(e,t,s)=>{"use strict";s.d(t,{O:()=>d});var n=s(976),r=s(3870),i=s(4469),o=s(3336),a=s.n(o),l=s(8447),c=s(499);let h=null,u=[];function d(e){let t=e??i.shell.t.columns.bySemType("Macromolecule");if(!t)throw new Error("No column with Macromolecule semantic type found");let s=c.Cn.getOrCreate(t),o=s.notation;const d=r.divText("Current notation: "+o,{style:{"text-align":"center","font-weight":"bold","font-size":"14px",padding:"5px"}}),p=[l.r2.FASTA,l.r2.SEPARATOR,l.r2.HELM],m=r.columnInput("Column",i.shell.t,t,(e=>{e.semType===n.SEMTYPE.MACROMOLECULE?(t=e,s=c.Cn.getOrCreate(t),o=s.notation,o===l.r2.HELM&&(y.value="/"),d.textContent="Current notation: "+o,g=p.filter((e=>e!==o)),v=r.choiceInput("Convert to",g[0],g,b),b(),h?.clear(),h?.add(r.div([d,m.root,v.root,y.root]))):m.value=t})),f=["-",".","/"];let g=p.filter((e=>e!==o));const y=r.choiceInput("Separator",f[0],f),b=()=>{v.value!==l.r2.SEPARATOR?a()(y.root).hide():a()(y.root).show()};let v=r.choiceInput("Convert to",g[0],g,b);b(),v.onChanged((()=>{b()})),null==h&&(h=r.dialog("Convert Sequence Notation").add(r.div([d,m.root,v.root,y.root])).onOK((async()=>{const e=v.value,s=y.value??void 0;await async function(e,t,s){const n=c.Cn.getOrCreate(e).convert(t,s);e.dataFrame.columns.add(n);const r=await i.functions.call("Bio:detectMacromolecule",{col:n});return r&&(n.semType=r),await i.data.detectSemanticTypes(e.dataFrame),n}(t,e,s)})).show({x:350,y:100}),u.push(h.onClose.subscribe((e=>{u.forEach((e=>{e.unsubscribe()})),u=[],h=null}))))}},6032:(e,t,s)=>{"use strict";s.d(t,{Ns:()=>o});var n=s(4469),r=s(8467),i=s(8341);async function o(e=6e4){const t=await i.lp.getDockerContainer();await async function(e,t=6e4){let s=e,i=!1;for(let o=0;o<t/200;++o){if(null===s&&(s=await n.dapi.docker.dockerContainers.find(e.id)),a(s)){i=!0;break}switch(s.status){case"stopped":await n.dapi.docker.dockerContainers.run(s.id);break;case"pending change":case"changing":break;case"error":throw new Error("Docker container error state.")}s=null,await(0,r.gw)(200)}if(!i)throw new Error("Docker container start timeout.")}(t,e)}function a(e){return"checking"===e.status||"started"===e.status}},7572:(e,t,s)=>{"use strict";s.d(t,{A:()=>h});var n=s(4469),r=s(6584),i=s(2832),o=s(3776),a=s(2428),l=s(3348);async function c(){const e=a.A.getInstance();return(await o.t.getInstance(e)).getValidLibraryPaths()}class h{constructor(){this._monomerLib=new i.B({}),this.loadLibrariesPromise=Promise.resolve()}getBioLib(){return this._monomerLib}async loadLibraries(e=!1){return this.loadLibrariesPromise=this.loadLibrariesPromise.then((async()=>{try{const[t,s]=await Promise.all([c(),(0,r.nW)()]),n=t.filter((e=>{const t=!s.exclude.includes(e),n=0===s.explicit.length||s.explicit.includes(e);return t&&n})),o=await Promise.all(n.map((e=>this.readLibrary(r.BX,e).catch((t=>{const s=`Loading monomers from '${e}' error: ${t instanceof Error?t.message:t.toString()}`;return new i.B({},s)})))));this._monomerLib.updateLibs(o,e)}catch(e){const t=`Loading monomer libraries error: ${e instanceof Error?e.message:e.toString()}`;n.shell.warning(t);const s=e instanceof Error?e.stack:void 0;l._package.logger.error(t,void 0,s)}}))}async readLibrary(e,t){const s=a.A.getInstance(),n=await o.t.getInstance(s);return await n.loadLibraryFromFile(e,t)}async selectSpecifiedLibraries(e){const t=await this.getInvalidFileNames(e);if(t.length>0)throw new Error(`Cannot select libraries ${t}: no such library in the list`);const s=await(0,r.nW)();s.exclude=(await c()).filter((t=>!e.includes(t))),await(0,r.tW)(s)}async getInvalidFileNames(e){const t=await c();return e.filter((e=>!t.includes(e)))}static get instance(){return window.$monomerLibHelper||(window.$monomerLibHelper=new h),window.$monomerLibHelper}}},2428:(e,t,s)=>{"use strict";s.d(t,{A:()=>i});var n=s(701),r=s(442);class i{constructor(){this._libraryFilesUpdateSubject$=new n.BehaviorSubject([]),this._addLibraryFilesSubject$=new n.Subject,this._librarySelectionSubject$=new n.Subject}static getInstance(){return i._instance||(i._instance=new i),i._instance}getValidFilesPathList(){return this._libraryFilesUpdateSubject$.getValue()}async getValidLibraryPathsAsynchronously(){return new Promise((e=>{this._libraryFilesUpdateSubject$.pipe((0,r.skip)(1)).subscribe((t=>{e(t)}))}))}changeValidFilesPathList(e){this._libraryFilesUpdateSubject$.next(e)}get updateUIControlsRequested$(){return this._libraryFilesUpdateSubject$.pipe()}get updateValidLibraryFileListRequested$(){return this._libraryFilesUpdateSubject$.pipe()}get addLibraryFileRequested$(){return this._addLibraryFilesSubject$.pipe()}addLibraryFile(){this._addLibraryFilesSubject$.next()}get librarySelectionRequested$(){return this._librarySelectionSubject$}updateLibrarySelectionStatus(e,t){this._librarySelectionSubject$.next([e,t])}}},3776:(e,t,s)=>{"use strict";s.d(t,{t:()=>p});var n=s(4469),r=s(976),i=s(6584),o=s(2832),a=s(5128),l=s.n(a),c=s(3351),h=s.n(c);class u{constructor(e){this.helmMonomerSchema=e;const t=new(l())({allErrors:!0,strictTuples:!1});h()(t),this.validateMonomerSchema=t.compile(this.helmMonomerSchema)}validateFile(e,t){const s=this.parseJson(e);return null!==s&&(Array.isArray(s)?this.validateJsonContent(s,t):(console.warn("Bio: Monomer Library File Validator: Invalid JSON format: The file must contain an array of monomers."),!1))}parseJson(e){try{return JSON.parse(e)}catch(e){return console.error("Bio: Monomer Library File Validator: Invalid JSON format:",e),null}}validateJsonContent(e,t){let s=!0;for(const n of e)if(s=this.validateMonomerSchema(n),!s){console.warn(`Bio: Monomer Library File Validator:\nfile ${t}\n monomer violating JSON schema:`,n,"\nError reason: ",this.validateMonomerSchema.errors,`\nThere may be other errors in ${t} since the validation is stopped after the first error.`," Please, verify that the monomer library file satisfies the JSON schema");break}return s}}var d=s(7572);class p{constructor(e,t){this.libraryFileValidator=e,this.libraryEventManager=t,this.libraryEventManager.updateValidLibraryFileListRequested$.subscribe((async()=>{await this.updateValidLibraryList()}))}static async getInstance(e){return p.instancePromise||(p.instancePromise=(async()=>{const t=await n.dapi.files.readAsText("System:AppData/Bio/tests/libraries/HELMmonomerSchema.json"),s=JSON.parse(t),r=new u(s);return new p(r,e)})()),p.instancePromise}async addLibraryFile(e,t){try{if(await this.libraryFileExists(t))return void n.shell.error(`File ${t} already exists`);await this.validateAgainstHELM(e,t),await n.dapi.files.writeAsText(i.BX+`${t}`,e),await this.updateValidLibraryList(),await n.dapi.files.exists(i.BX+`${t}`)?n.shell.info(`Added ${t} HELM library`):n.shell.error(`Failed to add ${t} library`)}catch(e){console.error(e),n.shell.error(`Failed to add ${t} library`)}}async deleteLibraryFile(e){try{await n.dapi.files.delete(i.BX+`${e}`),await this.updateValidLibraryList(),n.shell.info(`Deleted ${e} library`)}catch(t){console.error(t),await n.dapi.files.exists(i.BX+`${e}`)?n.shell.error(`Failed to delete ${e} library`):n.shell.warning(`File ${e} already deleted, refresh the list`)}}async loadLibraryFromFile(e,t){let s=[];const n=new r.FileSource(e),i=await n.readAsText(t);s=JSON.parse(i);const a={},l=[];return s.forEach((e=>{l.includes(e.polymerType)||(a[e.polymerType]={},l.push(e.polymerType)),a[e.polymerType][e.symbol]=e})),new o.B(a)}getValidLibraryPaths(){return this.libraryEventManager.getValidFilesPathList()}async getValidLibraryPathsAsynchronously(){return await this.libraryEventManager.getValidLibraryPathsAsynchronously()}async libraryFileExists(e){return await n.dapi.files.exists(i.BX+`${e}`)}async updateValidLibraryList(){const e=[],t=await this.getFilePathsAtDefaultLocation();if(!this.fileListHasChanged(t))return;for(const s of t){if(!s.endsWith(".json")){e.push(s);continue}const t=await n.dapi.files.readAsText(i.BX+`${s}`);this.isValidHELMLibrary(t,s)||e.push(s)}const s=t.filter((t=>!e.includes(t)));if(this.fileListHasChanged(s)&&(this.libraryEventManager.changeValidFilesPathList(s),d.A.instance.loadLibraries(!0)),s.some((e=>!e.endsWith(".json")))&&console.warn(`Wrong validation: ${s}`),e.length>0){const t=`Invalid monomer library files in ${i.BX}, consider fixing or removing them: ${e.join(", ")}`;console.warn(t)}}fileListHasChanged(e){const t=this.libraryEventManager.getValidFilesPathList();return e.length!==t.length||e.some(((e,s)=>e!==t[s]))}async validateAgainstHELM(e,t){if(!this.isValidHELMLibrary(e,t))throw new Error(`File ${t} does not satisfy HELM standard`)}isValidHELMLibrary(e,t){return this.libraryFileValidator.validateFile(e,t)}async getFilePathsAtDefaultLocation(){const e=(await n.dapi.files.list(i.BX)).map((e=>e.fullPath)),t=[];for(const s of e)await n.dapi.files.exists(s)&&t.push(s);return t.map((e=>e.substring(i.BX.length)))}}},2832:(e,t,s)=>{"use strict";s.d(t,{B:()=>i});var n=s(701),r=s(922);class i{constructor(e,t){this._monomers={},this._onChanged=new n.Subject,this._monomers=e,this.error=t}getMonomer(e,t){return e in this._monomers&&t in this._monomers[e]?this._monomers[e][t]:null}getPolymerTypes(){return Object.keys(this._monomers)}getMonomerMolsByPolymerType(e){const t={};return Object.keys(this._monomers[e]??{}).forEach((s=>{t[s]=this._monomers[e][s].molfile})),t}getMonomerSymbolsByType(e){return Object.keys(this._monomers[e])}getMonomerSymbolsByRGroup(e,t,s){let n=this.getMonomerSymbolsByType(t).map((e=>this.getMonomer(t,e)));return n=n.filter((e=>null!==e)),0===n.length?[]:(n=n.filter((t=>{if(!t?.rgroups)return!1;let s=t?.rgroups.length>=e;return r._.getInstance(t.molfile).atomTypes.map(((e,t)=>"R#"===e?t:-1)).filter((e=>-1!==e)),s&&(s=!0),s})),n.map((e=>e?.symbol)))}get onChanged(){return this._onChanged}_updateInt(e){const t=e.getPolymerTypes(),s=this.getPolymerTypes();t.forEach((t=>{s.includes(t)||(this._monomers[t]={}),e.getMonomerSymbolsByType(t).forEach((s=>{this._monomers[t][s]=e.getMonomer(t,s)}))}))}update(e){this._updateInt(e),this._onChanged.next()}updateLibs(e,t=!1){t&&(this._monomers={});for(const t of e)t.error||this._updateInt(t);this._onChanged.next()}clear(){this._monomers={},this._onChanged.next()}}},525:(e,t,s)=>{"use strict";s.d(t,{K:()=>$});var n=s(4469),r=s(976),i=s(3870),o=s(8447),a=s(499),l=s(6098),c=s(8341),h=s(2568),u=s(3553),d=s(6032),p=s(3348),m=s(3379),f=s.n(m),g=s(7795),y=s.n(g),b=s(569),v=s.n(b),w=s(3565),C=s.n(w),S=s(9216),x=s.n(S),A=s(4589),E=s.n(A),_=s(9564),T={};T.styleTagTransform=E(),T.setAttributes=C(),T.insert=v().bind(null,"head"),T.domAPI=y(),T.insertStyleElement=x(),f()(_.Z,T),_.Z&&_.Z.locals&&_.Z.locals;class I extends Error{constructor(e,t){super(e,t)}}async function $(e={}){return new Promise((async(t,s)=>{var o,a,l;e.clustersCol??(e.clustersCol=null),e.pepsea??(e.pepsea={}),(o=e.pepsea).method??(o.method=u.jB.pepsea.method),(a=e.pepsea).gapOpen??(a.gapOpen=u.jB.pepsea.gapOpen),(l=e.pepsea).gapExtend??(l.gapExtend=u.jB.pepsea.gapExtend);const h=e.col?.dataFrame??n.shell.t,d=e.col??h.columns.bySemType(r.SEMTYPE.MACROMOLECULE);if(null==d){const e="MSAError: dataset doesn't conain any Macromolecule column";n.shell.warning(e),s(new I(e))}const p=i.choiceInput("Method",e.pepsea.method,c.Jy);p.setTooltip("Alignment method");const m=i.floatInput("Terminal gap",e?.kalign?.terminalGap??null);m.setTooltip("Penalty for opening a gap at the beginning or end of the sequence");const f=i.p(`Kalign version: ${u.WY}`,"kalign-version"),g=i.floatInput("Gap open",e.pepsea.gapOpen);g.setTooltip("Gap opening penalty at group-to-group alignment");const y=i.floatInput("Gap extend",e.pepsea.gapExtend);y.setTooltip("Gap extension penalty to skip the alignment");const b=i.inputs([g,y,m]),v=i.button("Alignment parameters",(()=>{b.hidden=!b.hidden}),"Adjust alignment parameters such as penalties for opening and extending gaps");v.classList.add("msa-params-button"),b.hidden=!0,v.prepend(i.icons.settings((()=>null)));const w=[p.root.style],C=[m.root.style,f.style];let S;const x=i.columnInput("Sequence",h,d,(async()=>{S=await N(x.value,h,w,C,p,A,g,y,m)}),{filter:e=>e.semType===r.SEMTYPE.MACROMOLECULE});x.setTooltip("Sequences column to use for alignment");const A=i.columnInput("Clusters",h,e.clustersCol);if(A.nullable=!0,x.fireChanged(),e.col)return S=await N(e.col,h,w,C,p,A,g,y,m),void await M(x,h,S,t,s);i.dialog("MSA").add(x).add(A).add(p).add(b).add(v).add(f).onOK((async()=>{await M(x,h,S,t,s)})).show()}))}async function M(e,t,s,i,o){let a=null;const l=r.TaskBarProgressIndicator.create("Analyze for MSA ...");try{if(e.fireChanged(),e.value.semType!==r.SEMTYPE.MACROMOLECULE)throw new Error("Chosen column has to be of Macromolecule semantic type");if(void 0===s)throw new Error("Invalid column format");if(a=await s(),null==a)return o("PepSeA container has not started");t.columns.add(a),await n.data.detectSemanticTypes(t),i(a)}catch(e){const t=e instanceof Error?e.message:e.toString();n.shell.error(t),o(e)}finally{l.close()}}async function N(e,t,s,i,m,f,g,y,b){try{if(e.semType!==r.SEMTYPE.MACROMOLECULE)return;const n=t.columns.getUnusedName(`msa(${e.name})`);if((0,h.n)(e,e.name,[o.r2.FASTA,o.r2.SEPARATOR],["DNA","RNA","PT"],!1)){L(s,i,"kalign"),g.value=null,y.value=null,b.value=null;const t=a.Cn.getOrCreate(e),r=t.isFasta()?e:t.convert(o.r2.FASTA);return async()=>await(0,l.U)(r,!1,n,f.value)}if((0,h.n)(e,e.name,[o.r2.HELM],[],!1))return L(s,i,"pepsea"),g.value??(g.value=u.jB.pepsea.gapOpen),y.value??(y.value=u.jB.pepsea.gapExtend),async()=>(await(0,d.Ns)(),(0,c.f3)(e,n,m.value,g.value,y.value,f.value));if((0,h.n)(e,e.name,[o.r2.SEPARATOR],["UN"],!1)){const t=a.Cn.getOrCreate(e).convert(o.r2.HELM);return L(s,i,"pepsea"),g.value??(g.value=u.jB.pepsea.gapOpen),y.value??(y.value=u.jB.pepsea.gapExtend),async()=>(await(0,d.Ns)(),(0,c.f3)(t,n,m.value,g.value,y.value,f.value))}return g.value=null,y.value=null,b.value=null,void L(s,i,"kalign")}catch(e){const t=e instanceof Error?e.message:e.toString();n.shell.error(t),p._package.logger.error(t)}}function L(e,t,s){if("kalign"===s){for(const t of e)t.display="none";for(const e of t)e.removeProperty("display")}else{for(const e of t)e.display="none";for(const t of e)t.removeProperty("display")}}},6098:(e,t,s)=>{"use strict";s.d(t,{U:()=>O});var n=s(976),r=s(5226);const i=Symbol("Comlink.proxy"),o=Symbol("Comlink.endpoint"),a=Symbol("Comlink.releaseProxy"),l=Symbol("Comlink.thrown"),c=e=>"object"==typeof e&&null!==e||"function"==typeof e,h=new Map([["proxy",{canHandle:e=>c(e)&&e[i],serialize(e){const{port1:t,port2:s}=new MessageChannel;return u(e,t),[s,[s]]},deserialize:e=>(e.start(),p(e))}],["throw",{canHandle:e=>c(e)&&l in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){throw e.isError?Object.assign(new Error(e.value.message),e.value):e.value}}]]);function u(e,t=self){t.addEventListener("message",(function s(n){if(!n||!n.data)return;const{id:r,type:o,path:a}=Object.assign({path:[]},n.data),c=(n.data.argumentList||[]).map(w);let h;try{const t=a.slice(0,-1).reduce(((e,t)=>e[t]),e),s=a.reduce(((e,t)=>e[t]),e);switch(o){case"GET":h=s;break;case"SET":t[a.slice(-1)[0]]=w(n.data.value),h=!0;break;case"APPLY":h=s.apply(t,c);break;case"CONSTRUCT":h=function(e){return Object.assign(e,{[i]:!0})}(new s(...c));break;case"ENDPOINT":{const{port1:t,port2:s}=new MessageChannel;u(e,s),h=function(e,t){return b.set(e,t),e}(t,[t])}break;case"RELEASE":h=void 0;break;default:return}}catch(e){h={value:e,[l]:0}}Promise.resolve(h).catch((e=>({value:e,[l]:0}))).then((e=>{const[n,i]=v(e);t.postMessage(Object.assign(Object.assign({},n),{id:r}),i),"RELEASE"===o&&(t.removeEventListener("message",s),d(t))}))})),t.start&&t.start()}function d(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function p(e,t){return f(e,[],t)}function m(e){if(e)throw new Error("Proxy has been released and is not useable")}function f(e,t=[],s=function(){}){let n=!1;const r=new Proxy(s,{get(s,i){if(m(n),i===a)return()=>C(e,{type:"RELEASE",path:t.map((e=>e.toString()))}).then((()=>{d(e),n=!0}));if("then"===i){if(0===t.length)return{then:()=>r};const s=C(e,{type:"GET",path:t.map((e=>e.toString()))}).then(w);return s.then.bind(s)}return f(e,[...t,i])},set(s,r,i){m(n);const[o,a]=v(i);return C(e,{type:"SET",path:[...t,r].map((e=>e.toString())),value:o},a).then(w)},apply(s,r,i){m(n);const a=t[t.length-1];if(a===o)return C(e,{type:"ENDPOINT"}).then(w);if("bind"===a)return f(e,t.slice(0,-1));const[l,c]=y(i);return C(e,{type:"APPLY",path:t.map((e=>e.toString())),argumentList:l},c).then(w)},construct(s,r){m(n);const[i,o]=y(r);return C(e,{type:"CONSTRUCT",path:t.map((e=>e.toString())),argumentList:i},o).then(w)}});return r}function g(e){return Array.prototype.concat.apply([],e)}function y(e){const t=e.map(v);return[t.map((e=>e[0])),g(t.map((e=>e[1])))]}const b=new WeakMap;function v(e){for(const[t,s]of h)if(s.canHandle(e)){const[n,r]=s.serialize(e);return[{type:"HANDLER",name:t,value:n},r]}return[{type:"RAW",value:e},b.get(e)||[]]}function w(e){switch(e.type){case"HANDLER":return h.get(e.name).deserialize(e.value);case"RAW":return e.value}}function C(e,t,s){return new Promise((n=>{const r=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");e.addEventListener("message",(function t(s){!s.data||!s.data.id||s.data.id!==r||(e.removeEventListener("message",t),n(s.data))})),e.start&&e.start(),e.postMessage(Object.assign({id:r},t),s)}))}const S="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0ICQ9U3ltYm9sKCJDb21saW5rLnByb3h5IiksQT1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxSPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSx5PVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxfPWU9PnR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx8fHR5cGVvZiBlPT0iZnVuY3Rpb24iLEw9e2NhbkhhbmRsZTplPT5fKGUpJiZlWyRdLHNlcmlhbGl6ZShlKXtjb25zdHtwb3J0MTpyLHBvcnQyOml9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gdyhlLHIpLFtpLFtpXV19LGRlc2VyaWFsaXplKGUpe3JldHVybiBlLnN0YXJ0KCksQyhlKX19LE89e2NhbkhhbmRsZTplPT5fKGUpJiZ5IGluIGUsc2VyaWFsaXplKHt2YWx1ZTplfSl7bGV0IHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9yPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOmUubWVzc2FnZSxuYW1lOmUubmFtZSxzdGFjazplLnN0YWNrfX06cj17aXNFcnJvcjohMSx2YWx1ZTplfSxbcixbXV19LGRlc2VyaWFsaXplKGUpe3Rocm93IGUuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihlLnZhbHVlLm1lc3NhZ2UpLGUudmFsdWUpOmUudmFsdWV9fSxFPW5ldyBNYXAoW1sicHJveHkiLExdLFsidGhyb3ciLE9dXSk7ZnVuY3Rpb24gdyhlLHI9c2VsZil7ci5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKHMpe2lmKCFzfHwhcy5kYXRhKXJldHVybjtjb25zdHtpZDpvLHR5cGU6YSxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LHMuZGF0YSksdT0ocy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChtKTtsZXQgbDt0cnl7Y29uc3QgYz1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZCxoKT0+ZFtoXSxlKSxmPW4ucmVkdWNlKChkLGgpPT5kW2hdLGUpO3N3aXRjaChhKXtjYXNlIkdFVCI6bD1mO2JyZWFrO2Nhc2UiU0VUIjpjW24uc2xpY2UoLTEpWzBdXT1tKHMuZGF0YS52YWx1ZSksbD0hMDticmVhaztjYXNlIkFQUExZIjpsPWYuYXBwbHkoYyx1KTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2NvbnN0IGQ9bmV3IGYoLi4udSk7bD16KGQpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntjb25zdHtwb3J0MTpkLHBvcnQyOmh9PW5ldyBNZXNzYWdlQ2hhbm5lbDt3KGUsaCksbD1OKGQsW2RdKX1icmVhaztjYXNlIlJFTEVBU0UiOmw9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChjKXtsPXt2YWx1ZTpjLFt5XTowfX1Qcm9taXNlLnJlc29sdmUobCkuY2F0Y2goYz0+KHt2YWx1ZTpjLFt5XTowfSkpLnRoZW4oYz0+e2NvbnN0W2YsZF09UyhjKTtyLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxmKSx7aWQ6b30pLGQpLGE9PT0iUkVMRUFTRSImJihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLEYocikpfSl9KSxyLnN0YXJ0JiZyLnN0YXJ0KCl9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBGKGUpe1QoZSkmJmUuY2xvc2UoKX1mdW5jdGlvbiBDKGUscil7cmV0dXJuIGIoZSxbXSxyKX1mdW5jdGlvbiBwKGUpe2lmKGUpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBiKGUscj1bXSxpPWZ1bmN0aW9uKCl7fSl7bGV0IHM9ITE7Y29uc3Qgbz1uZXcgUHJveHkoaSx7Z2V0KGEsbil7aWYocChzKSxuPT09UilyZXR1cm4oKT0+ZyhlLHt0eXBlOiJSRUxFQVNFIixwYXRoOnIubWFwKHU9PnUudG9TdHJpbmcoKSl9KS50aGVuKCgpPT57RihlKSxzPSEwfSk7aWYobj09PSJ0aGVuIil7aWYoci5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5vfTtjb25zdCB1PWcoZSx7dHlwZToiR0VUIixwYXRoOnIubWFwKGw9PmwudG9TdHJpbmcoKSl9KS50aGVuKG0pO3JldHVybiB1LnRoZW4uYmluZCh1KX1yZXR1cm4gYihlLFsuLi5yLG5dKX0sc2V0KGEsbix1KXtwKHMpO2NvbnN0W2wsY109Uyh1KTtyZXR1cm4gZyhlLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnIsbl0ubWFwKGY9PmYudG9TdHJpbmcoKSksdmFsdWU6bH0sYykudGhlbihtKX0sYXBwbHkoYSxuLHUpe3Aocyk7Y29uc3QgbD1yW3IubGVuZ3RoLTFdO2lmKGw9PT1BKXJldHVybiBnKGUse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4obSk7aWYobD09PSJiaW5kIilyZXR1cm4gYihlLHIuc2xpY2UoMCwtMSkpO2NvbnN0W2MsZl09TSh1KTtyZXR1cm4gZyhlLHt0eXBlOiJBUFBMWSIscGF0aDpyLm1hcChkPT5kLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpjfSxmKS50aGVuKG0pfSxjb25zdHJ1Y3QoYSxuKXtwKHMpO2NvbnN0W3UsbF09TShuKTtyZXR1cm4gZyhlLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ci5tYXAoYz0+Yy50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6dX0sbCkudGhlbihtKX19KTtyZXR1cm4gb31mdW5jdGlvbiBEKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpfWZ1bmN0aW9uIE0oZSl7Y29uc3Qgcj1lLm1hcChTKTtyZXR1cm5bci5tYXAoaT0+aVswXSksRChyLm1hcChpPT5pWzFdKSldfWNvbnN0IFA9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTihlLHIpe3JldHVybiBQLnNldChlLHIpLGV9ZnVuY3Rpb24geihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHtbJF06ITB9KX1mdW5jdGlvbiBTKGUpe2Zvcihjb25zdFtyLGldb2YgRSlpZihpLmNhbkhhbmRsZShlKSl7Y29uc3RbcyxvXT1pLnNlcmlhbGl6ZShlKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6cix2YWx1ZTpzfSxvXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6ZX0sUC5nZXQoZSl8fFtdXX1mdW5jdGlvbiBtKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEUuZ2V0KGUubmFtZSkuZGVzZXJpYWxpemUoZS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBlLnZhbHVlfX1mdW5jdGlvbiBnKGUscixpKXtyZXR1cm4gbmV3IFByb21pc2Uocz0+e2NvbnN0IG89VSgpO2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gYShuKXshbi5kYXRhfHwhbi5kYXRhLmlkfHxuLmRhdGEuaWQhPT1vfHwoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixhKSxzKG4uZGF0YSkpfSksZS5zdGFydCYmZS5zdGFydCgpLGUucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6b30sciksaSl9KX1mdW5jdGlvbiBVKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1jb25zdCBXPWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpLHg9ImVhZ2VyIixrPSJsYXp5IixqPXtzc3c6WyJzaW1kIl0sbWluaW1hcDI6WyJzaW1kIl19LHQ9e3Rvb2xzOltdLGNvbmZpZzp7fSxmaWxlczpbXSxiYXNlOnt9LGZzOnt9LGFzeW5jIGluaXQoKXtpZih0LnRvb2xzLmxlbmd0aD09PTApdGhyb3ciRXhwZWN0aW5nIGF0IGxlYXN0IDEgdG9vbC4iO2lmKG5ldyBTZXQodC50b29scy5tYXAocj0+YCR7ci50b29sfS8ke3IucHJvZ3JhbXx8ci50b29sfWApKS5zaXplIT09dC50b29scy5sZW5ndGgpdGhyb3ciRm91bmQgZHVwbGljYXRlIHRvb2xzOyBjYW4gb25seSBoYXZlIGVhY2ggdG9vbC9wcm9ncmFtIGNvbWJpbmF0aW9uIGF0IG1vc3Qgb25jZS4iO2lmKHQuYmFzZT10LnRvb2xzLmZpbmQocj0+ci5yZWluaXQhPT0hMCksIXQuYmFzZSl0aHJvdyJDb3VsZCBub3QgZmluZCBhIHRvb2wgd2l0aCBgcmVpbml0OiBmYWxzZWAgdG8gdXNlIGFzIHRoZSBiYXNlIG1vZHVsZS4gVG8gZml4IHRoaXMgaXNzdWUsIGluY2x1ZGUgdGhlIHRvb2wgYGJhc2UvMS4wLjBgIHdoZW4gaW5pdGlhbGl6aW5nIEFpb2xpLiI7cmV0dXJuIHQuYmFzZS5pc0Jhc2VNb2R1bGU9ITAsYXdhaXQgdGhpcy5fc2V0dXAodC5iYXNlKSxhd2FpdCB0aGlzLl9pbml0TW9kdWxlcygpLHQuX2xvZygiUmVhZHkiKSwhMH0sYXN5bmMgX2luaXRNb2R1bGVzKCl7YXdhaXQgUHJvbWlzZS5hbGwodC50b29scy5tYXAodGhpcy5fc2V0dXApKSxhd2FpdCB0aGlzLl9zZXR1cEZTKCl9LG1vdW50KGU9W10pe2NvbnN0IHI9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyRGF0YX1gLGk9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyTW91bnRlZH1gO2xldCBzPVtdLG89W10sYT1bXTshQXJyYXkuaXNBcnJheShlKSYmIShlIGluc3RhbmNlb2YgRmlsZUxpc3QpJiYoZT1bZV0pLHQuX2xvZyhgTW91bnRpbmcgJHtlLmxlbmd0aH0gZmlsZXNgKTtmb3IobGV0IG4gb2YgZSl7aWYobiBpbnN0YW5jZW9mIEZpbGV8fChuPT1udWxsP3ZvaWQgMDpuLmRhdGEpaW5zdGFuY2VvZiBCbG9iJiZuLm5hbWV8fHR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmbi5uYW1lKXR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmKG4uZGF0YT1uZXcgQmxvYihbbi5kYXRhXSx7dHlwZToidGV4dC9wbGFpbiJ9KSkscy5wdXNoKG4pO2Vsc2UgaWYobi5uYW1lJiZuLnVybClvLnB1c2gobik7ZWxzZSBpZih0eXBlb2Ygbj09InN0cmluZyImJm4uc3RhcnRzV2l0aCgiaHR0cCIpKW49e3VybDpuLG5hbWU6bi5zcGxpdCgiLy8iKS5wb3AoKS5yZXBsYWNlKC9cLy9nLCItIil9LG8ucHVzaChuKTtlbHNlIHRocm93J0Nhbm5vdCBtb3VudCBmaWxlKHMpIHNwZWNpZmllZC4gTXVzdCBiZSBhIEZpbGUsIEJsb2IsIGEgVVJMIHN0cmluZywgb3IgeyBuYW1lOiAiZmlsZS50eHQiLCBkYXRhOiAic3RyaW5nIiB9Lic7YS5wdXNoKG4ubmFtZSl9dHJ5e3QuZnMudW5tb3VudChpKX1jYXRjaHt9Zm9yKGxldCBuIG9mIG8pdC5mcy5jcmVhdGVMYXp5RmlsZShyLG4ubmFtZSxuLnVybCwhMCwhMCk7cmV0dXJuIHQuZmlsZXM9dC5maWxlcy5jb25jYXQocyksdC5iYXNlLm1vZHVsZS5GUy5tb3VudCh0LmJhc2UubW9kdWxlLldPUktFUkZTLHtmaWxlczp0LmZpbGVzLmZpbHRlcihuPT5uIGluc3RhbmNlb2YgRmlsZSksYmxvYnM6dC5maWxlcy5maWx0ZXIobj0+KG49PW51bGw/dm9pZCAwOm4uZGF0YSlpbnN0YW5jZW9mIEJsb2IpfSxpKSxzLm1hcChuPT57Y29uc3QgdT1gJHtpfS8ke24ubmFtZX1gLGw9YCR7cn0vJHtuLm5hbWV9YDt0cnl7dC5mcy51bmxpbmsobCl9Y2F0Y2h7fXQuX2xvZyhgQ3JlYXRpbmcgc3ltbGluazogJHtsfSAtLT4gJHt1fWApLHQuZnMuc3ltbGluayh1LGwpfSksYS5tYXAobj0+YCR7cn0vJHtufWApfSxhc3luYyBleGVjKGUscj1udWxsKXtpZih0Ll9sb2coYEV4ZWN1dGluZyAlYyR7ZX0lYyBhcmdzPSR7cn1gLCJjb2xvcjpkYXJrYmx1ZTsgZm9udC13ZWlnaHQ6Ym9sZCIsIiIpLCFlKXRocm93IkV4cGVjdGluZyBhIGNvbW1hbmQiO2xldCBpPWU7cj09bnVsbCYmKHI9ZS5zcGxpdCgiICIpLGk9ci5zaGlmdCgpKTtjb25zdCBzPXQudG9vbHMuZmluZChhPT57dmFyIHU7bGV0IG49aTtyZXR1cm4oKHU9YT09bnVsbD92b2lkIDA6YS5mZWF0dXJlcyk9PW51bGw/dm9pZCAwOnUuc2ltZCk9PT0hMCYmKG49YCR7bn0tc2ltZGApLGEucHJvZ3JhbT09bn0pO2lmKHM9PW51bGwpdGhyb3dgUHJvZ3JhbSAke2l9IG5vdCBmb3VuZC5gO3Muc3Rkb3V0PSIiLHMuc3RkZXJyPSIiLHMubG9hZGluZz09ayYmKHMubG9hZGluZz14LGF3YWl0IHRoaXMuX2luaXRNb2R1bGVzKCkpO3RyeXtzLm1vZHVsZS5jYWxsTWFpbihyKX1jYXRjaChhKXtjb25zb2xlLmVycm9yKGEpfXRyeXtzLm1vZHVsZS5GUy5jbG9zZShzLm1vZHVsZS5GUy5zdHJlYW1zWzFdKSxzLm1vZHVsZS5GUy5jbG9zZShzLm1vZHVsZS5GUy5zdHJlYW1zWzJdKX1jYXRjaHt9cy5tb2R1bGUuRlMuc3RyZWFtc1sxXT1zLm1vZHVsZS5GUy5vcGVuKCIvZGV2L3N0ZG91dCIsInciKSxzLm1vZHVsZS5GUy5zdHJlYW1zWzJdPXMubW9kdWxlLkZTLm9wZW4oIi9kZXYvc3RkZXJyIiwidyIpO2xldCBvPXtzdGRvdXQ6cy5zdGRvdXQsc3RkZXJyOnMuc3RkZXJyfTtpZih0LmNvbmZpZy5wcmludEludGVybGVhdmVkJiYobz1zLnN0ZG91dCkscy5yZWluaXQ9PT0hMCl7Y29uc3QgYT10LmJhc2UubW9kdWxlLkZTLmN3ZCgpO09iamVjdC5hc3NpZ24ocyxzLmNvbmZpZykscy5yZWFkeT0hMSxhd2FpdCB0aGlzLmluaXQoKSxzLmlzQmFzZU1vZHVsZSYmdGhpcy5tb3VudCgpLHRoaXMuY2QoYSl9cmV0dXJuIG99LGNhdChlKXtyZXR1cm4gdC5fZmlsZW9wKCJjYXQiLGUpfSxscyhlKXtyZXR1cm4gdC5fZmlsZW9wKCJscyIsZSl9LGRvd25sb2FkKGUpe3JldHVybiB0Ll9maWxlb3AoImRvd25sb2FkIixlKX0scHdkKCl7cmV0dXJuIHQuZnMuY3dkKCl9LGNkKGUpe2ZvcihsZXQgciBvZiB0LnRvb2xzKSFyLm1vZHVsZXx8ci5tb2R1bGUuRlMuY2hkaXIoZSl9LG1rZGlyKGUpe3JldHVybiB0LmZzLm1rZGlyKGUpLCEwfSxyZWFkKHtwYXRoOmUsbGVuZ3RoOnIsZmxhZzppPSJyIixvZmZzZXQ6cz0wLHBvc2l0aW9uOm89MH0pe2NvbnN0IGE9dC5mcy5vcGVuKGUsaSksbj1uZXcgVWludDhBcnJheShyKTtyZXR1cm4gdC5mcy5yZWFkKGEsbixzLHIsbyksdC5mcy5jbG9zZShhKSxufSx3cml0ZSh7cGF0aDplLGJ1ZmZlcjpyLGZsYWc6aT0idysiLG9mZnNldDpzPTAscG9zaXRpb246bz0wfSl7Y29uc3QgYT10LmZzLm9wZW4oZSxpKTt0LmZzLndyaXRlKGEscixzLHIubGVuZ3RoLG8pLHQuZnMuY2xvc2UoYSl9LF9zdGRpblR4dDoiIixfc3RkaW5QdHI6MCxnZXQgc3RkaW4oKXtyZXR1cm4gdC5fc3RkaW5UeHR9LHNldCBzdGRpbihlPSIiKXt0Ll9sb2coYFNldHRpbmcgc3RkaW4gdG8gJWMke2V9JWNgLCJjb2xvcjpkYXJrYmx1ZSIsIiIpLHQuX3N0ZGluVHh0PWUsdC5fc3RkaW5QdHI9MH0sYXN5bmMgX3NldHVwKGUpe2lmKGUucmVhZHkpcmV0dXJuO2lmKHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gKGJhc2UgPSAke2UuaXNCYXNlTW9kdWxlPT09ITB9KS4uLmApLGUuY29uZmlnPU9iamVjdC5hc3NpZ24oe30sZSksZS51cmxQcmVmaXh8fChlLnVybFByZWZpeD1gJHt0LmNvbmZpZy51cmxDRE59LyR7ZS50b29sfS8ke2UudmVyc2lvbn1gKSxlLnByb2dyYW18fChlLnByb2dyYW09ZS50b29sKSxlLmZlYXR1cmVzfHwoZS5mZWF0dXJlcz17fSwoaltlLnByb2dyYW1dfHxbXSkuaW5jbHVkZXMoInNpbWQiKSYmKGF3YWl0IFcoKT8oZS5wcm9ncmFtKz0iLXNpbWQiLGUuZmVhdHVyZXMuc2ltZD0hMCk6dC5fbG9nKGBXZWJBc3NlbWJseSBTSU1EIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyOyB3aWxsIGxvYWQgbm9uLVNJTUQgdmVyc2lvbiBvZiAke2UucHJvZ3JhbX0uYCkpKSxlLmlzQmFzZU1vZHVsZSYmKGUubG9hZGluZz14KSxlLmxvYWRpbmc9PT1rKXt0Ll9sb2coYFdpbGwgbGF6eS1sb2FkICR7ZS50b29sfTsgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24uYCk7cmV0dXJufXNlbGYuaW1wb3J0U2NyaXB0cyhgJHtlLnVybFByZWZpeH0vJHtlLnByb2dyYW19LmpzYCksZS5tb2R1bGU9YXdhaXQgTW9kdWxlKHt0aGlzUHJvZ3JhbTplLnByb2dyYW0sbG9jYXRlRmlsZTooaSxzKT0+YCR7ZS51cmxQcmVmaXh9LyR7aX1gLHN0ZGluOigpPT50Ll9zdGRpblB0cjx0LnN0ZGluLmxlbmd0aD90LnN0ZGluLmNoYXJDb2RlQXQodC5fc3RkaW5QdHIrKyk6KHQuc3RkaW49IiIsbnVsbCkscHJpbnQ6aT0+ZS5zdGRvdXQrPWAke2l9CmAscHJpbnRFcnI6dC5jb25maWcucHJpbnRJbnRlcmxlYXZlZD9pPT5lLnN0ZG91dCs9YCR7aX0KYDppPT5lLnN0ZGVycis9YCR7aX0KYH0pO2NvbnN0IHI9ZS5tb2R1bGUuRlM7ZS5pc0Jhc2VNb2R1bGU/KHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gd2l0aCBiYXNlIG1vZHVsZSBmaWxlc3lzdGVtLi4uYCksci5ta2Rpcih0LmNvbmZpZy5kaXJTaGFyZWQsNTExKSxyLm1rZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJEYXRhfWAsNTExKSxyLm1rZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJNb3VudGVkfWAsNTExKSxyLmNoZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJEYXRhfWApLHQuZnM9cik6KHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gd2l0aCBmaWxlc3lzdGVtLi4uYCksci5ta2Rpcih0LmNvbmZpZy5kaXJTaGFyZWQpLHIubW91bnQoZS5tb2R1bGUuUFJPWFlGUyx7cm9vdDp0LmNvbmZpZy5kaXJTaGFyZWQsZnM6dC5mc30sdC5jb25maWcuZGlyU2hhcmVkKSxyLmNoZGlyKHQuZnMuY3dkKCkpKSxlLnN0ZG91dD0iIixlLnN0ZGVycj0iIixlLnJlYWR5PSEwfSxhc3luYyBfc2V0dXBGUygpe2NvbnN0IGU9dC5mcztmb3IobGV0IHIgb2YgdC50b29scyl7aWYoIXIucmVhZHkpY29udGludWU7Y29uc3QgaT1yLm1vZHVsZS5GUyxzPWAvJHtyLnRvb2x9YCxvPWAke3QuY29uZmlnLmRpclNoYXJlZH0ke3N9YDshaS5hbmFseXplUGF0aChzKS5leGlzdHN8fGUuYW5hbHl6ZVBhdGgobykuZXhpc3RzfHwodC5fbG9nKGBNb3VudGluZyAke3N9IG9udG8gJHt0LmJhc2UudG9vbH0gZmlsZXN5c3RlbSBhdCAke299YCksZS5ta2RpcihvKSxlLm1vdW50KHQuYmFzZS5tb2R1bGUuUFJPWFlGUyx7cm9vdDpzLGZzOml9LG8pKX19LF9maWxlb3AoZSxyKXt0Ll9sb2coYFJ1bm5pbmcgJHtlfSAke3J9YCk7Y29uc3QgaT10LmZzLmFuYWx5emVQYXRoKHIpO2lmKCFpLmV4aXN0cylyZXR1cm4gdC5fbG9nKGBGaWxlICR7cn0gbm90IGZvdW5kLmApLCExO3N3aXRjaChlKXtjYXNlImNhdCI6cmV0dXJuIHQuZnMucmVhZEZpbGUocix7ZW5jb2Rpbmc6InV0ZjgifSk7Y2FzZSJscyI6cmV0dXJuIHQuZnMuaXNGaWxlKGkub2JqZWN0Lm1vZGUpP3QuZnMuc3RhdChyKTp0LmZzLnJlYWRkaXIocik7Y2FzZSJkb3dubG9hZCI6Y29uc3Qgcz1uZXcgQmxvYihbdGhpcy5jYXQocildKTtyZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChzKX1yZXR1cm4hMX0sX2xvZyhlKXtpZighdC5jb25maWcuZGVidWcpcmV0dXJuO2xldCByPVsuLi5hcmd1bWVudHNdO3Iuc2hpZnQoKSxjb25zb2xlLmxvZyhgJWNbV2ViV29ya2VyXSVjICR7ZX1gLCJmb250LXdlaWdodDpib2xkIiwiIiwuLi5yKX19O3codCl9KSgpOwo=",x=typeof window<"u"&&window.Blob&&new Blob([atob(S)],{type:"text/javascript;charset=utf-8"});function A(){const e=x&&(window.URL||window.webkitURL).createObjectURL(x);try{return e?new Worker(e):new Worker("data:application/javascript;base64,"+S)}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}const E={urlCDN:"https://biowasm.com/cdn/v3",urlCDNStg:"https://stg.biowasm.com/cdn/v3",dirShared:"/shared",dirMounted:"/mnt",dirData:"/data",printInterleaved:!0,callback:null,debug:!1,env:"prd"};class _{constructor(e,t={}){if(null==e)throw"Expecting array of tools as input to Aioli constructor.";return Array.isArray(e)||(e=[e]),t=Object.assign({},E,t),e=e.map(this._parseTool),"stg"===t.env&&(t.urlCDN=t.urlCDNStg),this.tools=e,this.config=t,null!=this.config.callback&&(this.callback=this.config.callback),delete this.config.callback,this.init()}async init(){const e=new A;this.callback&&(e.onmessage=e=>{"biowasm"===e.data.type&&this.callback(e.data.value)});const t=p(e);return t.tools=this.tools,t.config=this.config,await t.init(),t}_parseTool(e){if("string"!=typeof e)return e;const t=e.split("/");if(2!=t.length&&3!=t.length)throw"Expecting '<tool>/<version>' or '<tool>/<program>/<version>'";return{tool:t[0],program:3==t.length?t[1]:t[0],version:t[t.length-1]}}}var T=s(850);class I{static getAvailableScales(){return Object.entries(this.scales).map((([e,t])=>e))}static getScale(e){return(0,T.hu)(!(void 0===this.scales[e]),`Scale '${e}' was not found.`),this.scales[e]}}I.scales={WimleyWhite:{"-":0,A:.17,C:-.24,D:-.07,E:-.01,F:-1.13,G:.01,H:.17,I:-.31,K:.99,L:-.56,M:-.23,N:.42,P:.45,Q:.58,R:.81,S:.13,T:.14,V:.07,W:-1.85,Y:-.94},categorial:{"-":0,A:1,C:2,D:3,E:4,F:5,G:6,H:7,I:8,K:9,L:10,M:11,N:12,P:13,Q:14,R:15,S:16,T:17,V:18,W:19,Y:20}};class ${constructor(e="categorial"){this.aa2num=I.getScale(e),this.num2aa={},Object.entries(this.aa2num).forEach((([e,t])=>this.num2aa[t]=e))}static _truncateSequence(e){let t=0,s=e.length;const n=["NH2","COOH"];if(e.startsWith(n[0])){const s=n[0].length;(0,T.hu)("-"==e[s],`Wrong sequence format: ${n[0]} without following '-' in '${e}'.`),t=s}if(e.endsWith(n[1])){const t=n[1].length+1;(0,T.hu)("-"==e[s-t],`Wrong sequence format: ${n[1]} without '-' precending in '${e}'.`),s-=t}return e.substring(t,s)}static _dropDefises(e){return e.replace(/(-)([^-]+)/g,"$2")}static clean(e){return $._dropDefises($._truncateSequence(e))}encode(e){const t=e.length,s=new Array(t).fill(0);for(let n=0;n<t;++n){const t=e[n];(0,T.hu)(t in this.aa2num,`Unknown char '${t}' found in sequence '${e}'`),s[n]=this.encodeLettter(t)}return s}encodeLettter(e){return this.aa2num[e]}decode(e){let t="";for(let s=0;s<e.length;++s){const n=e[s];(0,T.hu)(n in this.num2aa,`Unknown code '${n}' found in vector '${e}'`),t+=this.num2aa[n]}return t}}var M=s(3553);const N="input.fa",L="result.fasta";function P(e){return e.reduce(((e,t,s)=>e+`>sample${s+1}\n${t}\n`),"")}async function O(e,t=!1,s="",i=null,o,a,l){let c=e.toList();t&&(c=c.map((e=>$.clean(e).replace(/\-/g,""))));const h=e.length;i??(i=n.Column.string("Clusters",h).init("0")),i.type!=n.COLUMN_TYPE.STRING&&(i=i.convertTo(n.TYPE.STRING)),i.compact();const u=i.categories,d=i.getRawData(),p=new Array(u.length),m=new Array(u.length);for(let e=0;e<h;++e){const t=d[e];(p[t]??(p[t]=[])).push(c[e]),(m[t]??(m[t]=[])).push(e)}const f=await new _(["base/1.0.0",{tool:"kalign",version:M.WY,reinit:!0}]),g=n.Column.string(s,h);for(let e=0;e<u.length;++e){const t=P(p[e]);await f.fs.writeFile(N,t);const s=`${void 0!==o?` --gpo ${o}`:""}${void 0!==a?` --gpe ${a}`:""}${void 0!==l?` --tgpe ${l}`:""}`,n=await f.exec(`kalign ${N} -f fasta -o ${L}${s}`);console.warn(n);const i=await f.cat(L);if(!i)throw new Error("kalign output no result");const c=new r.i(i).sequencesArray,h=m[e];for(let e=0;e<c.length;++e)g.set(h[e],c[e])}const y=e.getTag(n.TAGS.UNITS),b=e.getTag("alphabet");return g.setTag(n.TAGS.UNITS,y),g.setTag("aligned","SEQ.MSA"),g.setTag("alphabet",b),g.semType=n.SEMTYPE.MACROMOLECULE,g}},8341:(e,t,s)=>{"use strict";s.d(t,{Jy:()=>c,f3:()=>u,lp:()=>l});var n=s(4469),r=s(976),i=s(8447),o=s(3553),a=s(3348);const l=new class{constructor(){this.dcName="bio"}async getDockerContainer(){return await n.dapi.docker.dockerContainers.filter(this.dcName).first()}},c=["mafft --auto","mafft","linsi","ginsi","einsi","fftns","fftnsi","nwns","nwnsi"],h=["AlignedSeq","AlignedSubpeptide","HELM","ID","PolymerID"];async function u(e,t,s="ginsi",n=1.53,a=0,c=null,u){const p=await l.getDockerContainer();if("started"!==p.status&&"checking"!==p.status)throw new Error("PepSeA container has not started yet");const m=e.length;c??(c=r.Column.int("Clusters",m).init(0)),c.type!=r.COLUMN_TYPE.STRING&&(c=c.convertTo(r.TYPE.STRING));const f=c.categories,g=new Array(f.length);for(let t=0;t<m;++t){const s=c.get(t);if(""===s)continue;const n=f.indexOf(s),r=e.get(t);r&&(g[n]??(g[n]=[])).push({ID:t.toString(),HELM:r})}const y=new Array(m);for(const e of g){const t=(await d(p.id,e,s,n,a,u)).Alignment;for(const e of t)y[parseInt(e.ID)]=Object.entries(e).filter((e=>!h.includes(e[0]))).map((e=>"-"!==e[1]?e[1]:"")).join(o.rs.SEPARATOR)}const b=r.Column.fromStrings(t,y);return b.setTag(r.TAGS.UNITS,i.r2.SEPARATOR),b.setTag("separator",o.rs.SEPARATOR),b.setTag("aligned","SEQ.MSA"),b.setTag("alphabet","UN"),b.setTag(".alphabetIsMultichar","true"),b.semType=r.SEMTYPE.MACROMOLECULE,b}async function d(e,t,s,r,i,o){const l={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(t)},c=`/align?method=${s}&gap_open=${r}&gap_extend=${i}`;let h;if("fetchProxy"in n.dapi.docker.dockerContainers){const t=window.performance.now(),s=await n.dapi.docker.dockerContainers.fetchProxy(e,c,l),r=window.performance.now();a._package.logger.debug(`Bio: requestAlignedObjects() dockerContainers.fetchProxy(), ET: ${r-t} ms`);const i="application/json"===s.headers.get("content-type");if(!s.ok&&i){const e=await s.json(),t=e["pepsea-error"];if(t)throw new Error(`PepSeA error: ${t}`);const n=e["datagrok-error"];if(n)throw new Error(`Datagrok error: ${n}`);throw new Error(s.statusText)}if(!s.ok&&!i){const e=await s.text();throw new Error(`Error: ${e}`)}if(!i){const e=await s.text();throw new Error(`Error: PepSeA expected JSON response, got '${e}'.`)}h=await s.json()}else{const t=await n.dapi.docker.dockerContainers.request(e,c,l);if(!t)throw new Error("Empty response");h=JSON.parse(t);const s=h["pepsea-error"];if(s)throw new Error(`PepSeA error: ${s}`);const r=h["datagrok-error"];if(r)throw new Error(`Datagrok error: ${r}`)}if("pepsea-stderr"in h){const e=h["pepsea-stderr"];o?.warning(e)}return h}},9943:(e,t,s)=>{"use strict";s.d(t,{C2:()=>u});var n=s(976),r=s(3870),i=s(4469),o=s(6414),a=s.n(o),l=s(8447),c=s(499);const h=60;function u(){const e=i.shell.tv.grid,t=a().count(0).take(e.columns.length).map((t=>e.columns.byIndex(t))).filter((e=>!!e.column&&e.column.semType!==n.SEMTYPE.MACROMOLECULE)).toArray(),s=t.find((e=>-1!==e.name.toLowerCase().indexOf("id"))),o=s?[s.name]:[],u=r.multiChoiceInput("Seq id columns",o,t.map((e=>e.name))),p=a().count(0).take(e.columns.length).map((t=>e.columns.byIndex(t))).filter((e=>{const t=e.column;return!(!t||t.semType!==n.SEMTYPE.MACROMOLECULE)&&c.Cn.getOrCreate(t).isFasta()})).toArray(),m=p.length>0?p[0].name:[],f=r.choiceInput("Seq column",m,p.map((e=>e.name))),g=r.intInput("FASTA line width",h);r.dialog({title:"Save as FASTA"}).add(r.inputs([u,f,g])).onOK((()=>{const t=u.value?u.value.map((t=>e.columns.byName(t).column)):[],s=f.value?e.columns.byName(f.value).column:null,n=g.value??h;s||i.shell.warning("Seq column is mandatory to save as FASTA.");const r=function(e,t,s=h,n="\n"){const r=l.kB,i=[];for(let o=0;o<t.length;o++){const a=e.map((e=>e.get(o).toString())).join("|"),l=d(t.get(o),r,s);i.push(`>${a}${n}`);for(const e of l)i.push(`${e}${n}`)}return"".concat(...i)}(t,s,n),o=document.createElement("a");o.setAttribute("href",`data:text/plain;charset=utf-8,${encodeURIComponent(r)}`),o.setAttribute("download",`${e.dataFrame.name}.fasta`),o.click()})).show()}function d(e,t,s=h){const n=t(e);let r=0;const i=n.length,o=[];for(;r<i;){const e=a()(n).slice(r,r+s).toArray(),t=e.map((e=>e.length>1?`[${e}]`:e)).join("");o.push(t),r+=e.length}return o}},9416:(e,t,s)=>{"use strict";s.d(t,{n:()=>c});var n=s(4469),r=s(976),i=s(8467),o=s(2568),a=s(8457),l=s(3553);async function c(e,t){if(await(0,i.gw)(10),!(0,o.n)(t,"Sequence space"))return e;const s=(0,a.O)(t);s.name="splitToMonomers";const c=t.dataFrame;for(const e of s.columns)e.semType=l.Of.MONOMER,e.setTag("alphabet",t.getTag("alphabet"));const h=/(\d+)(?: \((\d+)\))?/,u=e=>{h.lastIndex=0;const t=e.match(h);return t?`${t[1]} (${parseInt(t[2]??0)+1})`:e};for(let e=0;e<s.columns.length;e++){const n=s.columns.byIndex(e);n.semType=l.Of.MONOMER,n.setTag("alphabet",t.getTag("alphabet"));const r=100;let i=0;for(;c.columns.byName(n.name)&&i<r;)n.name=u(n.name),i++;c.columns.add(n)}await n.data.detectSemanticTypes(c);for(let e=0;e<s.columns.length;e++){const t=s.columns.byIndex(e);t.setTag(r.TAGS.CELL_RENDERER,"Monomer"),t.setTag(".use-as-filter","false")}return c}},4293:(e,t,s)=>{"use strict";s.d(t,{B:()=>i,Y:()=>o});var n=s(4469),r=s(976);function i(){const e=n.shell.t.columns.bySemTypeAll(r.SEMTYPE.MACROMOLECULE);if(null!==e)return e;n.shell.error("Current table does not contain macromolecules")}function o(e,t){e.innerHTML="",e.append(t)}},8415:(e,t,s)=>{"use strict";s.d(t,{bo:()=>v,OZ:()=>T});var n=s(4469),r=s(3870),i=s(976),o=s(3336),a=s.n(o),l=s(6414),c=s.n(l),h=s(701),u=s(499),d=s(8447),p=s(9298);function m(e){var t;return"string"==typeof e||e instanceof String?e:("object"==typeof e||e instanceof Object)&&"$thrownJsError"in e?m(e.$thrownJsError):e instanceof Error?null!==(t=e.stack)&&void 0!==t?t:e.message:e.toString()}var f=s(7945),g=s(8467),y=s(172);var b,v,w=s(8770),C=s(3348);HTMLCanvasElement.prototype.getCursorPosition=function(e,t){const s=this.getBoundingClientRect();return new i.Point((e.clientX-s.left)*t,(e.clientY-s.top)*t)},i.Rect.prototype.contains=function(e,t){return this.left<=e&&e<=this.right&&this.top<=t&&t<=this.bottom};class S{constructor(e=0,t){this.valueList=null,this.valueIdx=0,this.value=this.rowCount=e,this.bounds=t}push(e){this.valueList||(this.valueList=new Array(this.rowCount),this.valueIdx=0),this.valueList[this.valueIdx]=e,++this.valueIdx}aggregate(e){this.value=e(this.valueList)??0,this.valueList=null}}class x{get label(){return this._label?this._label:this.name}constructor(e,t,s,n){this.sumRowCount=0,this.pos=e,this.name=t,this._freqs=s??{},n?.sumRowCount&&(this.sumRowCount=n.sumRowCount),n?.sumValueForHeight&&(this.sumPlotValue=n.sumValueForHeight),n?.label&&(this._label=n.label)}getMonomers(){return Object.keys(this._freqs)}hasMonomer(e){return e in this._freqs}getFreq(e){let t=this._freqs[e];return t||(t=this._freqs[e]=new S),t}aggregate(e){const t=function(e){return t=>{const s=function(e){let t;const s="agg";return t=e instanceof Float32Array?i.Column.fromFloat32Array(s,e):e instanceof Int32Array?i.Column.fromInt32Array(s,e):i.Column.fromList(i.COLUMN_TYPE.FLOAT,s,e),t}(t);return s.aggregate(e)}}(e);for(const[e,s]of Object.entries(this._freqs))s.aggregate(t)}getMinValue(){return Math.min(...Object.values(this._freqs).map((e=>e.value)))}calcPlotValue(e){for(const t of Object.values(this._freqs))t.plotValue=t.value-e}calcHeights(e){this.sumPlotValue=0;for(const e of Object.values(this._freqs))this.sumPlotValue+=e.plotValue;if(this.sumPlotValueForHeight=0,e===p.ES.Entropy){const e=Object.keys(this._freqs).length,t=.01*this.sumPlotValue,s=t/e;for(const e of Object.values(this._freqs)){const n=(e.plotValue+s)/(this.sumPlotValue+t);this.sumPlotValueForHeight+=-n*Math.log2(n)}}else if(e===p.ES.full)for(const[e,t]of Object.entries(this._freqs)){const e=t.plotValue/this.sumPlotValue;this.sumPlotValueForHeight+=e}}calcScreen(e,t,s,n,r,o,a,l,c,h){const u=r===p.ES.Entropy?n*(o-this.sumPlotValueForHeight)/o:n;let d=h*c+(n-u-1);const m=Object.entries(this._freqs).sort(((t,s)=>e(t[0])||e(s[0])?e(t[0])&&e(s[0])?0:e(t[0])?-1:1:s[1].value-t[1].value));for(const[e,n]of m){const e=u*n.plotValue/this.sumPlotValue;n.bounds=new i.Rect((t-s)*c*a,d,l*c,e),d+=e}}render(e,t,s,n,r,i){for(const[o,a]of Object.entries(this._freqs))if(!t(o)){const t=(0,d.GU)(o,5),l=a.bounds,c=l.left;e.resetTransform(),e.strokeStyle="lightgray",e.lineWidth=1,e.rect(c,l.top,l.width,l.height),e.fillStyle=i.get(o)??i.get("other"),e.textAlign="left",e.font=s;const h=e.measureText(t);e.setTransform(l.width/h.width,0,0,l.height/r,c,l.top),e.fillText(t,0,-n)}}getMonomerAt(e,t){const s=Object.entries(this._freqs).find((([s,n])=>n.bounds.contains(e,t)));return s?s[0]:void 0}buildCompositionTable(e){return(0,w._)(e,Object.assign({},...Object.entries(this._freqs).map((([e,t])=>({[e]:t.rowCount})))))}}!function(e){e.STYLE="Style",e.BEHAVIOR="Behavior",e.LAYOUT="Layout",e.DATA="Data"}(b||(b={})),function(e){e.sequenceColumnName="sequenceColumnName",e.valueAggrType="valueAggrType",e.valueColumnName="valueColumnName",e.startPositionName="startPositionName",e.endPositionName="endPositionName",e.skipEmptySequences="skipEmptySequences",e.skipEmptyPositions="skipEmptyPositions",e.shrinkEmptyTail="shrinkEmptyTail",e.backgroundColor="backgroundColor",e.positionHeight="positionHeight",e.positionWidth="positionWidth",e.verticalAlignment="verticalAlignment",e.horizontalAlignment="horizontalAlignment",e.fixWidth="fixWidth",e.fitArea="fitArea",e.minHeight="minHeight",e.maxHeight="maxHeight",e.showPositionLabels="showPositionLabels",e.positionMarginState="positionMarginState",e.positionMargin="positionMargin",e.filterSource="filterSource"}(v||(v={}));const A=p.vS;var E;!function(e){e[e.None=0]="None",e[e.Render=1]="Render",e[e.Layout=1]="Layout",e[e.Freqs=2]="Freqs"}(E||(E={}));const _=new class{constructor(){this.render=20}};class T extends i.JsViewer{get positionWidthWithMargin(){return this._positionWidthWithMargin}get Length(){return this.skipEmptyPositions?this.positions.length:this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0}get positionMarginValue(){return this.positionMarginState===p.dE.AUTO&&!0===this.unitsHandler.getAlphabetIsMultichar()||this.positionMarginState===p.dE.ON?this.positionMargin:0}constructor(){super(),this.viewed=!1,this.initialized=!1,this.palette=null,this.seqCol=null,this.positions=[],this.visibleSlider=!1,this.allowResize=!0,this.turnOfResizeForOneSetValue=!1,this.backgroundColor=4294967295,this.positionMargin=0,this.positionNames=[],this.positionLabels=void 0,this.startPosition=-1,this.endPosition=-1,this.error=null,this.viewerId=++T.viewerCounter,this.setDataInProgress=!1,this.viewSubs=[],this._onSizeChanged=new h.Subject,this._onFreqsCalculated=new h.Subject,this._onLayoutCalculated=new h.Subject,this.requestedRenderLevel=E.Freqs,this.renderRequest=new h.Subject,this._onRendered=new h.Subject,this.textBaseline="top",this.unitsHandler=null,this.sequenceColumnName=this.string(v.sequenceColumnName,A.sequenceColumnName,{category:b.DATA});const e=[i.AGG.KEY,i.AGG.PIVOT,i.AGG.MISSING_VALUE_COUNT,i.AGG.SKEW,i.AGG.KURT,i.AGG.SELECTED_ROWS_COUNT],t=Object.values(i.AGG).filter((t=>!e.includes(t)));this.valueAggrType=this.string(v.valueAggrType,A.valueAggrType,{category:b.DATA,choices:t}),this.valueColumnName=this.string(v.valueColumnName,A.valueColumnName,{category:b.DATA}),this.startPositionName=this.string(v.startPositionName,A.startPositionName,{category:b.DATA}),this.endPositionName=this.string(v.endPositionName,A.endPositionName,{category:b.DATA}),this.skipEmptySequences=this.bool(v.skipEmptySequences,A.skipEmptySequences,{category:b.DATA}),this.skipEmptyPositions=this.bool(v.skipEmptyPositions,A.skipEmptyPositions,{category:b.DATA}),this.shrinkEmptyTail=this.bool(v.shrinkEmptyTail,A.shrinkEmptyTail,{category:b.DATA}),this.backgroundColor=this.int(v.backgroundColor,A.backgroundColor,{category:b.STYLE}),this.positionHeight=this.string(v.positionHeight,A.positionHeight,{category:b.STYLE,choices:Object.values(p.ES)}),this._positionWidth=this.positionWidth=this.float(v.positionWidth,A.positionWidth,{category:b.STYLE}),this.verticalAlignment=this.string(v.verticalAlignment,A.verticalAlignment,{category:b.LAYOUT,choices:Object.values(p.vw)}),this.horizontalAlignment=this.string(v.horizontalAlignment,A.horizontalAlignment,{category:b.LAYOUT,choices:Object.values(p.iD)}),this.fixWidth=this.bool(v.fixWidth,A.fixWidth,{category:b.LAYOUT,userEditable:!1}),this.fitArea=this.bool(v.fitArea,A.fitArea,{category:b.LAYOUT}),this.minHeight=this.float(v.minHeight,A.minHeight,{category:b.LAYOUT}),this.maxHeight=this.float(v.maxHeight,A.maxHeight,{category:b.LAYOUT}),this.showPositionLabels=this.bool(v.showPositionLabels,A.showPositionLabels,{category:b.LAYOUT}),this.positionMarginState=this.string(v.positionMarginState,A.positionMarginState,{category:b.LAYOUT,choices:Object.values(p.dE)});let s=0;"auto"===this.positionMarginState&&(s=4),this.positionMargin=this.int(v.positionMargin,s,{category:b.LAYOUT,min:0,max:16}),this.filterSource=this.string(v.filterSource,A.filterSource,{category:b.BEHAVIOR,choices:Object.values(p.Ct)}),this.slider=r.rangeSlider(0,100,0,20,!1,{style:"barbell"}),this.canvas=r.canvas(),this.canvas.classList.value="bio-wl-canvas",this.canvas.style.width="100%",this.viewSyncer=new y.c(C._package.logger)}viewerToLog(){return`WebLogoViewer<${this.viewerId}>`}setData(){const e=`${this.viewerToLog()}.setData()`;C._package.logger.debug(`${e}, in`),this.viewSyncer.sync(`${e}`,(async()=>{if(!this.setDataInProgress){this.setDataInProgress=!0;try{this.viewed&&(this.renderRequestSub.unsubscribe(),await this.destroyView(),this.viewed=!1),this.updateSeqCol(),this.updateEditors(),this.viewed||(await this.buildView(),this.viewed=!0)}finally{this.setDataInProgress=!1}}})),C._package.logger.debug(`${e}, out`)}async destroyView(){for(const e of this.viewSubs)e.unsubscribe();this.viewSubs=[];const e=this.dataFrame?"data":"null";C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.destroyView( dataFrame = ${e} ) start`),this.host.remove(),this.msgHost=void 0,this.host=void 0,C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.destroyView() end`)}async buildView(){const e=this.dataFrame?"data":"null";C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.buildView( dataFrame = ${e} ) start`),window.devicePixelRatio,this.viewSubs.push(i.debounce(this.renderRequest,_.render).subscribe(this.renderRequestOnDebounce.bind(this))),this.helpUrl="/help/visualize/viewers/web-logo.md",this.msgHost=r.div("No message",{classes:"bio-wl-msg"}),this.msgHost.style.display="none",this.canvas=r.canvas(),this.canvas.style.width="100%",this.slider.root.style.position="absolute",this.slider.root.style.zIndex="999",this.slider.root.style.display="none",this.slider.root.style.height="0.7em",this.visibleSlider=!1,this.host=r.div([this.msgHost,this.canvas],{classes:"bio-wl-host",style:{display:"flex",flexDirection:"row",flexWrap:"wrap"}}),this.root.append(this.host),this.root.append(this.slider.root),this.error&&(this.msgHost.innerText=this.error.message,r.tooltip.bind(this.msgHost,this.error.stack),this.msgHost.style.setProperty("display",null)),this.dataFrame&&(this.viewSubs.push(this.dataFrame.filter.onChanged.subscribe(this.dataFrameFilterOnChanged.bind(this))),this.viewSubs.push(this.dataFrame.selection.onChanged.subscribe(this.dataFrameSelectionOnChanged.bind(this)))),this.viewSubs.push(r.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this))),this.viewSubs.push(this.slider.onValuesChanged.subscribe(this.sliderOnValuesChanged.bind(this))),this.viewSubs.push((0,h.fromEvent)(this.canvas,"mousemove").subscribe(this.canvasOnMouseMove.bind(this))),this.viewSubs.push((0,h.fromEvent)(this.canvas,"mousedown").subscribe(this.canvasOnMouseDown.bind(this))),this.viewSubs.push((0,h.fromEvent)(this.canvas,"wheel").subscribe(this.canvasOnWheel.bind(this))),this.render(E.Freqs,"buildView"),C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.buildView() end`)}rootOnSizeChanged(){C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.rootOnSizeChanged(), start `),this.render(E.Layout,"rootOnSizeChanged")}updateEditors(){this.props.getProperty(v.valueColumnName).choices=c()(this.dataFrame.columns.numerical).map((e=>e.name)).toArray()}updateSeqCol(){if(this.dataFrame&&(this.seqCol=this.sequenceColumnName?this.dataFrame.col(this.sequenceColumnName):null,null==this.seqCol&&(this.seqCol=(0,d.up)(this.dataFrame),this.sequenceColumnName=this.seqCol?this.seqCol.name:null),this.seqCol)){try{this.unitsHandler=u.Cn.getOrCreate(this.seqCol),this.palette=(0,d.dQ)(this.seqCol),this.render(E.Freqs,"updateSeqCol()"),this.error=null}catch(e){throw this.seqCol=null,this.error=e instanceof Error?e:new Error(e.toString()),e}this.seqCol||(this.unitsHandler=null,this.positionNames=[],this.positionLabels=[],this.startPosition=-1,this.endPosition=-1,this.palette=null)}}getFilter(){let e;switch(this.filterSource){case p.Ct.Filtered:e=this.dataFrame.filter;break;case p.Ct.Selected:e=0===this.dataFrame.selection.trueCount?this.dataFrame.filter:this.dataFrame.selection}return e}setSliderVisibility(e){e?(this.slider.root.style.display="inherit",this.visibleSlider=!0):(this.slider.root.style.display="none",this.visibleSlider=!1)}calcLayout(e){this.host&&this.canvas&&this.slider&&(this.host.classList.remove("bio-wl-fixWidth","bio-wl-fitArea"),this.canvas.classList.remove("bio-wl-fixWidth","bio-wl-fitArea"),this._positionWidth=this.positionWidth,this._positionMargin=this.positionMargin,this._positionWidthWithMargin=this._positionWidth+this.positionMarginValue,this.fixWidth?this.calcLayoutFixWidth(e):this.fitArea?this.calcLayoutFitArea(e):this.calcLayoutNoFitArea(e),this.slider.root.style.width=`${this.host.clientWidth}px`)}calcLayoutFixWidth(e){if(!this.host||!this.canvas||!this.slider)return;this.host.classList.add("bio-wl-fixWidth"),this.canvas.classList.add("bio-wl-fitArea");const t=this._positionWidthWithMargin*this.Length,s=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight);this.host.style.justifyContent=p.iD.LEFT,this.host.style.removeProperty("margin-left"),this.host.style.removeProperty("margin-top"),this.host.style.width=this.canvas.style.width=`${t}px`,this.host.style.height=this.canvas.style.height=`${s}px`,this.host.style.left=this.canvas.style.left="0",this.host.style.top=this.canvas.style.top="0",this.host.style.setProperty("overflow","hidden","important"),this.slider.root.style.display="none",this.slider.setValues(0,Math.max(0,this.Length-1),0,Math.max(0,this.Length-1)),this.canvas.width=t*e,this.canvas.height=s*e}calcLayoutNoFitArea(e){if(!this.host||!this.canvas||!this.slider)return;const t=this._positionWidthWithMargin*this.Length,s=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight),n=Math.min(this.root.clientWidth,t);this.canvas.style.width=`${n}px`,this.canvas.style.height=`${s}px`,this.host.style.width=`${n}px`,this.host.style.height=`${this.root.clientHeight}px`,this.host.style.justifyContent=this.horizontalAlignment,this.host.style.alignContent=this.verticalAlignment===p.vw.TOP?"start":this.verticalAlignment===p.vw.MIDDLE?"center":this.verticalAlignment===p.vw.BOTTOM?"end":"inherit",this.root.clientHeight<this.minHeight&&(this.host.style.alignContent="start",this.host.style.width=`${n+6}px`),this.host.style.width=`${this.host}px`;const r=t>n;if(this.setSliderVisibility(r),r){this.slider.root.style.removeProperty("display"),this.host.style.justifyContent="left",this.host.style.height=this.root.clientHeight-this.slider.root.offsetHeight+"px",this.slider.root.style.top=`${this.host.offsetHeight}px`;let e=Math.min(Math.max(0,this.slider.min),this.Length-.001),t=Math.min(Math.max(0,this.slider.max),this.Length-.001);const s=this.root.clientWidth/this._positionWidthWithMargin;t=Math.min(Math.max(e,0)+s,this.Length-.001),e=Math.max(0,Math.min(t,this.Length-.001)-s),this.slider.setValues(0,Math.max(this.Length-.001),e,t)}else this.slider.setValues(0,Math.max(0,this.Length-.001),0,Math.max(0,this.Length-.001));this.canvas.width=n*e,this.canvas.height=s*e}calcLayoutFitArea(e){if(!this.host||!this.canvas||!this.slider)return;const t=this._positionWidth*this.Length,s=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight),n=t>0?(this.root.clientWidth-this.positionMarginValue*this.Length)/t:0,r=this.root.clientHeight/s,i=Math.max(1,Math.min(n,r));this._positionWidth=this.positionWidth*i,this._positionWidthWithMargin=this._positionWidth+this.positionMarginValue;const o=(this._positionWidth+this.positionMarginValue)*this.Length,a=i*s,l=Math.min(this.root.clientWidth,o);this.canvas.style.width=`${l}px`,this.canvas.style.height=`${a}px`,this.host.style.width=`${l}px`,this.host.style.height=`${this.root.clientHeight}px`,this.host.style.justifyContent=this.horizontalAlignment,this.host.style.alignContent=this.verticalAlignment===p.vw.TOP?"start":this.verticalAlignment===p.vw.MIDDLE?"center":this.verticalAlignment===p.vw.BOTTOM?"end":"inherit",this.root.clientHeight<this.minHeight&&(this.host.style.alignContent="start",this.host.style.width=`${l+6}px`),this.host.style.width=`${this.host}px`;const c=o>l;if(this.setSliderVisibility(c),c){this.slider.root.style.removeProperty("display"),this.host.style.justifyContent="left",this.host.style.height=this.root.clientHeight-this.slider.root.offsetHeight+"px",this.slider.root.style.top=`${this.host.offsetHeight}px`;let e=Math.min(Math.max(0,this.slider.min),this.Length-.001),t=Math.min(Math.max(0,this.slider.max),this.Length-.001);const s=this.root.clientWidth/this._positionWidthWithMargin;t=Math.min(Math.max(e,0)+s,this.Length-.001),e=Math.max(0,Math.min(t,this.Length-.001)-s),this.slider.setValues(0,Math.max(0,this.Length-.001),e,t)}else this.slider.setValues(0,Math.max(0,this.Length-.001),0,Math.max(0,this.Length-.001));this.canvas.width=l*e,this.canvas.height=a*e}onPropertyChanged(e){switch(super.onPropertyChanged(e),e.name){case v.sequenceColumnName:this.updateSeqCol();break;case v.sequenceColumnName:case v.startPositionName:case v.endPositionName:case v.filterSource:case v.shrinkEmptyTail:case v.skipEmptyPositions:case v.positionHeight:case v.valueColumnName:case v.valueAggrType:this.render(E.Freqs,`onPropertyChanged( ${e.name} )`);break;case v.minHeight:case v.maxHeight:case v.positionWidth:case v.showPositionLabels:case v.fixWidth:case v.fitArea:case v.horizontalAlignment:case v.verticalAlignment:case v.positionMargin:case v.positionMarginState:this.render(E.Layout,`onPropertyChanged(${e.name})`);break;case v.backgroundColor:this.render(E.Render,`onPropertyChanged(${e.name})`)}}onTableAttached(){C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.onTableAttached(), `),super.onTableAttached(),this.setData()}detach(){const e=`${this.viewerToLog()}.detach()`;C._package.logger.debug(`${e}, in`);const t=super.detach.bind(this);this.viewSyncer.sync(`${e}`,(async()=>{this.setDataInProgress||(this.viewed&&(await this.destroyView(),this.viewed=!1),t())})),C._package.logger.debug(`${e}, out`)}get onSizeChanged(){return this._onSizeChanged}get onFreqsCalculated(){return this._onFreqsCalculated}get onLayoutCalculated(){return this._onLayoutCalculated}getMonomer(e,t){const s=e.x,n=Math.floor(e.x/(this._positionWidthWithMargin*t)+Math.floor(this.slider.min)),r=this.positions[n];if(!r)return[null,null,null];const i=r.getMonomerAt(s,e.y);return void 0===i?[r,null,null]:[r,i,r.getFreq(i)]}_nullSequence(e="X"){return this.skipEmptySequences?"":new Array(this.Length).fill(e).join("")}_removeEmptyPositions(){this.skipEmptyPositions&&(this.positions=c()(this.positions).filter((e=>{const t=this.unitsHandler.defaultGapSymbol;return!e.hasMonomer(t)||e.getFreq(t).rowCount!==e.sumRowCount})).toArray())}render(e,t){C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render( recalcLevelVal=${e}, reason='${t}' )`),this.requestedRenderLevel=Math.max(this.requestedRenderLevel,e),this.renderRequest.next(this.requestedRenderLevel)}async renderInt(e){if(C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.renderInt( renderLevel=${e} ), start `),this.msgHost&&(this.seqCol&&!this.palette?(this.msgHost.innerText=`Unknown palette (column semType: '${this.seqCol.semType}').`,this.msgHost.style.display=""):this.msgHost.style.display="none"),!this.seqCol||!this.dataFrame||!this.palette||null==this.host||null==this.slider)return;const t=window.devicePixelRatio,s=this.showPositionLabels?12:0;if(e>=E.Freqs&&(()=>{if(C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.calculateFreqsInt(), start `),!this.host||!this.seqCol||!this.dataFrame)return;const e=this.getFilter(),t=0===e.trueCount?this.unitsHandler.maxLength:c().enumerate(this.unitsHandler.splitted).map((([t,s])=>e.get(s)&&t?t.length:0)).reduce(((e,t)=>Math.max(e,t)),0),s=this.seqCol.getTag(".positionNames"),n=this.seqCol.getTag(".positionLabels");this.positionNames=s?s.split(d.CI).map((e=>e.trim())):[...Array(t).keys()].map((e=>`${e+1}`)),this.positionLabels=n?n.split(d.CI).map((e=>e.trim())):void 0,this.startPosition=this.startPositionName&&this.positionNames&&this.positionNames.includes(this.startPositionName)?this.positionNames.indexOf(this.startPositionName):0,this.endPosition=this.endPositionName&&this.positionNames&&this.positionNames.includes(this.endPositionName)?this.positionNames.indexOf(this.endPositionName):t-1;const r=this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0;this.unitsHandler=u.Cn.getOrCreate(this.seqCol);const o=this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0;this.positions=new Array(o);for(let e=0;e<r;e++){const t=this.positionNames[this.startPosition+e],s=this.positionLabels?this.positionLabels[this.startPosition+e]:void 0;this.positions[e]=new x(this.startPosition+e,t,{},{label:s})}const a=this.dataFrame.rowCount,l=this.unitsHandler.splitted;for(let t=0;t<r;++t){for(let s=0;s<a;++s)if(e.get(s)){const e=l[s][this.startPosition+t]||this.unitsHandler.defaultGapSymbol,n=this.positions[t],r=n.getFreq(e);++n.sumRowCount,r.value=++r.rowCount}if(this.valueAggrType===i.AGG.TOTAL_COUNT)continue;let s=null;try{s=this.dataFrame.getCol(this.valueColumnName),s.matches("numerical")||(s=null)}catch{s=null}if(s){for(let n=0;n<a;++n)if(e.get(n)){const e=l[n][this.startPosition+t]||this.unitsHandler.defaultGapSymbol,r=s.get(n);this.positions[t].getFreq(e).push(r)}this.positions[t].aggregate(this.valueAggrType)}}const h=this.valueAggrType===i.AGG.TOTAL_COUNT?0:Math.min(0,Math.min(...this.positions.map((e=>e.getMinValue()))));for(let e=0;e<r;++e)this.positions[e].calcPlotValue(h),this.positions[e].calcHeights(this.positionHeight);this._removeEmptyPositions(),this._onFreqsCalculated.next()})(),this.calcLayout(t),-1===this.startPosition)return;const r=Math.max(Math.floor(this.slider.min),0),o=Math.min(this.positions.length-1,Math.floor(this.slider.max));e>=E.Layout&&((e,t,s,r)=>{C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.calculateLayoutInt(), start `);const o=this.canvas.height-r*s;let a;if(this.valueAggrType===i.AGG.TOTAL_COUNT){const e=this.getAlphabetSize();this.positionHeight==p.ES.Entropy&&null==e&&n.shell.error("WebLogo: alphabet is undefined."),a=Math.log2(e)}else a=Math.max(...c().count(e).takeWhile((e=>e<=t)).map((e=>this.positions[e].sumPlotValueForHeight)));for(let n=e;n<=t;++n)n in this.positions?this.positions[n].calcScreen((e=>this.unitsHandler.isGap(e)),n,this.slider.min,o,this.positionHeight,a,this._positionWidthWithMargin,this._positionWidth,s,r):C._package.logger.warning(`Bio: WebLogoViewer<${this.viewerId}>.render.calculateLayoutInt() this.positions.length = ${this.positions.length}, jPos = ${n}`);C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.calculateLayoutInt(), end `),this._onLayoutCalculated.next()})(r,o,window.devicePixelRatio,s);const a=this.canvas.getContext("2d");if(a){a.save();try{this.Length,a.resetTransform(),a.fillStyle=function(e){const t=i.Color.a(e);return`#${(16777215&e).toString(16).padStart(6,"0")}`+t.toString(16).padStart(2,"0")}(this.backgroundColor),a.fillRect(0,0,this.canvas.width,this.canvas.height),a.textBaseline=this.textBaseline;const e=10*t;a.resetTransform(),a.fillStyle="black",a.textAlign="center",a.font=`${e.toFixed(1)}px Roboto, Roboto Local, sans-serif`,s>0&&this.positions.length>0&&function(e,t,s,n,r,i,o,a){e.save();try{e.textAlign="center";let l=null,c=null;for(let t=Math.floor(o);t<=Math.floor(a);t++){const s=i[t],n=e.measureText(s.name),r=n.actualBoundingBoxDescent-n.actualBoundingBoxAscent;l=null===l?n.width:Math.max(l,n.width),c=null===c?r:Math.max(c,r)}const h=l<n*t-2?1:(n*t-2)/l;for(let l=Math.floor(o);l<=Math.floor(a);l++){const a=i[l],u=(l-o)*s*t+n*t/2,d=(r*t-c)/2;e.setTransform(h,0,0,1,u,d),e.measureText(a.label),e.fillText(a.label,0,0)}}finally{e.restore()}}(a,t,this._positionWidthWithMargin,this._positionWidth,s,this.positions,this.slider.min,this.slider.max);const n="16px Roboto, Roboto Local, sans-serif",l=.25,c=12.2;for(let e=r;e<=o;e++)this.positions[e].render(a,(e=>this.unitsHandler.isGap(e)),n,l,c,this.palette)}finally{a.restore()}C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.renderInt( recalcLevel=${e} ), end`)}}renderRequestOnDebounce(e){const t=`${this.viewerToLog()}.renderRequestOnDebounce()`;"HTML"!==a()(this.root).offsetParent().get()[0]?.tagName?(this.requestedRenderLevel=E.None,this.renderInt(e).catch((e=>{const[t,s]=(0,f.yf)(e);C._package.logger.error(t,void 0,s)}))):C._package.logger.warning(`${t}, $(this.root).offsetParent() is the 'HTML' tag.`)}getAlphabetSize(){return this.unitsHandler?.getAlphabetSize()??0}sliderOnValuesChanged(e){try{const e={minRange:this.slider.minRange,min:this.slider.min,max:this.slider.max,maxRange:this.slider.maxRange};C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.sliderOnValuesChanged( ${JSON.stringify(e)} ), start`),this.render(E.Layout,"sliderOnValuesChanged")}catch(e){const t=m(e);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.sliderOnValuesChanged() error:\n`+t)}}dataFrameFilterOnChanged(e){C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.dataFrameFilterChanged()`);try{this.filterSource===p.Ct.Filtered&&this.render(E.Freqs,"dataFrameFilterOnChanged")}catch(e){const t=m(e);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.dataFrameFilterOnChanged() error:\n`+t)}}dataFrameSelectionOnChanged(e){C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.dataFrameSelectionOnChanged()`);try{this.filterSource===p.Ct.Selected&&this.render(E.Freqs,"dataFrameSelectionOnChanged")}catch(e){const t=m(e);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.dataFrameSelectionOnChanged() error:\n`+t)}}canvasOnMouseMove(e){const t=window.devicePixelRatio;try{const s=e,n=this.canvas.getCursorPosition(s,t),[o,a]=this.getMonomer(n,t),l=this.showPositionLabels?12*t:0;if(null!==o&&null===a&&0<=n.y&&n.y<=l){const e=[r.divText(`Position ${o.label}`)];this.valueAggrType===i.AGG.TOTAL_COUNT&&e.push(o.buildCompositionTable(this.palette));const t=r.divV(e);r.tooltip.show(t,s.x+16,s.y+16)}else if(null!==o&&a&&this.dataFrame&&this.seqCol&&this.unitsHandler){const e=o.getFreq(a),t=[r.div(`${a}`),r.div(`${e.rowCount} rows`)];this.valueAggrType!==i.AGG.TOTAL_COUNT&&t.push(r.div(`${this.valueAggrType}: ${e.value.toFixed(3)}`));const n=r.divV(t);r.tooltip.show(n,s.x+16,s.y+16)}else r.tooltip.hide()}catch(e){const t=m(e);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.canvasOnMouseMove() error:\n`+t)}}canvasOnMouseDown(e){try{const t=e,s=window.devicePixelRatio,[n,r]=this.getMonomer(this.canvas.getCursorPosition(t,s),s);if(null!==n&&null!==r&&this.dataFrame&&this.seqCol&&this.unitsHandler){const e=i.BitSet.create(this.dataFrame.selection.length,(e=>function(e,t,s,n,r,i){const o=t.splitted[n],a=i.pos<o.length?o[i.pos]:null;return a===r||""===a&&r===t.defaultGapSymbol}(this.dataFrame,this.unitsHandler,this.getFilter(),e,r,n)));this.dataFrame.selection.init((t=>e.get(t)))}}catch(e){const t=m(e);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.canvasOnMouseDown() error:\n`+t)}}canvasOnWheel(e){const t=window.devicePixelRatio;try{if(!this.visibleSlider)return;const s=this.canvas.width/(this._positionWidthWithMargin*t),n=e.deltaY/100*Math.max(Math.floor(s/5),1);this.slider.scrollBy(this.slider.min+n)}catch(e){const t=m(e);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.canvasOnWheel() error:\n`+t)}}get onRendered(){return this._onRendered}invalidate(e){const t=`invalidate(${e?` <- ${e} `:""})`,s=`${this.viewerToLog()}.${t}`;this.viewSyncer.sync(`${s}`,(async()=>{this.render(E.None,t),this._onRendered.next()}))}async awaitRendered(e=5e3){await(0,g.zg)(this.onRendered,(()=>{}),(()=>{this.invalidate()}),e);const t=this.viewSyncer.resetErrors();if(t.length>0)throw t[0]}}T.residuesSet="nucleotides",T.viewerCounter=-1},8755:(e,t,s)=>{"use strict";s.d(t,{Y:()=>o,x:()=>i});var n=s(701),r=s(3348);class i{get onChanged(){return this._onChanged}constructor(e){return this.substructure=e,this._onChanged=new n.Subject,new Proxy(this,{set:(e,t,s)=>(r._package.logger.debug(`BioFilterProps.set ${t.toString()}( '${s}' )`),e[t]=s,this._onChanged.next(),!0)})}save(){const e={};for(const[t,s]of Object.entries(this))"_onChanged"!==t&&(e[t]=this[t]);return e}apply(e){for(const[t,s]of Object.entries(this))"_onChanged"!==t&&(this[t]=e[t])}}class o{constructor(){this.onChanged=new n.Subject,this._propsChanging=!1,this._propsOnChangedSub=null}get props(){return this._props||(this._props=this.emptyProps),this._props}set props(e){this._propsChanging=!0;try{this._propsOnChangedSub&&(this._propsOnChangedSub.unsubscribe(),this._propsOnChangedSub=null),this._props=e,this.applyProps(),this.onChanged.next(),this._propsOnChangedSub=this._props.onChanged.subscribe((()=>{this.onChanged.next()}))}finally{this._propsChanging=!1}}async detach(){this._propsOnChangedSub&&(this._propsOnChangedSub.unsubscribe(),this._propsOnChangedSub=null)}get filterSummary(){return this.props.substructure}get isFiltering(){return""!==this.props.substructure}resetFilter(){this.props=this.emptyProps,this.onChanged.next()}}},5393:(e,t,s)=>{"use strict";s.d(t,{ST:()=>A});var n=s(3870),r=s(976),i=s(4469),o=s(6414),a=s.n(o),l=s(701),c=s(8447),h=s(8467),u=s(499),d=s(172),p=s(7983),m=s(8755),f=s(3336),g=s.n(f),y=s(7945),b=s(4293),v=s(3348);class w extends m.Y{viewerToLog(){return`HelmBioFilter<${this.viewerId}>`}get type(){return"HelmBioFilter"}constructor(){super(),this.emptyProps=new m.x(""),this._filterPanel=n.div("",{style:{cursor:"pointer"}}),this.viewerId=++w.viewerCounter,this.viewSubs=[],this.logger=v._package.logger}async detach(){await super.detach();for(const e of this.viewSubs)e.unsubscribe()}async attach(){this.viewerToLog();try{const e=await async function(){const e="Helm",t=r.Func.find({package:e,name:"getHelmHelper"});if(0===t.length)throw new Error(`Package '${e}' must be installed for HelmHelper.`);return(await t[0].prepare().call()).getOutputParamValue()}();let t,s;this.helmEditor=e.createHelmWebEditor(),this.logger.warning("TEST: HelmBioFilter.init().sync() waitForElementInDom waiting..."),await n.tools.waitForElementInDom(this._filterPanel),this.logger.warning("TEST: HelmBioFilter.init().sync() waitForElementInDom ready"),this.updateFilterPanel(),this.viewSubs.push((0,l.fromEvent)(this._filterPanel,"click").subscribe((()=>{t=n.div(),s=e.createWebEditorApp(t,this.props.substructure),n.dialog({showHeader:!1,showFooter:!0}).add(t).onOK((()=>{try{const e=s.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");this.props=new m.x(e)}catch(e){this.logger.error(e)}finally{g()(t).empty(),t=null,s=null}})).onCancel((()=>{g()(t).empty(),t=null,s=null})).show({modal:!0,fullScreen:!0})}))),this.viewSubs.push(n.onSizeChanged(this._filterPanel).subscribe((e=>{try{if(s){const e=s.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");this.updateFilterPanel(e)}}catch(e){const[t,s]=(0,y.yf)(e);this.logger.error(t,void 0,s)}})))}catch(e){const[t,s]=(0,y.yf)(e),r=this._filterPanel;r.innerText="error",r.classList.add("d4-error"),n.tooltip.bind(r,t)}}applyProps(){this.helmEditor&&this.updateFilterPanel(this.props.substructure)}get filterPanel(){return this._filterPanel}updateFilterPanel(e){if(!this.helmEditor)throw new Error("helmEditor is not created, the filter is not in dom yet");const t=this._filterPanel.parentElement.clientWidth<100?100:this._filterPanel.parentElement.clientWidth,s=t/2;if(e)(0,b.Y)(this._filterPanel,this.helmEditor.host),this.helmEditor.editor.setHelm(e),this.helmEditor.resizeEditor(t,s);else{const e=n.divText("Click to edit","helm-substructure-filter");(0,b.Y)(this._filterPanel,e)}}async substructureSearch(e){return await(0,h.gw)(10),await(0,p.QF)(this.props.substructure,e)}}w.viewerCounter=-1;const C="bio-substructure-filter";class S{constructor(e,t,s,n,r){this.props=e,this.filterId=t,this.dataFrameId=s,this.columnName=n,this.bitset=r}}class x extends m.x{constructor(e,t){super(e),this.separator=t}}class A extends r.Filter{get calculating(){return"initial"==this.loader.style.display}set calculating(e){this.loader.style.display=e?"initial":"none"}get filterSummary(){return this.bioFilter.filterSummary}get isFiltering(){return super.isFiltering&&(this.bioFilter?.isFiltering??!1)}get isReadyToApplyFilter(){return!this.calculating&&null!=this.bitset}get debounceTime(){if(null==this.column)return 1e3;const e=this.column.length;return e<500?0:e>1e4?1e3:Math.floor((e-500)/9500*1e3)}constructor(){return super(),this.bioFilter=null,this.bitset=null,this.notation=void 0,this.filterId=++A.filterCounter,this.viewSubs=[],this._onRendered=new l.Subject,this.root=n.divV([]),this.loader=n.loader(),this.calculating=!1,this.filterSyncer=new d.c(this.logger=v._package.logger),new Proxy(this,{set:(e,t,s)=>(e[t]=s,!0)})}filterToLog(){return`BioSubstructureFilter<${this.filterId}>`}attach(e){const t=super.attach.bind(this),s=`${this.filterToLog()}.attach()`;this.filterSyncer.sync(s,(async()=>{t(e),this.column=e.columns.bySemType(r.SEMTYPE.MACROMOLECULE),u.Cn.getOrCreate(this.column),this.columnName??(this.columnName=this.column?.name),this.notation??(this.notation=this.column?.getTag(r.TAGS.UNITS)),this.bioFilter=this.notation===c.r2.FASTA?new E:this.notation===c.r2.SEPARATOR?new _(this.column.getTag("separator")):new w,this.root.appendChild(this.bioFilter.filterPanel),this.root.appendChild(this.loader),await this.bioFilter.attach(),this.viewSubs.push(r.debounce(this.bioFilter.onChanged,this.debounceTime).subscribe(this.bioFilterOnChangedDebounced.bind(this))),this.viewSubs.push(i.events.onResetFilterRequest.subscribe((e=>{this.bioFilter?.resetFilter()}))),this.viewSubs.push(i.events.onCustomEvent(C).subscribe(this.filterOnSync.bind(this)))}))}detach(){const e=super.detach.bind(this),t=`${this.filterToLog()}.detach()`;this.filterSyncer.sync(t,(async()=>{for(const e of this.viewSubs)e.unsubscribe();this.viewSubs=[],e(),this.bioFilter&&this.bioFilter.detach(),this.bioFilter=null}))}filterOnSync(e){e.filterId!==this.filterId&&e.dataFrameId===this.dataFrame.id&&e.columnName===this.columnName&&(this.bioFilter.props=e.props)}applyFilter(){this.bitset&&!this.isDetached&&this.dataFrame?.filter.and(this.bitset)}saveState(){const e=super.saveState();return e.props=this.bioFilter.props.save(),e}applyState(e){super.applyState(e),e.props&&this.bioFilter.props.apply(e.props)}fireFilterSync(){const e=`${this.filterToLog()}.fireFilterSync()`;v._package.logger.debug(`${e}, bioFilter = ${this.bioFilter?this.bioFilter.constructor.name:"null"}`+(this.bioFilter?`, props = ${JSON.stringify(this.bioFilter.props.save())}`:"")),i.events.fireCustomEvent(C,new S(this.bioFilter.props,this.filterId,this.dataFrame.id,this.columnName,this.bitset))}bioFilterOnChangedDebounced(){if(!this.dataFrame)return;const e=`${this.filterToLog()}.bioFilterOnChangedDebounced()`;if(v._package.logger.debug(`${e}, start, isFiltering = ${this.isFiltering}, props = ${JSON.stringify(this.bioFilter.props.save())}`),!this.isFiltering)return this.bitset=null,void this.dataFrame.rows.requestFilter();a()(this.dataFrame.rows.filters).has(`${this.columnName}: ${this.filterSummary}`)||this.filterSyncer.sync(e,(async()=>{this.calculating=!0;try{v._package.logger.debug(`${e}, before substructureSearch`),this.bitset=await(this.bioFilter?.substructureSearch(this.column)),v._package.logger.debug(`${e}, after substructureSearch`),this.calculating=!1,this.fireFilterSync(),this.dataFrame?.rows.requestFilter()}finally{this.calculating=!1,v._package.logger.debug(`${e}, end`)}}))}get onRendered(){return this._onRendered}invalidate(e){const t=`${this.filterToLog()}.invalidate(${e?` <- ${e} `:""})`;this.filterSyncer.sync(t,(async()=>{this._onRendered.next()}))}async awaitRendered(e=1e4){const t=`awaitRendered( ${e} )`,s=`${this.filterToLog()}.${t}`;await(0,h.gw)(0),await(0,h.zg)(this.onRendered,(()=>{this.logger.debug(`${s}, _onRendered event caught`)}),(()=>{this.invalidate(t)}),e,`${s} ${e} timeout`);const n=this.filterSyncer.resetErrors();if(n.length>0)throw n[0]}}A.filterCounter=-1;class E extends m.Y{get type(){return"FastaBioFilter"}constructor(){super(),this.emptyProps=new m.x(""),this.substructureInput=n.stringInput("","",(()=>{this.props.substructure=this.substructureInput.value,this._propsChanging||this.onChanged.next()}),{placeholder:"Substructure"})}applyProps(){this.substructureInput.value=this.props.substructure}get filterPanel(){return this.substructureInput.root}get isFiltering(){return""!==this.substructureInput.value}async substructureSearch(e){return(0,p.pf)(this.props.substructure,e)}async attach(){}async detach(){await super.detach()}}class _ extends m.Y{get type(){return"SeparatorBioFilter"}constructor(e){super(),this.emptyProps=new x(""),this.colSeparator="",this.substructureInput=n.stringInput("","",(()=>{this.props.substructure=this.substructureInput.value,this._propsChanging||this.onChanged.next()}),{placeholder:"Substructure"}),this.separatorInput=n.stringInput("",this.colSeparator=e,(()=>{this.props.separator=this.separatorInput.value?this.separatorInput.value:void 0,this._propsChanging||this.onChanged.next()}),{placeholder:"Separator"})}applyProps(){this.substructureInput.value=this.props.substructure,this.separatorInput.value=this.props.separator??this.colSeparator}get filterSummary(){return this.props.separator?this.props.separator:this.colSeparator,`${this.props.substructure}, {sep}`}get isFiltering(){return""!==this.props.substructure}resetFilter(){this.props=new x("")}get filterPanel(){return n.divV([this.substructureInput.root,this.separatorInput.root])}get substructure(){return this.separatorInput.value&&this.separatorInput.value!==this.colSeparator?this.substructureInput.value.replaceAll(this.separatorInput.value,this.colSeparator):this.substructureInput.value}set substructure(e){this.substructureInput.value=e}async substructureSearch(e){return(0,p.pf)(this.substructure,e,this.colSeparator)}async attach(){}async detach(){await super.detach()}}},8770:(e,t,s)=>{"use strict";s.d(t,{_:()=>E,t:()=>A});var n=s(3870),r=s(976),i=s(6414),o=s.n(i),a=s(8447),l=s(7331),c=s(3379),h=s.n(c),u=s(7795),d=s.n(u),p=s(569),m=s.n(p),f=s(3565),g=s.n(f),y=s(9216),b=s.n(y),v=s(4589),w=s.n(v),C=s(5362),S={};S.styleTagTransform=w(),S.setAttributes=g(),S.insert=m().bind(null,"head"),S.domAPI=d(),S.insertStyleElement=b(),h()(C.Z,S),C.Z&&C.Z.locals&&C.Z.locals;var x=s(499);function A(e){const t=n.div();t.classList.add("macromolecule-cell-comp-analysis-host");const s=e.cell.column.tags.alphabet;let i=l.UE.Color;switch(s){case"DNA":case"RNA":i=(0,a.py)("DNA");break;case"PT":i=(0,a.py)("PT")}const c={},h=x.Cn.getOrCreate(e.cell.column).getSplitter()(e.value);o()(h).filter((e=>!!e&&""!==e)).forEach((e=>{const t=c[e]||0;c[e]=t+1}));const u=E(i,c);return Array.from(u.rows).forEach((e=>{const t=e.getElementsByClassName("macromolecule-cell-comp-analysis-bar")[0].style.backgroundColor;e.cells[0].style.color=t})),t.appendChild(u),new r.Widget(t)}function E(e,t){let s=0,r=null;for(const e of Object.values(t))s+=e,r=null===r?e:Math.max(r,e);const i=r/s,o=Object.assign({},...Array.from(Object.entries(t)).sort(((e,t)=>t[1]-e[1])).map((([t,r])=>{const o=r/s,a=e.get(t),l=n.div("",{classes:"macromolecule-cell-comp-analysis-bar"});l.style.width=50*o/i+"px",l.style.backgroundColor=a;const c=n.div(`${(100*o).toFixed(2)}%`);return{[t]:n.div([l,c],{classes:"macromolecule-cell-comp-analysis-value"})}}))),a=n.tableFromMap(o);return Array.from(a.rows).forEach((e=>{const t=e.getElementsByClassName("macromolecule-cell-comp-analysis-bar")[0].style.backgroundColor;e.cells[0].style.color=t})),a}},540:function(e,t){!function(e){"use strict";function t(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];if(t.length>1){t[0]=t[0].slice(0,-1);for(var n=t.length-1,r=1;r<n;++r)t[r]=t[r].slice(1,-1);return t[n]=t[n].slice(1),t.join("")}return t[0]}function s(e){return"(?:"+e+")"}function n(e){return void 0===e?"undefined":null===e?"null":Object.prototype.toString.call(e).split(" ").pop().split("]").shift().toLowerCase()}function r(e){return e.toUpperCase()}function i(e){var n="[A-Za-z]",r="[0-9]",i=t(r,"[A-Fa-f]"),o=s(s("%[EFef]"+i+"%"+i+i+"%"+i+i)+"|"+s("%[89A-Fa-f]"+i+"%"+i+i)+"|"+s("%"+i+i)),a="[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]",l=t("[\\:\\/\\?\\#\\[\\]\\@]",a),c=e?"[\\uE000-\\uF8FF]":"[]",h=t(n,r,"[\\-\\.\\_\\~]",e?"[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]":"[]"),u=s(n+t(n,r,"[\\+\\-\\.]")+"*"),d=s(s(o+"|"+t(h,a,"[\\:]"))+"*"),p=(s(s("25[0-5]")+"|"+s("2[0-4]"+r)+"|"+s("1"+r+r)+"|"+s("[1-9]"+r)+"|"+r),s(s("25[0-5]")+"|"+s("2[0-4]"+r)+"|"+s("1"+r+r)+"|"+s("0?[1-9]"+r)+"|0?0?"+r)),m=s(p+"\\."+p+"\\."+p+"\\."+p),f=s(i+"{1,4}"),g=s(s(f+"\\:"+f)+"|"+m),y=s(s(f+"\\:")+"{6}"+g),b=s("\\:\\:"+s(f+"\\:")+"{5}"+g),v=s(s(f)+"?\\:\\:"+s(f+"\\:")+"{4}"+g),w=s(s(s(f+"\\:")+"{0,1}"+f)+"?\\:\\:"+s(f+"\\:")+"{3}"+g),C=s(s(s(f+"\\:")+"{0,2}"+f)+"?\\:\\:"+s(f+"\\:")+"{2}"+g),S=s(s(s(f+"\\:")+"{0,3}"+f)+"?\\:\\:"+f+"\\:"+g),x=s(s(s(f+"\\:")+"{0,4}"+f)+"?\\:\\:"+g),A=s(s(s(f+"\\:")+"{0,5}"+f)+"?\\:\\:"+f),E=s(s(s(f+"\\:")+"{0,6}"+f)+"?\\:\\:"),_=s([y,b,v,w,C,S,x,A,E].join("|")),T=s(s(h+"|"+o)+"+"),I=(s(_+"\\%25"+T),s(_+s("\\%25|\\%(?!"+i+"{2})")+T)),$=s("[vV]"+i+"+\\."+t(h,a,"[\\:]")+"+"),M=s("\\["+s(I+"|"+_+"|"+$)+"\\]"),N=s(s(o+"|"+t(h,a))+"*"),L=s(M+"|"+m+"(?!"+N+")|"+N),P=s(r+"*"),O=s(s(d+"@")+"?"+L+s("\\:"+P)+"?"),R=s(o+"|"+t(h,a,"[\\:\\@]")),k=s(R+"*"),F=s(R+"+"),G=s(s(o+"|"+t(h,a,"[\\@]"))+"+"),D=s(s("\\/"+k)+"*"),V=s("\\/"+s(F+D)+"?"),B=s(G+D),H=s(F+D),j="(?!"+R+")",W=(s(D+"|"+V+"|"+B+"|"+H+"|"+j),s(s(R+"|"+t("[\\/\\?]",c))+"*")),U=s(s(R+"|[\\/\\?]")+"*"),Z=s(s("\\/\\/"+O+D)+"|"+V+"|"+H+"|"+j),Y=s(u+"\\:"+Z+s("\\?"+W)+"?"+s("\\#"+U)+"?"),K=s(s("\\/\\/"+O+D)+"|"+V+"|"+B+"|"+j),q=s(K+s("\\?"+W)+"?"+s("\\#"+U)+"?");return s(Y+"|"+q),s(u+"\\:"+Z+s("\\?"+W)+"?"),s(s("\\/\\/("+s("("+d+")@")+"?("+L+")"+s("\\:("+P+")")+"?)")+"?("+D+"|"+V+"|"+H+"|"+j+")"),s("\\?("+W+")"),s("\\#("+U+")"),s(s("\\/\\/("+s("("+d+")@")+"?("+L+")"+s("\\:("+P+")")+"?)")+"?("+D+"|"+V+"|"+B+"|"+j+")"),s("\\?("+W+")"),s("\\#("+U+")"),s(s("\\/\\/("+s("("+d+")@")+"?("+L+")"+s("\\:("+P+")")+"?)")+"?("+D+"|"+V+"|"+H+"|"+j+")"),s("\\?("+W+")"),s("\\#("+U+")"),s("("+d+")@"),s("\\:("+P+")"),{NOT_SCHEME:new RegExp(t("[^]",n,r,"[\\+\\-\\.]"),"g"),NOT_USERINFO:new RegExp(t("[^\\%\\:]",h,a),"g"),NOT_HOST:new RegExp(t("[^\\%\\[\\]\\:]",h,a),"g"),NOT_PATH:new RegExp(t("[^\\%\\/\\:\\@]",h,a),"g"),NOT_PATH_NOSCHEME:new RegExp(t("[^\\%\\/\\@]",h,a),"g"),NOT_QUERY:new RegExp(t("[^\\%]",h,a,"[\\:\\@\\/\\?]",c),"g"),NOT_FRAGMENT:new RegExp(t("[^\\%]",h,a,"[\\:\\@\\/\\?]"),"g"),ESCAPE:new RegExp(t("[^]",h,a),"g"),UNRESERVED:new RegExp(h,"g"),OTHER_CHARS:new RegExp(t("[^\\%]",h,l),"g"),PCT_ENCODED:new RegExp(o,"g"),IPV4ADDRESS:new RegExp("^("+m+")$"),IPV6ADDRESS:new RegExp("^\\[?("+_+")"+s(s("\\%25|\\%(?!"+i+"{2})")+"("+T+")")+"?\\]?$")}}var o=i(!1),a=i(!0),l=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var s=[],n=!0,r=!1,i=void 0;try{for(var o,a=e[Symbol.iterator]();!(n=(o=a.next()).done)&&(s.push(o.value),!t||s.length!==t);n=!0);}catch(e){r=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw i}}return s}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},c=2147483647,h=36,u=/^xn--/,d=/[^\0-\x7E]/,p=/[\x2E\u3002\uFF0E\uFF61]/g,m={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},f=Math.floor,g=String.fromCharCode;function y(e){throw new RangeError(m[e])}function b(e,t){var s=e.split("@"),n="";return s.length>1&&(n=s[0]+"@",e=s[1]),n+function(e,t){for(var s=[],n=e.length;n--;)s[n]=t(e[n]);return s}((e=e.replace(p,".")).split("."),t).join(".")}function v(e){for(var t=[],s=0,n=e.length;s<n;){var r=e.charCodeAt(s++);if(r>=55296&&r<=56319&&s<n){var i=e.charCodeAt(s++);56320==(64512&i)?t.push(((1023&r)<<10)+(1023&i)+65536):(t.push(r),s--)}else t.push(r)}return t}var w=function(e,t){return e+22+75*(e<26)-((0!=t)<<5)},C=function(e,t,s){var n=0;for(e=s?f(e/700):e>>1,e+=f(e/t);e>455;n+=h)e=f(e/35);return f(n+36*e/(e+38))},S=function(e){var t,s=[],n=e.length,r=0,i=128,o=72,a=e.lastIndexOf("-");a<0&&(a=0);for(var l=0;l<a;++l)e.charCodeAt(l)>=128&&y("not-basic"),s.push(e.charCodeAt(l));for(var u=a>0?a+1:0;u<n;){for(var d=r,p=1,m=h;;m+=h){u>=n&&y("invalid-input");var g=(t=e.charCodeAt(u++))-48<10?t-22:t-65<26?t-65:t-97<26?t-97:h;(g>=h||g>f((c-r)/p))&&y("overflow"),r+=g*p;var b=m<=o?1:m>=o+26?26:m-o;if(g<b)break;var v=h-b;p>f(c/v)&&y("overflow"),p*=v}var w=s.length+1;o=C(r-d,w,0==d),f(r/w)>c-i&&y("overflow"),i+=f(r/w),r%=w,s.splice(r++,0,i)}return String.fromCodePoint.apply(String,s)},x=function(e){var t=[],s=(e=v(e)).length,n=128,r=0,i=72,o=!0,a=!1,l=void 0;try{for(var u,d=e[Symbol.iterator]();!(o=(u=d.next()).done);o=!0){var p=u.value;p<128&&t.push(g(p))}}catch(e){a=!0,l=e}finally{try{!o&&d.return&&d.return()}finally{if(a)throw l}}var m=t.length,b=m;for(m&&t.push("-");b<s;){var S=c,x=!0,A=!1,E=void 0;try{for(var _,T=e[Symbol.iterator]();!(x=(_=T.next()).done);x=!0){var I=_.value;I>=n&&I<S&&(S=I)}}catch(e){A=!0,E=e}finally{try{!x&&T.return&&T.return()}finally{if(A)throw E}}var $=b+1;S-n>f((c-r)/$)&&y("overflow"),r+=(S-n)*$,n=S;var M=!0,N=!1,L=void 0;try{for(var P,O=e[Symbol.iterator]();!(M=(P=O.next()).done);M=!0){var R=P.value;if(R<n&&++r>c&&y("overflow"),R==n){for(var k=r,F=h;;F+=h){var G=F<=i?1:F>=i+26?26:F-i;if(k<G)break;var D=k-G,V=h-G;t.push(g(w(G+D%V,0))),k=f(D/V)}t.push(g(w(k,0))),i=C(r,$,b==m),r=0,++b}}}catch(e){N=!0,L=e}finally{try{!M&&O.return&&O.return()}finally{if(N)throw L}}++r,++n}return t.join("")},A={version:"2.1.0",ucs2:{decode:v,encode:function(e){return String.fromCodePoint.apply(String,function(e){if(Array.isArray(e)){for(var t=0,s=Array(e.length);t<e.length;t++)s[t]=e[t];return s}return Array.from(e)}(e))}},decode:S,encode:x,toASCII:function(e){return b(e,(function(e){return d.test(e)?"xn--"+x(e):e}))},toUnicode:function(e){return b(e,(function(e){return u.test(e)?S(e.slice(4).toLowerCase()):e}))}},E={};function _(e){var t=e.charCodeAt(0);return t<16?"%0"+t.toString(16).toUpperCase():t<128?"%"+t.toString(16).toUpperCase():t<2048?"%"+(t>>6|192).toString(16).toUpperCase()+"%"+(63&t|128).toString(16).toUpperCase():"%"+(t>>12|224).toString(16).toUpperCase()+"%"+(t>>6&63|128).toString(16).toUpperCase()+"%"+(63&t|128).toString(16).toUpperCase()}function T(e){for(var t="",s=0,n=e.length;s<n;){var r=parseInt(e.substr(s+1,2),16);if(r<128)t+=String.fromCharCode(r),s+=3;else if(r>=194&&r<224){if(n-s>=6){var i=parseInt(e.substr(s+4,2),16);t+=String.fromCharCode((31&r)<<6|63&i)}else t+=e.substr(s,6);s+=6}else if(r>=224){if(n-s>=9){var o=parseInt(e.substr(s+4,2),16),a=parseInt(e.substr(s+7,2),16);t+=String.fromCharCode((15&r)<<12|(63&o)<<6|63&a)}else t+=e.substr(s,9);s+=9}else t+=e.substr(s,3),s+=3}return t}function I(e,t){function s(e){var s=T(e);return s.match(t.UNRESERVED)?s:e}return e.scheme&&(e.scheme=String(e.scheme).replace(t.PCT_ENCODED,s).toLowerCase().replace(t.NOT_SCHEME,"")),void 0!==e.userinfo&&(e.userinfo=String(e.userinfo).replace(t.PCT_ENCODED,s).replace(t.NOT_USERINFO,_).replace(t.PCT_ENCODED,r)),void 0!==e.host&&(e.host=String(e.host).replace(t.PCT_ENCODED,s).toLowerCase().replace(t.NOT_HOST,_).replace(t.PCT_ENCODED,r)),void 0!==e.path&&(e.path=String(e.path).replace(t.PCT_ENCODED,s).replace(e.scheme?t.NOT_PATH:t.NOT_PATH_NOSCHEME,_).replace(t.PCT_ENCODED,r)),void 0!==e.query&&(e.query=String(e.query).replace(t.PCT_ENCODED,s).replace(t.NOT_QUERY,_).replace(t.PCT_ENCODED,r)),void 0!==e.fragment&&(e.fragment=String(e.fragment).replace(t.PCT_ENCODED,s).replace(t.NOT_FRAGMENT,_).replace(t.PCT_ENCODED,r)),e}function $(e){return e.replace(/^0*(.*)/,"$1")||"0"}function M(e,t){var s=e.match(t.IPV4ADDRESS)||[],n=l(s,2)[1];return n?n.split(".").map($).join("."):e}function N(e,t){var s=e.match(t.IPV6ADDRESS)||[],n=l(s,3),r=n[1],i=n[2];if(r){for(var o=r.toLowerCase().split("::").reverse(),a=l(o,2),c=a[0],h=a[1],u=h?h.split(":").map($):[],d=c.split(":").map($),p=t.IPV4ADDRESS.test(d[d.length-1]),m=p?7:8,f=d.length-m,g=Array(m),y=0;y<m;++y)g[y]=u[y]||d[f+y]||"";p&&(g[m-1]=M(g[m-1],t));var b=g.reduce((function(e,t,s){if(!t||"0"===t){var n=e[e.length-1];n&&n.index+n.length===s?n.length++:e.push({index:s,length:1})}return e}),[]).sort((function(e,t){return t.length-e.length}))[0],v=void 0;if(b&&b.length>1){var w=g.slice(0,b.index),C=g.slice(b.index+b.length);v=w.join(":")+"::"+C.join(":")}else v=g.join(":");return i&&(v+="%"+i),v}return e}var L=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,P=void 0==="".match(/(){0}/)[1];function O(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s={},n=!1!==t.iri?a:o;"suffix"===t.reference&&(e=(t.scheme?t.scheme+":":"")+"//"+e);var r=e.match(L);if(r){P?(s.scheme=r[1],s.userinfo=r[3],s.host=r[4],s.port=parseInt(r[5],10),s.path=r[6]||"",s.query=r[7],s.fragment=r[8],isNaN(s.port)&&(s.port=r[5])):(s.scheme=r[1]||void 0,s.userinfo=-1!==e.indexOf("@")?r[3]:void 0,s.host=-1!==e.indexOf("//")?r[4]:void 0,s.port=parseInt(r[5],10),s.path=r[6]||"",s.query=-1!==e.indexOf("?")?r[7]:void 0,s.fragment=-1!==e.indexOf("#")?r[8]:void 0,isNaN(s.port)&&(s.port=e.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?r[4]:void 0)),s.host&&(s.host=N(M(s.host,n),n)),void 0!==s.scheme||void 0!==s.userinfo||void 0!==s.host||void 0!==s.port||s.path||void 0!==s.query?void 0===s.scheme?s.reference="relative":void 0===s.fragment?s.reference="absolute":s.reference="uri":s.reference="same-document",t.reference&&"suffix"!==t.reference&&t.reference!==s.reference&&(s.error=s.error||"URI is not a "+t.reference+" reference.");var i=E[(t.scheme||s.scheme||"").toLowerCase()];if(t.unicodeSupport||i&&i.unicodeSupport)I(s,n);else{if(s.host&&(t.domainHost||i&&i.domainHost))try{s.host=A.toASCII(s.host.replace(n.PCT_ENCODED,T).toLowerCase())}catch(e){s.error=s.error||"Host's domain name can not be converted to ASCII via punycode: "+e}I(s,o)}i&&i.parse&&i.parse(s,t)}else s.error=s.error||"URI can not be parsed.";return s}var R=/^\.\.?\//,k=/^\/\.(\/|$)/,F=/^\/\.\.(\/|$)/,G=/^\/?(?:.|\n)*?(?=\/|$)/;function D(e){for(var t=[];e.length;)if(e.match(R))e=e.replace(R,"");else if(e.match(k))e=e.replace(k,"/");else if(e.match(F))e=e.replace(F,"/"),t.pop();else if("."===e||".."===e)e="";else{var s=e.match(G);if(!s)throw new Error("Unexpected dot segment condition");var n=s[0];e=e.slice(n.length),t.push(n)}return t.join("")}function V(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=t.iri?a:o,n=[],r=E[(t.scheme||e.scheme||"").toLowerCase()];if(r&&r.serialize&&r.serialize(e,t),e.host)if(s.IPV6ADDRESS.test(e.host));else if(t.domainHost||r&&r.domainHost)try{e.host=t.iri?A.toUnicode(e.host):A.toASCII(e.host.replace(s.PCT_ENCODED,T).toLowerCase())}catch(s){e.error=e.error||"Host's domain name can not be converted to "+(t.iri?"Unicode":"ASCII")+" via punycode: "+s}I(e,s),"suffix"!==t.reference&&e.scheme&&(n.push(e.scheme),n.push(":"));var i=function(e,t){var s=!1!==t.iri?a:o,n=[];return void 0!==e.userinfo&&(n.push(e.userinfo),n.push("@")),void 0!==e.host&&n.push(N(M(String(e.host),s),s).replace(s.IPV6ADDRESS,(function(e,t,s){return"["+t+(s?"%25"+s:"")+"]"}))),"number"!=typeof e.port&&"string"!=typeof e.port||(n.push(":"),n.push(String(e.port))),n.length?n.join(""):void 0}(e,t);if(void 0!==i&&("suffix"!==t.reference&&n.push("//"),n.push(i),e.path&&"/"!==e.path.charAt(0)&&n.push("/")),void 0!==e.path){var l=e.path;t.absolutePath||r&&r.absolutePath||(l=D(l)),void 0===i&&(l=l.replace(/^\/\//,"/%2F")),n.push(l)}return void 0!==e.query&&(n.push("?"),n.push(e.query)),void 0!==e.fragment&&(n.push("#"),n.push(e.fragment)),n.join("")}function B(e,t){var s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n={};return arguments[3]||(e=O(V(e,s),s),t=O(V(t,s),s)),!(s=s||{}).tolerant&&t.scheme?(n.scheme=t.scheme,n.userinfo=t.userinfo,n.host=t.host,n.port=t.port,n.path=D(t.path||""),n.query=t.query):(void 0!==t.userinfo||void 0!==t.host||void 0!==t.port?(n.userinfo=t.userinfo,n.host=t.host,n.port=t.port,n.path=D(t.path||""),n.query=t.query):(t.path?("/"===t.path.charAt(0)?n.path=D(t.path):(void 0===e.userinfo&&void 0===e.host&&void 0===e.port||e.path?e.path?n.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+t.path:n.path=t.path:n.path="/"+t.path,n.path=D(n.path)),n.query=t.query):(n.path=e.path,void 0!==t.query?n.query=t.query:n.query=e.query),n.userinfo=e.userinfo,n.host=e.host,n.port=e.port),n.scheme=e.scheme),n.fragment=t.fragment,n}function H(e,t){return e&&e.toString().replace(t&&t.iri?a.PCT_ENCODED:o.PCT_ENCODED,T)}var j={scheme:"http",domainHost:!0,parse:function(e,t){return e.host||(e.error=e.error||"HTTP URIs must have a host."),e},serialize:function(e,t){var s="https"===String(e.scheme).toLowerCase();return e.port!==(s?443:80)&&""!==e.port||(e.port=void 0),e.path||(e.path="/"),e}},W={scheme:"https",domainHost:j.domainHost,parse:j.parse,serialize:j.serialize};function U(e){return"boolean"==typeof e.secure?e.secure:"wss"===String(e.scheme).toLowerCase()}var Z={scheme:"ws",domainHost:!0,parse:function(e,t){var s=e;return s.secure=U(s),s.resourceName=(s.path||"/")+(s.query?"?"+s.query:""),s.path=void 0,s.query=void 0,s},serialize:function(e,t){if(e.port!==(U(e)?443:80)&&""!==e.port||(e.port=void 0),"boolean"==typeof e.secure&&(e.scheme=e.secure?"wss":"ws",e.secure=void 0),e.resourceName){var s=e.resourceName.split("?"),n=l(s,2),r=n[0],i=n[1];e.path=r&&"/"!==r?r:void 0,e.query=i,e.resourceName=void 0}return e.fragment=void 0,e}},Y={scheme:"wss",domainHost:Z.domainHost,parse:Z.parse,serialize:Z.serialize},K={},q="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",z="[0-9A-Fa-f]",X=s(s("%[EFef]"+z+"%"+z+z+"%"+z+z)+"|"+s("%[89A-Fa-f]"+z+"%"+z+z)+"|"+s("%"+z+z)),J=t("[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",'[\\"\\\\]'),Q=new RegExp(q,"g"),ee=new RegExp(X,"g"),te=new RegExp(t("[^]","[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]","[\\.]",'[\\"]',J),"g"),se=new RegExp(t("[^]",q,"[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"),"g"),ne=se;function re(e){var t=T(e);return t.match(Q)?t:e}var ie={scheme:"mailto",parse:function(e,t){var s=e,n=s.to=s.path?s.path.split(","):[];if(s.path=void 0,s.query){for(var r=!1,i={},o=s.query.split("&"),a=0,l=o.length;a<l;++a){var c=o[a].split("=");switch(c[0]){case"to":for(var h=c[1].split(","),u=0,d=h.length;u<d;++u)n.push(h[u]);break;case"subject":s.subject=H(c[1],t);break;case"body":s.body=H(c[1],t);break;default:r=!0,i[H(c[0],t)]=H(c[1],t)}}r&&(s.headers=i)}s.query=void 0;for(var p=0,m=n.length;p<m;++p){var f=n[p].split("@");if(f[0]=H(f[0]),t.unicodeSupport)f[1]=H(f[1],t).toLowerCase();else try{f[1]=A.toASCII(H(f[1],t).toLowerCase())}catch(e){s.error=s.error||"Email address's domain name can not be converted to ASCII via punycode: "+e}n[p]=f.join("@")}return s},serialize:function(e,t){var s,n=e,i=null!=(s=e.to)?s instanceof Array?s:"number"!=typeof s.length||s.split||s.setInterval||s.call?[s]:Array.prototype.slice.call(s):[];if(i){for(var o=0,a=i.length;o<a;++o){var l=String(i[o]),c=l.lastIndexOf("@"),h=l.slice(0,c).replace(ee,re).replace(ee,r).replace(te,_),u=l.slice(c+1);try{u=t.iri?A.toUnicode(u):A.toASCII(H(u,t).toLowerCase())}catch(e){n.error=n.error||"Email address's domain name can not be converted to "+(t.iri?"Unicode":"ASCII")+" via punycode: "+e}i[o]=h+"@"+u}n.path=i.join(",")}var d=e.headers=e.headers||{};e.subject&&(d.subject=e.subject),e.body&&(d.body=e.body);var p=[];for(var m in d)d[m]!==K[m]&&p.push(m.replace(ee,re).replace(ee,r).replace(se,_)+"="+d[m].replace(ee,re).replace(ee,r).replace(ne,_));return p.length&&(n.query=p.join("&")),n}},oe=/^([^\:]+)\:(.*)/,ae={scheme:"urn",parse:function(e,t){var s=e.path&&e.path.match(oe),n=e;if(s){var r=t.scheme||n.scheme||"urn",i=s[1].toLowerCase(),o=s[2],a=r+":"+(t.nid||i),l=E[a];n.nid=i,n.nss=o,n.path=void 0,l&&(n=l.parse(n,t))}else n.error=n.error||"URN can not be parsed.";return n},serialize:function(e,t){var s=t.scheme||e.scheme||"urn",n=e.nid,r=s+":"+(t.nid||n),i=E[r];i&&(e=i.serialize(e,t));var o=e,a=e.nss;return o.path=(n||t.nid)+":"+a,o}},le=/^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/,ce={scheme:"urn:uuid",parse:function(e,t){var s=e;return s.uuid=s.nss,s.nss=void 0,t.tolerant||s.uuid&&s.uuid.match(le)||(s.error=s.error||"UUID is not valid."),s},serialize:function(e,t){var s=e;return s.nss=(e.uuid||"").toLowerCase(),s}};E[j.scheme]=j,E[W.scheme]=W,E[Z.scheme]=Z,E[Y.scheme]=Y,E[ie.scheme]=ie,E[ae.scheme]=ae,E[ce.scheme]=ce,e.SCHEMES=E,e.pctEncChar=_,e.pctDecChars=T,e.parse=O,e.removeDotSegments=D,e.serialize=V,e.resolveComponents=B,e.resolve=function(e,t,s){var n=function(e,t){var s=e;if(t)for(var n in t)s[n]=t[n];return s}({scheme:"null"},s);return V(B(O(e,n),O(t,n),n,!0),n)},e.normalize=function(e,t){return"string"==typeof e?e=V(O(e,t),t):"object"===n(e)&&(e=O(V(e,t),t)),e},e.equal=function(e,t,s){return"string"==typeof e?e=V(O(e,s),s):"object"===n(e)&&(e=V(e,s)),"string"==typeof t?t=V(O(t,s),s):"object"===n(t)&&(t=V(t,s)),e===t},e.escapeComponent=function(e,t){return e&&e.toString().replace(t&&t.iri?a.ESCAPE:o.ESCAPE,_)},e.unescapeComponent=H,Object.defineProperty(e,"__esModule",{value:!0})}(t)},3336:e=>{"use strict";e.exports=$},976:e=>{"use strict";e.exports=DG},4469:e=>{"use strict";e.exports=grok},701:e=>{"use strict";e.exports=rxjs},442:e=>{"use strict";e.exports=rxjs.operators},3870:e=>{"use strict";e.exports=ui},6414:e=>{"use strict";e.exports=wu},4775:e=>{"use strict";e.exports=JSON.parse('{"$id":"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#","description":"Meta-schema for $data reference (JSON AnySchema extension proposal)","type":"object","required":["$data"],"properties":{"$data":{"type":"string","anyOf":[{"format":"relative-json-pointer"},{"format":"json-pointer"}]}},"additionalProperties":false}')},996:e=>{"use strict";e.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/applicator","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/applicator":true},"$dynamicAnchor":"meta","title":"Applicator vocabulary meta-schema","type":["object","boolean"],"properties":{"prefixItems":{"$ref":"#/$defs/schemaArray"},"items":{"$dynamicRef":"#meta"},"contains":{"$dynamicRef":"#meta"},"additionalProperties":{"$dynamicRef":"#meta"},"properties":{"type":"object","additionalProperties":{"$dynamicRef":"#meta"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$dynamicRef":"#meta"},"propertyNames":{"format":"regex"},"default":{}},"dependentSchemas":{"type":"object","additionalProperties":{"$dynamicRef":"#meta"},"default":{}},"propertyNames":{"$dynamicRef":"#meta"},"if":{"$dynamicRef":"#meta"},"then":{"$dynamicRef":"#meta"},"else":{"$dynamicRef":"#meta"},"allOf":{"$ref":"#/$defs/schemaArray"},"anyOf":{"$ref":"#/$defs/schemaArray"},"oneOf":{"$ref":"#/$defs/schemaArray"},"not":{"$dynamicRef":"#meta"}},"$defs":{"schemaArray":{"type":"array","minItems":1,"items":{"$dynamicRef":"#meta"}}}}')},6795:e=>{"use strict";e.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/content","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/content":true},"$dynamicAnchor":"meta","title":"Content vocabulary meta-schema","type":["object","boolean"],"properties":{"contentEncoding":{"type":"string"},"contentMediaType":{"type":"string"},"contentSchema":{"$dynamicRef":"#meta"}}}')},235:e=>{"use strict";e.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/core","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/core":true},"$dynamicAnchor":"meta","title":"Core vocabulary meta-schema","type":["object","boolean"],"properties":{"$id":{"$ref":"#/$defs/uriReferenceString","$comment":"Non-empty fragments not allowed.","pattern":"^[^#]*#?$"},"$schema":{"$ref":"#/$defs/uriString"},"$ref":{"$ref":"#/$defs/uriReferenceString"},"$anchor":{"$ref":"#/$defs/anchorString"},"$dynamicRef":{"$ref":"#/$defs/uriReferenceString"},"$dynamicAnchor":{"$ref":"#/$defs/anchorString"},"$vocabulary":{"type":"object","propertyNames":{"$ref":"#/$defs/uriString"},"additionalProperties":{"type":"boolean"}},"$comment":{"type":"string"},"$defs":{"type":"object","additionalProperties":{"$dynamicRef":"#meta"}}},"$defs":{"anchorString":{"type":"string","pattern":"^[A-Za-z_][-A-Za-z0-9._]*$"},"uriString":{"type":"string","format":"uri"},"uriReferenceString":{"type":"string","format":"uri-reference"}}}')},2567:e=>{"use strict";e.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/format-annotation","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/format-annotation":true},"$dynamicAnchor":"meta","title":"Format vocabulary meta-schema for annotation results","type":["object","boolean"],"properties":{"format":{"type":"string"}}}')},1233:e=>{"use strict";e.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/meta-data","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/meta-data":true},"$dynamicAnchor":"meta","title":"Meta-data vocabulary meta-schema","type":["object","boolean"],"properties":{"title":{"type":"string"},"description":{"type":"string"},"default":true,"deprecated":{"type":"boolean","default":false},"readOnly":{"type":"boolean","default":false},"writeOnly":{"type":"boolean","default":false},"examples":{"type":"array","items":true}}}')},5568:e=>{"use strict";e.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/unevaluated","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/unevaluated":true},"$dynamicAnchor":"meta","title":"Unevaluated applicator vocabulary meta-schema","type":["object","boolean"],"properties":{"unevaluatedItems":{"$dynamicRef":"#meta"},"unevaluatedProperties":{"$dynamicRef":"#meta"}}}')},1968:e=>{"use strict";e.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/validation","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/validation":true},"$dynamicAnchor":"meta","title":"Validation vocabulary meta-schema","type":["object","boolean"],"properties":{"type":{"anyOf":[{"$ref":"#/$defs/simpleTypes"},{"type":"array","items":{"$ref":"#/$defs/simpleTypes"},"minItems":1,"uniqueItems":true}]},"const":true,"enum":{"type":"array","items":true},"multipleOf":{"type":"number","exclusiveMinimum":0},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"number"},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"number"},"maxLength":{"$ref":"#/$defs/nonNegativeInteger"},"minLength":{"$ref":"#/$defs/nonNegativeIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"maxItems":{"$ref":"#/$defs/nonNegativeInteger"},"minItems":{"$ref":"#/$defs/nonNegativeIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"maxContains":{"$ref":"#/$defs/nonNegativeInteger"},"minContains":{"$ref":"#/$defs/nonNegativeInteger","default":1},"maxProperties":{"$ref":"#/$defs/nonNegativeInteger"},"minProperties":{"$ref":"#/$defs/nonNegativeIntegerDefault0"},"required":{"$ref":"#/$defs/stringArray"},"dependentRequired":{"type":"object","additionalProperties":{"$ref":"#/$defs/stringArray"}}},"$defs":{"nonNegativeInteger":{"type":"integer","minimum":0},"nonNegativeIntegerDefault0":{"$ref":"#/$defs/nonNegativeInteger","default":0},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"uniqueItems":true,"default":[]}}}')},2577:e=>{"use strict";e.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/schema","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/core":true,"https://json-schema.org/draft/2020-12/vocab/applicator":true,"https://json-schema.org/draft/2020-12/vocab/unevaluated":true,"https://json-schema.org/draft/2020-12/vocab/validation":true,"https://json-schema.org/draft/2020-12/vocab/meta-data":true,"https://json-schema.org/draft/2020-12/vocab/format-annotation":true,"https://json-schema.org/draft/2020-12/vocab/content":true},"$dynamicAnchor":"meta","title":"Core and Validation specifications meta-schema","allOf":[{"$ref":"meta/core"},{"$ref":"meta/applicator"},{"$ref":"meta/unevaluated"},{"$ref":"meta/validation"},{"$ref":"meta/meta-data"},{"$ref":"meta/format-annotation"},{"$ref":"meta/content"}],"type":["object","boolean"],"$comment":"This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.","properties":{"definitions":{"$comment":"\\"definitions\\" has been replaced by \\"$defs\\".","type":"object","additionalProperties":{"$dynamicRef":"#meta"},"deprecated":true,"default":{}},"dependencies":{"$comment":"\\"dependencies\\" has been split and replaced by \\"dependentSchemas\\" and \\"dependentRequired\\" in order to serve their differing semantics.","type":"object","additionalProperties":{"anyOf":[{"$dynamicRef":"#meta"},{"$ref":"meta/validation#/$defs/stringArray"}]},"deprecated":true,"default":{}},"$recursiveAnchor":{"$comment":"\\"$recursiveAnchor\\" has been replaced by \\"$dynamicAnchor\\".","$ref":"meta/core#/$defs/anchorString","deprecated":true},"$recursiveRef":{"$comment":"\\"$recursiveRef\\" has been replaced by \\"$dynamicRef\\".","$ref":"meta/core#/$defs/uriReferenceString","deprecated":true}}}')},98:e=>{"use strict";e.exports=JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#","$id":"http://json-schema.org/draft-07/schema#","title":"Core schema meta-schema","definitions":{"schemaArray":{"type":"array","minItems":1,"items":{"$ref":"#"}},"nonNegativeInteger":{"type":"integer","minimum":0},"nonNegativeIntegerDefault0":{"allOf":[{"$ref":"#/definitions/nonNegativeInteger"},{"default":0}]},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"uniqueItems":true,"default":[]}},"type":["object","boolean"],"properties":{"$id":{"type":"string","format":"uri-reference"},"$schema":{"type":"string","format":"uri"},"$ref":{"type":"string","format":"uri-reference"},"$comment":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"default":true,"readOnly":{"type":"boolean","default":false},"examples":{"type":"array","items":true},"multipleOf":{"type":"number","exclusiveMinimum":0},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"number"},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"number"},"maxLength":{"$ref":"#/definitions/nonNegativeInteger"},"minLength":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"additionalItems":{"$ref":"#"},"items":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/schemaArray"}],"default":true},"maxItems":{"$ref":"#/definitions/nonNegativeInteger"},"minItems":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"contains":{"$ref":"#"},"maxProperties":{"$ref":"#/definitions/nonNegativeInteger"},"minProperties":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"required":{"$ref":"#/definitions/stringArray"},"additionalProperties":{"$ref":"#"},"definitions":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"properties":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$ref":"#"},"propertyNames":{"format":"regex"},"default":{}},"dependencies":{"type":"object","additionalProperties":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/stringArray"}]}},"propertyNames":{"$ref":"#"},"const":true,"enum":{"type":"array","items":true,"minItems":1,"uniqueItems":true},"type":{"anyOf":[{"$ref":"#/definitions/simpleTypes"},{"type":"array","items":{"$ref":"#/definitions/simpleTypes"},"minItems":1,"uniqueItems":true}]},"format":{"type":"string"},"contentMediaType":{"type":"string"},"contentEncoding":{"type":"string"},"if":{"$ref":"#"},"then":{"$ref":"#"},"else":{"$ref":"#"},"allOf":{"$ref":"#/definitions/schemaArray"},"anyOf":{"$ref":"#/definitions/schemaArray"},"oneOf":{"$ref":"#/definitions/schemaArray"},"not":{"$ref":"#"}},"default":true}')}},t={};function s(n){var r=t[n];if(void 0!==r)return r.exports;var i=t[n]={id:n,loaded:!1,exports:{}};return e[n].call(i.exports,i,i.exports,s),i.loaded=!0,i.exports}s.m=e,s.amdO={},s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.u=e=>e+".js",s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;s.g.importScripts&&(e=s.g.location+"");var t=s.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");if(n.length)for(var r=n.length-1;r>-1&&!e;)e=n[r--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),s.p=e})(),s.b=document.baseURI||self.location.href,s.nc=void 0;var n=s(3348);bio=n})();
8
+ deps: ${s}}`};const o={keyword:"dependencies",type:"object",schemaType:"object",error:t.error,code(e){const[t,s]=function({schema:e}){const t={},s={};for(const n in e)"__proto__"!==n&&((Array.isArray(e[n])?t:s)[n]=e[n]);return[t,s]}(e);a(e,t),l(e,s)}};function a(e,t=e.schema){const{gen:s,data:r,it:o}=e;if(0===Object.keys(t).length)return;const a=s.let("missing");for(const l in t){const c=t[l];if(0===c.length)continue;const h=(0,i.propertyInData)(s,r,l,o.opts.ownProperties);e.setParams({property:l,depsCount:c.length,deps:c.join(", ")}),o.allErrors?s.if(h,(()=>{for(const t of c)(0,i.checkReportMissingProp)(e,t)})):(s.if(n._`${h} && (${(0,i.checkMissingProp)(e,c,a)})`),(0,i.reportMissingProp)(e,a),s.else())}}function l(e,t=e.schema){const{gen:s,data:n,keyword:o,it:a}=e,l=s.name("valid");for(const c in t)(0,r.alwaysValidSchema)(a,t[c])||(s.if((0,i.propertyInData)(s,n,c,a.opts.ownProperties),(()=>{const t=e.subschema({keyword:o,schemaProp:c},l);e.mergeValidEvaluated(t,l)}),(()=>s.var(l,!0))),e.ok(l))}t.validatePropertyDeps=a,t.validateSchemaDeps=l,t.default=o},7274:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(7772),r={keyword:"dependentSchemas",type:"object",schemaType:"object",code:e=>(0,n.validateSchemaDeps)(e)};t.default=r},9434:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:{message:({params:e})=>n.str`must match "${e.ifClause}" schema`,params:({params:e})=>n._`{failingKeyword: ${e.ifClause}}`},code(e){const{gen:t,parentSchema:s,it:i}=e;void 0===s.then&&void 0===s.else&&(0,r.checkStrictMode)(i,'"if" without "then" and "else" is ignored');const a=o(i,"then"),l=o(i,"else");if(!a&&!l)return;const c=t.let("valid",!0),h=t.name("_valid");if(function(){const t=e.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},h);e.mergeEvaluated(t)}(),e.reset(),a&&l){const s=t.let("ifClause");e.setParams({ifClause:s}),t.if(h,u("then",s),u("else",s))}else a?t.if(h,u("then")):t.if((0,n.not)(h),u("else"));function u(s,r){return()=>{const i=e.subschema({keyword:s},h);t.assign(c,h),e.mergeValidEvaluated(i,c),r?t.assign(r,n._`${s}`):e.setParams({ifClause:s})}}e.pass(c,(()=>e.error(!0)))}};function o(e,t){const s=e.schema[t];return void 0!==s&&!(0,r.alwaysValidSchema)(e,s)}t.default=i},8200:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(4783),r=s(2924),i=s(4665),o=s(1119),a=s(9864),l=s(7772),c=s(3708),h=s(9351),u=s(6239),d=s(2296),p=s(2182),m=s(19),f=s(4200),g=s(1125),y=s(9434),b=s(6552);t.default=function(e=!1){const t=[p.default,m.default,f.default,g.default,y.default,b.default,c.default,h.default,l.default,u.default,d.default];return e?t.push(r.default,o.default):t.push(n.default,i.default),t.push(a.default),t}},4665:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateTuple=void 0;const n=s(3487),r=s(6776),i=s(412),o={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(e){const{schema:t,it:s}=e;if(Array.isArray(t))return a(e,"additionalItems",t);s.items=!0,(0,r.alwaysValidSchema)(s,t)||e.ok((0,i.validateArray)(e))}};function a(e,t,s=e.schema){const{gen:i,parentSchema:o,data:a,keyword:l,it:c}=e;!function(e){const{opts:n,errSchemaPath:i}=c,o=s.length,a=o===e.minItems&&(o===e.maxItems||!1===e[t]);if(n.strictTuples&&!a){const e=`"${l}" is ${o}-tuple, but minItems or maxItems/${t} are not specified or different at path "${i}"`;(0,r.checkStrictMode)(c,e,n.strictTuples)}}(o),c.opts.unevaluated&&s.length&&!0!==c.items&&(c.items=r.mergeEvaluated.items(i,s.length,c.items));const h=i.name("valid"),u=i.const("len",n._`${a}.length`);s.forEach(((t,s)=>{(0,r.alwaysValidSchema)(c,t)||(i.if(n._`${u} > ${s}`,(()=>e.subschema({keyword:l,schemaProp:s,dataProp:s},h))),e.ok(h))}))}t.validateTuple=a,t.default=o},1119:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i=s(412),o=s(4783),a={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:{message:({params:{len:e}})=>n.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>n._`{limit: ${e}}`},code(e){const{schema:t,parentSchema:s,it:n}=e,{prefixItems:a}=s;n.items=!0,(0,r.alwaysValidSchema)(n,t)||(a?(0,o.validateAdditionalItems)(e,a):e.ok((0,i.validateArray)(e)))}};t.default=a},2182:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(6776),r={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(e){const{gen:t,schema:s,it:r}=e;if((0,n.alwaysValidSchema)(r,s))return void e.fail();const i=t.name("valid");e.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},i),e.failResult(i,(()=>e.reset()),(()=>e.error()))},error:{message:"must NOT be valid"}};t.default=r},4200:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:{message:"must match exactly one schema in oneOf",params:({params:e})=>n._`{passingSchemas: ${e.passing}}`},code(e){const{gen:t,schema:s,parentSchema:i,it:o}=e;if(!Array.isArray(s))throw new Error("ajv implementation error");if(o.opts.discriminator&&i.discriminator)return;const a=s,l=t.let("valid",!1),c=t.let("passing",null),h=t.name("_valid");e.setParams({passing:c}),t.block((function(){a.forEach(((s,i)=>{let a;(0,r.alwaysValidSchema)(o,s)?t.var(h,!0):a=e.subschema({keyword:"oneOf",schemaProp:i,compositeRule:!0},h),i>0&&t.if(n._`${h} && ${l}`).assign(l,!1).assign(c,n._`[${c}, ${i}]`).else(),t.if(h,(()=>{t.assign(l,!0),t.assign(c,i),a&&e.mergeEvaluated(a,n.Name)}))}))})),e.result(l,(()=>e.reset()),(()=>e.error(!0)))}};t.default=i},2296:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(412),r=s(3487),i=s(6776),o=s(6776),a={keyword:"patternProperties",type:"object",schemaType:"object",code(e){const{gen:t,schema:s,data:a,parentSchema:l,it:c}=e,{opts:h}=c,u=(0,n.allSchemaProperties)(s),d=u.filter((e=>(0,i.alwaysValidSchema)(c,s[e])));if(0===u.length||d.length===u.length&&(!c.opts.unevaluated||!0===c.props))return;const p=h.strictSchema&&!h.allowMatchingProperties&&l.properties,m=t.name("valid");!0===c.props||c.props instanceof r.Name||(c.props=(0,o.evaluatedPropsToName)(t,c.props));const{props:f}=c;function g(e){for(const t in p)new RegExp(e).test(t)&&(0,i.checkStrictMode)(c,`property ${t} matches pattern ${e} (use allowMatchingProperties)`)}function y(s){t.forIn("key",a,(i=>{t.if(r._`${(0,n.usePattern)(e,s)}.test(${i})`,(()=>{const n=d.includes(s);n||e.subschema({keyword:"patternProperties",schemaProp:s,dataProp:i,dataPropType:o.Type.Str},m),c.opts.unevaluated&&!0!==f?t.assign(r._`${f}[${i}]`,!0):n||c.allErrors||t.if((0,r.not)(m),(()=>t.break()))}))}))}!function(){for(const e of u)p&&g(e),c.allErrors?y(e):(t.var(m,!0),y(e),t.if(m))}()}};t.default=a},2924:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(4665),r={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:e=>(0,n.validateTuple)(e,"items")};t.default=r},6239:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(4815),r=s(412),i=s(6776),o=s(9351),a={keyword:"properties",type:"object",schemaType:"object",code(e){const{gen:t,schema:s,parentSchema:a,data:l,it:c}=e;"all"===c.opts.removeAdditional&&void 0===a.additionalProperties&&o.default.code(new n.KeywordCxt(c,o.default,"additionalProperties"));const h=(0,r.allSchemaProperties)(s);for(const e of h)c.definedProperties.add(e);c.opts.unevaluated&&h.length&&!0!==c.props&&(c.props=i.mergeEvaluated.props(t,(0,i.toHash)(h),c.props));const u=h.filter((e=>!(0,i.alwaysValidSchema)(c,s[e])));if(0===u.length)return;const d=t.name("valid");for(const s of u)p(s)?m(s):(t.if((0,r.propertyInData)(t,l,s,c.opts.ownProperties)),m(s),c.allErrors||t.else().var(d,!0),t.endIf()),e.it.definedProperties.add(s),e.ok(d);function p(e){return c.opts.useDefaults&&!c.compositeRule&&void 0!==s[e].default}function m(t){e.subschema({keyword:"properties",schemaProp:t,dataProp:t},d)}}};t.default=a},3708:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:{message:"property name must be valid",params:({params:e})=>n._`{propertyName: ${e.propertyName}}`},code(e){const{gen:t,schema:s,data:i,it:o}=e;if((0,r.alwaysValidSchema)(o,s))return;const a=t.name("valid");t.forIn("key",i,(s=>{e.setParams({propertyName:s}),e.subschema({keyword:"propertyNames",data:s,dataTypes:["string"],propertyName:s,compositeRule:!0},a),t.if((0,n.not)(a),(()=>{e.error(!0),o.allErrors||t.break()}))})),e.ok(a)}};t.default=i},6552:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(6776),r={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:e,parentSchema:t,it:s}){void 0===t.if&&(0,n.checkStrictMode)(s,`"${e}" without "if" is ignored`)}};t.default=r},412:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateUnion=t.validateArray=t.usePattern=t.callValidateCode=t.schemaProperties=t.allSchemaProperties=t.noPropertyInData=t.propertyInData=t.isOwnProperty=t.hasPropFunc=t.reportMissingProp=t.checkMissingProp=t.checkReportMissingProp=void 0;const n=s(3487),r=s(6776),i=s(2141),o=s(6776);function a(e){return e.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:n._`Object.prototype.hasOwnProperty`})}function l(e,t,s){return n._`${a(e)}.call(${t}, ${s})`}function c(e,t,s,r){const i=n._`${t}${(0,n.getProperty)(s)} === undefined`;return r?(0,n.or)(i,(0,n.not)(l(e,t,s))):i}function h(e){return e?Object.keys(e).filter((e=>"__proto__"!==e)):[]}t.checkReportMissingProp=function(e,t){const{gen:s,data:r,it:i}=e;s.if(c(s,r,t,i.opts.ownProperties),(()=>{e.setParams({missingProperty:n._`${t}`},!0),e.error()}))},t.checkMissingProp=function({gen:e,data:t,it:{opts:s}},r,i){return(0,n.or)(...r.map((r=>(0,n.and)(c(e,t,r,s.ownProperties),n._`${i} = ${r}`))))},t.reportMissingProp=function(e,t){e.setParams({missingProperty:t},!0),e.error()},t.hasPropFunc=a,t.isOwnProperty=l,t.propertyInData=function(e,t,s,r){const i=n._`${t}${(0,n.getProperty)(s)} !== undefined`;return r?n._`${i} && ${l(e,t,s)}`:i},t.noPropertyInData=c,t.allSchemaProperties=h,t.schemaProperties=function(e,t){return h(t).filter((s=>!(0,r.alwaysValidSchema)(e,t[s])))},t.callValidateCode=function({schemaCode:e,data:t,it:{gen:s,topSchemaRef:r,schemaPath:o,errorPath:a},it:l},c,h,u){const d=u?n._`${e}, ${t}, ${r}${o}`:t,p=[[i.default.instancePath,(0,n.strConcat)(i.default.instancePath,a)],[i.default.parentData,l.parentData],[i.default.parentDataProperty,l.parentDataProperty],[i.default.rootData,i.default.rootData]];l.opts.dynamicRef&&p.push([i.default.dynamicAnchors,i.default.dynamicAnchors]);const m=n._`${d}, ${s.object(...p)}`;return h!==n.nil?n._`${c}.call(${h}, ${m})`:n._`${c}(${m})`};const u=n._`new RegExp`;t.usePattern=function({gen:e,it:{opts:t}},s){const r=t.unicodeRegExp?"u":"",{regExp:i}=t.code,a=i(s,r);return e.scopeValue("pattern",{key:a.toString(),ref:a,code:n._`${"new RegExp"===i.code?u:(0,o.useFunc)(e,i)}(${s}, ${r})`})},t.validateArray=function(e){const{gen:t,data:s,keyword:i,it:o}=e,a=t.name("valid");if(o.allErrors){const e=t.let("valid",!0);return l((()=>t.assign(e,!1))),e}return t.var(a,!0),l((()=>t.break())),a;function l(o){const l=t.const("len",n._`${s}.length`);t.forRange("i",0,l,(s=>{e.subschema({keyword:i,dataProp:s,dataPropType:r.Type.Num},a),t.if((0,n.not)(a),o)}))}},t.validateUnion=function(e){const{gen:t,schema:s,keyword:i,it:o}=e;if(!Array.isArray(s))throw new Error("ajv implementation error");if(s.some((e=>(0,r.alwaysValidSchema)(o,e)))&&!o.opts.unevaluated)return;const a=t.let("valid",!1),l=t.name("_valid");t.block((()=>s.forEach(((s,r)=>{const o=e.subschema({keyword:i,schemaProp:r,compositeRule:!0},l);t.assign(a,n._`${a} || ${l}`),e.mergeValidEvaluated(o,l)||t.if((0,n.not)(a))})))),e.result(a,(()=>e.reset()),(()=>e.error(!0)))}},8386:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};t.default=s},5684:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(8386),r=s(8280),i=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",n.default,r.default];t.default=i},8280:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.callRef=t.getValidate=void 0;const n=s(6646),r=s(412),i=s(3487),o=s(2141),a=s(5173),l=s(6776),c={keyword:"$ref",schemaType:"string",code(e){const{gen:t,schema:s,it:r}=e,{baseId:o,schemaEnv:l,validateName:c,opts:d,self:p}=r,{root:m}=l;if(("#"===s||"#/"===s)&&o===m.baseId)return function(){if(l===m)return u(e,c,l,l.$async);const s=t.scopeValue("root",{ref:m});return u(e,i._`${s}.validate`,m,m.$async)}();const f=a.resolveRef.call(p,m,o,s);if(void 0===f)throw new n.default(r.opts.uriResolver,o,s);return f instanceof a.SchemaEnv?function(t){const s=h(e,t);u(e,s,t,t.$async)}(f):function(n){const r=t.scopeValue("schema",!0===d.code.source?{ref:n,code:(0,i.stringify)(n)}:{ref:n}),o=t.name("valid"),a=e.subschema({schema:n,dataTypes:[],schemaPath:i.nil,topSchemaRef:r,errSchemaPath:s},o);e.mergeEvaluated(a),e.ok(o)}(f)}};function h(e,t){const{gen:s}=e;return t.validate?s.scopeValue("validate",{ref:t.validate}):i._`${s.scopeValue("wrapper",{ref:t})}.validate`}function u(e,t,s,n){const{gen:a,it:c}=e,{allErrors:h,schemaEnv:u,opts:d}=c,p=d.passContext?o.default.this:i.nil;function m(e){const t=i._`${e}.errors`;a.assign(o.default.vErrors,i._`${o.default.vErrors} === null ? ${t} : ${o.default.vErrors}.concat(${t})`),a.assign(o.default.errors,i._`${o.default.vErrors}.length`)}function f(e){var t;if(!c.opts.unevaluated)return;const n=null===(t=null==s?void 0:s.validate)||void 0===t?void 0:t.evaluated;if(!0!==c.props)if(n&&!n.dynamicProps)void 0!==n.props&&(c.props=l.mergeEvaluated.props(a,n.props,c.props));else{const t=a.var("props",i._`${e}.evaluated.props`);c.props=l.mergeEvaluated.props(a,t,c.props,i.Name)}if(!0!==c.items)if(n&&!n.dynamicItems)void 0!==n.items&&(c.items=l.mergeEvaluated.items(a,n.items,c.items));else{const t=a.var("items",i._`${e}.evaluated.items`);c.items=l.mergeEvaluated.items(a,t,c.items,i.Name)}}n?function(){if(!u.$async)throw new Error("async schema referenced by sync schema");const s=a.let("valid");a.try((()=>{a.code(i._`await ${(0,r.callValidateCode)(e,t,p)}`),f(t),h||a.assign(s,!0)}),(e=>{a.if(i._`!(${e} instanceof ${c.ValidationError})`,(()=>a.throw(e))),m(e),h||a.assign(s,!1)})),e.ok(s)}():e.result((0,r.callValidateCode)(e,t,p),(()=>f(t)),(()=>m(t)))}t.getValidate=h,t.callRef=u,t.default=c},1240:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(9306),i=s(5173),o=s(6776),a={keyword:"discriminator",type:"object",schemaType:"object",error:{message:({params:{discrError:e,tagName:t}})=>e===r.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:t,tagName:s}})=>n._`{error: ${e}, tag: ${s}, tagValue: ${t}}`},code(e){const{gen:t,data:s,schema:a,parentSchema:l,it:c}=e,{oneOf:h}=l;if(!c.opts.discriminator)throw new Error("discriminator: requires discriminator option");const u=a.propertyName;if("string"!=typeof u)throw new Error("discriminator: requires propertyName");if(a.mapping)throw new Error("discriminator: mapping is not supported");if(!h)throw new Error("discriminator: requires oneOf keyword");const d=t.let("valid",!1),p=t.const("tag",n._`${s}${(0,n.getProperty)(u)}`);function m(s){const r=t.name("valid"),i=e.subschema({keyword:"oneOf",schemaProp:s},r);return e.mergeEvaluated(i,n.Name),r}t.if(n._`typeof ${p} == "string"`,(()=>function(){const s=function(){var e;const t={},s=r(l);let n=!0;for(let t=0;t<h.length;t++){let l=h[t];(null==l?void 0:l.$ref)&&!(0,o.schemaHasRulesButRef)(l,c.self.RULES)&&(l=i.resolveRef.call(c.self,c.schemaEnv.root,c.baseId,null==l?void 0:l.$ref),l instanceof i.SchemaEnv&&(l=l.schema));const d=null===(e=null==l?void 0:l.properties)||void 0===e?void 0:e[u];if("object"!=typeof d)throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${u}"`);n=n&&(s||r(l)),a(d,t)}if(!n)throw new Error(`discriminator: "${u}" must be required`);return t;function r({required:e}){return Array.isArray(e)&&e.includes(u)}function a(e,t){if(e.const)d(e.const,t);else{if(!e.enum)throw new Error(`discriminator: "properties/${u}" must have "const" or "enum"`);for(const s of e.enum)d(s,t)}}function d(e,s){if("string"!=typeof e||e in t)throw new Error(`discriminator: "${u}" values must be unique strings`);t[e]=s}}();t.if(!1);for(const e in s)t.elseIf(n._`${p} === ${e}`),t.assign(d,m(s[e]));t.else(),e.error(!1,{discrError:r.DiscrError.Mapping,tag:p,tagName:u}),t.endIf()}()),(()=>e.error(!1,{discrError:r.DiscrError.Tag,tag:p,tagName:u}))),e.ok(d)}};t.default=a},9306:(e,t)=>{"use strict";var s;Object.defineProperty(t,"__esModule",{value:!0}),t.DiscrError=void 0,(s=t.DiscrError||(t.DiscrError={})).Tag="tag",s.Mapping="mapping"},7299:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(5684),r=s(2649),i=s(8200),o=s(6121),a=s(1448),l=s(808),c=s(9502),h=s(6167),u=[o.default,n.default,r.default,(0,i.default)(!0),c.default,h.metadataVocabulary,h.contentVocabulary,a.default,l.default];t.default=u},3924:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(5684),r=s(2649),i=s(8200),o=s(9502),a=s(6167),l=[n.default,r.default,(0,i.default)(),o.default,a.metadataVocabulary,a.contentVocabulary];t.default=l},6215:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.dynamicAnchor=void 0;const n=s(3487),r=s(2141),i=s(5173),o=s(8280),a={keyword:"$dynamicAnchor",schemaType:"string",code:e=>l(e,e.schema)};function l(e,t){const{gen:s,it:a}=e;a.schemaEnv.root.dynamicAnchors[t]=!0;const l=n._`${r.default.dynamicAnchors}${(0,n.getProperty)(t)}`,c="#"===a.errSchemaPath?a.validateName:function(e){const{schemaEnv:t,schema:s,self:n}=e.it,{root:r,baseId:a,localRefs:l,meta:c}=t.root,{schemaId:h}=n.opts,u=new i.SchemaEnv({schema:s,schemaId:h,root:r,baseId:a,localRefs:l,meta:c});return i.compileSchema.call(n,u),(0,o.getValidate)(e,u)}(e);s.if(n._`!${l}`,(()=>s.assign(l,c)))}t.dynamicAnchor=l,t.default=a},1919:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.dynamicRef=void 0;const n=s(3487),r=s(2141),i=s(8280),o={keyword:"$dynamicRef",schemaType:"string",code:e=>a(e,e.schema)};function a(e,t){const{gen:s,keyword:o,it:a}=e;if("#"!==t[0])throw new Error(`"${o}" only supports hash fragment reference`);const l=t.slice(1);if(a.allErrors)c();else{const t=s.let("valid",!1);c(t),e.ok(t)}function c(e){if(a.schemaEnv.root.dynamicAnchors[l]){const t=s.let("_v",n._`${r.default.dynamicAnchors}${(0,n.getProperty)(l)}`);s.if(t,h(t,e),h(a.validateName,e))}else h(a.validateName,e)()}function h(t,n){return n?()=>s.block((()=>{(0,i.callRef)(e,t),s.let(n,!0)})):()=>(0,i.callRef)(e,t)}}t.dynamicRef=a,t.default=o},6121:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(6215),r=s(1919),i=s(4094),o=s(3944),a=[n.default,r.default,i.default,o.default];t.default=a},4094:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(6215),r=s(6776),i={keyword:"$recursiveAnchor",schemaType:"boolean",code(e){e.schema?(0,n.dynamicAnchor)(e,""):(0,r.checkStrictMode)(e.it,"$recursiveAnchor: false is ignored")}};t.default=i},3944:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(1919),r={keyword:"$recursiveRef",schemaType:"string",code:e=>(0,n.dynamicRef)(e,e.schema)};t.default=r},9651:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:{message:({schemaCode:e})=>n.str`must match format "${e}"`,params:({schemaCode:e})=>n._`{format: ${e}}`},code(e,t){const{gen:s,data:r,$data:i,schema:o,schemaCode:a,it:l}=e,{opts:c,errSchemaPath:h,schemaEnv:u,self:d}=l;c.validateFormats&&(i?function(){const i=s.scopeValue("formats",{ref:d.formats,code:c.code.formats}),o=s.const("fDef",n._`${i}[${a}]`),l=s.let("fType"),h=s.let("format");s.if(n._`typeof ${o} == "object" && !(${o} instanceof RegExp)`,(()=>s.assign(l,n._`${o}.type || "string"`).assign(h,n._`${o}.validate`)),(()=>s.assign(l,n._`"string"`).assign(h,o))),e.fail$data((0,n.or)(!1===c.strictSchema?n.nil:n._`${a} && !${h}`,function(){const e=u.$async?n._`(${o}.async ? await ${h}(${r}) : ${h}(${r}))`:n._`${h}(${r})`,s=n._`(typeof ${h} == "function" ? ${e} : ${h}.test(${r}))`;return n._`${h} && ${h} !== true && ${l} === ${t} && !${s}`}()))}():function(){const i=d.formats[o];if(!i)return void function(){if(!1!==c.strictSchema)throw new Error(e());function e(){return`unknown format "${o}" ignored in schema at path "${h}"`}d.logger.warn(e())}();if(!0===i)return;const[a,l,p]=function(e){const t=e instanceof RegExp?(0,n.regexpCode)(e):c.code.formats?n._`${c.code.formats}${(0,n.getProperty)(o)}`:void 0,r=s.scopeValue("formats",{key:o,ref:e,code:t});return"object"!=typeof e||e instanceof RegExp?["string",e,r]:[e.type||"string",e.validate,n._`${r}.validate`]}(i);a===t&&e.pass(function(){if("object"==typeof i&&!(i instanceof RegExp)&&i.async){if(!u.$async)throw new Error("async format in sync schema");return n._`await ${p}(${r})`}return"function"==typeof l?n._`${p}(${r})`:n._`${p}.test(${r})`}())}())}};t.default=r},9502:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=[s(9651).default];t.default=n},6167:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.contentVocabulary=t.metadataVocabulary=void 0,t.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"],t.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]},1448:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(8921),r=s(7274),i=s(3633),o=[n.default,r.default,i.default];t.default=o},808:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(1782),r=s(4641),i=[n.default,r.default];t.default=i},4641:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i={keyword:"unevaluatedItems",type:"array",schemaType:["boolean","object"],error:{message:({params:{len:e}})=>n.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>n._`{limit: ${e}}`},code(e){const{gen:t,schema:s,data:i,it:o}=e,a=o.items||0;if(!0===a)return;const l=t.const("len",n._`${i}.length`);if(!1===s)e.setParams({len:a}),e.fail(n._`${l} > ${a}`);else if("object"==typeof s&&!(0,r.alwaysValidSchema)(o,s)){const s=t.var("valid",n._`${l} <= ${a}`);t.if((0,n.not)(s),(()=>function(s,i){t.forRange("i",i,l,(i=>{e.subschema({keyword:"unevaluatedItems",dataProp:i,dataPropType:r.Type.Num},s),o.allErrors||t.if((0,n.not)(s),(()=>t.break()))}))}(s,a))),e.ok(s)}o.items=!0}};t.default=i},1782:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i=s(2141),o={keyword:"unevaluatedProperties",type:"object",schemaType:["boolean","object"],trackErrors:!0,error:{message:"must NOT have unevaluated properties",params:({params:e})=>n._`{unevaluatedProperty: ${e.unevaluatedProperty}}`},code(e){const{gen:t,schema:s,data:o,errsCount:a,it:l}=e;if(!a)throw new Error("ajv implementation error");const{allErrors:c,props:h}=l;function u(i){if(!1===s)return e.setParams({unevaluatedProperty:i}),e.error(),void(c||t.break());if(!(0,r.alwaysValidSchema)(l,s)){const s=t.name("valid");e.subschema({keyword:"unevaluatedProperties",dataProp:i,dataPropType:r.Type.Str},s),c||t.if((0,n.not)(s),(()=>t.break()))}}h instanceof n.Name?t.if(n._`${h} !== true`,(()=>t.forIn("key",o,(e=>t.if(function(e,t){return n._`!${e} || !${e}[${t}]`}(h,e),(()=>u(e))))))):!0!==h&&t.forIn("key",o,(e=>void 0===h?u(e):t.if(function(e,t){const s=[];for(const r in e)!0===e[r]&&s.push(n._`${t} !== ${r}`);return(0,n.and)(...s)}(h,e),(()=>u(e))))),l.props=!0,e.ok(n._`${a} === ${i.default.errors}`)}};t.default=o},4693:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i=s(3510),o={keyword:"const",$data:!0,error:{message:"must be equal to constant",params:({schemaCode:e})=>n._`{allowedValue: ${e}}`},code(e){const{gen:t,data:s,$data:o,schemaCode:a,schema:l}=e;o||l&&"object"==typeof l?e.fail$data(n._`!${(0,r.useFunc)(t,i.default)}(${s}, ${a})`):e.fail(n._`${l} !== ${s}`)}};t.default=o},8921:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(7772),r={keyword:"dependentRequired",type:"object",schemaType:"object",error:n.error,code:e=>(0,n.validatePropertyDeps)(e)};t.default=r},966:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i=s(3510),o={keyword:"enum",schemaType:"array",$data:!0,error:{message:"must be equal to one of the allowed values",params:({schemaCode:e})=>n._`{allowedValues: ${e}}`},code(e){const{gen:t,data:s,$data:o,schema:a,schemaCode:l,it:c}=e;if(!o&&0===a.length)throw new Error("enum must have non-empty array");const h=a.length>=c.opts.loopEnum;let u;const d=()=>null!=u?u:u=(0,r.useFunc)(t,i.default);let p;if(h||o)p=t.let("valid"),e.block$data(p,(function(){t.assign(p,!1),t.forOf("v",l,(e=>t.if(n._`${d()}(${s}, ${e})`,(()=>t.assign(p,!0).break()))))}));else{if(!Array.isArray(a))throw new Error("ajv implementation error");const e=t.const("vSchema",l);p=(0,n.or)(...a.map(((t,r)=>function(e,t){const r=a[t];return"object"==typeof r&&null!==r?n._`${d()}(${s}, ${e}[${t}])`:n._`${s} === ${r}`}(e,r))))}e.pass(p)}};t.default=o},2649:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3983),r=s(430),i=s(3229),o=s(4336),a=s(498),l=s(3301),c=s(1687),h=s(2958),u=s(4693),d=s(966),p=[n.default,r.default,i.default,o.default,a.default,l.default,c.default,h.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},u.default,d.default];t.default=p},3633:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(6776),r={keyword:["maxContains","minContains"],type:"array",schemaType:"number",code({keyword:e,parentSchema:t,it:s}){void 0===t.contains&&(0,n.checkStrictMode)(s,`"${e}" without "contains" is ignored`)}};t.default=r},1687:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:{message({keyword:e,schemaCode:t}){const s="maxItems"===e?"more":"fewer";return n.str`must NOT have ${s} than ${t} items`},params:({schemaCode:e})=>n._`{limit: ${e}}`},code(e){const{keyword:t,data:s,schemaCode:r}=e,i="maxItems"===t?n.operators.GT:n.operators.LT;e.fail$data(n._`${s}.length ${i} ${r}`)}};t.default=r},3229:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=s(6776),i=s(4499),o={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:{message({keyword:e,schemaCode:t}){const s="maxLength"===e?"more":"fewer";return n.str`must NOT have ${s} than ${t} characters`},params:({schemaCode:e})=>n._`{limit: ${e}}`},code(e){const{keyword:t,data:s,schemaCode:o,it:a}=e,l="maxLength"===t?n.operators.GT:n.operators.LT,c=!1===a.opts.unicode?n._`${s}.length`:n._`${(0,r.useFunc)(e.gen,i.default)}(${s})`;e.fail$data(n._`${c} ${l} ${o}`)}};t.default=o},3983:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r=n.operators,i={maximum:{okStr:"<=",ok:r.LTE,fail:r.GT},minimum:{okStr:">=",ok:r.GTE,fail:r.LT},exclusiveMaximum:{okStr:"<",ok:r.LT,fail:r.GTE},exclusiveMinimum:{okStr:">",ok:r.GT,fail:r.LTE}},o={message:({keyword:e,schemaCode:t})=>n.str`must be ${i[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>n._`{comparison: ${i[e].okStr}, limit: ${t}}`},a={keyword:Object.keys(i),type:"number",schemaType:"number",$data:!0,error:o,code(e){const{keyword:t,data:s,schemaCode:r}=e;e.fail$data(n._`${s} ${i[t].fail} ${r} || isNaN(${s})`)}};t.default=a},498:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:{message({keyword:e,schemaCode:t}){const s="maxProperties"===e?"more":"fewer";return n.str`must NOT have ${s} than ${t} properties`},params:({schemaCode:e})=>n._`{limit: ${e}}`},code(e){const{keyword:t,data:s,schemaCode:r}=e,i="maxProperties"===t?n.operators.GT:n.operators.LT;e.fail$data(n._`Object.keys(${s}).length ${i} ${r}`)}};t.default=r},430:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(3487),r={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:{message:({schemaCode:e})=>n.str`must be multiple of ${e}`,params:({schemaCode:e})=>n._`{multipleOf: ${e}}`},code(e){const{gen:t,data:s,schemaCode:r,it:i}=e,o=i.opts.multipleOfPrecision,a=t.let("res"),l=o?n._`Math.abs(Math.round(${a}) - ${a}) > 1e-${o}`:n._`${a} !== parseInt(${a})`;e.fail$data(n._`(${r} === 0 || (${a} = ${s}/${r}, ${l}))`)}};t.default=r},4336:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(412),r=s(3487),i={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:{message:({schemaCode:e})=>r.str`must match pattern "${e}"`,params:({schemaCode:e})=>r._`{pattern: ${e}}`},code(e){const{data:t,$data:s,schema:i,schemaCode:o,it:a}=e,l=a.opts.unicodeRegExp?"u":"",c=s?r._`(new RegExp(${o}, ${l}))`:(0,n.usePattern)(e,i);e.fail$data(r._`!${c}.test(${t})`)}};t.default=i},3301:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(412),r=s(3487),i=s(6776),o={keyword:"required",type:"object",schemaType:"array",$data:!0,error:{message:({params:{missingProperty:e}})=>r.str`must have required property '${e}'`,params:({params:{missingProperty:e}})=>r._`{missingProperty: ${e}}`},code(e){const{gen:t,schema:s,schemaCode:o,data:a,$data:l,it:c}=e,{opts:h}=c;if(!l&&0===s.length)return;const u=s.length>=h.loopRequired;if(c.allErrors?function(){if(u||l)e.block$data(r.nil,d);else for(const t of s)(0,n.checkReportMissingProp)(e,t)}():function(){const i=t.let("missing");if(u||l){const s=t.let("valid",!0);e.block$data(s,(()=>function(s,i){e.setParams({missingProperty:s}),t.forOf(s,o,(()=>{t.assign(i,(0,n.propertyInData)(t,a,s,h.ownProperties)),t.if((0,r.not)(i),(()=>{e.error(),t.break()}))}),r.nil)}(i,s))),e.ok(s)}else t.if((0,n.checkMissingProp)(e,s,i)),(0,n.reportMissingProp)(e,i),t.else()}(),h.strictRequired){const t=e.parentSchema.properties,{definedProperties:n}=e.it;for(const e of s)if(void 0===(null==t?void 0:t[e])&&!n.has(e)){const t=`required property "${e}" is not defined at "${c.schemaEnv.baseId+c.errSchemaPath}" (strictRequired)`;(0,i.checkStrictMode)(c,t,c.opts.strictRequired)}}function d(){t.forOf("prop",o,(s=>{e.setParams({missingProperty:s}),t.if((0,n.noPropertyInData)(t,a,s,h.ownProperties),(()=>e.error()))}))}}};t.default=o},2958:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=s(453),r=s(3487),i=s(6776),o=s(3510),a={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:{message:({params:{i:e,j:t}})=>r.str`must NOT have duplicate items (items ## ${t} and ${e} are identical)`,params:({params:{i:e,j:t}})=>r._`{i: ${e}, j: ${t}}`},code(e){const{gen:t,data:s,$data:a,schema:l,parentSchema:c,schemaCode:h,it:u}=e;if(!a&&!l)return;const d=t.let("valid"),p=c.items?(0,n.getSchemaTypes)(c.items):[];function m(i,o){const a=t.name("item"),l=(0,n.checkDataTypes)(p,a,u.opts.strictNumbers,n.DataType.Wrong),c=t.const("indices",r._`{}`);t.for(r._`;${i}--;`,(()=>{t.let(a,r._`${s}[${i}]`),t.if(l,r._`continue`),p.length>1&&t.if(r._`typeof ${a} == "string"`,r._`${a} += "_"`),t.if(r._`typeof ${c}[${a}] == "number"`,(()=>{t.assign(o,r._`${c}[${a}]`),e.error(),t.assign(d,!1).break()})).code(r._`${c}[${a}] = ${i}`)}))}function f(n,a){const l=(0,i.useFunc)(t,o.default),c=t.name("outer");t.label(c).for(r._`;${n}--;`,(()=>t.for(r._`${a} = ${n}; ${a}--;`,(()=>t.if(r._`${l}(${s}[${n}], ${s}[${a}])`,(()=>{e.error(),t.assign(d,!1).break(c)}))))))}e.block$data(d,(function(){const n=t.let("i",r._`${s}.length`),i=t.let("j");e.setParams({i:n,j:i}),t.assign(d,!0),t.if(r._`${n} > 1`,(()=>(p.length>0&&!p.some((e=>"object"===e||"array"===e))?m:f)(n,i)))}),r._`${h} === false`),e.ok(d)}};t.default=a},5362:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});var n=s(7537),r=s.n(n),i=s(3645),o=s.n(i)()(r());o.push([e.id,".macromolecule-cell-comp-analysis-host{\n max-height: 250px;\n overflow-y: scroll;\n}\n\n.macromolecule-cell-comp-analysis-bar{\n height: inherit;\n display: block;\n margin-top: 1.5px;\n margin-bottom: 1.5px;\n margin-right: 3px;\n}\n\n.macromolecule-cell-comp-analysis-value{\n display: flex;\n}","",{version:3,sources:["webpack://./css/composition-analysis.css"],names:[],mappings:"AAAA;IACI,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,cAAc;IACd,iBAAiB;IACjB,oBAAoB;IACpB,iBAAiB;AACrB;;AAEA;IACI,aAAa;AACjB",sourcesContent:[".macromolecule-cell-comp-analysis-host{\n max-height: 250px;\n overflow-y: scroll;\n}\n\n.macromolecule-cell-comp-analysis-bar{\n height: inherit;\n display: block;\n margin-top: 1.5px;\n margin-bottom: 1.5px;\n margin-right: 3px;\n}\n\n.macromolecule-cell-comp-analysis-value{\n display: flex;\n}"],sourceRoot:""}]);const a=o},9564:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});var n=s(7537),r=s.n(n),i=s(3645),o=s.n(i)()(r());o.push([e.id,".kalign-version {\n margin-bottom: 0;\n text-align: end;\n font-size: 12px;\n opacity: 0.8;\n}\nbutton.msa-params-button.ui-btn {\n justify-content: end;\n}","",{version:3,sources:["webpack://./css/msa.css"],names:[],mappings:"AAAA;IACI,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,YAAY;AAChB;AACA;IACI,oBAAoB;AACxB",sourcesContent:[".kalign-version {\n margin-bottom: 0;\n text-align: end;\n font-size: 12px;\n opacity: 0.8;\n}\nbutton.msa-params-button.ui-btn {\n justify-content: end;\n}"],sourceRoot:""}]);const a=o},9414:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});var n=s(7537),r=s.n(n),i=s(3645),o=s.n(i)()(r());o.push([e.id,".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/ml/css/styles.css"],names:[],mappings:"AAAA;IACI,4BAA4B;IAC5B,WAAW;AACf;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,YAAY;AAChB",sourcesContent:[".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n"],sourceRoot:""}]);const a=o},8710:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});var n=s(7537),r=s.n(n),i=s(3645),o=s.n(i)()(r());o.push([e.id,".monomer-lib-controls-form {\n margin-left: auto;\n margin-right: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n}\n","",{version:3,sources:["webpack://./src/utils/monomer-lib/library-file-manager/style.css"],names:[],mappings:"AAAA;EACE,iBAAiB;EACjB,kBAAkB;EAClB,aAAa;EACb,sBAAsB;EACtB,mBAAmB;EACnB,WAAW;AACb",sourcesContent:[".monomer-lib-controls-form {\n margin-left: auto;\n margin-right: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n}\n"],sourceRoot:""}]);const a=o},3645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var s="",n=void 0!==t[5];return t[4]&&(s+="@supports (".concat(t[4],") {")),t[2]&&(s+="@media ".concat(t[2]," {")),n&&(s+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),s+=e(t),n&&(s+="}"),t[2]&&(s+="}"),t[4]&&(s+="}"),s})).join("")},t.i=function(e,s,n,r,i){"string"==typeof e&&(e=[[null,e,void 0]]);var o={};if(n)for(var a=0;a<this.length;a++){var l=this[a][0];null!=l&&(o[l]=!0)}for(var c=0;c<e.length;c++){var h=[].concat(e[c]);n&&o[h[0]]||(void 0!==i&&(void 0===h[5]||(h[1]="@layer".concat(h[5].length>0?" ".concat(h[5]):""," {").concat(h[1],"}")),h[5]=i),s&&(h[2]?(h[1]="@media ".concat(h[2]," {").concat(h[1],"}"),h[2]=s):h[2]=s),r&&(h[4]?(h[1]="@supports (".concat(h[4],") {").concat(h[1],"}"),h[4]=r):h[4]="".concat(r)),t.push(h))}},t}},7537:e=>{"use strict";e.exports=function(e){var t=e[1],s=e[3];if(!s)return t;if("function"==typeof btoa){var n=btoa(unescape(encodeURIComponent(JSON.stringify(s)))),r="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(n),i="/*# ".concat(r," */");return[t].concat([i]).join("\n")}return[t].join("\n")}},4063:e=>{"use strict";e.exports=function e(t,s){if(t===s)return!0;if(t&&s&&"object"==typeof t&&"object"==typeof s){if(t.constructor!==s.constructor)return!1;var n,r,i;if(Array.isArray(t)){if((n=t.length)!=s.length)return!1;for(r=n;0!=r--;)if(!e(t[r],s[r]))return!1;return!0}if(t.constructor===RegExp)return t.source===s.source&&t.flags===s.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===s.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===s.toString();if((n=(i=Object.keys(t)).length)!==Object.keys(s).length)return!1;for(r=n;0!=r--;)if(!Object.prototype.hasOwnProperty.call(s,i[r]))return!1;for(r=n;0!=r--;){var o=i[r];if(!e(t[o],s[o]))return!1}return!0}return t!=t&&s!=s}},9133:function(e,t,s){var n;!function(t,r){var i={};!function(e){"use strict";e.__esModule=!0,e.digestLength=32,e.blockSize=64;var t=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function s(e,s,n,r,i){for(var o,a,l,c,h,u,d,p,m,f,g,y,b;i>=64;){for(o=s[0],a=s[1],l=s[2],c=s[3],h=s[4],u=s[5],d=s[6],p=s[7],f=0;f<16;f++)g=r+4*f,e[f]=(255&n[g])<<24|(255&n[g+1])<<16|(255&n[g+2])<<8|255&n[g+3];for(f=16;f<64;f++)y=((m=e[f-2])>>>17|m<<15)^(m>>>19|m<<13)^m>>>10,b=((m=e[f-15])>>>7|m<<25)^(m>>>18|m<<14)^m>>>3,e[f]=(y+e[f-7]|0)+(b+e[f-16]|0);for(f=0;f<64;f++)y=(((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))+(h&u^~h&d)|0)+(p+(t[f]+e[f]|0)|0)|0,b=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&a^o&l^a&l)|0,p=d,d=u,u=h,h=c+y|0,c=l,l=a,a=o,o=y+b|0;s[0]+=o,s[1]+=a,s[2]+=l,s[3]+=c,s[4]+=h,s[5]+=u,s[6]+=d,s[7]+=p,r+=64,i-=64}return r}var n=function(){function t(){this.digestLength=e.digestLength,this.blockSize=e.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return t.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},t.prototype.clean=function(){for(var e=0;e<this.buffer.length;e++)this.buffer[e]=0;for(e=0;e<this.temp.length;e++)this.temp[e]=0;this.reset()},t.prototype.update=function(e,t){if(void 0===t&&(t=e.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var n=0;if(this.bytesHashed+=t,this.bufferLength>0){for(;this.bufferLength<64&&t>0;)this.buffer[this.bufferLength++]=e[n++],t--;64===this.bufferLength&&(s(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(t>=64&&(n=s(this.temp,this.state,e,n,t),t%=64);t>0;)this.buffer[this.bufferLength++]=e[n++],t--;return this},t.prototype.finish=function(e){if(!this.finished){var t=this.bytesHashed,n=this.bufferLength,r=t/536870912|0,i=t<<3,o=t%64<56?64:128;this.buffer[n]=128;for(var a=n+1;a<o-8;a++)this.buffer[a]=0;this.buffer[o-8]=r>>>24&255,this.buffer[o-7]=r>>>16&255,this.buffer[o-6]=r>>>8&255,this.buffer[o-5]=r>>>0&255,this.buffer[o-4]=i>>>24&255,this.buffer[o-3]=i>>>16&255,this.buffer[o-2]=i>>>8&255,this.buffer[o-1]=i>>>0&255,s(this.temp,this.state,this.buffer,0,o),this.finished=!0}for(a=0;a<8;a++)e[4*a+0]=this.state[a]>>>24&255,e[4*a+1]=this.state[a]>>>16&255,e[4*a+2]=this.state[a]>>>8&255,e[4*a+3]=this.state[a]>>>0&255;return this},t.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},t.prototype._saveState=function(e){for(var t=0;t<this.state.length;t++)e[t]=this.state[t]},t.prototype._restoreState=function(e,t){for(var s=0;s<this.state.length;s++)this.state[s]=e[s];this.bytesHashed=t,this.finished=!1,this.bufferLength=0},t}();e.Hash=n;var r=function(){function e(e){this.inner=new n,this.outer=new n,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var t=new Uint8Array(this.blockSize);if(e.length>this.blockSize)(new n).update(e).finish(t).clean();else for(var s=0;s<e.length;s++)t[s]=e[s];for(s=0;s<t.length;s++)t[s]^=54;for(this.inner.update(t),s=0;s<t.length;s++)t[s]^=106;for(this.outer.update(t),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate),s=0;s<t.length;s++)t[s]=0}return e.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},e.prototype.clean=function(){for(var e=0;e<this.istate.length;e++)this.ostate[e]=this.istate[e]=0;this.inner.clean(),this.outer.clean()},e.prototype.update=function(e){return this.inner.update(e),this},e.prototype.finish=function(e){return this.outer.finished?this.outer.finish(e):(this.inner.finish(e),this.outer.update(e,this.digestLength).finish(e)),this},e.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},e}();function i(e){var t=(new n).update(e),s=t.digest();return t.clean(),s}function o(e,t){var s=new r(e).update(t),n=s.digest();return s.clean(),n}function a(e,t,s,n){var r=n[0];if(0===r)throw new Error("hkdf: cannot expand more");t.reset(),r>1&&t.update(e),s&&t.update(s),t.update(n),t.finish(e),n[0]++}e.HMAC=r,e.hash=i,e.default=i,e.hmac=o;var l=new Uint8Array(e.digestLength);e.hkdf=function(e,t,s,n){void 0===t&&(t=l),void 0===n&&(n=32);for(var i=new Uint8Array([1]),c=o(t,e),h=new r(c),u=new Uint8Array(h.digestLength),d=u.length,p=new Uint8Array(n),m=0;m<n;m++)d===u.length&&(a(u,h,s,i),d=0),p[m]=u[d++];return h.clean(),u.fill(0),i.fill(0),p},e.pbkdf2=function(e,t,s,n){for(var i=new r(e),o=i.digestLength,a=new Uint8Array(4),l=new Uint8Array(o),c=new Uint8Array(o),h=new Uint8Array(n),u=0;u*o<n;u++){var d=u+1;a[0]=d>>>24&255,a[1]=d>>>16&255,a[2]=d>>>8&255,a[3]=d>>>0&255,i.reset(),i.update(t),i.update(a),i.finish(c);for(var p=0;p<o;p++)l[p]=c[p];for(p=2;p<=s;p++){i.reset(),i.update(c).finish(c);for(var m=0;m<o;m++)l[m]^=c[m]}for(p=0;p<o&&u*o+p<n;p++)h[u*o+p]=l[p]}for(u=0;u<o;u++)l[u]=c[u]=0;for(u=0;u<4;u++)a[u]=0;return i.clean(),h}}(i);var o=i.default;for(var a in i)o[a]=i[a];"object"==typeof e.exports?e.exports=o:void 0===(n=function(){return o}.call(i,s,i,e))||(e.exports=n)}()},1811:(e,t,s)=>{"use strict";s.d(t,{T:()=>r});const n=new Uint32Array(65536),r=(e,t)=>{if(e.length<t.length){const s=t;t=e,e=s}return 0===t.length?e.length:e.length<=32?((e,t)=>{const s=e.length,r=t.length,i=1<<s-1;let o=-1,a=0,l=s,c=s;for(;c--;)n[e.charCodeAt(c)]|=1<<c;for(c=0;c<r;c++){let e=n[t.charCodeAt(c)];const s=e|a;e|=(e&o)+o^o,a|=~(e|o),o&=e,a&i&&l++,o&i&&l--,a=a<<1|1,o=o<<1|~(s|a),a&=s}for(c=s;c--;)n[e.charCodeAt(c)]=0;return l})(e,t):((e,t)=>{const s=t.length,r=e.length,i=[],o=[],a=Math.ceil(s/32),l=Math.ceil(r/32);for(let e=0;e<a;e++)o[e]=-1,i[e]=0;let c=0;for(;c<l-1;c++){let a=0,l=-1;const h=32*c,u=Math.min(32,r)+h;for(let t=h;t<u;t++)n[e.charCodeAt(t)]|=1<<t;for(let e=0;e<s;e++){const s=n[t.charCodeAt(e)],r=o[e/32|0]>>>e&1,c=i[e/32|0]>>>e&1,h=s|a,u=((s|c)&l)+l^l|s|c;let d=a|~(u|l),p=l&u;d>>>31^r&&(o[e/32|0]^=1<<e),p>>>31^c&&(i[e/32|0]^=1<<e),d=d<<1|r,p=p<<1|c,l=p|~(h|d),a=d&h}for(let t=h;t<u;t++)n[e.charCodeAt(t)]=0}let h=0,u=-1;const d=32*c,p=Math.min(32,r-d)+d;for(let t=d;t<p;t++)n[e.charCodeAt(t)]|=1<<t;let m=r;for(let e=0;e<s;e++){const s=n[t.charCodeAt(e)],a=o[e/32|0]>>>e&1,l=i[e/32|0]>>>e&1,c=s|h,d=((s|l)&u)+u^u|s|l;let p=h|~(d|u),f=u&d;m+=p>>>r-1&1,m-=f>>>r-1&1,p>>>31^a&&(o[e/32|0]^=1<<e),f>>>31^l&&(i[e/32|0]^=1<<e),p=p<<1|a,f=f<<1|l,u=f|~(c|p),h=p&c}for(let t=d;t<p;t++)n[e.charCodeAt(t)]=0;return m})(e,t)}},3979:(e,t)=>{"use strict";t.H$=void 0,t.H$=function(e,t,s){var n=function(e,t,s){if(0===e.length||0===t.length)return 0;if(s&&!s.caseSensitive&&(e=e.toUpperCase(),t=t.toUpperCase()),e===t)return 1;for(var n=0,r=e.length,i=t.length,o=Math.floor(Math.max(r,i)/2)-1,a=new Array(r),l=new Array(i),c=0;c<r;c++)for(var h=Math.max(0,c-o);h<=Math.min(i,c+o+1);h++)if(!a[c]&&!l[h]&&e[c]===t[h]){++n,a[c]=l[h]=!0;break}if(0===n)return 0;var u=0,d=0;for(c=0;c<r;c++)if(a[c]){for(;!l[d];)d++;e.charAt(c)!==t.charAt(d++)&&u++}return(n/r+n/i+(n-(u/=2))/n)/3}(e,t,s),r=0;if(n>.7){for(var i=Math.min(e.length,t.length),o=0;e[o]===t[o]&&o<4&&o<i;)++r,o++;n+=.1*r*(1-n)}return n}},9461:e=>{"use strict";var t=e.exports=function(e,t,n){"function"==typeof t&&(n=t,t={}),s(t,"function"==typeof(n=t.cb||n)?n:n.pre||function(){},n.post||function(){},e,"",e)};function s(e,n,r,i,o,a,l,c,h,u){if(i&&"object"==typeof i&&!Array.isArray(i)){for(var d in n(i,o,a,l,c,h,u),i){var p=i[d];if(Array.isArray(p)){if(d in t.arrayKeywords)for(var m=0;m<p.length;m++)s(e,n,r,p[m],o+"/"+d+"/"+m,a,o,d,i,m)}else if(d in t.propsKeywords){if(p&&"object"==typeof p)for(var f in p)s(e,n,r,p[f],o+"/"+d+"/"+f.replace(/~/g,"~0").replace(/\//g,"~1"),a,o,d,i,f)}else(d in t.keywords||e.allKeys&&!(d in t.skipKeywords))&&s(e,n,r,p,o+"/"+d,a,o,d,i)}r(i,o,a,l,c,h,u)}}t.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0},t.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},t.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},t.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0}},3379:e=>{"use strict";var t=[];function s(e){for(var s=-1,n=0;n<t.length;n++)if(t[n].identifier===e){s=n;break}return s}function n(e,n){for(var i={},o=[],a=0;a<e.length;a++){var l=e[a],c=n.base?l[0]+n.base:l[0],h=i[c]||0,u="".concat(c," ").concat(h);i[c]=h+1;var d=s(u),p={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==d)t[d].references++,t[d].updater(p);else{var m=r(p,n);n.byIndex=a,t.splice(a,0,{identifier:u,updater:m,references:1})}o.push(u)}return o}function r(e,t){var s=t.domAPI(t);return s.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;s.update(e=t)}else s.remove()}}e.exports=function(e,r){var i=n(e=e||[],r=r||{});return function(e){e=e||[];for(var o=0;o<i.length;o++){var a=s(i[o]);t[a].references--}for(var l=n(e,r),c=0;c<i.length;c++){var h=s(i[c]);0===t[h].references&&(t[h].updater(),t.splice(h,1))}i=l}}},569:e=>{"use strict";var t={};e.exports=function(e,s){var n=function(e){if(void 0===t[e]){var s=document.querySelector(e);if(window.HTMLIFrameElement&&s instanceof window.HTMLIFrameElement)try{s=s.contentDocument.head}catch(e){s=null}t[e]=s}return t[e]}(e);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");n.appendChild(s)}},9216:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},3565:(e,t,s)=>{"use strict";e.exports=function(e){var t=s.nc;t&&e.setAttribute("nonce",t)}},7795:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(s){!function(e,t,s){var n="";s.supports&&(n+="@supports (".concat(s.supports,") {")),s.media&&(n+="@media ".concat(s.media," {"));var r=void 0!==s.layer;r&&(n+="@layer".concat(s.layer.length>0?" ".concat(s.layer):""," {")),n+=s.css,r&&(n+="}"),s.media&&(n+="}"),s.supports&&(n+="}");var i=s.sourceMap;i&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),t.styleTagTransform(n,e,t.options)}(t,e,s)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},4589:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},7241:(e,t,s)=>{"use strict";s.d(t,{D:()=>h});var n=s(4469),r=s(976),i=s(6414),o=s.n(i),a=s(3348),l=s(499);const c=31;async function h(e,t=!1,s){const i=l.Cn.getOrCreate(e);let h;s??(s=new Map);const d=i.isHelm()?(0,a.getHelmMonomers)(e):Object.keys(i.stats.freq).filter((e=>""!==e));for(let e=0;e<d.length;e++)s.has(d[e])||s.set(d[e],`${s.size+1}`);if(i.isHelm())h=await n.functions.call("HELM:getMolFiles",{col:e}),h=function(e,t,s=!1){const n=new Array(e.length);for(let r=0;r<e.length;r++){let i=0,o=0,a="\n Datagrok macromolecule handler\n\n 0 0 0 0 0 0 999 V3000\nM V30 BEGIN CTAB\n";const l=e.get(r);i=l.indexOf("\n",i)+1,i=l.indexOf("\n",i)+1,i=l.indexOf("\n",i)+1;const h=parseInt(l.substring(i,i+3)),u=parseInt(l.substring(i+3,i+6));a+=`M V30 COUNTS ${h} ${u} 0 0 0\n`,a+="M V30 BEGIN ATOM\n";for(let e=0;e<h;e++){i=l.indexOf("\n",i)+1+c,o=l.indexOf(" ",i);const n=l.substring(i,o);a+=s?`M V30 ${e+1} R${t.get(n)} 0.000 0.000 0 0\n`:`M V30 ${e+1} At 0.000 0.000 0 0 MASS=${t.get(n)}\n`}a+="M V30 END ATOM\n",a+="M V30 BEGIN BOND\n";for(let e=0;e<u;e++){i=l.indexOf("\n",i)+1;const t=parseInt(l.substring(i,i+3).trim()),s=parseInt(l.substring(i+3,i+6).trim());a+=`M V30 ${e+1} ${parseInt(l.substring(i+6,i+9).trim())} ${t} ${s}\n`}a+="M V30 END BOND\n",a+="M V30 END CTAB\n",a+="M END",n[r]=a}return n}(h,s,t);else{h=new Array(e.length);for(let n=0;n<e.length;n++){const e=u(o()(i.splitted[n]).filter((e=>""!==e)).toArray(),s,t);h[n]=e}}return r.Column.fromStrings("monomericMols",h)}function u(e,t,s=!1){let n="\n Datagrok macromolecule handler\n\n 0 0 0 0 0 0 999 V3000\nM V30 BEGIN CTAB\n";n+=`M V30 COUNTS ${e.length} ${e.length?e.length-1:0} 0 0 0\n`,n+="M V30 BEGIN ATOM\n";for(let r=0;r<e.length;r++)n+=s?`M V30 ${r+1} R${t.get(e[r])} 0.000 0.000 0 0\n`:`M V30 ${r+1} At 0.000 0.000 0 0 MASS=${t.get(e[r])}\n`;n+="M V30 END ATOM\n",n+="M V30 BEGIN BOND\n";for(let t=0;t<e.length-1;t++)n+=`M V30 ${t+1} 1 ${t+1} ${t+2}\n`;return n+="M V30 END BOND\n",n+="M V30 END CTAB\n",n+="M END",n}},3348:(e,t,s)=>{"use strict";s.r(t),s.d(t,{GetRegionEditor:()=>Gs,SeqActivityCliffsEditor:()=>Bs,SeqPaletteCustom:()=>Ns,SequenceSpaceEditor:()=>Vs,SplitToMonomersEditor:()=>Ds,SubsequenceSearchTopMenu:()=>wn,_package:()=>Is,activityCliffs:()=>Js,addCopyMenu:()=>Mn,alignSequences:()=>rn,bioSubstructureFilter:()=>En,compositionAnalysis:()=>on,compositionAnalysisWidget:()=>Ws,convertDialog:()=>cn,createMonomerLibraryForPolyTool:()=>Fn,demoBioActivityCliffs:()=>Pn,demoBioAtomicLevel:()=>On,demoBioHelmMsaSequenceSpace:()=>Rn,demoBioSequenceSpace:()=>Ln,demoBioSimilarityDiversity:()=>Nn,detectMacromoleculeProbe:()=>Dn,diversitySearchTopMenu:()=>bn,diversitySearchViewer:()=>yn,fastaSequenceCellRenderer:()=>Hs,getBioLib:()=>Os,getHelmMonomers:()=>mn,getMonomerLibHelper:()=>$s,getRegion:()=>zs,getRegionApp:()=>In,getRegionHelmApp:()=>$n,getRegionPanel:()=>ks,getRegionTopMenu:()=>Xs,getUnitsHandler:()=>Rs,helmPreprocessingFunction:()=>en,hydrophobPalette:()=>Ms,importBam:()=>ln,importFasta:()=>an,initBio:()=>Ls,libraryPanel:()=>Fs,macroMolColumnPropertyPanel:()=>js,macromoleculeDifferenceCellRenderer:()=>Zs,macromoleculePreprocessingFunction:()=>Qs,manageMonomerLibraries:()=>xn,monomerCellRenderer:()=>un,multipleSequenceAlignmentDialog:()=>nn,polyTool:()=>hn,polyToolColumnChoice:()=>kn,saveAsFasta:()=>An,sdfToJsonLib:()=>Gn,searchSubsequenceEditor:()=>vn,separatorSequenceCellRenderer:()=>Us,sequenceAlignment:()=>Ys,sequenceIdentityScoring:()=>Cn,sequenceSimilarityScoring:()=>Sn,sequenceSpaceTopMenu:()=>tn,sequenceTooltip:()=>Ps,similaritySearchTopMenu:()=>gn,similaritySearchViewer:()=>fn,splitToMonomersTopMenu:()=>pn,testDetectMacromolecule:()=>dn,toAtomicLevel:()=>sn,vdRegionsViewer:()=>qs,webLogoAggApp:()=>Tn,webLogoLargeApp:()=>_n,webLogoViewer:()=>Ks});var n,r,i=s(4469),o=s(3870),a=s(976),l=s(3277),c=s(4628);(r=n||(n={})).EUCLIDEAN="EUCLIDEAN",r.MANHATTAN="MANHATTAN";class h{learningRate={uiName:"Learinig rate",value:1,tooltip:"The initial learning rate for the embedding optimization"};nComponents={uiName:"Components",value:2,tooltip:"The number of components (dimensions) to project the data to"};nEpochs={uiName:"Epochs",value:0,tooltip:"The number of epochs to optimize embeddings via SGD. Computed automatically if set to 0"};nNeighbors={uiName:"Neighbors",value:15,tooltip:"The number of nearest neighbors to construct the fuzzy manifold"};spread={uiName:"Spread",value:1,tooltip:"The effective scale of embedded points, used with min distance to control \n the clumped/dispersed nature of the embedding"};minDist={uiName:"Min distance",value:.1,tooltip:"The effective minimum distance between embedded points, \n used with spread to control the clumped/dispersed nature of the embedding"};randomSeed={uiName:"Random seed",value:null,tooltip:"Random seed",type:"string"};constructor(){}}class u{epsilon={uiName:"Epsilon",value:10,tooltip:"Epsilon is learning rate"};perplexity={uiName:"Perplexity",value:30,tooltip:"Roughly how many neighbors each point influences"};dim={uiName:"Dimensionality",value:2,tooltip:"Dimensionality of the embedding"};constructor(){}}const d="MCL";a.SEMTYPE.MOLECULE,a.SEMTYPE.MACROMOLECULE;class p{epsilon={uiName:"Epsilon",value:.01,tooltip:"Minimum distance between cluster points",min:0,max:2,step:.005};minPts={uiName:"Minimum points",value:4,tooltip:"Minimum number of points in cluster",min:1,max:1e3,step:1};constructor(){}}class m{editorSettings={};tableInput;colInput;preprocessingFunctionInput;plotEmbeddingsInput=o.boolInput("Plot embeddings",!0);clusterEmbeddingsInput=o.boolInput("Cluster embeddings",!0);preprocessingFunctionInputRoot=null;colInputRoot;methods=[c.A.UMAP,c.A.T_SNE];methodInput;methodSettingsIcon;dbScanSettingsIcon;preprocessingFuncSettingsIcon;columnFunctionsMap={};supportedFunctions={};availableMetrics=[];similarityMetricInputRoot;methodSettingsDiv=o.inputs([]);dbScanSettingsDiv=o.inputs([]);preprocessingFuncSettingsDiv=o.inputs([]);preprocessingFunctionSettings={};methodsParams={[c.A.UMAP]:new h,[c.A.T_SNE]:new u};dbScanParams=new p;similarityMetricInput;get algorithmOptions(){const e=this.methodsParams[this.methodInput.value],t={};return Object.keys(e).forEach((s=>{null!=e[s].value&&(t[s]=e[s].value)})),t}get dbScanOptions(){return{dbScanEpsilon:this.dbScanParams.epsilon.value??.01,dbScanMinPts:this.dbScanParams.minPts.value??4}}constructor(e={}){this.editorSettings=e,this.editorSettings.enableMCL&&this.methods.push(d),a.Func.find({tags:[l.n3]}).forEach((e=>{const t=e.options.get(l.vO)??"",s=e.friendlyName??e.name,n=e.options.get(l.ts)??"",r=e.options.get(l.q6)??"",i=e.options.get(l.dB)??"";this.editorSettings.semtype&&!t.includes(this.editorSettings.semtype)||this.editorSettings.type&&!n.includes(this.editorSettings.type)||this.editorSettings.units&&!r.includes(this.editorSettings.units)||(this.supportedFunctions[s]={func:e,semTypes:t?t.split(","):[],types:n?n.split(","):[],units:r?r.split(","):[],distanceFunctions:i?i.split(","):[]})})),this.tableInput=o.tableInput("Table",i.shell.tv.dataFrame,i.shell.tables,(()=>{this.onTableInputChanged()})),this.onTableInputChanged(),this.regenerateColInput(),this.onColumnInputChanged();let t=!1,s=!1;this.methodInput=o.choiceInput("Method",c.A.UMAP,this.methods,(()=>{t&&this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[this.methodInput.value])})),this.methodSettingsIcon=o.icons.settings((()=>{t=!t,t?this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[this.methodInput.value]):o.empty(this.methodSettingsDiv)}),"Modify methods parameters"),this.dbScanSettingsIcon=o.icons.settings((()=>{s=!s,s?this.createAlgorithmSettingsDiv(this.dbScanSettingsDiv,this.dbScanParams):o.empty(this.dbScanSettingsDiv)}),"Modify clustering parameters"),this.clusterEmbeddingsInput.classList.add("ml-dim-reduction-settings-input"),this.clusterEmbeddingsInput.root.prepend(this.dbScanSettingsIcon),this.methodInput.root.classList.add("ml-dim-reduction-settings-input"),this.methodInput.root.prepend(this.methodSettingsIcon),this.methodSettingsDiv=o.inputs([]);const n=this.columnFunctionsMap[this.colInput.value.name];this.preprocessingFunctionInput=o.choiceInput("Encoding function",n[0],n,(()=>{this.onPreprocessingFunctionChanged()}));let r=!1;this.preprocessingFunctionInputRoot||(this.preprocessingFunctionInputRoot=this.preprocessingFunctionInput.root,r=!0),r||(o.empty(this.preprocessingFunctionInputRoot),Array.from(this.preprocessingFunctionInput.root.children).forEach((e=>this.preprocessingFunctionInputRoot.append(e)))),this.preprocessingFunctionInputRoot.classList.add("ml-dim-reduction-settings-input");let h=!1;this.preprocessingFuncSettingsIcon=o.icons.settings((async()=>{h?o.empty(this.preprocessingFuncSettingsDiv):await this.createPreprocessingFuncParamsDiv(this.preprocessingFuncSettingsDiv,this.supportedFunctions[this.preprocessingFunctionInput.value].func),h=!h}),"Modify encoding function parameters"),this.preprocessingFunctionInputRoot.prepend(this.preprocessingFuncSettingsIcon),this.similarityMetricInput=o.choiceInput("Similarity","",[],null),this.similarityMetricInput.nullable=!1,this.similarityMetricInputRoot||(this.similarityMetricInputRoot=this.similarityMetricInput.root),this.onPreprocessingFunctionChanged()}getColInput(){const e=this.tableInput.value?.columns.toList().find((e=>!!this.columnFunctionsMap[e.name]))??null,t=o.columnInput("Column",this.tableInput.value,e,(()=>this.onColumnInputChanged()),{filter:e=>!!this.columnFunctionsMap[e.name]});return this.colInputRoot||(this.colInputRoot=t.root),t}regenerateColInput(){let e=!1;this.colInputRoot&&(e=!0,o.empty(this.colInputRoot)),this.colInput=this.getColInput(),e&&Array.from(this.colInput.root.children).forEach((e=>this.colInputRoot.append(e))),this.onColumnInputChanged()}onTableInputChanged(){const e=this.tableInput.value;e&&(this.columnFunctionsMap={},e.columns.toList().forEach((e=>{Object.keys(this.supportedFunctions).forEach((t=>{const s=this.supportedFunctions[t].semTypes,n=this.supportedFunctions[t].types,r=this.supportedFunctions[t].units,i=!s.length||e.semType&&s.includes(e.semType),o=!n.length||n.includes(e.type),l=!r.length||e.getTag(a.TAGS.UNITS)&&r.includes(e.getTag(a.TAGS.UNITS));i&&o&&l&&(this.columnFunctionsMap[e.name]||(this.columnFunctionsMap[e.name]=[]),this.columnFunctionsMap[e.name].push(t))}))})),this.regenerateColInput())}onColumnInputChanged(){const e=this.colInput.value;if(!e)return;const t=this.columnFunctionsMap[e.name];this.preprocessingFunctionInput=o.choiceInput("Preprocessing function",t[0],t,(()=>{this.onPreprocessingFunctionChanged()}));let s=!1;this.preprocessingFunctionInputRoot||(this.preprocessingFunctionInputRoot=this.preprocessingFunctionInput.root,s=!0),s||(o.empty(this.preprocessingFunctionInputRoot),Array.from(this.preprocessingFunctionInput.root.children).forEach((e=>this.preprocessingFunctionInputRoot.append(e)))),this.onPreprocessingFunctionChanged()}onPreprocessingFunctionChanged(){o.empty(this.preprocessingFuncSettingsDiv),this.preprocessingFunctionSettings={};const e=this.preprocessingFunctionInput.value,t=this.supportedFunctions[e].distanceFunctions;this.availableMetrics=[...t],this.similarityMetricInput=o.choiceInput("Similarity",this.availableMetrics[0],this.availableMetrics,null),this.similarityMetricInput.nullable=!1,this.similarityMetricInputRoot||(this.similarityMetricInputRoot=this.similarityMetricInput.root),o.empty(this.similarityMetricInputRoot),Array.from(this.similarityMetricInput.root.children).forEach((e=>this.similarityMetricInputRoot.append(e))),this.preprocessingFuncSettingsIcon&&(this.supportedFunctions[e].func.inputs.length<3?this.preprocessingFuncSettingsIcon.style.display="none":this.preprocessingFuncSettingsIcon.style.display="flex")}createAlgorithmSettingsDiv(e,t){return o.empty(e),Object.keys(t).forEach((s=>{const n=t[s],r="string"===n.type?o.stringInput(n.uiName,n.value??"",(()=>{n.value=r.value})):o.floatInput(n.uiName,n.value,(()=>{n.value=r.value}));o.tooltip.bind(r.input??r.root,n.tooltip),e.append(r.root)})),e}async createPreprocessingFuncParamsDiv(e,t){if(o.empty(e),t.inputs.length<3)return o.div();const s=t.prepare(),n=await s.buildEditor(o.div());for(let r=2;r<t.inputs.length;r++){const i=t.inputs[r];(this.preprocessingFunctionSettings[i.name]||s.inputParams[t.inputs[r].name].value||i.defaultValue)&&(this.preprocessingFunctionSettings[i.name]=this.preprocessingFunctionSettings[i.name]??s.inputParams[i.name].value??i.defaultValue);const o=n.find((e=>e.property.name===i.name));o&&(null!==this.preprocessingFunctionSettings[i.name]&&void 0!==this.preprocessingFunctionSettings[i.name]&&(o.value=this.preprocessingFunctionSettings[i.name]),o.onChanged((()=>{this.preprocessingFunctionSettings[i.name]=o.value})),e.append(o.root))}return e}getEditor(){return o.div([this.tableInput,this.colInputRoot,this.preprocessingFunctionInputRoot,this.preprocessingFuncSettingsDiv,this.methodInput,this.methodSettingsDiv,this.similarityMetricInputRoot,this.plotEmbeddingsInput,this.clusterEmbeddingsInput,this.dbScanSettingsDiv],{style:{minWidth:"320px"},classes:"ui-form"})}getParams(){return{table:this.tableInput.value,col:this.colInput.value,methodName:this.methodInput.value,preprocessingFunction:this.supportedFunctions[this.preprocessingFunctionInput.value].func,similarityMetric:this.similarityMetricInput.value,plotEmbeddings:this.plotEmbeddingsInput.value,clusterEmbeddings:this.clusterEmbeddingsInput.value,options:{...this.algorithmOptions,...this.dbScanOptions,preprocessingFuncArgs:this.preprocessingFunctionSettings??{}}}}}var f=s(442),g=s(5697),y=s(701),b=s(3379),v=s.n(b),w=s(7795),C=s.n(w),S=s(569),x=s.n(S),A=s(3565),E=s.n(A),_=s(9216),T=s.n(_),I=s(4589),$=s.n(I),M=s(9414),N={};N.styleTagTransform=$(),N.setAttributes=E(),N.insert=x().bind(null,"head"),N.domAPI=C(),N.insertStyleElement=T(),v()(M.Z,N),M.Z&&M.Z.locals&&M.Z.locals;const L=e=>null==e;function P(e,t,s,n){if(s>e[e.length-1])return;const r=e.findIndex((e=>s<e));e.pop(),e.splice(r,0,s),t.pop(),t.splice(r,0,n)}var O=s(6254);class R{_workers;_workerCount;_terminateOnComplete;constructor(e=!0,t=!0){const n=navigator.hardwareConcurrency;this._workerCount=e?Math.max(n-2,1):1,this._workers=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(s.p+s.u(65),s.b)))),this._terminateOnComplete=t}async calc(e,t,s=!0,r){return await this.calcMulti([e],[t],s,[r??{}],[1],n.MANHATTAN)}async calcMulti(e,t,s=!0,r=[{}],i=[1],o=n.MANHATTAN){if(e.length<1)throw new Error("values must contain at least one array");if(t.length!==e.length||r.length!==e.length||i.length!==e.length)throw new Error("values, fnNames, weights and opts must have the same length");return new Promise((async(n,a)=>{try{const a=e[0].length,l=new Array(this._workerCount),c=a*(a-1)/2;this._workerCount=Math.min(this._workerCount,c);const h=c/this._workerCount,u=new Float32Array(c);let d=0,p=1,m=0,f=Number.MIN_VALUE;for(let s=0;s<this._workerCount;s++){const n=Math.floor(s*h),g=s===this._workerCount-1?c:Math.floor((s+1)*h),y=d,b=p;s!==this._workerCount-1&&(d=a-2-Math.floor(Math.sqrt(-8*g+4*a*(a-1)-7)/2-.5),p=g-a*d+Math.floor((d+1)*(d+2)/2)),this._workers[s].postMessage({values:e,fnNames:t,startRow:y,startCol:b,chunckSize:g-n,opts:r,weights:i,aggregationMethod:o}),l[s]=new Promise(((e,t)=>{this._workers[s].onmessage=({data:{error:r,distanceMatrixData:i,min:o,max:a}})=>{this._terminateOnComplete&&setTimeout((()=>this._workers[s].terminate())),r?t(r):(u.set(i,n),o<m&&(m=o),a>f&&(f=a),e())}}))}await Promise.all(l),s&&u.forEach(((e,t)=>{u[t]=(e-m)/(f-m)})),n(u)}catch(e){a(e)}}))}terminate(){this._workers.forEach((e=>e.terminate()))}}class k{_workerCount;constructor(){this._workerCount=Math.max(navigator.hardwareConcurrency-2,1)}async calcMultiColumn(e,t,r,i=[{}],o=[1],a=n.EUCLIDEAN){const l=e[0].length*(e[0].length-1)/2,c=Math.floor(l/this._workerCount),h=e[0].length>2e4?await this.getMinimalThreshold(e,t,i,o,a):0;r<h&&(console.log(`using threshold ${h}`),r=h),i.forEach(((e,t)=>i[t].threshold=r));const u=new Array(this._workerCount),d=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(s.p+s.u(23),s.b))));for(let s=0;s<this._workerCount;s++)u[s]=new Promise(((n,h)=>{const u=s*c,p=s===this._workerCount-1?l:(s+1)*c;p<=u&&n({i:new Int32Array(0),j:new Int32Array(0),distance:new Float32Array(0),idx:s}),d[s].postMessage({values:e,startIdx:u,endIdx:p,threshold:r,fnNames:t,opts:i,weights:o,aggregationMethod:a}),d[s].onmessage=({data:{error:e,i:t,j:r,distance:i}})=>{e?(d[s].terminate(),h(e)):(d[s].terminate(),n({i:t,j:r,distance:i,idx:s}))}}));const p=await Promise.all(u),m=p.reduce(((e,t)=>e+t.i.length),0),f=new Int32Array(m),g=new Int32Array(m),y=new Float32Array(m);let b=0;for(const e of p)f.set(e.i,b),g.set(e.j,b),y.set(e.distance,b),b+=e.i.length;return{i:f,j:g,distance:y}}async calc(e,t,s,n={}){return await this.calcMultiColumn([e],[t],s,[n],[1])}async getKNN(e,t,s=15,n={}){return await this.multiColumnKNN([e],[t],s,[n],[1])}async getThresholdKNN(e,t,s=.8,n={}){return await this.multiColumnThresholdKnn([e],[t],s,[n],[1])}async multiColumnThresholdKnn(e,t,r=.8,i,o,a=n.EUCLIDEAN){if(e.length!==t.length||e.length!==i.length||e.length!==o.length)throw new Error("values, distance functions, options and weights arrays should have the same length");if(e.some((t=>t.length!==e[0].length)))throw new Error("all values arrays should have the same length");const l=e[0].length*(e[0].length-1)/2,c=Math.floor(l/this._workerCount),h=new Array(this._workerCount),u=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(s.p+s.u(427),s.b))));for(let s=0;s<this._workerCount;s++)h[s]=new Promise(((n,h)=>{const d=s*c,p=s===this._workerCount-1?l:(s+1)*c;p<=d&&n({knnDistances:new Array(0),knnIndexes:new Array(0)}),u[s].postMessage({values:e,startIdx:d,endIdx:p,fnNames:t,opts:i,threshold:r,weights:o,aggregationMethod:a}),u[s].onmessage=({data:{error:e,knnDistances:t,knnIndexes:r}})=>{e?(u[s].terminate(),h(e)):(u[s].terminate(),n({knnDistances:t,knnIndexes:r}))}}));const d=await Promise.all(h),p=new Int32Array(e[0].length);for(const t of d)for(let s=0;s<e[0].length;++s)p[s]+=t.knnIndexes[s]?.length??0;const m={knnDistances:new Array(e[0].length).fill(null).map(((e,t)=>new Array(p[t]))),knnIndexes:new Array(e[0].length).fill(null).map(((e,t)=>new Array(p[t])))};for(const t of d)for(let s=0;s<e[0].length;++s)for(let e=0;e<t.knnDistances[s]?.length;++e)m.knnDistances[s][p[s]-1]=t.knnDistances[s][e],m.knnIndexes[s][p[s]-1]=t.knnIndexes[s][e],p[s]-=1;return m}async multiColumnKNN(e,t,r=15,i,o,a=n.EUCLIDEAN){if(e.length!==t.length||e.length!==i.length||e.length!==o.length)throw new Error("values, distance functions, options and weights arrays should have the same length");if(e.some((t=>t.length!==e[0].length)))throw new Error("all values arrays should have the same length");const l=e[0].length*(e[0].length-1)/2,c=Math.floor(l/this._workerCount),h=new Array(this._workerCount),u=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(s.p+s.u(282),s.b))));for(let s=0;s<this._workerCount;s++)h[s]=new Promise(((n,h)=>{const d=s*c,p=s===this._workerCount-1?l:(s+1)*c;p<=d&&n({knnDistances:new Array(0),knnIndexes:new Array(0)}),u[s].postMessage({values:e,startIdx:d,endIdx:p,fnNames:t,opts:i,nNeighbours:r,weights:o,aggregationMethod:a}),u[s].onmessage=({data:{error:e,knnDistances:t,knnIndexes:r}})=>{e?(u[s].terminate(),h(e)):(u[s].terminate(),n({knnDistances:t,knnIndexes:r}))}}));const d=await Promise.all(h),p={knnDistances:new Array(e[0].length).fill(null).map((()=>new Array(r).fill(99999))),knnIndexes:new Array(e[0].length).fill(null).map((()=>new Array(r).fill(-1)))};for(const t of d)for(let s=0;s<e[0].length;++s)for(let e=0;e<t.knnDistances[s]?.length;++e)P(p.knnDistances[s],p.knnIndexes[s],t.knnDistances[s][e],t.knnIndexes[s][e]);return p}async getSampleDistances(e,t,r=[],i,o=n.EUCLIDEAN){const a=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(s.p+s.u(40),s.b))));try{const s=e[0].length*(e[0].length-1)/2,n=Math.floor(s/this._workerCount),l=1e6,c=Math.max(Math.min(s/1e3,l),Math.min(s,l)),h=Math.floor(c/this._workerCount),u=new Array(this._workerCount);for(let l=0;l<this._workerCount;l++)u[l]=new Promise(((c,u)=>{const d=l*n,p=l===this._workerCount-1?s:(l+1)*n;a[l].postMessage({values:e,startIdx:d,endIdx:p,sampleLength:h,fnNames:t,opts:r,weights:i,aggregationMethod:o}),a[l].onmessage=({data:{error:e,distance:t}})=>{a[l].terminate(),e?u(e):c({distance:t})}}));const d=await Promise.all(u),p=d.reduce(((e,t)=>e+t.distance.length),0),m=new Float32Array(p);let f=0;for(const e of d)m.set(e.distance,f),f+=e.distance.length;return m.sort(),m}catch(e){return a?.forEach((e=>e?.terminate())),console.error(e),new Float32Array(1).fill(.5)}}async getMinimalThreshold(e,t,s=[],r,i=n.EUCLIDEAN){try{const n=e.length*(e.length-1)/2,o=await this.getSampleDistances(e,t,s,r,i);return 1-o[Math.floor(7e7/n*o.length)]}catch(e){return console.error(e),.5}}static calcSync(e,t,s,n){const r=[],i=[],o=[];let a=0,l=0,c=0;const h=e.length*(e.length-1)/2;for(;a<h;){const t=L(e[l])||L(e[c])?1:s(e[l],e[c]);1-t>=n&&(r.push(l),i.push(c),o.push(t)),a++,c++,c===e.length&&(l++,c=l+1)}return{i:new Int32Array(r),j:new Int32Array(i),distance:new Float32Array(o)}}}var F,G=s(9657);!function(e){e.none="none",e.bold="bold",e.dashed="dashed"}(F||(F={}));class D{get currentLineId(){return this._currentLineIdx}set currentLineId(e){e!==this._currentLineIdx&&(this._currentLineIdx=e,this.sp.render(this.ctx))}set linesToRender(e){this.updateLines(e),this.sp.render(this.ctx)}set linesVisibility(e){this.visibility=e,this.sp.render(this.ctx)}constructor(e,t,s,n,r=F.none){var i;this._currentLineIdx=-1,this.lineClicked=new y.Subject,this.lineHover=new y.Subject,this.mouseOverLineId=-1,this.arrowWidth=15,this.sp=e,this.xAxisCol=this.sp.dataFrame.columns.byName(t),this.yAxisCol=this.sp.dataFrame.columns.byName(s),this.canvas=this.sp.getInfo().canvas,this.ctx=this.canvas.getContext("2d"),this.currentLineStyle=r,this.updateLines(n),this.visibility=null!==(i=n.visibility)&&void 0!==i?i:new G.Z(this.lines.from.length),n.visibility||this.visibility.setAll(!0,!1),n.arrowSize&&(this.arrowWidth=n.arrowSize),this.canvas.onmousedown=e=>{-1!==this.mouseOverLineId&&this.lineClicked.next({x:e.clientX,y:e.clientY,id:this.mouseOverLineId,event:e})},this.canvas.onmousemove=e=>{this.mouseOverLineId=this.checkCoordsOnLine(e.offsetX,e.offsetY),-1!==this.mouseOverLineId&&this.lineHover.next({x:e.clientX,y:e.clientY,id:this.mouseOverLineId,event:e})},e.onEvent("d4-before-draw-scene").subscribe((e=>{this.renderLines()}))}updateLines(e){this.lines=e,this.multipleLinesCounts=new Uint8Array(this.lines.from.length),e.skipMultiLineCalculation?this.multipleLinesCounts.fill(0):this.createMultiLinesIndices()}renderLines(){var e,t,s,n,r,i,o,a,l,c,h,u,d;const p=this.sp.getOptions().look,m=this.lines.colors||this.lines.width||this.lines.opacities||this.lines.drawArrowsArr;m||(this.ctx.lineWidth=null!==(e=this.lines.width)&&void 0!==e?e:1,this.ctx.strokeStyle=`rgba(${null!==(t=this.lines.color)&&void 0!==t?t:"0,128,0"},${null!==(s=this.lines.opacity)&&void 0!==s?s:1})`);const f=p.sizeColumnName?this.sp.dataFrame.col(p.sizeColumnName):null,g=this.sp.dataFrame.filter;for(let e=0;e<this.lines.from.length;e++)if(g.get(this.lines.from[e])&&g.get(this.lines.to[e])&&this.visibility.getBit(e)){let t=0;const{sizeFrom:s,sizeTo:g}=this.getMarkersSizes(p,f,e),y=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[e]),this.yAxisCol.get(this.lines.from[e]));let b=null==y?void 0:y.x,v=null==y?void 0:y.y;const w=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[e]),this.yAxisCol.get(this.lines.to[e]));let C=null==w?void 0:w.x,S=null==w?void 0:w.y;const x=Math.min(this.sp.viewBox.width,this.sp.viewBox.height);if(this.ctx.beginPath(),b&&v&&C&&S&&Math.hypot(C-b,S-v)/x>.01){if(m){const t=(null===(n=this.lines.colors)||void 0===n?void 0:n[e])?null===(r=this.lines.colors)||void 0===r?void 0:r[e]:"0,128,0",s=(null===(i=this.lines.opacities)||void 0===i?void 0:i[e])?null===(o=this.lines.opacities)||void 0===o?void 0:o[e]:1;this.ctx.strokeStyle=`rgba(${t},${s})`,this.ctx.lineWidth=(null===(a=this.lines.widths)||void 0===a?void 0:a[e])?null===(l=this.lines.widths)||void 0===l?void 0:l[e]:1}e===this._currentLineIdx&&this.toggleCurrentLineStyle(!0);const p=this.multipleLinesCounts[e];let f=null;if(p){t=this.getLineLength(b,v,C,S);const n=this.getPointOnDistance(b,v,C,S,g,t),r=this.getPointOnDistance(C,S,b,v,s,t);b=n.x,v=n.y,C=r.x,S=r.y,f=this.lines.from[e]>this.lines.to[e]?this.findControlPoint(p,b,v,C,S,e):this.findControlPoint(p,C,S,b,v,e),this.ctx.moveTo(b,v),this.ctx.quadraticCurveTo(f.x,f.y,C,S)}else this.ctx.moveTo(b,v),this.ctx.lineTo(C,S);if((null!==(c=this.lines.drawArrows)&&void 0!==c?c:null===(h=this.lines.drawArrowsArr)||void 0===h?void 0:h.getBit(e))&&(t||(t=this.getLineLength(b,v,C,S)),t>this.arrowWidth)){const e=p?null:this.getPointOnDistance(b,v,C,S,g,t),s=p?f.x:b,n=p?f.y:v;this.canvasArrow(this.ctx,null!==(u=null==e?void 0:e.x)&&void 0!==u?u:b,null!==(d=null==e?void 0:e.y)&&void 0!==d?d:v,s,n)}this.ctx.stroke(),this.ctx.closePath(),e===this._currentLineIdx&&this.toggleCurrentLineStyle(!1)}}this.fillLeftBottomRect()}toggleCurrentLineStyle(e){switch(this.currentLineStyle){case F.bold:e?this.ctx.lineWidth+=2:this.ctx.lineWidth-=2;break;case F.dashed:e?this.ctx.setLineDash([5,5]):this.ctx.setLineDash([]);break;default:return}}getMarkersSizes(e,t,s){let n=3,r=3;return t?(n=(e.markerMinSize+(e.markerMaxSize-e.markerMinSize)*t.scale(this.lines.from[s]))/2,r=(e.markerMinSize+(e.markerMaxSize-e.markerMinSize)*t.scale(this.lines.to[s]))/2):e.markerDefaultSize&&(n=e.markerDefaultSize/2,r=e.markerDefaultSize/2),{sizeFrom:n,sizeTo:r}}fillLeftBottomRect(){const e=new Path2D;e.rect(this.sp.yAxisBox.minX,this.sp.yAxisBox.maxY,this.sp.yAxisBox.width,this.sp.xAxisBox.height),this.ctx.fillStyle="white",this.ctx.beginPath(),this.ctx.fill(e),this.ctx.closePath()}createMultiLinesIndices(){const e=new G.Z(this.lines.from.length);e.setAll(!0);for(let t=-1;-1!==(t=e.findNext(t));){const s=t,n=this.lines.from[s],r=this.lines.to[s];let i=1;for(let s=t;-1!==(s=e.findNext(s));){const t=this.lines.from[s],o=this.lines.to[s];(t===n&&o===r||o===n&&t===r)&&(this.multipleLinesCounts[s]=++i,e.setBit(s,!1,!1))}i>1&&(this.multipleLinesCounts[s]=1),e.setBit(t,!1,!1)}}checkCoordsOnLine(e,t){let s=-1,n=null,r=null;const i=this.sp.getOptions().look,o=i.sizeColumnName?this.sp.dataFrame.col(i.sizeColumnName):null,a=this.sp.dataFrame.filter;for(let l=0;l<this.lines.from.length;l++)if(a.get(this.lines.from[l])&&a.get(this.lines.to[l])&&this.visibility.getBit(l)){const{sizeFrom:a,sizeTo:c}=this.getMarkersSizes(i,o,l),h=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[l]),this.yAxisCol.get(this.lines.from[l])),u=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[l]),this.yAxisCol.get(this.lines.to[l]));if(this.multipleLinesCounts[l]){const s=this.getLineLength(h.x,h.y,u.x,u.y),n=this.getPointOnDistance(h.x,h.y,u.x,u.y,c,s),i=this.getPointOnDistance(u.x,u.y,null==h?void 0:h.x,null==h?void 0:h.y,a,s),o=this.lines.from[l]>this.lines.to[l]?this.findControlPoint(this.multipleLinesCounts[l],n.x,n.y,i.x,i.y,l):this.findControlPoint(this.multipleLinesCounts[l],i.x,i.y,n.x,n.y,l);r=this.calculateDistToCurveLine(l,e,t,n,i,o)}else r=this.calculateDistToStraightLine(e,t,h,u);(!n&&null!==r&&r<5||n&&null!==r&&r<n)&&(n=r,s=l)}return s}calculateDistToStraightLine(e,t,s,n){const r=Math.min(s.x,n.x),i=Math.max(s.x,n.x),o=Math.min(s.y,n.y),a=Math.max(s.y,n.y);return e>=r-2&&e<=i+2&&t>=o-2&&t<=a+2?this.distToStraightLineSegment(e,t,s,n):null}distToStraightLineSegment(e,t,s,n){const r=(e,t,s,n)=>Math.pow(e-s,2)+Math.pow(t-n,2),i=r(s.x,s.y,n.x,n.y);if(0==i)return r(e,t,s.x,s.y);let o=((e-s.x)*(n.x-s.x)+(t-s.y)*(n.y-s.y))/i;return o=Math.max(0,Math.min(1,o)),r(e,t,s.x+o*(n.x-s.x),s.y+o*(n.y-s.y))}calculateDistToCurveLine(e,t,s,n,r,i){const o=Math.min(n.x,r.x,i.x),a=Math.max(n.x,r.x,i.x),l=Math.min(n.y,r.y,i.y),c=Math.max(n.y,r.y,i.y);if(t>=o-2&&t<=a+2&&s>=l-2&&s<=c+2){const e=a-o,h=c-l;return this.calculateDistToCurveInRect(t,s,n,i,r,e,h)}return null}calculateDistToCurveInRect(e,t,s,n,r,i,o){const a=Math.floor((i+o)/3),l=1/a,c=new Uint32Array(a),h=new Uint32Array(a),u=new Uint32Array(a);let d=null;const p=new G.Z(a);for(let i=0;i<c.length;i++){const o=i*l,a=Math.pow(1-o,2)*s.x+2*o*(1-o)*n.x+Math.pow(o,2)*r.x,p=Math.pow(1-o,2)*s.y+2*o*(1-o)*n.y+Math.pow(o,2)*r.y,m=Math.abs(e-a),f=Math.abs(t-p),g=m+f;(!d||d>g)&&(d=g),u[i]=Math.max(m,f),c[i]=a,h[i]=p}for(let e=0;e<c.length;e++)u[e]<d&&p.setBit(e,!0,!1);let m=null;for(let s=-1;-1!==(s=p.findNext(s));){const n=Math.hypot(c[s]-e,h[s]-t);(!m||m>n)&&(m=n)}return m}getLineLength(e,t,s,n){return Math.sqrt(Math.pow(s-e,2)+Math.pow(n-t,2))}getPointOnDistance(e,t,s,n,r,i){const o=s-r*((s-e)/i),l=n-r*((n-t)/i);return new a.Point(o,l)}findControlPoint(e,t,s,n,r,i){const o=t+(n-t)/2,l=s+(r-s)/2;let c=o-t,h=l-s;const u=Math.sqrt(c*c+h*h);c/=u,h/=u;const d=50*Math.ceil(e/2);return e%2==0?new a.Point(o+d/2*h,l-d/2*c):new a.Point(o-d/2*h,l+d/2*c)}canvasArrow(e,t,s,n,r){const i=Math.atan2(n-t,r-s)+Math.PI;e.moveTo(t-this.arrowWidth*Math.sin(i-Math.PI/10),s-this.arrowWidth*Math.cos(i-Math.PI/10)),e.lineTo(t,s),e.lineTo(t-this.arrowWidth*Math.sin(i+Math.PI/10),s-this.arrowWidth*Math.cos(i+Math.PI/10))}}const V="dimensionality-reducer-terminate-event";var B=s(850);async function H(e,t,n,r,o,a,l){let c=await async function(e,t,n,r,o,a,l){if(!a.distanceFnArgs)throw new Error("options.distanceFnArgs must be defined");if(e.length!==t.length||e.length!==a.distanceFnArgs.length||e.length!==r.length)throw new Error("data, metrics and options and weights must have the same length");return new Promise((function(c,h){const u=new Worker(new URL(s.p+s.u(42),s.b));u.postMessage({columnsData:e,distanceMetrics:t,method:n,options:a,weights:r,aggregationMethod:o});const d=i.events.onCustomEvent(V).subscribe((()=>{try{u?.terminate()}finally{d.unsubscribe()}}));u.onmessage=({data:{error:e,embedding:t,epochNum:s,epochsLength:n}})=>{L(s)||L(n)?(d.unsubscribe(),e?h(e):c(t),setTimeout((()=>u.terminate()),100)):l&&l(s,n,t)}}))}(e,n,t,r,o,a,l);return c=c.map((e=>(0,B.Fv)(e))),c}let j=0;const W="cliffsDf",U=new y.Subject,Z="activity_difference",Y="SALI_index",K="similarity",q="line_index",z=["1_molecule","2_molecule"],X="filterCliffs";var J,Q=s(499),ee=s(5226),te=s(7228),se=s(8457),ne=s(8260);async function re(e,t,s,n){const r=(0,se.O)(t),i=(0,ne.vU)(t.getTag(a.TAGS.UNITS),t.getTag("separator"))(s),o=n===J.IDENTITY?function(e,t){const s=t.columns.length,n=new Array(s),r=new Array(s),i=new Array(s);for(let o=0;o<s;++o){const s=t.columns.byIndex(o);n[o]=s.getRawData(),r[o]=s.categories.indexOf(""),i[o]=s.categories.indexOf(e[o]??"")}const o=a.Column.float("Identity",t.rowCount),l=o.getRawData();for(let s=0;s<t.rowCount;++s){l[s]=0;for(let t=0;t<e.length;++t)n[t][s]===i[t]&&++l[s];l[s]/=e.length}return o}(i,r):n===J.SIMILARITY?await async function(e,t){const s=t.columns.toList();return await(0,te.Qx)(s,e)}(i,r):null;if(null===o)throw new Error(`In bio library: Unkown sequence scoring method: ${n}`);return o.name=e.columns.getUnusedName(o.name),e.columns.add(o),o}!function(e){e.IDENTITY="identity",e.SIMILARITY="similarity"}(J||(J={}));var ie=s(7945),oe=s(4293),ae=s(6414),le=s.n(ae);const ce="rgb(100,100,100)",he="#808080",ue="rgb(0,0,0)",de=ne.GU;var pe,me;function fe(e,t,s,n,r,i,o=ce,a=0,l=!1,c=1,h="",u=!1,d=me.classic,p=[],m=0,f=null,g=[],y=null,b={}){r.textAlign="start";let v=i.substring(0),w=u?"":h;d===me.MSA&&(w="");let C=!0,S=!0,x="difference";null!=f&&null!=f.cell.column&&(C=f.cell.column.temp["color-code"]??!0,S=f.cell.column.temp["compare-with-current"]??!0,x=f.cell.column.temp["highlight-difference"]??"difference");const A=g[m];S&&g.length>0&&"difference"===x&&(c=v==A?.3:c),S&&g.length>0&&"equal"===x&&(c=v!=A?.3:c),null!=y&&(v=de(v,y));const E=v+w;b[E]??(b[E]=r.measureText(E));let _=b[E];b[v]??(b[v]=r.measureText(v));let T=b[v].width;b[w]??(b[w]=r.measureText(w));const I=b[w].width,$=n/2-(_.fontBoundingBoxAscent+_.fontBoundingBoxDescent)/2+1;function M(s,n){const i=C?o:ue;r.fillStyle=i,r.globalAlpha=c,d===me.classic&&(r.fillText(v,e+s,t+$),r.fillStyle=he,r.fillText(w,e+n,t+$)),d===me.MSA&&r.fillText(v,e+s,t+$)}_=_.width,d===me.MSA&&(T=p[m],_=p[m]);const N=(p[m]??0)-(p[0]??0);if(l||_>s)return M(N,N+T),e+N+T+I;{const t=(s-_)/2;return M(t,t+T),e+N+t+T}}!function(e){e.maxMonomerLength=".mm.cellRenderer.maxMonomerLength"}(pe||(pe={})),function(e){e.MSA="MSA",e.classic="classic"}(me||(me={}));var ge,ye=s(9611),be=s(8447),ve=s(7331);!function(e){e.long="long",e.short="short"}(ge||(ge={}));const we={true:"1",false:"0"};var Ce=s(3553);const Se="rgb(100,100,100)",xe=be.GU;function Ae(e,t,s,n,r){return e?Math.max(Math.min(e.canvas.width/r-s,n)):Math.max(t.canvas.width/r-s,0)}function Ee(e){const t=!le().enumerate(e).some((([t,s])=>t.length>1&&0!=s&&s!=e.length-1)),s=[],n=t?"":" ";for(const[t,r]of le().enumerate(e)){let i=t;r<e.length&&(i+=`${t?"":"-"}${n}`),s.push(i)}return[s,t]}class _e extends a.GridCellRenderer{constructor(){super(...arguments),this.padding=5}get name(){return"sequence"}get cellType(){return"sequence"}get defaultHeight(){return 30}get defaultWidth(){return 230}onClick(e,t){e.cell.column.temp["current-word"]=e.cell.value,e.grid.invalidate()}onMouseMove(e,t){const s=e.cell.column.temp["bio-seqCol"];if(!s)return;const n=e.bounds,r=t.offsetX-e.gridColumn.left+(e.gridColumn.left-n.x),a=s.getPosition(e.tableRowIndex,r),l=s.getSeqMonList(e.tableRowIndex);if(null!==a&&a<l.length){const e=l[a],n=[o.div(e)];if(s._monomerStructureMap[e])n.push(s._monomerStructureMap[e]);else{const t=s.getMonomer(e);if(t){const r={autoCrop:!0,autoCropMargin:0,suppressChiralText:!0},o=i.chem.svgMol(t.smiles,void 0,void 0,r);n.push(o),s._monomerStructureMap[e]=o}}o.tooltip.show(o.divV(n),t.x+16,t.y+16)}else o.tooltip.hide()}render(e,t,s,n,r,i,o){let l,c=0,h=50;try{l=i.grid}catch(e){l=void 0;const[t,s]=(0,ie.yf)(e);Is.logger.error(t,void 0,s)}const u=i.cell.column;if(!l||!u)return;const d=u.temp,p=d["monomer-width"];if("short"===(null!=p?p:"short")){const e=parseInt(u.getTag(pe.maxMonomerLength));h=(isNaN(e)?Is.properties?.MaxMonomerLength:e)??4}let m=u.temp["bio-seqCol"];m||(m=new ye.A(l,u,(()=>{const e=Q.Cn.getOrCreate(u);return{unitsHandler:e,monomerCharWidth:7,separatorWidth:e.isMsa()?8:c,monomerToShort:xe,monomerLengthLimit:h,monomerLib:Os()}}))),u.tags[".mm.cellRenderer.settingsChanged"]===we.true&&(c=d[".mm.cellRenderer.gapLength"]??c,m.setMonomerLengthLimit(h),m.setSeparatorWidth(m.isMsa()?8:c),u.setTag(".mm.cellRenderer.settingsChanged",we.false));const[f,g]=m.getCellMonomerLengths(i.tableRowIndex);f.length,m.updated&&(d["bio-seqCol"]=m),e.save();try{const o=window.devicePixelRatio,l=-1!==i.gridRow?i.grid:null,c=i.cell.value,p=u.getTag("alphabet"),f=50;n=Ae(l,e,t,n,o),e.beginPath(),e.rect(t+this.padding,s+this.padding,n-this.padding-1,r-2*this.padding),e.clip(),e.font="12px monospace",e.textBaseline="top";const y=u.getTag(a.TAGS.UNITS),b=u.getTag("aligned"),v=(0,be.py)(p),w=u.getTag("separator")??"",C=n/5,S=Q.Cn.getOrCreate(u).getSplitter(C),x=d["reference-sequence"],A=d["current-word"];A&&-1===u?.dataFrame?.currentRowIdx&&(d["current-word"]=null);const E=S(null!=x&&""!=x?x:A??""),_=S(c);let T=Se,I=me.classic;b&&b.includes("MSA")&&y==be.r2.SEPARATOR&&(I=me.MSA);for(const[o,a]of le().enumerate(_)){T=v.get(o),e.fillStyle=Se;const l=a===_.length-1;if(fe(t+this.padding,s,n,r,e,o,T,0,!0,1,w,l,I,g,a,i,E,h,m._monomerLengthMap),f>n)break}}catch(e){const t=e instanceof Error?e.message:e?e.toString():"Error 'undefined'";Is.logger.error(`Bio: MacromoleculeSequenceCellRenderer.render() error: ${t}`)}finally{e.restore()}}}class Te extends a.GridCellRenderer{get name(){return"MacromoleculeDifferenceCR"}get cellType(){return Ce.Of.MACROMOLECULE_DIFFERENCE}get defaultHeight(){return 30}get defaultWidth(){return 230}render(e,t,s,n,r,i,o){const l=window.devicePixelRatio,c=i.grid,h=i.cell,u=i.tableColumn,d=h.value??"",p=u.tags.separator,m=u.tags[a.TAGS.UNITS];n=Ae(c,e,t,n,l);const[f,g]=d.split("#"),y=(0,ne.vU)(m,p);Ie(e,t,s,n,r,y(f),y(g),m)}}function Ie(e,t,s,n,r,i,o,a,l,c){if(i.length!==o.length){const e=function(e,t){let s=0,n=0;const r=e.length>t.length?e:t,i=e.length>t.length?t:e;for(let e=0;e<i.length;e++)r[e]===i[e]&&s++;const o=r.length-i.length;for(let e=r.length-1;e>o;e--)r[e]===i[e-o]&&n++;const a=new Array(Math.abs(e.length-t.length)).fill("");function l(e){return s>n?e.concat(a):a.concat(e)}return e.length>t.length?t=l(t):e=l(e),{subParts1:e,subParts2:t}}(le()(i).toArray(),le()(o).toArray());i=e.subParts1,o=e.subParts2}const h=e.measureText(Ee(i).join("")),u=e.measureText(Ee(o).join("")),d=Math.max(h.width,u.width);l&&(n=d+4*i.length,e.canvas.width=d+4*i.length);let p=Math.max(t,t+(n-(d+4*i.length))/2)+5;const m=Math.max(s,s+(r-28)/2);e.save(),e.beginPath(),e.rect(t,s,l?d+4*i.length:n,r),e.clip(),e.font="12px monospace",e.textBaseline="top";let f=ve.UE.Color;"HELM"!=a&&(f=(0,be.py)(a.substring(a.length-2)));for(let t=0;t<i.length;t++){const s=i[t],a=o[t],l=f.get(s);if(s!=a){const i=f.get(a),o=fe(p,m-7,n,r,e,s,l,0,!0),h=fe(p,m+7,n,r,e,a,i,0,!0);p=Math.max(h,o),c&&(c[t]=$e(s,a,l,i,m,7,r))}else p=fe(p,m,n,r,e,s,l,0,!0,.5);p+=4}e.restore()}function $e(e,t,s,n,r,i,o){const a=document.createElement("canvas"),l=a.getContext("2d");l.font="12px monospace";const c=l.measureText(Ee([e]).join("")).width,h=l.measureText(Ee([t]).join("")).width,u=Math.max(c,h);return a.height=o,a.width=u+4,l.font="12px monospace",l.textBaseline="top",fe(0,r-i,u,o,l,e,s,0,!0),fe(0,r+i,u,o,l,t,n,0,!0),a}var Me,Ne=s(8467),Le=s(9298);!function(e){e.Unknown="unknown",e.FR="framework",e.CDR="cdr"}(Me||(Me={}));const Pe=new class{constructor(){this.regionTypes=[Me.CDR],this.chains=["Heavy","Light"],this.skipEmptyPositions=!1,this.fitWidth=!1,this.positionWidth=16,this.positionHeight=Le.ES.Entropy,this.filterSource=Le.vS.filterSource}};var Oe=s(172),Re=s(8415);const ke=Me;var Fe,Ge;!function(e){e.STYLE="Style",e.BEHAVIOR="Behavior",e.LAYOUT="Layout",e.DATA="Data"}(Fe||(Fe={})),function(e){e.skipEmptyPositions="skipEmptyPositions",e.regionTypes="regionTypes",e.chains="chains",e.fitWidth="fitWidth",e.positionWidth="positionWidth",e.positionHeight="positionHeight",e.filterSource="filterSource"}(Ge||(Ge={}));const De=Pe;class Ve extends a.JsViewer{constructor(){super(),this.viewed=!1,this.regionsFg=null,this.regionsRoot=null,this.isOpened=!1,this.panelNode=null,this.regions=[],this.viewerId=++Ve.viewerCounter,this.setDataInProgress=!1,this.host=null,this.mainLayout=null,this.logos=[],this.viewSubs=[],this.calcSizeRequested=!1,this._onRendered=new y.Subject,this.skipEmptyPositions=this.bool(Ge.skipEmptyPositions,De.skipEmptyPositions,{category:Fe.DATA}),this.regionTypes=this.stringList(Ge.regionTypes,De.regionTypes,{category:Fe.DATA,choices:Object.values(ke).filter((e=>e!=ke.Unknown))}),this.chains=this.stringList(Ge.chains,De.chains,{category:Fe.DATA,choices:["Heavy","Light"]}),this.fitWidth=this.bool(Ge.fitWidth,De.fitWidth,{category:Fe.LAYOUT}),this.positionWidth=this.float(Ge.positionWidth,De.positionWidth,{category:Fe.LAYOUT,editor:"slider",min:0,max:64,description:"Internal WebLogo viewers property width of position."}),this.positionHeight=this.string(Ge.positionHeight,De.positionHeight,{category:Fe.LAYOUT,choices:Object.keys(Le.ES)}),this.filterSource=this.string(Ge.filterSource,De.filterSource,{category:Fe.BEHAVIOR,choices:Object.values(Le.Ct)}),this.viewSyncer=new Oe.c(Is.logger)}viewerToLog(){return`VdRegionsViewer<${this.viewerId}>`}async init(){this.subs.push((0,y.fromEvent)(this.root,"mousemove").subscribe(this.rootOnMouseMove.bind(this)))}detach(){const e=`${this.viewerToLog()}.detach()`,t=super.detach.bind(this);this.viewSyncer.sync(`${e}`,(async()=>{this.setDataInProgress||(this.viewed&&(await this.destroyView("detach"),this.viewed=!1),t())}))}onTableAttached(){super.onTableAttached(),this.setData(this.regions)}onPropertyChanged(e){if(super.onPropertyChanged(e),e){switch(e.name){case Ge.regionTypes:case Ge.chains:this.setData(this.regions)}switch(e.name){case Ge.skipEmptyPositions:for(let e=0;e<this.logos.length;++e)for(const t of this.chains)this.logos[e][t].setOptions({[Re.bo.skipEmptyPositions]:this.skipEmptyPositions});this.calcSize();break;case Ge.fitWidth:case Ge.positionWidth:this.calcSize();break;case Ge.positionHeight:for(let e=0;e<this.logos.length;++e)for(const t of this.chains)this.logos[e][t].setOptions({[Re.bo.positionHeight]:this.positionHeight});this.calcSize();break;case Ge.filterSource:this.filterSourceInput.value=this.filterSource;break;default:this.setData(this.regions)}}else console.warn("Bio: VdRegionsViewer.onPropertyChanged() property is null")}setData(e){const t=`${this.viewerToLog()}.setData()`;Is.logger.debug(`${t}, in, regions.length = ${e.length}`),this.viewSyncer.sync(`${t}`,(async()=>{if(!this.setDataInProgress){this.setDataInProgress=!0;try{this.viewed&&(await this.destroyView("setData"),this.viewed=!1),this.regions=e,this.viewed||(await this.buildView("setData"),this.viewed=!0)}finally{this.setDataInProgress=!1}}}))}async destroyView(e){Is.logger.debug(`Bio: VdRegionsViewer.destroyView( mainLayout = ${this.mainLayout?"value":"none"} ), purpose = '${e}', this.regions.length = ${this.regions.length}`),this.filterSourceInput&&o.empty(this.filterSourceInput.root),null!=this.mainLayout&&(this.mainLayout.remove(),this.host.remove(),this.host=null,this.mainLayout=null);for(const e of this.viewSubs)e.unsubscribe()}async buildView(e){Is.logger.debug(`Bio: VdRegionsViewer.buildView() begin, purpose = '${e}', this.regions.length = ${this.regions.length}`);const t=this.regions.filter((e=>this.regionTypes.includes(e.type))),s=Array.from(new Set(t.map((e=>e.order)))).sort(),n=[];for(let e=0;e<s.length;e++)for(const r of this.chains){const i=t.find((t=>t.order==s[e]&&t.chain==r));n.push((async()=>{const t=await this.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:i.sequenceColumnName,startPositionName:i.positionStartName,endPositionName:i.positionEndName,fixWidth:!0,skipEmptyPositions:this.skipEmptyPositions,positionWidth:this.positionWidth,positionHeight:this.positionHeight,filterSource:this.filterSource});return t.onSizeChanged.subscribe((()=>{this.calcSize()})),[e,r,t]})())}const r=await Promise.all(n);this.logos=new Array(s.length);for(let e=0;e<s.length;++e)this.logos[e]={};for(const[e,t,s]of r)this.logos[e][t]=s,this.viewSubs.push(s.onFreqsCalculated.subscribe((()=>{this.calcSize()})));this.mainLayout=o.table(this.chains,(e=>[...s.length>0?[o.div(e,{style:{transform:"rotate(-90deg)",font:"12px Roboto, Roboto Local, sans-serif",textAlign:"center",width:"16px",marginTop:"24px",marginLeft:"6px"}})]:[],...[...Array(s.length).keys()].map((t=>{const s=this.logos[t][e];return s.root.style.height="100%",o.div([s.root],{style:{marginTop:"4px",marginBottom:"4px"}})}))]),["",...[...Array(s.length).keys()].map((e=>t.find((t=>t.order==s[e]&&t.chain==this.chains[0])).name||"Name"))]),this.mainLayout.className="mlb-vd-regions-viewer-table2",this.filterSourceInput=o.choiceInput("Data source",this.filterSource,Object.values(Le.Ct),this.filterSourceInputOnValueChanged.bind(this)),this.filterSourceInput.root.style.position="absolute",this.filterSourceInput.root.style.right="9px",this.filterSourceInput.root.style.top="-4px",Math.ceil(255*Math.random()).toString(16),this.host=o.div([this.mainLayout,this.filterSourceInput.root],{}),this.root.appendChild(this.host),this.root.style.overflowX="auto",this.calcSize(),this.viewSubs.push(o.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this))),Is.logger.debug("Bio: VdRegionsViewer.buildView() end")}calcSize(){Is.logger.debug("Bio: VdRegionsViewer.calcSize(), start");const e=()=>{if(!this.host)return;const e=(this.root.clientHeight-54)/this.chains.length;let t=0;for(let s=0;s<this.logos.length;s++){for(const t of this.chains)this.logos[s][t].root.style.height=`${e}px`;t+=Math.max(...this.chains.map((e=>this.logos[s][e].Length)))}if(this.fitWidth){if(this.logos.length>0&&t>0){const e=22,s=13,n=9,r=(this.root.clientWidth-e-(this.logos.length-1)*n-s)/t;for(let e=0;e<this.logos.length;e++)for(const t of this.chains){const s=this.logos[e][t];s.setOptions({[Re.bo.positionWidth]:r-s.positionMarginValue}),s.root.style.width=r*s.Length+"px"}}this.host.style.setProperty("overflow","hidden","important")}else{for(let e=0;e<this.logos.length;e++)for(const t of this.chains)this.logos[e][t].setOptions({[Re.bo.positionWidth]:this.positionWidth});this.host.style.removeProperty("overflow")}0===this.positionWidth?this.host.style.setProperty("overflow-x","hidden","important"):this.host.style.removeProperty("overflow-x")};this.calcSizeRequested||(this.calcSizeRequested=!0,window.setTimeout((()=>{e(),this.calcSizeRequested=!1}),0))}rootOnSizeChanged(e){this.calcSize()}rootOnMouseMove(e){}filterSourceInputOnValueChanged(){const e=`${this.viewerToLog()}.filterSourceInputOnValueChanged()`,t=this.filterSourceInput.value;this.viewSyncer.sync(`${e}`,(async()=>{if(this.filterSource!==t){this.props.getProperty(Ge.filterSource).set(this,t);for(let e=0;e<this.logos.length;e++)for(let t=0;t<this.chains.length;t++){const s=this.chains[t];this.logos[e][s].setOptions({[Re.bo.filterSource]:this.filterSource})}}}))}get onRendered(){return this._onRendered}invalidate(e){const t=`${this.viewerToLog()}.invalidate(${e?` <- ${e} `:""})`;this.viewSyncer.sync(`${t}`,(async()=>{this._onRendered.next()}))}async awaitRendered(e=5e3){await(0,Ne.zg)(this.onRendered,(()=>{}),(()=>{this.invalidate()}),e);const t=this.viewSyncer.resetErrors();if(t.length>0)throw t[0]}}Ve.viewerCounter=-1;var Be=s(9017),He=s(708);async function je(e,t,s="Morgan"){const n=Q.Cn.getOrCreate(e),r=e.toList(),i=n.getSplitter(),o=r.length;let a=36;const l=new Map;for(let t=0;t<o;t++){const s=r[t];if(null===r[t]||e.isNone(t)){r[t]=null;continue}r[t]="";const n=i(s);for(let e=0;e<n.length;e++){const s=n[e];l.has(s)||(l.set(s,String.fromCharCode(a)),a++),r[t]+=l.get(s)}}let c={};if(t===He.U.MONOMER_CHEMICAL_DISTANCE){const e=Array.from(l.keys()),t=await(0,te.GR)(e,s);t.scoringMatrix.forEach(((e,s)=>{e.forEach(((e,n)=>{t.scoringMatrix[s][n]=1-e}))}));const n={};Object.entries(t.alphabetIndexes).forEach((([e,t])=>{n[l.get(e)]=t})),c={scoringMatrix:t.scoringMatrix,alphabetIndexes:n}}else if(t===He.U.NEEDLEMANN_WUNSCH){const e=Array.from(l.keys()),t=await(0,te.GR)(e,s),n={};Object.entries(t.alphabetIndexes).forEach((([e,t])=>{n[l.get(e)]=t})),c={scoringMatrix:t.scoringMatrix,alphabetIndexes:n}}return{seqList:r,options:c}}var We=s(6361),Ue=s(7983);function Ze(e){const t=o.divH([],{style:{gap:"10px"}}),s=o.divV([o.divText(e.seqCol.name),o.divText(e.activityCol.name)]);return s.style.fontWeight="bold",s.style.display="flex",s.style.justifyContent="space-between",t.append(s),e.points.forEach((s=>{const n=o.divText(e.activityCol.get(s).toFixed(2));n.style.display="flex",n.style.justifyContent="left",n.style.paddingLeft="30px",t.append(o.divV([o.divText(e.seqCol.get(s)),n]))})),t}function Ye(e){const t=o.div();t.append(o.divText(e.seqCol.name,{style:{fontWeight:"bold"}}));const s=new Array(2),n=new Array(2);e.points.forEach(((t,r)=>{s[r]=e.seqCol.get(t),n[r]=e.activityCol.get(t)}));const r={},i=Q.Cn.getOrCreate(e.seqCol),a=i.getSplitter(),l=qe(a(s[0]),a(s[1]),i.units,r);return t.append(o.div(l,{style:{width:"300px",overflow:"scroll"}})),t.append(ze(r)),t.append(Ke("Activity delta",Math.abs(n[0]-n[1]))),t.append(Ke("Cliff",e.sali)),t}function Ke(e,t){return o.divH([o.divText(`${e}: `,{style:{fontWeight:"bold",paddingRight:"5px"}}),o.divText(t.toFixed(2))],{style:{paddingTop:"10px"}})}function qe(e,t,s,n){const r=document.createElement("canvas"),i=r.getContext("2d");return r.height=30,Ie(i,0,0,0,30,e,t,s,!0,n),r}function ze(e){const t=o.div();if(Object.keys(e).length>0){const s=o.divV([]);s.append(o.divH([o.divText("Pos",{style:{fontWeight:"bold",width:"30px",borderBottom:"1px solid"}}),o.divText("Difference",{style:{fontWeight:"bold",borderBottom:"1px solid"}})]));for(const t of Object.keys(e))e[t].style.borderBottom="1px solid lightgray",s.append(o.divH([o.divText((parseInt(t)+1).toString(),{style:{width:"30px",borderBottom:"1px solid lightgray"}}),e[t]]));t.append(s)}return t}function Xe(e,t){const s=a.Column.string("seq_diff",e.rowCount).init((s=>`${e.get(t[0],s)}#${e.get(t[1],s)}`));s.semType="MacromoleculeDifference",s.setTag(a.TAGS.UNITS,e.col(t[0]).getTag(a.TAGS.UNITS)),s.setTag("separator",e.col(t[0]).getTag("separator")),e.columns.add(s);const n=e.plot.grid();return n.col(t[0]).visible=!1,n.col(t[1]).visible=!1,n}class Je extends a.JsViewer{constructor(e){super(),this.name="",this.metricsProperties=["distanceMetric","fingerprint"],this.fingerprintChoices=["Morgan","Pattern"],this.initialized=!1,this.tags=[a.TAGS.UNITS,"aligned","separator","alphabet"],this.preComputeDistanceMatrix=!1,this.renderPromise=Promise.resolve(),this.fingerprint=this.string("fingerprint",this.fingerprintChoices[0],{choices:this.fingerprintChoices}),this.limit=this.int("limit",10),this.distanceMetric=this.string("distanceMetric",g.kg[0],{choices:g.kg}),this.moleculeColumnName=this.string("moleculeColumnName"),this.name=e}init(){this.initialized=!0}detach(){this.subs.forEach((e=>e.unsubscribe()))}async onTableAttached(){if(this.init(),this.dataFrame){this.preComputeDistanceMatrix=this.dataFrame.rowCount<=22e3,this.subs.push(a.debounce(this.dataFrame.onRowsRemoved,50).subscribe((e=>this.render(!0))));const e="diversity"!==this.name;this.subs.push(a.debounce(this.dataFrame.onCurrentRowChanged,50).subscribe((t=>this.render(e)))),this.subs.push(a.debounce(this.dataFrame.selection.onChanged,50).subscribe((e=>this.render(!1)))),this.subs.push(a.debounce(o.onSizeChanged(this.root),50).subscribe((e=>this.render(!1)))),this.moleculeColumn=this.dataFrame.columns.bySemType(a.SEMTYPE.MACROMOLECULE),this.moleculeColumnName=this.moleculeColumn?.name,this.getProperty("limit").fromOptions({min:1,max:this.dataFrame.rowCount})}this.render()}onPropertyChanged(e){if(super.onPropertyChanged(e),this.initialized){if("moleculeColumnName"===e.name){const t=this.dataFrame.col(e.get(this));t.semType===a.SEMTYPE.MACROMOLECULE&&(this.moleculeColumn=t)}this.render()}}render(e=!0){this.renderPromise=this.renderPromise.then((async()=>{this.computeRequested=this.computeRequested||e,await this.renderInt(e)}))}async renderInt(e){}beforeRender(){return!(!this.initialized||this.dataFrame&&this.moleculeColumnName&&this.dataFrame.col(this.moleculeColumnName).semType!==a.SEMTYPE.MACROMOLECULE&&(i.shell.error(`${this.moleculeColumnName} is not Macromolecule type`),1))}}var Qe=s(7241);const et={gapPenalty:1,matchScore:1,gapSymbol:"-",localAlignment:!1};class tt extends Je{constructor(){super("similarity"),this.sketchedMolecule="",this.curIdx=0,this.molCol=null,this.idxs=null,this.scores=null,this.gridSelect=!1,this.targetMoleculeIdx=0,this.computeCompleted=new y.Subject,this.distanceMatrixComputed=!1,this.kPrevNeighbors=0,this.cutoff=this.float("cutoff",.01,{min:0,max:1}),this.hotSearch=this.bool("hotSearch",!0),this.similarColumnLabel=this.string("similarColumnLabel",null)}init(){this.hotSearch=!0,this.initialized=!0}async renderInt(e){if(this.beforeRender()&&this.moleculeColumn&&(this.curIdx=-1==this.dataFrame.currentRowIdx?0:this.dataFrame.currentRowIdx,e&&!this.gridSelect)){this.targetMoleculeIdx=-1==this.dataFrame.currentRowIdx?0:this.dataFrame.currentRowIdx;const e=Q.Cn.getOrCreate(this.moleculeColumn);await(e.isHelm()?this.computeByChem():this.computeByMM());const t=null!=this.similarColumnLabel?this.similarColumnLabel:`similar (${this.moleculeColumnName})`;this.molCol=a.Column.string(t,this.idxs.length).init((e=>this.moleculeColumn?.get(this.idxs?.get(e)))),this.molCol.semType=a.SEMTYPE.MACROMOLECULE,this.tags.forEach((e=>this.molCol.setTag(e,this.moleculeColumn.getTag(e))));const s=a.DataFrame.fromColumns([this.idxs,this.molCol,this.scores]);s.onCurrentRowChanged.subscribe((e=>{this.dataFrame.currentRowIdx=s.col("indexes").get(s.currentRowIdx),setTimeout((()=>{this.createPropertyPanel(s)}),1e3),this.gridSelect=!0}));const n=s.plot.grid();n.col("indexes").visible=!1;const r=this.idxs?.getRawData().findIndex((e=>e==this.targetMoleculeIdx));n.cell("score",r).cell.value=null,i.shell.v.grid.root.addEventListener("click",(e=>{this.gridSelect=!1})),(0,oe.Y)(this.root,n.root),this.computeCompleted.next(!0)}}async computeByChem(){const e=await(0,Qe.D)(this.moleculeColumn),t=(a.DataFrame.fromColumns([e]),await i.functions.call("Chem:callChemSimilaritySearch",{df:this.dataFrame,col:e,molecule:e.get(this.targetMoleculeIdx),metricName:this.distanceMetric,limit:this.limit,minScore:this.cutoff,fingerprint:this.fingerprint}));this.idxs=t.getCol("indexes"),this.scores=t.getCol("score")}async computeByMM(){const e=this.moleculeColumn.length,t=Math.min(this.limit,e-1);if(!this.knn||this.kPrevNeighbors!==t){const s=(await je(this.moleculeColumn,He.U.LEVENSHTEIN)).seqList;this.kPrevNeighbors=t,this.knn=await(new k).getKNN(s,He.U.LEVENSHTEIN,Math.min(this.limit,e-1))}const s=new Array(t).fill(0).map(((e,t)=>({idx:this.knn.knnIndexes[this.targetMoleculeIdx][t],score:1-this.knn.knnDistances[this.targetMoleculeIdx][t]})));s.sort(((e,t)=>t.score-e.score)),s.unshift({idx:this.targetMoleculeIdx,score:a.FLOAT_NULL}),this.idxs=a.Column.int("indexes",t+1).init((e=>s[e].idx)),this.scores=a.Column.float("score",t+1).init((e=>s[e].score))}createPropertyPanel(e){const t=o.div(),s={},n=this.molCol?.name,r=e.col(n),a=Q.Cn.getOrCreate(r),l=a.getSplitter(),c=l(this.moleculeColumn.get(this.targetMoleculeIdx)),h=l(e.get(n,e.currentRowIdx)),u=function(e,t,s={}){const n={...et,...s},r=e.length,i=t.length,o=Array(r+1).fill(0).map((()=>Array(i+1).fill(0)));let a=-9999,l=[1,1];for(let s=1;s<r+1;s++)for(let r=1;r<i+1;r++)o[s][r]=Math.max(0,o[s-1][r-1]+(e[s-1]===t[r-1]?n.matchScore:-n.matchScore),o[s-1][r]-n.gapPenalty,o[s][r-1]-n.gapPenalty),o[s][r]>=a&&(a=o[s][r],l=[s,r]);let c=n.localAlignment?l[0]:r,h=n.localAlignment?l[1]:i,u=new Array(0),d=new Array(0);for(;c>0&&h>0;){const s=Math.max(o[c-1][h-1],o[c-1][h],o[c][h-1]);o[c][h]==o[c-1][h-1]+n.matchScore&&s==o[c-1][h-1]?(u.push(e[c-1]),d.push(t[h-1]),c-=1,h-=1):o[c][h]==o[c-1][h]-n.gapPenalty?(d.push(n.gapSymbol.valueOf()),u.push(e[c-1]),c-=1):o[c][h]==o[c][h-1]-n.gapPenalty?(u.push(n.gapSymbol.valueOf()),d.push(t[h-1]),h-=1):(u.push(e[c-1]),d.push(t[h-1]),c-=1,h-=1)}u=[...Array.from(e).splice(0,c),...u.reverse(),...n.localAlignment?Array.from(e).splice(l[0],r):[]],d=[...Array.from(t).splice(0,h),...d.reverse(),...n.localAlignment?Array.from(t).splice(l[1],i):[]];const p=c,m=h;return p>m?d=[...new Array(p-m).fill(n.gapSymbol.valueOf()),...d]:u=[...new Array(m-p).fill(n.gapSymbol.valueOf()),...u],d.length>u.length?u.push(...new Array(d.length-u.length).fill(n.gapSymbol.valueOf())):d.push(...new Array(u.length-d.length).fill(n.gapSymbol.valueOf())),{seq1:u.join(""),seq2:d.join(""),seq1Splitted:u,seq2Splitted:d}}(Array.from(c),Array.from(h)),d=qe(u.seq1Splitted,u.seq2Splitted,a.units,s);t.append(o.div(d,{style:{width:"300px",overflow:"scroll"}})),c.length!==h.length&&t.append(o.divV([o.divText("Different sequence length:",{style:{fontWeight:"bold"}}),o.divText(`target: ${c.length} monomers`),o.divText(`selected: ${h.length} monomers`)],{style:{paddingBottom:"10px"}})),t.append(ze(s));const p=o.accordion(),m=o.element("i");m.className="grok-icon svg-icon svg-view-layout",p.addTitle(o.span([m,o.label("Similarity search")])),p.addPane("Differences",(()=>t),!0),i.shell.o=p.root}}var st=s(279);class nt extends Je{constructor(){super("diversity"),this.renderMolIds=null,this.columnNames=[],this.computeCompleted=new y.Subject,this.diverseColumnLabel=this.string("diverseColumnLabel",null)}async renderInt(e){if(this.beforeRender()&&this.dataFrame&&e&&this.moleculeColumn){const e=Q.Cn.getOrCreate(this.moleculeColumn);await(e.isFasta()?this.computeByMM():this.computeByChem());const t=null!=this.diverseColumnLabel?this.diverseColumnLabel:`diverse (${this.moleculeColumnName})`,s=a.Column.string(t,this.renderMolIds.length).init((e=>this.moleculeColumn?.get(this.renderMolIds[e])));s.semType=a.SEMTYPE.MACROMOLECULE,this.tags.forEach((e=>s.setTag(e,this.moleculeColumn.getTag(e))));const n=a.DataFrame.fromColumns([s]);n.onCurrentRowChanged.subscribe((e=>{this.dataFrame.currentRowIdx=this.renderMolIds[n.currentRowIdx]})),(0,oe.Y)(this.root,n.plot.grid().root),this.computeCompleted.next(!0)}}async computeByChem(){const e=await(0,Qe.D)(this.moleculeColumn);a.DataFrame.fromColumns([e]),this.renderMolIds=await i.functions.call("Chem:callChemDiversitySearch",{col:e,metricName:this.distanceMetric,limit:this.limit,fingerprint:this.fingerprint})}async computeByMM(){const e=(await je(this.moleculeColumn,He.U.LEVENSHTEIN)).seqList,t=new R(!0,!1),s=await t.calc(e,He.U.LEVENSHTEIN);t.terminate();const n=this.moleculeColumn.length,r=(0,O.y)(n);this.renderMolIds=(0,st.L)(n,Math.min(n,this.limit),((e,t)=>this.moleculeColumn.isNone(e)||this.moleculeColumn.isNone(t)?0:s[r(e,t)]))}}var rt=s(4004),it=s(9943),ot=s(5393),at=s(7572),lt=s(3336),ct=s.n(lt),ht=s(8710),ut={};ut.styleTagTransform=$(),ut.setAttributes=E(),ut.insert=x().bind(null,"head"),ut.domAPI=C(),ut.insertStyleElement=T(),v()(ht.Z,ut),ht.Z&&ht.Z.locals&&ht.Z.locals;var dt=s(6584),pt=s(3776),mt=s(2428);async function ft(){await bt.showDialog()}class gt{constructor(e){this.eventManager=e}static async getContent(e){return gt._instance||(gt._instance=new gt(e)),gt._instance.widget||(gt._instance.widget=await gt._instance.createWidget()),gt._instance.widget}async createWidget(){this.monomerLibFileManager=await pt.t.getInstance(this.eventManager);const e=await this.getWidgetContent();return this.eventManager.addLibraryFileRequested$.subscribe((async()=>await this.promptToAddLibraryFiles())),new a.Widget(e)}async getWidgetContent(){this.monomerLibFileManager=await pt.t.getInstance(this.eventManager);const e=await yt.createControlsForm(this.eventManager);return ct()(e).addClass("monomer-lib-controls-form"),o.divV([e])}async promptToAddLibraryFiles(){a.Utils.openFile({accept:".json",open:async e=>{const t=await e.text(),s=e.name,n=a.TaskBarProgressIndicator.create(`Adding ${s} as a monomer library`);try{await this.monomerLibFileManager.addLibraryFile(t,s)}catch(e){i.shell.error(`File ${s} is not a valid monomer library, verify it is aligned to HELM JSON schema.`)}finally{n.close()}}})}}class yt{constructor(e){this.eventManager=e,this.eventManager.updateUIControlsRequested$.subscribe((async()=>await this.updateControlsForm())),this.eventManager.librarySelectionRequested$.subscribe((async([e,t])=>await this.updateLibrarySelectionStatus(t,e)))}static async createControlsForm(e){const t=new yt(e);return await t.initialize(),await t._createControlsForm()}async _createControlsForm(){this.monomerLibFileManager=await pt.t.getInstance(this.eventManager);const e=await this.createLibraryControls(),t=o.form(e);return ct()(t).addClass("monomer-lib-controls-form"),t}async initialize(){this.userLibSettings=await(0,dt.nW)()}async updateControlsForm(){const e=await this._createControlsForm();ct()(".monomer-lib-controls-form").replaceWith(e)}async createLibraryControls(){return(await pt.t.getInstance(this.eventManager)).getValidLibraryPaths().map((e=>this.createLibInput(e)))}createLibInput(e){const t=!this.userLibSettings.exclude.includes(e),s=o.boolInput(e,t,(t=>this.eventManager.updateLibrarySelectionStatus(e,t)));o.tooltip.bind(s.root,`Include monomers from ${e}`);const n=o.iconFA("trash-alt",(()=>this.promptForLibraryDeletion(e)));return o.tooltip.bind(n,`Delete ${e}`),s.addOptions(n),s}async updateLibrarySelectionStatus(e,t){this.updateLibrarySettings(e,t),await(0,dt.tW)(this.userLibSettings),await at.A.instance.loadLibraries(!0),i.shell.info("Monomer library user settings saved")}updateLibrarySettings(e,t){e?this.userLibSettings.exclude=this.userLibSettings.exclude.filter((e=>e!==t)):this.userLibSettings.exclude.includes(t)||this.userLibSettings.exclude.push(t)}promptForLibraryDeletion(e){o.dialog("Warning").add(o.divText(`Delete file ${e}?`)).onOK((async()=>{try{const t=a.TaskBarProgressIndicator.create(`Deleting ${e} library`);this.updateLibrarySelectionStatus(!1,e),await this.monomerLibFileManager.deleteLibraryFile(e),t.close()}catch(t){console.error(t),i.shell.error(`Failed to delete ${e} library`)}})).showModal(!1)}}class bt{constructor(){this.closeDialogSubject$=new y.Subject}static async showDialog(){bt._instance||(bt._instance=new bt,bt._instance.closeDialogSubject$.subscribe((()=>{bt._instance.dialog=void 0}))),bt._instance.dialog||(bt._instance.dialog=await bt._instance.getDialog()),bt._instance.dialog.show()}async getDialog(){const e=mt.A.getInstance(),t=await gt.getContent(e),s=o.dialog({title:"Manage monomer libraries",helpUrl:"/help/datagrok/solutions/domains/bio/bio.md#manage-monomer-libraries"});return ct()(s.root).css("width","350px"),s.clear(),s.addButton("Add",(()=>e.addLibraryFile()),void 0,"Upload new HELM monomer library"),s.add(t),s.onClose.subscribe((()=>this.closeDialogSubject$.next())),s}}var vt,wt=function(e,t,s,n){return new(s||(s=Promise))((function(r,i){function o(e){try{l(n.next(e))}catch(e){i(e)}}function a(e){try{l(n.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,a)}l((n=n.apply(e,t||[])).next())}))};class Ct{constructor(e,t,s=!1,n){var r;this.name="",this.description="",this._isAutomatic=!1,this._autoStartFirstStep=!1,this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._isStepProcessed=!1,this._root=o.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._steps=[],this._mainHeader=o.panel([],"tutorials-main-header"),this._header=o.h2(""),this._headerDiv=o.divH([],"tutorials-root-header"),this._stopStartBtn=o.button(o.iconFA("pause"),(()=>this._changeStopState()),"Play / pause"),this._restartBtn=o.button(o.iconFA("redo"),(()=>this._restartScript()),"Restart"),this._nextStepBtn=o.button(o.iconFA("play"),(()=>{this._isStepProcessed||this._nextStep()}),"Next step"),this._activity=o.panel([],"tutorials-root-description"),this._progressDiv=o.divV([],"tutorials-root-progress"),this._progress=o.element("progress"),this._progressSteps=o.divText(""),this._closeBtn=o.button(o.iconFA("chevron-left"),(()=>this._closeDock()),"Back to demo"),this.name=e,this.description=t,this._isAutomatic=s,this._autoStartFirstStep=null!==(r=null==n?void 0:n.autoStartFirstStep)&&void 0!==r&&r,this._progress.max=0,this._progress.value=1,Ct.currentObject=this}get steps(){return this._steps}get stepNumber(){return this._steps.length}_addHeader(){this._createHeaderDiv(),this._createProgressDiv(),this._mainHeader.append(this._headerDiv,this._progressDiv)}_createHeaderDiv(){this._header.innerText=this.name,this._headerDiv.append(this._closeBtn),this._headerDiv.append(this._header),this._nextStepBtn.firstChild.className="grok-icon fas fa-play",this._headerDiv.append(this._isAutomatic?this._stopStartBtn:this._nextStepBtn)}_createProgressDiv(){this._progress.max=this.stepNumber,this._progressDiv.append(this._progress),this._progressSteps=o.divText(`Step: ${this._progress.value} of ${this.stepNumber}`),this._progressDiv.append(this._progressSteps)}_addDescription(){var e;this._activity.append(o.div(this.description,"tutorials-root-description"));for(let t=0;t<this.stepNumber;t++){let s=o.iconFA("clock");this._isAutomatic||0===t&&(s=o.iconFA("play",(()=>this._nextStep()),"Next step"),s.className="grok-icon fas fa-play");const n=o.div(this._steps[t].name,"grok-tutorial-entry-instruction"),r=o.div(null===(e=this._steps[t].options)||void 0===e?void 0:e.description,"grok-tutorial-step-description hidden"),i=o.divH([s,n],"grok-tutorial-entry");this._activity.append(i,r)}}_initRoot(){var e,t,s;i.shell.windows.showContextPanel=!0,i.shell.windows.showHelp=!1;const n=Array.from(i.shell.dockManager.rootNode.children)[0];this._node=i.shell.dockManager.dock(this._root,a.DOCK_TYPE.FILL,n,""),(null===(t=null===(e=n.parent.container.containerElement.firstElementChild)||void 0===e?void 0:e.lastElementChild)||void 0===t?void 0:t.classList.contains("tab-handle-list-container"))&&(null===(s=n.parent.container.containerElement.firstElementChild)||void 0===s||s.lastElementChild.remove()),this._node.container.containerElement.classList.add("tutorials-demo-script-container"),this._addHeader(),this._root.append(this._mainHeader),this._addDescription(),this._root.append(this._activity)}_nextStep(){var e,t;return wt(this,void 0,void 0,(function*(){this._isStepProcessed=!0,this._isAutomatic||(this._nextStepBtn.classList.add("disabled"),this._nextStepBtn.firstChild.classList.add("fa-disabled"));const s=this._activity.getElementsByClassName("grok-tutorial-entry")[this._currentStep],n=this._activity.getElementsByClassName("grok-icon")[this._currentStep],r=this._activity.getElementsByClassName("grok-tutorial-step-description")[this._currentStep];n.className="grok-icon far fa-spinner-third fa-spin",r.classList.remove("hidden"),r.classList.add("visible");const i=s,a=(null===(e=this._steps[this._currentStep].options)||void 0===e?void 0:e.delay)?null===(t=this._steps[this._currentStep].options)||void 0===t?void 0:t.delay:2e3;yield this._steps[this._currentStep].func(),this._scrollTo(this._root,i.offsetTop-this._mainHeader.offsetHeight),this._isAutomatic&&(yield this._countdown(s,n,a),yield(0,Ne.gw)(a));const l=o.iconFA("check");if(n.replaceWith(l),l.className="grok-icon far fa-check",this._progress.value++,this._progressSteps.innerText=`Step: ${this._progress.value} of ${this.stepNumber}`,this._currentStep++,this._isStepProcessed=!1,this._currentStep!==this.stepNumber){if(!this._isAutomatic){const e=this._activity.getElementsByClassName("grok-icon")[this._currentStep],t=o.iconFA("play",(()=>this._nextStep()),"Next step");t.className="grok-icon fas fa-play",e.replaceWith(t),this._nextStepBtn.classList.remove("disabled"),this._nextStepBtn.firstChild.classList.remove("fa-disabled")}}else this._isAutomatic?this._stopStartBtn.replaceWith(this._restartBtn):this._nextStepBtn.replaceWith(this._restartBtn)}))}_startScript(){return wt(this,void 0,void 0,(function*(){for(let e=this._currentStep;e<this.stepNumber&&!this._isStopped&&!this._isCancelled;e++)yield this._nextStep()}))}_scrollTo(e,t){e.focus(),e.scrollTop=t}_countdown(e,t,s){return wt(this,void 0,void 0,(function*(){const n=o.div([],"demo-script-countdown");t.classList.add("hidden");let r=s/1e3;const i=this._createSVGIndicator(r);n.append(i),e.prepend(n);const a=setInterval((()=>{r--,0===r&&(clearInterval(a),n.remove(),t.classList.remove("hidden"),t.classList.add("visible"))}),1e3)}))}_createSVGIndicator(e){const t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","circle");return s.setAttributeNS(null,"cx","7"),s.setAttributeNS(null,"cy","7"),s.setAttributeNS(null,"r","6"),s.setAttributeNS(null,"style",`animation: countdown ${e}s linear infinite forwards`),t.append(s),t}_changeStopState(){const e=this._stopStartBtn.getElementsByClassName("grok-icon");e[0].className="grok-icon fas fa-play",this._isStopped=!this._isStopped,this._isStopped||(e[0].className="grok-icon fal fa-pause",this._isStepProcessed||this._startScript())}_restartScript(){i.shell.dockManager.close(this._node),i.shell.closeAll(),this._clearRoot(),this._setInitParams(),this.start()}_clearRoot(){this._root=o.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._mainHeader=o.panel([],"tutorials-main-header"),this._header=o.h2(""),this._headerDiv=o.divH([],"tutorials-root-header"),this._activity=o.panel([],"tutorials-root-description"),this._progressDiv=o.divV([],"tutorials-root-progress"),this._progress=o.element("progress"),this._progressSteps=o.divText(""),this._progress.max=0,this._progress.value=1}_setInitParams(){this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._stopStartBtn.getElementsByClassName("grok-icon")[0].className="grok-icon fal fa-pause",this._nextStepBtn.classList.remove("disabled")}_closeDock(){i.shell.dockManager.close(this._node),this.cancelScript()}cancelScript(){this._isCancelled=!0,Ct.currentObject=null}step(e,t,s){return this._steps[this.steps.length]={name:e,func:t,options:s},this}start(){return wt(this,void 0,void 0,(function*(){this._initRoot(),i.shell.newView(this.name),this._isAutomatic?this._startScript():this._autoStartFirstStep&&(yield this._nextStep())}))}}function St(e){const t=e instanceof Error?e.message:e.toString(),s=e instanceof Error?e.stack:void 0;i.shell.error(t),Is.logger.error(e.message,void 0,s)}Ct.currentObject=null,function(e){e.X="Embed_X",e.Y="Embed_Y"}(vt||(vt={}));const xt="samples/FASTA_PT_activity.csv";async function At(){const e="Dendrogram",t=a.Func.find({package:e,name:"getTreeHelper"});if(0===t.length)throw new Error(`Package "${e}" must be installed for TreeHelper.`);return(await t[0].prepare().call()).getOutputParamValue()}async function Et(){return await i.functions.call("Dendrogram:getDendrogramService",{})}var _t=function(e,t,s,n){return new(s||(s=Promise))((function(r,i){function o(e){try{l(n.next(e))}catch(e){i(e)}}function a(e){try{l(n.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,a)}l((n=n.apply(e,t||[])).next())}))};function Tt(e,t,n){return _t(this,void 0,void 0,(function*(){return new Promise((function(r,i){const o=new Worker(new URL(s.p+s.u(356),s.b));o.postMessage({distMatArray:e,n:t,methodCode:n}),o.onmessage=({data:{error:e,clusterMatrix:t}})=>{o.terminate(),e?i(e):r(t)}}))}))}var It=function(e,t,s,n){return new(s||(s=Promise))((function(r,i){function o(e){try{l(n.next(e))}catch(e){i(e)}}function a(e){try{l(n.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,a)}l((n=n.apply(e,t||[])).next())}))};s(7905);const $t="samples/FASTA_PT_activity.csv",Mt="sequence";const Nt="samples/FASTA_PT_activity.csv";var Lt=s(8341);const Pt="samples/HELM.csv";var Ot=s(2568),Rt=s(525);class kt{constructor(e,t,s={}){this.urlParams=e,this.funcName=t,this.options=s}async init(e){this.df=e,await this.buildView()}async buildView(){const e=le()(this.urlParams.entries()).map((([e,t])=>`${e}=${encodeURIComponent(t)}`)).toArray().join("&");this.view=i.shell.addTableView(this.df),this.view.path=this.view.basePath=`func/${Is.name}.${this.funcName}?${e}`;const t={...this.options,sequenceColumnName:"sequence"};for(const[e,s]of this.urlParams.entries())switch(e){case Re.bo.fixWidth:case Re.bo.fitArea:t[e]=["1","on","true"].includes(s.toLowerCase());break;default:t[e]=s}const s=await this.view.dataFrame.plot.fromType("WebLogo",t);this.view.dockManager.dock(s,a.DOCK_TYPE.DOWN,null,"WebLogo",.35)}}class Ft{get funcParams(){return{table:this.tableInput.value,sequence:this.seqColInput.value}}get paramsUI(){return this.funcParamsDiv}constructor(){this.tableInput=o.tableInput("Table",i.shell.tv.dataFrame,void 0,(()=>{this.onTableInputChanged()}));const e=this.tableInput.value.columns.bySemType(a.SEMTYPE.MACROMOLECULE),t={filter:e=>e.semType===a.SEMTYPE.MACROMOLECULE};this.seqColInput=o.columnInput("Sequence",this.tableInput.value,e,null,t),this.funcParamsDiv=o.inputs([this.tableInput,this.seqColInput],{style:{minWidth:"320px"}})}onTableInputChanged(){this.seqColInput=o.columnInput("Sequence",this.tableInput.value,this.tableInput.value.columns.bySemType(a.SEMTYPE.MACROMOLECULE))}}var Gt=s(9416);class Dt{constructor(e){this.monomerLib=e}getCappedRotatedMonomer(e,t){const s=this.monomerLib.getMonomer(e,t);return s?s.molfile:null}}const Vt=new class{constructor(){this.tooltipHandlerTemp="tooltip-handler.Monomer"}},Bt={autoCrop:!0,autoCropMargin:0,suppressChiralText:!0};class Ht{constructor(e){this.gridCol=e,this.gridCol.grid.onCellTooltip(this.onCellTooltip.bind(this))}onCellTooltip(e,t,s){if(e.grid.dart!=this.gridCol.grid.dart||e.gridColumn.dart!=this.gridCol.dart||!e.tableColumn||!e.isTableCell)return!1;const n=e.tableColumn.getTag("alphabet"),r=e.cell.value,a="DNA"===n||"RNA"===n?"RNA":"PEPTIDE",l=new Dt($s().getBioLib()).getCappedRotatedMonomer(a,r),c=o.div(r),h=l?i.chem.svgMol(l,void 0,void 0,Bt):null,u=e.grid.canvas.getBoundingClientRect(),d=e.bounds.right+u.left-4,p=e.bounds.bottom+u.top-4;return o.tooltip.show(o.divV([c,...h?[h]:[]]),d,p),!0}static getOrCreate(e){let t=e.temp[Vt.tooltipHandlerTemp];return t||(t=e.temp[Vt.tooltipHandlerTemp]=new Ht(e)),t}}class jt extends a.GridCellRenderer{get name(){return Ce.Of.MONOMER}get cellType(){return Ce.Of.MONOMER}get defaultHeight(){return 15}get defaultWidth(){return 40}render(e,t,s,n,r,i,o){if(i.gridRow<0)return;Ht.getOrCreate(i.gridColumn),e.font="12px monospace",e.textBaseline="middle",e.textAlign="center";const a=(0,be.py)(i.cell.column.getTag("alphabet")),l=i.cell.value;if(!l)return;const c=a.get(l);e.fillStyle=c,e.fillText((0,be.GU)(l,6),t+n/2,s+r/2,n)}}class Wt extends Map{get onPropertyChanged(){return this._onPropertyChanged}get MaxMonomerLength(){return super.get("MaxMonomerLength")}set MaxMonomerLength(e){super.set("MaxMonomerLength",e),this._onPropertyChanged.next("MaxMonomerLength")}get TooltipWebLogo(){return super.get("TooltipWebLogo")}set TooltipWebLogo(e){super.set("TooltipWebLogo",e),this._onPropertyChanged.next("TooltipWebLogo")}get DefaultSeparator(){return super.get("DefaultSeparator")}set DefaultSeparator(e){if(1!==e.length)throw new Error("The separator must be of length one.");super.set("DefaultSeparator",e),this._onPropertyChanged.next("DefaultSeparator")}constructor(e){super(Object.entries(e)),this._onPropertyChanged=new y.Subject}}class Ut extends a.Package{constructor(){super(...arguments),this._initialized=!1}get properties(){return this._properties}set properties(e){this._properties=e}get initialized(){return this._initialized}completeInit(){this._initialized=!0}handleErrorUI(e){const[t,s]=(0,ie.yf)(e);i.shell.error(t),this.logger.error(t,void 0,s)}}var Zt=s(8770);class Yt extends a.Widget{constructor(e){super(o.divV([])),this.viewed=!1,this.seqCol=e}async init(){const e=Q.Cn.getOrCreate(this.seqCol),t=Is.properties.TooltipWebLogo,s=this.seqCol.getTag(Le.DX.tooltipWebLogo);!1===t||["false","off","disable","disabled"].includes(s)||(this.wlViewer=await this.seqCol.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:this.seqCol.name,backgroundColor:0,positionHeight:"Entropy",positionWidth:e.getAlphabetIsMultichar()?24:16,fixWidth:!0,fitArea:!1}),this.wlViewer.root.style.height="50px",this.root.appendChild(this.wlViewer.root),this.root.style.width="100%")}detach(){this.wlViewer.detach(),super.detach()}}var Kt=s(922);async function qt(e,t){const s=new zt(t,e),n=await s.convertToRdKitBeautifiedMolfileColumn();return n.semType=a.SEMTYPE.MOLECULE,n}class zt{constructor(e,t){this.helmColumn=e,this.df=t,this.helmColumn=e}async convertToSmiles(){const e=await this.getSmilesList(),t=this.df.columns.getUnusedName(`smiles(${this.helmColumn.name})`);return a.Column.fromStrings(t,e.map((e=>null===e?"":e)))}async getSmilesList(){return(await this.convertToMolfileV2KColumn()).toList().map((e=>a.chem.convert(e,a.chem.Notation.MolBlock,a.chem.Notation.Smiles)))}async convertToRdKitBeautifiedMolfileColumn(){const e=await this.getSmilesList(),t=await i.functions.call("Chem:getRdKitModule"),s=e.map((e=>{if(""===e)return null;const s=t.get_mol(e);return s?(s.normalize_depiction(1),s.straighten_depiction(!0),s):null})),n=this.df.columns.getUnusedName(`molfile(${this.helmColumn.name})`);return a.Column.fromStrings(n,s.map((e=>{if(null===e)return"";const t=e.get_v3Kmolblock();return e.delete(),t})))}async convertToMolfileV2KColumn(){const e=(await this.getPolymerGraphColumn()).toList().map(((e,t)=>{const s=this.helmColumn.get(t);if(!s)return"";let n="";try{n=this.getPolymerMolfile(s,e)}catch(e){const[t,s]=(0,ie.yf)(e);Is.logger.error(t,void 0,s)}finally{return n}})),t=this.df.columns.getUnusedName(`molfileV2K(${this.helmColumn.name})`);return a.Column.fromList("string",t,e)}async getPolymerGraphColumn(){return await i.functions.call("HELM:getMolfiles",{col:this.helmColumn})}getPolymerMolfile(e,t){const s=new Xt(t),n=new os(e);return s.monomerSymbols.forEach(((e,t)=>{const r=s.getMonomerShifts(t);n.addMonomer(e,t,r)})),n.compileToMolfile()}}class Xt{constructor(e){this.molfileHandler=Kt._.getInstance(e)}get monomerSymbols(){return this.molfileHandler.atomTypes}getMonomerShifts(e){return{x:this.molfileHandler.x[e],y:this.molfileHandler.y[e]}}}class Jt{constructor(e,t){this.capGroupElements=[];const s=at.A.instance.getBioLib().getMonomer(t,e);if(!s)throw new Error(`Monomer ${e} is not found in the library`);this.molfileWrapper=new ss(s.molfile,e),this.capGroupElements=s.rgroups.map((e=>(e.capGroupSMILES||e.capGroupSMILES).replace(/(\[|\]|\*|:|\d)/g,"")))}shiftCoordinates(e){this.molfileWrapper.shiftCoordinates(e)}getAtomLines(){return this.molfileWrapper.getAtomLines()}getBondLines(){return this.molfileWrapper.getBondLines()}removeBondedRGroups(e){this.molfileWrapper.removeRGroups(e)}capTrailingRGroups(){this.molfileWrapper.capRGroups(this.capGroupElements)}replaceRGroupWithAttachmentAtom(e,t){this.molfileWrapper.replaceRGroupWithAttachmentAtom(e,t)}getAttachmentAtomByRGroupId(e){return this.molfileWrapper.getAttachmentAtomByRGroupId(e)}deleteBondLineWithSpecifiedRGroup(e){this.molfileWrapper.deleteBondLineWithSpecifiedRGroup(e)}shiftBonds(e){this.molfileWrapper.shiftBonds(e)}}class Qt{constructor(e,t,s){this.atoms=t,this.bonds=s,this.rGroupBondPositionMap=new Map,this.rGroupIdToAtomicIndexMap=this.getRGroupIdToAtomicIdxMap(e)}getAtomicIdx(e){const t=this.rGroupIdToAtomicIndexMap.get(e);return void 0===t?null:t}removeRGroupsFromAtomBlock(e){e.forEach((e=>{if(void 0===this.rGroupIdToAtomicIndexMap.get(e))throw new Error(`Cannot find atomic index for R group ${e}`)}));const t=Array.from(this.rGroupIdToAtomicIndexMap.entries()).filter((([t,s])=>e.includes(t))).map((([e,t])=>t));this.atoms.deleteAtoms(t)}removeRGroups(e){this.removeRGroupsFromAtomBlock(e),e.forEach((e=>{const t=this.replaceRGroupInBondsByDummy(e);this.rGroupBondPositionMap.set(e,t)}))}replaceRGroupInBondsByDummy(e){const t=this.rGroupIdToAtomicIndexMap.get(e);if(this.rGroupBondPositionMap.has(e))throw new Error(`R group ${e} is already handled`);const s=this.bonds.getPositionsInBonds(t+1);if(0===s.length)throw new Error(`Cannot find position for R group ${e}`);if(s.length>1)throw new Error(`More than one position for R group ${e}`);const n=s[0];return this.bonds.replacePositionsInBondsByDummy([n]),this.bonds.removeAtomIdFromBonds(t+1),this.removeRGroupFromAtomicIdxMap(e,t),n}removeRGroupFromAtomicIdxMap(e,t){this.rGroupIdToAtomicIndexMap.delete(e);for(const[e,s]of this.rGroupIdToAtomicIndexMap)s>t&&this.rGroupIdToAtomicIndexMap.set(e,s-1)}getRGroupIdToAtomicIdxMap(e){const t=new Map;e.filter((e=>e.startsWith("M RGP"))).forEach((e=>{const s=function(e){const t=e.split(/\s+/).filter((e=>e)).slice(3).map((e=>parseInt(e))),s=new Array(t.length/2);for(let e=0;e<t.length;e+=2)s[e/2]=[t[e+1],t[e]-1];return s}(e);for(const[e,n]of s){if(t.has(e))throw new Error(`R group ${e} is already in the map`);t.set(e,n)}}));const s=e.map(((e,t)=>{if(e.startsWith("A "))return t})).filter((e=>void 0!==e)),n=s.map((t=>e[t])),r=s.map((t=>e[t+1]));n.forEach(((e,s)=>{const n=parseInt(e.split(/\s+/)[1])-1,i=parseInt(r[s].substring(1));if(t.has(i))throw new Error(`R group ${i} is already in the map`);t.set(i,n)}));const i=this.atoms.getRGroupAtomicIndices().filter((e=>!Array.from(t.values()).includes(e)));if(0!==i.length)throw new Error(`Unaccounted R group indices: ${i}`);return t}deleteBondLineWithSpecifiedRGroup(e){const t=this.rGroupBondPositionMap.get(e);if(!t)throw new Error(`Cannot find position for R group ${e}`);const{bondLineIdx:s}=t;this.bonds.deleteBondLines([s]),this.rGroupBondPositionMap.delete(e),this.rGroupIdToAtomicIndexMap.delete(e),this.rGroupBondPositionMap.forEach((e=>{e.bondLineIdx>s&&(e.bondLineIdx-=1)}))}replaceRGroupWithAttachmentAtom(e,t){const s=this.rGroupBondPositionMap.get(e);if(!s)throw new Error(`Cannot find position for R group ${e}`);const{bondLineIdx:n,nodeIdx:r}=s;this.bonds.bondedAtoms[n][r]=t}getAttachmentAtomIdByRGroupId(e){const t=this.rGroupBondPositionMap.get(e);if(!t)throw new Error(`Cannot find position for R group ${e}`);const{bondLineIdx:s,nodeIdx:n}=t;return this.bonds.bondedAtoms[s][(n+1)%2]}capRGroups(e){this.rGroupIdToAtomicIndexMap.forEach(((t,s)=>{const n=e[s-1];"H"===n?(this.removeRGroups([s]),this.deleteBondLineWithSpecifiedRGroup(s)):this.atoms.replaceElementSymbol(t,n)}))}}class es{constructor(e){this.bondedPairs=[],this.rawBondLines=[],this.rawBondLines=e,this.bondedPairs=this.rawBondLines.map((e=>[parseInt(e.substring(0,3)),parseInt(e.substring(3,6))]))}getBondLines(){return this.bondedPairs.map(((e,t)=>{if(e.some((e=>-1===e)))throw new Error(`Bonded pair ${e} contains -1`);return`${e[0].toString().padStart(3," ")}${e[1].toString().padStart(3," ")}${this.rawBondLines[t].substring(6)}`}))}get bondedAtoms(){return this.bondedPairs}deleteBondLines(e){this.rawBondLines=this.rawBondLines.filter(((t,s)=>!e.includes(s))),this.bondedPairs=this.bondedPairs.filter(((t,s)=>!e.includes(s)))}getPositionsInBonds(e){const t=[];return this.bondedPairs.forEach(((s,n)=>{s.forEach(((s,r)=>{s===e&&t.push({bondLineIdx:n,nodeIdx:r})}))})),t}replacePositionsInBondsByDummy(e,t){void 0===t&&(t=-1),e.forEach((e=>{const{bondLineIdx:s,nodeIdx:n}=e;this.bondedPairs[s][n]=t}))}removeAtomIdFromBonds(e){this.bondedPairs=this.bondedPairs.map((t=>t.map((t=>t>e?t-1:t))))}shift(e){this.bondedPairs=this.bondedPairs.map((t=>t.map((t=>t+e))))}}class ts{constructor(e){this.coordinates=[],this.rawAtomLines=[],this.rawAtomLines=e,this.coordinates=this.rawAtomLines.map((e=>({x:parseFloat(e.substring(0,10)),y:parseFloat(e.substring(10,20))})))}get atomCoordinates(){return this.coordinates}get atomLines(){return this.rawAtomLines.map(((e,t)=>{const s=this.coordinates[t];return`${s.x.toFixed(4).padStart(10," ")}${s.y.toFixed(4).padStart(10," ")}${e.substring(20)}`}))}replaceElementSymbol(e,t){this.rawAtomLines[e]=this.rawAtomLines[e].replace("R#",t)}deleteAtoms(e){this.coordinates=this.coordinates.filter(((t,s)=>!e.includes(s))),this.rawAtomLines=this.rawAtomLines.filter(((t,s)=>!e.includes(s)))}shift(e){this.coordinates=this.coordinates.map((t=>{const s=t.x+e.x,n=t.y+e.y;if(isNaN(s)||isNaN(n))throw new Error(`Cannot shift coordinates by ${e.x}, ${e.y}`);return{x:s,y:n}}))}rotate(e){this.coordinates=this.coordinates.map((t=>{const s=t.x,n=t.y,r=s*Math.cos(e)-n*Math.sin(e),i=s*Math.sin(e)+n*Math.cos(e);if(isNaN(r)||isNaN(i))throw new Error(`Cannot rotate coordinates by ${e}`);return{x:r,y:i}}))}getRGroupAtomicIndices(){return this.rawAtomLines.map(((e,t)=>{if(e.includes("R#"))return t})).filter((e=>void 0!==e))}}class ss{constructor(e,t){this.monomerSymbol=t;const s=e.split("\n"),n=parseInt(s[3].substring(0,3)),r=parseInt(s[3].substring(3,6)),i=s.slice(4,4+n);this.atoms=new ts(i);const o=s.slice(4+n,4+n+r);this.bonds=new es(o),this.rGroups=new Qt(s,this.atoms,this.bonds),this.shiftMonomerToDefaultPosition()}deleteBondLineWithSpecifiedRGroup(e){this.rGroups.deleteBondLineWithSpecifiedRGroup(e)}shiftCoordinates(e){this.atoms.shift(e)}rotateCoordinates(e){this.atoms.rotate(e)}getBondLines(){return this.bonds.getBondLines()}getAtomLines(){return this.atoms.atomLines}removeRGroups(e){this.rGroups.removeRGroups(e)}replaceRGroupWithAttachmentAtom(e,t){this.rGroups.replaceRGroupWithAttachmentAtom(e,t)}getAttachmentAtomByRGroupId(e){return this.rGroups.getAttachmentAtomIdByRGroupId(e)}shiftR1GroupToOrigin(){const e=this.rGroups.getAtomicIdx(1);if(null===e)throw new Error(`Cannot find R1 group for monomer ${this.monomerSymbol}`);const{x:t,y:s}=this.atoms.atomCoordinates[e];this.atoms.shift({x:-t,y:-s})}alignR2AlongX(){const e=this.rGroups.getAtomicIdx(2);if(null===e)throw new Error(`Cannot find R2 group for monomer ${this.monomerSymbol}`);const t=this.atoms.atomCoordinates[e],s=t.y/t.x,n=Math.atan(s);if(isNaN(n))throw new Error(`Cannot calculate angle for R2 group for monomer ${this.monomerSymbol}`);this.rotateCoordinates(-n)}shiftMonomerToDefaultPosition(){this.shiftR1GroupToOrigin(),null!==this.rGroups.getAtomicIdx(2)&&this.alignR2AlongX()}shiftBonds(e){this.bonds.shift(e)}capRGroups(e){this.rGroups.capRGroups(e)}}class ns{constructor(e){this.simplePolymer=e,this.polymerType=this.getPolymerType(),this.idx=this.getIdx();const{monomers:t,monomerTypes:s}=this.getMonomerSymbolsAndTypes();this.monomers=t,this.monomerTypes=s}get id(){return this.polymerType+this.idx.toString()}getPolymerType(){const e=new RegExp("(PEPTIDE|RNA)[0-9]+{"),t=this.simplePolymer.match(e);if(!t)throw new Error(`Unsupported polymer type in ${this.simplePolymer}`);return t[1]}getIdx(){const e=new RegExp(`${this.polymerType}([0-9]+){`),t=this.simplePolymer.match(e);if(!t)throw new Error(`Cannot parse simple polymer id from ${this.simplePolymer}`);return parseInt(t[1])}getMonomerSymbolsAndTypes(){const e=new RegExp(`${this.polymerType}${this.idx}{|}`,"g"),t=this.simplePolymer.replace(e,"").split("."),s=[],n=[];return t.forEach((e=>{const t=e.split(/\(|\)/).map((e=>e.replace(/[\[\]]/g,"")));s.push(...t);const r=t.map(((e,t)=>t%2==0?0:1));n.push(...r)})),{monomers:s,monomerTypes:n}}getBondData(){const e=[],t=this.monomerTypes.map(((e,t)=>{if(0===e)return t})).filter((e=>void 0!==e)),s=this.monomerTypes.map(((e,t)=>{if(1===e)return t})).filter((e=>void 0!==e));for(let s=0;s<t.length-1;s++){const n=t[s],r=t[s+1];e.push([{monomerIdx:n,rGroupId:2},{monomerIdx:r,rGroupId:1}])}for(let t=0;t<s.length;t++){const n=s[t],r=n-1;e.push([{monomerIdx:r,rGroupId:3},{monomerIdx:n,rGroupId:1}])}return e}}class rs{constructor(e){const t=e.split("|");t.forEach((e=>this.validateConnectionItem(e))),this.connectionItems=t}validateConnectionItem(e){const t="(PEPTIDE|RNA)",s=new RegExp(`${t}[0-9]+,${t}[0-9]+,[0-9]+:R[0-9]+-[0-9]+:R[0-9]+`,"g");if(!e.match(s))throw new Error(`Cannot parse connection item from ${e}`)}getConnectionData(){const e=[];return this.connectionItems.forEach((t=>{const s=[],n=t.split(",");n[2].split("-").forEach(((e,t)=>{const r=n[t],i=e.split(":"),o={monomerIdx:parseInt(i[0])-1,rGroupId:parseInt(i[1].slice(1))};s.push({polymerId:r,bond:o})})),e.push(s)})),e}}class is{constructor(e){this.helm=e;const t=this.helm.split("$"),s=t[0].split("|");this.simplePolymers=s.map((e=>new ns(e))),""!==t[1]&&(this.connectionList=new rs(t[1])),this.bondData=this.getBondData()}toString(){return this.helm}getPolymerTypeByMonomerIdx(e){return this.getSimplePolymerByMonomerIdx(e).polymerType}getSimplePolymerByMonomerIdx(e){const t=this.getMonomerIdxShifts(),s=Object.values(t).sort(((e,t)=>e-t)).find((t=>e>=t));if(void 0===s)throw new Error(`Cannot find simple polymer for monomer ${e}`);const n=Object.keys(t).find((e=>t[e]===s));return this.simplePolymers.find((e=>e.id===n))}shiftBondMonomerIds(e,t){t.forEach((t=>{t.forEach((t=>{t.monomerIdx+=e}))}))}getMonomerIdxShifts(){const e={};let t=0;return this.simplePolymers.forEach((s=>{e[s.id]=t,t+=s.monomers.length})),e}getBondData(){const e=this.getMonomerIdxShifts(),t=[];return this.simplePolymers.forEach((s=>{const n=s.getBondData(),r=e[s.id];this.shiftBondMonomerIds(r,n),t.push(...n)})),this.connectionList&&this.connectionList.getConnectionData().forEach((s=>{const n=[];s.forEach((t=>{const s=e[t.polymerId],r=t.bond;r.monomerIdx+=s,n.push(r)})),t.push(n)})),t}}class os{constructor(e){this.monomerWrappers=[],this.helm=new is(e),this.bondedRGroupsMap=new Map,this.helm.bondData.forEach((e=>{e.forEach((e=>{const t=e.monomerIdx,s=e.rGroupId;this.bondedRGroupsMap.get(t)||this.bondedRGroupsMap.set(t,[]),this.bondedRGroupsMap.get(t).push(s)}))}))}addMonomer(e,t,s){const n=this.helm.getPolymerTypeByMonomerIdx(t),r=new Jt(e,n);r.shiftCoordinates(s),this.monomerWrappers.push(r)}removeRGroups(){this.monomerWrappers.forEach(((e,t)=>{this.bondedRGroupsMap.has(t)&&e.removeBondedRGroups(this.bondedRGroupsMap.get(t)),e.capTrailingRGroups()}))}getAtomNumberShifts(){const e=[];let t=0;return this.monomerWrappers.forEach((s=>{e.push(t),t+=s.getAtomLines().length})),e}restoreBondsBetweenMonomers(){this.helm.bondData.forEach((e=>{const t=e.map((e=>e.monomerIdx)),s=e.map((e=>e.rGroupId)),n=t.map((e=>this.monomerWrappers[e])),r=n[1].getAttachmentAtomByRGroupId(s[1]);n[0].replaceRGroupWithAttachmentAtom(s[0],r),n[1].deleteBondLineWithSpecifiedRGroup(s[1])}))}compileToMolfile(){const e=[],t=[];this.removeRGroups();const s=this.getAtomNumberShifts();this.monomerWrappers.forEach(((e,t)=>{e.shiftBonds(s[t])})),this.restoreBondsBetweenMonomers(),this.monomerWrappers.forEach((s=>{e.push(...s.getAtomLines()),t.push(...s.getBondLines())}));const n=e.length;if(n>999)throw new Error(`Atom count in polymer ${this.helm.toString()} is ${n} and exceeds 999`);const r=t.length;return["\nDatagrok\n",`${n.toString().padStart(3," ")}${r.toString().padStart(3," ")} 0 0 1 0 0 V2000`,e.join("\n"),t.join("\n"),"M END\n"].join("\n")}}const as="System:AppData/Bio/polytool-rules/";class ls{constructor(e){this.helmColumn=e}hasTerminals(e){let t=!1;return e.includes("(1)")&&(t=!0),e.includes("(2)")&&(t=!0),t}getLinkedPositions(e,t){const s=e.replace("PEPTIDE1{","").replace("}$$$$","").split(".").map((e=>e.replace("[","").replace("]",""))),n=new Array(t.length);for(let e=0;e<t.length;e++){let r=!1,i=!1,o=!1,a=-1,l=-1;const c=`(${t[e].code})`;for(let n=0;n<s.length;n++)if(s[n].includes(c)){if(r){if(o&&s[n]==t[e].secondMonomer+c){i=!0,l=n;break}if(o||s[n]!=t[e].firstMonomer+c)continue;i=!0,l=n;break}if(s[n]==t[e].firstMonomer+c)r=!0,o=!0,a=n;else{if(s[n]!=t[e].secondMonomer+c)continue;r=!0,o=!1,a=n}}n[e]=r&&i?o?[a,l]:[l,a]:[-1,-1]}return n}getRules(e){const t=e.rowCount,s=new Array(t),n=e.columns.byName("code"),r=e.columns.byName("monomer1"),i=e.columns.byName("monomer2"),o=e.columns.byName("modification1"),a=e.columns.byName("modification2"),l=e.columns.byName("R1"),c=e.columns.byName("R2");for(let e=0;e<t;e++)s[e]={code:n.get(e),firstMonomer:r.get(e),secondMonomer:i.get(e),firstModification:o.get(e),secondModification:a.get(e),firstR:l.get(e),secondR:c.get(e)};return s}getTransformedHelm(e,t){const s=t.length,n=this.getLinkedPositions(e,t),r=[],i=[],o=[],a=[];for(let l=0;l<s;l++){if(-1==n[l][0])continue;const s=e.replace("PEPTIDE1{","").replace("}$$$$","").split("."),c=s[n[l][0]].replace("[","").replace("]",""),h=s[n[l][1]].replace("[","").replace("]","");s[n[l][0]]=s[n[l][0]].replace(c,t[l].firstModification),s[n[l][1]]=s[n[l][1]].replace(h,t[l].secondModification),r.push(n[l][0]+1),i.push(n[l][1]+1),o.push(t[l].firstR),a.push(t[l].secondR),e="PEPTIDE1{";for(let t=0;t<s.length;t++)t!=s.length-1?e=e+s[t]+".":e+=s[t];e+="}$$$$"}const l=function(e,t){let s=e.replace("}$$$$","}$");for(let e=0;e<t.allPos1.length;e++)s+=0==e?"PEPTIDE1,PEPTIDE1,":"|PEPTIDE1,PEPTIDE1,",s+=`${t.allPos1[e]}:R${t.allAttaches1[e]}-${t.allPos2[e]}:R${t.allAttaches2[e]}`;return s+="$$$",s}(e,{allPos1:r,allPos2:i,allAttaches1:o,allAttaches2:a});return l}transform(e){const t=this.getRules(e);return this.helmColumn.toList().map((e=>this.hasTerminals(e)?this.getTransformedHelm(e,t):(console.log(e),e)))}}class cs{constructor(){}static getInstance(e){return new ls(e)}}async function hs(e,t){const s=e.dataFrame,n=Q.Cn.getOrCreate(e).convert(be.r2.HELM),r=cs.getInstance(n),o=new a.FileSource(as),l=await o.readAsText("rules.csv"),c=a.DataFrame.fromCsv(l),h=r.transform(c),u=s.columns.getUnusedName("transformed("+e.name+")"),d=a.Column.fromList("string",u,h);var p;(p=d).setTag("quality",a.SEMTYPE.MACROMOLECULE),p.setTag("aligned","SEQ"),p.setTag("alphabet","PT"),d.setTag("units",be.r2.HELM);const m=await qt(s,d);m.name=s.columns.getUnusedName("molfile("+e.name+")"),t&&(d.setTag("cell.renderer","helm"),s.columns.add(d)),s.columns.add(m,!0),await i.data.detectSemanticTypes(s)}const us="System:AppData/Bio/polytool-rules/";var ds=s(1047);const ps={symbol:"Short Name",name:"Medium Name",smiles:"SMILES"},ms=[{capGroupSMILES:"[*:1][H]",alternateId:"R1-H",capGroupName:"H",label:"R1"},{capGroupSMILES:"O[*:2]",alternateId:"R2-OH",capGroupName:"OH",label:"R2"},{capGroupSMILES:"[*:3][H]",alternateId:"R3-H",capGroupName:"H",label:"R3"}];class fs{constructor(e){this.rawLib=e}isValid(){return this.rawLib.every((e=>"object"==typeof e&&Object.values(ps).every((t=>t in e&&"string"==typeof e[t]))))}getJsonMonomerLib(){const e=[];return this.rawLib.forEach((t=>{const s=this.prepareMonomer(t);e.push(s)})),e}prepareMonomer(e){const t={...ds.Z2};Object.entries(ps).forEach((([s,n])=>{const r=e[n];t[s]=r}));let s="smiles";const n=e[ps[s]],r=new gs(n),i=r.getCappedSmiles();return t[s]=i,s="rgroups",t[s]=ys.getRGroups(r.getNumberOfRGroups()),s="molfile",t[s]=new bs(r.getSmilesWithRGroups()).getMolfile(),t}}class gs{constructor(e){let t=0;this.smilesWithRGroups=e.replace(/\[R(\d+)\]/g,((e,s)=>(++t,`[${s}*]`))),this.numberOfRGroups=t}getSmilesWithRGroups(){return this.smilesWithRGroups}getCappedSmiles(){return this.capRGroups()}getNumberOfRGroups(){return this.numberOfRGroups}capRGroups(){let e=this.smilesWithRGroups.replace("[1*]","[H:1]");return e=e.replace("[2*]","[OH:2]"),e.replace("[3*]","[H:3]")}}class ys{constructor(){}static getRGroups(e){return ms.slice(0,e)}}class bs{constructor(e){this.smilesWithRGroups=e}getMolfile(){let e=a.chem.convert(this.smilesWithRGroups,a.chem.Notation.Smiles,a.chem.Notation.MolBlock);return e=this.restoreRGPLine(e),e=this.fixRGroupSymbols(e),e}restoreRGPLine(e){return e.replace("M ISO","M RGP")}fixRGroupSymbols(e){return e.replace(/\bR\b/g,"R#")}}class vs{constructor(e,t){this.fileName=e,this.fileContent=t,this.validateFileType();const s=a.DataFrame.fromCsv(this.fileContent),n=this.toJson(s);this.polyToolMonomerLib=new fs(n),this.validateContent()}async getJson(){return this.polyToolMonomerLib.getJsonMonomerLib()}toJson(e){return Array.from({length:e.rowCount},((t,s)=>e.columns.names().reduce(((t,n)=>(t[n]=e.get(n,s),t)),{})))}validateFileType(){if(!this.fileName.endsWith(".csv"))throw new Error(`File ${this.fileName} is not an CSV file`)}validateContent(){if(!this.polyToolMonomerLib.isValid())throw new Error("Invalid format of CSV monomer lib")}}function ws(e,t,s,n){const r=Q.Cn.getOrCreate(e);let i=null,o=null;for(let e=0;e<r.posList.length;++e)r.posList[e]==t&&(i=e),r.posList[e]==s&&(o=e);if(null===i&&null!==t)throw new Error(`Start position ${t} not found.`);if(null===o&&null!==s)throw new Error(`End position ${s} not found.`);if(r.posList.length<o)throw new Error(`End position ${o} exceeds positions length`);const a=n||`${e.name}: (${t??""}-${s??""})`;return r.getRegion(i,o,a)}const Cs={df:a.DataFrame.fromCsv("seq,value\nATCCGTCGT,0.5\nTGTTCGTCA,0.4\nATGGTCGTA,0.7\nATCCGTGCA,0.1"),colName:"seq",positionNames:["1","1A","1C","2","4","4A","4B","5","6"].join(be.CI),regions:[{name:"first region",start:"1",end:"2"},{name:"second region",start:"1C",end:"4"},{name:"overlapping second",start:"1C",end:"4A"},{name:"whole sequence",start:"1",end:"6"},{name:"bad start",start:"0",end:"6"},{name:"bad end",start:"1",end:"4C"},{name:"bad start & end",start:"0",end:"4C"}]};class Ss{constructor(e,t){this.urlParams=e,this.funcName=t}async init(e){this.data=e??Cs;const t=this.data.df.getCol(this.data.colName);this.data.positionNames&&t.setTag(".positionNames",this.data.positionNames),this.data.regions&&t.setTag(".regions",JSON.stringify(this.data.regions)),await this.buildView()}async buildView(){await i.data.detectSemanticTypes(this.data.df),this.view=i.shell.addTableView(this.data.df),this.view.path=this.view.basePath=`func/${Is.name}.${this.funcName}`;const e=await this.view.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:this.data.colName});this.view.dockManager.dock(e,a.DOCK_TYPE.DOWN,null,"WebLogo",.35)}}class xs{constructor(e){this.call=e,this.inputs=new class{},this.fixRegion=!1,this.defaultName=!0,this.defaultNameUpdating=!1;const t=e=>this.call.inputParams[e].property.description;this.inputs.table=o.tableInput("Table",this.call.inputParams.table.value??i.shell.tv.dataFrame,void 0,(()=>{}));const s=this.call.inputParams.sequence.value??this.inputs.table.value.columns.bySemType(a.SEMTYPE.MACROMOLECULE),n={filter:e=>e.semType===a.SEMTYPE.MACROMOLECULE};this.inputs.sequence=o.columnInput("Sequence",i.shell.tv.dataFrame,s,this.sequenceInputChanged.bind(this),n),this.inputs.start=o.choiceInput("Start",void 0,[],this.startInputChanged.bind(this)),this.inputs.end=o.choiceInput("End",void 0,[],this.endInputChanged.bind(this)),this.inputs.region=o.choiceInput("Region",null,[],this.regionInputChanged.bind(this)),this.inputs.name=o.stringInput("Column name",this.getDefaultName(),this.nameInputChanged.bind(this),{clearIcon:!0}),this.inputs.name.onInput(this.nameInputInput.bind(this));for(const e in this.call.inputParams)o.tooltip.bind(this.inputs[e].captionLabel,t(e));this.sequenceInputChanged()}sequenceInputChanged(){const e=this.inputs.sequence.value;e&&Q.Cn.getOrCreate(e),this.updateRegionItems(),this.updateStartEndInputItems(),this.updateRegion(!0),this.updateNameInput()}regionInputChanged(){this.fixRegion=!0;try{const e=this.inputs.region.stringValue,t=e?JSON.parse(e):null;if(null!==t)this.inputs.start.value=t?.start,this.inputs.end.value=t?.end;else{const e=Q.Cn.getOrCreate(this.inputs.sequence.value);this.inputs.start.value=e.posList[0],this.inputs.end.value=e.posList[e.posList.length-1]}}finally{this.fixRegion=!1}}startInputChanged(){this.updateRegion(!1),this.updateNameInput()}endInputChanged(){this.updateRegion(!1),this.updateNameInput()}nameInputChanged(){this.defaultNameUpdating||(this.defaultName=!1)}nameInputInput(){this.inputs.name.value||(this.defaultName=!0,this.inputs.name.input.focus())}updateStartEndInputItems(){const e=this.inputs.sequence.value,t=e?Q.Cn.getOrCreate(e):null,s=this.inputs.start.input,n=this.inputs.end.input;for(let e=s.options.length-1;e>=0;--e)s.options.remove(e);for(let e=n.options.length-1;e>=0;--e)n.options.remove(e);for(const e of t?.posList??[]){const t=document.createElement("option"),r=document.createElement("option");t.text=r.text=e,t.value=r.value=e,s.options.add(t),n.options.add(r)}s.value=t?.posList[0]??"",n.value=t?.posList[t?.posList.length-1]??""}updateRegionItems(){const e=this.inputs.sequence.value,t=e?e.getTag(".regions"):null,s=t?JSON.parse(t):null,n=this.inputs.region.input;for(let e=n.options.length-1;e>=0;--e)n.options.remove(e);const r=document.createElement("option");if(r.text="",r.value=JSON.stringify(null),n.options.add(r),null!=s){this.inputs.region.root.style.removeProperty("display");for(const e of s){const t=document.createElement("option");t.text=`${e.name}: ${e.start}-${e.end}`,t.value=JSON.stringify(e),n.options.add(t)}}else this.inputs.region.root.style.display="none"}updateRegion(e){const t=this.inputs.start.stringValue??"",s=this.inputs.end.stringValue??"";if(!this.fixRegion){const e=this.inputs.region.input;e.selectedIndex=-1;for(let n=e.options.length-1;n>=0;--n){const r=e.options[n],i=JSON.parse(r.value);i&&t===i.start&&s===i.end&&(e.selectedIndex=n)}}}updateNameInput(){this.defaultNameUpdating=!0;try{this.defaultName&&(this.inputs.name.value=this.getDefaultName())}finally{this.defaultNameUpdating=!1}}getDefaultName(){const e=this.inputs.region.stringValue,t=e?JSON.parse(e):null,s=this.inputs.sequence.value,n=this.inputs.start.stringValue??"",r=this.inputs.end.stringValue??"";return null!=t?`${s.name}(${t.name}): ${t.start}-${t.end}`:`${s?.name}: (${n}-${r})`}getParams(){return{table:this.inputs.table.value,sequence:this.inputs.sequence.value,start:this.getStart(),end:this.getEnd(),name:this.getName()}}getStart(){return this.inputs.start.stringValue}getEnd(){return this.inputs.end.stringValue}getName(){const e=this.inputs.name.stringValue;return""==e?null:e}dialog(){const e=o.inputs(Object.values(this.inputs),{style:{minWidth:"320px"}});o.dialog({title:"Get Region"}).add(e).onOK((()=>{(async()=>{const e=this.getParams();await this.call.func.prepare(e).call(!0)})().catch((e=>{Is.handleErrorUI(e)}))})).show()}widget(){const e=o.inputs(Object.entries(this.inputs).filter((([e,t])=>!["table","sequence"].includes(e))).map((([e,t])=>t))),t=o.button("Get Region",(()=>{(async()=>{const e=this.getParams();await this.call.func.prepare(e).call(!0)})().catch((e=>{Is.handleErrorUI(e)}))}));return a.Widget.fromRoot(o.divV([e,o.div(t)]))}}var As=s(8601);class Es{maxIterations={uiName:"Max iterations",value:0,tooltip:"Maximum iterations for MCL process.Default is \n 0 which will construct the clusters with plain sparse matrix. Values greater than 0 will \n perform MCL with the given number of iterations and will result in trans-cluster activity cliff lines."};constructor(){}}class _s extends m{activitiesInput;activitiesInputRoot;similarityInput;constructor(e={}){super({...e,enableMCL:!0});const t=this.tableInput.value.columns.numerical;this.activitiesInput=o.columnInput("Activities",this.tableInput.value,a.Utils.firstOrNull(t),null,{filter:e=>Array.from(t).includes(e)}),this.activitiesInputRoot=this.activitiesInput.root,this.similarityInput=o.intInput("Similarity cutoff",80),this.methodsParams[d]=new Es}onTableInputChanged(){if(super.onTableInputChanged(),this.activitiesInputRoot){o.empty(this.activitiesInputRoot);const e=this.tableInput.value.columns.numerical;this.activitiesInput=o.columnInput("Activities",this.tableInput.value,a.Utils.firstOrNull(e),null,{filter:t=>Array.from(e).includes(t)}),Array.from(this.activitiesInput.root.children).forEach((e=>this.activitiesInputRoot.append(e)))}}getEditor(){return o.div([this.tableInput,this.colInputRoot,this.preprocessingFunctionInputRoot,this.preprocessingFuncSettingsDiv,this.activitiesInputRoot,this.similarityMetricInputRoot,this.methodInput,this.methodSettingsDiv,this.similarityMetricInputRoot,this.similarityInput],{style:{minWidth:"320px"},classes:"ui-form"})}getParams(){return{...super.getParams(),activities:this.activitiesInput.value,similarityThreshold:this.similarityInput.value}}}function Ts(e){const t=["Embed_X","Embed_Y"],s=e.columns.names().filter((e=>e.includes(t[0]))).length+1;return t.map((e=>`${e}_${s}`))}const Is=new Ut;function $s(){return at.A.instance}let Ms=null;class Ns{constructor(e){this._palette=e}get(e){return this._palette[e]}}async function Ls(){Is.logger.debug("Bio: initBio(), started");const e=await i.functions.call("Chem:getRdKitModule");await Promise.all([(async()=>{await at.A.instance.loadLibraries()})(),(async()=>{const e=await Is.getProperties(),t=new Wt(e);Is.properties=t})()]).finally((()=>{Is.completeInit()}));const t=at.A.instance.getBioLib(),s=[],n=[],r=t.getMonomerMolsByPolymerType("PEPTIDE");Object.keys(r).forEach((t=>{s.push(t);const i=r[t].replaceAll("#R","O "),o=e.get_mol(i),a=JSON.parse(o.get_descriptors()).CrippenClogP;n.push(a),o?.delete()}));const o=n.reduce(((e,t)=>e+t),0)/n.length||0,a={};for(let e=0;e<s.length;e++)a[s[e]]=n[e]<o?"#4682B4":"#DC143C";Ms=new Ns(a),Is.logger.debug("Bio: initBio(), completed")}function Ps(e){const t=new Yt(e);return t.init().then((()=>{})).catch((e=>{const t=e instanceof Error?e.message:e.toString();i.shell.error(t)})),t}function Os(){return at.A.instance.getBioLib()}function Rs(e){return Q.Cn.getOrCreate(e)}function ks(e){const t="getRegionTopMenu",s=a.Func.find({package:Is.name,name:t});if(1!==s.length)throw new Error(`Package '${Is.name}' func '${t}' not found`);const n=s[0].prepare({table:e.dataFrame,sequence:e});return new xs(n).widget()}async function Fs(e){return async function(){const e=o.label("Manage monomer libraries");return ct()(e).addClass("d4-link-action"),e.onclick=async()=>await ft(),new a.Widget(e)}()}function Gs(e){try{new xs(e).dialog()}catch(e){const t=e instanceof Error?e.message:e.toString(),s=e instanceof Error?e.stack:void 0;i.shell.error(`Get region editor error: ${t}`),Is.logger.error(t,void 0,s)}}function Ds(e){const t=new Ft;o.dialog({title:"Split to Monomers"}).add(t.paramsUI).onOK((async()=>e.func.prepare(t.funcParams).call(!0))).show()}function Vs(e){const t=new m({semtype:a.SEMTYPE.MACROMOLECULE});o.dialog({title:"Sequence Space"}).add(t.getEditor()).onOK((async()=>{const s=t.getParams();return e.func.prepare({molecules:s.col,table:s.table,methodName:s.methodName,similarityMetric:s.similarityMetric,plotEmbeddings:s.plotEmbeddings,options:s.options,preprocessingFunction:s.preprocessingFunction,clusterEmbeddings:s.clusterEmbeddings}).call()})).show()}function Bs(e){const t=new _s({semtype:a.SEMTYPE.MACROMOLECULE});o.dialog({title:"Activity Cliffs"}).add(t.getEditor()).onOK((async()=>{const s=t.getParams();return e.func.prepare({table:s.table,molecules:s.col,activities:s.activities,similarity:s.similarityThreshold,methodName:s.methodName,similarityMetric:s.similarityMetric,preprocessingFunction:s.preprocessingFunction,options:s.options}).call()})).show()}function Hs(){return new _e}function js(e){return function(e){const t=Array.from(e.dataFrame.columns).filter((e=>e.semType===a.SEMTYPE.MOLECULE)).map((e=>e.name));new Set(t).delete(e.name);const s=o.choiceInput("Monomer width",null!=e?.temp["monomer-width"]?e.temp["monomer-width"]:ge.short,[ge.short,ge.long],(t=>{e.temp["monomer-width"]=t,e.setTag(".mm.cellRenderer.settingsChanged",we.true),e.dataFrame.fireValuesChanged()}));s.setTooltip("In short mode, only the 'Max monomer length' characters are displayed, followed by .. if there are more");const n=parseInt(e.getTag(pe.maxMonomerLength)),r=o.intInput("Max monomer length",isNaN(n)?Is.properties.MaxMonomerLength:n,(t=>{e.setTag(pe.maxMonomerLength,t.toString()),e.setTag(".mm.cellRenderer.settingsChanged",we.true),e.dataFrame.fireValuesChanged()}));r.setTooltip(`The max length of monomer name displayed without shortening in '${ge.short}' monomer width mode.`);const i=o.intInput("Monomer margin",e.temp[".mm.cellRenderer.gapLength"]??0,(t=>{e.temp[".mm.cellRenderer.gapLength"]=t,e.setTag(".mm.cellRenderer.settingsChanged",we.true),e.dataFrame.fireValuesChanged()}));i.setTooltip("The size of margin between monomers (in pixels)");const l=o.boolInput("Color code",null==e?.temp["color-code"]||e.temp["color-code"],(t=>{e.temp["color-code"]=t,e.dataFrame.fireValuesChanged()}));l.setTooltip("Color code");const c=o.stringInput("Reference sequence",null!=e?.temp["reference-sequence"]?e?.temp["reference-sequence"]:"",(t=>{e.temp["reference-sequence"]=t,e.dataFrame.fireValuesChanged()}));c.setTooltip("Reference sequence is not empty, then the sequence will be render \nas a difference from the reference sequence");const h=o.boolInput("Compare with current",null==e?.temp["compare-with-current"]||e.temp["compare-with-current"],(t=>{e.temp["compare-with-current"]=t,e.dataFrame.fireValuesChanged()}));h.setTooltip('When on, all sequences get rendered in the "diff" mode');const u=o.inputs([s,r,i,c,l,h]);return new a.Widget(u)}(e)}function Ws(e){return(0,Zt.t)(e)}function Us(){return new _e}function Zs(){return new Te}function Ys(e,t,s,n,r){const i=new Be.k(n,r,s,t);return"Local alignment"==e?i.smithWaterman():i.needlemanWunch()}function Ks(){return new Re.OZ}function qs(){return new Ve}function zs(e,t,s,n){return ws(e,t??null,s??null,n??null)}async function Xs(e,t,s,n,r){const o=ws(t,s??null,n??null,r??null);t.dataFrame.columns.add(o),await i.data.detectSemanticTypes(t.dataFrame)}async function Js(e,t,n,r,h,u,p,m){if(!(0,Ot.n)(t,"Activity Cliffs"))return;const g=Ts(e),y={units:t.getTag(a.TAGS.UNITS),aligned:t.getTag("aligned"),separator:t.getTag("separator"),alphabet:t.getTag("alphabet")},b=u,v=t,w=async()=>await async function(e,t,n,r,l,c,h,u,p,m,g,y,b,v,w,C){j++;const S=c/100;let x,A=!1;const E=y.inputs,_=await y.apply({[E[0].name]:t,[E[1].name]:h,...p.preprocessingFuncArgs??{}});let T=[];if(u===d){const t=await function(e,t,n,r,i,o,a=10){const l=new Worker(new URL(s.p+s.u(709),s.b));let c;return l.postMessage({data:e,threshold:t,weights:n,aggregationMethod:r,distanceFns:i,distanceFnArgs:o,maxIterations:a}),{promise:new Promise(((e,t)=>{c=e,l.onmessage=t=>{setTimeout((()=>l.terminate()),100),e(t.data.res)},l.onerror=e=>{setTimeout((()=>l.terminate()),100),t(e)}})),terminate:()=>{try{c(null),l.terminate()}catch(e){console.error(e)}}}}([_.entries],c,[1],"MANHATTAN",[h],[_.options??{}],p?.maxIterations??5).promise;e.columns.addNewInt(e.columns.getUnusedName("MCL Cluster")).init((e=>t.clusters[e])),T=[t.embedX,t.embedY]}else T=await H([_.entries],u,[h],[1],"MANHATTAN",{...p,distanceFnArgs:[_.options??{}]});if(T.length!==n.length)throw new Error("Number of axes names should be equal to number of embedding dimensions");for(let t=0;t<T.length;++t)e.columns.addNewFloat(n[t]).init((e=>T[t][e]));const I=await(new k).calc(_.entries,h,S,_.options),$=await async function(e,t){const s=e.distance.map(((s,n)=>{const r=Math.abs(t.get(e.i[n])-t.get(e.j[n]));return 0!=s?r/s:1/0})),n=e.distance.map((e=>1-e)),r=e.i,i=e.j,o=new Set;return e.distance.forEach(((t,s)=>{o.add(e.i[s]),o.add(e.j[s])})),{simVals:n,saliVals:s,n1:r,n2:i,cliffsMolIds:o}}(I,l),M=function(e,t,s,n,r,i){const o=new Array(e).fill(0);for(let e=0;e!=s.length;++e)t[e]!=1/0&&(i.get(s[e])>i.get(n[e])?o[s[e]]+=t[e]:o[n[e]]+=t[e]);return a.Column.fromList("double",`sali_${r[0].substring(r[0].lastIndexOf("_"))}`,o)}(t.length,$.saliVals,$.n1,$.n2,n,l);e.columns.add(M);const N=function(e,t){const s=a.BitSet.create(e.rowCount);for(let n=0;n<e.rowCount;n++)s.set(n,t.has(n));return s}(e,$.cliffsMolIds),L=function(e){const t=e.filter((e=>e!==1/0)),s=t.reduce(((e,t)=>Math.min(e,t)),Number.MAX_VALUE),n=t.reduce(((e,t)=>Math.max(e,t)),s);return{max:n,min:s}}($.saliVals),P=.8/(L.max-L.min),O=i.shell.getTableView(e.name),R=O.addViewer(a.VIEWER.SCATTER_PLOT,{xColumnName:n[0],yColumnName:n[1],size:M.name,color:l.name,showXSelector:!1,showYSelector:!1,showSizeSelector:!1,showColorSelector:!1,markerMinSize:5,markerMaxSize:25,title:r}),G=function(e,t,s,n,r,i,o,l){const c={from:new Uint32Array(t.n1.length),to:new Uint32Array(t.n1.length),opacities:new Float32Array(t.n1.length),colors:new Array(t.n1.length),widths:new Float32Array(t.n1.length)};for(let s=0;s<t.n1.length;s++)c.from[s]=t.n1[s],c.to[s]=t.n2[s],c.opacities[s]=t.saliVals[s]===1/0?1:.2+(t.saliVals[s]-o.min)*l,c.colors[s]=e.selection.get(c.from[s])&&e.selection.get(c.to[s])?"255,255,0":"0,128,0",c.widths[s]=1;const h=a.DataFrame.create(c.from.length);return z.forEach(((e,t)=>{h.columns.addNewString(e).init((e=>s.get(0===t?c.from[e]:c.to[e]))),function(e,t){Object.keys(t).forEach((s=>{e.tags[s]=t[s]}))}(h.col(e),i),h.col(e).semType=r})),h.columns.addNewFloat(Z).init((e=>Math.abs(n.get(c.from[e])-n.get(c.to[e])))),h.columns.addNewInt(q).init((e=>e)),h.columns.addNewFloat(Y).init((e=>t.saliVals[e])),h.columns.addNewFloat(K).init((e=>t.simVals[e])),h.name=`${W}${j}`,{lines:c,linesDf:h}}(e,$,t,l,m,g,L,P);G.lines.skipMultiLineCalculation=!0,G.linesDf.col(Y).setTag("description","Structure−Activity Landscape Index (activity difference divided by 1 minus similarity)");const V=new D(R,n[0],n[1],G.lines,F.none),B=w?w(G.linesDf,z).sort([Y],[!1]):G.linesDf.plot.grid().sort([Y],[!1]);B.col(q)&&(B.col(q).visible=!1),e.temp[".cliffsDfGrid"]=B;const J=o.button(`${G.linesDf.rowCount} cliffs`,(()=>{O.dockManager.dock(B,"down",null,"Activity cliffs",C??.2)}));J.classList.add("scatter_plot_link","cliffs_grid"),R.root.append(J);const Q=o.switchInput("Show only cliffs",!1,(()=>{Q.value?(R.dataFrame.setTag(X,n[0]),e.filter.and(N),U.next(n[0])):(R.dataFrame.setTag(X,""),e.filter.setAll(!0),U.next(""))}));Q.root.classList.add("scatter_plot_link","show_only_cliffs"),R.root.append(Q.root),U.subscribe((e=>{Q.enabled=""===e||e===n[0]}));let ee=!1;R.onEvent("d4-before-draw-scene").subscribe((t=>{ee?ee=!1:Q.value&&(setTimeout((()=>{e.filter.and(N)}),100),ee=!0)}));const te=i.events.onViewerClosed.subscribe((e=>{e.args.viewer===R&&(O.dockManager.close(B.root),te.unsubscribe(),O.subs=O.subs.filter((e=>e!==te)))}));return O.subs.push(te),G.linesDf.onCurrentCellChanged.subscribe((()=>{for(let e=0;e<G.linesDf.rowCount;e++)G.lines.widths[e]=e===G.linesDf.currentRowIdx?3:1;V.linesToRender=G.lines;const s=G.linesDf.currentCol&&G.linesDf.currentCol.name===z[1]?G.lines.to:G.lines.from,r=-1!==G.linesDf.currentRowIdx?G.linesDf.currentRowIdx:null;if(R.dataFrame.currentRowIdx=r?s[r]:-1,null!==r){const s=G.linesDf.currentRowIdx;V.currentLineId=s;const{zoomLeft:a,zoomRight:c,zoomTop:h,zoomBottom:u}=function(e,t,s,n,r,i){const o=Math.abs(s-r),a=Math.abs(n-i),l=e/o,c=t/a,h=Math.min(l,c),u=e/h*5,d=t/h*5,p=(s<r?s:r)+o/2-u/2,m=(n>i?n:i)-a/2+d/2;return{zoomLeft:p,zoomRight:p+u,zoomTop:m,zoomBottom:m-d}}(R.viewport.width,R.viewport.height,R.dataFrame.get(n[0],G.lines.from[s]),R.dataFrame.get(n[1],G.lines.from[s]),R.dataFrame.get(n[0],G.lines.to[s]),R.dataFrame.get(n[1],G.lines.to[s]));R.zoom(a,h,c,u),Q.value?e.filter.and(N):!0===Q.enabled&&e.filter.setAll(!0),setTimeout((()=>{!function(e,t,s,n,r,a,l,c,h){const u=t.getPane("Cliff Details");o.empty(u.root);const d=h({points:[s,n],lineId:r,df:e,seqCol:a,activityCol:l,sali:c});u.root.append(d),setTimeout((()=>{i.shell.o=t.root}),500)}(e,x,G.lines.from[r],G.lines.to[r],r,t,l,G.linesDf.get(Y,r),v);const s=R.dataFrame.getSortedOrder(O.grid.sortByColumns,O.grid.sortTypes);O.grid.scrollToCell(t.name,s.indexOf(R.dataFrame.currentRowIdx))}),1e3)}})),G.linesDf.onSelectionChanged.subscribe((t=>{setTimeout((()=>(()=>{const t=a.BitSet.create(e.rowCount);for(let e=0;e<G.linesDf.rowCount;e++){const s=G.linesDf.selection.get(e);s&&(t.set(G.lines.from[e],!0),t.set(G.lines.to[e],!0)),G.lines.colors[e]=s?"255,255,0":"0,128,0"}e.selection.copyFrom(t),V.linesToRender=G.lines})()),100)})),e.onSelectionChanged.subscribe((t=>{!1===e.selection.anyTrue&&"number"==typeof t&&(A?A=!1:(e=>{e.selection.setAll(!1);for(let e=0;e<G.lines.colors.length;e++)G.lines.colors[e]="0,128,0";V.linesToRender=G.lines})(B.dataFrame))})),V.lineClicked.subscribe((t=>{if(A=!0,V.currentLineId=t.id,-1!==t.id){const s=G.linesDf.selection.clone();setTimeout((()=>{t.event.ctrlKey?(s.set(t.id,!s.get(t.id)),G.linesDf.selection.copyFrom(s)):(G.linesDf.currentRowIdx!==t.id&&(G.linesDf.currentRowIdx=t.id,e.currentRowIdx=G.lines.from[t.id]),G.linesDf.selection.copyFrom(s));const n=G.linesDf.getSortedOrder(B.sortByColumns,B.sortTypes);B.scrollToCell(z[0],n.indexOf(t.id))}),500)}})),V.lineHover.pipe((0,f.debounceTime)(500)).subscribe((s=>{-1!==s.id&&-1===e.mouseOverRowIdx&&o.tooltip.show(b({lineId:s.id,points:[G.lines.from[s.id],G.lines.to[s.id]],df:e,seqCol:t,activityCol:l}),s.x,s.y)})),R.addProperty("similarityLimit","double",S),x=function(){const e=o.accordion(),t=o.element("i");return t.className="grok-icon svg-icon svg-view-layout",e.addTitle(o.span([t,o.label("Activity cliffs")])),e.addPane("Cliff Details",(()=>o.divText("Cliff has not been selected")),!0),i.shell.o=e.root,e}(),R}(e,v,g,"Activity cliffs",n,r,b,h,{...m??{}},a.SEMTYPE.MACROMOLECULE,y,p,Ze,Ye,Xe),C=h===c.A.UMAP?2e5:2e4,S=h===c.A.UMAP?5e3:2e3;if(e.rowCount>C)return void i.shell.warning(`Too many rows, maximum for sequence activity cliffs is ${C}`);const x=a.TaskBarProgressIndicator.create("Running sequence activity cliffs ...");return new Promise(((t,s)=>{e.rowCount>S&&!m?.[l.sS]?o.dialog().add(o.divText("Activity cliffs analysis might take several minutes.\n Do you want to continue?")).onOK((async()=>{w().then((e=>t(e))).catch((e=>s(e)))})).onCancel((()=>{t(void 0)})).show():w().then((e=>t(e))).catch((e=>s(e)))})).catch((e=>{const[t,s]=(0,ie.yf)(e);throw Is.logger.error(t,void 0,s),e})).finally((()=>{x.close()}))}async function Qs(e,t,s=1,n=.6,r="Morgan"){if(e.semType!==a.SEMTYPE.MACROMOLECULE)return{entries:e.toList(),options:{}};const{seqList:i,options:o}=await je(e,t,r);return{entries:i,options:{...o,gapOpen:s,gapExtend:n}}}async function en(e,t){e.version!==e.temp["last-invalidated-version"]&&await(0,Ue.HV)(e,!1);const s=e.temp["monomeric-mols"],n=await i.functions.call("Chem:getMorganFingerprints",{molColumn:s}),r=new Array(n.length).fill(null);for(let e=0;e<n.length;e++){if(n.isNone(e)||!n.get(e))continue;const t=n.get(e);r[e]=G.Z.fromUint32Array(t.length,new Uint32Array(t.getBuffer().buffer))}return{entries:r,options:{}}}async function tn(e,t,n,r,c,h,u,d){if((0,Ot.n)(t,"Sequence Space"))return h||(h=a.Func.find({name:"macromoleculePreprocessingFunction",package:"Bio"})[0]),u??(u={}),await async function(e,t,n,r,c,h,u,d=!0,p=!1,m={preprocessingFuncArgs:[]},f={}){const g={showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1};if(t.length!==r.length||t.length!==h.length||t.length!==c.length||t.length!==m.preprocessingFuncArgs.length)throw new Error("columns, metrics and preprocessing functions, weights and function argumentsmust have the same length");const y=i.shell.tableView(e.name)??i.shell.addTableView(e),b=async()=>{const b=a.TaskBarProgressIndicator.create(`Initializing ${f.scatterPlotName??"dimensionality reduction"} ...`);let v;try{const w=Ts(e);function C(t,s,n){let r=null,i=null;e.columns.names().includes(w[0])?(r=e.columns.byName(w[0]),i=e.columns.byName(w[1])):(r=e.columns.add(a.Column.float(w[0],e.rowCount)),i=e.columns.add(a.Column.float(w[1],e.rowCount)),d&&!v&&(v=y.scatterPlot({...g,x:w[0],y:w[1],title:f.scatterPlotName??"Embedding space"}))),f[l.Ec]&&(v?.root&&o.setUpdateIndicator(v.root,!1),r.init((e=>n[0]?n[0][e]:void 0)),i.init((e=>n[1]?n[1][e]:void 0)));const c=t/s*100;b.update(c,`Running ${f.scatterPlotName??"dimensionality reduction"}... ${c.toFixed(0)}%`)}async function S(){e.columns.add(a.Column.float(w[0],e.rowCount)),e.columns.add(a.Column.float(w[1],e.rowCount));let s=null;d&&(v=y.scatterPlot({...g,x:w[0],y:w[1],title:f.scatterPlotName??"Embedding space"}),o.setUpdateIndicator(v.root,!0));const p=i.events.onViewerClosed.subscribe((e=>{const t=e.args.viewer;t?.getOptions()?.look?.title&&v?.getOptions()?.look?.title&&t?.getOptions()?.look?.title===v?.getOptions()?.look?.title&&(i.events.fireCustomEvent(V,{}),p.unsubscribe(),s?.(),b.close())})),S=new Promise((async(e,i)=>{try{s=e;const i=[];for(let e=0;e<h.length;++e){const s=h[e];if(m.distanceFnArgs||(m.distanceFnArgs=[]),s){const n=s.inputs[0].name,o=s.inputs[1].name,{entries:a,options:l}=await s.apply({[n]:t[e],[o]:r[e],...m.preprocessingFuncArgs[e]??{}});i.push({entries:a,options:l}),m.distanceFnArgs.push(l)}else{const s=t[e].toList(),n={};i.push({entries:s,options:n}),m.distanceFnArgs.push(n)}}e(await H(i.map((e=>e.entries)),n,r,c,u,m,f[l.sS]?void 0:C))}catch(e){i(e)}})),x=await S;return b.close(),p.unsubscribe(),x}const x=await S();if(p&&x){const A=a.TaskBarProgressIndicator.create("Clustering embeddings ...");try{const E=await function(e,t,n,r){return It(this,void 0,void 0,(function*(){return new Promise((function(i,o){const a=new Worker(new URL(s.p+s.u(796),s.b));a.postMessage({embedX:e,embedY:t,minPts:r,epsilon:n}),a.onmessage=({data:{error:e,clusters:t}})=>{a.terminate(),e?o(e):i(t)}}))}))}(x[0],x[1],m.dbScanEpsilon??.01,m.dbScanMinPts??4),_=e.columns.getUnusedName("Cluster");e.columns.addNewString(_).init((e=>E[e].toString())),v&&(v.props.colorColumnName=_)}catch(T){i.shell.error("Clustering embeddings failed"),console.error(T)}finally{A.close()}}if(x&&d&&v){o.setUpdateIndicator(v.root,!1);const I=e.columns.byName(w[0]),$=e.columns.byName(w[1]);return I.init((e=>x[0][e])),$.init((e=>x[1][e])),v.helpUrl="/help/compute/sequence-space",v}}catch(M){i.shell.error("Dimensionality reduction failed"),console.error(M),b.close(),v&&o.setUpdateIndicator(v.root,!1)}};return new Promise((async(t,s)=>{try{if(f.fastRowCount&&e.rowCount>f.fastRowCount&&!f[l.sS])o.dialog().add(o.divText("Analysis might take several minutes. Do you want to continue?")).onOK((async()=>{try{const e=await b();t(e)}catch(e){s(e)}})).onCancel((()=>t(void 0))).show();else{const e=await b();t(e)}}catch(e){s(e)}}))}(e,[t],n,[r],[1],[h],"MANHATTAN",c,d??!1,{...u,preprocessingFuncArgs:[u.preprocessingFuncArgs??{}]},{fastRowCount:1e4,scatterPlotName:"Sequence space",bypassLargeDataWarning:u?.[l.sS]})}async function sn(e,t,s){const n=a.TaskBarProgressIndicator.create("Converting to atomic level ...");try{await async function(e,t,s){if(0===a.Func.find({package:"Chem",name:"getRdKitModule"}).length)return void i.shell.warning('Transformation to atomic level requires package "Chem" installed.');if(s){const s=Q.Cn.getOrCreate(t);return s.isHelm()||(t=s.convert(be.r2.HELM)),void async function(e,t){const s=await qt(e,t);e.columns.add(s,!0),await i.data.detectSemanticTypes(e)}(e,t)}if(!(0,Ot.n)(t,"To Atomic Level"))return;const n=$s().getBioLib(),r=await(0,As.i0)(e,t,n);null!==r.col&&(e.columns.add(r.col,!0),await i.data.detectSemanticTypes(e)),r.warnings&&r.warnings.length>0&&i.shell.warning(o.list(r.warnings))}(e,t,s)}finally{n.close()}}function nn(){(0,Rt.K)()}async function rn(e=null,t=null){return(0,Rt.K)({col:e,clustersCol:t})}async function on(){const e=i.shell.tv,t=e.dataFrame.columns.toList().filter((e=>e.semType==a.SEMTYPE.MACROMOLECULE&&(Q.Cn.getOrCreate(e),!0))),s=async t=>{if(!(0,Ot.n)(t,"Composition"))return;const s=e.addViewer("WebLogo",{sequenceColumnName:t.name});i.shell.tv.dockManager.dock(s,a.DOCK_TYPE.DOWN,null,"Composition analysis",.25)};let n=null;if(0!=t.length){if(t.length>1){const e=t.map((e=>e.name)),n=t.find((e=>Q.Cn.getOrCreate(e).isMsa())),r=o.choiceInput("Column",n?n.name:e[0],e);o.dialog({title:"Composition Analysis",helpUrl:"https://datagrok.ai/help/datagrok/solutions/domains/bio/#sequence-composition"}).add(o.div([r])).onOK((async()=>{const e=t.find((e=>e.name==r.value))??null;e&&await s(e)})).show()}else n=t[0];n&&await s(n)}else i.shell.error("Current table does not contain sequences")}function an(e){return new ee.i(e).importFasta()}function ln(e){return console.log(e),[]}function cn(){const e=(0,oe.B)()[0];(0,rt.O)(e)}function hn(){let e;try{e=function(){const e=i.shell.t.columns.bySemTypeAll(a.SEMTYPE.MACROMOLECULE);if(!e)throw new Error("No dataframe with macromolecule columns open");const t=o.columnInput("Column",i.shell.t,e[0],null,{filter:e=>e.semType===a.SEMTYPE.MACROMOLECULE}),s=o.boolInput("Get HELM",!0);o.tooltip.bind(s.root,"Add HELM column");const n=o.button("ADD RULES",(()=>{a.Utils.openFile({accept:".csv",open:async e=>{const t=await e.text();await i.dapi.files.writeAsText(us+`${e.name}`,t)}})})),r=o.div([t,s,n]);return o.dialog("Poly Tool").add(r).onOK((async()=>{const e=t.value;e?hs(e,s.value):i.shell.warning("No marcomolecule column chosen!")}))}(),e.show()}catch(e){i.shell.warning("To run PolyTool, open a dataframe with macromolecules")}}function un(){return new jt}async function dn(e){const t=a.TaskBarProgressIndicator.create("Test detectMacromolecule..."),s=(await i.dapi.files.list(e,!0,"")).filter((e=>e.fileName.endsWith(".csv")));let n=0;const r=[];for(const o of s)try{const t=await i.dapi.files.readAsText(e+o.fullPath),s=a.DataFrame.fromCsv(t);for(const e of s.columns)await i.functions.call("Bio:detectMacromolecule",{col:e})===a.SEMTYPE.MACROMOLECULE&&r.push({file:o.path,result:"detected",column:e.name,message:`units: ${e.getTag(a.TAGS.UNITS)}`})}catch(e){r.push({file:o.path,result:"error",column:null,message:e instanceof Error?e.message:e.toString()})}finally{n+=1,t.update(100*n/s.length,`Test ${o.fileName}`)}i.shell.info("Test Demo:Files for detectMacromolecule finished."),t.close();const o=a.DataFrame.fromObjects(r);return o.name=`datasets_detectMacromolecule_${e}`,o}async function pn(e,t){await(0,Gt.n)(e,t)}function mn(e){const t=Q.Cn.getOrCreate(e).stats;return Object.keys(t.freq)}function fn(){return new tt}function gn(){const e=i.shell.v,t=e.addViewer("Sequence Similarity Search");e.dockManager.dock(t,"down")}function yn(){return new nt}function bn(){const e=i.shell.v,t=e.addViewer("Sequence Diversity Search");e.dockManager.dock(t,"down")}function vn(e){const t=(0,oe.B)();1===t.length?e.func.prepare({macromolecules:t[0]}).call(!0):new Ue.uH(t)}function wn(e){i.shell.tv.getFiltersGroup({createDefaultFilters:!1}).updateOrAdd({type:"Bio:bioSubstructureFilter",column:e.name,columnName:e.name}),i.shell.tv.grid.scrollToCell(e,0)}async function Cn(e,t,s){return re(e,t,s,J.IDENTITY)}async function Sn(e,t,s){return re(e,t,s,J.SIMILARITY)}async function xn(){ft()}function An(){(0,it.C2)()}function En(){return new ot.ST}async function _n(){const e=a.TaskBarProgressIndicator.create("WebLogo");try{const e=new URLSearchParams(window.location.search),t=new kt(e,"webLogoLargeApp"),s=await Is.files.readCsv("data/sample_PT_100000x5.csv");await i.data.detectSemanticTypes(s),await t.init(s)}finally{e.close()}}async function Tn(){const e=a.TaskBarProgressIndicator.create("WebLogo ...");try{const e=new URLSearchParams(window.location.search),t=new kt(e,"webLogoAggApp"),s=await Is.files.readCsv("samples/FASTA_PT_activity.csv");await i.data.detectSemanticTypes(s),await t.init(s)}finally{e.close()}}async function In(){const e=a.TaskBarProgressIndicator.create("getRegion ...");try{const e=new URLSearchParams(window.location.search),t=new Ss(e,"getRegionApp");await t.init()}finally{e.close()}}async function $n(){const e=a.TaskBarProgressIndicator.create("getRegion ...");try{const e=new URLSearchParams(window.location.search),t=await Is.files.readCsv("samples/HELM_empty_vals.csv"),s=new Ss(e,"getRegionHelmApp");await s.init({df:t,colName:"HELM"})}finally{e.close()}}function Mn(e,t){!function(e,t){const s=Q.Cn.getOrCreate(e.column),n=Object.values(be.r2).filter((e=>e!==s.units));t.group("Copy").items(n,(t=>{const s=Q.Cn.getOrCreate(e.column),n=t===be.r2.SEPARATOR?Is.properties.DefaultSeparator:void 0,r=s.getConverter(t,n)(e.value);navigator.clipboard?(navigator.clipboard.writeText(r),i.shell.info(`Value of notation '${t}' copied to clipboard`)):i.shell.warning("The clipboard functionality requires a secure origin — either HTTPS or localhost")}))}(e,t)}async function Nn(){await async function(){let e,t;try{const s=new Ct("Similarity, Diversity","Sequence similarity tracking and evaluation dataset diversity");await s.step("Load DNA sequences",(async()=>{i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1,t=await Is.files.readCsv(xt),e=i.shell.addTableView(t),e.grid.columns.byName("cluster").visible=!1,e.grid.columns.byName("sequence_id").visible=!1,e.grid.columns.byName("sequence").width=300,e.grid.columns.byName("activity").visible=!1,e.grid.columns.byName("is_cliff").visible=!1}),{description:"Load dataset with macromolecules of 'fasta' notation, 'DNA' alphabet.",delay:2e3}).step("Find the most similar sequences to the current one",(async()=>{const s=await t.plot.fromType("Sequence Similarity Search",{moleculeColumnName:"sequence",similarColumnLabel:"Similar to current"});e.dockManager.dock(s,a.DOCK_TYPE.RIGHT,null,"Similarity search",.35)}),{description:"Add 'Sequence Similarity Search' viewer.",delay:2e3}).step("Explore most diverse sequences in a dataset",(async()=>{const s=await t.plot.fromType("Sequence Diversity Search",{moleculeColumnName:"sequence",diverseColumnLabel:"Top diverse sequences of all data"});e.dockManager.dock(s,a.DOCK_TYPE.DOWN,null,"Diversity search",.27)}),{description:"Add 'Sequence Deversity Search' viewer.",delay:2e3}).step("Choose another sequence for similarity search",(async()=>{t.currentRowIdx=3}),{description:"Handling current row changed of data frame showing update of similar sequences.",delay:2e3}).step("One more sequence for similarity search",(async()=>{t.currentRowIdx=7}),{description:"Just one more sequence to search similar ones.",delay:2e3}).start()}catch(e){St(e)}}()}async function Ln(){await async function(){let e,t,s,n,r;try{const o=new Ct("Sequence Space","Exploring sequence space of Macromolecules, comparison with hierarchical clustering results");await o.step("Load DNA sequences",(async()=>{[n,e,t]=await Promise.all([Is.files.readCsv($t),At(),Et()]),s=i.shell.addTableView(n),s.grid.props.rowHeight=22,s.grid.columns.byName("cluster").visible=!1,s.grid.columns.byName("sequence").width=200,s.grid.columns.byName("is_cliff").visible=!1,i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1}),{description:"Load dataset with macromolecules of 'fasta' notation, 'DNA' alphabet.",delay:2e3}).step("Build sequence space",(async()=>{r=await async function(e,t,s,n){let r;{const e=Object.values(vt);for(let s=0;s<e.length;s++){const n=e[s];if(!t.col(n)){const r=s==e.length-1;t.columns.add(a.Column.float(n,t.rowCount),r)}}if(t.rowCount>=1){const n=t.getCol(s).toList(),r=Date.now();Is.logger.debug("Bio: demoBio01aUI(), calc reduceDimensionality start...");const i=await H([n],"UMAP",[We.W.Levenshtein],[1],"MANHATTAN",{distanceFnArgs:[{}]}),o=Date.now();Is.logger.debug(`Bio: demoBio01aUI(), calc reduceDimensionality ET: ${(o-r)/1e3} s`);for(let s=0;s<e.length;s++){const n=e[s],r=t.getCol(n),o=i[s];r.init((e=>o[e]))}const a=Date.now();Is.logger.debug(`MLB: MlbVrSpaceBrowser.buildView(), postprocess reduceDimensionality ET: ${(a-o)/1e3} s`)}r=await t.plot.fromType(a.VIEWER.SCATTER_PLOT,{xColumnName:vt.X,yColumnName:vt.Y,lassoTool:!0})}return e.dockManager.dock(r,a.DOCK_TYPE.RIGHT,null,"Sequence Space",.35),r}(s,n,Mt),r.setOptions({color:"activity"})}),{description:"Reduce sequence space dimensionality to display on 2D representation.",delay:2e3}).step("Cluster sequences",(async()=>{const r=await e.calcDistanceMatrix(n,[Mt]),i=await Tt(r.data,n.rowCount,1),o=e.parseClusterMatrix(i);t.injectTreeForGrid(s.grid,o,void 0,150,void 0)}),{description:"Perform hierarchical clustering to reveal relationships between sequences.",delay:2e3}).step("Select a sequence",(async()=>{n.selection.set(65,!0)}),{description:"Handling selection of data frame row reflecting on linked viewers.",delay:2e3}).step("Select a bunch of sequences",(async()=>{[67,72,77,82,83,84,85,91,93].forEach((e=>n.selection.set(e,!0))),n.currentRowIdx=27}),{description:"Selecting a group of rows from a data frame to show their similarity and proximity to each other on a viewer..",delay:2e3}).start()}catch(e){St(e)}}()}async function Pn(){await async function(){let e,t,s,n,r;const o=c.A.UMAP;try{const l=new Ct("Activity Cliffs","Activity Cliffs analysis on Macromolecules data");await l.step("Load DNA sequences",(async()=>{i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1,[s,e,t]=await Promise.all([Is.files.readCsv(Nt),At(),Et()]),n=i.shell.addTableView(s),n.grid.props.rowHeight=22,n.grid.columns.byName("cluster").visible=!1,n.grid.columns.byName("sequence").width=300,n.grid.columns.byName("is_cliff").visible=!1}),{description:"Load dataset with macromolecules of 'fasta' notation, 'DNA' alphabet.",delay:2e3}).step("Find activity cliffs",(async()=>{const e=a.Func.find({name:"macromoleculePreprocessingFunction",package:"Bio"})[0];r=await Js(s,s.getCol("Sequence"),s.getCol("Activity"),80,o,He.U.LEVENSHTEIN,e,{}),n.dockManager.dock(r,a.DOCK_TYPE.RIGHT,null,"Activity Cliffs",.35),ct()(r.root).find("button.scatter_plot_link,cliffs_grid").get()[0].click()}),{description:"Reveal similar sequences with a cliff of activity.",delay:2e3}).step("Cluster sequences",(async()=>{const r=a.TaskBarProgressIndicator.create("Running sequence clustering..."),i=await e.calcDistanceMatrix(s,["sequence"]),o=await Tt(i.data,s.rowCount,1),l=e.parseClusterMatrix(o);r.close(),t.injectTreeForGrid(n.grid,l,void 0,150,void 0),n.grid.columns.byName("Activity").scrollIntoView()}),{description:"Perform hierarchical clustering to reveal relationships between sequences.",delay:2e3}).step("Browse the cliff",(async()=>{const e=r.dataFrame.temp[".cliffsDfGrid"];e.dataFrame.rowCount>0&&(e.dataFrame.currentRowIdx=0)}),{description:"Zoom in to explore selected activity cliff details.",delay:2e3}).start()}catch(e){St(e)}}()}async function On(){await async function(){const e="HELM";let t,s,n;try{await new Ct("Atomic Level","Atomic level structure of Macromolecules").step("Loading Macromolecules notation 'Helm'",(async()=>{i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1,t=await Is.files.readCsv("samples/HELM.csv"),s=i.shell.addTableView(t);for(let t=0;t<s.grid.columns.length;t++){const n=s.grid.columns.byIndex(t);[e,"Activity"].includes(n.name)||(n.visible=!1)}}),{description:"Load dataset with macromolecules of 'fasta' notation, 'PT' alphabet (protein, aminoacids).",delay:2e3}).step("To atomic level",(async()=>{const s=t.getCol(e);await sn(t,s,!1)}),{description:"Get atomic level structures of Macromolecules.",delay:2e3}).step("Sketcher",(async()=>{const s=`molfile(${e})`;t.currentCell=t.cell(1,s);const r=t.currentCell.value,i=new a.chem.Sketcher(a.chem.SKETCHER_MODE.INPLACE);i.setMolFile(r),n=o.dialog().add(i).show(),await(0,Ne.gw)(3e3),n.close()}),{description:"Display atomic level structure within a sketcher.",delay:2e3}).start()}catch(e){St(e)}}()}async function Rn(){await async function(){let e,t,s,n,r,o;const l="msa(HELM)",h=c.A.UMAP,u=(await Lt.lp.getDockerContainer()).id,d=Lt.lp.getDockerContainer();let p,m;try{const c=new Ct("Helm, MSA, Sequence Space","MSA and composition analysis on Helm data");await c.step("Load peptides with non-natural aminoacids in 'HELM' notation",(async()=>{[p,t]=await Promise.all([(async()=>(await d).status)(),Is.files.readCsv(Pt)]),e=i.shell.addTableView(t),i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1,"started"===p||"checking"===p?(Is.logger.debug(`demoBio05UI(), PepSeA ('${Lt.lp.dcName}') docker container status = '${p}'.`),m=Promise.resolve()):(Is.logger.warning(`demoBio05UI(), PepSeA ('${Lt.lp.dcName}') docker container is trying to start...`),await i.dapi.docker.dockerContainers.run(u),m=async function(e,t,s=3e4,n){const r=window.performance.now(),o=new y.Subject,a=async()=>{const s=await i.dapi.docker.dockerContainers.find(e);return s.status===t&&o.next(s),s};let l;try{await(0,Ne.zg)(o,(e=>{const s=window.performance.now();n.debug(`awaitStatus(), docker container ('${e.name}') GET status = '${t}' in ${s-r} ms.`)}),(async()=>{const e=await a();n.debug(`awaitStatus(), docker container ('${e.name}') HAS status = '${e.status}'.`),l=window.setInterval(a,200)}),s)}finally{window.clearInterval(l)}}(u,"started",3e4,Is.logger))}),{description:"Load dataset with macromolecules of 'Helm' notation.",delay:2e3}).step("Align peptides with non-natural aminoacids with PepSeA",(async()=>{const e=a.TaskBarProgressIndicator.create("MSA by PepSeA ...");try{await m,s=t.getCol("HELM");const e=Lt.Jy[0],r=1.53,o=0;if(n=await(0,Lt.f3)(s,l,e,r,o,void 0),!n)throw new Error("Empty MSA result.");t.columns.add(n),await i.data.detectSemanticTypes(t)}finally{e.close()}}),{description:"Multiple sequence alignment (MSA) performed with PepSeA tool operating on non-natural aminoacids as well.",delay:2e3}).step("Build sequence space",(async()=>{const s=a.Func.find({package:"Bio",name:"macromoleculePreprocessingFunction"})[0];o=await tn(t,n,h,He.U.LEVENSHTEIN,!0,s),e.dockManager.dock(o,a.DOCK_TYPE.RIGHT,null,"Sequence Space",.35)}),{description:"Reduce sequence space dimensionality to display on 2D representation.",delay:2e3}).step("Analyse sequence composition",(async()=>{r=await t.plot.fromType("WebLogo",{sequenceColumnName:l,positionWidth:40,maxHeight:50}),e.dockManager.dock(r,a.DOCK_TYPE.DOWN,null,"Composition analysis",.2)}),{description:"Composition analysis allows to reveal functional features of sequences like motifs, or variable loops.",delay:2e3}).start()}catch(e){St(e)}}()}async function kn(e,t){var s;(function(e){e.setTag("quality",a.SEMTYPE.MACROMOLECULE),e.setTag("aligned","SEQ"),e.setTag("alphabet","PT")})(s=t),s.setTag("units",be.r2.SEPARATOR),s.setTag("separator","-"),await i.data.detectSemanticTypes(e)}async function Fn(e){const t=await e.readAsString(),s=new vs(e.fileName,t),n=await s.getJson(),r=e.fileName.replace(/\.csv$/,".json"),i=JSON.stringify(n,null,2);a.Utils.download(r,i)}async function Gn(e){const t=(0,te.Xk)(e),s=JSON.stringify(t);a.Utils.download(`${e.name}.json`,s)}async function Dn(e,t,s){const n=await e.readAsString();await async function(e,t,s){const n=a.TaskBarProgressIndicator.create("detectMacromolecule probe ...");try{let r=0;const o=await i.functions.call("Bio:detectMacromoleculeEnableStore");let l=0;for(let c=0;c<s;++c){const h=a.DataFrame.fromCsv(e),u=t?h.getCol(t):h.columns.byIndex(0);await i.functions.call("Bio:detectMacromolecule",{col:u})!==a.SEMTYPE.MACROMOLECULE&&(++l,console.warn(`Reject reason: ${o.last.rejectReason}`));const d=c/s;d-r>=.1&&(r=d,n.update(100*d,`detectMacromolecule probe ${l}/${c}/${s} ...`),await(0,Ne.gw)(0))}l>0?i.shell.warning(`detectMacromolecule failed ${l} / ${s}`):i.shell.info(`detectMacromolecule success ${s}`)}finally{n.close()}}(n,t,s)}},9017:(e,t,s)=>{"use strict";s.d(t,{k:()=>i});class n{constructor(){this.value=0,this.parentI=0,this.parentJ=0}}class r{constructor(e,t,s){this.seq1=e,this.seq2=t,this.score=s}}class i{fillNeedleman(){for(let e=0;e<=this.len1;e++)this.dpGrid[e][0].value=-e*this.gap,this.dpGrid[e][0].parentI=e-1,this.dpGrid[e][0].parentJ=0;for(let e=1;e<=this.len2;e++)this.dpGrid[0][e].value=-e*this.gap,this.dpGrid[0][e].parentI=0,this.dpGrid[0][e].parentJ=e-1}fillOne(e,t){this.dpGrid[e][t].value=Math.max(this.dpGrid[e-1][t-1].value+this.scores[e-1][t-1],Math.max(this.dpGrid[e-1][t].value-this.gap,this.dpGrid[e][t-1].value-this.gap)),this.dpGrid[e][t].value==this.dpGrid[e-1][t-1].value+this.scores[e-1][t-1]?(this.dpGrid[e][t].parentI=e-1,this.dpGrid[e][t].parentJ=t-1):this.dpGrid[e][t].value==this.dpGrid[e-1][t].value-this.gap?(this.dpGrid[e][t].parentI=e-1,this.dpGrid[e][t].parentJ=t):(this.dpGrid[e][t].parentI=e,this.dpGrid[e][t].parentJ=t-1)}gridFromName(e){switch(e){case"BLOSUM45":this.alignGrid=this.BLOSUM45,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM50":this.alignGrid=this.BLOSUM50,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM62":this.alignGrid=this.BLOSUM62,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM80":this.alignGrid=this.BLOSUM80,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM90":this.alignGrid=this.BLOSUM90,this.connections=this.CONBLO,this.step=1;break;case"PAM30":this.alignGrid=this.PAM30,this.connections=this.CONBLO,this.step=1;break;case"PAM70":this.alignGrid=this.PAM70,this.connections=this.CONBLO,this.step=1;break;case"PAM250":this.alignGrid=this.PAM250,this.connections=this.CONBLO,this.step=1;break;case"NUCLEOTIDES":this.alignGrid=this.NUCLEOTIDES,this.connections=this.CONNUCL,this.step=1;break;case"TRANS":this.alignGrid=this.TRANS,this.connections=this.CONNUCL,this.step=1;break;case"SCHNEIDER":this.alignGrid=this.SCHNEIDER,this.connections=this.CONSCHN,this.step=3}this.fillScores()}constructResult(e,t){let s="",n="",i="";const o=this.dpGrid[e][t].value;for(let e=0;e<this.step;e++)i+="|";for(;e>0||t>0;){this.dpGrid[e][t].parentI==e?(s=i+s,n=this.seq2.substr((t-1)*this.step,this.step)+n):this.dpGrid[e][t].parentJ==t?(n=i+n,s=this.seq1.substr((e-1)*this.step,this.step)+s):(s=e-1>=0?this.seq1.substr((e-1)*this.step,this.step)+s:i+s,n=t-1>=0?this.seq2.substr((t-1)*this.step,this.step)+n:i+n);const r=e;e=this.dpGrid[e][t].parentI,t=this.dpGrid[r][t].parentJ}return new r(s,n,o)}fillScores(){this.scores=[];for(let e=0;e<this.len1;e++){this.scores.push([]);for(let t=0;t<this.len2;t++)this.scores[e].push(this.alignGrid[this.connections[this.seq1.substr(e*this.step,this.step)]][this.connections[this.seq2.substr(t*this.step,this.step)]])}}typeRec(){if(/[ATGC]*/.test(this.seq1)&&/[ATGC]*/.test(this.seq2))return"NUCLEOTIDES";if(/[ARNDCQEGHILKMFPSTWYVBZX*]*/.test(this.seq1)&&/[ARNDCQEGHILKMFPSTWYVBZX*]*/.test(this.seq2))return"BLOSUM62";throw Error("Can't recognize sequence type")}needlemanWunch(){this.dpGrid=[];for(let e=0;e<this.len1+1;e++){const e=[];for(let t=0;t<this.len2+1;t++)e.push(new n);this.dpGrid.push(e)}this.fillNeedleman();for(let e=1;e<=this.len1;e++)for(let t=1;t<=this.len2;t++)this.fillOne(e,t);return this.constructResult(this.len1,this.len2)}smithWaterman(){this.dpGrid=[];for(let e=0;e<this.len1+1;e++){const e=[];for(let t=0;t<this.len2+1;t++)e.push(new n);this.dpGrid.push(e)}let e=0,t=0,s=0;for(let n=1;n<=this.len1;n++)for(let r=1;r<=this.len2;r++)this.fillOne(n,r),this.dpGrid[n][r].value<=0?(this.dpGrid[n][r].value=0,this.dpGrid[n][r].parentI=0,this.dpGrid[n][r].parentJ=0):0==this.dpGrid[this.dpGrid[n][r].parentI][this.dpGrid[n][r].parentJ].value&&(this.dpGrid[n][r].parentI=0,this.dpGrid[n][r].parentJ=0),this.dpGrid[n][r].value>e&&(e=this.dpGrid[n][r].value,t=n,s=r);return this.constructResult(t,s)}setSequences(e,t){this.seq1=e,this.seq2=t,this.len1=this.seq1.length/this.step,this.len2=this.seq2.length/this.step,this.fillScores()}setGap(e){this.gap=e}setMethod(e=""){"AUTO"==e&&(e=this.typeRec()),this.gridFromName(e)}constructor(e,t,s,n=""){this.seq1="",this.seq2="",this.gap=1,this.len1=0,this.len2=0,this.step=1,this.alignGrid=[],this.scores=[],this.dpGrid=[],this.connections={},this.BLOSUM45=[[5,-2,-1,-2,-1,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-2,-2,0,-1,-1,0,-5],[-2,7,0,-1,-3,1,0,-2,0,-3,-2,3,-1,-2,-2,-1,-1,-2,-1,-2,-1,0,-1,-5],[-1,0,6,2,-2,0,0,0,1,-2,-3,0,-2,-2,-2,1,0,-4,-2,-3,4,0,-1,-5],[-2,-1,2,7,-3,0,2,-1,0,-4,-3,0,-3,-4,-1,0,-1,-4,-2,-3,5,1,-1,-5],[-1,-3,-2,-3,12,-3,-3,-3,-3,-3,-2,-3,-2,-2,-4,-1,-1,-5,-3,-1,-2,-3,-2,-5],[-1,1,0,0,-3,6,2,-2,1,-2,-2,1,0,-4,-1,0,-1,-2,-1,-3,0,4,-1,-5],[-1,0,0,2,-3,2,6,-2,0,-3,-2,1,-2,-3,0,0,-1,-3,-2,-3,1,4,-1,-5],[0,-2,0,-1,-3,-2,-2,7,-2,-4,-3,-2,-2,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-5],[-2,0,1,0,-3,1,0,-2,10,-3,-2,-1,0,-2,-2,-1,-2,-3,2,-3,0,0,-1,-5],[-1,-3,-2,-4,-3,-2,-3,-4,-3,5,2,-3,2,0,-2,-2,-1,-2,0,3,-3,-3,-1,-5],[-1,-2,-3,-3,-2,-2,-2,-3,-2,2,5,-3,2,1,-3,-3,-1,-2,0,1,-3,-2,-1,-5],[-1,3,0,0,-3,1,1,-2,-1,-3,-3,5,-1,-3,-1,-1,-1,-2,-1,-2,0,1,-1,-5],[-1,-1,-2,-3,-2,0,-2,-2,0,2,2,-1,6,0,-2,-2,-1,-2,0,1,-2,-1,-1,-5],[-2,-2,-2,-4,-2,-4,-3,-3,-2,0,1,-3,0,8,-3,-2,-1,1,3,0,-3,-3,-1,-5],[-1,-2,-2,-1,-4,-1,0,-2,-2,-2,-3,-1,-2,-3,9,-1,-1,-3,-3,-3,-2,-1,-1,-5],[1,-1,1,0,-1,0,0,0,-1,-2,-3,-1,-2,-2,-1,4,2,-4,-2,-1,0,0,0,-5],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-1,-1,2,5,-3,-1,0,0,-1,0,-5],[-2,-2,-4,-4,-5,-2,-3,-2,-3,-2,-2,-2,-2,1,-3,-4,-3,15,3,-3,-4,-2,-2,-5],[-2,-1,-2,-2,-3,-1,-2,-3,2,0,0,-1,0,3,-3,-2,-1,3,8,-1,-2,-2,-1,-5],[0,-2,-3,-3,-1,-3,-3,-3,-3,3,1,-2,1,0,-3,-1,0,-3,-1,5,-3,-3,-1,-5],[-1,-1,4,5,-2,0,1,-1,0,-3,-3,0,-2,-3,-2,0,0,-4,-2,-3,4,2,-1,-5],[-1,0,0,1,-3,4,4,-2,0,-3,-2,1,-1,-3,-1,0,-1,-2,-2,-3,2,4,-1,-5],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,-2,-1,-1,-1,-1,-1,-5],[-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,1]],this.BLOSUM50=[[5,-2,-1,-2,-1,-1,-1,0,-2,-1,-2,-1,-1,-3,-1,1,0,-3,-2,0,-2,-1,-1,-5],[-2,7,-1,-2,-4,1,0,-3,0,-4,-3,3,-2,-3,-3,-1,-1,-3,-1,-3,-1,0,-1,-5],[-1,-1,7,2,-2,0,0,0,1,-3,-4,0,-2,-4,-2,1,0,-4,-2,-3,4,0,-1,-5],[-2,-2,2,8,-4,0,2,-1,-1,-4,-4,-1,-4,-5,-1,0,-1,-5,-3,-4,5,1,-1,-5],[-1,-4,-2,-4,13,-3,-3,-3,-3,-2,-2,-3,-2,-2,-4,-1,-1,-5,-3,-1,-3,-3,-2,-5],[-1,1,0,0,-3,7,2,-2,1,-3,-2,2,0,-4,-1,0,-1,-1,-1,-3,0,4,-1,-5],[-1,0,0,2,-3,2,6,-3,0,-4,-3,1,-2,-3,-1,-1,-1,-3,-2,-3,1,5,-1,-5],[0,-3,0,-1,-3,-2,-3,8,-2,-4,-4,-2,-3,-4,-2,0,-2,-3,-3,-4,-1,-2,-2,-5],[-2,0,1,-1,-3,1,0,-2,10,-4,-3,0,-1,-1,-2,-1,-2,-3,2,-4,0,0,-1,-5],[-1,-4,-3,-4,-2,-3,-4,-4,-4,5,2,-3,2,0,-3,-3,-1,-3,-1,4,-4,-3,-1,-5],[-2,-3,-4,-4,-2,-2,-3,-4,-3,2,5,-3,3,1,-4,-3,-1,-2,-1,1,-4,-3,-1,-5],[-1,3,0,-1,-3,2,1,-2,0,-3,-3,6,-2,-4,-1,0,-1,-3,-2,-3,0,1,-1,-5],[-1,-2,-2,-4,-2,0,-2,-3,-1,2,3,-2,7,0,-3,-2,-1,-1,0,1,-3,-1,-1,-5],[-3,-3,-4,-5,-2,-4,-3,-4,-1,0,1,-4,0,8,-4,-3,-2,1,4,-1,-4,-4,-2,-5],[-1,-3,-2,-1,-4,-1,-1,-2,-2,-3,-4,-1,-3,-4,10,-1,-1,-4,-3,-3,-2,-1,-2,-5],[1,-1,1,0,-1,0,-1,0,-1,-3,-3,0,-2,-3,-1,5,2,-4,-2,-2,0,0,-1,-5],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,2,5,-3,-2,0,0,-1,0,-5],[-3,-3,-4,-5,-5,-1,-3,-3,-3,-3,-2,-3,-1,1,-4,-4,-3,15,2,-3,-5,-2,-3,-5],[-2,-1,-2,-3,-3,-1,-2,-3,2,-1,-1,-2,0,4,-3,-2,-2,2,8,-1,-3,-2,-1,-5],[0,-3,-3,-4,-1,-3,-3,-4,-4,4,1,-3,1,-1,-3,-2,0,-3,-1,5,-4,-3,-1,-5],[-2,-1,4,5,-3,0,1,-1,0,-4,-4,0,-3,-4,-2,0,0,-5,-3,-4,5,2,-1,-5],[-1,0,0,1,-3,4,5,-2,0,-3,-3,1,-1,-4,-1,0,-1,-2,-2,-3,2,5,-1,-5],[-1,-1,-1,-1,-2,-1,-1,-2,-1,-1,-1,-1,-1,-2,-2,-1,0,-3,-1,-1,-1,-1,-1,-5],[-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,1]],this.BLOSUM62=[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]],this.BLOSUM80=[[7,-3,-3,-3,-1,-2,-2,0,-3,-3,-3,-1,-2,-4,-1,2,0,-5,-4,-1,-3,-2,-1,-8],[-3,9,-1,-3,-6,1,-1,-4,0,-5,-4,3,-3,-5,-3,-2,-2,-5,-4,-4,-2,0,-2,-8],[-3,-1,9,2,-5,0,-1,-1,1,-6,-6,0,-4,-6,-4,1,0,-7,-4,-5,5,-1,-2,-8],[-3,-3,2,10,-7,-1,2,-3,-2,-7,-7,-2,-6,-6,-3,-1,-2,-8,-6,-6,6,1,-3,-8],[-1,-6,-5,-7,13,-5,-7,-6,-7,-2,-3,-6,-3,-4,-6,-2,-2,-5,-5,-2,-6,-7,-4,-8],[-2,1,0,-1,-5,9,3,-4,1,-5,-4,2,-1,-5,-3,-1,-1,-4,-3,-4,-1,5,-2,-8],[-2,-1,-1,2,-7,3,8,-4,0,-6,-6,1,-4,-6,-2,-1,-2,-6,-5,-4,1,6,-2,-8],[0,-4,-1,-3,-6,-4,-4,9,-4,-7,-7,-3,-5,-6,-5,-1,-3,-6,-6,-6,-2,-4,-3,-8],[-3,0,1,-2,-7,1,0,-4,12,-6,-5,-1,-4,-2,-4,-2,-3,-4,3,-5,-1,0,-2,-8],[-3,-5,-6,-7,-2,-5,-6,-7,-6,7,2,-5,2,-1,-5,-4,-2,-5,-3,4,-6,-6,-2,-8],[-3,-4,-6,-7,-3,-4,-6,-7,-5,2,6,-4,3,0,-5,-4,-3,-4,-2,1,-7,-5,-2,-8],[-1,3,0,-2,-6,2,1,-3,-1,-5,-4,8,-3,-5,-2,-1,-1,-6,-4,-4,-1,1,-2,-8],[-2,-3,-4,-6,-3,-1,-4,-5,-4,2,3,-3,9,0,-4,-3,-1,-3,-3,1,-5,-3,-2,-8],[-4,-5,-6,-6,-4,-5,-6,-6,-2,-1,0,-5,0,10,-6,-4,-4,0,4,-2,-6,-6,-3,-8],[-1,-3,-4,-3,-6,-3,-2,-5,-4,-5,-5,-2,-4,-6,12,-2,-3,-7,-6,-4,-4,-2,-3,-8],[2,-2,1,-1,-2,-1,-1,-1,-2,-4,-4,-1,-3,-4,-2,7,2,-6,-3,-3,0,-1,-1,-8],[0,-2,0,-2,-2,-1,-2,-3,-3,-2,-3,-1,-1,-4,-3,2,8,-5,-3,0,-1,-2,-1,-8],[-5,-5,-7,-8,-5,-4,-6,-6,-4,-5,-4,-6,-3,0,-7,-6,-5,16,3,-5,-8,-5,-5,-8],[-4,-4,-4,-6,-5,-3,-5,-6,3,-3,-2,-4,-3,4,-6,-3,-3,3,11,-3,-5,-4,-3,-8],[-1,-4,-5,-6,-2,-4,-4,-6,-5,4,1,-4,1,-2,-4,-3,0,-5,-3,7,-6,-4,-2,-8],[-3,-2,5,6,-6,-1,1,-2,-1,-6,-7,-1,-5,-6,-4,0,-1,-8,-5,-6,6,0,-3,-8],[-2,0,-1,1,-7,5,6,-4,0,-6,-5,1,-3,-6,-2,-1,-2,-5,-4,-4,0,6,-1,-8],[-1,-2,-2,-3,-4,-2,-2,-3,-2,-2,-2,-2,-2,-3,-3,-1,-1,-5,-3,-2,-3,-1,-2,-8],[-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,1]],this.BLOSUM90=[[5,-2,-2,-3,-1,-1,-1,0,-2,-2,-2,-1,-2,-3,-1,1,0,-4,-3,-1,-2,-1,-1,-6],[-2,6,-1,-3,-5,1,-1,-3,0,-4,-3,2,-2,-4,-3,-1,-2,-4,-3,-3,-2,0,-2,-6],[-2,-1,7,1,-4,0,-1,-1,0,-4,-4,0,-3,-4,-3,0,0,-5,-3,-4,4,-1,-2,-6],[-3,-3,1,7,-5,-1,1,-2,-2,-5,-5,-1,-4,-5,-3,-1,-2,-6,-4,-5,4,0,-2,-6],[-1,-5,-4,-5,9,-4,-6,-4,-5,-2,-2,-4,-2,-3,-4,-2,-2,-4,-4,-2,-4,-5,-3,-6],[-1,1,0,-1,-4,7,2,-3,1,-4,-3,1,0,-4,-2,-1,-1,-3,-3,-3,-1,4,-1,-6],[-1,-1,-1,1,-6,2,6,-3,-1,-4,-4,0,-3,-5,-2,-1,-1,-5,-4,-3,0,4,-2,-6],[0,-3,-1,-2,-4,-3,-3,6,-3,-5,-5,-2,-4,-5,-3,-1,-3,-4,-5,-5,-2,-3,-2,-6],[-2,0,0,-2,-5,1,-1,-3,8,-4,-4,-1,-3,-2,-3,-2,-2,-3,1,-4,-1,0,-2,-6],[-2,-4,-4,-5,-2,-4,-4,-5,-4,5,1,-4,1,-1,-4,-3,-1,-4,-2,3,-5,-4,-2,-6],[-2,-3,-4,-5,-2,-3,-4,-5,-4,1,5,-3,2,0,-4,-3,-2,-3,-2,0,-5,-4,-2,-6],[-1,2,0,-1,-4,1,0,-2,-1,-4,-3,6,-2,-4,-2,-1,-1,-5,-3,-3,-1,1,-1,-6],[-2,-2,-3,-4,-2,0,-3,-4,-3,1,2,-2,7,-1,-3,-2,-1,-2,-2,0,-4,-2,-1,-6],[-3,-4,-4,-5,-3,-4,-5,-5,-2,-1,0,-4,-1,7,-4,-3,-3,0,3,-2,-4,-4,-2,-6],[-1,-3,-3,-3,-4,-2,-2,-3,-3,-4,-4,-2,-3,-4,8,-2,-2,-5,-4,-3,-3,-2,-2,-6],[1,-1,0,-1,-2,-1,-1,-1,-2,-3,-3,-1,-2,-3,-2,5,1,-4,-3,-2,0,-1,-1,-6],[0,-2,0,-2,-2,-1,-1,-3,-2,-1,-2,-1,-1,-3,-2,1,6,-4,-2,-1,-1,-1,-1,-6],[-4,-4,-5,-6,-4,-3,-5,-4,-3,-4,-3,-5,-2,0,-5,-4,-4,11,2,-3,-6,-4,-3,-6],[-3,-3,-3,-4,-4,-3,-4,-5,1,-2,-2,-3,-2,3,-4,-3,-2,2,8,-3,-4,-3,-2,-6],[-1,-3,-4,-5,-2,-3,-3,-5,-4,3,0,-3,0,-2,-3,-2,-1,-3,-3,5,-4,-3,-2,-6],[-2,-2,4,4,-4,-1,0,-2,-1,-5,-5,-1,-4,-4,-3,0,-1,-6,-4,-4,4,0,-2,-6],[-1,0,-1,0,-5,4,4,-3,0,-4,-4,1,-2,-4,-2,-1,-1,-4,-3,-3,0,4,-1,-6],[-1,-2,-2,-2,-3,-1,-2,-2,-2,-2,-2,-1,-1,-2,-2,-1,-1,-3,-2,-2,-2,-1,-2,-6],[-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,1]],this.NUCLEOTIDES=[[1,-1,-1,-1],[-1,1,-1,-1],[-1,-1,1,-1],[-1,-1,-1,1]],this.PAM30=[[6,-7,-4,-3,-6,-4,-2,-2,-7,-5,-6,-7,-5,-8,-2,0,-1,-13,-8,-2,-3,-3,-3,-17],[-7,8,-6,-10,-8,-2,-9,-9,-2,-5,-8,0,-4,-9,-4,-3,-6,-2,-10,-8,-7,-4,-6,-17],[-4,-6,8,2,-11,-3,-2,-3,0,-5,-7,-1,-9,-9,-6,0,-2,-8,-4,-8,6,-3,-3,-17],[-3,-10,2,8,-14,-2,2,-3,-4,-7,-12,-4,-11,-15,-8,-4,-5,-15,-11,-8,6,1,-5,-17],[-6,-8,-11,-14,10,-14,-14,-9,-7,-6,-15,-14,-13,-13,-8,-3,-8,-15,-4,-6,-12,-14,-9,-17],[-4,-2,-3,-2,-14,8,1,-7,1,-8,-5,-3,-4,-13,-3,-5,-5,-13,-12,-7,-3,6,-5,-17],[-2,-9,-2,2,-14,1,8,-4,-5,-5,-9,-4,-7,-14,-5,-4,-6,-17,-8,-6,1,6,-5,-17],[-2,-9,-3,-3,-9,-7,-4,6,-9,-11,-10,-7,-8,-9,-6,-2,-6,-15,-14,-5,-3,-5,-5,-17],[-7,-2,0,-4,-7,1,-5,-9,9,-9,-6,-6,-10,-6,-4,-6,-7,-7,-3,-6,-1,-1,-5,-17],[-5,-5,-5,-7,-6,-8,-5,-11,-9,8,-1,-6,-1,-2,-8,-7,-2,-14,-6,2,-6,-6,-5,-17],[-6,-8,-7,-12,-15,-5,-9,-10,-6,-1,7,-8,1,-3,-7,-8,-7,-6,-7,-2,-9,-7,-6,-17],[-7,0,-1,-4,-14,-3,-4,-7,-6,-6,-8,7,-2,-14,-6,-4,-3,-12,-9,-9,-2,-4,-5,-17],[-5,-4,-9,-11,-13,-4,-7,-8,-10,-1,1,-2,11,-4,-8,-5,-4,-13,-11,-1,-10,-5,-5,-17],[-8,-9,-9,-15,-13,-13,-14,-9,-6,-2,-3,-14,-4,9,-10,-6,-9,-4,2,-8,-10,-13,-8,-17],[-2,-4,-6,-8,-8,-3,-5,-6,-4,-8,-7,-6,-8,-10,8,-2,-4,-14,-13,-6,-7,-4,-5,-17],[0,-3,0,-4,-3,-5,-4,-2,-6,-7,-8,-4,-5,-6,-2,6,0,-5,-7,-6,-1,-5,-3,-17],[-1,-6,-2,-5,-8,-5,-6,-6,-7,-2,-7,-3,-4,-9,-4,0,7,-13,-6,-3,-3,-6,-4,-17],[-13,-2,-8,-15,-15,-13,-17,-15,-7,-14,-6,-12,-13,-4,-14,-5,-13,13,-5,-15,-10,-14,-11,-17],[-8,-10,-4,-11,-4,-12,-8,-14,-3,-6,-7,-9,-11,2,-13,-7,-6,-5,10,-7,-6,-9,-7,-17],[-2,-8,-8,-8,-6,-7,-6,-5,-6,2,-2,-9,-1,-8,-6,-6,-3,-15,-7,7,-8,-6,-5,-17],[-3,-7,6,6,-12,-3,1,-3,-1,-6,-9,-2,-10,-10,-7,-1,-3,-10,-6,-8,6,0,-5,-17],[-3,-4,-3,1,-14,6,6,-5,-1,-6,-7,-4,-5,-13,-4,-5,-6,-14,-9,-6,0,6,-5,-17],[-3,-6,-3,-5,-9,-5,-5,-5,-5,-5,-6,-5,-5,-8,-5,-3,-4,-11,-7,-5,-5,-5,-5,-17],[-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,1]],this.PAM70=[[5,-4,-2,-1,-4,-2,-1,0,-4,-2,-4,-4,-3,-6,0,1,1,-9,-5,-1,-1,-1,-2,-11],[-4,8,-3,-6,-5,0,-5,-6,0,-3,-6,2,-2,-7,-2,-1,-4,0,-7,-5,-4,-2,-3,-11],[-2,-3,6,3,-7,-1,0,-1,1,-3,-5,0,-5,-6,-3,1,0,-6,-3,-5,5,-1,-2,-11],[-1,-6,3,6,-9,0,3,-1,-1,-5,-8,-2,-7,-10,-4,-1,-2,-10,-7,-5,5,2,-3,-11],[-4,-5,-7,-9,9,-9,-9,-6,-5,-4,-10,-9,-9,-8,-5,-1,-5,-11,-2,-4,-8,-9,-6,-11],[-2,0,-1,0,-9,7,2,-4,2,-5,-3,-1,-2,-9,-1,-3,-3,-8,-8,-4,-1,5,-2,-11],[-1,-5,0,3,-9,2,6,-2,-2,-4,-6,-2,-4,-9,-3,-2,-3,-11,-6,-4,2,5,-3,-11],[0,-6,-1,-1,-6,-4,-2,6,-6,-6,-7,-5,-6,-7,-3,0,-3,-10,-9,-3,-1,-3,-3,-11],[-4,0,1,-1,-5,2,-2,-6,8,-6,-4,-3,-6,-4,-2,-3,-4,-5,-1,-4,0,1,-3,-11],[-2,-3,-3,-5,-4,-5,-4,-6,-6,7,1,-4,1,0,-5,-4,-1,-9,-4,3,-4,-4,-3,-11],[-4,-6,-5,-8,-10,-3,-6,-7,-4,1,6,-5,2,-1,-5,-6,-4,-4,-4,0,-6,-4,-4,-11],[-4,2,0,-2,-9,-1,-2,-5,-3,-4,-5,6,0,-9,-4,-2,-1,-7,-7,-6,-1,-2,-3,-11],[-3,-2,-5,-7,-9,-2,-4,-6,-6,1,2,0,10,-2,-5,-3,-2,-8,-7,0,-6,-3,-3,-11],[-6,-7,-6,-10,-8,-9,-9,-7,-4,0,-1,-9,-2,8,-7,-4,-6,-2,4,-5,-7,-9,-5,-11],[0,-2,-3,-4,-5,-1,-3,-3,-2,-5,-5,-4,-5,-7,7,0,-2,-9,-9,-3,-4,-2,-3,-11],[1,-1,1,-1,-1,-3,-2,0,-3,-4,-6,-2,-3,-4,0,5,2,-3,-5,-3,0,-2,-1,-11],[1,-4,0,-2,-5,-3,-3,-3,-4,-1,-4,-1,-2,-6,-2,2,6,-8,-4,-1,-1,-3,-2,-11],[-9,0,-6,-10,-11,-8,-11,-10,-5,-9,-4,-7,-8,-2,-9,-3,-8,13,-3,-10,-7,-10,-7,-11],[-5,-7,-3,-7,-2,-8,-6,-9,-1,-4,-4,-7,-7,4,-9,-5,-4,-3,9,-5,-4,-7,-5,-11],[-1,-5,-5,-5,-4,-4,-4,-3,-4,3,0,-6,0,-5,-3,-3,-1,-10,-5,6,-5,-4,-2,-11],[-1,-4,5,5,-8,-1,2,-1,0,-4,-6,-1,-6,-7,-4,0,-1,-7,-4,-5,5,1,-2,-11],[-1,-2,-1,2,-9,5,5,-3,1,-4,-4,-2,-3,-9,-2,-2,-3,-10,-7,-4,1,5,-3,-11],[-2,-3,-2,-3,-6,-2,-3,-3,-3,-3,-4,-3,-3,-5,-3,-1,-2,-7,-5,-2,-2,-3,-3,-11],[-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,1]],this.PAM250=[[2,-2,0,0,-2,0,0,1,-1,-1,-2,-1,-1,-3,1,1,1,-6,-3,0,0,0,0,-8],[-2,6,0,-1,-4,1,-1,-3,2,-2,-3,3,0,-4,0,0,-1,2,-4,-2,-1,0,-1,-8],[0,0,2,2,-4,1,1,0,2,-2,-3,1,-2,-3,0,1,0,-4,-2,-2,2,1,0,-8],[0,-1,2,4,-5,2,3,1,1,-2,-4,0,-3,-6,-1,0,0,-7,-4,-2,3,3,-1,-8],[-2,-4,-4,-5,12,-5,-5,-3,-3,-2,-6,-5,-5,-4,-3,0,-2,-8,0,-2,-4,-5,-3,-8],[0,1,1,2,-5,4,2,-1,3,-2,-2,1,-1,-5,0,-1,-1,-5,-4,-2,1,3,-1,-8],[0,-1,1,3,-5,2,4,0,1,-2,-3,0,-2,-5,-1,0,0,-7,-4,-2,3,3,-1,-8],[1,-3,0,1,-3,-1,0,5,-2,-3,-4,-2,-3,-5,0,1,0,-7,-5,-1,0,0,-1,-8],[-1,2,2,1,-3,3,1,-2,6,-2,-2,0,-2,-2,0,-1,-1,-3,0,-2,1,2,-1,-8],[-1,-2,-2,-2,-2,-2,-2,-3,-2,5,2,-2,2,1,-2,-1,0,-5,-1,4,-2,-2,-1,-8],[-2,-3,-3,-4,-6,-2,-3,-4,-2,2,6,-3,4,2,-3,-3,-2,-2,-1,2,-3,-3,-1,-8],[-1,3,1,0,-5,1,0,-2,0,-2,-3,5,0,-5,-1,0,0,-3,-4,-2,1,0,-1,-8],[-1,0,-2,-3,-5,-1,-2,-3,-2,2,4,0,6,0,-2,-2,-1,-4,-2,2,-2,-2,-1,-8],[-3,-4,-3,-6,-4,-5,-5,-5,-2,1,2,-5,0,9,-5,-3,-3,0,7,-1,-4,-5,-2,-8],[1,0,0,-1,-3,0,-1,0,0,-2,-3,-1,-2,-5,6,1,0,-6,-5,-1,-1,0,-1,-8],[1,0,1,0,0,-1,0,1,-1,-1,-3,0,-2,-3,1,2,1,-2,-3,-1,0,0,0,-8],[1,-1,0,0,-2,-1,0,0,-1,0,-2,0,-1,-3,0,1,3,-5,-3,0,0,-1,0,-8],[-6,2,-4,-7,-8,-5,-7,-7,-3,-5,-2,-3,-4,0,-6,-2,-5,17,0,-6,-5,-6,-4,-8],[-3,-4,-2,-4,0,-4,-4,-5,0,-1,-1,-4,-2,7,-5,-3,-3,0,10,-2,-3,-4,-2,-8],[0,-2,-2,-2,-2,-2,-2,-1,-2,4,2,-2,2,-1,-1,-1,0,-6,-2,4,-2,-2,-1,-8],[0,-1,2,3,-4,1,3,0,1,-2,-3,1,-2,-4,-1,0,0,-5,-3,-2,3,2,-1,-8],[0,0,1,3,-5,3,3,0,2,-2,-3,0,-2,-5,0,0,-1,-6,-4,-2,2,3,-1,-8],[0,-1,0,-1,-3,-1,-1,-1,-1,-1,-1,-1,-1,-2,-1,0,0,-4,-2,-1,-1,-1,-1,-8],[-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,1]],this.SCHNEIDER=[[11.6,-2.7,9.7,-1.7,-2.7,-6.4,-3.9,-5.6,5.1,-5,3.6,-4.2,-6.3,-13,-7.1,-11.5,.4,-6,-1.9,-5.3,-8.5,-11.2,-8.9,-10.8,2.1,0,1.4,.2,-10.2,-13.5,-13,-12.5,-2.6,-8.5,-5,-8.1,-6.3,-9.9,-7.5,-9,-7.1,-10.2,-8.2,-9.2,-8.2,-12.5,-11.1,-11.4,-50,-14.8,-50,-13.8,-7.3,-10.1,-8.4,-9.1,-50,-13,-13.5,-12.4,-10.7,-18.1,-11.8,-17.2],[-2.7,13,-3.3,10.9,-3.5,-.4,-3.3,-1.8,-5.4,4.6,-5.5,3,-10.2,-7.9,-9.9,-9.6,-5,.5,-5.5,-1,-10.3,-8.1,-9.4,-9.6,-8.1,-5,-7.3,-6.3,-13.4,-11.3,-14.4,-12.9,-6.3,.8,-6.4,-1.1,-7.4,-5,-6.2,-6.5,-5.6,-1.6,-4.7,-3,-10.8,-8.7,-11.9,-10,-50,-6.2,-50,-7.5,-6.3,-4.3,-6.2,-5.4,-50,-7,-16.3,-8.2,-13.2,-12.3,-13.1,-13.3],[9.7,-3.3,11.6,-2.8,-4.5,-6.7,-3.1,-6.9,3.3,-5.5,4.8,-5.1,-8.9,-13.2,-5.7,-12.6,-1.5,-6.1,-.6,-6.1,-10,-11.8,-8.6,-11.9,1.2,.5,2.2,.1,-11.8,-14,-11.9,-13.4,-4.9,-9.1,-3.4,-8.9,-8,-10,-7.2,-10,-9.1,-10.2,-7.1,-9.9,-10.1,-13,-10.6,-12.7,-50,-14.9,-50,-14.4,-8.9,-10.8,-8.9,-10.4,-50,-13.1,-11.8,-13,-12.4,-19.4,-11.5,-17.8],[-1.7,10.9,-2.8,12.9,-2.7,-2.2,-2.8,.2,-4.8,2.9,-5.2,5.2,-9.1,-9.5,-9,-7,-4,-1,-5,1,-9,-8.8,-8.9,-7.7,-7,-6.8,-7.1,-4.3,-12.4,-12.9,-13.9,-10,-4.9,-.7,-5.6,1.4,-6,-6.5,-6.2,-4.8,-5.1,-3.2,-5,-1.2,-9.8,-9.9,-11.3,-8.2,-50,-7.6,-50,-5.1,-5.5,-5.8,-5.9,-4.2,-50,-8.3,-15.5,-5.9,-11.6,-14.2,-12,-11.6],[-2.7,-3.5,-4.5,-2.7,11.7,9,10.6,9.6,-3.2,-.7,-5.1,-.4,.7,-4.6,-.4,-3.6,-4.8,-8.9,-6.5,-7.8,-1.4,-4.1,-2.9,-3.3,-8,-9.1,-8,-8.2,-6,-9.3,-7.7,-8.5,-6.4,-10.1,-7.5,-8.6,2.8,-.7,.9,.1,-5.9,-7.3,-6.5,-6.5,-.4,-3.9,-2.6,-3.1,-50,-14.6,-50,-12.6,2.9,.1,1.8,1,-50,-9.2,-13.6,-7.7,-4.8,-12.2,-6.2,-11],[-6.4,-.4,-6.7,-2.2,9,12.3,9.8,9.6,-7.1,2.4,-7.2,.3,-2.9,-1.2,-3,-3.3,-7.6,-6.7,-8.1,-7.9,-4.9,-1.9,-4.5,-3.8,-9.5,-7.8,-9.3,-8.9,-9.4,-7.1,-9,-9,-9.4,-7.5,-9.3,-9.2,-.7,2.6,.2,-.1,-8,-4.6,-7.7,-6.1,-3.6,-1,-4.1,-3.1,-50,-11.6,-50,-11.6,.2,2.3,.4,.5,-50,-6.5,-15.3,-7.8,-8.4,-9.5,-8.3,-11.1],[-3.9,-3.3,-3.1,-2.8,10.6,9.8,12.2,9.8,-4.9,.1,-3.6,-.2,-1.7,-4.1,.9,-3.5,-5.9,-8.9,-5.6,-8.5,-3.9,-3.9,-2.2,-4.5,-7.3,-7.5,-6.4,-8.5,-7.1,-8.2,-6.7,-7.8,-7.9,-9.1,-7.1,-9.4,.9,-.2,2.5,-.3,-6.9,-6.5,-5.5,-6.8,-1.7,-3.4,-1.7,-2.8,-50,-13,-50,-11.5,1.5,.7,2.7,.6,-50,-8.9,-12.1,-7.4,-6.1,-11.5,-5.4,-10.4],[-5.6,-1.8,-6.9,.2,9.6,9.6,9.8,11.6,-6.6,.9,-7.2,2.5,-2.3,-3.4,-2.3,-.6,-6.5,-8.2,-8,-6.3,-3.7,-3.5,-3.9,-1.6,-9.9,-8.9,-9.6,-7,-8.6,-8.9,-8.8,-6.8,-8.6,-8.2,-8.8,-6.8,.3,.1,.2,2.4,-7.4,-6.2,-6.9,-4.4,-2.9,-2.9,-3.5,-.9,-50,-12.2,-50,-10.1,1.2,.6,1.2,2.4,-50,-7.6,-16.1,-5.8,-7.2,-10.8,-7.4,-9],[5.1,-5.4,3.3,-4.8,-3.2,-7.1,-4.9,-6.6,13.3,-2.8,11.2,-1.9,-5.7,-12.5,-7.2,-11.6,-.7,-4.8,-3.1,-4.3,-10,-11.6,-8.8,-11.7,10.5,7.7,9.1,8.5,-9.8,-12.7,-11.7,-11.8,-6.3,-11.4,-8.8,-11,-7.5,-10.3,-8.3,-9.9,-1.9,-6.7,-4.1,-6.4,-7.9,-12.5,-11.4,-11.7,-50,-14,-50,-13.2,-8.5,-10.4,-9.1,-9.6,-50,-9.8,-7.7,-8.8,-10.3,-17.9,-11.8,-16],[-5,4.6,-5.5,2.9,-.7,2.4,.1,.9,-2.8,12.8,-2.6,11,-8.4,-6.3,-8.3,-7.7,-6.1,-2.9,-6.5,-4.2,-8.5,-5.9,-7.5,-7.7,-5.5,-2.4,-5.5,-4.1,-12.9,-10.3,-12.7,-11.3,-7.4,-3.1,-7.4,-4.9,-4.4,-1.8,-3.5,-3.5,-1.6,3,-.8,.9,-8.4,-6.3,-9.6,-7.3,-50,-9,-50,-9.7,-2.3,-.2,-1.2,-1.5,-50,-.7,-13.3,-2,-11.8,-11.9,-12.3,-12.7],[3.6,-5.5,4.8,-5.2,-5.1,-7.2,-3.6,-7.2,11.2,-2.6,13.4,-2.1,-7.7,-12.5,-5.3,-11.9,-2.2,-4.4,-1.9,-4.8,-10.2,-11.5,-8.1,-12,9.3,8.2,10,8,-10.8,-11.9,-10.7,-12.4,-8.2,-11.8,-6.9,-11.5,-8.4,-9.9,-7.1,-10.6,-4.7,-6.8,-1.2,-7,-9.8,-11.6,-9.6,-12.1,-50,-14.1,-50,-12.7,-10,-10.8,-8.8,-10.5,-50,-9.2,-4.2,-9.3,-11,-18.2,-11.1,-16.1],[-4.2,3,-5.1,5.2,-.4,.3,-.2,2.5,-1.9,11,-2.1,13.2,-7.6,-8.5,-8,-5.3,-5.6,-4.5,-6.8,-2.4,-7.8,-7.9,-7.9,-6.2,-5.7,-5.1,-5.4,-2.1,-12.4,-12.3,-13.1,-10.1,-6.6,-4.4,-6.9,-2.6,-3.6,-3.8,-3.7,-2,-1.4,.8,-.9,3,-8.2,-8.1,-9.2,-5.8,-50,-10.1,-50,-7.4,-1.7,-2,-1.5,-.5,-50,-2.1,-12.6,-.4,-11.6,-13.9,-11.4,-11.1],[-6.3,-10.2,-8.9,-9.1,.7,-2.9,-1.7,-2.3,-5.7,-8.4,-7.7,-7.6,13.2,9.6,3.5,9.7,-8.7,-12.4,-10.7,-10.7,-7.8,-10.2,-8.8,-9.6,-9.5,-11.9,-10.9,-10.5,2.3,-.4,-.2,-.3,-9.7,-15.5,-11.4,-13.7,-3,-6.4,-4.1,-5.4,-9.6,-11.9,-10.5,-11.8,6.2,3.3,3.7,3.6,-50,-13.6,-50,-11.9,-5.6,-8.8,-7.2,-8.9,-50,-12.4,-14.1,-11.6,2.8,-6.4,.5,-5.2],[-13,-7.9,-13.2,-9.5,-4.6,-1.2,-4.1,-3.4,-12.5,-6.3,-12.5,-8.5,9.6,12.7,.2,10.5,-12.4,-11.6,-13.2,-12,-12.4,-10.1,-11.6,-12,-15.1,-13.1,-14.3,-13.4,-1.4,1.4,-1.6,-.5,-14.9,-14.3,-15.2,-16.8,-7.7,-4.7,-6.3,-6.6,-14.6,-10.8,-12.8,-13,2.3,6,2.5,3.6,-50,-11.2,-50,-11.9,-10.5,-9.2,-10.5,-10.5,-50,-10.3,-16.2,-11.3,-1.7,-3.7,-2.5,-5.4],[-7.1,-9.9,-5.7,-9,-.4,-3,.9,-2.3,-7.2,-8.3,-5.3,-8,3.5,.2,14.3,1,-7.3,-11.2,-6.9,-9.7,-8.5,-10.2,-7.7,-9.8,-10,-10.4,-8.4,-10.2,1,-.6,1.7,-.5,-11.1,-14.8,-9.7,-14.5,-3.7,-5.8,-3.1,-5.6,-10.4,-11.5,-8.2,-11.1,.6,-1.6,1.6,-1.1,-50,-12.4,-50,-11.5,-5.5,-8,-4.9,-7.2,-50,-12.4,-10.3,-11.6,.7,-6.8,2.4,-6],[-11.5,-9.6,-12.6,-7,-3.6,-3.3,-3.5,-.6,-11.6,-7.7,-11.9,-5.3,9.7,10.5,1,12.6,-12,-12.2,-12.5,-9.7,-11.1,-11.2,-11.9,-9.4,-12.9,-14.3,-14,-11.9,-1,-.4,-1.6,1.2,-13.9,-15.4,-13.7,-12.6,-6.2,-6.7,-6.3,-4.4,-13,-12.2,-13,-10.4,2.9,3.8,2.5,5.8,-50,-12.5,-50,-10.2,-9.6,-9.7,-9.6,-8.3,-50,-11.6,-15.4,-9.4,-1.1,-5.4,-1.6,-3.3],[.4,-5,-1.5,-4,-4.8,-7.6,-5.9,-6.5,-.7,-6.1,-2.2,-5.6,-8.7,-12.4,-7.3,-12,12.8,2.3,10.2,3,0,-3.4,-.7,-3.2,2.5,-.8,.9,.2,-3,-7.2,-5.7,-6.1,-.2,-6.6,-1.8,-6,-5.3,-8.2,-5.7,-7.6,-6.7,-9.6,-7.5,-9.3,-7.1,-10.5,-9.6,-9.4,-50,-8.1,-50,-7.2,-4.3,-6.8,-5.7,-6.3,-50,-9.5,-9.6,-8.9,-6.2,-12.8,-6.8,-11.8],[-6,.5,-6.1,-1,-8.9,-6.7,-8.9,-8.2,-4.8,-2.9,-4.4,-4.5,-12.4,-11.6,-11.2,-12.2,2.3,14.6,1.9,12.9,-5.5,-2.6,-4.1,-4.7,-1.2,3,-1.1,1.6,-8,-4.7,-8.7,-6,-8.2,-4.7,-7.8,-6.7,-10,-8.3,-8.9,-9.9,-10.8,-7.1,-10,-9.2,-11.6,-10.1,-12.3,-11.9,-50,2.2,-50,.9,-7.9,-5.9,-7.4,-6.9,-50,-4.6,-11.6,-5.6,-9.7,-5.9,-9.9,-7.3],[-1.9,-5.5,-.6,-5,-6.5,-8.1,-5.6,-8,-3.1,-6.5,-1.9,-6.8,-10.7,-13.2,-6.9,-12.5,10.2,1.9,11.9,2.1,-2.3,-4.1,-.5,-4.6,-.1,-.9,2.4,-.8,-5.1,-6.9,-4.8,-6.7,-2.3,-7.1,-.8,-7.2,-7.2,-8,-5.6,-8.5,-9.4,-9.7,-7.2,-9.8,-9.2,-11.1,-9.5,-10.7,-50,-8.7,-50,-8.6,-6.1,-7.5,-5.5,-7.7,-50,-10.4,-7.7,-10,-7.3,-13.6,-6.4,-13.3],[-5.3,-1,-6.1,1,-7.8,-7.9,-8.5,-6.3,-4.3,-4.2,-4.8,-2.4,-10.7,-12,-9.7,-9.7,3,12.9,2.1,14.7,-4.9,-3.8,-4,-2.4,-1,.8,-1.3,3.4,-7.6,-5.7,-8.1,-3.5,-6.8,-5.8,-7.2,-4.2,-8.9,-10.2,-8.4,-8.2,-9.9,-8.4,-9.7,-6.4,-11.1,-11.1,-11.8,-10,-50,.4,-50,2.6,-7.2,-7,-7.4,-5.1,-50,-5.7,-9.8,-3.2,-8.4,-7.4,-8.9,-5.9],[-8.5,-10.3,-10,-9,-1.4,-4.9,-3.9,-3.7,-10,-8.5,-10.2,-7.8,-7.8,-12.4,-8.5,-11.1,0,-5.5,-2.3,-4.9,12.6,10,11.1,10.5,-6,-8.3,-6.9,-7.5,-2.2,-7.4,-5.3,-5.9,-8.9,-12.5,-9.4,-11.6,-.7,-3.9,-2.3,-3,-9.1,-9.8,-9.2,-9.5,-5.6,-9,-8,-8.5,-50,-15.3,-50,-14.1,2.3,-1.4,.3,-.5,-50,-13.6,-14.3,-11.5,-5.3,-13.7,-6.1,-12.7],[-11.2,-8.1,-11.8,-8.8,-4.1,-1.9,-3.9,-3.5,-11.6,-5.9,-11.5,-7.9,-10.2,-10.1,-10.2,-11.2,-3.4,-2.6,-4.1,-3.8,10,13.1,10.7,10.6,-8.1,-5.2,-8,-6.7,-6.1,-3.7,-7.5,-5.6,-11.1,-10.3,-10.6,-11.9,-3.2,-1,-2.2,-2.8,-10.5,-8.1,-9.4,-9.5,-8.3,-6.9,-9.4,-8.8,-50,-11.3,-50,-12.8,-.6,2.2,-.3,.1,-50,-10.1,-17.5,-11.1,-8.6,-9.9,-8.6,-11.9],[-8.9,-9.4,-8.6,-8.9,-2.9,-4.5,-2.2,-3.9,-8.8,-7.5,-8.1,-7.9,-8.8,-11.6,-7.7,-11.9,-.7,-4.1,-.5,-4,11.1,10.7,13.2,10.4,-5.7,-5.8,-3.5,-6.1,-3.6,-6.5,-3.3,-5.5,-9.4,-11,-8.7,-11.2,-1.8,-2.7,.7,-3,-9.1,-8.2,-7.3,-9.4,-7.2,-8.2,-7.2,-8.2,-50,-13.2,-50,-13.3,.5,-.9,1.8,-.6,-50,-11.4,-11.1,-10.5,-6.1,-12.9,-5,-11.9],[-10.8,-9.6,-11.9,-7.7,-3.3,-3.8,-4.5,-1.6,-11.7,-7.7,-12,-6.2,-9.6,-12,-9.8,-9.4,-3.2,-4.7,-4.6,-2.4,10.5,10.6,10.4,12.6,-8.2,-7.9,-9,-4.7,-6.1,-6,-7.5,-2.9,-10.9,-12.2,-11.2,-10.9,-2.4,-2.9,-2.7,-.9,-10.4,-9.7,-10.2,-8,-8.4,-9.1,-9.3,-6.5,-50,-13.3,-50,-11,-0,-.4,-.4,2.3,-50,-10.9,-17.2,-8.3,-8.3,-12.7,-7.8,-9.3],[2.1,-8.1,1.2,-7,-8,-9.5,-7.3,-9.9,10.5,-5.5,9.3,-5.7,-9.5,-15.1,-10,-12.9,2.5,-1.2,-.1,-1,-6,-8.1,-5.7,-8.2,13.8,11.3,11.8,12.1,-6,-9.1,-9,-9.5,-8.9,-13.4,-10,-13.1,-9.9,-11.7,-9.8,-12.8,-5.9,-9.4,-6.5,-8.1,-10.7,-14,-13.3,-13.9,-50,-11.9,-50,-9.7,-8.9,-10.8,-9,-11.1,-50,-6.5,-5.3,-6.3,-10.5,-16.2,-10.4,-15.2],[0,-5,.5,-6.8,-9.1,-7.8,-7.5,-8.9,7.7,-2.4,8.2,-5.1,-11.9,-13.1,-10.4,-14.3,-.8,3,-.9,.8,-8.3,-5.2,-5.8,-7.9,11.3,15,11.2,12.8,-9.7,-5.3,-9.2,-7.8,-11.7,-10.6,-10.1,-12.2,-11.7,-8.8,-8.9,-11.8,-9.3,-5,-8,-8.2,-13.6,-11.4,-12.8,-13,-50,-7.2,-50,-8.4,-11,-7.7,-8.7,-10.2,-50,-1.5,-7.1,-4.9,-11.2,-11.6,-11.6,-15],[1.4,-7.3,2.2,-7.1,-8,-9.3,-6.4,-9.6,9.1,-5.5,10,-5.4,-10.9,-14.3,-8.4,-14,.9,-1.1,2.4,-1.3,-6.9,-8,-3.5,-9,11.8,11.2,13.4,11.4,-7.3,-8.8,-6.5,-8.5,-10,-12.5,-7.8,-12.5,-9.6,-11,-7.1,-10.7,-7.9,-8,-4.3,-9.4,-11.4,-12.3,-10.9,-12.9,-50,-11.8,-50,-11.2,-9.4,-9.8,-7.3,-10.5,-50,-6.2,-2.2,-6.7,-9.8,-15.2,-8.5,-14.9],[.2,-6.3,.1,-4.3,-8.2,-8.9,-8.5,-7,8.5,-4.1,8,-2.1,-10.5,-13.4,-10.2,-11.9,.2,1.6,-.8,3.4,-7.5,-6.7,-6.1,-4.7,12.1,12.8,11.4,14.7,-8.7,-7.4,-9.4,-5.3,-9.9,-11.8,-10.5,-10.3,-9.9,-10.1,-9.3,-9.3,-8.1,-7.2,-8,-5.2,-12,-12.1,-12.6,-10.9,-50,-7.9,-50,-5.3,-9.3,-8.8,-8.9,-7,-50,-3.6,-7.1,-1.2,-10.2,-12.7,-9.9,-11],[-10.2,-13.4,-11.8,-12.4,-6,-9.4,-7.1,-8.6,-9.8,-12.9,-10.8,-12.4,2.3,-1.4,1,-1,-3,-8,-5.1,-7.6,-2.2,-6.1,-3.6,-6.1,-6,-9.7,-7.3,-8.7,11.2,7.9,8.9,8.1,-12.1,-17.4,-13.2,-16.8,-6.3,-9.5,-7.5,-8.8,-12.7,-15.2,-13.1,-14.2,0,-3.1,-1.8,-3.1,-50,-10.7,-50,-9.3,-4.6,-8.9,-5.9,-8.3,-50,-12.8,-9.6,-10.6,9.5,-3.2,8.2,-2.8],[-13.5,-11.3,-14,-12.9,-9.3,-7.1,-8.2,-8.9,-12.7,-10.3,-11.9,-12.3,-.4,1.4,-.6,-.4,-7.2,-4.7,-6.9,-5.7,-7.4,-3.7,-6.5,-6,-9.1,-5.3,-8.8,-7.4,7.9,11.9,7.8,9.3,-15.2,-15.1,-14.6,-17.2,-9.7,-7.3,-8.2,-9.2,-15,-12.8,-14.1,-14.9,-2.8,.2,-2.9,-2.3,-50,-7.4,-50,-8.7,-9.4,-7.3,-9.4,-9.4,-50,-8,-11.9,-9.7,6.5,.5,6.4,-1.8],[-13,-14.4,-11.9,-13.9,-7.7,-9,-6.7,-8.8,-11.7,-12.7,-10.7,-13.1,-.2,-1.6,1.7,-1.6,-5.7,-8.7,-4.8,-8.1,-5.3,-7.5,-3.3,-7.5,-9,-9.2,-6.5,-9.4,8.9,7.8,10.1,7.8,-14.3,-17.7,-13,-17.8,-8,-9.4,-6.2,-9.2,-15.1,-14.9,-12.2,-14.9,-1.8,-3.2,-.8,-3.2,-50,-10.8,-50,-9.9,-7.3,-9.6,-6.4,-9.4,-50,-12.3,-8.7,-11.3,7.6,-3.3,8.7,-2.9],[-12.5,-12.9,-13.4,-10,-8.5,-9,-7.8,-6.8,-11.8,-11.3,-12.4,-10.1,-.3,-.5,-.5,1.2,-6.1,-6,-6.7,-3.5,-5.9,-5.6,-5.5,-2.9,-9.5,-7.8,-8.5,-5.3,8.1,9.3,7.8,11.8,-14.4,-15.7,-14.5,-14.6,-8.4,-8.7,-7.9,-7.1,-14.3,-13.8,-13.8,-12.3,-2.4,-2.2,-2.9,-.2,-50,-8.9,-50,-7.1,-8.1,-9.1,-8.7,-6.6,-50,-9.7,-11.4,-8,6.8,-1.8,6.9,.4],[-2.6,-6.3,-4.9,-4.9,-6.4,-9.4,-7.9,-8.6,-6.3,-7.4,-8.2,-6.6,-9.7,-14.9,-11.1,-13.9,-.2,-8.2,-2.3,-6.8,-8.9,-11.1,-9.4,-10.9,-8.9,-11.7,-10,-9.9,-12.1,-15.2,-14.3,-14.4,11.1,2.9,9.2,3.5,-3,-7,-4.3,-6.2,-2.2,-6.6,-3.7,-5.7,-6,-10.4,-8.6,-9.5,-50,-15.5,-50,-13.9,-7.8,-10.5,-8.7,-9.6,-50,-16.5,-17.1,-14.8,-12.1,-18.9,-12.4,-17.4],[-8.5,.8,-9.1,-.7,-10.1,-7.5,-9.1,-8.2,-11.4,-3.1,-11.8,-4.4,-15.5,-14.3,-14.8,-15.4,-6.6,-4.7,-7.1,-5.8,-12.5,-10.3,-11,-12.2,-13.4,-10.6,-12.5,-11.8,-17.4,-15.1,-17.7,-15.7,2.9,12.5,3.1,10.3,-7.7,-5.2,-6.2,-7.3,-5.4,-1.7,-5.4,-3.7,-11.6,-9.1,-13,-10.8,-50,-10.3,-50,-11.2,-9.8,-8.3,-9.1,-9.7,-50,-12.7,-20.6,-13.1,-16,-16.6,-17,-18.4],[-5,-6.4,-3.4,-5.6,-7.5,-9.3,-7.1,-8.8,-8.8,-7.4,-6.9,-6.9,-11.4,-15.2,-9.7,-13.7,-1.8,-7.8,-.8,-7.2,-9.4,-10.6,-8.7,-11.2,-10,-10.1,-7.8,-10.5,-13.2,-14.6,-13,-14.5,9.2,3.1,10.8,3,-4.5,-6.7,-2.7,-6.7,-5,-6.8,-2.5,-6.7,-7.5,-10.4,-7.4,-10.2,-50,-15.5,-50,-14.2,-8.9,-10.2,-8.5,-10,-50,-15.6,-15.3,-15.5,-13,-18.8,-12.6,-18.3],[-8.1,-1.1,-8.9,1.4,-8.6,-9.2,-9.4,-6.8,-11,-4.9,-11.5,-2.6,-13.7,-16.8,-14.5,-12.6,-6,-6.7,-7.2,-4.2,-11.6,-11.9,-11.2,-10.9,-13.1,-12.2,-12.5,-10.3,-16.8,-17.2,-17.8,-14.6,3.5,10.3,3,12.4,-6.9,-7.5,-6.8,-4.9,-5.4,-4.2,-5.4,-1.3,-10.8,-11.5,-12.4,-8.2,-50,-12.5,-50,-8.9,-9.2,-10,-9.4,-7.9,-50,-14.3,-19.9,-11.4,-16.2,-19.2,-15.8,-15.9],[-6.3,-7.4,-8,-6,2.8,-.7,.9,.3,-7.5,-4.4,-8.4,-3.6,-3,-7.7,-3.7,-6.2,-5.3,-10,-7.2,-8.9,-.7,-3.2,-1.8,-2.4,-9.9,-11.7,-9.6,-9.9,-6.3,-9.7,-8,-8.4,-3,-7.7,-4.5,-6.9,11.3,8.2,9.4,9.1,-1,-3.3,-1.8,-2.4,1.5,-2.1,-.4,-1.1,-50,-14.5,-50,-12.9,2.8,-0,1.4,.7,-50,-8.7,-14.1,-7.5,-5.2,-12.5,-6.5,-10.7],[-9.9,-5,-10,-6.5,-.7,2.6,-.2,.1,-10.3,-1.8,-9.9,-3.8,-6.4,-4.7,-5.8,-6.7,-8.2,-8.3,-8,-10.2,-3.9,-1,-2.7,-2.9,-11.7,-8.8,-11,-10.1,-9.5,-7.3,-9.4,-8.7,-7,-5.2,-6.7,-7.5,8.2,11.6,8.8,9.1,-3.7,-.9,-3.1,-3,-2,1.2,-2.3,-1.3,-50,-12.1,-50,-12.6,.1,2.5,.7,.6,-50,-6,-14.8,-7.5,-8.6,-9.4,-8.5,-11.2],[-7.5,-6.2,-7.2,-6.2,.9,.2,2.5,.2,-8.3,-3.5,-7.1,-3.7,-4.1,-6.3,-3.1,-6.3,-5.7,-8.9,-5.6,-8.4,-2.3,-2.2,.7,-2.7,-9.8,-8.9,-7.1,-9.3,-7.5,-8.2,-6.2,-7.9,-4.3,-6.2,-2.7,-6.8,9.4,8.8,12.1,8.8,-2.1,-2,.1,-2.4,0,-1.1,1.3,-.8,-50,-11.9,-50,-12.6,1.2,.7,3.5,.8,-50,-7.1,-12.4,-7.1,-7.1,-10.6,-5,-10.6],[-9,-6.5,-10,-4.8,.1,-.1,-.3,2.4,-9.9,-3.5,-10.6,-2,-5.4,-6.6,-5.6,-4.4,-7.6,-9.9,-8.5,-8.2,-3,-2.8,-3,-.9,-12.8,-11.8,-10.7,-9.3,-8.8,-9.2,-9.2,-7.1,-6.2,-7.3,-6.7,-4.9,9.1,9.1,8.8,11.2,-3.1,-3,-3.3,-1,-1.1,-1.4,-2,1.2,-50,-12.8,-50,-10.9,.8,.5,.7,2.3,-50,-7.5,-16.5,-5.9,-7.8,-11.1,-7.8,-9],[-7.1,-5.6,-9.1,-5.1,-5.9,-8,-6.9,-7.4,-1.9,-1.6,-4.7,-1.4,-9.6,-14.6,-10.4,-13,-6.7,-10.8,-9.4,-9.9,-9.1,-10.5,-9.1,-10.4,-5.9,-9.3,-7.9,-8.1,-12.7,-15,-15.1,-14.3,-2.2,-5.4,-5,-5.4,-1,-3.7,-2.1,-3.1,12.8,9.6,11.1,10.1,-4.8,-9.4,-8.1,-8.6,-50,-18.3,-50,-15.4,-5.9,-7.5,-6.6,-7.1,-50,-9.5,-11.7,-8.4,-12.5,-17.3,-13.2,-15.4],[-10.2,-1.6,-10.2,-3.2,-7.3,-4.6,-6.5,-6.2,-6.7,3,-6.8,.8,-11.9,-10.8,-11.5,-12.2,-9.6,-7.1,-9.7,-8.4,-9.8,-8.1,-8.2,-9.7,-9.4,-5,-8,-7.2,-15.2,-12.8,-14.9,-13.8,-6.6,-1.7,-6.8,-4.2,-3.3,-.9,-2,-3,9.6,12.8,9.7,10.5,-8.5,-5.6,-9.3,-7.8,-50,-12.7,-50,-13.8,-6.8,-5.1,-5.3,-6.5,-50,-4.1,-12.8,-5.8,-14.4,-14.1,-13.6,-14.8],[-8.2,-4.7,-7.1,-5,-6.5,-7.7,-5.5,-6.9,-4.1,-.8,-1.2,-.9,-10.5,-12.8,-8.2,-13,-7.5,-10,-7.2,-9.7,-9.2,-9.4,-7.3,-10.2,-6.5,-8,-4.3,-8,-13.1,-14.1,-12.2,-13.8,-3.7,-5.4,-2.5,-5.4,-1.8,-3.1,.1,-3.3,11.1,9.7,12.9,9.8,-5.5,-8.1,-5.4,-7.8,-50,-16.4,-50,-14.8,-5.9,-7.1,-4.7,-7.2,-50,-8.4,-6.4,-8.1,-12.1,-16.2,-10.3,-15.8],[-9.2,-3,-9.9,-1.2,-6.5,-6.1,-6.8,-4.4,-6.4,.9,-7,3,-11.8,-13,-11.1,-10.4,-9.3,-9.2,-9.8,-6.4,-9.5,-9.5,-9.4,-8,-8.1,-8.2,-9.4,-5.2,-14.2,-14.9,-14.9,-12.3,-5.7,-3.7,-6.7,-1.3,-2.4,-3,-2.4,-1,10.1,10.5,9.8,13.1,-7.2,-8,-8.4,-5,-50,-14.7,-50,-11.4,-6.3,-6.7,-5.8,-5,-50,-6.1,-13.4,-3.6,-13,-16,-13.7,-13.3],[-8.2,-10.8,-10.1,-9.8,-.4,-3.6,-1.7,-2.9,-7.9,-8.4,-9.8,-8.2,6.2,2.3,.6,2.9,-7.1,-11.6,-9.2,-11.1,-5.6,-8.3,-7.2,-8.4,-10.7,-13.6,-11.4,-12,0,-2.8,-1.8,-2.4,-6,-11.6,-7.5,-10.8,1.5,-2,0,-1.1,-4.8,-8.5,-5.5,-7.2,11.9,8.6,10,9,-50,-14.2,-50,-12.8,-4.1,-7.4,-5.7,-6.5,-50,-11,-14.3,-9.9,1.4,-7.9,-.7,-6.8],[-12.5,-8.7,-13,-9.9,-3.9,-1,-3.4,-2.9,-12.5,-6.3,-11.6,-8.1,3.3,6,-1.6,3.8,-10.5,-10.1,-11.1,-11.1,-9,-6.9,-8.2,-9.1,-14,-11.4,-12.3,-12.1,-3.1,.2,-3.2,-2.2,-10.4,-9.1,-10.4,-11.5,-2.1,1.2,-1.1,-1.4,-9.4,-5.6,-8.1,-8,8.6,12.4,8.6,9.5,-50,-10.4,-50,-11.6,-7.2,-5.7,-7.5,-7.4,-50,-8.6,-15.7,-9.7,-3,-3.7,-3.2,-5.9],[-11.1,-11.9,-10.6,-11.3,-2.6,-4.1,-1.7,-3.5,-11.4,-9.6,-9.6,-9.2,3.7,2.5,1.6,2.5,-9.6,-12.3,-9.5,-11.8,-8,-9.4,-7.2,-9.3,-13.3,-12.8,-10.9,-12.6,-1.8,-2.9,-.8,-2.9,-8.6,-13,-7.4,-12.4,-.4,-2.3,1.3,-2,-8.1,-9.3,-5.4,-8.4,10,8.6,11.4,8.9,-50,-13.7,-50,-13.2,-6.1,-8.1,-5.5,-7.5,-50,-11.3,-12.7,-10.1,-1.6,-7.8,-.3,-7.2],[-11.4,-10,-12.7,-8.2,-3.1,-3.1,-2.8,-.9,-11.7,-7.3,-12.1,-5.8,3.6,3.6,-1.1,5.8,-9.4,-11.9,-10.7,-10,-8.5,-8.8,-8.2,-6.5,-13.9,-13,-12.9,-10.9,-3.1,-2.3,-3.2,-.2,-9.5,-10.8,-10.2,-8.2,-1.1,-1.3,-.8,1.2,-8.6,-7.8,-7.8,-5,9,9.5,8.9,12,-50,-13,-50,-10.3,-6.2,-7,-7.1,-5.4,-50,-9.3,-14,-8.2,-2.4,-6.3,-2.4,-3.9],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,33.3,-50,30.6,-50,-50,-50,-50,-50,29.2,-50,-50,-50,-50,-50,-50,-50],[-14.8,-6.2,-14.9,-7.6,-14.6,-11.6,-13,-12.2,-14,-9,-14.1,-10.1,-13.6,-11.2,-12.4,-12.5,-8.1,2.2,-8.7,.4,-15.3,-11.3,-13.2,-13.3,-11.9,-7.2,-11.8,-7.9,-10.7,-7.4,-10.8,-8.9,-15.5,-10.3,-15.5,-12.5,-14.5,-12.1,-11.9,-12.8,-18.3,-12.7,-16.4,-14.7,-14.2,-10.4,-13.7,-13,-50,15.1,-50,13.3,-9.9,-5.8,-8.9,-7.6,-50,-1.5,-7.8,-3,-8.1,3.6,-9.4,2],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,30.6,-50,35.2,-50,-50,-50,-50,-50,28.5,-50,-50,-50,-50,-50,-50,-50],[-13.8,-7.5,-14.4,-5.1,-12.6,-11.6,-11.5,-10.1,-13.2,-9.7,-12.7,-7.4,-11.9,-11.9,-11.5,-10.2,-7.2,.9,-8.6,2.6,-14.1,-12.8,-13.3,-11,-9.7,-8.4,-11.2,-5.3,-9.3,-8.7,-9.9,-7.1,-13.9,-11.2,-14.2,-8.9,-12.9,-12.6,-12.6,-10.9,-15.4,-13.8,-14.8,-11.4,-12.8,-11.6,-13.2,-10.3,-50,13.3,-50,15.2,-8.6,-7,-8.4,-4.8,-50,-3,-7.1,-.1,-7.3,2.3,-8.7,3.9],[-7.3,-6.3,-8.9,-5.5,2.9,.2,1.5,1.2,-8.5,-2.3,-10,-1.7,-5.6,-10.5,-5.5,-9.6,-4.3,-7.9,-6.1,-7.2,2.3,-.6,.5,-0,-8.9,-11,-9.4,-9.3,-4.6,-9.4,-7.3,-8.1,-7.8,-9.8,-8.9,-9.2,2.8,.1,1.2,.8,-5.9,-6.8,-5.9,-6.3,-4.1,-7.2,-6.1,-6.2,-50,-9.9,-50,-8.6,12.5,9.4,11,9.8,-50,-4.8,-8.7,-3.5,-0,-8.6,-2.1,-7],[-10.1,-4.3,-10.8,-5.8,.1,2.3,.7,.6,-10.4,-.2,-10.8,-2,-8.8,-9.2,-8,-9.7,-6.8,-5.9,-7.5,-7,-1.4,2.2,-.9,-.4,-10.8,-7.7,-9.8,-8.8,-8.9,-7.3,-9.6,-9.1,-10.5,-8.3,-10.2,-10,-0,2.5,.7,.5,-7.5,-5.1,-7.1,-6.7,-7.4,-5.7,-8.1,-7,-50,-5.8,-50,-7,9.4,12.7,10.1,10,-50,-1.5,-11.3,-3.3,-5.4,-4.2,-5.6,-6.8],[-8.4,-6.2,-8.9,-5.9,1.8,.4,2.7,1.2,-9.1,-1.2,-8.8,-1.5,-7.2,-10.5,-4.9,-9.6,-5.7,-7.4,-5.5,-7.4,.3,-.3,1.8,-.4,-9,-8.7,-7.3,-8.9,-5.9,-9.4,-6.4,-8.7,-8.7,-9.1,-8.5,-9.4,1.4,.7,3.5,.7,-6.6,-5.3,-4.7,-5.8,-5.7,-7.5,-5.5,-7.1,-50,-8.9,-50,-8.4,11,10.1,13.2,10.2,-50,-4.2,-6.1,-3.6,-3.5,-8.4,-1.2,-6.8],[-9.1,-5.4,-10.4,-4.2,1,.5,.6,2.4,-9.6,-1.5,-10.5,-.5,-8.9,-10.5,-7.2,-8.3,-6.3,-6.9,-7.7,-5.1,-.5,.1,-.6,2.3,-11.1,-10.2,-10.5,-7,-8.3,-9.4,-9.4,-6.6,-9.6,-9.7,-10,-7.9,.7,.6,.8,2.3,-7.1,-6.5,-7.2,-5,-6.5,-7.4,-7.5,-5.4,-50,-7.6,-50,-4.8,9.8,10,10.2,12.1,-50,-3.1,-11.4,-.7,-4.6,-6.6,-4.9,-3.9],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,29.2,-50,28.5,-50,-50,-50,-50,-50,33.3,-50,-50,-50,-50,-50,-50,-50],[-13,-7,-13.1,-8.3,-9.2,-6.5,-8.9,-7.6,-9.8,-.7,-9.2,-2.1,-12.4,-10.3,-12.4,-11.6,-9.5,-4.6,-10.4,-5.7,-13.6,-10.1,-11.4,-10.9,-6.5,-1.5,-6.2,-3.6,-12.8,-8,-12.3,-9.7,-16.5,-12.7,-15.6,-14.3,-8.7,-6,-7.1,-7.5,-9.5,-4.1,-8.4,-6.1,-11,-8.6,-11.3,-9.3,-50,-1.5,-50,-3,-4.8,-1.5,-4.2,-3.1,-50,16.4,-5.1,14.2,-10.1,-4.3,-10,-5.4],[-13.5,-16.3,-11.8,-15.5,-13.6,-15.3,-12.1,-16.1,-7.7,-13.3,-4.2,-12.6,-14.1,-16.2,-10.3,-15.4,-9.6,-11.6,-7.7,-9.8,-14.3,-17.5,-11.1,-17.2,-5.3,-7.1,-2.2,-7.1,-9.6,-11.9,-8.7,-11.4,-17.1,-20.6,-15.3,-19.9,-14.1,-14.8,-12.4,-16.5,-11.7,-12.8,-6.4,-13.4,-14.3,-15.7,-12.7,-14,-50,-7.8,-50,-7.1,-8.7,-11.3,-6.1,-11.4,-50,-5.1,18.6,-4.8,-8.6,-8.1,-4.5,-7.3],[-12.4,-8.2,-13,-5.9,-7.7,-7.8,-7.4,-5.8,-8.8,-2,-9.3,-.4,-11.6,-11.3,-11.6,-9.4,-8.9,-5.6,-10,-3.2,-11.5,-11.1,-10.5,-8.3,-6.3,-4.9,-6.7,-1.2,-10.6,-9.7,-11.3,-8,-14.8,-13.1,-15.5,-11.4,-7.5,-7.5,-7.1,-5.9,-8.4,-5.8,-8.1,-3.6,-9.9,-9.7,-10.1,-8.2,-50,-3,-50,-.1,-3.5,-3.3,-3.6,-.7,-50,14.2,-4.8,16.4,-8.9,-5.8,-8.9,-3.4],[-10.7,-13.2,-12.4,-11.6,-4.8,-8.4,-6.1,-7.2,-10.3,-11.8,-11,-11.6,2.8,-1.7,.7,-1.1,-6.2,-9.7,-7.3,-8.4,-5.3,-8.6,-6.1,-8.3,-10.5,-11.2,-9.8,-10.2,9.5,6.5,7.6,6.8,-12.1,-16,-13,-16.2,-5.2,-8.6,-7.1,-7.8,-12.5,-14.4,-12.1,-13,1.4,-3,-1.6,-2.4,-50,-8.1,-50,-7.3,-0,-5.4,-3.5,-4.6,-50,-10.1,-8.6,-8.9,13.2,-.9,9.7,-.3],[-18.1,-12.3,-19.4,-14.2,-12.2,-9.5,-11.5,-10.8,-17.9,-11.9,-18.2,-13.9,-6.4,-3.7,-6.8,-5.4,-12.8,-5.9,-13.6,-7.4,-13.7,-9.9,-12.9,-12.7,-16.2,-11.6,-15.2,-12.7,-3.2,.5,-3.3,-1.8,-18.9,-16.6,-18.8,-19.2,-12.5,-9.4,-10.6,-11.1,-17.3,-14.1,-16.2,-16,-7.9,-3.7,-7.8,-6.3,-50,3.6,-50,2.3,-8.6,-4.2,-8.4,-6.6,-50,-4.3,-8.1,-5.8,-.9,14.2,-1.8,11.6],[-11.8,-13.1,-11.5,-12,-6.2,-8.3,-5.4,-7.4,-11.8,-12.3,-11.1,-11.4,.5,-2.5,2.4,-1.6,-6.8,-9.9,-6.4,-8.9,-6.1,-8.6,-5,-7.8,-10.4,-11.6,-8.5,-9.9,8.2,6.4,8.7,6.9,-12.4,-17,-12.6,-15.8,-6.5,-8.5,-5,-7.8,-13.2,-13.6,-10.3,-13.7,-.7,-3.2,-.3,-2.4,-50,-9.4,-50,-8.7,-2.1,-5.6,-1.2,-4.9,-50,-10,-4.5,-8.9,9.7,-1.8,11.3,-.9],[-17.2,-13.3,-17.8,-11.6,-11,-11.1,-10.4,-9,-16,-12.7,-16.1,-11.1,-5.2,-5.4,-6,-3.3,-11.8,-7.3,-13.3,-5.9,-12.7,-11.9,-11.9,-9.3,-15.2,-15,-14.9,-11,-2.8,-1.8,-2.9,.4,-17.4,-18.4,-18.3,-15.9,-10.7,-11.2,-10.6,-9,-15.4,-14.8,-15.8,-13.3,-6.8,-5.9,-7.2,-3.9,-50,2,-50,3.9,-7,-6.8,-6.8,-3.9,-50,-5.4,-7.3,-3.4,-.3,11.6,-.9,14.1]],this.TRANS=[[5,0,0,4],[0,5,4,0],[0,4,5,0],[4,0,0,5]],this.CONBLO={A:0,R:1,N:2,D:3,C:4,Q:5,E:6,G:7,H:8,I:9,L:10,K:11,M:12,F:13,P:14,S:15,T:16,W:17,Y:18,V:19,B:20,Z:21,X:22,"*":23},this.CONNUCL={A:0,T:1,C:2,G:3},this.CONSCHN={AAA:0,AAC:1,AAG:2,AAT:3,ACA:4,ACC:5,ACG:6,ACT:7,AGA:8,AGC:9,AGG:10,AGT:11,ATA:12,ATC:13,ATG:14,ATT:15,CAA:16,CAC:17,CAG:18,CAT:19,CCA:20,CCC:21,CCG:22,CCT:23,CGA:24,CGC:25,CGG:26,CGT:27,CTA:28,CTC:29,CTG:30,CTT:31,GAA:32,GAC:33,GAG:34,GAT:35,GCA:36,GCC:37,GCG:38,GCT:39,GGA:40,GGC:41,GGG:42,GGT:43,GTA:44,GTC:45,GTG:46,GTT:47,TAA:48,TAC:49,TAG:50,TAT:51,TCA:52,TCC:53,TCG:54,TCT:55,TGA:56,TGC:57,TGG:58,TGT:59,TTA:60,TTC:61,TTG:62,TTT:63},this.setMethod(n),this.setSequences(e,t),this.setGap(s)}}},7983:(e,t,s)=>{"use strict";s.d(t,{HV:()=>m,QF:()=>p,pf:()=>d,uH:()=>u});var n=s(4469),r=s(3870),i=s(976),o=s(7241),a=s(4293),l=s(8467),c=s(8447);const h="substr_helm";class u{constructor(e){this.col=e[0],this.createUI()}editHelmLinkAction(){(0,a.Y)(this.inputsDiv,this.grid.root),r.tools.waitForElementInDom(this.grid.root).then((()=>{setTimeout((()=>{this.grid.cell(h,0).element.children[0].dispatchEvent(new KeyboardEvent("keydown",{key:"Enter"}))}),100)}))}updateInputs(){const e=this.units===c.r2.HELM?r.divV([this.columnsInput,this.editHelmLink]):this.units===c.r2.SEPARATOR?r.inputs([this.columnsInput,this.substructureInput,this.separatorInput]):r.inputs([this.columnsInput,this.substructureInput]);(0,a.Y)(this.inputsDiv,e)}updateNotationDiv(){this.units=this.col.getTag(i.TAGS.UNITS),this.separator=this.col.getTag("separator");const e=this.dialog.root.getElementsByClassName("notation-text")[0];e&&(e.textContent=`Notation: ${this.units}`)}createUI(){const e=n.shell.tv.dataFrame,t={filter:e=>e.semType===i.SEMTYPE.MACROMOLECULE};this.columnsInput=r.columnInput("Column",e,this.col,(e=>{this.col=e,this.updateNotationDiv(),this.updateInputs()}),t),this.substructureInput=r.stringInput("Substructure",""),this.editHelmLink=r.link("Edit helm",(()=>this.editHelmLinkAction()),void 0,{style:{position:"relative",left:"95px"}});const s=i.DataFrame.create(1);s.columns.addNewString(h).init((e=>"")),s.col(h).semType=this.col.semType,s.col(h).setTag(i.TAGS.UNITS,c.r2.HELM),this.grid=s.plot.grid(),this.separatorInput=r.stringInput("Separator",this.separator),this.inputsDiv=r.div(),this.units=this.col.getTag(i.TAGS.UNITS),this.separator=this.col.getTag("separator"),this.updateInputs(),this.dialog=r.dialog("Substructure Search").add(r.divV([r.divText(`Notation: ${this.units}`,"notation-text"),this.inputsDiv])).onOK((async()=>{let e,t=this.units===c.r2.HELM?s.get(h,0):this.substructureInput.value;this.units===c.r2.SEPARATOR&&this.separatorInput.value!==this.separator&&""!==this.separatorInput.value&&(t=t.replaceAll(this.separatorInput.value,this.separator)),e=this.units===c.r2.HELM?await p(t,this.col):d(t,this.col),this.col.dataFrame.filter.and(e)})).show()}}function d(e,t,s){const n=s?function(e,t){const s=`${t}`.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),n=e.charAt(0)===t,r=e.charAt(e.length-1)===t,i=e.replace(new RegExp(`^${s}|${s}$`,"g"),"");return n?r?`${s}${i}${s}`:`${s}${i}${s}|${s}${i}$`:r?`^${i}${s}|${s}${i}${s}`:`^${i}${s}|${s}${i}${s}|${s}${i}$`}(e,s):e,r=i.BitSet.create(t.length);for(let s=0;s<t.length;s++){const i=t.get(s);(i.match(n)||i===e)&&r.set(s,!0,!1)}return r}async function p(e,t){t.version!==t.temp["last-invalidated-version"]&&await m(t,!0);const s=i.Column.string("helm",1).init((t=>e));s.semType=i.SEMTYPE.MACROMOLECULE,s.setTag(i.TAGS.UNITS,c.r2.HELM);const r=await(0,o.D)(s,!0,t.temp["monomers-dict"]);return(await n.functions.call("Chem:searchSubstructure",{molStringsColumn:t.temp["monomeric-mols"],molString:r.get(0),molBlockFailover:""})).get(0)}async function m(e,t){const s=i.TaskBarProgressIndicator.create(`Invalidating molfiles for ${e.name}`);try{await(0,l.gw)(10);const s=new Map,n=await(0,o.D)(e,t,s);e.temp["monomeric-mols"]=n,e.temp["monomers-dict"]=s,e.temp["last-invalidated-version"]=e.version}finally{s.close()}}},2568:(e,t,s)=>{"use strict";s.d(t,{n:()=>o});var n=s(4469),r=s(976),i=s(499);function o(e,t,s=[],o=[],a=!0){const[l,c]=function(e,t,s=[],o=[]){let a=!0,l="";const c=i.Cn.getOrCreate(e);if(e.semType!==r.SEMTYPE.MACROMOLECULE)n.shell.warning(t+" analysis is allowed for Macromolecules semantic type"),a=!1;else{const e=c.notation;if(s.length>0&&!s.some((t=>e.toUpperCase()==t.toUpperCase())))l=`${t} + ' analysis is allowed for Macromolecules with notation ${0==s.length?"any notation":`notation${s.length>1?"s":""} ${s.map((e=>`"${e}"`)).join(", ")} `}.`,a=!1;else if(!c.isHelm()){const e=c.alphabet;o.length>0&&!o.some((t=>e.toUpperCase()==t.toUpperCase()))&&(l=`${t} + ' analysis is allowed for Macromolecules with alphabet ${0==o.length?"any alphabet":`alphabet${o.length>1?"s":""} ${o.map((e=>`"${e}"`)).join(", ")}.`}.`,a=!1)}}return[a,l]}(e,t,s,o);return a&&!l&&n.shell.warning(c),l}},3553:(e,t,s)=>{"use strict";s.d(t,{Of:()=>i,WY:()=>c,jB:()=>h,rs:()=>a});var n,r,i,o,a,l=s(8341);!function(e){e.SPLIT_COL="~split",e.ACTIVITY="~activity",e.ACTIVITY_SCALED="activity_scaled",e.ALIGNED_SEQUENCE="~aligned_sequence",e.AMINO_ACID_RESIDUE="AAR",e.POSITION="Pos",e.P_VALUE="pValue",e.MEAN_DIFFERENCE="Mean difference"}(n||(n={})),function(e){e.AAR="AAR",e.POSITION="Pos",e.SELECTION="selection"}(r||(r={})),function(e){e.MONOMER="Monomer",e.MACROMOLECULE_DIFFERENCE="MacromoleculeDifference",e.ACTIVITY="activity",e.ACTIVITY_SCALED="activityScaled"}(i||(i={})),function(e){e.CELL_CHANGING="isCellChanging"}(o||(o={})),function(e){e.SEPARATOR="."}(a||(a={}));const c="3.3.1",h={pepsea:{gapOpen:1.53,gapExtend:0,method:l.Jy[0]},kalign:{gapOpen:-1,gapExtend:-1,terminalGap:-1}}},4004:(e,t,s)=>{"use strict";s.d(t,{O:()=>d});var n=s(976),r=s(3870),i=s(4469),o=s(3336),a=s.n(o),l=s(8447),c=s(499);let h=null,u=[];function d(e){let t=e??i.shell.t.columns.bySemType("Macromolecule");if(!t)throw new Error("No column with Macromolecule semantic type found");let s=c.Cn.getOrCreate(t),o=s.notation;const d=r.divText("Current notation: "+o,{style:{"text-align":"center","font-weight":"bold","font-size":"14px",padding:"5px"}}),p=[l.r2.FASTA,l.r2.SEPARATOR,l.r2.HELM],m=r.columnInput("Column",i.shell.t,t,(e=>{e.semType===n.SEMTYPE.MACROMOLECULE?(t=e,s=c.Cn.getOrCreate(t),o=s.notation,o===l.r2.HELM&&(y.value="/"),d.textContent="Current notation: "+o,g=p.filter((e=>e!==o)),v=r.choiceInput("Convert to",g[0],g,b),b(),h?.clear(),h?.add(r.div([d,m.root,v.root,y.root]))):m.value=t})),f=["-",".","/"];let g=p.filter((e=>e!==o));const y=r.choiceInput("Separator",f[0],f),b=()=>{v.value!==l.r2.SEPARATOR?a()(y.root).hide():a()(y.root).show()};let v=r.choiceInput("Convert to",g[0],g,b);b(),v.onChanged((()=>{b()})),null==h&&(h=r.dialog("Convert Sequence Notation").add(r.div([d,m.root,v.root,y.root])).onOK((async()=>{const e=v.value,s=y.value??void 0;await async function(e,t,s){const n=c.Cn.getOrCreate(e).convert(t,s);e.dataFrame.columns.add(n);const r=await i.functions.call("Bio:detectMacromolecule",{col:n});return r&&(n.semType=r),await i.data.detectSemanticTypes(e.dataFrame),n}(t,e,s)})).show({x:350,y:100}),u.push(h.onClose.subscribe((e=>{u.forEach((e=>{e.unsubscribe()})),u=[],h=null}))))}},6032:(e,t,s)=>{"use strict";s.d(t,{Ns:()=>o});var n=s(4469),r=s(8467),i=s(8341);async function o(e=6e4){const t=await i.lp.getDockerContainer();await async function(e,t=6e4){let s=e,i=!1;for(let o=0;o<t/200;++o){if(null===s&&(s=await n.dapi.docker.dockerContainers.find(e.id)),a(s)){i=!0;break}switch(s.status){case"stopped":await n.dapi.docker.dockerContainers.run(s.id);break;case"pending change":case"changing":break;case"error":throw new Error("Docker container error state.")}s=null,await(0,r.gw)(200)}if(!i)throw new Error("Docker container start timeout.")}(t,e)}function a(e){return"checking"===e.status||"started"===e.status}},7572:(e,t,s)=>{"use strict";s.d(t,{A:()=>h});var n=s(4469),r=s(6584),i=s(2832),o=s(3776),a=s(2428),l=s(3348);async function c(){const e=a.A.getInstance();return(await o.t.getInstance(e)).getValidLibraryPaths()}class h{constructor(){this._monomerLib=new i.B({}),this.loadLibrariesPromise=Promise.resolve()}getBioLib(){return this._monomerLib}async loadLibraries(e=!1){return this.loadLibrariesPromise=this.loadLibrariesPromise.then((async()=>{try{const[t,s]=await Promise.all([c(),(0,r.nW)()]),n=t.filter((e=>{const t=!s.exclude.includes(e),n=0===s.explicit.length||s.explicit.includes(e);return t&&n})),o=await Promise.all(n.map((e=>this.readLibrary(r.BX,e).catch((t=>{const s=`Loading monomers from '${e}' error: ${t instanceof Error?t.message:t.toString()}`;return new i.B({},s)})))));this._monomerLib.updateLibs(o,e)}catch(e){const t=`Loading monomer libraries error: ${e instanceof Error?e.message:e.toString()}`;n.shell.warning(t);const s=e instanceof Error?e.stack:void 0;l._package.logger.error(t,void 0,s)}}))}async readLibrary(e,t){const s=a.A.getInstance(),n=await o.t.getInstance(s);return await n.loadLibraryFromFile(e,t)}async selectSpecifiedLibraries(e){const t=await this.getInvalidFileNames(e);if(t.length>0)throw new Error(`Cannot select libraries ${t}: no such library in the list`);const s=await(0,r.nW)();s.exclude=(await c()).filter((t=>!e.includes(t))),await(0,r.tW)(s)}async getInvalidFileNames(e){const t=await c();return e.filter((e=>!t.includes(e)))}static get instance(){return window.$monomerLibHelper||(window.$monomerLibHelper=new h),window.$monomerLibHelper}}},2428:(e,t,s)=>{"use strict";s.d(t,{A:()=>i});var n=s(701),r=s(442);class i{constructor(){this._libraryFilesUpdateSubject$=new n.BehaviorSubject([]),this._addLibraryFilesSubject$=new n.Subject,this._librarySelectionSubject$=new n.Subject}static getInstance(){return i._instance||(i._instance=new i),i._instance}getValidFilesPathList(){return this._libraryFilesUpdateSubject$.getValue()}async getValidLibraryPathsAsynchronously(){return new Promise((e=>{this._libraryFilesUpdateSubject$.pipe((0,r.skip)(1)).subscribe((t=>{e(t)}))}))}changeValidFilesPathList(e){this._libraryFilesUpdateSubject$.next(e)}get updateUIControlsRequested$(){return this._libraryFilesUpdateSubject$.pipe()}get updateValidLibraryFileListRequested$(){return this._libraryFilesUpdateSubject$.pipe()}get addLibraryFileRequested$(){return this._addLibraryFilesSubject$.pipe()}addLibraryFile(){this._addLibraryFilesSubject$.next()}get librarySelectionRequested$(){return this._librarySelectionSubject$}updateLibrarySelectionStatus(e,t){this._librarySelectionSubject$.next([e,t])}}},3776:(e,t,s)=>{"use strict";s.d(t,{t:()=>p});var n=s(4469),r=s(976),i=s(6584),o=s(2832),a=s(5128),l=s.n(a),c=s(3351),h=s.n(c);class u{constructor(e){this.helmMonomerSchema=e;const t=new(l())({allErrors:!0,strictTuples:!1});h()(t),this.validateMonomerSchema=t.compile(this.helmMonomerSchema)}validateFile(e,t){const s=this.parseJson(e);return null!==s&&(Array.isArray(s)?this.validateJsonContent(s,t):(console.warn("Bio: Monomer Library File Validator: Invalid JSON format: The file must contain an array of monomers."),!1))}parseJson(e){try{return JSON.parse(e)}catch(e){return console.error("Bio: Monomer Library File Validator: Invalid JSON format:",e),null}}validateJsonContent(e,t){let s=!0;for(const n of e)if(s=this.validateMonomerSchema(n),!s){console.warn(`Bio: Monomer Library File Validator:\nfile ${t}\n monomer violating JSON schema:`,n,"\nError reason: ",this.validateMonomerSchema.errors,`\nThere may be other errors in ${t} since the validation is stopped after the first error.`," Please, verify that the monomer library file satisfies the JSON schema");break}return s}}var d=s(7572);class p{constructor(e,t){this.libraryFileValidator=e,this.libraryEventManager=t,this.libraryEventManager.updateValidLibraryFileListRequested$.subscribe((async()=>{await this.updateValidLibraryList()}))}static async getInstance(e){return p.instancePromise||(p.instancePromise=(async()=>{const t=await n.dapi.files.readAsText("System:AppData/Bio/tests/libraries/HELMmonomerSchema.json"),s=JSON.parse(t),r=new u(s);return new p(r,e)})()),p.instancePromise}async addLibraryFile(e,t){try{if(await this.libraryFileExists(t))return void n.shell.error(`File ${t} already exists`);await this.validateAgainstHELM(e,t),await n.dapi.files.writeAsText(i.BX+`${t}`,e),await this.updateValidLibraryList(),await n.dapi.files.exists(i.BX+`${t}`)?n.shell.info(`Added ${t} HELM library`):n.shell.error(`Failed to add ${t} library`)}catch(e){console.error(e),n.shell.error(`Failed to add ${t} library`)}}async deleteLibraryFile(e){try{await n.dapi.files.delete(i.BX+`${e}`),await this.updateValidLibraryList(),n.shell.info(`Deleted ${e} library`)}catch(t){console.error(t),await n.dapi.files.exists(i.BX+`${e}`)?n.shell.error(`Failed to delete ${e} library`):n.shell.warning(`File ${e} already deleted, refresh the list`)}}async loadLibraryFromFile(e,t){let s=[];const n=new r.FileSource(e),i=await n.readAsText(t);s=JSON.parse(i);const a={},l=[];return s.forEach((e=>{l.includes(e.polymerType)||(a[e.polymerType]={},l.push(e.polymerType)),a[e.polymerType][e.symbol]=e})),new o.B(a)}getValidLibraryPaths(){return this.libraryEventManager.getValidFilesPathList()}async getValidLibraryPathsAsynchronously(){return await this.libraryEventManager.getValidLibraryPathsAsynchronously()}async libraryFileExists(e){return await n.dapi.files.exists(i.BX+`${e}`)}async updateValidLibraryList(){const e=[],t=await this.getFilePathsAtDefaultLocation();if(!this.fileListHasChanged(t))return;for(const s of t){if(!s.endsWith(".json")){e.push(s);continue}const t=await n.dapi.files.readAsText(i.BX+`${s}`);this.isValidHELMLibrary(t,s)||e.push(s)}const s=t.filter((t=>!e.includes(t)));if(this.fileListHasChanged(s)&&(this.libraryEventManager.changeValidFilesPathList(s),d.A.instance.loadLibraries(!0)),s.some((e=>!e.endsWith(".json")))&&console.warn(`Wrong validation: ${s}`),e.length>0){const t=`Invalid monomer library files in ${i.BX}, consider fixing or removing them: ${e.join(", ")}`;console.warn(t)}}fileListHasChanged(e){const t=this.libraryEventManager.getValidFilesPathList();return e.length!==t.length||e.some(((e,s)=>e!==t[s]))}async validateAgainstHELM(e,t){if(!this.isValidHELMLibrary(e,t))throw new Error(`File ${t} does not satisfy HELM standard`)}isValidHELMLibrary(e,t){return this.libraryFileValidator.validateFile(e,t)}async getFilePathsAtDefaultLocation(){const e=(await n.dapi.files.list(i.BX)).map((e=>e.fullPath)),t=[];for(const s of e)await n.dapi.files.exists(s)&&t.push(s);return t.map((e=>e.substring(i.BX.length)))}}},2832:(e,t,s)=>{"use strict";s.d(t,{B:()=>i});var n=s(701),r=s(922);class i{constructor(e,t){this._monomers={},this._onChanged=new n.Subject,this._monomers=e,this.error=t}getMonomer(e,t){return e in this._monomers&&t in this._monomers[e]?this._monomers[e][t]:null}getPolymerTypes(){return Object.keys(this._monomers)}getMonomerMolsByPolymerType(e){const t={};return Object.keys(this._monomers[e]??{}).forEach((s=>{t[s]=this._monomers[e][s].molfile})),t}getMonomerSymbolsByType(e){return Object.keys(this._monomers[e])}getMonomerSymbolsByRGroup(e,t,s){let n=this.getMonomerSymbolsByType(t).map((e=>this.getMonomer(t,e)));return n=n.filter((e=>null!==e)),0===n.length?[]:(n=n.filter((t=>{if(!t?.rgroups)return!1;let s=t?.rgroups.length>=e;return r._.getInstance(t.molfile).atomTypes.map(((e,t)=>"R#"===e?t:-1)).filter((e=>-1!==e)),s&&(s=!0),s})),n.map((e=>e?.symbol)))}get onChanged(){return this._onChanged}_updateInt(e){const t=e.getPolymerTypes(),s=this.getPolymerTypes();t.forEach((t=>{s.includes(t)||(this._monomers[t]={}),e.getMonomerSymbolsByType(t).forEach((s=>{this._monomers[t][s]=e.getMonomer(t,s)}))}))}update(e){this._updateInt(e),this._onChanged.next()}updateLibs(e,t=!1){t&&(this._monomers={});for(const t of e)t.error||this._updateInt(t);this._onChanged.next()}clear(){this._monomers={},this._onChanged.next()}}},525:(e,t,s)=>{"use strict";s.d(t,{K:()=>$});var n=s(4469),r=s(976),i=s(3870),o=s(8447),a=s(499),l=s(6098),c=s(8341),h=s(2568),u=s(3553),d=s(6032),p=s(3348),m=s(3379),f=s.n(m),g=s(7795),y=s.n(g),b=s(569),v=s.n(b),w=s(3565),C=s.n(w),S=s(9216),x=s.n(S),A=s(4589),E=s.n(A),_=s(9564),T={};T.styleTagTransform=E(),T.setAttributes=C(),T.insert=v().bind(null,"head"),T.domAPI=y(),T.insertStyleElement=x(),f()(_.Z,T),_.Z&&_.Z.locals&&_.Z.locals;class I extends Error{constructor(e,t){super(e,t)}}async function $(e={}){return new Promise((async(t,s)=>{var o,a,l;e.clustersCol??(e.clustersCol=null),e.pepsea??(e.pepsea={}),(o=e.pepsea).method??(o.method=u.jB.pepsea.method),(a=e.pepsea).gapOpen??(a.gapOpen=u.jB.pepsea.gapOpen),(l=e.pepsea).gapExtend??(l.gapExtend=u.jB.pepsea.gapExtend);const h=e.col?.dataFrame??n.shell.t,d=e.col??h.columns.bySemType(r.SEMTYPE.MACROMOLECULE);if(null==d){const e="MSAError: dataset doesn't conain any Macromolecule column";n.shell.warning(e),s(new I(e))}const p=i.choiceInput("Method",e.pepsea.method,c.Jy);p.setTooltip("Alignment method");const m=i.floatInput("Terminal gap",e?.kalign?.terminalGap??null);m.setTooltip("Penalty for opening a gap at the beginning or end of the sequence");const f=i.p(`Kalign version: ${u.WY}`,"kalign-version"),g=i.floatInput("Gap open",e.pepsea.gapOpen);g.setTooltip("Gap opening penalty at group-to-group alignment");const y=i.floatInput("Gap extend",e.pepsea.gapExtend);y.setTooltip("Gap extension penalty to skip the alignment");const b=i.inputs([g,y,m]),v=i.button("Alignment parameters",(()=>{b.hidden=!b.hidden,[g,y,m].forEach((e=>{e.root.style.removeProperty("max-width"),e.captionLabel.style.removeProperty("max-width")}))}),"Adjust alignment parameters such as penalties for opening and extending gaps");v.classList.add("msa-params-button"),b.hidden=!0,v.prepend(i.icons.settings((()=>null)));const w=[p.root.style],C=[m.root.style,f.style];let S;const x=i.columnInput("Sequence",h,d,(async()=>{S=await N(x.value,h,w,C,p,A,g,y,m)}),{filter:e=>e.semType===r.SEMTYPE.MACROMOLECULE});x.setTooltip("Sequences column to use for alignment");const A=i.columnInput("Clusters",h,e.clustersCol);if(A.nullable=!0,x.fireChanged(),e.col)return S=await N(e.col,h,w,C,p,A,g,y,m),void await M(x,h,S,t,s);i.dialog("MSA").add(x).add(A).add(p).add(b).add(v).add(f).onOK((async()=>{await M(x,h,S,t,s)})).show()}))}async function M(e,t,s,i,o){let a=null;const l=r.TaskBarProgressIndicator.create("Analyze for MSA ...");try{if(e.fireChanged(),e.value.semType!==r.SEMTYPE.MACROMOLECULE)throw new Error("Chosen column has to be of Macromolecule semantic type");if(void 0===s)throw new Error("Invalid column format");if(a=await s(),null==a)return o("PepSeA container has not started");t.columns.add(a),await n.data.detectSemanticTypes(t),i(a)}catch(e){const t=e instanceof Error?e.message:e.toString();n.shell.error(t),o(e)}finally{l.close()}}async function N(e,t,s,i,m,f,g,y,b){try{if(e.semType!==r.SEMTYPE.MACROMOLECULE)return;const n=t.columns.getUnusedName(`msa(${e.name})`);if((0,h.n)(e,e.name,[o.r2.FASTA,o.r2.SEPARATOR],["DNA","RNA","PT"],!1)){L(s,i,"kalign"),g.value=null,y.value=null,b.value=null;const t=a.Cn.getOrCreate(e),r=t.isFasta()?e:t.convert(o.r2.FASTA);return async()=>await(0,l.U)(r,!1,n,f.value)}if((0,h.n)(e,e.name,[o.r2.HELM],[],!1))return L(s,i,"pepsea"),g.value??(g.value=u.jB.pepsea.gapOpen),y.value??(y.value=u.jB.pepsea.gapExtend),async()=>(await(0,d.Ns)(),(0,c.f3)(e,n,m.value,g.value,y.value,f.value));if((0,h.n)(e,e.name,[o.r2.SEPARATOR],["UN"],!1)){const t=a.Cn.getOrCreate(e).convert(o.r2.HELM);return L(s,i,"pepsea"),g.value??(g.value=u.jB.pepsea.gapOpen),y.value??(y.value=u.jB.pepsea.gapExtend),async()=>(await(0,d.Ns)(),(0,c.f3)(t,n,m.value,g.value,y.value,f.value))}return g.value=null,y.value=null,b.value=null,void L(s,i,"kalign")}catch(e){const t=e instanceof Error?e.message:e.toString();n.shell.error(t),p._package.logger.error(t)}}function L(e,t,s){if("kalign"===s){for(const t of e)t.display="none";for(const e of t)e.removeProperty("display")}else{for(const e of t)e.display="none";for(const t of e)t.removeProperty("display")}}},6098:(e,t,s)=>{"use strict";s.d(t,{U:()=>O});var n=s(976),r=s(5226);const i=Symbol("Comlink.proxy"),o=Symbol("Comlink.endpoint"),a=Symbol("Comlink.releaseProxy"),l=Symbol("Comlink.thrown"),c=e=>"object"==typeof e&&null!==e||"function"==typeof e,h=new Map([["proxy",{canHandle:e=>c(e)&&e[i],serialize(e){const{port1:t,port2:s}=new MessageChannel;return u(e,t),[s,[s]]},deserialize:e=>(e.start(),p(e))}],["throw",{canHandle:e=>c(e)&&l in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){throw e.isError?Object.assign(new Error(e.value.message),e.value):e.value}}]]);function u(e,t=self){t.addEventListener("message",(function s(n){if(!n||!n.data)return;const{id:r,type:o,path:a}=Object.assign({path:[]},n.data),c=(n.data.argumentList||[]).map(w);let h;try{const t=a.slice(0,-1).reduce(((e,t)=>e[t]),e),s=a.reduce(((e,t)=>e[t]),e);switch(o){case"GET":h=s;break;case"SET":t[a.slice(-1)[0]]=w(n.data.value),h=!0;break;case"APPLY":h=s.apply(t,c);break;case"CONSTRUCT":h=function(e){return Object.assign(e,{[i]:!0})}(new s(...c));break;case"ENDPOINT":{const{port1:t,port2:s}=new MessageChannel;u(e,s),h=function(e,t){return b.set(e,t),e}(t,[t])}break;case"RELEASE":h=void 0;break;default:return}}catch(e){h={value:e,[l]:0}}Promise.resolve(h).catch((e=>({value:e,[l]:0}))).then((e=>{const[n,i]=v(e);t.postMessage(Object.assign(Object.assign({},n),{id:r}),i),"RELEASE"===o&&(t.removeEventListener("message",s),d(t))}))})),t.start&&t.start()}function d(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function p(e,t){return f(e,[],t)}function m(e){if(e)throw new Error("Proxy has been released and is not useable")}function f(e,t=[],s=function(){}){let n=!1;const r=new Proxy(s,{get(s,i){if(m(n),i===a)return()=>C(e,{type:"RELEASE",path:t.map((e=>e.toString()))}).then((()=>{d(e),n=!0}));if("then"===i){if(0===t.length)return{then:()=>r};const s=C(e,{type:"GET",path:t.map((e=>e.toString()))}).then(w);return s.then.bind(s)}return f(e,[...t,i])},set(s,r,i){m(n);const[o,a]=v(i);return C(e,{type:"SET",path:[...t,r].map((e=>e.toString())),value:o},a).then(w)},apply(s,r,i){m(n);const a=t[t.length-1];if(a===o)return C(e,{type:"ENDPOINT"}).then(w);if("bind"===a)return f(e,t.slice(0,-1));const[l,c]=y(i);return C(e,{type:"APPLY",path:t.map((e=>e.toString())),argumentList:l},c).then(w)},construct(s,r){m(n);const[i,o]=y(r);return C(e,{type:"CONSTRUCT",path:t.map((e=>e.toString())),argumentList:i},o).then(w)}});return r}function g(e){return Array.prototype.concat.apply([],e)}function y(e){const t=e.map(v);return[t.map((e=>e[0])),g(t.map((e=>e[1])))]}const b=new WeakMap;function v(e){for(const[t,s]of h)if(s.canHandle(e)){const[n,r]=s.serialize(e);return[{type:"HANDLER",name:t,value:n},r]}return[{type:"RAW",value:e},b.get(e)||[]]}function w(e){switch(e.type){case"HANDLER":return h.get(e.name).deserialize(e.value);case"RAW":return e.value}}function C(e,t,s){return new Promise((n=>{const r=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");e.addEventListener("message",(function t(s){!s.data||!s.data.id||s.data.id!==r||(e.removeEventListener("message",t),n(s.data))})),e.start&&e.start(),e.postMessage(Object.assign({id:r},t),s)}))}const S="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0ICQ9U3ltYm9sKCJDb21saW5rLnByb3h5IiksQT1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxSPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSx5PVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxfPWU9PnR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx8fHR5cGVvZiBlPT0iZnVuY3Rpb24iLEw9e2NhbkhhbmRsZTplPT5fKGUpJiZlWyRdLHNlcmlhbGl6ZShlKXtjb25zdHtwb3J0MTpyLHBvcnQyOml9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gdyhlLHIpLFtpLFtpXV19LGRlc2VyaWFsaXplKGUpe3JldHVybiBlLnN0YXJ0KCksQyhlKX19LE89e2NhbkhhbmRsZTplPT5fKGUpJiZ5IGluIGUsc2VyaWFsaXplKHt2YWx1ZTplfSl7bGV0IHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9yPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOmUubWVzc2FnZSxuYW1lOmUubmFtZSxzdGFjazplLnN0YWNrfX06cj17aXNFcnJvcjohMSx2YWx1ZTplfSxbcixbXV19LGRlc2VyaWFsaXplKGUpe3Rocm93IGUuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihlLnZhbHVlLm1lc3NhZ2UpLGUudmFsdWUpOmUudmFsdWV9fSxFPW5ldyBNYXAoW1sicHJveHkiLExdLFsidGhyb3ciLE9dXSk7ZnVuY3Rpb24gdyhlLHI9c2VsZil7ci5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKHMpe2lmKCFzfHwhcy5kYXRhKXJldHVybjtjb25zdHtpZDpvLHR5cGU6YSxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LHMuZGF0YSksdT0ocy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChtKTtsZXQgbDt0cnl7Y29uc3QgYz1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZCxoKT0+ZFtoXSxlKSxmPW4ucmVkdWNlKChkLGgpPT5kW2hdLGUpO3N3aXRjaChhKXtjYXNlIkdFVCI6bD1mO2JyZWFrO2Nhc2UiU0VUIjpjW24uc2xpY2UoLTEpWzBdXT1tKHMuZGF0YS52YWx1ZSksbD0hMDticmVhaztjYXNlIkFQUExZIjpsPWYuYXBwbHkoYyx1KTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2NvbnN0IGQ9bmV3IGYoLi4udSk7bD16KGQpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntjb25zdHtwb3J0MTpkLHBvcnQyOmh9PW5ldyBNZXNzYWdlQ2hhbm5lbDt3KGUsaCksbD1OKGQsW2RdKX1icmVhaztjYXNlIlJFTEVBU0UiOmw9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChjKXtsPXt2YWx1ZTpjLFt5XTowfX1Qcm9taXNlLnJlc29sdmUobCkuY2F0Y2goYz0+KHt2YWx1ZTpjLFt5XTowfSkpLnRoZW4oYz0+e2NvbnN0W2YsZF09UyhjKTtyLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxmKSx7aWQ6b30pLGQpLGE9PT0iUkVMRUFTRSImJihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLEYocikpfSl9KSxyLnN0YXJ0JiZyLnN0YXJ0KCl9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBGKGUpe1QoZSkmJmUuY2xvc2UoKX1mdW5jdGlvbiBDKGUscil7cmV0dXJuIGIoZSxbXSxyKX1mdW5jdGlvbiBwKGUpe2lmKGUpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBiKGUscj1bXSxpPWZ1bmN0aW9uKCl7fSl7bGV0IHM9ITE7Y29uc3Qgbz1uZXcgUHJveHkoaSx7Z2V0KGEsbil7aWYocChzKSxuPT09UilyZXR1cm4oKT0+ZyhlLHt0eXBlOiJSRUxFQVNFIixwYXRoOnIubWFwKHU9PnUudG9TdHJpbmcoKSl9KS50aGVuKCgpPT57RihlKSxzPSEwfSk7aWYobj09PSJ0aGVuIil7aWYoci5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5vfTtjb25zdCB1PWcoZSx7dHlwZToiR0VUIixwYXRoOnIubWFwKGw9PmwudG9TdHJpbmcoKSl9KS50aGVuKG0pO3JldHVybiB1LnRoZW4uYmluZCh1KX1yZXR1cm4gYihlLFsuLi5yLG5dKX0sc2V0KGEsbix1KXtwKHMpO2NvbnN0W2wsY109Uyh1KTtyZXR1cm4gZyhlLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnIsbl0ubWFwKGY9PmYudG9TdHJpbmcoKSksdmFsdWU6bH0sYykudGhlbihtKX0sYXBwbHkoYSxuLHUpe3Aocyk7Y29uc3QgbD1yW3IubGVuZ3RoLTFdO2lmKGw9PT1BKXJldHVybiBnKGUse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4obSk7aWYobD09PSJiaW5kIilyZXR1cm4gYihlLHIuc2xpY2UoMCwtMSkpO2NvbnN0W2MsZl09TSh1KTtyZXR1cm4gZyhlLHt0eXBlOiJBUFBMWSIscGF0aDpyLm1hcChkPT5kLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpjfSxmKS50aGVuKG0pfSxjb25zdHJ1Y3QoYSxuKXtwKHMpO2NvbnN0W3UsbF09TShuKTtyZXR1cm4gZyhlLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ci5tYXAoYz0+Yy50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6dX0sbCkudGhlbihtKX19KTtyZXR1cm4gb31mdW5jdGlvbiBEKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpfWZ1bmN0aW9uIE0oZSl7Y29uc3Qgcj1lLm1hcChTKTtyZXR1cm5bci5tYXAoaT0+aVswXSksRChyLm1hcChpPT5pWzFdKSldfWNvbnN0IFA9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTihlLHIpe3JldHVybiBQLnNldChlLHIpLGV9ZnVuY3Rpb24geihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHtbJF06ITB9KX1mdW5jdGlvbiBTKGUpe2Zvcihjb25zdFtyLGldb2YgRSlpZihpLmNhbkhhbmRsZShlKSl7Y29uc3RbcyxvXT1pLnNlcmlhbGl6ZShlKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6cix2YWx1ZTpzfSxvXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6ZX0sUC5nZXQoZSl8fFtdXX1mdW5jdGlvbiBtKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEUuZ2V0KGUubmFtZSkuZGVzZXJpYWxpemUoZS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBlLnZhbHVlfX1mdW5jdGlvbiBnKGUscixpKXtyZXR1cm4gbmV3IFByb21pc2Uocz0+e2NvbnN0IG89VSgpO2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gYShuKXshbi5kYXRhfHwhbi5kYXRhLmlkfHxuLmRhdGEuaWQhPT1vfHwoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixhKSxzKG4uZGF0YSkpfSksZS5zdGFydCYmZS5zdGFydCgpLGUucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6b30sciksaSl9KX1mdW5jdGlvbiBVKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1jb25zdCBXPWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpLHg9ImVhZ2VyIixrPSJsYXp5IixqPXtzc3c6WyJzaW1kIl0sbWluaW1hcDI6WyJzaW1kIl19LHQ9e3Rvb2xzOltdLGNvbmZpZzp7fSxmaWxlczpbXSxiYXNlOnt9LGZzOnt9LGFzeW5jIGluaXQoKXtpZih0LnRvb2xzLmxlbmd0aD09PTApdGhyb3ciRXhwZWN0aW5nIGF0IGxlYXN0IDEgdG9vbC4iO2lmKG5ldyBTZXQodC50b29scy5tYXAocj0+YCR7ci50b29sfS8ke3IucHJvZ3JhbXx8ci50b29sfWApKS5zaXplIT09dC50b29scy5sZW5ndGgpdGhyb3ciRm91bmQgZHVwbGljYXRlIHRvb2xzOyBjYW4gb25seSBoYXZlIGVhY2ggdG9vbC9wcm9ncmFtIGNvbWJpbmF0aW9uIGF0IG1vc3Qgb25jZS4iO2lmKHQuYmFzZT10LnRvb2xzLmZpbmQocj0+ci5yZWluaXQhPT0hMCksIXQuYmFzZSl0aHJvdyJDb3VsZCBub3QgZmluZCBhIHRvb2wgd2l0aCBgcmVpbml0OiBmYWxzZWAgdG8gdXNlIGFzIHRoZSBiYXNlIG1vZHVsZS4gVG8gZml4IHRoaXMgaXNzdWUsIGluY2x1ZGUgdGhlIHRvb2wgYGJhc2UvMS4wLjBgIHdoZW4gaW5pdGlhbGl6aW5nIEFpb2xpLiI7cmV0dXJuIHQuYmFzZS5pc0Jhc2VNb2R1bGU9ITAsYXdhaXQgdGhpcy5fc2V0dXAodC5iYXNlKSxhd2FpdCB0aGlzLl9pbml0TW9kdWxlcygpLHQuX2xvZygiUmVhZHkiKSwhMH0sYXN5bmMgX2luaXRNb2R1bGVzKCl7YXdhaXQgUHJvbWlzZS5hbGwodC50b29scy5tYXAodGhpcy5fc2V0dXApKSxhd2FpdCB0aGlzLl9zZXR1cEZTKCl9LG1vdW50KGU9W10pe2NvbnN0IHI9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyRGF0YX1gLGk9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyTW91bnRlZH1gO2xldCBzPVtdLG89W10sYT1bXTshQXJyYXkuaXNBcnJheShlKSYmIShlIGluc3RhbmNlb2YgRmlsZUxpc3QpJiYoZT1bZV0pLHQuX2xvZyhgTW91bnRpbmcgJHtlLmxlbmd0aH0gZmlsZXNgKTtmb3IobGV0IG4gb2YgZSl7aWYobiBpbnN0YW5jZW9mIEZpbGV8fChuPT1udWxsP3ZvaWQgMDpuLmRhdGEpaW5zdGFuY2VvZiBCbG9iJiZuLm5hbWV8fHR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmbi5uYW1lKXR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmKG4uZGF0YT1uZXcgQmxvYihbbi5kYXRhXSx7dHlwZToidGV4dC9wbGFpbiJ9KSkscy5wdXNoKG4pO2Vsc2UgaWYobi5uYW1lJiZuLnVybClvLnB1c2gobik7ZWxzZSBpZih0eXBlb2Ygbj09InN0cmluZyImJm4uc3RhcnRzV2l0aCgiaHR0cCIpKW49e3VybDpuLG5hbWU6bi5zcGxpdCgiLy8iKS5wb3AoKS5yZXBsYWNlKC9cLy9nLCItIil9LG8ucHVzaChuKTtlbHNlIHRocm93J0Nhbm5vdCBtb3VudCBmaWxlKHMpIHNwZWNpZmllZC4gTXVzdCBiZSBhIEZpbGUsIEJsb2IsIGEgVVJMIHN0cmluZywgb3IgeyBuYW1lOiAiZmlsZS50eHQiLCBkYXRhOiAic3RyaW5nIiB9Lic7YS5wdXNoKG4ubmFtZSl9dHJ5e3QuZnMudW5tb3VudChpKX1jYXRjaHt9Zm9yKGxldCBuIG9mIG8pdC5mcy5jcmVhdGVMYXp5RmlsZShyLG4ubmFtZSxuLnVybCwhMCwhMCk7cmV0dXJuIHQuZmlsZXM9dC5maWxlcy5jb25jYXQocyksdC5iYXNlLm1vZHVsZS5GUy5tb3VudCh0LmJhc2UubW9kdWxlLldPUktFUkZTLHtmaWxlczp0LmZpbGVzLmZpbHRlcihuPT5uIGluc3RhbmNlb2YgRmlsZSksYmxvYnM6dC5maWxlcy5maWx0ZXIobj0+KG49PW51bGw/dm9pZCAwOm4uZGF0YSlpbnN0YW5jZW9mIEJsb2IpfSxpKSxzLm1hcChuPT57Y29uc3QgdT1gJHtpfS8ke24ubmFtZX1gLGw9YCR7cn0vJHtuLm5hbWV9YDt0cnl7dC5mcy51bmxpbmsobCl9Y2F0Y2h7fXQuX2xvZyhgQ3JlYXRpbmcgc3ltbGluazogJHtsfSAtLT4gJHt1fWApLHQuZnMuc3ltbGluayh1LGwpfSksYS5tYXAobj0+YCR7cn0vJHtufWApfSxhc3luYyBleGVjKGUscj1udWxsKXtpZih0Ll9sb2coYEV4ZWN1dGluZyAlYyR7ZX0lYyBhcmdzPSR7cn1gLCJjb2xvcjpkYXJrYmx1ZTsgZm9udC13ZWlnaHQ6Ym9sZCIsIiIpLCFlKXRocm93IkV4cGVjdGluZyBhIGNvbW1hbmQiO2xldCBpPWU7cj09bnVsbCYmKHI9ZS5zcGxpdCgiICIpLGk9ci5zaGlmdCgpKTtjb25zdCBzPXQudG9vbHMuZmluZChhPT57dmFyIHU7bGV0IG49aTtyZXR1cm4oKHU9YT09bnVsbD92b2lkIDA6YS5mZWF0dXJlcyk9PW51bGw/dm9pZCAwOnUuc2ltZCk9PT0hMCYmKG49YCR7bn0tc2ltZGApLGEucHJvZ3JhbT09bn0pO2lmKHM9PW51bGwpdGhyb3dgUHJvZ3JhbSAke2l9IG5vdCBmb3VuZC5gO3Muc3Rkb3V0PSIiLHMuc3RkZXJyPSIiLHMubG9hZGluZz09ayYmKHMubG9hZGluZz14LGF3YWl0IHRoaXMuX2luaXRNb2R1bGVzKCkpO3RyeXtzLm1vZHVsZS5jYWxsTWFpbihyKX1jYXRjaChhKXtjb25zb2xlLmVycm9yKGEpfXRyeXtzLm1vZHVsZS5GUy5jbG9zZShzLm1vZHVsZS5GUy5zdHJlYW1zWzFdKSxzLm1vZHVsZS5GUy5jbG9zZShzLm1vZHVsZS5GUy5zdHJlYW1zWzJdKX1jYXRjaHt9cy5tb2R1bGUuRlMuc3RyZWFtc1sxXT1zLm1vZHVsZS5GUy5vcGVuKCIvZGV2L3N0ZG91dCIsInciKSxzLm1vZHVsZS5GUy5zdHJlYW1zWzJdPXMubW9kdWxlLkZTLm9wZW4oIi9kZXYvc3RkZXJyIiwidyIpO2xldCBvPXtzdGRvdXQ6cy5zdGRvdXQsc3RkZXJyOnMuc3RkZXJyfTtpZih0LmNvbmZpZy5wcmludEludGVybGVhdmVkJiYobz1zLnN0ZG91dCkscy5yZWluaXQ9PT0hMCl7Y29uc3QgYT10LmJhc2UubW9kdWxlLkZTLmN3ZCgpO09iamVjdC5hc3NpZ24ocyxzLmNvbmZpZykscy5yZWFkeT0hMSxhd2FpdCB0aGlzLmluaXQoKSxzLmlzQmFzZU1vZHVsZSYmdGhpcy5tb3VudCgpLHRoaXMuY2QoYSl9cmV0dXJuIG99LGNhdChlKXtyZXR1cm4gdC5fZmlsZW9wKCJjYXQiLGUpfSxscyhlKXtyZXR1cm4gdC5fZmlsZW9wKCJscyIsZSl9LGRvd25sb2FkKGUpe3JldHVybiB0Ll9maWxlb3AoImRvd25sb2FkIixlKX0scHdkKCl7cmV0dXJuIHQuZnMuY3dkKCl9LGNkKGUpe2ZvcihsZXQgciBvZiB0LnRvb2xzKSFyLm1vZHVsZXx8ci5tb2R1bGUuRlMuY2hkaXIoZSl9LG1rZGlyKGUpe3JldHVybiB0LmZzLm1rZGlyKGUpLCEwfSxyZWFkKHtwYXRoOmUsbGVuZ3RoOnIsZmxhZzppPSJyIixvZmZzZXQ6cz0wLHBvc2l0aW9uOm89MH0pe2NvbnN0IGE9dC5mcy5vcGVuKGUsaSksbj1uZXcgVWludDhBcnJheShyKTtyZXR1cm4gdC5mcy5yZWFkKGEsbixzLHIsbyksdC5mcy5jbG9zZShhKSxufSx3cml0ZSh7cGF0aDplLGJ1ZmZlcjpyLGZsYWc6aT0idysiLG9mZnNldDpzPTAscG9zaXRpb246bz0wfSl7Y29uc3QgYT10LmZzLm9wZW4oZSxpKTt0LmZzLndyaXRlKGEscixzLHIubGVuZ3RoLG8pLHQuZnMuY2xvc2UoYSl9LF9zdGRpblR4dDoiIixfc3RkaW5QdHI6MCxnZXQgc3RkaW4oKXtyZXR1cm4gdC5fc3RkaW5UeHR9LHNldCBzdGRpbihlPSIiKXt0Ll9sb2coYFNldHRpbmcgc3RkaW4gdG8gJWMke2V9JWNgLCJjb2xvcjpkYXJrYmx1ZSIsIiIpLHQuX3N0ZGluVHh0PWUsdC5fc3RkaW5QdHI9MH0sYXN5bmMgX3NldHVwKGUpe2lmKGUucmVhZHkpcmV0dXJuO2lmKHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gKGJhc2UgPSAke2UuaXNCYXNlTW9kdWxlPT09ITB9KS4uLmApLGUuY29uZmlnPU9iamVjdC5hc3NpZ24oe30sZSksZS51cmxQcmVmaXh8fChlLnVybFByZWZpeD1gJHt0LmNvbmZpZy51cmxDRE59LyR7ZS50b29sfS8ke2UudmVyc2lvbn1gKSxlLnByb2dyYW18fChlLnByb2dyYW09ZS50b29sKSxlLmZlYXR1cmVzfHwoZS5mZWF0dXJlcz17fSwoaltlLnByb2dyYW1dfHxbXSkuaW5jbHVkZXMoInNpbWQiKSYmKGF3YWl0IFcoKT8oZS5wcm9ncmFtKz0iLXNpbWQiLGUuZmVhdHVyZXMuc2ltZD0hMCk6dC5fbG9nKGBXZWJBc3NlbWJseSBTSU1EIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyOyB3aWxsIGxvYWQgbm9uLVNJTUQgdmVyc2lvbiBvZiAke2UucHJvZ3JhbX0uYCkpKSxlLmlzQmFzZU1vZHVsZSYmKGUubG9hZGluZz14KSxlLmxvYWRpbmc9PT1rKXt0Ll9sb2coYFdpbGwgbGF6eS1sb2FkICR7ZS50b29sfTsgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24uYCk7cmV0dXJufXNlbGYuaW1wb3J0U2NyaXB0cyhgJHtlLnVybFByZWZpeH0vJHtlLnByb2dyYW19LmpzYCksZS5tb2R1bGU9YXdhaXQgTW9kdWxlKHt0aGlzUHJvZ3JhbTplLnByb2dyYW0sbG9jYXRlRmlsZTooaSxzKT0+YCR7ZS51cmxQcmVmaXh9LyR7aX1gLHN0ZGluOigpPT50Ll9zdGRpblB0cjx0LnN0ZGluLmxlbmd0aD90LnN0ZGluLmNoYXJDb2RlQXQodC5fc3RkaW5QdHIrKyk6KHQuc3RkaW49IiIsbnVsbCkscHJpbnQ6aT0+ZS5zdGRvdXQrPWAke2l9CmAscHJpbnRFcnI6dC5jb25maWcucHJpbnRJbnRlcmxlYXZlZD9pPT5lLnN0ZG91dCs9YCR7aX0KYDppPT5lLnN0ZGVycis9YCR7aX0KYH0pO2NvbnN0IHI9ZS5tb2R1bGUuRlM7ZS5pc0Jhc2VNb2R1bGU/KHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gd2l0aCBiYXNlIG1vZHVsZSBmaWxlc3lzdGVtLi4uYCksci5ta2Rpcih0LmNvbmZpZy5kaXJTaGFyZWQsNTExKSxyLm1rZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJEYXRhfWAsNTExKSxyLm1rZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJNb3VudGVkfWAsNTExKSxyLmNoZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJEYXRhfWApLHQuZnM9cik6KHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gd2l0aCBmaWxlc3lzdGVtLi4uYCksci5ta2Rpcih0LmNvbmZpZy5kaXJTaGFyZWQpLHIubW91bnQoZS5tb2R1bGUuUFJPWFlGUyx7cm9vdDp0LmNvbmZpZy5kaXJTaGFyZWQsZnM6dC5mc30sdC5jb25maWcuZGlyU2hhcmVkKSxyLmNoZGlyKHQuZnMuY3dkKCkpKSxlLnN0ZG91dD0iIixlLnN0ZGVycj0iIixlLnJlYWR5PSEwfSxhc3luYyBfc2V0dXBGUygpe2NvbnN0IGU9dC5mcztmb3IobGV0IHIgb2YgdC50b29scyl7aWYoIXIucmVhZHkpY29udGludWU7Y29uc3QgaT1yLm1vZHVsZS5GUyxzPWAvJHtyLnRvb2x9YCxvPWAke3QuY29uZmlnLmRpclNoYXJlZH0ke3N9YDshaS5hbmFseXplUGF0aChzKS5leGlzdHN8fGUuYW5hbHl6ZVBhdGgobykuZXhpc3RzfHwodC5fbG9nKGBNb3VudGluZyAke3N9IG9udG8gJHt0LmJhc2UudG9vbH0gZmlsZXN5c3RlbSBhdCAke299YCksZS5ta2RpcihvKSxlLm1vdW50KHQuYmFzZS5tb2R1bGUuUFJPWFlGUyx7cm9vdDpzLGZzOml9LG8pKX19LF9maWxlb3AoZSxyKXt0Ll9sb2coYFJ1bm5pbmcgJHtlfSAke3J9YCk7Y29uc3QgaT10LmZzLmFuYWx5emVQYXRoKHIpO2lmKCFpLmV4aXN0cylyZXR1cm4gdC5fbG9nKGBGaWxlICR7cn0gbm90IGZvdW5kLmApLCExO3N3aXRjaChlKXtjYXNlImNhdCI6cmV0dXJuIHQuZnMucmVhZEZpbGUocix7ZW5jb2Rpbmc6InV0ZjgifSk7Y2FzZSJscyI6cmV0dXJuIHQuZnMuaXNGaWxlKGkub2JqZWN0Lm1vZGUpP3QuZnMuc3RhdChyKTp0LmZzLnJlYWRkaXIocik7Y2FzZSJkb3dubG9hZCI6Y29uc3Qgcz1uZXcgQmxvYihbdGhpcy5jYXQocildKTtyZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChzKX1yZXR1cm4hMX0sX2xvZyhlKXtpZighdC5jb25maWcuZGVidWcpcmV0dXJuO2xldCByPVsuLi5hcmd1bWVudHNdO3Iuc2hpZnQoKSxjb25zb2xlLmxvZyhgJWNbV2ViV29ya2VyXSVjICR7ZX1gLCJmb250LXdlaWdodDpib2xkIiwiIiwuLi5yKX19O3codCl9KSgpOwo=",x=typeof window<"u"&&window.Blob&&new Blob([atob(S)],{type:"text/javascript;charset=utf-8"});function A(){const e=x&&(window.URL||window.webkitURL).createObjectURL(x);try{return e?new Worker(e):new Worker("data:application/javascript;base64,"+S)}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}const E={urlCDN:"https://biowasm.com/cdn/v3",urlCDNStg:"https://stg.biowasm.com/cdn/v3",dirShared:"/shared",dirMounted:"/mnt",dirData:"/data",printInterleaved:!0,callback:null,debug:!1,env:"prd"};class _{constructor(e,t={}){if(null==e)throw"Expecting array of tools as input to Aioli constructor.";return Array.isArray(e)||(e=[e]),t=Object.assign({},E,t),e=e.map(this._parseTool),"stg"===t.env&&(t.urlCDN=t.urlCDNStg),this.tools=e,this.config=t,null!=this.config.callback&&(this.callback=this.config.callback),delete this.config.callback,this.init()}async init(){const e=new A;this.callback&&(e.onmessage=e=>{"biowasm"===e.data.type&&this.callback(e.data.value)});const t=p(e);return t.tools=this.tools,t.config=this.config,await t.init(),t}_parseTool(e){if("string"!=typeof e)return e;const t=e.split("/");if(2!=t.length&&3!=t.length)throw"Expecting '<tool>/<version>' or '<tool>/<program>/<version>'";return{tool:t[0],program:3==t.length?t[1]:t[0],version:t[t.length-1]}}}var T=s(850);class I{static getAvailableScales(){return Object.entries(this.scales).map((([e,t])=>e))}static getScale(e){return(0,T.hu)(!(void 0===this.scales[e]),`Scale '${e}' was not found.`),this.scales[e]}}I.scales={WimleyWhite:{"-":0,A:.17,C:-.24,D:-.07,E:-.01,F:-1.13,G:.01,H:.17,I:-.31,K:.99,L:-.56,M:-.23,N:.42,P:.45,Q:.58,R:.81,S:.13,T:.14,V:.07,W:-1.85,Y:-.94},categorial:{"-":0,A:1,C:2,D:3,E:4,F:5,G:6,H:7,I:8,K:9,L:10,M:11,N:12,P:13,Q:14,R:15,S:16,T:17,V:18,W:19,Y:20}};class ${constructor(e="categorial"){this.aa2num=I.getScale(e),this.num2aa={},Object.entries(this.aa2num).forEach((([e,t])=>this.num2aa[t]=e))}static _truncateSequence(e){let t=0,s=e.length;const n=["NH2","COOH"];if(e.startsWith(n[0])){const s=n[0].length;(0,T.hu)("-"==e[s],`Wrong sequence format: ${n[0]} without following '-' in '${e}'.`),t=s}if(e.endsWith(n[1])){const t=n[1].length+1;(0,T.hu)("-"==e[s-t],`Wrong sequence format: ${n[1]} without '-' precending in '${e}'.`),s-=t}return e.substring(t,s)}static _dropDefises(e){return e.replace(/(-)([^-]+)/g,"$2")}static clean(e){return $._dropDefises($._truncateSequence(e))}encode(e){const t=e.length,s=new Array(t).fill(0);for(let n=0;n<t;++n){const t=e[n];(0,T.hu)(t in this.aa2num,`Unknown char '${t}' found in sequence '${e}'`),s[n]=this.encodeLettter(t)}return s}encodeLettter(e){return this.aa2num[e]}decode(e){let t="";for(let s=0;s<e.length;++s){const n=e[s];(0,T.hu)(n in this.num2aa,`Unknown code '${n}' found in vector '${e}'`),t+=this.num2aa[n]}return t}}var M=s(3553);const N="input.fa",L="result.fasta";function P(e){return e.reduce(((e,t,s)=>e+`>sample${s+1}\n${t}\n`),"")}async function O(e,t=!1,s="",i=null,o,a,l){let c=e.toList();t&&(c=c.map((e=>$.clean(e).replace(/\-/g,""))));const h=e.length;i??(i=n.Column.string("Clusters",h).init("0")),i.type!=n.COLUMN_TYPE.STRING&&(i=i.convertTo(n.TYPE.STRING)),i.compact();const u=i.categories,d=i.getRawData(),p=new Array(u.length),m=new Array(u.length);for(let e=0;e<h;++e){const t=d[e];(p[t]??(p[t]=[])).push(c[e]),(m[t]??(m[t]=[])).push(e)}const f=await new _(["base/1.0.0",{tool:"kalign",version:M.WY,reinit:!0}]),g=n.Column.string(s,h);for(let e=0;e<u.length;++e){const t=P(p[e]);await f.fs.writeFile(N,t);const s=`${void 0!==o?` --gpo ${o}`:""}${void 0!==a?` --gpe ${a}`:""}${void 0!==l?` --tgpe ${l}`:""}`,n=await f.exec(`kalign ${N} -f fasta -o ${L}${s}`);console.warn(n);const i=await f.cat(L);if(!i)throw new Error("kalign output no result");const c=new r.i(i).sequencesArray,h=m[e];for(let e=0;e<c.length;++e)g.set(h[e],c[e])}const y=e.getTag(n.TAGS.UNITS),b=e.getTag("alphabet");return g.setTag(n.TAGS.UNITS,y),g.setTag("aligned","SEQ.MSA"),g.setTag("alphabet",b),g.semType=n.SEMTYPE.MACROMOLECULE,g}},8341:(e,t,s)=>{"use strict";s.d(t,{Jy:()=>c,f3:()=>u,lp:()=>l});var n=s(4469),r=s(976),i=s(8447),o=s(3553),a=s(3348);const l=new class{constructor(){this.dcName="bio"}async getDockerContainer(){return await n.dapi.docker.dockerContainers.filter(this.dcName).first()}},c=["mafft --auto","mafft","linsi","ginsi","einsi","fftns","fftnsi","nwns","nwnsi"],h=["AlignedSeq","AlignedSubpeptide","HELM","ID","PolymerID"];async function u(e,t,s="ginsi",n=1.53,a=0,c=null,u){const p=await l.getDockerContainer();if("started"!==p.status&&"checking"!==p.status)throw new Error("PepSeA container has not started yet");const m=e.length;c??(c=r.Column.int("Clusters",m).init(0)),c.type!=r.COLUMN_TYPE.STRING&&(c=c.convertTo(r.TYPE.STRING));const f=c.categories,g=new Array(f.length);for(let t=0;t<m;++t){const s=c.get(t);if(""===s)continue;const n=f.indexOf(s),r=e.get(t);r&&(g[n]??(g[n]=[])).push({ID:t.toString(),HELM:r})}const y=new Array(m);for(const e of g){const t=(await d(p.id,e,s,n,a,u)).Alignment;for(const e of t)y[parseInt(e.ID)]=Object.entries(e).filter((e=>!h.includes(e[0]))).map((e=>"-"!==e[1]?e[1]:"")).join(o.rs.SEPARATOR)}const b=r.Column.fromStrings(t,y);return b.setTag(r.TAGS.UNITS,i.r2.SEPARATOR),b.setTag("separator",o.rs.SEPARATOR),b.setTag("aligned","SEQ.MSA"),b.setTag("alphabet","UN"),b.setTag(".alphabetIsMultichar","true"),b.semType=r.SEMTYPE.MACROMOLECULE,b}async function d(e,t,s,r,i,o){const l={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(t)},c=`/align?method=${s}&gap_open=${r}&gap_extend=${i}`;let h;if("fetchProxy"in n.dapi.docker.dockerContainers){const t=window.performance.now(),s=await n.dapi.docker.dockerContainers.fetchProxy(e,c,l),r=window.performance.now();a._package.logger.debug(`Bio: requestAlignedObjects() dockerContainers.fetchProxy(), ET: ${r-t} ms`);const i="application/json"===s.headers.get("content-type");if(!s.ok&&i){const e=await s.json(),t=e["pepsea-error"];if(t)throw new Error(`PepSeA error: ${t}`);const n=e["datagrok-error"];if(n)throw new Error(`Datagrok error: ${n}`);throw new Error(s.statusText)}if(!s.ok&&!i){const e=await s.text();throw new Error(`Error: ${e}`)}if(!i){const e=await s.text();throw new Error(`Error: PepSeA expected JSON response, got '${e}'.`)}h=await s.json()}else{const t=await n.dapi.docker.dockerContainers.request(e,c,l);if(!t)throw new Error("Empty response");h=JSON.parse(t);const s=h["pepsea-error"];if(s)throw new Error(`PepSeA error: ${s}`);const r=h["datagrok-error"];if(r)throw new Error(`Datagrok error: ${r}`)}if("pepsea-stderr"in h){const e=h["pepsea-stderr"];o?.warning(e)}return h}},9943:(e,t,s)=>{"use strict";s.d(t,{C2:()=>u});var n=s(976),r=s(3870),i=s(4469),o=s(6414),a=s.n(o),l=s(8447),c=s(499);const h=60;function u(){const e=i.shell.tv.grid,t=a().count(0).take(e.columns.length).map((t=>e.columns.byIndex(t))).filter((e=>!!e.column&&e.column.semType!==n.SEMTYPE.MACROMOLECULE)).toArray(),s=t.find((e=>-1!==e.name.toLowerCase().indexOf("id"))),o=s?[s.name]:[],u=r.multiChoiceInput("Seq id columns",o,t.map((e=>e.name))),p=a().count(0).take(e.columns.length).map((t=>e.columns.byIndex(t))).filter((e=>{const t=e.column;return!(!t||t.semType!==n.SEMTYPE.MACROMOLECULE)&&c.Cn.getOrCreate(t).isFasta()})).toArray(),m=p.length>0?p[0].name:[],f=r.choiceInput("Seq column",m,p.map((e=>e.name))),g=r.intInput("FASTA line width",h);r.dialog({title:"Save as FASTA"}).add(r.inputs([u,f,g])).onOK((()=>{const t=u.value?u.value.map((t=>e.columns.byName(t).column)):[],s=f.value?e.columns.byName(f.value).column:null,n=g.value??h;s||i.shell.warning("Seq column is mandatory to save as FASTA.");const r=function(e,t,s=h,n="\n"){const r=l.kB,i=[];for(let o=0;o<t.length;o++){const a=e.map((e=>e.get(o).toString())).join("|"),l=d(t.get(o),r,s);i.push(`>${a}${n}`);for(const e of l)i.push(`${e}${n}`)}return"".concat(...i)}(t,s,n),o=document.createElement("a");o.setAttribute("href",`data:text/plain;charset=utf-8,${encodeURIComponent(r)}`),o.setAttribute("download",`${e.dataFrame.name}.fasta`),o.click()})).show()}function d(e,t,s=h){const n=t(e);let r=0;const i=n.length,o=[];for(;r<i;){const e=a()(n).slice(r,r+s).toArray(),t=e.map((e=>e.length>1?`[${e}]`:e)).join("");o.push(t),r+=e.length}return o}},9416:(e,t,s)=>{"use strict";s.d(t,{n:()=>c});var n=s(4469),r=s(976),i=s(8467),o=s(2568),a=s(8457),l=s(3553);async function c(e,t){if(await(0,i.gw)(10),!(0,o.n)(t,"Sequence space"))return e;const s=(0,a.O)(t);s.name="splitToMonomers";const c=t.dataFrame;for(const e of s.columns)e.semType=l.Of.MONOMER,e.setTag("alphabet",t.getTag("alphabet"));const h=/(\d+)(?: \((\d+)\))?/,u=e=>{h.lastIndex=0;const t=e.match(h);return t?`${t[1]} (${parseInt(t[2]??0)+1})`:e};for(let e=0;e<s.columns.length;e++){const n=s.columns.byIndex(e);n.semType=l.Of.MONOMER,n.setTag("alphabet",t.getTag("alphabet"));const r=100;let i=0;for(;c.columns.byName(n.name)&&i<r;)n.name=u(n.name),i++;c.columns.add(n)}await n.data.detectSemanticTypes(c);for(let e=0;e<s.columns.length;e++){const t=s.columns.byIndex(e);t.setTag(r.TAGS.CELL_RENDERER,"Monomer"),t.setTag(".use-as-filter","false")}return c}},4293:(e,t,s)=>{"use strict";s.d(t,{B:()=>i,Y:()=>o});var n=s(4469),r=s(976);function i(){const e=n.shell.t.columns.bySemTypeAll(r.SEMTYPE.MACROMOLECULE);if(null!==e)return e;n.shell.error("Current table does not contain macromolecules")}function o(e,t){e.innerHTML="",e.append(t)}},8415:(e,t,s)=>{"use strict";s.d(t,{bo:()=>v,OZ:()=>T});var n=s(4469),r=s(3870),i=s(976),o=s(3336),a=s.n(o),l=s(6414),c=s.n(l),h=s(701),u=s(499),d=s(8447),p=s(9298);function m(e){var t;return"string"==typeof e||e instanceof String?e:("object"==typeof e||e instanceof Object)&&"$thrownJsError"in e?m(e.$thrownJsError):e instanceof Error?null!==(t=e.stack)&&void 0!==t?t:e.message:e.toString()}var f=s(7945),g=s(8467),y=s(172);var b,v,w=s(8770),C=s(3348);HTMLCanvasElement.prototype.getCursorPosition=function(e,t){const s=this.getBoundingClientRect();return new i.Point((e.clientX-s.left)*t,(e.clientY-s.top)*t)},i.Rect.prototype.contains=function(e,t){return this.left<=e&&e<=this.right&&this.top<=t&&t<=this.bottom};class S{constructor(e=0,t){this.valueList=null,this.valueIdx=0,this.value=this.rowCount=e,this.bounds=t}push(e){this.valueList||(this.valueList=new Array(this.rowCount),this.valueIdx=0),this.valueList[this.valueIdx]=e,++this.valueIdx}aggregate(e){this.value=e(this.valueList)??0,this.valueList=null}}class x{get label(){return this._label?this._label:this.name}constructor(e,t,s,n){this.sumRowCount=0,this.pos=e,this.name=t,this._freqs=s??{},n?.sumRowCount&&(this.sumRowCount=n.sumRowCount),n?.sumValueForHeight&&(this.sumPlotValue=n.sumValueForHeight),n?.label&&(this._label=n.label)}getMonomers(){return Object.keys(this._freqs)}hasMonomer(e){return e in this._freqs}getFreq(e){let t=this._freqs[e];return t||(t=this._freqs[e]=new S),t}aggregate(e){const t=function(e){return t=>{const s=function(e){let t;const s="agg";return t=e instanceof Float32Array?i.Column.fromFloat32Array(s,e):e instanceof Int32Array?i.Column.fromInt32Array(s,e):i.Column.fromList(i.COLUMN_TYPE.FLOAT,s,e),t}(t);return s.aggregate(e)}}(e);for(const[e,s]of Object.entries(this._freqs))s.aggregate(t)}getMinValue(){return Math.min(...Object.values(this._freqs).map((e=>e.value)))}calcPlotValue(e){for(const t of Object.values(this._freqs))t.plotValue=t.value-e}calcHeights(e){this.sumPlotValue=0;for(const e of Object.values(this._freqs))this.sumPlotValue+=e.plotValue;if(this.sumPlotValueForHeight=0,e===p.ES.Entropy){const e=Object.keys(this._freqs).length,t=.01*this.sumPlotValue,s=t/e;for(const e of Object.values(this._freqs)){const n=(e.plotValue+s)/(this.sumPlotValue+t);this.sumPlotValueForHeight+=-n*Math.log2(n)}}else if(e===p.ES.full)for(const[e,t]of Object.entries(this._freqs)){const e=t.plotValue/this.sumPlotValue;this.sumPlotValueForHeight+=e}}calcScreen(e,t,s,n,r,o,a,l,c,h){const u=r===p.ES.Entropy?n*(o-this.sumPlotValueForHeight)/o:n;let d=h*c+(n-u-1);const m=Object.entries(this._freqs).sort(((t,s)=>e(t[0])||e(s[0])?e(t[0])&&e(s[0])?0:e(t[0])?-1:1:s[1].value-t[1].value));for(const[e,n]of m){const e=u*n.plotValue/this.sumPlotValue;n.bounds=new i.Rect((t-s)*c*a,d,l*c,e),d+=e}}render(e,t,s,n,r,i){for(const[o,a]of Object.entries(this._freqs))if(!t(o)){const t=(0,d.GU)(o,5),l=a.bounds,c=l.left;e.resetTransform(),e.strokeStyle="lightgray",e.lineWidth=1,e.rect(c,l.top,l.width,l.height),e.fillStyle=i.get(o)??i.get("other"),e.textAlign="left",e.font=s;const h=e.measureText(t);e.setTransform(l.width/h.width,0,0,l.height/r,c,l.top),e.fillText(t,0,-n)}}getMonomerAt(e,t){const s=Object.entries(this._freqs).find((([s,n])=>n.bounds.contains(e,t)));return s?s[0]:void 0}buildCompositionTable(e){return(0,w._)(e,Object.assign({},...Object.entries(this._freqs).map((([e,t])=>({[e]:t.rowCount})))))}}!function(e){e.STYLE="Style",e.BEHAVIOR="Behavior",e.LAYOUT="Layout",e.DATA="Data"}(b||(b={})),function(e){e.sequenceColumnName="sequenceColumnName",e.valueAggrType="valueAggrType",e.valueColumnName="valueColumnName",e.startPositionName="startPositionName",e.endPositionName="endPositionName",e.skipEmptySequences="skipEmptySequences",e.skipEmptyPositions="skipEmptyPositions",e.shrinkEmptyTail="shrinkEmptyTail",e.backgroundColor="backgroundColor",e.positionHeight="positionHeight",e.positionWidth="positionWidth",e.verticalAlignment="verticalAlignment",e.horizontalAlignment="horizontalAlignment",e.fixWidth="fixWidth",e.fitArea="fitArea",e.minHeight="minHeight",e.maxHeight="maxHeight",e.showPositionLabels="showPositionLabels",e.positionMarginState="positionMarginState",e.positionMargin="positionMargin",e.filterSource="filterSource"}(v||(v={}));const A=p.vS;var E;!function(e){e[e.None=0]="None",e[e.Render=1]="Render",e[e.Layout=1]="Layout",e[e.Freqs=2]="Freqs"}(E||(E={}));const _=new class{constructor(){this.render=20}};class T extends i.JsViewer{get positionWidthWithMargin(){return this._positionWidthWithMargin}get Length(){return this.skipEmptyPositions?this.positions.length:this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0}get positionMarginValue(){return this.positionMarginState===p.dE.AUTO&&!0===this.unitsHandler.getAlphabetIsMultichar()||this.positionMarginState===p.dE.ON?this.positionMargin:0}constructor(){super(),this.viewed=!1,this.initialized=!1,this.palette=null,this.seqCol=null,this.positions=[],this.visibleSlider=!1,this.allowResize=!0,this.turnOfResizeForOneSetValue=!1,this.backgroundColor=4294967295,this.positionMargin=0,this.positionNames=[],this.positionLabels=void 0,this.startPosition=-1,this.endPosition=-1,this.error=null,this.viewerId=++T.viewerCounter,this.setDataInProgress=!1,this.viewSubs=[],this._onSizeChanged=new h.Subject,this._onFreqsCalculated=new h.Subject,this._onLayoutCalculated=new h.Subject,this.requestedRenderLevel=E.Freqs,this.renderRequest=new h.Subject,this._onRendered=new h.Subject,this.textBaseline="top",this.unitsHandler=null,this.sequenceColumnName=this.string(v.sequenceColumnName,A.sequenceColumnName,{category:b.DATA});const e=[i.AGG.KEY,i.AGG.PIVOT,i.AGG.MISSING_VALUE_COUNT,i.AGG.SKEW,i.AGG.KURT,i.AGG.SELECTED_ROWS_COUNT],t=Object.values(i.AGG).filter((t=>!e.includes(t)));this.valueAggrType=this.string(v.valueAggrType,A.valueAggrType,{category:b.DATA,choices:t}),this.valueColumnName=this.string(v.valueColumnName,A.valueColumnName,{category:b.DATA}),this.startPositionName=this.string(v.startPositionName,A.startPositionName,{category:b.DATA}),this.endPositionName=this.string(v.endPositionName,A.endPositionName,{category:b.DATA}),this.skipEmptySequences=this.bool(v.skipEmptySequences,A.skipEmptySequences,{category:b.DATA}),this.skipEmptyPositions=this.bool(v.skipEmptyPositions,A.skipEmptyPositions,{category:b.DATA}),this.shrinkEmptyTail=this.bool(v.shrinkEmptyTail,A.shrinkEmptyTail,{category:b.DATA}),this.backgroundColor=this.int(v.backgroundColor,A.backgroundColor,{category:b.STYLE}),this.positionHeight=this.string(v.positionHeight,A.positionHeight,{category:b.STYLE,choices:Object.values(p.ES)}),this._positionWidth=this.positionWidth=this.float(v.positionWidth,A.positionWidth,{category:b.STYLE}),this.verticalAlignment=this.string(v.verticalAlignment,A.verticalAlignment,{category:b.LAYOUT,choices:Object.values(p.vw)}),this.horizontalAlignment=this.string(v.horizontalAlignment,A.horizontalAlignment,{category:b.LAYOUT,choices:Object.values(p.iD)}),this.fixWidth=this.bool(v.fixWidth,A.fixWidth,{category:b.LAYOUT,userEditable:!1}),this.fitArea=this.bool(v.fitArea,A.fitArea,{category:b.LAYOUT}),this.minHeight=this.float(v.minHeight,A.minHeight,{category:b.LAYOUT}),this.maxHeight=this.float(v.maxHeight,A.maxHeight,{category:b.LAYOUT}),this.showPositionLabels=this.bool(v.showPositionLabels,A.showPositionLabels,{category:b.LAYOUT}),this.positionMarginState=this.string(v.positionMarginState,A.positionMarginState,{category:b.LAYOUT,choices:Object.values(p.dE)});let s=0;"auto"===this.positionMarginState&&(s=4),this.positionMargin=this.int(v.positionMargin,s,{category:b.LAYOUT,min:0,max:16}),this.filterSource=this.string(v.filterSource,A.filterSource,{category:b.BEHAVIOR,choices:Object.values(p.Ct)}),this.slider=r.rangeSlider(0,100,0,20,!1,{style:"barbell"}),this.canvas=r.canvas(),this.canvas.classList.value="bio-wl-canvas",this.canvas.style.width="100%",this.viewSyncer=new y.c(C._package.logger)}viewerToLog(){return`WebLogoViewer<${this.viewerId}>`}setData(){const e=`${this.viewerToLog()}.setData()`;C._package.logger.debug(`${e}, in`),this.viewSyncer.sync(`${e}`,(async()=>{if(!this.setDataInProgress){this.setDataInProgress=!0;try{this.viewed&&(this.renderRequestSub.unsubscribe(),await this.destroyView(),this.viewed=!1),this.updateSeqCol(),this.updateEditors(),this.viewed||(await this.buildView(),this.viewed=!0)}finally{this.setDataInProgress=!1}}})),C._package.logger.debug(`${e}, out`)}async destroyView(){for(const e of this.viewSubs)e.unsubscribe();this.viewSubs=[];const e=this.dataFrame?"data":"null";C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.destroyView( dataFrame = ${e} ) start`),this.host.remove(),this.msgHost=void 0,this.host=void 0,C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.destroyView() end`)}async buildView(){const e=this.dataFrame?"data":"null";C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.buildView( dataFrame = ${e} ) start`),window.devicePixelRatio,this.viewSubs.push(i.debounce(this.renderRequest,_.render).subscribe(this.renderRequestOnDebounce.bind(this))),this.helpUrl="/help/visualize/viewers/web-logo.md",this.msgHost=r.div("No message",{classes:"bio-wl-msg"}),this.msgHost.style.display="none",this.canvas=r.canvas(),this.canvas.style.width="100%",this.slider.root.style.position="absolute",this.slider.root.style.zIndex="999",this.slider.root.style.display="none",this.slider.root.style.height="0.7em",this.visibleSlider=!1,this.host=r.div([this.msgHost,this.canvas],{classes:"bio-wl-host",style:{display:"flex",flexDirection:"row",flexWrap:"wrap"}}),this.root.append(this.host),this.root.append(this.slider.root),this.error&&(this.msgHost.innerText=this.error.message,r.tooltip.bind(this.msgHost,this.error.stack),this.msgHost.style.setProperty("display",null)),this.dataFrame&&(this.viewSubs.push(this.dataFrame.filter.onChanged.subscribe(this.dataFrameFilterOnChanged.bind(this))),this.viewSubs.push(this.dataFrame.selection.onChanged.subscribe(this.dataFrameSelectionOnChanged.bind(this)))),this.viewSubs.push(r.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this))),this.viewSubs.push(this.slider.onValuesChanged.subscribe(this.sliderOnValuesChanged.bind(this))),this.viewSubs.push((0,h.fromEvent)(this.canvas,"mousemove").subscribe(this.canvasOnMouseMove.bind(this))),this.viewSubs.push((0,h.fromEvent)(this.canvas,"mousedown").subscribe(this.canvasOnMouseDown.bind(this))),this.viewSubs.push((0,h.fromEvent)(this.canvas,"wheel").subscribe(this.canvasOnWheel.bind(this))),this.render(E.Freqs,"buildView"),C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.buildView() end`)}rootOnSizeChanged(){C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.rootOnSizeChanged(), start `),this.render(E.Layout,"rootOnSizeChanged")}updateEditors(){this.props.getProperty(v.valueColumnName).choices=c()(this.dataFrame.columns.numerical).map((e=>e.name)).toArray()}updateSeqCol(){if(this.dataFrame&&(this.seqCol=this.sequenceColumnName?this.dataFrame.col(this.sequenceColumnName):null,null==this.seqCol&&(this.seqCol=(0,d.up)(this.dataFrame),this.sequenceColumnName=this.seqCol?this.seqCol.name:null),this.seqCol)){try{this.unitsHandler=u.Cn.getOrCreate(this.seqCol),this.palette=(0,d.dQ)(this.seqCol),this.render(E.Freqs,"updateSeqCol()"),this.error=null}catch(e){throw this.seqCol=null,this.error=e instanceof Error?e:new Error(e.toString()),e}this.seqCol||(this.unitsHandler=null,this.positionNames=[],this.positionLabels=[],this.startPosition=-1,this.endPosition=-1,this.palette=null)}}getFilter(){let e;switch(this.filterSource){case p.Ct.Filtered:e=this.dataFrame.filter;break;case p.Ct.Selected:e=0===this.dataFrame.selection.trueCount?this.dataFrame.filter:this.dataFrame.selection}return e}setSliderVisibility(e){e?(this.slider.root.style.display="inherit",this.visibleSlider=!0):(this.slider.root.style.display="none",this.visibleSlider=!1)}calcLayout(e){this.host&&this.canvas&&this.slider&&(this.host.classList.remove("bio-wl-fixWidth","bio-wl-fitArea"),this.canvas.classList.remove("bio-wl-fixWidth","bio-wl-fitArea"),this._positionWidth=this.positionWidth,this._positionMargin=this.positionMargin,this._positionWidthWithMargin=this._positionWidth+this.positionMarginValue,this.fixWidth?this.calcLayoutFixWidth(e):this.fitArea?this.calcLayoutFitArea(e):this.calcLayoutNoFitArea(e),this.slider.root.style.width=`${this.host.clientWidth}px`)}calcLayoutFixWidth(e){if(!this.host||!this.canvas||!this.slider)return;this.host.classList.add("bio-wl-fixWidth"),this.canvas.classList.add("bio-wl-fitArea");const t=this._positionWidthWithMargin*this.Length,s=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight);this.host.style.justifyContent=p.iD.LEFT,this.host.style.removeProperty("margin-left"),this.host.style.removeProperty("margin-top"),this.host.style.width=this.canvas.style.width=`${t}px`,this.host.style.height=this.canvas.style.height=`${s}px`,this.host.style.left=this.canvas.style.left="0",this.host.style.top=this.canvas.style.top="0",this.host.style.setProperty("overflow","hidden","important"),this.slider.root.style.display="none",this.slider.setValues(0,Math.max(0,this.Length-1),0,Math.max(0,this.Length-1)),this.canvas.width=t*e,this.canvas.height=s*e}calcLayoutNoFitArea(e){if(!this.host||!this.canvas||!this.slider)return;const t=this._positionWidthWithMargin*this.Length,s=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight),n=Math.min(this.root.clientWidth,t);this.canvas.style.width=`${n}px`,this.canvas.style.height=`${s}px`,this.host.style.width=`${n}px`,this.host.style.height=`${this.root.clientHeight}px`,this.host.style.justifyContent=this.horizontalAlignment,this.host.style.alignContent=this.verticalAlignment===p.vw.TOP?"start":this.verticalAlignment===p.vw.MIDDLE?"center":this.verticalAlignment===p.vw.BOTTOM?"end":"inherit",this.root.clientHeight<this.minHeight&&(this.host.style.alignContent="start",this.host.style.width=`${n+6}px`),this.host.style.width=`${this.host}px`;const r=t>n;if(this.setSliderVisibility(r),r){this.slider.root.style.removeProperty("display"),this.host.style.justifyContent="left",this.host.style.height=this.root.clientHeight-this.slider.root.offsetHeight+"px",this.slider.root.style.top=`${this.host.offsetHeight}px`;let e=Math.min(Math.max(0,this.slider.min),this.Length-.001),t=Math.min(Math.max(0,this.slider.max),this.Length-.001);const s=this.root.clientWidth/this._positionWidthWithMargin;t=Math.min(Math.max(e,0)+s,this.Length-.001),e=Math.max(0,Math.min(t,this.Length-.001)-s),this.slider.setValues(0,Math.max(this.Length-.001),e,t)}else this.slider.setValues(0,Math.max(0,this.Length-.001),0,Math.max(0,this.Length-.001));this.canvas.width=n*e,this.canvas.height=s*e}calcLayoutFitArea(e){if(!this.host||!this.canvas||!this.slider)return;const t=this._positionWidth*this.Length,s=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight),n=t>0?(this.root.clientWidth-this.positionMarginValue*this.Length)/t:0,r=this.root.clientHeight/s,i=Math.max(1,Math.min(n,r));this._positionWidth=this.positionWidth*i,this._positionWidthWithMargin=this._positionWidth+this.positionMarginValue;const o=(this._positionWidth+this.positionMarginValue)*this.Length,a=i*s,l=Math.min(this.root.clientWidth,o);this.canvas.style.width=`${l}px`,this.canvas.style.height=`${a}px`,this.host.style.width=`${l}px`,this.host.style.height=`${this.root.clientHeight}px`,this.host.style.justifyContent=this.horizontalAlignment,this.host.style.alignContent=this.verticalAlignment===p.vw.TOP?"start":this.verticalAlignment===p.vw.MIDDLE?"center":this.verticalAlignment===p.vw.BOTTOM?"end":"inherit",this.root.clientHeight<this.minHeight&&(this.host.style.alignContent="start",this.host.style.width=`${l+6}px`),this.host.style.width=`${this.host}px`;const c=o>l;if(this.setSliderVisibility(c),c){this.slider.root.style.removeProperty("display"),this.host.style.justifyContent="left",this.host.style.height=this.root.clientHeight-this.slider.root.offsetHeight+"px",this.slider.root.style.top=`${this.host.offsetHeight}px`;let e=Math.min(Math.max(0,this.slider.min),this.Length-.001),t=Math.min(Math.max(0,this.slider.max),this.Length-.001);const s=this.root.clientWidth/this._positionWidthWithMargin;t=Math.min(Math.max(e,0)+s,this.Length-.001),e=Math.max(0,Math.min(t,this.Length-.001)-s),this.slider.setValues(0,Math.max(0,this.Length-.001),e,t)}else this.slider.setValues(0,Math.max(0,this.Length-.001),0,Math.max(0,this.Length-.001));this.canvas.width=l*e,this.canvas.height=a*e}onPropertyChanged(e){switch(super.onPropertyChanged(e),e.name){case v.sequenceColumnName:this.updateSeqCol();break;case v.sequenceColumnName:case v.startPositionName:case v.endPositionName:case v.filterSource:case v.shrinkEmptyTail:case v.skipEmptyPositions:case v.positionHeight:case v.valueColumnName:case v.valueAggrType:this.render(E.Freqs,`onPropertyChanged( ${e.name} )`);break;case v.minHeight:case v.maxHeight:case v.positionWidth:case v.showPositionLabels:case v.fixWidth:case v.fitArea:case v.horizontalAlignment:case v.verticalAlignment:case v.positionMargin:case v.positionMarginState:this.render(E.Layout,`onPropertyChanged(${e.name})`);break;case v.backgroundColor:this.render(E.Render,`onPropertyChanged(${e.name})`)}}onTableAttached(){C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.onTableAttached(), `),super.onTableAttached(),this.setData()}detach(){const e=`${this.viewerToLog()}.detach()`;C._package.logger.debug(`${e}, in`);const t=super.detach.bind(this);this.viewSyncer.sync(`${e}`,(async()=>{this.setDataInProgress||(this.viewed&&(await this.destroyView(),this.viewed=!1),t())})),C._package.logger.debug(`${e}, out`)}get onSizeChanged(){return this._onSizeChanged}get onFreqsCalculated(){return this._onFreqsCalculated}get onLayoutCalculated(){return this._onLayoutCalculated}getMonomer(e,t){const s=e.x,n=Math.floor(e.x/(this._positionWidthWithMargin*t)+Math.floor(this.slider.min)),r=this.positions[n];if(!r)return[null,null,null];const i=r.getMonomerAt(s,e.y);return void 0===i?[r,null,null]:[r,i,r.getFreq(i)]}_nullSequence(e="X"){return this.skipEmptySequences?"":new Array(this.Length).fill(e).join("")}_removeEmptyPositions(){this.skipEmptyPositions&&(this.positions=c()(this.positions).filter((e=>{const t=this.unitsHandler.defaultGapSymbol;return!e.hasMonomer(t)||e.getFreq(t).rowCount!==e.sumRowCount})).toArray())}render(e,t){C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render( recalcLevelVal=${e}, reason='${t}' )`),this.requestedRenderLevel=Math.max(this.requestedRenderLevel,e),this.renderRequest.next(this.requestedRenderLevel)}async renderInt(e){if(C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.renderInt( renderLevel=${e} ), start `),this.msgHost&&(this.seqCol&&!this.palette?(this.msgHost.innerText=`Unknown palette (column semType: '${this.seqCol.semType}').`,this.msgHost.style.display=""):this.msgHost.style.display="none"),!this.seqCol||!this.dataFrame||!this.palette||null==this.host||null==this.slider)return;const t=window.devicePixelRatio,s=this.showPositionLabels?12:0;if(e>=E.Freqs&&(()=>{if(C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.calculateFreqsInt(), start `),!this.host||!this.seqCol||!this.dataFrame)return;const e=this.getFilter(),t=0===e.trueCount?this.unitsHandler.maxLength:c().enumerate(this.unitsHandler.splitted).map((([t,s])=>e.get(s)&&t?t.length:0)).reduce(((e,t)=>Math.max(e,t)),0),s=this.seqCol.getTag(".positionNames"),n=this.seqCol.getTag(".positionLabels");this.positionNames=s?s.split(d.CI).map((e=>e.trim())):[...Array(t).keys()].map((e=>`${e+1}`)),this.positionLabels=n?n.split(d.CI).map((e=>e.trim())):void 0,this.startPosition=this.startPositionName&&this.positionNames&&this.positionNames.includes(this.startPositionName)?this.positionNames.indexOf(this.startPositionName):0,this.endPosition=this.endPositionName&&this.positionNames&&this.positionNames.includes(this.endPositionName)?this.positionNames.indexOf(this.endPositionName):t-1;const r=this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0;this.unitsHandler=u.Cn.getOrCreate(this.seqCol);const o=this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0;this.positions=new Array(o);for(let e=0;e<r;e++){const t=this.positionNames[this.startPosition+e],s=this.positionLabels?this.positionLabels[this.startPosition+e]:void 0;this.positions[e]=new x(this.startPosition+e,t,{},{label:s})}const a=this.dataFrame.rowCount,l=this.unitsHandler.splitted;for(let t=0;t<r;++t){for(let s=0;s<a;++s)if(e.get(s)){const e=l[s][this.startPosition+t]||this.unitsHandler.defaultGapSymbol,n=this.positions[t],r=n.getFreq(e);++n.sumRowCount,r.value=++r.rowCount}if(this.valueAggrType===i.AGG.TOTAL_COUNT)continue;let s=null;try{s=this.dataFrame.getCol(this.valueColumnName),s.matches("numerical")||(s=null)}catch{s=null}if(s){for(let n=0;n<a;++n)if(e.get(n)){const e=l[n][this.startPosition+t]||this.unitsHandler.defaultGapSymbol,r=s.get(n);this.positions[t].getFreq(e).push(r)}this.positions[t].aggregate(this.valueAggrType)}}const h=this.valueAggrType===i.AGG.TOTAL_COUNT?0:Math.min(0,Math.min(...this.positions.map((e=>e.getMinValue()))));for(let e=0;e<r;++e)this.positions[e].calcPlotValue(h),this.positions[e].calcHeights(this.positionHeight);this._removeEmptyPositions(),this._onFreqsCalculated.next()})(),this.calcLayout(t),-1===this.startPosition)return;const r=Math.max(Math.floor(this.slider.min),0),o=Math.min(this.positions.length-1,Math.floor(this.slider.max));e>=E.Layout&&((e,t,s,r)=>{C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.calculateLayoutInt(), start `);const o=this.canvas.height-r*s;let a;if(this.valueAggrType===i.AGG.TOTAL_COUNT){const e=this.getAlphabetSize();this.positionHeight==p.ES.Entropy&&null==e&&n.shell.error("WebLogo: alphabet is undefined."),a=Math.log2(e)}else a=Math.max(...c().count(e).takeWhile((e=>e<=t)).map((e=>this.positions[e].sumPlotValueForHeight)));for(let n=e;n<=t;++n)n in this.positions?this.positions[n].calcScreen((e=>this.unitsHandler.isGap(e)),n,this.slider.min,o,this.positionHeight,a,this._positionWidthWithMargin,this._positionWidth,s,r):C._package.logger.warning(`Bio: WebLogoViewer<${this.viewerId}>.render.calculateLayoutInt() this.positions.length = ${this.positions.length}, jPos = ${n}`);C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.calculateLayoutInt(), end `),this._onLayoutCalculated.next()})(r,o,window.devicePixelRatio,s);const a=this.canvas.getContext("2d");if(a){a.save();try{this.Length,a.resetTransform(),a.fillStyle=function(e){const t=i.Color.a(e);return`#${(16777215&e).toString(16).padStart(6,"0")}`+t.toString(16).padStart(2,"0")}(this.backgroundColor),a.fillRect(0,0,this.canvas.width,this.canvas.height),a.textBaseline=this.textBaseline;const e=10*t;a.resetTransform(),a.fillStyle="black",a.textAlign="center",a.font=`${e.toFixed(1)}px Roboto, Roboto Local, sans-serif`,s>0&&this.positions.length>0&&function(e,t,s,n,r,i,o,a){e.save();try{e.textAlign="center";let l=null,c=null;for(let t=Math.floor(o);t<=Math.floor(a);t++){const s=i[t],n=e.measureText(s.name),r=n.actualBoundingBoxDescent-n.actualBoundingBoxAscent;l=null===l?n.width:Math.max(l,n.width),c=null===c?r:Math.max(c,r)}const h=l<n*t-2?1:(n*t-2)/l;for(let l=Math.floor(o);l<=Math.floor(a);l++){const a=i[l],u=(l-o)*s*t+n*t/2,d=(r*t-c)/2;e.setTransform(h,0,0,1,u,d),e.measureText(a.label),e.fillText(a.label,0,0)}}finally{e.restore()}}(a,t,this._positionWidthWithMargin,this._positionWidth,s,this.positions,this.slider.min,this.slider.max);const n="16px Roboto, Roboto Local, sans-serif",l=.25,c=12.2;for(let e=r;e<=o;e++)this.positions[e].render(a,(e=>this.unitsHandler.isGap(e)),n,l,c,this.palette)}finally{a.restore()}C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.renderInt( recalcLevel=${e} ), end`)}}renderRequestOnDebounce(e){const t=`${this.viewerToLog()}.renderRequestOnDebounce()`;"HTML"!==a()(this.root).offsetParent().get()[0]?.tagName?(this.requestedRenderLevel=E.None,this.renderInt(e).catch((e=>{const[t,s]=(0,f.yf)(e);C._package.logger.error(t,void 0,s)}))):C._package.logger.warning(`${t}, $(this.root).offsetParent() is the 'HTML' tag.`)}getAlphabetSize(){return this.unitsHandler?.getAlphabetSize()??0}sliderOnValuesChanged(e){try{const e={minRange:this.slider.minRange,min:this.slider.min,max:this.slider.max,maxRange:this.slider.maxRange};C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.sliderOnValuesChanged( ${JSON.stringify(e)} ), start`),this.render(E.Layout,"sliderOnValuesChanged")}catch(e){const t=m(e);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.sliderOnValuesChanged() error:\n`+t)}}dataFrameFilterOnChanged(e){C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.dataFrameFilterChanged()`);try{this.filterSource===p.Ct.Filtered&&this.render(E.Freqs,"dataFrameFilterOnChanged")}catch(e){const t=m(e);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.dataFrameFilterOnChanged() error:\n`+t)}}dataFrameSelectionOnChanged(e){C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.dataFrameSelectionOnChanged()`);try{this.filterSource===p.Ct.Selected&&this.render(E.Freqs,"dataFrameSelectionOnChanged")}catch(e){const t=m(e);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.dataFrameSelectionOnChanged() error:\n`+t)}}canvasOnMouseMove(e){const t=window.devicePixelRatio;try{const s=e,n=this.canvas.getCursorPosition(s,t),[o,a]=this.getMonomer(n,t),l=this.showPositionLabels?12*t:0;if(null!==o&&null===a&&0<=n.y&&n.y<=l){const e=[r.divText(`Position ${o.label}`)];this.valueAggrType===i.AGG.TOTAL_COUNT&&e.push(o.buildCompositionTable(this.palette));const t=r.divV(e);r.tooltip.show(t,s.x+16,s.y+16)}else if(null!==o&&a&&this.dataFrame&&this.seqCol&&this.unitsHandler){const e=o.getFreq(a),t=[r.div(`${a}`),r.div(`${e.rowCount} rows`)];this.valueAggrType!==i.AGG.TOTAL_COUNT&&t.push(r.div(`${this.valueAggrType}: ${e.value.toFixed(3)}`));const n=r.divV(t);r.tooltip.show(n,s.x+16,s.y+16)}else r.tooltip.hide()}catch(e){const t=m(e);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.canvasOnMouseMove() error:\n`+t)}}canvasOnMouseDown(e){try{const t=e,s=window.devicePixelRatio,[n,r]=this.getMonomer(this.canvas.getCursorPosition(t,s),s);if(null!==n&&null!==r&&this.dataFrame&&this.seqCol&&this.unitsHandler){const e=i.BitSet.create(this.dataFrame.selection.length,(e=>function(e,t,s,n,r,i){const o=t.splitted[n],a=i.pos<o.length?o[i.pos]:null;return a===r||""===a&&r===t.defaultGapSymbol}(this.dataFrame,this.unitsHandler,this.getFilter(),e,r,n)));this.dataFrame.selection.init((t=>e.get(t)))}}catch(e){const t=m(e);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.canvasOnMouseDown() error:\n`+t)}}canvasOnWheel(e){const t=window.devicePixelRatio;try{if(!this.visibleSlider)return;const s=this.canvas.width/(this._positionWidthWithMargin*t),n=e.deltaY/100*Math.max(Math.floor(s/5),1);this.slider.scrollBy(this.slider.min+n)}catch(e){const t=m(e);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.canvasOnWheel() error:\n`+t)}}get onRendered(){return this._onRendered}invalidate(e){const t=`invalidate(${e?` <- ${e} `:""})`,s=`${this.viewerToLog()}.${t}`;this.viewSyncer.sync(`${s}`,(async()=>{this.render(E.None,t),this._onRendered.next()}))}async awaitRendered(e=5e3){await(0,g.zg)(this.onRendered,(()=>{}),(()=>{this.invalidate()}),e);const t=this.viewSyncer.resetErrors();if(t.length>0)throw t[0]}}T.residuesSet="nucleotides",T.viewerCounter=-1},8755:(e,t,s)=>{"use strict";s.d(t,{Y:()=>o,x:()=>i});var n=s(701),r=s(3348);class i{get onChanged(){return this._onChanged}constructor(e){return this.substructure=e,this._onChanged=new n.Subject,new Proxy(this,{set:(e,t,s)=>(r._package.logger.debug(`BioFilterProps.set ${t.toString()}( '${s}' )`),e[t]=s,this._onChanged.next(),!0)})}save(){const e={};for(const[t,s]of Object.entries(this))"_onChanged"!==t&&(e[t]=this[t]);return e}apply(e){for(const[t,s]of Object.entries(this))"_onChanged"!==t&&(this[t]=e[t])}}class o{constructor(){this.onChanged=new n.Subject,this._propsChanging=!1,this._propsOnChangedSub=null}get props(){return this._props||(this._props=this.emptyProps),this._props}set props(e){this._propsChanging=!0;try{this._propsOnChangedSub&&(this._propsOnChangedSub.unsubscribe(),this._propsOnChangedSub=null),this._props=e,this.applyProps(),this.onChanged.next(),this._propsOnChangedSub=this._props.onChanged.subscribe((()=>{this.onChanged.next()}))}finally{this._propsChanging=!1}}async detach(){this._propsOnChangedSub&&(this._propsOnChangedSub.unsubscribe(),this._propsOnChangedSub=null)}get filterSummary(){return this.props.substructure}get isFiltering(){return""!==this.props.substructure}resetFilter(){this.props=this.emptyProps,this.onChanged.next()}}},5393:(e,t,s)=>{"use strict";s.d(t,{ST:()=>A});var n=s(3870),r=s(976),i=s(4469),o=s(6414),a=s.n(o),l=s(701),c=s(8447),h=s(8467),u=s(499),d=s(172),p=s(7983),m=s(8755),f=s(3336),g=s.n(f),y=s(7945),b=s(4293),v=s(3348);class w extends m.Y{viewerToLog(){return`HelmBioFilter<${this.viewerId}>`}get type(){return"HelmBioFilter"}constructor(){super(),this.emptyProps=new m.x(""),this._filterPanel=n.div("",{style:{cursor:"pointer"}}),this.viewerId=++w.viewerCounter,this.viewSubs=[],this.logger=v._package.logger}async detach(){await super.detach();for(const e of this.viewSubs)e.unsubscribe()}async attach(){this.viewerToLog();try{const e=await async function(){const e="Helm",t=r.Func.find({package:e,name:"getHelmHelper"});if(0===t.length)throw new Error(`Package '${e}' must be installed for HelmHelper.`);return(await t[0].prepare().call()).getOutputParamValue()}();let t,s;this.helmEditor=e.createHelmWebEditor(),this.logger.warning("TEST: HelmBioFilter.init().sync() waitForElementInDom waiting..."),await n.tools.waitForElementInDom(this._filterPanel),this.logger.warning("TEST: HelmBioFilter.init().sync() waitForElementInDom ready"),this.updateFilterPanel(),this.viewSubs.push((0,l.fromEvent)(this._filterPanel,"click").subscribe((()=>{t=n.div(),s=e.createWebEditorApp(t,this.props.substructure),n.dialog({showHeader:!1,showFooter:!0}).add(t).onOK((()=>{try{const e=s.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");this.props=new m.x(e)}catch(e){this.logger.error(e)}finally{g()(t).empty(),t=null,s=null}})).onCancel((()=>{g()(t).empty(),t=null,s=null})).show({modal:!0,fullScreen:!0})}))),this.viewSubs.push(n.onSizeChanged(this._filterPanel).subscribe((e=>{try{if(s){const e=s.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");this.updateFilterPanel(e)}}catch(e){const[t,s]=(0,y.yf)(e);this.logger.error(t,void 0,s)}})))}catch(e){const[t,s]=(0,y.yf)(e),r=this._filterPanel;r.innerText="error",r.classList.add("d4-error"),n.tooltip.bind(r,t)}}applyProps(){this.helmEditor&&this.updateFilterPanel(this.props.substructure)}get filterPanel(){return this._filterPanel}updateFilterPanel(e){if(!this.helmEditor)throw new Error("helmEditor is not created, the filter is not in dom yet");const t=this._filterPanel.parentElement.clientWidth<100?100:this._filterPanel.parentElement.clientWidth,s=t/2;if(e)(0,b.Y)(this._filterPanel,this.helmEditor.host),this.helmEditor.editor.setHelm(e),this.helmEditor.resizeEditor(t,s);else{const e=n.divText("Click to edit","helm-substructure-filter");(0,b.Y)(this._filterPanel,e)}}async substructureSearch(e){return await(0,h.gw)(10),await(0,p.QF)(this.props.substructure,e)}}w.viewerCounter=-1;const C="bio-substructure-filter";class S{constructor(e,t,s,n,r){this.props=e,this.filterId=t,this.dataFrameId=s,this.columnName=n,this.bitset=r}}class x extends m.x{constructor(e,t){super(e),this.separator=t}}class A extends r.Filter{get calculating(){return"initial"==this.loader.style.display}set calculating(e){this.loader.style.display=e?"initial":"none"}get filterSummary(){return this.bioFilter.filterSummary}get isFiltering(){return super.isFiltering&&(this.bioFilter?.isFiltering??!1)}get isReadyToApplyFilter(){return!this.calculating&&null!=this.bitset}get debounceTime(){if(null==this.column)return 1e3;const e=this.column.length;return e<500?0:e>1e4?1e3:Math.floor((e-500)/9500*1e3)}constructor(){return super(),this.bioFilter=null,this.bitset=null,this.notation=void 0,this.filterId=++A.filterCounter,this.viewSubs=[],this._onRendered=new l.Subject,this.root=n.divV([]),this.loader=n.loader(),this.calculating=!1,this.filterSyncer=new d.c(this.logger=v._package.logger),new Proxy(this,{set:(e,t,s)=>(e[t]=s,!0)})}filterToLog(){return`BioSubstructureFilter<${this.filterId}>`}attach(e){const t=super.attach.bind(this),s=`${this.filterToLog()}.attach()`;this.filterSyncer.sync(s,(async()=>{t(e),this.column=e.columns.bySemType(r.SEMTYPE.MACROMOLECULE),u.Cn.getOrCreate(this.column),this.columnName??(this.columnName=this.column?.name),this.notation??(this.notation=this.column?.getTag(r.TAGS.UNITS)),this.bioFilter=this.notation===c.r2.FASTA?new E:this.notation===c.r2.SEPARATOR?new _(this.column.getTag("separator")):new w,this.root.appendChild(this.bioFilter.filterPanel),this.root.appendChild(this.loader),await this.bioFilter.attach(),this.viewSubs.push(r.debounce(this.bioFilter.onChanged,this.debounceTime).subscribe(this.bioFilterOnChangedDebounced.bind(this))),this.viewSubs.push(i.events.onResetFilterRequest.subscribe((e=>{this.bioFilter?.resetFilter()}))),this.viewSubs.push(i.events.onCustomEvent(C).subscribe(this.filterOnSync.bind(this)))}))}detach(){const e=super.detach.bind(this),t=`${this.filterToLog()}.detach()`;this.filterSyncer.sync(t,(async()=>{for(const e of this.viewSubs)e.unsubscribe();this.viewSubs=[],e(),this.bioFilter&&this.bioFilter.detach(),this.bioFilter=null}))}filterOnSync(e){e.filterId!==this.filterId&&e.dataFrameId===this.dataFrame.id&&e.columnName===this.columnName&&(this.bioFilter.props=e.props)}applyFilter(){this.bitset&&!this.isDetached&&this.dataFrame?.filter.and(this.bitset)}saveState(){const e=super.saveState();return e.props=this.bioFilter.props.save(),e}applyState(e){super.applyState(e),e.props&&this.bioFilter.props.apply(e.props)}fireFilterSync(){const e=`${this.filterToLog()}.fireFilterSync()`;v._package.logger.debug(`${e}, bioFilter = ${this.bioFilter?this.bioFilter.constructor.name:"null"}`+(this.bioFilter?`, props = ${JSON.stringify(this.bioFilter.props.save())}`:"")),i.events.fireCustomEvent(C,new S(this.bioFilter.props,this.filterId,this.dataFrame.id,this.columnName,this.bitset))}bioFilterOnChangedDebounced(){if(!this.dataFrame)return;const e=`${this.filterToLog()}.bioFilterOnChangedDebounced()`;if(v._package.logger.debug(`${e}, start, isFiltering = ${this.isFiltering}, props = ${JSON.stringify(this.bioFilter.props.save())}`),!this.isFiltering)return this.bitset=null,void this.dataFrame.rows.requestFilter();a()(this.dataFrame.rows.filters).has(`${this.columnName}: ${this.filterSummary}`)||this.filterSyncer.sync(e,(async()=>{this.calculating=!0;try{v._package.logger.debug(`${e}, before substructureSearch`),this.bitset=await(this.bioFilter?.substructureSearch(this.column)),v._package.logger.debug(`${e}, after substructureSearch`),this.calculating=!1,this.fireFilterSync(),this.dataFrame?.rows.requestFilter()}finally{this.calculating=!1,v._package.logger.debug(`${e}, end`)}}))}get onRendered(){return this._onRendered}invalidate(e){const t=`${this.filterToLog()}.invalidate(${e?` <- ${e} `:""})`;this.filterSyncer.sync(t,(async()=>{this._onRendered.next()}))}async awaitRendered(e=1e4){const t=`awaitRendered( ${e} )`,s=`${this.filterToLog()}.${t}`;await(0,h.gw)(0),await(0,h.zg)(this.onRendered,(()=>{this.logger.debug(`${s}, _onRendered event caught`)}),(()=>{this.invalidate(t)}),e,`${s} ${e} timeout`);const n=this.filterSyncer.resetErrors();if(n.length>0)throw n[0]}}A.filterCounter=-1;class E extends m.Y{get type(){return"FastaBioFilter"}constructor(){super(),this.emptyProps=new m.x(""),this.substructureInput=n.stringInput("","",(()=>{this.props.substructure=this.substructureInput.value,this._propsChanging||this.onChanged.next()}),{placeholder:"Substructure"})}applyProps(){this.substructureInput.value=this.props.substructure}get filterPanel(){return this.substructureInput.root}get isFiltering(){return""!==this.substructureInput.value}async substructureSearch(e){return(0,p.pf)(this.props.substructure,e)}async attach(){}async detach(){await super.detach()}}class _ extends m.Y{get type(){return"SeparatorBioFilter"}constructor(e){super(),this.emptyProps=new x(""),this.colSeparator="",this.substructureInput=n.stringInput("","",(()=>{this.props.substructure=this.substructureInput.value,this._propsChanging||this.onChanged.next()}),{placeholder:"Substructure"}),this.separatorInput=n.stringInput("",this.colSeparator=e,(()=>{this.props.separator=this.separatorInput.value?this.separatorInput.value:void 0,this._propsChanging||this.onChanged.next()}),{placeholder:"Separator"})}applyProps(){this.substructureInput.value=this.props.substructure,this.separatorInput.value=this.props.separator??this.colSeparator}get filterSummary(){return this.props.separator?this.props.separator:this.colSeparator,`${this.props.substructure}, {sep}`}get isFiltering(){return""!==this.props.substructure}resetFilter(){this.props=new x("")}get filterPanel(){return n.divV([this.substructureInput.root,this.separatorInput.root])}get substructure(){return this.separatorInput.value&&this.separatorInput.value!==this.colSeparator?this.substructureInput.value.replaceAll(this.separatorInput.value,this.colSeparator):this.substructureInput.value}set substructure(e){this.substructureInput.value=e}async substructureSearch(e){return(0,p.pf)(this.substructure,e,this.colSeparator)}async attach(){}async detach(){await super.detach()}}},8770:(e,t,s)=>{"use strict";s.d(t,{_:()=>E,t:()=>A});var n=s(3870),r=s(976),i=s(6414),o=s.n(i),a=s(8447),l=s(7331),c=s(3379),h=s.n(c),u=s(7795),d=s.n(u),p=s(569),m=s.n(p),f=s(3565),g=s.n(f),y=s(9216),b=s.n(y),v=s(4589),w=s.n(v),C=s(5362),S={};S.styleTagTransform=w(),S.setAttributes=g(),S.insert=m().bind(null,"head"),S.domAPI=d(),S.insertStyleElement=b(),h()(C.Z,S),C.Z&&C.Z.locals&&C.Z.locals;var x=s(499);function A(e){const t=n.div();t.classList.add("macromolecule-cell-comp-analysis-host");const s=e.cell.column.tags.alphabet;let i=l.UE.Color;switch(s){case"DNA":case"RNA":i=(0,a.py)("DNA");break;case"PT":i=(0,a.py)("PT")}const c={},h=x.Cn.getOrCreate(e.cell.column).getSplitter()(e.value);o()(h).filter((e=>!!e&&""!==e)).forEach((e=>{const t=c[e]||0;c[e]=t+1}));const u=E(i,c);return Array.from(u.rows).forEach((e=>{const t=e.getElementsByClassName("macromolecule-cell-comp-analysis-bar")[0].style.backgroundColor;e.cells[0].style.color=t})),t.appendChild(u),new r.Widget(t)}function E(e,t){let s=0,r=null;for(const e of Object.values(t))s+=e,r=null===r?e:Math.max(r,e);const i=r/s,o=Object.assign({},...Array.from(Object.entries(t)).sort(((e,t)=>t[1]-e[1])).map((([t,r])=>{const o=r/s,a=e.get(t),l=n.div("",{classes:"macromolecule-cell-comp-analysis-bar"});l.style.width=50*o/i+"px",l.style.backgroundColor=a;const c=n.div(`${(100*o).toFixed(2)}%`);return{[t]:n.div([l,c],{classes:"macromolecule-cell-comp-analysis-value"})}}))),a=n.tableFromMap(o);return Array.from(a.rows).forEach((e=>{const t=e.getElementsByClassName("macromolecule-cell-comp-analysis-bar")[0].style.backgroundColor;e.cells[0].style.color=t})),a}},540:function(e,t){!function(e){"use strict";function t(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];if(t.length>1){t[0]=t[0].slice(0,-1);for(var n=t.length-1,r=1;r<n;++r)t[r]=t[r].slice(1,-1);return t[n]=t[n].slice(1),t.join("")}return t[0]}function s(e){return"(?:"+e+")"}function n(e){return void 0===e?"undefined":null===e?"null":Object.prototype.toString.call(e).split(" ").pop().split("]").shift().toLowerCase()}function r(e){return e.toUpperCase()}function i(e){var n="[A-Za-z]",r="[0-9]",i=t(r,"[A-Fa-f]"),o=s(s("%[EFef]"+i+"%"+i+i+"%"+i+i)+"|"+s("%[89A-Fa-f]"+i+"%"+i+i)+"|"+s("%"+i+i)),a="[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]",l=t("[\\:\\/\\?\\#\\[\\]\\@]",a),c=e?"[\\uE000-\\uF8FF]":"[]",h=t(n,r,"[\\-\\.\\_\\~]",e?"[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]":"[]"),u=s(n+t(n,r,"[\\+\\-\\.]")+"*"),d=s(s(o+"|"+t(h,a,"[\\:]"))+"*"),p=(s(s("25[0-5]")+"|"+s("2[0-4]"+r)+"|"+s("1"+r+r)+"|"+s("[1-9]"+r)+"|"+r),s(s("25[0-5]")+"|"+s("2[0-4]"+r)+"|"+s("1"+r+r)+"|"+s("0?[1-9]"+r)+"|0?0?"+r)),m=s(p+"\\."+p+"\\."+p+"\\."+p),f=s(i+"{1,4}"),g=s(s(f+"\\:"+f)+"|"+m),y=s(s(f+"\\:")+"{6}"+g),b=s("\\:\\:"+s(f+"\\:")+"{5}"+g),v=s(s(f)+"?\\:\\:"+s(f+"\\:")+"{4}"+g),w=s(s(s(f+"\\:")+"{0,1}"+f)+"?\\:\\:"+s(f+"\\:")+"{3}"+g),C=s(s(s(f+"\\:")+"{0,2}"+f)+"?\\:\\:"+s(f+"\\:")+"{2}"+g),S=s(s(s(f+"\\:")+"{0,3}"+f)+"?\\:\\:"+f+"\\:"+g),x=s(s(s(f+"\\:")+"{0,4}"+f)+"?\\:\\:"+g),A=s(s(s(f+"\\:")+"{0,5}"+f)+"?\\:\\:"+f),E=s(s(s(f+"\\:")+"{0,6}"+f)+"?\\:\\:"),_=s([y,b,v,w,C,S,x,A,E].join("|")),T=s(s(h+"|"+o)+"+"),I=(s(_+"\\%25"+T),s(_+s("\\%25|\\%(?!"+i+"{2})")+T)),$=s("[vV]"+i+"+\\."+t(h,a,"[\\:]")+"+"),M=s("\\["+s(I+"|"+_+"|"+$)+"\\]"),N=s(s(o+"|"+t(h,a))+"*"),L=s(M+"|"+m+"(?!"+N+")|"+N),P=s(r+"*"),O=s(s(d+"@")+"?"+L+s("\\:"+P)+"?"),R=s(o+"|"+t(h,a,"[\\:\\@]")),k=s(R+"*"),F=s(R+"+"),G=s(s(o+"|"+t(h,a,"[\\@]"))+"+"),D=s(s("\\/"+k)+"*"),V=s("\\/"+s(F+D)+"?"),B=s(G+D),H=s(F+D),j="(?!"+R+")",W=(s(D+"|"+V+"|"+B+"|"+H+"|"+j),s(s(R+"|"+t("[\\/\\?]",c))+"*")),U=s(s(R+"|[\\/\\?]")+"*"),Z=s(s("\\/\\/"+O+D)+"|"+V+"|"+H+"|"+j),Y=s(u+"\\:"+Z+s("\\?"+W)+"?"+s("\\#"+U)+"?"),K=s(s("\\/\\/"+O+D)+"|"+V+"|"+B+"|"+j),q=s(K+s("\\?"+W)+"?"+s("\\#"+U)+"?");return s(Y+"|"+q),s(u+"\\:"+Z+s("\\?"+W)+"?"),s(s("\\/\\/("+s("("+d+")@")+"?("+L+")"+s("\\:("+P+")")+"?)")+"?("+D+"|"+V+"|"+H+"|"+j+")"),s("\\?("+W+")"),s("\\#("+U+")"),s(s("\\/\\/("+s("("+d+")@")+"?("+L+")"+s("\\:("+P+")")+"?)")+"?("+D+"|"+V+"|"+B+"|"+j+")"),s("\\?("+W+")"),s("\\#("+U+")"),s(s("\\/\\/("+s("("+d+")@")+"?("+L+")"+s("\\:("+P+")")+"?)")+"?("+D+"|"+V+"|"+H+"|"+j+")"),s("\\?("+W+")"),s("\\#("+U+")"),s("("+d+")@"),s("\\:("+P+")"),{NOT_SCHEME:new RegExp(t("[^]",n,r,"[\\+\\-\\.]"),"g"),NOT_USERINFO:new RegExp(t("[^\\%\\:]",h,a),"g"),NOT_HOST:new RegExp(t("[^\\%\\[\\]\\:]",h,a),"g"),NOT_PATH:new RegExp(t("[^\\%\\/\\:\\@]",h,a),"g"),NOT_PATH_NOSCHEME:new RegExp(t("[^\\%\\/\\@]",h,a),"g"),NOT_QUERY:new RegExp(t("[^\\%]",h,a,"[\\:\\@\\/\\?]",c),"g"),NOT_FRAGMENT:new RegExp(t("[^\\%]",h,a,"[\\:\\@\\/\\?]"),"g"),ESCAPE:new RegExp(t("[^]",h,a),"g"),UNRESERVED:new RegExp(h,"g"),OTHER_CHARS:new RegExp(t("[^\\%]",h,l),"g"),PCT_ENCODED:new RegExp(o,"g"),IPV4ADDRESS:new RegExp("^("+m+")$"),IPV6ADDRESS:new RegExp("^\\[?("+_+")"+s(s("\\%25|\\%(?!"+i+"{2})")+"("+T+")")+"?\\]?$")}}var o=i(!1),a=i(!0),l=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var s=[],n=!0,r=!1,i=void 0;try{for(var o,a=e[Symbol.iterator]();!(n=(o=a.next()).done)&&(s.push(o.value),!t||s.length!==t);n=!0);}catch(e){r=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw i}}return s}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},c=2147483647,h=36,u=/^xn--/,d=/[^\0-\x7E]/,p=/[\x2E\u3002\uFF0E\uFF61]/g,m={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},f=Math.floor,g=String.fromCharCode;function y(e){throw new RangeError(m[e])}function b(e,t){var s=e.split("@"),n="";return s.length>1&&(n=s[0]+"@",e=s[1]),n+function(e,t){for(var s=[],n=e.length;n--;)s[n]=t(e[n]);return s}((e=e.replace(p,".")).split("."),t).join(".")}function v(e){for(var t=[],s=0,n=e.length;s<n;){var r=e.charCodeAt(s++);if(r>=55296&&r<=56319&&s<n){var i=e.charCodeAt(s++);56320==(64512&i)?t.push(((1023&r)<<10)+(1023&i)+65536):(t.push(r),s--)}else t.push(r)}return t}var w=function(e,t){return e+22+75*(e<26)-((0!=t)<<5)},C=function(e,t,s){var n=0;for(e=s?f(e/700):e>>1,e+=f(e/t);e>455;n+=h)e=f(e/35);return f(n+36*e/(e+38))},S=function(e){var t,s=[],n=e.length,r=0,i=128,o=72,a=e.lastIndexOf("-");a<0&&(a=0);for(var l=0;l<a;++l)e.charCodeAt(l)>=128&&y("not-basic"),s.push(e.charCodeAt(l));for(var u=a>0?a+1:0;u<n;){for(var d=r,p=1,m=h;;m+=h){u>=n&&y("invalid-input");var g=(t=e.charCodeAt(u++))-48<10?t-22:t-65<26?t-65:t-97<26?t-97:h;(g>=h||g>f((c-r)/p))&&y("overflow"),r+=g*p;var b=m<=o?1:m>=o+26?26:m-o;if(g<b)break;var v=h-b;p>f(c/v)&&y("overflow"),p*=v}var w=s.length+1;o=C(r-d,w,0==d),f(r/w)>c-i&&y("overflow"),i+=f(r/w),r%=w,s.splice(r++,0,i)}return String.fromCodePoint.apply(String,s)},x=function(e){var t=[],s=(e=v(e)).length,n=128,r=0,i=72,o=!0,a=!1,l=void 0;try{for(var u,d=e[Symbol.iterator]();!(o=(u=d.next()).done);o=!0){var p=u.value;p<128&&t.push(g(p))}}catch(e){a=!0,l=e}finally{try{!o&&d.return&&d.return()}finally{if(a)throw l}}var m=t.length,b=m;for(m&&t.push("-");b<s;){var S=c,x=!0,A=!1,E=void 0;try{for(var _,T=e[Symbol.iterator]();!(x=(_=T.next()).done);x=!0){var I=_.value;I>=n&&I<S&&(S=I)}}catch(e){A=!0,E=e}finally{try{!x&&T.return&&T.return()}finally{if(A)throw E}}var $=b+1;S-n>f((c-r)/$)&&y("overflow"),r+=(S-n)*$,n=S;var M=!0,N=!1,L=void 0;try{for(var P,O=e[Symbol.iterator]();!(M=(P=O.next()).done);M=!0){var R=P.value;if(R<n&&++r>c&&y("overflow"),R==n){for(var k=r,F=h;;F+=h){var G=F<=i?1:F>=i+26?26:F-i;if(k<G)break;var D=k-G,V=h-G;t.push(g(w(G+D%V,0))),k=f(D/V)}t.push(g(w(k,0))),i=C(r,$,b==m),r=0,++b}}}catch(e){N=!0,L=e}finally{try{!M&&O.return&&O.return()}finally{if(N)throw L}}++r,++n}return t.join("")},A={version:"2.1.0",ucs2:{decode:v,encode:function(e){return String.fromCodePoint.apply(String,function(e){if(Array.isArray(e)){for(var t=0,s=Array(e.length);t<e.length;t++)s[t]=e[t];return s}return Array.from(e)}(e))}},decode:S,encode:x,toASCII:function(e){return b(e,(function(e){return d.test(e)?"xn--"+x(e):e}))},toUnicode:function(e){return b(e,(function(e){return u.test(e)?S(e.slice(4).toLowerCase()):e}))}},E={};function _(e){var t=e.charCodeAt(0);return t<16?"%0"+t.toString(16).toUpperCase():t<128?"%"+t.toString(16).toUpperCase():t<2048?"%"+(t>>6|192).toString(16).toUpperCase()+"%"+(63&t|128).toString(16).toUpperCase():"%"+(t>>12|224).toString(16).toUpperCase()+"%"+(t>>6&63|128).toString(16).toUpperCase()+"%"+(63&t|128).toString(16).toUpperCase()}function T(e){for(var t="",s=0,n=e.length;s<n;){var r=parseInt(e.substr(s+1,2),16);if(r<128)t+=String.fromCharCode(r),s+=3;else if(r>=194&&r<224){if(n-s>=6){var i=parseInt(e.substr(s+4,2),16);t+=String.fromCharCode((31&r)<<6|63&i)}else t+=e.substr(s,6);s+=6}else if(r>=224){if(n-s>=9){var o=parseInt(e.substr(s+4,2),16),a=parseInt(e.substr(s+7,2),16);t+=String.fromCharCode((15&r)<<12|(63&o)<<6|63&a)}else t+=e.substr(s,9);s+=9}else t+=e.substr(s,3),s+=3}return t}function I(e,t){function s(e){var s=T(e);return s.match(t.UNRESERVED)?s:e}return e.scheme&&(e.scheme=String(e.scheme).replace(t.PCT_ENCODED,s).toLowerCase().replace(t.NOT_SCHEME,"")),void 0!==e.userinfo&&(e.userinfo=String(e.userinfo).replace(t.PCT_ENCODED,s).replace(t.NOT_USERINFO,_).replace(t.PCT_ENCODED,r)),void 0!==e.host&&(e.host=String(e.host).replace(t.PCT_ENCODED,s).toLowerCase().replace(t.NOT_HOST,_).replace(t.PCT_ENCODED,r)),void 0!==e.path&&(e.path=String(e.path).replace(t.PCT_ENCODED,s).replace(e.scheme?t.NOT_PATH:t.NOT_PATH_NOSCHEME,_).replace(t.PCT_ENCODED,r)),void 0!==e.query&&(e.query=String(e.query).replace(t.PCT_ENCODED,s).replace(t.NOT_QUERY,_).replace(t.PCT_ENCODED,r)),void 0!==e.fragment&&(e.fragment=String(e.fragment).replace(t.PCT_ENCODED,s).replace(t.NOT_FRAGMENT,_).replace(t.PCT_ENCODED,r)),e}function $(e){return e.replace(/^0*(.*)/,"$1")||"0"}function M(e,t){var s=e.match(t.IPV4ADDRESS)||[],n=l(s,2)[1];return n?n.split(".").map($).join("."):e}function N(e,t){var s=e.match(t.IPV6ADDRESS)||[],n=l(s,3),r=n[1],i=n[2];if(r){for(var o=r.toLowerCase().split("::").reverse(),a=l(o,2),c=a[0],h=a[1],u=h?h.split(":").map($):[],d=c.split(":").map($),p=t.IPV4ADDRESS.test(d[d.length-1]),m=p?7:8,f=d.length-m,g=Array(m),y=0;y<m;++y)g[y]=u[y]||d[f+y]||"";p&&(g[m-1]=M(g[m-1],t));var b=g.reduce((function(e,t,s){if(!t||"0"===t){var n=e[e.length-1];n&&n.index+n.length===s?n.length++:e.push({index:s,length:1})}return e}),[]).sort((function(e,t){return t.length-e.length}))[0],v=void 0;if(b&&b.length>1){var w=g.slice(0,b.index),C=g.slice(b.index+b.length);v=w.join(":")+"::"+C.join(":")}else v=g.join(":");return i&&(v+="%"+i),v}return e}var L=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,P=void 0==="".match(/(){0}/)[1];function O(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s={},n=!1!==t.iri?a:o;"suffix"===t.reference&&(e=(t.scheme?t.scheme+":":"")+"//"+e);var r=e.match(L);if(r){P?(s.scheme=r[1],s.userinfo=r[3],s.host=r[4],s.port=parseInt(r[5],10),s.path=r[6]||"",s.query=r[7],s.fragment=r[8],isNaN(s.port)&&(s.port=r[5])):(s.scheme=r[1]||void 0,s.userinfo=-1!==e.indexOf("@")?r[3]:void 0,s.host=-1!==e.indexOf("//")?r[4]:void 0,s.port=parseInt(r[5],10),s.path=r[6]||"",s.query=-1!==e.indexOf("?")?r[7]:void 0,s.fragment=-1!==e.indexOf("#")?r[8]:void 0,isNaN(s.port)&&(s.port=e.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?r[4]:void 0)),s.host&&(s.host=N(M(s.host,n),n)),void 0!==s.scheme||void 0!==s.userinfo||void 0!==s.host||void 0!==s.port||s.path||void 0!==s.query?void 0===s.scheme?s.reference="relative":void 0===s.fragment?s.reference="absolute":s.reference="uri":s.reference="same-document",t.reference&&"suffix"!==t.reference&&t.reference!==s.reference&&(s.error=s.error||"URI is not a "+t.reference+" reference.");var i=E[(t.scheme||s.scheme||"").toLowerCase()];if(t.unicodeSupport||i&&i.unicodeSupport)I(s,n);else{if(s.host&&(t.domainHost||i&&i.domainHost))try{s.host=A.toASCII(s.host.replace(n.PCT_ENCODED,T).toLowerCase())}catch(e){s.error=s.error||"Host's domain name can not be converted to ASCII via punycode: "+e}I(s,o)}i&&i.parse&&i.parse(s,t)}else s.error=s.error||"URI can not be parsed.";return s}var R=/^\.\.?\//,k=/^\/\.(\/|$)/,F=/^\/\.\.(\/|$)/,G=/^\/?(?:.|\n)*?(?=\/|$)/;function D(e){for(var t=[];e.length;)if(e.match(R))e=e.replace(R,"");else if(e.match(k))e=e.replace(k,"/");else if(e.match(F))e=e.replace(F,"/"),t.pop();else if("."===e||".."===e)e="";else{var s=e.match(G);if(!s)throw new Error("Unexpected dot segment condition");var n=s[0];e=e.slice(n.length),t.push(n)}return t.join("")}function V(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=t.iri?a:o,n=[],r=E[(t.scheme||e.scheme||"").toLowerCase()];if(r&&r.serialize&&r.serialize(e,t),e.host)if(s.IPV6ADDRESS.test(e.host));else if(t.domainHost||r&&r.domainHost)try{e.host=t.iri?A.toUnicode(e.host):A.toASCII(e.host.replace(s.PCT_ENCODED,T).toLowerCase())}catch(s){e.error=e.error||"Host's domain name can not be converted to "+(t.iri?"Unicode":"ASCII")+" via punycode: "+s}I(e,s),"suffix"!==t.reference&&e.scheme&&(n.push(e.scheme),n.push(":"));var i=function(e,t){var s=!1!==t.iri?a:o,n=[];return void 0!==e.userinfo&&(n.push(e.userinfo),n.push("@")),void 0!==e.host&&n.push(N(M(String(e.host),s),s).replace(s.IPV6ADDRESS,(function(e,t,s){return"["+t+(s?"%25"+s:"")+"]"}))),"number"!=typeof e.port&&"string"!=typeof e.port||(n.push(":"),n.push(String(e.port))),n.length?n.join(""):void 0}(e,t);if(void 0!==i&&("suffix"!==t.reference&&n.push("//"),n.push(i),e.path&&"/"!==e.path.charAt(0)&&n.push("/")),void 0!==e.path){var l=e.path;t.absolutePath||r&&r.absolutePath||(l=D(l)),void 0===i&&(l=l.replace(/^\/\//,"/%2F")),n.push(l)}return void 0!==e.query&&(n.push("?"),n.push(e.query)),void 0!==e.fragment&&(n.push("#"),n.push(e.fragment)),n.join("")}function B(e,t){var s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n={};return arguments[3]||(e=O(V(e,s),s),t=O(V(t,s),s)),!(s=s||{}).tolerant&&t.scheme?(n.scheme=t.scheme,n.userinfo=t.userinfo,n.host=t.host,n.port=t.port,n.path=D(t.path||""),n.query=t.query):(void 0!==t.userinfo||void 0!==t.host||void 0!==t.port?(n.userinfo=t.userinfo,n.host=t.host,n.port=t.port,n.path=D(t.path||""),n.query=t.query):(t.path?("/"===t.path.charAt(0)?n.path=D(t.path):(void 0===e.userinfo&&void 0===e.host&&void 0===e.port||e.path?e.path?n.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+t.path:n.path=t.path:n.path="/"+t.path,n.path=D(n.path)),n.query=t.query):(n.path=e.path,void 0!==t.query?n.query=t.query:n.query=e.query),n.userinfo=e.userinfo,n.host=e.host,n.port=e.port),n.scheme=e.scheme),n.fragment=t.fragment,n}function H(e,t){return e&&e.toString().replace(t&&t.iri?a.PCT_ENCODED:o.PCT_ENCODED,T)}var j={scheme:"http",domainHost:!0,parse:function(e,t){return e.host||(e.error=e.error||"HTTP URIs must have a host."),e},serialize:function(e,t){var s="https"===String(e.scheme).toLowerCase();return e.port!==(s?443:80)&&""!==e.port||(e.port=void 0),e.path||(e.path="/"),e}},W={scheme:"https",domainHost:j.domainHost,parse:j.parse,serialize:j.serialize};function U(e){return"boolean"==typeof e.secure?e.secure:"wss"===String(e.scheme).toLowerCase()}var Z={scheme:"ws",domainHost:!0,parse:function(e,t){var s=e;return s.secure=U(s),s.resourceName=(s.path||"/")+(s.query?"?"+s.query:""),s.path=void 0,s.query=void 0,s},serialize:function(e,t){if(e.port!==(U(e)?443:80)&&""!==e.port||(e.port=void 0),"boolean"==typeof e.secure&&(e.scheme=e.secure?"wss":"ws",e.secure=void 0),e.resourceName){var s=e.resourceName.split("?"),n=l(s,2),r=n[0],i=n[1];e.path=r&&"/"!==r?r:void 0,e.query=i,e.resourceName=void 0}return e.fragment=void 0,e}},Y={scheme:"wss",domainHost:Z.domainHost,parse:Z.parse,serialize:Z.serialize},K={},q="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",z="[0-9A-Fa-f]",X=s(s("%[EFef]"+z+"%"+z+z+"%"+z+z)+"|"+s("%[89A-Fa-f]"+z+"%"+z+z)+"|"+s("%"+z+z)),J=t("[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",'[\\"\\\\]'),Q=new RegExp(q,"g"),ee=new RegExp(X,"g"),te=new RegExp(t("[^]","[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]","[\\.]",'[\\"]',J),"g"),se=new RegExp(t("[^]",q,"[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"),"g"),ne=se;function re(e){var t=T(e);return t.match(Q)?t:e}var ie={scheme:"mailto",parse:function(e,t){var s=e,n=s.to=s.path?s.path.split(","):[];if(s.path=void 0,s.query){for(var r=!1,i={},o=s.query.split("&"),a=0,l=o.length;a<l;++a){var c=o[a].split("=");switch(c[0]){case"to":for(var h=c[1].split(","),u=0,d=h.length;u<d;++u)n.push(h[u]);break;case"subject":s.subject=H(c[1],t);break;case"body":s.body=H(c[1],t);break;default:r=!0,i[H(c[0],t)]=H(c[1],t)}}r&&(s.headers=i)}s.query=void 0;for(var p=0,m=n.length;p<m;++p){var f=n[p].split("@");if(f[0]=H(f[0]),t.unicodeSupport)f[1]=H(f[1],t).toLowerCase();else try{f[1]=A.toASCII(H(f[1],t).toLowerCase())}catch(e){s.error=s.error||"Email address's domain name can not be converted to ASCII via punycode: "+e}n[p]=f.join("@")}return s},serialize:function(e,t){var s,n=e,i=null!=(s=e.to)?s instanceof Array?s:"number"!=typeof s.length||s.split||s.setInterval||s.call?[s]:Array.prototype.slice.call(s):[];if(i){for(var o=0,a=i.length;o<a;++o){var l=String(i[o]),c=l.lastIndexOf("@"),h=l.slice(0,c).replace(ee,re).replace(ee,r).replace(te,_),u=l.slice(c+1);try{u=t.iri?A.toUnicode(u):A.toASCII(H(u,t).toLowerCase())}catch(e){n.error=n.error||"Email address's domain name can not be converted to "+(t.iri?"Unicode":"ASCII")+" via punycode: "+e}i[o]=h+"@"+u}n.path=i.join(",")}var d=e.headers=e.headers||{};e.subject&&(d.subject=e.subject),e.body&&(d.body=e.body);var p=[];for(var m in d)d[m]!==K[m]&&p.push(m.replace(ee,re).replace(ee,r).replace(se,_)+"="+d[m].replace(ee,re).replace(ee,r).replace(ne,_));return p.length&&(n.query=p.join("&")),n}},oe=/^([^\:]+)\:(.*)/,ae={scheme:"urn",parse:function(e,t){var s=e.path&&e.path.match(oe),n=e;if(s){var r=t.scheme||n.scheme||"urn",i=s[1].toLowerCase(),o=s[2],a=r+":"+(t.nid||i),l=E[a];n.nid=i,n.nss=o,n.path=void 0,l&&(n=l.parse(n,t))}else n.error=n.error||"URN can not be parsed.";return n},serialize:function(e,t){var s=t.scheme||e.scheme||"urn",n=e.nid,r=s+":"+(t.nid||n),i=E[r];i&&(e=i.serialize(e,t));var o=e,a=e.nss;return o.path=(n||t.nid)+":"+a,o}},le=/^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/,ce={scheme:"urn:uuid",parse:function(e,t){var s=e;return s.uuid=s.nss,s.nss=void 0,t.tolerant||s.uuid&&s.uuid.match(le)||(s.error=s.error||"UUID is not valid."),s},serialize:function(e,t){var s=e;return s.nss=(e.uuid||"").toLowerCase(),s}};E[j.scheme]=j,E[W.scheme]=W,E[Z.scheme]=Z,E[Y.scheme]=Y,E[ie.scheme]=ie,E[ae.scheme]=ae,E[ce.scheme]=ce,e.SCHEMES=E,e.pctEncChar=_,e.pctDecChars=T,e.parse=O,e.removeDotSegments=D,e.serialize=V,e.resolveComponents=B,e.resolve=function(e,t,s){var n=function(e,t){var s=e;if(t)for(var n in t)s[n]=t[n];return s}({scheme:"null"},s);return V(B(O(e,n),O(t,n),n,!0),n)},e.normalize=function(e,t){return"string"==typeof e?e=V(O(e,t),t):"object"===n(e)&&(e=O(V(e,t),t)),e},e.equal=function(e,t,s){return"string"==typeof e?e=V(O(e,s),s):"object"===n(e)&&(e=V(e,s)),"string"==typeof t?t=V(O(t,s),s):"object"===n(t)&&(t=V(t,s)),e===t},e.escapeComponent=function(e,t){return e&&e.toString().replace(t&&t.iri?a.ESCAPE:o.ESCAPE,_)},e.unescapeComponent=H,Object.defineProperty(e,"__esModule",{value:!0})}(t)},3336:e=>{"use strict";e.exports=$},976:e=>{"use strict";e.exports=DG},4469:e=>{"use strict";e.exports=grok},701:e=>{"use strict";e.exports=rxjs},442:e=>{"use strict";e.exports=rxjs.operators},3870:e=>{"use strict";e.exports=ui},6414:e=>{"use strict";e.exports=wu},4775:e=>{"use strict";e.exports=JSON.parse('{"$id":"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#","description":"Meta-schema for $data reference (JSON AnySchema extension proposal)","type":"object","required":["$data"],"properties":{"$data":{"type":"string","anyOf":[{"format":"relative-json-pointer"},{"format":"json-pointer"}]}},"additionalProperties":false}')},996:e=>{"use strict";e.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/applicator","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/applicator":true},"$dynamicAnchor":"meta","title":"Applicator vocabulary meta-schema","type":["object","boolean"],"properties":{"prefixItems":{"$ref":"#/$defs/schemaArray"},"items":{"$dynamicRef":"#meta"},"contains":{"$dynamicRef":"#meta"},"additionalProperties":{"$dynamicRef":"#meta"},"properties":{"type":"object","additionalProperties":{"$dynamicRef":"#meta"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$dynamicRef":"#meta"},"propertyNames":{"format":"regex"},"default":{}},"dependentSchemas":{"type":"object","additionalProperties":{"$dynamicRef":"#meta"},"default":{}},"propertyNames":{"$dynamicRef":"#meta"},"if":{"$dynamicRef":"#meta"},"then":{"$dynamicRef":"#meta"},"else":{"$dynamicRef":"#meta"},"allOf":{"$ref":"#/$defs/schemaArray"},"anyOf":{"$ref":"#/$defs/schemaArray"},"oneOf":{"$ref":"#/$defs/schemaArray"},"not":{"$dynamicRef":"#meta"}},"$defs":{"schemaArray":{"type":"array","minItems":1,"items":{"$dynamicRef":"#meta"}}}}')},6795:e=>{"use strict";e.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/content","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/content":true},"$dynamicAnchor":"meta","title":"Content vocabulary meta-schema","type":["object","boolean"],"properties":{"contentEncoding":{"type":"string"},"contentMediaType":{"type":"string"},"contentSchema":{"$dynamicRef":"#meta"}}}')},235:e=>{"use strict";e.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/core","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/core":true},"$dynamicAnchor":"meta","title":"Core vocabulary meta-schema","type":["object","boolean"],"properties":{"$id":{"$ref":"#/$defs/uriReferenceString","$comment":"Non-empty fragments not allowed.","pattern":"^[^#]*#?$"},"$schema":{"$ref":"#/$defs/uriString"},"$ref":{"$ref":"#/$defs/uriReferenceString"},"$anchor":{"$ref":"#/$defs/anchorString"},"$dynamicRef":{"$ref":"#/$defs/uriReferenceString"},"$dynamicAnchor":{"$ref":"#/$defs/anchorString"},"$vocabulary":{"type":"object","propertyNames":{"$ref":"#/$defs/uriString"},"additionalProperties":{"type":"boolean"}},"$comment":{"type":"string"},"$defs":{"type":"object","additionalProperties":{"$dynamicRef":"#meta"}}},"$defs":{"anchorString":{"type":"string","pattern":"^[A-Za-z_][-A-Za-z0-9._]*$"},"uriString":{"type":"string","format":"uri"},"uriReferenceString":{"type":"string","format":"uri-reference"}}}')},2567:e=>{"use strict";e.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/format-annotation","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/format-annotation":true},"$dynamicAnchor":"meta","title":"Format vocabulary meta-schema for annotation results","type":["object","boolean"],"properties":{"format":{"type":"string"}}}')},1233:e=>{"use strict";e.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/meta-data","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/meta-data":true},"$dynamicAnchor":"meta","title":"Meta-data vocabulary meta-schema","type":["object","boolean"],"properties":{"title":{"type":"string"},"description":{"type":"string"},"default":true,"deprecated":{"type":"boolean","default":false},"readOnly":{"type":"boolean","default":false},"writeOnly":{"type":"boolean","default":false},"examples":{"type":"array","items":true}}}')},5568:e=>{"use strict";e.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/unevaluated","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/unevaluated":true},"$dynamicAnchor":"meta","title":"Unevaluated applicator vocabulary meta-schema","type":["object","boolean"],"properties":{"unevaluatedItems":{"$dynamicRef":"#meta"},"unevaluatedProperties":{"$dynamicRef":"#meta"}}}')},1968:e=>{"use strict";e.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/meta/validation","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/validation":true},"$dynamicAnchor":"meta","title":"Validation vocabulary meta-schema","type":["object","boolean"],"properties":{"type":{"anyOf":[{"$ref":"#/$defs/simpleTypes"},{"type":"array","items":{"$ref":"#/$defs/simpleTypes"},"minItems":1,"uniqueItems":true}]},"const":true,"enum":{"type":"array","items":true},"multipleOf":{"type":"number","exclusiveMinimum":0},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"number"},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"number"},"maxLength":{"$ref":"#/$defs/nonNegativeInteger"},"minLength":{"$ref":"#/$defs/nonNegativeIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"maxItems":{"$ref":"#/$defs/nonNegativeInteger"},"minItems":{"$ref":"#/$defs/nonNegativeIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"maxContains":{"$ref":"#/$defs/nonNegativeInteger"},"minContains":{"$ref":"#/$defs/nonNegativeInteger","default":1},"maxProperties":{"$ref":"#/$defs/nonNegativeInteger"},"minProperties":{"$ref":"#/$defs/nonNegativeIntegerDefault0"},"required":{"$ref":"#/$defs/stringArray"},"dependentRequired":{"type":"object","additionalProperties":{"$ref":"#/$defs/stringArray"}}},"$defs":{"nonNegativeInteger":{"type":"integer","minimum":0},"nonNegativeIntegerDefault0":{"$ref":"#/$defs/nonNegativeInteger","default":0},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"uniqueItems":true,"default":[]}}}')},2577:e=>{"use strict";e.exports=JSON.parse('{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://json-schema.org/draft/2020-12/schema","$vocabulary":{"https://json-schema.org/draft/2020-12/vocab/core":true,"https://json-schema.org/draft/2020-12/vocab/applicator":true,"https://json-schema.org/draft/2020-12/vocab/unevaluated":true,"https://json-schema.org/draft/2020-12/vocab/validation":true,"https://json-schema.org/draft/2020-12/vocab/meta-data":true,"https://json-schema.org/draft/2020-12/vocab/format-annotation":true,"https://json-schema.org/draft/2020-12/vocab/content":true},"$dynamicAnchor":"meta","title":"Core and Validation specifications meta-schema","allOf":[{"$ref":"meta/core"},{"$ref":"meta/applicator"},{"$ref":"meta/unevaluated"},{"$ref":"meta/validation"},{"$ref":"meta/meta-data"},{"$ref":"meta/format-annotation"},{"$ref":"meta/content"}],"type":["object","boolean"],"$comment":"This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.","properties":{"definitions":{"$comment":"\\"definitions\\" has been replaced by \\"$defs\\".","type":"object","additionalProperties":{"$dynamicRef":"#meta"},"deprecated":true,"default":{}},"dependencies":{"$comment":"\\"dependencies\\" has been split and replaced by \\"dependentSchemas\\" and \\"dependentRequired\\" in order to serve their differing semantics.","type":"object","additionalProperties":{"anyOf":[{"$dynamicRef":"#meta"},{"$ref":"meta/validation#/$defs/stringArray"}]},"deprecated":true,"default":{}},"$recursiveAnchor":{"$comment":"\\"$recursiveAnchor\\" has been replaced by \\"$dynamicAnchor\\".","$ref":"meta/core#/$defs/anchorString","deprecated":true},"$recursiveRef":{"$comment":"\\"$recursiveRef\\" has been replaced by \\"$dynamicRef\\".","$ref":"meta/core#/$defs/uriReferenceString","deprecated":true}}}')},98:e=>{"use strict";e.exports=JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#","$id":"http://json-schema.org/draft-07/schema#","title":"Core schema meta-schema","definitions":{"schemaArray":{"type":"array","minItems":1,"items":{"$ref":"#"}},"nonNegativeInteger":{"type":"integer","minimum":0},"nonNegativeIntegerDefault0":{"allOf":[{"$ref":"#/definitions/nonNegativeInteger"},{"default":0}]},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"uniqueItems":true,"default":[]}},"type":["object","boolean"],"properties":{"$id":{"type":"string","format":"uri-reference"},"$schema":{"type":"string","format":"uri"},"$ref":{"type":"string","format":"uri-reference"},"$comment":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"default":true,"readOnly":{"type":"boolean","default":false},"examples":{"type":"array","items":true},"multipleOf":{"type":"number","exclusiveMinimum":0},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"number"},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"number"},"maxLength":{"$ref":"#/definitions/nonNegativeInteger"},"minLength":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"additionalItems":{"$ref":"#"},"items":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/schemaArray"}],"default":true},"maxItems":{"$ref":"#/definitions/nonNegativeInteger"},"minItems":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"contains":{"$ref":"#"},"maxProperties":{"$ref":"#/definitions/nonNegativeInteger"},"minProperties":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"required":{"$ref":"#/definitions/stringArray"},"additionalProperties":{"$ref":"#"},"definitions":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"properties":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$ref":"#"},"propertyNames":{"format":"regex"},"default":{}},"dependencies":{"type":"object","additionalProperties":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/stringArray"}]}},"propertyNames":{"$ref":"#"},"const":true,"enum":{"type":"array","items":true,"minItems":1,"uniqueItems":true},"type":{"anyOf":[{"$ref":"#/definitions/simpleTypes"},{"type":"array","items":{"$ref":"#/definitions/simpleTypes"},"minItems":1,"uniqueItems":true}]},"format":{"type":"string"},"contentMediaType":{"type":"string"},"contentEncoding":{"type":"string"},"if":{"$ref":"#"},"then":{"$ref":"#"},"else":{"$ref":"#"},"allOf":{"$ref":"#/definitions/schemaArray"},"anyOf":{"$ref":"#/definitions/schemaArray"},"oneOf":{"$ref":"#/definitions/schemaArray"},"not":{"$ref":"#"}},"default":true}')}},t={};function s(n){var r=t[n];if(void 0!==r)return r.exports;var i=t[n]={id:n,loaded:!1,exports:{}};return e[n].call(i.exports,i,i.exports,s),i.loaded=!0,i.exports}s.m=e,s.amdO={},s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.u=e=>e+".js",s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;s.g.importScripts&&(e=s.g.location+"");var t=s.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");if(n.length)for(var r=n.length-1;r>-1&&!e;)e=n[r--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),s.p=e})(),s.b=document.baseURI||self.location.href,s.nc=void 0;var n=s(3348);bio=n})();
9
9
  //# sourceMappingURL=package.js.map