New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@techandsoftware/teletext

Package Overview
Dependencies
Maintainers
1
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@techandsoftware/teletext - npm Package Compare versions

Comparing version 0.0.1 to 0.5.1

demo/prerendered_splash.svg

2

dist/teletext.min.js
// SPDX-FileCopyrightText: (c) 2021 Tech and Software Ltd.
// SPDX-FileCopyrightText: (c) 2017 dosaygo
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-uk.ltd.TechAndSoftware-1.0
const t=new Set(["Uint1Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","UInt32Array","Float32Array","Float64Array"]),s=Uint8Array,e=Symbol();class i{constructor(t,{length:e=null,buffer:i=null,byteOffset:r=0,byteLength:n=null}={}){let h;i?e=8*(n||i.byteLength):e||(e=0);const o=s.BYTES_PER_ELEMENT,_=8*o,a=_-1,l=(t=>{let s=0;for(;t>>=1;)s++;return s})(_),c=Math.max(1,e+a>>l);i?h=new s(i,r,c):(i=new ArrayBuffer(o*c),h=new s(i)),Object.assign(this,{buffer:i,byteOffset:r,length:e,wordSize:_,wordCount:c,wordSizeMask:a,wordSizeShift:l,internal:h})}toArray(){const t=new Uint8Array(this.length);for(let s=0;s<this.wordCount;s++){const e=this.internal[s];for(let i=s*this.wordSize;i<(s+1)*this.wordSize;i++)t[i]=this.getBit(i,e)}return t}getBit(t,s){if(!(t>=this.length))return null==s&&(s=this.internal[t>>this.wordSizeShift]),s>>(t&this.wordSizeMask)&1}setBit(t,s){if(t>=this.length)return;const e=t>>this.wordSizeShift,i=t&this.wordSizeMask,r=this.internal[e];let n=r;return n|=s<<i,n&=~((1&~s)<<i),r!==n&&(this.internal[e]=n),s}}class r{constructor(t,s=0,r=null){let h,l,c;switch(a(t)){case"Number":h=t=~~t,l=new i(this,{length:h});break;case"ArrayBuffer":l=new i(this,{buffer:t,byteOffset:s,byteLength:r});break;case"Undefined":case"Null":case"RegExp":case"Infinity":h=0,l=new i(this,{length:h});break;case"Array":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"UInt32Array":case"Float32Array":case"Float64Array":case"Uint1Array":case"Object":default:c=o(t),l=new i(this,{length:c.length}),c.forEach(((t,s)=>l.setBit(s,_(t))))}return this[e]=l,new n(this)}static get BYTES_PER_ELEMENT(){return.125}static get name(){return"Uint1Array"}static get length(){return 0}static get[Symbol.species](){return this}static[Symbol.hasInstance](t){return t.__proto__=this}static from(t){const s=o(t);return new r(s)}static of(...t){return r.from(t)}get buffer(){return this[e].buffer}get byteLength(){return this.length+7>>3}get byteOffset(){return this[e].byteOffset}get length(){return this[e].length}get[Symbol.toStringTag](){return"Uint1Array"}copyWithin(t,s=0,e=this.length){if(!Number.isInteger(t))return this;const i=new Uint8Array(e-s);for(let t=s;t<e;t++)i[t-s]=this[t];return this.set(i,t),this}entries(){return this[e].toArray().entries()}every(...t){return this[e].toArray().every(...t)}fill(t,s=0,e=this.length){for(let i=s;i<e;i++)this[i]=t;return this}filter(...t){return new r(this[e].toArray().filter(...t))}find(...t){return this[e].toArray().find(...t)}findIndex(...t){return this[e].toArray().findIndex(...t)}forEach(...t){this[e].toArray().forEach(...t)}includes(...t){return this[e].toArray().includes(...t)}indexOf(...t){return this[e].toArray().indexOf(...t)}join(...t){return this[e].toArray().join(...t)}keys(...t){return this[e].toArray().keys(...t)}lastIndexOf(...t){return this[e].toArray().lastIndexOf(...t)}map(...t){return new r(this[e].toArray().map(...t))}reduce(...t){return this[e].toArray().reduce(...t)}reduceRight(...t){return this[e].toArray().reduceRight(...t)}reverse(){const t=this[e].toArray().reverse();return this.set(t),this}set(s,e=0){if(!Number.isInteger(e))return;const i=a(s);if("Array"!==i&&!t.has(i))return;const r=Math.min(s.length+e,this.length);s=s.map((t=>_(t)));for(let t=e;t<r;t++)this[t]=s[t-e]}slice(...t){return new r(this[e].toArray().slice(...t))}sort(...t){const s=this[e].toArray().sort(...t);return this.set(s),this}subarray(...t){return new r(this[e].toArray().subarray(...t))}values(...t){return this[e].toArray().values(...t)}toLocaleString(...t){return Array.from(this).toLocaleString()}toString(){return""+Array.from(this)}[Symbol.iterator](){return this[e].toArray()[Symbol.iterator]()}valueOf(){return this}toJSON(){return Array.from(this)}}function n(t){const s=t[e];return new Proxy(t,{get(e,i,r){const n="string"==typeof i?parseInt(i):i;return Number.isInteger(n)?s.getBit(n):Reflect.get(t,i)},set(e,i,r,n){const h="string"==typeof i?parseInt(i):i;return Number.isInteger(h)?(s.setBit(h,_(r)),!0):Reflect.set(t,i,r)}})}const h=/\[object (\w+)]/;function o(t){const s=[];for(let e of t){const t=_(e);s.push(t)}return s}function _(t){return"number"!=typeof t||Number.isNaN(t)?new Boolean(t).valueOf():t%2}function a(t){const s=t&&t.constructor?t.constructor.name:null,e=h.exec(Object.prototype.toString.call(t))[1];return e!==s&&s?s:e}const l={};function c(t){if(t in l)return l[t];const s=[...t.charCodeAt(0).toString(2).padStart(8,"0")].reverse();return l[t]=Number.parseInt(s.join(""),2),l[t]}const A={ENGINEERING:"QIECBAgQIIcWLGg2EDdy3QIKnXKgYtUE7f2QA2TB0wYr2DECAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAYMS54fzJmix4-YCDToOLOjyZ0WLSkzo6AkcGHuZUcRHlB4dgyAAQAEABAAQAEABAAQAEABAAQAEABAAQAEABAAQAEABAAWDP9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9_YNCho9zImSoAqBGoAp0FUy8-iChhz5UCA4MPEuZYgTAFyAFg1_f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f2DYCAAoACACeQHkBdYTJlixIkSKlSJEoUKIEBQABAAQAEABYN_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_39g4AgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgGDn9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9_YsAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIBix_f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f2LICAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAYs_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_39i0AgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgGLX9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9_Ytq-jT0yg7OXZs39w0Pzh3Ao_LLl3BZuHPl3dMIGllyBIWzrlLmkKJGTSJUycsoUqlZJYtXLzLBiyZlWjVs3IuHLp2UePXz9AgQokaBIlTJ0ChSqVoFi1cvQMGLJmgaNWzdA4cunaB49fP0ECDChoIkWNHQSJMqWgmTZ09BQo0qaCpVrV0FizatoLl29fQYMOLGgyZc2dBo06taDZt3b0HDjy5oOnXt3QePPr2g-ff38pgw4sZHJlzZyujTq1ktm3dvNcOPLmW6de3cn48-vZf59_fwZiHv3Y8uHYIjbMPPQDVCxcLf4E0-mXDk8mI-_dlFCn5a9_DKr6q-qvqr6q-qvqr6AFS390DJoGQKr6q-qvqr6q-qvqr6o",ADVERT:"QIECBAgQIJ9KDDmRUDZi3QU8PRk1QQeHIHDaIEDJiwYumDACdDwcnbLy6aeeXbl3dECBAgQIECBAgQIECBAgQIHwZkvcoCx0og8LNGjYwQPEjzpoWaNjBA82YHnTQwabEjTpowPEiBAgLHSiBbs1atjFA9SPe2pZqQNUHX1qQatSlrqQNW-5UsaIECAsdKIFidUqQJUCVAlVKlipchQJUCJanVIEqpAlSqlC5CgQIEB0ogQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQHSKBAgQYEH7ogQaGCApw_fEm54R3PCm5JuSKHoFUEVIECAudIoECBB6-___TB-_v0JTU_WqkZHFyQKHmjYgYBECpAqQIC50igQIEH___3_-iD__6FFSAig-IP6JCg26lzRr3avEgFUgLnSKBAg1f1X9lv_9NSBAgI6G-HX1V_EqBUqQJUqXBzagVSAudIoECD9_Qa2qL__6IMDzoq682qdAgQIEARAgQIECBAgVIC50igQIP_9AiaoFX__0VfV_1kjQIECBAgQBECBAgAoECpAgLnSKBBq__0CBCgQa___oreokCBAgQIECBAgQBECBAgVIECAudIoEHr__QIECBAg3_36FAgQIECBAgQIECAIgQIFSBAgQIAZ0igQf_7dAgKIECAinKf9bTR9QIv-N6i_ofzNagQIECBAgJnSKDR__tUBRAoe6NiBB_XYf_rqg_q2iD-gRb-iBAgQIECAmdIoNX_-1QFECDrq9IMH9h664P_D-w34P7DZ4ToECBAgQICZ0ig___5TQ8SfEHzQ82MPCzpoedEHzA82MPjDQ0-LNDSk0JnSOD___lNXVh_Qf9T3cx_oP-prqa_1S3Y0_q_zX-s1NdTUmdI6v_9-U1NUH9B_1NdTX-g_6mvpL_wMNTX-g1Nf6DAz1tSZ0j-_v0JREjQokaFEhRIUSNCiRoUCNAjRoEaBEhRo0CNGgBnSP9OgQFECCNPpIIVKfDkVaUWmggzoiCFPny5M6PTQIECAGdIjUAGlJnR0DBu5coGrFm0YMEE-kgpxYqChBjxUDNuwQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAy92np007s6AFSy9tOXvzQA7O_ryQTd-7L5DQVtpBJ3ZMvg",UK:"QIECBAgQIIcWLGg2EDFy2QIJu_cgZNUETLjQA2TN0xYr2DAodJIECBAgQIEGDB4_PUCBAgQIECBAgQIECBAgQIEANkvaMih0kgQIECDA1Qfv__OgQYGCBAgQIECBAgQIECBAgQIECBAgKHSSBAgQIH6FR-__-v7___oECBAgQIEAORPmxUE6LXpoECAodJIECBAoQKum7______9-gQIECBAgQA82_Zs39-aB8-QIAh0kgQIECBAgSev_____v06BAgQIECBAgQIECBAgQIECBAgKHSSBAgQIECBR00____-_w9GCBAgQIECBAgQIECBAgQIECAodJIECBAgQIECD8rx________ECBAgQIECBAgQIECBAgQICh0kgQIECBAgQLETRlv_______6oECBAgQIECBAgQIECBAgKHSyBAgQIHGQlwYIEH_-_x_____9-dECBAgQIECBAgQIECAIdLIECDAmJbfz_-0RJ0qBV________7sECBAgQIECBAgQIAh0sgQIMzAl-__fX5Sg0JECvX______586IECBAgQIECBAgCHSyBAgwJiW9OjX_0qBAgQIEX________-l8fPjBAgQIECAIdLIEHBYhQIECBQxQICWDhg5fv____________tUCBAgQIAh0sgzIECBAgQIEGlAgQEtP_______________-lQIECBAgCHSyBUwQIECBAgQakCBASQqv_____________-6FAgQIECAIdLIECJygQIECBAgaoEBJBg______________5-OiBAgQIAh0sgQKGKBAgQIEHBKgJIMH7____8v__________QoECBAgCHSyBRmQIECBA4RoECAkgVoVaNel________r16FAgQIECAIdLINCFAgwOEyBAgQICSBAgQePn7___r06RAgQIECBAgQIAh0sgQLeKxCgQIECBAgJIECDR__v0aNGhQIECBAgQIECBAgCHSSBAgQIECBAgQIECBAgQYP3_-1QIECBAgQIECBAgQIECAIdJIECBAgQIECBAgQIECBB6boUSBAgQIECBAgQIECBAgQIAh0kgQIECBAgQIECBAgQIFStAgQIECBAgQIECBAgQIECBAgAzsvjognZe_MFIy4cmzTuy8wdTfwQU-G_l0DVKy-lhyad6A"},u="http://www.w3.org/2000/svg";let g=0;class f{constructor(){}tt(){return this.st}et(){this.st=null}attr(t,s){if("object"==typeof t)for(const s in t)null==t[s]?this.st.removeAttribute(s):this.st.setAttribute(s,t[s]);else{if(void 0===s)return this.st.getAttribute(t);null==s?this.st.removeAttribute(t):this.st.setAttribute(t,s)}return this}addClass(t){if(!this.hasClass(t)){const s=this.classes();s.push(t),this.st.setAttribute("class",s.join(" "))}return this}hasClass(t){return-1!==this.classes().indexOf(t)}classes(){const t=this.st.getAttribute("class");return null==t?[]:t.split(" ")}removeClass(t){return this.hasClass(t)&&this.st.setAttribute("class",this.classes().filter((s=>s!==t)).join(" ")),this}toggleClass(t){return this.hasClass(t)?this.removeClass(t):this.addClass(t),this}data(t,s){if("object"==typeof t)for(const s in t)null==t[s]?delete this.st.dataset[s]:this.st.dataset[s]=t[s];else{if(void 0===s)return this.st.dataset[t];null==s?delete this.st.dataset[t]:this.st.dataset[t]=s}return this}}class d extends f{constructor(){return super(),this.st=document.createElementNS(u,"svg"),this.st.setAttribute("xmlns",u),this}addTo(t){return document.querySelector(t).appendChild(this.st),this}viewbox(t){return this.st.setAttribute("viewBox",t),this}size(t,s){return this.st.setAttribute("width",t),this.st.setAttribute("height",s),this}style(t){const s=document.createElementNS(u,"style");return s.append(t),this.st.append(s),this}group(){const t=new C;return this.st.append(t.tt()),t}width(){return this.st.clientWidth}height(){return this.st.clientHeight}symbol(t){const s=new b(t);return this.st.append(s.tt()),s}}class C extends f{constructor(){return super(),this.st=document.createElementNS(u,"g"),this.it=[],this}group(){const t=new C;return this.st.append(t.tt()),this.it.push(t),t}plain(t){const s=new y(t);return this.st.append(s.tt()),this.it.push(s),s}defs(){const t=new B;return this.st.append(t.tt()),t}rect(t,s){const e=new Q(t,s);return this.st.append(e.tt()),this.it.push(e),e}last(){return this.it[this.it.length-1]}children(){return this.it}clipWith(t){return this.st.setAttribute("clip-path",`url("#${t.tt().id}")`),this}unclip(){return this.st.removeAttribute("clip-path"),this}remove(){this.st.parentNode&&this.st.parentNode.removeChild(this.st),this.st=null,this.it.forEach((t=>t.et())),this.it=[]}line(t,s,e,i){const r=new w(t,s,e,i);return this.st.append(r.tt()),this.it.push(r),r}use(t){const s=new E(t);return this.st.append(s.tt()),this.it.push(s),s}image(t,s){const e=new I(t,s);return this.st.append(e.tt()),this.it.push(e),e}}class I extends f{constructor(t,s){return super(),this.st=document.createElementNS(u,"image"),this.st.setAttribute("width",parseInt(t)),this.st.setAttribute("height",parseInt(s)),this}}class E extends f{constructor(t){return super(),this.st=document.createElementNS(u,"use"),this.st.setAttribute("href","#"+t),this}fill(t){return this.st.setAttribute("fill",t),this}move(t,s){return this.st.setAttribute("x",t),this.st.setAttribute("y",s),this}}class b extends f{constructor(t){return super(),this.st=document.createElementNS(u,"symbol"),this.st.setAttribute("id",t),this}rect(t,s){const e=new Q(t,s);return this.st.append(e.tt()),e}}class y extends f{constructor(t){return super(),this.st=document.createElementNS(u,"text"),this.st.append(t),this}plain(t){return this.st.textContent=t,this}fill(t){return this.st.setAttribute("fill",t),this}}class B extends f{constructor(){return super(),this.st=document.createElementNS(u,"defs"),this}clip(){const t=new m;return this.st.append(t.tt()),t}find(t){return[...this.st.querySelectorAll(t)].map(p)}rect(t,s){const e=new Q(t,s);return this.st.append(e.tt()),e}}class m extends f{constructor(){return super(),this.st=document.createElementNS(u,"clipPath"),this.st.setAttribute("id","clipPath-"+g),g++,this}children(){return[...this.st.children].map(p)}add(t){this.st.appendChild(t.tt())}}class Q extends f{constructor(t,s){if(super(),t instanceof SVGElement)return this.st=t,this;const e=t;return this.st=document.createElementNS(u,"rect"),this.st.setAttribute("width",parseInt(e)),this.st.setAttribute("height",parseInt(s)),this}fill(t){return this.st.setAttribute("fill",t),this}move(t,s){return this.st.setAttribute("x",t),this.st.setAttribute("y",s),this}width(t){return void 0===t?parseInt(this.st.getAttribute("width")):(this.st.setAttribute("width",parseInt(t)),this)}height(t){return void 0===t?parseInt(this.st.getAttribute("height")):(this.st.setAttribute("height",parseInt(t)),this)}remove(){this.st.parentNode&&this.st.parentNode.removeChild(this.st),this.st=null}}class w extends f{constructor(t,s,e,i){return super(),this.st=document.createElementNS(u,"line"),this.st.setAttribute("x1",t),this.st.setAttribute("y1",s),this.st.setAttribute("x2",e),this.st.setAttribute("y2",i),this}}function p(t){let s;switch(t.constructor.name){case"SVGRectElement":s=new Q(t);break;default:throw Error("SVG:wrapSVGElement Unable to wrap SVG element of type "+t.constructor.name)}return s}const S={BLACK:Symbol(),RED:Symbol(),GREEN:Symbol(),YELLOW:Symbol(),BLUE:Symbol(),MAGENTA:Symbol(),CYAN:Symbol(),WHITE:Symbol()};Object.freeze(S);const x={ALPHA:Symbol(),MOSAIC_CONTIGUOUS:Symbol(),MOSAIC_SEPARATED:Symbol()};Object.freeze(x);const U={NORMAL_SIZE:Symbol(),DOUBLE_HEIGHT:Symbol(),DOUBLE_WIDTH:Symbol(),DOUBLE_SIZE:Symbol()};Object.freeze(U);class k{static charFromTextColour(t){if(t in N)return N[t];throw Error("Attributes.charFromTextColour: bad colour: "+t)}static charFromGraphicColour(t){if(t in L)return L[t];throw Error("Attributes.charFromGraphicColour: bad colour")}static charFromAttribute(t){if(t in H)return H[t];throw Error("Attributes.charFromAttribute: bad attribute")}static attribFromChar(t,s){let e=null,i=null;return s in D&&M[t].includes(s.charCodeAt(0))?s in R?(e=k.TEXT_COLOUR,i=D[s]):s in F?(e=k.MOSAIC_COLOUR,i=D[s]):e=D[s]:s.charCodeAt(0)<=31&&(e=k.UNKNOWN),{attribute:e,colour:i}}static fillColourFromColourAttrib(t){return v[t]}}k.TEXT_COLOUR=x.ALPHA,k.MOSAIC_COLOUR=Symbol(),k.NEW_BACKGROUND=Symbol(),k.BLACK_BACKGROUND=Symbol(),k.CONTIGUOUS_GRAPHICS=x.MOSAIC_CONTIGUOUS,k.SEPARATED_GRAPHICS=x.MOSAIC_SEPARATED,k.ESC=Symbol(),k.FLASH=Symbol(),k.STEADY=Symbol(),k.NORMAL_SIZE=U.NORMAL_SIZE,k.DOUBLE_HEIGHT=U.DOUBLE_HEIGHT,k.DOUBLE_WIDTH=U.DOUBLE_WIDTH,k.DOUBLE_SIZE=U.DOUBLE_SIZE,k.CONCEAL=Symbol(),k.HOLD_MOSAICS=Symbol(),k.RELEASE_MOSAICS=Symbol(),k.START_BOX=Symbol(),k.END_BOX=Symbol(),k.UNKNOWN=Symbol();const v={[S.BLACK]:"#000",[S.RED]:"#f00",[S.GREEN]:"#0f0",[S.YELLOW]:"#ff0",[S.BLUE]:"#00f",[S.MAGENTA]:"#f0f",[S.CYAN]:"#0ff",[S.WHITE]:"#fff"};Object.freeze(v);const R={"\0":S.BLACK,"":S.RED,"":S.GREEN,"":S.YELLOW,"":S.BLUE,"":S.MAGENTA,"":S.CYAN,"":S.WHITE};Object.freeze(R);const F={"":S.BLACK,"":S.RED,"":S.GREEN,"":S.YELLOW,"":S.BLUE,"":S.MAGENTA,"":S.CYAN,"":S.WHITE};Object.freeze(F);const D={"\b":k.FLASH,"\t":k.STEADY,"\n":k.END_BOX,"\v":k.START_BOX,"\f":k.NORMAL_SIZE,"\r":k.DOUBLE_HEIGHT,"":k.DOUBLE_WIDTH,"":k.DOUBLE_SIZE,"":k.CONCEAL,"":k.CONTIGUOUS_GRAPHICS,"":k.SEPARATED_GRAPHICS,"":k.ESC,"":k.BLACK_BACKGROUND,"":k.NEW_BACKGROUND,"":k.HOLD_MOSAICS,"":k.RELEASE_MOSAICS},N={};for(const t in R)N[R[t]]=t,D[t]=R[t];Object.freeze(N);const L={};for(const t in F)L[F[t]]=t,D[t]=F[t];Object.freeze(L),Object.freeze(D);const H={};for(const t in D)H[D[t]]=t;Object.freeze(H);const j={0:Symbol(),1:Symbol(),1.5:Symbol(),2.5:Symbol()};Object.freeze(j);const M={};M[j[0]]=[1,2,3,4,5,6,7,8,9,17,18,19,20,21,22,23],M[j[1]]=[...M[j[0]]].concat([10,11,12,13,24,25,26,27,28,29,30,31]),M[j[1.5]]=[...M[j[1]]].concat([0,16]),M[j[2.5]]=[...M[j[1.5]]].concat([14,15]),Object.freeze(M);const O={rt:{nt:10.4,ht:-5.2},ot:{nt:10,ht:-4.5}};Object.freeze(O);class G{constructor(t){this._t=(new d).viewbox("0 0 399 249").size(800,666.6666666666666).attr({preserveAspectRatio:"none",style:'font-family: "sans-serif"'}).style("@font-face {\nfont-family: 'Unscii';\nsrc: url('fonts/unscii-16.woff') format('woff'), \nurl('fonts/unscii-16.ttf') format('truetype'),\nurl('fonts/unscii-16.otf') format('opentype');\nunicode-range: U+0000-00FF, U+2022, U+2500, U+2502, U+250C, U+2510, U+2514, U+2518, U+251C, U+251D, U+2524, U+2525, U+252C, U+252F, U+2534, U+2537, U+253C, U+253F, U+2588, U+258C, U+2590, U+2592, U+25CB, U+25CF, U+25E2-25E5, U+2B60-2B63, U+E0C0-E0FF, U+1FB00-1FB70, U+1FB75, U+1FBA0-1FBA7;\n-webkit-font-smoothing: none;\nfont-smooth: never;\n}\n@font-face {\nfont-family: 'Bedstead';\nsrc: url('fonts/bedstead.otf') format('opentype');\nunicode-range: U+0000-00FF;\n}\n@keyframes blink {\nto {\nvisibility: hidden;\n}\n}\n@keyframes fancyblink {\nfrom {\nfilter: none;\nopacity: 0.7;\n}\n33% {\nfilter: none;\nopacity: 1;\n}\n66% {\nfilter: blur(0px);\nopacity: 1;\n}\n95% {\nfilter: blur(4px);\nopacity: 0;\n}\nto {\nfilter: blur(0px);\nopacity: 0;\n}\n}\n#textlayer {\nfont-size: 10px;\n}\n.mosaic {\nfont-family: 'Unscii';\nfont-size: 10.3px;\n}\n.mosaic_separated {\nfont-family: 'Unscii';\nfont-size: 10px;\n}\n.flash_flashing .flash {\n/* animation: blink 2s steps(3, start) infinite; */\nanimation: fancyblink 2s linear infinite;\n}\n.conceal_concealed .conceal {\nvisibility: hidden;\n}\nsvg #background {\ntransition-property: opacity;\ntransition-duration: 0.25s;\n}\nsvg {\nbackground-color: transparent;\n}\nsvg use {\nshape-rendering: crispEdges;\n}\nrect { color: orange; }\n"),this.d=this._t.group().attr("class","conceal_concealed flash_flashing"),this.at=1.2,this.lt(),this.ct(),this.At=null,this.ut=t,this.gt=this.ut.onSet.attach((()=>this.ft())),this.dt=!1,this.Ct=!1,this.It=!1,this.Et={}}addTo(t){this._t.addTo(t)}detach(){this.ut.onSet.detach(this.gt),this.gt=null}ft(){let t=!1,s=!1;this.It=!1,this.d.removeClass("flash_flashing"),this.bt.forEach(((e,i)=>{let r=!1;if(this.yt(i),t)return t=!1,void this.Bt(e,i);const n=this.ut.getRow(i);let h,o;e.forEach(((t,e)=>{if(r)return r=!1,this.Qt(t),this.wt(i),void(o&&this.St());const _=n.getCell(e),a=k.fillColourFromColourAttrib(_.bgColour),l=_.isMosaicByte(),c=k.fillColourFromColourAttrib(_.fgColour),A=this.xt(_.type,l);this.Ut(t,_,A,c,e,i,l),_.boxed&&(o?this.St():this.kt(i,e),this.It=!0),h==a?this.wt(i):this.vt(i,e,a),_.size!=U.DOUBLE_WIDTH&&_.size!=U.DOUBLE_SIZE||(r=!0),h=a,o=_.boxed,_.flashing&&(s=!0)})),n.doubleHeight?(this.Rt(i),this.Ft(),t=!0):t=!1,this.Dt(i)})),"Nt"in this.Et&&this.Et.Nt(this._t.width(),this._t.height()),this.d.addClass("conceal_concealed"),s&&setTimeout((()=>this.d.addClass("flash_flashing")),100),this.Lt()}yt(t){this.Ht(t),this.jt(t)}Bt(t,s){"Mt"in this.Et&&this.Et.Mt(t.length,s),t.forEach((t=>this.Qt(t)))}Qt(t){t.plain(" ").attr({dx:null,dy:null,textLength:null,lengthAdjust:null,"text-anchor":null,transform:null,class:null})}Ut(t,s,e,i,r,n,h){this.Ot(t,s,e,i,r,n),s.type==x.MOSAIC_CONTIGUOUS&&h?t.addClass("mosaic"):s.type==x.MOSAIC_SEPARATED&&h&&t.addClass("mosaic_separated")}Ot(t,s,e,i,r,n){t.plain(s.char).attr(e).fill(i),s.size==U.DOUBLE_HEIGHT?t.attr("transform",`translate(0 ${Y(n)}) scale(1 2)`):s.size==U.DOUBLE_WIDTH?t.attr("transform",`translate(${V(r)} 0) scale(2 1)`):s.size==U.DOUBLE_SIZE&&t.attr("transform",`translate(${V(r)} ${Y(n)}) scale(2 2)`),s.flashing&&t.addClass("flash"),s.concealed&&t.addClass("conceal")}reveal(){this.d.toggleClass("conceal_concealed")}setFont(t){let s='"'+t+'"';"native"==t?s='-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif':"default"==t&&(s="sans-serif"),this._t.attr("style","font-family: "+s)}grid(){this.At?(this.At.remove(),this.At=null):this.Gt()}mixMode(){this.Ct?(this.Ct=!1,this.Pt.attr("opacity",null).unclip()):(this.Ct=!0,this.qt())}setAspectRatio(t){this.at=t,this.setHeight(this._t.height())}setHeight(t){this._t.size("natural"==this.at?1.6*t:t*this.at,t)}qt(){this.dt&&this.It?this.Pt.attr("opacity",.3):this.It?this.Pt.clipWith(this.Tt).attr("opacity",.3):this.Pt.attr("opacity",0)}Lt(){this.Ct&&this.qt()}boxMode(){this.dt?(this.d.unclip(),this.dt=!1):(this.d.clipWith(this.Tt),this.dt=!0),this.Lt()}Gt(){this.At=this.d.group();for(let t=0;t<25;t++)this.At.line(0,10*t,399,10*t).attr({stroke:"#555","stroke-width":.5});for(let t=0;t<40;t++)this.At.line(10*t,0,10*t,249).attr({stroke:"#555","stroke-width":.5})}ct(){this.zt=this.d.defs(),this.Jt=null,this.Tt=this.zt.clip()}lt(){this.Yt(),this.Vt()}Yt(){const t=this.d.group();t.attr({"shape-rendering":"crispEdges",id:"background"}),this.Kt=[],this.Pt=t}Vt(){const t=[],s=this.d.group().attr({"text-anchor":"middle",fill:"#fff"}).attr("id","textlayer");for(let e=0;e<25;e++){const i=[];for(let t=0;t<40;t++)i.push(s.plain(String.fromCharCode(32+95*Math.random())).attr({x:10*t+5,y:10*e+8}));t.push(i)}this.bt=t,this.Xt=s}jt(t){this.Tt.children().filter((s=>s.data("r")==t)).forEach((t=>t.remove()))}Ht(t){this.Kt[t]&&this.Kt[t].remove(),this.Kt[t]=this.Pt.group()}wt(t){const s=this.Kt[t].last(),e=s.width();s.width(e+10)}vt(t,s,e){const i=10*s,r=10*t;this.Kt[t].rect(10,10).fill(e).move(i,r)}St(){const t=this.Jt.width();this.Jt.width(t+10)}Rt(t){this.Kt[t].children().forEach((t=>t.attr("height",20)))}Ft(){this.zt.find("[data-boxbuffer]").forEach((t=>t.height(20)))}kt(t,s){const e=10*s,i=10*t;this.Jt=this.zt.rect(10,10).data("boxbuffer",!0).move(e,i)}Dt(t){this.zt.find("[data-boxbuffer]").forEach((s=>{s.data({r:t,boxbuffer:null}),this.Tt.add(s)}))}xt(t,s){return t==x.MOSAIC_CONTIGUOUS&&s?{dx:O.rt.ht,dy:-.15,textLength:O.rt.nt,lengthAdjust:"spacingAndGlyphs","text-anchor":"start",transform:null,class:null}:t==x.MOSAIC_SEPARATED&&s?{dx:O.ot.ht,dy:null,textLength:O.ot.nt,lengthAdjust:"spacingAndGlyphs","text-anchor":"start",transform:null,class:null}:{dx:null,dy:null,textLength:null,lengthAdjust:null,"text-anchor":null,transform:null,class:null}}registerPlugin(t,s){return"renderBackground"in s&&(this.Et.Zt=s.renderBackground),"renderMosaic"in s&&(this.Et.$t=s.renderMosaic),"endOfPageUpdate"in s&&(this.Et.Nt=s.endOfPageUpdate),"clearCellsForRow"in s&&(this.Et.Mt=s.clearCellsForRow),{lookupColour:P,isDoubleHeight:q,isDoubleWidth:T,isDoubleSize:z,isSeparatedMosaic:J,createImageOverlay:this.Wt.bind(this)}}Wt(){const t=this.d.image(400,250);return t.attr("preserveAspectRatio","none"),t}}G.ts=10,G.ss=10,G.es=20,G.rs=20,G.ns=400,G.hs=250,G.ROWS=25,G.COLS=40;const P=t=>k.fillColourFromColourAttrib(t),q=t=>t==U.DOUBLE_HEIGHT,T=t=>t==U.DOUBLE_WIDTH,z=t=>t==U.DOUBLE_SIZE,J=t=>t==x.MOSAIC_SEPARATED,Y=t=>0-10*t,V=t=>0-10*t;class K extends G{constructor(t){super(t),this.os=new Set}lt(){super.lt(),this._s=[],this.ls=this.d.group()}yt(t){super.yt(t),this.cs(t)}Ut(t,s,e,i,r,n,h){"Zt"in this.Et&&this.Et.Zt(n,r,s.size,s.bgColour),s.type!=x.ALPHA&&h?h&&(t.plain(" ").attr(e),this.As(n,r,s,i)):this.Ot(t,s,e,i,r,n)}As(t,s,e,i){if("$t"in this.Et&&this.Et.$t(t,s,e,i))return;const r=e.getSextants();if(!r.includes("1"))return;let n,h=e.type==x.MOSAIC_CONTIGUOUS?"c":"s";if(h+=r.join(""),!this.os.has(h)){this.os.add(h);const t=this._t.symbol(h);if(e.type==x.MOSAIC_CONTIGUOUS){t.attr({preserveAspectRatio:"none",width:G.ts+.3,height:G.ss+.2,viewBox:"0 0 12 18"});for(let s=0;s<6;s++)"1"==r[s]&&t.rect(6,6).move(s%2*6,6*Math.floor(s/2))}else{t.attr({preserveAspectRatio:"none",width:G.ts,height:G.ss,viewBox:"0 0 12 18"});for(let s=0;s<6;s++)"1"==r[s]&&t.rect(4,4).move(s%2*6+1,6*Math.floor(s/2)+2)}}n=e.type==x.MOSAIC_CONTIGUOUS?this._s[t].use(h).move(s*G.ts-.15,t*G.ss-.1).fill(i):this._s[t].use(h).move(s*G.ts,t*G.ss).fill(i),e.size!=U.DOUBLE_HEIGHT&&e.size!=U.DOUBLE_SIZE||n.attr("height",G.rs),e.size!=U.DOUBLE_WIDTH&&e.size!=U.DOUBLE_SIZE||n.attr("width",G.es),e.flashing&&n.addClass("flash"),e.concealed&&n.addClass("conceal")}cs(t){this._s[t]&&this._s[t].remove(),this._s[t]=this.ls.group()}xt(t,s){return{dx:null,dy:null,textLength:null,lengthAdjust:null,"text-anchor":null,transform:null,class:null}}}class X extends G{}const Z=["ENGINEERING","ADVERT","UK"],$={latin_g0:{$:"¤","":"■"},latin_g0__czech_slovak:{"#":"#",$:"ů","@":"č","[":"ť","\\":"ž","]":"ý","^":"í",_:"ř","`":"é","{":"á","|":"|","}":"ú","~":"š"},latin_g0__english:{"#":"£",$:"$","@":"@","[":"←","\\":"½","]":"→","^":"↑",_:"#","`":"—","{":"¼","|":"‖","}":"¾","~":"÷"},latin_g0__estonian:{"#":"#",$:"õ","@":"Š","[":"Ä","\\":"Ö","]":"Ž","^":"Ü",_:"Õ","`":"š","{":"ä","|":"ö","}":"ž","~":"ü"},latin_g0__french:{"#":"é",$:"ï","@":"à","[":"ë","\\":"ê","]":"ù","^":"î",_:"#","`":"è","{":"â","|":"ô","}":"û","~":"ç"},latin_g0__german:{"#":"#",$:"$","@":"§","[":"Ä","\\":"Ö","]":"Ü","^":"^",_:"_","`":"°","{":"ä","|":"ö","}":"ü","~":"ß"},latin_g0__italian:{"#":"£",$:"$","@":"é","[":"°","\\":"ç","]":"→","^":"↑",_:"#","`":"ù","{":"à","|":"ò","}":"è","~":"ì"},latin_g0__latvian_lithuanian:{"#":"#",$:"$","@":"Š","[":"ė","\\":"ę","]":"Ž","^":"č",_:"ū","`":"š","{":"ą","|":"ų","}":"ž","~":"į"},latin_g0__polish:{"#":"#",$:"ń","@":"ą","[":"Ƶ","\\":"Ś","]":"Ł","^":"ć",_:"ó","`":"ę","{":"ż","|":"ś","}":"ł","~":"ź"},latin_g0__portuguese_spanish:{"#":"ç",$:"$","@":"¡","[":"á","\\":"é","]":"í","^":"ó",_:"ú","`":"¿","{":"ü","|":"ñ","}":"è","~":"à"},latin_g0__romanian:{"#":"#",$:"¤","@":"Ț","[":"Â","\\":"Ș","]":"Ă","^":"Î",_:"ı","`":"ț","{":"â","|":"ș","}":"ă","~":"î"},latin_g0__serbian_croatian_slovenian:{"#":"#",$:"Ë","@":"Č","[":"Ć","\\":"Ž","]":"Đ","^":"Š",_:"ë","`":"č","{":"ć","|":"ž","}":"đ","~":"š"},latin_g0__swedish_finnish_hungarian:{"#":"#",$:"¤","@":"É","[":"Ä","\\":"Ö","]":"Å","^":"Ü",_:"_","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},latin_g0__turkish:{"#":"₺",$:"ğ","@":"İ","[":"Ş","\\":"Ö","]":"Ç","^":"Ü",_:"Ğ","`":"ı","{":"ş","|":"ö","}":"ç","~":"ü"},greek_g0:{"<":"«",">":"»","@":"ΐ",A:"Α",B:"Β",C:"Γ",D:"Δ",E:"Ε",F:"Ζ",G:"Η",H:"Θ",I:"Ι",J:"Κ",K:"Λ",L:"Μ",M:"Ν",N:"Ξ",O:"Ο",P:"Π",Q:"Ρ",R:"ʹ",S:"Σ",T:"Τ",U:"Υ",V:"Φ",W:"Χ",X:"Ψ",Y:"Ω",Z:"Ϊ","[":"Ϋ","\\":"ά","]":"έ","^":"ή",_:"ί","`":"ΰ",a:"α",b:"β",c:"γ",d:"δ",e:"ε",f:"ζ",g:"η",h:"θ",i:"ι",j:"κ",k:"λ",l:"μ",m:"ν",n:"ξ",o:"ο",p:"π",q:"ρ",r:"ς",s:"σ",t:"τ",u:"υ",v:"φ",w:"χ",x:"ψ",y:"ω",z:"ϊ","{":"ϋ","|":"ό","}":"ύ","~":"ώ","":"■"},cyrillic_g0:{"@":"Ю",A:"А",B:"Б",C:"Ц",D:"Д",E:"Е",F:"Ф",G:"Г",H:"Х",I:"И",J:"Ѝ",K:"К",L:"Л",M:"М",N:"Н",O:"О",P:"П",Q:"Я",R:"Р",S:"С",T:"Т",U:"У",V:"Ж",W:"В",X:"Ь",Z:"З","[":"Ш","]":"Щ","^":"Ч","`":"ю",a:"а",b:"б",c:"ц",d:"д",e:"е",f:"ф",g:"г",h:"х",i:"и",j:"ѝ",k:"к",l:"л",m:"м",n:"н",o:"о",p:"п",q:"я",r:"р",s:"с",t:"т",u:"у",v:"ж",w:"в",x:"ь",z:"з","{":"ш","}":"щ","~":"ч","":"■"},cyrillic_g0__russian_bulgarian:{"&":"ы",Y:"Ъ","\\":"Э",_:"Ы",y:"ъ","|":"э"},cyrillic_g0__serbian_croatian:{"@":"Ч",J:"Ј",Q:"Ќ",V:"В",W:"Ѓ",X:"Љ",Y:"Њ","[":"Ћ","\\":"Ж","]":"Ђ","^":"Ш",_:"Џ","`":"ч",j:"ј",q:"ќ",v:"в",w:"ѓ",x:"љ",y:"њ","{":"ћ","|":"ж","}":"ђ","~":"ш"},cyrillic_g0__ukranian:{"&":"ї",Y:"І","\\":"Є",_:"Ї",y:"і","|":"є"},arabic_g0:{"#":"£","&":"ﻰ","'":"ﻱ","(":")",")":"(",";":"؛","<":">",">":"<","?":"؟","@":"ﺔ",A:"ﺀ",B:"ﺒ",C:"ﺏ",D:"ﺘ",E:"ﺕ",F:"ﺎ",G:"ﺍ",H:"ﺑ",I:"ﺓ",J:"ﺗ",K:"ﺛ",L:"ﺟ",M:"ﺣ",N:"ﺧ",O:"ﺩ",P:"ﺫ",Q:"ﺭ",R:"ﺯ",S:"ﺳ",T:"ﺷ",U:"ﺻ",V:"ﺿ",W:"ﻃ",X:"ﻇ",Y:"ﻋ",Z:"ﻏ","[":"ﺜ","\\":"ﺠ","]":"ﺤ","^":"ﺨ",_:"#","`":"ـ",a:"ﻓ",b:"ﻗ",c:"ﻛ",d:"ﻟ",e:"ﻣ",f:"ﻧ",g:"ﻫ",h:"ﻭ",i:"ﻰ",j:"ﻳ",k:"ﺙ",l:"ﺝ",m:"ﺡ",n:"ﺥ",o:"ﻴ",p:"ﻯ",q:"ﻌ",r:"ﻐ",s:"ﻔ",t:"ﻑ",u:"ﻘ",v:"ﻕ",w:"ﻙ",x:"ﻠ",y:"ﻝ",z:"ﻤ","{":"ﻡ","|":"ﻨ","}":"ﻥ","~":"ﻻ","":"■"},hebrew_g0:{"#":"£","[":"←","\\":"½","]":"→","^":"↑",_:"#","`":"א",a:"ב",b:"ג",c:"ד",d:"ה",e:"ו",f:"ז",g:"ח",h:"ט",i:"י",j:"ך",k:"כ",l:"ל",m:"ם",n:"מ",o:"ן",p:"נ",q:"ס",r:"ע",s:"ף",t:"פ",u:"ץ",v:"צ",w:"ק",x:"ר",y:"ש",z:"ת","{":"₪","|":"‖","}":"¾","~":"÷","":"■"},g1_block_mosaic_to_unicode__legacy_computing:{0:"🬏",1:"🬐",2:"🬑",3:"🬒",4:"🬓",5:"▌",6:"🬔",7:"🬕",8:"🬖",9:"🬗"," ":" ","!":"🬀",'"':"🬁","#":"🬂",$:"🬃","%":"🬄","&":"🬅","'":"🬆","(":"🬇",")":"🬈","*":"🬉","+":"🬊",",":"🬋","-":"🬌",".":"🬍","/":"🬎",":":"🬘",";":"🬙","<":"🬚","=":"🬛",">":"🬜","?":"🬝","`":"🬞",a:"🬟",b:"🬠",c:"🬡",d:"🬢",e:"🬣",f:"🬤",g:"🬥",h:"🬦",i:"🬧",j:"▐",k:"🬨",l:"🬩",m:"🬪",n:"🬫",o:"🬬",p:"🬭",q:"🬮",r:"🬯",s:"🬰",t:"🬱",u:"🬲",v:"🬳",w:"🬴",x:"🬵",y:"🬶",z:"🬷","{":"🬸","|":"🬹","}":"🬺","~":"🬻","":"█"},g1_block_mosaic_to_unicode__unscii_separated:{0:"",1:"",2:"",3:"",4:"",5:"",6:"",7:"",8:"",9:""," ":" ","!":"",'"':"","#":"",$:"","%":"","&":"","'":"","(":"",")":"","*":"","+":"",",":"","-":"",".":"","/":"",":":"",";":"","<":"","=":"",">":"","?":"","`":"",a:"",b:"",c:"",d:"",e:"",f:"",g:"",h:"",i:"",j:"",k:"",l:"",m:"",n:"",o:"",p:"",q:"",r:"",s:"",t:"",u:"",v:"",w:"",x:"",y:"",z:"","{":"","|":"","}":"","~":"","":""}},W={};class tt{constructor(){this.us=" ",this.gs=" ",this.fs=S.WHITE,this.ds=S.BLACK,this.Cs=x.ALPHA,this.Is=!1,this.Es=U.NORMAL_SIZE,this.bs=!1,this.ys=!1,this.Bs=null}set byte(t){this.us=t}get byte(){return this.us}set fgColour(t){this.fs=t}get fgColour(){return this.fs}set bgColour(t){this.ds=t}get bgColour(){return this.ds}setMappedChar(t){this.gs=this.Cs==x.ALPHA||0==(32&this.us.charCodeAt(0))?st(this.us,t):st(this.us,this.Cs==x.MOSAIC_CONTIGUOUS?"g1_block_mosaic_to_unicode__legacy_computing":"g1_block_mosaic_to_unicode__unscii_separated"),this.Bs=null}setSpace(t){if(this.Cs!=x.MOSAIC_CONTIGUOUS&&this.Cs!=x.MOSAIC_SEPARATED||!t.active)this.Bs=null,this.gs=" ";else{this.Bs=t.char,this.Cs=t.type;let s="g1_block_mosaic_to_unicode__legacy_computing";this.Cs==x.MOSAIC_SEPARATED&&(s="g1_block_mosaic_to_unicode__unscii_separated"),this.gs=st(t.char,s)}}get char(){return this.gs}get type(){return this.Cs}set type(t){this.Cs=t}set flashing(t){this.Is=t}get flashing(){return this.Is}get size(){return this.Es}set size(t){this.Es=t}set concealed(t){this.bs=t}get concealed(){return this.bs}set boxed(t){this.ys=t}get boxed(){return this.ys}isMosaicByte(){const t=null!=this.Bs?this.Bs.charCodeAt(0):this.us.charCodeAt(0);return t<=127&&32==(32&t)}isMosaic(){const t=this.us.charCodeAt(0);return(this.Cs==x.MOSAIC_CONTIGUOUS||this.Cs==x.MOSAIC_SEPARATED)&&t<=127&&32==(32&t)}getSextants(){const t=null!=this.Bs?this.Bs.charCodeAt(0):this.us.charCodeAt(0);if(t>127)return null;if(t in W)return W[t];let s=t-32;return s>=64&&(s-=32),W[t]=[...s.toString(2).padStart(6,"0")].reverse(),W[t]}}function st(t,s){if(!(s in $))throw Error("Cell getCharWithEncoding: bad encoding: "+s);if(t in $[s])return $[s][t];const e=s.match(/^(.+)__/);if(null!=e){const i=e[1];if(t in $[i])return $[s][t]=$[i][t],$[i][t]}return t}class et{constructor(t){this.Qs=t,this.ws=[]}attach(t){return this.ws.push(t),this.ws.length-1}notify(t){this.ws.forEach((s=>null!=s&&s(this.Qs,t)))}detach(t){this.ws[t]=null}}class it{constructor(){this.ps=!1,this.Ss=[]}get doubleHeight(){return this.ps}set doubleHeight(t){this.ps=t}addCell(t){this.Ss.push(t)}getCell(t){if(t>=this.Ss.length)throw Error("RowModel.getCell E20 bad cell index");return this.Ss[t]}}const rt=new class{constructor(){this.xs=[];for(let t=0;t<25;t++){const t=[];for(let s=0;s<40;s++)t.push(new tt);this.xs.push(t)}this.Us="latin_g0",this.ks=null,this.vs=k.charFromAttribute(k.START_BOX),this.Rs=j[1],this.onSet=new et(this)}notify(){this.onSet.notify()}setRowFromChars(t,s){if(t>=25)throw Error("PageModel E29 bad row number");this.Fs(t,s),this.onSet.notify()}setRows(t){(t=t.slice(0,25)).forEach(((t,s)=>{this.Fs(s,t)})),this.onSet.notify()}Fs(t,s){let e=[...s];if(e=e.slice(0,40),e.forEach(((s,e)=>{const i=s.charCodeAt(0);if(Number.isNaN(i)||i>127)throw Error(`PageModel E51 failed to write row: bad character code (${i}) at row ${t} col ${e}`);this.xs[t][e].byte=s})),e.length<40)for(let s=e.length;s<40;s++)this.xs[t][s].byte=" "}setLevel(t){this.Rs=t,this.onSet.notify()}clearScreen(t){if(void 0===t||t){const t=[];for(let s=0;s<25;s++)t.push("");this.setRows(t)}else for(let t=0;t<25;t++)this.Fs(t,"")}setPrimaryG0CharacterEncoding(t,s){this.Us=t,s&&this.onSet.notify()}setSecondaryG0CharacterEncoding(t,s){this.ks=t,s&&this.onSet.notify()}getRow(t){if(t>=25)throw Error("PageModel.getRow E42 bad rowNum");const s=new it;let e,i,r=x.ALPHA,n=S.WHITE,h=!1,o=U.NORMAL_SIZE,_=!1,a=!1,l=!1,c=!1,A=S.BLACK,u=x.MOSAIC_CONTIGUOUS,g={active:!1,char:" ",type:x.MOSAIC_CONTIGUOUS};return this.xs[t].forEach(((f,d)=>{const C=f.byte,I=k.attribFromChar(this.Rs,C);switch(e=n,f.type=r,f.boxed=c,i=_,I.attribute!=k.STEADY&&(f.flashing=h),I.attribute!=k.NORMAL_SIZE&&(f.size=o),I.attribute!=k.CONCEAL&&(f.concealed=a),l&&(I.attribute!=k.HOLD_MOSAICS&&(g.active=!1,g.char=" "),l=!1),I.attribute){case k.TEXT_COLOUR:r=x.ALPHA,n=I.colour,a=!1,f.setSpace(g);break;case k.MOSAIC_COLOUR:r=u,n=I.colour,a=!1,f.setSpace(g);break;case k.NEW_BACKGROUND:A=e,f.setSpace(g);break;case k.BLACK_BACKGROUND:A=S.BLACK,f.setSpace(g);break;case k.CONTIGUOUS_GRAPHICS:u=x.MOSAIC_CONTIGUOUS,f.type==x.MOSAIC_SEPARATED&&(f.type=x.MOSAIC_CONTIGUOUS),r==x.MOSAIC_SEPARATED&&(r=x.MOSAIC_CONTIGUOUS),f.setSpace(g);break;case k.SEPARATED_GRAPHICS:u=x.MOSAIC_SEPARATED,f.type==x.MOSAIC_CONTIGUOUS&&(f.type=x.MOSAIC_SEPARATED),r==x.MOSAIC_CONTIGUOUS&&(r=x.MOSAIC_SEPARATED),f.setSpace(g);break;case k.ESC:this.ks&&(_=!i),f.setSpace(g);break;case k.FLASH:h=!0,f.setSpace(g);break;case k.STEADY:f.flashing=!1,h=!1,f.setSpace(g);break;case k.NORMAL_SIZE:f.size=U.NORMAL_SIZE,o=U.NORMAL_SIZE,f.setSpace(g);break;case k.DOUBLE_HEIGHT:o=U.DOUBLE_HEIGHT,s.doubleHeight=!0,f.setSpace(g);break;case k.DOUBLE_WIDTH:o=U.DOUBLE_WIDTH,f.setSpace(g);break;case k.DOUBLE_SIZE:o=U.DOUBLE_SIZE,s.doubleHeight=!0,f.setSpace(g);break;case k.CONCEAL:f.concealed=!0,a=!0,f.setSpace(g);break;case k.HOLD_MOSAICS:g.active=!0,f.setSpace(g);break;case k.RELEASE_MOSAICS:l=!0,f.setSpace(g);break;case k.START_BOX:d>=1&&this.xs[t][d-1].byte==this.vs&&(f.boxed=!0,c=!0),f.setSpace(g);break;case k.END_BOX:c=!1,f.setSpace(g);break;case k.UNKNOWN:f.setSpace(g);break;default:f.setMappedChar(i?this.ks:this.Us),f.isMosaic()&&(g.char=C,g.type=f.type)}f.fgColour=e,f.bgColour=A,s.addCell(f)})),s}},nt=new class{constructor(t){this.Ds=new K(t),this.ut=t,this.Ns=1,this.Ls=0,this.Hs(),this.js=null,this.Ms=null}setRow(t,s){this.ut.setRowFromChars(t,s)}setPageRows(t){this.ut.setRows(t)}showTestPage(){this.loadPageFromEncodedString(A[Z[this.Ls]]),this.Ls++,3==this.Ls&&(this.Ls=0)}showRandomisedPage(){const t=[];for(let s=0;s<25;s++){const s=[];for(let t=0;t<40;t++)s.push(String.fromCharCode(127*Math.random()));t.push(s.join(""))}this.setPageRows(t)}loadPageFromEncodedString(t){const s=class{static decodeBase64URLEncoded(t){const s=(t=t.replace(/-/g,"+").replace(/_/g,"/")).length%4;if(s){if(1===s)throw Error("Utils.decodeBase64URL: Input base64url string is the wrong length to determine padding");t+=Array(5-s).join("=")}const e=[...atob(t)].map((t=>c(t))),i=new ArrayBuffer(e.length);return new Uint8Array(i).set(e),(t=>{const s=[];for(let e=0;e<25;e++){const i=[];for(let s=0;s<40;s++){let r=6,n=0;const h=280*e+7*s;for(let s=h;s<h+7;s++)n+=t[s]*Math.pow(2,r),r--;i.push(String.fromCharCode(n))}s.push(i.join(""))}return s})(new r(i))}}.decodeBase64URLEncoded(t);this.setPageRows(s)}Hs(){window.addEventListener("ttx.reveal",(()=>this.Ds.reveal())),window.addEventListener("ttx.mix",(()=>this.Ds.mixMode())),window.addEventListener("ttx.subtitlemode",(()=>this.Ds.boxMode()))}toggleReveal(){this.Ds.reveal()}toggleMixMode(){this.Ds.mixMode()}toggleBoxMode(){this.Ds.boxMode()}toggleGrid(){this.Ds.grid()}setLevel(t){this.ut.setLevel(t)}addTo(t){this.Os=t,this.Ds.addTo(t)}setFont(t){this.Ds.setFont(t)}clearScreen(t){this.ut.clearScreen(t)}setAspectRatio(t){if("natural"==t)return void this.Ds.setAspectRatio(t);const s=parseFloat(t);if(Number.isNaN(s))throw Error("E80 setAspectRatio: bad number");this.Ds.setAspectRatio(s)}setHeight(t){const s=parseFloat(t);if(Number.isNaN(s))throw Error("E98 setHeight: bad number");this.Ds.setHeight(s),this.Ms=s}setDefaultG0Charset(...t){this.ut.setPrimaryG0CharacterEncoding(...t)}setSecondG0Charset(...t){this.ut.setSecondaryG0CharacterEncoding(...t)}remove(){if(this.Ds.detach(),this.Os){const t=document.querySelector(this.Os);t&&t.removeChild(t.firstChild)}this.Ds=null}setView(t){switch(this.remove(),t){case"classic__font-for-mosaic":this.Ds=new X(this.ut);break;case"classic__graphic-for-mosaic":this.Ds=new K(this.ut);break;default:throw Error("setView E126: bad view name:"+t)}this.Ms&&this.Ds.setHeight(this.Ms),this.Os&&this.Ds.addTo(this.Os),this.ut.notify()}registerViewPlugin(t){t.registerWithView(this.Ds),this.ut.notify()}}(rt);export{k as Attributes,S as Colour,j as Level,nt as teletext};//# sourceMappingURL=teletext.min.js.map
const t=new Set(["Uint1Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","UInt32Array","Float32Array","Float64Array"]),s=Uint8Array,e=Symbol();class i{constructor(t,{length:e=null,buffer:i=null,byteOffset:r=0,byteLength:n=null}={}){let h;i?e=8*(n||i.byteLength):e||(e=0);const o=s.BYTES_PER_ELEMENT,_=8*o,A=_-1,a=(t=>{let s=0;for(;t>>=1;)s++;return s})(_),l=Math.max(1,e+A>>a);i?h=new s(i,r,l):(i=new ArrayBuffer(o*l),h=new s(i)),Object.assign(this,{buffer:i,byteOffset:r,length:e,wordSize:_,wordCount:l,wordSizeMask:A,wordSizeShift:a,internal:h})}toArray(){const t=new Uint8Array(this.length);for(let s=0;s<this.wordCount;s++){const e=this.internal[s];for(let i=s*this.wordSize;i<(s+1)*this.wordSize;i++)t[i]=this.getBit(i,e)}return t}getBit(t,s){if(!(t>=this.length))return null==s&&(s=this.internal[t>>this.wordSizeShift]),s>>(t&this.wordSizeMask)&1}setBit(t,s){if(t>=this.length)return;const e=t>>this.wordSizeShift,i=t&this.wordSizeMask,r=this.internal[e];let n=r;return n|=s<<i,n&=~((1&~s)<<i),r!==n&&(this.internal[e]=n),s}}class r{constructor(t,s=0,r=null){let h,a,l;switch(A(t)){case"Number":h=t=~~t,a=new i(this,{length:h});break;case"ArrayBuffer":a=new i(this,{buffer:t,byteOffset:s,byteLength:r});break;case"Undefined":case"Null":case"RegExp":case"Infinity":h=0,a=new i(this,{length:h});break;case"Array":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"UInt32Array":case"Float32Array":case"Float64Array":case"Uint1Array":case"Object":default:l=o(t),a=new i(this,{length:l.length}),l.forEach(((t,s)=>a.setBit(s,_(t))))}return this[e]=a,new n(this)}static get BYTES_PER_ELEMENT(){return.125}static get name(){return"Uint1Array"}static get length(){return 0}static get[Symbol.species](){return this}static[Symbol.hasInstance](t){return t.__proto__=this}static from(t){const s=o(t);return new r(s)}static of(...t){return r.from(t)}get buffer(){return this[e].buffer}get byteLength(){return this.length+7>>3}get byteOffset(){return this[e].byteOffset}get length(){return this[e].length}get[Symbol.toStringTag](){return"Uint1Array"}copyWithin(t,s=0,e=this.length){if(!Number.isInteger(t))return this;const i=new Uint8Array(e-s);for(let t=s;t<e;t++)i[t-s]=this[t];return this.set(i,t),this}entries(){return this[e].toArray().entries()}every(...t){return this[e].toArray().every(...t)}fill(t,s=0,e=this.length){for(let i=s;i<e;i++)this[i]=t;return this}filter(...t){return new r(this[e].toArray().filter(...t))}find(...t){return this[e].toArray().find(...t)}findIndex(...t){return this[e].toArray().findIndex(...t)}forEach(...t){this[e].toArray().forEach(...t)}includes(...t){return this[e].toArray().includes(...t)}indexOf(...t){return this[e].toArray().indexOf(...t)}join(...t){return this[e].toArray().join(...t)}keys(...t){return this[e].toArray().keys(...t)}lastIndexOf(...t){return this[e].toArray().lastIndexOf(...t)}map(...t){return new r(this[e].toArray().map(...t))}reduce(...t){return this[e].toArray().reduce(...t)}reduceRight(...t){return this[e].toArray().reduceRight(...t)}reverse(){const t=this[e].toArray().reverse();return this.set(t),this}set(s,e=0){if(!Number.isInteger(e))return;const i=A(s);if("Array"!==i&&!t.has(i))return;const r=Math.min(s.length+e,this.length);s=s.map((t=>_(t)));for(let t=e;t<r;t++)this[t]=s[t-e]}slice(...t){return new r(this[e].toArray().slice(...t))}sort(...t){const s=this[e].toArray().sort(...t);return this.set(s),this}subarray(...t){return new r(this[e].toArray().subarray(...t))}values(...t){return this[e].toArray().values(...t)}toLocaleString(...t){return Array.from(this).toLocaleString()}toString(){return""+Array.from(this)}[Symbol.iterator](){return this[e].toArray()[Symbol.iterator]()}valueOf(){return this}toJSON(){return Array.from(this)}}function n(t){const s=t[e];return new Proxy(t,{get(e,i,r){const n="string"==typeof i?parseInt(i):i;return Number.isInteger(n)?s.getBit(n):Reflect.get(t,i)},set(e,i,r,n){const h="string"==typeof i?parseInt(i):i;return Number.isInteger(h)?(s.setBit(h,_(r)),!0):Reflect.set(t,i,r)}})}const h=/\[object (\w+)]/;function o(t){const s=[];for(let e of t){const t=_(e);s.push(t)}return s}function _(t){return"number"!=typeof t||Number.isNaN(t)?new Boolean(t).valueOf():t%2}function A(t){const s=t&&t.constructor?t.constructor.name:null,e=h.exec(Object.prototype.toString.call(t))[1];return e!==s&&s?s:e}const a={};function l(t){if(t in a)return a[t];const s=[...t.charCodeAt(0).toString(2).padStart(8,"0")].reverse();return a[t]=Number.parseInt(s.join(""),2),a[t]}const g={ENGINEERING:"QIECBAgQIIcWLGg2EDdy3QIKnXKgYtUE7f2QA2TB0wYr2DECAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAYMS54fzJmix4-YCDToOLOjyZ0WLSkzo6AkcGHuZUcRHlB4dgyAAQAEABAAQAEABAAQAEABAAQAEABAAQAEABAAQAEABAAWDP9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9_YNCho9zImSoAqBGoAp0FUy8-iChhz5UCA4MPEuZYgTAFyAFg1_f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f2DYCAAoACACeQHkBdYTJlixIkSKlSJEoUKIEBQABAAQAEABYN_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_39g4AgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgGDn9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9_YsAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIBix_f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f2LICAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAYs_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_39i0AgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgGLX9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9_Ytq-jT0yg7OXZs39w0Pzh3Ao_LLl3BZuHPl3dMIGllyBIWzrlLmkKJGTSJUycsoUqlZJYtXLzLBiyZlWjVs3IuHLp2UePXz9AgQokaBIlTJ0ChSqVoFi1cvQMGLJmgaNWzdA4cunaB49fP0ECDChoIkWNHQSJMqWgmTZ09BQo0qaCpVrV0FizatoLl29fQYMOLGgyZc2dBo06taDZt3b0HDjy5oOnXt3QePPr2g-ff38pgw4sZHJlzZyujTq1ktm3dvNcOPLmW6de3cn48-vZf59_fwZiHv3Y8uHYIjbMPPQDVCxcLf4E0-mXDk8mI-_dlFCn5a9_DKr6q-qvqr6q-qvqr6AFS390DJoGQKr6q-qvqr6q-qvqr6o",ADVERT:"QIECBAgQIJ9KDDmRUDZi3QU8PRk1QQeHIHDaIEDJiwYumDACdDwcnbLy6aeeXbl3dECBAgQIECBAgQIECBAgQIHwZkvcoCx0og8LNGjYwQPEjzpoWaNjBA82YHnTQwabEjTpowPEiBAgLHSiBbs1atjFA9SPe2pZqQNUHX1qQatSlrqQNW-5UsaIECAsdKIFidUqQJUCVAlVKlipchQJUCJanVIEqpAlSqlC5CgQIEB0ogQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQHSKBAgQYEH7ogQaGCApw_fEm54R3PCm5JuSKHoFUEVIECAudIoECBB6-___TB-_v0JTU_WqkZHFyQKHmjYgYBECpAqQIC50igQIEH___3_-iD__6FFSAig-IP6JCg26lzRr3avEgFUgLnSKBAg1f1X9lv_9NSBAgI6G-HX1V_EqBUqQJUqXBzagVSAudIoECD9_Qa2qL__6IMDzoq682qdAgQIEARAgQIECBAgVIC50igQIP_9AiaoFX__0VfV_1kjQIECBAgQBECBAgAoECpAgLnSKBBq__0CBCgQa___oreokCBAgQIECBAgQBECBAgVIECAudIoEHr__QIECBAg3_36FAgQIECBAgQIECAIgQIFSBAgQIAZ0igQf_7dAgKIECAinKf9bTR9QIv-N6i_ofzNagQIECBAgJnSKDR__tUBRAoe6NiBB_XYf_rqg_q2iD-gRb-iBAgQIECAmdIoNX_-1QFECDrq9IMH9h664P_D-w34P7DZ4ToECBAgQICZ0ig___5TQ8SfEHzQ82MPCzpoedEHzA82MPjDQ0-LNDSk0JnSOD___lNXVh_Qf9T3cx_oP-prqa_1S3Y0_q_zX-s1NdTUmdI6v_9-U1NUH9B_1NdTX-g_6mvpL_wMNTX-g1Nf6DAz1tSZ0j-_v0JREjQokaFEhRIUSNCiRoUCNAjRoEaBEhRo0CNGgBnSP9OgQFECCNPpIIVKfDkVaUWmggzoiCFPny5M6PTQIECAGdIjUAGlJnR0DBu5coGrFm0YMEE-kgpxYqChBjxUDNuwQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAy92np007s6AFSy9tOXvzQA7O_ryQTd-7L5DQVtpBJ3ZMvg",UK:"QIECBAgQIIcWLGg2EDFy2QIJu_cgZNUETLjQA2TN0xYr2DAodJIECBAgQIEGDB4_PUCBAgQIECBAgQIECBAgQIEANkvaMih0kgQIECDA1Qfv__OgQYGCBAgQIECBAgQIECBAgQIECBAgKHSSBAgQIH6FR-__-v7___oECBAgQIEAORPmxUE6LXpoECAodJIECBAoQKum7______9-gQIECBAgQA82_Zs39-aB8-QIAh0kgQIECBAgSev_____v06BAgQIECBAgQIECBAgQIECBAgKHSSBAgQIECBR00____-_w9GCBAgQIECBAgQIECBAgQIECAodJIECBAgQIECD8rx________ECBAgQIECBAgQIECBAgQICh0kgQIECBAgQLETRlv_______6oECBAgQIECBAgQIECBAgKHSyBAgQIHGQlwYIEH_-_x_____9-dECBAgQIECBAgQIECAIdLIECDAmJbfz_-0RJ0qBV________7sECBAgQIECBAgQIAh0sgQIMzAl-__fX5Sg0JECvX______586IECBAgQIECBAgCHSyBAgwJiW9OjX_0qBAgQIEX________-l8fPjBAgQIECAIdLIEHBYhQIECBQxQICWDhg5fv____________tUCBAgQIAh0sgzIECBAgQIEGlAgQEtP_______________-lQIECBAgCHSyBUwQIECBAgQakCBASQqv_____________-6FAgQIECAIdLIECJygQIECBAgaoEBJBg______________5-OiBAgQIAh0sgQKGKBAgQIEHBKgJIMH7____8v__________QoECBAgCHSyBRmQIECBA4RoECAkgVoVaNel________r16FAgQIECAIdLINCFAgwOEyBAgQICSBAgQePn7___r06RAgQIECBAgQIAh0sgQLeKxCgQIECBAgJIECDR__v0aNGhQIECBAgQIECBAgCHSSBAgQIECBAgQIECBAgQYP3_-1QIECBAgQIECBAgQIECAIdJIECBAgQIECBAgQIECBB6boUSBAgQIECBAgQIECBAgQIAh0kgQIECBAgQIECBAgQIFStAgQIECBAgQIECBAgQIECBAgAzsvjognZe_MFIy4cmzTuy8wdTfwQU-G_l0DVKy-lhyad6A",SPLASH:"QIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECAsaMIEGDx8YIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQICxowg0N2bdmgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgLGjCBFvz9_6BAZQIECBAgQIECAig0NECBAgQIECBAgQIECAsaMcOD5tjyoGCBAgQIECBAgQICLhCgQIECBAgQIECBAgQICxowoTod79ArSEcHBAgQIECBAg0ITKBAgQcGCBAgQIECBAgLGjCBBgXIUCAyRXmlLBAgQIECBuZ4fPn___aoECBAgQIECBAaQIECBAgQIEBFAgQaTPDh8-f___-vXo9f9qgQIECBAgQIECBAgQIEBFAgQcOHz5____69ejRoECBAg__0CBAgQIECBAgQIECBAgQEUCL___r16NGXQIOHDh8-NCOD-3QIECBAgQIECBAgQIECBARQINf0ug-fPi9evRo0aBAgI6v6VAgQIECBAgQIECBAgQIEBFAgRf2hfBw4cOHD58-fPiAj-_oECBAgQIECBAgQIECBAgQEUCBBr-l0SNGjRo0CBAgQEcH9qgQIECBAgQIECBAgQIECBARQIECL-0Lr169ev-fPnxAR1f0KBAgQIECBAgQIAiBAgQIEBFAgQINf3hw4cOCBAgQIEBH-_QIECBAgQIECBAgCIECBAgQIEB1ARRL1-_____________7VAgOIECBAgQIECAIgQIECBAgQHUBNAgQf26BAgQIN_8ijRoECA4gQIECBAgQIAiBAgQIECA6gQE0CDV_QoECBAgRf2iBAgQIEBxAgQIECBAgCIECBAgQIDqBAgQE0aFAgQIECBAgQIECBAgQHECBAgQIECAIgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIBp0Kg3cNqDSggdMuPRh3ZOe_N074eWVf0y7MvTL46IECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQKMalAyYMmKCplx6ECZBT35unfDyyoJnTIuQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECA"},c="http://www.w3.org/2000/svg";let u=0;class C{constructor(){}tt(){return this.st}et(){this.st=null}attr(t,s){if("object"==typeof t)for(const s in t)null==t[s]?this.st.removeAttribute(s):this.st.setAttribute(s,t[s]);else{if(void 0===s)return this.st.getAttribute(t);null==s?this.st.removeAttribute(t):this.st.setAttribute(t,s)}return this}addClass(t){if(!this.hasClass(t)){const s=this.classes();s.push(t),this.st.setAttribute("class",s.join(" "))}return this}hasClass(t){return-1!==this.classes().indexOf(t)}classes(){const t=this.st.getAttribute("class");return null==t?[]:t.split(" ")}removeClass(t){return this.hasClass(t)&&this.st.setAttribute("class",this.classes().filter((s=>s!==t)).join(" ")),this}toggleClass(t){return this.hasClass(t)?this.removeClass(t):this.addClass(t),this}data(t,s){if("object"==typeof t)for(const s in t)null==t[s]?delete this.st.dataset[s]:this.st.dataset[s]=t[s];else{if(void 0===s)return this.st.dataset[t];null==s?delete this.st.dataset[t]:this.st.dataset[t]=s}return this}}class I extends C{constructor(){return super(),this.st=document.createElementNS(c,"svg"),this.st.setAttribute("xmlns",c),this}addTo(t){return document.querySelector(t).appendChild(this.st),this}viewbox(t){return this.st.setAttribute("viewBox",t),this}size(t,s){return this.st.setAttribute("width",t),this.st.setAttribute("height",s),this}style(t){const s=document.createElementNS(c,"style");return s.append(t),this.st.append(s),this}group(){const t=new f;return this.st.append(t.tt()),t}width(){return this.st.clientWidth}height(){return this.st.clientHeight}symbol(t){const s=new Q(t);return this.st.append(s.tt()),s}}class f extends C{constructor(){return super(),this.st=document.createElementNS(c,"g"),this.it=[],this}group(){const t=new f;return this.st.append(t.tt()),this.it.push(t),t}plain(t){const s=new d(t);return this.st.append(s.tt()),this.it.push(s),s}defs(){const t=new y;return this.st.append(t.tt()),t}rect(t,s){const e=new m(t,s);return this.st.append(e.tt()),this.it.push(e),e}last(){return this.it[this.it.length-1]}children(){return this.it}clipWith(t){return this.st.setAttribute("clip-path",`url("#${t.tt().id}")`),this}unclip(){return this.st.removeAttribute("clip-path"),this}remove(){this.st.parentNode&&this.st.parentNode.removeChild(this.st),this.st=null,this.it.forEach((t=>t.et())),this.it=[]}line(t,s,e,i){const r=new w(t,s,e,i);return this.st.append(r.tt()),this.it.push(r),r}use(t){const s=new B(t);return this.st.append(s.tt()),this.it.push(s),s}image(t,s){const e=new E(t,s);return this.st.append(e.tt()),this.it.push(e),e}}class E extends C{constructor(t,s){return super(),this.st=document.createElementNS(c,"image"),this.st.setAttribute("width",parseInt(t)),this.st.setAttribute("height",parseInt(s)),this}}class B extends C{constructor(t){return super(),this.st=document.createElementNS(c,"use"),this.st.setAttribute("href","#"+t),this}fill(t){return this.st.setAttribute("fill",t),this}move(t,s){return this.st.setAttribute("x",t),this.st.setAttribute("y",s),this}}class Q extends C{constructor(t){return super(),this.st=document.createElementNS(c,"symbol"),this.st.setAttribute("id",t),this}rect(t,s){const e=new m(t,s);return this.st.append(e.tt()),e}}class d extends C{constructor(t){return super(),this.st=document.createElementNS(c,"text"),this.st.append(t),this}plain(t){return this.st.textContent=t,this}fill(t){return this.st.setAttribute("fill",t),this}}class y extends C{constructor(){return super(),this.st=document.createElementNS(c,"defs"),this}clip(){const t=new b;return this.st.append(t.tt()),t}find(t){return[...this.st.querySelectorAll(t)].map(p)}rect(t,s){const e=new m(t,s);return this.st.append(e.tt()),e}}class b extends C{constructor(){return super(),this.st=document.createElementNS(c,"clipPath"),this.st.setAttribute("id","clipPath-"+u),u++,this}children(){return[...this.st.children].map(p)}add(t){this.st.appendChild(t.tt())}}class m extends C{constructor(t,s){if(super(),t instanceof SVGElement)return this.st=t,this;const e=t;return this.st=document.createElementNS(c,"rect"),this.st.setAttribute("width",parseInt(e)),this.st.setAttribute("height",parseInt(s)),this}fill(t){return this.st.setAttribute("fill",t),this}move(t,s){return this.st.setAttribute("x",t),this.st.setAttribute("y",s),this}width(t){return void 0===t?parseInt(this.st.getAttribute("width")):(this.st.setAttribute("width",parseInt(t)),this)}height(t){return void 0===t?parseInt(this.st.getAttribute("height")):(this.st.setAttribute("height",parseInt(t)),this)}remove(){this.st.parentNode&&this.st.parentNode.removeChild(this.st),this.st=null}}class w extends C{constructor(t,s,e,i){return super(),this.st=document.createElementNS(c,"line"),this.st.setAttribute("x1",t),this.st.setAttribute("y1",s),this.st.setAttribute("x2",e),this.st.setAttribute("y2",i),this}}function p(t){let s;switch(t.constructor.name){case"SVGRectElement":s=new m(t);break;default:throw Error("SVG:wrapSVGElement Unable to wrap SVG element of type "+t.constructor.name)}return s}const S={BLACK:Symbol(),RED:Symbol(),GREEN:Symbol(),YELLOW:Symbol(),BLUE:Symbol(),MAGENTA:Symbol(),CYAN:Symbol(),WHITE:Symbol()};Object.freeze(S);const x={ALPHA:Symbol(),MOSAIC_CONTIGUOUS:Symbol(),MOSAIC_SEPARATED:Symbol()};Object.freeze(x);const U={NORMAL_SIZE:Symbol(),DOUBLE_HEIGHT:Symbol(),DOUBLE_WIDTH:Symbol(),DOUBLE_SIZE:Symbol()};Object.freeze(U);class v{static charFromTextColour(t){if(t in N)return N[t];throw Error("Attributes.charFromTextColour: bad colour: "+t)}static charFromGraphicColour(t){if(t in L)return L[t];throw Error("Attributes.charFromGraphicColour: bad colour")}static charFromAttribute(t){if(t in H)return H[t];throw Error("Attributes.charFromAttribute: bad attribute")}static attribFromChar(t,s){let e=null,i=null;return s in D&&j[t].includes(s.charCodeAt(0))?s in R?(e=v.TEXT_COLOUR,i=D[s]):s in F?(e=v.MOSAIC_COLOUR,i=D[s]):e=D[s]:s.charCodeAt(0)<=31&&(e=v.UNKNOWN),{attribute:e,colour:i}}static fillColourFromColourAttrib(t){return k[t]}}v.TEXT_COLOUR=x.ALPHA,v.MOSAIC_COLOUR=Symbol(),v.NEW_BACKGROUND=Symbol(),v.BLACK_BACKGROUND=Symbol(),v.CONTIGUOUS_GRAPHICS=x.MOSAIC_CONTIGUOUS,v.SEPARATED_GRAPHICS=x.MOSAIC_SEPARATED,v.ESC=Symbol(),v.FLASH=Symbol(),v.STEADY=Symbol(),v.NORMAL_SIZE=U.NORMAL_SIZE,v.DOUBLE_HEIGHT=U.DOUBLE_HEIGHT,v.DOUBLE_WIDTH=U.DOUBLE_WIDTH,v.DOUBLE_SIZE=U.DOUBLE_SIZE,v.CONCEAL=Symbol(),v.HOLD_MOSAICS=Symbol(),v.RELEASE_MOSAICS=Symbol(),v.START_BOX=Symbol(),v.END_BOX=Symbol(),v.UNKNOWN=Symbol();const k={[S.BLACK]:"#000",[S.RED]:"#f00",[S.GREEN]:"#0f0",[S.YELLOW]:"#ff0",[S.BLUE]:"#00f",[S.MAGENTA]:"#f0f",[S.CYAN]:"#0ff",[S.WHITE]:"#fff"};Object.freeze(k);const R={"\0":S.BLACK,"":S.RED,"":S.GREEN,"":S.YELLOW,"":S.BLUE,"":S.MAGENTA,"":S.CYAN,"":S.WHITE};Object.freeze(R);const F={"":S.BLACK,"":S.RED,"":S.GREEN,"":S.YELLOW,"":S.BLUE,"":S.MAGENTA,"":S.CYAN,"":S.WHITE};Object.freeze(F);const D={"\b":v.FLASH,"\t":v.STEADY,"\n":v.END_BOX,"\v":v.START_BOX,"\f":v.NORMAL_SIZE,"\r":v.DOUBLE_HEIGHT,"":v.DOUBLE_WIDTH,"":v.DOUBLE_SIZE,"":v.CONCEAL,"":v.CONTIGUOUS_GRAPHICS,"":v.SEPARATED_GRAPHICS,"":v.ESC,"":v.BLACK_BACKGROUND,"":v.NEW_BACKGROUND,"":v.HOLD_MOSAICS,"":v.RELEASE_MOSAICS},N={};for(const t in R)N[R[t]]=t,D[t]=R[t];Object.freeze(N);const L={};for(const t in F)L[F[t]]=t,D[t]=F[t];Object.freeze(L),Object.freeze(D);const H={};for(const t in D)H[D[t]]=t;Object.freeze(H);const O={0:Symbol(),1:Symbol(),1.5:Symbol(),2.5:Symbol()};Object.freeze(O);const j={};j[O[0]]=[1,2,3,4,5,6,7,8,9,17,18,19,20,21,22,23],j[O[1]]=[...j[O[0]]].concat([10,11,12,13,24,25,26,27,28,29,30,31]),j[O[1.5]]=[...j[O[1]]].concat([0,16]),j[O[2.5]]=[...j[O[1.5]]].concat([14,15]),Object.freeze(j);const M={rt:{nt:10.4,ht:-5.2},ot:{nt:10,ht:-4.5}};Object.freeze(M);class P{constructor(t){this._t=(new I).viewbox("0 0 399 249").size(800,666.6666666666666).attr({preserveAspectRatio:"none",style:'font-family: "sans-serif"'}).style("@font-face {\nfont-family: 'Unscii';\nsrc: url('fonts/unscii-16.woff') format('woff'), \nurl('fonts/unscii-16.ttf') format('truetype'),\nurl('fonts/unscii-16.otf') format('opentype');\nunicode-range: U+0000-00FF, U+2022, U+2500, U+2502, U+250C, U+2510, U+2514, U+2518, U+251C, U+251D, U+2524, U+2525, U+252C, U+252F, U+2534, U+2537, U+253C, U+253F, U+2588, U+258C, U+2590, U+2592, U+25CB, U+25CF, U+25E2-25E5, U+2B60-2B63, U+E0C0-E0FF, U+1FB00-1FB70, U+1FB75, U+1FBA0-1FBA7;\n-webkit-font-smoothing: none;\nfont-smooth: never;\n}\n@font-face {\nfont-family: 'Bedstead';\nsrc: url('fonts/bedstead.otf') format('opentype');\nunicode-range: U+0000-00FF;\n}\n@keyframes blink {\nto {\nvisibility: hidden;\n}\n}\n@keyframes fancyblink {\nfrom {\nfilter: none;\nopacity: 0.7;\n}\n33% {\nfilter: none;\nopacity: 1;\n}\n66% {\nfilter: blur(0px);\nopacity: 1;\n}\n95% {\nfilter: blur(4px);\nopacity: 0;\n}\nto {\nfilter: blur(0px);\nopacity: 0;\n}\n}\n#textlayer {\nfont-size: 10px;\n}\n.mosaic {\nfont-family: 'Unscii';\nfont-size: 10.3px;\n}\n.mosaic_separated {\nfont-family: 'Unscii';\nfont-size: 10px;\n}\n.flash_flashing .flash {\n/* animation: blink 2s steps(3, start) infinite; */\nanimation: fancyblink 2s linear infinite;\n}\n.conceal_concealed .conceal {\nvisibility: hidden;\n}\nsvg #background {\ntransition-property: opacity;\ntransition-duration: 0.25s;\n}\nsvg {\nbackground-color: transparent;\n}\nsvg use {\nshape-rendering: crispEdges;\n}\nrect { color: orange; }\n"),this.d=this._t.group().attr("class","conceal_concealed flash_flashing"),this.At=1.2,this.at(),this.lt(),this.gt=null,this.ct=t,this.ut=this.ct.onSet.attach((()=>this.Ct())),this.It=!1,this.ft=!1,this.Et=!1,this.Bt={}}addTo(t){this._t.addTo(t)}detach(){this.ct.onSet.detach(this.ut),this.ut=null}Ct(){let t=!1,s=!1;this.Et=!1,this.d.removeClass("flash_flashing"),this.Qt.forEach(((e,i)=>{let r=!1;if(this.dt(i),t)return t=!1,void this.yt(e,i);const n=this.ct.getRow(i);let h,o;e.forEach(((t,e)=>{if(r)return r=!1,this.bt(t),this.wt(i),void(o&&this.St());const _=n.getCell(e),A=v.fillColourFromColourAttrib(_.bgColour),a=_.isMosaicByte(),l=v.fillColourFromColourAttrib(_.fgColour),g=this.xt(_.type,a);this.Ut(t,_,g,l,e,i,a),_.boxed&&(o?this.St():this.vt(i,e),this.Et=!0),h==A?this.wt(i):this.kt(i,e,A),_.size!=U.DOUBLE_WIDTH&&_.size!=U.DOUBLE_SIZE||(r=!0),h=A,o=_.boxed,_.flashing&&(s=!0)})),n.doubleHeight?(this.Rt(i),this.Ft(),t=!0):t=!1,this.Dt(i)})),"Nt"in this.Bt&&this.Bt.Nt(this._t.width(),this._t.height()),this.d.addClass("conceal_concealed"),s&&setTimeout((()=>this.d.addClass("flash_flashing")),100),this.Lt()}dt(t){this.Ht(t),this.Ot(t)}yt(t,s){"jt"in this.Bt&&this.Bt.jt(t.length,s),t.forEach((t=>this.bt(t)))}bt(t){t.plain(" ").attr({dx:null,dy:null,textLength:null,lengthAdjust:null,"text-anchor":null,transform:null,class:null})}Ut(t,s,e,i,r,n,h){this.Mt(t,s,e,i,r,n),s.type==x.MOSAIC_CONTIGUOUS&&h?t.addClass("mosaic"):s.type==x.MOSAIC_SEPARATED&&h&&t.addClass("mosaic_separated")}Mt(t,s,e,i,r,n){t.plain(s.char).attr(e).fill(i),s.size==U.DOUBLE_HEIGHT?t.attr("transform",`translate(0 ${V(n)}) scale(1 2)`):s.size==U.DOUBLE_WIDTH?t.attr("transform",`translate(${Y(r)} 0) scale(2 1)`):s.size==U.DOUBLE_SIZE&&t.attr("transform",`translate(${Y(r)} ${V(n)}) scale(2 2)`),s.flashing&&t.addClass("flash"),s.concealed&&t.addClass("conceal")}reveal(){this.d.toggleClass("conceal_concealed")}setFont(t){let s='"'+t+'"';"native"==t?s='-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif':"default"==t&&(s="sans-serif"),this._t.attr("style","font-family: "+s)}grid(){this.gt?(this.gt.remove(),this.gt=null):this.Pt()}mixMode(){this.ft?(this.ft=!1,this.Gt.attr("opacity",null).unclip()):(this.ft=!0,this.qt())}setAspectRatio(t){this.At=t,this.setHeight(this._t.height())}setHeight(t){this._t.size("natural"==this.At?1.6*t:t*this.At,t)}qt(){this.It&&this.Et?this.Gt.attr("opacity",.3):this.Et?this.Gt.clipWith(this.Tt).attr("opacity",.3):this.Gt.attr("opacity",0)}Lt(){this.ft&&this.qt()}boxMode(){this.It?(this.d.unclip(),this.It=!1):(this.d.clipWith(this.Tt),this.It=!0),this.Lt()}Pt(){this.gt=this.d.group();for(let t=0;t<25;t++)this.gt.line(0,10*t,399,10*t).attr({stroke:"#555","stroke-width":.5});for(let t=0;t<40;t++)this.gt.line(10*t,0,10*t,249).attr({stroke:"#555","stroke-width":.5})}lt(){this.zt=this.d.defs(),this.Jt=null,this.Tt=this.zt.clip()}at(){this.Vt(),this.Yt()}Vt(){const t=this.d.group();t.attr({"shape-rendering":"crispEdges",id:"background"}),this.Kt=[],this.Gt=t}Yt(){const t=[],s=this.d.group().attr({"text-anchor":"middle",fill:"#fff"}).attr("id","textlayer");for(let e=0;e<25;e++){const i=[];for(let t=0;t<40;t++)i.push(s.plain(String.fromCharCode(32+95*Math.random())).attr({x:10*t+5,y:10*e+8}));t.push(i)}this.Qt=t,this.Xt=s}Ot(t){this.Tt.children().filter((s=>s.data("r")==t)).forEach((t=>t.remove()))}Ht(t){this.Kt[t]&&this.Kt[t].remove(),this.Kt[t]=this.Gt.group()}wt(t){const s=this.Kt[t].last(),e=s.width();s.width(e+10)}kt(t,s,e){const i=10*s,r=10*t;this.Kt[t].rect(10,10).fill(e).move(i,r)}St(){const t=this.Jt.width();this.Jt.width(t+10)}Rt(t){this.Kt[t].children().forEach((t=>t.attr("height",20)))}Ft(){this.zt.find("[data-boxbuffer]").forEach((t=>t.height(20)))}vt(t,s){const e=10*s,i=10*t;this.Jt=this.zt.rect(10,10).data("boxbuffer",!0).move(e,i)}Dt(t){this.zt.find("[data-boxbuffer]").forEach((s=>{s.data({r:t,boxbuffer:null}),this.Tt.add(s)}))}xt(t,s){return t==x.MOSAIC_CONTIGUOUS&&s?{dx:M.rt.ht,dy:-.15,textLength:M.rt.nt,lengthAdjust:"spacingAndGlyphs","text-anchor":"start",transform:null,class:null}:t==x.MOSAIC_SEPARATED&&s?{dx:M.ot.ht,dy:null,textLength:M.ot.nt,lengthAdjust:"spacingAndGlyphs","text-anchor":"start",transform:null,class:null}:{dx:null,dy:null,textLength:null,lengthAdjust:null,"text-anchor":null,transform:null,class:null}}registerPlugin(t,s){return"renderBackground"in s&&(this.Bt.Zt=s.renderBackground),"renderMosaic"in s&&(this.Bt.$t=s.renderMosaic),"endOfPageUpdate"in s&&(this.Bt.Nt=s.endOfPageUpdate),"clearCellsForRow"in s&&(this.Bt.jt=s.clearCellsForRow),{lookupColour:G,isDoubleHeight:q,isDoubleWidth:T,isDoubleSize:z,isSeparatedMosaic:J,createImageOverlay:this.Wt.bind(this)}}Wt(){const t=this.d.image(400,250);return t.attr("preserveAspectRatio","none"),t}}P.ts=10,P.ss=10,P.es=20,P.rs=20,P.ns=400,P.hs=250,P.ROWS=25,P.COLS=40;const G=t=>v.fillColourFromColourAttrib(t),q=t=>t==U.DOUBLE_HEIGHT,T=t=>t==U.DOUBLE_WIDTH,z=t=>t==U.DOUBLE_SIZE,J=t=>t==x.MOSAIC_SEPARATED,V=t=>0-10*t,Y=t=>0-10*t;class K extends P{constructor(t){super(t),this.os=new Set}at(){super.at(),this._s=[],this.As=this.d.group()}dt(t){super.dt(t),this.ls(t)}Ut(t,s,e,i,r,n,h){"Zt"in this.Bt&&this.Bt.Zt(n,r,s.size,s.bgColour),s.type!=x.ALPHA&&h?h&&(t.plain(" ").attr(e),this.gs(n,r,s,i)):this.Mt(t,s,e,i,r,n)}gs(t,s,e,i){if("$t"in this.Bt&&this.Bt.$t(t,s,e,i))return;const r=e.getSextants();if(!r.includes("1"))return;let n,h=e.type==x.MOSAIC_CONTIGUOUS?"c":"s";if(h+=r.join(""),!this.os.has(h)){this.os.add(h);const t=this._t.symbol(h);if(e.type==x.MOSAIC_CONTIGUOUS){t.attr({preserveAspectRatio:"none",width:P.ts+.3,height:P.ss+.2,viewBox:"0 0 12 18"});for(let s=0;s<6;s++)"1"==r[s]&&t.rect(6,6).move(s%2*6,6*Math.floor(s/2))}else{t.attr({preserveAspectRatio:"none",width:P.ts,height:P.ss,viewBox:"0 0 12 18"});for(let s=0;s<6;s++)"1"==r[s]&&t.rect(4,4).move(s%2*6+1,6*Math.floor(s/2)+2)}}n=e.type==x.MOSAIC_CONTIGUOUS?this._s[t].use(h).move(s*P.ts-.15,t*P.ss-.1).fill(i):this._s[t].use(h).move(s*P.ts,t*P.ss).fill(i),e.size!=U.DOUBLE_HEIGHT&&e.size!=U.DOUBLE_SIZE||n.attr("height",P.rs),e.size!=U.DOUBLE_WIDTH&&e.size!=U.DOUBLE_SIZE||n.attr("width",P.es),e.flashing&&n.addClass("flash"),e.concealed&&n.addClass("conceal")}ls(t){this._s[t]&&this._s[t].remove(),this._s[t]=this.As.group()}xt(t,s){return{dx:null,dy:null,textLength:null,lengthAdjust:null,"text-anchor":null,transform:null,class:null}}}class X extends P{}const Z=["SPLASH","ENGINEERING","ADVERT","UK"],$={latin_g0:{$:"¤","":"■"},latin_g0__czech_slovak:{"#":"#",$:"ů","@":"č","[":"ť","\\":"ž","]":"ý","^":"í",_:"ř","`":"é","{":"á","|":"|","}":"ú","~":"š"},latin_g0__english:{"#":"£",$:"$","@":"@","[":"←","\\":"½","]":"→","^":"↑",_:"#","`":"—","{":"¼","|":"‖","}":"¾","~":"÷"},latin_g0__estonian:{"#":"#",$:"õ","@":"Š","[":"Ä","\\":"Ö","]":"Ž","^":"Ü",_:"Õ","`":"š","{":"ä","|":"ö","}":"ž","~":"ü"},latin_g0__french:{"#":"é",$:"ï","@":"à","[":"ë","\\":"ê","]":"ù","^":"î",_:"#","`":"è","{":"â","|":"ô","}":"û","~":"ç"},latin_g0__german:{"#":"#",$:"$","@":"§","[":"Ä","\\":"Ö","]":"Ü","^":"^",_:"_","`":"°","{":"ä","|":"ö","}":"ü","~":"ß"},latin_g0__italian:{"#":"£",$:"$","@":"é","[":"°","\\":"ç","]":"→","^":"↑",_:"#","`":"ù","{":"à","|":"ò","}":"è","~":"ì"},latin_g0__latvian_lithuanian:{"#":"#",$:"$","@":"Š","[":"ė","\\":"ę","]":"Ž","^":"č",_:"ū","`":"š","{":"ą","|":"ų","}":"ž","~":"į"},latin_g0__polish:{"#":"#",$:"ń","@":"ą","[":"Ƶ","\\":"Ś","]":"Ł","^":"ć",_:"ó","`":"ę","{":"ż","|":"ś","}":"ł","~":"ź"},latin_g0__portuguese_spanish:{"#":"ç",$:"$","@":"¡","[":"á","\\":"é","]":"í","^":"ó",_:"ú","`":"¿","{":"ü","|":"ñ","}":"è","~":"à"},latin_g0__romanian:{"#":"#",$:"¤","@":"Ț","[":"Â","\\":"Ș","]":"Ă","^":"Î",_:"ı","`":"ț","{":"â","|":"ș","}":"ă","~":"î"},latin_g0__serbian_croatian_slovenian:{"#":"#",$:"Ë","@":"Č","[":"Ć","\\":"Ž","]":"Đ","^":"Š",_:"ë","`":"č","{":"ć","|":"ž","}":"đ","~":"š"},latin_g0__swedish_finnish_hungarian:{"#":"#",$:"¤","@":"É","[":"Ä","\\":"Ö","]":"Å","^":"Ü",_:"_","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},latin_g0__turkish:{"#":"₺",$:"ğ","@":"İ","[":"Ş","\\":"Ö","]":"Ç","^":"Ü",_:"Ğ","`":"ı","{":"ş","|":"ö","}":"ç","~":"ü"},greek_g0:{"<":"«",">":"»","@":"ΐ",A:"Α",B:"Β",C:"Γ",D:"Δ",E:"Ε",F:"Ζ",G:"Η",H:"Θ",I:"Ι",J:"Κ",K:"Λ",L:"Μ",M:"Ν",N:"Ξ",O:"Ο",P:"Π",Q:"Ρ",R:"ʹ",S:"Σ",T:"Τ",U:"Υ",V:"Φ",W:"Χ",X:"Ψ",Y:"Ω",Z:"Ϊ","[":"Ϋ","\\":"ά","]":"έ","^":"ή",_:"ί","`":"ΰ",a:"α",b:"β",c:"γ",d:"δ",e:"ε",f:"ζ",g:"η",h:"θ",i:"ι",j:"κ",k:"λ",l:"μ",m:"ν",n:"ξ",o:"ο",p:"π",q:"ρ",r:"ς",s:"σ",t:"τ",u:"υ",v:"φ",w:"χ",x:"ψ",y:"ω",z:"ϊ","{":"ϋ","|":"ό","}":"ύ","~":"ώ","":"■"},cyrillic_g0:{"@":"Ю",A:"А",B:"Б",C:"Ц",D:"Д",E:"Е",F:"Ф",G:"Г",H:"Х",I:"И",J:"Ѝ",K:"К",L:"Л",M:"М",N:"Н",O:"О",P:"П",Q:"Я",R:"Р",S:"С",T:"Т",U:"У",V:"Ж",W:"В",X:"Ь",Z:"З","[":"Ш","]":"Щ","^":"Ч","`":"ю",a:"а",b:"б",c:"ц",d:"д",e:"е",f:"ф",g:"г",h:"х",i:"и",j:"ѝ",k:"к",l:"л",m:"м",n:"н",o:"о",p:"п",q:"я",r:"р",s:"с",t:"т",u:"у",v:"ж",w:"в",x:"ь",z:"з","{":"ш","}":"щ","~":"ч","":"■"},cyrillic_g0__russian_bulgarian:{"&":"ы",Y:"Ъ","\\":"Э",_:"Ы",y:"ъ","|":"э"},cyrillic_g0__serbian_croatian:{"@":"Ч",J:"Ј",Q:"Ќ",V:"В",W:"Ѓ",X:"Љ",Y:"Њ","[":"Ћ","\\":"Ж","]":"Ђ","^":"Ш",_:"Џ","`":"ч",j:"ј",q:"ќ",v:"в",w:"ѓ",x:"љ",y:"њ","{":"ћ","|":"ж","}":"ђ","~":"ш"},cyrillic_g0__ukranian:{"&":"ї",Y:"І","\\":"Є",_:"Ї",y:"і","|":"є"},arabic_g0:{"#":"£","&":"ﻰ","'":"ﻱ","(":")",")":"(",";":"؛","<":">",">":"<","?":"؟","@":"ﺔ",A:"ﺀ",B:"ﺒ",C:"ﺏ",D:"ﺘ",E:"ﺕ",F:"ﺎ",G:"ﺍ",H:"ﺑ",I:"ﺓ",J:"ﺗ",K:"ﺛ",L:"ﺟ",M:"ﺣ",N:"ﺧ",O:"ﺩ",P:"ﺫ",Q:"ﺭ",R:"ﺯ",S:"ﺳ",T:"ﺷ",U:"ﺻ",V:"ﺿ",W:"ﻃ",X:"ﻇ",Y:"ﻋ",Z:"ﻏ","[":"ﺜ","\\":"ﺠ","]":"ﺤ","^":"ﺨ",_:"#","`":"ـ",a:"ﻓ",b:"ﻗ",c:"ﻛ",d:"ﻟ",e:"ﻣ",f:"ﻧ",g:"ﻫ",h:"ﻭ",i:"ﻰ",j:"ﻳ",k:"ﺙ",l:"ﺝ",m:"ﺡ",n:"ﺥ",o:"ﻴ",p:"ﻯ",q:"ﻌ",r:"ﻐ",s:"ﻔ",t:"ﻑ",u:"ﻘ",v:"ﻕ",w:"ﻙ",x:"ﻠ",y:"ﻝ",z:"ﻤ","{":"ﻡ","|":"ﻨ","}":"ﻥ","~":"ﻻ","":"■"},hebrew_g0:{"#":"£","[":"←","\\":"½","]":"→","^":"↑",_:"#","`":"א",a:"ב",b:"ג",c:"ד",d:"ה",e:"ו",f:"ז",g:"ח",h:"ט",i:"י",j:"ך",k:"כ",l:"ל",m:"ם",n:"מ",o:"ן",p:"נ",q:"ס",r:"ע",s:"ף",t:"פ",u:"ץ",v:"צ",w:"ק",x:"ר",y:"ש",z:"ת","{":"₪","|":"‖","}":"¾","~":"÷","":"■"},g1_block_mosaic_to_unicode__legacy_computing:{0:"🬏",1:"🬐",2:"🬑",3:"🬒",4:"🬓",5:"▌",6:"🬔",7:"🬕",8:"🬖",9:"🬗"," ":" ","!":"🬀",'"':"🬁","#":"🬂",$:"🬃","%":"🬄","&":"🬅","'":"🬆","(":"🬇",")":"🬈","*":"🬉","+":"🬊",",":"🬋","-":"🬌",".":"🬍","/":"🬎",":":"🬘",";":"🬙","<":"🬚","=":"🬛",">":"🬜","?":"🬝","`":"🬞",a:"🬟",b:"🬠",c:"🬡",d:"🬢",e:"🬣",f:"🬤",g:"🬥",h:"🬦",i:"🬧",j:"▐",k:"🬨",l:"🬩",m:"🬪",n:"🬫",o:"🬬",p:"🬭",q:"🬮",r:"🬯",s:"🬰",t:"🬱",u:"🬲",v:"🬳",w:"🬴",x:"🬵",y:"🬶",z:"🬷","{":"🬸","|":"🬹","}":"🬺","~":"🬻","":"█"},g1_block_mosaic_to_unicode__unscii_separated:{0:"",1:"",2:"",3:"",4:"",5:"",6:"",7:"",8:"",9:""," ":" ","!":"",'"':"","#":"",$:"","%":"","&":"","'":"","(":"",")":"","*":"","+":"",",":"","-":"",".":"","/":"",":":"",";":"","<":"","=":"",">":"","?":"","`":"",a:"",b:"",c:"",d:"",e:"",f:"",g:"",h:"",i:"",j:"",k:"",l:"",m:"",n:"",o:"",p:"",q:"",r:"",s:"",t:"",u:"",v:"",w:"",x:"",y:"",z:"","{":"","|":"","}":"","~":"","":""}},W={};class tt{constructor(){this.cs=" ",this.us=" ",this.Cs=S.WHITE,this.Is=S.BLACK,this.fs=x.ALPHA,this.Es=!1,this.Bs=U.NORMAL_SIZE,this.Qs=!1,this.ds=!1,this.ys=null}set byte(t){this.cs=t}get byte(){return this.cs}set fgColour(t){this.Cs=t}get fgColour(){return this.Cs}set bgColour(t){this.Is=t}get bgColour(){return this.Is}setMappedChar(t){this.us=this.fs==x.ALPHA||0==(32&this.cs.charCodeAt(0))?st(this.cs,t):st(this.cs,this.fs==x.MOSAIC_CONTIGUOUS?"g1_block_mosaic_to_unicode__legacy_computing":"g1_block_mosaic_to_unicode__unscii_separated"),this.ys=null}setSpace(t){if(this.fs!=x.MOSAIC_CONTIGUOUS&&this.fs!=x.MOSAIC_SEPARATED||!t.active)this.ys=null,this.us=" ";else{this.ys=t.char,this.fs=t.type;let s="g1_block_mosaic_to_unicode__legacy_computing";this.fs==x.MOSAIC_SEPARATED&&(s="g1_block_mosaic_to_unicode__unscii_separated"),this.us=st(t.char,s)}}get char(){return this.us}get type(){return this.fs}set type(t){this.fs=t}set flashing(t){this.Es=t}get flashing(){return this.Es}get size(){return this.Bs}set size(t){this.Bs=t}set concealed(t){this.Qs=t}get concealed(){return this.Qs}set boxed(t){this.ds=t}get boxed(){return this.ds}isMosaicByte(){const t=null!=this.ys?this.ys.charCodeAt(0):this.cs.charCodeAt(0);return t<=127&&32==(32&t)}isMosaic(){const t=this.cs.charCodeAt(0);return(this.fs==x.MOSAIC_CONTIGUOUS||this.fs==x.MOSAIC_SEPARATED)&&t<=127&&32==(32&t)}getSextants(){const t=null!=this.ys?this.ys.charCodeAt(0):this.cs.charCodeAt(0);if(t>127)return null;if(t in W)return W[t];let s=t-32;return s>=64&&(s-=32),W[t]=[...s.toString(2).padStart(6,"0")].reverse(),W[t]}}function st(t,s){if(!(s in $))throw Error("Cell getCharWithEncoding: bad encoding: "+s);if(t in $[s])return $[s][t];const e=s.match(/^(.+)__/);if(null!=e){const i=e[1];if(t in $[i])return $[s][t]=$[i][t],$[i][t]}return t}class et{constructor(t){this.bs=t,this.ws=[]}attach(t){return this.ws.push(t),this.ws.length-1}notify(t){this.ws.forEach((s=>null!=s&&s(this.bs,t)))}detach(t){this.ws[t]=null}}class it{constructor(){this.ps=!1,this.Ss=[]}get doubleHeight(){return this.ps}set doubleHeight(t){this.ps=t}addCell(t){this.Ss.push(t)}getCell(t){if(t>=this.Ss.length)throw Error("RowModel.getCell E20 bad cell index");return this.Ss[t]}}const rt=new class{constructor(){this.xs=[];for(let t=0;t<25;t++){const t=[];for(let s=0;s<40;s++)t.push(new tt);this.xs.push(t)}this.Us="latin_g0",this.vs=null,this.ks=v.charFromAttribute(v.START_BOX),this.Rs=O[1],this.onSet=new et(this)}notify(){this.onSet.notify()}setRowFromChars(t,s){if(t>=25)throw Error("PageModel E29 bad row number");this.Fs(t,s),this.onSet.notify()}setRows(t){(t=t.slice(0,25)).forEach(((t,s)=>{this.Fs(s,t)})),this.onSet.notify()}Fs(t,s){let e=[...s];if(e=e.slice(0,40),e.forEach(((s,e)=>{const i=s.charCodeAt(0);if(Number.isNaN(i)||i>127)throw Error(`PageModel E51 failed to write row: bad character code (${i}) at row ${t} col ${e}`);this.xs[t][e].byte=s})),e.length<40)for(let s=e.length;s<40;s++)this.xs[t][s].byte=" "}setLevel(t){this.Rs=t,this.onSet.notify()}clearScreen(t){if(void 0===t||t){const t=[];for(let s=0;s<25;s++)t.push("");this.setRows(t)}else for(let t=0;t<25;t++)this.Fs(t,"")}setPrimaryG0CharacterEncoding(t,s){this.Us=t,s&&this.onSet.notify()}setSecondaryG0CharacterEncoding(t,s){this.vs=t,s&&this.onSet.notify()}getRow(t){if(t>=25)throw Error("PageModel.getRow E42 bad rowNum");const s=new it;let e,i,r=x.ALPHA,n=S.WHITE,h=!1,o=U.NORMAL_SIZE,_=!1,A=!1,a=!1,l=!1,g=S.BLACK,c=x.MOSAIC_CONTIGUOUS,u={active:!1,char:" ",type:x.MOSAIC_CONTIGUOUS};return this.xs[t].forEach(((C,I)=>{const f=C.byte,E=v.attribFromChar(this.Rs,f);switch(e=n,C.type=r,C.boxed=l,i=_,E.attribute!=v.STEADY&&(C.flashing=h),E.attribute!=v.NORMAL_SIZE&&(C.size=o),E.attribute!=v.CONCEAL&&(C.concealed=A),a&&(E.attribute!=v.HOLD_MOSAICS&&(u.active=!1,u.char=" "),a=!1),E.attribute){case v.TEXT_COLOUR:r=x.ALPHA,n=E.colour,A=!1,C.setSpace(u);break;case v.MOSAIC_COLOUR:r=c,n=E.colour,A=!1,C.setSpace(u);break;case v.NEW_BACKGROUND:g=e,C.setSpace(u);break;case v.BLACK_BACKGROUND:g=S.BLACK,C.setSpace(u);break;case v.CONTIGUOUS_GRAPHICS:c=x.MOSAIC_CONTIGUOUS,C.type==x.MOSAIC_SEPARATED&&(C.type=x.MOSAIC_CONTIGUOUS),r==x.MOSAIC_SEPARATED&&(r=x.MOSAIC_CONTIGUOUS),C.setSpace(u);break;case v.SEPARATED_GRAPHICS:c=x.MOSAIC_SEPARATED,C.type==x.MOSAIC_CONTIGUOUS&&(C.type=x.MOSAIC_SEPARATED),r==x.MOSAIC_CONTIGUOUS&&(r=x.MOSAIC_SEPARATED),C.setSpace(u);break;case v.ESC:this.vs&&(_=!i),C.setSpace(u);break;case v.FLASH:h=!0,C.setSpace(u);break;case v.STEADY:C.flashing=!1,h=!1,C.setSpace(u);break;case v.NORMAL_SIZE:C.size=U.NORMAL_SIZE,o=U.NORMAL_SIZE,C.setSpace(u);break;case v.DOUBLE_HEIGHT:o=U.DOUBLE_HEIGHT,s.doubleHeight=!0,C.setSpace(u);break;case v.DOUBLE_WIDTH:o=U.DOUBLE_WIDTH,C.setSpace(u);break;case v.DOUBLE_SIZE:o=U.DOUBLE_SIZE,s.doubleHeight=!0,C.setSpace(u);break;case v.CONCEAL:C.concealed=!0,A=!0,C.setSpace(u);break;case v.HOLD_MOSAICS:u.active=!0,C.setSpace(u);break;case v.RELEASE_MOSAICS:a=!0,C.setSpace(u);break;case v.START_BOX:I>=1&&this.xs[t][I-1].byte==this.ks&&(C.boxed=!0,l=!0),C.setSpace(u);break;case v.END_BOX:l=!1,C.setSpace(u);break;case v.UNKNOWN:C.setSpace(u);break;default:C.setMappedChar(i?this.vs:this.Us),C.isMosaic()&&(u.char=f,u.type=C.type)}C.fgColour=e,C.bgColour=g,s.addCell(C)})),s}},nt=new class{constructor(t){this.Ds=new K(t),this.ct=t,this.Ns=1,this.Ls=0,this.Hs(),this.Os=null,this.js=null}setRow(t,s){this.ct.setRowFromChars(t,s)}setPageRows(t){this.ct.setRows(t)}showTestPage(){this.loadPageFromEncodedString(g[Z[this.Ls]]),this.Ls++,4==this.Ls&&(this.Ls=0)}showRandomisedPage(){const t=[];for(let s=0;s<25;s++){const s=[];for(let t=0;t<40;t++)s.push(String.fromCharCode(127*Math.random()));t.push(s.join(""))}this.setPageRows(t)}loadPageFromEncodedString(t){const s=class{static decodeBase64URLEncoded(t){const s=(t=t.replace(/-/g,"+").replace(/_/g,"/")).length%4;if(s){if(1===s)throw Error("Utils.decodeBase64URL: Input base64url string is the wrong length to determine padding");t+=Array(5-s).join("=")}const e=[...atob(t)].map((t=>l(t))),i=new ArrayBuffer(e.length);return new Uint8Array(i).set(e),(t=>{const s=[];for(let e=0;e<25;e++){const i=[];for(let s=0;s<40;s++){let r=6,n=0;const h=280*e+7*s;for(let s=h;s<h+7;s++)n+=t[s]*Math.pow(2,r),r--;i.push(String.fromCharCode(n))}s.push(i.join(""))}return s})(new r(i))}}.decodeBase64URLEncoded(t);this.setPageRows(s)}Hs(){window.addEventListener("ttx.reveal",(()=>this.Ds.reveal())),window.addEventListener("ttx.mix",(()=>this.Ds.mixMode())),window.addEventListener("ttx.subtitlemode",(()=>this.Ds.boxMode()))}toggleReveal(){this.Ds.reveal()}toggleMixMode(){this.Ds.mixMode()}toggleBoxMode(){this.Ds.boxMode()}toggleGrid(){this.Ds.grid()}setLevel(t){this.ct.setLevel(t)}addTo(t){this.Ms=t,this.Ds.addTo(t)}setFont(t){this.Ds.setFont(t)}clearScreen(t){this.ct.clearScreen(t)}setAspectRatio(t){if("natural"==t)return void this.Ds.setAspectRatio(t);const s=parseFloat(t);if(Number.isNaN(s))throw Error("E80 setAspectRatio: bad number");this.Ds.setAspectRatio(s)}setHeight(t){const s=parseFloat(t);if(Number.isNaN(s))throw Error("E98 setHeight: bad number");this.Ds.setHeight(s),this.js=s}setDefaultG0Charset(...t){this.ct.setPrimaryG0CharacterEncoding(...t)}setSecondG0Charset(...t){this.ct.setSecondaryG0CharacterEncoding(...t)}remove(){if(this.Ds.detach(),this.Ms){const t=document.querySelector(this.Ms);t&&t.removeChild(t.firstChild)}this.Ds=null}setView(t){switch(this.remove(),t){case"classic__font-for-mosaic":this.Ds=new X(this.ct);break;case"classic__graphic-for-mosaic":this.Ds=new K(this.ct);break;default:throw Error("setView E126: bad view name:"+t)}this.js&&this.Ds.setHeight(this.js),this.Ms&&this.Ds.addTo(this.Ms),this.ct.notify()}registerViewPlugin(t){t.registerWithView(this.Ds),this.ct.notify()}}(rt);export{v as Attributes,S as Colour,O as Level,nt as teletext};//# sourceMappingURL=teletext.min.js.map
// SPDX-FileCopyrightText: (c) 2021 Tech and Software Ltd.
// SPDX-FileCopyrightText: (c) 2017 dosaygo
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-uk.ltd.TechAndSoftware-1.0
var t,s;t=this,s=function(t){"use strict";const s=new Set(["Uint1Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","UInt32Array","Float32Array","Float64Array"]),e=Uint8Array,i=Symbol();class r{constructor(t,{length:s=null,buffer:i=null,byteOffset:r=0,byteLength:n=null}={}){let o;i?s=8*(n||i.byteLength):s||(s=0);const h=e.BYTES_PER_ELEMENT,_=8*h,l=_-1,a=(t=>{let s=0;for(;t>>=1;)s++;return s})(_),c=Math.max(1,s+l>>a);i?o=new e(i,r,c):(i=new ArrayBuffer(h*c),o=new e(i)),Object.assign(this,{buffer:i,byteOffset:r,length:s,wordSize:_,wordCount:c,wordSizeMask:l,wordSizeShift:a,internal:o})}toArray(){const t=new Uint8Array(this.length);for(let s=0;s<this.wordCount;s++){const e=this.internal[s];for(let i=s*this.wordSize;i<(s+1)*this.wordSize;i++)t[i]=this.getBit(i,e)}return t}getBit(t,s){if(!(t>=this.length))return null==s&&(s=this.internal[t>>this.wordSizeShift]),s>>(t&this.wordSizeMask)&1}setBit(t,s){if(t>=this.length)return;const e=t>>this.wordSizeShift,i=t&this.wordSizeMask,r=this.internal[e];let n=r;return n|=s<<i,n&=~((1&~s)<<i),r!==n&&(this.internal[e]=n),s}}class n{constructor(t,s=0,e=null){let n,h,c;switch(a(t)){case"Number":n=t=~~t,h=new r(this,{length:n});break;case"ArrayBuffer":h=new r(this,{buffer:t,byteOffset:s,byteLength:e});break;case"Undefined":case"Null":case"RegExp":case"Infinity":n=0,h=new r(this,{length:n});break;case"Array":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"UInt32Array":case"Float32Array":case"Float64Array":case"Uint1Array":case"Object":default:c=_(t),h=new r(this,{length:c.length}),c.forEach(((t,s)=>h.setBit(s,l(t))))}return this[i]=h,new o(this)}static get BYTES_PER_ELEMENT(){return.125}static get name(){return"Uint1Array"}static get length(){return 0}static get[Symbol.species](){return this}static[Symbol.hasInstance](t){return t.__proto__=this}static from(t){const s=_(t);return new n(s)}static of(...t){return n.from(t)}get buffer(){return this[i].buffer}get byteLength(){return this.length+7>>3}get byteOffset(){return this[i].byteOffset}get length(){return this[i].length}get[Symbol.toStringTag](){return"Uint1Array"}copyWithin(t,s=0,e=this.length){if(!Number.isInteger(t))return this;const i=new Uint8Array(e-s);for(let t=s;t<e;t++)i[t-s]=this[t];return this.set(i,t),this}entries(){return this[i].toArray().entries()}every(...t){return this[i].toArray().every(...t)}fill(t,s=0,e=this.length){for(let i=s;i<e;i++)this[i]=t;return this}filter(...t){return new n(this[i].toArray().filter(...t))}find(...t){return this[i].toArray().find(...t)}findIndex(...t){return this[i].toArray().findIndex(...t)}forEach(...t){this[i].toArray().forEach(...t)}includes(...t){return this[i].toArray().includes(...t)}indexOf(...t){return this[i].toArray().indexOf(...t)}join(...t){return this[i].toArray().join(...t)}keys(...t){return this[i].toArray().keys(...t)}lastIndexOf(...t){return this[i].toArray().lastIndexOf(...t)}map(...t){return new n(this[i].toArray().map(...t))}reduce(...t){return this[i].toArray().reduce(...t)}reduceRight(...t){return this[i].toArray().reduceRight(...t)}reverse(){const t=this[i].toArray().reverse();return this.set(t),this}set(t,e=0){if(!Number.isInteger(e))return;const i=a(t);if("Array"!==i&&!s.has(i))return;const r=Math.min(t.length+e,this.length);t=t.map((t=>l(t)));for(let s=e;s<r;s++)this[s]=t[s-e]}slice(...t){return new n(this[i].toArray().slice(...t))}sort(...t){const s=this[i].toArray().sort(...t);return this.set(s),this}subarray(...t){return new n(this[i].toArray().subarray(...t))}values(...t){return this[i].toArray().values(...t)}toLocaleString(...t){return Array.from(this).toLocaleString()}toString(){return""+Array.from(this)}[Symbol.iterator](){return this[i].toArray()[Symbol.iterator]()}valueOf(){return this}toJSON(){return Array.from(this)}}function o(t){const s=t[i];return new Proxy(t,{get(e,i,r){const n="string"==typeof i?parseInt(i):i;return Number.isInteger(n)?s.getBit(n):Reflect.get(t,i)},set(e,i,r,n){const o="string"==typeof i?parseInt(i):i;return Number.isInteger(o)?(s.setBit(o,l(r)),!0):Reflect.set(t,i,r)}})}const h=/\[object (\w+)]/;function _(t){const s=[];for(let e of t){const t=l(e);s.push(t)}return s}function l(t){return"number"!=typeof t||Number.isNaN(t)?new Boolean(t).valueOf():t%2}function a(t){const s=t&&t.constructor?t.constructor.name:null,e=h.exec(Object.prototype.toString.call(t))[1];return e!==s&&s?s:e}const c={};function A(t){if(t in c)return c[t];const s=[...t.charCodeAt(0).toString(2).padStart(8,"0")].reverse();return c[t]=Number.parseInt(s.join(""),2),c[t]}const u={ENGINEERING:"QIECBAgQIIcWLGg2EDdy3QIKnXKgYtUE7f2QA2TB0wYr2DECAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAYMS54fzJmix4-YCDToOLOjyZ0WLSkzo6AkcGHuZUcRHlB4dgyAAQAEABAAQAEABAAQAEABAAQAEABAAQAEABAAQAEABAAWDP9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9_YNCho9zImSoAqBGoAp0FUy8-iChhz5UCA4MPEuZYgTAFyAFg1_f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f2DYCAAoACACeQHkBdYTJlixIkSKlSJEoUKIEBQABAAQAEABYN_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_39g4AgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgGDn9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9_YsAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIBix_f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f2LICAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAYs_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_39i0AgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgGLX9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9_Ytq-jT0yg7OXZs39w0Pzh3Ao_LLl3BZuHPl3dMIGllyBIWzrlLmkKJGTSJUycsoUqlZJYtXLzLBiyZlWjVs3IuHLp2UePXz9AgQokaBIlTJ0ChSqVoFi1cvQMGLJmgaNWzdA4cunaB49fP0ECDChoIkWNHQSJMqWgmTZ09BQo0qaCpVrV0FizatoLl29fQYMOLGgyZc2dBo06taDZt3b0HDjy5oOnXt3QePPr2g-ff38pgw4sZHJlzZyujTq1ktm3dvNcOPLmW6de3cn48-vZf59_fwZiHv3Y8uHYIjbMPPQDVCxcLf4E0-mXDk8mI-_dlFCn5a9_DKr6q-qvqr6q-qvqr6AFS390DJoGQKr6q-qvqr6q-qvqr6o",ADVERT:"QIECBAgQIJ9KDDmRUDZi3QU8PRk1QQeHIHDaIEDJiwYumDACdDwcnbLy6aeeXbl3dECBAgQIECBAgQIECBAgQIHwZkvcoCx0og8LNGjYwQPEjzpoWaNjBA82YHnTQwabEjTpowPEiBAgLHSiBbs1atjFA9SPe2pZqQNUHX1qQatSlrqQNW-5UsaIECAsdKIFidUqQJUCVAlVKlipchQJUCJanVIEqpAlSqlC5CgQIEB0ogQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQHSKBAgQYEH7ogQaGCApw_fEm54R3PCm5JuSKHoFUEVIECAudIoECBB6-___TB-_v0JTU_WqkZHFyQKHmjYgYBECpAqQIC50igQIEH___3_-iD__6FFSAig-IP6JCg26lzRr3avEgFUgLnSKBAg1f1X9lv_9NSBAgI6G-HX1V_EqBUqQJUqXBzagVSAudIoECD9_Qa2qL__6IMDzoq682qdAgQIEARAgQIECBAgVIC50igQIP_9AiaoFX__0VfV_1kjQIECBAgQBECBAgAoECpAgLnSKBBq__0CBCgQa___oreokCBAgQIECBAgQBECBAgVIECAudIoEHr__QIECBAg3_36FAgQIECBAgQIECAIgQIFSBAgQIAZ0igQf_7dAgKIECAinKf9bTR9QIv-N6i_ofzNagQIECBAgJnSKDR__tUBRAoe6NiBB_XYf_rqg_q2iD-gRb-iBAgQIECAmdIoNX_-1QFECDrq9IMH9h664P_D-w34P7DZ4ToECBAgQICZ0ig___5TQ8SfEHzQ82MPCzpoedEHzA82MPjDQ0-LNDSk0JnSOD___lNXVh_Qf9T3cx_oP-prqa_1S3Y0_q_zX-s1NdTUmdI6v_9-U1NUH9B_1NdTX-g_6mvpL_wMNTX-g1Nf6DAz1tSZ0j-_v0JREjQokaFEhRIUSNCiRoUCNAjRoEaBEhRo0CNGgBnSP9OgQFECCNPpIIVKfDkVaUWmggzoiCFPny5M6PTQIECAGdIjUAGlJnR0DBu5coGrFm0YMEE-kgpxYqChBjxUDNuwQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAy92np007s6AFSy9tOXvzQA7O_ryQTd-7L5DQVtpBJ3ZMvg",UK:"QIECBAgQIIcWLGg2EDFy2QIJu_cgZNUETLjQA2TN0xYr2DAodJIECBAgQIEGDB4_PUCBAgQIECBAgQIECBAgQIEANkvaMih0kgQIECDA1Qfv__OgQYGCBAgQIECBAgQIECBAgQIECBAgKHSSBAgQIH6FR-__-v7___oECBAgQIEAORPmxUE6LXpoECAodJIECBAoQKum7______9-gQIECBAgQA82_Zs39-aB8-QIAh0kgQIECBAgSev_____v06BAgQIECBAgQIECBAgQIECBAgKHSSBAgQIECBR00____-_w9GCBAgQIECBAgQIECBAgQIECAodJIECBAgQIECD8rx________ECBAgQIECBAgQIECBAgQICh0kgQIECBAgQLETRlv_______6oECBAgQIECBAgQIECBAgKHSyBAgQIHGQlwYIEH_-_x_____9-dECBAgQIECBAgQIECAIdLIECDAmJbfz_-0RJ0qBV________7sECBAgQIECBAgQIAh0sgQIMzAl-__fX5Sg0JECvX______586IECBAgQIECBAgCHSyBAgwJiW9OjX_0qBAgQIEX________-l8fPjBAgQIECAIdLIEHBYhQIECBQxQICWDhg5fv____________tUCBAgQIAh0sgzIECBAgQIEGlAgQEtP_______________-lQIECBAgCHSyBUwQIECBAgQakCBASQqv_____________-6FAgQIECAIdLIECJygQIECBAgaoEBJBg______________5-OiBAgQIAh0sgQKGKBAgQIEHBKgJIMH7____8v__________QoECBAgCHSyBRmQIECBA4RoECAkgVoVaNel________r16FAgQIECAIdLINCFAgwOEyBAgQICSBAgQePn7___r06RAgQIECBAgQIAh0sgQLeKxCgQIECBAgJIECDR__v0aNGhQIECBAgQIECBAgCHSSBAgQIECBAgQIECBAgQYP3_-1QIECBAgQIECBAgQIECAIdJIECBAgQIECBAgQIECBB6boUSBAgQIECBAgQIECBAgQIAh0kgQIECBAgQIECBAgQIFStAgQIECBAgQIECBAgQIECBAgAzsvjognZe_MFIy4cmzTuy8wdTfwQU-G_l0DVKy-lhyad6A"},g="http://www.w3.org/2000/svg";let f=0;class d{constructor(){}tt(){return this.st}et(){this.st=null}attr(t,s){if("object"==typeof t)for(const s in t)null==t[s]?this.st.removeAttribute(s):this.st.setAttribute(s,t[s]);else{if(void 0===s)return this.st.getAttribute(t);null==s?this.st.removeAttribute(t):this.st.setAttribute(t,s)}return this}addClass(t){if(!this.hasClass(t)){const s=this.classes();s.push(t),this.st.setAttribute("class",s.join(" "))}return this}hasClass(t){return-1!==this.classes().indexOf(t)}classes(){const t=this.st.getAttribute("class");return null==t?[]:t.split(" ")}removeClass(t){return this.hasClass(t)&&this.st.setAttribute("class",this.classes().filter((s=>s!==t)).join(" ")),this}toggleClass(t){return this.hasClass(t)?this.removeClass(t):this.addClass(t),this}data(t,s){if("object"==typeof t)for(const s in t)null==t[s]?delete this.st.dataset[s]:this.st.dataset[s]=t[s];else{if(void 0===s)return this.st.dataset[t];null==s?delete this.st.dataset[t]:this.st.dataset[t]=s}return this}}class C extends d{constructor(){return super(),this.st=document.createElementNS(g,"svg"),this.st.setAttribute("xmlns",g),this}addTo(t){return document.querySelector(t).appendChild(this.st),this}viewbox(t){return this.st.setAttribute("viewBox",t),this}size(t,s){return this.st.setAttribute("width",t),this.st.setAttribute("height",s),this}style(t){const s=document.createElementNS(g,"style");return s.append(t),this.st.append(s),this}group(){const t=new I;return this.st.append(t.tt()),t}width(){return this.st.clientWidth}height(){return this.st.clientHeight}symbol(t){const s=new y(t);return this.st.append(s.tt()),s}}class I extends d{constructor(){return super(),this.st=document.createElementNS(g,"g"),this.it=[],this}group(){const t=new I;return this.st.append(t.tt()),this.it.push(t),t}plain(t){const s=new B(t);return this.st.append(s.tt()),this.it.push(s),s}defs(){const t=new m;return this.st.append(t.tt()),t}rect(t,s){const e=new p(t,s);return this.st.append(e.tt()),this.it.push(e),e}last(){return this.it[this.it.length-1]}children(){return this.it}clipWith(t){return this.st.setAttribute("clip-path",`url("#${t.tt().id}")`),this}unclip(){return this.st.removeAttribute("clip-path"),this}remove(){this.st.parentNode&&this.st.parentNode.removeChild(this.st),this.st=null,this.it.forEach((t=>t.et())),this.it=[]}line(t,s,e,i){const r=new w(t,s,e,i);return this.st.append(r.tt()),this.it.push(r),r}use(t){const s=new b(t);return this.st.append(s.tt()),this.it.push(s),s}image(t,s){const e=new E(t,s);return this.st.append(e.tt()),this.it.push(e),e}}class E extends d{constructor(t,s){return super(),this.st=document.createElementNS(g,"image"),this.st.setAttribute("width",parseInt(t)),this.st.setAttribute("height",parseInt(s)),this}}class b extends d{constructor(t){return super(),this.st=document.createElementNS(g,"use"),this.st.setAttribute("href","#"+t),this}fill(t){return this.st.setAttribute("fill",t),this}move(t,s){return this.st.setAttribute("x",t),this.st.setAttribute("y",s),this}}class y extends d{constructor(t){return super(),this.st=document.createElementNS(g,"symbol"),this.st.setAttribute("id",t),this}rect(t,s){const e=new p(t,s);return this.st.append(e.tt()),e}}class B extends d{constructor(t){return super(),this.st=document.createElementNS(g,"text"),this.st.append(t),this}plain(t){return this.st.textContent=t,this}fill(t){return this.st.setAttribute("fill",t),this}}class m extends d{constructor(){return super(),this.st=document.createElementNS(g,"defs"),this}clip(){const t=new Q;return this.st.append(t.tt()),t}find(t){return[...this.st.querySelectorAll(t)].map(S)}rect(t,s){const e=new p(t,s);return this.st.append(e.tt()),e}}class Q extends d{constructor(){return super(),this.st=document.createElementNS(g,"clipPath"),this.st.setAttribute("id","clipPath-"+f),f++,this}children(){return[...this.st.children].map(S)}add(t){this.st.appendChild(t.tt())}}class p extends d{constructor(t,s){if(super(),t instanceof SVGElement)return this.st=t,this;const e=t;return this.st=document.createElementNS(g,"rect"),this.st.setAttribute("width",parseInt(e)),this.st.setAttribute("height",parseInt(s)),this}fill(t){return this.st.setAttribute("fill",t),this}move(t,s){return this.st.setAttribute("x",t),this.st.setAttribute("y",s),this}width(t){return void 0===t?parseInt(this.st.getAttribute("width")):(this.st.setAttribute("width",parseInt(t)),this)}height(t){return void 0===t?parseInt(this.st.getAttribute("height")):(this.st.setAttribute("height",parseInt(t)),this)}remove(){this.st.parentNode&&this.st.parentNode.removeChild(this.st),this.st=null}}class w extends d{constructor(t,s,e,i){return super(),this.st=document.createElementNS(g,"line"),this.st.setAttribute("x1",t),this.st.setAttribute("y1",s),this.st.setAttribute("x2",e),this.st.setAttribute("y2",i),this}}function S(t){let s;switch(t.constructor.name){case"SVGRectElement":s=new p(t);break;default:throw Error("SVG:wrapSVGElement Unable to wrap SVG element of type "+t.constructor.name)}return s}const x={BLACK:Symbol(),RED:Symbol(),GREEN:Symbol(),YELLOW:Symbol(),BLUE:Symbol(),MAGENTA:Symbol(),CYAN:Symbol(),WHITE:Symbol()};Object.freeze(x);const U={ALPHA:Symbol(),MOSAIC_CONTIGUOUS:Symbol(),MOSAIC_SEPARATED:Symbol()};Object.freeze(U);const k={NORMAL_SIZE:Symbol(),DOUBLE_HEIGHT:Symbol(),DOUBLE_WIDTH:Symbol(),DOUBLE_SIZE:Symbol()};Object.freeze(k);class v{static charFromTextColour(t){if(t in L)return L[t];throw Error("Attributes.charFromTextColour: bad colour: "+t)}static charFromGraphicColour(t){if(t in H)return H[t];throw Error("Attributes.charFromGraphicColour: bad colour")}static charFromAttribute(t){if(t in j)return j[t];throw Error("Attributes.charFromAttribute: bad attribute")}static attribFromChar(t,s){let e=null,i=null;return s in N&&O[t].includes(s.charCodeAt(0))?s in F?(e=v.TEXT_COLOUR,i=N[s]):s in D?(e=v.MOSAIC_COLOUR,i=N[s]):e=N[s]:s.charCodeAt(0)<=31&&(e=v.UNKNOWN),{attribute:e,colour:i}}static fillColourFromColourAttrib(t){return R[t]}}v.TEXT_COLOUR=U.ALPHA,v.MOSAIC_COLOUR=Symbol(),v.NEW_BACKGROUND=Symbol(),v.BLACK_BACKGROUND=Symbol(),v.CONTIGUOUS_GRAPHICS=U.MOSAIC_CONTIGUOUS,v.SEPARATED_GRAPHICS=U.MOSAIC_SEPARATED,v.ESC=Symbol(),v.FLASH=Symbol(),v.STEADY=Symbol(),v.NORMAL_SIZE=k.NORMAL_SIZE,v.DOUBLE_HEIGHT=k.DOUBLE_HEIGHT,v.DOUBLE_WIDTH=k.DOUBLE_WIDTH,v.DOUBLE_SIZE=k.DOUBLE_SIZE,v.CONCEAL=Symbol(),v.HOLD_MOSAICS=Symbol(),v.RELEASE_MOSAICS=Symbol(),v.START_BOX=Symbol(),v.END_BOX=Symbol(),v.UNKNOWN=Symbol();const R={[x.BLACK]:"#000",[x.RED]:"#f00",[x.GREEN]:"#0f0",[x.YELLOW]:"#ff0",[x.BLUE]:"#00f",[x.MAGENTA]:"#f0f",[x.CYAN]:"#0ff",[x.WHITE]:"#fff"};Object.freeze(R);const F={"\0":x.BLACK,"":x.RED,"":x.GREEN,"":x.YELLOW,"":x.BLUE,"":x.MAGENTA,"":x.CYAN,"":x.WHITE};Object.freeze(F);const D={"":x.BLACK,"":x.RED,"":x.GREEN,"":x.YELLOW,"":x.BLUE,"":x.MAGENTA,"":x.CYAN,"":x.WHITE};Object.freeze(D);const N={"\b":v.FLASH,"\t":v.STEADY,"\n":v.END_BOX,"\v":v.START_BOX,"\f":v.NORMAL_SIZE,"\r":v.DOUBLE_HEIGHT,"":v.DOUBLE_WIDTH,"":v.DOUBLE_SIZE,"":v.CONCEAL,"":v.CONTIGUOUS_GRAPHICS,"":v.SEPARATED_GRAPHICS,"":v.ESC,"":v.BLACK_BACKGROUND,"":v.NEW_BACKGROUND,"":v.HOLD_MOSAICS,"":v.RELEASE_MOSAICS},L={};for(const t in F)L[F[t]]=t,N[t]=F[t];Object.freeze(L);const H={};for(const t in D)H[D[t]]=t,N[t]=D[t];Object.freeze(H),Object.freeze(N);const j={};for(const t in N)j[N[t]]=t;Object.freeze(j);const M={0:Symbol(),1:Symbol(),1.5:Symbol(),2.5:Symbol()};Object.freeze(M);const O={};O[M[0]]=[1,2,3,4,5,6,7,8,9,17,18,19,20,21,22,23],O[M[1]]=[...O[M[0]]].concat([10,11,12,13,24,25,26,27,28,29,30,31]),O[M[1.5]]=[...O[M[1]]].concat([0,16]),O[M[2.5]]=[...O[M[1.5]]].concat([14,15]),Object.freeze(O);const G=10,P=10,q={rt:{nt:10.4,ot:-5.2},ht:{nt:P,ot:-4.5}};Object.freeze(q);class T{constructor(t){this._t=(new C).viewbox("0 0 399 249").size(800,666.6666666666666).attr({preserveAspectRatio:"none",style:'font-family: "sans-serif"'}).style("@font-face {\nfont-family: 'Unscii';\nsrc: url('fonts/unscii-16.woff') format('woff'), \nurl('fonts/unscii-16.ttf') format('truetype'),\nurl('fonts/unscii-16.otf') format('opentype');\nunicode-range: U+0000-00FF, U+2022, U+2500, U+2502, U+250C, U+2510, U+2514, U+2518, U+251C, U+251D, U+2524, U+2525, U+252C, U+252F, U+2534, U+2537, U+253C, U+253F, U+2588, U+258C, U+2590, U+2592, U+25CB, U+25CF, U+25E2-25E5, U+2B60-2B63, U+E0C0-E0FF, U+1FB00-1FB70, U+1FB75, U+1FBA0-1FBA7;\n-webkit-font-smoothing: none;\nfont-smooth: never;\n}\n@font-face {\nfont-family: 'Bedstead';\nsrc: url('fonts/bedstead.otf') format('opentype');\nunicode-range: U+0000-00FF;\n}\n@keyframes blink {\nto {\nvisibility: hidden;\n}\n}\n@keyframes fancyblink {\nfrom {\nfilter: none;\nopacity: 0.7;\n}\n33% {\nfilter: none;\nopacity: 1;\n}\n66% {\nfilter: blur(0px);\nopacity: 1;\n}\n95% {\nfilter: blur(4px);\nopacity: 0;\n}\nto {\nfilter: blur(0px);\nopacity: 0;\n}\n}\n#textlayer {\nfont-size: 10px;\n}\n.mosaic {\nfont-family: 'Unscii';\nfont-size: 10.3px;\n}\n.mosaic_separated {\nfont-family: 'Unscii';\nfont-size: 10px;\n}\n.flash_flashing .flash {\n/* animation: blink 2s steps(3, start) infinite; */\nanimation: fancyblink 2s linear infinite;\n}\n.conceal_concealed .conceal {\nvisibility: hidden;\n}\nsvg #background {\ntransition-property: opacity;\ntransition-duration: 0.25s;\n}\nsvg {\nbackground-color: transparent;\n}\nsvg use {\nshape-rendering: crispEdges;\n}\nrect { color: orange; }\n"),this.d=this._t.group().attr("class","conceal_concealed flash_flashing"),this.lt=1.2,this.at(),this.ct(),this.At=null,this.ut=t,this.gt=this.ut.onSet.attach((()=>this.ft())),this.dt=!1,this.Ct=!1,this.It=!1,this.Et={}}addTo(t){this._t.addTo(t)}detach(){this.ut.onSet.detach(this.gt),this.gt=null}ft(){let t=!1,s=!1;this.It=!1,this.d.removeClass("flash_flashing"),this.bt.forEach(((e,i)=>{let r=!1;if(this.yt(i),t)return t=!1,void this.Bt(e,i);const n=this.ut.getRow(i);let o,h;e.forEach(((t,e)=>{if(r)return r=!1,this.Qt(t),this.wt(i),void(h&&this.St());const _=n.getCell(e),l=v.fillColourFromColourAttrib(_.bgColour),a=_.isMosaicByte(),c=v.fillColourFromColourAttrib(_.fgColour),A=this.xt(_.type,a);this.Ut(t,_,A,c,e,i,a),_.boxed&&(h?this.St():this.kt(i,e),this.It=!0),o==l?this.wt(i):this.vt(i,e,l),_.size!=k.DOUBLE_WIDTH&&_.size!=k.DOUBLE_SIZE||(r=!0),o=l,h=_.boxed,_.flashing&&(s=!0)})),n.doubleHeight?(this.Rt(i),this.Ft(),t=!0):t=!1,this.Dt(i)})),"Nt"in this.Et&&this.Et.Nt(this._t.width(),this._t.height()),this.d.addClass("conceal_concealed"),s&&setTimeout((()=>this.d.addClass("flash_flashing")),100),this.Lt()}yt(t){this.Ht(t),this.jt(t)}Bt(t,s){"Mt"in this.Et&&this.Et.Mt(t.length,s),t.forEach((t=>this.Qt(t)))}Qt(t){t.plain(" ").attr({dx:null,dy:null,textLength:null,lengthAdjust:null,"text-anchor":null,transform:null,class:null})}Ut(t,s,e,i,r,n,o){this.Ot(t,s,e,i,r,n),s.type==U.MOSAIC_CONTIGUOUS&&o?t.addClass("mosaic"):s.type==U.MOSAIC_SEPARATED&&o&&t.addClass("mosaic_separated")}Ot(t,s,e,i,r,n){t.plain(s.char).attr(e).fill(i),s.size==k.DOUBLE_HEIGHT?t.attr("transform",`translate(0 ${X(n)}) scale(1 2)`):s.size==k.DOUBLE_WIDTH?t.attr("transform",`translate(${Z(r)} 0) scale(2 1)`):s.size==k.DOUBLE_SIZE&&t.attr("transform",`translate(${Z(r)} ${X(n)}) scale(2 2)`),s.flashing&&t.addClass("flash"),s.concealed&&t.addClass("conceal")}reveal(){this.d.toggleClass("conceal_concealed")}setFont(t){let s='"'+t+'"';"native"==t?s='-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif':"default"==t&&(s="sans-serif"),this._t.attr("style","font-family: "+s)}grid(){this.At?(this.At.remove(),this.At=null):this.Gt()}mixMode(){this.Ct?(this.Ct=!1,this.Pt.attr("opacity",null).unclip()):(this.Ct=!0,this.qt())}setAspectRatio(t){this.lt=t,this.setHeight(this._t.height())}setHeight(t){this._t.size("natural"==this.lt?1.6*t:t*this.lt,t)}qt(){this.dt&&this.It?this.Pt.attr("opacity",.3):this.It?this.Pt.clipWith(this.Tt).attr("opacity",.3):this.Pt.attr("opacity",0)}Lt(){this.Ct&&this.qt()}boxMode(){this.dt?(this.d.unclip(),this.dt=!1):(this.d.clipWith(this.Tt),this.dt=!0),this.Lt()}Gt(){this.At=this.d.group();for(let t=0;t<25;t++)this.At.line(0,t*G,399,t*G).attr({stroke:"#555","stroke-width":.5});for(let t=0;t<40;t++)this.At.line(t*P,0,t*P,249).attr({stroke:"#555","stroke-width":.5})}ct(){this.zt=this.d.defs(),this.Jt=null,this.Tt=this.zt.clip()}at(){this.Yt(),this.Vt()}Yt(){const t=this.d.group();t.attr({"shape-rendering":"crispEdges",id:"background"}),this.Kt=[],this.Pt=t}Vt(){const t=[],s=this.d.group().attr({"text-anchor":"middle",fill:"#fff"}).attr("id","textlayer");for(let e=0;e<25;e++){const i=[];for(let t=0;t<40;t++)i.push(s.plain(String.fromCharCode(32+95*Math.random())).attr({x:t*P+5,y:e*G+8}));t.push(i)}this.bt=t,this.Xt=s}jt(t){this.Tt.children().filter((s=>s.data("r")==t)).forEach((t=>t.remove()))}Ht(t){this.Kt[t]&&this.Kt[t].remove(),this.Kt[t]=this.Pt.group()}wt(t){const s=this.Kt[t].last(),e=s.width();s.width(e+P)}vt(t,s,e){const i=s*P,r=t*G;this.Kt[t].rect(P,G).fill(e).move(i,r)}St(){const t=this.Jt.width();this.Jt.width(t+P)}Rt(t){this.Kt[t].children().forEach((t=>t.attr("height",20)))}Ft(){this.zt.find("[data-boxbuffer]").forEach((t=>t.height(20)))}kt(t,s){const e=s*P,i=t*G;this.Jt=this.zt.rect(P,G).data("boxbuffer",!0).move(e,i)}Dt(t){this.zt.find("[data-boxbuffer]").forEach((s=>{s.data({r:t,boxbuffer:null}),this.Tt.add(s)}))}xt(t,s){return t==U.MOSAIC_CONTIGUOUS&&s?{dx:q.rt.ot,dy:-.15,textLength:q.rt.nt,lengthAdjust:"spacingAndGlyphs","text-anchor":"start",transform:null,class:null}:t==U.MOSAIC_SEPARATED&&s?{dx:q.ht.ot,dy:null,textLength:q.ht.nt,lengthAdjust:"spacingAndGlyphs","text-anchor":"start",transform:null,class:null}:{dx:null,dy:null,textLength:null,lengthAdjust:null,"text-anchor":null,transform:null,class:null}}registerPlugin(t,s){return"renderBackground"in s&&(this.Et.Zt=s.renderBackground),"renderMosaic"in s&&(this.Et.$t=s.renderMosaic),"endOfPageUpdate"in s&&(this.Et.Nt=s.endOfPageUpdate),"clearCellsForRow"in s&&(this.Et.Mt=s.clearCellsForRow),{lookupColour:z,isDoubleHeight:J,isDoubleWidth:Y,isDoubleSize:V,isSeparatedMosaic:K,createImageOverlay:this.Wt.bind(this)}}Wt(){const t=this.d.image(400,250);return t.attr("preserveAspectRatio","none"),t}}T.ts=P,T.ss=G,T.es=20,T.rs=20,T.ns=400,T.os=250,T.ROWS=25,T.COLS=40;const z=t=>v.fillColourFromColourAttrib(t),J=t=>t==k.DOUBLE_HEIGHT,Y=t=>t==k.DOUBLE_WIDTH,V=t=>t==k.DOUBLE_SIZE,K=t=>t==U.MOSAIC_SEPARATED,X=t=>0-t*G,Z=t=>0-t*P;class $ extends T{constructor(t){super(t),this.hs=new Set}at(){super.at(),this._s=[],this.ls=this.d.group()}yt(t){super.yt(t),this.cs(t)}Ut(t,s,e,i,r,n,o){"Zt"in this.Et&&this.Et.Zt(n,r,s.size,s.bgColour),s.type!=U.ALPHA&&o?o&&(t.plain(" ").attr(e),this.As(n,r,s,i)):this.Ot(t,s,e,i,r,n)}As(t,s,e,i){if("$t"in this.Et&&this.Et.$t(t,s,e,i))return;const r=e.getSextants();if(!r.includes("1"))return;let n,o=e.type==U.MOSAIC_CONTIGUOUS?"c":"s";if(o+=r.join(""),!this.hs.has(o)){this.hs.add(o);const t=this._t.symbol(o);if(e.type==U.MOSAIC_CONTIGUOUS){t.attr({preserveAspectRatio:"none",width:T.ts+.3,height:T.ss+.2,viewBox:"0 0 12 18"});for(let s=0;s<6;s++)"1"==r[s]&&t.rect(6,6).move(s%2*6,6*Math.floor(s/2))}else{t.attr({preserveAspectRatio:"none",width:T.ts,height:T.ss,viewBox:"0 0 12 18"});for(let s=0;s<6;s++)"1"==r[s]&&t.rect(4,4).move(s%2*6+1,6*Math.floor(s/2)+2)}}n=e.type==U.MOSAIC_CONTIGUOUS?this._s[t].use(o).move(s*T.ts-.15,t*T.ss-.1).fill(i):this._s[t].use(o).move(s*T.ts,t*T.ss).fill(i),e.size!=k.DOUBLE_HEIGHT&&e.size!=k.DOUBLE_SIZE||n.attr("height",T.rs),e.size!=k.DOUBLE_WIDTH&&e.size!=k.DOUBLE_SIZE||n.attr("width",T.es),e.flashing&&n.addClass("flash"),e.concealed&&n.addClass("conceal")}cs(t){this._s[t]&&this._s[t].remove(),this._s[t]=this.ls.group()}xt(t,s){return{dx:null,dy:null,textLength:null,lengthAdjust:null,"text-anchor":null,transform:null,class:null}}}class W extends T{}const tt=["ENGINEERING","ADVERT","UK"],st={latin_g0:{$:"¤","":"■"},latin_g0__czech_slovak:{"#":"#",$:"ů","@":"č","[":"ť","\\":"ž","]":"ý","^":"í",_:"ř","`":"é","{":"á","|":"|","}":"ú","~":"š"},latin_g0__english:{"#":"£",$:"$","@":"@","[":"←","\\":"½","]":"→","^":"↑",_:"#","`":"—","{":"¼","|":"‖","}":"¾","~":"÷"},latin_g0__estonian:{"#":"#",$:"õ","@":"Š","[":"Ä","\\":"Ö","]":"Ž","^":"Ü",_:"Õ","`":"š","{":"ä","|":"ö","}":"ž","~":"ü"},latin_g0__french:{"#":"é",$:"ï","@":"à","[":"ë","\\":"ê","]":"ù","^":"î",_:"#","`":"è","{":"â","|":"ô","}":"û","~":"ç"},latin_g0__german:{"#":"#",$:"$","@":"§","[":"Ä","\\":"Ö","]":"Ü","^":"^",_:"_","`":"°","{":"ä","|":"ö","}":"ü","~":"ß"},latin_g0__italian:{"#":"£",$:"$","@":"é","[":"°","\\":"ç","]":"→","^":"↑",_:"#","`":"ù","{":"à","|":"ò","}":"è","~":"ì"},latin_g0__latvian_lithuanian:{"#":"#",$:"$","@":"Š","[":"ė","\\":"ę","]":"Ž","^":"č",_:"ū","`":"š","{":"ą","|":"ų","}":"ž","~":"į"},latin_g0__polish:{"#":"#",$:"ń","@":"ą","[":"Ƶ","\\":"Ś","]":"Ł","^":"ć",_:"ó","`":"ę","{":"ż","|":"ś","}":"ł","~":"ź"},latin_g0__portuguese_spanish:{"#":"ç",$:"$","@":"¡","[":"á","\\":"é","]":"í","^":"ó",_:"ú","`":"¿","{":"ü","|":"ñ","}":"è","~":"à"},latin_g0__romanian:{"#":"#",$:"¤","@":"Ț","[":"Â","\\":"Ș","]":"Ă","^":"Î",_:"ı","`":"ț","{":"â","|":"ș","}":"ă","~":"î"},latin_g0__serbian_croatian_slovenian:{"#":"#",$:"Ë","@":"Č","[":"Ć","\\":"Ž","]":"Đ","^":"Š",_:"ë","`":"č","{":"ć","|":"ž","}":"đ","~":"š"},latin_g0__swedish_finnish_hungarian:{"#":"#",$:"¤","@":"É","[":"Ä","\\":"Ö","]":"Å","^":"Ü",_:"_","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},latin_g0__turkish:{"#":"₺",$:"ğ","@":"İ","[":"Ş","\\":"Ö","]":"Ç","^":"Ü",_:"Ğ","`":"ı","{":"ş","|":"ö","}":"ç","~":"ü"},greek_g0:{"<":"«",">":"»","@":"ΐ",A:"Α",B:"Β",C:"Γ",D:"Δ",E:"Ε",F:"Ζ",G:"Η",H:"Θ",I:"Ι",J:"Κ",K:"Λ",L:"Μ",M:"Ν",N:"Ξ",O:"Ο",P:"Π",Q:"Ρ",R:"ʹ",S:"Σ",T:"Τ",U:"Υ",V:"Φ",W:"Χ",X:"Ψ",Y:"Ω",Z:"Ϊ","[":"Ϋ","\\":"ά","]":"έ","^":"ή",_:"ί","`":"ΰ",a:"α",b:"β",c:"γ",d:"δ",e:"ε",f:"ζ",g:"η",h:"θ",i:"ι",j:"κ",k:"λ",l:"μ",m:"ν",n:"ξ",o:"ο",p:"π",q:"ρ",r:"ς",s:"σ",t:"τ",u:"υ",v:"φ",w:"χ",x:"ψ",y:"ω",z:"ϊ","{":"ϋ","|":"ό","}":"ύ","~":"ώ","":"■"},cyrillic_g0:{"@":"Ю",A:"А",B:"Б",C:"Ц",D:"Д",E:"Е",F:"Ф",G:"Г",H:"Х",I:"И",J:"Ѝ",K:"К",L:"Л",M:"М",N:"Н",O:"О",P:"П",Q:"Я",R:"Р",S:"С",T:"Т",U:"У",V:"Ж",W:"В",X:"Ь",Z:"З","[":"Ш","]":"Щ","^":"Ч","`":"ю",a:"а",b:"б",c:"ц",d:"д",e:"е",f:"ф",g:"г",h:"х",i:"и",j:"ѝ",k:"к",l:"л",m:"м",n:"н",o:"о",p:"п",q:"я",r:"р",s:"с",t:"т",u:"у",v:"ж",w:"в",x:"ь",z:"з","{":"ш","}":"щ","~":"ч","":"■"},cyrillic_g0__russian_bulgarian:{"&":"ы",Y:"Ъ","\\":"Э",_:"Ы",y:"ъ","|":"э"},cyrillic_g0__serbian_croatian:{"@":"Ч",J:"Ј",Q:"Ќ",V:"В",W:"Ѓ",X:"Љ",Y:"Њ","[":"Ћ","\\":"Ж","]":"Ђ","^":"Ш",_:"Џ","`":"ч",j:"ј",q:"ќ",v:"в",w:"ѓ",x:"љ",y:"њ","{":"ћ","|":"ж","}":"ђ","~":"ш"},cyrillic_g0__ukranian:{"&":"ї",Y:"І","\\":"Є",_:"Ї",y:"і","|":"є"},arabic_g0:{"#":"£","&":"ﻰ","'":"ﻱ","(":")",")":"(",";":"؛","<":">",">":"<","?":"؟","@":"ﺔ",A:"ﺀ",B:"ﺒ",C:"ﺏ",D:"ﺘ",E:"ﺕ",F:"ﺎ",G:"ﺍ",H:"ﺑ",I:"ﺓ",J:"ﺗ",K:"ﺛ",L:"ﺟ",M:"ﺣ",N:"ﺧ",O:"ﺩ",P:"ﺫ",Q:"ﺭ",R:"ﺯ",S:"ﺳ",T:"ﺷ",U:"ﺻ",V:"ﺿ",W:"ﻃ",X:"ﻇ",Y:"ﻋ",Z:"ﻏ","[":"ﺜ","\\":"ﺠ","]":"ﺤ","^":"ﺨ",_:"#","`":"ـ",a:"ﻓ",b:"ﻗ",c:"ﻛ",d:"ﻟ",e:"ﻣ",f:"ﻧ",g:"ﻫ",h:"ﻭ",i:"ﻰ",j:"ﻳ",k:"ﺙ",l:"ﺝ",m:"ﺡ",n:"ﺥ",o:"ﻴ",p:"ﻯ",q:"ﻌ",r:"ﻐ",s:"ﻔ",t:"ﻑ",u:"ﻘ",v:"ﻕ",w:"ﻙ",x:"ﻠ",y:"ﻝ",z:"ﻤ","{":"ﻡ","|":"ﻨ","}":"ﻥ","~":"ﻻ","":"■"},hebrew_g0:{"#":"£","[":"←","\\":"½","]":"→","^":"↑",_:"#","`":"א",a:"ב",b:"ג",c:"ד",d:"ה",e:"ו",f:"ז",g:"ח",h:"ט",i:"י",j:"ך",k:"כ",l:"ל",m:"ם",n:"מ",o:"ן",p:"נ",q:"ס",r:"ע",s:"ף",t:"פ",u:"ץ",v:"צ",w:"ק",x:"ר",y:"ש",z:"ת","{":"₪","|":"‖","}":"¾","~":"÷","":"■"},g1_block_mosaic_to_unicode__legacy_computing:{0:"🬏",1:"🬐",2:"🬑",3:"🬒",4:"🬓",5:"▌",6:"🬔",7:"🬕",8:"🬖",9:"🬗"," ":" ","!":"🬀",'"':"🬁","#":"🬂",$:"🬃","%":"🬄","&":"🬅","'":"🬆","(":"🬇",")":"🬈","*":"🬉","+":"🬊",",":"🬋","-":"🬌",".":"🬍","/":"🬎",":":"🬘",";":"🬙","<":"🬚","=":"🬛",">":"🬜","?":"🬝","`":"🬞",a:"🬟",b:"🬠",c:"🬡",d:"🬢",e:"🬣",f:"🬤",g:"🬥",h:"🬦",i:"🬧",j:"▐",k:"🬨",l:"🬩",m:"🬪",n:"🬫",o:"🬬",p:"🬭",q:"🬮",r:"🬯",s:"🬰",t:"🬱",u:"🬲",v:"🬳",w:"🬴",x:"🬵",y:"🬶",z:"🬷","{":"🬸","|":"🬹","}":"🬺","~":"🬻","":"█"},g1_block_mosaic_to_unicode__unscii_separated:{0:"",1:"",2:"",3:"",4:"",5:"",6:"",7:"",8:"",9:""," ":" ","!":"",'"':"","#":"",$:"","%":"","&":"","'":"","(":"",")":"","*":"","+":"",",":"","-":"",".":"","/":"",":":"",";":"","<":"","=":"",">":"","?":"","`":"",a:"",b:"",c:"",d:"",e:"",f:"",g:"",h:"",i:"",j:"",k:"",l:"",m:"",n:"",o:"",p:"",q:"",r:"",s:"",t:"",u:"",v:"",w:"",x:"",y:"",z:"","{":"","|":"","}":"","~":"","":""}},et={};class it{constructor(){this.us=" ",this.gs=" ",this.fs=x.WHITE,this.ds=x.BLACK,this.Cs=U.ALPHA,this.Is=!1,this.Es=k.NORMAL_SIZE,this.bs=!1,this.ys=!1,this.Bs=null}set byte(t){this.us=t}get byte(){return this.us}set fgColour(t){this.fs=t}get fgColour(){return this.fs}set bgColour(t){this.ds=t}get bgColour(){return this.ds}setMappedChar(t){this.gs=this.Cs==U.ALPHA||0==(32&this.us.charCodeAt(0))?rt(this.us,t):rt(this.us,this.Cs==U.MOSAIC_CONTIGUOUS?"g1_block_mosaic_to_unicode__legacy_computing":"g1_block_mosaic_to_unicode__unscii_separated"),this.Bs=null}setSpace(t){if(this.Cs!=U.MOSAIC_CONTIGUOUS&&this.Cs!=U.MOSAIC_SEPARATED||!t.active)this.Bs=null,this.gs=" ";else{this.Bs=t.char,this.Cs=t.type;let s="g1_block_mosaic_to_unicode__legacy_computing";this.Cs==U.MOSAIC_SEPARATED&&(s="g1_block_mosaic_to_unicode__unscii_separated"),this.gs=rt(t.char,s)}}get char(){return this.gs}get type(){return this.Cs}set type(t){this.Cs=t}set flashing(t){this.Is=t}get flashing(){return this.Is}get size(){return this.Es}set size(t){this.Es=t}set concealed(t){this.bs=t}get concealed(){return this.bs}set boxed(t){this.ys=t}get boxed(){return this.ys}isMosaicByte(){const t=null!=this.Bs?this.Bs.charCodeAt(0):this.us.charCodeAt(0);return t<=127&&32==(32&t)}isMosaic(){const t=this.us.charCodeAt(0);return(this.Cs==U.MOSAIC_CONTIGUOUS||this.Cs==U.MOSAIC_SEPARATED)&&t<=127&&32==(32&t)}getSextants(){const t=null!=this.Bs?this.Bs.charCodeAt(0):this.us.charCodeAt(0);if(t>127)return null;if(t in et)return et[t];let s=t-32;return s>=64&&(s-=32),et[t]=[...s.toString(2).padStart(6,"0")].reverse(),et[t]}}function rt(t,s){if(!(s in st))throw Error("Cell getCharWithEncoding: bad encoding: "+s);if(t in st[s])return st[s][t];const e=s.match(/^(.+)__/);if(null!=e){const i=e[1];if(t in st[i])return st[s][t]=st[i][t],st[i][t]}return t}class nt{constructor(t){this.Qs=t,this.ps=[]}attach(t){return this.ps.push(t),this.ps.length-1}notify(t){this.ps.forEach((s=>null!=s&&s(this.Qs,t)))}detach(t){this.ps[t]=null}}class ot{constructor(){this.ws=!1,this.Ss=[]}get doubleHeight(){return this.ws}set doubleHeight(t){this.ws=t}addCell(t){this.Ss.push(t)}getCell(t){if(t>=this.Ss.length)throw Error("RowModel.getCell E20 bad cell index");return this.Ss[t]}}const ht=25,_t=new class{constructor(){this.xs=[];for(let t=0;t<ht;t++){const t=[];for(let s=0;s<40;s++)t.push(new it);this.xs.push(t)}this.Us="latin_g0",this.ks=null,this.vs=v.charFromAttribute(v.START_BOX),this.Rs=M[1],this.onSet=new nt(this)}notify(){this.onSet.notify()}setRowFromChars(t,s){if(t>=ht)throw Error("PageModel E29 bad row number");this.Fs(t,s),this.onSet.notify()}setRows(t){(t=t.slice(0,ht)).forEach(((t,s)=>{this.Fs(s,t)})),this.onSet.notify()}Fs(t,s){let e=[...s];if(e=e.slice(0,40),e.forEach(((s,e)=>{const i=s.charCodeAt(0);if(Number.isNaN(i)||i>127)throw Error(`PageModel E51 failed to write row: bad character code (${i}) at row ${t} col ${e}`);this.xs[t][e].byte=s})),e.length<40)for(let s=e.length;s<40;s++)this.xs[t][s].byte=" "}setLevel(t){this.Rs=t,this.onSet.notify()}clearScreen(t){if(void 0===t||t){const t=[];for(let s=0;s<ht;s++)t.push("");this.setRows(t)}else for(let t=0;t<ht;t++)this.Fs(t,"")}setPrimaryG0CharacterEncoding(t,s){this.Us=t,s&&this.onSet.notify()}setSecondaryG0CharacterEncoding(t,s){this.ks=t,s&&this.onSet.notify()}getRow(t){if(t>=ht)throw Error("PageModel.getRow E42 bad rowNum");const s=new ot;let e,i,r=U.ALPHA,n=x.WHITE,o=!1,h=k.NORMAL_SIZE,_=!1,l=!1,a=!1,c=!1,A=x.BLACK,u=U.MOSAIC_CONTIGUOUS,g={active:!1,char:" ",type:U.MOSAIC_CONTIGUOUS};return this.xs[t].forEach(((f,d)=>{const C=f.byte,I=v.attribFromChar(this.Rs,C);switch(e=n,f.type=r,f.boxed=c,i=_,I.attribute!=v.STEADY&&(f.flashing=o),I.attribute!=v.NORMAL_SIZE&&(f.size=h),I.attribute!=v.CONCEAL&&(f.concealed=l),a&&(I.attribute!=v.HOLD_MOSAICS&&(g.active=!1,g.char=" "),a=!1),I.attribute){case v.TEXT_COLOUR:r=U.ALPHA,n=I.colour,l=!1,f.setSpace(g);break;case v.MOSAIC_COLOUR:r=u,n=I.colour,l=!1,f.setSpace(g);break;case v.NEW_BACKGROUND:A=e,f.setSpace(g);break;case v.BLACK_BACKGROUND:A=x.BLACK,f.setSpace(g);break;case v.CONTIGUOUS_GRAPHICS:u=U.MOSAIC_CONTIGUOUS,f.type==U.MOSAIC_SEPARATED&&(f.type=U.MOSAIC_CONTIGUOUS),r==U.MOSAIC_SEPARATED&&(r=U.MOSAIC_CONTIGUOUS),f.setSpace(g);break;case v.SEPARATED_GRAPHICS:u=U.MOSAIC_SEPARATED,f.type==U.MOSAIC_CONTIGUOUS&&(f.type=U.MOSAIC_SEPARATED),r==U.MOSAIC_CONTIGUOUS&&(r=U.MOSAIC_SEPARATED),f.setSpace(g);break;case v.ESC:this.ks&&(_=!i),f.setSpace(g);break;case v.FLASH:o=!0,f.setSpace(g);break;case v.STEADY:f.flashing=!1,o=!1,f.setSpace(g);break;case v.NORMAL_SIZE:f.size=k.NORMAL_SIZE,h=k.NORMAL_SIZE,f.setSpace(g);break;case v.DOUBLE_HEIGHT:h=k.DOUBLE_HEIGHT,s.doubleHeight=!0,f.setSpace(g);break;case v.DOUBLE_WIDTH:h=k.DOUBLE_WIDTH,f.setSpace(g);break;case v.DOUBLE_SIZE:h=k.DOUBLE_SIZE,s.doubleHeight=!0,f.setSpace(g);break;case v.CONCEAL:f.concealed=!0,l=!0,f.setSpace(g);break;case v.HOLD_MOSAICS:g.active=!0,f.setSpace(g);break;case v.RELEASE_MOSAICS:a=!0,f.setSpace(g);break;case v.START_BOX:d>=1&&this.xs[t][d-1].byte==this.vs&&(f.boxed=!0,c=!0),f.setSpace(g);break;case v.END_BOX:c=!1,f.setSpace(g);break;case v.UNKNOWN:f.setSpace(g);break;default:f.setMappedChar(i?this.ks:this.Us),f.isMosaic()&&(g.char=C,g.type=f.type)}f.fgColour=e,f.bgColour=A,s.addCell(f)})),s}},lt=new class{constructor(t){this.Ds=new $(t),this.ut=t,this.Ns=1,this.Ls=0,this.Hs(),this.js=null,this.Ms=null}setRow(t,s){this.ut.setRowFromChars(t,s)}setPageRows(t){this.ut.setRows(t)}showTestPage(){this.loadPageFromEncodedString(u[tt[this.Ls]]),this.Ls++,3==this.Ls&&(this.Ls=0)}showRandomisedPage(){const t=[];for(let s=0;s<25;s++){const s=[];for(let t=0;t<40;t++)s.push(String.fromCharCode(127*Math.random()));t.push(s.join(""))}this.setPageRows(t)}loadPageFromEncodedString(t){const s=class{static decodeBase64URLEncoded(t){const s=(t=t.replace(/-/g,"+").replace(/_/g,"/")).length%4;if(s){if(1===s)throw Error("Utils.decodeBase64URL: Input base64url string is the wrong length to determine padding");t+=Array(5-s).join("=")}const e=[...atob(t)].map((t=>A(t))),i=new ArrayBuffer(e.length);return new Uint8Array(i).set(e),(t=>{const s=[];for(let e=0;e<25;e++){const i=[];for(let s=0;s<40;s++){let r=6,n=0;const o=280*e+7*s;for(let s=o;s<o+7;s++)n+=t[s]*Math.pow(2,r),r--;i.push(String.fromCharCode(n))}s.push(i.join(""))}return s})(new n(i))}}.decodeBase64URLEncoded(t);this.setPageRows(s)}Hs(){window.addEventListener("ttx.reveal",(()=>this.Ds.reveal())),window.addEventListener("ttx.mix",(()=>this.Ds.mixMode())),window.addEventListener("ttx.subtitlemode",(()=>this.Ds.boxMode()))}toggleReveal(){this.Ds.reveal()}toggleMixMode(){this.Ds.mixMode()}toggleBoxMode(){this.Ds.boxMode()}toggleGrid(){this.Ds.grid()}setLevel(t){this.ut.setLevel(t)}addTo(t){this.Os=t,this.Ds.addTo(t)}setFont(t){this.Ds.setFont(t)}clearScreen(t){this.ut.clearScreen(t)}setAspectRatio(t){if("natural"==t)return void this.Ds.setAspectRatio(t);const s=parseFloat(t);if(Number.isNaN(s))throw Error("E80 setAspectRatio: bad number");this.Ds.setAspectRatio(s)}setHeight(t){const s=parseFloat(t);if(Number.isNaN(s))throw Error("E98 setHeight: bad number");this.Ds.setHeight(s),this.Ms=s}setDefaultG0Charset(...t){this.ut.setPrimaryG0CharacterEncoding(...t)}setSecondG0Charset(...t){this.ut.setSecondaryG0CharacterEncoding(...t)}remove(){if(this.Ds.detach(),this.Os){const t=document.querySelector(this.Os);t&&t.removeChild(t.firstChild)}this.Ds=null}setView(t){switch(this.remove(),t){case"classic__font-for-mosaic":this.Ds=new W(this.ut);break;case"classic__graphic-for-mosaic":this.Ds=new $(this.ut);break;default:throw Error("setView E126: bad view name:"+t)}this.Ms&&this.Ds.setHeight(this.Ms),this.Os&&this.Ds.addTo(this.Os),this.ut.notify()}registerViewPlugin(t){t.registerWithView(this.Ds),this.ut.notify()}}(_t);t.Attributes=v,t.Colour=x,t.Level=M,t.teletext=lt,Object.defineProperty(t,"Gs",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?s(exports):"function"==typeof define&&define.amd?define(["exports"],s):s((t="undefined"!=typeof globalThis?globalThis:t||self).ttx={});//# sourceMappingURL=teletext.umd.min.js.map
var t,s;t=this,s=function(t){"use strict";const s=new Set(["Uint1Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","UInt32Array","Float32Array","Float64Array"]),e=Uint8Array,i=Symbol();class r{constructor(t,{length:s=null,buffer:i=null,byteOffset:r=0,byteLength:n=null}={}){let o;i?s=8*(n||i.byteLength):s||(s=0);const h=e.BYTES_PER_ELEMENT,_=8*h,A=_-1,a=(t=>{let s=0;for(;t>>=1;)s++;return s})(_),l=Math.max(1,s+A>>a);i?o=new e(i,r,l):(i=new ArrayBuffer(h*l),o=new e(i)),Object.assign(this,{buffer:i,byteOffset:r,length:s,wordSize:_,wordCount:l,wordSizeMask:A,wordSizeShift:a,internal:o})}toArray(){const t=new Uint8Array(this.length);for(let s=0;s<this.wordCount;s++){const e=this.internal[s];for(let i=s*this.wordSize;i<(s+1)*this.wordSize;i++)t[i]=this.getBit(i,e)}return t}getBit(t,s){if(!(t>=this.length))return null==s&&(s=this.internal[t>>this.wordSizeShift]),s>>(t&this.wordSizeMask)&1}setBit(t,s){if(t>=this.length)return;const e=t>>this.wordSizeShift,i=t&this.wordSizeMask,r=this.internal[e];let n=r;return n|=s<<i,n&=~((1&~s)<<i),r!==n&&(this.internal[e]=n),s}}class n{constructor(t,s=0,e=null){let n,h,l;switch(a(t)){case"Number":n=t=~~t,h=new r(this,{length:n});break;case"ArrayBuffer":h=new r(this,{buffer:t,byteOffset:s,byteLength:e});break;case"Undefined":case"Null":case"RegExp":case"Infinity":n=0,h=new r(this,{length:n});break;case"Array":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"UInt32Array":case"Float32Array":case"Float64Array":case"Uint1Array":case"Object":default:l=_(t),h=new r(this,{length:l.length}),l.forEach(((t,s)=>h.setBit(s,A(t))))}return this[i]=h,new o(this)}static get BYTES_PER_ELEMENT(){return.125}static get name(){return"Uint1Array"}static get length(){return 0}static get[Symbol.species](){return this}static[Symbol.hasInstance](t){return t.__proto__=this}static from(t){const s=_(t);return new n(s)}static of(...t){return n.from(t)}get buffer(){return this[i].buffer}get byteLength(){return this.length+7>>3}get byteOffset(){return this[i].byteOffset}get length(){return this[i].length}get[Symbol.toStringTag](){return"Uint1Array"}copyWithin(t,s=0,e=this.length){if(!Number.isInteger(t))return this;const i=new Uint8Array(e-s);for(let t=s;t<e;t++)i[t-s]=this[t];return this.set(i,t),this}entries(){return this[i].toArray().entries()}every(...t){return this[i].toArray().every(...t)}fill(t,s=0,e=this.length){for(let i=s;i<e;i++)this[i]=t;return this}filter(...t){return new n(this[i].toArray().filter(...t))}find(...t){return this[i].toArray().find(...t)}findIndex(...t){return this[i].toArray().findIndex(...t)}forEach(...t){this[i].toArray().forEach(...t)}includes(...t){return this[i].toArray().includes(...t)}indexOf(...t){return this[i].toArray().indexOf(...t)}join(...t){return this[i].toArray().join(...t)}keys(...t){return this[i].toArray().keys(...t)}lastIndexOf(...t){return this[i].toArray().lastIndexOf(...t)}map(...t){return new n(this[i].toArray().map(...t))}reduce(...t){return this[i].toArray().reduce(...t)}reduceRight(...t){return this[i].toArray().reduceRight(...t)}reverse(){const t=this[i].toArray().reverse();return this.set(t),this}set(t,e=0){if(!Number.isInteger(e))return;const i=a(t);if("Array"!==i&&!s.has(i))return;const r=Math.min(t.length+e,this.length);t=t.map((t=>A(t)));for(let s=e;s<r;s++)this[s]=t[s-e]}slice(...t){return new n(this[i].toArray().slice(...t))}sort(...t){const s=this[i].toArray().sort(...t);return this.set(s),this}subarray(...t){return new n(this[i].toArray().subarray(...t))}values(...t){return this[i].toArray().values(...t)}toLocaleString(...t){return Array.from(this).toLocaleString()}toString(){return""+Array.from(this)}[Symbol.iterator](){return this[i].toArray()[Symbol.iterator]()}valueOf(){return this}toJSON(){return Array.from(this)}}function o(t){const s=t[i];return new Proxy(t,{get(e,i,r){const n="string"==typeof i?parseInt(i):i;return Number.isInteger(n)?s.getBit(n):Reflect.get(t,i)},set(e,i,r,n){const o="string"==typeof i?parseInt(i):i;return Number.isInteger(o)?(s.setBit(o,A(r)),!0):Reflect.set(t,i,r)}})}const h=/\[object (\w+)]/;function _(t){const s=[];for(let e of t){const t=A(e);s.push(t)}return s}function A(t){return"number"!=typeof t||Number.isNaN(t)?new Boolean(t).valueOf():t%2}function a(t){const s=t&&t.constructor?t.constructor.name:null,e=h.exec(Object.prototype.toString.call(t))[1];return e!==s&&s?s:e}const l={};function g(t){if(t in l)return l[t];const s=[...t.charCodeAt(0).toString(2).padStart(8,"0")].reverse();return l[t]=Number.parseInt(s.join(""),2),l[t]}const c={ENGINEERING:"QIECBAgQIIcWLGg2EDdy3QIKnXKgYtUE7f2QA2TB0wYr2DECAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAYMS54fzJmix4-YCDToOLOjyZ0WLSkzo6AkcGHuZUcRHlB4dgyAAQAEABAAQAEABAAQAEABAAQAEABAAQAEABAAQAEABAAWDP9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9_YNCho9zImSoAqBGoAp0FUy8-iChhz5UCA4MPEuZYgTAFyAFg1_f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f2DYCAAoACACeQHkBdYTJlixIkSKlSJEoUKIEBQABAAQAEABYN_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_39g4AgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgGDn9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9_YsAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIBix_f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f2LICAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAYs_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_39i0AgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgAIACAAgGLX9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9__f_3_9_Ytq-jT0yg7OXZs39w0Pzh3Ao_LLl3BZuHPl3dMIGllyBIWzrlLmkKJGTSJUycsoUqlZJYtXLzLBiyZlWjVs3IuHLp2UePXz9AgQokaBIlTJ0ChSqVoFi1cvQMGLJmgaNWzdA4cunaB49fP0ECDChoIkWNHQSJMqWgmTZ09BQo0qaCpVrV0FizatoLl29fQYMOLGgyZc2dBo06taDZt3b0HDjy5oOnXt3QePPr2g-ff38pgw4sZHJlzZyujTq1ktm3dvNcOPLmW6de3cn48-vZf59_fwZiHv3Y8uHYIjbMPPQDVCxcLf4E0-mXDk8mI-_dlFCn5a9_DKr6q-qvqr6q-qvqr6AFS390DJoGQKr6q-qvqr6q-qvqr6o",ADVERT:"QIECBAgQIJ9KDDmRUDZi3QU8PRk1QQeHIHDaIEDJiwYumDACdDwcnbLy6aeeXbl3dECBAgQIECBAgQIECBAgQIHwZkvcoCx0og8LNGjYwQPEjzpoWaNjBA82YHnTQwabEjTpowPEiBAgLHSiBbs1atjFA9SPe2pZqQNUHX1qQatSlrqQNW-5UsaIECAsdKIFidUqQJUCVAlVKlipchQJUCJanVIEqpAlSqlC5CgQIEB0ogQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQHSKBAgQYEH7ogQaGCApw_fEm54R3PCm5JuSKHoFUEVIECAudIoECBB6-___TB-_v0JTU_WqkZHFyQKHmjYgYBECpAqQIC50igQIEH___3_-iD__6FFSAig-IP6JCg26lzRr3avEgFUgLnSKBAg1f1X9lv_9NSBAgI6G-HX1V_EqBUqQJUqXBzagVSAudIoECD9_Qa2qL__6IMDzoq682qdAgQIEARAgQIECBAgVIC50igQIP_9AiaoFX__0VfV_1kjQIECBAgQBECBAgAoECpAgLnSKBBq__0CBCgQa___oreokCBAgQIECBAgQBECBAgVIECAudIoEHr__QIECBAg3_36FAgQIECBAgQIECAIgQIFSBAgQIAZ0igQf_7dAgKIECAinKf9bTR9QIv-N6i_ofzNagQIECBAgJnSKDR__tUBRAoe6NiBB_XYf_rqg_q2iD-gRb-iBAgQIECAmdIoNX_-1QFECDrq9IMH9h664P_D-w34P7DZ4ToECBAgQICZ0ig___5TQ8SfEHzQ82MPCzpoedEHzA82MPjDQ0-LNDSk0JnSOD___lNXVh_Qf9T3cx_oP-prqa_1S3Y0_q_zX-s1NdTUmdI6v_9-U1NUH9B_1NdTX-g_6mvpL_wMNTX-g1Nf6DAz1tSZ0j-_v0JREjQokaFEhRIUSNCiRoUCNAjRoEaBEhRo0CNGgBnSP9OgQFECCNPpIIVKfDkVaUWmggzoiCFPny5M6PTQIECAGdIjUAGlJnR0DBu5coGrFm0YMEE-kgpxYqChBjxUDNuwQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAy92np007s6AFSy9tOXvzQA7O_ryQTd-7L5DQVtpBJ3ZMvg",UK:"QIECBAgQIIcWLGg2EDFy2QIJu_cgZNUETLjQA2TN0xYr2DAodJIECBAgQIEGDB4_PUCBAgQIECBAgQIECBAgQIEANkvaMih0kgQIECDA1Qfv__OgQYGCBAgQIECBAgQIECBAgQIECBAgKHSSBAgQIH6FR-__-v7___oECBAgQIEAORPmxUE6LXpoECAodJIECBAoQKum7______9-gQIECBAgQA82_Zs39-aB8-QIAh0kgQIECBAgSev_____v06BAgQIECBAgQIECBAgQIECBAgKHSSBAgQIECBR00____-_w9GCBAgQIECBAgQIECBAgQIECAodJIECBAgQIECD8rx________ECBAgQIECBAgQIECBAgQICh0kgQIECBAgQLETRlv_______6oECBAgQIECBAgQIECBAgKHSyBAgQIHGQlwYIEH_-_x_____9-dECBAgQIECBAgQIECAIdLIECDAmJbfz_-0RJ0qBV________7sECBAgQIECBAgQIAh0sgQIMzAl-__fX5Sg0JECvX______586IECBAgQIECBAgCHSyBAgwJiW9OjX_0qBAgQIEX________-l8fPjBAgQIECAIdLIEHBYhQIECBQxQICWDhg5fv____________tUCBAgQIAh0sgzIECBAgQIEGlAgQEtP_______________-lQIECBAgCHSyBUwQIECBAgQakCBASQqv_____________-6FAgQIECAIdLIECJygQIECBAgaoEBJBg______________5-OiBAgQIAh0sgQKGKBAgQIEHBKgJIMH7____8v__________QoECBAgCHSyBRmQIECBA4RoECAkgVoVaNel________r16FAgQIECAIdLINCFAgwOEyBAgQICSBAgQePn7___r06RAgQIECBAgQIAh0sgQLeKxCgQIECBAgJIECDR__v0aNGhQIECBAgQIECBAgCHSSBAgQIECBAgQIECBAgQYP3_-1QIECBAgQIECBAgQIECAIdJIECBAgQIECBAgQIECBB6boUSBAgQIECBAgQIECBAgQIAh0kgQIECBAgQIECBAgQIFStAgQIECBAgQIECBAgQIECBAgAzsvjognZe_MFIy4cmzTuy8wdTfwQU-G_l0DVKy-lhyad6A",SPLASH:"QIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECAsaMIEGDx8YIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQICxowg0N2bdmgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgLGjCBFvz9_6BAZQIECBAgQIECAig0NECBAgQIECBAgQIECAsaMcOD5tjyoGCBAgQIECBAgQICLhCgQIECBAgQIECBAgQICxowoTod79ArSEcHBAgQIECBAg0ITKBAgQcGCBAgQIECBAgLGjCBBgXIUCAyRXmlLBAgQIECBuZ4fPn___aoECBAgQIECBAaQIECBAgQIEBFAgQaTPDh8-f___-vXo9f9qgQIECBAgQIECBAgQIEBFAgQcOHz5____69ejRoECBAg__0CBAgQIECBAgQIECBAgQEUCL___r16NGXQIOHDh8-NCOD-3QIECBAgQIECBAgQIECBARQINf0ug-fPi9evRo0aBAgI6v6VAgQIECBAgQIECBAgQIEBFAgRf2hfBw4cOHD58-fPiAj-_oECBAgQIECBAgQIECBAgQEUCBBr-l0SNGjRo0CBAgQEcH9qgQIECBAgQIECBAgQIECBARQIECL-0Lr169ev-fPnxAR1f0KBAgQIECBAgQIAiBAgQIEBFAgQINf3hw4cOCBAgQIEBH-_QIECBAgQIECBAgCIECBAgQIEB1ARRL1-_____________7VAgOIECBAgQIECAIgQIECBAgQHUBNAgQf26BAgQIN_8ijRoECA4gQIECBAgQIAiBAgQIECA6gQE0CDV_QoECBAgRf2iBAgQIEBxAgQIECBAgCIECBAgQIDqBAgQE0aFAgQIECBAgQIECBAgQHECBAgQIECAIgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIBp0Kg3cNqDSggdMuPRh3ZOe_N074eWVf0y7MvTL46IECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQKMalAyYMmKCplx6ECZBT35unfDyyoJnTIuQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECA"},u="http://www.w3.org/2000/svg";let C=0;class f{constructor(){}tt(){return this.st}et(){this.st=null}attr(t,s){if("object"==typeof t)for(const s in t)null==t[s]?this.st.removeAttribute(s):this.st.setAttribute(s,t[s]);else{if(void 0===s)return this.st.getAttribute(t);null==s?this.st.removeAttribute(t):this.st.setAttribute(t,s)}return this}addClass(t){if(!this.hasClass(t)){const s=this.classes();s.push(t),this.st.setAttribute("class",s.join(" "))}return this}hasClass(t){return-1!==this.classes().indexOf(t)}classes(){const t=this.st.getAttribute("class");return null==t?[]:t.split(" ")}removeClass(t){return this.hasClass(t)&&this.st.setAttribute("class",this.classes().filter((s=>s!==t)).join(" ")),this}toggleClass(t){return this.hasClass(t)?this.removeClass(t):this.addClass(t),this}data(t,s){if("object"==typeof t)for(const s in t)null==t[s]?delete this.st.dataset[s]:this.st.dataset[s]=t[s];else{if(void 0===s)return this.st.dataset[t];null==s?delete this.st.dataset[t]:this.st.dataset[t]=s}return this}}class I extends f{constructor(){return super(),this.st=document.createElementNS(u,"svg"),this.st.setAttribute("xmlns",u),this}addTo(t){return document.querySelector(t).appendChild(this.st),this}viewbox(t){return this.st.setAttribute("viewBox",t),this}size(t,s){return this.st.setAttribute("width",t),this.st.setAttribute("height",s),this}style(t){const s=document.createElementNS(u,"style");return s.append(t),this.st.append(s),this}group(){const t=new E;return this.st.append(t.tt()),t}width(){return this.st.clientWidth}height(){return this.st.clientHeight}symbol(t){const s=new d(t);return this.st.append(s.tt()),s}}class E extends f{constructor(){return super(),this.st=document.createElementNS(u,"g"),this.it=[],this}group(){const t=new E;return this.st.append(t.tt()),this.it.push(t),t}plain(t){const s=new y(t);return this.st.append(s.tt()),this.it.push(s),s}defs(){const t=new b;return this.st.append(t.tt()),t}rect(t,s){const e=new p(t,s);return this.st.append(e.tt()),this.it.push(e),e}last(){return this.it[this.it.length-1]}children(){return this.it}clipWith(t){return this.st.setAttribute("clip-path",`url("#${t.tt().id}")`),this}unclip(){return this.st.removeAttribute("clip-path"),this}remove(){this.st.parentNode&&this.st.parentNode.removeChild(this.st),this.st=null,this.it.forEach((t=>t.et())),this.it=[]}line(t,s,e,i){const r=new w(t,s,e,i);return this.st.append(r.tt()),this.it.push(r),r}use(t){const s=new Q(t);return this.st.append(s.tt()),this.it.push(s),s}image(t,s){const e=new B(t,s);return this.st.append(e.tt()),this.it.push(e),e}}class B extends f{constructor(t,s){return super(),this.st=document.createElementNS(u,"image"),this.st.setAttribute("width",parseInt(t)),this.st.setAttribute("height",parseInt(s)),this}}class Q extends f{constructor(t){return super(),this.st=document.createElementNS(u,"use"),this.st.setAttribute("href","#"+t),this}fill(t){return this.st.setAttribute("fill",t),this}move(t,s){return this.st.setAttribute("x",t),this.st.setAttribute("y",s),this}}class d extends f{constructor(t){return super(),this.st=document.createElementNS(u,"symbol"),this.st.setAttribute("id",t),this}rect(t,s){const e=new p(t,s);return this.st.append(e.tt()),e}}class y extends f{constructor(t){return super(),this.st=document.createElementNS(u,"text"),this.st.append(t),this}plain(t){return this.st.textContent=t,this}fill(t){return this.st.setAttribute("fill",t),this}}class b extends f{constructor(){return super(),this.st=document.createElementNS(u,"defs"),this}clip(){const t=new m;return this.st.append(t.tt()),t}find(t){return[...this.st.querySelectorAll(t)].map(S)}rect(t,s){const e=new p(t,s);return this.st.append(e.tt()),e}}class m extends f{constructor(){return super(),this.st=document.createElementNS(u,"clipPath"),this.st.setAttribute("id","clipPath-"+C),C++,this}children(){return[...this.st.children].map(S)}add(t){this.st.appendChild(t.tt())}}class p extends f{constructor(t,s){if(super(),t instanceof SVGElement)return this.st=t,this;const e=t;return this.st=document.createElementNS(u,"rect"),this.st.setAttribute("width",parseInt(e)),this.st.setAttribute("height",parseInt(s)),this}fill(t){return this.st.setAttribute("fill",t),this}move(t,s){return this.st.setAttribute("x",t),this.st.setAttribute("y",s),this}width(t){return void 0===t?parseInt(this.st.getAttribute("width")):(this.st.setAttribute("width",parseInt(t)),this)}height(t){return void 0===t?parseInt(this.st.getAttribute("height")):(this.st.setAttribute("height",parseInt(t)),this)}remove(){this.st.parentNode&&this.st.parentNode.removeChild(this.st),this.st=null}}class w extends f{constructor(t,s,e,i){return super(),this.st=document.createElementNS(u,"line"),this.st.setAttribute("x1",t),this.st.setAttribute("y1",s),this.st.setAttribute("x2",e),this.st.setAttribute("y2",i),this}}function S(t){let s;switch(t.constructor.name){case"SVGRectElement":s=new p(t);break;default:throw Error("SVG:wrapSVGElement Unable to wrap SVG element of type "+t.constructor.name)}return s}const x={BLACK:Symbol(),RED:Symbol(),GREEN:Symbol(),YELLOW:Symbol(),BLUE:Symbol(),MAGENTA:Symbol(),CYAN:Symbol(),WHITE:Symbol()};Object.freeze(x);const U={ALPHA:Symbol(),MOSAIC_CONTIGUOUS:Symbol(),MOSAIC_SEPARATED:Symbol()};Object.freeze(U);const v={NORMAL_SIZE:Symbol(),DOUBLE_HEIGHT:Symbol(),DOUBLE_WIDTH:Symbol(),DOUBLE_SIZE:Symbol()};Object.freeze(v);class k{static charFromTextColour(t){if(t in L)return L[t];throw Error("Attributes.charFromTextColour: bad colour: "+t)}static charFromGraphicColour(t){if(t in H)return H[t];throw Error("Attributes.charFromGraphicColour: bad colour")}static charFromAttribute(t){if(t in j)return j[t];throw Error("Attributes.charFromAttribute: bad attribute")}static attribFromChar(t,s){let e=null,i=null;return s in N&&M[t].includes(s.charCodeAt(0))?s in F?(e=k.TEXT_COLOUR,i=N[s]):s in D?(e=k.MOSAIC_COLOUR,i=N[s]):e=N[s]:s.charCodeAt(0)<=31&&(e=k.UNKNOWN),{attribute:e,colour:i}}static fillColourFromColourAttrib(t){return R[t]}}k.TEXT_COLOUR=U.ALPHA,k.MOSAIC_COLOUR=Symbol(),k.NEW_BACKGROUND=Symbol(),k.BLACK_BACKGROUND=Symbol(),k.CONTIGUOUS_GRAPHICS=U.MOSAIC_CONTIGUOUS,k.SEPARATED_GRAPHICS=U.MOSAIC_SEPARATED,k.ESC=Symbol(),k.FLASH=Symbol(),k.STEADY=Symbol(),k.NORMAL_SIZE=v.NORMAL_SIZE,k.DOUBLE_HEIGHT=v.DOUBLE_HEIGHT,k.DOUBLE_WIDTH=v.DOUBLE_WIDTH,k.DOUBLE_SIZE=v.DOUBLE_SIZE,k.CONCEAL=Symbol(),k.HOLD_MOSAICS=Symbol(),k.RELEASE_MOSAICS=Symbol(),k.START_BOX=Symbol(),k.END_BOX=Symbol(),k.UNKNOWN=Symbol();const R={[x.BLACK]:"#000",[x.RED]:"#f00",[x.GREEN]:"#0f0",[x.YELLOW]:"#ff0",[x.BLUE]:"#00f",[x.MAGENTA]:"#f0f",[x.CYAN]:"#0ff",[x.WHITE]:"#fff"};Object.freeze(R);const F={"\0":x.BLACK,"":x.RED,"":x.GREEN,"":x.YELLOW,"":x.BLUE,"":x.MAGENTA,"":x.CYAN,"":x.WHITE};Object.freeze(F);const D={"":x.BLACK,"":x.RED,"":x.GREEN,"":x.YELLOW,"":x.BLUE,"":x.MAGENTA,"":x.CYAN,"":x.WHITE};Object.freeze(D);const N={"\b":k.FLASH,"\t":k.STEADY,"\n":k.END_BOX,"\v":k.START_BOX,"\f":k.NORMAL_SIZE,"\r":k.DOUBLE_HEIGHT,"":k.DOUBLE_WIDTH,"":k.DOUBLE_SIZE,"":k.CONCEAL,"":k.CONTIGUOUS_GRAPHICS,"":k.SEPARATED_GRAPHICS,"":k.ESC,"":k.BLACK_BACKGROUND,"":k.NEW_BACKGROUND,"":k.HOLD_MOSAICS,"":k.RELEASE_MOSAICS},L={};for(const t in F)L[F[t]]=t,N[t]=F[t];Object.freeze(L);const H={};for(const t in D)H[D[t]]=t,N[t]=D[t];Object.freeze(H),Object.freeze(N);const j={};for(const t in N)j[N[t]]=t;Object.freeze(j);const O={0:Symbol(),1:Symbol(),1.5:Symbol(),2.5:Symbol()};Object.freeze(O);const M={};M[O[0]]=[1,2,3,4,5,6,7,8,9,17,18,19,20,21,22,23],M[O[1]]=[...M[O[0]]].concat([10,11,12,13,24,25,26,27,28,29,30,31]),M[O[1.5]]=[...M[O[1]]].concat([0,16]),M[O[2.5]]=[...M[O[1.5]]].concat([14,15]),Object.freeze(M);const P=10,G=10,T={rt:{nt:10.4,ot:-5.2},ht:{nt:G,ot:-4.5}};Object.freeze(T);class q{constructor(t){this._t=(new I).viewbox("0 0 399 249").size(800,666.6666666666666).attr({preserveAspectRatio:"none",style:'font-family: "sans-serif"'}).style("@font-face {\nfont-family: 'Unscii';\nsrc: url('fonts/unscii-16.woff') format('woff'), \nurl('fonts/unscii-16.ttf') format('truetype'),\nurl('fonts/unscii-16.otf') format('opentype');\nunicode-range: U+0000-00FF, U+2022, U+2500, U+2502, U+250C, U+2510, U+2514, U+2518, U+251C, U+251D, U+2524, U+2525, U+252C, U+252F, U+2534, U+2537, U+253C, U+253F, U+2588, U+258C, U+2590, U+2592, U+25CB, U+25CF, U+25E2-25E5, U+2B60-2B63, U+E0C0-E0FF, U+1FB00-1FB70, U+1FB75, U+1FBA0-1FBA7;\n-webkit-font-smoothing: none;\nfont-smooth: never;\n}\n@font-face {\nfont-family: 'Bedstead';\nsrc: url('fonts/bedstead.otf') format('opentype');\nunicode-range: U+0000-00FF;\n}\n@keyframes blink {\nto {\nvisibility: hidden;\n}\n}\n@keyframes fancyblink {\nfrom {\nfilter: none;\nopacity: 0.7;\n}\n33% {\nfilter: none;\nopacity: 1;\n}\n66% {\nfilter: blur(0px);\nopacity: 1;\n}\n95% {\nfilter: blur(4px);\nopacity: 0;\n}\nto {\nfilter: blur(0px);\nopacity: 0;\n}\n}\n#textlayer {\nfont-size: 10px;\n}\n.mosaic {\nfont-family: 'Unscii';\nfont-size: 10.3px;\n}\n.mosaic_separated {\nfont-family: 'Unscii';\nfont-size: 10px;\n}\n.flash_flashing .flash {\n/* animation: blink 2s steps(3, start) infinite; */\nanimation: fancyblink 2s linear infinite;\n}\n.conceal_concealed .conceal {\nvisibility: hidden;\n}\nsvg #background {\ntransition-property: opacity;\ntransition-duration: 0.25s;\n}\nsvg {\nbackground-color: transparent;\n}\nsvg use {\nshape-rendering: crispEdges;\n}\nrect { color: orange; }\n"),this.d=this._t.group().attr("class","conceal_concealed flash_flashing"),this.At=1.2,this.at(),this.lt(),this.gt=null,this.ct=t,this.ut=this.ct.onSet.attach((()=>this.Ct())),this.ft=!1,this.It=!1,this.Et=!1,this.Bt={}}addTo(t){this._t.addTo(t)}detach(){this.ct.onSet.detach(this.ut),this.ut=null}Ct(){let t=!1,s=!1;this.Et=!1,this.d.removeClass("flash_flashing"),this.Qt.forEach(((e,i)=>{let r=!1;if(this.dt(i),t)return t=!1,void this.yt(e,i);const n=this.ct.getRow(i);let o,h;e.forEach(((t,e)=>{if(r)return r=!1,this.bt(t),this.wt(i),void(h&&this.St());const _=n.getCell(e),A=k.fillColourFromColourAttrib(_.bgColour),a=_.isMosaicByte(),l=k.fillColourFromColourAttrib(_.fgColour),g=this.xt(_.type,a);this.Ut(t,_,g,l,e,i,a),_.boxed&&(h?this.St():this.vt(i,e),this.Et=!0),o==A?this.wt(i):this.kt(i,e,A),_.size!=v.DOUBLE_WIDTH&&_.size!=v.DOUBLE_SIZE||(r=!0),o=A,h=_.boxed,_.flashing&&(s=!0)})),n.doubleHeight?(this.Rt(i),this.Ft(),t=!0):t=!1,this.Dt(i)})),"Nt"in this.Bt&&this.Bt.Nt(this._t.width(),this._t.height()),this.d.addClass("conceal_concealed"),s&&setTimeout((()=>this.d.addClass("flash_flashing")),100),this.Lt()}dt(t){this.Ht(t),this.jt(t)}yt(t,s){"Ot"in this.Bt&&this.Bt.Ot(t.length,s),t.forEach((t=>this.bt(t)))}bt(t){t.plain(" ").attr({dx:null,dy:null,textLength:null,lengthAdjust:null,"text-anchor":null,transform:null,class:null})}Ut(t,s,e,i,r,n,o){this.Mt(t,s,e,i,r,n),s.type==U.MOSAIC_CONTIGUOUS&&o?t.addClass("mosaic"):s.type==U.MOSAIC_SEPARATED&&o&&t.addClass("mosaic_separated")}Mt(t,s,e,i,r,n){t.plain(s.char).attr(e).fill(i),s.size==v.DOUBLE_HEIGHT?t.attr("transform",`translate(0 ${X(n)}) scale(1 2)`):s.size==v.DOUBLE_WIDTH?t.attr("transform",`translate(${Z(r)} 0) scale(2 1)`):s.size==v.DOUBLE_SIZE&&t.attr("transform",`translate(${Z(r)} ${X(n)}) scale(2 2)`),s.flashing&&t.addClass("flash"),s.concealed&&t.addClass("conceal")}reveal(){this.d.toggleClass("conceal_concealed")}setFont(t){let s='"'+t+'"';"native"==t?s='-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif':"default"==t&&(s="sans-serif"),this._t.attr("style","font-family: "+s)}grid(){this.gt?(this.gt.remove(),this.gt=null):this.Pt()}mixMode(){this.It?(this.It=!1,this.Gt.attr("opacity",null).unclip()):(this.It=!0,this.Tt())}setAspectRatio(t){this.At=t,this.setHeight(this._t.height())}setHeight(t){this._t.size("natural"==this.At?1.6*t:t*this.At,t)}Tt(){this.ft&&this.Et?this.Gt.attr("opacity",.3):this.Et?this.Gt.clipWith(this.qt).attr("opacity",.3):this.Gt.attr("opacity",0)}Lt(){this.It&&this.Tt()}boxMode(){this.ft?(this.d.unclip(),this.ft=!1):(this.d.clipWith(this.qt),this.ft=!0),this.Lt()}Pt(){this.gt=this.d.group();for(let t=0;t<25;t++)this.gt.line(0,t*P,399,t*P).attr({stroke:"#555","stroke-width":.5});for(let t=0;t<40;t++)this.gt.line(t*G,0,t*G,249).attr({stroke:"#555","stroke-width":.5})}lt(){this.zt=this.d.defs(),this.Jt=null,this.qt=this.zt.clip()}at(){this.Vt(),this.Yt()}Vt(){const t=this.d.group();t.attr({"shape-rendering":"crispEdges",id:"background"}),this.Kt=[],this.Gt=t}Yt(){const t=[],s=this.d.group().attr({"text-anchor":"middle",fill:"#fff"}).attr("id","textlayer");for(let e=0;e<25;e++){const i=[];for(let t=0;t<40;t++)i.push(s.plain(String.fromCharCode(32+95*Math.random())).attr({x:t*G+5,y:e*P+8}));t.push(i)}this.Qt=t,this.Xt=s}jt(t){this.qt.children().filter((s=>s.data("r")==t)).forEach((t=>t.remove()))}Ht(t){this.Kt[t]&&this.Kt[t].remove(),this.Kt[t]=this.Gt.group()}wt(t){const s=this.Kt[t].last(),e=s.width();s.width(e+G)}kt(t,s,e){const i=s*G,r=t*P;this.Kt[t].rect(G,P).fill(e).move(i,r)}St(){const t=this.Jt.width();this.Jt.width(t+G)}Rt(t){this.Kt[t].children().forEach((t=>t.attr("height",20)))}Ft(){this.zt.find("[data-boxbuffer]").forEach((t=>t.height(20)))}vt(t,s){const e=s*G,i=t*P;this.Jt=this.zt.rect(G,P).data("boxbuffer",!0).move(e,i)}Dt(t){this.zt.find("[data-boxbuffer]").forEach((s=>{s.data({r:t,boxbuffer:null}),this.qt.add(s)}))}xt(t,s){return t==U.MOSAIC_CONTIGUOUS&&s?{dx:T.rt.ot,dy:-.15,textLength:T.rt.nt,lengthAdjust:"spacingAndGlyphs","text-anchor":"start",transform:null,class:null}:t==U.MOSAIC_SEPARATED&&s?{dx:T.ht.ot,dy:null,textLength:T.ht.nt,lengthAdjust:"spacingAndGlyphs","text-anchor":"start",transform:null,class:null}:{dx:null,dy:null,textLength:null,lengthAdjust:null,"text-anchor":null,transform:null,class:null}}registerPlugin(t,s){return"renderBackground"in s&&(this.Bt.Zt=s.renderBackground),"renderMosaic"in s&&(this.Bt.$t=s.renderMosaic),"endOfPageUpdate"in s&&(this.Bt.Nt=s.endOfPageUpdate),"clearCellsForRow"in s&&(this.Bt.Ot=s.clearCellsForRow),{lookupColour:z,isDoubleHeight:J,isDoubleWidth:V,isDoubleSize:Y,isSeparatedMosaic:K,createImageOverlay:this.Wt.bind(this)}}Wt(){const t=this.d.image(400,250);return t.attr("preserveAspectRatio","none"),t}}q.ts=G,q.ss=P,q.es=20,q.rs=20,q.ns=400,q.os=250,q.ROWS=25,q.COLS=40;const z=t=>k.fillColourFromColourAttrib(t),J=t=>t==v.DOUBLE_HEIGHT,V=t=>t==v.DOUBLE_WIDTH,Y=t=>t==v.DOUBLE_SIZE,K=t=>t==U.MOSAIC_SEPARATED,X=t=>0-t*P,Z=t=>0-t*G;class $ extends q{constructor(t){super(t),this.hs=new Set}at(){super.at(),this._s=[],this.As=this.d.group()}dt(t){super.dt(t),this.ls(t)}Ut(t,s,e,i,r,n,o){"Zt"in this.Bt&&this.Bt.Zt(n,r,s.size,s.bgColour),s.type!=U.ALPHA&&o?o&&(t.plain(" ").attr(e),this.gs(n,r,s,i)):this.Mt(t,s,e,i,r,n)}gs(t,s,e,i){if("$t"in this.Bt&&this.Bt.$t(t,s,e,i))return;const r=e.getSextants();if(!r.includes("1"))return;let n,o=e.type==U.MOSAIC_CONTIGUOUS?"c":"s";if(o+=r.join(""),!this.hs.has(o)){this.hs.add(o);const t=this._t.symbol(o);if(e.type==U.MOSAIC_CONTIGUOUS){t.attr({preserveAspectRatio:"none",width:q.ts+.3,height:q.ss+.2,viewBox:"0 0 12 18"});for(let s=0;s<6;s++)"1"==r[s]&&t.rect(6,6).move(s%2*6,6*Math.floor(s/2))}else{t.attr({preserveAspectRatio:"none",width:q.ts,height:q.ss,viewBox:"0 0 12 18"});for(let s=0;s<6;s++)"1"==r[s]&&t.rect(4,4).move(s%2*6+1,6*Math.floor(s/2)+2)}}n=e.type==U.MOSAIC_CONTIGUOUS?this._s[t].use(o).move(s*q.ts-.15,t*q.ss-.1).fill(i):this._s[t].use(o).move(s*q.ts,t*q.ss).fill(i),e.size!=v.DOUBLE_HEIGHT&&e.size!=v.DOUBLE_SIZE||n.attr("height",q.rs),e.size!=v.DOUBLE_WIDTH&&e.size!=v.DOUBLE_SIZE||n.attr("width",q.es),e.flashing&&n.addClass("flash"),e.concealed&&n.addClass("conceal")}ls(t){this._s[t]&&this._s[t].remove(),this._s[t]=this.As.group()}xt(t,s){return{dx:null,dy:null,textLength:null,lengthAdjust:null,"text-anchor":null,transform:null,class:null}}}class W extends q{}const tt=["SPLASH","ENGINEERING","ADVERT","UK"],st={latin_g0:{$:"¤","":"■"},latin_g0__czech_slovak:{"#":"#",$:"ů","@":"č","[":"ť","\\":"ž","]":"ý","^":"í",_:"ř","`":"é","{":"á","|":"|","}":"ú","~":"š"},latin_g0__english:{"#":"£",$:"$","@":"@","[":"←","\\":"½","]":"→","^":"↑",_:"#","`":"—","{":"¼","|":"‖","}":"¾","~":"÷"},latin_g0__estonian:{"#":"#",$:"õ","@":"Š","[":"Ä","\\":"Ö","]":"Ž","^":"Ü",_:"Õ","`":"š","{":"ä","|":"ö","}":"ž","~":"ü"},latin_g0__french:{"#":"é",$:"ï","@":"à","[":"ë","\\":"ê","]":"ù","^":"î",_:"#","`":"è","{":"â","|":"ô","}":"û","~":"ç"},latin_g0__german:{"#":"#",$:"$","@":"§","[":"Ä","\\":"Ö","]":"Ü","^":"^",_:"_","`":"°","{":"ä","|":"ö","}":"ü","~":"ß"},latin_g0__italian:{"#":"£",$:"$","@":"é","[":"°","\\":"ç","]":"→","^":"↑",_:"#","`":"ù","{":"à","|":"ò","}":"è","~":"ì"},latin_g0__latvian_lithuanian:{"#":"#",$:"$","@":"Š","[":"ė","\\":"ę","]":"Ž","^":"č",_:"ū","`":"š","{":"ą","|":"ų","}":"ž","~":"į"},latin_g0__polish:{"#":"#",$:"ń","@":"ą","[":"Ƶ","\\":"Ś","]":"Ł","^":"ć",_:"ó","`":"ę","{":"ż","|":"ś","}":"ł","~":"ź"},latin_g0__portuguese_spanish:{"#":"ç",$:"$","@":"¡","[":"á","\\":"é","]":"í","^":"ó",_:"ú","`":"¿","{":"ü","|":"ñ","}":"è","~":"à"},latin_g0__romanian:{"#":"#",$:"¤","@":"Ț","[":"Â","\\":"Ș","]":"Ă","^":"Î",_:"ı","`":"ț","{":"â","|":"ș","}":"ă","~":"î"},latin_g0__serbian_croatian_slovenian:{"#":"#",$:"Ë","@":"Č","[":"Ć","\\":"Ž","]":"Đ","^":"Š",_:"ë","`":"č","{":"ć","|":"ž","}":"đ","~":"š"},latin_g0__swedish_finnish_hungarian:{"#":"#",$:"¤","@":"É","[":"Ä","\\":"Ö","]":"Å","^":"Ü",_:"_","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},latin_g0__turkish:{"#":"₺",$:"ğ","@":"İ","[":"Ş","\\":"Ö","]":"Ç","^":"Ü",_:"Ğ","`":"ı","{":"ş","|":"ö","}":"ç","~":"ü"},greek_g0:{"<":"«",">":"»","@":"ΐ",A:"Α",B:"Β",C:"Γ",D:"Δ",E:"Ε",F:"Ζ",G:"Η",H:"Θ",I:"Ι",J:"Κ",K:"Λ",L:"Μ",M:"Ν",N:"Ξ",O:"Ο",P:"Π",Q:"Ρ",R:"ʹ",S:"Σ",T:"Τ",U:"Υ",V:"Φ",W:"Χ",X:"Ψ",Y:"Ω",Z:"Ϊ","[":"Ϋ","\\":"ά","]":"έ","^":"ή",_:"ί","`":"ΰ",a:"α",b:"β",c:"γ",d:"δ",e:"ε",f:"ζ",g:"η",h:"θ",i:"ι",j:"κ",k:"λ",l:"μ",m:"ν",n:"ξ",o:"ο",p:"π",q:"ρ",r:"ς",s:"σ",t:"τ",u:"υ",v:"φ",w:"χ",x:"ψ",y:"ω",z:"ϊ","{":"ϋ","|":"ό","}":"ύ","~":"ώ","":"■"},cyrillic_g0:{"@":"Ю",A:"А",B:"Б",C:"Ц",D:"Д",E:"Е",F:"Ф",G:"Г",H:"Х",I:"И",J:"Ѝ",K:"К",L:"Л",M:"М",N:"Н",O:"О",P:"П",Q:"Я",R:"Р",S:"С",T:"Т",U:"У",V:"Ж",W:"В",X:"Ь",Z:"З","[":"Ш","]":"Щ","^":"Ч","`":"ю",a:"а",b:"б",c:"ц",d:"д",e:"е",f:"ф",g:"г",h:"х",i:"и",j:"ѝ",k:"к",l:"л",m:"м",n:"н",o:"о",p:"п",q:"я",r:"р",s:"с",t:"т",u:"у",v:"ж",w:"в",x:"ь",z:"з","{":"ш","}":"щ","~":"ч","":"■"},cyrillic_g0__russian_bulgarian:{"&":"ы",Y:"Ъ","\\":"Э",_:"Ы",y:"ъ","|":"э"},cyrillic_g0__serbian_croatian:{"@":"Ч",J:"Ј",Q:"Ќ",V:"В",W:"Ѓ",X:"Љ",Y:"Њ","[":"Ћ","\\":"Ж","]":"Ђ","^":"Ш",_:"Џ","`":"ч",j:"ј",q:"ќ",v:"в",w:"ѓ",x:"љ",y:"њ","{":"ћ","|":"ж","}":"ђ","~":"ш"},cyrillic_g0__ukranian:{"&":"ї",Y:"І","\\":"Є",_:"Ї",y:"і","|":"є"},arabic_g0:{"#":"£","&":"ﻰ","'":"ﻱ","(":")",")":"(",";":"؛","<":">",">":"<","?":"؟","@":"ﺔ",A:"ﺀ",B:"ﺒ",C:"ﺏ",D:"ﺘ",E:"ﺕ",F:"ﺎ",G:"ﺍ",H:"ﺑ",I:"ﺓ",J:"ﺗ",K:"ﺛ",L:"ﺟ",M:"ﺣ",N:"ﺧ",O:"ﺩ",P:"ﺫ",Q:"ﺭ",R:"ﺯ",S:"ﺳ",T:"ﺷ",U:"ﺻ",V:"ﺿ",W:"ﻃ",X:"ﻇ",Y:"ﻋ",Z:"ﻏ","[":"ﺜ","\\":"ﺠ","]":"ﺤ","^":"ﺨ",_:"#","`":"ـ",a:"ﻓ",b:"ﻗ",c:"ﻛ",d:"ﻟ",e:"ﻣ",f:"ﻧ",g:"ﻫ",h:"ﻭ",i:"ﻰ",j:"ﻳ",k:"ﺙ",l:"ﺝ",m:"ﺡ",n:"ﺥ",o:"ﻴ",p:"ﻯ",q:"ﻌ",r:"ﻐ",s:"ﻔ",t:"ﻑ",u:"ﻘ",v:"ﻕ",w:"ﻙ",x:"ﻠ",y:"ﻝ",z:"ﻤ","{":"ﻡ","|":"ﻨ","}":"ﻥ","~":"ﻻ","":"■"},hebrew_g0:{"#":"£","[":"←","\\":"½","]":"→","^":"↑",_:"#","`":"א",a:"ב",b:"ג",c:"ד",d:"ה",e:"ו",f:"ז",g:"ח",h:"ט",i:"י",j:"ך",k:"כ",l:"ל",m:"ם",n:"מ",o:"ן",p:"נ",q:"ס",r:"ע",s:"ף",t:"פ",u:"ץ",v:"צ",w:"ק",x:"ר",y:"ש",z:"ת","{":"₪","|":"‖","}":"¾","~":"÷","":"■"},g1_block_mosaic_to_unicode__legacy_computing:{0:"🬏",1:"🬐",2:"🬑",3:"🬒",4:"🬓",5:"▌",6:"🬔",7:"🬕",8:"🬖",9:"🬗"," ":" ","!":"🬀",'"':"🬁","#":"🬂",$:"🬃","%":"🬄","&":"🬅","'":"🬆","(":"🬇",")":"🬈","*":"🬉","+":"🬊",",":"🬋","-":"🬌",".":"🬍","/":"🬎",":":"🬘",";":"🬙","<":"🬚","=":"🬛",">":"🬜","?":"🬝","`":"🬞",a:"🬟",b:"🬠",c:"🬡",d:"🬢",e:"🬣",f:"🬤",g:"🬥",h:"🬦",i:"🬧",j:"▐",k:"🬨",l:"🬩",m:"🬪",n:"🬫",o:"🬬",p:"🬭",q:"🬮",r:"🬯",s:"🬰",t:"🬱",u:"🬲",v:"🬳",w:"🬴",x:"🬵",y:"🬶",z:"🬷","{":"🬸","|":"🬹","}":"🬺","~":"🬻","":"█"},g1_block_mosaic_to_unicode__unscii_separated:{0:"",1:"",2:"",3:"",4:"",5:"",6:"",7:"",8:"",9:""," ":" ","!":"",'"':"","#":"",$:"","%":"","&":"","'":"","(":"",")":"","*":"","+":"",",":"","-":"",".":"","/":"",":":"",";":"","<":"","=":"",">":"","?":"","`":"",a:"",b:"",c:"",d:"",e:"",f:"",g:"",h:"",i:"",j:"",k:"",l:"",m:"",n:"",o:"",p:"",q:"",r:"",s:"",t:"",u:"",v:"",w:"",x:"",y:"",z:"","{":"","|":"","}":"","~":"","":""}},et={};class it{constructor(){this.cs=" ",this.us=" ",this.Cs=x.WHITE,this.fs=x.BLACK,this.Is=U.ALPHA,this.Es=!1,this.Bs=v.NORMAL_SIZE,this.Qs=!1,this.ds=!1,this.ys=null}set byte(t){this.cs=t}get byte(){return this.cs}set fgColour(t){this.Cs=t}get fgColour(){return this.Cs}set bgColour(t){this.fs=t}get bgColour(){return this.fs}setMappedChar(t){this.us=this.Is==U.ALPHA||0==(32&this.cs.charCodeAt(0))?rt(this.cs,t):rt(this.cs,this.Is==U.MOSAIC_CONTIGUOUS?"g1_block_mosaic_to_unicode__legacy_computing":"g1_block_mosaic_to_unicode__unscii_separated"),this.ys=null}setSpace(t){if(this.Is!=U.MOSAIC_CONTIGUOUS&&this.Is!=U.MOSAIC_SEPARATED||!t.active)this.ys=null,this.us=" ";else{this.ys=t.char,this.Is=t.type;let s="g1_block_mosaic_to_unicode__legacy_computing";this.Is==U.MOSAIC_SEPARATED&&(s="g1_block_mosaic_to_unicode__unscii_separated"),this.us=rt(t.char,s)}}get char(){return this.us}get type(){return this.Is}set type(t){this.Is=t}set flashing(t){this.Es=t}get flashing(){return this.Es}get size(){return this.Bs}set size(t){this.Bs=t}set concealed(t){this.Qs=t}get concealed(){return this.Qs}set boxed(t){this.ds=t}get boxed(){return this.ds}isMosaicByte(){const t=null!=this.ys?this.ys.charCodeAt(0):this.cs.charCodeAt(0);return t<=127&&32==(32&t)}isMosaic(){const t=this.cs.charCodeAt(0);return(this.Is==U.MOSAIC_CONTIGUOUS||this.Is==U.MOSAIC_SEPARATED)&&t<=127&&32==(32&t)}getSextants(){const t=null!=this.ys?this.ys.charCodeAt(0):this.cs.charCodeAt(0);if(t>127)return null;if(t in et)return et[t];let s=t-32;return s>=64&&(s-=32),et[t]=[...s.toString(2).padStart(6,"0")].reverse(),et[t]}}function rt(t,s){if(!(s in st))throw Error("Cell getCharWithEncoding: bad encoding: "+s);if(t in st[s])return st[s][t];const e=s.match(/^(.+)__/);if(null!=e){const i=e[1];if(t in st[i])return st[s][t]=st[i][t],st[i][t]}return t}class nt{constructor(t){this.bs=t,this.ps=[]}attach(t){return this.ps.push(t),this.ps.length-1}notify(t){this.ps.forEach((s=>null!=s&&s(this.bs,t)))}detach(t){this.ps[t]=null}}class ot{constructor(){this.ws=!1,this.Ss=[]}get doubleHeight(){return this.ws}set doubleHeight(t){this.ws=t}addCell(t){this.Ss.push(t)}getCell(t){if(t>=this.Ss.length)throw Error("RowModel.getCell E20 bad cell index");return this.Ss[t]}}const ht=25,_t=new class{constructor(){this.xs=[];for(let t=0;t<ht;t++){const t=[];for(let s=0;s<40;s++)t.push(new it);this.xs.push(t)}this.Us="latin_g0",this.vs=null,this.ks=k.charFromAttribute(k.START_BOX),this.Rs=O[1],this.onSet=new nt(this)}notify(){this.onSet.notify()}setRowFromChars(t,s){if(t>=ht)throw Error("PageModel E29 bad row number");this.Fs(t,s),this.onSet.notify()}setRows(t){(t=t.slice(0,ht)).forEach(((t,s)=>{this.Fs(s,t)})),this.onSet.notify()}Fs(t,s){let e=[...s];if(e=e.slice(0,40),e.forEach(((s,e)=>{const i=s.charCodeAt(0);if(Number.isNaN(i)||i>127)throw Error(`PageModel E51 failed to write row: bad character code (${i}) at row ${t} col ${e}`);this.xs[t][e].byte=s})),e.length<40)for(let s=e.length;s<40;s++)this.xs[t][s].byte=" "}setLevel(t){this.Rs=t,this.onSet.notify()}clearScreen(t){if(void 0===t||t){const t=[];for(let s=0;s<ht;s++)t.push("");this.setRows(t)}else for(let t=0;t<ht;t++)this.Fs(t,"")}setPrimaryG0CharacterEncoding(t,s){this.Us=t,s&&this.onSet.notify()}setSecondaryG0CharacterEncoding(t,s){this.vs=t,s&&this.onSet.notify()}getRow(t){if(t>=ht)throw Error("PageModel.getRow E42 bad rowNum");const s=new ot;let e,i,r=U.ALPHA,n=x.WHITE,o=!1,h=v.NORMAL_SIZE,_=!1,A=!1,a=!1,l=!1,g=x.BLACK,c=U.MOSAIC_CONTIGUOUS,u={active:!1,char:" ",type:U.MOSAIC_CONTIGUOUS};return this.xs[t].forEach(((C,f)=>{const I=C.byte,E=k.attribFromChar(this.Rs,I);switch(e=n,C.type=r,C.boxed=l,i=_,E.attribute!=k.STEADY&&(C.flashing=o),E.attribute!=k.NORMAL_SIZE&&(C.size=h),E.attribute!=k.CONCEAL&&(C.concealed=A),a&&(E.attribute!=k.HOLD_MOSAICS&&(u.active=!1,u.char=" "),a=!1),E.attribute){case k.TEXT_COLOUR:r=U.ALPHA,n=E.colour,A=!1,C.setSpace(u);break;case k.MOSAIC_COLOUR:r=c,n=E.colour,A=!1,C.setSpace(u);break;case k.NEW_BACKGROUND:g=e,C.setSpace(u);break;case k.BLACK_BACKGROUND:g=x.BLACK,C.setSpace(u);break;case k.CONTIGUOUS_GRAPHICS:c=U.MOSAIC_CONTIGUOUS,C.type==U.MOSAIC_SEPARATED&&(C.type=U.MOSAIC_CONTIGUOUS),r==U.MOSAIC_SEPARATED&&(r=U.MOSAIC_CONTIGUOUS),C.setSpace(u);break;case k.SEPARATED_GRAPHICS:c=U.MOSAIC_SEPARATED,C.type==U.MOSAIC_CONTIGUOUS&&(C.type=U.MOSAIC_SEPARATED),r==U.MOSAIC_CONTIGUOUS&&(r=U.MOSAIC_SEPARATED),C.setSpace(u);break;case k.ESC:this.vs&&(_=!i),C.setSpace(u);break;case k.FLASH:o=!0,C.setSpace(u);break;case k.STEADY:C.flashing=!1,o=!1,C.setSpace(u);break;case k.NORMAL_SIZE:C.size=v.NORMAL_SIZE,h=v.NORMAL_SIZE,C.setSpace(u);break;case k.DOUBLE_HEIGHT:h=v.DOUBLE_HEIGHT,s.doubleHeight=!0,C.setSpace(u);break;case k.DOUBLE_WIDTH:h=v.DOUBLE_WIDTH,C.setSpace(u);break;case k.DOUBLE_SIZE:h=v.DOUBLE_SIZE,s.doubleHeight=!0,C.setSpace(u);break;case k.CONCEAL:C.concealed=!0,A=!0,C.setSpace(u);break;case k.HOLD_MOSAICS:u.active=!0,C.setSpace(u);break;case k.RELEASE_MOSAICS:a=!0,C.setSpace(u);break;case k.START_BOX:f>=1&&this.xs[t][f-1].byte==this.ks&&(C.boxed=!0,l=!0),C.setSpace(u);break;case k.END_BOX:l=!1,C.setSpace(u);break;case k.UNKNOWN:C.setSpace(u);break;default:C.setMappedChar(i?this.vs:this.Us),C.isMosaic()&&(u.char=I,u.type=C.type)}C.fgColour=e,C.bgColour=g,s.addCell(C)})),s}},At=new class{constructor(t){this.Ds=new $(t),this.ct=t,this.Ns=1,this.Ls=0,this.Hs(),this.js=null,this.Os=null}setRow(t,s){this.ct.setRowFromChars(t,s)}setPageRows(t){this.ct.setRows(t)}showTestPage(){this.loadPageFromEncodedString(c[tt[this.Ls]]),this.Ls++,4==this.Ls&&(this.Ls=0)}showRandomisedPage(){const t=[];for(let s=0;s<25;s++){const s=[];for(let t=0;t<40;t++)s.push(String.fromCharCode(127*Math.random()));t.push(s.join(""))}this.setPageRows(t)}loadPageFromEncodedString(t){const s=class{static decodeBase64URLEncoded(t){const s=(t=t.replace(/-/g,"+").replace(/_/g,"/")).length%4;if(s){if(1===s)throw Error("Utils.decodeBase64URL: Input base64url string is the wrong length to determine padding");t+=Array(5-s).join("=")}const e=[...atob(t)].map((t=>g(t))),i=new ArrayBuffer(e.length);return new Uint8Array(i).set(e),(t=>{const s=[];for(let e=0;e<25;e++){const i=[];for(let s=0;s<40;s++){let r=6,n=0;const o=280*e+7*s;for(let s=o;s<o+7;s++)n+=t[s]*Math.pow(2,r),r--;i.push(String.fromCharCode(n))}s.push(i.join(""))}return s})(new n(i))}}.decodeBase64URLEncoded(t);this.setPageRows(s)}Hs(){window.addEventListener("ttx.reveal",(()=>this.Ds.reveal())),window.addEventListener("ttx.mix",(()=>this.Ds.mixMode())),window.addEventListener("ttx.subtitlemode",(()=>this.Ds.boxMode()))}toggleReveal(){this.Ds.reveal()}toggleMixMode(){this.Ds.mixMode()}toggleBoxMode(){this.Ds.boxMode()}toggleGrid(){this.Ds.grid()}setLevel(t){this.ct.setLevel(t)}addTo(t){this.Ms=t,this.Ds.addTo(t)}setFont(t){this.Ds.setFont(t)}clearScreen(t){this.ct.clearScreen(t)}setAspectRatio(t){if("natural"==t)return void this.Ds.setAspectRatio(t);const s=parseFloat(t);if(Number.isNaN(s))throw Error("E80 setAspectRatio: bad number");this.Ds.setAspectRatio(s)}setHeight(t){const s=parseFloat(t);if(Number.isNaN(s))throw Error("E98 setHeight: bad number");this.Ds.setHeight(s),this.Os=s}setDefaultG0Charset(...t){this.ct.setPrimaryG0CharacterEncoding(...t)}setSecondG0Charset(...t){this.ct.setSecondaryG0CharacterEncoding(...t)}remove(){if(this.Ds.detach(),this.Ms){const t=document.querySelector(this.Ms);t&&t.removeChild(t.firstChild)}this.Ds=null}setView(t){switch(this.remove(),t){case"classic__font-for-mosaic":this.Ds=new W(this.ct);break;case"classic__graphic-for-mosaic":this.Ds=new $(this.ct);break;default:throw Error("setView E126: bad view name:"+t)}this.Os&&this.Ds.setHeight(this.Os),this.Ms&&this.Ds.addTo(this.Ms),this.ct.notify()}registerViewPlugin(t){t.registerWithView(this.Ds),this.ct.notify()}}(_t);t.Attributes=k,t.Colour=x,t.Level=O,t.teletext=At,Object.defineProperty(t,"Ps",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?s(exports):"function"==typeof define&&define.amd?define(["exports"],s):s((t="undefined"!=typeof globalThis?globalThis:t||self).ttx={});//# sourceMappingURL=teletext.umd.min.js.map
{
"name": "@techandsoftware/teletext",
"version": "0.0.1",
"version": "0.5.1",
"description": "API to render teletext pages using vector graphics in the browser DOM",

@@ -5,0 +5,0 @@ "browser": "dist/teletext.umd.min.js",

@@ -6,2 +6,4 @@ <!--

![Splash: Prerendered teletext page](https://bitbucket.org/rahardy/teletext/raw/0d1345a4afe61b422b3068e45c95a36da97b9363/demo/prerendered_splash.svg)
This package renders teletext pages using vector graphics (SVG). Note this is just the display part of teletext, and operates as a screen or a dumb terminal. The application using this package will need to supply the page content, implement page numbers, navigation, etc. The package provides an API to set page content and change the display characteristics such as the screen height and aspect ratio.

@@ -53,5 +55,5 @@

The project is licensed under GNU Affero General Public License 3 ([AGPL-3.0-only](./LICENSES/AGPL-3.0-only.txt)), or under a commerical software license ([LicenseRef-uk.ltd.TechAndSoftware-1.0](./LICENSES/LicenseRef-uk.ltd.TechAndSoftware-1.0.txt)) if you have paid a licensing fee to Tech and Software Ltd. If you combine your own software with this package and distribute publically (whether via network access or not), the AGPL requires that your software is covered by AGPL; the commerical license does not have that requirement. In order to pay the fee for the commerical license, contact <techandsoftwareltd@outlook.com> for enquiries. The text of the licenses is in the `LICENSES` directory.
The project is licensed under GNU Affero General Public License 3 ([AGPL-3.0-only](https://www.gnu.org/licenses/agpl-3.0.en.html)), or under a commerical software license ([LicenseRef-uk.ltd.TechAndSoftware-1.0](https://bitbucket.org/rahardy/teletext/src/HEAD/LICENSES/LicenseRef-uk.ltd.TechAndSoftware-1.0.txt)) if you have paid a licensing fee to Tech and Software Ltd. If you combine your own software with this package and distribute publically (whether via network access or not), the AGPL requires that your software is covered by AGPL; the commerical license does not have that requirement. In order to pay the fee for the commerical license, contact <techandsoftwareltd@outlook.com> for enquiries. The text of the licenses is in the `LICENSES` directory.
The fonts supplied in the [`demo/fonts`](./demo/fonts) directory have their own licenses. See the `*.license` files in that directory.
The fonts supplied in the `demo/fonts` directory have their own licenses. See the `*.license` files in that directory.

@@ -95,3 +97,3 @@ This package is compliant with [REUSE 3](https://reuse.software/).

See the [demo directory](./demo/index.html) for examples of these.
See the `demo` for examples of these.

@@ -137,7 +139,7 @@ # API

For reference, the code charts are on (Wikipedia)[https://en.wikipedia.org/wiki/Teletext_character_set], however the character codepoints there don't necessarily match the tables in this codebase (see `src/data/characterEncodings.json`). The control codes for characters 0 to 1f are used for attributes - see the Attributes section below.
For reference, the code charts are on [Wikipedia](https://en.wikipedia.org/wiki/Teletext_character_set), however the character codepoints there don't necessarily match the tables in this codebase (see `src/data/characterEncodings.json`). The control codes for characters 0 to 1f are used for attributes - see the Attributes section below.
## setSecondG0Charset(charset, withUpdate)
Sets the second g0 character set. This is used with Attributes.ESC (character code 1b) to switch between the default g0 character set and the second g0 character set. The parameters are the same as for `setDefaultG0Charset`.
Sets the second g0 character set. This is used with `Attributes.ESC` (character code 1b) to switch between the default g0 character set and the second g0 character set. The parameters are the same as for `setDefaultG0Charset`.

@@ -345,5 +347,2 @@ ## setPageRows([strings])

Switching out of boxed mode on a page without boxed characters fails to show the page in Chrome. This is an SVG bug in Chrome:
https://bugs.chromium.org/p/chromium/issues/detail?id=1138917
Arabic script isn't rendered correctly as the characters aren't joined.

@@ -350,0 +349,0 @@

@@ -11,3 +11,3 @@ // SPDX-FileCopyrightText: © 2021 Tech and Software Ltd.

const TEST_PAGE_NAMES = ['ENGINEERING', 'ADVERT', 'UK'];
const TEST_PAGE_NAMES = ['SPLASH', 'ENGINEERING', 'ADVERT', 'UK'];

@@ -14,0 +14,0 @@ export class TeletextController {

<!-- SPDX-FileCopyrightText: © 2021 Tech and Software Ltd. -->
<!-- SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-uk.ltd.TechAndSoftware-1.0 -->
The testpages are from: https://archive.teletextarchaeologist.org/ via the edit.tf editor
These pages in testpages.json are from https://archive.teletextarchaeologist.org/ via Simon Rawles' editor at https://edit.tf :

@@ -10,2 +10,2 @@ * Engineering: BBC2, 2 March 1988, page 797 (tweaked to correct the spelling of 'White')

The data format is base64url-based, described in the edit.tf editor docs: https://github.com/rawles/edit.tf
The data format is base64url-based, and described in the edit.tf editor docs: https://github.com/rawles/edit.tf

@@ -7,3 +7,5 @@ {

"UK":
"QIECBAgQIIcWLGg2EDFy2QIJu_cgZNUETLjQA2TN0xYr2DAodJIECBAgQIEGDB4_PUCBAgQIECBAgQIECBAgQIEANkvaMih0kgQIECDA1Qfv__OgQYGCBAgQIECBAgQIECBAgQIECBAgKHSSBAgQIH6FR-__-v7___oECBAgQIEAORPmxUE6LXpoECAodJIECBAoQKum7______9-gQIECBAgQA82_Zs39-aB8-QIAh0kgQIECBAgSev_____v06BAgQIECBAgQIECBAgQIECBAgKHSSBAgQIECBR00____-_w9GCBAgQIECBAgQIECBAgQIECAodJIECBAgQIECD8rx________ECBAgQIECBAgQIECBAgQICh0kgQIECBAgQLETRlv_______6oECBAgQIECBAgQIECBAgKHSyBAgQIHGQlwYIEH_-_x_____9-dECBAgQIECBAgQIECAIdLIECDAmJbfz_-0RJ0qBV________7sECBAgQIECBAgQIAh0sgQIMzAl-__fX5Sg0JECvX______586IECBAgQIECBAgCHSyBAgwJiW9OjX_0qBAgQIEX________-l8fPjBAgQIECAIdLIEHBYhQIECBQxQICWDhg5fv____________tUCBAgQIAh0sgzIECBAgQIEGlAgQEtP_______________-lQIECBAgCHSyBUwQIECBAgQakCBASQqv_____________-6FAgQIECAIdLIECJygQIECBAgaoEBJBg______________5-OiBAgQIAh0sgQKGKBAgQIEHBKgJIMH7____8v__________QoECBAgCHSyBRmQIECBA4RoECAkgVoVaNel________r16FAgQIECAIdLINCFAgwOEyBAgQICSBAgQePn7___r06RAgQIECBAgQIAh0sgQLeKxCgQIECBAgJIECDR__v0aNGhQIECBAgQIECBAgCHSSBAgQIECBAgQIECBAgQYP3_-1QIECBAgQIECBAgQIECAIdJIECBAgQIECBAgQIECBB6boUSBAgQIECBAgQIECBAgQIAh0kgQIECBAgQIECBAgQIFStAgQIECBAgQIECBAgQIECBAgAzsvjognZe_MFIy4cmzTuy8wdTfwQU-G_l0DVKy-lhyad6A"
"QIECBAgQIIcWLGg2EDFy2QIJu_cgZNUETLjQA2TN0xYr2DAodJIECBAgQIEGDB4_PUCBAgQIECBAgQIECBAgQIEANkvaMih0kgQIECDA1Qfv__OgQYGCBAgQIECBAgQIECBAgQIECBAgKHSSBAgQIH6FR-__-v7___oECBAgQIEAORPmxUE6LXpoECAodJIECBAoQKum7______9-gQIECBAgQA82_Zs39-aB8-QIAh0kgQIECBAgSev_____v06BAgQIECBAgQIECBAgQIECBAgKHSSBAgQIECBR00____-_w9GCBAgQIECBAgQIECBAgQIECAodJIECBAgQIECD8rx________ECBAgQIECBAgQIECBAgQICh0kgQIECBAgQLETRlv_______6oECBAgQIECBAgQIECBAgKHSyBAgQIHGQlwYIEH_-_x_____9-dECBAgQIECBAgQIECAIdLIECDAmJbfz_-0RJ0qBV________7sECBAgQIECBAgQIAh0sgQIMzAl-__fX5Sg0JECvX______586IECBAgQIECBAgCHSyBAgwJiW9OjX_0qBAgQIEX________-l8fPjBAgQIECAIdLIEHBYhQIECBQxQICWDhg5fv____________tUCBAgQIAh0sgzIECBAgQIEGlAgQEtP_______________-lQIECBAgCHSyBUwQIECBAgQakCBASQqv_____________-6FAgQIECAIdLIECJygQIECBAgaoEBJBg______________5-OiBAgQIAh0sgQKGKBAgQIEHBKgJIMH7____8v__________QoECBAgCHSyBRmQIECBA4RoECAkgVoVaNel________r16FAgQIECAIdLINCFAgwOEyBAgQICSBAgQePn7___r06RAgQIECBAgQIAh0sgQLeKxCgQIECBAgJIECDR__v0aNGhQIECBAgQIECBAgCHSSBAgQIECBAgQIECBAgQYP3_-1QIECBAgQIECBAgQIECAIdJIECBAgQIECBAgQIECBB6boUSBAgQIECBAgQIECBAgQIAh0kgQIECBAgQIECBAgQIFStAgQIECBAgQIECBAgQIECBAgAzsvjognZe_MFIy4cmzTuy8wdTfwQU-G_l0DVKy-lhyad6A",
"SPLASH":
"QIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECAsaMIEGDx8YIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQICxowg0N2bdmgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgLGjCBFvz9_6BAZQIECBAgQIECAig0NECBAgQIECBAgQIECAsaMcOD5tjyoGCBAgQIECBAgQICLhCgQIECBAgQIECBAgQICxowoTod79ArSEcHBAgQIECBAg0ITKBAgQcGCBAgQIECBAgLGjCBBgXIUCAyRXmlLBAgQIECBuZ4fPn___aoECBAgQIECBAaQIECBAgQIEBFAgQaTPDh8-f___-vXo9f9qgQIECBAgQIECBAgQIEBFAgQcOHz5____69ejRoECBAg__0CBAgQIECBAgQIECBAgQEUCL___r16NGXQIOHDh8-NCOD-3QIECBAgQIECBAgQIECBARQINf0ug-fPi9evRo0aBAgI6v6VAgQIECBAgQIECBAgQIEBFAgRf2hfBw4cOHD58-fPiAj-_oECBAgQIECBAgQIECBAgQEUCBBr-l0SNGjRo0CBAgQEcH9qgQIECBAgQIECBAgQIECBARQIECL-0Lr169ev-fPnxAR1f0KBAgQIECBAgQIAiBAgQIEBFAgQINf3hw4cOCBAgQIEBH-_QIECBAgQIECBAgCIECBAgQIEB1ARRL1-_____________7VAgOIECBAgQIECAIgQIECBAgQHUBNAgQf26BAgQIN_8ijRoECA4gQIECBAgQIAiBAgQIECA6gQE0CDV_QoECBAgRf2iBAgQIEBxAgQIECBAgCIECBAgQIDqBAgQE0aFAgQIECBAgQIECBAgQHECBAgQIECAIgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIBp0Kg3cNqDSggdMuPRh3ZOe_N074eWVf0y7MvTL46IECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQKMalAyYMmKCplx6ECZBT35unfDyyoJnTIuQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECA"
}

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc