diff --git a/praesentia/static/html5-qrcode.min.js b/praesentia/static/html5-qrcode.min.js deleted file mode 100644 index 95c85a6..0000000 --- a/praesentia/static/html5-qrcode.min.js +++ /dev/null @@ -1,8 +0,0 @@ -/** ZXing **/ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).ZXing={})}(this,function(t){"use strict";var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])};var r,n=function(t){function r(e){var r,n,i,s=this.constructor,o=t.call(this,e)||this;return Object.defineProperty(o,"name",{value:s.name,enumerable:!1}),r=o,n=s.prototype,(i=Object.setPrototypeOf)?i(r,n):r.__proto__=n,function(t,e){void 0===e&&(e=t.constructor);var r=Error.captureStackTrace;r&&r(t,e)}(o),o}return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}(r,t),r}(Error);class i extends n{constructor(t){super(t),this.message=t}getKind(){return this.constructor.kind}}i.kind="Exception";class s extends i{}s.kind="ArgumentException";class o extends i{}o.kind="IllegalArgumentException";class a{constructor(t){if(this.binarizer=t,null===t)throw new o("Binarizer must be non-null.")}getWidth(){return this.binarizer.getWidth()}getHeight(){return this.binarizer.getHeight()}getBlackRow(t,e){return this.binarizer.getBlackRow(t,e)}getBlackMatrix(){return null!==this.matrix&&void 0!==this.matrix||(this.matrix=this.binarizer.getBlackMatrix()),this.matrix}isCropSupported(){return this.binarizer.getLuminanceSource().isCropSupported()}crop(t,e,r,n){const i=this.binarizer.getLuminanceSource().crop(t,e,r,n);return new a(this.binarizer.createBinarizer(i))}isRotateSupported(){return this.binarizer.getLuminanceSource().isRotateSupported()}rotateCounterClockwise(){const t=this.binarizer.getLuminanceSource().rotateCounterClockwise();return new a(this.binarizer.createBinarizer(t))}rotateCounterClockwise45(){const t=this.binarizer.getLuminanceSource().rotateCounterClockwise45();return new a(this.binarizer.createBinarizer(t))}toString(){try{return this.getBlackMatrix().toString()}catch(t){return""}}}class l extends i{static getChecksumInstance(){return new l}}l.kind="ChecksumException";class h{constructor(t){this.source=t}getLuminanceSource(){return this.source}getWidth(){return this.source.getWidth()}getHeight(){return this.source.getHeight()}}class c{static arraycopy(t,e,r,n,i){for(;i--;)r[n++]=t[e++]}static currentTimeMillis(){return Date.now()}}class u extends i{}u.kind="IndexOutOfBoundsException";class d extends u{constructor(t,e){super(e),this.index=t,this.message=e}}d.kind="ArrayIndexOutOfBoundsException";class g{static fill(t,e){for(let r=0,n=t.length;rr)throw new o("fromIndex("+e+") > toIndex("+r+")");if(e<0)throw new d(e);if(r>t)throw new d(r)}static asList(...t){return t}static create(t,e,r){return Array.from({length:t}).map(t=>Array.from({length:e}).fill(r))}static createInt32Array(t,e,r){return Array.from({length:t}).map(t=>Int32Array.from({length:e}).fill(r))}static equals(t,e){if(!t)return!1;if(!e)return!1;if(!t.length)return!1;if(!e.length)return!1;if(t.length!==e.length)return!1;for(let r=0,n=t.length;r>1,o=r(e,t[s]);if(o>0)n=s+1;else{if(!(o<0))return s;i=s-1}}return-n-1}static numberComparator(t,e){return t-e}}class f{static numberOfTrailingZeros(t){let e;if(0===t)return 32;let r=31;return 0!==(e=t<<16)&&(r-=16,t=e),0!==(e=t<<8)&&(r-=8,t=e),0!==(e=t<<4)&&(r-=4,t=e),0!==(e=t<<2)&&(r-=2,t=e),r-(t<<1>>>31)}static numberOfLeadingZeros(t){if(0===t)return 32;let e=1;return t>>>16==0&&(e+=16,t<<=16),t>>>24==0&&(e+=8,t<<=8),t>>>28==0&&(e+=4,t<<=4),t>>>30==0&&(e+=2,t<<=2),e-=t>>>31}static toHexString(t){return t.toString(16)}static toBinaryString(t){return String(parseInt(String(t),2))}static bitCount(t){return t=(t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135,t+=t>>>8,63&(t+=t>>>16)}static truncDivision(t,e){return Math.trunc(t/e)}static parseInt(t,e){return parseInt(t,e)}}f.MIN_VALUE_32_BITS=-2147483648,f.MAX_VALUE=Number.MAX_SAFE_INTEGER;class w{constructor(t,e){void 0===t?(this.size=0,this.bits=new Int32Array(1)):(this.size=t,this.bits=null==e?w.makeArray(t):e)}getSize(){return this.size}getSizeInBytes(){return Math.floor((this.size+7)/8)}ensureCapacity(t){if(t>32*this.bits.length){const e=w.makeArray(t);c.arraycopy(this.bits,0,e,0,this.bits.length),this.bits=e}}get(t){return 0!=(this.bits[Math.floor(t/32)]&1<<(31&t))}set(t){this.bits[Math.floor(t/32)]|=1<<(31&t)}flip(t){this.bits[Math.floor(t/32)]^=1<<(31&t)}getNextSet(t){const e=this.size;if(t>=e)return e;const r=this.bits;let n=Math.floor(t/32),i=r[n];i&=~((1<<(31&t))-1);const s=r.length;for(;0===i;){if(++n===s)return e;i=r[n]}const o=32*n+f.numberOfTrailingZeros(i);return o>e?e:o}getNextUnset(t){const e=this.size;if(t>=e)return e;const r=this.bits;let n=Math.floor(t/32),i=~r[n];i&=~((1<<(31&t))-1);const s=r.length;for(;0===i;){if(++n===s)return e;i=~r[n]}const o=32*n+f.numberOfTrailingZeros(i);return o>e?e:o}setBulk(t,e){this.bits[Math.floor(t/32)]=e}setRange(t,e){if(ethis.size)throw new o;if(e===t)return;e--;const r=Math.floor(t/32),n=Math.floor(e/32),i=this.bits;for(let s=r;s<=n;s++){const o=(2<<(sr?0:31&t));i[s]|=o}}clear(){const t=this.bits.length,e=this.bits;for(let r=0;rthis.size)throw new o;if(e===t)return!0;e--;const n=Math.floor(t/32),i=Math.floor(e/32),s=this.bits;for(let o=n;o<=i;o++){const a=(2<<(on?0:31&t))&4294967295;if((s[o]&a)!==(r?a:0))return!1}return!0}appendBit(t){this.ensureCapacity(this.size+1),t&&(this.bits[Math.floor(this.size/32)]|=1<<(31&this.size)),this.size++}appendBits(t,e){if(e<0||e>32)throw new o("Num bits must be between 0 and 32");this.ensureCapacity(this.size+e);for(let r=e;r>0;r--)this.appendBit(1==(t>>r-1&1))}appendBitArray(t){const e=t.size;this.ensureCapacity(this.size+e);for(let r=0;r>1&1431655765|(1431655765&r)<<1)>>2&858993459|(858993459&r)<<2)>>4&252645135|(252645135&r)<<4)>>8&16711935|(16711935&r)<<8)>>16&65535|(65535&r)<<16,t[e-i]=r}if(this.size!==32*r){const e=32*r-this.size;let n=t[0]>>>e;for(let i=1;i>>e}t[r-1]=n}this.bits=t}static makeArray(t){return new Int32Array(Math.floor((t+31)/32))}equals(t){if(!(t instanceof w))return!1;const e=t;return this.size===e.size&&g.equals(this.bits,e.bits)}hashCode(){return 31*this.size+g.hashCode(this.bits)}toString(){let t="";for(let e=0,r=this.size;e=900)throw new E("incorect value");const e=m.VALUES_TO_ECI.get(t);if(void 0===e)throw new E("incorect value");return e}static getCharacterSetECIByName(t){const e=m.NAME_TO_ECI.get(t);if(void 0===e)throw new E("incorect value");return e}equals(t){if(!(t instanceof m))return!1;const e=t;return this.getName()===e.getName()}}m.VALUE_IDENTIFIER_TO_ECI=new Map,m.VALUES_TO_ECI=new Map,m.NAME_TO_ECI=new Map,m.Cp437=new m(A.Cp437,Int32Array.from([0,2]),"Cp437"),m.ISO8859_1=new m(A.ISO8859_1,Int32Array.from([1,3]),"ISO-8859-1","ISO88591","ISO8859_1"),m.ISO8859_2=new m(A.ISO8859_2,4,"ISO-8859-2","ISO88592","ISO8859_2"),m.ISO8859_3=new m(A.ISO8859_3,5,"ISO-8859-3","ISO88593","ISO8859_3"),m.ISO8859_4=new m(A.ISO8859_4,6,"ISO-8859-4","ISO88594","ISO8859_4"),m.ISO8859_5=new m(A.ISO8859_5,7,"ISO-8859-5","ISO88595","ISO8859_5"),m.ISO8859_6=new m(A.ISO8859_6,8,"ISO-8859-6","ISO88596","ISO8859_6"),m.ISO8859_7=new m(A.ISO8859_7,9,"ISO-8859-7","ISO88597","ISO8859_7"),m.ISO8859_8=new m(A.ISO8859_8,10,"ISO-8859-8","ISO88598","ISO8859_8"),m.ISO8859_9=new m(A.ISO8859_9,11,"ISO-8859-9","ISO88599","ISO8859_9"),m.ISO8859_10=new m(A.ISO8859_10,12,"ISO-8859-10","ISO885910","ISO8859_10"),m.ISO8859_11=new m(A.ISO8859_11,13,"ISO-8859-11","ISO885911","ISO8859_11"),m.ISO8859_13=new m(A.ISO8859_13,15,"ISO-8859-13","ISO885913","ISO8859_13"),m.ISO8859_14=new m(A.ISO8859_14,16,"ISO-8859-14","ISO885914","ISO8859_14"),m.ISO8859_15=new m(A.ISO8859_15,17,"ISO-8859-15","ISO885915","ISO8859_15"),m.ISO8859_16=new m(A.ISO8859_16,18,"ISO-8859-16","ISO885916","ISO8859_16"),m.SJIS=new m(A.SJIS,20,"SJIS","Shift_JIS"),m.Cp1250=new m(A.Cp1250,21,"Cp1250","windows-1250"),m.Cp1251=new m(A.Cp1251,22,"Cp1251","windows-1251"),m.Cp1252=new m(A.Cp1252,23,"Cp1252","windows-1252"),m.Cp1256=new m(A.Cp1256,24,"Cp1256","windows-1256"),m.UnicodeBigUnmarked=new m(A.UnicodeBigUnmarked,25,"UnicodeBigUnmarked","UTF-16BE","UnicodeBig"),m.UTF8=new m(A.UTF8,26,"UTF8","UTF-8"),m.ASCII=new m(A.ASCII,Int32Array.from([27,170]),"ASCII","US-ASCII"),m.Big5=new m(A.Big5,28,"Big5"),m.GB18030=new m(A.GB18030,29,"GB18030","GB2312","EUC_CN","GBK"),m.EUC_KR=new m(A.EUC_KR,30,"EUC_KR","EUC-KR");class _ extends i{}_.kind="UnsupportedOperationException";class I{static decode(t,e){const r=this.encodingName(e);return this.customDecoder?this.customDecoder(t,r):"undefined"==typeof TextDecoder||this.shouldDecodeOnFallback(r)?this.decodeFallback(t,r):new TextDecoder(r).decode(t)}static shouldDecodeOnFallback(t){return!I.isBrowser()&&"ISO-8859-1"===t}static encode(t,e){const r=this.encodingName(e);return this.customEncoder?this.customEncoder(t,r):"undefined"==typeof TextEncoder?this.encodeFallback(t):(new TextEncoder).encode(t)}static isBrowser(){return"undefined"!=typeof window&&"[object Window]"==={}.toString.call(window)}static encodingName(t){return"string"==typeof t?t:t.getName()}static encodingCharacterSet(t){return t instanceof m?t:m.getCharacterSetECIByName(t)}static decodeFallback(t,e){const r=this.encodingCharacterSet(e);if(I.isDecodeFallbackSupported(r)){let e="";for(let r=0,n=t.length;r3&&239===t[0]&&187===t[1]&&191===t[2];for(let e=0;e0?0==(128&r)?s=!1:o--:0!=(128&r)&&(0==(64&r)?s=!1:(o++,0==(32&r)?a++:(o++,0==(16&r)?l++:(o++,0==(8&r)?h++:s=!1))))),n&&(r>127&&r<160?n=!1:r>159&&(r<192||215===r||247===r)&&A++),i&&(c>0?r<64||127===r||r>252?i=!1:c--:128===r||160===r||r>239?i=!1:r>160&&r<224?(u++,g=0,++d>f&&(f=d)):r>127?(c++,d=0,++g>w&&(w=g)):(d=0,g=0))}return s&&o>0&&(s=!1),i&&c>0&&(i=!1),s&&(E||a+l+h>0)?S.UTF8:i&&(S.ASSUME_SHIFT_JIS||f>=3||w>=3)?S.SHIFT_JIS:n&&i?2===f&&2===u||10*A>=r?S.SHIFT_JIS:S.ISO88591:n?S.ISO88591:i?S.SHIFT_JIS:s?S.UTF8:S.PLATFORM_DEFAULT_ENCODING}static format(t,...e){let r=-1;return t.replace(/%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g,function(t,n,i,s,o,a){if("%%"===t)return"%";if(void 0===e[++r])return;t=s?parseInt(s.substr(1)):void 0;let l,h=o?parseInt(o.substr(1)):void 0;switch(a){case"s":l=e[r];break;case"c":l=e[r][0];break;case"f":l=parseFloat(e[r]).toFixed(t);break;case"p":l=parseFloat(e[r]).toPrecision(t);break;case"e":l=parseFloat(e[r]).toExponential(t);break;case"x":l=parseInt(e[r]).toString(h||16);break;case"d":l=parseFloat(parseInt(e[r],h||10).toPrecision(t)).toFixed(0)}l="object"==typeof l?JSON.stringify(l):(+l).toString(h);let c=parseInt(i),u=i&&i[0]+""=="0"?"0":" ";for(;l.lengths){if(-1===a)a=i-s;else if(i-s!==a)throw new o("row lengths do not match");s=i,l++}h++}else if(t.substring(h,h+e.length)===e)h+=e.length,n[i]=!0,i++;else{if(t.substring(h,h+r.length)!==r)throw new o("illegal character encountered: "+t.substring(h));h+=r.length,n[i]=!1,i++}if(i>s){if(-1===a)a=i-s;else if(i-s!==a)throw new o("row lengths do not match");l++}const c=new T(a,l);for(let t=0;t>>(31&t)&1)}set(t,e){const r=e*this.rowSize+Math.floor(t/32);this.bits[r]|=1<<(31&t)&4294967295}unset(t,e){const r=e*this.rowSize+Math.floor(t/32);this.bits[r]&=~(1<<(31&t)&4294967295)}flip(t,e){const r=e*this.rowSize+Math.floor(t/32);this.bits[r]^=1<<(31&t)&4294967295}xor(t){if(this.width!==t.getWidth()||this.height!==t.getHeight()||this.rowSize!==t.getRowSize())throw new o("input matrix dimensions do not match");const e=new w(Math.floor(this.width/32)+1),r=this.rowSize,n=this.bits;for(let i=0,s=this.height;ithis.height||i>this.width)throw new o("The region must fit inside the matrix");const a=this.rowSize,l=this.bits;for(let r=e;ra&&(a=t),32*eo){let t=31;for(;l>>>t==0;)t--;32*e+t>o&&(o=32*e+t)}}}return o=0&&0===e[r];)r--;if(r<0)return null;const n=Math.floor(r/t);let i=32*Math.floor(r%t);const s=e[r];let o=31;for(;s>>>o==0;)o--;return i+=o,Int32Array.from([i,n])}getWidth(){return this.width}getHeight(){return this.height}getRowSize(){return this.rowSize}equals(t){if(!(t instanceof T))return!1;const e=t;return this.width===e.width&&this.height===e.height&&this.rowSize===e.rowSize&&g.equals(this.bits,e.bits)}hashCode(){let t=this.width;return t=31*(t=31*(t=31*(t=31*t+this.width)+this.height)+this.rowSize)+g.hashCode(this.bits)}toString(t="X ",e=" ",r="\n"){return this.buildToString(t,e,r)}buildToString(t,e,r){let n=new p;for(let i=0,s=this.height;i>N.LUMINANCE_SHIFT]++;const o=N.estimateBlackPoint(s);if(n<3)for(let t=0;t>N.LUMINANCE_SHIFT]++}}const s=N.estimateBlackPoint(i),o=t.getMatrix();for(let t=0;ti&&(n=s,i=t[s]),t[s]>r&&(r=t[s]);let s=0,o=0;for(let r=0;ro&&(s=r,o=i)}if(n>s){const t=n;n=s,s=t}if(s-n<=e/16)throw new R;let a=s-1,l=-1;for(let e=s-1;e>n;e--){const i=e-n,o=i*i*(s-e)*(r-t[e]);o>l&&(a=e,l=o)}return a<=D.MINIMUM_DIMENSION&&r>=D.MINIMUM_DIMENSION){const n=t.getMatrix();let i=e>>D.BLOCK_SIZE_POWER;0!=(e&D.BLOCK_SIZE_MASK)&&i++;let s=r>>D.BLOCK_SIZE_POWER;0!=(r&D.BLOCK_SIZE_MASK)&&s++;const o=D.calculateBlackPoints(n,i,s,e,r),a=new T(e,r);D.calculateThresholdForBlock(n,i,s,e,r,o,a),this.matrix=a}else this.matrix=super.getBlackMatrix();return this.matrix}createBinarizer(t){return new D(t)}static calculateThresholdForBlock(t,e,r,n,i,s,o){const a=i-D.BLOCK_SIZE,l=n-D.BLOCK_SIZE;for(let i=0;ia&&(h=a);const c=D.cap(i,2,r-3);for(let r=0;rl&&(i=l);const a=D.cap(r,2,e-3);let u=0;for(let t=-2;t<=2;t++){const e=s[c+t];u+=e[a-2]+e[a-1]+e[a]+e[a+1]+e[a+2]}const d=u/25;D.thresholdBlock(t,i,h,d,n,o)}}}static cap(t,e,r){return tr?r:t}static thresholdBlock(t,e,r,n,i,s){for(let o=0,a=r*i+e;os&&(r=s);for(let s=0;so&&(e=o);let l=0,h=255,c=0;for(let i=0,s=r*n+e;ic&&(c=r)}if(c-h>D.MIN_DYNAMIC_RANGE)for(i++,s+=n;i>2*D.BLOCK_SIZE_POWER;if(c-h<=D.MIN_DYNAMIC_RANGE&&(u=h/2,i>0&&s>0)){const t=(a[i-1][s]+2*a[i][s-1]+a[i-1][s-1])/4;h>10}n[r]=i}return n}getRow(t,e){if(t<0||t>=this.getHeight())throw new o("Requested row is outside the image: "+t);const r=this.getWidth(),n=t*r;return null===e?e=this.buffer.slice(n,n+r):(e.lengthnew b(t.deviceId,t.label))})}findDeviceById(t){return P(this,void 0,void 0,function*(){const e=yield this.listVideoInputDevices();return e?e.find(e=>e.deviceId===t):null})}decodeFromInputVideoDevice(t,e){return P(this,void 0,void 0,function*(){return yield this.decodeOnceFromVideoDevice(t,e)})}decodeOnceFromVideoDevice(t,e){return P(this,void 0,void 0,function*(){let r;this.reset();const n={video:r=t?{deviceId:{exact:t}}:{facingMode:"environment"}};return yield this.decodeOnceFromConstraints(n,e)})}decodeOnceFromConstraints(t,e){return P(this,void 0,void 0,function*(){const r=yield navigator.mediaDevices.getUserMedia(t);return yield this.decodeOnceFromStream(r,e)})}decodeOnceFromStream(t,e){return P(this,void 0,void 0,function*(){this.reset();const r=yield this.attachStreamToVideo(t,e);return yield this.decodeOnce(r)})}decodeFromInputVideoDeviceContinuously(t,e,r){return P(this,void 0,void 0,function*(){return yield this.decodeFromVideoDevice(t,e,r)})}decodeFromVideoDevice(t,e,r){return P(this,void 0,void 0,function*(){let n;const i={video:n=t?{deviceId:{exact:t}}:{facingMode:"environment"}};return yield this.decodeFromConstraints(i,e,r)})}decodeFromConstraints(t,e,r){return P(this,void 0,void 0,function*(){const n=yield navigator.mediaDevices.getUserMedia(t);return yield this.decodeFromStream(n,e,r)})}decodeFromStream(t,e,r){return P(this,void 0,void 0,function*(){this.reset();const n=yield this.attachStreamToVideo(t,e);return yield this.decodeContinuously(n,r)})}stopAsyncDecode(){this._stopAsyncDecode=!0}stopContinuousDecode(){this._stopContinuousDecode=!0}attachStreamToVideo(t,e){return P(this,void 0,void 0,function*(){const r=this.prepareVideoElement(e);return this.addVideoSource(r,t),this.videoElement=r,this.stream=t,yield this.playVideoOnLoadAsync(r),r})}playVideoOnLoadAsync(t){return new Promise((e,r)=>this.playVideoOnLoad(t,()=>e()))}playVideoOnLoad(t,e){this.videoEndedListener=(()=>this.stopStreams()),this.videoCanPlayListener=(()=>this.tryPlayVideo(t)),t.addEventListener("ended",this.videoEndedListener),t.addEventListener("canplay",this.videoCanPlayListener),t.addEventListener("playing",e),this.tryPlayVideo(t)}isVideoPlaying(t){return t.currentTime>0&&!t.paused&&!t.ended&&t.readyState>2}tryPlayVideo(t){return P(this,void 0,void 0,function*(){if(this.isVideoPlaying(t))console.warn("Trying to play video that is already playing.");else try{yield t.play()}catch(t){console.warn("It was not possible to play the video.")}})}getMediaElement(t,e){const r=document.getElementById(t);if(!r)throw new s(`element with id '${t}' not found`);if(r.nodeName.toLowerCase()!==e.toLowerCase())throw new s(`element with id '${t}' must be an ${e} element`);return r}decodeFromImage(t,e){if(!t&&!e)throw new s("either imageElement with a src set or an url must be provided");return e&&!t?this.decodeFromImageUrl(e):this.decodeFromImageElement(t)}decodeFromVideo(t,e){if(!t&&!e)throw new s("Either an element with a src set or an URL must be provided");return e&&!t?this.decodeFromVideoUrl(e):this.decodeFromVideoElement(t)}decodeFromVideoContinuously(t,e,r){if(void 0===t&&void 0===e)throw new s("Either an element with a src set or an URL must be provided");return e&&!t?this.decodeFromVideoUrlContinuously(e,r):this.decodeFromVideoElementContinuously(t,r)}decodeFromImageElement(t){if(!t)throw new s("An image element must be provided.");this.reset();const e=this.prepareImageElement(t);let r;return this.imageElement=e,r=this.isImageLoaded(e)?this.decodeOnce(e,!1,!0):this._decodeOnLoadImage(e)}decodeFromVideoElement(t){const e=this._decodeFromVideoElementSetup(t);return this._decodeOnLoadVideo(e)}decodeFromVideoElementContinuously(t,e){const r=this._decodeFromVideoElementSetup(t);return this._decodeOnLoadVideoContinuously(r,e)}_decodeFromVideoElementSetup(t){if(!t)throw new s("A video element must be provided.");this.reset();const e=this.prepareVideoElement(t);return this.videoElement=e,e}decodeFromImageUrl(t){if(!t)throw new s("An URL must be provided.");this.reset();const e=this.prepareImageElement();this.imageElement=e;const r=this._decodeOnLoadImage(e);return e.src=t,r}decodeFromVideoUrl(t){if(!t)throw new s("An URL must be provided.");this.reset();const e=this.prepareVideoElement(),r=this.decodeFromVideoElement(e);return e.src=t,r}decodeFromVideoUrlContinuously(t,e){if(!t)throw new s("An URL must be provided.");this.reset();const r=this.prepareVideoElement(),n=this.decodeFromVideoElementContinuously(r,e);return r.src=t,n}_decodeOnLoadImage(t){return new Promise((e,r)=>{this.imageLoadedListener=(()=>this.decodeOnce(t,!1,!0).then(e,r)),t.addEventListener("load",this.imageLoadedListener)})}_decodeOnLoadVideo(t){return P(this,void 0,void 0,function*(){return yield this.playVideoOnLoadAsync(t),yield this.decodeOnce(t)})}_decodeOnLoadVideoContinuously(t,e){return P(this,void 0,void 0,function*(){yield this.playVideoOnLoadAsync(t),this.decodeContinuously(t,e)})}isImageLoaded(t){return!!t.complete&&0!==t.naturalWidth}prepareImageElement(t){let e;return void 0===t&&((e=document.createElement("img")).width=200,e.height=200),"string"==typeof t&&(e=this.getMediaElement(t,"img")),t instanceof HTMLImageElement&&(e=t),e}prepareVideoElement(t){let e;return t||"undefined"==typeof document||((e=document.createElement("video")).width=200,e.height=200),"string"==typeof t&&(e=this.getMediaElement(t,"video")),t instanceof HTMLVideoElement&&(e=t),e.setAttribute("autoplay","true"),e.setAttribute("muted","true"),e.setAttribute("playsinline","true"),e}decodeOnce(t,e=!0,r=!0){this._stopAsyncDecode=!1;const n=(i,s)=>{if(this._stopAsyncDecode)return s(new R("Video stream has ended before any code could be detected.")),void(this._stopAsyncDecode=void 0);try{i(this.decode(t))}catch(t){const o=(t instanceof l||t instanceof E)&&r;if(e&&t instanceof R||o)return setTimeout(n,this._timeBetweenDecodingAttempts,i,s);s(t)}};return new Promise((t,e)=>n(t,e))}decodeContinuously(t,e){this._stopContinuousDecode=!1;const r=()=>{if(this._stopContinuousDecode)this._stopContinuousDecode=void 0;else try{const n=this.decode(t);e(n,null),setTimeout(r,this.timeBetweenScansMillis)}catch(t){e(null,t);const n=t instanceof R;(t instanceof l||t instanceof E||n)&&setTimeout(r,this._timeBetweenDecodingAttempts)}};r()}decode(t){const e=this.createBinaryBitmap(t);return this.decodeBitmap(e)}createBinaryBitmap(t){const e=this.getCaptureCanvasContext(t);this.drawImageOnCanvas(e,t);const r=this.getCaptureCanvas(t),n=new M(r),i=new D(n);return new a(i)}getCaptureCanvasContext(t){if(!this.captureCanvasContext){const e=this.getCaptureCanvas(t).getContext("2d");this.captureCanvasContext=e}return this.captureCanvasContext}getCaptureCanvas(t){if(!this.captureCanvas){const e=this.createCaptureCanvas(t);this.captureCanvas=e}return this.captureCanvas}drawImageOnCanvas(t,e){t.drawImage(e,0,0)}decodeBitmap(t){return this.reader.decode(t,this._hints)}createCaptureCanvas(t){if("undefined"==typeof document)return this._destroyCaptureCanvas(),null;const e=document.createElement("canvas");let r,n;return void 0!==t&&(t instanceof HTMLVideoElement?(r=t.videoWidth,n=t.videoHeight):t instanceof HTMLImageElement&&(r=t.naturalWidth||t.width,n=t.naturalHeight||t.height)),e.style.width=r+"px",e.style.height=n+"px",e.width=r,e.height=n,e}stopStreams(){this.stream&&(this.stream.getVideoTracks().forEach(t=>t.stop()),this.stream=void 0),!1===this._stopAsyncDecode&&this.stopAsyncDecode(),!1===this._stopContinuousDecode&&this.stopContinuousDecode()}reset(){this.stopStreams(),this._destroyVideoElement(),this._destroyImageElement(),this._destroyCaptureCanvas()}_destroyVideoElement(){this.videoElement&&(void 0!==this.videoEndedListener&&this.videoElement.removeEventListener("ended",this.videoEndedListener),void 0!==this.videoPlayingEventListener&&this.videoElement.removeEventListener("playing",this.videoPlayingEventListener),void 0!==this.videoCanPlayListener&&this.videoElement.removeEventListener("loadedmetadata",this.videoCanPlayListener),this.cleanVideoSource(this.videoElement),this.videoElement=void 0)}_destroyImageElement(){this.imageElement&&(void 0!==this.imageLoadedListener&&this.imageElement.removeEventListener("load",this.imageLoadedListener),this.imageElement.src=void 0,this.imageElement.removeAttribute("src"),this.imageElement=void 0)}_destroyCaptureCanvas(){this.captureCanvasContext=void 0,this.captureCanvas=void 0}addVideoSource(t,e){try{t.srcObject=e}catch(r){t.src=URL.createObjectURL(e)}}cleanVideoSource(t){try{t.srcObject=null}catch(e){t.src=""}this.videoElement.removeAttribute("src")}}class F{constructor(t,e,r=(null==e?0:8*e.length),n,i,s=c.currentTimeMillis()){this.text=t,this.rawBytes=e,this.numBits=r,this.resultPoints=n,this.format=i,this.timestamp=s,this.text=t,this.rawBytes=e,this.numBits=null==r?null==e?0:8*e.length:r,this.resultPoints=n,this.format=i,this.resultMetadata=null,this.timestamp=null==s?c.currentTimeMillis():s}getText(){return this.text}getRawBytes(){return this.rawBytes}getNumBits(){return this.numBits}getResultPoints(){return this.resultPoints}getBarcodeFormat(){return this.format}getResultMetadata(){return this.resultMetadata}putMetadata(t,e){null===this.resultMetadata&&(this.resultMetadata=new Map),this.resultMetadata.set(t,e)}putAllMetadata(t){null!==t&&(null===this.resultMetadata?this.resultMetadata=t:this.resultMetadata=new Map(t))}addResultPoints(t){const e=this.resultPoints;if(null===e)this.resultPoints=t;else if(null!==t&&t.length>0){const r=new Array(e.length+t.length);c.arraycopy(e,0,r,0,e.length),c.arraycopy(t,0,r,e.length,t.length),this.resultPoints=r}}getTimestamp(){return this.timestamp}toString(){return this.text}}!function(t){t[t.AZTEC=0]="AZTEC",t[t.CODABAR=1]="CODABAR",t[t.CODE_39=2]="CODE_39",t[t.CODE_93=3]="CODE_93",t[t.CODE_128=4]="CODE_128",t[t.DATA_MATRIX=5]="DATA_MATRIX",t[t.EAN_8=6]="EAN_8",t[t.EAN_13=7]="EAN_13",t[t.ITF=8]="ITF",t[t.MAXICODE=9]="MAXICODE",t[t.PDF_417=10]="PDF_417",t[t.QR_CODE=11]="QR_CODE",t[t.RSS_14=12]="RSS_14",t[t.RSS_EXPANDED=13]="RSS_EXPANDED",t[t.UPC_A=14]="UPC_A",t[t.UPC_E=15]="UPC_E",t[t.UPC_EAN_EXTENSION=16]="UPC_EAN_EXTENSION"}(B||(B={}));var v,k=B;!function(t){t[t.OTHER=0]="OTHER",t[t.ORIENTATION=1]="ORIENTATION",t[t.BYTE_SEGMENTS=2]="BYTE_SEGMENTS",t[t.ERROR_CORRECTION_LEVEL=3]="ERROR_CORRECTION_LEVEL",t[t.ISSUE_NUMBER=4]="ISSUE_NUMBER",t[t.SUGGESTED_PRICE=5]="SUGGESTED_PRICE",t[t.POSSIBLE_COUNTRY=6]="POSSIBLE_COUNTRY",t[t.UPC_EAN_EXTENSION=7]="UPC_EAN_EXTENSION",t[t.PDF417_EXTRA_METADATA=8]="PDF417_EXTRA_METADATA",t[t.STRUCTURED_APPEND_SEQUENCE=9]="STRUCTURED_APPEND_SEQUENCE",t[t.STRUCTURED_APPEND_PARITY=10]="STRUCTURED_APPEND_PARITY"}(v||(v={}));var x,V,U,H,G,X,W=v;class z{constructor(t,e,r,n,i=-1,s=-1){this.rawBytes=t,this.text=e,this.byteSegments=r,this.ecLevel=n,this.structuredAppendSequenceNumber=i,this.structuredAppendParity=s,this.numBits=null==t?0:8*t.length}getRawBytes(){return this.rawBytes}getNumBits(){return this.numBits}setNumBits(t){this.numBits=t}getText(){return this.text}getByteSegments(){return this.byteSegments}getECLevel(){return this.ecLevel}getErrorsCorrected(){return this.errorsCorrected}setErrorsCorrected(t){this.errorsCorrected=t}getErasures(){return this.erasures}setErasures(t){this.erasures=t}getOther(){return this.other}setOther(t){this.other=t}hasStructuredAppend(){return this.structuredAppendParity>=0&&this.structuredAppendSequenceNumber>=0}getStructuredAppendParity(){return this.structuredAppendParity}getStructuredAppendSequenceNumber(){return this.structuredAppendSequenceNumber}}class Y{exp(t){return this.expTable[t]}log(t){if(0===t)throw new o;return this.logTable[t]}static addOrSubtract(t,e){return t^e}}class Z{constructor(t,e){if(0===e.length)throw new o;this.field=t;const r=e.length;if(r>1&&0===e[0]){let t=1;for(;tr.length){const t=e;e=r,r=t}let n=new Int32Array(r.length);const i=r.length-e.length;c.arraycopy(r,0,n,0,i);for(let t=i;t=t.getDegree()&&!n.isZero();){const i=n.getDegree()-t.getDegree(),o=e.multiply(n.getCoefficient(n.getDegree()),s),a=t.multiplyByMonomial(i,o),l=e.buildMonomial(i,o);r=r.addOrSubtract(l),n=n.addOrSubtract(a)}return[r,n]}toString(){let t="";for(let e=this.getDegree();e>=0;e--){let r=this.getCoefficient(e);if(0!==r){if(r<0?(t+=" - ",r=-r):t.length>0&&(t+=" + "),0===e||1!==r){const e=this.field.log(r);0===e?t+="1":1===e?t+="a":(t+="a^",t+=e)}0!==e&&(1===e?t+="x":(t+="x^",t+=e))}}return t}}class K extends i{}K.kind="ArithmeticException";class q extends Y{constructor(t,e,r){super(),this.primitive=t,this.size=e,this.generatorBase=r;const n=new Int32Array(e);let i=1;for(let r=0;r=e&&(i^=t,i&=e-1);this.expTable=n;const s=new Int32Array(e);for(let t=0;t=(r/2|0);){let t=i,e=o;if(o=a,(i=s).isZero())throw new Q("r_{i-1} was zero");s=t;let r=n.getZero();const l=i.getCoefficient(i.getDegree()),h=n.inverse(l);for(;s.getDegree()>=i.getDegree()&&!s.isZero();){const t=s.getDegree()-i.getDegree(),e=n.multiply(s.getCoefficient(s.getDegree()),h);r=r.addOrSubtract(n.buildMonomial(t,e)),s=s.addOrSubtract(i.multiplyByMonomial(t,e))}if(a=r.multiply(o).addOrSubtract(e),s.getDegree()>=i.getDegree())throw new j("Division algorithm failed to reduce polynomial?")}const l=a.getCoefficient(0);if(0===l)throw new Q("sigmaTilde(0) was zero");const h=n.inverse(l);return[a.multiplyScalar(h),s.multiplyScalar(h)]}findErrorLocations(t){const e=t.getDegree();if(1===e)return Int32Array.from([t.getCoefficient(1)]);const r=new Int32Array(e);let n=0;const i=this.field;for(let s=1;s1,c,c+r-1),c+=r-1;else for(let t=r-1;t>=0;--t)h[c++]=0!=(e&1<=8?$.readCode(t,e,8):$.readCode(t,e,r)<<8-r}static convertBoolArrayToByteArray(t){let e=new Uint8Array((t.length+7)/8);for(let r=0;r","?","[","]","{","}","CTRL_UL"],$.DIGIT_TABLE=["CTRL_PS"," ","0","1","2","3","4","5","6","7","8","9",",",".","CTRL_UL","CTRL_US"];class tt{constructor(){}static round(t){return NaN===t?0:t<=Number.MIN_SAFE_INTEGER?Number.MIN_SAFE_INTEGER:t>=Number.MAX_SAFE_INTEGER?Number.MAX_SAFE_INTEGER:t+(t<0?-.5:.5)|0}static distance(t,e,r,n){const i=t-r,s=e-n;return Math.sqrt(i*i+s*s)}static sum(t){let e=0;for(let r=0,n=t.length;r!==n;r++){e+=t[r]}return e}}class et{static floatToIntBits(t){return t}}et.MAX_VALUE=Number.MAX_SAFE_INTEGER;class rt{constructor(t,e){this.x=t,this.y=e}getX(){return this.x}getY(){return this.y}equals(t){if(t instanceof rt){const e=t;return this.x===e.x&&this.y===e.y}return!1}hashCode(){return 31*et.floatToIntBits(this.x)+et.floatToIntBits(this.y)}toString(){return"("+this.x+","+this.y+")"}static orderBestPatterns(t){const e=this.distance(t[0],t[1]),r=this.distance(t[1],t[2]),n=this.distance(t[0],t[2]);let i,s,o;if(r>=e&&r>=n?(s=t[0],i=t[1],o=t[2]):n>=r&&n>=e?(s=t[1],i=t[0],o=t[2]):(s=t[2],i=t[0],o=t[1]),this.crossProductZ(i,s,o)<0){const t=i;i=o,o=t}t[0]=i,t[1]=s,t[2]=o}static distance(t,e){return tt.distance(t.x,t.y,e.x,e.y)}static crossProductZ(t,e,r){const n=e.x,i=e.y;return(r.x-n)*(t.y-i)-(r.y-i)*(t.x-n)}}class nt{constructor(t,e){this.bits=t,this.points=e}getBits(){return this.bits}getPoints(){return this.points}}class it extends nt{constructor(t,e,r,n,i){super(t,e),this.compact=r,this.nbDatablocks=n,this.nbLayers=i}getNbLayers(){return this.nbLayers}getNbDatablocks(){return this.nbDatablocks}isCompact(){return this.compact}}class st{constructor(t,e,r,n){this.image=t,this.height=t.getHeight(),this.width=t.getWidth(),null==e&&(e=st.INIT_SIZE),null==r&&(r=t.getWidth()/2|0),null==n&&(n=t.getHeight()/2|0);const i=e/2|0;if(this.leftInit=r-i,this.rightInit=r+i,this.upInit=n-i,this.downInit=n+i,this.upInit<0||this.leftInit<0||this.downInit>=this.height||this.rightInit>=this.width)throw new R}detect(){let t=this.leftInit,e=this.rightInit,r=this.upInit,n=this.downInit,i=!1,s=!0,o=!1,a=!1,l=!1,h=!1,c=!1;const u=this.width,d=this.height;for(;s;){s=!1;let g=!0;for(;(g||!a)&&e=u){i=!0;break}let f=!0;for(;(f||!l)&&n=d){i=!0;break}let w=!0;for(;(w||!h)&&t>=0;)(w=this.containsBlackPoint(r,n,t,!1))?(t--,s=!0,h=!0):h||t--;if(t<0){i=!0;break}let A=!0;for(;(A||!c)&&r>=0;)(A=this.containsBlackPoint(t,e,r,!0))?(r--,s=!0,c=!0):c||r--;if(r<0){i=!0;break}s&&(o=!0)}if(!i&&o){const i=e-t;let s=null;for(let e=1;null===s&&er||o<-1||o>n)throw new R;i=!1,-1===s?(e[t]=0,i=!0):s===r&&(e[t]=r-1,i=!0),-1===o?(e[t+1]=0,i=!0):o===n&&(e[t+1]=n-1,i=!0)}i=!0;for(let t=e.length-2;t>=0&&i;t-=2){const s=Math.floor(e[t]),o=Math.floor(e[t+1]);if(s<-1||s>r||o<-1||o>n)throw new R;i=!1,-1===s?(e[t]=0,i=!0):s===r&&(e[t]=r-1,i=!0),-1===o?(e[t+1]=0,i=!0):o===n&&(e[t+1]=n-1,i=!0)}}}class at{constructor(t,e,r,n,i,s,o,a,l){this.a11=t,this.a21=e,this.a31=r,this.a12=n,this.a22=i,this.a32=s,this.a13=o,this.a23=a,this.a33=l}static quadrilateralToQuadrilateral(t,e,r,n,i,s,o,a,l,h,c,u,d,g,f,w){const A=at.quadrilateralToSquare(t,e,r,n,i,s,o,a);return at.squareToQuadrilateral(l,h,c,u,d,g,f,w).times(A)}transformPoints(t){const e=t.length,r=this.a11,n=this.a12,i=this.a13,s=this.a21,o=this.a22,a=this.a23,l=this.a31,h=this.a32,c=this.a33;for(let u=0;u>1&127):(n<<=10,n+=(e>>2&992)+(e>>1&31))}let i=this.getCorrectedParameterData(n,this.compact);this.compact?(this.nbLayers=1+(i>>6),this.nbDataBlocks=1+(63&i)):(this.nbLayers=1+(i>>11),this.nbDataBlocks=1+(2047&i))}getRotation(t,e){let r=0;t.forEach((t,n,i)=>{r=(r<<3)+((t>>e-2<<1)+(1&t))}),r=((1&r)<<11)+(r>>1);for(let t=0;t<4;t++)if(f.bitCount(r^this.EXPECTED_CORNER_BITS[t])<=2)return t;throw new R}getCorrectedParameterData(t,e){let r,n;e?(r=7,n=2):(r=10,n=4);let i=r-n,s=new Int32Array(r);for(let e=r-1;e>=0;--e)s[e]=15&t,t>>=4;try{new J(q.AZTEC_PARAM).decode(s,i)}catch(t){throw new R}let o=0;for(let t=0;t2){let r=this.distancePoint(l,t)*this.nbCenterLayers/(this.distancePoint(i,e)*(this.nbCenterLayers+2));if(r<.75||r>1.25||!this.isWhiteOrBlackRectangle(t,o,a,l))break}e=t,r=o,n=a,i=l,s=!s}if(5!==this.nbCenterLayers&&7!==this.nbCenterLayers)throw new R;this.compact=5===this.nbCenterLayers;let o=new rt(e.getX()+.5,e.getY()-.5),a=new rt(r.getX()+.5,r.getY()+.5),l=new rt(n.getX()-.5,n.getY()+.5),h=new rt(i.getX()-.5,i.getY()-.5);return this.expandSquare([o,a,l,h],2*this.nbCenterLayers-3,2*this.nbCenterLayers)}getMatrixCenter(){let t,e,r,n;try{let i=new st(this.image).detect();t=i[0],e=i[1],r=i[2],n=i[3]}catch(i){let s=this.image.getWidth()/2,o=this.image.getHeight()/2;t=this.getFirstDifferent(new ct(s+7,o-7),!1,1,-1).toResultPoint(),e=this.getFirstDifferent(new ct(s+7,o+7),!1,1,1).toResultPoint(),r=this.getFirstDifferent(new ct(s-7,o+7),!1,-1,1).toResultPoint(),n=this.getFirstDifferent(new ct(s-7,o-7),!1,-1,-1).toResultPoint()}let i=tt.round((t.getX()+n.getX()+e.getX()+r.getX())/4),s=tt.round((t.getY()+n.getY()+e.getY()+r.getY())/4);try{let o=new st(this.image,15,i,s).detect();t=o[0],e=o[1],r=o[2],n=o[3]}catch(o){t=this.getFirstDifferent(new ct(i+7,s-7),!1,1,-1).toResultPoint(),e=this.getFirstDifferent(new ct(i+7,s+7),!1,1,1).toResultPoint(),r=this.getFirstDifferent(new ct(i-7,s+7),!1,-1,1).toResultPoint(),n=this.getFirstDifferent(new ct(i-7,s-7),!1,-1,-1).toResultPoint()}return i=tt.round((t.getX()+n.getX()+e.getX()+r.getX())/4),s=tt.round((t.getY()+n.getY()+e.getY()+r.getY())/4),new ct(i,s)}getMatrixCornerPoints(t){return this.expandSquare(t,2*this.nbCenterLayers,this.getDimension())}sampleGrid(t,e,r,n,i){let s=ht.getInstance(),o=this.getDimension(),a=o/2-this.nbCenterLayers,l=o/2+this.nbCenterLayers;return s.sampleGrid(t,o,o,a,a,l,a,l,l,a,l,e.getX(),e.getY(),r.getX(),r.getY(),n.getX(),n.getY(),i.getX(),i.getY())}sampleLine(t,e,r){let n=0,i=this.distanceResultPoint(t,e),s=i/r,o=t.getX(),a=t.getY(),l=s*(e.getX()-t.getX())/i,h=s*(e.getY()-t.getY())/i;for(let t=0;t.1&&c<.9?0:c<=.1===l?1:-1}getFirstDifferent(t,e,r,n){let i=t.getX()+r,s=t.getY()+n;for(;this.isValid(i,s)&&this.image.get(i,s)===e;)i+=r,s+=n;for(i-=r,s-=n;this.isValid(i,s)&&this.image.get(i,s)===e;)i+=r;for(i-=r;this.isValid(i,s)&&this.image.get(i,s)===e;)s+=n;return new ct(i,s-=n)}expandSquare(t,e,r){let n=r/(2*e),i=t[0].getX()-t[2].getX(),s=t[0].getY()-t[2].getY(),o=(t[0].getX()+t[2].getX())/2,a=(t[0].getY()+t[2].getY())/2,l=new rt(o+n*i,a+n*s),h=new rt(o-n*i,a-n*s);return i=t[1].getX()-t[3].getX(),s=t[1].getY()-t[3].getY(),o=(t[1].getX()+t[3].getX())/2,a=(t[1].getY()+t[3].getY())/2,[l,new rt(o+n*i,a+n*s),h,new rt(o-n*i,a-n*s)]}isValid(t,e){return t>=0&&t0&&e{r.foundPossibleResultPoint(t)})}}reset(){}}class gt{decode(t,e){try{return this.doDecode(t,e)}catch(r){if(e&&!0===e.get(C.TRY_HARDER)&&t.isRotateSupported()){const r=t.rotateCounterClockwise(),n=this.doDecode(r,e),i=n.getResultMetadata();let s=270;null!==i&&!0===i.get(W.ORIENTATION)&&(s+=i.get(W.ORIENTATION)%360),n.putMetadata(W.ORIENTATION,s);const o=n.getResultPoints();if(null!==o){const t=r.getHeight();for(let e=0;e>(s?8:5));let a;a=s?n:15;const l=Math.trunc(n/2);for(let s=0;s=n)break;try{i=t.getBlackRow(h,i)}catch(t){continue}for(let t=0;t<2;t++){if(1===t&&(i.reverse(),e&&!0===e.get(C.NEED_RESULT_POINT_CALLBACK))){const t=new Map;e.forEach((e,r)=>t.set(r,e)),t.delete(C.NEED_RESULT_POINT_CALLBACK),e=t}try{const n=this.decodeRow(h,i,e);if(1===t){n.putMetadata(W.ORIENTATION,180);const t=n.getResultPoints();null!==t&&(t[0]=new rt(r-t[0].getX()-1,t[0].getY()),t[1]=new rt(r-t[1].getX()-1,t[1].getY()))}return n}catch(t){}}}throw new R}static recordPattern(t,e,r){const n=r.length;for(let t=0;t=i)throw new R;let s=!t.get(e),o=0,a=e;for(;a0&&n>=0;)t.get(--e)!==i&&(n--,i=!i);if(n>=0)throw new R;gt.recordPattern(t,e+1,r)}static patternMatchVariance(t,e,r){const n=t.length;let i=0,s=0;for(let r=0;rs?n-s:s-n;if(l>r)return Number.POSITIVE_INFINITY;a+=l}return a/i}}class ft extends gt{static findStartPattern(t){const e=t.getSize(),r=t.getNextSet(0);let n=0,i=Int32Array.from([0,0,0,0,0,0]),s=r,o=!1;for(let a=r;a=0&&t.isRange(Math.max(0,s-(a-s)/2),s,!1))return Int32Array.from([s,a,r]);s+=i[0]+i[1],(i=i.slice(2,i.length-1))[n-1]=0,i[n]=0,n--}else n++;i[n]=1,o=!o}throw new R}static decodeCode(t,e,r){gt.recordPattern(t,r,e);let n=ft.MAX_AVG_VARIANCE,i=-1;for(let t=0;t=0)return i;throw new R}decodeRow(t,e,r){const n=r&&!0===r.get(C.ASSUME_GS1),i=ft.findStartPattern(e),s=i[2];let o=0;const a=new Uint8Array(20);let h;switch(a[o++]=s,s){case ft.CODE_START_A:h=ft.CODE_CODE_A;break;case ft.CODE_START_B:h=ft.CODE_CODE_B;break;case ft.CODE_START_C:h=ft.CODE_CODE_C;break;default:throw new E}let c=!1,u=!1,d="",g=i[0],f=i[1];const w=Int32Array.from([0,0,0,0,0,0]);let A=0,m=0,_=s,I=0,S=!0,p=!1,T=!1;for(;!c;){const t=u;switch(u=!1,A=m,m=ft.decodeCode(e,w,f),a[o++]=m,m!==ft.CODE_STOP&&(S=!0),m!==ft.CODE_STOP&&(_+=++I*m),g=f,f+=w.reduce((t,e)=>t+e,0),m){case ft.CODE_START_A:case ft.CODE_START_B:case ft.CODE_START_C:throw new E}switch(h){case ft.CODE_CODE_A:if(m<64)d+=T===p?String.fromCharCode(" ".charCodeAt(0)+m):String.fromCharCode(" ".charCodeAt(0)+m+128),T=!1;else if(m<96)d+=T===p?String.fromCharCode(m-64):String.fromCharCode(m+64),T=!1;else switch(m!==ft.CODE_STOP&&(S=!1),m){case ft.CODE_FNC_1:n&&(0===d.length?d+="]C1":d+=String.fromCharCode(29));break;case ft.CODE_FNC_2:case ft.CODE_FNC_3:break;case ft.CODE_FNC_4_A:!p&&T?(p=!0,T=!1):p&&T?(p=!1,T=!1):T=!0;break;case ft.CODE_SHIFT:u=!0,h=ft.CODE_CODE_B;break;case ft.CODE_CODE_B:h=ft.CODE_CODE_B;break;case ft.CODE_CODE_C:h=ft.CODE_CODE_C;break;case ft.CODE_STOP:c=!0}break;case ft.CODE_CODE_B:if(m<96)d+=T===p?String.fromCharCode(" ".charCodeAt(0)+m):String.fromCharCode(" ".charCodeAt(0)+m+128),T=!1;else switch(m!==ft.CODE_STOP&&(S=!1),m){case ft.CODE_FNC_1:n&&(0===d.length?d+="]C1":d+=String.fromCharCode(29));break;case ft.CODE_FNC_2:case ft.CODE_FNC_3:break;case ft.CODE_FNC_4_B:!p&&T?(p=!0,T=!1):p&&T?(p=!1,T=!1):T=!0;break;case ft.CODE_SHIFT:u=!0,h=ft.CODE_CODE_A;break;case ft.CODE_CODE_A:h=ft.CODE_CODE_A;break;case ft.CODE_CODE_C:h=ft.CODE_CODE_C;break;case ft.CODE_STOP:c=!0}break;case ft.CODE_CODE_C:if(m<100)m<10&&(d+="0"),d+=m;else switch(m!==ft.CODE_STOP&&(S=!1),m){case ft.CODE_FNC_1:n&&(0===d.length?d+="]C1":d+=String.fromCharCode(29));break;case ft.CODE_CODE_A:h=ft.CODE_CODE_A;break;case ft.CODE_CODE_B:h=ft.CODE_CODE_B;break;case ft.CODE_STOP:c=!0}}t&&(h=h===ft.CODE_CODE_A?ft.CODE_CODE_B:ft.CODE_CODE_A)}const N=f-g;if(f=e.getNextUnset(f),!e.isRange(f,Math.min(e.getSize(),f+(f-g)/2),!1))throw new R;if((_-=I*A)%103!==A)throw new l;const D=d.length;if(0===D)throw new R;D>0&&S&&(d=h===ft.CODE_CODE_C?d.substring(0,D-2):d.substring(0,D-1));const y=(i[1]+i[0])/2,O=g+N/2,M=a.length,b=new Uint8Array(M);for(let t=0;tn&&(i=e);n=i,e=0;let s=0,o=0;for(let i=0;in&&(o|=1<0;i++){let r=t[i];if(r>n&&(e--,2*r>=s))return-1}return o}}while(e>3);return-1}static patternToChar(t){for(let e=0;e="A"&&i<="Z"))throw new E;s=String.fromCharCode(i.charCodeAt(0)+32);break;case"$":if(!(i>="A"&&i<="Z"))throw new E;s=String.fromCharCode(i.charCodeAt(0)-64);break;case"%":if(i>="A"&&i<="E")s=String.fromCharCode(i.charCodeAt(0)-38);else if(i>="F"&&i<="J")s=String.fromCharCode(i.charCodeAt(0)-11);else if(i>="K"&&i<="O")s=String.fromCharCode(i.charCodeAt(0)+16);else if(i>="P"&&i<="T")s=String.fromCharCode(i.charCodeAt(0)+43);else if("U"===i)s="\0";else if("V"===i)s="@";else if("W"===i)s="`";else{if("X"!==i&&"Y"!==i&&"Z"!==i)throw new E;s=""}break;case"/":if(i>="A"&&i<="O")s=String.fromCharCode(i.charCodeAt(0)-32);else{if("Z"!==i)throw new E;s=":"}}r+=s,n++}else r+=e}return r}}wt.ALPHABET_STRING="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%",wt.CHARACTER_ENCODINGS=[52,289,97,352,49,304,112,37,292,100,265,73,328,25,280,88,13,268,76,28,259,67,322,19,274,82,7,262,70,22,385,193,448,145,400,208,133,388,196,168,162,138,42],wt.ASTERISK_ENCODING=148;class At extends gt{constructor(){super(...arguments),this.narrowLineWidth=-1}decodeRow(t,e,r){let n=this.decodeStart(e),i=this.decodeEnd(e),s=new p;At.decodeMiddle(e,n[1],i[0],s);let o=s.toString(),a=null;null!=r&&(a=r.get(C.ALLOWED_LENGTHS)),null==a&&(a=At.DEFAULT_ALLOWED_LENGTHS);let l=o.length,h=!1,c=0;for(let t of a){if(l===t){h=!0;break}t>c&&(c=t)}if(!h&&l>c&&(h=!0),!h)throw new E;const u=[new rt(n[1],t),new rt(i[0],t)];return new F(o,null,0,u,k.ITF,(new Date).getTime())}static decodeMiddle(t,e,r,n){let i=new Int32Array(10),s=new Int32Array(5),o=new Int32Array(5);for(i.fill(0),s.fill(0),o.fill(0);e0&&n>=0&&!t.get(n);n--)r--;if(0!==r)throw new R}static skipWhiteSpace(t){const e=t.getSize(),r=t.getNextSet(0);if(r===e)throw new R;return r}decodeEnd(t){t.reverse();try{let e,r=At.skipWhiteSpace(t);try{e=At.findGuardPattern(t,r,At.END_PATTERN_REVERSED[0])}catch(n){n instanceof R&&(e=At.findGuardPattern(t,r,At.END_PATTERN_REVERSED[1]))}this.validateQuietZone(t,e[0]);let n=e[0];return e[0]=t.getSize()-e[1],e[1]=t.getSize()-n,e}finally{t.reverse()}}static findGuardPattern(t,e,r){let n=r.length,i=new Int32Array(n),s=t.getSize(),o=!1,a=0,l=e;i.fill(0);for(let h=e;h=0)return r%10;throw new R}}At.PATTERNS=[Int32Array.from([1,1,2,2,1]),Int32Array.from([2,1,1,1,2]),Int32Array.from([1,2,1,1,2]),Int32Array.from([2,2,1,1,1]),Int32Array.from([1,1,2,1,2]),Int32Array.from([2,1,2,1,1]),Int32Array.from([1,2,2,1,1]),Int32Array.from([1,1,1,2,2]),Int32Array.from([2,1,1,2,1]),Int32Array.from([1,2,1,2,1]),Int32Array.from([1,1,3,3,1]),Int32Array.from([3,1,1,1,3]),Int32Array.from([1,3,1,1,3]),Int32Array.from([3,3,1,1,1]),Int32Array.from([1,1,3,1,3]),Int32Array.from([3,1,3,1,1]),Int32Array.from([1,3,3,1,1]),Int32Array.from([1,1,1,3,3]),Int32Array.from([3,1,1,3,1]),Int32Array.from([1,3,1,3,1])],At.MAX_AVG_VARIANCE=.38,At.MAX_INDIVIDUAL_VARIANCE=.5,At.DEFAULT_ALLOWED_LENGTHS=[6,8,10,12,14],At.START_PATTERN=Int32Array.from([1,1,1,1]),At.END_PATTERN_REVERSED=[Int32Array.from([1,1,2]),Int32Array.from([1,1,3])];class Ct extends gt{constructor(){super(...arguments),this.decodeRowStringBuffer=""}static findStartGuardPattern(t){let e,r=!1,n=0,i=Int32Array.from([0,0,0]);for(;!r;){i=Int32Array.from([0,0,0]);let s=(e=Ct.findGuardPattern(t,n,!1,this.START_END_PATTERN,i))[0],o=s-((n=e[1])-s);o>=0&&(r=t.isRange(o,s,!1))}return e}static checkChecksum(t){return Ct.checkStandardUPCEANChecksum(t)}static checkStandardUPCEANChecksum(t){let e=t.length;if(0===e)return!1;let r=parseInt(t.charAt(e-1),10);return Ct.getStandardUPCEANChecksum(t.substring(0,e-1))===r}static getStandardUPCEANChecksum(t){let e=t.length,r=0;for(let n=e-1;n>=0;n-=2){let e=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);if(e<0||e>9)throw new E;r+=e}r*=3;for(let n=e-2;n>=0;n-=2){let e=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);if(e<0||e>9)throw new E;r+=e}return(1e3-r)%10}static decodeEnd(t,e){return Ct.findGuardPattern(t,e,!1,Ct.START_END_PATTERN,new Int32Array(Ct.START_END_PATTERN.length).fill(0))}static findGuardPatternWithoutCounters(t,e,r,n){return this.findGuardPattern(t,e,r,n,new Int32Array(n.length))}static findGuardPattern(t,e,r,n,i){let s=t.getSize(),o=0,a=e=r?t.getNextUnset(e):t.getNextSet(e),l=n.length,h=r;for(let r=e;r=0)return s;throw new R}}Ct.MAX_AVG_VARIANCE=.48,Ct.MAX_INDIVIDUAL_VARIANCE=.7,Ct.START_END_PATTERN=Int32Array.from([1,1,1]),Ct.MIDDLE_PATTERN=Int32Array.from([1,1,1,1,1]),Ct.END_PATTERN=Int32Array.from([1,1,1,1,1,1]),Ct.L_PATTERNS=[Int32Array.from([3,2,1,1]),Int32Array.from([2,2,2,1]),Int32Array.from([2,1,2,2]),Int32Array.from([1,4,1,1]),Int32Array.from([1,1,3,2]),Int32Array.from([1,2,3,1]),Int32Array.from([1,1,1,4]),Int32Array.from([1,3,1,2]),Int32Array.from([1,2,1,3]),Int32Array.from([3,1,1,2])];class Et{constructor(){this.CHECK_DIGIT_ENCODINGS=[24,20,18,17,12,6,3,10,9,5],this.decodeMiddleCounters=Int32Array.from([0,0,0,0]),this.decodeRowStringBuffer=""}decodeRow(t,e,r){let n=this.decodeRowStringBuffer,i=this.decodeMiddle(e,r,n),s=n.toString(),o=Et.parseExtensionString(s),a=[new rt((r[0]+r[1])/2,t),new rt(i,t)],l=new F(s,null,0,a,k.UPC_EAN_EXTENSION,(new Date).getTime());return null!=o&&l.putAllMetadata(o),l}decodeMiddle(t,e,r){let n=this.decodeMiddleCounters;n[0]=0,n[1]=0,n[2]=0,n[3]=0;let i=t.getSize(),s=e[1],o=0;for(let e=0;e<5&&s=10&&(o|=1<<4-e),4!==e&&(s=t.getNextSet(s),s=t.getNextUnset(s))}if(5!==r.length)throw new R;let a=this.determineCheckDigit(o);if(Et.extensionChecksum(r.toString())!==a)throw new R;return s}static extensionChecksum(t){let e=t.length,r=0;for(let n=e-2;n>=0;n-=2)r+=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);r*=3;for(let n=e-1;n>=0;n-=2)r+=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);return(r*=3)%10}determineCheckDigit(t){for(let e=0;e<10;e++)if(t===this.CHECK_DIGIT_ENCODINGS[e])return e;throw new R}static parseExtensionString(t){if(5!==t.length)return null;let e=Et.parseExtension5String(t);return null==e?null:new Map([[W.SUGGESTED_PRICE,e]])}static parseExtension5String(t){let e;switch(t.charAt(0)){case"0":e="£";break;case"5":e="$";break;case"9":switch(t){case"90000":return null;case"99991":return"0.00";case"99990":return"Used"}e="";break;default:e=""}let r=parseInt(t.substring(1)),n=r%100;return e+(r/100).toString()+"."+(n<10?"0"+n:n.toString())}}class mt{constructor(){this.decodeMiddleCounters=Int32Array.from([0,0,0,0]),this.decodeRowStringBuffer=""}decodeRow(t,e,r){let n=this.decodeRowStringBuffer,i=this.decodeMiddle(e,r,n),s=n.toString(),o=mt.parseExtensionString(s),a=[new rt((r[0]+r[1])/2,t),new rt(i,t)],l=new F(s,null,0,a,k.UPC_EAN_EXTENSION,(new Date).getTime());return null!=o&&l.putAllMetadata(o),l}decodeMiddle(t,e,r){let n=this.decodeMiddleCounters;n[0]=0,n[1]=0,n[2]=0,n[3]=0;let i=t.getSize(),s=e[1],o=0;for(let e=0;e<2&&s=10&&(o|=1<<1-e),1!==e&&(s=t.getNextSet(s),s=t.getNextUnset(s))}if(2!==r.length)throw new R;if(parseInt(r.toString())%4!==o)throw new R;return s}static parseExtensionString(t){return 2!==t.length?null:new Map([[W.ISSUE_NUMBER,parseInt(t)]])}}class _t{static decodeRow(t,e,r){let n=Ct.findGuardPattern(e,r,!1,this.EXTENSION_START_PATTERN,new Int32Array(this.EXTENSION_START_PATTERN.length).fill(0));try{return(new Et).decodeRow(t,e,n)}catch(r){return(new mt).decodeRow(t,e,n)}}}_t.EXTENSION_START_PATTERN=Int32Array.from([1,1,2]);class It extends Ct{constructor(){super(),this.decodeRowStringBuffer="",It.L_AND_G_PATTERNS=It.L_PATTERNS.map(t=>Int32Array.from(t));for(let t=10;t<20;t++){let e=It.L_PATTERNS[t-10],r=new Int32Array(e.length);for(let t=0;t=e.getSize()||!e.isRange(c,u,!1))throw new R;let d=a.toString();if(d.length<8)throw new E;if(!It.checkChecksum(d))throw new l;let g=(n[1]+n[0])/2,f=(h[1]+h[0])/2,w=this.getBarcodeFormat(),A=[new rt(g,t),new rt(f,t)],m=new F(d,null,0,A,w,(new Date).getTime()),_=0;try{let r=_t.decodeRow(t,e,h[1]);m.putMetadata(W.UPC_EAN_EXTENSION,r.getText()),m.putAllMetadata(r.getResultMetadata()),m.addResultPoints(r.getResultPoints()),_=r.getText().length}catch(t){}let I=null==r?null:r.get(C.ALLOWED_EAN_EXTENSIONS);if(null!=I){let t=!1;for(let e in I)if(_.toString()===e){t=!0;break}if(!t)throw new R}return w===k.EAN_13||k.UPC_A,m}static checkChecksum(t){return It.checkStandardUPCEANChecksum(t)}static checkStandardUPCEANChecksum(t){let e=t.length;if(0===e)return!1;let r=parseInt(t.charAt(e-1),10);return It.getStandardUPCEANChecksum(t.substring(0,e-1))===r}static getStandardUPCEANChecksum(t){let e=t.length,r=0;for(let n=e-1;n>=0;n-=2){let e=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);if(e<0||e>9)throw new E;r+=e}r*=3;for(let n=e-2;n>=0;n-=2){let e=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);if(e<0||e>9)throw new E;r+=e}return(1e3-r)%10}static decodeEnd(t,e){return It.findGuardPattern(t,e,!1,It.START_END_PATTERN,new Int32Array(It.START_END_PATTERN.length).fill(0))}}class St extends It{constructor(){super(),this.decodeMiddleCounters=Int32Array.from([0,0,0,0])}decodeMiddle(t,e,r){let n=this.decodeMiddleCounters;n[0]=0,n[1]=0,n[2]=0,n[3]=0;let i=t.getSize(),s=e[1],o=0;for(let e=0;e<6&&s=10&&(o|=1<<5-e)}r=St.determineFirstDigit(r,o),s=It.findGuardPattern(t,s,!0,It.MIDDLE_PATTERN,new Int32Array(It.MIDDLE_PATTERN.length).fill(0))[1];for(let e=0;e<6&&st);n[0]=0,n[1]=0,n[2]=0,n[3]=0;const i=t.getSize();let s=e[1],o=0;for(let e=0;e<6&&s=10&&(o|=1<<5-e)}return Rt.determineNumSysAndCheckDigit(new p(r),o),s}decodeEnd(t,e){return Rt.findGuardPatternWithoutCounters(t,e,!0,Rt.MIDDLE_END_PATTERN)}checkChecksum(t){return It.checkChecksum(Rt.convertUPCEtoUPCA(t))}static determineNumSysAndCheckDigit(t,e){for(let r=0;r<=1;r++)for(let n=0;n<10;n++)if(e===this.NUMSYS_AND_CHECK_DIGIT_PATTERNS[r][n])return t.insert(0,"0"+r),void t.append("0"+n);throw R.getNotFoundInstance()}getBarcodeFormat(){return k.UPC_E}static convertUPCEtoUPCA(t){const e=t.slice(1,7).split("").map(t=>t.charCodeAt(0)),r=new p;r.append(t.charAt(0));let n=e[5];switch(n){case 0:case 1:case 2:r.appendChars(e,0,2),r.append(n),r.append("0000"),r.appendChars(e,2,3);break;case 3:r.appendChars(e,0,3),r.append("00000"),r.appendChars(e,3,2);break;case 4:r.appendChars(e,0,4),r.append("00000"),r.append(e[4]);break;default:r.appendChars(e,0,5),r.append("0000"),r.append(n)}return t.length>=8&&r.append(t.charAt(7)),r.toString()}}Rt.MIDDLE_END_PATTERN=Int32Array.from([1,1,1,1,1,1]),Rt.NUMSYS_AND_CHECK_DIGIT_PATTERNS=[Int32Array.from([56,52,50,49,44,38,35,42,41,37]),Int32Array.from([7,11,13,14,19,25,28,21,22,1])];class Nt extends gt{constructor(t){super();let e=null==t?null:t.get(C.POSSIBLE_FORMATS),r=[];null!=e&&(e.indexOf(k.EAN_13)>-1?r.push(new St):e.indexOf(k.UPC_A)>-1&&r.push(new Tt),e.indexOf(k.EAN_8)>-1&&r.push(new pt),e.indexOf(k.UPC_E)>-1&&r.push(new Rt)),0===r.length&&(r.push(new St),r.push(new pt),r.push(new Rt)),this.readers=r}decodeRow(t,e,r){for(let n of this.readers)try{const i=n.decodeRow(t,e,r),s=i.getBarcodeFormat()===k.EAN_13&&"0"===i.getText().charAt(0),o=null==r?null:r.get(C.POSSIBLE_FORMATS),a=null==o||o.includes(k.UPC_A);if(s&&a){const t=i.getRawBytes(),e=new F(i.getText().substring(1),t,t.length,i.getResultPoints(),k.UPC_A);return e.putAllMetadata(i.getResultMetadata()),e}return i}catch(t){}throw new R}reset(){for(let t of this.readers)t.reset()}}class Dt extends gt{constructor(){super(),this.decodeFinderCounters=new Int32Array(4),this.dataCharacterCounters=new Int32Array(8),this.oddRoundingErrors=new Array(4),this.evenRoundingErrors=new Array(4),this.oddCounts=new Array(this.dataCharacterCounters.length/2),this.evenCounts=new Array(this.dataCharacterCounters.length/2)}getDecodeFinderCounters(){return this.decodeFinderCounters}getDataCharacterCounters(){return this.dataCharacterCounters}getOddRoundingErrors(){return this.oddRoundingErrors}getEvenRoundingErrors(){return this.evenRoundingErrors}getOddCounts(){return this.oddCounts}getEvenCounts(){return this.evenCounts}parseFinderValue(t,e){for(let r=0;rn&&(n=e[i],r=i);t[r]++}static decrement(t,e){let r=0,n=e[0];for(let i=1;i=Dt.MIN_FINDER_PATTERN_RATIO&&r<=Dt.MAX_FINDER_PATTERN_RATIO){let e=Number.MAX_SAFE_INTEGER,r=Number.MIN_SAFE_INTEGER;for(let n of t)n>r&&(r=n),n=o-a-1&&(t-=Mt.combins(n-l-(o-a),o-a-2)),o-a-1>1){let r=0;for(let t=n-l-(o-a-2);t>e;t--)r+=Mt.combins(n-l-t-1,o-a-3);t-=r*(o-1-a)}else n-l>e&&t--;i+=t}n-=l}return i}static combins(t,e){let r,n;t-e>e?(n=e,r=t-e):(n=t-e,r=e);let i=1,s=1;for(let e=t;e>r;e--)i*=e,s<=n&&(i/=s,s++);for(;s<=n;)i/=s,s++;return i}}class bt{static buildBitArray(t){let e=2*t.length-1;null==t[t.length-1].getRightChar()&&(e-=1);let r=new w(12*e),n=0,i=t[0].getRightChar().getValue();for(let t=11;t>=0;--t)0!=(i&1<=0;--t)0!=(s&1<=0;--e)0!=(t&1<10||r<0||r>10)throw new E;this.firstDigit=e,this.secondDigit=r}getFirstDigit(){return this.firstDigit}getSecondDigit(){return this.secondDigit}getValue(){return 10*this.firstDigit+this.secondDigit}isFirstDigitFNC1(){return this.firstDigit===vt.FNC1}isSecondDigitFNC1(){return this.secondDigit===vt.FNC1}isAnyFNC1(){return this.firstDigit===vt.FNC1||this.secondDigit===vt.FNC1}}vt.FNC1=10;class kt{constructor(){}static parseFieldsInGeneralPurpose(t){if(!t)return null;if(t.length<2)throw new R;let e=t.substring(0,2);for(let r of kt.TWO_DIGIT_DATA_LENGTH)if(r[0]===e)return r[1]===kt.VARIABLE_LENGTH?kt.processVariableAI(2,r[2],t):kt.processFixedAI(2,r[1],t);if(t.length<3)throw new R;let r=t.substring(0,3);for(let e of kt.THREE_DIGIT_DATA_LENGTH)if(e[0]===r)return e[1]===kt.VARIABLE_LENGTH?kt.processVariableAI(3,e[2],t):kt.processFixedAI(3,e[1],t);for(let e of kt.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH)if(e[0]===r)return e[1]===kt.VARIABLE_LENGTH?kt.processVariableAI(4,e[2],t):kt.processFixedAI(4,e[1],t);if(t.length<4)throw new R;let n=t.substring(0,4);for(let e of kt.FOUR_DIGIT_DATA_LENGTH)if(e[0]===n)return e[1]===kt.VARIABLE_LENGTH?kt.processVariableAI(4,e[2],t):kt.processFixedAI(4,e[1],t);throw new R}static processFixedAI(t,e,r){if(r.lengththis.information.getSize())return t+4<=this.information.getSize();for(let e=t;ethis.information.getSize()){let e=this.extractNumericValueFromBitArray(t,4);return new vt(this.information.getSize(),0===e?vt.FNC1:e-1,vt.FNC1)}let e=this.extractNumericValueFromBitArray(t,7);return new vt(t+7,(e-8)/11,(e-8)%11)}extractNumericValueFromBitArray(t,e){return xt.extractNumericValueFromBitArray(this.information,t,e)}static extractNumericValueFromBitArray(t,e,r){let n=0;for(let i=0;ithis.information.getSize())return!1;let e=this.extractNumericValueFromBitArray(t,5);if(e>=5&&e<16)return!0;if(t+7>this.information.getSize())return!1;let r=this.extractNumericValueFromBitArray(t,7);if(r>=64&&r<116)return!0;if(t+8>this.information.getSize())return!1;let n=this.extractNumericValueFromBitArray(t,8);return n>=232&&n<253}decodeIsoIec646(t){let e=this.extractNumericValueFromBitArray(t,5);if(15===e)return new Lt(t+5,Lt.FNC1);if(e>=5&&e<15)return new Lt(t+5,"0"+(e-5));let r,n=this.extractNumericValueFromBitArray(t,7);if(n>=64&&n<90)return new Lt(t+7,""+(n+1));if(n>=90&&n<116)return new Lt(t+7,""+(n+7));switch(this.extractNumericValueFromBitArray(t,8)){case 232:r="!";break;case 233:r='"';break;case 234:r="%";break;case 235:r="&";break;case 236:r="'";break;case 237:r="(";break;case 238:r=")";break;case 239:r="*";break;case 240:r="+";break;case 241:r=",";break;case 242:r="-";break;case 243:r=".";break;case 244:r="/";break;case 245:r=":";break;case 246:r=";";break;case 247:r="<";break;case 248:r="=";break;case 249:r=">";break;case 250:r="?";break;case 251:r="_";break;case 252:r=" ";break;default:throw new E}return new Lt(t+8,r)}isStillAlpha(t){if(t+5>this.information.getSize())return!1;let e=this.extractNumericValueFromBitArray(t,5);if(e>=5&&e<16)return!0;if(t+6>this.information.getSize())return!1;let r=this.extractNumericValueFromBitArray(t,6);return r>=16&&r<63}decodeAlphanumeric(t){let e=this.extractNumericValueFromBitArray(t,5);if(15===e)return new Lt(t+5,Lt.FNC1);if(e>=5&&e<15)return new Lt(t+5,"0"+(e-5));let r,n=this.extractNumericValueFromBitArray(t,6);if(n>=32&&n<58)return new Lt(t+6,""+(n+33));switch(n){case 58:r="*";break;case 59:r=",";break;case 60:r="-";break;case 61:r=".";break;case 62:r="/";break;default:throw new j("Decoding invalid alphanumeric value: "+n)}return new Lt(t+6,r)}isAlphaTo646ToAlphaLatch(t){if(t+1>this.information.getSize())return!1;for(let e=0;e<5&&e+tthis.information.getSize())return!1;for(let e=t;ethis.information.getSize())return!1;for(let e=0;e<4&&e+t{e.forEach(e=>{t.getLeftChar().getValue()===e.getLeftChar().getValue()&&t.getRightChar().getValue()===e.getRightChar().getValue()&&t.getFinderPatter().getValue()===e.getFinderPatter().getValue()&&(r=!0)})}),r}}class Jt extends Dt{constructor(t){super(...arguments),this.pairs=new Array(Jt.MAX_PAIRS),this.rows=new Array,this.startEnd=[2],this.verbose=!0===t}decodeRow(t,e,r){this.pairs.length=0,this.startFromEven=!1;try{return Jt.constructResult(this.decodeRow2pairs(t,e))}catch(t){this.verbose&&console.log(t)}return this.pairs.length=0,this.startFromEven=!0,Jt.constructResult(this.decodeRow2pairs(t,e))}reset(){this.pairs.length=0,this.rows.length=0}decodeRow2pairs(t,e){let r,n=!1;for(;!n;)try{this.pairs.push(this.retrieveNextPair(e,this.pairs,t))}catch(t){if(t instanceof R){if(!this.pairs.length)throw new R;n=!0}}if(this.checkChecksum())return this.pairs;if(r=!!this.rows.length,this.storeRow(t,!1),r){let t=this.checkRowsBoolean(!1);if(null!=t)return t;if(null!=(t=this.checkRowsBoolean(!0)))return t}throw new R}checkRowsBoolean(t){if(this.rows.length>25)return this.rows.length=0,null;this.pairs.length=0,t&&(this.rows=this.rows.reverse());let e=null;try{e=this.checkRows(new Array,0)}catch(t){this.verbose&&console.log(t)}return t&&(this.rows=this.rows.reverse()),e}checkRows(t,e){for(let r=e;re.length)continue;let r=!0;for(let n=0;nt){i=e.isEquivalent(this.pairs);break}n=e.isEquivalent(this.pairs),r++}i||n||Jt.isPartialRow(this.pairs,this.rows)||(this.rows.push(r,new jt(this.pairs,t,e)),this.removePartialRows(this.pairs,this.rows))}removePartialRows(t,e){for(let r of e)if(r.getPairs().length!==t.length)for(let e of r.getPairs())for(let r of t)if(Qt.equals(e,r))break}static isPartialRow(t,e){for(let r of e){let e=!0;for(let n of t){let t=!1;for(let e of r.getPairs())if(n.equals(e)){t=!0;break}if(!t){e=!1;break}}if(e)return!0}return!1}getRows(){return this.rows}static constructResult(t){let e=function(t){try{if(t.get(1))return new Ht(t);if(!t.get(2))return new Gt(t);switch(xt.extractNumericValueFromBitArray(t,1,4)){case 4:return new zt(t);case 5:return new Yt(t)}switch(xt.extractNumericValueFromBitArray(t,1,5)){case 12:return new Zt(t);case 13:return new Kt(t)}switch(xt.extractNumericValueFromBitArray(t,1,7)){case 56:return new qt(t,"310","11");case 57:return new qt(t,"320","11");case 58:return new qt(t,"310","13");case 59:return new qt(t,"320","13");case 60:return new qt(t,"310","15");case 61:return new qt(t,"320","15");case 62:return new qt(t,"310","17");case 63:return new qt(t,"320","17")}}catch(e){throw console.log(e),new j("unknown decoder: "+t)}}(bt.buildBitArray(t)).parseInformation(),r=t[0].getFinderPattern().getResultPoints(),n=t[t.length-1].getFinderPattern().getResultPoints(),i=[r[0],r[1],n[0],n[1]];return new F(e,null,null,i,k.RSS_EXPANDED,null)}checkChecksum(){let t=this.pairs.get(0),e=t.getLeftChar(),r=t.getRightChar();if(null==r)return!1;let n=r.getChecksumPortion(),i=2;for(let t=1;t=0)i=r;else if(this.isEmptyPair(e))i=0;else{i=e[e.length-1].getFinderPattern().getStartEnd()[1]}let o=e.length%2!=0;this.startFromEven&&(o=!o);let a=!1;for(;i=0&&!t.get(e);)e--;e++,n=this.startEnd[0]-e,i=e,s=this.startEnd[1]}else i=this.startEnd[0],n=(s=t.getNextUnset(this.startEnd[1]+1))-this.startEnd[1];let o,a=this.getDecodeFinderCounters();c.arraycopy(a,0,a,1,a.length-1),a[0]=n;try{o=this.parseFinderValue(a,Jt.FINDER_PATTERNS)}catch(t){return null}return new Ot(o,[i,s],i,s,e)}decodeDataCharacter(t,e,r,n){let i=this.getDataCharacterCounters();for(let t=0;t.3)throw new R;let a=this.getOddCounts(),l=this.getEvenCounts(),h=this.getOddRoundingErrors(),c=this.getEvenRoundingErrors();for(let t=0;t8){if(e>8.7)throw new R;r=8}let n=t/2;0==(1&t)?(a[n]=r,h[n]=e-r):(l[n]=r,c[n]=e-r)}this.adjustOddEvenCounts(17);let u=4*e.getValue()+(r?0:2)+(n?0:1)-1,d=0,g=0;for(let t=a.length-1;t>=0;t--){if(Jt.isNotA1left(e,r,n)){let e=Jt.WEIGHTS[u][2*t];g+=a[t]*e}d+=a[t]}let f=0;for(let t=l.length-1;t>=0;t--)if(Jt.isNotA1left(e,r,n)){let e=Jt.WEIGHTS[u][2*t+1];f+=l[t]*e}let w=g+f;if(0!=(1&d)||d>13||d<4)throw new R;let A=(13-d)/2,C=Jt.SYMBOL_WIDEST[A],E=9-C,m=Mt.getRSSvalue(a,C,!0),_=Mt.getRSSvalue(l,E,!1),I=Jt.EVEN_TOTAL_SUBSET[A],S=Jt.GSUM[A];return new yt(m*I+_+S,w)}static isNotA1left(t,e,r){return!(0==t.getValue()&&e&&r)}adjustOddEvenCounts(t){let e=tt.sum(new Int32Array(this.getOddCounts())),r=tt.sum(new Int32Array(this.getEvenCounts())),n=!1,i=!1;e>13?i=!0:e<4&&(n=!0);let s=!1,o=!1;r>13?o=!0:r<4&&(s=!0);let a=e+r-t,l=1==(1&e),h=0==(1&r);if(1==a)if(l){if(h)throw new R;i=!0}else{if(!h)throw new R;o=!0}else if(-1==a)if(l){if(h)throw new R;n=!0}else{if(!h)throw new R;s=!0}else{if(0!=a)throw new R;if(l){if(!h)throw new R;e1)for(let e of this.possibleRightPairs)if(e.getCount()>1&&te.checkChecksum(t,e))return te.constructResult(t,e);throw new R}static addOrTally(t,e){if(null==e)return;let r=!1;for(let n of t)if(n.getValue()===e.getValue()){n.incrementCount(),r=!0;break}r||t.push(e)}reset(){this.possibleLeftPairs.length=0,this.possibleRightPairs.length=0}static constructResult(t,e){let r=4537077*t.getValue()+e.getValue(),n=new String(r).toString(),i=new p;for(let t=13-n.length;t>0;t--)i.append("0");i.append(n);let s=0;for(let t=0;t<13;t++){let e=i.charAt(t).charCodeAt(0)-"0".charCodeAt(0);s+=0==(1&t)?3*e:e}10===(s=10-s%10)&&(s=0),i.append(s.toString());let o=t.getFinderPattern().getResultPoints(),a=e.getFinderPattern().getResultPoints();return new F(i.toString(),null,0,[o[0],o[1],a[0],a[1]],k.RSS_14,(new Date).getTime())}static checkChecksum(t,e){let r=(t.getChecksumPortion()+16*e.getChecksumPortion())%79,n=9*t.getFinderPattern().getValue()+e.getFinderPattern().getValue();return n>72&&n--,n>8&&n--,r===n}decodePair(t,e,r,n){try{let i=this.findFinderPattern(t,e),s=this.parseFoundFinderPattern(t,r,e,i),o=null==n?null:n.get(C.NEED_RESULT_POINT_CALLBACK);if(null!=o){let n=(i[0]+i[1])/2;e&&(n=t.getSize()-1-n),o.foundPossibleResultPoint(new rt(n,r))}let a=this.decodeDataCharacter(t,s,!0),l=this.decodeDataCharacter(t,s,!1);return new $t(1597*a.getValue()+l.getValue(),a.getChecksumPortion()+4*l.getChecksumPortion(),s)}catch(t){return null}}decodeDataCharacter(t,e,r){let n=this.getDataCharacterCounters();for(let t=0;t8&&(r=8);let i=Math.floor(t/2);0==(1&t)?(o[i]=r,l[i]=e-r):(a[i]=r,h[i]=e-r)}this.adjustOddEvenCounts(r,i);let c=0,u=0;for(let t=o.length-1;t>=0;t--)u*=9,u+=o[t],c+=o[t];let d=0,g=0;for(let t=a.length-1;t>=0;t--)d*=9,d+=a[t],g+=a[t];let f=u+3*d;if(r){if(0!=(1&c)||c>12||c<4)throw new R;let t=(12-c)/2,e=te.OUTSIDE_ODD_WIDEST[t],r=9-e,n=Mt.getRSSvalue(o,e,!1),i=Mt.getRSSvalue(a,r,!0),s=te.OUTSIDE_EVEN_TOTAL_SUBSET[t],l=te.OUTSIDE_GSUM[t];return new yt(n*s+i+l,f)}{if(0!=(1&g)||g>10||g<4)throw new R;let t=(10-g)/2,e=te.INSIDE_ODD_WIDEST[t],r=9-e,n=Mt.getRSSvalue(o,e,!0),i=Mt.getRSSvalue(a,r,!1),s=te.INSIDE_ODD_TOTAL_SUBSET[t],l=te.INSIDE_GSUM[t];return new yt(i*s+n+l,f)}}findFinderPattern(t,e){let r=this.getDecodeFinderCounters();r[0]=0,r[1]=0,r[2]=0,r[3]=0;let n=t.getSize(),i=!1,s=0;for(;s=0&&i!==t.get(s);)s--;s++;const o=n[0]-s,a=this.getDecodeFinderCounters(),l=new Int32Array(a.length);c.arraycopy(a,0,l,1,a.length-1),l[0]=o;const h=this.parseFinderValue(l,te.FINDER_PATTERNS);let u=s,d=n[1];return r&&(u=t.getSize()-1-u,d=t.getSize()-1-d),new Ot(h,[s,n[1]],u,d,e)}adjustOddEvenCounts(t,e){let r=tt.sum(new Int32Array(this.getOddCounts())),n=tt.sum(new Int32Array(this.getEvenCounts())),i=!1,s=!1,o=!1,a=!1;t?(r>12?s=!0:r<4&&(i=!0),n>12?a=!0:n<4&&(o=!0)):(r>11?s=!0:r<5&&(i=!0),n>10?a=!0:n<4&&(o=!0));let l=r+n-e,h=(1&r)==(t?1:0),c=1==(1&n);if(1===l)if(h){if(c)throw new R;s=!0}else{if(!c)throw new R;a=!0}else if(-1===l)if(h){if(c)throw new R;i=!0}else{if(!c)throw new R;o=!0}else{if(0!==l)throw new R;if(h){if(!c)throw new R;rt.reset())}}class re{constructor(t,e,r){this.ecCodewords=t,this.ecBlocks=[e],r&&this.ecBlocks.push(r)}getECCodewords(){return this.ecCodewords}getECBlocks(){return this.ecBlocks}}class ne{constructor(t,e){this.count=t,this.dataCodewords=e}getCount(){return this.count}getDataCodewords(){return this.dataCodewords}}class ie{constructor(t,e,r,n,i,s){this.versionNumber=t,this.symbolSizeRows=e,this.symbolSizeColumns=r,this.dataRegionSizeRows=n,this.dataRegionSizeColumns=i,this.ecBlocks=s;let o=0;const a=s.getECCodewords(),l=s.getECBlocks();for(let t of l)o+=t.getCount()*(t.getDataCodewords()+a);this.totalCodewords=o}getVersionNumber(){return this.versionNumber}getSymbolSizeRows(){return this.symbolSizeRows}getSymbolSizeColumns(){return this.symbolSizeColumns}getDataRegionSizeRows(){return this.dataRegionSizeRows}getDataRegionSizeColumns(){return this.dataRegionSizeColumns}getTotalCodewords(){return this.totalCodewords}getECBlocks(){return this.ecBlocks}static getVersionForDimensions(t,e){if(0!=(1&t)||0!=(1&e))throw new E;for(let r of ie.VERSIONS)if(r.symbolSizeRows===t&&r.symbolSizeColumns===e)return r;throw new E}toString(){return""+this.versionNumber}static buildVersions(){return[new ie(1,10,10,8,8,new re(5,new ne(1,3))),new ie(2,12,12,10,10,new re(7,new ne(1,5))),new ie(3,14,14,12,12,new re(10,new ne(1,8))),new ie(4,16,16,14,14,new re(12,new ne(1,12))),new ie(5,18,18,16,16,new re(14,new ne(1,18))),new ie(6,20,20,18,18,new re(18,new ne(1,22))),new ie(7,22,22,20,20,new re(20,new ne(1,30))),new ie(8,24,24,22,22,new re(24,new ne(1,36))),new ie(9,26,26,24,24,new re(28,new ne(1,44))),new ie(10,32,32,14,14,new re(36,new ne(1,62))),new ie(11,36,36,16,16,new re(42,new ne(1,86))),new ie(12,40,40,18,18,new re(48,new ne(1,114))),new ie(13,44,44,20,20,new re(56,new ne(1,144))),new ie(14,48,48,22,22,new re(68,new ne(1,174))),new ie(15,52,52,24,24,new re(42,new ne(2,102))),new ie(16,64,64,14,14,new re(56,new ne(2,140))),new ie(17,72,72,16,16,new re(36,new ne(4,92))),new ie(18,80,80,18,18,new re(48,new ne(4,114))),new ie(19,88,88,20,20,new re(56,new ne(4,144))),new ie(20,96,96,22,22,new re(68,new ne(4,174))),new ie(21,104,104,24,24,new re(56,new ne(6,136))),new ie(22,120,120,18,18,new re(68,new ne(6,175))),new ie(23,132,132,20,20,new re(62,new ne(8,163))),new ie(24,144,144,22,22,new re(62,new ne(8,156),new ne(2,155))),new ie(25,8,18,6,16,new re(7,new ne(1,5))),new ie(26,8,32,6,14,new re(11,new ne(1,10))),new ie(27,12,26,10,24,new re(14,new ne(1,16))),new ie(28,12,36,10,16,new re(18,new ne(1,22))),new ie(29,16,36,14,16,new re(24,new ne(1,32))),new ie(30,16,48,14,22,new re(28,new ne(1,49)))]}}ie.VERSIONS=ie.buildVersions();class se{constructor(t){const e=t.getHeight();if(e<8||e>144||0!=(1&e))throw new E;this.version=se.readVersion(t),this.mappingBitMatrix=this.extractDataRegion(t),this.readMappingMatrix=new T(this.mappingBitMatrix.getWidth(),this.mappingBitMatrix.getHeight())}getVersion(){return this.version}static readVersion(t){const e=t.getHeight(),r=t.getWidth();return ie.getVersionForDimensions(e,r)}readCodewords(){const t=new Int8Array(this.version.getTotalCodewords());let e=0,r=4,n=0;const i=this.mappingBitMatrix.getHeight(),s=this.mappingBitMatrix.getWidth();let o=!1,a=!1,l=!1,h=!1;do{if(r!==i||0!==n||o)if(r!==i-2||0!==n||0==(3&s)||a)if(r!==i+4||2!==n||0!=(7&s)||l)if(r!==i-2||0!==n||4!=(7&s)||h){do{r=0&&!this.readMappingMatrix.get(n,r)&&(t[e++]=255&this.readUtah(r,n,i,s)),r-=2,n+=2}while(r>=0&&n=0&&n=0);r+=3,n+=1}else t[e++]=255&this.readCorner4(i,s),r-=2,n+=2,h=!0;else t[e++]=255&this.readCorner3(i,s),r-=2,n+=2,l=!0;else t[e++]=255&this.readCorner2(i,s),r-=2,n+=2,a=!0;else t[e++]=255&this.readCorner1(i,s),r-=2,n+=2,o=!0}while(r7?e-1:e;s[n].codewords[i]=t[c++]}if(c!==t.length)throw new o;return s}getNumDataCodewords(){return this.numDataCodewords}getCodewords(){return this.codewords}}class ae{constructor(t){this.bytes=t,this.byteOffset=0,this.bitOffset=0}getBitOffset(){return this.bitOffset}getByteOffset(){return this.byteOffset}readBits(t){if(t<1||t>32||t>this.available())throw new o(""+t);let e=0,r=this.bitOffset,n=this.byteOffset;const i=this.bytes;if(r>0){const s=8-r,o=t>8-o<>a,t-=o,8===(r+=o)&&(r=0,n++)}if(t>0){for(;t>=8;)e=e<<8|255&i[n],n++,t-=8;if(t>0){const s=8-t,o=255>>s<>s,r+=t}}return this.bitOffset=r,this.byteOffset=n,e}available(){return 8*(this.bytes.length-this.byteOffset)-this.bitOffset}}!function(t){t[t.PAD_ENCODE=0]="PAD_ENCODE",t[t.ASCII_ENCODE=1]="ASCII_ENCODE",t[t.C40_ENCODE=2]="C40_ENCODE",t[t.TEXT_ENCODE=3]="TEXT_ENCODE",t[t.ANSIX12_ENCODE=4]="ANSIX12_ENCODE",t[t.EDIFACT_ENCODE=5]="EDIFACT_ENCODE",t[t.BASE256_ENCODE=6]="BASE256_ENCODE"}(V||(V={}));class le{static decode(t){const e=new ae(t),r=new p,n=new p,i=new Array;let s=V.ASCII_ENCODE;do{if(s===V.ASCII_ENCODE)s=this.decodeAsciiSegment(e,r,n);else{switch(s){case V.C40_ENCODE:this.decodeC40Segment(e,r);break;case V.TEXT_ENCODE:this.decodeTextSegment(e,r);break;case V.ANSIX12_ENCODE:this.decodeAnsiX12Segment(e,r);break;case V.EDIFACT_ENCODE:this.decodeEdifactSegment(e,r);break;case V.BASE256_ENCODE:this.decodeBase256Segment(e,r,i);break;default:throw new E}s=V.ASCII_ENCODE}}while(s!==V.PAD_ENCODE&&e.available()>0);return n.length()>0&&r.append(n.toString()),new z(t,r.toString(),0===i.length?null:i,null)}static decodeAsciiSegment(t,e,r){let n=!1;do{let i=t.readBits(8);if(0===i)throw new E;if(i<=128)return n&&(i+=128),e.append(String.fromCharCode(i-1)),V.ASCII_ENCODE;if(129===i)return V.PAD_ENCODE;if(i<=229){const t=i-130;t<10&&e.append("0"),e.append(""+t)}else switch(i){case 230:return V.C40_ENCODE;case 231:return V.BASE256_ENCODE;case 232:e.append(String.fromCharCode(29));break;case 233:case 234:break;case 235:n=!0;break;case 236:e.append("[)>05"),r.insert(0,"");break;case 237:e.append("[)>06"),r.insert(0,"");break;case 238:return V.ANSIX12_ENCODE;case 239:return V.TEXT_ENCODE;case 240:return V.EDIFACT_ENCODE;case 241:break;default:if(254!==i||0!==t.available())throw new E}}while(t.available()>0);return V.ASCII_ENCODE}static decodeC40Segment(t,e){let r=!1;const n=[];let i=0;do{if(8===t.available())return;const s=t.readBits(8);if(254===s)return;this.parseTwoBytes(s,t.readBits(8),n);for(let t=0;t<3;t++){const s=n[t];switch(i){case 0:if(s<3)i=s+1;else{if(!(s0)}static decodeTextSegment(t,e){let r=!1,n=[],i=0;do{if(8===t.available())return;const s=t.readBits(8);if(254===s)return;this.parseTwoBytes(s,t.readBits(8),n);for(let t=0;t<3;t++){const s=n[t];switch(i){case 0:if(s<3)i=s+1;else{if(!(s0)}static decodeAnsiX12Segment(t,e){const r=[];do{if(8===t.available())return;const n=t.readBits(8);if(254===n)return;this.parseTwoBytes(n,t.readBits(8),r);for(let t=0;t<3;t++){const n=r[t];switch(n){case 0:e.append("\r");break;case 1:e.append("*");break;case 2:e.append(">");break;case 3:e.append(" ");break;default:if(n<14)e.append(String.fromCharCode(n+44));else{if(!(n<40))throw new E;e.append(String.fromCharCode(n+51))}}}}while(t.available()>0)}static parseTwoBytes(t,e,r){let n=(t<<8)+e-1,i=Math.floor(n/1600);r[0]=i,n-=1600*i,i=Math.floor(n/40),r[1]=i,r[2]=n-40*i}static decodeEdifactSegment(t,e){do{if(t.available()<=16)return;for(let r=0;r<4;r++){let r=t.readBits(6);if(31===r){const e=8-t.getBitOffset();return void(8!==e&&t.readBits(e))}0==(32&r)&&(r|=64),e.append(String.fromCharCode(r))}}while(t.available()>0)}static decodeBase256Segment(t,e,r){let n=1+t.getByteOffset();const i=this.unrandomize255State(t.readBits(8),n++);let s;if((s=0===i?t.available()/8|0:i<250?i:250*(i-249)+this.unrandomize255State(t.readBits(8),n++))<0)throw new E;const o=new Uint8Array(s);for(let e=0;e=0?r:r+256}}le.C40_BASIC_SET_CHARS=["*","*","*"," ","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"],le.C40_SHIFT2_SET_CHARS=["!",'"',"#","$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_"],le.TEXT_BASIC_SET_CHARS=["*","*","*"," ","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"],le.TEXT_SHIFT2_SET_CHARS=le.C40_SHIFT2_SET_CHARS,le.TEXT_SHIFT3_SET_CHARS=["`","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","{","|","}","~",String.fromCharCode(127)];class he{constructor(){this.rsDecoder=new J(q.DATA_MATRIX_FIELD_256)}decode(t){const e=new se(t),r=e.getVersion(),n=e.readCodewords(),i=oe.getDataBlocks(n,r);let s=0;for(let t of i)s+=t.getNumDataCodewords();const o=new Uint8Array(s),a=i.length;for(let t=0;to&&(h=o,c[0]=e,c[1]=r,c[2]=n,c[3]=i),h>a&&(h=a,c[0]=r,c[1]=n,c[2]=i,c[3]=e),h>l&&(c[0]=n,c[1]=i,c[2]=e,c[3]=r),c}detectSolid2(t){let e=t[0],r=t[1],n=t[2],i=t[3],s=this.transitionsBetween(e,i),o=ce.shiftPoint(r,n,4*(s+1)),a=ce.shiftPoint(n,r,4*(s+1));return this.transitionsBetween(o,e)this.transitionsBetween(a,c)+this.transitionsBetween(l,c)?h:c:h:this.isValid(c)?c:null}shiftToModuleCenter(t){let e=t[0],r=t[1],n=t[2],i=t[3],s=this.transitionsBetween(e,i)+1,o=this.transitionsBetween(n,i)+1,a=ce.shiftPoint(e,r,4*o),l=ce.shiftPoint(n,r,4*s);1==(1&(s=this.transitionsBetween(a,i)+1))&&(s+=1),1==(1&(o=this.transitionsBetween(l,i)+1))&&(o+=1);let h,c,u=(e.getX()+r.getX()+n.getX()+i.getX())/4,d=(e.getY()+r.getY()+n.getY()+i.getY())/4;return e=ce.moveAway(e,u,d),r=ce.moveAway(r,u,d),n=ce.moveAway(n,u,d),i=ce.moveAway(i,u,d),a=ce.shiftPoint(e,r,4*o),a=ce.shiftPoint(a,i,4*s),h=ce.shiftPoint(r,e,4*o),h=ce.shiftPoint(h,n,4*s),l=ce.shiftPoint(n,i,4*o),l=ce.shiftPoint(l,r,4*s),c=ce.shiftPoint(i,n,4*o),[a,h,l,c=ce.shiftPoint(c,e,4*s)]}isValid(t){return t.getX()>=0&&t.getX()0&&t.getY()Math.abs(i-r);if(o){let t=r;r=n,n=t,t=i,i=s,s=t}let a=Math.abs(i-r),l=Math.abs(s-n),h=-a/2,c=n0){if(e===s)break;e+=c,h-=a}}return d}}class ue{constructor(){this.decoder=new he}decode(t,e=null){let r,n;if(null!=e&&e.has(C.PURE_BARCODE)){const e=ue.extractPureBits(t.getBlackMatrix());r=this.decoder.decode(e),n=ue.NO_POINTS}else{const e=new ce(t.getBlackMatrix()).detect();r=this.decoder.decode(e.getBits()),n=e.getPoints()}const i=r.getRawBytes(),s=new F(r.getText(),i,8*i.length,n,k.DATA_MATRIX,c.currentTimeMillis()),o=r.getByteSegments();null!=o&&s.putMetadata(W.BYTE_SEGMENTS,o);const a=r.getECLevel();return null!=a&&s.putMetadata(W.ERROR_CORRECTION_LEVEL,a),s}reset(){}static extractPureBits(t){const e=t.getTopLeftOnBit(),r=t.getBottomRightOnBit();if(null==e||null==r)throw new R;const n=this.moduleSize(e,t);let i=e[1];const s=r[1];let o=e[0];const a=(r[0]-o+1)/n,l=(s-i+1)/n;if(a<=0||l<=0)throw new R;const h=n/2;i+=h,o+=h;const c=new T(a,l);for(let e=0;e=de.FOR_BITS.size)throw new o;return de.FOR_BITS.get(t)}}de.FOR_BITS=new Map,de.FOR_VALUE=new Map,de.L=new de(U.L,"L",1),de.M=new de(U.M,"M",0),de.Q=new de(U.Q,"Q",3),de.H=new de(U.H,"H",2);class ge{constructor(t){this.errorCorrectionLevel=de.forBits(t>>3&3),this.dataMask=7&t}static numBitsDiffering(t,e){return f.bitCount(t^e)}static decodeFormatInformation(t,e){const r=ge.doDecodeFormatInformation(t,e);return null!==r?r:ge.doDecodeFormatInformation(t^ge.FORMAT_INFO_MASK_QR,e^ge.FORMAT_INFO_MASK_QR)}static doDecodeFormatInformation(t,e){let r=Number.MAX_SAFE_INTEGER,n=0;for(const i of ge.FORMAT_INFO_DECODE_LOOKUP){const s=i[0];if(s===t||s===e)return new ge(i[1]);let o=ge.numBitsDiffering(t,s);o40)throw new o;return Ae.VERSIONS[t-1]}static decodeVersionInformation(t){let e=Number.MAX_SAFE_INTEGER,r=0;for(let n=0;n6&&(e.setRegion(t-11,0,3,6),e.setRegion(0,t-11,6,3)),e}toString(){return""+this.versionNumber}}Ae.VERSION_DECODE_INFO=Int32Array.from([31892,34236,39577,42195,48118,51042,55367,58893,63784,68472,70749,76311,79154,84390,87683,92361,96236,102084,102881,110507,110734,117786,119615,126325,127568,133589,136944,141498,145311,150283,152622,158308,161089,167017]),Ae.VERSIONS=[new Ae(1,new Int32Array(0),new fe(7,new we(1,19)),new fe(10,new we(1,16)),new fe(13,new we(1,13)),new fe(17,new we(1,9))),new Ae(2,Int32Array.from([6,18]),new fe(10,new we(1,34)),new fe(16,new we(1,28)),new fe(22,new we(1,22)),new fe(28,new we(1,16))),new Ae(3,Int32Array.from([6,22]),new fe(15,new we(1,55)),new fe(26,new we(1,44)),new fe(18,new we(2,17)),new fe(22,new we(2,13))),new Ae(4,Int32Array.from([6,26]),new fe(20,new we(1,80)),new fe(18,new we(2,32)),new fe(26,new we(2,24)),new fe(16,new we(4,9))),new Ae(5,Int32Array.from([6,30]),new fe(26,new we(1,108)),new fe(24,new we(2,43)),new fe(18,new we(2,15),new we(2,16)),new fe(22,new we(2,11),new we(2,12))),new Ae(6,Int32Array.from([6,34]),new fe(18,new we(2,68)),new fe(16,new we(4,27)),new fe(24,new we(4,19)),new fe(28,new we(4,15))),new Ae(7,Int32Array.from([6,22,38]),new fe(20,new we(2,78)),new fe(18,new we(4,31)),new fe(18,new we(2,14),new we(4,15)),new fe(26,new we(4,13),new we(1,14))),new Ae(8,Int32Array.from([6,24,42]),new fe(24,new we(2,97)),new fe(22,new we(2,38),new we(2,39)),new fe(22,new we(4,18),new we(2,19)),new fe(26,new we(4,14),new we(2,15))),new Ae(9,Int32Array.from([6,26,46]),new fe(30,new we(2,116)),new fe(22,new we(3,36),new we(2,37)),new fe(20,new we(4,16),new we(4,17)),new fe(24,new we(4,12),new we(4,13))),new Ae(10,Int32Array.from([6,28,50]),new fe(18,new we(2,68),new we(2,69)),new fe(26,new we(4,43),new we(1,44)),new fe(24,new we(6,19),new we(2,20)),new fe(28,new we(6,15),new we(2,16))),new Ae(11,Int32Array.from([6,30,54]),new fe(20,new we(4,81)),new fe(30,new we(1,50),new we(4,51)),new fe(28,new we(4,22),new we(4,23)),new fe(24,new we(3,12),new we(8,13))),new Ae(12,Int32Array.from([6,32,58]),new fe(24,new we(2,92),new we(2,93)),new fe(22,new we(6,36),new we(2,37)),new fe(26,new we(4,20),new we(6,21)),new fe(28,new we(7,14),new we(4,15))),new Ae(13,Int32Array.from([6,34,62]),new fe(26,new we(4,107)),new fe(22,new we(8,37),new we(1,38)),new fe(24,new we(8,20),new we(4,21)),new fe(22,new we(12,11),new we(4,12))),new Ae(14,Int32Array.from([6,26,46,66]),new fe(30,new we(3,115),new we(1,116)),new fe(24,new we(4,40),new we(5,41)),new fe(20,new we(11,16),new we(5,17)),new fe(24,new we(11,12),new we(5,13))),new Ae(15,Int32Array.from([6,26,48,70]),new fe(22,new we(5,87),new we(1,88)),new fe(24,new we(5,41),new we(5,42)),new fe(30,new we(5,24),new we(7,25)),new fe(24,new we(11,12),new we(7,13))),new Ae(16,Int32Array.from([6,26,50,74]),new fe(24,new we(5,98),new we(1,99)),new fe(28,new we(7,45),new we(3,46)),new fe(24,new we(15,19),new we(2,20)),new fe(30,new we(3,15),new we(13,16))),new Ae(17,Int32Array.from([6,30,54,78]),new fe(28,new we(1,107),new we(5,108)),new fe(28,new we(10,46),new we(1,47)),new fe(28,new we(1,22),new we(15,23)),new fe(28,new we(2,14),new we(17,15))),new Ae(18,Int32Array.from([6,30,56,82]),new fe(30,new we(5,120),new we(1,121)),new fe(26,new we(9,43),new we(4,44)),new fe(28,new we(17,22),new we(1,23)),new fe(28,new we(2,14),new we(19,15))),new Ae(19,Int32Array.from([6,30,58,86]),new fe(28,new we(3,113),new we(4,114)),new fe(26,new we(3,44),new we(11,45)),new fe(26,new we(17,21),new we(4,22)),new fe(26,new we(9,13),new we(16,14))),new Ae(20,Int32Array.from([6,34,62,90]),new fe(28,new we(3,107),new we(5,108)),new fe(26,new we(3,41),new we(13,42)),new fe(30,new we(15,24),new we(5,25)),new fe(28,new we(15,15),new we(10,16))),new Ae(21,Int32Array.from([6,28,50,72,94]),new fe(28,new we(4,116),new we(4,117)),new fe(26,new we(17,42)),new fe(28,new we(17,22),new we(6,23)),new fe(30,new we(19,16),new we(6,17))),new Ae(22,Int32Array.from([6,26,50,74,98]),new fe(28,new we(2,111),new we(7,112)),new fe(28,new we(17,46)),new fe(30,new we(7,24),new we(16,25)),new fe(24,new we(34,13))),new Ae(23,Int32Array.from([6,30,54,78,102]),new fe(30,new we(4,121),new we(5,122)),new fe(28,new we(4,47),new we(14,48)),new fe(30,new we(11,24),new we(14,25)),new fe(30,new we(16,15),new we(14,16))),new Ae(24,Int32Array.from([6,28,54,80,106]),new fe(30,new we(6,117),new we(4,118)),new fe(28,new we(6,45),new we(14,46)),new fe(30,new we(11,24),new we(16,25)),new fe(30,new we(30,16),new we(2,17))),new Ae(25,Int32Array.from([6,32,58,84,110]),new fe(26,new we(8,106),new we(4,107)),new fe(28,new we(8,47),new we(13,48)),new fe(30,new we(7,24),new we(22,25)),new fe(30,new we(22,15),new we(13,16))),new Ae(26,Int32Array.from([6,30,58,86,114]),new fe(28,new we(10,114),new we(2,115)),new fe(28,new we(19,46),new we(4,47)),new fe(28,new we(28,22),new we(6,23)),new fe(30,new we(33,16),new we(4,17))),new Ae(27,Int32Array.from([6,34,62,90,118]),new fe(30,new we(8,122),new we(4,123)),new fe(28,new we(22,45),new we(3,46)),new fe(30,new we(8,23),new we(26,24)),new fe(30,new we(12,15),new we(28,16))),new Ae(28,Int32Array.from([6,26,50,74,98,122]),new fe(30,new we(3,117),new we(10,118)),new fe(28,new we(3,45),new we(23,46)),new fe(30,new we(4,24),new we(31,25)),new fe(30,new we(11,15),new we(31,16))),new Ae(29,Int32Array.from([6,30,54,78,102,126]),new fe(30,new we(7,116),new we(7,117)),new fe(28,new we(21,45),new we(7,46)),new fe(30,new we(1,23),new we(37,24)),new fe(30,new we(19,15),new we(26,16))),new Ae(30,Int32Array.from([6,26,52,78,104,130]),new fe(30,new we(5,115),new we(10,116)),new fe(28,new we(19,47),new we(10,48)),new fe(30,new we(15,24),new we(25,25)),new fe(30,new we(23,15),new we(25,16))),new Ae(31,Int32Array.from([6,30,56,82,108,134]),new fe(30,new we(13,115),new we(3,116)),new fe(28,new we(2,46),new we(29,47)),new fe(30,new we(42,24),new we(1,25)),new fe(30,new we(23,15),new we(28,16))),new Ae(32,Int32Array.from([6,34,60,86,112,138]),new fe(30,new we(17,115)),new fe(28,new we(10,46),new we(23,47)),new fe(30,new we(10,24),new we(35,25)),new fe(30,new we(19,15),new we(35,16))),new Ae(33,Int32Array.from([6,30,58,86,114,142]),new fe(30,new we(17,115),new we(1,116)),new fe(28,new we(14,46),new we(21,47)),new fe(30,new we(29,24),new we(19,25)),new fe(30,new we(11,15),new we(46,16))),new Ae(34,Int32Array.from([6,34,62,90,118,146]),new fe(30,new we(13,115),new we(6,116)),new fe(28,new we(14,46),new we(23,47)),new fe(30,new we(44,24),new we(7,25)),new fe(30,new we(59,16),new we(1,17))),new Ae(35,Int32Array.from([6,30,54,78,102,126,150]),new fe(30,new we(12,121),new we(7,122)),new fe(28,new we(12,47),new we(26,48)),new fe(30,new we(39,24),new we(14,25)),new fe(30,new we(22,15),new we(41,16))),new Ae(36,Int32Array.from([6,24,50,76,102,128,154]),new fe(30,new we(6,121),new we(14,122)),new fe(28,new we(6,47),new we(34,48)),new fe(30,new we(46,24),new we(10,25)),new fe(30,new we(2,15),new we(64,16))),new Ae(37,Int32Array.from([6,28,54,80,106,132,158]),new fe(30,new we(17,122),new we(4,123)),new fe(28,new we(29,46),new we(14,47)),new fe(30,new we(49,24),new we(10,25)),new fe(30,new we(24,15),new we(46,16))),new Ae(38,Int32Array.from([6,32,58,84,110,136,162]),new fe(30,new we(4,122),new we(18,123)),new fe(28,new we(13,46),new we(32,47)),new fe(30,new we(48,24),new we(14,25)),new fe(30,new we(42,15),new we(32,16))),new Ae(39,Int32Array.from([6,26,54,82,110,138,166]),new fe(30,new we(20,117),new we(4,118)),new fe(28,new we(40,47),new we(7,48)),new fe(30,new we(43,24),new we(22,25)),new fe(30,new we(10,15),new we(67,16))),new Ae(40,Int32Array.from([6,30,58,86,114,142,170]),new fe(30,new we(19,118),new we(6,119)),new fe(28,new we(18,47),new we(31,48)),new fe(30,new we(34,24),new we(34,25)),new fe(30,new we(20,15),new we(61,16)))],function(t){t[t.DATA_MASK_000=0]="DATA_MASK_000",t[t.DATA_MASK_001=1]="DATA_MASK_001",t[t.DATA_MASK_010=2]="DATA_MASK_010",t[t.DATA_MASK_011=3]="DATA_MASK_011",t[t.DATA_MASK_100=4]="DATA_MASK_100",t[t.DATA_MASK_101=5]="DATA_MASK_101",t[t.DATA_MASK_110=6]="DATA_MASK_110",t[t.DATA_MASK_111=7]="DATA_MASK_111"}(H||(H={}));class Ce{constructor(t,e){this.value=t,this.isMasked=e}unmaskBitMatrix(t,e){for(let r=0;r0==(t+e&1))],[H.DATA_MASK_001,new Ce(H.DATA_MASK_001,(t,e)=>0==(1&t))],[H.DATA_MASK_010,new Ce(H.DATA_MASK_010,(t,e)=>e%3==0)],[H.DATA_MASK_011,new Ce(H.DATA_MASK_011,(t,e)=>(t+e)%3==0)],[H.DATA_MASK_100,new Ce(H.DATA_MASK_100,(t,e)=>0==(Math.floor(t/2)+Math.floor(e/3)&1))],[H.DATA_MASK_101,new Ce(H.DATA_MASK_101,(t,e)=>t*e%6==0)],[H.DATA_MASK_110,new Ce(H.DATA_MASK_110,(t,e)=>t*e%6<3)],[H.DATA_MASK_111,new Ce(H.DATA_MASK_111,(t,e)=>0==(t+e+t*e%3&1))]]);class Ee{constructor(t){const e=t.getHeight();if(e<21||1!=(3&e))throw new E;this.bitMatrix=t}readFormatInformation(){if(null!==this.parsedFormatInfo&&void 0!==this.parsedFormatInfo)return this.parsedFormatInfo;let t=0;for(let e=0;e<6;e++)t=this.copyBit(e,8,t);t=this.copyBit(7,8,t),t=this.copyBit(8,8,t),t=this.copyBit(8,7,t);for(let e=5;e>=0;e--)t=this.copyBit(8,e,t);const e=this.bitMatrix.getHeight();let r=0;const n=e-7;for(let t=e-1;t>=n;t--)r=this.copyBit(8,t,r);for(let t=e-8;t=0;e--)for(let i=t-9;i>=n;i--)r=this.copyBit(i,e,r);let i=Ae.decodeVersionInformation(r);if(null!==i&&i.getDimensionForVersion()===t)return this.parsedVersion=i,i;r=0;for(let e=5;e>=0;e--)for(let i=t-9;i>=n;i--)r=this.copyBit(e,i,r);if(null!==(i=Ae.decodeVersionInformation(r))&&i.getDimensionForVersion()===t)return this.parsedVersion=i,i;throw new E}copyBit(t,e,r){return(this.isMirror?this.bitMatrix.get(e,t):this.bitMatrix.get(t,e))?r<<1|1:r<<1}readCodewords(){const t=this.readFormatInformation(),e=this.readVersion(),r=Ce.values.get(t.getDataMask()),n=this.bitMatrix.getHeight();r.unmaskBitMatrix(this.bitMatrix,n);const i=e.buildFunctionPattern();let s=!0;const o=new Uint8Array(e.getTotalCodewords());let a=0,l=0,h=0;for(let t=n-1;t>0;t-=2){6===t&&t--;for(let e=0;e=0;){if(a[c].codewords.length===h)break;c--}c++;const u=h-n.getECCodewordsPerBlock();let d=0;for(let e=0;et.available())throw new E;const n=new Uint8Array(2*r);let i=0;for(;r>0;){const e=t.readBits(13);let s=e/96<<8&4294967295|e%96;s+=s<959?41377:42657,n[i]=s>>8&255,n[i+1]=255&s,i+=2,r--}try{e.append(I.decode(n,S.GB2312))}catch(t){throw new E(t)}}static decodeKanjiSegment(t,e,r){if(13*r>t.available())throw new E;const n=new Uint8Array(2*r);let i=0;for(;r>0;){const e=t.readBits(13);let s=e/192<<8&4294967295|e%192;s+=s<7936?33088:49472,n[i]=s>>8,n[i+1]=s,i+=2,r--}try{e.append(I.decode(n,S.SHIFT_JIS))}catch(t){throw new E(t)}}static decodeByteSegment(t,e,r,n,i,s){if(8*r>t.available())throw new E;const o=new Uint8Array(r);for(let e=0;e=Ie.ALPHANUMERIC_CHARS.length)throw new E;return Ie.ALPHANUMERIC_CHARS[t]}static decodeAlphanumericSegment(t,e,r,n){const i=e.length();for(;r>1;){if(t.available()<11)throw new E;const n=t.readBits(11);e.append(Ie.toAlphaNumericChar(Math.floor(n/45))),e.append(Ie.toAlphaNumericChar(n%45)),r-=2}if(1===r){if(t.available()<6)throw new E;e.append(Ie.toAlphaNumericChar(t.readBits(6)))}if(n)for(let t=i;t=3;){if(t.available()<10)throw new E;const n=t.readBits(10);if(n>=1e3)throw new E;e.append(Ie.toAlphaNumericChar(Math.floor(n/100))),e.append(Ie.toAlphaNumericChar(Math.floor(n/10)%10)),e.append(Ie.toAlphaNumericChar(n%10)),r-=3}if(2===r){if(t.available()<7)throw new E;const r=t.readBits(7);if(r>=100)throw new E;e.append(Ie.toAlphaNumericChar(Math.floor(r/10))),e.append(Ie.toAlphaNumericChar(r%10))}else if(1===r){if(t.available()<4)throw new E;const r=t.readBits(4);if(r>=10)throw new E;e.append(Ie.toAlphaNumericChar(r))}}static parseECIValue(t){const e=t.readBits(8);if(0==(128&e))return 127&e;if(128==(192&e)){return(63&e)<<8&4294967295|t.readBits(8)}if(192==(224&e)){return(31&e)<<16&4294967295|t.readBits(16)}throw new E}}Ie.ALPHANUMERIC_CHARS="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:",Ie.GB2312_SUBSET=1;class Se{constructor(t){this.mirrored=t}isMirrored(){return this.mirrored}applyMirroredCorrection(t){if(!this.mirrored||null===t||t.length<3)return;const e=t[0];t[0]=t[2],t[2]=e}}class pe{constructor(){this.rsDecoder=new J(q.QR_CODE_FIELD_256)}decodeBooleanArray(t,e){return this.decodeBitMatrix(T.parseFromBooleanArray(t),e)}decodeBitMatrix(t,e){const r=new Ee(t);let n=null;try{return this.decodeBitMatrixParser(r,e)}catch(t){n=t}try{r.remask(),r.setMirror(!0),r.readVersion(),r.readFormatInformation(),r.mirror();const t=this.decodeBitMatrixParser(r,e);return t.setOther(new Se(!0)),t}catch(t){if(null!==n)throw n;throw t}}decodeBitMatrixParser(t,e){const r=t.readVersion(),n=t.readFormatInformation().getErrorCorrectionLevel(),i=t.readCodewords(),s=me.getDataBlocks(i,r,n);let o=0;for(const t of s)o+=t.getNumDataCodewords();const a=new Uint8Array(o);let l=0;for(const t of s){const e=t.getCodewords(),r=t.getNumDataCodewords();this.correctErrors(e,r);for(let t=0;t=r)return!1;return!0}crossCheckVertical(t,e,r,n){const i=this.image,s=i.getHeight(),o=this.crossCheckStateCount;o[0]=0,o[1]=0,o[2]=0;let a=t;for(;a>=0&&i.get(e,a)&&o[1]<=r;)o[1]++,a--;if(a<0||o[1]>r)return NaN;for(;a>=0&&!i.get(e,a)&&o[0]<=r;)o[0]++,a--;if(o[0]>r)return NaN;for(a=t+1;ar)return NaN;for(;ar)return NaN;const l=o[0]+o[1]+o[2];return 5*Math.abs(l-n)>=2*n?NaN:this.foundPatternCross(o)?Re.centerFromEnd(o,a):NaN}handlePossibleCenter(t,e,r){const n=t[0]+t[1]+t[2],i=Re.centerFromEnd(t,r),s=this.crossCheckVertical(e,i,2*t[1],n);if(!isNaN(s)){const e=(t[0]+t[1]+t[2])/3;for(const t of this.possibleCenters)if(t.aboutEquals(e,s,i))return t.combineEstimate(s,i,e);const r=new Te(i,s,e);this.possibleCenters.push(r),null!==this.resultPointCallback&&void 0!==this.resultPointCallback&&this.resultPointCallback.foundPossibleResultPoint(r)}return null}}class Ne extends rt{constructor(t,e,r,n){super(t,e),this.estimatedModuleSize=r,this.count=n,void 0===n&&(this.count=1)}getEstimatedModuleSize(){return this.estimatedModuleSize}getCount(){return this.count}aboutEquals(t,e,r){if(Math.abs(e-this.getY())<=t&&Math.abs(r-this.getX())<=t){const e=Math.abs(t-this.estimatedModuleSize);return e<=1||e<=this.estimatedModuleSize}return!1}combineEstimate(t,e,r){const n=this.count+1,i=(this.count*this.getX()+e)/n,s=(this.count*this.getY()+t)/n,o=(this.count*this.estimatedModuleSize+r)/n;return new Ne(i,s,o,n)}}class De{constructor(t){this.bottomLeft=t[0],this.topLeft=t[1],this.topRight=t[2]}getBottomLeft(){return this.bottomLeft}getTopLeft(){return this.topLeft}getTopRight(){return this.topRight}}class ye{constructor(t,e){this.image=t,this.resultPointCallback=e,this.possibleCenters=[],this.crossCheckStateCount=new Int32Array(5),this.resultPointCallback=e}getImage(){return this.image}getPossibleCenters(){return this.possibleCenters}find(t){const e=null!=t&&void 0!==t.get(C.TRY_HARDER),r=null!=t&&void 0!==t.get(C.PURE_BARCODE),n=this.image,i=n.getHeight(),s=n.getWidth();let o=Math.floor(3*i/(4*ye.MAX_MODULES));(ol[2]&&(t+=e-l[2]-o,i=s-1)}e=0,l[0]=0,l[1]=0,l[2]=0,l[3]=0,l[4]=0}else l[0]=l[2],l[1]=l[3],l[2]=l[4],l[3]=1,l[4]=0,e=3;else l[++e]++;else l[e]++;if(ye.foundPatternCross(l)){!0===this.handlePossibleCenter(l,t,s,r)&&(o=l[0],this.hasSkipped&&(a=this.haveMultiplyConfirmedCenters()))}}const h=this.selectBestPatterns();return rt.orderBestPatterns(h),new De(h)}static centerFromEnd(t,e){return e-t[4]-t[3]-t[2]/2}static foundPatternCross(t){let e=0;for(let r=0;r<5;r++){const n=t[r];if(0===n)return!1;e+=n}if(e<7)return!1;const r=e/7,n=r/2;return Math.abs(r-t[0])=s&&e>=s&&o.get(e-s,t-s);)i[2]++,s++;if(t=s&&e>=s&&!o.get(e-s,t-s)&&i[1]<=r;)i[1]++,s++;if(tr)return!1;for(;t>=s&&e>=s&&o.get(e-s,t-s)&&i[0]<=r;)i[0]++,s++;if(i[0]>r)return!1;const a=o.getHeight(),l=o.getWidth();for(s=1;t+s=a||e+s>=l)return!1;for(;t+s=a||e+s>=l||i[3]>=r)return!1;for(;t+s=r)return!1;const h=i[0]+i[1]+i[2]+i[3]+i[4];return Math.abs(h-n)<2*n&&ye.foundPatternCross(i)}crossCheckVertical(t,e,r,n){const i=this.image,s=i.getHeight(),o=this.getCrossCheckStateCount();let a=t;for(;a>=0&&i.get(e,a);)o[2]++,a--;if(a<0)return NaN;for(;a>=0&&!i.get(e,a)&&o[1]<=r;)o[1]++,a--;if(a<0||o[1]>r)return NaN;for(;a>=0&&i.get(e,a)&&o[0]<=r;)o[0]++,a--;if(o[0]>r)return NaN;for(a=t+1;a=r)return NaN;for(;a=r)return NaN;const l=o[0]+o[1]+o[2]+o[3]+o[4];return 5*Math.abs(l-n)>=2*n?NaN:ye.foundPatternCross(o)?ye.centerFromEnd(o,a):NaN}crossCheckHorizontal(t,e,r,n){const i=this.image,s=i.getWidth(),o=this.getCrossCheckStateCount();let a=t;for(;a>=0&&i.get(a,e);)o[2]++,a--;if(a<0)return NaN;for(;a>=0&&!i.get(a,e)&&o[1]<=r;)o[1]++,a--;if(a<0||o[1]>r)return NaN;for(;a>=0&&i.get(a,e)&&o[0]<=r;)o[0]++,a--;if(o[0]>r)return NaN;for(a=t+1;a=r)return NaN;for(;a=r)return NaN;const l=o[0]+o[1]+o[2]+o[3]+o[4];return 5*Math.abs(l-n)>=n?NaN:ye.foundPatternCross(o)?ye.centerFromEnd(o,a):NaN}handlePossibleCenter(t,e,r,n){const i=t[0]+t[1]+t[2]+t[3]+t[4];let s=ye.centerFromEnd(t,r),o=this.crossCheckVertical(e,Math.floor(s),t[2],i);if(!isNaN(o)&&(s=this.crossCheckHorizontal(Math.floor(s),Math.floor(o),t[2],i),!isNaN(s)&&(!n||this.crossCheckDiagonal(Math.floor(o),Math.floor(s),t[2],i)))){const t=i/7;let e=!1;const r=this.possibleCenters;for(let n=0,i=r.length;n=ye.CENTER_QUORUM){if(null!=t)return this.hasSkipped=!0,Math.floor((Math.abs(t.getX()-e.getX())-Math.abs(t.getY()-e.getY()))/2);t=e}return 0}haveMultiplyConfirmedCenters(){let t=0,e=0;const r=this.possibleCenters.length;for(const r of this.possibleCenters)r.getCount()>=ye.CENTER_QUORUM&&(t++,e+=r.getEstimatedModuleSize());if(t<3)return!1;const n=e/r;let i=0;for(const t of this.possibleCenters)i+=Math.abs(t.getEstimatedModuleSize()-n);return i<=.05*e}selectBestPatterns(){const t=this.possibleCenters.length;if(t<3)throw new R;const e=this.possibleCenters;let r;if(t>3){let n=0,i=0;for(const t of this.possibleCenters){const e=t.getEstimatedModuleSize();n+=e,i+=e*e}r=n/t;let s=Math.sqrt(i/t-r*r);e.sort((t,e)=>{const n=Math.abs(e.getEstimatedModuleSize()-r),i=Math.abs(t.getEstimatedModuleSize()-r);return ni?1:0});const o=Math.max(.2*r,s);for(let t=0;t3;t++){const n=e[t];Math.abs(n.getEstimatedModuleSize()-r)>o&&(e.splice(t,1),t--)}}if(e.length>3){let t=0;for(const r of e)t+=r.getEstimatedModuleSize();r=t/e.length,e.sort((t,e)=>{if(e.getCount()===t.getCount()){const n=Math.abs(e.getEstimatedModuleSize()-r),i=Math.abs(t.getEstimatedModuleSize()-r);return ni?-1:0}return e.getCount()-t.getCount()}),e.splice(3)}return[e[0],e[1],e[2]]}}ye.CENTER_QUORUM=2,ye.MIN_SKIP=3,ye.MAX_MODULES=57;class Oe{constructor(t){this.image=t}getImage(){return this.image}getResultPointCallback(){return this.resultPointCallback}detect(t){this.resultPointCallback=null==t?null:t.get(C.NEED_RESULT_POINT_CALLBACK);const e=new ye(this.image,this.resultPointCallback).find(t);return this.processFinderPatternInfo(e)}processFinderPatternInfo(t){const e=t.getTopLeft(),r=t.getTopRight(),n=t.getBottomLeft(),i=this.calculateModuleSize(e,r,n);if(i<1)throw new R("No pattern found in proccess finder.");const s=Oe.computeDimension(e,r,n,i),o=Ae.getProvisionalVersionForDimension(s),a=o.getDimensionForVersion()-7;let l=null;if(o.getAlignmentPatternCenters().length>0){const t=r.getX()-e.getX()+n.getX(),s=r.getY()-e.getY()+n.getY(),o=1-3/a,h=Math.floor(e.getX()+o*(t-e.getX())),c=Math.floor(e.getY()+o*(s-e.getY()));for(let t=4;t<=16;t<<=1)try{l=this.findAlignmentInRegion(i,h,c,t);break}catch(t){if(!(t instanceof R))throw t}}const h=Oe.createTransform(e,r,n,l,s),c=Oe.sampleGrid(this.image,h,s);let u;return new nt(c,u=null===l?[n,e,r]:[n,e,r,l])}static createTransform(t,e,r,n,i){const s=i-3.5;let o,a,l,h;return null!==n?(o=n.getX(),a=n.getY(),h=l=s-3):(o=e.getX()-t.getX()+r.getX(),a=e.getY()-t.getY()+r.getY(),l=s,h=s),at.quadrilateralToQuadrilateral(3.5,3.5,s,3.5,l,h,3.5,s,t.getX(),t.getY(),e.getX(),e.getY(),o,a,r.getX(),r.getY())}static sampleGrid(t,e,r){return ht.getInstance().sampleGridWithTransform(t,r,r,e)}static computeDimension(t,e,r,n){const i=tt.round(rt.distance(t,e)/n),s=tt.round(rt.distance(t,r)/n);let o=Math.floor((i+s)/2)+7;switch(3&o){case 0:o++;break;case 2:o--;break;case 3:throw new R("Dimensions could be not found.")}return o}calculateModuleSize(t,e,r){return(this.calculateModuleSizeOneWay(t,e)+this.calculateModuleSizeOneWay(t,r))/2}calculateModuleSizeOneWay(t,e){const r=this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(t.getX()),Math.floor(t.getY()),Math.floor(e.getX()),Math.floor(e.getY())),n=this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(e.getX()),Math.floor(e.getY()),Math.floor(t.getX()),Math.floor(t.getY()));return isNaN(r)?n/7:isNaN(n)?r/7:(r+n)/14}sizeOfBlackWhiteBlackRunBothWays(t,e,r,n){let i=this.sizeOfBlackWhiteBlackRun(t,e,r,n),s=1,o=t-(r-t);o<0?(s=t/(t-o),o=0):o>=this.image.getWidth()&&(s=(this.image.getWidth()-1-t)/(o-t),o=this.image.getWidth()-1);let a=Math.floor(e-(n-e)*s);return s=1,a<0?(s=e/(e-a),a=0):a>=this.image.getHeight()&&(s=(this.image.getHeight()-1-e)/(a-e),a=this.image.getHeight()-1),o=Math.floor(t+(o-t)*s),(i+=this.sizeOfBlackWhiteBlackRun(t,e,o,a))-1}sizeOfBlackWhiteBlackRun(t,e,r,n){const i=Math.abs(n-e)>Math.abs(r-t);if(i){let i=t;t=e,e=i,i=r,r=n,n=i}const s=Math.abs(r-t),o=Math.abs(n-e);let a=-s/2;const l=t0){if(d===n)break;d+=h,a-=s}}return 2===c?tt.distance(r+l,n,t,e):NaN}findAlignmentInRegion(t,e,r,n){const i=Math.floor(n*t),s=Math.max(0,e-i),o=Math.min(this.image.getWidth()-1,e+i);if(o-s<3*t)throw new R("Alignment top exceeds estimated module size.");const a=Math.max(0,r-i),l=Math.min(this.image.getHeight()-1,r+i);if(l-a<3*t)throw new R("Alignment bottom exceeds estimated module size.");return new Re(this.image,s,a,o-s,l-a,t,this.resultPointCallback).find()}}class Me{constructor(){this.decoder=new pe}getDecoder(){return this.decoder}decode(t,e){let r,n;if(null!=e&&void 0!==e.get(C.PURE_BARCODE)){const i=Me.extractPureBits(t.getBlackMatrix());r=this.decoder.decodeBitMatrix(i,e),n=Me.NO_POINTS}else{const i=new Oe(t.getBlackMatrix()).detect(e);r=this.decoder.decodeBitMatrix(i.getBits(),e),n=i.getPoints()}r.getOther()instanceof Se&&r.getOther().applyMirroredCorrection(n);const i=new F(r.getText(),r.getRawBytes(),void 0,n,k.QR_CODE,void 0),s=r.getByteSegments();null!==s&&i.putMetadata(W.BYTE_SEGMENTS,s);const o=r.getECLevel();return null!==o&&i.putMetadata(W.ERROR_CORRECTION_LEVEL,o),r.hasStructuredAppend()&&(i.putMetadata(W.STRUCTURED_APPEND_SEQUENCE,r.getStructuredAppendSequenceNumber()),i.putMetadata(W.STRUCTURED_APPEND_PARITY,r.getStructuredAppendParity())),i}reset(){}static extractPureBits(t){const e=t.getTopLeftOnBit(),r=t.getBottomRightOnBit();if(null===e||null===r)throw new R;const n=this.moduleSize(e,t);let i=e[1],s=r[1],o=e[0],a=r[0];if(o>=a||i>=s)throw new R;if(s-i!=a-o&&(a=o+(s-i))>=t.getWidth())throw new R;const l=Math.round((a-o+1)/n),h=Math.round((s-i+1)/n);if(l<=0||h<=0)throw new R;if(h!==l)throw new R;const c=Math.floor(n/2);i+=c;const u=(o+=c)+Math.floor((l-1)*n)-a;if(u>0){if(u>c)throw new R;o-=u}const d=i+Math.floor((h-1)*n)-s;if(d>0){if(d>c)throw new R;i-=d}const g=new T(l,h);for(let e=0;e0;){const o=Pe.findGuardPattern(t,i,--n,r,!1,s,l);if(null==o){n++;break}e=o}o[0]=new rt(e[0],n),o[1]=new rt(e[1],n),a=!0;break}}let h=n+1;if(a){let n=0,i=Int32Array.from([Math.trunc(o[0].getX()),Math.trunc(o[1].getX())]);for(;hPe.SKIPPED_ROW_COUNT_MAX)break;n++}}h-=n+1,o[2]=new rt(i[0],h),o[3]=new rt(i[1],h)}return h-n0&&l++s?n-s:s-n;if(l>r)return 1/0;a+=l}return a/i}}Pe.INDEXES_START_PATTERN=Int32Array.from([0,4,1,5]),Pe.INDEXES_STOP_PATTERN=Int32Array.from([6,2,7,3]),Pe.MAX_AVG_VARIANCE=.42,Pe.MAX_INDIVIDUAL_VARIANCE=.8,Pe.START_PATTERN=Int32Array.from([8,1,1,1,1,1,1,3]),Pe.STOP_PATTERN=Int32Array.from([7,1,1,3,1,1,1,2,1]),Pe.MAX_PIXEL_DRIFT=3,Pe.MAX_PATTERN_DRIFT=5,Pe.SKIPPED_ROW_COUNT_MAX=25,Pe.ROW_STEP=5,Pe.BARCODE_MIN_HEIGHT=10;class Le{constructor(t,e){if(0===e.length)throw new o;this.field=t;let r=e.length;if(r>1&&0===e[0]){let t=1;for(;tr.length){let t=e;e=r,r=t}let n=new Int32Array(r.length),i=r.length-e.length;c.arraycopy(r,0,n,0,i);for(let t=i;t=0;e--){let r=this.getCoefficient(e);0!==r&&(r<0?(t.append(" - "),r=-r):t.length()>0&&t.append(" + "),0!==e&&1===r||t.append(r),0!==e&&(1===e?t.append("x"):(t.append("x^"),t.append(e))))}return t.toString()}}class Fe{add(t,e){return(t+e)%this.modulus}subtract(t,e){return(this.modulus+t-e)%this.modulus}exp(t){return this.expTable[t]}log(t){if(0===t)throw new o;return this.logTable[t]}inverse(t){if(0===t)throw new K;return this.expTable[this.modulus-this.logTable[t]-1]}multiply(t,e){return 0===t||0===e?0:this.expTable[(this.logTable[t]+this.logTable[e])%(this.modulus-1)]}getSize(){return this.modulus}equals(t){return t===this}}class ve extends Fe{constructor(t,e){super(),this.modulus=t,this.expTable=new Int32Array(t),this.logTable=new Int32Array(t);let r=1;for(let n=0;n0;t--){let r=n.evaluateAt(this.field.exp(t));i[e-t]=r,0!==r&&(s=!0)}if(!s)return 0;let o=this.field.getOne();if(null!=r)for(const e of r){let r=this.field.exp(t.length-1-e),n=new Le(this.field,new Int32Array([this.field.subtract(0,r),1]));o=o.multiply(n)}let a=new Le(this.field,i),h=this.runEuclideanAlgorithm(this.field.buildMonomial(e,1),a,e),c=h[0],u=h[1],d=this.findErrorLocations(c),g=this.findErrorMagnitudes(u,c,d);for(let e=0;e=Math.round(r/2);){let t=n,e=s;if(s=o,(n=i).isZero())throw l.getChecksumInstance();i=t;let r=this.field.getZero(),a=n.getCoefficient(n.getDegree()),h=this.field.inverse(a);for(;i.getDegree()>=n.getDegree()&&!i.isZero();){let t=i.getDegree()-n.getDegree(),e=this.field.multiply(i.getCoefficient(i.getDegree()),h);r=r.add(this.field.buildMonomial(t,e)),i=i.subtract(n.multiplyByMonomial(t,e))}o=r.multiply(s).subtract(e).negative()}let a=o.getCoefficient(0);if(0===a)throw l.getChecksumInstance();let h=this.field.inverse(a);return[o.multiply(h),i.multiply(h)]}findErrorLocations(t){let e=t.getDegree(),r=new Int32Array(e),n=0;for(let i=1;i0){let e=r?this.topLeft:this.topRight,i=Math.trunc(e.getY()-t);i<0&&(i=0);let o=new rt(e.getX(),i);r?n=o:s=o}if(e>0){let t=r?this.bottomLeft:this.bottomRight,n=Math.trunc(t.getY()+e);n>=this.image.getHeight()&&(n=this.image.getHeight()-1);let s=new rt(t.getX(),n);r?i=s:o=s}return new xe(this.image,n,i,s,o)}getMinX(){return this.minX}getMaxX(){return this.maxX}getMinY(){return this.minY}getMaxY(){return this.maxY}getTopLeft(){return this.topLeft}getTopRight(){return this.topRight}getBottomLeft(){return this.bottomLeft}getBottomRight(){return this.bottomRight}}class Ve{constructor(t,e,r,n){this.columnCount=t,this.errorCorrectionLevel=n,this.rowCountUpperPart=e,this.rowCountLowerPart=r,this.rowCount=e+r}getColumnCount(){return this.columnCount}getErrorCorrectionLevel(){return this.errorCorrectionLevel}getRowCount(){return this.rowCount}getRowCountUpperPart(){return this.rowCountUpperPart}getRowCountLowerPart(){return this.rowCountLowerPart}}class Ue{constructor(){this.buffer=""}static form(t,e){let r=-1;return t.replace(/%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g,function(t,n,i,s,o,a){if("%%"===t)return"%";if(void 0===e[++r])return;t=s?parseInt(s.substr(1)):void 0;let l,h=o?parseInt(o.substr(1)):void 0;switch(a){case"s":l=e[r];break;case"c":l=e[r][0];break;case"f":l=parseFloat(e[r]).toFixed(t);break;case"p":l=parseFloat(e[r]).toPrecision(t);break;case"e":l=parseFloat(e[r]).toExponential(t);break;case"x":l=parseInt(e[r]).toString(h||16);break;case"d":l=parseFloat(parseInt(e[r],h||10).toPrecision(t)).toFixed(0)}l="object"==typeof l?JSON.stringify(l):(+l).toString(h);let c=parseInt(i),u=i&&i[0]+""=="0"?"0":" ";for(;l.length=0&&null!=(e=this.codewords[n]))return e;if((n=this.imageRowToCodewordIndex(t)+r)r,getValue:()=>n};i.getValue()>t?(t=i.getValue(),(e=[]).push(i.getKey())):i.getValue()===t&&e.push(i.getKey())}return be.toIntArray(e)}getConfidence(t){return this.values.get(t)}}class Xe extends He{constructor(t,e){super(t),this._isLeft=e}setRowNumbers(){for(let t of this.getCodewords())null!=t&&t.setRowNumberAsRowIndicatorColumn()}adjustCompleteIndicatorColumnRowNumbers(t){let e=this.getCodewords();this.setRowNumbers(),this.removeIncorrectCodewords(e,t);let r=this.getBoundingBox(),n=this._isLeft?r.getTopLeft():r.getTopRight(),i=this._isLeft?r.getBottomLeft():r.getBottomRight(),s=this.imageRowToCodewordIndex(Math.trunc(n.getY())),o=this.imageRowToCodewordIndex(Math.trunc(i.getY())),a=-1,l=1,h=0;for(let r=s;r=t.getRowCount()||i>r)e[r]=null;else{let t,s=(t=l>2?(l-2)*i:i)>=r;for(let n=1;n<=t&&!s;n++)s=null!=e[r-n];s?e[r]=null:(a=n.getRowNumber(),h=1)}}}getRowHeights(){let t=this.getBarcodeMetadata();if(null==t)return null;this.adjustIncompleteIndicatorColumnRowNumbers(t);let e=new Int32Array(t.getRowCount());for(let t of this.getCodewords())if(null!=t){let r=t.getRowNumber();if(r>=e.length)continue;e[r]++}return e}adjustIncompleteIndicatorColumnRowNumbers(t){let e=this.getBoundingBox(),r=this._isLeft?e.getTopLeft():e.getTopRight(),n=this._isLeft?e.getBottomLeft():e.getBottomRight(),i=this.imageRowToCodewordIndex(Math.trunc(r.getY())),s=this.imageRowToCodewordIndex(Math.trunc(n.getY())),o=this.getCodewords(),a=-1;for(let e=i;e=t.getRowCount()?o[e]=null:a=r.getRowNumber())}}getBarcodeMetadata(){let t=this.getCodewords(),e=new Ge,r=new Ge,n=new Ge,i=new Ge;for(let s of t){if(null==s)continue;s.setRowNumberAsRowIndicatorColumn();let t=s.getValue()%30,o=s.getRowNumber();switch(this._isLeft||(o+=2),o%3){case 0:r.setValue(3*t+1);break;case 1:i.setValue(t/3),n.setValue(t%3);break;case 2:e.setValue(t+1)}}if(0===e.getValue().length||0===r.getValue().length||0===n.getValue().length||0===i.getValue().length||e.getValue()[0]<1||r.getValue()[0]+n.getValue()[0]be.MAX_ROWS_IN_BARCODE)return null;let s=new Ve(e.getValue()[0],r.getValue()[0],n.getValue()[0],i.getValue()[0]);return this.removeIncorrectCodewords(t,s),s}removeIncorrectCodewords(t,e){for(let r=0;re.getRowCount())t[r]=null;else switch(this._isLeft||(s+=2),s%3){case 0:3*i+1!==e.getRowCountUpperPart()&&(t[r]=null);break;case 1:Math.trunc(i/3)===e.getErrorCorrectionLevel()&&i%3===e.getRowCountLowerPart()||(t[r]=null);break;case 2:i+1!==e.getColumnCount()&&(t[r]=null)}}}isLeft(){return this._isLeft}toString(){return"IsLeft: "+this._isLeft+"\n"+super.toString()}}class We{constructor(t,e){this.ADJUST_ROW_NUMBER_SKIP=2,this.barcodeMetadata=t,this.barcodeColumnCount=t.getColumnCount(),this.boundingBox=e,this.detectionResultColumns=new Array(this.barcodeColumnCount+2)}getDetectionResultColumns(){this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[0]),this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[this.barcodeColumnCount+1]);let t,e=be.MAX_CODEWORDS_IN_BARCODE;do{t=e,e=this.adjustRowNumbersAndGetCount()}while(e>0&&e0&&i0&&(o[0]=r[e-1],o[4]=i[e-1],o[5]=s[e-1]),e>1&&(o[8]=r[e-2],o[10]=i[e-2],o[11]=s[e-2]),e>=1;r=1&e,Ye.RATIOS_TABLE[t]||(Ye.RATIOS_TABLE[t]=new Array(be.BARS_IN_MODULE)),Ye.RATIOS_TABLE[t][be.BARS_IN_MODULE-n-1]=Math.fround(i/be.MODULES_IN_CODEWORD)}}this.bSymbolTableReady=!0}static getDecodedValue(t){let e=Ye.getDecodedCodewordValue(Ye.sampleBitCounts(t));return-1!==e?e:Ye.getClosestDecodedValue(t)}static sampleBitCounts(t){let e=tt.sum(t),r=new Int32Array(be.BARS_IN_MODULE),n=0,i=0;for(let s=0;s1)for(let n=0;n=n)break}enew Array(be.BARS_IN_MODULE));class Ze{constructor(){this.segmentCount=-1,this.fileSize=-1,this.timestamp=-1,this.checksum=-1}getSegmentIndex(){return this.segmentIndex}setSegmentIndex(t){this.segmentIndex=t}getFileId(){return this.fileId}setFileId(t){this.fileId=t}getOptionalData(){return this.optionalData}setOptionalData(t){this.optionalData=t}isLastSegment(){return this.lastSegment}setLastSegment(t){this.lastSegment=t}getSegmentCount(){return this.segmentCount}setSegmentCount(t){this.segmentCount=t}getSender(){return this.sender||null}setSender(t){this.sender=t}getAddressee(){return this.addressee||null}setAddressee(t){this.addressee=t}getFileName(){return this.fileName}setFileName(t){this.fileName=t}getFileSize(){return this.fileSize}setFileSize(t){this.fileSize=t}getChecksum(){return this.checksum}setChecksum(t){this.checksum=t}getTimestamp(){return this.timestamp}setTimestamp(t){this.timestamp=t}}class Ke{static parseLong(t,e){return parseInt(t,e)}}class qe extends i{}qe.kind="NullPointerException";class Qe{writeBytes(t){this.writeBytesOffset(t,0,t.length)}writeBytesOffset(t,e,r){if(null==t)throw new qe;if(e<0||e>t.length||r<0||e+r>t.length||e+r<0)throw new u;if(0!==r)for(let n=0;n0&&this.grow(t)}grow(t){let e=this.buf.length<<1;if(e-t<0&&(e=t),e<0){if(t<0)throw new je;e=f.MAX_VALUE}this.buf=g.copyOfUint8Array(this.buf,e)}write(t){this.ensureCapacity(this.count+1),this.buf[this.count]=t,this.count+=1}writeBytesOffset(t,e,r){if(e<0||e>t.length||r<0||e+r-t.length>0)throw new u;this.ensureCapacity(this.count+r),c.arraycopy(t,e,this.buf,this.count,r),this.count+=r}writeTo(t){t.writeBytesOffset(this.buf,0,this.count)}reset(){this.count=0}toByteArray(){return g.copyOfUint8Array(this.buf,this.count)}size(){return this.count}toString(t){return t?"string"==typeof t?this.toString_string(t):this.toString_number(t):this.toString_void()}toString_void(){return new String(this.buf).toString()}toString_string(t){return new String(this.buf).toString()}toString_number(t){return new String(this.buf).toString()}close(){}}function $e(){if("undefined"!=typeof window)return window.BigInt||null;if("undefined"!=typeof global)return global.BigInt||null;if("undefined"!=typeof self)return self.BigInt||null;throw new Error("Can't search globals for BigInt!")}let tr;function er(t){if(void 0===tr&&(tr=$e()),null===tr)throw new Error("BigInt is not supported!");return tr(t)}!function(t){t[t.ALPHA=0]="ALPHA",t[t.LOWER=1]="LOWER",t[t.MIXED=2]="MIXED",t[t.PUNCT=3]="PUNCT",t[t.ALPHA_SHIFT=4]="ALPHA_SHIFT",t[t.PUNCT_SHIFT=5]="PUNCT_SHIFT"}(X||(X={}));class rr{static decode(t,e){let r=new p(""),n=m.ISO8859_1;r.enableDecoding(n);let i=1,s=t[i++],o=new Ze;for(;it[0])throw E.getFormatInstance();let n=new Int32Array(rr.NUMBER_OF_SEQUENCE_CODEWORDS);for(let r=0;r0){for(let t=0;t<6;++t)s.write(Number(er(a)>>er(8*(5-t))));a=0,o=0}}n===e[0]&&i0){for(let t=0;t<6;++t)s.write(Number(er(a)>>er(8*(5-t))));a=0,o=0}}}return i.append(I.decode(s.toByteArray(),r)),n}static numericCompaction(t,e,r){let n=0,i=!1,s=new Int32Array(rr.MAX_NUMERIC_CODEWORDS);for(;e0&&(r.append(rr.decodeBase900toBase10(s,n)),n=0)}return e}static decodeBase900toBase10(t,e){let r=er(0);for(let n=0;n@[\\]_`~!\r\t,:\n-.$/\"|*()?{}'",rr.MIXED_CHARS="0123456789&\r\t,:#-.$/+%*=^",rr.EXP900=$e()?function(){let t=[];t[0]=er(1);let e=er(900);t[1]=e;for(let r=2;r<16;r++)t[r]=t[r-1]*e;return t}():[],rr.NUMBER_OF_SEQUENCE_CODEWORDS=2;class nr{constructor(){}static decode(t,e,r,n,i,s,o){let a,l=new xe(t,e,r,n,i),h=null,c=null;for(let r=!0;;r=!1){if(null!=e&&(h=nr.getRowIndicatorColumn(t,l,e,!0,s,o)),null!=n&&(c=nr.getRowIndicatorColumn(t,l,n,!1,s,o)),null==(a=nr.merge(h,c)))throw R.getNotFoundInstance();let i=a.getBoundingBox();if(!r||null==i||!(i.getMinY()l.getMaxY()))break;l=i}a.setBoundingBox(l);let u=a.getBarcodeColumnCount()+1;a.setDetectionResultColumn(0,h),a.setDetectionResultColumn(u,c);let d=null!=h;for(let e=1;e<=u;e++){let r,n=d?e:u-e;if(void 0!==a.getDetectionResultColumn(n))continue;r=0===n||n===u?new Xe(l,0===n):new He(l),a.setDetectionResultColumn(n,r);let i=-1,h=i;for(let e=l.getMinY();e<=l.getMaxY();e++){if((i=nr.getStartColumn(a,n,e,d))<0||i>l.getMaxX()){if(-1===h)continue;i=h}let c=nr.detectCodeword(t,l.getMinX(),l.getMaxX(),d,i,e,s,o);null!=c&&(r.setCodeword(e,c),h=i,s=Math.min(s,c.getWidth()),o=Math.max(o,c.getWidth()))}}return nr.createDecoderResult(a)}static merge(t,e){if(null==t&&null==e)return null;let r=nr.getBarcodeMetadata(t,e);if(null==r)return null;let n=xe.merge(nr.adjustBoundingBox(t),nr.adjustBoundingBox(e));return new We(r,n)}static adjustBoundingBox(t){if(null==t)return null;let e=t.getRowHeights();if(null==e)return null;let r=nr.getMax(e),n=0;for(let t of e)if(n+=r-t,t>0)break;let i=t.getCodewords();for(let t=0;n>0&&null==i[t];t++)n--;let s=0;for(let t=e.length-1;t>=0&&(s+=r-e[t],!(e[t]>0));t--);for(let t=i.length-1;s>0&&null==i[t];t--)s--;return t.getBoundingBox().addMissingRows(n,s,t.isLeft())}static getMax(t){let e=-1;for(let r of t)e=Math.max(e,r);return e}static getBarcodeMetadata(t,e){let r,n;return null==t||null==(r=t.getBarcodeMetadata())?null==e?null:e.getBarcodeMetadata():null==e||null==(n=e.getBarcodeMetadata())?r:r.getColumnCount()!==n.getColumnCount()&&r.getErrorCorrectionLevel()!==n.getErrorCorrectionLevel()&&r.getRowCount()!==n.getRowCount()?null:r}static getRowIndicatorColumn(t,e,r,n,i,s){let o=new Xe(e,n);for(let a=0;a<2;a++){let l=0===a?1:-1,h=Math.trunc(Math.trunc(r.getX()));for(let a=Math.trunc(Math.trunc(r.getY()));a<=e.getMaxY()&&a>=e.getMinY();a+=l){let e=nr.detectCodeword(t,0,t.getWidth(),n,h,a,i,s);null!=e&&(o.setCodeword(a,e),h=n?e.getStartX():e.getEndX())}}return o}static adjustCodewordCount(t,e){let r=e[0][1],n=r.getValue(),i=t.getBarcodeColumnCount()*t.getBarcodeRowCount()-nr.getNumberOfECCodeWords(t.getBarcodeECLevel());if(0===n.length){if(i<1||i>be.MAX_CODEWORDS_IN_BARCODE)throw R.getNotFoundInstance();r.setValue(i)}else n[0]!==i&&r.setValue(i)}static createDecoderResult(t){let e=nr.createBarcodeMatrix(t);nr.adjustCodewordCount(t,e);let r=new Array,n=new Int32Array(t.getBarcodeRowCount()*t.getBarcodeColumnCount()),i=[],s=new Array;for(let o=0;o0;){for(let t=0;tnew Array(t.getBarcodeColumnCount()+2));for(let t=0;t=0){if(n>=e.length)continue;e[n][r].setValue(t.getValue())}}r++}return e}static isValidBarcodeColumn(t,e){return e>=0&&e<=t.getBarcodeColumnCount()+1}static getStartColumn(t,e,r,n){let i=n?1:-1,s=null;if(nr.isValidBarcodeColumn(t,e-i)&&(s=t.getDetectionResultColumn(e-i).getCodeword(r)),null!=s)return n?s.getEndX():s.getStartX();if(null!=(s=t.getDetectionResultColumn(e).getCodewordNearby(r)))return n?s.getStartX():s.getEndX();if(nr.isValidBarcodeColumn(t,e-i)&&(s=t.getDetectionResultColumn(e-i).getCodewordNearby(r)),null!=s)return n?s.getEndX():s.getStartX();let o=0;for(;nr.isValidBarcodeColumn(t,e-i);){e-=i;for(let r of t.getDetectionResultColumn(e).getCodewords())if(null!=r)return(n?r.getEndX():r.getStartX())+i*o*(r.getEndX()-r.getStartX());o++}return n?t.getBoundingBox().getMinX():t.getBoundingBox().getMaxX()}static detectCodeword(t,e,r,n,i,s,o,a){i=nr.adjustCodewordStartColumn(t,e,r,n,i,s);let l,h=nr.getModuleBitCount(t,e,r,n,i,s);if(null==h)return null;let c=tt.sum(h);if(n)l=i+c;else{for(let t=0;t=e)&&l=e:onr.CODEWORD_SKEW_SIZE)return i;o+=a}a=-a,n=!n}return o}static checkCodewordSkew(t,e,r){return e-nr.CODEWORD_SKEW_SIZE<=t&&t<=r+nr.CODEWORD_SKEW_SIZE}static decodeCodewords(t,e,r){if(0===t.length)throw E.getFormatInstance();let n=1<r/2+nr.MAX_ERRORS||r<0||r>nr.MAX_EC_CODEWORDS)throw l.getChecksumInstance();return nr.errorCorrection.decode(t,r,e)}static verifyCodewordCount(t,e){if(t.length<4)throw E.getFormatInstance();let r=t[0];if(r>t.length)throw E.getFormatInstance();if(0===r){if(!(e>=1;return e}static getCodewordBucketNumber(t){return t instanceof Int32Array?this.getCodewordBucketNumber_Int32Array(t):this.getCodewordBucketNumber_number(t)}static getCodewordBucketNumber_number(t){return nr.getCodewordBucketNumber(nr.getBitCountForCodeword(t))}static getCodewordBucketNumber_Int32Array(t){return(t[0]-t[2]+t[4]-t[6]+9)%9}static toString(t){let e=new Ue;for(let r=0;rt)}static getMaxWidth(t,e){return null==t||null==e?0:Math.trunc(Math.abs(t.getX()-e.getX()))}static getMinWidth(t,e){return null==t||null==e?f.MAX_VALUE:Math.trunc(Math.abs(t.getX()-e.getX()))}static getMaxCodewordWidth(t){return Math.floor(Math.max(Math.max(ir.getMaxWidth(t[0],t[4]),ir.getMaxWidth(t[6],t[2])*be.MODULES_IN_CODEWORD/be.MODULES_IN_STOP_PATTERN),Math.max(ir.getMaxWidth(t[1],t[5]),ir.getMaxWidth(t[7],t[3])*be.MODULES_IN_CODEWORD/be.MODULES_IN_STOP_PATTERN)))}static getMinCodewordWidth(t){return Math.floor(Math.min(Math.min(ir.getMinWidth(t[0],t[4]),ir.getMinWidth(t[6],t[2])*be.MODULES_IN_CODEWORD/be.MODULES_IN_STOP_PATTERN),Math.min(ir.getMinWidth(t[1],t[5]),ir.getMinWidth(t[7],t[3])*be.MODULES_IN_CODEWORD/be.MODULES_IN_STOP_PATTERN)))}reset(){}}class sr extends i{}sr.kind="ReaderException";class or{constructor(t,e){this.verbose=!0===t,e&&this.setHints(e)}decode(t,e){return e&&this.setHints(e),this.decodeInternal(t)}decodeWithState(t){return null!==this.readers&&void 0!==this.readers||this.setHints(null),this.decodeInternal(t)}setHints(t){this.hints=t;const e=null!=t&&void 0!==t.get(C.TRY_HARDER),r=null==t?null:t.get(C.POSSIBLE_FORMATS),n=new Array;if(null!=r){const i=r.some(t=>t===k.UPC_A||t===k.UPC_E||t===k.EAN_13||t===k.EAN_8||t===k.CODABAR||t===k.CODE_39||t===k.CODE_93||t===k.CODE_128||t===k.ITF||t===k.RSS_14||t===k.RSS_EXPANDED);i&&!e&&n.push(new ee(t,this.verbose)),r.includes(k.QR_CODE)&&n.push(new Me),r.includes(k.DATA_MATRIX)&&n.push(new ue),r.includes(k.AZTEC)&&n.push(new dt),r.includes(k.PDF_417)&&n.push(new ir),i&&e&&n.push(new ee(t,this.verbose))}0===n.length&&(e||n.push(new ee(t,this.verbose)),n.push(new Me),n.push(new ue),n.push(new dt),n.push(new ir),e&&n.push(new ee(t,this.verbose))),this.readers=n}reset(){if(null!==this.readers)for(const t of this.readers)t.reset()}decodeInternal(t){if(null===this.readers)throw new sr("No readers where selected, nothing can be read.");for(const e of this.readers)try{return e.decode(t,this.hints)}catch(t){if(t instanceof sr)continue}throw new R("No MultiFormat Readers were able to detect the code.")}}var ar;!function(t){t[t.ERROR_CORRECTION=0]="ERROR_CORRECTION",t[t.CHARACTER_SET=1]="CHARACTER_SET",t[t.DATA_MATRIX_SHAPE=2]="DATA_MATRIX_SHAPE",t[t.MIN_SIZE=3]="MIN_SIZE",t[t.MAX_SIZE=4]="MAX_SIZE",t[t.MARGIN=5]="MARGIN",t[t.PDF417_COMPACT=6]="PDF417_COMPACT",t[t.PDF417_COMPACTION=7]="PDF417_COMPACTION",t[t.PDF417_DIMENSIONS=8]="PDF417_DIMENSIONS",t[t.AZTEC_LAYERS=9]="AZTEC_LAYERS",t[t.QR_VERSION=10]="QR_VERSION"}(ar||(ar={}));var lr=ar;class hr{constructor(t){this.field=t,this.cachedGenerators=[],this.cachedGenerators.push(new Z(t,Int32Array.from([1])))}buildGenerator(t){const e=this.cachedGenerators;if(t>=e.length){let r=e[e.length-1];const n=this.field;for(let i=e.length;i<=t;i++){const t=r.multiply(new Z(n,Int32Array.from([1,n.exp(i-1+n.getGeneratorBase())])));e.push(t),r=t}}return e[t]}encode(t,e){if(0===e)throw new o("No error correction bytes");const r=t.length-e;if(r<=0)throw new o("No data bytes provided");const n=this.buildGenerator(e),i=new Int32Array(r);c.arraycopy(t,0,i,0,r);let s=new Z(this.field,i);const a=(s=s.multiplyByMonomial(e,1)).divide(n)[1].getCoefficients(),l=e-a.length;for(let e=0;e=5&&(r+=cr.N1+(n-5)),n=1,o=i)}n>=5&&(r+=cr.N1+(n-5))}return r}}cr.N1=3,cr.N2=3,cr.N3=40,cr.N4=10;class ur{constructor(t,e){this.width=t,this.height=e;const r=new Array(e);for(let n=0;n!==e;n++)r[n]=new Uint8Array(t);this.bytes=r}getHeight(){return this.height}getWidth(){return this.width}get(t,e){return this.bytes[e][t]}getArray(){return this.bytes}setNumber(t,e,r){this.bytes[e][t]=r}setBoolean(t,e,r){this.bytes[e][t]=r?1:0}clear(t){for(const e of this.bytes)g.fill(e,t)}equals(t){if(!(t instanceof ur))return!1;const e=t;if(this.width!==e.width)return!1;if(this.height!==e.height)return!1;for(let t=0,r=this.height;t>\n"),t.toString()}setMode(t){this.mode=t}setECLevel(t){this.ecLevel=t}setVersion(t){this.version=t}setMaskPattern(t){this.maskPattern=t}setMatrix(t){this.matrix=t}static isValidMaskPattern(t){return t>=0&&t0;){for(6===s&&(s-=1);o>=0&&o=r;)t^=e<=0)for(let t=0;t!==r;t++){const r=n[t];r>=0&&fr.isEmpty(e.get(r,i))&&fr.embedPositionAdjustmentPattern(r-2,i-2,e)}}}}fr.POSITION_DETECTION_PATTERN=Array.from([Int32Array.from([1,1,1,1,1,1,1]),Int32Array.from([1,0,0,0,0,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,0,0,0,0,1]),Int32Array.from([1,1,1,1,1,1,1])]),fr.POSITION_ADJUSTMENT_PATTERN=Array.from([Int32Array.from([1,1,1,1,1]),Int32Array.from([1,0,0,0,1]),Int32Array.from([1,0,1,0,1]),Int32Array.from([1,0,0,0,1]),Int32Array.from([1,1,1,1,1])]),fr.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE=Array.from([Int32Array.from([-1,-1,-1,-1,-1,-1,-1]),Int32Array.from([6,18,-1,-1,-1,-1,-1]),Int32Array.from([6,22,-1,-1,-1,-1,-1]),Int32Array.from([6,26,-1,-1,-1,-1,-1]),Int32Array.from([6,30,-1,-1,-1,-1,-1]),Int32Array.from([6,34,-1,-1,-1,-1,-1]),Int32Array.from([6,22,38,-1,-1,-1,-1]),Int32Array.from([6,24,42,-1,-1,-1,-1]),Int32Array.from([6,26,46,-1,-1,-1,-1]),Int32Array.from([6,28,50,-1,-1,-1,-1]),Int32Array.from([6,30,54,-1,-1,-1,-1]),Int32Array.from([6,32,58,-1,-1,-1,-1]),Int32Array.from([6,34,62,-1,-1,-1,-1]),Int32Array.from([6,26,46,66,-1,-1,-1]),Int32Array.from([6,26,48,70,-1,-1,-1]),Int32Array.from([6,26,50,74,-1,-1,-1]),Int32Array.from([6,30,54,78,-1,-1,-1]),Int32Array.from([6,30,56,82,-1,-1,-1]),Int32Array.from([6,30,58,86,-1,-1,-1]),Int32Array.from([6,34,62,90,-1,-1,-1]),Int32Array.from([6,28,50,72,94,-1,-1]),Int32Array.from([6,26,50,74,98,-1,-1]),Int32Array.from([6,30,54,78,102,-1,-1]),Int32Array.from([6,28,54,80,106,-1,-1]),Int32Array.from([6,32,58,84,110,-1,-1]),Int32Array.from([6,30,58,86,114,-1,-1]),Int32Array.from([6,34,62,90,118,-1,-1]),Int32Array.from([6,26,50,74,98,122,-1]),Int32Array.from([6,30,54,78,102,126,-1]),Int32Array.from([6,26,52,78,104,130,-1]),Int32Array.from([6,30,56,82,108,134,-1]),Int32Array.from([6,34,60,86,112,138,-1]),Int32Array.from([6,30,58,86,114,142,-1]),Int32Array.from([6,34,62,90,118,146,-1]),Int32Array.from([6,30,54,78,102,126,150]),Int32Array.from([6,24,50,76,102,128,154]),Int32Array.from([6,28,54,80,106,132,158]),Int32Array.from([6,32,58,84,110,136,162]),Int32Array.from([6,26,54,82,110,138,166]),Int32Array.from([6,30,58,86,114,142,170])]),fr.TYPE_INFO_COORDINATES=Array.from([Int32Array.from([8,0]),Int32Array.from([8,1]),Int32Array.from([8,2]),Int32Array.from([8,3]),Int32Array.from([8,4]),Int32Array.from([8,5]),Int32Array.from([8,7]),Int32Array.from([8,8]),Int32Array.from([7,8]),Int32Array.from([5,8]),Int32Array.from([4,8]),Int32Array.from([3,8]),Int32Array.from([2,8]),Int32Array.from([1,8]),Int32Array.from([0,8])]),fr.VERSION_INFO_POLY=7973,fr.TYPE_INFO_POLY=1335,fr.TYPE_INFO_MASK_PATTERN=21522;class wr{constructor(t,e){this.dataBytes=t,this.errorCorrectionBytes=e}getDataBytes(){return this.dataBytes}getErrorCorrectionBytes(){return this.errorCorrectionBytes}}class Ar{constructor(){}static calculateMaskPenalty(t){return cr.applyMaskPenaltyRule1(t)+cr.applyMaskPenaltyRule2(t)+cr.applyMaskPenaltyRule3(t)+cr.applyMaskPenaltyRule4(t)}static encode(t,e,r=null){let n=Ar.DEFAULT_BYTE_MODE_ENCODING;const i=null!==r&&void 0!==r.get(lr.CHARACTER_SET);i&&(n=r.get(lr.CHARACTER_SET).toString());const s=this.chooseMode(t,n),o=new w;if(s===_e.BYTE&&(i||Ar.DEFAULT_BYTE_MODE_ENCODING!==n)){const t=m.getCharacterSetECIByName(n);void 0!==t&&this.appendECI(t,o)}this.appendModeInfo(s,o);const a=new w;let l;if(this.appendBytes(t,s,a,n),null!==r&&void 0!==r.get(lr.QR_VERSION)){const t=Number.parseInt(r.get(lr.QR_VERSION).toString(),10);l=Ae.getVersionForNumber(t);const n=this.calculateBitsNeeded(s,o,a,l);if(!this.willFit(n,l,e))throw new gr("Data too big for requested version")}else l=this.recommendVersion(e,s,o,a);const h=new w;h.appendBitArray(o);const c=s===_e.BYTE?a.getSizeInBytes():t.length;this.appendLengthInfo(c,l,s,h),h.appendBitArray(a);const u=l.getECBlocksForLevel(e),d=l.getTotalCodewords()-u.getTotalECCodewords();this.terminateBits(d,h);const g=this.interleaveWithECBytes(h,l.getTotalCodewords(),d,u.getNumBlocks()),f=new dr;f.setECLevel(e),f.setMode(s),f.setVersion(l);const A=l.getDimensionForVersion(),C=new ur(A,A),E=this.chooseMaskPattern(g,e,l,C);return f.setMaskPattern(E),fr.buildMatrix(g,e,l,E,C),f.setMatrix(C),f}static recommendVersion(t,e,r,n){const i=this.calculateBitsNeeded(e,r,n,Ae.getVersionForNumber(1)),s=this.chooseVersion(i,t),o=this.calculateBitsNeeded(e,r,n,s);return this.chooseVersion(o,t)}static calculateBitsNeeded(t,e,r,n){return e.getSize()+t.getCharacterCountBits(n)+r.getSize()}static getAlphanumericCode(t){return t159)&&(r<224||r>235))return!1}return!0}static chooseMaskPattern(t,e,r,n){let i=Number.MAX_SAFE_INTEGER,s=-1;for(let o=0;o=(t+7)/8}static terminateBits(t,e){const r=8*t;if(e.getSize()>r)throw new gr("data bits cannot fit in the QR Code"+e.getSize()+" > "+r);for(let t=0;t<4&&e.getSize()0)for(let t=n;t<8;t++)e.appendBit(!1);const i=t-e.getSizeInBytes();for(let t=0;t=r)throw new gr("Block ID too large");const o=t%r,a=r-o,l=Math.floor(t/r),h=l+1,c=Math.floor(e/r),u=c+1,d=l-c,g=h-u;if(d!==g)throw new gr("EC bytes mismatch");if(r!==a+o)throw new gr("RS blocks mismatch");if(t!==(c+d)*a+(u+g)*o)throw new gr("Total bytes mismatch");n=1<=0&&e<=9}static appendNumericBytes(t,e){const r=t.length;let n=0;for(;n=33088&&n<=40956?i=n-33088:n>=57408&&n<=60351&&(i=n-49472),-1===i)throw new gr("Invalid byte sequence");const s=192*(i>>8)+(255&i);e.appendBits(s,13)}}static appendECI(t,e){e.appendBits(_e.ECI.getBits(),4),e.appendBits(t.getValue(),8)}}Ar.ALPHANUMERIC_TABLE=Int32Array.from([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,36,-1,-1,-1,37,38,-1,-1,-1,-1,39,40,-1,41,42,43,0,1,2,3,4,5,6,7,8,9,44,-1,-1,-1,-1,-1,-1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1]),Ar.DEFAULT_BYTE_MODE_ENCODING=m.UTF8.getName();class Cr{write(t,e,r,n=null){if(0===t.length)throw new o("Found empty contents");if(e<0||r<0)throw new o("Requested dimensions are too small: "+e+"x"+r);let i=de.L,s=Cr.QUIET_ZONE_SIZE;null!==n&&(void 0!==n.get(lr.ERROR_CORRECTION)&&(i=de.fromString(n.get(lr.ERROR_CORRECTION).toString())),void 0!==n.get(lr.MARGIN)&&(s=Number.parseInt(n.get(lr.MARGIN).toString(),10)));const a=Ar.encode(t,i,n);return this.renderResult(a,e,r,s)}writeToDom(t,e,r,n,i=null){"string"==typeof t&&(t=document.querySelector(t));const s=this.write(e,r,n,i);t&&t.appendChild(s)}renderResult(t,e,r,n){const i=t.getMatrix();if(null===i)throw new j;const s=i.getWidth(),o=i.getHeight(),a=s+2*n,l=o+2*n,h=Math.max(e,a),c=Math.max(r,l),u=Math.min(Math.floor(h/a),Math.floor(c/l)),d=Math.floor((h-s*u)/2),g=Math.floor((c-o*u)/2),f=this.createSVGElement(h,c);for(let t=0,e=g;te||i+a>r)throw new o("Crop rectangle does not fit within image data.");l&&this.reverseHorizontal(s,a)}getRow(t,e){if(t<0||t>=this.getHeight())throw new o("Requested row is outside the image: "+t);const r=this.getWidth();(null==e||e.length>16&255,s=r>>7&510,o=255&r;i[e]=(n+s+o)/4&255}this.luminances=i}else this.luminances=t;if(void 0===n&&(this.dataWidth=e),void 0===i&&(this.dataHeight=r),void 0===s&&(this.left=0),void 0===a&&(this.top=0),this.left+e>this.dataWidth||this.top+r>this.dataHeight)throw new o("Crop rectangle does not fit within image data.")}getRow(t,e){if(t<0||t>=this.getHeight())throw new o("Requested row is outside the image: "+t);const r=this.getWidth();(null==e||e.length"}}class Dr extends Nr{constructor(t,e,r){super(t,0,0),this.binaryShiftStart=e,this.binaryShiftByteCount=r}appendTo(t,e){for(let r=0;r62?t.appendBits(this.binaryShiftByteCount-31,16):0===r?t.appendBits(Math.min(this.binaryShiftByteCount,31),5):t.appendBits(this.binaryShiftByteCount-31,5)),t.appendBits(e[this.binaryShiftStart+r],8)}addBinaryShift(t,e){return new Dr(this,t,e)}toString(){return"<"+this.binaryShiftStart+"::"+(this.binaryShiftStart+this.binaryShiftByteCount-1)+">"}}function yr(t,e,r){return new Nr(t,e,r)}const Or=["UPPER","LOWER","DIGIT","MIXED","PUNCT"],Mr=0,br=1,Br=2,Pr=3,Lr=4,Fr=new Nr(null,0,0),vr=[Int32Array.from([0,327708,327710,327709,656318]),Int32Array.from([590318,0,327710,327709,656318]),Int32Array.from([262158,590300,0,590301,932798]),Int32Array.from([327709,327708,656318,0,327710]),Int32Array.from([327711,656380,656382,656381,0])];const kr=function(t){for(let e of t)g.fill(e,-1);return t[Mr][Lr]=0,t[br][Lr]=0,t[br][Mr]=28,t[Pr][Lr]=0,t[Br][Lr]=0,t[Br][Mr]=15,t}(g.createInt32Array(6,6));class xr{constructor(t,e,r,n){this.token=t,this.mode=e,this.binaryShiftByteCount=r,this.bitCount=n}getMode(){return this.mode}getToken(){return this.token}getBinaryShiftByteCount(){return this.binaryShiftByteCount}getBitCount(){return this.bitCount}latchAndAppend(t,e){let r=this.bitCount,n=this.token;if(t!==this.mode){let e=vr[this.mode][t];n=yr(n,65535&e,e>>16),r+=e>>16}let i=t===Br?4:5;return n=yr(n,e,i),new xr(n,t,0,r+i)}shiftAndAppend(t,e){let r=this.token,n=this.mode===Br?4:5;return r=yr(r,kr[this.mode][t],n),r=yr(r,e,5),new xr(r,this.mode,0,this.bitCount+n+5)}addBinaryShiftChar(t){let e=this.token,r=this.mode,n=this.bitCount;if(this.mode===Lr||this.mode===Br){let t=vr[r][Mr];e=yr(e,65535&t,t>>16),n+=t>>16,r=Mr}let i=0===this.binaryShiftByteCount||31===this.binaryShiftByteCount?18:62===this.binaryShiftByteCount?9:8,s=new xr(e,r,this.binaryShiftByteCount+1,n+i);return 2078===s.binaryShiftByteCount&&(s=s.endBinaryShift(t+1)),s}endBinaryShift(t){if(0===this.binaryShiftByteCount)return this;let e=this.token;return e=function(t,e,r){return new Dr(t,e,r)}(e,t-this.binaryShiftByteCount,this.binaryShiftByteCount),new xr(e,this.mode,0,this.bitCount)}isBetterThanOrEqualTo(t){let e=this.bitCount+(vr[this.mode][t.mode]>>16);return this.binaryShiftByteCountt.binaryShiftByteCount&&t.binaryShiftByteCount>0&&(e+=10),e<=t.bitCount}toBitArray(t){let e=[];for(let r=this.endBinaryShift(t.length).token;null!==r;r=r.getPrevious())e.unshift(r);let r=new w;for(const n of e)n.appendTo(r,t);return r}toString(){return S.format("%s bits=%d bytes=%d",Or[this.mode],this.bitCount,this.binaryShiftByteCount)}static calculateBinaryShiftCost(t){return t.binaryShiftByteCount>62?21:t.binaryShiftByteCount>31?20:t.binaryShiftByteCount>0?10:0}}xr.INITIAL_STATE=new xr(Fr,Mr,0,0);const Vr=function(t){const e=S.getCharCode(" "),r=S.getCharCode("."),n=S.getCharCode(",");t[Mr][e]=1;const i=S.getCharCode("Z"),s=S.getCharCode("A");for(let e=s;e<=i;e++)t[Mr][e]=e-s+2;t[br][e]=1;const o=S.getCharCode("z"),a=S.getCharCode("a");for(let e=a;e<=o;e++)t[br][e]=e-a+2;t[Br][e]=1;const l=S.getCharCode("9"),h=S.getCharCode("0");for(let e=h;e<=l;e++)t[Br][e]=e-h+2;t[Br][n]=12,t[Br][r]=13;const c=["\0"," ","","","","","","","","\b","\t","\n","\v","\f","\r","","","","","","@","\\","^","_","`","|","~",""];for(let e=0;e","?","[","]","{","}"];for(let e=0;e0&&(t[Lr][S.getCharCode(u[e])]=e);return t}(g.createInt32Array(5,256));class Ur{constructor(t){this.text=t}encode(){const t=S.getCharCode(" "),e=S.getCharCode("\n");let r=Tr.singletonList(xr.INITIAL_STATE);for(let n=0;n0?(r=Ur.updateStateListForPair(r,n,i),n++):r=this.updateStateListForChar(r,n)}return Tr.min(r,(t,e)=>t.getBitCount()-e.getBitCount()).toBitArray(this.text)}updateStateListForChar(t,e){const r=[];for(let n of t)this.updateStateForChar(n,e,r);return Ur.simplifyStates(r)}updateStateForChar(t,e,r){let n=255&this.text[e],i=Vr[t.getMode()][n]>0,s=null;for(let o=0;o<=Lr;o++){let a=Vr[o][n];if(a>0){if(null==s&&(s=t.endBinaryShift(e)),!i||o===t.getMode()||o===Br){const t=s.latchAndAppend(o,a);r.push(t)}if(!i&&kr[t.getMode()][o]>=0){const t=s.shiftAndAppend(o,a);r.push(t)}}}if(t.getBinaryShiftByteCount()>0||0===Vr[t.getMode()][n]){let n=t.addBinaryShiftChar(e);r.push(n)}}static updateStateListForPair(t,e,r){const n=[];for(let i of t)this.updateStateForPair(i,e,r,n);return this.simplifyStates(n)}static updateStateForPair(t,e,r,n){let i=t.endBinaryShift(e);if(n.push(i.latchAndAppend(Lr,r)),t.getMode()!==Lr&&n.push(i.shiftAndAppend(Lr,r)),3===r||4===r){let t=i.latchAndAppend(Br,16-r).latchAndAppend(Br,1);n.push(t)}if(t.getBinaryShiftByteCount()>0){let r=t.addBinaryShiftChar(e).addBinaryShiftChar(e+1);n.push(r)}}static simplifyStates(t){let e=[];for(const r of t){let t=!0;for(const n of e){if(n.isBetterThanOrEqualTo(r)){t=!1;break}r.isBetterThanOrEqualTo(n)&&(e=e.filter(t=>t!==n))}t&&e.push(r)}return e}}class Hr{constructor(){}static encodeBytes(t){return Hr.encode(t,Hr.DEFAULT_EC_PERCENT,Hr.DEFAULT_AZTEC_LAYERS)}static encode(t,e,r){let n,i,s,a,l,h=new Ur(t).encode(),c=f.truncDivision(h.getSize()*e,100)+11,u=h.getSize()+c;if(r!==Hr.DEFAULT_AZTEC_LAYERS){if(n=r<0,(i=Math.abs(r))>(n?Hr.MAX_NB_BITS_COMPACT:Hr.MAX_NB_BITS))throw new o(S.format("Illegal value %s for layers",r));let t=(s=Hr.totalBitsInLayer(i,n))-s%(a=Hr.WORD_SIZE[i]);if((l=Hr.stuffBits(h,a)).getSize()+c>t)throw new o("Data to large for user specified layer");if(n&&l.getSize()>64*a)throw new o("Data to large for user specified layer")}else{a=0,l=null;for(let t=0;;t++){if(t>Hr.MAX_NB_BITS)throw new o("Data too large for an Aztec code");if(i=(n=t<=3)?t+1:t,u>(s=Hr.totalBitsInLayer(i,n)))continue;null!=l&&a===Hr.WORD_SIZE[i]||(a=Hr.WORD_SIZE[i],l=Hr.stuffBits(h,a));let e=s-s%a;if(!(n&&l.getSize()>64*a)&&l.getSize()+c<=e)break}}let d,g=Hr.generateCheckWords(l,s,a),w=l.getSize()/a,A=Hr.generateModeMessage(n,i,w),C=(n?11:14)+4*i,E=new Int32Array(C);if(n){d=C;for(let t=0;t=n||t.get(s+r))&&(o|=1<{"use strict";var A,e={d:(A,t)=>{for(var g in t)e.o(t,g)&&!e.o(A,g)&&Object.defineProperty(A,g,{enumerable:!0,get:t[g]})},o:(A,e)=>Object.prototype.hasOwnProperty.call(A,e),r:A=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(A,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{Html5Qrcode:()=>G,Html5QrcodeScanner:()=>Y,Html5QrcodeSupportedFormats:()=>A}),function(A){A[A.QR_CODE=0]="QR_CODE",A[A.AZTEC=1]="AZTEC",A[A.CODABAR=2]="CODABAR",A[A.CODE_39=3]="CODE_39",A[A.CODE_93=4]="CODE_93",A[A.CODE_128=5]="CODE_128",A[A.DATA_MATRIX=6]="DATA_MATRIX",A[A.MAXICODE=7]="MAXICODE",A[A.ITF=8]="ITF",A[A.EAN_13=9]="EAN_13",A[A.EAN_8=10]="EAN_8",A[A.PDF_417=11]="PDF_417",A[A.RSS_14=12]="RSS_14",A[A.RSS_EXPANDED=13]="RSS_EXPANDED",A[A.UPC_A=14]="UPC_A",A[A.UPC_E=15]="UPC_E",A[A.UPC_EAN_EXTENSION=16]="UPC_EAN_EXTENSION"}(A||(A={}));var g,i,n=new Map([[A.QR_CODE,"QR_CODE"],[A.AZTEC,"AZTEC"],[A.CODABAR,"CODABAR"],[A.CODE_39,"CODE_39"],[A.CODE_93,"CODE_93"],[A.CODE_128,"CODE_128"],[A.DATA_MATRIX,"DATA_MATRIX"],[A.MAXICODE,"MAXICODE"],[A.ITF,"ITF"],[A.EAN_13,"EAN_13"],[A.EAN_8,"EAN_8"],[A.PDF_417,"PDF_417"],[A.RSS_14,"RSS_14"],[A.RSS_EXPANDED,"RSS_EXPANDED"],[A.UPC_A,"UPC_A"],[A.UPC_E,"UPC_E"],[A.UPC_EAN_EXTENSION,"UPC_EAN_EXTENSION"]]);function o(e){return Object.values(A).includes(e)}!function(A){A[A.UNKNOWN=0]="UNKNOWN",A[A.URL=1]="URL"}(g||(g={})),function(A){A[A.SCAN_TYPE_CAMERA=0]="SCAN_TYPE_CAMERA",A[A.SCAN_TYPE_FILE=1]="SCAN_TYPE_FILE"}(i||(i={}));var I,C=function(){function A(){}return A.GITHUB_PROJECT_URL="https://github.com/mebjas/html5-qrcode",A.SCAN_DEFAULT_FPS=2,A.DEFAULT_DISABLE_FLIP=!1,A}(),a=function(){function A(A,e){this.format=A,this.formatName=e}return A.prototype.toString=function(){return this.formatName},A.create=function(e){if(!n.has(e))throw e+" not in html5QrcodeSupportedFormatsTextMap";return new A(e,n.get(e))},A}(),r=function(){function A(){}return A.createFromText=function(A){return{decodedText:A,result:{text:A}}},A.createFromQrcodeResult=function(A){return{decodedText:A.text,result:A}},A}();!function(A){A[A.UNKWOWN_ERROR=0]="UNKWOWN_ERROR",A[A.IMPLEMENTATION_ERROR=1]="IMPLEMENTATION_ERROR",A[A.NO_CODE_FOUND_ERROR=2]="NO_CODE_FOUND_ERROR"}(I||(I={}));var c=function(){function A(){}return A.createFrom=function(A){return{errorMessage:A,type:I.UNKWOWN_ERROR}},A}(),l=function(){function A(A){this.verbose=A}return A.prototype.log=function(A){this.verbose&&console.log(A)},A.prototype.warn=function(A){this.verbose&&console.warn(A)},A.prototype.logError=function(A,e){(this.verbose||!0===e)&&console.error(A)},A.prototype.logErrors=function(A){if(0===A.length)throw"Logger#logError called without arguments";this.verbose&&console.error(A)},A}();function s(A){return null==A}var d,B,E=function(){function A(){}return A.codeParseError=function(A){return"QR code parse error, error = "+A},A.errorGettingUserMedia=function(A){return"Error getting userMedia, error = "+A},A.onlyDeviceSupportedError=function(){return"The device doesn't support navigator.mediaDevices , only supported cameraIdOrConfig in this case is deviceId parameter (string)."},A.cameraStreamingNotSupported=function(){return"Camera streaming not supported by the browser."},A.unableToQuerySupportedDevices=function(){return"Unable to query supported devices, unknown error."},A.insecureContextCameraQueryError=function(){return"Camera access is only supported in secure context like https or localhost."},A}(),h=function(){function A(){}return A.scanningStatus=function(){return"Scanning"},A.idleStatus=function(){return"Idle"},A.errorStatus=function(){return"Error"},A.permissionStatus=function(){return"Permission"},A.noCameraFoundErrorStatus=function(){return"No Cameras"},A.lastMatch=function(A){return"Last Match: "+A},A.codeScannerTitle=function(){return"Code Scanner"},A.cameraPermissionTitle=function(){return"Request Camera Permissions"},A.cameraPermissionRequesting=function(){return"Requesting camera permissions..."},A.scanButtonStopScanningText=function(){return"Stop Scanning"},A.scanButtonStartScanningText=function(){return"Start Scanning"},A.textIfCameraScanSelected=function(){return"Scan an Image File"},A.textIfFileScanSelected=function(){return"Scan using camera directly"},A}(),m=function(){function A(){}return A.isMediaStreamConstraintsValid=function(A,e){if("object"!=typeof A){var t=typeof A;return e.logError("videoConstraints should be of type object, the object passed is of type "+t+".",!0),!1}for(var g=new Set(["autoGainControl","channelCount","echoCancellation","latency","noiseSuppression","sampleRate","sampleSize","volume"]),i=0,n=Object.keys(A);i0&&i[i.length-1])||6!==n[0]&&2!==n[0])){o=0;continue}if(3===n[0]&&(!i||n[1]>i[0]&&n[1]t&&(t=o,e=n)}if(!e)throw"No largest barcode found";return e},e.prototype.createBarcodeDetectorFormats=function(A){for(var e=[],t=0,g=A;ta)throw"'config.qrbox' should not be greater than the width of the HTML element."}var c=this;return new Promise((function(e,n){var I=o?i.videoConstraints:c.createVideoConstraints(A);if(I)if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia)navigator.mediaDevices.getUserMedia({audio:!1,video:I}).then((function(A){c.onMediaStreamReceived(A,i,o,a,t,g).then((function(A){c.isScanning=!0,e(null)})).catch(n)})).catch((function(A){n(E.errorGettingUserMedia(A))}));else if(navigator.getUserMedia){if("string"!=typeof A)throw E.onlyDeviceSupportedError();var C={video:I};navigator.getUserMedia(C,(function(A){c.onMediaStreamReceived(A,i,o,a,t,g).then((function(A){c.isScanning=!0,e(null)})).catch((function(A){n(E.errorGettingUserMedia(A))}))}),(function(A){n(E.errorGettingUserMedia(A))}))}else n(E.cameraStreamingNotSupported());else n("videoConstraints should be defined")}))},e.prototype.stop=function(){var A=this;return this.shouldScan=!1,this.foreverScanTimeout&&clearTimeout(this.foreverScanTimeout),new Promise((function(e,t){var g=function(){A.localMediaStream=null,A.element&&(A.element.removeChild(A.videoElement),A.element.removeChild(A.canvasElement)),function(){if(A.element)for(;A.element.getElementsByClassName(Z.SHADED_REGION_CLASSNAME).length;){var e=A.element.getElementsByClassName(Z.SHADED_REGION_CLASSNAME)[0];A.element.removeChild(e)}}(),A.isScanning=!1,A.qrRegion&&(A.qrRegion=null),A.context&&(A.context=null),e()};A.localMediaStream||g();var i=A.localMediaStream.getVideoTracks().length,n=0;A.localMediaStream.getVideoTracks().forEach((function(e){A.localMediaStream.removeTrack(e),e.stop(),++n>=i&&g()}))}))},e.prototype.scanFile=function(A,e){return this.scanFileV2(A,e).then((function(A){return A.decodedText}))},e.prototype.scanFileV2=function(A,e){var t=this;if(!(A&&A instanceof File))throw"imageFile argument is mandatory and should be instance of File. Use 'event.target.files[0]'.";if(s(e)&&(e=!0),this.isScanning)throw"Close ongoing scan before scanning a file.";return new Promise((function(g,i){t.possiblyCloseLastScanImageFile(),t.clearElement(),t.lastScanImageFile=URL.createObjectURL(A);var n=new Image;n.onload=function(){var A=n.width,o=n.height,I=document.getElementById(t.elementId),C=I.clientWidth?I.clientWidth:Z.DEFAULT_WIDTH,a=Math.max(I.clientHeight?I.clientHeight:o,Z.FILE_SCAN_MIN_HEIGHT),c=t.computeCanvasDrawConfig(A,o,C,a);if(e){var l=t.createCanvasElement(C,a,"qr-canvas-visible");l.style.display="inline-block",I.appendChild(l);var s=l.getContext("2d");if(!s)throw"Unable to get 2d context from canvas";s.canvas.width=C,s.canvas.height=a,s.drawImage(n,0,0,A,o,c.x,c.y,c.width,c.height)}var d=t.createCanvasElement(c.width,c.height);I.appendChild(d);var B=d.getContext("2d");if(!B)throw"Unable to get 2d context from canvas";B.canvas.width=c.width,B.canvas.height=c.height,B.drawImage(n,0,0,A,o,0,0,c.width,c.height);try{t.qrcode.decodeAsync(d).then((function(A){g(r.createFromQrcodeResult(A))})).catch(i)}catch(A){i("QR code parse error, error = "+A)}},n.onerror=i,n.onabort=i,n.onstalled=i,n.onsuspend=i,n.src=URL.createObjectURL(A)}))},e.prototype.clear=function(){this.clearElement()},e.getCameras=function(){if(navigator.mediaDevices)return e.getCamerasFromMediaDevices();var A=MediaStreamTrack;if(MediaStreamTrack&&A.getSources)return e.getCamerasFrmoMediaStreamTrack();var t=E.unableToQuerySupportedDevices();return function(){if("https:"===location.protocol)return!0;var A=location.host.split(":")[0];return"127.0.0.1"===A||"localhost"===A}()||(t=E.insecureContextCameraQueryError()),Promise.reject(t)},e.prototype.getRunningTrackCapabilities=function(){if(null==this.localMediaStream)throw"Scanning is not in running state, call this API only when QR code scanning using camera is in running state.";if(0===this.localMediaStream.getVideoTracks().length)throw"No video tracks found";return this.localMediaStream.getVideoTracks()[0].getCapabilities()},e.prototype.applyVideoConstraints=function(A){var e=this;if(!A)throw"videoConstaints is required argument.";if(!m.isMediaStreamConstraintsValid(A,this.logger))throw"invalid videoConstaints passed, check logs for more details";if(null===this.localMediaStream)throw"Scanning is not in running state, call this API only when QR code scanning using camera is in running state.";if(0===this.localMediaStream.getVideoTracks().length)throw"No video tracks found";return new Promise((function(t,g){"aspectRatio"in A?g("Chaning 'aspectRatio' in run-time is not yet supported."):e.localMediaStream.getVideoTracks()[0].applyConstraints(A).then((function(A){t(A)})).catch((function(A){g(A)}))}))},e.getCamerasFromMediaDevices=function(){return new Promise((function(A,e){navigator.mediaDevices.getUserMedia({audio:!1,video:!0}).then((function(t){navigator.mediaDevices.enumerateDevices().then((function(e){for(var g=[],i=0,n=e;ie&&this.logger.warn("[Html5Qrcode] config.qrboxsize is greater than video height. Shading will be ignored");var i=t.isShadedBoxEnabled()&&g<=e,n={x:0,y:0,width:A,height:e},o=i?this.getShadedRegionBounds(A,e,g):n,I=this.createCanvasElement(o.width,o.height),C=I.getContext("2d");C.canvas.width=o.width,C.canvas.height=o.height,this.element.append(I),i&&this.possiblyInsertShadingElement(this.element,A,e,g),this.qrRegion=o,this.context=C,this.canvasElement=I},e.prototype.scanContext=function(A,e){var t=this;return this.qrcode.decodeAsync(this.canvasElement).then((function(e){return A(e.text,r.createFromQrcodeResult(e)),t.possiblyUpdateShaders(!0),!0})).catch((function(A){t.possiblyUpdateShaders(!1);var g=E.codeParseError(A);return e(g,c.createFrom(g)),!1}))},e.prototype.foreverScan=function(A,e,t){var g=this;if(this.shouldScan&&this.localMediaStream){var i=this.videoElement,n=i.videoWidth/i.clientWidth,o=i.videoHeight/i.clientHeight;if(!this.qrRegion)throw"qrRegion undefined when localMediaStream is ready.";var I=this.qrRegion.width*n,C=this.qrRegion.height*o,a=this.qrRegion.x*n,r=this.qrRegion.y*o;this.context.drawImage(i,a,r,I,C,0,0,this.qrRegion.width,this.qrRegion.height);var c=function(){g.foreverScanTimeout=setTimeout((function(){g.foreverScan(A,e,t)}),g.getTimeoutFps(A.fps))};this.scanContext(e,t).then((function(i){i||!0===A.disableFlip?c():(g.context.translate(g.context.canvas.width,0),g.context.scale(-1,1),g.scanContext(e,t).finally((function(){c()})))})).catch((function(A){g.logger.logError("Error happend while scanning context",A),c()}))}},e.prototype.onMediaStreamReceived=function(A,e,t,g,i,n){var o=this,I=this;return new Promise((function(C,a){var r=function(){var t=o.createVideoElement(g);I.element.append(t),t.onabort=a,t.onerror=a,t.onplaying=function(){var A=t.clientWidth,g=t.clientHeight;I.setupUi(A,g,e),I.foreverScan(e,i,n),C(null)},t.srcObject=A,t.play(),I.videoElement=t};if(I.localMediaStream=A,t||!e.aspectRatio)r();else{var c={aspectRatio:e.aspectRatio};A.getVideoTracks()[0].applyConstraints(c).then((function(A){return r()})).catch((function(A){I.logger.logErrors(["[Html5Qrcode] Constriants could not be satisfied, ignoring constraints",A]),r()}))}}))},e.prototype.createVideoConstraints=function(A){if("string"==typeof A)return{deviceId:{exact:A}};if("object"==typeof A){var e="facingMode",t={user:!0,environment:!0},g="exact",i=function(A){if(A in t)return!0;throw"config has invalid 'facingMode' value = '"+A+"'"},n=Object.keys(A);if(1!==n.length)throw"'cameraIdOrConfig' object should have exactly 1 key, if passed as an object, found "+n.length+" keys";var o=Object.keys(A)[0];if(o!==e&&"deviceId"!==o)throw"Only 'facingMode' and 'deviceId' are supported for 'cameraIdOrConfig'";if(o!==e){var I=A.deviceId;if("string"==typeof I)return{deviceId:I};if("object"==typeof I){if(g in I)return{deviceId:{exact:I.exact}};throw"'deviceId' should be string or object with exact as key."}throw"Invalid type of 'deviceId' = "+typeof I}var C=A.facingMode;if("string"==typeof C){if(i(C))return{facingMode:C}}else{if("object"!=typeof C)throw"Invalid type of 'facingMode' = "+typeof C;if(!(g in C))throw"'facingMode' should be string or object with exact as key.";if(i(C.exact))return{facingMode:{exact:C.exact}}}}throw"Invalid type of 'cameraIdOrConfig' = "+typeof A},e.prototype.computeCanvasDrawConfig=function(A,e,t,g){if(A<=t&&e<=g)return{x:(t-A)/2,y:(g-e)/2,width:A,height:e};var i=A,n=e;return A>t&&(e*=t/A,A=t),e>g&&(A*=g/e,e=g),this.logger.log("Image downsampled from "+i+"X"+n+" to "+A+"X"+e+"."),this.computeCanvasDrawConfig(A,e,t,g)},e.prototype.clearElement=function(){if(this.isScanning)throw"Cannot clear while scan is ongoing, close it first.";var A=document.getElementById(this.elementId);A&&(A.innerHTML="")},e.prototype.createVideoElement=function(A){var e=document.createElement("video");return e.style.width=A+"px",e.muted=!0,e.setAttribute("muted","true"),e.playsInline=!0,e},e.prototype.possiblyUpdateShaders=function(A){this.qrMatch!==A&&(this.hasBorderShaders&&this.borderShaders&&this.borderShaders.length&&this.borderShaders.forEach((function(e){e.style.backgroundColor=A?Z.BORDER_SHADER_MATCH_COLOR:Z.BORDER_SHADER_DEFAULT_COLOR})),this.qrMatch=A)},e.prototype.possiblyCloseLastScanImageFile=function(){this.lastScanImageFile&&(URL.revokeObjectURL(this.lastScanImageFile),this.lastScanImageFile=null)},e.prototype.createCanvasElement=function(A,e,t){var g=A,i=e,n=document.createElement("canvas");return n.style.width=g+"px",n.style.height=i+"px",n.style.display="none",n.id=s(t)?"qr-canvas":t,n},e.prototype.getShadedRegionBounds=function(A,e,t){if(t>A||t>e)throw"'config.qrbox' should not be greater than the width and height of the HTML element.";return{x:(A-t)/2,y:(e-t)/2,width:t,height:t}},e.prototype.possiblyInsertShadingElement=function(A,e,t,g){if(!(e-g<1||t-g<1)){var i=document.createElement("div");if(i.style.position="absolute",i.style.borderLeft=(e-g)/2+"px solid #0000007a",i.style.borderRight=(e-g)/2+"px solid #0000007a",i.style.borderTop=(t-g)/2+"px solid #0000007a",i.style.borderBottom=(t-g)/2+"px solid #0000007a",i.style.boxSizing="border-box",i.style.top="0px",i.style.bottom="0px",i.style.left="0px",i.style.right="0px",i.id=""+Z.SHADED_REGION_CLASSNAME,e-g<11||t-g<11)this.hasBorderShaders=!1;else{var n=40;this.insertShaderBorders(i,n,5,-5,0,!0),this.insertShaderBorders(i,n,5,-5,0,!1),this.insertShaderBorders(i,n,5,g+5,0,!0),this.insertShaderBorders(i,n,5,g+5,0,!1),this.insertShaderBorders(i,5,45,-5,-5,!0),this.insertShaderBorders(i,5,45,g+5-n,-5,!0),this.insertShaderBorders(i,5,45,-5,-5,!1),this.insertShaderBorders(i,5,45,g+5-n,-5,!1),this.hasBorderShaders=!0}A.append(i)}},e.prototype.insertShaderBorders=function(A,e,t,g,i,n){var o=document.createElement("div");o.style.position="absolute",o.style.backgroundColor=Z.BORDER_SHADER_DEFAULT_COLOR,o.style.width=e+"px",o.style.height=t+"px",o.style.top=g+"px",n?o.style.left=i+"px":o.style.right=i+"px",this.borderShaders||(this.borderShaders=[]),this.borderShaders.push(o),A.appendChild(o)},e.prototype.getTimeoutFps=function(A){return 1e3/A},e}();!function(A){A[A.STATUS_DEFAULT=0]="STATUS_DEFAULT",A[A.STATUS_SUCCESS=1]="STATUS_SUCCESS",A[A.STATUS_WARNING=2]="STATUS_WARNING"}(B||(B={}));var Y=function(){function A(A,e,t){if(this.lastMatchFound=null,this.cameraScanImage=null,this.fileScanImage=null,this.elementId=A,this.config=this.createConfig(e),this.verbose=!0===t,!document.getElementById(A))throw"HTML Element with id="+A+" not found";this.currentScanType=i.SCAN_TYPE_CAMERA,this.sectionSwapAllowed=!0,this.logger=new l(this.verbose)}return A.prototype.render=function(A,e){var t=this;this.lastMatchFound=null,this.qrCodeSuccessCallback=function(e,g){if(A)A(e,g);else{if(t.lastMatchFound===e)return;t.lastMatchFound=e,t.setHeaderMessage(h.lastMatch(e),B.STATUS_SUCCESS)}},this.qrCodeErrorCallback=function(A,g){t.setStatus(h.scanningStatus()),e&&e(A,g)};var g,i,n=document.getElementById(this.elementId);if(!n)throw"HTML Element with id="+this.elementId+" not found";n.innerHTML="",this.createBasicLayout(n),this.html5Qrcode=new G(this.getScanRegionId(),(g=this.config,i=this.verbose,{formatsToSupport:g.formatsToSupport,experimentalFeatures:g.experimentalFeatures,verbose:i}))},A.prototype.clear=function(){var A=this;return this.html5Qrcode?new Promise((function(e,t){A.html5Qrcode?A.html5Qrcode.isScanning&&A.html5Qrcode.stop().then((function(t){var g;A.html5Qrcode?(A.html5Qrcode.clear(),(g=document.getElementById(A.elementId))&&(g.innerHTML="",A.resetBasicLayout(g)),e()):e()})).catch((function(e){A.verbose&&A.logger.logError("Unable to stop qrcode scanner",e),t(e)})):e()})):Promise.resolve()},A.prototype.createConfig=function(A){return A?(A.fps||(A.fps=C.SCAN_DEFAULT_FPS),A):{fps:C.SCAN_DEFAULT_FPS}},A.prototype.createBasicLayout=function(A){A.style.position="relative",A.style.padding="0px",A.style.border="1px solid silver",this.createHeader(A);var e=document.createElement("div"),t=this.getScanRegionId();e.id=t,e.style.width="100%",e.style.minHeight="100px",e.style.textAlign="center",A.appendChild(e),this.insertCameraScanImageToScanRegion();var g=document.createElement("div"),i=this.getDashboardId();g.id=i,g.style.width="100%",A.appendChild(g),this.setupInitialDashboard(g)},A.prototype.resetBasicLayout=function(A){A.style.border="none"},A.prototype.setupInitialDashboard=function(A){this.createSection(A),this.createSectionControlPanel(),this.createSectionSwap()},A.prototype.createHeader=function(A){var e=document.createElement("div");e.style.textAlign="left",e.style.margin="0px",e.style.padding="5px",e.style.fontSize="20px",e.style.borderBottom="1px solid rgba(192, 192, 192, 0.18)",A.appendChild(e);var t=document.createElement("span"),g=document.createElement("a");g.innerText=h.codeScannerTitle(),g.href=C.GITHUB_PROJECT_URL,t.appendChild(g),e.appendChild(t);var i=document.createElement("span");i.id=this.getStatusSpanId(),i.style.float="right",i.style.padding="5px 7px",i.style.fontSize="14px",i.style.background="#dedede6b",i.style.border="1px solid #00000000",i.style.color="rgb(17, 17, 17)",e.appendChild(i),this.setStatus(h.idleStatus());var n=document.createElement("div");n.id=this.getHeaderMessageContainerId(),n.style.display="none",n.style.fontSize="14px",n.style.padding="2px 10px",n.style.marginTop="4px",n.style.borderTop="1px solid #f6f6f6",e.appendChild(n)},A.prototype.createSection=function(A){var e=document.createElement("div");e.id=this.getDashboardSectionId(),e.style.width="100%",e.style.padding="10px",e.style.textAlign="left",A.appendChild(e)},A.prototype.createSectionControlPanel=function(){var A=document.getElementById(this.getDashboardSectionId()),e=document.createElement("div");A.appendChild(e);var t=document.createElement("div");t.id=this.getDashboardSectionCameraScanRegionId(),t.style.display=this.currentScanType===i.SCAN_TYPE_CAMERA?"block":"none",e.appendChild(t);var g=document.createElement("div");g.style.textAlign="center";var n=document.createElement("button");n.innerText=h.cameraPermissionTitle();var o=this;n.addEventListener("click",(function(){n.disabled=!0,o.setStatus(h.permissionStatus()),o.setHeaderMessage(h.cameraPermissionRequesting()),G.getCameras().then((function(A){o.setStatus(h.idleStatus()),o.resetHeaderMessage(),A&&0!==A.length?(t.removeChild(g),o.renderCameraSelection(A)):o.setStatus(h.noCameraFoundErrorStatus(),B.STATUS_WARNING)})).catch((function(A){n.disabled=!1,o.setStatus(h.idleStatus()),o.setHeaderMessage(A,B.STATUS_WARNING)}))})),g.appendChild(n),t.appendChild(g);var I=document.createElement("div");I.id=this.getDashboardSectionFileScanRegionId(),I.style.textAlign="center",I.style.display=this.currentScanType===i.SCAN_TYPE_CAMERA?"none":"block",e.appendChild(I);var C=document.createElement("input");C.id=this.getFileScanInputId(),C.accept="image/*",C.type="file",C.style.width="200px",C.disabled=this.currentScanType===i.SCAN_TYPE_CAMERA;var a=document.createElement("span");a.innerText=" Select Image",I.appendChild(C),I.appendChild(a),C.addEventListener("change",(function(A){if(!o.html5Qrcode)throw"html5Qrcode not defined";if(null!=A&&null!=A.target&&o.currentScanType===i.SCAN_TYPE_FILE&&0!==A.target.files.length){var e=A.target.files[0];o.html5Qrcode.scanFileV2(e,!0).then((function(A){o.resetHeaderMessage(),o.qrCodeSuccessCallback(A.decodedText,A)})).catch((function(A){o.setStatus(h.errorStatus(),B.STATUS_WARNING),o.setHeaderMessage(A,B.STATUS_WARNING),o.qrCodeErrorCallback(A,c.createFrom(A))}))}}))},A.prototype.renderCameraSelection=function(A){var e=this,t=document.getElementById(this.getDashboardSectionCameraScanRegionId());t.style.textAlign="center";var g=document.createElement("span");g.innerText="Select Camera ("+A.length+") ",g.style.marginRight="10px";var i=document.createElement("select");i.id=this.getCameraSelectionId();for(var n=0,o=A;n",e.appendChild(A.cameraScanImage)},this.cameraScanImage.width=64,this.cameraScanImage.style.opacity="0.3",this.cameraScanImage.src="data:image/gif;base64,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L25zLmFkb2JlLmNvbS94bXAvMS4wL0R5bmFtaWNNZWRpYS8iCiAgICB4bWxuczpzdERpbT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL0RpbWVuc2lvbnMjIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFkNzgwZGNmLWVkZTctZWU0My04N2E0LTdlMTg3YThlYTI3NSIKICAgeG1wTU06RG9jdW1lbnRJRD0iZDMxNDk3ZmItM2Y1Zi0yMzkwLTFlZDEtYjU3NDAwMDAwMDVmIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NTdiYmYyOTgtY2M5Ny02MzRlLWE4MjAtODFiMjAxY2RmZjllIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDE5LTEyLTA1VDA5OjEzOjIyKzA1OjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0xMi0wNVQwOToxMzoyMiswNTowMCIKICAgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBBZnRlciBFZmZlY3RzIENDIDIwMTggKFdpbmRvd3MpIgogICB4bXA6Q3JlYXRlRGF0ZT0iMjAxOS0xMi0wNVQwOToxMjo1MCswNTowMCIKICAgZGM6Zm9ybWF0PSLQkNC90LjQvNC40YDQvtCy0LDQvdC90YvQuSBHSUYiCiAgIGJvZHltb3Zpbjpwcm9qZWN0X2lkPSJvZWU3ZTRyM2gwaGtjZTdiODgzMyIKICAgeG1wRE06dmlkZW9GcmFtZVJhdGU9IjI1LjAwMDAwMCIKICAgeG1wRE06dmlkZW9GaWVsZE9yZGVyPSJQcm9ncmVzc2l2ZSIKICAgeG1wRE06dmlkZW9QaXhlbEFzcGVjdFJhdGlvPSIxLzEiCiAgIHhtcERNOnN0YXJ0VGltZVNjYWxlPSIyNSIKICAgeG1wRE06c3RhcnRUaW1lU2FtcGxlU2l6ZT0iMSI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSI5YWE0NzI4ZC1iYWU1LTAyMDEtMjM4MC0zZTlhMDAwMDAwOGMiCiAgICAgIHN0RXZ0OndoZW49IjIwMTktMTItMDVUMDk6MTM6MjIrMDU6MDAiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphYTA2OGRlZi1hY2NhLTM5NDgtODM1Yi02MWQ1MmU2NWI3NDIiCiAgICAgIHN0RXZ0OndoZW49IjIwMTktMDgtMzBUMDE6Mzg6MTErMDM6MDAiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIEFmdGVyIEVmZmVjdHMgQ0MgMjAxOCAoV2luZG93cykiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZThjY2QxNzEtNWFkZC01MzRmLWIyZjgtODc0NzNhOGMxYWJmIgogICAgICBzdEV2dDp3aGVuPSIyMDE5LTA4LTMwVDAxOjM4OjMxKzAzOjAwIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBBZnRlciBFZmZlY3RzIENDIDIwMTggKFdpbmRvd3MpIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvY29udGVudCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo2ZmVmYzVhNC00YWY3LTVhNGYtYjJiYS1hMWRkYTM1YWRkMTQiCiAgICAgIHN0RXZ0OndoZW49IjIwMTktMDgtMzBUMDI6MDY6MjcrMDM6MDAiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIEFmdGVyIEVmZmVjdHMgQ0MgMjAxOCAoV2luZG93cykiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii9jb250ZW50Ii8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249ImRlcml2ZWQiCiAgICAgIHN0RXZ0OnBhcmFtZXRlcnM9InNhdmVkIHRvIG5ldyBsb2NhdGlvbiIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpmYjg3ZmQwYS00Njc2LTQ2NDMtOWZlYS03Mjk2NzllYmVhY2YiCiAgICAgIHN0RXZ0OndoZW49IjIwMTktMDgtMzBUMDI6MDY6NTYrMDM6MDAiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIEFmdGVyIEVmZmVjdHMgQ0MgMjAxOCAoV2luZG93cykiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MTBmZDdiYzMtNDllMy1hNzRjLWI0Y2UtNzI5NjYxM2NjMmYwIgogICAgICBzdEV2dDp3aGVuPSIyMDE5LTA4LTMwVDAyOjA3OjA3KzAzOjAwIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBBZnRlciBFZmZlY3RzIENDIDIwMTggKFdpbmRvd3MpIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvY29udGVudCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMWZlOTE3MC1lYTQ1LTcyNDItOGVmNy1mMzQyNTU0ZWEwN2UiCiAgICAgIHN0RXZ0OndoZW49IjIwMTktMDgtMzBUMDI6MDc6MDcrMDM6MDAiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIEFmdGVyIEVmZmVjdHMgQ0MgMjAxOCAoV2luZG93cykiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJjN2ViNzEtMGJhZC03OTRiLWI4ZTAtMWVhZTkzOTM3Njk2IgogICAgICBzdEV2dDp3aGVuPSIyMDE5LTA4LTMwVDAyOjI2OjIzKzAzOjAwIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBBZnRlciBFZmZlY3RzIENDIDIwMTggKFdpbmRvd3MpIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvY29udGVudCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo5ZDFlN2UzNi1kZWVjLWJmNDYtOGE0Mi1kODE4YzBlMjc5YjIiCiAgICAgIHN0RXZ0OndoZW49IjIwMTktMTItMDRUMTM6NDk6MDIrMDU6MDAiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii9jb250ZW50Ii8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjA1Y2RkNWI3LTM0MGMtOGM0ZC1hMWUyLTlkYWJlMjg0OTA0MyIKICAgICAgc3RFdnQ6d2hlbj0iMjAxOS0xMi0wNFQxMzo0OTowMiswNTowMCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozYmY3YjIzNi1kNTI3LTA0NGUtYTlkMS00MjUzY2FlZGM0N2MiCiAgICAgIHN0RXZ0OndoZW49IjIwMTktMTItMDRUMTM6NDk6MjMrMDU6MDAiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii9jb250ZW50Ii8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxYTc1YTU2LTMyZGMtYmU0OS1hZWFkLWFjMmQ5YjNkZjJiMiIKICAgICAgc3RFdnQ6d2hlbj0iMjAxOS0xMi0wNFQxMzo0OToyMyswNTowMCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo4OTJiYmEyYy1iMjljLWNjNDgtOTI1My0wOGE0ODYwZTY5ZDAiCiAgICAgIHN0RXZ0OndoZW49IjIwMTktMTItMDVUMDk6MDE6MzArMDU6MDAiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii9jb250ZW50Ii8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmYwZTI3MTZlLWU5ZTAtYWE0ZS05ZjcwLTQxNTdjNmNlMGZlYSIKICAgICAgc3RFdnQ6d2hlbj0iMjAxOS0xMi0wNVQwOToxMzoxMSswNTowMCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iL2NvbnRlbnQiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Y2I2NjE4ZDItOTcwMC01NTRjLWI5ZTktNmEzYWUxM2Q5NGYyIgogICAgICBzdEV2dDp3aGVuPSIyMDE5LTEyLTA1VDA5OjEzOjExKzA1OjAwIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIi8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjlkZWU2YWY2LWQ1ZWYtMzg0My04MjY5LTQyMGY1ODFlMjdlZiIKICAgICAgc3RFdnQ6d2hlbj0iMjAxOS0xMi0wNVQwOToxMzoyMiswNTowMCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxZDc4MGRjZi1lZGU3LWVlNDMtODdhNC03ZTE4N2E4ZWEyNzUiCiAgICAgIHN0RXZ0OndoZW49IjIwMTktMTItMDVUMDk6MTM6MjIrMDU6MDAiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii9tZXRhZGF0YSIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgIDx4bXBNTTpEZXJpdmVkRnJvbQogICAgc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3MzNkMjZhMi1iN2I4LTA3NGItODhkNy1iOGE1OGM5ZmQwYzUiCiAgICBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjczM2QyNmEyLWI3YjgtMDc0Yi04OGQ3LWI4YTU4YzlmZDBjNSIKICAgIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDphYTA2OGRlZi1hY2NhLTM5NDgtODM1Yi02MWQ1MmU2NWI3NDIiLz4KICAgPHhtcE1NOkluZ3JlZGllbnRzPgogICAgPHJkZjpCYWc+CiAgICAgPHJkZjpsaQogICAgICBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRkOTdmOTNlLWIwZjEtZjU0NC1iZmMxLWFmZThhMzEyNjkzZCIKICAgICAgc3RSZWY6ZnJvbVBhcnQ9InRpbWU6MGQyOTYzNTIwMDAwMDBmMjU0MDE2MDAwMDAwIgogICAgICBzdFJlZjp0b1BhcnQ9InRpbWU6MGQyOTYzNTIwMDAwMDBmMjU0MDE2MDAwMDAwIgogICAgICBzdFJlZjptYXNrTWFya2Vycz0iTm9uZSIvPgogICAgPC9yZGY6QmFnPgogICA8L3htcE1NOkluZ3JlZGllbnRzPgogICA8eG1wTU06UGFudHJ5PgogICAgPHJkZjpCYWc+CiAgICAgPHJkZjpsaT4KICAgICAgPHJkZjpEZXNjcmlwdGlvbgogICAgICAgZGM6Zm9ybWF0PSJhcHBsaWNhdGlvbi92bmQuYWRvYmUuYWZ0ZXJlZmZlY3RzLmNvbXAiCiAgICAgICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjRkOTdmOTNlLWIwZjEtZjU0NC1iZmMxLWFmZThhMzEyNjkzZCI+CiAgICAgIDxkYzp0aXRsZT4KICAgICAgIDxyZGY6QWx0PgogICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+cG9ydHJhaXQtbW9kZS1zY2FubmluZzwvcmRmOmxpPgogICAgICAgPC9yZGY6QWx0PgogICAgICA8L2RjOnRpdGxlPgogICAgICA8eG1wTU06SW5ncmVkaWVudHM+CiAgICAgICA8cmRmOkJhZz4KICAgICAgICA8cmRmOmxpCiAgICAgICAgIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjBlNWU0MmUtM2U1NS0zYTQ1LTlkZDYtZjY1YzFlNzAxMDRhIgogICAgICAgICBzdFJlZjpmcm9tUGFydD0idGltZTowZDI5NjM1MjAwMDAwMGYyNTQwMTYwMDAwMDAiCiAgICAgICAgIHN0UmVmOnRvUGFydD0idGltZTowZDI5NjM1MjAwMDAwMGYyNTQwMTYwMDAwMDAiCiAgICAgICAgIHN0UmVmOm1hc2tNYXJrZXJzPSJOb25lIi8+CiAgICAgICAgPHJkZjpsaQogICAgICAgICBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmFjZDllMjg3LWZjMzEtMWQ0Ni1hNzdmLTQ1NjQ1ZmFhNWUwYyIKICAgICAgICAgc3RSZWY6ZnJvbVBhcnQ9InRpbWU6MGQyODU3NjgwMDAwMDBmMjU0MDE2MDAwMDAwIgogICAgICAgICBzdFJlZjp0b1BhcnQ9InRpbWU6MTA1ODQwMDAwMDBmMjU0MDE2MDAwMDAwZDI4NTc2ODAwMDAwMGYyNTQwMTYwMDAwMDAiCiAgICAgICAgIHN0UmVmOm1hc2tNYXJrZXJzPSJOb25lIi8+CiAgICAgICAgPHJkZjpsaQogICAgICAgICBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmQwMDE4YzVkLWU2MDEtZWM0NS1hZWQ5LTdhZTNjZTViNmIzZCIKICAgICAgICAgc3RSZWY6ZnJvbVBhcnQ9InRpbWU6MGQyOTYzNTIwMDAwMDBmMjU0MDE2MDAwMDAwIgogICAgICAgICBzdFJlZjp0b1BhcnQ9InRpbWU6MGQyOTYzNTIwMDAwMDBmMjU0MDE2MDAwMDAwIgogICAgICAgICBzdFJlZjptYXNrTWFya2Vycz0iTm9uZSIvPgogICAgICAgIDxyZGY6bGkKICAgICAgICAgc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDplODdiN2UyOC02NTQ5LTM5NGEtODNjOS05ZjdkOTUyNDJjNmUiCiAgICAgICAgIHN0UmVmOmZyb21QYXJ0PSJ0aW1lOjBkMjk2MzUyMDAwMDAwZjI1NDAxNjAwMDAwMCIKICAgICAgICAgc3RSZWY6dG9QYXJ0PSJ0aW1lOjBkMjk2MzUyMDAwMDAwZjI1NDAxNjAwMDAwMCIKICAgICAgICAgc3RSZWY6bWFza01hcmtlcnM9Ik5vbmUiLz4KICAgICAgICA8cmRmOmxpCiAgICAgICAgIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ZThlY2VkNGMtNWVjZi0xNTQ1LWI3ZGYtNmViNmMwNjQxNGZiIgogICAgICAgICBzdFJlZjpmcm9tUGFydD0idGltZTowZDI5NjM1MjAwMDAwMGYyNTQwMTYwMDAwMDAiCiAgICAgICAgIHN0UmVmOnRvUGFydD0idGltZTowZDI5NjM1MjAwMDAwMGYyNTQwMTYwMDAwMDAiCiAgICAgICAgIHN0UmVmOm1hc2tNYXJrZXJzPSJOb25lIi8+CiAgICAgICA8L3JkZjpCYWc+CiAgICAgIDwveG1wTU06SW5ncmVkaWVudHM+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgIDwvcmRmOmxpPgogICAgIDxyZGY6bGk+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24KICAgICAgIGRjOmZvcm1hdD0iYXBwbGljYXRpb24vdm5kLmFkb2JlLmFmdGVyZWZmZWN0cy5sYXllciIKICAgICAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjBlNWU0MmUtM2U1NS0zYTQ1LTlkZDYtZjY1YzFlNzAxMDRhIj4KICAgICAgPGRjOnRpdGxlPgogICAgICAgPHJkZjpBbHQ+CiAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5wYXBlcjwvcmRmOmxpPgogICAgICAgPC9yZGY6QWx0PgogICAgICA8L2RjOnRpdGxlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICA8L3JkZjpsaT4KICAgICA8cmRmOmxpPgogICAgICA8cmRmOkRlc2NyaXB0aW9uCiAgICAgICBkYzpmb3JtYXQ9ImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5hZnRlcmVmZmVjdHMubGF5ZXIiCiAgICAgICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmFjZDllMjg3LWZjMzEtMWQ0Ni1hNzdmLTQ1NjQ1ZmFhNWUwYyI+CiAgICAgIDxkYzp0aXRsZT4KICAgICAgIDxyZGY6QWx0PgogICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+bGluZS1zY2FubmluZzwvcmRmOmxpPgogICAgICAgPC9yZGY6QWx0PgogICAgICA8L2RjOnRpdGxlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICA8L3JkZjpsaT4KICAgICA8cmRmOmxpPgogICAgICA8cmRmOkRlc2NyaXB0aW9uCiAgICAgICBkYzpmb3JtYXQ9ImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5hZnRlcmVmZmVjdHMubGF5ZXIiCiAgICAgICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmQwMDE4YzVkLWU2MDEtZWM0NS1hZWQ5LTdhZTNjZTViNmIzZCI+CiAgICAgIDxkYzp0aXRsZT4KICAgICAgIDxyZGY6QWx0PgogICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+bWFzazwvcmRmOmxpPgogICAgICAgPC9yZGY6QWx0PgogICAgICA8L2RjOnRpdGxlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICA8L3JkZjpsaT4KICAgICA8cmRmOmxpPgogICAgICA8cmRmOkRlc2NyaXB0aW9uCiAgICAgICBkYzpmb3JtYXQ9ImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5hZnRlcmVmZmVjdHMubGF5ZXIiCiAgICAgICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmU4N2I3ZTI4LTY1NDktMzk0YS04M2M5LTlmN2Q5NTI0MmM2ZSI+CiAgICAgIDxkYzp0aXRsZT4KICAgICAgIDxyZGY6QWx0PgogICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+ZnJhbWU8L3JkZjpsaT4KICAgICAgIDwvcmRmOkFsdD4KICAgICAgPC9kYzp0aXRsZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgPC9yZGY6bGk+CiAgICAgPHJkZjpsaT4KICAgICAgPHJkZjpEZXNjcmlwdGlvbgogICAgICAgZGM6Zm9ybWF0PSJhcHBsaWNhdGlvbi92bmQuYWRvYmUuYWZ0ZXJlZmZlY3RzLmxheWVyIgogICAgICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDplOGVjZWQ0Yy01ZWNmLTE1NDUtYjdkZi02ZWI2YzA2NDE0ZmIiPgogICAgICA8ZGM6dGl0bGU+CiAgICAgICA8cmRmOkFsdD4KICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPkJhY2tncm91bmQ8L3JkZjpsaT4KICAgICAgIDwvcmRmOkFsdD4KICAgICAgPC9kYzp0aXRsZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgPC9yZGY6bGk+CiAgICA8L3JkZjpCYWc+CiAgIDwveG1wTU06UGFudHJ5PgogICA8eG1wRE06dmlkZW9GcmFtZVNpemUKICAgIHN0RGltOnc9IjUwIgogICAgc3REaW06aD0iNTAiCiAgICBzdERpbTp1bml0PSJwaXhlbCIvPgogICA8eG1wRE06ZHVyYXRpb24KICAgIHhtcERNOnZhbHVlPSIyOSIKICAgIHhtcERNOnNjYWxlPSIxLzI1Ii8+CiAgIDx4bXBETTpzdGFydFRpbWVjb2RlCiAgICB4bXBETTp0aW1lRm9ybWF0PSIyNVRpbWVjb2RlIgogICAgeG1wRE06dGltZVZhbHVlPSIwMDowMDowMDowMCIvPgogICA8eG1wRE06YWx0VGltZWNvZGUKICAgIHhtcERNOnRpbWVWYWx1ZT0iMDA6MDA6MDA6MDAiCiAgICB4bXBETTp0aW1lRm9ybWF0PSIyNVRpbWVjb2RlIi8+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAOw=="},A.prototype.insertFileScanImageToScanRegion=function(){var A=this,e=document.getElementById(this.getScanRegionId());if(this.fileScanImage)return e.innerHTML="
",void e.appendChild(this.fileScanImage);this.fileScanImage=new Image,this.fileScanImage.onload=function(t){e.innerHTML="
",e.appendChild(A.fileScanImage)},this.fileScanImage.width=64,this.fileScanImage.style.opacity="0.3",this.fileScanImage.src="data:image/gif;base64,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MS8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICB4bWxuczpib2R5bW92aW49ImJvZHltb3ZpbiIKICAgIHhtbG5zOnhtcERNPSJodHRwOi8vbnMuYWRvYmUuY29tL3htcC8xLjAvRHluYW1pY01lZGlhLyIKICAgIHhtbG5zOnN0RGltPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvRGltZW5zaW9ucyMiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZjZmYzc4ODQtZWYxMy1iNTRkLTk0ZGMtMDI5OTYxYWE2ZDBkIgogICB4bXBNTTpEb2N1bWVudElEPSI2MzU4ZTE5Yi1mOTQxLTA3MzMtNTEzNy03YTg0MDAwMDAwNTEiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozZTk2YzgxNS1jNGVlLTQzNDUtYjMzZi0yYjFiN2NlMWE5NzciCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMTktMTItMDRUMTE6Mjk6MDcrMDM6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTEyLTA0VDExOjI5OjA3KzAzOjAwIgogICB4bXA6Q3JlYXRlRGF0ZT0iMjAxOS0xMi0wNFQxMToyODozNiswMzowMCIKICAgZGM6Zm9ybWF0PSLQkNC90LjQvNC40YDQvtCy0LDQvdC90YvQuSBHSUYiCiAgIGJvZHltb3Zpbjpwcm9qZWN0X2lkPSI5ZHhpaGxxMXQzbjN1N2hjdXZjOCIKICAgeG1wRE06dmlkZW9GcmFtZVJhdGU9IjI0LjAwMDAwMCIKICAgeG1wRE06dmlkZW9GaWVsZE9yZGVyPSJQcm9ncmVzc2l2ZSIKICAgeG1wRE06dmlkZW9QaXhlbEFzcGVjdFJhdGlvPSIxLzEiCiAgIHhtcERNOnN0YXJ0VGltZVNjYWxlPSIyNCIKICAgeG1wRE06c3RhcnRUaW1lU2FtcGxlU2l6ZT0iMSI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJmZDVkNzVlYi1iN2RlLWZjYjUtYzRlZC04OTJjMDAwMDAwN2UiCiAgICAgIHN0RXZ0OndoZW49IjIwMTktMTItMDRUMTE6Mjk6MDcrMDM6MDAiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0ZGVkNDY0NC00OThmLTFkNGUtOTUyNy0xYTFmM2ViMjY3MzUiCiAgICAgIHN0RXZ0OndoZW49IjIwMTktMTItMDRUMDg6Mjc6MTArMDM6MDAiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Mzk4NDEzNTEtNzFjZi0zNzQ3LTkyMGQtMzE2MDkwYjhkMTIxIgogICAgICBzdEV2dDp3aGVuPSIyMDE5LTEyLTA0VDA4OjQyOjM1KzAzOjAwIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvY29udGVudCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo2MzQ2MzVmNy02YWQwLTYyNGUtOWUzNi01NjRkZWY3YzZkNTIiCiAgICAgIHN0RXZ0OndoZW49IjIwMTktMTItMDRUMDk6MDQ6NDcrMDM6MDAiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii9jb250ZW50Ii8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249ImRlcml2ZWQiCiAgICAgIHN0RXZ0OnBhcmFtZXRlcnM9InNhdmVkIHRvIG5ldyBsb2NhdGlvbiIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0YjMwMTM3MS0yZjM0LWIzNDEtOGMxYy0xZjZmNjhlMmY0YTkiCiAgICAgIHN0RXZ0OndoZW49IjIwMTktMTItMDRUMDk6MDQ6NDcrMDM6MDAiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YTEwOGYwZjQtZDNiMC1lMzQzLWJkMGQtMDMxMWEzMGFkZGNjIgogICAgICBzdEV2dDp3aGVuPSIyMDE5LTEyLTA0VDA5OjE0OjExKzAzOjAwIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvY29udGVudCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo3YmQyOGRiYi1jMzI5LTA3NDEtOTk0YS1mMGJkZDIwZmU3MmEiCiAgICAgIHN0RXZ0OndoZW49IjIwMTktMTItMDRUMDk6MTk6MzgrMDM6MDAiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii9jb250ZW50Ii8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJhOTkzY2E2LWU0YzctZjk0Mi05OWMyLTJiZTI2YWJmYjRjMCIKICAgICAgc3RFdnQ6d2hlbj0iMjAxOS0xMi0wNFQxMToyNzo0OSswMzowMCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpjYjI2ZjkyNS1jYmY2LWExNDktYTYwNi00YTIxYTIwN2VlY2IiCiAgICAgIHN0RXZ0OndoZW49IjIwMTktMTItMDRUMTE6Mjg6NTYrMDM6MDAiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii9jb250ZW50Ii8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjk5ZWE2MmRhLTQyMDctNjA0Ni1hYmVkLTBjMmEzOWQ0NDgyZSIKICAgICAgc3RFdnQ6d2hlbj0iMjAxOS0xMi0wNFQxMToyODo1NiswMzowMCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplMTg5MTkxMy1mYTQwLTYxNDktYjdmZS03YzI1YjIzNTg5YzEiCiAgICAgIHN0RXZ0OndoZW49IjIwMTktMTItMDRUMTE6Mjk6MDcrMDM6MDAiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjZmYzc4ODQtZWYxMy1iNTRkLTk0ZGMtMDI5OTYxYWE2ZDBkIgogICAgICBzdEV2dDp3aGVuPSIyMDE5LTEyLTA0VDExOjI5OjA3KzAzOjAwIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvbWV0YWRhdGEiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogICA8eG1wTU06RGVyaXZlZEZyb20KICAgIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ZTc2ZGE2ZWMtMmUzYy0zMTRkLTkyZjEtNThkNzJjNTJhMzMyIgogICAgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDplNzZkYTZlYy0yZTNjLTMxNGQtOTJmMS01OGQ3MmM1MmEzMzIiCiAgICBzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NGRlZDQ2NDQtNDk4Zi0xZDRlLTk1MjctMWExZjNlYjI2NzM1Ii8+CiAgIDx4bXBNTTpJbmdyZWRpZW50cz4KICAgIDxyZGY6QmFnPgogICAgIDxyZGY6bGkKICAgICAgc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpiZWMzNTdhOS05MGJmLWFjNDAtYjk2OS00NDIwMjNiMzI0YjEiCiAgICAgIHN0UmVmOmZyb21QYXJ0PSJ0aW1lOjBkMjk2MzUyMDAwMDAwZjI1NDAxNjAwMDAwMCIKICAgICAgc3RSZWY6dG9QYXJ0PSJ0aW1lOjBkMjk2MzUyMDAwMDAwZjI1NDAxNjAwMDAwMCIKICAgICAgc3RSZWY6bWFza01hcmtlcnM9Ik5vbmUiLz4KICAgIDwvcmRmOkJhZz4KICAgPC94bXBNTTpJbmdyZWRpZW50cz4KICAgPHhtcE1NOlBhbnRyeT4KICAgIDxyZGY6QmFnPgogICAgIDxyZGY6bGk+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24KICAgICAgIGRjOmZvcm1hdD0iYXBwbGljYXRpb24vdm5kLmFkb2JlLmFmdGVyZWZmZWN0cy5sYXllciIKICAgICAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzhhNWE2MmItYzAzYy03YzQxLWIzMGQtMTk0OTFkOTJhZmFlIj4KICAgICAgPGRjOnRpdGxlPgogICAgICAgPHJkZjpBbHQ+CiAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CYWNrZ3JvdW5kPC9yZGY6bGk+CiAgICAgICA8L3JkZjpBbHQ+CiAgICAgIDwvZGM6dGl0bGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgIDwvcmRmOmxpPgogICAgIDxyZGY6bGk+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24KICAgICAgIGRjOmZvcm1hdD0iYXBwbGljYXRpb24vdm5kLmFkb2JlLmFmdGVyZWZmZWN0cy5sYXllciIKICAgICAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODYxOGExZTUtMzY4Yy0wYjQ5LWJkNDctNzI0NmFkOTU3MmZjIj4KICAgICAgPGRjOnRpdGxlPgogICAgICAgPHJkZjpBbHQ+CiAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5tYXNrMzwvcmRmOmxpPgogICAgICAgPC9yZGY6QWx0PgogICAgICA8L2RjOnRpdGxlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICA8L3JkZjpsaT4KICAgICA8cmRmOmxpPgogICAgICA8cmRmOkRlc2NyaXB0aW9uCiAgICAgICBkYzpmb3JtYXQ9ImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5hZnRlcmVmZmVjdHMubGF5ZXIiCiAgICAgICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjk0YjA5MTY2LTVmZWQtNzA0OS04YzQ4LWExODQwNjY3MjJlZiI+CiAgICAgIDxkYzp0aXRsZT4KICAgICAgIDxyZGY6QWx0PgogICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+cGhvdG8yPC9yZGY6bGk+CiAgICAgICA8L3JkZjpBbHQ+CiAgICAgIDwvZGM6dGl0bGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgIDwvcmRmOmxpPgogICAgIDxyZGY6bGk+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24KICAgICAgIGRjOmZvcm1hdD0iYXBwbGljYXRpb24vdm5kLmFkb2JlLmFmdGVyZWZmZWN0cy5sYXllciIKICAgICAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6YWQ2ZWFiMmYtMWMxNS1jZjQ0LTg5YzgtNWJlZWVmMjUwOTA4Ij4KICAgICAgPGRjOnRpdGxlPgogICAgICAgPHJkZjpBbHQ+CiAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5waG90bzE8L3JkZjpsaT4KICAgICAgIDwvcmRmOkFsdD4KICAgICAgPC9kYzp0aXRsZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgPC9yZGY6bGk+CiAgICAgPHJkZjpsaT4KICAgICAgPHJkZjpEZXNjcmlwdGlvbgogICAgICAgZGM6Zm9ybWF0PSJhcHBsaWNhdGlvbi92bmQuYWRvYmUuYWZ0ZXJlZmZlY3RzLmNvbXAiCiAgICAgICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmJlYzM1N2E5LTkwYmYtYWM0MC1iOTY5LTQ0MjAyM2IzMjRiMSI+CiAgICAgIDxkYzp0aXRsZT4KICAgICAgIDxyZGY6QWx0PgogICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+cGhvdG8tZ2FsbGVyeSAyPC9yZGY6bGk+CiAgICAgICA8L3JkZjpBbHQ+CiAgICAgIDwvZGM6dGl0bGU+CiAgICAgIDx4bXBNTTpJbmdyZWRpZW50cz4KICAgICAgIDxyZGY6QmFnPgogICAgICAgIDxyZGY6bGkKICAgICAgICAgc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OGE1YTYyYi1jMDNjLTdjNDEtYjMwZC0xOTQ5MWQ5MmFmYWUiCiAgICAgICAgIHN0UmVmOmZyb21QYXJ0PSJ0aW1lOjBkMjk2MzUyMDAwMDAwZjI1NDAxNjAwMDAwMCIKICAgICAgICAgc3RSZWY6dG9QYXJ0PSJ0aW1lOjBkMjk2MzUyMDAwMDAwZjI1NDAxNjAwMDAwMCIKICAgICAgICAgc3RSZWY6bWFza01hcmtlcnM9Ik5vbmUiLz4KICAgICAgICA8cmRmOmxpCiAgICAgICAgIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODYxOGExZTUtMzY4Yy0wYjQ5LWJkNDctNzI0NmFkOTU3MmZjIgogICAgICAgICBzdFJlZjpmcm9tUGFydD0idGltZTowZDI5NjM1MjAwMDAwMGYyNTQwMTYwMDAwMDAiCiAgICAgICAgIHN0UmVmOnRvUGFydD0idGltZTowZDI5NjM1MjAwMDAwMGYyNTQwMTYwMDAwMDAiCiAgICAgICAgIHN0UmVmOm1hc2tNYXJrZXJzPSJOb25lIi8+CiAgICAgICAgPHJkZjpsaQogICAgICAgICBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjk0YjA5MTY2LTVmZWQtNzA0OS04YzQ4LWExODQwNjY3MjJlZiIKICAgICAgICAgc3RSZWY6ZnJvbVBhcnQ9InRpbWU6MGQyOTYzNTIwMDAwMDBmMjU0MDE2MDAwMDAwIgogICAgICAgICBzdFJlZjp0b1BhcnQ9InRpbWU6MGQyOTYzNTIwMDAwMDBmMjU0MDE2MDAwMDAwIgogICAgICAgICBzdFJlZjptYXNrTWFya2Vycz0iTm9uZSIvPgogICAgICAgIDxyZGY6bGkKICAgICAgICAgc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDphZDZlYWIyZi0xYzE1LWNmNDQtODljOC01YmVlZWYyNTA5MDgiCiAgICAgICAgIHN0UmVmOmZyb21QYXJ0PSJ0aW1lOjBkMjk2MzUyMDAwMDAwZjI1NDAxNjAwMDAwMCIKICAgICAgICAgc3RSZWY6dG9QYXJ0PSJ0aW1lOjBkMjk2MzUyMDAwMDAwZjI1NDAxNjAwMDAwMCIKICAgICAgICAgc3RSZWY6bWFza01hcmtlcnM9Ik5vbmUiLz4KICAgICAgICA8cmRmOmxpCiAgICAgICAgIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6YzkwOWFiOGMtY2IxZC01ZDQxLWJkNDgtMzU2MDQ4NmZkNmE2IgogICAgICAgICBzdFJlZjpmcm9tUGFydD0idGltZTowZDI5NjM1MjAwMDAwMGYyNTQwMTYwMDAwMDAiCiAgICAgICAgIHN0UmVmOnRvUGFydD0idGltZTowZDI5NjM1MjAwMDAwMGYyNTQwMTYwMDAwMDAiCiAgICAgICAgIHN0UmVmOm1hc2tNYXJrZXJzPSJOb25lIi8+CiAgICAgICAgPHJkZjpsaQogICAgICAgICBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmYxY2I0ODQ2LTNmNDItZDk0ZS05MmI4LTVjOTQyNjk4N2JkMyIKICAgICAgICAgc3RSZWY6ZnJvbVBhcnQ9InRpbWU6MGQyOTYzNTIwMDAwMDBmMjU0MDE2MDAwMDAwIgogICAgICAgICBzdFJlZjp0b1BhcnQ9InRpbWU6MGQyOTYzNTIwMDAwMDBmMjU0MDE2MDAwMDAwIgogICAgICAgICBzdFJlZjptYXNrTWFya2Vycz0iTm9uZSIvPgogICAgICAgPC9yZGY6QmFnPgogICAgICA8L3htcE1NOkluZ3JlZGllbnRzPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICA8L3JkZjpsaT4KICAgICA8cmRmOmxpPgogICAgICA8cmRmOkRlc2NyaXB0aW9uCiAgICAgICBkYzpmb3JtYXQ9ImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5hZnRlcmVmZmVjdHMubGF5ZXIiCiAgICAgICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmM5MDlhYjhjLWNiMWQtNWQ0MS1iZDQ4LTM1NjA0ODZmZDZhNiI+CiAgICAgIDxkYzp0aXRsZT4KICAgICAgIDxyZGY6QWx0PgogICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+bWFzazE8L3JkZjpsaT4KICAgICAgIDwvcmRmOkFsdD4KICAgICAgPC9kYzp0aXRsZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgPC9yZGY6bGk+CiAgICAgPHJkZjpsaT4KICAgICAgPHJkZjpEZXNjcmlwdGlvbgogICAgICAgZGM6Zm9ybWF0PSJhcHBsaWNhdGlvbi92bmQuYWRvYmUuYWZ0ZXJlZmZlY3RzLmxheWVyIgogICAgICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpmMWNiNDg0Ni0zZjQyLWQ5NGUtOTJiOC01Yzk0MjY5ODdiZDMiPgogICAgICA8ZGM6dGl0bGU+CiAgICAgICA8cmRmOkFsdD4KICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPnBob3RvMzwvcmRmOmxpPgogICAgICAgPC9yZGY6QWx0PgogICAgICA8L2RjOnRpdGxlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICA8L3JkZjpsaT4KICAgIDwvcmRmOkJhZz4KICAgPC94bXBNTTpQYW50cnk+CiAgIDx4bXBETTp2aWRlb0ZyYW1lU2l6ZQogICAgc3REaW06dz0iNTAiCiAgICBzdERpbTpoPSI1MCIKICAgIHN0RGltOnVuaXQ9InBpeGVsIi8+CiAgIDx4bXBETTpkdXJhdGlvbgogICAgeG1wRE06dmFsdWU9IjI4IgogICAgeG1wRE06c2NhbGU9IjEvMjQiLz4KICAgPHhtcERNOnN0YXJ0VGltZWNvZGUKICAgIHhtcERNOnRpbWVGb3JtYXQ9IjI0VGltZWNvZGUiCiAgICB4bXBETTp0aW1lVmFsdWU9IjAwOjAwOjAwOjAwIi8+CiAgIDx4bXBETTphbHRUaW1lY29kZQogICAgeG1wRE06dGltZVZhbHVlPSIwMDowMDowMDowMCIKICAgIHhtcERNOnRpbWVGb3JtYXQ9IjI0VGltZWNvZGUiLz4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cjw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAA7"},A.prototype.clearScanRegion=function(){document.getElementById(this.getScanRegionId()).innerHTML=""},A.prototype.getDashboardSectionId=function(){return this.elementId+"__dashboard_section"},A.prototype.getDashboardSectionCameraScanRegionId=function(){return this.elementId+"__dashboard_section_csr"},A.prototype.getDashboardSectionFileScanRegionId=function(){return this.elementId+"__dashboard_section_fsr"},A.prototype.getDashboardSectionSwapLinkId=function(){return this.elementId+"__dashboard_section_swaplink"},A.prototype.getScanRegionId=function(){return this.elementId+"__scan_region"},A.prototype.getDashboardId=function(){return this.elementId+"__dashboard"},A.prototype.getFileScanInputId=function(){return this.elementId+"__filescan_input"},A.prototype.getStatusSpanId=function(){return this.elementId+"__status_span"},A.prototype.getHeaderMessageContainerId=function(){return this.elementId+"__header_message"},A.prototype.getCameraSelectionId=function(){return this.elementId+"__camera_selection"},A.prototype.getCameraScanRegion=function(){return document.getElementById(this.getDashboardSectionCameraScanRegionId())},A.prototype.getFileScanRegion=function(){return document.getElementById(this.getDashboardSectionFileScanRegionId())},A.prototype.getFileScanInput=function(){return document.getElementById(this.getFileScanInputId())},A.prototype.getDashboardSectionSwapLink=function(){return document.getElementById(this.getDashboardSectionSwapLinkId())},A.prototype.getStatusSpan=function(){return document.getElementById(this.getStatusSpanId())},A.prototype.getHeaderMessageDiv=function(){return document.getElementById(this.getHeaderMessageContainerId())},A}();_=t})(); -/**ref**/ -;var Html5Qrcode = window._.Html5Qrcode; -;var Html5QrcodeScanner = window._.Html5QrcodeScanner; -;var Html5QrcodeSupportedFormats = window._.Html5QrcodeSupportedFormats; diff --git a/praesentia/static/praesentia.js b/praesentia/static/praesentia.js index 1fd94cd..2166fb8 100644 --- a/praesentia/static/praesentia.js +++ b/praesentia/static/praesentia.js @@ -1,39 +1,33 @@ -let qrData = ''; -let html5QrcodeScanner = new Html5QrcodeScanner( - 'reader', - { - fps: 10, - qrbox: 250, - }); +QrScanner.WORKER_PATH = 'static/qr-scanner-worker.min.js'; -html5QrcodeScanner.render(onScanSuccess); +let qrData = ''; $('body').on('paste', event => { let paste = event.originalEvent.clipboardData || window.clipboardData; - - if(paste.files.length > 0) { - html5QrcodeScanner.html5Qrcode.scanFile(paste.files[0], true) - .then(decodedText => { - processDecodedText(decodedText) - }) - .catch(err => { - swal.fire('Error', 'Cannot read QR code. Please make sure to only paste a QR code image.', 'error'); - }); + if (paste.files.length > 0) { + processQrImage(paste.files[0]); } - event.preventDefault() + event.preventDefault(); }); -function onScanSuccess(decodedText, _) { - processDecodedText(decodedText) -} +$('#qrImageFile').on('change', event => { + processQrImage(event.target.files[0]); +}); -function processDecodedText(decodedText) { - $('#qrData').text(decodedText.slice(0, 20) + '...'); - qrData = decodedText; - $('#reader__dashboard_section_csr > span:nth-child(2) > button:nth-child(2)').click(); - $('#btnSubmit').focus(); - $('#hasQrData').show(); +function processQrImage(file) { + $('#qrData').text('scanning...'); + QrScanner.scanImage(file).then((decodedText) => { + $('#qrData').text(decodedText.slice(0, 20) + '...'); + qrData = decodedText; + $('#btnSubmit').focus(); + $('#hasQrData').show(); + }).catch(err => { + swal.fire('Error', 'Cannot read QR code. ' + + 'Please make sure that it is an image that contains a QR code.', 'error'); + $('#qrImageFile').val(''); + $('#qrData').text('-'); + }); } function randomizeLatLong() { diff --git a/praesentia/static/qr-scanner-worker.min.js b/praesentia/static/qr-scanner-worker.min.js new file mode 100644 index 0000000..0d026ac --- /dev/null +++ b/praesentia/static/qr-scanner-worker.min.js @@ -0,0 +1,87 @@ +'use strict';(function(){function T(a,b){let c=[],d="";b=a.readBits([8,16,16][b]);for(let d=0;d`%${("0"+a.toString(16)).substr(-2)}`).join(""))}catch(e){}return{bytes:c,text:d}}function U(a,b){a=new V(a);let c=9>=b?0:26>=b?1:2;for(b={text:"",bytes:[],chunks:[],version:b};4<=a.available();){var d=a.readBits(4);if(d===t.Terminator)return b;if(d===t.ECI)0===a.readBits(1)?b.chunks.push({type:r.ECI,assignmentNumber:a.readBits(7)}): +0===a.readBits(1)?b.chunks.push({type:r.ECI,assignmentNumber:a.readBits(14)}):0===a.readBits(1)?b.chunks.push({type:r.ECI,assignmentNumber:a.readBits(21)}):b.chunks.push({type:r.ECI,assignmentNumber:-1});else if(d===t.Numeric){var e=a;d=[];for(var f="",g=e.readBits([10,12,14][c]);3<=g;){var h=e.readBits(10);if(1E3<=h)throw Error("Invalid numeric value above 999");var k=Math.floor(h/100),n=Math.floor(h/10)%10;h%=10;d.push(48+k,48+n,48+h);f+=k.toString()+n.toString()+h.toString();g-=3}if(2===g){g=e.readBits(7); +if(100<=g)throw Error("Invalid numeric value above 99");e=Math.floor(g/10);g%=10;d.push(48+e,48+g);f+=e.toString()+g.toString()}else if(1===g){e=e.readBits(4);if(10<=e)throw Error("Invalid numeric value above 9");d.push(48+e);f+=e.toString()}d={bytes:d,text:f};b.text+=d.text;b.bytes.push(...d.bytes);b.chunks.push({type:r.Numeric,text:d.text})}else if(d===t.Alphanumeric){e=a;d=[];f="";for(g=e.readBits([9,11,13][c]);2<=g;)n=e.readBits(11),k=Math.floor(n/45),n%=45,d.push(B[k].charCodeAt(0),B[n].charCodeAt(0)), +f+=B[k]+B[n],g-=2;1===g&&(e=e.readBits(6),d.push(B[e].charCodeAt(0)),f+=B[e]);d={bytes:d,text:f};b.text+=d.text;b.bytes.push(...d.bytes);b.chunks.push({type:r.Alphanumeric,text:d.text})}else if(d===t.Byte)d=T(a,c),b.text+=d.text,b.bytes.push(...d.bytes),b.chunks.push({type:r.Byte,bytes:d.bytes,text:d.text});else if(d===t.Kanji){f=a;d=[];e=f.readBits([8,10,12][c]);for(g=0;gk?k+33088:k+49472,d.push(k>>8,k&255);f=(new TextDecoder("shift-jis")).decode(Uint8Array.from(d)); +d={bytes:d,text:f};b.text+=d.text;b.bytes.push(...d.bytes);b.chunks.push({type:r.Kanji,bytes:d.bytes,text:d.text})}else d===t.StructuredAppend&&b.chunks.push({type:r.StructuredAppend,currentSequence:a.readBits(4),totalSequence:a.readBits(4),parity:a.readBits(8)})}if(0===a.available()||0===a.readBits(a.available()))return b}function J(a,b){return a^b}function W(a,b,c,d){b.degree()=d/2;){var g=b;let d=e;b=c;e=f;if(b.isZero())return null; +c=g;f=a.zero;g=b.getCoefficient(b.degree());for(g=a.inverse(g);c.degree()>=b.degree()&&!c.isZero();){let d=c.degree()-b.degree(),e=a.multiply(c.getCoefficient(c.degree()),g);f=f.addOrSubtract(a.buildMonomial(d,e));c=c.addOrSubtract(b.multiplyByMonomial(d,e))}f=f.multiplyPoly(e).addOrSubtract(d);if(c.degree()>=b.degree())return null}d=f.getCoefficient(0);if(0===d)return null;a=a.inverse(d);return[f.multiply(a),c.multiply(a)]}function X(a,b){let c=new Uint8ClampedArray(a.length);c.set(a);a=new Y(285, +256,0);var d=new w(a,c),e=new Uint8ClampedArray(b),f=!1;for(var g=0;gf)return null;c[f]^=d[e]}return c}function E(a,b){a^=b;for(b=0;a;)b++,a&=a-1;return b}function C(a,b){return b<<1|a}function Z(a,b,c){c=aa[c.dataMask];let d=a.height;var e=17+4*b.versionNumber,f=A.createEmpty(e,e);f.setRegion(0,0,9,9,!0);f.setRegion(e-8,0,8,9,!0);f.setRegion(0,e-8,9,8,!0);for(var g of b.alignmentPatternCenters)for(var h of b.alignmentPatternCenters)6=== +g&&6===h||6===g&&h===e-7||g===e-7&&6===h||f.setRegion(g-2,h-2,5,5,!0);f.setRegion(6,9,1,e-17,!0);f.setRegion(9,6,e-17,1,!0);6d;d++){let f=k-d;if(!b.get(f,m)){e++;let b=a.get(f,m);c({y:m,x:f})&&(b=!b);h=h<<1|b;8===e&&(g.push(h),h=e=0)}}}f=!f}return g}function ba(a){var b=a.height,c=Math.floor((b-17)/4);if(6>=c)return K[c- +1];c=0;for(var d=5;0<=d;d--)for(var e=b-9;e>=b-11;e--)c=C(a.get(e,d),c);d=0;for(e=5;0<=e;e--)for(let c=b-9;c>=b-11;c--)d=C(a.get(e,c),d);a=Infinity;let f;for(let e of K){if(e.infoBits===c||e.infoBits===d)return e;b=E(c,e.infoBits);b=a)return f}function ca(a){let b=0;for(var c=0;8>=c;c++)6!==c&&(b=C(a.get(c,8),b));for(c=7;0<=c;c--)6!==c&&(b=C(a.get(8,c),b));var d=a.height;c=0;for(var e=d-1;e>=d-7;e--)c=C(a.get(8,e),c);for(e=d-8;e=a?d:null}function ea(a,b,c){let d=b.errorCorrectionLevels[c],e=[],f=0;d.ecBlocks.forEach(a=>{for(let b=0;ba+b.numDataCodewords,0);c=new Uint8ClampedArray(c);a=0;for(let b of d){d=X(b.codewords,b.codewords.length-b.numDataCodewords);if(!d)return null;for(let e= +0;e{const c=g*a+n*b+p;return{x:(e*a+h*b+m)/c,y:(f*a+k*b+l)/c}};for(let e=0;ea+c)}function ia(a,b,c){let d=y(a,b),e=y(b,c),f=y(a,c),g,h,k;e>=d&&e>=f?[g,h,k]=[b,a,c]:f>=e&&f>=d?[g,h,k]=[a,b,c]:[g,h,k]=[a,c,b];0>(k.x-h.x)*(g.y-h.y)-(k.y-h.y)*(g.x-h.x)&&([g,k]=[k,g]);return{bottomLeft:g,topLeft:h,topRight:k}}function ja(a,b,c,d){d=(x(z(a,c,d,5))/7+x(z(a,b,d,5))/7+x(z(c,a,d,5))/7+x(z(b,a,d,5))/7)/4;if(1>d)throw Error("Invalid module size");b=Math.round(y(a,b)/d);a=Math.round(y(a,c)/d);a= +Math.floor((b+a)/2)+7;switch(a%4){case 0:a++;break;case 2:a--}return{dimension:a,moduleSize:d}}function N(a,b,c,d){let e=[{x:Math.floor(a.x),y:Math.floor(a.y)}];var f=Math.abs(b.y-a.y)>Math.abs(b.x-a.x);if(f){var g=Math.floor(a.y);var h=Math.floor(a.x);a=Math.floor(b.y);b=Math.floor(b.x)}else g=Math.floor(a.x),h=Math.floor(a.y),a=Math.floor(b.x),b=Math.floor(b.y);let k=Math.abs(a-g),n=Math.abs(b-h),m=Math.floor(-k/2),l=g{d+=Math.pow(a[f]-b*c,2)});return{averageSize:c,error:d}}function O(a,b,c){try{let d=z(a,{x:-1,y:a.y},c,b.length), +e=z(a,{x:a.x,y:-1},c,b.length),f=z(a,{x:Math.max(0,a.x-a.y)-1,y:Math.max(0,a.y-a.x)-1},c,b.length),g=z(a,{x:Math.min(c.width,a.x+a.y)+1,y:Math.min(c.height,a.y+a.x)+1},c,b.length),h=F(d,b),k=F(e,b),n=F(f,b),m=F(g,b),l=(h.averageSize+k.averageSize+n.averageSize+m.averageSize)/4;return Math.sqrt(h.error*h.error+k.error*k.error+n.error*n.error+m.error*m.error)+(Math.pow(h.averageSize-l,2)+Math.pow(k.averageSize-l,2)+Math.pow(n.averageSize-l,2)+Math.pow(m.averageSize-l,2))/l}catch(d){return Infinity}} +function H(a,b){for(var c=Math.round(b.x);a.get(c,Math.round(b.y));)c--;for(var d=Math.round(b.x);a.get(d,Math.round(b.y));)d++;c=(c+d)/2;for(d=Math.round(b.y);a.get(Math.round(c),d);)d--;for(b=Math.round(b.y);a.get(Math.round(c),b);)b++;return{x:c,y:(d+b)/2}}function ka(a){var b=[],c=[];let d=[];var e=[];for(let m=0;m<=a.height;m++){var f=0,g=!1;let l=[0,0,0,0,0];for(let b=-1;b<=a.width;b++){var h=a.get(b,m);if(h===g)f++;else{l=[l[1],l[2],l[3],l[4],f];f=1;g=h;var k=x(l)/7;k=Math.abs(l[0]-k)d>=b.bottom.startX&&d<=b.bottom.endX||a>=b.bottom.startX&&d<=b.bottom.endX||d<=b.bottom.startX&&a>=b.bottom.endX&&1.5>l[2]/(b.bottom.endX-b.bottom.startX)&&.5c>=b.bottom.startX&&c<=b.bottom.endX||a>=b.bottom.startX&&c<=b.bottom.endX||c<=b.bottom.startX&&a>=b.bottom.endX&&1.5>l[2]/(b.bottom.endX-b.bottom.startX)&&.5a.bottom.y!==m&&2<=a.bottom.y-a.top.y));c=c.filter(a=>a.bottom.y===m);d.push(...e.filter(a=>a.bottom.y!==m));e=e.filter(a=>a.bottom.y===m)}b.push(...c.filter(a=>2<=a.bottom.y-a.top.y));d.push(...e); +c=[];for(var m of b)2>m.bottom.y-m.top.y||(b=(m.top.startX+m.top.endX+m.bottom.startX+m.bottom.endX)/4,e=(m.top.y+m.bottom.y+1)/2,a.get(Math.round(b),Math.round(e))&&(f=[m.top.endX-m.top.startX,m.bottom.endX-m.bottom.startX,m.bottom.y-m.top.y+1],f=x(f)/f.length,g=O({x:Math.round(b),y:Math.round(e)},[1,1,3,1,1],a),c.push({score:g,x:b,y:e,size:f})));if(3>c.length)return null;c.sort((a,b)=>a.score-b.score);m=[];for(b=0;ba.score-b.score);m.push({points:[e,f[0],f[1]],score:e.score+f[0].score+f[1].score})}m.sort((a,b)=>a.score-b.score);let {topRight:p,topLeft:q,bottomLeft:v}=ia(...m[0].points);m=P(a,d,p,q,v);l=[];m&&l.push({alignmentPattern:{x:m.alignmentPattern.x,y:m.alignmentPattern.y},bottomLeft:{x:v.x,y:v.y},dimension:m.dimension,topLeft:{x:q.x,y:q.y},topRight:{x:p.x,y:p.y}});m=H(a,p);b=H(a,q);c=H(a,v);(a=P(a,d,m,b,c))&&l.push({alignmentPattern:{x:a.alignmentPattern.x, +y:a.alignmentPattern.y},bottomLeft:{x:c.x,y:c.y},topLeft:{x:b.x,y:b.y},topRight:{x:m.x,y:m.y},dimension:a.dimension});return 0===l.length?null:l}function P(a,b,c,d,e){let f,g;try{({dimension:f,moduleSize:g}=ja(d,c,e,a))}catch(m){return null}var h=c.x-d.x+e.x,k=c.y-d.y+e.y;c=(y(d,e)+y(d,c))/2/g;e=1-3/c;let n={x:d.x+e*(h-d.x),y:d.y+e*(k-d.y)};b=b.map(b=>{const c=(b.top.startX+b.top.endX+b.bottom.startX+b.bottom.endX)/4;b=(b.top.y+b.bottom.y+1)/2;if(a.get(Math.floor(c),Math.floor(b))){var d=O({x:Math.floor(c), +y:Math.floor(b)},[1,1,1],a)+y({x:c,y:b},n);return{x:c,y:b,score:d}}}).filter(a=>!!a).sort((a,b)=>a.score-b.score);return{alignmentPattern:15<=c&&b.length?b[0]:n,dimension:f}}function Q(a){var b=ka(a);if(!b)return null;for(let e of b){b=ha(a,e);var c=b.matrix;if(null==c)c=null;else{var d=L(c);if(d)c=d;else{for(d=0;d{a[c]=b[c]})}function I(a,b,c,d={}){let e=Object.create(null);R(e,la);R(e,d); +d="onlyInvert"===e.inversionAttempts||"invertFirst"===e.inversionAttempts;var f="attemptBoth"===e.inversionAttempts||d;var g=e.greyScaleWeights,h=e.canOverwriteImage,k=b*c;if(a.length!==4*k)throw Error("Malformed data passed to binarizer.");var n=0;if(h){var m=new Uint8ClampedArray(a.buffer,n,k);n+=k}m=new S(b,c,m);if(g.useIntegerApproximation)for(var l=0;l>8)}else for(l=0;lt;t++)for(let a=0;8>a;a++){let b=m.get(8*q+a,8*p+t);u=Math.min(u,b);r=Math.max(r,b)}t=(u+r)/2;t=Math.min(255,1.11*t);24>=r-u&&(t=u/2,0a?2:a>c?c:a;h=l-3;h=2>b?2:b>h?h:b;k=0;for(n=-2;2>=n;n++)for(u=-2;2>=u;u++)k+=v.get(c+n,h+u);c=k/25;for(h=0;8>h;h++)for(k=0;8>k;k++)n=8*a+h,u=8*b+k,r=m.get(n,u),p.set(n,u,r<=c),f&&q.set(n,u,!(r<=c))}f=f?{binarized:p,inverted:q}:{binarized:p};let {binarized:w,inverted:x}=f;(f=Q(d?x:w))||"attemptBoth"!==e.inversionAttempts&&"invertFirst"!==e.inversionAttempts|| +(f=Q(d?w:x));return f}class A{constructor(a,b){this.width=b;this.height=a.length/b;this.data=a}static createEmpty(a,b){return new A(new Uint8ClampedArray(a*b),a)}get(a,b){return 0>a||a>=this.width||0>b||b>=this.height?!1:!!this.data[b*this.width+a]}set(a,b,c){this.data[b*this.width+a]=c?1:0}setRegion(a,b,c,d,e){for(let f=b;fa||32this.available())throw Error("Cannot read "+a.toString()+" bits");var b=0;if(0>8-c<>b;a-=c;this.bitOffset+=c;8===this.bitOffset&&(this.bitOffset=0,this.byteOffset++)}if(0>c<>c,this.bitOffset+=a)}return b}available(){return 8*(this.bytes.length-this.byteOffset)-this.bitOffset}}var r;(function(a){a.Numeric="numeric";a.Alphanumeric="alphanumeric";a.Byte="byte";a.Kanji="kanji";a.ECI="eci";a.StructuredAppend="structuredappend"})(r||(r={}));var t;(function(a){a[a.Terminator=0]="Terminator";a[a.Numeric=1]="Numeric";a[a.Alphanumeric=2]="Alphanumeric";a[a.Byte=4]="Byte";a[a.Kanji=8]="Kanji";a[a.ECI=7]="ECI";a[a.StructuredAppend= +3]="StructuredAppend"})(t||(t={}));let B="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:".split("");class w{constructor(a,b){if(0===b.length)throw Error("No coefficients.");this.field=a;let c=b.length;if(1a.length&&([b,a]=[a,b]);let c=new Uint8ClampedArray(a.length),d=a.length-b.length;for(var e=0;ea)throw Error("Invalid degree less than 0");if(0===b)return this.field.zero; +let c=this.coefficients.length;a=new Uint8ClampedArray(c+a);for(let d=0;d{b^=a}),b;b=this.coefficients[0];for(let d=1;d=this.size&&(a=(a^this.primitive)&this.size-1);for(a=0;aa)throw Error("Invalid monomial degree less than 0");if(0===b)return this.zero;a=new Uint8ClampedArray(a+1);a[0]=b;return new w(this,a)}log(a){if(0===a)throw Error("Can't take log(0)");return this.logTable[a]}exp(a){return this.expTable[a]}}let K=[{infoBits:null,versionNumber:1,alignmentPatternCenters:[],errorCorrectionLevels:[{ecCodewordsPerBlock:7,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:19}]},{ecCodewordsPerBlock:10,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:16}]},{ecCodewordsPerBlock:13, +ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:13}]},{ecCodewordsPerBlock:17,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:9}]}]},{infoBits:null,versionNumber:2,alignmentPatternCenters:[6,18],errorCorrectionLevels:[{ecCodewordsPerBlock:10,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:34}]},{ecCodewordsPerBlock:16,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:28}]},{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:22}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:16}]}]}, +{infoBits:null,versionNumber:3,alignmentPatternCenters:[6,22],errorCorrectionLevels:[{ecCodewordsPerBlock:15,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:55}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:44}]},{ecCodewordsPerBlock:18,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:17}]},{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:13}]}]},{infoBits:null,versionNumber:4,alignmentPatternCenters:[6,26],errorCorrectionLevels:[{ecCodewordsPerBlock:20,ecBlocks:[{numBlocks:1, +dataCodewordsPerBlock:80}]},{ecCodewordsPerBlock:18,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:32}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:24}]},{ecCodewordsPerBlock:16,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:9}]}]},{infoBits:null,versionNumber:5,alignmentPatternCenters:[6,30],errorCorrectionLevels:[{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:108}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:43}]},{ecCodewordsPerBlock:18, +ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:15},{numBlocks:2,dataCodewordsPerBlock:16}]},{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:11},{numBlocks:2,dataCodewordsPerBlock:12}]}]},{infoBits:null,versionNumber:6,alignmentPatternCenters:[6,34],errorCorrectionLevels:[{ecCodewordsPerBlock:18,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:68}]},{ecCodewordsPerBlock:16,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:27}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:19}]}, +{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:15}]}]},{infoBits:31892,versionNumber:7,alignmentPatternCenters:[6,22,38],errorCorrectionLevels:[{ecCodewordsPerBlock:20,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:78}]},{ecCodewordsPerBlock:18,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:31}]},{ecCodewordsPerBlock:18,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:14},{numBlocks:4,dataCodewordsPerBlock:15}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:13}, +{numBlocks:1,dataCodewordsPerBlock:14}]}]},{infoBits:34236,versionNumber:8,alignmentPatternCenters:[6,24,42],errorCorrectionLevels:[{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:97}]},{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:38},{numBlocks:2,dataCodewordsPerBlock:39}]},{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:18},{numBlocks:2,dataCodewordsPerBlock:19}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:14}, +{numBlocks:2,dataCodewordsPerBlock:15}]}]},{infoBits:39577,versionNumber:9,alignmentPatternCenters:[6,26,46],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:116}]},{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:36},{numBlocks:2,dataCodewordsPerBlock:37}]},{ecCodewordsPerBlock:20,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:16},{numBlocks:4,dataCodewordsPerBlock:17}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:12}, +{numBlocks:4,dataCodewordsPerBlock:13}]}]},{infoBits:42195,versionNumber:10,alignmentPatternCenters:[6,28,50],errorCorrectionLevels:[{ecCodewordsPerBlock:18,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:68},{numBlocks:2,dataCodewordsPerBlock:69}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:43},{numBlocks:1,dataCodewordsPerBlock:44}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:6,dataCodewordsPerBlock:19},{numBlocks:2,dataCodewordsPerBlock:20}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:6, +dataCodewordsPerBlock:15},{numBlocks:2,dataCodewordsPerBlock:16}]}]},{infoBits:48118,versionNumber:11,alignmentPatternCenters:[6,30,54],errorCorrectionLevels:[{ecCodewordsPerBlock:20,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:81}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:50},{numBlocks:4,dataCodewordsPerBlock:51}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:22},{numBlocks:4,dataCodewordsPerBlock:23}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:3, +dataCodewordsPerBlock:12},{numBlocks:8,dataCodewordsPerBlock:13}]}]},{infoBits:51042,versionNumber:12,alignmentPatternCenters:[6,32,58],errorCorrectionLevels:[{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:92},{numBlocks:2,dataCodewordsPerBlock:93}]},{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:6,dataCodewordsPerBlock:36},{numBlocks:2,dataCodewordsPerBlock:37}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:20},{numBlocks:6,dataCodewordsPerBlock:21}]}, +{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:7,dataCodewordsPerBlock:14},{numBlocks:4,dataCodewordsPerBlock:15}]}]},{infoBits:55367,versionNumber:13,alignmentPatternCenters:[6,34,62],errorCorrectionLevels:[{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:107}]},{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:8,dataCodewordsPerBlock:37},{numBlocks:1,dataCodewordsPerBlock:38}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:8,dataCodewordsPerBlock:20},{numBlocks:4,dataCodewordsPerBlock:21}]}, +{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:12,dataCodewordsPerBlock:11},{numBlocks:4,dataCodewordsPerBlock:12}]}]},{infoBits:58893,versionNumber:14,alignmentPatternCenters:[6,26,46,66],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:115},{numBlocks:1,dataCodewordsPerBlock:116}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:40},{numBlocks:5,dataCodewordsPerBlock:41}]},{ecCodewordsPerBlock:20,ecBlocks:[{numBlocks:11,dataCodewordsPerBlock:16}, +{numBlocks:5,dataCodewordsPerBlock:17}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:11,dataCodewordsPerBlock:12},{numBlocks:5,dataCodewordsPerBlock:13}]}]},{infoBits:63784,versionNumber:15,alignmentPatternCenters:[6,26,48,70],errorCorrectionLevels:[{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:5,dataCodewordsPerBlock:87},{numBlocks:1,dataCodewordsPerBlock:88}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:5,dataCodewordsPerBlock:41},{numBlocks:5,dataCodewordsPerBlock:42}]},{ecCodewordsPerBlock:30, +ecBlocks:[{numBlocks:5,dataCodewordsPerBlock:24},{numBlocks:7,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:11,dataCodewordsPerBlock:12},{numBlocks:7,dataCodewordsPerBlock:13}]}]},{infoBits:68472,versionNumber:16,alignmentPatternCenters:[6,26,50,74],errorCorrectionLevels:[{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:5,dataCodewordsPerBlock:98},{numBlocks:1,dataCodewordsPerBlock:99}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:7,dataCodewordsPerBlock:45},{numBlocks:3,dataCodewordsPerBlock:46}]}, +{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:15,dataCodewordsPerBlock:19},{numBlocks:2,dataCodewordsPerBlock:20}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:15},{numBlocks:13,dataCodewordsPerBlock:16}]}]},{infoBits:70749,versionNumber:17,alignmentPatternCenters:[6,30,54,78],errorCorrectionLevels:[{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:107},{numBlocks:5,dataCodewordsPerBlock:108}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:10,dataCodewordsPerBlock:46}, +{numBlocks:1,dataCodewordsPerBlock:47}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:22},{numBlocks:15,dataCodewordsPerBlock:23}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:14},{numBlocks:17,dataCodewordsPerBlock:15}]}]},{infoBits:76311,versionNumber:18,alignmentPatternCenters:[6,30,56,82],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:5,dataCodewordsPerBlock:120},{numBlocks:1,dataCodewordsPerBlock:121}]},{ecCodewordsPerBlock:26, +ecBlocks:[{numBlocks:9,dataCodewordsPerBlock:43},{numBlocks:4,dataCodewordsPerBlock:44}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:17,dataCodewordsPerBlock:22},{numBlocks:1,dataCodewordsPerBlock:23}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:14},{numBlocks:19,dataCodewordsPerBlock:15}]}]},{infoBits:79154,versionNumber:19,alignmentPatternCenters:[6,30,58,86],errorCorrectionLevels:[{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:113},{numBlocks:4, +dataCodewordsPerBlock:114}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:44},{numBlocks:11,dataCodewordsPerBlock:45}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:17,dataCodewordsPerBlock:21},{numBlocks:4,dataCodewordsPerBlock:22}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:9,dataCodewordsPerBlock:13},{numBlocks:16,dataCodewordsPerBlock:14}]}]},{infoBits:84390,versionNumber:20,alignmentPatternCenters:[6,34,62,90],errorCorrectionLevels:[{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:3, +dataCodewordsPerBlock:107},{numBlocks:5,dataCodewordsPerBlock:108}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:41},{numBlocks:13,dataCodewordsPerBlock:42}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:15,dataCodewordsPerBlock:24},{numBlocks:5,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:15,dataCodewordsPerBlock:15},{numBlocks:10,dataCodewordsPerBlock:16}]}]},{infoBits:87683,versionNumber:21,alignmentPatternCenters:[6,28,50,72,94],errorCorrectionLevels:[{ecCodewordsPerBlock:28, +ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:116},{numBlocks:4,dataCodewordsPerBlock:117}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:17,dataCodewordsPerBlock:42}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:17,dataCodewordsPerBlock:22},{numBlocks:6,dataCodewordsPerBlock:23}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:19,dataCodewordsPerBlock:16},{numBlocks:6,dataCodewordsPerBlock:17}]}]},{infoBits:92361,versionNumber:22,alignmentPatternCenters:[6,26,50,74,98],errorCorrectionLevels:[{ecCodewordsPerBlock:28, +ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:111},{numBlocks:7,dataCodewordsPerBlock:112}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:17,dataCodewordsPerBlock:46}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:7,dataCodewordsPerBlock:24},{numBlocks:16,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:34,dataCodewordsPerBlock:13}]}]},{infoBits:96236,versionNumber:23,alignmentPatternCenters:[6,30,54,74,102],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:4, +dataCodewordsPerBlock:121},{numBlocks:5,dataCodewordsPerBlock:122}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:47},{numBlocks:14,dataCodewordsPerBlock:48}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:11,dataCodewordsPerBlock:24},{numBlocks:14,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:16,dataCodewordsPerBlock:15},{numBlocks:14,dataCodewordsPerBlock:16}]}]},{infoBits:102084,versionNumber:24,alignmentPatternCenters:[6,28,54,80,106],errorCorrectionLevels:[{ecCodewordsPerBlock:30, +ecBlocks:[{numBlocks:6,dataCodewordsPerBlock:117},{numBlocks:4,dataCodewordsPerBlock:118}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:6,dataCodewordsPerBlock:45},{numBlocks:14,dataCodewordsPerBlock:46}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:11,dataCodewordsPerBlock:24},{numBlocks:16,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:30,dataCodewordsPerBlock:16},{numBlocks:2,dataCodewordsPerBlock:17}]}]},{infoBits:102881,versionNumber:25,alignmentPatternCenters:[6, +32,58,84,110],errorCorrectionLevels:[{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:8,dataCodewordsPerBlock:106},{numBlocks:4,dataCodewordsPerBlock:107}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:8,dataCodewordsPerBlock:47},{numBlocks:13,dataCodewordsPerBlock:48}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:7,dataCodewordsPerBlock:24},{numBlocks:22,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:22,dataCodewordsPerBlock:15},{numBlocks:13,dataCodewordsPerBlock:16}]}]}, +{infoBits:110507,versionNumber:26,alignmentPatternCenters:[6,30,58,86,114],errorCorrectionLevels:[{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:10,dataCodewordsPerBlock:114},{numBlocks:2,dataCodewordsPerBlock:115}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:19,dataCodewordsPerBlock:46},{numBlocks:4,dataCodewordsPerBlock:47}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:28,dataCodewordsPerBlock:22},{numBlocks:6,dataCodewordsPerBlock:23}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:33,dataCodewordsPerBlock:16}, +{numBlocks:4,dataCodewordsPerBlock:17}]}]},{infoBits:110734,versionNumber:27,alignmentPatternCenters:[6,34,62,90,118],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:8,dataCodewordsPerBlock:122},{numBlocks:4,dataCodewordsPerBlock:123}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:22,dataCodewordsPerBlock:45},{numBlocks:3,dataCodewordsPerBlock:46}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:8,dataCodewordsPerBlock:23},{numBlocks:26,dataCodewordsPerBlock:24}]},{ecCodewordsPerBlock:30, +ecBlocks:[{numBlocks:12,dataCodewordsPerBlock:15},{numBlocks:28,dataCodewordsPerBlock:16}]}]},{infoBits:117786,versionNumber:28,alignmentPatternCenters:[6,26,50,74,98,122],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:117},{numBlocks:10,dataCodewordsPerBlock:118}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:45},{numBlocks:23,dataCodewordsPerBlock:46}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:24},{numBlocks:31, +dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:11,dataCodewordsPerBlock:15},{numBlocks:31,dataCodewordsPerBlock:16}]}]},{infoBits:119615,versionNumber:29,alignmentPatternCenters:[6,30,54,78,102,126],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:7,dataCodewordsPerBlock:116},{numBlocks:7,dataCodewordsPerBlock:117}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:21,dataCodewordsPerBlock:45},{numBlocks:7,dataCodewordsPerBlock:46}]},{ecCodewordsPerBlock:30, +ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:23},{numBlocks:37,dataCodewordsPerBlock:24}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:19,dataCodewordsPerBlock:15},{numBlocks:26,dataCodewordsPerBlock:16}]}]},{infoBits:126325,versionNumber:30,alignmentPatternCenters:[6,26,52,78,104,130],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:5,dataCodewordsPerBlock:115},{numBlocks:10,dataCodewordsPerBlock:116}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:19,dataCodewordsPerBlock:47}, +{numBlocks:10,dataCodewordsPerBlock:48}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:15,dataCodewordsPerBlock:24},{numBlocks:25,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:23,dataCodewordsPerBlock:15},{numBlocks:25,dataCodewordsPerBlock:16}]}]},{infoBits:127568,versionNumber:31,alignmentPatternCenters:[6,30,56,82,108,134],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:13,dataCodewordsPerBlock:115},{numBlocks:3,dataCodewordsPerBlock:116}]},{ecCodewordsPerBlock:28, +ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:46},{numBlocks:29,dataCodewordsPerBlock:47}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:42,dataCodewordsPerBlock:24},{numBlocks:1,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:23,dataCodewordsPerBlock:15},{numBlocks:28,dataCodewordsPerBlock:16}]}]},{infoBits:133589,versionNumber:32,alignmentPatternCenters:[6,34,60,86,112,138],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:17,dataCodewordsPerBlock:115}]}, +{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:10,dataCodewordsPerBlock:46},{numBlocks:23,dataCodewordsPerBlock:47}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:10,dataCodewordsPerBlock:24},{numBlocks:35,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:19,dataCodewordsPerBlock:15},{numBlocks:35,dataCodewordsPerBlock:16}]}]},{infoBits:136944,versionNumber:33,alignmentPatternCenters:[6,30,58,86,114,142],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:17,dataCodewordsPerBlock:115}, +{numBlocks:1,dataCodewordsPerBlock:116}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:14,dataCodewordsPerBlock:46},{numBlocks:21,dataCodewordsPerBlock:47}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:29,dataCodewordsPerBlock:24},{numBlocks:19,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:11,dataCodewordsPerBlock:15},{numBlocks:46,dataCodewordsPerBlock:16}]}]},{infoBits:141498,versionNumber:34,alignmentPatternCenters:[6,34,62,90,118,146],errorCorrectionLevels:[{ecCodewordsPerBlock:30, +ecBlocks:[{numBlocks:13,dataCodewordsPerBlock:115},{numBlocks:6,dataCodewordsPerBlock:116}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:14,dataCodewordsPerBlock:46},{numBlocks:23,dataCodewordsPerBlock:47}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:44,dataCodewordsPerBlock:24},{numBlocks:7,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:59,dataCodewordsPerBlock:16},{numBlocks:1,dataCodewordsPerBlock:17}]}]},{infoBits:145311,versionNumber:35,alignmentPatternCenters:[6, +30,54,78,102,126,150],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:12,dataCodewordsPerBlock:121},{numBlocks:7,dataCodewordsPerBlock:122}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:12,dataCodewordsPerBlock:47},{numBlocks:26,dataCodewordsPerBlock:48}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:39,dataCodewordsPerBlock:24},{numBlocks:14,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:22,dataCodewordsPerBlock:15},{numBlocks:41,dataCodewordsPerBlock:16}]}]}, +{infoBits:150283,versionNumber:36,alignmentPatternCenters:[6,24,50,76,102,128,154],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:6,dataCodewordsPerBlock:121},{numBlocks:14,dataCodewordsPerBlock:122}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:6,dataCodewordsPerBlock:47},{numBlocks:34,dataCodewordsPerBlock:48}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:46,dataCodewordsPerBlock:24},{numBlocks:10,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:2, +dataCodewordsPerBlock:15},{numBlocks:64,dataCodewordsPerBlock:16}]}]},{infoBits:152622,versionNumber:37,alignmentPatternCenters:[6,28,54,80,106,132,158],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:17,dataCodewordsPerBlock:122},{numBlocks:4,dataCodewordsPerBlock:123}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:29,dataCodewordsPerBlock:46},{numBlocks:14,dataCodewordsPerBlock:47}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:49,dataCodewordsPerBlock:24},{numBlocks:10,dataCodewordsPerBlock:25}]}, +{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:24,dataCodewordsPerBlock:15},{numBlocks:46,dataCodewordsPerBlock:16}]}]},{infoBits:158308,versionNumber:38,alignmentPatternCenters:[6,32,58,84,110,136,162],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:122},{numBlocks:18,dataCodewordsPerBlock:123}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:13,dataCodewordsPerBlock:46},{numBlocks:32,dataCodewordsPerBlock:47}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:48, +dataCodewordsPerBlock:24},{numBlocks:14,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:42,dataCodewordsPerBlock:15},{numBlocks:32,dataCodewordsPerBlock:16}]}]},{infoBits:161089,versionNumber:39,alignmentPatternCenters:[6,26,54,82,110,138,166],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:20,dataCodewordsPerBlock:117},{numBlocks:4,dataCodewordsPerBlock:118}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:40,dataCodewordsPerBlock:47},{numBlocks:7,dataCodewordsPerBlock:48}]}, +{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:43,dataCodewordsPerBlock:24},{numBlocks:22,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:10,dataCodewordsPerBlock:15},{numBlocks:67,dataCodewordsPerBlock:16}]}]},{infoBits:167017,versionNumber:40,alignmentPatternCenters:[6,30,58,86,114,142,170],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:19,dataCodewordsPerBlock:118},{numBlocks:6,dataCodewordsPerBlock:119}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:18, +dataCodewordsPerBlock:47},{numBlocks:31,dataCodewordsPerBlock:48}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:34,dataCodewordsPerBlock:24},{numBlocks:34,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:20,dataCodewordsPerBlock:15},{numBlocks:61,dataCodewordsPerBlock:16}]}]}],da=[{bits:21522,formatInfo:{errorCorrectionLevel:1,dataMask:0}},{bits:20773,formatInfo:{errorCorrectionLevel:1,dataMask:1}},{bits:24188,formatInfo:{errorCorrectionLevel:1,dataMask:2}},{bits:23371,formatInfo:{errorCorrectionLevel:1, +dataMask:3}},{bits:17913,formatInfo:{errorCorrectionLevel:1,dataMask:4}},{bits:16590,formatInfo:{errorCorrectionLevel:1,dataMask:5}},{bits:20375,formatInfo:{errorCorrectionLevel:1,dataMask:6}},{bits:19104,formatInfo:{errorCorrectionLevel:1,dataMask:7}},{bits:30660,formatInfo:{errorCorrectionLevel:0,dataMask:0}},{bits:29427,formatInfo:{errorCorrectionLevel:0,dataMask:1}},{bits:32170,formatInfo:{errorCorrectionLevel:0,dataMask:2}},{bits:30877,formatInfo:{errorCorrectionLevel:0,dataMask:3}},{bits:26159, +formatInfo:{errorCorrectionLevel:0,dataMask:4}},{bits:25368,formatInfo:{errorCorrectionLevel:0,dataMask:5}},{bits:27713,formatInfo:{errorCorrectionLevel:0,dataMask:6}},{bits:26998,formatInfo:{errorCorrectionLevel:0,dataMask:7}},{bits:5769,formatInfo:{errorCorrectionLevel:3,dataMask:0}},{bits:5054,formatInfo:{errorCorrectionLevel:3,dataMask:1}},{bits:7399,formatInfo:{errorCorrectionLevel:3,dataMask:2}},{bits:6608,formatInfo:{errorCorrectionLevel:3,dataMask:3}},{bits:1890,formatInfo:{errorCorrectionLevel:3, +dataMask:4}},{bits:597,formatInfo:{errorCorrectionLevel:3,dataMask:5}},{bits:3340,formatInfo:{errorCorrectionLevel:3,dataMask:6}},{bits:2107,formatInfo:{errorCorrectionLevel:3,dataMask:7}},{bits:13663,formatInfo:{errorCorrectionLevel:2,dataMask:0}},{bits:12392,formatInfo:{errorCorrectionLevel:2,dataMask:1}},{bits:16177,formatInfo:{errorCorrectionLevel:2,dataMask:2}},{bits:14854,formatInfo:{errorCorrectionLevel:2,dataMask:3}},{bits:9396,formatInfo:{errorCorrectionLevel:2,dataMask:4}},{bits:8579,formatInfo:{errorCorrectionLevel:2, +dataMask:5}},{bits:11994,formatInfo:{errorCorrectionLevel:2,dataMask:6}},{bits:11245,formatInfo:{errorCorrectionLevel:2,dataMask:7}}],aa=[a=>0===(a.y+a.x)%2,a=>0===a.y%2,a=>0===a.x%3,a=>0===(a.y+a.x)%3,a=>0===(Math.floor(a.y/2)+Math.floor(a.x/3))%2,a=>0===a.x*a.y%2+a.x*a.y%3,a=>0===(a.y*a.x%2+a.y*a.x%3)%2,a=>0===((a.y+a.x)%2+a.y*a.x%3)%2],y=(a,b)=>Math.sqrt(Math.pow(b.x-a.x,2)+Math.pow(b.y-a.y,2)),la={inversionAttempts:"attemptBoth",greyScaleWeights:{red:.2126,green:.7152,blue:.0722,useIntegerApproximation:!1}, +canOverwriteImage:!0};I.default=I;let G="dontInvert",D={red:77,green:150,blue:29,useIntegerApproximation:!0};self.onmessage=a=>{let b=a.data.data;switch(a.data.type){case "decode":a=I(b.data,b.width,b.height,{inversionAttempts:G,greyScaleWeights:D});self.postMessage({type:"qrResult",data:a?a.data:null});break;case "grayscaleWeights":D.red=b.red;D.green=b.green;D.blue=b.blue;D.useIntegerApproximation=b.useIntegerApproximation;break;case "inversionMode":switch(b){case "original":G="dontInvert";break; +case "invert":G="onlyInvert";break;case "both":G="attemptBoth";break;default:throw Error("Invalid inversion mode");}break;case "close":self.close()}}})() +//# sourceMappingURL=qr-scanner-worker.min.js.map diff --git a/praesentia/static/qr-scanner-worker.min.js.map b/praesentia/static/qr-scanner-worker.min.js.map new file mode 100644 index 0000000..dbf29b5 --- /dev/null +++ b/praesentia/static/qr-scanner-worker.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"qr-scanner-worker.min.js","sources":["node_modules/jsqr-es6/src/decoder/decodeData/index.ts","node_modules/jsqr-es6/src/decoder/reedsolomon/GenericGF.ts","node_modules/jsqr-es6/src/decoder/reedsolomon/index.ts","node_modules/jsqr-es6/src/decoder/decoder.ts","node_modules/jsqr-es6/src/extractor/index.ts","node_modules/jsqr-es6/src/locator/index.ts","node_modules/jsqr-es6/src/index.ts","node_modules/jsqr-es6/src/binarizer/index.ts","node_modules/jsqr-es6/src/BitMatrix.ts","node_modules/jsqr-es6/src/decoder/decodeData/BitStream.ts","node_modules/jsqr-es6/src/decoder/reedsolomon/GenericGFPoly.ts","node_modules/jsqr-es6/src/decoder/version.ts","src/worker.js"],"sourcesContent":["// tslint:disable:no-bitwise\nimport { BitStream } from \"./BitStream\";\n\nexport interface Chunk {\n type: Mode;\n text: string;\n}\n\nexport interface ByteChunk {\n type: Mode.Byte | Mode.Kanji;\n bytes: number[];\n}\n\nexport interface ECIChunk {\n type: Mode.ECI;\n assignmentNumber: number;\n}\n\nexport interface StructuredAppend {\n type: Mode.StructuredAppend;\n currentSequence: number;\n totalSequence: number;\n parity: number;\n}\n\nexport type Chunks = Array;\n\nexport interface DecodedQR {\n text: string;\n bytes: number[];\n chunks: Chunks;\n version: number;\n}\n\nexport enum Mode {\n Numeric = \"numeric\",\n Alphanumeric = \"alphanumeric\",\n Byte = \"byte\",\n Kanji = \"kanji\",\n ECI = \"eci\",\n StructuredAppend = \"structuredappend\",\n}\n\nenum ModeByte {\n Terminator = 0x0,\n Numeric = 0x1,\n Alphanumeric = 0x2,\n Byte = 0x4,\n Kanji = 0x8,\n ECI = 0x7,\n StructuredAppend = 0x3,\n // FNC1FirstPosition = 0x5,\n // FNC1SecondPosition = 0x9,\n}\n\nfunction decodeNumeric(stream: BitStream, size: number) {\n const bytes: number[] = [];\n let text = \"\";\n\n const characterCountSize = [10, 12, 14][size];\n let length = stream.readBits(characterCountSize);\n // Read digits in groups of 3\n while (length >= 3) {\n const num = stream.readBits(10);\n if (num >= 1000) {\n throw new Error(\"Invalid numeric value above 999\");\n }\n\n const a = Math.floor(num / 100);\n const b = Math.floor(num / 10) % 10;\n const c = num % 10;\n\n bytes.push(48 + a, 48 + b, 48 + c);\n text += a.toString() + b.toString() + c.toString();\n length -= 3;\n }\n\n // If the number of digits aren't a multiple of 3, the remaining digits are special cased.\n if (length === 2) {\n const num = stream.readBits(7);\n if (num >= 100) {\n throw new Error(\"Invalid numeric value above 99\");\n }\n\n const a = Math.floor(num / 10);\n const b = num % 10;\n\n bytes.push(48 + a, 48 + b);\n text += a.toString() + b.toString();\n } else if (length === 1) {\n const num = stream.readBits(4);\n if (num >= 10) {\n throw new Error(\"Invalid numeric value above 9\");\n }\n\n bytes.push(48 + num);\n text += num.toString();\n }\n\n return { bytes, text };\n}\n\nconst AlphanumericCharacterCodes = [\n \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\",\n \"9\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\",\n \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\",\n \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\",\n \" \", \"$\", \"%\", \"*\", \"+\", \"-\", \".\", \"/\", \":\",\n];\n\nfunction decodeAlphanumeric(stream: BitStream, size: number) {\n const bytes: number[] = [];\n let text = \"\";\n\n const characterCountSize = [9, 11, 13][size];\n let length = stream.readBits(characterCountSize);\n while (length >= 2) {\n const v = stream.readBits(11);\n\n const a = Math.floor(v / 45);\n const b = v % 45;\n\n bytes.push(AlphanumericCharacterCodes[a].charCodeAt(0), AlphanumericCharacterCodes[b].charCodeAt(0));\n text += AlphanumericCharacterCodes[a] + AlphanumericCharacterCodes[b];\n length -= 2;\n }\n\n if (length === 1) {\n const a = stream.readBits(6);\n bytes.push(AlphanumericCharacterCodes[a].charCodeAt(0));\n text += AlphanumericCharacterCodes[a];\n }\n\n return { bytes, text };\n}\n\nfunction decodeByte(stream: BitStream, size: number) {\n const bytes: number[] = [];\n let text = \"\";\n\n const characterCountSize = [8, 16, 16][size];\n const length = stream.readBits(characterCountSize);\n for (let i = 0; i < length; i++) {\n const b = stream.readBits(8);\n bytes.push(b);\n }\n try {\n text += decodeURIComponent(bytes.map(b => `%${(\"0\" + b.toString(16)).substr(-2)}`).join(\"\"));\n } catch {\n // failed to decode\n }\n\n return { bytes, text };\n}\n\nfunction decodeKanji(stream: BitStream, size: number) {\n const bytes: number[] = [];\n\n const characterCountSize = [8, 10, 12][size];\n const length = stream.readBits(characterCountSize);\n for (let i = 0; i < length; i++) {\n const k = stream.readBits(13);\n\n let c = (Math.floor(k / 0xC0) << 8) | (k % 0xC0);\n if (c < 0x1F00) {\n c += 0x8140;\n } else {\n c += 0xC140;\n }\n\n bytes.push(c >> 8, c & 0xFF);\n }\n\n const text = new TextDecoder(\"shift-jis\").decode(Uint8Array.from(bytes));\n return { bytes, text };\n}\n\nexport function decode(data: Uint8ClampedArray, version: number): DecodedQR {\n const stream = new BitStream(data);\n\n // There are 3 'sizes' based on the version. 1-9 is small (0), 10-26 is medium (1) and 27-40 is large (2).\n const size = version <= 9 ? 0 : version <= 26 ? 1 : 2;\n\n const result: DecodedQR = {\n text: \"\",\n bytes: [],\n chunks: [],\n version,\n };\n\n while (stream.available() >= 4) {\n const mode = stream.readBits(4);\n if (mode === ModeByte.Terminator) {\n return result;\n } else if (mode === ModeByte.ECI) {\n if (stream.readBits(1) === 0) {\n result.chunks.push({\n type: Mode.ECI,\n assignmentNumber: stream.readBits(7),\n });\n } else if (stream.readBits(1) === 0) {\n result.chunks.push({\n type: Mode.ECI,\n assignmentNumber: stream.readBits(14),\n });\n } else if (stream.readBits(1) === 0) {\n result.chunks.push({\n type: Mode.ECI,\n assignmentNumber: stream.readBits(21),\n });\n } else {\n // ECI data seems corrupted\n result.chunks.push({\n type: Mode.ECI,\n assignmentNumber: -1,\n });\n }\n } else if (mode === ModeByte.Numeric) {\n const numericResult = decodeNumeric(stream, size);\n result.text += numericResult.text;\n result.bytes.push(...numericResult.bytes);\n result.chunks.push({\n type: Mode.Numeric,\n text: numericResult.text,\n });\n } else if (mode === ModeByte.Alphanumeric) {\n const alphanumericResult = decodeAlphanumeric(stream, size);\n result.text += alphanumericResult.text;\n result.bytes.push(...alphanumericResult.bytes);\n result.chunks.push({\n type: Mode.Alphanumeric,\n text: alphanumericResult.text,\n });\n } else if (mode === ModeByte.Byte) {\n const byteResult = decodeByte(stream, size);\n result.text += byteResult.text;\n result.bytes.push(...byteResult.bytes);\n result.chunks.push({\n type: Mode.Byte,\n bytes: byteResult.bytes,\n text: byteResult.text,\n });\n } else if (mode === ModeByte.Kanji) {\n const kanjiResult = decodeKanji(stream, size);\n result.text += kanjiResult.text;\n result.bytes.push(...kanjiResult.bytes);\n result.chunks.push({\n type: Mode.Kanji,\n bytes: kanjiResult.bytes,\n text: kanjiResult.text,\n });\n } else if (mode === ModeByte.StructuredAppend) {\n result.chunks.push({\n type: Mode.StructuredAppend,\n currentSequence: stream.readBits(4),\n totalSequence: stream.readBits(4),\n parity: stream.readBits(8),\n });\n }\n }\n\n // If there is no data left, or the remaining bits are all 0, then that counts as a termination marker\n if (stream.available() === 0 || stream.readBits(stream.available()) === 0) {\n return result;\n }\n}\n","import GenericGFPoly from \"./GenericGFPoly\";\n\nexport function addOrSubtractGF(a: number, b: number) {\n return a ^ b; // tslint:disable-line:no-bitwise\n}\n\nexport default class GenericGF {\n public primitive: number;\n public size: number;\n public generatorBase: number;\n public zero: GenericGFPoly;\n public one: GenericGFPoly;\n\n private expTable: number[];\n private logTable: number[];\n\n constructor(primitive: number, size: number, genBase: number) {\n this.primitive = primitive;\n this.size = size;\n this.generatorBase = genBase;\n this.expTable = new Array(this.size);\n this.logTable = new Array(this.size);\n\n let x = 1;\n for (let i = 0; i < this.size; i++) {\n this.expTable[i] = x;\n x = x * 2;\n if (x >= this.size) {\n x = (x ^ this.primitive) & (this.size - 1); // tslint:disable-line:no-bitwise\n }\n }\n\n for (let i = 0; i < this.size - 1; i++) {\n this.logTable[this.expTable[i]] = i;\n }\n this.zero = new GenericGFPoly(this, Uint8ClampedArray.from([0]));\n this.one = new GenericGFPoly(this, Uint8ClampedArray.from([1]));\n }\n\n public multiply(a: number, b: number) {\n if (a === 0 || b === 0) {\n return 0;\n }\n return this.expTable[(this.logTable[a] + this.logTable[b]) % (this.size - 1)];\n }\n\n public inverse(a: number) {\n if (a === 0) {\n throw new Error(\"Can't invert 0\");\n }\n return this.expTable[this.size - this.logTable[a] - 1];\n }\n\n public buildMonomial(degree: number, coefficient: number): GenericGFPoly {\n if (degree < 0) {\n throw new Error(\"Invalid monomial degree less than 0\");\n }\n if (coefficient === 0) {\n return this.zero;\n }\n const coefficients = new Uint8ClampedArray(degree + 1);\n coefficients[0] = coefficient;\n return new GenericGFPoly(this, coefficients);\n }\n\n public log(a: number) {\n if (a === 0) {\n throw new Error(\"Can't take log(0)\");\n }\n return this.logTable[a];\n }\n\n public exp(a: number) {\n return this.expTable[a];\n }\n}\n","import GenericGF, { addOrSubtractGF } from \"./GenericGF\";\nimport GenericGFPoly from \"./GenericGFPoly\";\n\nfunction runEuclideanAlgorithm(field: GenericGF, a: GenericGFPoly, b: GenericGFPoly, R: number): GenericGFPoly[] {\n // Assume a's degree is >= b's\n if (a.degree() < b.degree()) {\n [a, b] = [b, a];\n }\n\n let rLast = a;\n let r = b;\n let tLast = field.zero;\n let t = field.one;\n\n // Run Euclidean algorithm until r's degree is less than R/2\n while (r.degree() >= R / 2) {\n const rLastLast = rLast;\n const tLastLast = tLast;\n rLast = r;\n tLast = t;\n\n // Divide rLastLast by rLast, with quotient in q and remainder in r\n if (rLast.isZero()) {\n // Euclidean algorithm already terminated?\n return null;\n }\n r = rLastLast;\n let q = field.zero;\n const denominatorLeadingTerm = rLast.getCoefficient(rLast.degree());\n const dltInverse = field.inverse(denominatorLeadingTerm);\n while (r.degree() >= rLast.degree() && !r.isZero()) {\n const degreeDiff = r.degree() - rLast.degree();\n const scale = field.multiply(r.getCoefficient(r.degree()), dltInverse);\n q = q.addOrSubtract(field.buildMonomial(degreeDiff, scale));\n r = r.addOrSubtract(rLast.multiplyByMonomial(degreeDiff, scale));\n }\n\n t = q.multiplyPoly(tLast).addOrSubtract(tLastLast);\n\n if (r.degree() >= rLast.degree()) {\n return null;\n }\n }\n\n const sigmaTildeAtZero = t.getCoefficient(0);\n if (sigmaTildeAtZero === 0) {\n return null;\n }\n\n const inverse = field.inverse(sigmaTildeAtZero);\n return [t.multiply(inverse), r.multiply(inverse)];\n}\n\nfunction findErrorLocations(field: GenericGF, errorLocator: GenericGFPoly): number[] {\n // This is a direct application of Chien's search\n const numErrors = errorLocator.degree();\n if (numErrors === 1) {\n return [errorLocator.getCoefficient(1)];\n }\n const result: number[] = new Array(numErrors);\n let errorCount = 0;\n for (let i = 1; i < field.size && errorCount < numErrors; i++) {\n if (errorLocator.evaluateAt(i) === 0) {\n result[errorCount] = field.inverse(i);\n errorCount++;\n }\n }\n if (errorCount !== numErrors) {\n return null;\n }\n return result;\n}\n\nfunction findErrorMagnitudes(field: GenericGF, errorEvaluator: GenericGFPoly, errorLocations: number[]): number[] {\n // This is directly applying Forney's Formula\n const s = errorLocations.length;\n const result: number[] = new Array(s);\n for (let i = 0; i < s; i++) {\n const xiInverse = field.inverse(errorLocations[i]);\n let denominator = 1;\n for (let j = 0; j < s; j++) {\n if (i !== j) {\n denominator = field.multiply(denominator, addOrSubtractGF(1, field.multiply(errorLocations[j], xiInverse)));\n }\n }\n result[i] = field.multiply(errorEvaluator.evaluateAt(xiInverse), field.inverse(denominator));\n if (field.generatorBase !== 0) {\n result[i] = field.multiply(result[i], xiInverse);\n }\n }\n return result;\n}\n\nexport function decode(bytes: number[], twoS: number) {\n const outputBytes = new Uint8ClampedArray(bytes.length);\n outputBytes.set(bytes);\n\n const field = new GenericGF(0x011D, 256, 0); // x^8 + x^4 + x^3 + x^2 + 1\n const poly = new GenericGFPoly(field, outputBytes);\n\n const syndromeCoefficients = new Uint8ClampedArray(twoS);\n let error = false;\n for (let s = 0; s < twoS; s++) {\n const evaluation = poly.evaluateAt(field.exp(s + field.generatorBase));\n syndromeCoefficients[syndromeCoefficients.length - 1 - s] = evaluation;\n if (evaluation !== 0) {\n error = true;\n }\n }\n if (!error) {\n return outputBytes;\n }\n\n const syndrome = new GenericGFPoly(field, syndromeCoefficients);\n\n const sigmaOmega = runEuclideanAlgorithm(field, field.buildMonomial(twoS, 1), syndrome, twoS);\n if (sigmaOmega === null) {\n return null;\n }\n\n const errorLocations = findErrorLocations(field, sigmaOmega[0]);\n if (errorLocations == null) {\n return null;\n }\n\n const errorMagnitudes = findErrorMagnitudes(field, sigmaOmega[1], errorLocations);\n for (let i = 0; i < errorLocations.length; i++) {\n const position = outputBytes.length - 1 - field.log(errorLocations[i]);\n if (position < 0) {\n return null;\n }\n outputBytes[position] = addOrSubtractGF(outputBytes[position], errorMagnitudes[i]);\n }\n\n return outputBytes;\n}\n","import { BitMatrix } from \"../BitMatrix\";\nimport { Point } from \"../Point\";\nimport { decode as decodeData, DecodedQR } from \"./decodeData\";\nimport { decode as rsDecode } from \"./reedsolomon\";\nimport { Version, VERSIONS } from \"./version\";\n\n// tslint:disable:no-bitwise\nfunction numBitsDiffering(x: number, y: number) {\n let z = x ^ y;\n let bitCount = 0;\n while (z) {\n bitCount++;\n z &= z - 1;\n }\n return bitCount;\n}\n\nfunction pushBit(bit: any, byte: number) {\n return (byte << 1) | bit;\n}\n// tslint:enable:no-bitwise\n\nconst FORMAT_INFO_TABLE = [\n { bits: 0x5412, formatInfo: { errorCorrectionLevel: 1, dataMask: 0 } },\n { bits: 0x5125, formatInfo: { errorCorrectionLevel: 1, dataMask: 1 } },\n { bits: 0x5E7C, formatInfo: { errorCorrectionLevel: 1, dataMask: 2 } },\n { bits: 0x5B4B, formatInfo: { errorCorrectionLevel: 1, dataMask: 3 } },\n { bits: 0x45F9, formatInfo: { errorCorrectionLevel: 1, dataMask: 4 } },\n { bits: 0x40CE, formatInfo: { errorCorrectionLevel: 1, dataMask: 5 } },\n { bits: 0x4F97, formatInfo: { errorCorrectionLevel: 1, dataMask: 6 } },\n { bits: 0x4AA0, formatInfo: { errorCorrectionLevel: 1, dataMask: 7 } },\n { bits: 0x77C4, formatInfo: { errorCorrectionLevel: 0, dataMask: 0 } },\n { bits: 0x72F3, formatInfo: { errorCorrectionLevel: 0, dataMask: 1 } },\n { bits: 0x7DAA, formatInfo: { errorCorrectionLevel: 0, dataMask: 2 } },\n { bits: 0x789D, formatInfo: { errorCorrectionLevel: 0, dataMask: 3 } },\n { bits: 0x662F, formatInfo: { errorCorrectionLevel: 0, dataMask: 4 } },\n { bits: 0x6318, formatInfo: { errorCorrectionLevel: 0, dataMask: 5 } },\n { bits: 0x6C41, formatInfo: { errorCorrectionLevel: 0, dataMask: 6 } },\n { bits: 0x6976, formatInfo: { errorCorrectionLevel: 0, dataMask: 7 } },\n { bits: 0x1689, formatInfo: { errorCorrectionLevel: 3, dataMask: 0 } },\n { bits: 0x13BE, formatInfo: { errorCorrectionLevel: 3, dataMask: 1 } },\n { bits: 0x1CE7, formatInfo: { errorCorrectionLevel: 3, dataMask: 2 } },\n { bits: 0x19D0, formatInfo: { errorCorrectionLevel: 3, dataMask: 3 } },\n { bits: 0x0762, formatInfo: { errorCorrectionLevel: 3, dataMask: 4 } },\n { bits: 0x0255, formatInfo: { errorCorrectionLevel: 3, dataMask: 5 } },\n { bits: 0x0D0C, formatInfo: { errorCorrectionLevel: 3, dataMask: 6 } },\n { bits: 0x083B, formatInfo: { errorCorrectionLevel: 3, dataMask: 7 } },\n { bits: 0x355F, formatInfo: { errorCorrectionLevel: 2, dataMask: 0 } },\n { bits: 0x3068, formatInfo: { errorCorrectionLevel: 2, dataMask: 1 } },\n { bits: 0x3F31, formatInfo: { errorCorrectionLevel: 2, dataMask: 2 } },\n { bits: 0x3A06, formatInfo: { errorCorrectionLevel: 2, dataMask: 3 } },\n { bits: 0x24B4, formatInfo: { errorCorrectionLevel: 2, dataMask: 4 } },\n { bits: 0x2183, formatInfo: { errorCorrectionLevel: 2, dataMask: 5 } },\n { bits: 0x2EDA, formatInfo: { errorCorrectionLevel: 2, dataMask: 6 } },\n { bits: 0x2BED, formatInfo: { errorCorrectionLevel: 2, dataMask: 7 } },\n];\n\nconst DATA_MASKS = [\n (p: Point) => ((p.y + p.x) % 2) === 0,\n (p: Point) => (p.y % 2) === 0,\n (p: Point) => p.x % 3 === 0,\n (p: Point) => (p.y + p.x) % 3 === 0,\n (p: Point) => (Math.floor(p.y / 2) + Math.floor(p.x / 3)) % 2 === 0,\n (p: Point) => ((p.x * p.y) % 2) + ((p.x * p.y) % 3) === 0,\n (p: Point) => ((((p.y * p.x) % 2) + (p.y * p.x) % 3) % 2) === 0,\n (p: Point) => ((((p.y + p.x) % 2) + (p.y * p.x) % 3) % 2) === 0,\n];\n\ninterface FormatInformation {\n errorCorrectionLevel: number;\n dataMask: number;\n}\n\nfunction buildFunctionPatternMask(version: Version): BitMatrix {\n const dimension = 17 + 4 * version.versionNumber;\n const matrix = BitMatrix.createEmpty(dimension, dimension);\n\n matrix.setRegion(0, 0, 9, 9, true); // Top left finder pattern + separator + format\n matrix.setRegion(dimension - 8, 0, 8, 9, true); // Top right finder pattern + separator + format\n matrix.setRegion(0, dimension - 8, 9, 8, true); // Bottom left finder pattern + separator + format\n\n // Alignment patterns\n for (const x of version.alignmentPatternCenters) {\n for (const y of version.alignmentPatternCenters) {\n if (!(x === 6 && y === 6 || x === 6 && y === dimension - 7 || x === dimension - 7 && y === 6)) {\n matrix.setRegion(x - 2, y - 2, 5, 5, true);\n }\n }\n }\n\n matrix.setRegion(6, 9, 1, dimension - 17, true); // Vertical timing pattern\n matrix.setRegion(9, 6, dimension - 17, 1, true); // Horizontal timing pattern\n\n if (version.versionNumber > 6) {\n matrix.setRegion(dimension - 11, 0, 3, 6, true); // Version info, top right\n matrix.setRegion(0, dimension - 11, 6, 3, true); // Version info, bottom left\n }\n\n return matrix;\n}\n\nfunction readCodewords(matrix: BitMatrix, version: Version, formatInfo: FormatInformation) {\n const dataMask = DATA_MASKS[formatInfo.dataMask];\n const dimension = matrix.height;\n\n const functionPatternMask = buildFunctionPatternMask(version);\n\n const codewords: number[] = [];\n let currentByte = 0;\n let bitsRead = 0;\n\n // Read columns in pairs, from right to left\n let readingUp = true;\n for (let columnIndex = dimension - 1; columnIndex > 0; columnIndex -= 2) {\n if (columnIndex === 6) { // Skip whole column with vertical alignment pattern;\n columnIndex--;\n }\n for (let i = 0; i < dimension; i++) {\n const y = readingUp ? dimension - 1 - i : i;\n for (let columnOffset = 0; columnOffset < 2; columnOffset++) {\n const x = columnIndex - columnOffset;\n if (!functionPatternMask.get(x, y)) {\n bitsRead++;\n let bit = matrix.get(x, y);\n if (dataMask({y, x})) {\n bit = !bit;\n }\n currentByte = pushBit(bit, currentByte);\n if (bitsRead === 8) { // Whole bytes\n codewords.push(currentByte);\n bitsRead = 0;\n currentByte = 0;\n }\n }\n }\n }\n readingUp = !readingUp;\n }\n return codewords;\n}\n\nfunction readVersion(matrix: BitMatrix): Version {\n const dimension = matrix.height;\n\n const provisionalVersion = Math.floor((dimension - 17) / 4);\n if (provisionalVersion <= 6) { // 6 and under dont have version info in the QR code\n return VERSIONS[provisionalVersion - 1];\n }\n\n let topRightVersionBits = 0;\n for (let y = 5; y >= 0; y--) {\n for (let x = dimension - 9; x >= dimension - 11; x--) {\n topRightVersionBits = pushBit(matrix.get(x, y), topRightVersionBits);\n }\n }\n\n let bottomLeftVersionBits = 0;\n for (let x = 5; x >= 0; x--) {\n for (let y = dimension - 9; y >= dimension - 11; y--) {\n bottomLeftVersionBits = pushBit(matrix.get(x, y), bottomLeftVersionBits);\n }\n }\n\n let bestDifference = Infinity;\n let bestVersion: Version;\n for (const version of VERSIONS) {\n if (version.infoBits === topRightVersionBits || version.infoBits === bottomLeftVersionBits) {\n return version;\n }\n\n let difference = numBitsDiffering(topRightVersionBits, version.infoBits);\n if (difference < bestDifference) {\n bestVersion = version;\n bestDifference = difference;\n }\n\n difference = numBitsDiffering(bottomLeftVersionBits, version.infoBits);\n if (difference < bestDifference) {\n bestVersion = version;\n bestDifference = difference;\n }\n }\n // We can tolerate up to 3 bits of error since no two version info codewords will\n // differ in less than 8 bits.\n if (bestDifference <= 3) {\n return bestVersion;\n }\n}\n\nfunction readFormatInformation(matrix: BitMatrix) {\n let topLeftFormatInfoBits = 0;\n for (let x = 0; x <= 8; x++) {\n if (x !== 6) { // Skip timing pattern bit\n topLeftFormatInfoBits = pushBit(matrix.get(x, 8), topLeftFormatInfoBits);\n }\n }\n for (let y = 7; y >= 0; y--) {\n if (y !== 6) { // Skip timing pattern bit\n topLeftFormatInfoBits = pushBit(matrix.get(8, y), topLeftFormatInfoBits);\n }\n }\n\n const dimension = matrix.height;\n let topRightBottomRightFormatInfoBits = 0;\n for (let y = dimension - 1; y >= dimension - 7; y--) { // bottom left\n topRightBottomRightFormatInfoBits = pushBit(matrix.get(8, y), topRightBottomRightFormatInfoBits);\n }\n for (let x = dimension - 8; x < dimension; x++) { // top right\n topRightBottomRightFormatInfoBits = pushBit(matrix.get(x, 8), topRightBottomRightFormatInfoBits);\n }\n\n let bestDifference = Infinity;\n let bestFormatInfo = null;\n for (const {bits, formatInfo} of FORMAT_INFO_TABLE) {\n if (bits === topLeftFormatInfoBits || bits === topRightBottomRightFormatInfoBits) {\n return formatInfo;\n }\n let difference = numBitsDiffering(topLeftFormatInfoBits, bits);\n if (difference < bestDifference) {\n bestFormatInfo = formatInfo;\n bestDifference = difference;\n }\n if (topLeftFormatInfoBits !== topRightBottomRightFormatInfoBits) { // also try the other option\n difference = numBitsDiffering(topRightBottomRightFormatInfoBits, bits);\n if (difference < bestDifference) {\n bestFormatInfo = formatInfo;\n bestDifference = difference;\n }\n }\n }\n // Hamming distance of the 32 masked codes is 7, by construction, so <= 3 bits differing means we found a match\n if (bestDifference <= 3) {\n return bestFormatInfo;\n }\n return null;\n}\n\nfunction getDataBlocks(codewords: number[], version: Version, ecLevel: number) {\n const ecInfo = version.errorCorrectionLevels[ecLevel];\n const dataBlocks: Array<{\n numDataCodewords: number;\n codewords: number[];\n }> = [];\n\n let totalCodewords = 0;\n ecInfo.ecBlocks.forEach(block => {\n for (let i = 0; i < block.numBlocks; i++) {\n dataBlocks.push({ numDataCodewords: block.dataCodewordsPerBlock, codewords: [] });\n totalCodewords += block.dataCodewordsPerBlock + ecInfo.ecCodewordsPerBlock;\n }\n });\n\n // In some cases the QR code will be malformed enough that we pull off more or less than we should.\n // If we pull off less there's nothing we can do.\n // If we pull off more we can safely truncate\n if (codewords.length < totalCodewords) {\n return null;\n }\n codewords = codewords.slice(0, totalCodewords);\n\n const shortBlockSize = ecInfo.ecBlocks[0].dataCodewordsPerBlock;\n // Pull codewords to fill the blocks up to the minimum size\n for (let i = 0; i < shortBlockSize; i++) {\n for (const dataBlock of dataBlocks) {\n dataBlock.codewords.push(codewords.shift());\n }\n }\n\n // If there are any large blocks, pull codewords to fill the last element of those\n if (ecInfo.ecBlocks.length > 1) {\n const smallBlockCount = ecInfo.ecBlocks[0].numBlocks;\n const largeBlockCount = ecInfo.ecBlocks[1].numBlocks;\n for (let i = 0; i < largeBlockCount; i++) {\n dataBlocks[smallBlockCount + i].codewords.push(codewords.shift());\n }\n }\n\n // Add the rest of the codewords to the blocks. These are the error correction codewords.\n while (codewords.length > 0) {\n for (const dataBlock of dataBlocks) {\n dataBlock.codewords.push(codewords.shift());\n }\n }\n\n return dataBlocks;\n}\n\nfunction decodeMatrix(matrix: BitMatrix) {\n const version = readVersion(matrix);\n if (!version) {\n return null;\n }\n\n const formatInfo = readFormatInformation(matrix);\n if (!formatInfo) {\n return null;\n }\n\n const codewords = readCodewords(matrix, version, formatInfo);\n const dataBlocks = getDataBlocks(codewords, version, formatInfo.errorCorrectionLevel);\n if (!dataBlocks) {\n return null;\n }\n\n // Count total number of data bytes\n const totalBytes = dataBlocks.reduce((a, b) => a + b.numDataCodewords, 0);\n const resultBytes = new Uint8ClampedArray(totalBytes);\n\n let resultIndex = 0;\n for (const dataBlock of dataBlocks) {\n const correctedBytes = rsDecode(dataBlock.codewords, dataBlock.codewords.length - dataBlock.numDataCodewords);\n if (!correctedBytes) {\n return null;\n }\n for (let i = 0; i < dataBlock.numDataCodewords; i++) {\n resultBytes[resultIndex++] = correctedBytes[i];\n }\n }\n\n try {\n return decodeData(resultBytes, version.versionNumber);\n } catch {\n return null;\n }\n}\n\nexport function decode(matrix: BitMatrix): DecodedQR {\n if (matrix == null) {\n return null;\n }\n const result = decodeMatrix(matrix);\n if (result) {\n return result;\n }\n // Decoding didn't work, try mirroring the QR across the topLeft -> bottomRight line.\n for (let x = 0; x < matrix.width; x++) {\n for (let y = x + 1; y < matrix.height; y++) {\n if (matrix.get(x, y) !== matrix.get(y, x)) {\n matrix.set(x, y, !matrix.get(x, y));\n matrix.set(y, x, !matrix.get(y, x));\n }\n }\n }\n return decodeMatrix(matrix);\n}\n","import {BitMatrix} from \"../BitMatrix\";\nimport {Point, QRLocation} from \"../locator\";\n\ninterface PerspectiveTransform {\n a11: number;\n a21: number;\n a31: number;\n a12: number;\n a22: number;\n a32: number;\n a13: number;\n a23: number;\n a33: number;\n}\n\nfunction squareToQuadrilateral(p1: Point, p2: Point, p3: Point, p4: Point): PerspectiveTransform {\n const dx3 = p1.x - p2.x + p3.x - p4.x;\n const dy3 = p1.y - p2.y + p3.y - p4.y;\n if (dx3 === 0 && dy3 === 0) { // Affine\n return {\n a11: p2.x - p1.x,\n a12: p2.y - p1.y,\n a13: 0,\n a21: p3.x - p2.x,\n a22: p3.y - p2.y,\n a23: 0,\n a31: p1.x,\n a32: p1.y,\n a33: 1,\n };\n } else {\n const dx1 = p2.x - p3.x;\n const dx2 = p4.x - p3.x;\n const dy1 = p2.y - p3.y;\n const dy2 = p4.y - p3.y;\n const denominator = dx1 * dy2 - dx2 * dy1;\n const a13 = (dx3 * dy2 - dx2 * dy3) / denominator;\n const a23 = (dx1 * dy3 - dx3 * dy1) / denominator;\n return {\n a11: p2.x - p1.x + a13 * p2.x,\n a12: p2.y - p1.y + a13 * p2.y,\n a13,\n a21: p4.x - p1.x + a23 * p4.x,\n a22: p4.y - p1.y + a23 * p4.y,\n a23,\n a31: p1.x,\n a32: p1.y,\n a33: 1,\n };\n }\n}\n\nfunction quadrilateralToSquare(p1: Point, p2: Point, p3: Point, p4: Point): PerspectiveTransform {\n // Here, the adjoint serves as the inverse:\n const sToQ = squareToQuadrilateral(p1, p2, p3, p4);\n return {\n a11: sToQ.a22 * sToQ.a33 - sToQ.a23 * sToQ.a32,\n a12: sToQ.a13 * sToQ.a32 - sToQ.a12 * sToQ.a33,\n a13: sToQ.a12 * sToQ.a23 - sToQ.a13 * sToQ.a22,\n a21: sToQ.a23 * sToQ.a31 - sToQ.a21 * sToQ.a33,\n a22: sToQ.a11 * sToQ.a33 - sToQ.a13 * sToQ.a31,\n a23: sToQ.a13 * sToQ.a21 - sToQ.a11 * sToQ.a23,\n a31: sToQ.a21 * sToQ.a32 - sToQ.a22 * sToQ.a31,\n a32: sToQ.a12 * sToQ.a31 - sToQ.a11 * sToQ.a32,\n a33: sToQ.a11 * sToQ.a22 - sToQ.a12 * sToQ.a21,\n };\n}\n\nfunction times(a: PerspectiveTransform, b: PerspectiveTransform): PerspectiveTransform {\n return {\n a11: a.a11 * b.a11 + a.a21 * b.a12 + a.a31 * b.a13,\n a12: a.a12 * b.a11 + a.a22 * b.a12 + a.a32 * b.a13,\n a13: a.a13 * b.a11 + a.a23 * b.a12 + a.a33 * b.a13,\n a21: a.a11 * b.a21 + a.a21 * b.a22 + a.a31 * b.a23,\n a22: a.a12 * b.a21 + a.a22 * b.a22 + a.a32 * b.a23,\n a23: a.a13 * b.a21 + a.a23 * b.a22 + a.a33 * b.a23,\n a31: a.a11 * b.a31 + a.a21 * b.a32 + a.a31 * b.a33,\n a32: a.a12 * b.a31 + a.a22 * b.a32 + a.a32 * b.a33,\n a33: a.a13 * b.a31 + a.a23 * b.a32 + a.a33 * b.a33,\n };\n}\n\nexport function extract(image: BitMatrix, location: QRLocation) {\n const qToS = quadrilateralToSquare(\n {x: 3.5, y: 3.5},\n {x: location.dimension - 3.5, y: 3.5},\n {x: location.dimension - 6.5, y: location.dimension - 6.5},\n {x: 3.5, y: location.dimension - 3.5},\n );\n const sToQ = squareToQuadrilateral(location.topLeft, location.topRight, location.alignmentPattern, location.bottomLeft);\n const transform = times(sToQ, qToS);\n\n const matrix = BitMatrix.createEmpty(location.dimension, location.dimension);\n const mappingFunction = (x: number, y: number) => {\n const denominator = transform.a13 * x + transform.a23 * y + transform.a33;\n return {\n x: (transform.a11 * x + transform.a21 * y + transform.a31) / denominator,\n y: (transform.a12 * x + transform.a22 * y + transform.a32) / denominator,\n };\n };\n\n for (let y = 0; y < location.dimension; y++) {\n for (let x = 0; x < location.dimension; x++) {\n const xValue = x + 0.5;\n const yValue = y + 0.5;\n const sourcePixel = mappingFunction(xValue, yValue);\n matrix.set(x, y, image.get(Math.floor(sourcePixel.x), Math.floor(sourcePixel.y)));\n }\n }\n\n return {\n matrix,\n mappingFunction,\n };\n}\n","import { BitMatrix } from \"../BitMatrix\";\n\nconst MAX_FINDERPATTERNS_TO_SEARCH = 5;\nconst MIN_QUAD_RATIO = 0.5;\nconst MAX_QUAD_RATIO = 1.5;\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport interface QRLocation {\n topRight: Point;\n bottomLeft: Point;\n topLeft: Point;\n alignmentPattern: Point;\n dimension: number;\n}\n\nconst distance = (a: Point, b: Point) => Math.sqrt((b.x - a.x) ** 2 + (b.y - a.y) ** 2);\n\nfunction sum(values: number[]) {\n return values.reduce((a, b) => a + b);\n}\n\n// Takes three finder patterns and organizes them into topLeft, topRight, etc\nfunction reorderFinderPatterns(pattern1: Point, pattern2: Point, pattern3: Point) {\n // Find distances between pattern centers\n const oneTwoDistance = distance(pattern1, pattern2);\n const twoThreeDistance = distance(pattern2, pattern3);\n const oneThreeDistance = distance(pattern1, pattern3);\n\n let bottomLeft: Point;\n let topLeft: Point;\n let topRight: Point;\n\n // Assume one closest to other two is B; A and C will just be guesses at first\n if (twoThreeDistance >= oneTwoDistance && twoThreeDistance >= oneThreeDistance) {\n [bottomLeft, topLeft, topRight] = [pattern2, pattern1, pattern3];\n } else if (oneThreeDistance >= twoThreeDistance && oneThreeDistance >= oneTwoDistance) {\n [bottomLeft, topLeft, topRight] = [pattern1, pattern2, pattern3];\n } else {\n [bottomLeft, topLeft, topRight] = [pattern1, pattern3, pattern2];\n }\n\n // Use cross product to figure out whether bottomLeft (A) and topRight (C) are correct or flipped in relation to topLeft (B)\n // This asks whether BC x BA has a positive z component, which is the arrangement we want. If it's negative, then\n // we've got it flipped around and should swap topRight and bottomLeft.\n if (((topRight.x - topLeft.x) * (bottomLeft.y - topLeft.y)) - ((topRight.y - topLeft.y) * (bottomLeft.x - topLeft.x)) < 0) {\n [bottomLeft, topRight] = [topRight, bottomLeft];\n }\n\n return { bottomLeft, topLeft, topRight };\n}\n\n// Computes the dimension (number of modules on a side) of the QR Code based on the position of the finder patterns\nfunction computeDimension(topLeft: Point, topRight: Point, bottomLeft: Point, matrix: BitMatrix) {\n const moduleSize = (\n sum(countBlackWhiteRun(topLeft, bottomLeft, matrix, 5)) / 7 + // Divide by 7 since the ratio is 1:1:3:1:1\n sum(countBlackWhiteRun(topLeft, topRight, matrix, 5)) / 7 +\n sum(countBlackWhiteRun(bottomLeft, topLeft, matrix, 5)) / 7 +\n sum(countBlackWhiteRun(topRight, topLeft, matrix, 5)) / 7\n ) / 4;\n\n if (moduleSize < 1) {\n throw new Error(\"Invalid module size\");\n }\n\n const topDimension = Math.round(distance(topLeft, topRight) / moduleSize);\n const sideDimension = Math.round(distance(topLeft, bottomLeft) / moduleSize);\n let dimension = Math.floor((topDimension + sideDimension) / 2) + 7;\n switch (dimension % 4) {\n case 0:\n dimension++;\n break;\n case 2:\n dimension--;\n break;\n }\n return { dimension, moduleSize };\n}\n\n// Takes an origin point and an end point and counts the sizes of the black white run from the origin towards the end point.\n// Returns an array of elements, representing the pixel size of the black white run.\n// Uses a variant of http://en.wikipedia.org/wiki/Bresenham's_line_algorithm\nfunction countBlackWhiteRunTowardsPoint(origin: Point, end: Point, matrix: BitMatrix, length: number) {\n const switchPoints: Point[] = [{x: Math.floor(origin.x), y: Math.floor(origin.y)}];\n const steep = Math.abs(end.y - origin.y) > Math.abs(end.x - origin.x);\n\n let fromX: number;\n let fromY: number;\n let toX: number;\n let toY: number;\n if (steep) {\n fromX = Math.floor(origin.y);\n fromY = Math.floor(origin.x);\n toX = Math.floor(end.y);\n toY = Math.floor(end.x);\n } else {\n fromX = Math.floor(origin.x);\n fromY = Math.floor(origin.y);\n toX = Math.floor(end.x);\n toY = Math.floor(end.y);\n }\n\n const dx = Math.abs(toX - fromX);\n const dy = Math.abs(toY - fromY);\n let error = Math.floor(-dx / 2);\n const xStep = fromX < toX ? 1 : -1;\n const yStep = fromY < toY ? 1 : -1;\n\n let currentPixel = true;\n // Loop up until x == toX, but not beyond\n for (let x = fromX, y = fromY; x !== toX + xStep; x += xStep) {\n // Does current pixel mean we have moved white to black or vice versa?\n // Scanning black in state 0,2 and white in state 1, so if we find the wrong\n // color, advance to next state or end if we are in state 2 already\n const realX = steep ? y : x;\n const realY = steep ? x : y;\n if (matrix.get(realX, realY) !== currentPixel) {\n currentPixel = !currentPixel;\n switchPoints.push({x: realX, y: realY});\n if (switchPoints.length === length + 1) {\n break;\n }\n }\n error += dy;\n if (error > 0) {\n if (y === toY) {\n break;\n }\n y += yStep;\n error -= dx;\n }\n }\n const distances: number[] = [];\n for (let i = 0; i < length; i++) {\n if (switchPoints[i] && switchPoints[i + 1]) {\n distances.push(distance(switchPoints[i], switchPoints[i + 1]));\n } else {\n distances.push(0);\n }\n }\n return distances;\n}\n\n// Takes an origin point and an end point and counts the sizes of the black white run in the origin point\n// along the line that intersects with the end point. Returns an array of elements, representing the pixel sizes\n// of the black white run. Takes a length which represents the number of switches from black to white to look for.\nfunction countBlackWhiteRun(origin: Point, end: Point, matrix: BitMatrix, length: number) {\n const rise = end.y - origin.y;\n const run = end.x - origin.x;\n\n const towardsEnd = countBlackWhiteRunTowardsPoint(origin, end, matrix, Math.ceil(length / 2));\n const awayFromEnd = countBlackWhiteRunTowardsPoint(origin, {x: origin.x - run, y: origin.y - rise}, matrix, Math.ceil(length / 2));\n\n const middleValue = towardsEnd.shift() + awayFromEnd.shift() - 1; // Substract one so we don't double count a pixel\n return awayFromEnd.concat(middleValue).concat(...towardsEnd);\n}\n\n// Takes in a black white run and an array of expected ratios. Returns the average size of the run as well as the \"error\" -\n// that is the amount the run diverges from the expected ratio\nfunction scoreBlackWhiteRun(sequence: number[], ratios: number[]) {\n const averageSize = sum(sequence) / sum(ratios);\n let error = 0;\n ratios.forEach((ratio, i) => {\n error += (sequence[i] - ratio * averageSize) ** 2;\n });\n\n return { averageSize, error };\n}\n\n// Takes an X,Y point and an array of sizes and scores the point against those ratios.\n// For example for a finder pattern takes the ratio list of 1:1:3:1:1 and checks horizontal, vertical and diagonal ratios\n// against that.\nfunction scorePattern(point: Point, ratios: number[], matrix: BitMatrix) {\n try {\n const horizontalRun = countBlackWhiteRun(point, {x: -1, y: point.y}, matrix, ratios.length);\n const verticalRun = countBlackWhiteRun(point, {x: point.x, y: -1}, matrix, ratios.length);\n\n const topLeftPoint = {\n x: Math.max(0, point.x - point.y) - 1,\n y: Math.max(0, point.y - point.x) - 1,\n };\n const topLeftBottomRightRun = countBlackWhiteRun(point, topLeftPoint, matrix, ratios.length);\n\n const bottomLeftPoint = {\n x: Math.min(matrix.width, point.x + point.y) + 1,\n y: Math.min(matrix.height, point.y + point.x) + 1,\n };\n const bottomLeftTopRightRun = countBlackWhiteRun(point, bottomLeftPoint, matrix, ratios.length);\n\n const horzError = scoreBlackWhiteRun(horizontalRun, ratios);\n const vertError = scoreBlackWhiteRun(verticalRun, ratios);\n const diagDownError = scoreBlackWhiteRun(topLeftBottomRightRun, ratios);\n const diagUpError = scoreBlackWhiteRun(bottomLeftTopRightRun, ratios);\n\n const ratioError = Math.sqrt(horzError.error * horzError.error +\n vertError.error * vertError.error +\n diagDownError.error * diagDownError.error +\n diagUpError.error * diagUpError.error);\n\n const avgSize = (horzError.averageSize + vertError.averageSize + diagDownError.averageSize + diagUpError.averageSize) / 4;\n\n const sizeError = ((horzError.averageSize - avgSize) ** 2 +\n (vertError.averageSize - avgSize) ** 2 +\n (diagDownError.averageSize - avgSize) ** 2 +\n (diagUpError.averageSize - avgSize) ** 2) / avgSize;\n return ratioError + sizeError;\n } catch {\n return Infinity;\n }\n}\n\nfunction recenterLocation(matrix: BitMatrix, p: Point): Point {\n let leftX = Math.round(p.x);\n while (matrix.get(leftX, Math.round(p.y))) {\n leftX--;\n }\n let rightX = Math.round(p.x);\n while (matrix.get(rightX, Math.round(p.y))) {\n rightX++;\n }\n const x = (leftX + rightX) / 2;\n\n let topY = Math.round(p.y);\n while (matrix.get(Math.round(x), topY)) {\n topY--;\n }\n let bottomY = Math.round(p.y);\n while (matrix.get(Math.round(x), bottomY)) {\n bottomY++;\n }\n const y = (topY + bottomY) / 2;\n\n return { x, y };\n}\n\ninterface Quad {\n top: {\n startX: number;\n endX: number;\n y: number;\n };\n bottom: {\n startX: number;\n endX: number;\n y: number;\n };\n}\n\nexport function locate(matrix: BitMatrix): QRLocation[] {\n const finderPatternQuads: Quad[] = [];\n let activeFinderPatternQuads: Quad[] = [];\n const alignmentPatternQuads: Quad[] = [];\n let activeAlignmentPatternQuads: Quad[] = [];\n\n for (let y = 0; y <= matrix.height; y++) {\n let length = 0;\n let lastBit = false;\n let scans = [0, 0, 0, 0, 0];\n\n for (let x = -1; x <= matrix.width; x++) {\n const v = matrix.get(x, y);\n if (v === lastBit) {\n length++;\n } else {\n scans = [scans[1], scans[2], scans[3], scans[4], length];\n length = 1;\n lastBit = v;\n\n // Do the last 5 color changes ~ match the expected ratio for a finder pattern? 1:1:3:1:1 of b:w:b:w:b\n const averageFinderPatternBlocksize = sum(scans) / 7;\n const validFinderPattern =\n Math.abs(scans[0] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize &&\n Math.abs(scans[1] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize &&\n Math.abs(scans[2] - 3 * averageFinderPatternBlocksize) < 3 * averageFinderPatternBlocksize &&\n Math.abs(scans[3] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize &&\n Math.abs(scans[4] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize &&\n !v; // And make sure the current pixel is white since finder patterns are bordered in white\n\n // Do the last 3 color changes ~ match the expected ratio for an alignment pattern? 1:1:1 of w:b:w\n const averageAlignmentPatternBlocksize = sum(scans.slice(-3)) / 3;\n const validAlignmentPattern =\n Math.abs(scans[2] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize &&\n Math.abs(scans[3] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize &&\n Math.abs(scans[4] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize &&\n v; // Is the current pixel black since alignment patterns are bordered in black\n\n if (validFinderPattern) {\n // Compute the start and end x values of the large center black square\n const endX = x - scans[3] - scans[4];\n const startX = endX - scans[2];\n\n const line = { startX, endX, y };\n // Is there a quad directly above the current spot? If so, extend it with the new line. Otherwise, create a new quad with\n // that line as the starting point.\n const matchingQuads = activeFinderPatternQuads.filter(q =>\n (startX >= q.bottom.startX && startX <= q.bottom.endX) ||\n (endX >= q.bottom.startX && startX <= q.bottom.endX) ||\n (startX <= q.bottom.startX && endX >= q.bottom.endX && (\n (scans[2] / (q.bottom.endX - q.bottom.startX)) < MAX_QUAD_RATIO &&\n (scans[2] / (q.bottom.endX - q.bottom.startX)) > MIN_QUAD_RATIO\n )),\n );\n if (matchingQuads.length > 0) {\n matchingQuads[0].bottom = line;\n } else {\n activeFinderPatternQuads.push({ top: line, bottom: line });\n }\n }\n if (validAlignmentPattern) {\n // Compute the start and end x values of the center black square\n const endX = x - scans[4];\n const startX = endX - scans[3];\n\n const line = { startX, y, endX };\n // Is there a quad directly above the current spot? If so, extend it with the new line. Otherwise, create a new quad with\n // that line as the starting point.\n const matchingQuads = activeAlignmentPatternQuads.filter(q =>\n (startX >= q.bottom.startX && startX <= q.bottom.endX) ||\n (endX >= q.bottom.startX && startX <= q.bottom.endX) ||\n (startX <= q.bottom.startX && endX >= q.bottom.endX && (\n (scans[2] / (q.bottom.endX - q.bottom.startX)) < MAX_QUAD_RATIO &&\n (scans[2] / (q.bottom.endX - q.bottom.startX)) > MIN_QUAD_RATIO\n )),\n );\n if (matchingQuads.length > 0) {\n matchingQuads[0].bottom = line;\n } else {\n activeAlignmentPatternQuads.push({ top: line, bottom: line });\n }\n }\n }\n }\n finderPatternQuads.push(...activeFinderPatternQuads.filter(q => q.bottom.y !== y && q.bottom.y - q.top.y >= 2));\n activeFinderPatternQuads = activeFinderPatternQuads.filter(q => q.bottom.y === y);\n\n alignmentPatternQuads.push(...activeAlignmentPatternQuads.filter(q => q.bottom.y !== y));\n activeAlignmentPatternQuads = activeAlignmentPatternQuads.filter(q => q.bottom.y === y);\n\n }\n\n finderPatternQuads.push(...activeFinderPatternQuads.filter(q => q.bottom.y - q.top.y >= 2));\n alignmentPatternQuads.push(...activeAlignmentPatternQuads);\n\n // Refactored from cozmo/jsQR to (hopefully) circumvent an issue in Safari 13+ on both Mac and iOS (also including\n // iOS Chrome and other Safari iOS derivatives). Safari was very occasionally and apparently not deterministically\n // throwing a \"RangeError: Array size is not a small enough positive integer.\" exception seemingly within the second\n // .map of the original code (here the second for-loop). This second .map contained a nested .map call over the same\n // array instance which was the chained result from previous calls to .map, .filter and .sort which potentially caused\n // this bug in Safari?\n // Also see https://github.com/cozmo/jsQR/issues/157 and https://bugs.webkit.org/show_bug.cgi?id=211619#c3\n const scoredFinderPatternPositions: Array = [];\n for (const quad of finderPatternQuads) {\n if (quad.bottom.y - quad.top.y < 2) {\n // All quads must be at least 2px tall since the center square is larger than a block\n continue;\n }\n\n // calculate quad center\n const x = (quad.top.startX + quad.top.endX + quad.bottom.startX + quad.bottom.endX) / 4;\n const y = (quad.top.y + quad.bottom.y + 1) / 2;\n if (!matrix.get(Math.round(x), Math.round(y))) {\n continue;\n }\n\n const lengths = [quad.top.endX - quad.top.startX, quad.bottom.endX - quad.bottom.startX, quad.bottom.y - quad.top.y + 1];\n const size = sum(lengths) / lengths.length;\n // Initial scoring of finder pattern quads by looking at their ratios, not taking into account position\n const score = scorePattern({x: Math.round(x), y: Math.round(y)}, [1, 1, 3, 1, 1], matrix);\n scoredFinderPatternPositions.push({ score, x, y, size });\n }\n if (scoredFinderPatternPositions.length < 3) {\n // A QR code has 3 finder patterns, therefore we need at least 3 candidates.\n return null;\n }\n scoredFinderPatternPositions.sort((a, b) => a.score - b.score);\n\n // Now take the top finder pattern options and try to find 2 other options with a similar size.\n const finderPatternGroups: Array<{ points: [Point, Point, Point], score: number }> = [];\n for (let i = 0; i < Math.min(scoredFinderPatternPositions.length, MAX_FINDERPATTERNS_TO_SEARCH); ++i) {\n const point = scoredFinderPatternPositions[i];\n const otherPoints: typeof scoredFinderPatternPositions = [];\n\n for (const otherPoint of scoredFinderPatternPositions) {\n if (otherPoint === point) {\n continue;\n }\n otherPoints.push({\n ...otherPoint,\n score: otherPoint.score + ((otherPoint.size - point.size) ** 2) / point.size, // score similarity of sizes\n });\n }\n otherPoints.sort((a, b) => a.score - b.score);\n\n finderPatternGroups.push({\n points: [point, otherPoints[0], otherPoints[1]], // note that otherPoints.length >= 2 as scoredFinderPatternPositions.length >= 3\n score: point.score + otherPoints[0].score + otherPoints[1].score, // total combined score of the three points in the group\n });\n }\n finderPatternGroups.sort((a, b) => a.score - b.score);\n const bestFinderPatternGroup = finderPatternGroups[0];\n\n const { topRight, topLeft, bottomLeft } = reorderFinderPatterns(...bestFinderPatternGroup.points);\n const alignment = findAlignmentPattern(matrix, alignmentPatternQuads, topRight, topLeft, bottomLeft);\n const result: QRLocation[] = [];\n if (alignment) {\n result.push({\n alignmentPattern: { x: alignment.alignmentPattern.x, y: alignment.alignmentPattern.y },\n bottomLeft: {x: bottomLeft.x, y: bottomLeft.y },\n dimension: alignment.dimension,\n topLeft: {x: topLeft.x, y: topLeft.y },\n topRight: {x: topRight.x, y: topRight.y },\n });\n }\n\n // We normally use the center of the quads as the location of the tracking points, which is optimal for most cases and will account\n // for a skew in the image. However, In some cases, a slight skew might not be real and instead be caused by image compression\n // errors and/or low resolution. For those cases, we'd be better off centering the point exactly in the middle of the black area. We\n // compute and return the location data for the naively centered points as it is little additional work and allows for multiple\n // attempts at decoding harder images.\n const midTopRight = recenterLocation(matrix, topRight);\n const midTopLeft = recenterLocation(matrix, topLeft);\n const midBottomLeft = recenterLocation(matrix, bottomLeft);\n const centeredAlignment = findAlignmentPattern(matrix, alignmentPatternQuads, midTopRight, midTopLeft, midBottomLeft);\n if (centeredAlignment) {\n result.push({\n alignmentPattern: { x: centeredAlignment.alignmentPattern.x, y: centeredAlignment.alignmentPattern.y },\n bottomLeft: { x: midBottomLeft.x, y: midBottomLeft. y },\n topLeft: { x: midTopLeft.x, y: midTopLeft. y },\n topRight: { x: midTopRight.x, y: midTopRight. y },\n dimension: centeredAlignment.dimension,\n });\n }\n\n if (result.length === 0) {\n return null;\n }\n\n return result;\n}\n\nfunction findAlignmentPattern(matrix: BitMatrix, alignmentPatternQuads: Quad[], topRight: Point, topLeft: Point, bottomLeft: Point) {\n // Now that we've found the three finder patterns we can determine the blockSize and the size of the QR code.\n // We'll use these to help find the alignment pattern but also later when we do the extraction.\n let dimension: number;\n let moduleSize: number;\n try {\n ({ dimension, moduleSize } = computeDimension(topLeft, topRight, bottomLeft, matrix));\n } catch (e) {\n return null;\n }\n\n // Now find the alignment pattern\n const bottomRightFinderPattern = { // Best guess at where a bottomRight finder pattern would be\n x: topRight.x - topLeft.x + bottomLeft.x,\n y: topRight.y - topLeft.y + bottomLeft.y,\n };\n const modulesBetweenFinderPatterns = ((distance(topLeft, bottomLeft) + distance(topLeft, topRight)) / 2 / moduleSize);\n const correctionToTopLeft = 1 - (3 / modulesBetweenFinderPatterns);\n const expectedAlignmentPattern = {\n x: topLeft.x + correctionToTopLeft * (bottomRightFinderPattern.x - topLeft.x),\n y: topLeft.y + correctionToTopLeft * (bottomRightFinderPattern.y - topLeft.y),\n };\n\n const alignmentPatterns = alignmentPatternQuads\n .map(q => {\n const x = (q.top.startX + q.top.endX + q.bottom.startX + q.bottom.endX) / 4;\n const y = (q.top.y + q.bottom.y + 1) / 2;\n if (!matrix.get(Math.floor(x), Math.floor(y))) {\n return;\n }\n\n const sizeScore = scorePattern({x: Math.floor(x), y: Math.floor(y)}, [1, 1, 1], matrix);\n const score = sizeScore + distance({x, y}, expectedAlignmentPattern);\n return { x, y, score };\n })\n .filter(v => !!v)\n .sort((a, b) => a.score - b.score);\n\n // If there are less than 15 modules between finder patterns it's a version 1 QR code and as such has no alignmemnt pattern\n // so we can only use our best guess.\n const alignmentPattern = modulesBetweenFinderPatterns >= 15 && alignmentPatterns.length ? alignmentPatterns[0] : expectedAlignmentPattern;\n\n return { alignmentPattern, dimension };\n}\n","import {binarize} from \"./binarizer\";\nimport {BitMatrix} from \"./BitMatrix\";\nimport {Chunks} from \"./decoder/decodeData\";\nimport {decode} from \"./decoder/decoder\";\nimport { Version } from \"./decoder/version\";\nimport {extract} from \"./extractor\";\nimport {locate, Point} from \"./locator\";\n\nexport interface QRCode {\n binaryData: number[];\n data: string;\n chunks: Chunks;\n version: number;\n location: {\n topRightCorner: Point;\n topLeftCorner: Point;\n bottomRightCorner: Point;\n bottomLeftCorner: Point;\n\n topRightFinderPattern: Point;\n topLeftFinderPattern: Point;\n bottomLeftFinderPattern: Point;\n\n bottomRightAlignmentPattern?: Point;\n };\n matrix: BitMatrix;\n}\n\nfunction scan(matrix: BitMatrix): QRCode | null {\n const locations = locate(matrix);\n if (!locations) {\n return null;\n }\n\n for (const location of locations) {\n const extracted = extract(matrix, location);\n const decoded = decode(extracted.matrix);\n if (decoded) {\n return {\n binaryData: decoded.bytes,\n data: decoded.text,\n chunks: decoded.chunks,\n version: decoded.version,\n location: {\n topRightCorner: extracted.mappingFunction(location.dimension, 0),\n topLeftCorner: extracted.mappingFunction(0, 0),\n bottomRightCorner: extracted.mappingFunction(location.dimension, location.dimension),\n bottomLeftCorner: extracted.mappingFunction(0, location.dimension),\n\n topRightFinderPattern: location.topRight,\n topLeftFinderPattern: location.topLeft,\n bottomLeftFinderPattern: location.bottomLeft,\n\n bottomRightAlignmentPattern: location.alignmentPattern,\n },\n matrix: extracted.matrix,\n };\n }\n }\n return null;\n}\n\nexport interface Options {\n inversionAttempts?: \"dontInvert\" | \"onlyInvert\" | \"attemptBoth\" | \"invertFirst\";\n greyScaleWeights?: GreyscaleWeights;\n canOverwriteImage?: boolean;\n}\n\nexport interface GreyscaleWeights {\n red: number;\n green: number;\n blue: number;\n useIntegerApproximation?: boolean;\n}\n\nconst defaultOptions: Options = {\n inversionAttempts: \"attemptBoth\",\n greyScaleWeights: {\n red: 0.2126,\n green: 0.7152,\n blue: 0.0722,\n useIntegerApproximation: false,\n },\n canOverwriteImage: true,\n};\n\nfunction mergeObject(target: any, src: any) {\n Object.keys(src).forEach(opt => { // Sad implementation of Object.assign since we target es5 not es6\n target[opt] = src[opt];\n });\n}\n\nfunction jsQR(data: Uint8ClampedArray, width: number, height: number, providedOptions: Options = {}): QRCode | null {\n const options = Object.create(null);\n mergeObject(options, defaultOptions);\n mergeObject(options, providedOptions);\n\n const tryInvertedFirst = options.inversionAttempts === \"onlyInvert\" || options.inversionAttempts === \"invertFirst\";\n const shouldInvert = options.inversionAttempts === \"attemptBoth\" || tryInvertedFirst;\n const {binarized, inverted} = binarize(data, width, height, shouldInvert, options.greyScaleWeights,\n options.canOverwriteImage);\n let result = scan(tryInvertedFirst ? inverted : binarized);\n if (!result && (options.inversionAttempts === \"attemptBoth\" || options.inversionAttempts === \"invertFirst\")) {\n result = scan(tryInvertedFirst ? binarized : inverted);\n }\n return result;\n}\n\n(jsQR as any).default = jsQR;\nexport default jsQR;\n","import {BitMatrix} from \"../BitMatrix\";\nimport {GreyscaleWeights} from \"../index\";\n\nconst REGION_SIZE = 8;\nconst MIN_DYNAMIC_RANGE = 24;\n\nfunction numBetween(value: number, min: number, max: number): number {\n return value < min ? min : value > max ? max : value;\n}\n\n// Like BitMatrix but accepts arbitry Uint8 values\nclass Matrix {\n private data: Uint8ClampedArray;\n private width: number;\n constructor(width: number, height: number, buffer?: Uint8ClampedArray) {\n this.width = width;\n const bufferSize = width * height;\n if (buffer && buffer.length !== bufferSize) {\n throw new Error(\"Wrong buffer size\");\n }\n this.data = buffer || new Uint8ClampedArray(bufferSize);\n }\n public get(x: number, y: number) {\n return this.data[y * this.width + x];\n }\n public set(x: number, y: number, value: number) {\n this.data[y * this.width + x] = value;\n }\n}\n\nexport function binarize(data: Uint8ClampedArray, width: number, height: number, returnInverted: boolean,\n greyscaleWeights: GreyscaleWeights, canOverwriteImage: boolean) {\n const pixelCount = width * height;\n if (data.length !== pixelCount * 4) {\n throw new Error(\"Malformed data passed to binarizer.\");\n }\n // assign the greyscale and binary image within the rgba buffer as the rgba image will not be needed after conversion\n let bufferOffset = 0;\n // Convert image to greyscale\n let greyscaleBuffer: Uint8ClampedArray;\n if (canOverwriteImage) {\n greyscaleBuffer = new Uint8ClampedArray(data.buffer, bufferOffset, pixelCount);\n bufferOffset += pixelCount;\n }\n const greyscalePixels = new Matrix(width, height, greyscaleBuffer);\n if (greyscaleWeights.useIntegerApproximation) {\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const pixelPosition = (y * width + x) * 4;\n const r = data[pixelPosition];\n const g = data[pixelPosition + 1];\n const b = data[pixelPosition + 2];\n greyscalePixels.set(x, y,\n // tslint:disable-next-line no-bitwise\n (greyscaleWeights.red * r + greyscaleWeights.green * g + greyscaleWeights.blue * b + 128) >> 8);\n }\n }\n } else {\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const pixelPosition = (y * width + x) * 4;\n const r = data[pixelPosition];\n const g = data[pixelPosition + 1];\n const b = data[pixelPosition + 2];\n greyscalePixels.set(x, y,\n greyscaleWeights.red * r + greyscaleWeights.green * g + greyscaleWeights.blue * b);\n }\n }\n }\n const horizontalRegionCount = Math.ceil(width / REGION_SIZE);\n const verticalRegionCount = Math.ceil(height / REGION_SIZE);\n const blackPointsCount = horizontalRegionCount * verticalRegionCount;\n\n let blackPointsBuffer: Uint8ClampedArray;\n if (canOverwriteImage) {\n blackPointsBuffer = new Uint8ClampedArray(data.buffer, bufferOffset, blackPointsCount);\n bufferOffset += blackPointsCount;\n }\n const blackPoints = new Matrix(horizontalRegionCount, verticalRegionCount, blackPointsBuffer);\n for (let verticalRegion = 0; verticalRegion < verticalRegionCount; verticalRegion++) {\n for (let hortizontalRegion = 0; hortizontalRegion < horizontalRegionCount; hortizontalRegion++) {\n let min = Infinity;\n let max = 0;\n for (let y = 0; y < REGION_SIZE; y++) {\n for (let x = 0; x < REGION_SIZE; x++) {\n const pixelLumosity =\n greyscalePixels.get(hortizontalRegion * REGION_SIZE + x, verticalRegion * REGION_SIZE + y);\n min = Math.min(min, pixelLumosity);\n max = Math.max(max, pixelLumosity);\n }\n }\n // We could also compute the real average of all pixels but following the assumption that the qr code consists\n // of bright and dark pixels and essentially not much in between, by (min + max)/2 we make the cut really between\n // those two classes. If using the average over all pixel in a block of mostly bright pixels and few dark pixels,\n // the avg would tend to the bright side and darker bright pixels could be interpreted as dark.\n let average = (min + max) / 2;\n // Small bias towards black by moving the threshold up. We do this, as in the finder patterns white holes tend\n // to appear which makes them undetectable.\n const blackBias = 1.11;\n average = Math.min(255, average * blackBias);\n if (max - min <= MIN_DYNAMIC_RANGE) {\n // If variation within the block is low, assume this is a block with only light or only\n // dark pixels. In that case we do not want to use the average, as it would divide this\n // low contrast area into black and white pixels, essentially creating data out of noise.\n //\n // Default the blackpoint for these blocks to be half the min - effectively white them out\n average = min / 2;\n\n if (verticalRegion > 0 && hortizontalRegion > 0) {\n // Correct the \"white background\" assumption for blocks that have neighbors by comparing\n // the pixels in this block to the previously calculated black points. This is based on\n // the fact that dark barcode symbology is always surrounded by some amount of light\n // background for which reasonable black point estimates were made. The bp estimated at\n // the boundaries is used for the interior.\n\n // The (min < bp) is arbitrary but works better than other heuristics that were tried.\n const averageNeighborBlackPoint = (\n blackPoints.get(hortizontalRegion, verticalRegion - 1) +\n (2 * blackPoints.get(hortizontalRegion - 1, verticalRegion)) +\n blackPoints.get(hortizontalRegion - 1, verticalRegion - 1)\n ) / 4;\n if (min < averageNeighborBlackPoint) {\n average = averageNeighborBlackPoint; // no need to apply black bias as already applied to neighbors\n }\n }\n }\n blackPoints.set(hortizontalRegion, verticalRegion, average);\n }\n }\n\n let binarized: BitMatrix;\n if (canOverwriteImage) {\n const binarizedBuffer = new Uint8ClampedArray(data.buffer, bufferOffset, pixelCount);\n bufferOffset += pixelCount;\n binarized = new BitMatrix(binarizedBuffer, width);\n } else {\n binarized = BitMatrix.createEmpty(width, height);\n }\n\n let inverted: BitMatrix = null;\n if (returnInverted) {\n if (canOverwriteImage) {\n const invertedBuffer = new Uint8ClampedArray(data.buffer, bufferOffset, pixelCount);\n inverted = new BitMatrix(invertedBuffer, width);\n } else {\n inverted = BitMatrix.createEmpty(width, height);\n }\n }\n\n for (let verticalRegion = 0; verticalRegion < verticalRegionCount; verticalRegion++) {\n for (let hortizontalRegion = 0; hortizontalRegion < horizontalRegionCount; hortizontalRegion++) {\n const left = numBetween(hortizontalRegion, 2, horizontalRegionCount - 3);\n const top = numBetween(verticalRegion, 2, verticalRegionCount - 3);\n let sum = 0;\n for (let xRegion = -2; xRegion <= 2; xRegion++) {\n for (let yRegion = -2; yRegion <= 2; yRegion++) {\n sum += blackPoints.get(left + xRegion, top + yRegion);\n }\n }\n const threshold = sum / 25;\n for (let xRegion = 0; xRegion < REGION_SIZE; xRegion++) {\n for (let yRegion = 0; yRegion < REGION_SIZE; yRegion++) {\n const x = hortizontalRegion * REGION_SIZE + xRegion;\n const y = verticalRegion * REGION_SIZE + yRegion;\n const lum = greyscalePixels.get(x, y);\n binarized.set(x, y, lum <= threshold);\n if (returnInverted) {\n inverted.set(x, y, !(lum <= threshold));\n }\n }\n }\n }\n }\n if (returnInverted) {\n return { binarized, inverted };\n }\n return { binarized };\n}\n","export class BitMatrix {\n public static createEmpty(width: number, height: number) {\n return new BitMatrix(new Uint8ClampedArray(width * height), width);\n }\n\n public width: number;\n public height: number;\n private data: Uint8ClampedArray;\n\n constructor(data: Uint8ClampedArray, width: number) {\n this.width = width;\n this.height = data.length / width;\n this.data = data;\n }\n\n public get(x: number, y: number): boolean {\n if (x < 0 || x >= this.width || y < 0 || y >= this.height) {\n return false;\n }\n return !!this.data[y * this.width + x];\n }\n\n public set(x: number, y: number, v: boolean) {\n this.data[y * this.width + x] = v ? 1 : 0;\n }\n\n public setRegion(left: number, top: number, width: number, height: number, v: boolean) {\n for (let y = top; y < top + height; y++) {\n for (let x = left; x < left + width; x++) {\n this.set(x, y, !!v);\n }\n }\n }\n}\n","// tslint:disable:no-bitwise\n\nexport class BitStream {\n private bytes: Uint8ClampedArray;\n private byteOffset: number = 0;\n private bitOffset: number = 0;\n\n constructor(bytes: Uint8ClampedArray) {\n this.bytes = bytes;\n }\n\n public readBits(numBits: number): number {\n if (numBits < 1 || numBits > 32 || numBits > this.available()) {\n throw new Error(\"Cannot read \" + numBits.toString() + \" bits\");\n }\n\n let result = 0;\n // First, read remainder from current byte\n if (this.bitOffset > 0) {\n const bitsLeft = 8 - this.bitOffset;\n const toRead = numBits < bitsLeft ? numBits : bitsLeft;\n const bitsToNotRead = bitsLeft - toRead;\n const mask = (0xFF >> (8 - toRead)) << bitsToNotRead;\n result = (this.bytes[this.byteOffset] & mask) >> bitsToNotRead;\n numBits -= toRead;\n this.bitOffset += toRead;\n if (this.bitOffset === 8) {\n this.bitOffset = 0;\n this.byteOffset++;\n }\n }\n\n // Next read whole bytes\n if (numBits > 0) {\n while (numBits >= 8) {\n result = (result << 8) | (this.bytes[this.byteOffset] & 0xFF);\n this.byteOffset++;\n numBits -= 8;\n }\n\n // Finally read a partial byte\n if (numBits > 0) {\n const bitsToNotRead = 8 - numBits;\n const mask = (0xFF >> bitsToNotRead) << bitsToNotRead;\n result = (result << numBits) | ((this.bytes[this.byteOffset] & mask) >> bitsToNotRead);\n this.bitOffset += numBits;\n }\n }\n return result;\n }\n\n public available(): number {\n return 8 * (this.bytes.length - this.byteOffset) - this.bitOffset;\n }\n}\n","import GenericGF, { addOrSubtractGF } from \"./GenericGF\";\n\nexport default class GenericGFPoly {\n private field: GenericGF;\n private coefficients: Uint8ClampedArray;\n\n constructor(field: GenericGF, coefficients: Uint8ClampedArray) {\n if (coefficients.length === 0) {\n throw new Error(\"No coefficients.\");\n }\n this.field = field;\n const coefficientsLength = coefficients.length;\n if (coefficientsLength > 1 && coefficients[0] === 0) {\n // Leading term must be non-zero for anything except the constant polynomial \"0\"\n let firstNonZero = 1;\n while (firstNonZero < coefficientsLength && coefficients[firstNonZero] === 0) {\n firstNonZero++;\n }\n if (firstNonZero === coefficientsLength) {\n this.coefficients = field.zero.coefficients;\n } else {\n this.coefficients = new Uint8ClampedArray(coefficientsLength - firstNonZero);\n for (let i = 0; i < this.coefficients.length; i++) {\n this.coefficients[i] = coefficients[firstNonZero + i];\n }\n }\n } else {\n this.coefficients = coefficients;\n }\n }\n\n public degree() {\n return this.coefficients.length - 1;\n }\n\n public isZero() {\n return this.coefficients[0] === 0;\n }\n\n public getCoefficient(degree: number) {\n return this.coefficients[this.coefficients.length - 1 - degree];\n }\n\n public addOrSubtract(other: GenericGFPoly) {\n if (this.isZero()) {\n return other;\n }\n if (other.isZero()) {\n return this;\n }\n\n let smallerCoefficients = this.coefficients;\n let largerCoefficients = other.coefficients;\n if (smallerCoefficients.length > largerCoefficients.length) {\n [smallerCoefficients, largerCoefficients] = [largerCoefficients, smallerCoefficients];\n }\n const sumDiff = new Uint8ClampedArray(largerCoefficients.length);\n const lengthDiff = largerCoefficients.length - smallerCoefficients.length;\n for (let i = 0; i < lengthDiff; i++) {\n sumDiff[i] = largerCoefficients[i];\n }\n\n for (let i = lengthDiff; i < largerCoefficients.length; i++) {\n sumDiff[i] = addOrSubtractGF(smallerCoefficients[i - lengthDiff], largerCoefficients[i]);\n }\n\n return new GenericGFPoly(this.field, sumDiff);\n }\n\n public multiply(scalar: number) {\n if (scalar === 0) {\n return this.field.zero;\n }\n if (scalar === 1) {\n return this;\n }\n const size = this.coefficients.length;\n const product = new Uint8ClampedArray(size);\n for (let i = 0; i < size; i++) {\n product[i] = this.field.multiply(this.coefficients[i], scalar);\n }\n\n return new GenericGFPoly(this.field, product);\n }\n\n public multiplyPoly(other: GenericGFPoly): GenericGFPoly {\n if (this.isZero() || other.isZero()) {\n return this.field.zero;\n }\n const aCoefficients = this.coefficients;\n const aLength = aCoefficients.length;\n const bCoefficients = other.coefficients;\n const bLength = bCoefficients.length;\n const product = new Uint8ClampedArray(aLength + bLength - 1);\n for (let i = 0; i < aLength; i++) {\n const aCoeff = aCoefficients[i];\n for (let j = 0; j < bLength; j++) {\n product[i + j] = addOrSubtractGF(product[i + j],\n this.field.multiply(aCoeff, bCoefficients[j]));\n }\n }\n return new GenericGFPoly(this.field, product);\n }\n\n public multiplyByMonomial(degree: number, coefficient: number) {\n if (degree < 0) {\n throw new Error(\"Invalid degree less than 0\");\n }\n if (coefficient === 0) {\n return this.field.zero;\n }\n const size = this.coefficients.length;\n const product = new Uint8ClampedArray(size + degree);\n for (let i = 0; i < size; i++) {\n product[i] = this.field.multiply(this.coefficients[i], coefficient);\n }\n return new GenericGFPoly(this.field, product);\n }\n\n public evaluateAt(a: number) {\n let result = 0;\n if (a === 0) {\n // Just return the x^0 coefficient\n return this.getCoefficient(0);\n }\n const size = this.coefficients.length;\n if (a === 1) {\n // Just the sum of the coefficients\n this.coefficients.forEach((coefficient) => {\n result = addOrSubtractGF(result, coefficient);\n });\n return result;\n }\n result = this.coefficients[0];\n for (let i = 1; i < size; i++) {\n result = addOrSubtractGF(this.field.multiply(a, result), this.coefficients[i]);\n }\n return result;\n }\n}\n","export interface Version {\n infoBits: number;\n versionNumber: number;\n alignmentPatternCenters: number[];\n errorCorrectionLevels: Array<{\n ecCodewordsPerBlock: number;\n ecBlocks: Array<{\n numBlocks: number;\n dataCodewordsPerBlock: number;\n }>\n }>;\n}\n\nexport const VERSIONS: Version[] = [\n {\n infoBits: null,\n versionNumber: 1,\n alignmentPatternCenters: [],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 7,\n ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 19 }],\n },\n {\n ecCodewordsPerBlock: 10,\n ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 16 }],\n },\n {\n ecCodewordsPerBlock: 13,\n ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 13 }],\n },\n {\n ecCodewordsPerBlock: 17,\n ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 9 }],\n },\n ],\n },\n {\n infoBits: null,\n versionNumber: 2,\n alignmentPatternCenters: [6, 18],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 10,\n ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 34 }],\n },\n {\n ecCodewordsPerBlock: 16,\n ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 28 }],\n },\n {\n ecCodewordsPerBlock: 22,\n ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 22 }],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 16 }],\n },\n ],\n },\n {\n infoBits: null,\n versionNumber: 3,\n alignmentPatternCenters: [6, 22],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 15,\n ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 55 }],\n },\n {\n ecCodewordsPerBlock: 26,\n ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 44 }],\n },\n {\n ecCodewordsPerBlock: 18,\n ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 17 }],\n },\n {\n ecCodewordsPerBlock: 22,\n ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 13 }],\n },\n ],\n },\n {\n infoBits: null,\n versionNumber: 4,\n alignmentPatternCenters: [6, 26],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 20,\n ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 80 }],\n },\n {\n ecCodewordsPerBlock: 18,\n ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 32 }],\n },\n {\n ecCodewordsPerBlock: 26,\n ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 24 }],\n },\n {\n ecCodewordsPerBlock: 16,\n ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 9 }],\n },\n ],\n },\n {\n infoBits: null,\n versionNumber: 5,\n alignmentPatternCenters: [6, 30],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 26,\n ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 108 }],\n },\n {\n ecCodewordsPerBlock: 24,\n ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 43 }],\n },\n {\n ecCodewordsPerBlock: 18,\n ecBlocks: [\n { numBlocks: 2, dataCodewordsPerBlock: 15 },\n { numBlocks: 2, dataCodewordsPerBlock: 16 },\n ],\n },\n {\n ecCodewordsPerBlock: 22,\n ecBlocks: [\n { numBlocks: 2, dataCodewordsPerBlock: 11 },\n { numBlocks: 2, dataCodewordsPerBlock: 12 },\n ],\n },\n ],\n },\n {\n infoBits: null,\n versionNumber: 6,\n alignmentPatternCenters: [6, 34],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 18,\n ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 68 }],\n },\n {\n ecCodewordsPerBlock: 16,\n ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 27 }],\n },\n {\n ecCodewordsPerBlock: 24,\n ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 19 }],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 15 }],\n },\n ],\n },\n {\n infoBits: 0x07C94,\n versionNumber: 7,\n alignmentPatternCenters: [6, 22, 38],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 20,\n ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 78 }],\n },\n {\n ecCodewordsPerBlock: 18,\n ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 31 }],\n },\n {\n ecCodewordsPerBlock: 18,\n ecBlocks: [\n { numBlocks: 2, dataCodewordsPerBlock: 14 },\n { numBlocks: 4, dataCodewordsPerBlock: 15 },\n ],\n },\n {\n ecCodewordsPerBlock: 26,\n ecBlocks: [\n { numBlocks: 4, dataCodewordsPerBlock: 13 },\n { numBlocks: 1, dataCodewordsPerBlock: 14 },\n ],\n },\n ],\n },\n {\n infoBits: 0x085BC,\n versionNumber: 8,\n alignmentPatternCenters: [6, 24, 42],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 24,\n ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 97 }],\n },\n {\n ecCodewordsPerBlock: 22,\n ecBlocks: [\n { numBlocks: 2, dataCodewordsPerBlock: 38 },\n { numBlocks: 2, dataCodewordsPerBlock: 39 },\n ],\n },\n {\n ecCodewordsPerBlock: 22,\n ecBlocks: [\n { numBlocks: 4, dataCodewordsPerBlock: 18 },\n { numBlocks: 2, dataCodewordsPerBlock: 19 },\n ],\n },\n {\n ecCodewordsPerBlock: 26,\n ecBlocks: [\n { numBlocks: 4, dataCodewordsPerBlock: 14 },\n { numBlocks: 2, dataCodewordsPerBlock: 15 },\n ],\n },\n ],\n },\n {\n infoBits: 0x09A99,\n versionNumber: 9,\n alignmentPatternCenters: [6, 26, 46],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 116 }],\n },\n {\n ecCodewordsPerBlock: 22,\n ecBlocks: [\n { numBlocks: 3, dataCodewordsPerBlock: 36 },\n { numBlocks: 2, dataCodewordsPerBlock: 37 },\n ],\n },\n {\n ecCodewordsPerBlock: 20,\n ecBlocks: [\n { numBlocks: 4, dataCodewordsPerBlock: 16 },\n { numBlocks: 4, dataCodewordsPerBlock: 17 },\n ],\n },\n {\n ecCodewordsPerBlock: 24,\n ecBlocks: [\n { numBlocks: 4, dataCodewordsPerBlock: 12 },\n { numBlocks: 4, dataCodewordsPerBlock: 13 },\n ],\n },\n ],\n },\n {\n infoBits: 0x0A4D3,\n versionNumber: 10,\n alignmentPatternCenters: [6, 28, 50],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 18,\n ecBlocks: [\n { numBlocks: 2, dataCodewordsPerBlock: 68 },\n { numBlocks: 2, dataCodewordsPerBlock: 69 },\n ],\n },\n {\n ecCodewordsPerBlock: 26,\n ecBlocks: [\n { numBlocks: 4, dataCodewordsPerBlock: 43 },\n { numBlocks: 1, dataCodewordsPerBlock: 44 },\n ],\n },\n {\n ecCodewordsPerBlock: 24,\n ecBlocks: [\n { numBlocks: 6, dataCodewordsPerBlock: 19 },\n { numBlocks: 2, dataCodewordsPerBlock: 20 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 6, dataCodewordsPerBlock: 15 },\n { numBlocks: 2, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n {\n infoBits: 0x0BBF6,\n versionNumber: 11,\n alignmentPatternCenters: [6, 30, 54],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 20,\n ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 81 }],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 1, dataCodewordsPerBlock: 50 },\n { numBlocks: 4, dataCodewordsPerBlock: 51 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 4, dataCodewordsPerBlock: 22 },\n { numBlocks: 4, dataCodewordsPerBlock: 23 },\n ],\n },\n {\n ecCodewordsPerBlock: 24,\n ecBlocks: [\n { numBlocks: 3, dataCodewordsPerBlock: 12 },\n { numBlocks: 8, dataCodewordsPerBlock: 13 },\n ],\n },\n ],\n },\n {\n infoBits: 0x0C762,\n versionNumber: 12,\n alignmentPatternCenters: [6, 32, 58],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 24,\n ecBlocks: [\n { numBlocks: 2, dataCodewordsPerBlock: 92 },\n { numBlocks: 2, dataCodewordsPerBlock: 93 },\n ],\n },\n {\n ecCodewordsPerBlock: 22,\n ecBlocks: [\n { numBlocks: 6, dataCodewordsPerBlock: 36 },\n { numBlocks: 2, dataCodewordsPerBlock: 37 },\n ],\n },\n {\n ecCodewordsPerBlock: 26,\n ecBlocks: [\n { numBlocks: 4, dataCodewordsPerBlock: 20 },\n { numBlocks: 6, dataCodewordsPerBlock: 21 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 7, dataCodewordsPerBlock: 14 },\n { numBlocks: 4, dataCodewordsPerBlock: 15 },\n ],\n },\n ],\n },\n {\n infoBits: 0x0D847,\n versionNumber: 13,\n alignmentPatternCenters: [6, 34, 62],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 26,\n ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 107 }],\n },\n {\n ecCodewordsPerBlock: 22,\n ecBlocks: [\n { numBlocks: 8, dataCodewordsPerBlock: 37 },\n { numBlocks: 1, dataCodewordsPerBlock: 38 },\n ],\n },\n {\n ecCodewordsPerBlock: 24,\n ecBlocks: [\n { numBlocks: 8, dataCodewordsPerBlock: 20 },\n { numBlocks: 4, dataCodewordsPerBlock: 21 },\n ],\n },\n {\n ecCodewordsPerBlock: 22,\n ecBlocks: [\n { numBlocks: 12, dataCodewordsPerBlock: 11 },\n { numBlocks: 4, dataCodewordsPerBlock: 12 },\n ],\n },\n ],\n },\n {\n infoBits: 0x0E60D,\n versionNumber: 14,\n alignmentPatternCenters: [6, 26, 46, 66],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 3, dataCodewordsPerBlock: 115 },\n { numBlocks: 1, dataCodewordsPerBlock: 116 },\n ],\n },\n {\n ecCodewordsPerBlock: 24,\n ecBlocks: [\n { numBlocks: 4, dataCodewordsPerBlock: 40 },\n { numBlocks: 5, dataCodewordsPerBlock: 41 },\n ],\n },\n {\n ecCodewordsPerBlock: 20,\n ecBlocks: [\n { numBlocks: 11, dataCodewordsPerBlock: 16 },\n { numBlocks: 5, dataCodewordsPerBlock: 17 },\n ],\n },\n {\n ecCodewordsPerBlock: 24,\n ecBlocks: [\n { numBlocks: 11, dataCodewordsPerBlock: 12 },\n { numBlocks: 5, dataCodewordsPerBlock: 13 },\n ],\n },\n ],\n },\n {\n infoBits: 0x0F928,\n versionNumber: 15,\n alignmentPatternCenters: [6, 26, 48, 70],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 22,\n ecBlocks: [\n { numBlocks: 5, dataCodewordsPerBlock: 87 },\n { numBlocks: 1, dataCodewordsPerBlock: 88 },\n ],\n },\n {\n ecCodewordsPerBlock: 24,\n ecBlocks: [\n { numBlocks: 5, dataCodewordsPerBlock: 41 },\n { numBlocks: 5, dataCodewordsPerBlock: 42 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 5, dataCodewordsPerBlock: 24 },\n { numBlocks: 7, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 24,\n ecBlocks: [\n { numBlocks: 11, dataCodewordsPerBlock: 12 },\n { numBlocks: 7, dataCodewordsPerBlock: 13 },\n ],\n },\n ],\n },\n {\n infoBits: 0x10B78,\n versionNumber: 16,\n alignmentPatternCenters: [6, 26, 50, 74],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 24,\n ecBlocks: [\n { numBlocks: 5, dataCodewordsPerBlock: 98 },\n { numBlocks: 1, dataCodewordsPerBlock: 99 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 7, dataCodewordsPerBlock: 45 },\n { numBlocks: 3, dataCodewordsPerBlock: 46 },\n ],\n },\n {\n ecCodewordsPerBlock: 24,\n ecBlocks: [\n { numBlocks: 15, dataCodewordsPerBlock: 19 },\n { numBlocks: 2, dataCodewordsPerBlock: 20 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 3, dataCodewordsPerBlock: 15 },\n { numBlocks: 13, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n {\n infoBits: 0x1145D,\n versionNumber: 17,\n alignmentPatternCenters: [6, 30, 54, 78],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 1, dataCodewordsPerBlock: 107 },\n { numBlocks: 5, dataCodewordsPerBlock: 108 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 10, dataCodewordsPerBlock: 46 },\n { numBlocks: 1, dataCodewordsPerBlock: 47 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 1, dataCodewordsPerBlock: 22 },\n { numBlocks: 15, dataCodewordsPerBlock: 23 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 2, dataCodewordsPerBlock: 14 },\n { numBlocks: 17, dataCodewordsPerBlock: 15 },\n ],\n },\n ],\n },\n {\n infoBits: 0x12A17,\n versionNumber: 18,\n alignmentPatternCenters: [6, 30, 56, 82],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 5, dataCodewordsPerBlock: 120 },\n { numBlocks: 1, dataCodewordsPerBlock: 121 },\n ],\n },\n {\n ecCodewordsPerBlock: 26,\n ecBlocks: [\n { numBlocks: 9, dataCodewordsPerBlock: 43 },\n { numBlocks: 4, dataCodewordsPerBlock: 44 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 17, dataCodewordsPerBlock: 22 },\n { numBlocks: 1, dataCodewordsPerBlock: 23 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 2, dataCodewordsPerBlock: 14 },\n { numBlocks: 19, dataCodewordsPerBlock: 15 },\n ],\n },\n ],\n },\n {\n infoBits: 0x13532,\n versionNumber: 19,\n alignmentPatternCenters: [6, 30, 58, 86],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 3, dataCodewordsPerBlock: 113 },\n { numBlocks: 4, dataCodewordsPerBlock: 114 },\n ],\n },\n {\n ecCodewordsPerBlock: 26,\n ecBlocks: [\n { numBlocks: 3, dataCodewordsPerBlock: 44 },\n { numBlocks: 11, dataCodewordsPerBlock: 45 },\n ],\n },\n {\n ecCodewordsPerBlock: 26,\n ecBlocks: [\n { numBlocks: 17, dataCodewordsPerBlock: 21 },\n { numBlocks: 4, dataCodewordsPerBlock: 22 },\n ],\n },\n {\n ecCodewordsPerBlock: 26,\n ecBlocks: [\n { numBlocks: 9, dataCodewordsPerBlock: 13 },\n { numBlocks: 16, dataCodewordsPerBlock: 14 },\n ],\n },\n ],\n },\n {\n infoBits: 0x149A6,\n versionNumber: 20,\n alignmentPatternCenters: [6, 34, 62, 90],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 3, dataCodewordsPerBlock: 107 },\n { numBlocks: 5, dataCodewordsPerBlock: 108 },\n ],\n },\n {\n ecCodewordsPerBlock: 26,\n ecBlocks: [\n { numBlocks: 3, dataCodewordsPerBlock: 41 },\n { numBlocks: 13, dataCodewordsPerBlock: 42 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 15, dataCodewordsPerBlock: 24 },\n { numBlocks: 5, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 15, dataCodewordsPerBlock: 15 },\n { numBlocks: 10, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n {\n infoBits: 0x15683,\n versionNumber: 21,\n alignmentPatternCenters: [6, 28, 50, 72, 94],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 4, dataCodewordsPerBlock: 116 },\n { numBlocks: 4, dataCodewordsPerBlock: 117 },\n ],\n },\n {\n ecCodewordsPerBlock: 26,\n ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 42 }],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 17, dataCodewordsPerBlock: 22 },\n { numBlocks: 6, dataCodewordsPerBlock: 23 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 19, dataCodewordsPerBlock: 16 },\n { numBlocks: 6, dataCodewordsPerBlock: 17 },\n ],\n },\n ],\n },\n {\n infoBits: 0x168C9,\n versionNumber: 22,\n alignmentPatternCenters: [6, 26, 50, 74, 98],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 2, dataCodewordsPerBlock: 111 },\n { numBlocks: 7, dataCodewordsPerBlock: 112 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 46 }],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 7, dataCodewordsPerBlock: 24 },\n { numBlocks: 16, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 24,\n ecBlocks: [{ numBlocks: 34, dataCodewordsPerBlock: 13 }],\n },\n ],\n },\n {\n infoBits: 0x177EC,\n versionNumber: 23,\n alignmentPatternCenters: [6, 30, 54, 74, 102],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 4, dataCodewordsPerBlock: 121 },\n { numBlocks: 5, dataCodewordsPerBlock: 122 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 4, dataCodewordsPerBlock: 47 },\n { numBlocks: 14, dataCodewordsPerBlock: 48 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 11, dataCodewordsPerBlock: 24 },\n { numBlocks: 14, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 16, dataCodewordsPerBlock: 15 },\n { numBlocks: 14, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n {\n infoBits: 0x18EC4,\n versionNumber: 24,\n alignmentPatternCenters: [6, 28, 54, 80, 106],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 6, dataCodewordsPerBlock: 117 },\n { numBlocks: 4, dataCodewordsPerBlock: 118 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 6, dataCodewordsPerBlock: 45 },\n { numBlocks: 14, dataCodewordsPerBlock: 46 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 11, dataCodewordsPerBlock: 24 },\n { numBlocks: 16, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 30, dataCodewordsPerBlock: 16 },\n { numBlocks: 2, dataCodewordsPerBlock: 17 },\n ],\n },\n ],\n },\n {\n infoBits: 0x191E1,\n versionNumber: 25,\n alignmentPatternCenters: [6, 32, 58, 84, 110],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 26,\n ecBlocks: [\n { numBlocks: 8, dataCodewordsPerBlock: 106 },\n { numBlocks: 4, dataCodewordsPerBlock: 107 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 8, dataCodewordsPerBlock: 47 },\n { numBlocks: 13, dataCodewordsPerBlock: 48 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 7, dataCodewordsPerBlock: 24 },\n { numBlocks: 22, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 22, dataCodewordsPerBlock: 15 },\n { numBlocks: 13, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n {\n infoBits: 0x1AFAB,\n versionNumber: 26,\n alignmentPatternCenters: [6, 30, 58, 86, 114],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 10, dataCodewordsPerBlock: 114 },\n { numBlocks: 2, dataCodewordsPerBlock: 115 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 19, dataCodewordsPerBlock: 46 },\n { numBlocks: 4, dataCodewordsPerBlock: 47 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 28, dataCodewordsPerBlock: 22 },\n { numBlocks: 6, dataCodewordsPerBlock: 23 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 33, dataCodewordsPerBlock: 16 },\n { numBlocks: 4, dataCodewordsPerBlock: 17 },\n ],\n },\n ],\n },\n {\n infoBits: 0x1B08E,\n versionNumber: 27,\n alignmentPatternCenters: [6, 34, 62, 90, 118],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 8, dataCodewordsPerBlock: 122 },\n { numBlocks: 4, dataCodewordsPerBlock: 123 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 22, dataCodewordsPerBlock: 45 },\n { numBlocks: 3, dataCodewordsPerBlock: 46 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 8, dataCodewordsPerBlock: 23 },\n { numBlocks: 26, dataCodewordsPerBlock: 24 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 12, dataCodewordsPerBlock: 15 },\n { numBlocks: 28, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n {\n infoBits: 0x1CC1A,\n versionNumber: 28,\n alignmentPatternCenters: [6, 26, 50, 74, 98, 122],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 3, dataCodewordsPerBlock: 117 },\n { numBlocks: 10, dataCodewordsPerBlock: 118 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 3, dataCodewordsPerBlock: 45 },\n { numBlocks: 23, dataCodewordsPerBlock: 46 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 4, dataCodewordsPerBlock: 24 },\n { numBlocks: 31, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 11, dataCodewordsPerBlock: 15 },\n { numBlocks: 31, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n {\n infoBits: 0x1D33F,\n versionNumber: 29,\n alignmentPatternCenters: [6, 30, 54, 78, 102, 126],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 7, dataCodewordsPerBlock: 116 },\n { numBlocks: 7, dataCodewordsPerBlock: 117 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 21, dataCodewordsPerBlock: 45 },\n { numBlocks: 7, dataCodewordsPerBlock: 46 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 1, dataCodewordsPerBlock: 23 },\n { numBlocks: 37, dataCodewordsPerBlock: 24 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 19, dataCodewordsPerBlock: 15 },\n { numBlocks: 26, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n {\n infoBits: 0x1ED75,\n versionNumber: 30,\n alignmentPatternCenters: [6, 26, 52, 78, 104, 130],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 5, dataCodewordsPerBlock: 115 },\n { numBlocks: 10, dataCodewordsPerBlock: 116 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 19, dataCodewordsPerBlock: 47 },\n { numBlocks: 10, dataCodewordsPerBlock: 48 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 15, dataCodewordsPerBlock: 24 },\n { numBlocks: 25, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 23, dataCodewordsPerBlock: 15 },\n { numBlocks: 25, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n {\n infoBits: 0x1F250,\n versionNumber: 31,\n alignmentPatternCenters: [6, 30, 56, 82, 108, 134],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 13, dataCodewordsPerBlock: 115 },\n { numBlocks: 3, dataCodewordsPerBlock: 116 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 2, dataCodewordsPerBlock: 46 },\n { numBlocks: 29, dataCodewordsPerBlock: 47 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 42, dataCodewordsPerBlock: 24 },\n { numBlocks: 1, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 23, dataCodewordsPerBlock: 15 },\n { numBlocks: 28, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n {\n infoBits: 0x209D5,\n versionNumber: 32,\n alignmentPatternCenters: [6, 34, 60, 86, 112, 138],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 115 }],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 10, dataCodewordsPerBlock: 46 },\n { numBlocks: 23, dataCodewordsPerBlock: 47 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 10, dataCodewordsPerBlock: 24 },\n { numBlocks: 35, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 19, dataCodewordsPerBlock: 15 },\n { numBlocks: 35, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n {\n infoBits: 0x216F0,\n versionNumber: 33,\n alignmentPatternCenters: [6, 30, 58, 86, 114, 142],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 17, dataCodewordsPerBlock: 115 },\n { numBlocks: 1, dataCodewordsPerBlock: 116 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 14, dataCodewordsPerBlock: 46 },\n { numBlocks: 21, dataCodewordsPerBlock: 47 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 29, dataCodewordsPerBlock: 24 },\n { numBlocks: 19, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 11, dataCodewordsPerBlock: 15 },\n { numBlocks: 46, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n {\n infoBits: 0x228BA,\n versionNumber: 34,\n alignmentPatternCenters: [6, 34, 62, 90, 118, 146],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 13, dataCodewordsPerBlock: 115 },\n { numBlocks: 6, dataCodewordsPerBlock: 116 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 14, dataCodewordsPerBlock: 46 },\n { numBlocks: 23, dataCodewordsPerBlock: 47 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 44, dataCodewordsPerBlock: 24 },\n { numBlocks: 7, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 59, dataCodewordsPerBlock: 16 },\n { numBlocks: 1, dataCodewordsPerBlock: 17 },\n ],\n },\n ],\n },\n {\n infoBits: 0x2379F,\n versionNumber: 35,\n alignmentPatternCenters: [6, 30, 54, 78, 102, 126, 150],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 12, dataCodewordsPerBlock: 121 },\n { numBlocks: 7, dataCodewordsPerBlock: 122 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 12, dataCodewordsPerBlock: 47 },\n { numBlocks: 26, dataCodewordsPerBlock: 48 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 39, dataCodewordsPerBlock: 24 },\n { numBlocks: 14, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 22, dataCodewordsPerBlock: 15 },\n { numBlocks: 41, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n {\n infoBits: 0x24B0B,\n versionNumber: 36,\n alignmentPatternCenters: [ 6, 24, 50, 76, 102, 128, 154 ],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 6, dataCodewordsPerBlock: 121 },\n { numBlocks: 14, dataCodewordsPerBlock: 122 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 6, dataCodewordsPerBlock: 47 },\n { numBlocks: 34, dataCodewordsPerBlock: 48 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 46, dataCodewordsPerBlock: 24 },\n { numBlocks: 10, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 2, dataCodewordsPerBlock: 15 },\n { numBlocks: 64, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n {\n infoBits: 0x2542E,\n versionNumber: 37,\n alignmentPatternCenters: [ 6, 28, 54, 80, 106, 132, 158 ],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 17, dataCodewordsPerBlock: 122 },\n { numBlocks: 4, dataCodewordsPerBlock: 123 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 29, dataCodewordsPerBlock: 46 },\n { numBlocks: 14, dataCodewordsPerBlock: 47 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 49, dataCodewordsPerBlock: 24 },\n { numBlocks: 10, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 24, dataCodewordsPerBlock: 15 },\n { numBlocks: 46, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n {\n infoBits: 0x26A64,\n versionNumber: 38,\n alignmentPatternCenters: [ 6, 32, 58, 84, 110, 136, 162 ],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 4, dataCodewordsPerBlock: 122 },\n { numBlocks: 18, dataCodewordsPerBlock: 123 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 13, dataCodewordsPerBlock: 46 },\n { numBlocks: 32, dataCodewordsPerBlock: 47 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 48, dataCodewordsPerBlock: 24 },\n { numBlocks: 14, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 42, dataCodewordsPerBlock: 15 },\n { numBlocks: 32, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n {\n infoBits: 0x27541,\n versionNumber: 39,\n alignmentPatternCenters: [ 6, 26, 54, 82, 110, 138, 166 ],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 20, dataCodewordsPerBlock: 117 },\n { numBlocks: 4, dataCodewordsPerBlock: 118 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 40, dataCodewordsPerBlock: 47 },\n { numBlocks: 7, dataCodewordsPerBlock: 48 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 43, dataCodewordsPerBlock: 24 },\n { numBlocks: 22, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 10, dataCodewordsPerBlock: 15 },\n { numBlocks: 67, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n {\n infoBits: 0x28C69,\n versionNumber: 40,\n alignmentPatternCenters: [ 6, 30, 58, 86, 114, 142, 170 ],\n errorCorrectionLevels: [\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 19, dataCodewordsPerBlock: 118 },\n { numBlocks: 6, dataCodewordsPerBlock: 119 },\n ],\n },\n {\n ecCodewordsPerBlock: 28,\n ecBlocks: [\n { numBlocks: 18, dataCodewordsPerBlock: 47 },\n { numBlocks: 31, dataCodewordsPerBlock: 48 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 34, dataCodewordsPerBlock: 24 },\n { numBlocks: 34, dataCodewordsPerBlock: 25 },\n ],\n },\n {\n ecCodewordsPerBlock: 30,\n ecBlocks: [\n { numBlocks: 20, dataCodewordsPerBlock: 15 },\n { numBlocks: 61, dataCodewordsPerBlock: 16 },\n ],\n },\n ],\n },\n];\n","import jsQR from '../node_modules/jsqr-es6/dist/jsQR.js';\n\nlet inversionAttempts = 'dontInvert';\nlet grayscaleWeights = {\n // weights for quick luma integer approximation (https://en.wikipedia.org/wiki/YUV#Full_swing_for_BT.601)\n red: 77,\n green: 150,\n blue: 29,\n useIntegerApproximation: true,\n};\n\nself.onmessage = event => {\n const type = event['data']['type'];\n const data = event['data']['data'];\n\n switch (type) {\n case 'decode':\n decode(data);\n break;\n case 'grayscaleWeights':\n setGrayscaleWeights(data);\n break;\n case 'inversionMode':\n setInversionMode(data);\n break;\n case 'close':\n // close after earlier messages in the event loop finished processing\n self.close();\n break;\n }\n};\n\nfunction decode(data) {\n const rgbaData = data['data'];\n const width = data['width'];\n const height = data['height'];\n const result = jsQR(rgbaData, width, height, {\n inversionAttempts: inversionAttempts,\n greyScaleWeights: grayscaleWeights,\n });\n self.postMessage({\n type: 'qrResult',\n data: result? result.data : null,\n });\n}\n\nfunction setGrayscaleWeights(data) {\n // update grayscaleWeights in a closure compiler compatible fashion\n grayscaleWeights.red = data['red'];\n grayscaleWeights.green = data['green'];\n grayscaleWeights.blue = data['blue'];\n grayscaleWeights.useIntegerApproximation = data['useIntegerApproximation'];\n}\n\nfunction setInversionMode(inversionMode) {\n switch (inversionMode) {\n case 'original':\n inversionAttempts = 'dontInvert';\n break;\n case 'invert':\n inversionAttempts = 'onlyInvert';\n break;\n case 'both':\n inversionAttempts = 'attemptBoth';\n break;\n default:\n throw new Error('Invalid inversion mode');\n }\n}\n"],"names":["decodeByte","stream","size","text","i","length","bytes","push","b","decodeURIComponent","map","substr","toString","join","decode","data","version","chunks","available","mode","ModeByte","Terminator","result","ECI","readBits","type","Mode","assignmentNumber","Numeric","num","Error","a","c","numericResult","Alphanumeric","AlphanumericCharacterCodes","charCodeAt","alphanumericResult","Byte","byteResult","Kanji","Math","floor","k","kanjiResult","StructuredAppend","currentSequence","totalSequence","parity","addOrSubtractGF","runEuclideanAlgorithm","field","R","degree","tLast","zero","t","one","r","rLast","isZero","rLastLast","q","dltInverse","addOrSubtract","buildMonomial","degreeDiff","scale","multiplyByMonomial","multiplyPoly","tLastLast","sigmaTildeAtZero","multiply","inverse","twoS","outputBytes","set","error","s","syndromeCoefficients","evaluation","syndrome","sigmaOmega","numErrors","errorLocator","getCoefficient","errorCount","evaluateAt","errorLocations","denominator","j","xiInverse","errorEvaluator","generatorBase","position","numBitsDiffering","x","y","z","bitCount","pushBit","bit","byte","readCodewords","matrix","formatInfo","dimension","setRegion","versionNumber","bitsRead","currentByte","readingUp","columnIndex","columnOffset","get","dataMask","codewords","readVersion","provisionalVersion","VERSIONS","topRightVersionBits","bottomLeftVersionBits","bestDifference","Infinity","bestVersion","infoBits","difference","readFormatInformation","topLeftFormatInfoBits","topRightBottomRightFormatInfoBits","bestFormatInfo","bits","getDataBlocks","ecLevel","totalCodewords","ecInfo","ecBlocks","forEach","block","numBlocks","dataBlocks","numDataCodewords","dataCodewordsPerBlock","ecCodewordsPerBlock","slice","shortBlockSize","dataBlock","shift","largeBlockCount","smallBlockCount","decodeMatrix","errorCorrectionLevel","resultIndex","correctedBytes","resultBytes","decodeData","squareToQuadrilateral","p1","p2","p3","p4","dx3","dy3","a11","a12","a13","a21","a22","a23","a31","a32","a33","quadrilateralToSquare","sToQ","extract","image","location","topRight","alignmentPattern","bottomLeft","qToS","sourcePixel","mappingFunction","sum","values","reduce","reorderFinderPatterns","pattern1","pattern2","pattern3","topLeft","twoThreeDistance","oneTwoDistance","oneThreeDistance","computeDimension","countBlackWhiteRun","moduleSize","topDimension","sideDimension","countBlackWhiteRunTowardsPoint","origin","end","steep","fromX","fromY","toX","toY","dx","currentPixel","xStep","realX","realY","switchPoints","dy","yStep","distances","distance","ceil","awayFromEnd","concat","middleValue","towardsEnd","scoreBlackWhiteRun","sequence","ratios","ratio","pow","averageSize","scorePattern","point","max","min","width","height","vertError","diagDownError","diagUpError","avgSize","recenterLocation","p","leftX","round","rightX","topY","bottomY","locate","activeFinderPatternQuads","activeAlignmentPatternQuads","lastBit","scans","v","abs","averageFinderPatternBlocksize","averageAlignmentPatternBlocksize","validFinderPattern","startX","endX","bottom","matchingQuads","line","top","validAlignmentPattern","finderPatternQuads","filter","alignmentPatternQuads","quad","scoredFinderPatternPositions","score","sort","otherPoint","otherPoints","finderPatternGroups","points","alignment","midTopRight","midTopLeft","midBottomLeft","centeredAlignment","findAlignmentPattern","e","correctionToTopLeft","sizeScore","expectedAlignmentPattern","scan","locations","decoded","binaryData","topRightCorner","extracted","topLeftCorner","bottomRightCorner","bottomLeftCorner","topRightFinderPattern","topLeftFinderPattern","bottomLeftFinderPattern","bottomRightAlignmentPattern","mergeObject","target","src","Object","keys","opt","jsQR","providedOptions","options","defaultOptions","shouldInvert","greyScaleWeights","canOverwriteImage","pixelCount","bufferOffset","greyscaleBuffer","Uint8ClampedArray","buffer","greyscaleWeights","useIntegerApproximation","greyscalePixels","red","green","blue","blackPointsBuffer","blackPointsCount","verticalRegionCount","verticalRegion","hortizontalRegion","horizontalRegionCount","pixelLumosity","average","blackPoints","averageNeighborBlackPoint","binarized","BitMatrix","binarizedBuffer","createEmpty","inverted","returnInverted","invertedBuffer","xRegion","yRegion","left","lum","threshold","tryInvertedFirst","inversionAttempts","Matrix","bufferSize","value","BitStream","bitOffset","byteOffset","numBits","bitsToNotRead","toRead","GenericGFPoly","coefficients","coefficientsLength","firstNonZero","other","smallerCoefficients","largerCoefficients","lengthDiff","sumDiff","scalar","product","aLength","bLength","aCoeff","bCoefficients","coefficient","GenericGF","primitive","genBase","expTable","Array","logTable","from","alignmentPatternCenters","errorCorrectionLevels","default","grayscaleWeights","self","onmessage","event","self.onmessage","postMessage","close"],"mappings":"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"} \ No newline at end of file diff --git a/praesentia/static/qr-scanner.umd.min.js b/praesentia/static/qr-scanner.umd.min.js new file mode 100644 index 0000000..70d61f6 --- /dev/null +++ b/praesentia/static/qr-scanner.umd.min.js @@ -0,0 +1,20 @@ +'use strict';(function(d,a){"object"===typeof exports&&"undefined"!==typeof module?module.exports=a():"function"===typeof define&&define.amd?define(a):(d=d||self,d.QrScanner=a())})(this,function(){class d{static hasCamera(){return d.listCameras(!1).then(a=>!!a.length).catch(()=>!1)}static listCameras(a=!1){if(!navigator.mediaDevices)return Promise.resolve([]);let b=null;return(a?navigator.mediaDevices.getUserMedia({audio:!1,video:!0}).then(a=>b=a).catch(()=>{}):Promise.resolve()).then(()=>navigator.mediaDevices.enumerateDevices()).then(a=> +a.filter(a=>"videoinput"===a.kind).map((a,b)=>({id:a.deviceId,label:a.label||(0===b?"Default Camera":`Camera ${b+1}`)}))).finally(()=>{if(b)for(let a of b.getTracks())a.stop(),b.removeTrack(a)})}constructor(a,b,c=this._onDecodeError,f=this._calculateScanRegion,k="environment"){this.$video=a;this.$canvas=document.createElement("canvas");this._onDecode=b;this._legacyCanvasSize=d.DEFAULT_CANVAS_SIZE;this._preferredCamera=k;this._flashOn=this._paused=this._active=!1;"number"===typeof c?(this._legacyCanvasSize= +c,console.warn("You're using a deprecated version of the QrScanner constructor which will be removed in the future")):this._onDecodeError=c;"number"===typeof f?(this._legacyCanvasSize=f,console.warn("You're using a deprecated version of the QrScanner constructor which will be removed in the future")):this._calculateScanRegion=f;this._scanRegion=this._calculateScanRegion(a);this._onPlay=this._onPlay.bind(this);this._onLoadedMetaData=this._onLoadedMetaData.bind(this);this._onVisibilityChange=this._onVisibilityChange.bind(this); +a.disablePictureInPicture=!0;a.playsInline=!0;a.muted=!0;let g=!1;a.hidden&&(a.hidden=!1,g=!0);document.body.contains(a)||(document.body.appendChild(a),g=!0);requestAnimationFrame(()=>{let b=window.getComputedStyle(a);"none"===b.display&&(a.style.setProperty("display","block","important"),g=!0);"visible"!==b.visibility&&(a.style.setProperty("visibility","visible","important"),g=!0);g&&(console.warn("QrScanner has overwritten the video hiding style to avoid Safari stopping the playback."),a.style.opacity= +0,a.style.width=0,a.style.height=0)});a.addEventListener("play",this._onPlay);a.addEventListener("loadedmetadata",this._onLoadedMetaData);document.addEventListener("visibilitychange",this._onVisibilityChange);this._qrEnginePromise=d.createQrEngine()}hasFlash(){let a=null;return(this.$video.srcObject?Promise.resolve(this.$video.srcObject.getVideoTracks()[0]):this._getCameraStream().then(({stream:b})=>{console.warn("Call hasFlash after successfully starting the scanner to avoid creating a temporary video stream"); +a=b;return b.getVideoTracks()[0]})).then(a=>"torch"in a.getSettings()).catch(()=>!1).finally(()=>{if(a)for(let b of a.getTracks())b.stop(),a.removeTrack(b)})}isFlashOn(){return this._flashOn}toggleFlash(){return this._flashOn?this.turnFlashOff():this.turnFlashOn()}turnFlashOn(){if(this._flashOn)return Promise.resolve();this._flashOn=!0;return!this._active||this._paused?Promise.resolve():this.hasFlash().then(a=>a?this.$video.srcObject.getVideoTracks()[0].applyConstraints({advanced:[{torch:!0}]}):Promise.reject("No flash available")).catch(()=> +{this._flashOn=!1;throw e;})}turnFlashOff(){if(this._flashOn)return this._flashOn=!1,this._restartVideoStream()}destroy(){this.$video.removeEventListener("loadedmetadata",this._onLoadedMetaData);this.$video.removeEventListener("play",this._onPlay);document.removeEventListener("visibilitychange",this._onVisibilityChange);this.stop();d._postWorkerMessage(this._qrEnginePromise,"close")}start(){if(this._active&&!this._paused)return Promise.resolve();"https:"!==window.location.protocol&&console.warn("The camera stream is only accessible if the page is transferred via https."); +this._active=!0;if(document.hidden)return Promise.resolve();this._paused=!1;return this.$video.srcObject?(this.$video.play(),Promise.resolve()):this._getCameraStream().then(({stream:a,facingMode:b})=>{this.$video.srcObject=a;this.$video.play();this._setVideoMirror(b);this._flashOn&&(this._flashOn=!1,this.turnFlashOn().catch(()=>{}))}).catch(a=>{this._active=!1;throw a;})}stop(){this.pause();this._active=!1}pause(a=!1){this._paused=!0;if(!this._active)return Promise.resolve(!0);this.$video.pause(); +let b=()=>{const a=this.$video.srcObject?this.$video.srcObject.getTracks():[];for(const b of a)b.stop(),this.$video.srcObject.removeTrack(b);this.$video.srcObject=null};return a?(b(),Promise.resolve(!0)):(new Promise(a=>setTimeout(a,300))).then(()=>{if(!this._paused)return!1;b();return!0})}setCamera(a){if(a===this._preferredCamera)return Promise.resolve();this._preferredCamera=a;return this._restartVideoStream()}static scanImage(a,b=null,c=null,f=null,k=!1,g=!1){let h=c instanceof Worker,l=Promise.all([c|| +d.createQrEngine(),d._loadImage(a)]).then(([a,g])=>{c=a;let l;[f,l]=this._drawToCanvas(g,b,f,k);return c instanceof Worker?(h||c.postMessage({type:"inversionMode",data:"both"}),new Promise((a,b)=>{let k,g,h;g=f=>{"qrResult"===f.data.type&&(c.removeEventListener("message",g),c.removeEventListener("error",h),clearTimeout(k),null!==f.data.data?a(f.data.data):b(d.NO_QR_CODE_FOUND))};h=a=>{c.removeEventListener("message",g);c.removeEventListener("error",h);clearTimeout(k);b("Scanner error: "+(a?a.message|| +a:"Unknown Error"))};c.addEventListener("message",g);c.addEventListener("error",h);k=setTimeout(()=>h("timeout"),1E4);let m=l.getImageData(0,0,f.width,f.height);c.postMessage({type:"decode",data:m},[m.data.buffer])})):new Promise((a,b)=>{let k=setTimeout(()=>b("Scanner error: timeout"),1E4);c.detect(f).then(c=>{c.length?a(c[0].rawValue):b(d.NO_QR_CODE_FOUND)}).catch(a=>b("Scanner error: "+(a.message||a))).finally(()=>clearTimeout(k))})});b&&g&&(l=l.catch(()=>d.scanImage(a,null,c,f,k)));return l=l.finally(()=> +{h||d._postWorkerMessage(c,"close")})}setGrayscaleWeights(a,b,c,f=!0){d._postWorkerMessage(this._qrEnginePromise,"grayscaleWeights",{red:a,green:b,blue:c,useIntegerApproximation:f})}setInversionMode(a){d._postWorkerMessage(this._qrEnginePromise,"inversionMode",a)}static createQrEngine(a=d.WORKER_PATH){return("BarcodeDetector"in window&&BarcodeDetector.getSupportedFormats?BarcodeDetector.getSupportedFormats():Promise.resolve([])).then(b=>-1!==b.indexOf("qr_code")?new BarcodeDetector({formats:["qr_code"]}): +new Worker(a))}_onPlay(){this._scanRegion=this._calculateScanRegion(this.$video);this._scanFrame()}_onLoadedMetaData(){this._scanRegion=this._calculateScanRegion(this.$video)}_onVisibilityChange(){document.hidden?this.pause():this._active&&this.start()}_calculateScanRegion(a){let b=Math.round(2/3*Math.min(a.videoWidth,a.videoHeight));return{x:Math.round((a.videoWidth-b)/2),y:Math.round((a.videoHeight-b)/2),width:b,height:b,downScaledWidth:this._legacyCanvasSize,downScaledHeight:this._legacyCanvasSize}}_scanFrame(){if(!this._active|| +this.$video.paused||this.$video.ended)return!1;requestAnimationFrame(()=>{1>=this.$video.readyState?this._scanFrame():this._qrEnginePromise.then(a=>d.scanImage(this.$video,this._scanRegion,a,this.$canvas)).then(this._onDecode,a=>{this._active&&(-1!==(a.message||a).indexOf("service unavailable")&&(this._qrEnginePromise=d.createQrEngine()),this._onDecodeError(a))}).then(()=>this._scanFrame())})}_onDecodeError(a){a!==d.NO_QR_CODE_FOUND&&console.log(a)}_getCameraStream(){if(!navigator.mediaDevices)return Promise.reject("Camera not found."); +let a="environment"===this._preferredCamera||"user"===this._preferredCamera?"facingMode":"deviceId",b=[{width:{min:1024}},{width:{min:768}},{}];return[...b.map(b=>Object.assign({},b,{[a]:{exact:this._preferredCamera}})),...b].reduceRight((a,b)=>()=>navigator.mediaDevices.getUserMedia({video:b,audio:!1}).then(a=>({stream:a,facingMode:this._getFacingMode(a)||(b.facingMode?this._preferredCamera:"environment"===this._preferredCamera?"user":"environment")})).catch(a),()=>Promise.reject("Camera not found."))()}_restartVideoStream(){let a= +this._paused;return this.pause(!0).then(b=>{if(b&&!a&&this._active)return this.start()})}_setVideoMirror(a){this.$video.style.transform="scaleX("+("user"===a?-1:1)+")"}_getFacingMode(a){return(a=a.getVideoTracks()[0])?/rear|back|environment/i.test(a.label)?"environment":/front|user|face/i.test(a.label)?"user":null:null}static _drawToCanvas(a,b=null,c=null,f=!1){c=c||document.createElement("canvas");let d=b&&b.x?b.x:0,g=b&&b.y?b.y:0,h=b&&b.width?b.width:a.width||a.videoWidth,l=b&&b.height?b.height: +a.height||a.videoHeight;f||(f=b&&b.downScaledWidth?b.downScaledWidth:h,b=b&&b.downScaledHeight?b.downScaledHeight:l,c.width!==f&&(c.width=f),c.height!==b&&(c.height=b));b=c.getContext("2d",{alpha:!1});b.imageSmoothingEnabled=!1;b.drawImage(a,d,g,h,l,0,0,c.width,c.height);return[c,b]}static _loadImage(a){if(a instanceof HTMLCanvasElement||a instanceof HTMLVideoElement||window.ImageBitmap&&a instanceof window.ImageBitmap||window.OffscreenCanvas&&a instanceof window.OffscreenCanvas)return Promise.resolve(a); +if(a instanceof Image)return d._awaitImageLoad(a).then(()=>a);if(a instanceof File||a instanceof Blob||a instanceof URL||"string"===typeof a){let b=new Image;b.src=a instanceof File||a instanceof Blob?URL.createObjectURL(a):a;return d._awaitImageLoad(b).then(()=>{(a instanceof File||a instanceof Blob)&&URL.revokeObjectURL(b.src);return b})}return Promise.reject("Unsupported image type.")}static _awaitImageLoad(a){return new Promise((b,c)=>{if(a.complete&&0!==a.naturalWidth)b();else{let f,d;f=()=> +{a.removeEventListener("load",f);a.removeEventListener("error",d);b()};d=()=>{a.removeEventListener("load",f);a.removeEventListener("error",d);c("Image load error")};a.addEventListener("load",f);a.addEventListener("error",d)}})}static _postWorkerMessage(a,b,c){return Promise.resolve(a).then(a=>{a instanceof Worker&&a.postMessage({type:b,data:c})})}}d.DEFAULT_CANVAS_SIZE=400;d.NO_QR_CODE_FOUND="No QR code found";d.WORKER_PATH="qr-scanner-worker.min.js";return d}) +//# sourceMappingURL=qr-scanner.umd.min.js.map diff --git a/praesentia/static/qr-scanner.umd.min.js.map b/praesentia/static/qr-scanner.umd.min.js.map new file mode 100644 index 0000000..c4f0863 --- /dev/null +++ b/praesentia/static/qr-scanner.umd.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"qr-scanner.umd.min.js","sources":["src/qr-scanner.js"],"sourcesContent":["export default class QrScanner {\n /* async */\n static hasCamera() {\n return QrScanner.listCameras(false)\n .then(cameras => !!cameras.length)\n .catch(() => false);\n }\n\n /* async */\n static listCameras(requestLabels = false) {\n if (!navigator.mediaDevices) return Promise.resolve([]);\n\n // Note that enumerateDevices can always be called and does not prompt the user for permission.\n // However, enumerateDevices only includes device labels if served via https and an active media stream exists\n // or permission to access the camera was given. Therefore, ask for camera permission by opening a stream, if\n // labels were requested.\n let openedStream = null;\n return (requestLabels\n ? navigator.mediaDevices.getUserMedia({ audio: false, video: true })\n .then(stream => openedStream = stream)\n // Fail gracefully, especially if the device has no camera or on mobile when the camera is already in\n // use and some browsers disallow a second stream.\n .catch(() => {})\n : Promise.resolve()\n )\n .then(() => navigator.mediaDevices.enumerateDevices())\n .then(devices => devices.filter(device => device.kind === 'videoinput').map((device, i) => ({\n id: device.deviceId,\n label: device.label || (i === 0 ? 'Default Camera' : `Camera ${i + 1}`),\n })))\n .finally(() => {\n // close the stream we just opened for getting camera access for listing the device labels\n if (!openedStream) return;\n for (const track of openedStream.getTracks()) {\n track.stop();\n openedStream.removeTrack(track);\n }\n });\n }\n\n constructor(\n video,\n onDecode,\n canvasSizeOrOnDecodeError = this._onDecodeError,\n canvasSizeOrCalculateScanRegion = this._calculateScanRegion,\n preferredCamera = 'environment'\n ) {\n this.$video = video;\n this.$canvas = document.createElement('canvas');\n this._onDecode = onDecode;\n this._legacyCanvasSize = QrScanner.DEFAULT_CANVAS_SIZE;\n this._preferredCamera = preferredCamera;\n this._active = false;\n this._paused = false;\n this._flashOn = false;\n\n if (typeof canvasSizeOrOnDecodeError === 'number') {\n // legacy function signature where the third argument is the canvas size\n this._legacyCanvasSize = canvasSizeOrOnDecodeError;\n console.warn('You\\'re using a deprecated version of the QrScanner constructor which will be removed in '\n + 'the future');\n } else {\n this._onDecodeError = canvasSizeOrOnDecodeError;\n }\n\n if (typeof canvasSizeOrCalculateScanRegion === 'number') {\n // legacy function signature where the fourth argument is the canvas size\n this._legacyCanvasSize = canvasSizeOrCalculateScanRegion;\n console.warn('You\\'re using a deprecated version of the QrScanner constructor which will be removed in '\n + 'the future');\n } else {\n this._calculateScanRegion = canvasSizeOrCalculateScanRegion;\n }\n\n this._scanRegion = this._calculateScanRegion(video);\n\n this._onPlay = this._onPlay.bind(this);\n this._onLoadedMetaData = this._onLoadedMetaData.bind(this);\n this._onVisibilityChange = this._onVisibilityChange.bind(this);\n\n video.disablePictureInPicture = true;\n // Allow inline playback on iPhone instead of requiring full screen playback,\n // see https://webkit.org/blog/6784/new-video-policies-for-ios/\n video.playsInline = true;\n // Allow play() on iPhone without requiring a user gesture. Should not really be needed as camera stream\n // includes no audio, but just to be safe.\n video.muted = true;\n\n // Avoid Safari stopping the video stream on a hidden video.\n // See https://github.com/cozmo/jsQR/issues/185\n let shouldHideVideo = false;\n if (video.hidden) {\n video.hidden = false;\n shouldHideVideo = true;\n }\n if (!document.body.contains(video)) {\n document.body.appendChild(video);\n shouldHideVideo = true;\n }\n requestAnimationFrame(() => {\n // Checking in requestAnimationFrame which should avoid a potential additional re-flow for getComputedStyle.\n const computedStyle = window.getComputedStyle(video);\n if (computedStyle.display === 'none') {\n video.style.setProperty('display', 'block', 'important');\n shouldHideVideo = true;\n }\n if (computedStyle.visibility !== 'visible') {\n video.style.setProperty('visibility', 'visible', 'important');\n shouldHideVideo = true;\n }\n if (shouldHideVideo) {\n // Hide the video in a way that doesn't cause Safari to stop the playback.\n console.warn('QrScanner has overwritten the video hiding style to avoid Safari stopping the playback.');\n video.style.opacity = 0;\n video.style.width = 0;\n video.style.height = 0;\n }\n });\n\n video.addEventListener('play', this._onPlay);\n video.addEventListener('loadedmetadata', this._onLoadedMetaData);\n document.addEventListener('visibilitychange', this._onVisibilityChange);\n\n this._qrEnginePromise = QrScanner.createQrEngine();\n }\n\n /* async */\n hasFlash() {\n let openedStream = null;\n return (this.$video.srcObject\n ? Promise.resolve(this.$video.srcObject.getVideoTracks()[0])\n : this._getCameraStream().then(({ stream }) => {\n console.warn('Call hasFlash after successfully starting the scanner to avoid creating '\n + 'a temporary video stream');\n openedStream = stream;\n return stream.getVideoTracks()[0];\n })\n )\n .then((track) => 'torch' in track.getSettings())\n .catch(() => false)\n .finally(() => {\n // close the stream we just opened for detecting whether it supports flash\n if (!openedStream) return;\n for (const track of openedStream.getTracks()) {\n track.stop();\n openedStream.removeTrack(track);\n }\n });\n }\n\n isFlashOn() {\n return this._flashOn;\n }\n\n /* async */\n toggleFlash() {\n if (this._flashOn) {\n return this.turnFlashOff();\n } else {\n return this.turnFlashOn();\n }\n }\n\n /* async */\n turnFlashOn() {\n if (this._flashOn) return Promise.resolve();\n this._flashOn = true;\n if (!this._active || this._paused) return Promise.resolve(); // flash will be turned on later on .start()\n return this.hasFlash().then((hasFlash) => {\n if (!hasFlash) return Promise.reject('No flash available');\n // Note that the video track is guaranteed to exist at this point\n return this.$video.srcObject.getVideoTracks()[0].applyConstraints({\n advanced: [{ torch: true }],\n });\n }).catch(() => {\n this._flashOn = false;\n throw e;\n });\n }\n\n /* async */\n turnFlashOff() {\n if (!this._flashOn) return;\n // applyConstraints with torch: false does not work to turn the flashlight off, as a stream's torch stays\n // continuously on, see https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints#torch. Therefore,\n // we have to stop the stream to turn the flashlight off.\n this._flashOn = false;\n return this._restartVideoStream();\n }\n\n destroy() {\n this.$video.removeEventListener('loadedmetadata', this._onLoadedMetaData);\n this.$video.removeEventListener('play', this._onPlay);\n document.removeEventListener('visibilitychange', this._onVisibilityChange);\n\n this.stop();\n QrScanner._postWorkerMessage(this._qrEnginePromise, 'close');\n }\n\n /* async */\n start() {\n if (this._active && !this._paused) {\n return Promise.resolve();\n }\n if (window.location.protocol !== 'https:') {\n // warn but try starting the camera anyways\n console.warn('The camera stream is only accessible if the page is transferred via https.');\n }\n this._active = true;\n if (document.hidden) {\n // camera will be started as soon as tab is in foreground\n return Promise.resolve();\n }\n this._paused = false;\n if (this.$video.srcObject) {\n // camera stream already/still set\n this.$video.play();\n return Promise.resolve();\n }\n\n return this._getCameraStream()\n .then(({ stream, facingMode }) => {\n this.$video.srcObject = stream;\n this.$video.play();\n this._setVideoMirror(facingMode);\n\n // Restart the flash if it was previously on\n if (this._flashOn) {\n this._flashOn = false; // force turnFlashOn to restart the flash\n this.turnFlashOn().catch(() => {});\n }\n })\n .catch(e => {\n this._active = false;\n throw e;\n });\n }\n\n stop() {\n this.pause();\n this._active = false;\n }\n\n /* async */\n pause(stopStreamImmediately = false) {\n this._paused = true;\n if (!this._active) {\n return Promise.resolve(true);\n }\n this.$video.pause();\n\n const stopStream = () => {\n const tracks = this.$video.srcObject ? this.$video.srcObject.getTracks() : [];\n for (const track of tracks) {\n track.stop(); // note that this will also automatically turn the flashlight off\n this.$video.srcObject.removeTrack(track);\n }\n this.$video.srcObject = null;\n };\n\n if (stopStreamImmediately) {\n stopStream();\n return Promise.resolve(true);\n }\n\n return new Promise((resolve) => setTimeout(resolve, 300))\n .then(() => {\n if (!this._paused) return false;\n stopStream();\n return true;\n });\n }\n\n /* async */\n setCamera(facingModeOrDeviceId) {\n if (facingModeOrDeviceId === this._preferredCamera) return Promise.resolve();\n this._preferredCamera = facingModeOrDeviceId;\n // Restart the scanner with the new camera which will also update the video mirror and the scan region.\n return this._restartVideoStream();\n }\n\n /* async */\n static scanImage(imageOrFileOrUrl, scanRegion=null, qrEngine=null, canvas=null, disallowCanvasResizing=false,\n alsoTryWithoutScanRegion=false) {\n const gotExternalWorker = qrEngine instanceof Worker;\n\n let promise = Promise.all([\n qrEngine || QrScanner.createQrEngine(),\n QrScanner._loadImage(imageOrFileOrUrl),\n ]).then(([engine, image]) => {\n qrEngine = engine;\n let canvasContext;\n [canvas, canvasContext] = this._drawToCanvas(image, scanRegion, canvas, disallowCanvasResizing);\n\n if (qrEngine instanceof Worker) {\n if (!gotExternalWorker) {\n // Enable scanning of inverted color qr codes. Not using _postWorkerMessage as it's async\n qrEngine.postMessage({ type: 'inversionMode', data: 'both' });\n }\n return new Promise((resolve, reject) => {\n let timeout, onMessage, onError;\n onMessage = event => {\n if (event.data.type !== 'qrResult') {\n return;\n }\n qrEngine.removeEventListener('message', onMessage);\n qrEngine.removeEventListener('error', onError);\n clearTimeout(timeout);\n if (event.data.data !== null) {\n resolve(event.data.data);\n } else {\n reject(QrScanner.NO_QR_CODE_FOUND);\n }\n };\n onError = (e) => {\n qrEngine.removeEventListener('message', onMessage);\n qrEngine.removeEventListener('error', onError);\n clearTimeout(timeout);\n const errorMessage = !e ? 'Unknown Error' : (e.message || e);\n reject('Scanner error: ' + errorMessage);\n };\n qrEngine.addEventListener('message', onMessage);\n qrEngine.addEventListener('error', onError);\n timeout = setTimeout(() => onError('timeout'), 10000);\n const imageData = canvasContext.getImageData(0, 0, canvas.width, canvas.height);\n qrEngine.postMessage({\n type: 'decode',\n data: imageData\n }, [imageData.data.buffer]);\n });\n } else {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => reject('Scanner error: timeout'), 10000);\n qrEngine.detect(canvas).then(scanResults => {\n if (!scanResults.length) {\n reject(QrScanner.NO_QR_CODE_FOUND);\n } else {\n resolve(scanResults[0].rawValue);\n }\n }).catch((e) => reject('Scanner error: ' + (e.message || e))).finally(() => clearTimeout(timeout));\n });\n }\n });\n\n if (scanRegion && alsoTryWithoutScanRegion) {\n promise = promise.catch(() =>\n QrScanner.scanImage(imageOrFileOrUrl, null, qrEngine, canvas, disallowCanvasResizing));\n }\n\n promise = promise.finally(() => {\n if (gotExternalWorker) return;\n QrScanner._postWorkerMessage(qrEngine, 'close');\n });\n\n return promise;\n }\n\n setGrayscaleWeights(red, green, blue, useIntegerApproximation = true) {\n // Note that for the native BarcodeDecoder, this is a no-op. However, the native implementations work also\n // well with colored qr codes.\n QrScanner._postWorkerMessage(\n this._qrEnginePromise,\n 'grayscaleWeights',\n { red, green, blue, useIntegerApproximation }\n );\n }\n\n setInversionMode(inversionMode) {\n // Note that for the native BarcodeDecoder, this is a no-op. However, the native implementations scan normal\n // and inverted qr codes by default\n QrScanner._postWorkerMessage(this._qrEnginePromise, 'inversionMode', inversionMode);\n }\n\n /* async */\n static createQrEngine(workerPath = QrScanner.WORKER_PATH) {\n return ('BarcodeDetector' in window && BarcodeDetector.getSupportedFormats\n ? BarcodeDetector.getSupportedFormats()\n : Promise.resolve([])\n )\n .then((supportedFormats) => supportedFormats.indexOf('qr_code') !== -1\n ? new BarcodeDetector({ formats: ['qr_code'] })\n : new Worker(workerPath)\n );\n }\n\n _onPlay() {\n this._scanRegion = this._calculateScanRegion(this.$video);\n this._scanFrame();\n }\n\n _onLoadedMetaData() {\n this._scanRegion = this._calculateScanRegion(this.$video);\n }\n\n _onVisibilityChange() {\n if (document.hidden) {\n this.pause();\n } else if (this._active) {\n this.start();\n }\n }\n\n _calculateScanRegion(video) {\n // Default scan region calculation. Note that this can be overwritten in the constructor.\n const smallestDimension = Math.min(video.videoWidth, video.videoHeight);\n const scanRegionSize = Math.round(2 / 3 * smallestDimension);\n return {\n x: Math.round((video.videoWidth - scanRegionSize) / 2),\n y: Math.round((video.videoHeight - scanRegionSize) / 2),\n width: scanRegionSize,\n height: scanRegionSize,\n downScaledWidth: this._legacyCanvasSize,\n downScaledHeight: this._legacyCanvasSize,\n };\n }\n\n _scanFrame() {\n if (!this._active || this.$video.paused || this.$video.ended) return false;\n // using requestAnimationFrame to avoid scanning if tab is in background\n requestAnimationFrame(() => {\n if (this.$video.readyState <= 1) {\n // Skip scans until the video is ready as drawImage() only works correctly on a video with readyState\n // > 1, see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/drawImage#Notes.\n // This also avoids false positives for videos paused after a successful scan which remains visible on\n // the canvas until the video is started again and ready.\n this._scanFrame();\n return;\n }\n this._qrEnginePromise\n .then((qrEngine) => QrScanner.scanImage(this.$video, this._scanRegion, qrEngine, this.$canvas))\n .then(this._onDecode, (error) => {\n if (!this._active) return;\n const errorMessage = error.message || error;\n if (errorMessage.indexOf('service unavailable') !== -1) {\n // When the native BarcodeDetector crashed, create a new one\n this._qrEnginePromise = QrScanner.createQrEngine();\n }\n this._onDecodeError(error);\n })\n .then(() => this._scanFrame());\n });\n }\n\n _onDecodeError(error) {\n // default error handler; can be overwritten in the constructor\n if (error === QrScanner.NO_QR_CODE_FOUND) return;\n console.log(error);\n }\n\n /* async */\n _getCameraStream() {\n if (!navigator.mediaDevices) {\n return Promise.reject('Camera not found.');\n }\n\n const preferenceType = this._preferredCamera === 'environment' || this._preferredCamera === 'user'\n ? 'facingMode'\n : 'deviceId';\n const constraintsWithoutCamera = [{\n width: { min: 1024 }\n }, {\n width: { min: 768 }\n }, {}];\n const constraintsWithCamera = constraintsWithoutCamera.map((constraint) => Object.assign({}, constraint, {\n [preferenceType]: { exact: this._preferredCamera },\n }));\n\n // First try constraints with camera, then without camera. Using reduceRight as the Promise is build in a\n // bottom up fashion.\n return [...constraintsWithCamera, ...constraintsWithoutCamera].reduceRight((fallback, constraint) =>\n () => navigator.mediaDevices.getUserMedia({ video: constraint, audio: false })\n .then((stream) => ({\n stream,\n // Try to determine the facing mode from the stream, otherwise use a guess or 'environment' as\n // default. Note that the guess is not always accurate as Safari returns cameras of different facing\n // mode, even for exact facingMode constraints.\n facingMode: this._getFacingMode(stream)\n || (constraint.facingMode\n ? this._preferredCamera // _preferredCamera is a facing mode and we are able to fulfill it\n : (this._preferredCamera === 'environment'\n ? 'user' // switch as _preferredCamera was environment but we are not able to fulfill it\n : 'environment' // switch from unfulfilled user facingMode or default to environment\n )\n ),\n }))\n .catch(fallback),\n () => Promise.reject('Camera not found.')\n )();\n }\n\n /* async */\n _restartVideoStream() {\n // Note that we always pause the stream and not only if !this._paused as even if this._paused === true, the\n // stream might still be running, as it's by default only stopped after a delay of 300ms.\n const wasPaused = this._paused;\n return this.pause(true).then((paused) => {\n if (!paused || wasPaused || !this._active) return;\n return this.start();\n });\n }\n\n _setVideoMirror(facingMode) {\n // in user facing mode mirror the video to make it easier for the user to position the QR code\n const scaleFactor = facingMode==='user'? -1 : 1;\n this.$video.style.transform = 'scaleX(' + scaleFactor + ')';\n }\n\n _getFacingMode(videoStream) {\n const videoTrack = videoStream.getVideoTracks()[0];\n if (!videoTrack) return null; // unknown\n // inspired by https://github.com/JodusNodus/react-qr-reader/blob/master/src/getDeviceId.js#L13\n return /rear|back|environment/i.test(videoTrack.label)\n ? 'environment'\n : /front|user|face/i.test(videoTrack.label)\n ? 'user'\n : null; // unknown\n }\n\n static _drawToCanvas(image, scanRegion=null, canvas=null, disallowCanvasResizing=false) {\n canvas = canvas || document.createElement('canvas');\n const scanRegionX = scanRegion && scanRegion.x? scanRegion.x : 0;\n const scanRegionY = scanRegion && scanRegion.y? scanRegion.y : 0;\n const scanRegionWidth = scanRegion && scanRegion.width? scanRegion.width : image.width || image.videoWidth;\n const scanRegionHeight = scanRegion && scanRegion.height? scanRegion.height : image.height || image.videoHeight;\n\n if (!disallowCanvasResizing) {\n const canvasWidth = scanRegion && scanRegion.downScaledWidth\n ? scanRegion.downScaledWidth\n : scanRegionWidth;\n const canvasHeight = scanRegion && scanRegion.downScaledHeight\n ? scanRegion.downScaledHeight\n : scanRegionHeight;\n // Setting the canvas width or height clears the canvas, even if the values didn't change, therefore only\n // set them if they actually changed.\n if (canvas.width !== canvasWidth) {\n canvas.width = canvasWidth;\n }\n if (canvas.height !== canvasHeight) {\n canvas.height = canvasHeight;\n }\n }\n\n const context = canvas.getContext('2d', { alpha: false });\n context.imageSmoothingEnabled = false; // gives less blurry images\n context.drawImage(\n image,\n scanRegionX, scanRegionY, scanRegionWidth, scanRegionHeight,\n 0, 0, canvas.width, canvas.height\n );\n return [canvas, context];\n }\n\n /* async */\n static _loadImage(imageOrFileOrBlobOrUrl) {\n if (imageOrFileOrBlobOrUrl instanceof HTMLCanvasElement || imageOrFileOrBlobOrUrl instanceof HTMLVideoElement\n || window.ImageBitmap && imageOrFileOrBlobOrUrl instanceof window.ImageBitmap\n || window.OffscreenCanvas && imageOrFileOrBlobOrUrl instanceof window.OffscreenCanvas) {\n return Promise.resolve(imageOrFileOrBlobOrUrl);\n } else if (imageOrFileOrBlobOrUrl instanceof Image) {\n return QrScanner._awaitImageLoad(imageOrFileOrBlobOrUrl).then(() => imageOrFileOrBlobOrUrl);\n } else if (imageOrFileOrBlobOrUrl instanceof File || imageOrFileOrBlobOrUrl instanceof Blob\n || imageOrFileOrBlobOrUrl instanceof URL || typeof(imageOrFileOrBlobOrUrl)==='string') {\n const image = new Image();\n if (imageOrFileOrBlobOrUrl instanceof File || imageOrFileOrBlobOrUrl instanceof Blob) {\n image.src = URL.createObjectURL(imageOrFileOrBlobOrUrl);\n } else {\n image.src = imageOrFileOrBlobOrUrl;\n }\n return QrScanner._awaitImageLoad(image).then(() => {\n if (imageOrFileOrBlobOrUrl instanceof File || imageOrFileOrBlobOrUrl instanceof Blob) {\n URL.revokeObjectURL(image.src);\n }\n return image;\n });\n } else {\n return Promise.reject('Unsupported image type.');\n }\n }\n\n /* async */\n static _awaitImageLoad(image) {\n return new Promise((resolve, reject) => {\n if (image.complete && image.naturalWidth!==0) {\n // already loaded\n resolve();\n } else {\n let onLoad, onError;\n onLoad = () => {\n image.removeEventListener('load', onLoad);\n image.removeEventListener('error', onError);\n resolve();\n };\n onError = () => {\n image.removeEventListener('load', onLoad);\n image.removeEventListener('error', onError);\n reject('Image load error');\n };\n image.addEventListener('load', onLoad);\n image.addEventListener('error', onError);\n }\n });\n }\n\n /* async */\n static _postWorkerMessage(qrEngineOrQrEnginePromise, type, data) {\n return Promise.resolve(qrEngineOrQrEnginePromise).then((qrEngine) => {\n if (!(qrEngine instanceof Worker)) return;\n qrEngine.postMessage({ type, data });\n });\n }\n}\nQrScanner.DEFAULT_CANVAS_SIZE = 400;\nQrScanner.NO_QR_CODE_FOUND = 'No QR code found';\nQrScanner.WORKER_PATH = 'qr-scanner-worker.min.js';\n"],"names":["QrScanner","listCameras","then","cameras","length","catch","requestLabels","navigator","mediaDevices","Promise","resolve","openedStream","getUserMedia","audio","video","stream","enumerateDevices","devices","filter","device","kind","map","i","id","deviceId","label","finally","track","stop","removeTrack","onDecode","canvasSizeOrOnDecodeError","_onDecodeError","canvasSizeOrCalculateScanRegion","_calculateScanRegion","preferredCamera","$video","$canvas","document","createElement","_onDecode","_legacyCanvasSize","DEFAULT_CANVAS_SIZE","_preferredCamera","_flashOn","_paused","_active","console","warn","_scanRegion","_onPlay","bind","_onLoadedMetaData","_onVisibilityChange","disablePictureInPicture","playsInline","muted","shouldHideVideo","hidden","body","contains","appendChild","requestAnimationFrame","computedStyle","display","style","setProperty","visibility","opacity","width","height","addEventListener","_qrEnginePromise","createQrEngine","srcObject","getVideoTracks","_getCameraStream","getSettings","turnFlashOff","turnFlashOn","hasFlash","applyConstraints","advanced","torch","reject","e","_restartVideoStream","removeEventListener","_postWorkerMessage","window","location","protocol","play","facingMode","_setVideoMirror","pause","stopStreamImmediately","tracks","getTracks","stopStream","setTimeout","facingModeOrDeviceId","imageOrFileOrUrl","scanRegion","qrEngine","canvas","disallowCanvasResizing","alsoTryWithoutScanRegion","promise","all","_loadImage","engine","image","canvasContext","_drawToCanvas","Worker","gotExternalWorker","postMessage","type","data","timeout","onMessage","onError","event","clearTimeout","NO_QR_CODE_FOUND","imageData","buffer","detect","scanResults","rawValue","message","scanImage","red","green","blue","useIntegerApproximation","inversionMode","workerPath","WORKER_PATH","BarcodeDetector","getSupportedFormats","supportedFormats","indexOf","formats","_scanFrame","start","videoHeight","x","Math","round","videoWidth","scanRegionSize","y","downScaledWidth","downScaledHeight","paused","ended","readyState","error","log","min","constraint","preferenceType","exact","constraintsWithoutCamera","reduceRight","fallback","_getFacingMode","wasPaused","transform","videoStream","test","videoTrack","scanRegionWidth","scanRegionHeight","canvasWidth","canvasHeight","alpha","context","imageSmoothingEnabled","drawImage","scanRegionX","scanRegionY","imageOrFileOrBlobOrUrl","HTMLCanvasElement","HTMLVideoElement","ImageBitmap","OffscreenCanvas","Image","_awaitImageLoad","File","Blob","URL","src","createObjectURL","revokeObjectURL","complete","naturalWidth","onLoad","qrEngineOrQrEnginePromise"],"mappings":"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"} \ No newline at end of file diff --git a/praesentia/static/style.css b/praesentia/static/style.css index 5c98aeb..19206a3 100644 --- a/praesentia/static/style.css +++ b/praesentia/static/style.css @@ -30,37 +30,20 @@ } } -#reader { +#qrInput { margin-top: 1rem; - margin-bottom: 1rem; -} - -#reader__filescan_input { - display: inline !important; - text-overflow: ellipsis !important; - overflow: hidden !important; -} - -#reader__camera_selection { - display: inline; - font-size: 80%; - max-width: 200px; - overflow: hidden; -} - -#reader > div:nth-child(1) > span:nth-child(1) > a { - font-size: smaller; - color: inherit; - text-decoration: none; -} - -#reader_container { - max-width: 100% !important; - overflow-x: hidden !important; + padding: 1rem; + border: 1px solid #ccc; + -webkit-box-shadow: inset 0 1px 3px #ddd; + box-shadow: inset 0 1px 3px #ddd; + border-radius: 4px; + vertical-align: middle; + -webkit-box-sizing: border-box; + box-sizing: border-box; } footer { color: grey; text-align: center; margin-top: 2rem; -} +} \ No newline at end of file diff --git a/praesentia/templates/home.html b/praesentia/templates/home.html index 373cf08..3ddf4eb 100644 --- a/praesentia/templates/home.html +++ b/praesentia/templates/home.html @@ -45,12 +45,20 @@

Praesentia

location from GPS -
-
- ProTip! You can scan your QR code image from your clipboard, just - ctrl+v - it here. -

+
+
+ + +
+ +
+

@@ -77,9 +85,9 @@

Praesentia

- + - + \ No newline at end of file