scanic 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -13
- package/dist/scanic.js +1 -2860
- package/dist/scanic.umd.cjs +1 -1
- package/package.json +20 -5
- package/src/scanic.d.ts +30 -0
package/dist/scanic.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).scanic={})}(this,function(A){"use strict";const I=1e3,g=10;function B(A,B={}){const i=B.width||Math.sqrt(A.length),t=B.height||A.length/i,E=void 0!==B.mode?B.mode:1,o=void 0!==B.method?B.method:2,e=B.minArea||I,n=i+2,a=t+2,s=new Int32Array(n*a);for(let I=0;I<t;I++)for(let g=0;g<i;g++)A[I*i+g]>0&&(s[(I+1)*n+(g+1)]=1);const c=[];let r=2;for(let I=1;I<=t;I++)for(let A=1;A<=i;A++){const B=s[I*n+A],i=s[I*n+(A-1)];let t=null,e=!1,l=-1;if(1===B&&0===i?(e=!0,t={x:A,y:I},l=2):0===B&&i>=1&&-1!==i&&1===i&&(e=!1,t={x:A-1,y:I},l=6),t){if(0===E&&!e){s[t.y*n+t.x]=-1;continue}const A=r++,I=C(s,n,a,t,l,A);if(I&&I.length>0){let B=I;2===o&&(B=Q(I));const C=B.map(A=>({x:A.x-1,y:A.y-1}));if(C.length>=(2===o?4:g)){const I={id:A,points:C,isOuter:e};c.push(I)}}else 1===s[t.y*n+t.x]&&(s[t.y*n+t.x]=A)}}c.forEach(A=>{A.area=function(A){let I=0;const g=A.length;if(g<3)return 0;for(let B=0;B<g;B++){const C=(B+1)%g;I+=A[B].x*A[C].y,I-=A[C].x*A[B].y}return Math.abs(I)/2}(A.points),A.boundingBox=function(A){if(0===A.length)return{minX:0,minY:0,maxX:0,maxY:0};let I=A[0].x,g=A[0].y,B=A[0].x,C=A[0].y;for(let Q=1;Q<A.length;Q++){const i=A[Q];I=Math.min(I,i.x),g=Math.min(g,i.y),B=Math.max(B,i.x),C=Math.max(C,i.y)}return{minX:I,minY:g,maxX:B,maxY:C}}(A.points)});const l=c.filter(A=>A.area>=e);return l.sort((A,I)=>I.area-A.area),B.debug&&(B.debug.labels=s,B.debug.rawContours=c,B.debug.finalContours=l),l}function C(A,I,g,B,C,Q){const i=[],t=new Set;let E=B.x,o=B.y;const e=E,n=o;let a=-1;A[n*I+e]=Q;let s=0;const c=I*g,r=[0,1,1,1,0,-1,-1,-1],l=[-1,-1,0,1,1,1,0,-1];for(;s++<c;){let B;if(-1===a){let Q=!1;for(let i=0;i<8;i++){B=C+i&7;const t=E+r[B],e=o+l[B];if(t>=0&&t<I&&e>=0&&e<g&&A[e*I+t]>0){Q=!0;break}}if(!Q)return null}else B=a+2&7;let s=-1,c=-1;for(let C=0;C<8;C++){const Q=B+C&7,i=E+r[Q],t=o+l[Q];if(i>=0&&i<I&&t>=0&&t<g&&A[t*I+i]>0){s=i,c=t,a=Q+4&7;break}}if(-1===s){0===i.length&&i.push({x:E,y:o});break}const h=o*I+E;if(t.has(h))return i;i.push({x:E,y:o}),t.add(h);const y=c*I+s;if(1===A[y]&&(A[y]=Q),E=s,o=c,E===e&&o===n)break}return s>=c?null:i}function Q(A){const I=A.length;if(I<=2)return A;const g=[],B=A[I-1],C=A[0];let Q=B,i=C,t=A[1],E=i.x-Q.x,o=i.y-Q.y,e=t.x-i.x,n=t.y-i.y;E*n!==o*e&&g.push(i);for(let a=1;a<I-1;a++)Q=A[a-1],i=A[a],t=A[a+1],E=i.x-Q.x,o=i.y-Q.y,e=t.x-i.x,n=t.y-i.y,E*n!==o*e&&g.push(i);if(Q=A[I-2],i=B,t=C,E=i.x-Q.x,o=i.y-Q.y,e=t.x-i.x,n=t.y-i.y,E*n!==o*e&&g.push(i),0===g.length){if(1===I)return[A[0]];if(2===I)return A;let g=0,B=1;const Q=C.x,i=C.y;for(let C=1;C<I;C++){const I=A[C],t=I.x-Q,E=I.y-i,o=t*t+E*E;o>g&&(g=o,B=C)}return[C,A[B]]}return g}function i(A,I=1){if(A.length<=2)return A;let g=0,B=0;const C=A[0],Q=A[A.length-1];for(let i=1;i<A.length-1;i++){const I=t(A[i],C,Q);I>g&&(g=I,B=i)}if(g>I){const g=i(A.slice(0,B+1),I),C=i(A.slice(B),I);return g.slice(0,-1).concat(C)}return[C,Q]}function t(A,I,g){const B=g.x-I.x,C=g.y-I.y,Q=B*B+C*C;if(0===Q)return Math.sqrt(Math.pow(A.x-I.x,2)+Math.pow(A.y-I.y,2));const i=((A.x-I.x)*B+(A.y-I.y)*C)/Q;let t,E;i<0?(t=I.x,E=I.y):i>1?(t=g.x,E=g.y):(t=I.x+i*B,E=I.y+i*C);const o=A.x-t,e=A.y-E;return Math.sqrt(o*o+e*e)}function E(A,I=.02){return i(A,I*function(A){let I=0;const g=A.length;if(g<2)return 0;for(let B=0;B<g;B++){const C=(B+1)%g,Q=A[B].x-A[C].x,i=A[B].y-A[C].y;I+=Math.sqrt(Q*Q+i*i)}return I}(A))}function o(A,I){return Math.hypot(I.x-A.x,I.y-A.y)}function e(A){let I=0,g=0;for(const B of A)I+=B.x,g+=B.y;return{x:I/A.length,y:g/A.length}}function n(A,I={}){if(!A||!A.points||A.points.length<4)return null;const g=I.epsilon||.02,B=function(A,I){if(!A||A.length<4)return null;const g=[I,1.3*I,1.6*I,2*I],B=new Set;for(const C of g){const I=Math.min(.12,C),g=I.toFixed(4);if(B.has(g))continue;B.add(g);const Q=a(E(A,I));if(Q&&4===Q.length)return Q}return null}(A.points,g);let C;return B&&4===B.length?C=function(A){if(4!==A.length)return null;const I=e(A),g=[...A].sort((A,g)=>Math.atan2(A.y-I.y,A.x-I.x)-Math.atan2(g.y-I.y,g.x-I.x));let B=1/0,C=0;for(let i=0;i<4;i++){const A=g[i].x+g[i].y;A<B&&(B=A,C=i)}const Q=[g[C],g[(C+1)%4],g[(C+2)%4],g[(C+3)%4]];return{topLeft:Q[0],topRight:Q[1],bottomRight:Q[2],bottomLeft:Q[3]}}(B):(C=function(A){if(!A||A.length<4)return null;const I=e(A);let g=null,B=null,C=null,Q=null,i=0,t=0,E=0,n=0;for(const e of A){const A=o(e,I);e.x<I.x&&e.y<I.y?A>i&&(g=e,i=A):e.x>I.x&&e.y<I.y?A>t&&(B=e,t=A):e.x>I.x&&e.y>I.y?A>E&&(C=e,E=A):e.x<I.x&&e.y>I.y&&A>n&&(Q=e,n=A)}if(!(g&&B&&C&&Q))return null;return{topLeft:g,topRight:B,bottomRight:C,bottomLeft:Q}}(A.points),C&&C.topLeft&&C.topRight&&C.bottomRight&&C.bottomLeft||(C=function(A){if(!A||0===A.length)return null;let I=A[0],g=A[0],B=A[0],C=A[0],Q=I.x+I.y,i=g.x-g.y,t=B.x+B.y,E=C.x-C.y;for(let o=1;o<A.length;o++){const e=A[o],n=e.x+e.y,a=e.x-e.y;n<Q&&(Q=n,I=e),n>t&&(t=n,B=e),a>i&&(i=a,g=e),a<E&&(E=a,C=e)}return{topLeft:I,topRight:g,bottomRight:B,bottomLeft:C}}(A.points))),C&&C.topLeft&&C.topRight&&C.bottomRight&&C.bottomLeft?C:null}function a(A){if(!A||A.length<4)return null;if(4===A.length)return A;if(A.length>8)return null;let I=function(A,I){if(!A||0===A.length)return[];const g=[];for(const B of A)(0===g.length||o(B,g[g.length-1])>I)&&g.push(B);g.length>2&&o(g[0],g[g.length-1])<=I&&g.pop();return g}(A,6);return 4===I.length?I:(I.length,null)}let s,c=null;function r(){return null!==c&&0!==c.byteLength||(c=new Uint8Array(s.memory.buffer)),c}let l=0;function h(A,I){const g=I(1*A.length,1)>>>0;return r().set(A,g/1),l=A.length,g}function y(A,I){return A>>>=0,r().subarray(A/1,A/1+I)}let d=null;function D(){return null!==d&&0!==d.byteLength||(d=new Float32Array(s.memory.buffer)),d}function w(A,I,g,B,C){const Q=function(A,I){const g=I(4*A.length,4)>>>0;return D().set(A,g/4),l=A.length,g}(A,s.__wbindgen_malloc),i=l,t=s.hysteresis_thresholding(Q,i,I,g,B,C);var E=y(t[0],t[1]).slice();return s.__wbindgen_free(t[0],1*t[1],1),E}let f=null;function u(A,I){const g=I(2*A.length,2)>>>0;return(null!==f&&0!==f.byteLength||(f=new Uint16Array(s.memory.buffer)),f).set(A,g/2),l=A.length,g}function m(A,I,g,B,C){const Q=u(A,s.__wbindgen_malloc),i=l,t=u(I,s.__wbindgen_malloc),E=l,o=s.non_maximum_suppression(Q,i,t,E,g,B,C);var e,n,a=(e=o[0],n=o[1],e>>>=0,D().subarray(e/4,e/4+n)).slice();return s.__wbindgen_free(o[0],4*o[1],4),a}async function N(A){if(void 0!==s)return s;if(void 0!==A&&Object.getPrototypeOf(A)===Object.prototype&&({module_or_path:A}=A),void 0===A)throw new Error("scanic: WASM module bytes must be passed to init().");const I=function(){const A={wbg:{}};return A.wbg.__wbindgen_init_externref_table=function(){const A=s.__wbindgen_export_0,I=A.grow(4);A.set(0,void 0),A.set(I+0,void 0),A.set(I+1,null),A.set(I+2,!0),A.set(I+3,!1)},A}();("string"==typeof A||"function"==typeof Request&&A instanceof Request||"function"==typeof URL&&A instanceof URL)&&(A=fetch(A));const{instance:g,module:B}=await async function(A,I){if("function"==typeof Response&&A instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(A,I)}catch(g){if("application/wasm"==A.headers.get("Content-Type"))throw g}const B=await A.arrayBuffer();return await WebAssembly.instantiate(B,I)}{const g=await WebAssembly.instantiate(A,I);return g instanceof WebAssembly.Instance?{instance:g,module:A}:g}}(await A,I);return function(A,I){return s=A.exports,N.__wbindgen_wasm_module=I,d=null,f=null,c=null,s.__wbindgen_start(),s}(g,B)}let R=null,F=!1,p=null;function J(A){if("function"==typeof atob){const I=atob(A),g=new Uint8Array(I.length);for(let A=0;A<I.length;A++)g[A]=I.charCodeAt(A);return g}return Uint8Array.from(Buffer.from(A,"base64"))}async function G(){if(!function(){if(null!==p)return p;let A=!1;if("object"==typeof WebAssembly&&"function"==typeof WebAssembly.validate){const I=new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]),g=new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,111,3,2,1,0,10,6,1,4,0,208,111,11]);try{A=WebAssembly.validate(I)&&WebAssembly.validate(g)}catch{A=!1}}return p=A,A}())throw new Error("scanic: WebAssembly features required by the WASM module (reference-types, SIMD) are unavailable in this engine; using the JavaScript fallback.");return await N({module_or_path:J("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JAAgAiABIAJqIgFLBEBBAEEAEC0ACyADQQRqIAAoAgAiAiAAKAIEQQggASACQQF0IgIgASACSxsiASABQQhNGyIBQQFBARARIAMoAgRBAUYEQCADKAIIIAMoAgwQLQALIAMoAgghAiAAIAE2AgAgACACNgIEIANBEGokAAt5AQF/IwBBIGsiAiQAAn8gACgCAEGAgICAeEcEQCABIAAoAgQgACgCCBAwDAELIAJBEGogACgCDCgCACIAQQhqKQIANwMAIAJBGGogAEEQaikCADcDACACIAApAgA3AwggASgCACABKAIEIAJBCGoQBwsgAkEgaiQAC2kBA38jAEEQayIBJAAgAUEEaiAAKAIAIgIgACgCBEEEIAJBAXQiAiACQQRNGyICQQRBBBARIAEoAgRBAUYEQCABKAIIIAEoAgwQLQALIAEoAgghAyAAIAI2AgAgACADNgIEIAFBEGokAAtpAQN/IwBBEGsiASQAIAFBBGogACgCACICIAAoAgRBBCACQQF0IgIgAkEETRsiAkEEQQgQESABKAIEQQFGBEAgASgCCCABKAIMEC0ACyABKAIIIQMgACACNgIAIAAgAzYCBCABQRBqJAALaQEDfyMAQRBrIgEkACABQQRqIAAoAgAiAiAAKAIEQQQgAkEBdCICIAJBBE0bIgJBAkECEBEgASgCBEEBRgRAIAEoAgggASgCDBAtAAsgASgCCCEDIAAgAjYCACAAIAM2AgQgAUEQaiQACxIAIwBBMGsiACQAIABBMGokAAtoAgF/AX4jAEEwayIDJAAgAyABNgIEIAMgADYCACADQQI2AgwgA0Hkl8AANgIIIANCAjcCFCADQoCAgIAwIgQgA62ENwMoIAMgBCADQQRqrYQ3AyAgAyADQSBqNgIQIANBCGogAhAmAAtHAQF/IAAoAgAgACgCCCIDayACSQRAIAAgAyACEBIgACgCCCEDCyACBEAgACgCBCADaiABIAL8CgAACyAAIAIgA2o2AghBAAtEAQJ/IAEoAgQhAiABKAIAIQNBCEEEEDUiAUUEQEEEQQgQOQALIAEgAjYCBCABIAM2AgAgAEHcksAANgIEIAAgATYCAAvGAgACQCAAIAJNBEAgACABTSABIAJLcg0BIwBBMGsiAiQAIAIgATYCBCACIAA2AgAgAkECNgIMIAJB2JbAADYCCCACQgI3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IAAAABwAEAAMAAAAEgAAABcAAAAcABAADAAAABcAAAAZAAAAHAAQAAwAAAAUAAAAGQAAABwAEAAMAAAAUQAAAB4AAAAcABAADAAAAFIAAAAeAAAATGF6eSBpbnN0YW5jZSBoYXMgcHJldmlvdXNseSBiZWVuIHBvaXNvbmVkAAA8CBAAKgAAAEgBEABaAAAACAMAABkAAAByZWVudHJhbnQgaW5pdAAAgAgQAA4AAABIARAAWgAAAHoCAAANAAAAfP2LMlfmV/kC30S/40jnr21dy9YsUOtjeEGmV3Ebi7ltZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAADICBAAFQAAAN0IEAANAAAALwEQABgAAABkAQAACQAAAAQAAAAMAAAABAAAAAUAAAAGAAAABwAAAAAAAAAIAAAABAAAAAgAAAAJAAAACgAAAAsAAAAMAAAAEAAAAAQAAAANAAAADgAAAA8AAAAQAAAAAAAAAAgAAAAEAAAAEQAAAGFzc2VydGlvbiBmYWlsZWQ6IHBzaXplID49IHNpemUgKyBtaW5fb3ZlcmhlYWQAAAQBEAAqAAAAsQQAAAkAAABhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA8PSBzaXplICsgbWF4X292ZXJoZWFkAAAEARAAKgAAALcEAAANAAAABAAAAAwAAAAEAAAAEgAAAGNhcGFjaXR5IG92ZXJmbG93AAAA/AkQABEAAADjABAAIAAAABwAAAAFAAAAMDAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTIwMjEyMjIzMjQyNTI2MjcyODI5MzAzMTMyMzMzNDM1MzYzNzM4Mzk0MDQxNDI0MzQ0NDU0NjQ3NDg0OTUwNTE1MjUzNTQ1NTU2NTc1ODU5NjA2MTYyNjM2NDY1NjY2NzY4Njk3MDcxNzI3Mzc0NzU3Njc3Nzg3OTgwODE4MjgzODQ4NTg2ODc4ODg5OTA5MTkyOTM5NDk1OTY5Nzk4OTlyYW5nZSBlbmQgaW5kZXggIG91dCBvZiByYW5nZSBmb3Igc2xpY2Ugb2YgbGVuZ3RoIAAA8AoQABAAAAAACxAAIgAAAHNsaWNlIGluZGV4IHN0YXJ0cyBhdCAgYnV0IGVuZHMgYXQgADQLEAAWAAAASgsQAA0AAAByYW5nZSBzdGFydCBpbmRleCAAAGgLEAASAAAAAAsQACIAAABhdHRlbXB0IHRvIGRpdmlkZSBieSB6ZXJvAAAAjAsQABkAAABpbmRleCBvdXQgb2YgYm91bmRzOiB0aGUgbGVuIGlzICBidXQgdGhlIGluZGV4IGlzIAAAsAsQACAAAADQCxAAEgAAAAAAAD8AAAC/AEGUmMAACwEBAHwJcHJvZHVjZXJzAghsYW5ndWFnZQEEUnVzdAAMcHJvY2Vzc2VkLWJ5AwVydXN0Yx0xLjkyLjAgKGRlZDVjMDZjZiAyMDI1LTEyLTA4KQZ3YWxydXMGMC4yMy4zDHdhc20tYmluZGdlbhMwLjIuMTAwICgyNDA1ZWMyYjQpAHQPdGFyZ2V0X2ZlYXR1cmVzBysPbXV0YWJsZS1nbG9iYWxzKxNub250cmFwcGluZy1mcHRvaW50KwdzaW1kMTI4KwtidWxrLW1lbW9yeSsIc2lnbi1leHQrD3JlZmVyZW5jZS10eXBlcysKbXVsdGl2YWx1ZQ==")})}function k(){return R||(R=G().catch(A=>{throw R=null,A})),R}function S(A,I,g,B=5,C=0){0===C&&(C=.3*(.5*(B-1)-1)+.8);const Q=Math.floor(B/2),i=function(A,I){const g=new Float32Array(A),B=Math.floor(A/2);let C=0;for(let Q=0;Q<A;Q++){const A=Q-B;g[Q]=Math.exp(-A*A/(2*I*I)),C+=g[Q]}for(let Q=0;Q<A;Q++)g[Q]/=C;return g}(B,C),t=new Uint8ClampedArray(I*g),E=new Uint8ClampedArray(I*g);for(let o=0;o<g;o++){const g=o*I;for(let B=0;B<I;B++){let C=0;for(let t=-Q;t<=Q;t++){C+=A[g+Math.min(I-1,Math.max(0,B+t))]*i[Q+t]}t[g+B]=C}}for(let o=0;o<I;o++)for(let A=0;A<g;A++){let B=0;for(let C=-Q;C<=Q;C++){B+=t[Math.min(g-1,Math.max(0,A+C))*I+o]*i[Q+C]}E[A*I+o]=Math.round(B)}return E}function M(A,I,g,B,C){const Q=new Uint8Array(I*g),i=[];for(let o=1;o<g-1;o++)for(let g=1;g<I-1;g++){const t=o*I+g,E=A[t];E>=C?(Q[t]=2,i.push({x:g,y:o})):Q[t]=E>=B?0:1}for(let o=0;o<I;o++)Q[o]=1,Q[(g-1)*I+o]=1;for(let o=1;o<g-1;o++)Q[o*I]=1,Q[o*I+I-1]=1;const t=[-1,0,1,-1,1,-1,0,1],E=[-1,-1,-1,0,0,1,1,1];for(;i.length>0;){const{x:A,y:g}=i.pop();for(let B=0;B<8;B++){const C=A+t[B],o=g+E[B],e=o*I+C;0===Q[e]&&(Q[e]=2,i.push({x:C,y:o}))}}return Q}async function b(A,I={}){const g=!(!I.debug||I.debug._timingsOnly),B=[],C=performance.now();let Q,i,t;if(I.skipGrayscale||!1)Q=I.width,i=I.height,t=A,g&&(I.debug.grayscale=t);else{Q=A.width,i=A.height;let C=performance.now();t=function(A){const{width:I,height:g,data:B}=A,C=new Uint8ClampedArray(I*g);for(let Q=0,i=0;Q<B.length;Q+=4,i++)C[i]=54*B[Q]+183*B[Q+1]+19*B[Q+2]>>8;return C}(A);let E=performance.now();B.push({step:"Grayscale",ms:(E-C).toFixed(2)}),g&&(I.debug.grayscale=t)}let E=void 0!==I.lowThreshold?I.lowThreshold:null,o=void 0!==I.highThreshold?I.highThreshold:null;if(null===E||null===o){const A=1024,I=new Uint32Array(A);let g=0;for(let E=1;E<i-1;E++)for(let B=1;B<Q-1;B++){const C=E*Q+B,i=-t[C-Q-1]+t[C-Q+1]-2*t[C-1]+2*t[C+1]-t[C+Q-1]+t[C+Q+1],o=-t[C-Q-1]-2*t[C-Q]-t[C-Q+1]+t[C+Q-1]+2*t[C+Q]+t[C+Q+1];let e=Math.abs(i)+Math.abs(o);e>=A&&(e=A-1),e>0&&(I[e]++,g++)}const B=Math.round(.7*g);let C=0,e=75;for(let Q=1;Q<A;Q++)if(C+=I[Q],C>=B){e=Q;break}null===E&&(E=Math.max(5,Math.round(.5*e))),null===o&&(o=Math.min(500,Math.round(1.5*e)))}const e=I.kernelSize||5,n=I.sigma||0,a=void 0!==I.L2gradient&&I.L2gradient,c=void 0===I.applyDilation||I.applyDilation,r=I.dilationKernelSize||5,d=void 0!==I.useWasmHysteresis&&I.useWasmHysteresis,D=void 0!==I.useWasmFullCanny&&I.useWasmFullCanny;if(E>=o&&([E,o]=[o,E]),D)try{await k();const A=performance.now(),d=new Uint8ClampedArray(function(A,I,g,B,C,Q,i,t,E,o){const e=h(A,s.__wbindgen_malloc),n=l,a=s.canny_edge_detector_full(e,n,I,g,B,C,Q,i,t,E,o);var c=y(a[0],a[1]).slice();return s.__wbindgen_free(a[0],1*a[1],1),c}(t,Q,i,E,o,e,n,a,c,r)),D=(performance.now()-A).toFixed(2);B.push({step:"Edge Processing (WASM)",ms:D}),g&&(I.debug.finalEdges=d),I.debug?I.debug.timings=B:I.debug={timings:B};const w=performance.now();return B.unshift({step:"Edge Detection Total",ms:(w-C).toFixed(2)}),d}catch(Y){if(!F){F=!0;Y instanceof Error?Y.message:String(Y)}}let f,u,N,R,p,J;f=performance.now();try{await k(),N=function(A,I,g,B,C){const Q=h(A,s.__wbindgen_malloc),i=l,t=s.blur(Q,i,I,g,B,C);var E=y(t[0],t[1]).slice();return s.__wbindgen_free(t[0],1*t[1],1),E}(t,Q,i,e,n)}catch(q){N=S(t,Q,i,e,n)}u=performance.now(),B.push({step:"Gaussian Blur",ms:(u-f).toFixed(2)}),g&&(I.debug.blurred=N),f=performance.now();{const A=function(A,I,g){const B=new Int16Array(I*g),C=new Int16Array(I*g);for(let Q=1;Q<g-1;Q++){const g=Q*I,i=(Q-1)*I,t=(Q+1)*I;for(let Q=1;Q<I-1;Q++){const I=g+Q,E=A[i+Q-1],o=A[i+Q],e=A[i+Q+1],n=A[g+Q-1],a=A[g+Q+1],s=A[t+Q-1],c=A[t+Q],r=A[t+Q+1],l=e-E+2*(a-n)+(r-s),h=s+2*c+r-(E+2*o+e);B[I]=l,C[I]=h}}return{dx:B,dy:C}}(N,Q,i);R=A.dx,p=A.dy}u=performance.now(),B.push({step:"Gradients",ms:(u-f).toFixed(2)}),f=performance.now();try{await k(),J=await m(R,p,Q,i,a)}catch(q){J=function(A,I,g,B,C){const Q=new Float32Array(g*B),i=new Float32Array(g*B);for(let t=0;t<A.length;t++){const g=A[t],B=I[t];Q[t]=C?Math.sqrt(g*g+B*B):Math.abs(g)+Math.abs(B)}for(let t=1;t<B-1;t++)for(let B=1;B<g-1;B++){const C=t*g+B,E=Q[C];if(0===E){i[C]=0;continue}const o=A[C],e=I[C];let n=0,a=0;const s=Math.abs(o),c=Math.abs(e);if(c>2.4142*s)n=Q[C-g],a=Q[C+g];else if(s>2.4142*c)n=Q[C-1],a=Q[C+1];else{const A=(o^e)<0?-1:1;e>0?(n=Q[(t-1)*g+(B-A)],a=Q[(t+1)*g+(B+A)]):(n=Q[(t+1)*g+(B-A)],a=Q[(t-1)*g+(B+A)]),o>0&&e>0||o<0&&e<0?(n=Q[(t-1)*g+(B+1)],a=Q[(t+1)*g+(B-1)]):(n=Q[(t-1)*g+(B-1)],a=Q[(t+1)*g+(B+1)])}i[C]=E>=n&&E>=a?E:0}return i}(R,p,Q,i,a)}u=performance.now(),B.push({step:"Non-Max Suppression",ms:(u-f).toFixed(2)}),f=performance.now();const G=a?E*E:E,b=a?o*o:o;let L;if(d)try{await k(),L=w(J,Q,i,G,b)}catch(q){L=M(J,Q,i,G,b)}else L=M(J,Q,i,G,b);u=performance.now(),B.push({step:"Hysteresis",ms:(u-f).toFixed(2)}),f=performance.now();const x=new Uint8ClampedArray(Q*i);for(let s=0;s<L.length;s++)x[s]=2===L[s]?255:0;u=performance.now(),B.push({step:"Binary Image",ms:(u-f).toFixed(2)}),f=performance.now();let U=x;if(c)try{await k(),U=function(A,I,g,B){const C=h(A,s.__wbindgen_malloc),Q=l,i=s.dilate(C,Q,I,g,B);var t=y(i[0],i[1]).slice();return s.__wbindgen_free(i[0],1*i[1],1),t}(x,Q,i,r)}catch(q){U=function(A,I,g,B=5){const C=Math.floor(B/2),Q=new Uint8ClampedArray(I*g),i=new Uint8ClampedArray(I*g);for(let t=0;t<g;t++){const g=t*I;for(let B=0;B<I;B++){let i=0;for(let Q=-C;Q<=C;Q++){const C=B+Q;if(C>=0&&C<I){const I=A[g+C];I>i&&(i=I)}}Q[g+B]=i}}for(let t=0;t<I;t++)for(let A=0;A<g;A++){let B=0;for(let i=-C;i<=C;i++){const C=A+i;if(C>=0&&C<g){const A=Q[C*I+t];A>B&&(B=A)}}i[A*I+t]=B}return i}(x,Q,i,r)}if(u=performance.now(),B.push({step:"Dilation",ms:(u-f).toFixed(2)}),g){I.debug.dx=R,I.debug.dy=p;const A=new Float32Array(Q*i);for(let I=0;I<R.length;I++){const g=R[I],B=p[I];A[I]=a?Math.sqrt(g*g+B*B):Math.abs(g)+Math.abs(B)}I.debug.magnitude=A,I.debug.suppressed=J,I.debug.edgeMap=L,I.debug.cannyEdges=x,I.debug.finalEdges=U}I.debug?I.debug.timings=B:I.debug||(I.debug={timings:B});const H=performance.now();return B.unshift({step:"Edge Detection Total",ms:(H-C).toFixed(2)}),U}function L(A){return{topLeft:{x:A.topLeft.x,y:A.topLeft.y},topRight:{x:A.topRight.x,y:A.topRight.y},bottomRight:{x:A.bottomRight.x,y:A.bottomRight.y},bottomLeft:{x:A.bottomLeft.x,y:A.bottomLeft.y}}}function x(A,I){return Math.hypot(A.x-I.x,A.y-I.y)}function U(A,I=4){const g=[null==A?void 0:A.topLeft,null==A?void 0:A.topRight,null==A?void 0:A.bottomRight,null==A?void 0:A.bottomLeft];if(g.some(A=>!A||!Number.isFinite(A.x)||!Number.isFinite(A.y)))return!1;for(let B=0;B<g.length;B++)for(let A=B+1;A<g.length;A++)if(x(g[B],g[A])<I)return!1;return!0}function H(A){const I=[A.topLeft,A.topRight,A.bottomRight,A.bottomLeft],g=[];for(let C=0;C<I.length;C++){const A=I[C],B=I[(C+1)%I.length],Q=I[(C+2)%I.length],i=(B.x-A.x)*(Q.y-B.y)-(B.y-A.y)*(Q.x-B.x);Math.abs(i)<1e-6||g.push(Math.sign(i))}if(g.length<3)return!1;const B=g[0];return g.every(A=>A===B)}const Y="scanic-corner-editor-styles",q='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 4 3 10 9 10"/><path d="M3.5 14a8.5 8.5 0 1 0 2-7.4L3 10"/></svg>',v='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>',K='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>',T='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></svg>';function W(A){return A<=0?0:A>=1?1:A}function P(A,I){return Math.hypot(A.x-I.x,A.y-I.y)}function Z(A){return[P(A.topLeft,A.topRight),P(A.topRight,A.bottomRight),P(A.bottomRight,A.bottomLeft),P(A.bottomLeft,A.topLeft)]}function X(A){const I=function(A){const I=[A.topLeft,A.topRight,A.bottomRight,A.bottomLeft],g=[];for(let B=0;B<I.length;B++){const A=I[(B+I.length-1)%I.length],C=I[B],Q=I[(B+1)%I.length],i=A.x-C.x,t=A.y-C.y,E=Q.x-C.x,o=Q.y-C.y,e=i*E+t*o,n=Math.hypot(i,t),a=Math.hypot(E,o),s=Math.max(1e-6,n*a),c=Math.max(-1,Math.min(1,e/s));g.push(180*Math.acos(c)/Math.PI)}return g}(A);let g=0;for(const B of I){g+=W(1-Math.abs(B-90)/55)}return g/Math.max(1,I.length)}function V(A,I){const g=Number(I.isValid)-Number(A.isValid);if(0!==g)return g;const B=I.confidence-A.confidence;if(!(Math.abs(B)<.015)&&0!==B)return B;const C=Math.abs((A.approxCount??99)-4)-Math.abs((I.approxCount??99)-4);if(0!==C)return C;const Q=(I.rightAngleScore??0)-(A.rightAngleScore??0);if(Math.abs(Q)>1e-6)return Q;const i=Math.abs(1-(A.contourFitRatio??1))-Math.abs(1-(I.contourFitRatio??1));return Math.abs(i)>1e-6?i:B||I.score-A.score||I.coverageRatio-A.coverageRatio||I.area-A.area}function j(A,I,g,B,C={}){const Q=C.epsilon||.02,i=E(A.points,Q).length,t=n(A,{epsilon:Q});if(!t)return{contour:A,corners:null,score:0,confidence:0,isValid:!1,area:A.area||0,fillRatio:0,coverageRatio:0,cornersArea:0,approxCount:i,convex:!1,edgeSupport:0,aspectRatio:1/0,minSide:0,rightAngleScore:0,oppositeSideConsistency:0,contourFitRatio:0,contourFitScore:0};const o=g*B,e=A.area||0,a=A.boundingBox||{minX:0,minY:0,maxX:0,maxY:0},s=e/Math.max(1,(a.maxX-a.minX+1)*(a.maxY-a.minY+1)),c=function(A){if(!A)return 0;const I=[A.topLeft,A.topRight,A.bottomRight,A.bottomLeft];let g=0;for(let B=0;B<I.length;B++){const A=(B+1)%I.length;g+=I[B].x*I[A].y-I[A].x*I[B].y}return Math.abs(g)/2}(t),r=c/Math.max(1,o),l=Z(t),h=Math.min(...l),y=(l[0]+l[2])/2,d=(l[1]+l[3])/2,D=y>d?y/Math.max(1e-6,d):d/Math.max(1e-6,y),w=function(A){const I=[A.topLeft,A.topRight,A.bottomRight,A.bottomLeft],g=[];for(let C=0;C<I.length;C++){const A=I[C],B=I[(C+1)%I.length],Q=I[(C+2)%I.length],i=(B.x-A.x)*(Q.y-B.y)-(B.y-A.y)*(Q.x-B.x);Math.abs(i)<1e-6||g.push(Math.sign(i))}if(g.length<3)return!1;const B=g[0];return g.every(A=>A===B)}(t),f=function(A,I,g,B){if(!(null==A?void 0:A.points)||0===A.points.length)return 0;const C=Math.max(1,Math.floor(A.points.length/240));let Q=0,i=0;for(let t=0;t<A.points.length;t+=C){const C=A.points[t],E=Math.max(0,Math.min(g-1,0|C.x)),o=Math.max(0,Math.min(B-1,0|C.y));Q++;let e=!1;for(let A=-1;A<=1&&!e;A++){const C=o+A;if(!(C<0||C>=B))for(let A=-1;A<=1;A++){const B=E+A;if(!(B<0||B>=g)&&I[C*g+B]>0){e=!0;break}}}e&&i++}return 0===Q?0:i/Q}(A,I,g,B),u=X(t),m=function(A){const I=Z(A);return(Math.min(I[0],I[2])/Math.max(1e-6,Math.max(I[0],I[2]))+Math.min(I[1],I[3])/Math.max(1e-6,Math.max(I[1],I[3])))/2}(t),N=e/Math.max(1,c),R=W(1-Math.abs(N-1)/.55),F=4===i?1:5===i?.9:6===i?.7:i<=8?.5:.28,p=W(e/Math.max(1,.4*o)),J=W((s-.08)/.72),G=W((r-.03)/.82),k=void 0!==C.minDocumentSideRatio?C.minDocumentSideRatio:.06,S=void 0!==C.minDocumentCoverageRatio?C.minDocumentCoverageRatio:.04,M=void 0!==C.maxDocumentAspectRatio?C.maxDocumentAspectRatio:8,b=void 0!==C.minDocumentFillRatio?C.minDocumentFillRatio:.07,L=void 0!==C.minContourFitRatio?C.minContourFitRatio:.11,x=void 0!==C.maxContourFitRatio?C.maxContourFitRatio:1.2,U=void 0!==C.minRightAngleScore?C.minRightAngleScore:.42,H=void 0!==C.minOppositeSideConsistency?C.minOppositeSideConsistency:.3,Y=Math.min(g,B)*k,q=function(A,I=6){const g=[null==A?void 0:A.topLeft,null==A?void 0:A.topRight,null==A?void 0:A.bottomRight,null==A?void 0:A.bottomLeft];if(g.some(A=>!A||!Number.isFinite(A.x)||!Number.isFinite(A.y)))return!1;for(let B=0;B<g.length;B++)for(let A=B+1;A<g.length;A++)if(P(g[B],g[A])<I)return!1;return!0}(t)&&w&&h>=Y&&r>=S&&D<=M&&s>=b&&N>=L&&N<=x&&u>=U&&m>=H,v=.22*p+.14*J+.15*F+.08*(w?1:0)+.08*f+.13*G+.1*u+.05*m+.05*R;return{contour:A,corners:t,score:v,confidence:q?v:.33*v,isValid:q,area:e,fillRatio:s,coverageRatio:r,cornersArea:c,approxCount:i,convex:w,edgeSupport:f,aspectRatio:D,minSide:h,rightAngleScore:u,oppositeSideConsistency:m,contourFitRatio:N,contourFitScore:R}}async function O(A,I,g,C,Q={}){const i=Q.debug?{}:{_timingsOnly:!0},t=[];i&&!i._timingsOnly&&(i.preprocessing={scaledDimensions:{width:I,height:g},scaleFactor:C,maxProcessingDimension:Q.maxProcessingDimension||800});const E=function(A={}){const I=A.dilationKernelSize||3,g=A.dilationIterations||1,B=void 0===A.applyDilation||A.applyDilation,C=[{name:"default",lowThreshold:A.lowThreshold,highThreshold:A.highThreshold,dilationKernelSize:I,dilationIterations:g,applyDilation:B}];if(!1===A.enableDetectionCascade)return C;C.push({name:"connect-edges",lowThreshold:A.lowThreshold,highThreshold:A.highThreshold,dilationKernelSize:Math.max(I,5),dilationIterations:Math.max(g,2),applyDilation:!0}),C.push({name:"no-dilation",lowThreshold:A.lowThreshold,highThreshold:A.highThreshold,dilationKernelSize:I,dilationIterations:g,applyDilation:!1}),void 0===A.lowThreshold&&void 0===A.highThreshold&&C.push({name:"fixed-mid-thresholds",lowThreshold:60,highThreshold:180,dilationKernelSize:I,dilationIterations:g,applyDilation:B});const Q=[],i=new Set;for(const t of C){const A=[t.lowThreshold,t.highThreshold,t.dilationKernelSize,t.dilationIterations,t.applyDilation].join(":");i.has(A)||(i.add(A),Q.push(t))}return Q}(Q),o=[],e=async(i,E)=>{const o=i.name||`pass-${E+1}`,e=0===E?"":` (${o})`,n=Q.debug?{}:{_timingsOnly:!0},a=await b(A,{width:I,height:g,lowThreshold:i.lowThreshold,highThreshold:i.highThreshold,dilationKernelSize:i.dilationKernelSize,dilationIterations:i.dilationIterations,applyDilation:i.applyDilation,debug:n,skipGrayscale:!0,useWasmBlur:!0,useWasmHysteresis:Q.useWasmHysteresis,useWasmFullCanny:Q.useWasmFullCanny});n.timings&&n.timings.forEach(A=>{"Edge Detection Total"!==A.step&&t.push({step:`${A.step}${e}`,ms:A.ms})});let s=performance.now();const c=B(a,{minArea:(Q.minArea||1e3)/(C*C),width:I,height:g});t.push({step:`Find Contours${e}`,ms:(performance.now()-s).toFixed(2)}),s=performance.now();const{best:r,candidates:l}=function(A,I,g,B,C={}){const Q=C.maxCandidateContours||12,i=A.slice(0,Q).map((A,Q)=>({rankByArea:Q,...j(A,I,g,B,C)})).sort(V);return{best:i[0]||null,candidates:i}}(c,a,I,g,Q);return t.push({step:`Corner Detection${e}`,ms:(performance.now()-s).toFixed(2)}),{name:o,params:{lowThreshold:i.lowThreshold,highThreshold:i.highThreshold,dilationKernelSize:i.dilationKernelSize,dilationIterations:i.dilationIterations,applyDilation:i.applyDilation},contours:c,best:r,candidates:l}},n=await e(E[0],0);if(o.push(n),function(A,I={}){if(!1===I.enableDetectionCascade)return!1;if(!A||!A.corners)return!0;const g=void 0!==I.minCascadeTriggerConfidence?I.minCascadeTriggerConfidence:.68;return!A.isValid||A.confidence<g||A.approxCount>5||A.rightAngleScore<.55||A.contourFitRatio<.14}(n.best,Q))for(let B=1;B<E.length;B++)o.push(await e(E[B],B));const a=[];for(const B of o)for(const A of B.candidates)a.push({...A,passName:B.name,passParams:B.params});a.sort(V);const s=a[0]||null,c=a;if(!s||!s.corners)return{success:!1,message:"No document detected",debug:i._timingsOnly?null:i,timings:t};i&&!i._timingsOnly&&(i.passes=o.map(A=>({name:A.name,params:A.params,contourCount:A.contours.length,bestCandidate:A.best?{score:A.best.score,confidence:A.best.confidence,isValid:A.best.isValid,approxCount:A.best.approxCount,coverageRatio:A.best.coverageRatio,fillRatio:A.best.fillRatio,rightAngleScore:A.best.rightAngleScore,contourFitRatio:A.best.contourFitRatio}:null})),i.candidates=c.map(A=>({passName:A.passName,rankByArea:A.rankByArea,area:A.area,fillRatio:A.fillRatio,coverageRatio:A.coverageRatio,cornersArea:A.cornersArea,approxCount:A.approxCount,convex:A.convex,edgeSupport:A.edgeSupport,aspectRatio:A.aspectRatio,minSide:A.minSide,rightAngleScore:A.rightAngleScore,oppositeSideConsistency:A.oppositeSideConsistency,contourFitRatio:A.contourFitRatio,contourFitScore:A.contourFitScore,score:A.score,confidence:A.confidence,isValid:A.isValid})),i.selectedCandidate=c[0]?{passName:c[0].passName,rankByArea:c[0].rankByArea,area:c[0].area,fillRatio:c[0].fillRatio,coverageRatio:c[0].coverageRatio,approxCount:c[0].approxCount,edgeSupport:c[0].edgeSupport,aspectRatio:c[0].aspectRatio,minSide:c[0].minSide,rightAngleScore:c[0].rightAngleScore,oppositeSideConsistency:c[0].oppositeSideConsistency,contourFitRatio:c[0].contourFitRatio,score:c[0].score,confidence:c[0].confidence,isValid:c[0].isValid}:null);const r=s.corners,l=s.contour;let h=r;return 1!==C&&(h={topLeft:{x:r.topLeft.x*C,y:r.topLeft.y*C},topRight:{x:r.topRight.x*C,y:r.topRight.y*C},bottomRight:{x:r.bottomRight.x*C,y:r.bottomRight.y*C},bottomLeft:{x:r.bottomLeft.x*C,y:r.bottomLeft.y*C}}),{success:!0,contour:l,corners:h,confidence:s.confidence,debug:i._timingsOnly?null:i,timings:t}}function z(A,I,g){const{topLeft:B,topRight:C,bottomRight:Q,bottomLeft:i}=g,t=Math.hypot(Q.x-i.x,Q.y-i.y),E=Math.hypot(C.x-B.x,C.y-B.y),o=Math.round(Math.max(t,E)),e=Math.hypot(C.x-Q.x,C.y-Q.y),n=Math.hypot(B.x-i.x,B.y-i.y),a=Math.round(Math.max(e,n));A.canvas.width=o,A.canvas.height=a;const s=function(A,I){const g=function(A,I){const g=A.length,B=A[0].length,C=A.map(A=>A.slice()),Q=I.slice();for(let t=0;t<B;t++){let A=t;for(let I=t+1;I<g;I++)Math.abs(C[I][t])>Math.abs(C[A][t])&&(A=I);[C[t],C[A]]=[C[A],C[t]],[Q[t],Q[A]]=[Q[A],Q[t]];for(let I=t+1;I<g;I++){const A=C[I][t]/C[t][t];for(let g=t;g<B;g++)C[I][g]-=A*C[t][g];Q[I]-=A*Q[t]}}const i=new Array(B);for(let t=B-1;t>=0;t--){let A=Q[t];for(let I=t+1;I<B;I++)A-=C[t][I]*i[I];i[t]=A/C[t][t]}return i}(function(A){const g=[];for(let B=0;B<4;B++){const[C,Q]=A[B];g.push([C,Q,1,0,0,0,-C*I[B][0],-Q*I[B][0]]),g.push([0,0,0,C,Q,1,-C*I[B][1],-Q*I[B][1]])}return g}(A),[I[0][0],I[0][1],I[1][0],I[1][1],I[2][0],I[2][1],I[3][0],I[3][1]]);return[[g[0],g[1],g[2]],[g[3],g[4],g[5]],[g[6],g[7],1]]}([[B.x,B.y],[C.x,C.y],[Q.x,Q.y],[i.x,i.y]],[[0,0],[o-1,0],[o-1,a-1],[0,a-1]]);!function(A,I,g,B,C){const Q=I&&"number"==typeof I.width&&"number"==typeof I.height&&I.data,i=I.width||I.naturalWidth,t=I.height||I.naturalHeight,E=document.createElement("canvas");E.width=i,E.height=t;const o=E.getContext("2d",{willReadFrequently:!0});Q?o.putImageData(I,0,0):o.drawImage(I,0,0,i,t);const e=o.getImageData(0,0,i,t).data,n=function(A){const I=A[0][0],g=A[0][1],B=A[0][2],C=A[1][0],Q=A[1][1],i=A[1][2],t=A[2][0],E=A[2][1],o=A[2][2],e=Q*o-i*E,n=-(C*o-i*t),a=C*E-Q*t,s=-(g*o-B*E),c=I*o-B*t,r=-(I*E-g*t),l=g*i-B*Q,h=-(I*i-B*C),y=I*Q-g*C,d=I*e+g*n+B*a;if(0===d)throw new Error("Singular matrix");return[[e/d,s/d,l/d],[n/d,c/d,h/d],[a/d,r/d,y/d]]}(g),a=n[0][0],s=n[0][1],c=n[0][2],r=n[1][0],l=n[1][1],h=n[1][2],y=n[2][0],d=n[2][1],D=n[2][2],w=A.createImageData(B,C),f=w.data,u=i-1,m=t-1;for(let N=0;N<C;N++){const A=s*N+c,I=l*N+h,g=d*N+D;for(let C=0;C<B;C++){const Q=1/(y*C+g),t=(a*C+A)*Q,E=(r*C+I)*Q,o=t<0?0:t>u?u:t,n=E<0?0:E>m?m:E,s=0|o,c=0|n,l=s<u?s+1:s,h=c<m?c+1:c,d=o-s,D=n-c,w=1-d,R=1-D,F=w*R,p=d*R,J=w*D,G=d*D,k=c*i+s<<2,S=c*i+l<<2,M=h*i+s<<2,b=h*i+l<<2,L=N*B+C<<2;f[L]=e[k]*F+e[S]*p+e[M]*J+e[b]*G+.5|0,f[L+1]=e[k+1]*F+e[S+1]*p+e[M+1]*J+e[b+1]*G+.5|0,f[L+2]=e[k+2]*F+e[S+2]*p+e[M+2]*J+e[b+2]*G+.5|0,f[L+3]=255}}A.putImageData(w,0,0)}(A,I,s,o,a)}async function _(A,I,g={}){const B=g.output||"canvas";if(!(I&&I.topLeft&&I.topRight&&I.bottomRight&&I.bottomLeft))return{output:null,corners:null,success:!1,message:"Invalid corner points provided"};try{const g=document.createElement("canvas");let C;return z(g.getContext("2d"),A,I),C="canvas"===B?g:"imagedata"===B?g.getContext("2d").getImageData(0,0,g.width,g.height):"dataurl"===B?g.toDataURL():g,{output:C,corners:I,success:!0,message:"Document extracted successfully"}}catch(C){return{output:null,corners:I,success:!1,message:`Extraction failed: ${C.message}`}}}async function $(A,I={}){const g=[],B=performance.now(),C=I.mode||"detect",Q=I.output||"canvas";I.debug;const i=I.maxProcessingDimension||800;let t=performance.now();const{grayscaleData:E,imageData:o,scaleFactor:e,originalDimensions:n,scaledDimensions:a}=await async function(A,I=800){let g,B;const C=A&&"number"==typeof A.width&&"number"==typeof A.height&&A.data;if(C)g=A.width,B=A.height;else{if(!A)throw new Error("No image provided");g=A.width||A.naturalWidth,B=A.height||A.naturalHeight}const Q=Math.max(g,B);let i,t,E;if(Q<=I)i=g,t=B,E=1;else{const A=I/Q;i=Math.round(g*A),t=Math.round(B*A),E=1/A}const o="undefined"!=typeof OffscreenCanvas,e=o?new OffscreenCanvas(i,t):document.createElement("canvas");o||(e.width=i,e.height=t);const n=e.getContext("2d",{willReadFrequently:!0});if(n.imageSmoothingEnabled=!0,n.imageSmoothingQuality="medium",C){const I=o?new OffscreenCanvas(g,B):document.createElement("canvas");o||(I.width=g,I.height=B),I.getContext("2d").putImageData(A,0,0),n.drawImage(I,0,0,g,B,0,0,i,t)}else n.drawImage(A,0,0,g,B,0,0,i,t);const a=n.getImageData(0,0,i,t),s=a.data,c=new Uint8ClampedArray(i*t);for(let r=0,l=0;r<s.length;r+=4,l++){const A=54*s[r]+183*s[r+1]+19*s[r+2]>>8;c[l]=A,s[r]=s[r+1]=s[r+2]=A}return{grayscaleData:c,imageData:a,scaleFactor:E,originalDimensions:{width:g,height:B},scaledDimensions:{width:i,height:t}}}(A,i);g.push({step:"Image Prep + Scale + Gray",ms:(performance.now()-t).toFixed(2)});const s=await O(E,a.width,a.height,e,I);if(s.timings&&s.timings.forEach(A=>g.push(A)),!s.success){const A=performance.now();return g.unshift({step:"Total",ms:(A-B).toFixed(2)}),{output:null,corners:null,contour:null,confidence:s.confidence||null,debug:s.debug,success:!1,message:s.message||"No document detected",timings:g}}let c,r;if("detect"===C)r=null;else if("extract"===C){t=performance.now(),c=document.createElement("canvas");z(c.getContext("2d"),A,s.corners),g.push({step:"Perspective Transform",ms:(performance.now()-t).toFixed(2)})}"detect"!==C&&c&&(t=performance.now(),r="canvas"===Q?c:"imagedata"===Q?c.getContext("2d").getImageData(0,0,c.width,c.height):"dataurl"===Q?c.toDataURL():c,g.push({step:"Output Conversion",ms:(performance.now()-t).toFixed(2)}));const l=performance.now();return g.unshift({step:"Total",ms:(l-B).toFixed(2)}),{output:r,corners:s.corners,contour:s.contour,confidence:s.confidence||null,debug:s.debug,success:!0,message:"Document detected",timings:g}}A.Scanner=class{constructor(A={}){this.defaultOptions={maxProcessingDimension:800,mode:"detect",output:"canvas",...A},this.initialized=!1}async initialize(){if(!this.initialized){try{await k()}catch{}this.initialized=!0}}async scan(A,I={}){this.initialized||await this.initialize();const g={...this.defaultOptions,...I};return await $(A,g)}async extract(A,I,g={}){this.initialized||await this.initialize();const B={...this.defaultOptions,...g};return await _(A,I,B)}},A.createCornerEditor=function(A={}){var I,g,B,C,Q,i,t,E,o,e,n,a,s,c,r,l,h,y,d,D,w,f;const u=A.container;if(!u||"function"!=typeof u.appendChild)throw new Error("createCornerEditor requires a valid container element");const m=u.ownerDocument||("undefined"!=typeof document?document:null),N="undefined"!=typeof window?window:globalThis;!1!==A.injectStyles&&function(A){if(!A||"function"!=typeof A.getElementById)return;if(A.getElementById(Y))return;const I=A.createElement("style");I.id=Y,I.textContent="\n.scanic-corner-editor {\n --scanic-accent: #6366f1;\n --scanic-mask: rgba(15, 23, 42, 0.45);\n --scanic-edge-color: var(--scanic-accent);\n --scanic-edge-width: 2.5;\n --scanic-handle-size: 20px;\n --scanic-handle-hit: 44px;\n --scanic-handle-color: #ffffff;\n --scanic-handle-ring: 2px;\n --scanic-handle-ring-color: var(--scanic-accent);\n --scanic-handle-shadow: 0 1px 4px rgba(15, 23, 42, 0.45);\n --scanic-handle-active-shadow: 0 8px 22px rgba(15, 23, 42, 0.5);\n --scanic-handle-active-scale: 1.28;\n --scanic-surface: rgba(15, 23, 42, 0.92);\n --scanic-surface-fg: #e2e8f0;\n --scanic-surface-radius: 12px;\n}\n.scanic-handle {\n position: absolute;\n box-sizing: border-box;\n width: var(--scanic-handle-size);\n height: var(--scanic-handle-size);\n margin: 0;\n padding: 0;\n border: var(--scanic-handle-ring) solid var(--scanic-handle-ring-color);\n border-radius: 50%;\n background: var(--scanic-handle-color);\n box-shadow: var(--scanic-handle-shadow);\n transform: translate(-50%, -50%);\n cursor: grab;\n touch-action: none;\n z-index: 2;\n transition: transform 0.12s ease, box-shadow 0.12s ease,\n background 0.12s ease, border-color 0.12s ease;\n}\n/* Enlarges the pointer/touch target without changing the visual size. */\n.scanic-handle::after {\n content: '';\n position: absolute;\n left: 50%;\n top: 50%;\n width: var(--scanic-handle-hit);\n height: var(--scanic-handle-hit);\n transform: translate(-50%, -50%);\n border-radius: 50%;\n}\n/* Soft accent halo that blooms when a handle is grabbed — the \"depth\" layer. */\n.scanic-handle::before {\n content: '';\n position: absolute;\n left: 50%;\n top: 50%;\n width: 0;\n height: 0;\n border-radius: 50%;\n background: var(--scanic-accent);\n opacity: 0;\n transform: translate(-50%, -50%);\n transition: opacity 0.15s ease, width 0.15s ease, height 0.15s ease;\n pointer-events: none;\n}\n.scanic-handle:hover {\n transform: translate(-50%, -50%) scale(1.12);\n}\n.scanic-handle:focus-visible {\n outline: none;\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--scanic-accent) 45%, transparent),\n var(--scanic-handle-shadow);\n}\n/* The currently selected corner — the target of nudges / keyboard. */\n.scanic-handle.is-selected {\n border-color: var(--scanic-accent);\n transform: translate(-50%, -50%) scale(1.12);\n}\n.scanic-handle.is-selected::before {\n opacity: 0.16;\n width: calc(var(--scanic-handle-size) * 2);\n height: calc(var(--scanic-handle-size) * 2);\n}\n.scanic-handle.is-active {\n cursor: grabbing;\n background: var(--scanic-accent);\n border-color: #ffffff;\n transform: translate(-50%, -50%) scale(var(--scanic-handle-active-scale));\n box-shadow: var(--scanic-handle-active-shadow);\n}\n.scanic-handle.is-active::before {\n opacity: 0.22;\n width: calc(var(--scanic-handle-size) * 2.8);\n height: calc(var(--scanic-handle-size) * 2.8);\n}\n.scanic-toolbar,\n.scanic-nudges {\n position: absolute;\n z-index: 3;\n display: flex;\n gap: 4px;\n padding: 5px;\n background: var(--scanic-surface);\n border-radius: var(--scanic-surface-radius);\n -webkit-backdrop-filter: blur(8px);\n backdrop-filter: blur(8px);\n box-shadow: 0 6px 20px rgba(15, 23, 42, 0.35);\n}\n.scanic-toolbar {\n left: 50%;\n bottom: 12px;\n transform: translateX(-50%);\n}\n.scanic-nudges {\n top: 10px;\n right: 10px;\n display: grid;\n grid-template-columns: repeat(4, auto);\n gap: 3px;\n}\n.scanic-toolbar button,\n.scanic-nudges button {\n display: grid;\n place-items: center;\n margin: 0;\n padding: 0;\n font-family: inherit;\n font-size: 15px;\n font-weight: 600;\n line-height: 1;\n color: var(--scanic-surface-fg);\n background: transparent;\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.12s ease, color 0.12s ease, filter 0.12s ease;\n}\n.scanic-toolbar button {\n width: 34px;\n height: 34px;\n}\n.scanic-nudges button {\n width: 30px;\n height: 30px;\n}\n.scanic-toolbar button svg {\n width: 18px;\n height: 18px;\n display: block;\n}\n.scanic-toolbar button:hover,\n.scanic-nudges button:hover {\n background: rgba(255, 255, 255, 0.14);\n}\n.scanic-toolbar button:focus-visible,\n.scanic-nudges button:focus-visible {\n outline: 2px solid var(--scanic-accent);\n outline-offset: 1px;\n}\n.scanic-toolbar .scanic-btn-apply {\n background: var(--scanic-accent);\n color: #ffffff;\n}\n.scanic-toolbar .scanic-btn-apply:hover {\n background: var(--scanic-accent);\n filter: brightness(1.1);\n}\n.scanic-toolbar .scanic-btn-expert.is-on {\n background: color-mix(in srgb, var(--scanic-accent) 32%, transparent);\n color: #ffffff;\n}\n",(A.head||A.documentElement).appendChild(I)}(m);const{canvas:R,width:F,height:p}=function(A){if(!A)throw new Error("No image provided");const I=A&&"number"==typeof A.width&&"number"==typeof A.height&&A.data;let g=0,B=0;if(I?(g=A.width,B=A.height):(g=A.width||A.naturalWidth,B=A.height||A.naturalHeight),!g||!B)throw new Error("Image must be loaded before creating the corner editor");const C=document.createElement("canvas");C.width=g,C.height=B;const Q=C.getContext("2d",{willReadFrequently:!0});if(!Q)throw new Error("Failed to create 2D canvas context for source image");return I?Q.putImageData(A,0,0):Q.drawImage(A,0,0,g,B),{canvas:C,width:g,height:B}}(A.image),J=!u.classList.contains("scanic-corner-editor");u.classList.add("scanic-corner-editor"),(null==(I=A.classNames)?void 0:I.root)&&u.classList.add(A.classNames.root);const G={position:u.style.position,minHeight:u.style.minHeight};let k=!1,S=!1;"static"===getComputedStyle(u).position&&(u.style.position="relative",k=!0),oA(A.theme);const M=m.createElement("canvas");M.style.position="absolute",M.style.top="0",M.style.left="0",M.style.display="block",M.style.touchAction="none",M.style.userSelect="none",M.style.webkitUserSelect="none",M.style.cursor="default",u.appendChild(M);const b=M.getContext("2d");if(!b)throw new Error("Failed to create 2D canvas context for corner editor");const x={enabled:!1!==(null==(g=A.magnifier)?void 0:g.enabled),size:(null==(B=A.magnifier)?void 0:B.size)||120,zoom:(null==(C=A.magnifier)?void 0:C.zoom)||2,margin:(null==(Q=A.magnifier)?void 0:Q.margin)||8,borderColor:(null==(i=A.magnifier)?void 0:i.borderColor)||"#ffffff",borderWidth:(null==(t=A.magnifier)?void 0:t.borderWidth)||2,crosshairColor:(null==(E=A.magnifier)?void 0:E.crosshairColor)||"#ffffff",crosshairSize:(null==(o=A.magnifier)?void 0:o.crosshairSize)||18},W={enabled:!!(null==(e=A.nudges)?void 0:e.enabled),steps:((null==(n=A.nudges)?void 0:n.steps)&&A.nudges.steps.length?A.nudges.steps:[1,10]).map(A=>Math.max(1,Math.round(A)))},P={enabled:!1!==(null==(a=A.toolbar)?void 0:a.enabled),reset:!1!==(null==(s=A.toolbar)?void 0:s.reset),cancel:!1!==(null==(c=A.toolbar)?void 0:c.cancel),apply:!1!==(null==(r=A.toolbar)?void 0:r.apply),labels:{reset:(null==(h=null==(l=A.toolbar)?void 0:l.labels)?void 0:h.reset)||"Reset",cancel:(null==(d=null==(y=A.toolbar)?void 0:y.labels)?void 0:d.cancel)||"Cancel",apply:(null==(w=null==(D=A.toolbar)?void 0:D.labels)?void 0:w.apply)||"Apply"}},Z=!1!==A.keyboard,X=function(A,I,g=.08){const B=Math.max(8,Math.min(A,I)*g);return{topLeft:{x:B,y:B},topRight:{x:A-B,y:B},bottomRight:{x:A-B,y:I-B},bottomLeft:{x:B,y:I-B}}}(F,p),V=A.corners?L(A.corners):X;let j=U(V)&&H(V)?V:X;const O=L(j);let z=!1,_=null,$="topLeft",AA=null,IA=null;Math.max(24,A.handleHitArea||44);const gA=["topLeft","topRight","bottomRight","bottomLeft"],BA={topLeft:"Top-left corner",topRight:"Top-right corner",bottomRight:"Bottom-right corner",bottomLeft:"Bottom-left corner"};let CA={scale:1,offsetX:0,offsetY:0,width:1,height:1};const QA={mask:"rgba(15,23,42,0.45)",edgeColor:"#6366f1",edgeWidth:2.5},iA={};for(const L of gA){const I=m.createElement("button");I.type="button",I.className="scanic-handle"+((null==(f=A.classNames)?void 0:f.handle)?" "+A.classNames.handle:""),I.dataset.corner=L,I.setAttribute("aria-label",BA[L]),Z||(I.tabIndex=-1),I.addEventListener("pointerdown",A=>NA(L,A)),I.addEventListener("pointermove",A=>RA(L,A)),I.addEventListener("pointerup",A=>FA(L,A)),I.addEventListener("pointercancel",A=>FA(L,A)),I.addEventListener("focus",()=>{$=L,yA()}),Z&&I.addEventListener("keydown",A=>pA(L,A)),u.appendChild(I),iA[L]=I}function tA(A,I){const g=M.style.color;M.style.color=`var(${A}, ${I})`;const B=getComputedStyle(M).color||I;return M.style.color=g,B}function EA(){QA.mask=tA("--scanic-mask","rgba(15, 23, 42, 0.45)"),QA.edgeColor=tA("--scanic-edge-color","#6366f1");const A=getComputedStyle(u).getPropertyValue("--scanic-edge-width"),I=parseFloat(A);QA.edgeWidth=Number.isFinite(I)&&I>0?I:2.5}function oA(A){if(!A||"object"!=typeof A)return;const I=new Set(["handleSize","handleHit"]),g={accent:"--scanic-accent",mask:"--scanic-mask",edgeColor:"--scanic-edge-color",edgeWidth:"--scanic-edge-width",handleSize:"--scanic-handle-size",handleHit:"--scanic-handle-hit",handleColor:"--scanic-handle-color",handleRingColor:"--scanic-handle-ring-color",surface:"--scanic-surface",surfaceColor:"--scanic-surface-fg",radius:"--scanic-surface-radius"};for(const[B,C]of Object.entries(g)){const g=A[B];if(null==g)continue;const Q="number"==typeof g&&I.has(B)?`${g}px`:String(g);u.style.setProperty(C,Q)}}function eA(){"function"==typeof A.onChange&&A.onChange(L(j))}let nA=0,aA=0;function sA(){const A=Math.max(1,Math.round(u.clientWidth));let I=Math.round(u.clientHeight);if(I<80){const g=p/Math.max(1,F),B=.7*(N.innerHeight||800);I=Math.max(240,Math.round(Math.min(A*g,B))),u.style.minHeight=I+"px",S=!0}return{width:A,height:Math.max(1,I)}}function cA(){const{width:A,height:I}=sA(),g=N.devicePixelRatio||1;nA=A,aA=I,M.style.width=A+"px",M.style.height=I+"px";const B=Math.round(A*g),C=Math.round(I*g);M.width!==B&&(M.width=B),M.height!==C&&(M.height=C),b.setTransform(g,0,0,g,0,0);const Q=Math.max(1,A-24),i=Math.max(1,I-24),t=Math.min(Q/F,i/p),E=F*t,o=p*t;CA={scale:t,offsetX:Math.round((A-E)/2),offsetY:Math.round((I-o)/2),width:A,height:I},EA()}function rA(A){return{x:CA.offsetX+A.x*CA.scale,y:CA.offsetY+A.y*CA.scale}}function lA(A){return U(A)&&H(A)}function hA(A){const I=M.getBoundingClientRect();return{x:A.clientX-I.left,y:A.clientY-I.top}}function yA(){for(const A of gA)iA[A].classList.toggle("is-selected",A===$)}function dA(){z||(b.clearRect(0,0,CA.width,CA.height),b.drawImage(R,0,0,F,p,CA.offsetX,CA.offsetY,F*CA.scale,p*CA.scale),function(){const A=gA.map(A=>rA(j[A]));b.save(),b.fillStyle=QA.mask,b.beginPath(),b.rect(0,0,CA.width,CA.height),b.moveTo(A[0].x,A[0].y);for(let I=1;I<A.length;I++)b.lineTo(A[I].x,A[I].y);b.closePath(),b.fill("evenodd"),b.restore(),b.save(),b.strokeStyle=QA.edgeColor,b.lineWidth=QA.edgeWidth,b.lineJoin="round",b.beginPath(),b.moveTo(A[0].x,A[0].y);for(let I=1;I<A.length;I++)b.lineTo(A[I].x,A[I].y);b.closePath(),b.stroke(),b.restore()}(),function(){if(!x.enabled||!_||!IA)return;const A=j[_],I=x.size,g=I/2,B=Math.max(1.1,x.zoom);let C=IA.x+g+x.margin,Q=IA.y-g-x.margin;C+g>CA.width&&(C=IA.x-g-x.margin),Q-g<0&&(Q=IA.y+g+x.margin),C=Math.max(g+2,Math.min(CA.width-g-2,C)),Q=Math.max(g+2,Math.min(CA.height-g-2,Q));const i=I/B,t=Math.max(0,Math.min(F-i,A.x-i/2)),E=Math.max(0,Math.min(p-i,A.y-i/2));b.save(),b.beginPath(),b.arc(C,Q,g,0,2*Math.PI),b.clip(),b.drawImage(R,t,E,i,i,C-g,Q-g,I,I),b.restore(),b.save(),b.beginPath(),b.arc(C,Q,g,0,2*Math.PI),b.lineWidth=x.borderWidth,b.strokeStyle=x.borderColor,b.stroke();const o=x.crosshairSize/2;b.strokeStyle=x.crosshairColor,b.lineWidth=1.5,b.beginPath(),b.moveTo(C-o,Q),b.lineTo(C+o,Q),b.moveTo(C,Q-o),b.lineTo(C,Q+o),b.stroke(),b.restore()}(),function(){for(const A of gA){const I=rA(j[A]),g=iA[A];g.style.left=I.x+"px",g.style.top=I.y+"px"}}())}const DA="function"==typeof N.requestAnimationFrame?N.requestAnimationFrame.bind(N):null,wA="function"==typeof N.cancelAnimationFrame?N.cancelAnimationFrame.bind(N):null;let fA=null;function uA(){z||(DA?null===fA&&(fA=DA(()=>{fA=null,dA()})):dA())}function mA(A,I){const g=L(j);return g[A]={x:Math.max(0,Math.min(F,I.x)),y:Math.max(0,Math.min(p,I.y))},!!lA(g)&&(j=g,$=A,yA(),eA(),uA(),!0)}function NA(A,I){if(!z){if("function"==typeof I.preventDefault&&I.preventDefault(),_=A,$=A,yA(),AA=I.pointerId,IA=hA(I),iA[A].classList.add("is-active"),Z&&"function"==typeof iA[A].focus)try{iA[A].focus({preventScroll:!0})}catch(g){iA[A].focus()}if(iA[A].setPointerCapture&&null!=I.pointerId)try{iA[A].setPointerCapture(I.pointerId)}catch(g){}uA()}}function RA(A,I){z||_!==A||null!==AA&&I.pointerId!==AA||(IA=hA(I),mA(A,function(A,I){const g=(A-CA.offsetX)/CA.scale,B=(I-CA.offsetY)/CA.scale;return{x:Math.max(0,Math.min(F,g)),y:Math.max(0,Math.min(p,B))}}(IA.x,IA.y)))}function FA(A,I){if(_===A&&(null===AA||I.pointerId===AA)){if(iA[A].releasePointerCapture&&null!=AA)try{iA[A].releasePointerCapture(AA)}catch(g){}iA[A].classList.remove("is-active"),_=null,AA=null,IA=null,uA()}}function pA(A,I){if(z||!Z)return;if("Enter"===I.key)return I.preventDefault(),void xA();if("Escape"===I.key)return I.preventDefault(),void UA();let g=0,B=0;if("ArrowLeft"===I.key)g=-1;else if("ArrowRight"===I.key)g=1;else if("ArrowUp"===I.key)B=-1;else{if("ArrowDown"!==I.key)return;B=1}I.preventDefault();const C=I.shiftKey?W.steps[W.steps.length-1]||10:1;mA(A,{x:j[A].x+g*C,y:j[A].y+B*C})}let JA=null,GA=null,kA=null,SA=!1;const MA=P.enabled&&W.enabled;function bA({html:A,text:I,title:g,className:B,onClick:C}){const Q=m.createElement("button");return Q.type="button",null!=A?Q.innerHTML=A:Q.textContent=I,g&&(Q.title=g,Q.setAttribute("aria-label",g)),B&&(Q.className=B),Q.addEventListener("click",C),Q}let LA=null;function xA(){const I=L(j);return"function"==typeof A.onConfirm&&A.onConfirm(I),I}function UA(){"function"==typeof A.onCancel&&A.onCancel()}function HA(){j=L(O),eA(),uA()}const YA="undefined"!=typeof ResizeObserver?new ResizeObserver(()=>{if(z)return;const A=sA();A.width===nA&&A.height===aA||(cA(),uA())}):null;var qA;return cA(),P.enabled&&(P.reset||P.cancel||P.apply||MA)&&(JA=m.createElement("div"),JA.className="scanic-toolbar"+((null==(qA=A.classNames)?void 0:qA.toolbar)?" "+A.classNames.toolbar:""),P.reset&&JA.appendChild(bA({html:q,title:P.labels.reset,className:"scanic-btn-reset",onClick:()=>HA()})),MA&&(kA=bA({html:T,title:"Precision nudge (expert)",className:"scanic-btn-expert",onClick:()=>{return SA=A=!SA,GA&&(GA.style.display=A?"":"none"),void(kA&&(kA.classList.toggle("is-on",A),kA.setAttribute("aria-pressed",String(A))));var A}}),kA.setAttribute("aria-pressed","false"),JA.appendChild(kA)),P.cancel&&JA.appendChild(bA({html:v,title:P.labels.cancel,className:"scanic-btn-cancel",onClick:()=>UA()})),P.apply&&JA.appendChild(bA({html:K,title:P.labels.apply,className:"scanic-btn-apply",onClick:()=>xA()})),u.appendChild(JA)),function(){var I;if(!W.enabled)return;GA=m.createElement("div"),GA.className="scanic-nudges"+((null==(I=A.classNames)?void 0:I.nudges)?" "+A.classNames.nudges:"");const g=(A,I,g,B,C)=>bA({text:A,title:I,className:"scanic-btn-nudge",onClick:()=>{const A=j[$];mA($,{x:A.x+g*C,y:A.y+B*C})}});for(const A of W.steps)GA.appendChild(g("←",`Move left ${A}px`,-1,0,A)),GA.appendChild(g("↑",`Move up ${A}px`,0,-1,A)),GA.appendChild(g("↓",`Move down ${A}px`,0,1,A)),GA.appendChild(g("→",`Move right ${A}px`,1,0,A));u.appendChild(GA),MA&&(GA.style.display="none")}(),function A(){if("function"!=typeof N.matchMedia)return;LA&&LA();const I=N.devicePixelRatio||1,g=N.matchMedia(`(resolution: ${I}dppx)`),B=()=>{z||(cA(),uA(),A())};"function"==typeof g.addEventListener?(g.addEventListener("change",B),LA=()=>g.removeEventListener("change",B)):"function"==typeof g.addListener?(g.addListener(B),LA=()=>g.removeListener(B)):LA=null}(),YA&&YA.observe(u),yA(),dA(),{getCorners:()=>L(j),setCorners:A=>!(!A||!lA(A))&&(j=L(A),eA(),uA(),!0),reset(){HA()},nudge:(A,I,g,B=1)=>!!gA.includes(A)&&mA(A,{x:j[A].x+I*B,y:j[A].y+g*B}),refreshTheme(A){oA(A),EA(),uA()},confirm:()=>xA(),cancel(){UA()},destroy(){var I;if(!z){z=!0,null!==fA&&wA&&(wA(fA),fA=null),LA&&(LA(),LA=null),YA&&YA.disconnect();for(const A of gA){const I=iA[A];I&&I.parentNode&&I.parentNode.removeChild(I)}JA&&JA.parentNode&&JA.parentNode.removeChild(JA),GA&&GA.parentNode&&GA.parentNode.removeChild(GA),M.parentNode&&M.parentNode.removeChild(M),J&&u.classList.remove("scanic-corner-editor"),(null==(I=A.classNames)?void 0:I.root)&&u.classList.remove(A.classNames.root),k&&(u.style.position=G.position),S&&(u.style.minHeight=G.minHeight)}}}},A.extractDocument=_,A.initialize=async function(){try{return await k()}catch{return null}},A.scanDocument=$,Object.defineProperty(A,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).scanic={})}(this,function(A){Object.defineProperty(A,Symbol.toStringTag,{value:"Module"});var I,g=Object.defineProperty,B=1e3,t=10;function C(A,I={}){const g=I.width||Math.sqrt(A.length),C=I.height||A.length/g,e=void 0!==I.mode?I.mode:1,n=void 0!==I.method?I.method:2,o=I.minArea||B,E=g+2,a=C+2,s=new Int32Array(E*a);for(let B=0;B<C;B++)for(let I=0;I<g;I++)A[B*g+I]>0&&(s[(B+1)*E+(I+1)]=1);const c=[];let r=2;for(let B=1;B<=C;B++)for(let A=1;A<=g;A++){const I=s[B*E+A],g=s[B*E+(A-1)];let C=null,o=!1,h=-1;if(1===I&&0===g?(o=!0,C={x:A,y:B},h=2):0===I&&g>=1&&-1!==g&&1===g&&(o=!1,C={x:A-1,y:B},h=6),C){if(0===e&&!o){s[C.y*E+C.x]=-1;continue}const A=r++,I=Q(s,E,a,C,h,A);if(I&&I.length>0){let g=I;2===n&&(g=i(I));const B=g.map(A=>({x:A.x-1,y:A.y-1}));if(B.length>=(2===n?4:t)){const I={id:A,points:B,isOuter:o};c.push(I)}}else 1===s[C.y*E+C.x]&&(s[C.y*E+C.x]=A)}}c.forEach(A=>{A.area=function(A){let I=0;const g=A.length;if(g<3)return 0;for(let B=0;B<g;B++){const t=(B+1)%g;I+=A[B].x*A[t].y,I-=A[t].x*A[B].y}return Math.abs(I)/2}(A.points),A.boundingBox=function(A){if(0===A.length)return{minX:0,minY:0,maxX:0,maxY:0};let I=A[0].x,g=A[0].y,B=A[0].x,t=A[0].y;for(let C=1;C<A.length;C++){const Q=A[C];I=Math.min(I,Q.x),g=Math.min(g,Q.y),B=Math.max(B,Q.x),t=Math.max(t,Q.y)}return{minX:I,minY:g,maxX:B,maxY:t}}(A.points)});const h=c.filter(A=>A.area>=o);return h.sort((A,I)=>I.area-A.area),I.debug&&(I.debug.labels=s,I.debug.rawContours=c,I.debug.finalContours=h),h}function Q(A,I,g,B,t,C){const Q=[],i=new Set;let e=B.x,n=B.y;const o=e,E=n;let a=-1;A[E*I+o]=C;let s=0;const c=I*g,r=[0,1,1,1,0,-1,-1,-1],h=[-1,-1,0,1,1,1,0,-1];for(;s++<c;){let B;if(-1===a){let C=!1;for(let Q=0;Q<8;Q++){B=t+Q&7;const i=e+r[B],o=n+h[B];if(i>=0&&i<I&&o>=0&&o<g&&A[o*I+i]>0){C=!0;break}}if(!C)return null}else B=a+2&7;let s=-1,c=-1;for(let t=0;t<8;t++){const C=B+t&7,Q=e+r[C],i=n+h[C];if(Q>=0&&Q<I&&i>=0&&i<g&&A[i*I+Q]>0){s=Q,c=i,a=C+4&7;break}}if(-1===s){0===Q.length&&Q.push({x:e,y:n});break}const l=n*I+e;if(i.has(l))return Q;Q.push({x:e,y:n}),i.add(l);const y=c*I+s;if(1===A[y]&&(A[y]=C),e=s,n=c,e===o&&n===E)break}return s>=c?null:Q}function i(A){const I=A.length;if(I<=2)return A;const g=[],B=A[I-1],t=A[0];let C=B,Q=t,i=A[1],e=Q.x-C.x,n=Q.y-C.y,o=i.x-Q.x,E=i.y-Q.y;e*E!==n*o&&g.push(Q);for(let a=1;a<I-1;a++)C=A[a-1],Q=A[a],i=A[a+1],e=Q.x-C.x,n=Q.y-C.y,o=i.x-Q.x,E=i.y-Q.y,e*E!==n*o&&g.push(Q);if(C=A[I-2],Q=B,i=t,e=Q.x-C.x,n=Q.y-C.y,o=i.x-Q.x,E=i.y-Q.y,e*E!==n*o&&g.push(Q),0===g.length){if(1===I)return[A[0]];if(2===I)return A;let g=0,B=1;const C=t.x,Q=t.y;for(let t=1;t<I;t++){const I=A[t],i=I.x-C,e=I.y-Q,n=i*i+e*e;n>g&&(g=n,B=t)}return[t,A[B]]}return g}function e(A,I=1){if(A.length<=2)return A;let g=0,B=0;const t=A[0],C=A[A.length-1];for(let Q=1;Q<A.length-1;Q++){const I=n(A[Q],t,C);I>g&&(g=I,B=Q)}if(g>I){const g=e(A.slice(0,B+1),I),t=e(A.slice(B),I);return g.slice(0,-1).concat(t)}return[t,C]}function n(A,I,g){const B=g.x-I.x,t=g.y-I.y,C=B*B+t*t;if(0===C)return Math.sqrt(Math.pow(A.x-I.x,2)+Math.pow(A.y-I.y,2));const Q=((A.x-I.x)*B+(A.y-I.y)*t)/C;let i,e;Q<0?(i=I.x,e=I.y):Q>1?(i=g.x,e=g.y):(i=I.x+Q*B,e=I.y+Q*t);const n=A.x-i,o=A.y-e;return Math.sqrt(n*n+o*o)}function o(A,I=.02){return e(A,I*function(A){let I=0;const g=A.length;if(g<2)return 0;for(let B=0;B<g;B++){const t=(B+1)%g,C=A[B].x-A[t].x,Q=A[B].y-A[t].y;I+=Math.sqrt(C*C+Q*Q)}return I}(A))}function E(A,I){return Math.hypot(I.x-A.x,I.y-A.y)}function a(A){let I=0,g=0;for(const B of A)I+=B.x,g+=B.y;return{x:I/A.length,y:g/A.length}}function s(A,I={}){if(!A||!A.points||A.points.length<4)return null;const g=I.epsilon||.02,B=function(A,I){if(!A||A.length<4)return null;const g=[I,1.3*I,1.6*I,2*I],B=new Set;for(const t of g){const I=Math.min(.12,t),g=I.toFixed(4);if(B.has(g))continue;B.add(g);const C=c(o(A,I));if(C&&4===C.length)return C}return null}(A.points,g);let t;return B&&4===B.length?t=function(A){if(4!==A.length)return null;const I=a(A),g=[...A].sort((A,g)=>Math.atan2(A.y-I.y,A.x-I.x)-Math.atan2(g.y-I.y,g.x-I.x));let B=1/0,t=0;for(let Q=0;Q<4;Q++){const A=g[Q].x+g[Q].y;A<B&&(B=A,t=Q)}const C=[g[t],g[(t+1)%4],g[(t+2)%4],g[(t+3)%4]];return{topLeft:C[0],topRight:C[1],bottomRight:C[2],bottomLeft:C[3]}}(B):(t=function(A){if(!A||A.length<4)return null;const I=a(A);let g=null,B=null,t=null,C=null,Q=0,i=0,e=0,n=0;for(const o of A){const A=E(o,I);o.x<I.x&&o.y<I.y?A>Q&&(g=o,Q=A):o.x>I.x&&o.y<I.y?A>i&&(B=o,i=A):o.x>I.x&&o.y>I.y?A>e&&(t=o,e=A):o.x<I.x&&o.y>I.y&&A>n&&(C=o,n=A)}return g&&B&&t&&C?{topLeft:g,topRight:B,bottomRight:t,bottomLeft:C}:null}(A.points),t&&t.topLeft&&t.topRight&&t.bottomRight&&t.bottomLeft||(t=function(A){if(!A||0===A.length)return null;let I=A[0],g=A[0],B=A[0],t=A[0],C=I.x+I.y,Q=g.x-g.y,i=B.x+B.y,e=t.x-t.y;for(let n=1;n<A.length;n++){const o=A[n],E=o.x+o.y,a=o.x-o.y;E<C&&(C=E,I=o),E>i&&(i=E,B=o),a>Q&&(Q=a,g=o),a<e&&(e=a,t=o)}return{topLeft:I,topRight:g,bottomRight:B,bottomLeft:t}}(A.points))),t&&t.topLeft&&t.topRight&&t.bottomRight&&t.bottomLeft?t:null}function c(A){if(!A||A.length<4)return null;if(4===A.length)return A;if(A.length>8)return null;let I=function(A,I){if(!A||0===A.length)return[];const g=[];for(const B of A)(0===g.length||E(B,g[g.length-1])>I)&&g.push(B);g.length>2&&E(g[0],g[g.length-1])<=I&&g.pop();return g}(A,6);return 4===I.length?I:(I.length,null)}var r=null;function h(){return null!==r&&0!==r.byteLength||(r=new Uint8Array(I.memory.buffer)),r}var l=0;function y(A,I){const g=I(1*A.length,1)>>>0;return h().set(A,g/1),l=A.length,g}function d(A,I){return A>>>=0,h().subarray(A/1,A/1+I)}var w=null;function D(){return null!==w&&0!==w.byteLength||(w=new Float32Array(I.memory.buffer)),w}function f(A,g,B,t,C){const Q=function(A,I){const g=I(4*A.length,4)>>>0;return D().set(A,g/4),l=A.length,g}(A,I.__wbindgen_malloc),i=l,e=I.hysteresis_thresholding(Q,i,g,B,t,C);var n=d(e[0],e[1]).slice();return I.__wbindgen_free(e[0],1*e[1],1),n}var u=null;function m(A,g){const B=g(2*A.length,2)>>>0;return(null!==u&&0!==u.byteLength||(u=new Uint16Array(I.memory.buffer)),u).set(A,B/2),l=A.length,B}function N(A,g,B,t,C){const Q=m(A,I.__wbindgen_malloc),i=l,e=m(g,I.__wbindgen_malloc),n=l,o=I.non_maximum_suppression(Q,i,e,n,B,t,C);var E,a,s=(E=o[0],a=o[1],E>>>=0,D().subarray(E/4,E/4+a)).slice();return I.__wbindgen_free(o[0],4*o[1],4),s}async function R(A){if(void 0!==I)return I;if(void 0!==A&&Object.getPrototypeOf(A)===Object.prototype&&({module_or_path:A}=A),void 0===A)throw new Error("scanic: WASM module bytes must be passed to init().");const g=function(){const A={wbg:{}};return A.wbg.__wbindgen_init_externref_table=function(){const A=I.__wbindgen_export_0,g=A.grow(4);A.set(0,void 0),A.set(g+0,void 0),A.set(g+1,null),A.set(g+2,!0),A.set(g+3,!1)},A}();("string"==typeof A||"function"==typeof Request&&A instanceof Request||"function"==typeof URL&&A instanceof URL)&&(A=fetch(A));const{instance:B,module:t}=await async function(A,I){if("function"==typeof Response&&A instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(A,I)}catch(g){if("application/wasm"==A.headers.get("Content-Type"))throw g}const B=await A.arrayBuffer();return await WebAssembly.instantiate(B,I)}{const g=await WebAssembly.instantiate(A,I);return g instanceof WebAssembly.Instance?{instance:g,module:A}:g}}(await A,g);return function(A,g){return I=A.exports,R.__wbindgen_wasm_module=g,w=null,u=null,r=null,I.__wbindgen_start(),I}(B,t)}var p=null,F=!1,J=null;function G(A){if("function"==typeof atob){const I=atob(A),g=new Uint8Array(I.length);for(let A=0;A<I.length;A++)g[A]=I.charCodeAt(A);return g}return Uint8Array.from(Buffer.from(A,"base64"))}async function k(){if(!function(){if(null!==J)return J;let A=!1;if("object"==typeof WebAssembly&&"function"==typeof WebAssembly.validate){const I=new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]),g=new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,111,3,2,1,0,10,6,1,4,0,208,111,11]);try{A=WebAssembly.validate(I)&&WebAssembly.validate(g)}catch{A=!1}}return J=A,A}())throw new Error("scanic: WebAssembly features required by the WASM module (reference-types, SIMD) are unavailable in this engine; using the JavaScript fallback.");return await R({module_or_path:G("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JAAgAiABIAJqIgFLBEBBAEEAEC0ACyADQQRqIAAoAgAiAiAAKAIEQQggASACQQF0IgIgASACSxsiASABQQhNGyIBQQFBARARIAMoAgRBAUYEQCADKAIIIAMoAgwQLQALIAMoAgghAiAAIAE2AgAgACACNgIEIANBEGokAAt5AQF/IwBBIGsiAiQAAn8gACgCAEGAgICAeEcEQCABIAAoAgQgACgCCBAwDAELIAJBEGogACgCDCgCACIAQQhqKQIANwMAIAJBGGogAEEQaikCADcDACACIAApAgA3AwggASgCACABKAIEIAJBCGoQBwsgAkEgaiQAC2kBA38jAEEQayIBJAAgAUEEaiAAKAIAIgIgACgCBEEEIAJBAXQiAiACQQRNGyICQQRBBBARIAEoAgRBAUYEQCABKAIIIAEoAgwQLQALIAEoAgghAyAAIAI2AgAgACADNgIEIAFBEGokAAtpAQN/IwBBEGsiASQAIAFBBGogACgCACICIAAoAgRBBCACQQF0IgIgAkEETRsiAkEEQQgQESABKAIEQQFGBEAgASgCCCABKAIMEC0ACyABKAIIIQMgACACNgIAIAAgAzYCBCABQRBqJAALaQEDfyMAQRBrIgEkACABQQRqIAAoAgAiAiAAKAIEQQQgAkEBdCICIAJBBE0bIgJBAkECEBEgASgCBEEBRgRAIAEoAgggASgCDBAtAAsgASgCCCEDIAAgAjYCACAAIAM2AgQgAUEQaiQACxIAIwBBMGsiACQAIABBMGokAAtoAgF/AX4jAEEwayIDJAAgAyABNgIEIAMgADYCACADQQI2AgwgA0Hkl8AANgIIIANCAjcCFCADQoCAgIAwIgQgA62ENwMoIAMgBCADQQRqrYQ3AyAgAyADQSBqNgIQIANBCGogAhAmAAtHAQF/IAAoAgAgACgCCCIDayACSQRAIAAgAyACEBIgACgCCCEDCyACBEAgACgCBCADaiABIAL8CgAACyAAIAIgA2o2AghBAAtEAQJ/IAEoAgQhAiABKAIAIQNBCEEEEDUiAUUEQEEEQQgQOQALIAEgAjYCBCABIAM2AgAgAEHcksAANgIEIAAgATYCAAvGAgACQCAAIAJNBEAgACABTSABIAJLcg0BIwBBMGsiAiQAIAIgATYCBCACIAA2AgAgAkECNgIMIAJB2JbAADYCCCACQgI3AhQgAiACQQRqrUKAgICAMIQ3AyggAiACrUKAgICAMIQ3AyAgAiACQSBqNgIQIAJBCGogAxAmAAsjAEEwayIBJAAgASACNgIEIAEgADYCACABQQI2AgwgAUH8lsAANgIIIAFCAjcCFCABIAFBBGqtQoCAgIAwhDcDKCABIAGtQoCAgIAwhDcDICABIAFBIGo2AhAgAUEIaiADECYACyMAQTBrIgAkACAAIAI2AgQgACABNgIAIABBAjYCDCAAQaSWwAA2AgggAEICNwIUIAAgAEEEaq1CgICAgDCENwMoIAAgAK1CgICAgDCENwMgIAAgAEEgajYCECAAQQhqIAMQJgALQQEBfyMAQSBrIgMkACADQQA2AhAgA0EBNgIEIANCBDcCCCADIAE2AhwgAyAANgIYIAMgA0EYajYCACADIAIQJgALywwBD38jAEEQayIOJAAgCCEMIAkhFiAKIRdBACEIQQAhCSMAQdAAayILJAAgC0EIaiAAIhggASITIAIiCiADIAYgBxAEIAtBFGogCygCDCIZIAsoAhAgAiADEAUgAiADbCIBQQF0IQACfwJAAkAgAUEASCAAQf7///8HS3JFBEAgAEUNAUECIQggAEECEDUiAg0CCyAIIAAQLQALIAtBADYCKCALQoCAgIAgNwIgIAtBADYCNCALQoCAgIAgNwIsQQIhCEEBDAELIAtBADYCKCALIAI2AiQgCyABNgIgAkACQCAAQQIQNSIIBEAgC0EANgI0IAsgCDYCMCALIAE2AixBASABRQ0DGkEAIQAgCygCGCEIIAsoAhwhBiABIQIDQCAAIAZJBEAgCC8BACENIAsoAigiCSALKAIgRgRAIAtBIGoQFgsgCygCJCAJQQF0aiANOwEAIAsgCUEBajYCKCAAQQFqIAZPDQMgCEECai8BACENIAsoAjQiCSALKAIsRgRAIAtBLGoQFgsgCygCMCAJQQF0aiANOwEAIAsgCUEBaiIJNgI0IAhBBGohCCAAQQJqIQAgAkEBayICDQEMBAsLIAAgBkGckMAAEBgAC0ECIAAQLQALIABBAWogBkGskMAAEBgACyALKAIwIQhBAAshECALQThqIAsoAiQgCygCKCAIIAkgCiADIAxBAEcQAyALKAJAIQ8gCygCPCEUAkACQAJ/IBAEQEEBIQ1BAAwBCyABQQEQNiINRQ0BIAELIRUgC0EANgJMIAtCgICAgMAANwJEAkACQAJAAkACQCAKQQNrQX1LDQAgA0EBayIRQQJJDQAgBSAFlCAFIAwbIQUgBCAElCAEIAwbIQRBAiEAQQEhCQNAIAAhAiAJIApsIQxBAiEAQQEhCANAIAghBiAAIQggBiAMaiIAIA9PDQUCQCAFIBQgAEECdGoqAgAiB18EQCAAIAFPDQUgACANakECOgAAIAsoAkwiACALKAJERgRAIAtBxABqEBULIAsoAkggAEEDdGoiEiAJNgIEIBIgBjYCACALIABBAWo2AkwMAQsgBCAHX0UNACAAIAFPDQUgACANakEBOgAACyAIQQFqIgAgCkcNAAsgAiACIBFJIgZqIQAgAiEJIAYNAAsgCygCTCICRQ0AA0BBfyEJIAsgAkEBayICNgJMIAsoAkggAkEDdGoiACgCBCEPIAAoAgAhEQNAAkAgCSAPaiIGRSADIAZNcg0AIAYgCmwhEkF/IQADQAJAIAAgCXJFDQAgACARaiIIRSAIIApPcg0AIAEgCCASaiIMSwRAIAwgDWoiDC0AAEEBRw0BIAxBAjoAACALKAJMIgIgCygCREYEQCALQcQAahAVCyALKAJIIAJBA3RqIgwgBjYCBCAMIAg2AgAgCyACQQFqIgI2AkwMAQsgDCABQdyPwAAQGAALIABBAUYiCA0BQQEgAEEBaiAIGyIAQQFMDQALCyAJQQFGIgBFBEBBASAJQQFqIAAbIglBAUwNAQsLIAINAAsLIBAEQEEAIQhBASEJDAQLIAFBARA2IgkEQEEAIQAgAUEBRwRAIAFB/v///wdxIQIDQCAAIA1qIgYtAABBAkYEQCAAIAlqQf8BOgAACyAGQQFqLQAAQQJGBEAgACAJakEBakH/AToAAAsgAiAAQQJqIgBHDQALCwJAIAFBAXFFDQAgACANai0AAEECRw0AIAAgCWpB/wE6AAALIAEhCAwECwwECyAAIAFBjJDAABAYAAsgACABQfyPwAAQGAALIAAgD0Hsj8AAEBgACyALKAJEIgAEQCALKAJIIABBA3QQNAsgFQRAIA0gFRA0CwJAAkAgFkUEQCAJIQAMAQtBASEAIBBFBEAgAUEBEDYiAEUNAgsgCSABIAogAyAXIAAgARACIAhFDQAgCSAIEDQLIAsoAjgiAgRAIBQgAkECdBA0CyALKAIsIgIEQCALKAIwIAJBAXQQNAsgCygCICICBEAgCygCJCACQQF0EDQLIAsoAhQiAgRAIAsoAhggAkEBdBA0CyALKAIIIgIEQCAZIAIQNAsgEwRAIBggExA0CyAOIAE2AgQgDiAANgIAIAtB0ABqJAAMAgsLQQEgARAtAAsgDigCACAOKAIEIA5BEGokAAs4AAJAIAJBgIDEAEYNACAAIAIgASgCEBECAEUNAEEBDwsgA0UEQEEADwsgACADQQAgASgCDBEDAAs2AQF/IwBBIGsiASQAIAFBADYCGCABQQE2AgwgAUGol8AANgIIIAFCBDcCECABQQhqIAAQJgALyAEBAn8jAEEQayIIJAAjAEEQayIHJAAgB0EEaiAAIAEgAiADIAQgBSAGQQBHEAMgAwRAIAIgA0EBdBA0CyABBEAgACABQQF0EDQLAkAgBygCBCIBIAcoAgwiAE0EQCAHKAIIIQEMAQsgAUECdCECIAcoAgghAyAARQRAQQQhASADIAIQNAwBCyADIAJBBCAAQQJ0IgIQMSIBDQBBBCACEC0ACyAIIAA2AgQgCCABNgIAIAdBEGokACAIKAIAIAgoAgQgCEEQaiQAC6YBAQJ/IwBBEGsiByQAIwBBEGsiBiQAIAZBBGogACABIAIgAyAEIAUQBCABBEAgACABEDQLAkAgBigCBCICIAYoAgwiAE0EQCAGKAIIIQEMAQsgBigCCCEDIABFBEBBASEBIAMgAhA0DAELIAMgAkEBIAAQMSIBDQBBASAAEC0ACyAHIAA2AgQgByABNgIAIAZBEGokACAHKAIAIAcoAgQgB0EQaiQAC9YVAhZ/AX0jAEEQayITJAAgACEWIAEhEkEAIQAjAEEQayIGJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADIAIiCGwiCUEASA0AQQEhCiAJBEBBASEAIAlBARA1IgpFDQELIAkEQCAKQQEgCfwLAAtBgMAAQQQQNSIRBEAgBkEANgIMIAYgETYCCCAGQYAINgIEIANBAWsiGEECSQ0LIAhBAWshFyAIQQJrIg5BAnYhGSAOQXxxIhtBAXIhFCAOQQRPBEAgCEECdCIaIBlBBHRqIBZqQQRqIQ8gCCAKaiELIBYgGmohDEEAIQJBAiEAQQEhBwNAIAAhECAHIAhsIgEgF2oiACABQQFqIgNJIAAgEktyDQsgACAJSw0JQQAhAEEBIQEgDCEDA0AgACAOTw0IIA4gAGsiDUEAIA0gDk0bQQFqIQ0CQCAFIANBBGoqAgAiHF8EQCAAIAtqQQFqQQI6AAAgBigCBCACRgRAIAZBBGoQFSAGKAIIIRELIBEgAkEDdGoiFSAHNgIEIBUgAEEBajYCACAGIAJBAWoiAjYCDAwBCyAEIBxfRQ0AIAAgC2pBAWpBADoAAAsgDUECRg0HAkAgBSADQQhqKgIAIhxfBEAgACALakECakECOgAAIAYoAgQgAkYEQCAGQQRqEBULIAYoAggiESACQQN0aiIVIAc2AgQgFSAAQQJqNgIAIAYgAkEBaiICNgIMDAELIAQgHF9FDQAgACALakECakEAOgAACyANQQNGDQUCQCAFIANBDGoqAgAiHF8EQCAAIAtqQQNqQQI6AAAgBigCBCACRgRAIAZBBGoQFQsgBigCCCIRIAJBA3RqIhUgBzYCBCAVIABBA2o2AgAgBiACQQFqIgI2AgwMAQsgBCAcX0UNACAAIAtqQQNqQQA6AAALIA1BBEYNBiABIQ0CQCAFIANBEGoiAyoCACIcXwRAIAAgC2pBBGpBAjoAACAGKAIEIAJGBEAgBkEEahAVCyAGKAIIIhEgAkEDdGoiASAHNgIEIAEgAEEEajYCACAGIAJBAWoiAjYCDAwBCyAEIBxfRQ0AIAAgC2pBBGpBADoAAAsgDUEBaiEBIABBBGohACANIBlJDQALIA8hAyAUIQEgDiAbRwRAA0AgASEAAkAgBSADKgIAIhxfBEAgACALakECOgAAIAYoAgQgAkYEQCAGQQRqEBULIAYoAggiESACQQN0aiIBIAc2AgQgASAANgIAIAYgAkEBaiICNgIMDAELIAQgHF9FDQAgACALakEAOgAACyADQQRqIQMgAEEBaiEBIAAgDkkNAAsLIA8gGmohDyAIIAtqIQsgDCAaaiEMIBAgECAYSSIBaiEAIBAhByABDQALDAsLAkAgDiAbRwRAIAhBAnQiDCAZQQR0aiAWakEEaiEHIAggCmohC0EAIQJBAiEAQQEhDwwBCyAIQQFqIQMgCEEBdEEBayEHQQAhAkECIQADQCACIAdqIgEgAiADakkgASASS3INCiABIAlLDQggAiAIaiECIAAgGEkgAEEBaiEADQALDAwLA0AgACEQIAggD2wiASAXaiIAIAFBAWoiA0kgACASS3INCiAAIAlLDQggByEDIBQhAQNAIAEhAAJAIAMqAgAiHCAFYEUEQCAEIBxfRQ0BIAAgC2pBADoAAAwBCyAAIAtqQQI6AAAgBigCBCACRgRAIAZBBGoQFSAGKAIIIRELIBEgAkEDdGoiASAPNgIEIAEgADYCACAGIAJBAWoiAjYCDAsgA0EEaiEDIABBAWohASAAIA5JDQALIAcgDGohByAIIAtqIQsgECAQIBhJIgFqIQAgECEPIAENAAsMCgtBBEGAwAAQLQALIAAgCRAtAAsgAEECaiEADAILIABBA2ohAAwBCyAAQQFqIQALIAAgDkHQicAAEBgACyACIAhqQQFqIQMgCEEBdCACakEBayEACyADIAAgCUHAicAAEBsACyACIAhqQQFqIQMgCEEBdCACakEBayEACyADIAAgEkHgicAAEBsACyACRQ0AIAhBAWohD0EBIAhrIRAgCEF/cyEUIAgEQCAGKAIIIQEDQCAGIAJBAWsiADYCDCAGKAIEIQwCQCABIABBA3QiDWoiAygCBCAIbCADKAIAaiIDIBRqIgcgCU8NACAHIApqIgstAAANACALQQI6AAAgASANaiIAIAcgCG4iDTYCBCAAIAcgCCANbGs2AgAgBiACNgIMIAIhAAsCQCADIAhrIgIgCU8NACACIApqIgctAAANACAHQQI6AAAgAiACIAhuIgIgCGxrIQcgACAMRgRAIAZBBGoQFSAGKAIIIQELIAEgAEEDdGoiDCACNgIEIAwgBzYCACAGIABBAWoiADYCDAsCQCADIBBqIgIgCU8NACACIApqIgctAAANACAHQQI6AAAgAiACIAhuIgIgCGxrIQcgBigCBCAARgRAIAZBBGoQFQsgBigCCCIBIABBA3RqIgwgAjYCBCAMIAc2AgAgBiAAQQFqIgA2AgwLAkAgA0EBayICIAlPDQAgAiAKaiIHLQAADQAgB0ECOgAAIAIgAiAIbiICIAhsayEHIAYoAgQgAEYEQCAGQQRqEBULIAYoAggiASAAQQN0aiIMIAI2AgQgDCAHNgIAIAYgAEEBaiIANgIMCwJAIANBAWoiAiAJTw0AIAIgCmoiBy0AAA0AIAdBAjoAACACIAIgCG4iAiAIbGshByAGKAIEIABGBEAgBkEEahAVCyAGKAIIIgEgAEEDdGoiDCACNgIEIAwgBzYCACAGIABBAWoiADYCDAsCQCADIBdqIgIgCU8NACACIApqIgctAAANACAHQQI6AAAgAiACIAhuIgIgCGxrIQcgBigCBCAARgRAIAZBBGoQFQsgBigCCCIBIABBA3RqIgwgAjYCBCAMIAc2AgAgBiAAQQFqIgA2AgwLAkAgAyAIaiICIAlPDQAgAiAKaiIHLQAADQAgB0ECOgAAIAIgAiAIbiICIAhsayEHIAYoAgQgAEYEQCAGQQRqEBULIAYoAggiASAAQQN0aiIMIAI2AgQgDCAHNgIAIAYgAEEBaiIANgIMCyAJIAMgD2oiAk0EQCAAIgINAQwDCyACIApqIgMtAAAEQCAAIgINAQwDCyADQQI6AAAgAiACIAhuIgIgCGxrIQMgBigCBCAARgRAIAZBBGoQFQsgBigCCCIBIABBA3RqIgcgAjYCBCAHIAM2AgAgBiAAQQFqIgI2AgwgAg0ACwwBCyAGKAIIIAJBA3RqQQhrIQEDQCAJIAEoAgAiACAUaiIDSwRAIAMgCmoiAy0AAEUNAwsgACAJTyIHRQRAIAAgCmoiAy0AAEUNAwsgCSAAIBBqIgNLBEAgAyAKaiIDLQAARQ0DCyAJIABBAWsiA0sEQCADIApqIgMtAABFDQMLIAkgAEEBaiIDSwRAIAMgCmoiAy0AAEUNAwsgCSAAIBdqIgNLBEAgAyAKaiIDLQAARQ0DCyAHRQRAIAAgCmoiAy0AAEUNAwsgCSAAIA9qIgBLBEAgACAKaiIDLQAARQ0DCyABQQhrIQEgAkEBayICDQALCyAGKAIEIgAEQCAGKAIIIABBA3QQNAsgEgRAIBYgEkECdBA0CyATIAk2AgQgEyAKNgIAIAZBEGokAAwBCyADQQI6AABBsInAABAfAAsgEygCACATKAIEIBNBEGokAAvoDgIUfwF9IwBBEGsiEiQAIAAhFSABIRNBACEBIwBBEGsiByQAAkACQAJAAkACQAJAAkACQAJAIAIgA2wiCEEASA0AQQEhDEEBIQkCQCAIBEBBASENIAhBARA2IgxFDQIgCEEBEDUiCUUNAQsgCARAIAlBASAI/AsAC0GAwABBBBA1IgsEQCAHQQA2AgwgByALNgIIIAdBgAg2AgQgAkEBayIWQQJJDQcgA0EBayIXQQJJDQcgAiAMaiEUIAIgCWohD0ECIAJrIRggAkECdCIZIBVqQQRqIRAgAiERQQIhAEEBIQoDQCAAIQMgECENQQEhAANAIAAgEWoiDiATTw0HAkAgBSANKgIAIhpfBEAgCCAOTQ0HIAAgD2pBAjoAACAAIBRqQf8BOgAAIAcoAgQgBkYEQCAHQQRqEBUgBygCCCELCyALIAZBA3RqIgEgCjYCBCABIAA2AgAgByAGQQFqIgY2AgwgBiEBDAELIAQgGl9FDQAgCCAOTQ0HIAAgD2pBADoAAAsgDUEEaiENIBggAEEBaiIAakEBRw0ACyAQIBlqIRAgAiAUaiEUIAIgD2ohDyACIBFqIREgAyADIBdJIg1qIQAgAyEKIA0NAAsgAUUNByACQQFqIQ1BASACayEQIAJBf3MhESACRQ0GA0AgByABQQFrIgA2AgwgBygCBCEKAkAgCyAAQQN0Ig5qIgMoAgQgAmwgAygCAGoiAyARaiIGIAhPDQAgBiAJaiIPLQAADQAgD0ECOgAAIAYgDGpB/wE6AAAgBygCCCILIA5qIgAgBiACbiIONgIEIAAgBiACIA5sazYCACAHIAE2AgwgASEACwJAIAMgAmsiASAITw0AIAEgCWoiBi0AAA0AIAZBAjoAACABIAxqQf8BOgAAIAEgASACbiIBIAJsayEGIAAgCkYEQCAHQQRqEBULIAcoAggiCyAAQQN0aiIKIAE2AgQgCiAGNgIAIAcgAEEBaiIANgIMCwJAIAMgEGoiASAITw0AIAEgCWoiBi0AAA0AIAZBAjoAACABIAxqQf8BOgAAIAEgASACbiIBIAJsayEGIAcoAgQgAEYEQCAHQQRqEBULIAcoAggiCyAAQQN0aiIKIAE2AgQgCiAGNgIAIAcgAEEBaiIANgIMCwJAIANBAWsiASAITw0AIAEgCWoiBi0AAA0AIAZBAjoAACABIAxqQf8BOgAAIAEgASACbiIBIAJsayEGIAcoAgQgAEYEQCAHQQRqEBULIAcoAggiCyAAQQN0aiIKIAE2AgQgCiAGNgIAIAcgAEEBaiIANgIMCwJAIANBAWoiASAITw0AIAEgCWoiBi0AAA0AIAZBAjoAACABIAxqQf8BOgAAIAEgASACbiIBIAJsayEGIAcoAgQgAEYEQCAHQQRqEBULIAcoAggiCyAAQQN0aiIKIAE2AgQgCiAGNgIAIAcgAEEBaiIANgIMCwJAIAMgFmoiASAITw0AIAEgCWoiBi0AAA0AIAZBAjoAACABIAxqQf8BOgAAIAEgASACbiIBIAJsayEGIAcoAgQgAEYEQCAHQQRqEBULIAcoAggiCyAAQQN0aiIKIAE2AgQgCiAGNgIAIAcgAEEBaiIANgIMCwJAIAIgA2oiASAITw0AIAEgCWoiBi0AAA0AIAZBAjoAACABIAxqQf8BOgAAIAEgASACbiIBIAJsayEGIAcoAgQgAEYEQCAHQQRqEBULIAcoAggiCyAAQQN0aiIKIAE2AgQgCiAGNgIAIAcgAEEBaiIANgIMCyAIIAMgDWoiAU0EQCAAIgENAQwJCyABIAlqIgMtAAAEQCAAIgENAQwJCyADQQI6AAAgASAMakH/AToAACABIAEgAm4iASACbGshAyAHKAIEIABGBEAgB0EEahAVCyAHKAIIIgsgAEEDdGoiBiABNgIEIAYgAzYCACAHIABBAWoiATYCDCABDQALDAcLQQRBgMAAEC0AC0EBIAgQLQALIA0gCBAtAAsgDiAIQaCKwAAQGAALIA4gCEGQisAAEBgACyAOIBNBgIrAABAYAAsgCyABQQN0akEIayEKA0AgByABQQFrIgE2AgwgCCAKKAIAIgIgEWoiAEsEQCAAIAlqIgYtAABFDQQLIAIgCE8iA0UEQCACIAlqIgYtAABFDQMLIAggAiAQaiIASwRAIAAgCWoiBi0AAEUNBAsgCCACQQFrIgBLBEAgACAJaiIGLQAARQ0ECyAIIAJBAWoiAEsEQCAAIAlqIgYtAABFDQQLIAggAiAWaiIASwRAIAAgCWoiBi0AAEUNBAsgA0UEQCACIAlqIgYtAABFDQMLIAggAiANaiIASwRAIAAgCWoiBi0AAEUNBAsgCkEIayEKIAENAAsLIAcoAgQiAARAIAcoAgggAEEDdBA0CyAIBEAgCSAIEDQLIBMEQCAVIBNBAnQQNAsgEiAINgIEIBIgDDYCACAHQRBqJAAMAgsgAiEACyAGQQI6AAAgACAMakH/AToAAEHwicAAEB8ACyASKAIAIBIoAgQgEkEQaiQACy8AAkAgAWlBAUYgAEGAgICAeCABa01xRQ0AIAAEQCAAIAEQNSIBRQ0BCyABDwsAC4ABAQR/IwBBEGsiBSQAAkACQCACIANsIgZBAEgNAAJAIAZFBEBBASEHDAELQQEhCCAGQQEQNiIHRQ0BCyAAIAEgAiADIAQgByAGEAIgAQRAIAAgARA0CyAFIAY2AgQgBSAHNgIADAELIAggBhAtAAsgBSgCACAFKAIEIAVBEGokAAv6AQICfwF+IwBBEGsiAiQAIAJBATsBDCACIAE2AgggAiAANgIEIwBBEGsiASQAIAJBBGoiACkCACEEIAEgADYCDCABIAQ3AgQjAEEQayIAJAAgAUEEaiIBKAIAIgIoAgwhAwJAAkACQAJAIAIoAgQOAgABAgsgAw0BQQEhAkEAIQMMAgsgAw0AIAIoAgAiAigCBCEDIAIoAgAhAgwBCyAAQYCAgIB4NgIAIAAgATYCDCAAQcCSwAAgASgCBCABKAIIIgAtAAggAC0ACRAPAAsgACADNgIEIAAgAjYCACAAQaSSwAAgASgCBCABKAIIIgAtAAggAC0ACRAPAAuuAQECfyMAQRBrIgUkACMAQRBrIgQkACAEQQRqIAAgASACIAMQBSABBEAgACABEDQLAkAgBCgCBCIBIAQoAgwiAE0EQCAEKAIIIQEMAQsgAUEBdCECIAQoAgghAyAARQRAQQIhASADIAIQNAwBCyADIAJBAiAAQQF0IgIQMSIBDQBBAiACEC0ACyAFIAA2AgQgBSABNgIAIARBEGokACAFKAIAIAUoAgQgBUEQaiQAC6AEAQd/IwBBEGsiBCQAIAAhBkEAIQACQCABRQRAQQEhBQwBCyABQQEQNiIFBEAgAUEISQ0BIAFBA3YhBwNAAkACQCAAIAFPDQAgACAFaiICQX9BACAAIAZqIgMtAABBAkYbOgAAIAEgAEEBaksEQCACQQFqQX9BACADQQFqLQAAQQJGGzoAACABIABBAmpLBEAgAkECakF/QQAgA0ECai0AAEECRhs6AAAgASAAQQNqSwRAIAJBA2pBf0EAIANBA2otAABBAkYbOgAAIAEgAEEEaksEQCACQQRqQX9BACADQQRqLQAAQQJGGzoAACABIABBBWpLBEAgAkEFakF/QQAgA0EFai0AAEECRhs6AAAgASAAQQZqSwRAIAJBBmpBf0EAIANBBmotAABBAkYbOgAAIABBB2oiCCABSQ0HIAghAAwGCyAAQQZqIQAMBQsgAEEFaiEADAQLIABBBGohAAwDCyAAQQNqIQAMAgsgAEECaiEADAELIABBAWohAAsgACABQaCJwAAQGAALIAJBB2pBf0EAIANBB2otAABBAkYbOgAAIABBCGohACAHQQFrIgcNAAsMAQtBASABEC0ACyABIAFB+P///wdxIgBHBEADQCAAIAVqQX9BACAAIAZqLQAAQQJGGzoAACAAQQFqIgAgAUkNAAsLIAEEQCAGIAEQNAsgBCABNgIEIAQgBTYCACAEKAIAIAQoAgQgBEEQaiQACyUBAX8gACgCACIBQYCAgIB4ckGAgICAeEcEQCAAKAIEIAEQNAsLFwEBfyAAKAIAIgEEQCAAKAIEIAEQNAsLHwAgAEEIakGwkcAAKQIANwIAIABBqJHAACkCADcCAAsfACAAQQhqQcCRwAApAgA3AgAgAEG4kcAAKQIANwIAC0MAIAAEQCAAIAEQOQALIwBBIGsiACQAIABBADYCGCAAQQE2AgwgAEGQlMAANgIIIABCBDcCECAAQQhqQZiUwAAQJgALHAAgAEEANgIQIABCADcCCCAAQoCAgIDAADcCAAsNACABBEAgACABEDQLCxYAIAAoAgAgASACIAAoAgQoAgwRAwAL5wYBBX8CfwJAAkACQAJAAkACQAJAIABBBGsiBygCACIIQXhxIgRBBEEIIAhBA3EiBRsgAWpPBEAgBUEAIAFBJ2oiBiAESRsNAQJAIAJBCU8EQCACIAMQCSICDQFBAAwKC0EAIQIgA0HM/3tLDQhBECADQQtqQXhxIANBC0kbIQEgAEEIayEGIAVFBEAgBkUgAUGAAklyIAQgAWtBgIAISyABIARPcnINByAADAoLIAQgBmohBQJAIAEgBEsEQCAFQcybwAAoAgBGDQFByJvAACgCACAFRwRAIAUoAgQiCEECcQ0JIAhBeHEiCCAEaiIEIAFJDQkgBSAIEAogBCABayIFQRBPBEAgByABIAcoAgBBAXFyQQJyNgIAIAEgBmoiASAFQQNyNgIEIAQgBmoiBCAEKAIEQQFyNgIEIAEgBRAIDAkLIAcgBCAHKAIAQQFxckECcjYCACAEIAZqIgEgASgCBEEBcjYCBAwIC0HAm8AAKAIAIARqIgQgAUkNCAJAIAQgAWsiBUEPTQRAIAcgCEEBcSAEckECcjYCACAEIAZqIgEgASgCBEEBcjYCBEEAIQVBACEBDAELIAcgASAIQQFxckECcjYCACABIAZqIgEgBUEBcjYCBCAEIAZqIgQgBTYCACAEIAQoAgRBfnE2AgQLQcibwAAgATYCAEHAm8AAIAU2AgAMBwsgBCABayIEQQ9NDQYgByABIAhBAXFyQQJyNgIAIAEgBmoiASAEQQNyNgIEIAUgBSgCBEEBcjYCBCABIAQQCAwGC0HEm8AAKAIAIARqIgQgAUsNBAwGCyADIAEgASADSxsiAwRAIAIgACAD/AoAAAsgBygCACIDQXhxIgcgAUEEQQggA0EDcSIDG2pJDQIgA0UgBiAHT3INBkGsk8AAQS5B3JPAABAcAAtB7JLAAEEuQZyTwAAQHAALQayTwABBLkHck8AAEBwAC0HsksAAQS5BnJPAABAcAAsgByABIAhBAXFyQQJyNgIAIAEgBmoiBSAEIAFrIgFBAXI2AgRBxJvAACABNgIAQcybwAAgBTYCAAsgBkUNACAADAMLIAMQASIBRQ0BIANBfEF4IAcoAgAiAkEDcRsgAkF4cWoiAiACIANLGyICBEAgASAAIAL8CgAACyABIQILIAAQBgsgAgsLEAAgASAAKAIAIAAoAgQQMAsTACAAQdySwAA2AgQgACABNgIAC18BAn8CQAJAIABBBGsoAgAiAkF4cSIDQQRBCCACQQNxIgIbIAFqTwRAIAJBACADIAFBJ2pLGw0BIAAQBgwCC0HsksAAQS5BnJPAABAcAAtBrJPAAEEuQdyTwAAQHAALCxkAAn8gAUEJTwRAIAEgABAJDAELIAAQAQsLPgACQAJ/IAFBCU8EQCABIAAQCQwBCyAAEAELIgFFDQAgAUEEay0AAEEDcUUgAEVyDQAgAUEAIAD8CwALIAELDQAgAEGMksAAIAEQBwsMACAAIAEpAgA3AwALGQAgACABQeSbwAAoAgAiAEECIAAbEQAAAAsJACAAQQA2AgALC48YAgBBgIDAAAv8F2Fzc2VydGlvbiBmYWlsZWQ6IG1pbiA8PSBtYXhzcmMvY2FubnkucnMAc3JjL2h5c3RlcmVzaXMucnMAc3JjL2dhdXNzaWFuX2JsdXIucnMAL3J1c3RjL2RlZDVjMDZjZjIxZDJiOTNiZmZkNWQ4ODRhYTZlOTY5MzRlZTQyMzQvbGlicmFyeS9jb3JlL3NyYy9jbXAucnMAc3JjL2dyYWRpZW50X2NhbGN1bGF0aW9uLnJzAHNyYy9kaWxhdGlvbi5ycwBzcmMvbm9uX21heGltdW1fc3VwcHJlc3Npb24ucnMAbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy9tb2QucnMAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuMTAvc3JjL2RsbWFsbG9jLnJzAGxpYnJhcnkvc3RkL3NyYy9hbGxvYy5ycwAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9vbmNlX2NlbGwtMS4yMS4zL3NyYy9saWIucnMAAFAAEABHAAAAQgQAAAkAAAA7ABAAFAAAAPsAAAAfAAAAOwAQABQAAAAtAQAAGQAAADsAEAAUAAAAHwEAAA0AAAA7ABAAFAAAACABAAANAAAAOwAQABQAAAAhAQAADQAAADsAEAAUAAAAIgEAAA0AAAA7ABAAFAAAAE8AAAAbAAAAOwAQABQAAABQAAAAHwAAADsAEAAUAAAAeAAAABkAAAA7ABAAFAAAAGIAAAAhAAAAOwAQABQAAABFAQAAHwAAADsAEAAUAAAAfAEAAB8AAAA7ABAAFAAAAH4BAAAdAAAAOwAQABQAAAB/AQAAHAAAADsAEAAUAAAAUAEAAB8AAAA7ABAAFAAAAHIBAAAdAAAAOwAQABQAAABzAQAAHAAAADsAEAAUAAAAdAEAABwAAAA7ABAAFAAAAGgBAAANAAAAOwAQABQAAABpAQAADQAAADsAEAAUAAAAagEAAA0AAAA7ABAAFAAAAGsBAAANAAAAOwAQABQAAABHAQAAHQAAADsAEAAUAAAASQEAABwAAAA7ABAAFAAAAI8AAAAbAAAAOwAQABQAAACQAAAAHwAAADsAEAAUAAAAkwAAACIAAAA7ABAAFAAAAJUAAAAiAAAAOwAQABQAAAC9AAAALwAAADsAEAAUAAAAvgAAAC0AAAA7ABAAFAAAAL8AAAAtAAAAOwAQABQAAACfAAAAEQAAADsAEAAUAAAAoAAAABEAAAA7ABAAFAAAAKEAAAARAAAAOwAQABQAAACnAAAAEQAAADsAEAAUAAAA2AAAABsAAAA7ABAAFAAAANkAAAAfAAAAOwAQABQAAADgAAAAGQAAAEtlcm5lbCBzaXplIG11c3QgYmUgb2RkIGFuZCBncmVhdGVyIHRoYW4gMAAAFAQQACoAAAA7ABAAFAAAAJQBAAAJAAAASW5wdXQgYXJyYXkgc2l6ZSBkb2Vzbid0IG1hdGNoIHdpZHRoICogaGVpZ2h0AAAAWAQQAC0AAAA7ABAAFAAAAJEBAAAJAAAAKQAQABEAAACHAAAAHgAAACkAEAARAAAAaAAAABoAAAApABAAEQAAACQAAAAnAAAAKQAQABEAAAAtAAAAGwAAACkAEAARAAAAIwAAACQAAAApABAAEQAAANkAAAAaAAAAKQAQABEAAACyAAAAFwAAACkAEAARAAAAuwAAABkAAAApABAAEQAAALYAAAAZAAAAYXNzZXJ0aW9uIGZhaWxlZDogbWluIDw9IG1heFAAEABHAAAAQgQAAAkAAACYABAAGwAAAA8AAAAWAAAAmAAQABsAAAAQAAAAFgAAAJgAEAAbAAAAEQAAABYAAACYABAAGwAAABIAAAAWAAAAmAAQABsAAAATAAAAFgAAAJgAEAAbAAAAFAAAABYAAACYABAAGwAAABUAAAAWAAAAmAAQABsAAAAWAAAAFgAAAJgAEAAbAAAAHAAAABMAAACYABAAGwAAAB0AAAATAAAAtAAQAA8AAABkAAAADQAAALQAEAAPAAAAXwAAAB8AAAC0ABAADwAAAFQAAAANAAAAtAAQAA8AAABPAAAAHwAAALQAEAAPAAAAMwAAAA0AAAC0ABAADwAAAC4AAAAfAAAAtAAQAA8AAAAeAAAAEQAAALQAEAAPAAAAGQAAABsAAADEABAAHgAAAFoAAAAgAAAAxAAQAB4AAABhAAAAFgAAAMQAEAAeAAAAYgAAABYAAADEABAAHgAAAHkAAAAqAAAAxAAQAB4AAAB6AAAAKgAAAMQAEAAeAAAAdgAAACoAAADEABAAHgAAAHcAAAAqAAAAxAAQAB4AAABxAAAAJgAAAMQAEAAeAAAAcgAAACYAAADEABAAHgAAAG4AAAAmAAAAxAAQAB4AAABvAAAAJgAAAMQAEAAeAAAALgAAABIAAADEABAAHgAAADIAAAANAAAAxAAQAB4AAAAwAAAADQAAAMQAEAAeAAAAEwAAABMAAADEABAAHgAAABQAAAATAAAAxAAQAB4AAAAVAAAAEwAAAMQAEAAeAAAAFgAAABMAAADEABAAHgAAABkAAAATAAAAxAAQAB4AAAAaAAAAEwAAAMQAEAAeAAAAGwAAABMAAADEABAAHgAAABwAAAATAAAAHAAQAAwAAAAoAAAAIAAAABwAEAAMAAAAEgAAABcAAAAcABAADAAAABcAAAAZAAAAHAAQAAwAAAAUAAAAGQAAABwAEAAMAAAAUQAAAB4AAAAcABAADAAAAFIAAAAeAAAATGF6eSBpbnN0YW5jZSBoYXMgcHJldmlvdXNseSBiZWVuIHBvaXNvbmVkAAA8CBAAKgAAAEgBEABaAAAACAMAABkAAAByZWVudHJhbnQgaW5pdAAAgAgQAA4AAABIARAAWgAAAHoCAAANAAAAfP2LMlfmV/kC30S/40jnr21dy9YsUOtjeEGmV3Ebi7ltZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAADICBAAFQAAAN0IEAANAAAALwEQABgAAABkAQAACQAAAAQAAAAMAAAABAAAAAUAAAAGAAAABwAAAAAAAAAIAAAABAAAAAgAAAAJAAAACgAAAAsAAAAMAAAAEAAAAAQAAAANAAAADgAAAA8AAAAQAAAAAAAAAAgAAAAEAAAAEQAAAGFzc2VydGlvbiBmYWlsZWQ6IHBzaXplID49IHNpemUgKyBtaW5fb3ZlcmhlYWQAAAQBEAAqAAAAsQQAAAkAAABhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA8PSBzaXplICsgbWF4X292ZXJoZWFkAAAEARAAKgAAALcEAAANAAAABAAAAAwAAAAEAAAAEgAAAGNhcGFjaXR5IG92ZXJmbG93AAAA/AkQABEAAADjABAAIAAAABwAAAAFAAAAMDAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTIwMjEyMjIzMjQyNTI2MjcyODI5MzAzMTMyMzMzNDM1MzYzNzM4Mzk0MDQxNDI0MzQ0NDU0NjQ3NDg0OTUwNTE1MjUzNTQ1NTU2NTc1ODU5NjA2MTYyNjM2NDY1NjY2NzY4Njk3MDcxNzI3Mzc0NzU3Njc3Nzg3OTgwODE4MjgzODQ4NTg2ODc4ODg5OTA5MTkyOTM5NDk1OTY5Nzk4OTlyYW5nZSBlbmQgaW5kZXggIG91dCBvZiByYW5nZSBmb3Igc2xpY2Ugb2YgbGVuZ3RoIAAA8AoQABAAAAAACxAAIgAAAHNsaWNlIGluZGV4IHN0YXJ0cyBhdCAgYnV0IGVuZHMgYXQgADQLEAAWAAAASgsQAA0AAAByYW5nZSBzdGFydCBpbmRleCAAAGgLEAASAAAAAAsQACIAAABhdHRlbXB0IHRvIGRpdmlkZSBieSB6ZXJvAAAAjAsQABkAAABpbmRleCBvdXQgb2YgYm91bmRzOiB0aGUgbGVuIGlzICBidXQgdGhlIGluZGV4IGlzIAAAsAsQACAAAADQCxAAEgAAAAAAAD8AAAC/AEGUmMAACwEBAHwJcHJvZHVjZXJzAghsYW5ndWFnZQEEUnVzdAAMcHJvY2Vzc2VkLWJ5AwVydXN0Yx0xLjkyLjAgKGRlZDVjMDZjZiAyMDI1LTEyLTA4KQZ3YWxydXMGMC4yMy4zDHdhc20tYmluZGdlbhMwLjIuMTAwICgyNDA1ZWMyYjQpAHQPdGFyZ2V0X2ZlYXR1cmVzBysPbXV0YWJsZS1nbG9iYWxzKxNub250cmFwcGluZy1mcHRvaW50KwdzaW1kMTI4KwtidWxrLW1lbW9yeSsIc2lnbi1leHQrD3JlZmVyZW5jZS10eXBlcysKbXVsdGl2YWx1ZQ==")})}function S(){return p||(p=k().catch(A=>{throw p=null,A})),p}function M(A,I,g,B=5,t=0){0===t&&(t=.3*(.5*(B-1)-1)+.8);const C=Math.floor(B/2),Q=function(A,I){const g=new Float32Array(A),B=Math.floor(A/2);let t=0;for(let C=0;C<A;C++){const A=C-B;g[C]=Math.exp(-A*A/(2*I*I)),t+=g[C]}for(let C=0;C<A;C++)g[C]/=t;return g}(B,t),i=new Uint8ClampedArray(I*g),e=new Uint8ClampedArray(I*g);for(let n=0;n<g;n++){const g=n*I;for(let B=0;B<I;B++){let t=0;for(let i=-C;i<=C;i++){t+=A[g+Math.min(I-1,Math.max(0,B+i))]*Q[C+i]}i[g+B]=t}}for(let n=0;n<I;n++)for(let A=0;A<g;A++){let B=0;for(let t=-C;t<=C;t++){B+=i[Math.min(g-1,Math.max(0,A+t))*I+n]*Q[C+t]}e[A*I+n]=Math.round(B)}return e}function b(A,I,g,B,t){const C=new Uint8Array(I*g),Q=[];for(let n=1;n<g-1;n++)for(let g=1;g<I-1;g++){const i=n*I+g,e=A[i];e>=t?(C[i]=2,Q.push({x:g,y:n})):C[i]=e>=B?0:1}for(let n=0;n<I;n++)C[n]=1,C[(g-1)*I+n]=1;for(let n=1;n<g-1;n++)C[n*I]=1,C[n*I+I-1]=1;const i=[-1,0,1,-1,1,-1,0,1],e=[-1,-1,-1,0,0,1,1,1];for(;Q.length>0;){const{x:A,y:g}=Q.pop();for(let B=0;B<8;B++){const t=A+i[B],n=g+e[B],o=n*I+t;0===C[o]&&(C[o]=2,Q.push({x:t,y:n}))}}return C}async function L(A,g={}){const B=!(!g.debug||g.debug._timingsOnly),t=[],C=performance.now();let Q,i,e;if(g.skipGrayscale||!1)Q=g.width,i=g.height,e=A,B&&(g.debug.grayscale=e);else{Q=A.width,i=A.height;let I=performance.now();e=function(A){const{width:I,height:g,data:B}=A,t=new Uint8ClampedArray(I*g);for(let C=0,Q=0;C<B.length;C+=4,Q++)t[Q]=54*B[C]+183*B[C+1]+19*B[C+2]>>8;return t}(A);let C=performance.now();t.push({step:"Grayscale",ms:(C-I).toFixed(2)}),B&&(g.debug.grayscale=e)}let n=void 0!==g.lowThreshold?g.lowThreshold:null,o=void 0!==g.highThreshold?g.highThreshold:null;if(null===n||null===o){const A=1024,I=new Uint32Array(A);let g=0;for(let n=1;n<i-1;n++)for(let B=1;B<Q-1;B++){const t=n*Q+B,C=-e[t-Q-1]+e[t-Q+1]-2*e[t-1]+2*e[t+1]-e[t+Q-1]+e[t+Q+1],i=-e[t-Q-1]-2*e[t-Q]-e[t-Q+1]+e[t+Q-1]+2*e[t+Q]+e[t+Q+1];let o=Math.abs(C)+Math.abs(i);o>=A&&(o=A-1),o>0&&(I[o]++,g++)}const B=Math.round(.7*g);let t=0,C=75;for(let Q=1;Q<A;Q++)if(t+=I[Q],t>=B){C=Q;break}null===n&&(n=Math.max(5,Math.round(.5*C))),null===o&&(o=Math.min(500,Math.round(1.5*C)))}const E=g.kernelSize||5,a=g.sigma||0,s=void 0!==g.L2gradient&&g.L2gradient,c=void 0===g.applyDilation||g.applyDilation,r=g.dilationKernelSize||5,h=void 0!==g.useWasmHysteresis&&g.useWasmHysteresis,w=void 0!==g.useWasmFullCanny&&g.useWasmFullCanny;if(n>=o&&([n,o]=[o,n]),w)try{await S();const A=performance.now(),h=new Uint8ClampedArray(function(A,g,B,t,C,Q,i,e,n,o){const E=y(A,I.__wbindgen_malloc),a=l,s=I.canny_edge_detector_full(E,a,g,B,t,C,Q,i,e,n,o);var c=d(s[0],s[1]).slice();return I.__wbindgen_free(s[0],1*s[1],1),c}(e,Q,i,n,o,E,a,s,c,r)),w=(performance.now()-A).toFixed(2);t.push({step:"Edge Processing (WASM)",ms:w}),B&&(g.debug.finalEdges=h),g.debug?g.debug.timings=t:g.debug={timings:t};const D=performance.now();return t.unshift({step:"Edge Detection Total",ms:(D-C).toFixed(2)}),h}catch(Y){if(!F){F=!0;Y instanceof Error?Y.message:String(Y)}}let D,u,m,R,p,J;D=performance.now();try{await S(),m=function(A,g,B,t,C){const Q=y(A,I.__wbindgen_malloc),i=l,e=I.blur(Q,i,g,B,t,C);var n=d(e[0],e[1]).slice();return I.__wbindgen_free(e[0],1*e[1],1),n}(e,Q,i,E,a)}catch(q){m=M(e,Q,i,E,a)}u=performance.now(),t.push({step:"Gaussian Blur",ms:(u-D).toFixed(2)}),B&&(g.debug.blurred=m),D=performance.now();{const A=function(A,I,g){const B=new Int16Array(I*g),t=new Int16Array(I*g);for(let C=1;C<g-1;C++){const g=C*I,Q=(C-1)*I,i=(C+1)*I;for(let C=1;C<I-1;C++){const I=g+C,e=A[Q+C-1],n=A[Q+C],o=A[Q+C+1],E=A[g+C-1],a=A[g+C+1],s=A[i+C-1],c=A[i+C],r=A[i+C+1],h=o-e+2*(a-E)+(r-s),l=s+2*c+r-(e+2*n+o);B[I]=h,t[I]=l}}return{dx:B,dy:t}}(m,Q,i);R=A.dx,p=A.dy}u=performance.now(),t.push({step:"Gradients",ms:(u-D).toFixed(2)}),D=performance.now();try{await S(),J=await N(R,p,Q,i,s)}catch(q){J=function(A,I,g,B,t){const C=new Float32Array(g*B),Q=new Float32Array(g*B);for(let i=0;i<A.length;i++){const g=A[i],B=I[i];C[i]=t?Math.sqrt(g*g+B*B):Math.abs(g)+Math.abs(B)}for(let i=1;i<B-1;i++)for(let B=1;B<g-1;B++){const t=i*g+B,e=C[t];if(0===e){Q[t]=0;continue}const n=A[t],o=I[t];let E=0,a=0;const s=Math.abs(n),c=Math.abs(o);if(c>2.4142*s)E=C[t-g],a=C[t+g];else if(s>2.4142*c)E=C[t-1],a=C[t+1];else{const A=(n^o)<0?-1:1;o>0?(E=C[(i-1)*g+(B-A)],a=C[(i+1)*g+(B+A)]):(E=C[(i+1)*g+(B-A)],a=C[(i-1)*g+(B+A)]),n>0&&o>0||n<0&&o<0?(E=C[(i-1)*g+(B+1)],a=C[(i+1)*g+(B-1)]):(E=C[(i-1)*g+(B-1)],a=C[(i+1)*g+(B+1)])}Q[t]=e>=E&&e>=a?e:0}return Q}(R,p,Q,i,s)}u=performance.now(),t.push({step:"Non-Max Suppression",ms:(u-D).toFixed(2)}),D=performance.now();const G=s?n*n:n,k=s?o*o:o;let L;if(h)try{await S(),L=f(J,Q,i,G,k)}catch(q){L=b(J,Q,i,G,k)}else L=b(J,Q,i,G,k);u=performance.now(),t.push({step:"Hysteresis",ms:(u-D).toFixed(2)}),D=performance.now();const x=new Uint8ClampedArray(Q*i);for(let I=0;I<L.length;I++)x[I]=2===L[I]?255:0;u=performance.now(),t.push({step:"Binary Image",ms:(u-D).toFixed(2)}),D=performance.now();let U=x;if(c)try{await S(),U=function(A,g,B,t){const C=y(A,I.__wbindgen_malloc),Q=l,i=I.dilate(C,Q,g,B,t);var e=d(i[0],i[1]).slice();return I.__wbindgen_free(i[0],1*i[1],1),e}(x,Q,i,r)}catch(q){U=function(A,I,g,B=5){const t=Math.floor(B/2),C=new Uint8ClampedArray(I*g),Q=new Uint8ClampedArray(I*g);for(let i=0;i<g;i++){const g=i*I;for(let B=0;B<I;B++){let Q=0;for(let C=-t;C<=t;C++){const t=B+C;if(t>=0&&t<I){const I=A[g+t];I>Q&&(Q=I)}}C[g+B]=Q}}for(let i=0;i<I;i++)for(let A=0;A<g;A++){let B=0;for(let Q=-t;Q<=t;Q++){const t=A+Q;if(t>=0&&t<g){const A=C[t*I+i];A>B&&(B=A)}}Q[A*I+i]=B}return Q}(x,Q,i,r)}if(u=performance.now(),t.push({step:"Dilation",ms:(u-D).toFixed(2)}),B){g.debug.dx=R,g.debug.dy=p;const A=new Float32Array(Q*i);for(let I=0;I<R.length;I++){const g=R[I],B=p[I];A[I]=s?Math.sqrt(g*g+B*B):Math.abs(g)+Math.abs(B)}g.debug.magnitude=A,g.debug.suppressed=J,g.debug.edgeMap=L,g.debug.cannyEdges=x,g.debug.finalEdges=U}g.debug?g.debug.timings=t:g.debug||(g.debug={timings:t});const H=performance.now();return t.unshift({step:"Edge Detection Total",ms:(H-C).toFixed(2)}),U}function x(A){return{topLeft:{x:A.topLeft.x,y:A.topLeft.y},topRight:{x:A.topRight.x,y:A.topRight.y},bottomRight:{x:A.bottomRight.x,y:A.bottomRight.y},bottomLeft:{x:A.bottomLeft.x,y:A.bottomLeft.y}}}function U(A,I){return Math.hypot(A.x-I.x,A.y-I.y)}function H(A,I=4){const g=[A?.topLeft,A?.topRight,A?.bottomRight,A?.bottomLeft];if(g.some(A=>!A||!Number.isFinite(A.x)||!Number.isFinite(A.y)))return!1;for(let B=0;B<g.length;B++)for(let A=B+1;A<g.length;A++)if(U(g[B],g[A])<I)return!1;return!0}function Y(A){const I=[A.topLeft,A.topRight,A.bottomRight,A.bottomLeft],g=[];for(let t=0;t<I.length;t++){const A=I[t],B=I[(t+1)%I.length],C=I[(t+2)%I.length],Q=(B.x-A.x)*(C.y-B.y)-(B.y-A.y)*(C.x-B.x);Math.abs(Q)<1e-6||g.push(Math.sign(Q))}if(g.length<3)return!1;const B=g[0];return g.every(A=>A===B)}var q="scanic-corner-editor-styles",v='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 4 3 10 9 10"/><path d="M3.5 14a8.5 8.5 0 1 0 2-7.4L3 10"/></svg>',K='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>',T='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>',W='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></svg>';var P,Z,X,V,j,O,z,_=((A,I)=>{let B={};for(var t in A)g(B,t,{get:A[t],enumerable:!0});return I||g(B,Symbol.toStringTag,{value:"Module"}),B})({detectDocumentMl:()=>IA,initializeMl:()=>gA});async function $(){return O||(O=import("onnxruntime-web").catch(A=>{throw O=null,new Error(`scanic: the 'ml' detector requires the optional 'onnxruntime-web' dependency. Install it alongside scanic: \`npm install onnxruntime-web\`. (original error: ${A?.message||A})`)})),O}async function AA(A){const I=(g=A.assetBaseUrl||j).endsWith("/")?g:`${g}/`;var g;const B=A.modelUrl||`${I}doccornernet_lean.ort`;if(z.has(B))return z.get(B);const t=(async()=>{const g=await $();g.env.wasm.wasmPaths=A.wasmPaths||I,void 0!==A.numThreads?g.env.wasm.numThreads=A.numThreads:g.env.wasm.numThreads=1,g.env.wasm.proxy=!1;const t=A.modelBytes||new Uint8Array(await(await fetch(B)).arrayBuffer());return{ort:g,session:await g.InferenceSession.create(t,{executionProviders:["wasm"],graphOptimizationLevel:"all"})}})();z.set(B,t);try{return await t}catch(C){throw z.delete(B),C}}async function IA(A,I={}){const g=[],{width:B,height:t}=function(A){if(A&&"number"==typeof A.width&&"number"==typeof A.height&&A.data)return{width:A.width,height:A.height};if(A)return{width:A.width||A.naturalWidth,height:A.height||A.naturalHeight};throw new Error("No image provided")}(A);let C=("undefined"!=typeof performance?performance:Date).now();const{session:Q}=await AA(I);g.push({step:"ML Session Load",ms:(("undefined"!=typeof performance?performance:Date).now()-C).toFixed(2)});const i=await $();C=("undefined"!=typeof performance?performance:Date).now();const e=I.inputData||function(A){const I="undefined"!=typeof OffscreenCanvas,g=I?new OffscreenCanvas(P,P):document.createElement("canvas");I||(g.width=P,g.height=P);const B=g.getContext("2d",{willReadFrequently:!0});if(B.imageSmoothingEnabled=!0,B.imageSmoothingQuality="medium",A&&"number"==typeof A.width&&"number"==typeof A.height&&A.data){const g=I?new OffscreenCanvas(A.width,A.height):document.createElement("canvas");I||(g.width=A.width,g.height=A.height),g.getContext("2d").putImageData(A,0,0),B.drawImage(g,0,0,A.width,A.height,0,0,P,P)}else{const I=A.width||A.naturalWidth,g=A.height||A.naturalHeight;B.drawImage(A,0,0,I,g,0,0,P,P)}const{data:t}=B.getImageData(0,0,P,P),C=new Float32Array(P*P*3);for(let Q=0,i=0;Q<t.length;Q+=4,i+=3)C[i]=(t[Q]/255-Z[0])/X[0],C[i+1]=(t[Q+1]/255-Z[1])/X[1],C[i+2]=(t[Q+2]/255-Z[2])/X[2];return C}(A),n=new i.Tensor("float32",e,[1,P,P,3]);g.push({step:"ML Preprocess",ms:(("undefined"!=typeof performance?performance:Date).now()-C).toFixed(2)}),C=("undefined"!=typeof performance?performance:Date).now();const o=await Q.run({[Q.inputNames[0]]:n});g.push({step:"ML Inference",ms:(("undefined"!=typeof performance?performance:Date).now()-C).toFixed(2)});const E=function(A,I,g){let B=null,t=null;for(const i in A){const I=A[i].data;8===I.length?B=I:1===I.length&&(t=I[0])}if(!B)return null;const C={};for(let i=0;i<4;i++)C[V[i]]={x:B[2*i]*I,y:B[2*i+1]*g};return{corners:C,score:null===t?null:(Q=t,1/(1+Math.exp(-Q)))};var Q}(o,B,t);if(!E)return{success:!1,corners:null,confidence:null,score:null,message:"ML model produced no coordinates",timings:g};const a=void 0!==I.minScore?I.minScore:.5,s=null===E.score||E.score>=a;return{success:s,corners:E.corners,confidence:E.score,score:E.score,message:s?"Document detected (ml)":"No confident document (ml)",timings:g}}async function gA(A={}){await AA(A)}var BA,tA,CA=(BA=()=>{P=224,Z=[.485,.456,.406],X=[.229,.224,.225],V=["topLeft","topRight","bottomRight","bottomLeft"],j="https://cdn.jsdelivr.net/npm/scanic-ml@0.1.0/dist/",O=null,z=new Map},()=>(BA&&(tA=BA(BA=0)),tA));function QA(A){return A<=0?0:A>=1?1:A}function iA(A,I){return Math.hypot(A.x-I.x,A.y-I.y)}function eA(A){return[iA(A.topLeft,A.topRight),iA(A.topRight,A.bottomRight),iA(A.bottomRight,A.bottomLeft),iA(A.bottomLeft,A.topLeft)]}function nA(A){const I=function(A){const I=[A.topLeft,A.topRight,A.bottomRight,A.bottomLeft],g=[];for(let B=0;B<I.length;B++){const A=I[(B+I.length-1)%I.length],t=I[B],C=I[(B+1)%I.length],Q=A.x-t.x,i=A.y-t.y,e=C.x-t.x,n=C.y-t.y,o=Q*e+i*n,E=Math.max(1e-6,Math.hypot(Q,i)*Math.hypot(e,n)),a=Math.max(-1,Math.min(1,o/E));g.push(180*Math.acos(a)/Math.PI)}return g}(A);let g=0;for(const B of I){g+=QA(1-Math.abs(B-90)/55)}return g/Math.max(1,I.length)}function oA(A,I){const g=Number(I.isValid)-Number(A.isValid);if(0!==g)return g;const B=I.confidence-A.confidence;if(!(Math.abs(B)<.015)&&0!==B)return B;const t=Math.abs((A.approxCount??99)-4)-Math.abs((I.approxCount??99)-4);if(0!==t)return t;const C=(I.rightAngleScore??0)-(A.rightAngleScore??0);if(Math.abs(C)>1e-6)return C;const Q=Math.abs(1-(A.contourFitRatio??1))-Math.abs(1-(I.contourFitRatio??1));return Math.abs(Q)>1e-6?Q:B||I.score-A.score||I.coverageRatio-A.coverageRatio||I.area-A.area}function EA(A,I,g,B,t={}){const C=t.epsilon||.02,Q=o(A.points,C).length,i=s(A,{epsilon:C});if(!i)return{contour:A,corners:null,score:0,confidence:0,isValid:!1,area:A.area||0,fillRatio:0,coverageRatio:0,cornersArea:0,approxCount:Q,convex:!1,edgeSupport:0,aspectRatio:1/0,minSide:0,rightAngleScore:0,oppositeSideConsistency:0,contourFitRatio:0,contourFitScore:0};const e=g*B,n=A.area||0,E=A.boundingBox||{minX:0,minY:0,maxX:0,maxY:0},a=n/Math.max(1,(E.maxX-E.minX+1)*(E.maxY-E.minY+1)),c=function(A){if(!A)return 0;const I=[A.topLeft,A.topRight,A.bottomRight,A.bottomLeft];let g=0;for(let B=0;B<I.length;B++){const A=(B+1)%I.length;g+=I[B].x*I[A].y-I[A].x*I[B].y}return Math.abs(g)/2}(i),r=c/Math.max(1,e),h=eA(i),l=Math.min(...h),y=(h[0]+h[2])/2,d=(h[1]+h[3])/2,w=y>d?y/Math.max(1e-6,d):d/Math.max(1e-6,y),D=function(A){const I=[A.topLeft,A.topRight,A.bottomRight,A.bottomLeft],g=[];for(let t=0;t<I.length;t++){const A=I[t],B=I[(t+1)%I.length],C=I[(t+2)%I.length],Q=(B.x-A.x)*(C.y-B.y)-(B.y-A.y)*(C.x-B.x);Math.abs(Q)<1e-6||g.push(Math.sign(Q))}if(g.length<3)return!1;const B=g[0];return g.every(A=>A===B)}(i),f=function(A,I,g,B){if(!A?.points||0===A.points.length)return 0;const t=Math.max(1,Math.floor(A.points.length/240));let C=0,Q=0;for(let i=0;i<A.points.length;i+=t){const t=A.points[i],e=Math.max(0,Math.min(g-1,0|t.x)),n=Math.max(0,Math.min(B-1,0|t.y));C++;let o=!1;for(let A=-1;A<=1&&!o;A++){const t=n+A;if(!(t<0||t>=B))for(let A=-1;A<=1;A++){const B=e+A;if(!(B<0||B>=g)&&I[t*g+B]>0){o=!0;break}}}o&&Q++}return 0===C?0:Q/C}(A,I,g,B),u=nA(i),m=function(A){const I=eA(A);return(Math.min(I[0],I[2])/Math.max(1e-6,Math.max(I[0],I[2]))+Math.min(I[1],I[3])/Math.max(1e-6,Math.max(I[1],I[3])))/2}(i),N=n/Math.max(1,c),R=QA(1-Math.abs(N-1)/.55),p=4===Q?1:5===Q?.9:6===Q?.7:Q<=8?.5:.28,F=QA(n/Math.max(1,.4*e)),J=QA((a-.08)/.72),G=QA((r-.03)/.82),k=void 0!==t.minDocumentSideRatio?t.minDocumentSideRatio:.06,S=void 0!==t.minDocumentCoverageRatio?t.minDocumentCoverageRatio:.04,M=void 0!==t.maxDocumentAspectRatio?t.maxDocumentAspectRatio:8,b=void 0!==t.minDocumentFillRatio?t.minDocumentFillRatio:.07,L=void 0!==t.minContourFitRatio?t.minContourFitRatio:.11,x=void 0!==t.maxContourFitRatio?t.maxContourFitRatio:1.2,U=void 0!==t.minRightAngleScore?t.minRightAngleScore:.42,H=void 0!==t.minOppositeSideConsistency?t.minOppositeSideConsistency:.3,Y=Math.min(g,B)*k,q=function(A,I=6){const g=[A?.topLeft,A?.topRight,A?.bottomRight,A?.bottomLeft];if(g.some(A=>!A||!Number.isFinite(A.x)||!Number.isFinite(A.y)))return!1;for(let B=0;B<g.length;B++)for(let A=B+1;A<g.length;A++)if(iA(g[B],g[A])<I)return!1;return!0}(i)&&D&&l>=Y&&r>=S&&w<=M&&a>=b&&N>=L&&N<=x&&u>=U&&m>=H,v=.22*F+.14*J+.15*p+.08*(D?1:0)+.08*f+.13*G+.1*u+.05*m+.05*R;return{contour:A,corners:i,score:v,confidence:q?v:.33*v,isValid:q,area:n,fillRatio:a,coverageRatio:r,cornersArea:c,approxCount:Q,convex:D,edgeSupport:f,aspectRatio:w,minSide:l,rightAngleScore:u,oppositeSideConsistency:m,contourFitRatio:N,contourFitScore:R}}async function aA(A,I,g,B,t={}){const Q=t.debug?{}:{_timingsOnly:!0},i=[];Q&&!Q._timingsOnly&&(Q.preprocessing={scaledDimensions:{width:I,height:g},scaleFactor:B,maxProcessingDimension:t.maxProcessingDimension||800});const e=function(A={}){const I=A.dilationKernelSize||3,g=A.dilationIterations||1,B=void 0===A.applyDilation||A.applyDilation,t=[{name:"default",lowThreshold:A.lowThreshold,highThreshold:A.highThreshold,dilationKernelSize:I,dilationIterations:g,applyDilation:B}];if(!1===A.enableDetectionCascade)return t;t.push({name:"connect-edges",lowThreshold:A.lowThreshold,highThreshold:A.highThreshold,dilationKernelSize:Math.max(I,5),dilationIterations:Math.max(g,2),applyDilation:!0}),t.push({name:"no-dilation",lowThreshold:A.lowThreshold,highThreshold:A.highThreshold,dilationKernelSize:I,dilationIterations:g,applyDilation:!1}),void 0===A.lowThreshold&&void 0===A.highThreshold&&t.push({name:"fixed-mid-thresholds",lowThreshold:60,highThreshold:180,dilationKernelSize:I,dilationIterations:g,applyDilation:B});const C=[],Q=new Set;for(const i of t){const A=[i.lowThreshold,i.highThreshold,i.dilationKernelSize,i.dilationIterations,i.applyDilation].join(":");Q.has(A)||(Q.add(A),C.push(i))}return C}(t),n=[],o=async(Q,e)=>{const n=Q.name||`pass-${e+1}`,o=0===e?"":` (${n})`,E=t.debug?{}:{_timingsOnly:!0},a=await L(A,{width:I,height:g,lowThreshold:Q.lowThreshold,highThreshold:Q.highThreshold,dilationKernelSize:Q.dilationKernelSize,dilationIterations:Q.dilationIterations,applyDilation:Q.applyDilation,debug:E,skipGrayscale:!0,useWasmBlur:!0,useWasmHysteresis:t.useWasmHysteresis,useWasmFullCanny:t.useWasmFullCanny});E.timings&&E.timings.forEach(A=>{"Edge Detection Total"!==A.step&&i.push({step:`${A.step}${o}`,ms:A.ms})});let s=performance.now();const c=C(a,{minArea:(t.minArea||1e3)/(B*B),width:I,height:g});i.push({step:`Find Contours${o}`,ms:(performance.now()-s).toFixed(2)}),s=performance.now();const{best:r,candidates:h}=function(A,I,g,B,t={}){const C=t.maxCandidateContours||12,Q=A.slice(0,C).map((A,C)=>({rankByArea:C,...EA(A,I,g,B,t)})).sort(oA);return{best:Q[0]||null,candidates:Q}}(c,a,I,g,t);return i.push({step:`Corner Detection${o}`,ms:(performance.now()-s).toFixed(2)}),{name:n,params:{lowThreshold:Q.lowThreshold,highThreshold:Q.highThreshold,dilationKernelSize:Q.dilationKernelSize,dilationIterations:Q.dilationIterations,applyDilation:Q.applyDilation},contours:c,best:r,candidates:h}},E=await o(e[0],0);if(n.push(E),function(A,I={}){if(!1===I.enableDetectionCascade)return!1;if(!A||!A.corners)return!0;const g=void 0!==I.minCascadeTriggerConfidence?I.minCascadeTriggerConfidence:.68;return!A.isValid||A.confidence<g||A.approxCount>5||A.rightAngleScore<.55||A.contourFitRatio<.14}(E.best,t))for(let C=1;C<e.length;C++)n.push(await o(e[C],C));const a=[];for(const C of n)for(const A of C.candidates)a.push({...A,passName:C.name,passParams:C.params});a.sort(oA);const s=a[0]||null,c=a;if(!s||!s.corners)return{success:!1,message:"No document detected",debug:Q._timingsOnly?null:Q,timings:i};Q&&!Q._timingsOnly&&(Q.passes=n.map(A=>({name:A.name,params:A.params,contourCount:A.contours.length,bestCandidate:A.best?{score:A.best.score,confidence:A.best.confidence,isValid:A.best.isValid,approxCount:A.best.approxCount,coverageRatio:A.best.coverageRatio,fillRatio:A.best.fillRatio,rightAngleScore:A.best.rightAngleScore,contourFitRatio:A.best.contourFitRatio}:null})),Q.candidates=c.map(A=>({passName:A.passName,rankByArea:A.rankByArea,area:A.area,fillRatio:A.fillRatio,coverageRatio:A.coverageRatio,cornersArea:A.cornersArea,approxCount:A.approxCount,convex:A.convex,edgeSupport:A.edgeSupport,aspectRatio:A.aspectRatio,minSide:A.minSide,rightAngleScore:A.rightAngleScore,oppositeSideConsistency:A.oppositeSideConsistency,contourFitRatio:A.contourFitRatio,contourFitScore:A.contourFitScore,score:A.score,confidence:A.confidence,isValid:A.isValid})),Q.selectedCandidate=c[0]?{passName:c[0].passName,rankByArea:c[0].rankByArea,area:c[0].area,fillRatio:c[0].fillRatio,coverageRatio:c[0].coverageRatio,approxCount:c[0].approxCount,edgeSupport:c[0].edgeSupport,aspectRatio:c[0].aspectRatio,minSide:c[0].minSide,rightAngleScore:c[0].rightAngleScore,oppositeSideConsistency:c[0].oppositeSideConsistency,contourFitRatio:c[0].contourFitRatio,score:c[0].score,confidence:c[0].confidence,isValid:c[0].isValid}:null);const r=s.corners,h=s.contour;let l=r;return 1!==B&&(l={topLeft:{x:r.topLeft.x*B,y:r.topLeft.y*B},topRight:{x:r.topRight.x*B,y:r.topRight.y*B},bottomRight:{x:r.bottomRight.x*B,y:r.bottomRight.y*B},bottomLeft:{x:r.bottomLeft.x*B,y:r.bottomLeft.y*B}}),{success:!0,contour:h,corners:l,confidence:s.confidence,debug:Q._timingsOnly?null:Q,timings:i}}function sA(A,I,g){const{topLeft:B,topRight:t,bottomRight:C,bottomLeft:Q}=g,i=Math.hypot(C.x-Q.x,C.y-Q.y),e=Math.hypot(t.x-B.x,t.y-B.y),n=Math.round(Math.max(i,e)),o=Math.hypot(t.x-C.x,t.y-C.y),E=Math.hypot(B.x-Q.x,B.y-Q.y),a=Math.round(Math.max(o,E));A.canvas.width=n,A.canvas.height=a,function(A,I,g,B,t){const C=I&&"number"==typeof I.width&&"number"==typeof I.height&&I.data,Q=I.width||I.naturalWidth,i=I.height||I.naturalHeight,e=document.createElement("canvas");e.width=Q,e.height=i;const n=e.getContext("2d",{willReadFrequently:!0});C?n.putImageData(I,0,0):n.drawImage(I,0,0,Q,i);const o=n.getImageData(0,0,Q,i).data,E=function(A){const I=A[0][0],g=A[0][1],B=A[0][2],t=A[1][0],C=A[1][1],Q=A[1][2],i=A[2][0],e=A[2][1],n=A[2][2],o=C*n-Q*e,E=-(t*n-Q*i),a=t*e-C*i,s=-(g*n-B*e),c=I*n-B*i,r=-(I*e-g*i),h=g*Q-B*C,l=-(I*Q-B*t),y=I*C-g*t,d=I*o+g*E+B*a;if(0===d)throw new Error("Singular matrix");return[[o/d,s/d,h/d],[E/d,c/d,l/d],[a/d,r/d,y/d]]}(g),a=E[0][0],s=E[0][1],c=E[0][2],r=E[1][0],h=E[1][1],l=E[1][2],y=E[2][0],d=E[2][1],w=E[2][2],D=A.createImageData(B,t),f=D.data,u=Q-1,m=i-1;for(let N=0;N<t;N++){const A=s*N+c,I=h*N+l,g=d*N+w;for(let t=0;t<B;t++){const C=1/(y*t+g),i=(a*t+A)*C,e=(r*t+I)*C,n=i<0?0:i>u?u:i,E=e<0?0:e>m?m:e,s=0|n,c=0|E,h=s<u?s+1:s,l=c<m?c+1:c,d=n-s,w=E-c,D=1-d,R=1-w,p=D*R,F=d*R,J=D*w,G=d*w,k=c*Q+s<<2,S=c*Q+h<<2,M=l*Q+s<<2,b=l*Q+h<<2,L=N*B+t<<2;f[L]=o[k]*p+o[S]*F+o[M]*J+o[b]*G+.5|0,f[L+1]=o[k+1]*p+o[S+1]*F+o[M+1]*J+o[b+1]*G+.5|0,f[L+2]=o[k+2]*p+o[S+2]*F+o[M+2]*J+o[b+2]*G+.5|0,f[L+3]=255}}A.putImageData(D,0,0)}(A,I,function(A,I){const g=function(A,I){const g=A.length,B=A[0].length,t=A.map(A=>A.slice()),C=I.slice();for(let i=0;i<B;i++){let A=i;for(let I=i+1;I<g;I++)Math.abs(t[I][i])>Math.abs(t[A][i])&&(A=I);[t[i],t[A]]=[t[A],t[i]],[C[i],C[A]]=[C[A],C[i]];for(let I=i+1;I<g;I++){const A=t[I][i]/t[i][i];for(let g=i;g<B;g++)t[I][g]-=A*t[i][g];C[I]-=A*C[i]}}const Q=new Array(B);for(let i=B-1;i>=0;i--){let A=C[i];for(let I=i+1;I<B;I++)A-=t[i][I]*Q[I];Q[i]=A/t[i][i]}return Q}(function(A){const g=[];for(let B=0;B<4;B++){const[t,C]=A[B];g.push([t,C,1,0,0,0,-t*I[B][0],-C*I[B][0]]),g.push([0,0,0,t,C,1,-t*I[B][1],-C*I[B][1]])}return g}(A),[I[0][0],I[0][1],I[1][0],I[1][1],I[2][0],I[2][1],I[3][0],I[3][1]]);return[[g[0],g[1],g[2]],[g[3],g[4],g[5]],[g[6],g[7],1]]}([[B.x,B.y],[t.x,t.y],[C.x,C.y],[Q.x,Q.y]],[[0,0],[n-1,0],[n-1,a-1],[0,a-1]]),n,a)}async function cA(A,I,g={}){const B=g.output||"canvas";if(!(I&&I.topLeft&&I.topRight&&I.bottomRight&&I.bottomLeft))return{output:null,corners:null,success:!1,message:"Invalid corner points provided"};try{const g=document.createElement("canvas");let t;return sA(g.getContext("2d"),A,I),t="canvas"===B?g:"imagedata"===B?g.getContext("2d").getImageData(0,0,g.width,g.height):"dataurl"===B?g.toDataURL():g,{output:t,corners:I,success:!0,message:"Document extracted successfully"}}catch(t){return{output:null,corners:I,success:!1,message:`Extraction failed: ${t.message}`}}}async function rA(A,I={}){const g=[],B=performance.now(),t=I.mode||"detect",C=I.output||"canvas";I.debug;const Q=I.maxProcessingDimension||800;let i,e,n,o;if("ml"===(I.detector||"classical")){e=performance.now();const{detectDocumentMl:B}=await Promise.resolve().then(()=>(CA(),_));i=await B(A,I.ml||{}),g.push({step:"ML Detection Total",ms:(performance.now()-e).toFixed(2)}),i.timings&&i.timings.forEach(A=>g.push(A))}else{e=performance.now();const{grayscaleData:B,scaleFactor:t,scaledDimensions:C}=await async function(A,I=800){let g,B;const t=A&&"number"==typeof A.width&&"number"==typeof A.height&&A.data;if(t)g=A.width,B=A.height;else{if(!A)throw new Error("No image provided");g=A.width||A.naturalWidth,B=A.height||A.naturalHeight}const C=Math.max(g,B);let Q,i,e;if(C<=I)Q=g,i=B,e=1;else{const A=I/C;Q=Math.round(g*A),i=Math.round(B*A),e=1/A}const n="undefined"!=typeof OffscreenCanvas,o=n?new OffscreenCanvas(Q,i):document.createElement("canvas");n||(o.width=Q,o.height=i);const E=o.getContext("2d",{willReadFrequently:!0});if(E.imageSmoothingEnabled=!0,E.imageSmoothingQuality="medium",t){const I=n?new OffscreenCanvas(g,B):document.createElement("canvas");n||(I.width=g,I.height=B),I.getContext("2d").putImageData(A,0,0),E.drawImage(I,0,0,g,B,0,0,Q,i)}else E.drawImage(A,0,0,g,B,0,0,Q,i);const a=E.getImageData(0,0,Q,i),s=a.data,c=new Uint8ClampedArray(Q*i);for(let r=0,h=0;r<s.length;r+=4,h++){const A=54*s[r]+183*s[r+1]+19*s[r+2]>>8;c[h]=A,s[r]=s[r+1]=s[r+2]=A}return{grayscaleData:c,imageData:a,scaleFactor:e,originalDimensions:{width:g,height:B},scaledDimensions:{width:Q,height:i}}}(A,Q);g.push({step:"Image Prep + Scale + Gray",ms:(performance.now()-e).toFixed(2)}),i=await aA(B,C.width,C.height,t,I),i.timings&&i.timings.forEach(A=>g.push(A))}if(!i.success){const A=performance.now();return g.unshift({step:"Total",ms:(A-B).toFixed(2)}),{output:null,corners:null,contour:null,confidence:i.confidence||null,score:i.score??null,debug:i.debug,success:!1,message:i.message||"No document detected",timings:g}}"detect"===t?o=null:"extract"===t&&(e=performance.now(),n=document.createElement("canvas"),sA(n.getContext("2d"),A,i.corners),g.push({step:"Perspective Transform",ms:(performance.now()-e).toFixed(2)})),"detect"!==t&&n&&(e=performance.now(),o="canvas"===C?n:"imagedata"===C?n.getContext("2d").getImageData(0,0,n.width,n.height):"dataurl"===C?n.toDataURL():n,g.push({step:"Output Conversion",ms:(performance.now()-e).toFixed(2)}));const E=performance.now();return g.unshift({step:"Total",ms:(E-B).toFixed(2)}),{output:o,corners:i.corners,contour:i.contour??null,confidence:i.confidence||null,score:i.score??null,debug:i.debug,success:!0,message:"Document detected",timings:g}}A.Scanner=class{constructor(A={}){this.defaultOptions={maxProcessingDimension:800,mode:"detect",output:"canvas",...A},this.initialized=!1}async initialize(){if(!this.initialized){if("ml"===this.defaultOptions.detector)try{const{initializeMl:A}=await Promise.resolve().then(()=>(CA(),_));await A(this.defaultOptions.ml||{})}catch{}else try{await S()}catch{}this.initialized=!0}}async scan(A,I={}){return this.initialized||await this.initialize(),await rA(A,{...this.defaultOptions,...I})}async extract(A,I,g={}){return this.initialized||await this.initialize(),await cA(A,I,{...this.defaultOptions,...g})}},A.createCornerEditor=function(A={}){const I=A.container;if(!I||"function"!=typeof I.appendChild)throw new Error("createCornerEditor requires a valid container element");const g=I.ownerDocument||("undefined"!=typeof document?document:null),B="undefined"!=typeof window?window:globalThis;!1!==A.injectStyles&&function(A){if(!A||"function"!=typeof A.getElementById)return;if(A.getElementById(q))return;const I=A.createElement("style");I.id=q,I.textContent="\n.scanic-corner-editor {\n --scanic-accent: #6366f1;\n --scanic-mask: rgba(15, 23, 42, 0.45);\n --scanic-edge-color: var(--scanic-accent);\n --scanic-edge-width: 2.5;\n --scanic-handle-size: 20px;\n --scanic-handle-hit: 44px;\n --scanic-handle-color: #ffffff;\n --scanic-handle-ring: 2px;\n --scanic-handle-ring-color: var(--scanic-accent);\n --scanic-handle-shadow: 0 1px 4px rgba(15, 23, 42, 0.45);\n --scanic-handle-active-shadow: 0 8px 22px rgba(15, 23, 42, 0.5);\n --scanic-handle-active-scale: 1.28;\n --scanic-surface: rgba(15, 23, 42, 0.92);\n --scanic-surface-fg: #e2e8f0;\n --scanic-surface-radius: 12px;\n}\n.scanic-handle {\n position: absolute;\n box-sizing: border-box;\n width: var(--scanic-handle-size);\n height: var(--scanic-handle-size);\n margin: 0;\n padding: 0;\n border: var(--scanic-handle-ring) solid var(--scanic-handle-ring-color);\n border-radius: 50%;\n background: var(--scanic-handle-color);\n box-shadow: var(--scanic-handle-shadow);\n transform: translate(-50%, -50%);\n cursor: grab;\n touch-action: none;\n z-index: 2;\n transition: transform 0.12s ease, box-shadow 0.12s ease,\n background 0.12s ease, border-color 0.12s ease;\n}\n/* Enlarges the pointer/touch target without changing the visual size. */\n.scanic-handle::after {\n content: '';\n position: absolute;\n left: 50%;\n top: 50%;\n width: var(--scanic-handle-hit);\n height: var(--scanic-handle-hit);\n transform: translate(-50%, -50%);\n border-radius: 50%;\n}\n/* Soft accent halo that blooms when a handle is grabbed — the \"depth\" layer. */\n.scanic-handle::before {\n content: '';\n position: absolute;\n left: 50%;\n top: 50%;\n width: 0;\n height: 0;\n border-radius: 50%;\n background: var(--scanic-accent);\n opacity: 0;\n transform: translate(-50%, -50%);\n transition: opacity 0.15s ease, width 0.15s ease, height 0.15s ease;\n pointer-events: none;\n}\n.scanic-handle:hover {\n transform: translate(-50%, -50%) scale(1.12);\n}\n.scanic-handle:focus-visible {\n outline: none;\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--scanic-accent) 45%, transparent),\n var(--scanic-handle-shadow);\n}\n/* The currently selected corner — the target of nudges / keyboard. */\n.scanic-handle.is-selected {\n border-color: var(--scanic-accent);\n transform: translate(-50%, -50%) scale(1.12);\n}\n.scanic-handle.is-selected::before {\n opacity: 0.16;\n width: calc(var(--scanic-handle-size) * 2);\n height: calc(var(--scanic-handle-size) * 2);\n}\n.scanic-handle.is-active {\n cursor: grabbing;\n background: var(--scanic-accent);\n border-color: #ffffff;\n transform: translate(-50%, -50%) scale(var(--scanic-handle-active-scale));\n box-shadow: var(--scanic-handle-active-shadow);\n}\n.scanic-handle.is-active::before {\n opacity: 0.22;\n width: calc(var(--scanic-handle-size) * 2.8);\n height: calc(var(--scanic-handle-size) * 2.8);\n}\n.scanic-toolbar,\n.scanic-nudges {\n position: absolute;\n z-index: 3;\n display: flex;\n gap: 4px;\n padding: 5px;\n background: var(--scanic-surface);\n border-radius: var(--scanic-surface-radius);\n -webkit-backdrop-filter: blur(8px);\n backdrop-filter: blur(8px);\n box-shadow: 0 6px 20px rgba(15, 23, 42, 0.35);\n}\n.scanic-toolbar {\n left: 50%;\n bottom: 12px;\n transform: translateX(-50%);\n}\n.scanic-nudges {\n top: 10px;\n right: 10px;\n display: grid;\n grid-template-columns: repeat(4, auto);\n gap: 3px;\n}\n.scanic-toolbar button,\n.scanic-nudges button {\n display: grid;\n place-items: center;\n margin: 0;\n padding: 0;\n font-family: inherit;\n font-size: 15px;\n font-weight: 600;\n line-height: 1;\n color: var(--scanic-surface-fg);\n background: transparent;\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.12s ease, color 0.12s ease, filter 0.12s ease;\n}\n.scanic-toolbar button {\n width: 34px;\n height: 34px;\n}\n.scanic-nudges button {\n width: 30px;\n height: 30px;\n}\n.scanic-toolbar button svg {\n width: 18px;\n height: 18px;\n display: block;\n}\n.scanic-toolbar button:hover,\n.scanic-nudges button:hover {\n background: rgba(255, 255, 255, 0.14);\n}\n.scanic-toolbar button:focus-visible,\n.scanic-nudges button:focus-visible {\n outline: 2px solid var(--scanic-accent);\n outline-offset: 1px;\n}\n.scanic-toolbar .scanic-btn-apply {\n background: var(--scanic-accent);\n color: #ffffff;\n}\n.scanic-toolbar .scanic-btn-apply:hover {\n background: var(--scanic-accent);\n filter: brightness(1.1);\n}\n.scanic-toolbar .scanic-btn-expert.is-on {\n background: color-mix(in srgb, var(--scanic-accent) 32%, transparent);\n color: #ffffff;\n}\n",(A.head||A.documentElement).appendChild(I)}(g);const{canvas:t,width:C,height:Q}=function(A){if(!A)throw new Error("No image provided");const I=A&&"number"==typeof A.width&&"number"==typeof A.height&&A.data;let g=0,B=0;if(I?(g=A.width,B=A.height):(g=A.width||A.naturalWidth,B=A.height||A.naturalHeight),!g||!B)throw new Error("Image must be loaded before creating the corner editor");const t=document.createElement("canvas");t.width=g,t.height=B;const C=t.getContext("2d",{willReadFrequently:!0});if(!C)throw new Error("Failed to create 2D canvas context for source image");return I?C.putImageData(A,0,0):C.drawImage(A,0,0,g,B),{canvas:t,width:g,height:B}}(A.image),i=!I.classList.contains("scanic-corner-editor");I.classList.add("scanic-corner-editor"),A.classNames?.root&&I.classList.add(A.classNames.root);const e={position:I.style.position,minHeight:I.style.minHeight};let n=!1,o=!1;"static"===getComputedStyle(I).position&&(I.style.position="relative",n=!0),b(A.theme);const E=g.createElement("canvas");E.style.position="absolute",E.style.top="0",E.style.left="0",E.style.display="block",E.style.touchAction="none",E.style.userSelect="none",E.style.webkitUserSelect="none",E.style.cursor="default",I.appendChild(E);const a=E.getContext("2d");if(!a)throw new Error("Failed to create 2D canvas context for corner editor");const s={enabled:!1!==A.magnifier?.enabled,size:A.magnifier?.size||120,zoom:A.magnifier?.zoom||2,margin:A.magnifier?.margin||8,borderColor:A.magnifier?.borderColor||"#ffffff",borderWidth:A.magnifier?.borderWidth||2,crosshairColor:A.magnifier?.crosshairColor||"#ffffff",crosshairSize:A.magnifier?.crosshairSize||18},c={enabled:!!A.nudges?.enabled,steps:(A.nudges?.steps&&A.nudges.steps.length?A.nudges.steps:[1,10]).map(A=>Math.max(1,Math.round(A)))},r={enabled:!1!==A.toolbar?.enabled,reset:!1!==A.toolbar?.reset,cancel:!1!==A.toolbar?.cancel,apply:!1!==A.toolbar?.apply,labels:{reset:A.toolbar?.labels?.reset||"Reset",cancel:A.toolbar?.labels?.cancel||"Cancel",apply:A.toolbar?.labels?.apply||"Apply"}},h=!1!==A.keyboard,l=function(A,I,g=.08){const B=Math.max(8,Math.min(A,I)*g);return{topLeft:{x:B,y:B},topRight:{x:A-B,y:B},bottomRight:{x:A-B,y:I-B},bottomLeft:{x:B,y:I-B}}}(C,Q),y=A.corners?x(A.corners):l;let d=H(y)&&Y(y)?y:l;const w=x(d);let D=!1,f=null,u="topLeft",m=null,N=null;const R=Math.max(24,A.handleHitArea||44);A.handleHitArea&&I.style.setProperty("--scanic-handle-hit",R+"px");const p=["topLeft","topRight","bottomRight","bottomLeft"],F={topLeft:"Top-left corner",topRight:"Top-right corner",bottomRight:"Bottom-right corner",bottomLeft:"Bottom-left corner"};let J={scale:1,offsetX:0,offsetY:0,width:1,height:1};const G={mask:"rgba(15,23,42,0.45)",edgeColor:"#6366f1",edgeWidth:2.5},k={};for(const x of p){const B=g.createElement("button");B.type="button",B.className="scanic-handle"+(A.classNames?.handle?" "+A.classNames.handle:""),B.dataset.corner=x,B.setAttribute("aria-label",F[x]),h||(B.tabIndex=-1),B.addEventListener("pointerdown",A=>tA(x,A)),B.addEventListener("pointermove",A=>CA(x,A)),B.addEventListener("pointerup",A=>QA(x,A)),B.addEventListener("pointercancel",A=>QA(x,A)),B.addEventListener("focus",()=>{u=x,z()}),h&&B.addEventListener("keydown",A=>iA(x,A)),I.appendChild(B),k[x]=B}function S(A,I){const g=E.style.color;E.style.color=`var(${A}, ${I})`;const B=getComputedStyle(E).color||I;return E.style.color=g,B}function M(){G.mask=S("--scanic-mask","rgba(15, 23, 42, 0.45)"),G.edgeColor=S("--scanic-edge-color","#6366f1");const A=getComputedStyle(I).getPropertyValue("--scanic-edge-width"),g=parseFloat(A);G.edgeWidth=Number.isFinite(g)&&g>0?g:2.5}function b(A){if(!A||"object"!=typeof A)return;const g=new Set(["handleSize","handleHit"]);for(const[B,t]of Object.entries({accent:"--scanic-accent",mask:"--scanic-mask",edgeColor:"--scanic-edge-color",edgeWidth:"--scanic-edge-width",handleSize:"--scanic-handle-size",handleHit:"--scanic-handle-hit",handleColor:"--scanic-handle-color",handleRingColor:"--scanic-handle-ring-color",surface:"--scanic-surface",surfaceColor:"--scanic-surface-fg",radius:"--scanic-surface-radius"})){const C=A[B];if(null==C)continue;const Q="number"==typeof C&&g.has(B)?`${C}px`:String(C);I.style.setProperty(t,Q)}}function L(){"function"==typeof A.onChange&&A.onChange(x(d))}let U=0,P=0;function Z(){const A=Math.max(1,Math.round(I.clientWidth));let g=Math.round(I.clientHeight);if(g<80){const t=Q/Math.max(1,C),i=.7*(B.innerHeight||800);g=Math.max(240,Math.round(Math.min(A*t,i))),I.style.minHeight=g+"px",o=!0}return{width:A,height:Math.max(1,g)}}function X(){const{width:A,height:I}=Z(),g=B.devicePixelRatio||1;U=A,P=I,E.style.width=A+"px",E.style.height=I+"px";const t=Math.round(A*g),i=Math.round(I*g);E.width!==t&&(E.width=t),E.height!==i&&(E.height=i),a.setTransform(g,0,0,g,0,0);const e=Math.max(1,A-24),n=Math.max(1,I-24),o=Math.min(e/C,n/Q),s=C*o,c=Q*o;J={scale:o,offsetX:Math.round((A-s)/2),offsetY:Math.round((I-c)/2),width:A,height:I},M()}function V(A){return{x:J.offsetX+A.x*J.scale,y:J.offsetY+A.y*J.scale}}function j(A){return H(A)&&Y(A)}function O(A){const I=E.getBoundingClientRect();return{x:A.clientX-I.left,y:A.clientY-I.top}}function z(){for(const A of p)k[A].classList.toggle("is-selected",A===u)}function _(){D||(a.clearRect(0,0,J.width,J.height),a.drawImage(t,0,0,C,Q,J.offsetX,J.offsetY,C*J.scale,Q*J.scale),function(){const A=p.map(A=>V(d[A]));a.save(),a.fillStyle=G.mask,a.beginPath(),a.rect(0,0,J.width,J.height),a.moveTo(A[0].x,A[0].y);for(let I=1;I<A.length;I++)a.lineTo(A[I].x,A[I].y);a.closePath(),a.fill("evenodd"),a.restore(),a.save(),a.strokeStyle=G.edgeColor,a.lineWidth=G.edgeWidth,a.lineJoin="round",a.beginPath(),a.moveTo(A[0].x,A[0].y);for(let I=1;I<A.length;I++)a.lineTo(A[I].x,A[I].y);a.closePath(),a.stroke(),a.restore()}(),function(){if(!s.enabled||!f||!N)return;const A=d[f],I=s.size,g=I/2,B=Math.max(1.1,s.zoom);let i=N.x+g+s.margin,e=N.y-g-s.margin;i+g>J.width&&(i=N.x-g-s.margin),e-g<0&&(e=N.y+g+s.margin),i=Math.max(g+2,Math.min(J.width-g-2,i)),e=Math.max(g+2,Math.min(J.height-g-2,e));const n=I/B,o=Math.max(0,Math.min(C-n,A.x-n/2)),E=Math.max(0,Math.min(Q-n,A.y-n/2));a.save(),a.beginPath(),a.arc(i,e,g,0,2*Math.PI),a.clip(),a.drawImage(t,o,E,n,n,i-g,e-g,I,I),a.restore(),a.save(),a.beginPath(),a.arc(i,e,g,0,2*Math.PI),a.lineWidth=s.borderWidth,a.strokeStyle=s.borderColor,a.stroke();const c=s.crosshairSize/2;a.strokeStyle=s.crosshairColor,a.lineWidth=1.5,a.beginPath(),a.moveTo(i-c,e),a.lineTo(i+c,e),a.moveTo(i,e-c),a.lineTo(i,e+c),a.stroke(),a.restore()}(),function(){for(const A of p){const I=V(d[A]),g=k[A];g.style.left=I.x+"px",g.style.top=I.y+"px"}}())}const $="function"==typeof B.requestAnimationFrame?B.requestAnimationFrame.bind(B):null,AA="function"==typeof B.cancelAnimationFrame?B.cancelAnimationFrame.bind(B):null;let IA=null;function gA(){D||($?null===IA&&(IA=$(()=>{IA=null,_()})):_())}function BA(A,I){const g=x(d);return g[A]={x:Math.max(0,Math.min(C,I.x)),y:Math.max(0,Math.min(Q,I.y))},!!j(g)&&(d=g,u=A,z(),L(),gA(),!0)}function tA(A,I){if(!D){if("function"==typeof I.preventDefault&&I.preventDefault(),f=A,u=A,z(),m=I.pointerId,N=O(I),k[A].classList.add("is-active"),h&&"function"==typeof k[A].focus)try{k[A].focus({preventScroll:!0})}catch(g){k[A].focus()}if(k[A].setPointerCapture&&null!=I.pointerId)try{k[A].setPointerCapture(I.pointerId)}catch(g){}gA()}}function CA(A,I){D||f!==A||null!==m&&I.pointerId!==m||(N=O(I),BA(A,function(A,I){const g=(A-J.offsetX)/J.scale,B=(I-J.offsetY)/J.scale;return{x:Math.max(0,Math.min(C,g)),y:Math.max(0,Math.min(Q,B))}}(N.x,N.y)))}function QA(A,I){if(f===A&&(null===m||I.pointerId===m)){if(k[A].releasePointerCapture&&null!=m)try{k[A].releasePointerCapture(m)}catch(g){}k[A].classList.remove("is-active"),f=null,m=null,N=null,gA()}}function iA(A,I){if(D||!h)return;if("Enter"===I.key)return I.preventDefault(),void rA();if("Escape"===I.key)return I.preventDefault(),void hA();let g=0,B=0;if("ArrowLeft"===I.key)g=-1;else if("ArrowRight"===I.key)g=1;else if("ArrowUp"===I.key)B=-1;else{if("ArrowDown"!==I.key)return;B=1}I.preventDefault();const t=I.shiftKey?c.steps[c.steps.length-1]||10:1;BA(A,{x:d[A].x+g*t,y:d[A].y+B*t})}let eA=null,nA=null,oA=null,EA=!1;const aA=r.enabled&&c.enabled;function sA({html:A,text:I,title:B,className:t,onClick:C}){const Q=g.createElement("button");return Q.type="button",null!=A?Q.innerHTML=A:Q.textContent=I,B&&(Q.title=B,Q.setAttribute("aria-label",B)),t&&(Q.className=t),Q.addEventListener("click",C),Q}let cA=null;function rA(){const I=x(d);return"function"==typeof A.onConfirm&&A.onConfirm(I),I}function hA(){"function"==typeof A.onCancel&&A.onCancel()}function lA(){d=x(w),L(),gA()}const yA="undefined"!=typeof ResizeObserver?new ResizeObserver(()=>{if(D)return;const A=Z();A.width===U&&A.height===P||(X(),gA())}):null;return X(),r.enabled&&(r.reset||r.cancel||r.apply||aA)&&(eA=g.createElement("div"),eA.className="scanic-toolbar"+(A.classNames?.toolbar?" "+A.classNames.toolbar:""),r.reset&&eA.appendChild(sA({html:v,title:r.labels.reset,className:"scanic-btn-reset",onClick:()=>lA()})),aA&&(oA=sA({html:W,title:"Precision nudge (expert)",className:"scanic-btn-expert",onClick:()=>{return EA=A=!EA,nA&&(nA.style.display=A?"":"none"),void(oA&&(oA.classList.toggle("is-on",A),oA.setAttribute("aria-pressed",String(A))));var A}}),oA.setAttribute("aria-pressed","false"),eA.appendChild(oA)),r.cancel&&eA.appendChild(sA({html:K,title:r.labels.cancel,className:"scanic-btn-cancel",onClick:()=>hA()})),r.apply&&eA.appendChild(sA({html:T,title:r.labels.apply,className:"scanic-btn-apply",onClick:()=>rA()})),I.appendChild(eA)),function(){if(!c.enabled)return;nA=g.createElement("div"),nA.className="scanic-nudges"+(A.classNames?.nudges?" "+A.classNames.nudges:"");const B=(A,I,g,B,t)=>sA({text:A,title:I,className:"scanic-btn-nudge",onClick:()=>{const A=d[u];BA(u,{x:A.x+g*t,y:A.y+B*t})}});for(const A of c.steps)nA.appendChild(B("←",`Move left ${A}px`,-1,0,A)),nA.appendChild(B("↑",`Move up ${A}px`,0,-1,A)),nA.appendChild(B("↓",`Move down ${A}px`,0,1,A)),nA.appendChild(B("→",`Move right ${A}px`,1,0,A));I.appendChild(nA),aA&&(nA.style.display="none")}(),function A(){if("function"!=typeof B.matchMedia)return;cA&&cA();const I=B.devicePixelRatio||1,g=B.matchMedia(`(resolution: ${I}dppx)`),t=()=>{D||(X(),gA(),A())};"function"==typeof g.addEventListener?(g.addEventListener("change",t),cA=()=>g.removeEventListener("change",t)):"function"==typeof g.addListener?(g.addListener(t),cA=()=>g.removeListener(t)):cA=null}(),yA&&yA.observe(I),z(),_(),{getCorners:()=>x(d),setCorners:A=>!(!A||!j(A))&&(d=x(A),L(),gA(),!0),reset(){lA()},nudge:(A,I,g,B=1)=>!!p.includes(A)&&BA(A,{x:d[A].x+I*B,y:d[A].y+g*B}),refreshTheme(A){b(A),M(),gA()},confirm:()=>rA(),cancel(){hA()},destroy(){if(!D){D=!0,null!==IA&&AA&&(AA(IA),IA=null),cA&&(cA(),cA=null),yA&&yA.disconnect();for(const A of p){const I=k[A];I&&I.parentNode&&I.parentNode.removeChild(I)}eA&&eA.parentNode&&eA.parentNode.removeChild(eA),nA&&nA.parentNode&&nA.parentNode.removeChild(nA),E.parentNode&&E.parentNode.removeChild(E),i&&I.classList.remove("scanic-corner-editor"),A.classNames?.root&&I.classList.remove(A.classNames.root),n&&(I.style.position=e.position),o&&(I.style.minHeight=e.minHeight)}}}},A.extractDocument=cA,A.initialize=async function(){try{return await S()}catch{return null}},A.scanDocument=rA});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scanic",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Modern document scanner in pure JavaScript and Wasm",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -24,8 +24,10 @@
|
|
|
24
24
|
"docs:dev": "vitepress dev docs",
|
|
25
25
|
"docs:build": "vite build && node scripts/stage-docs-demo.mjs && vitepress build docs",
|
|
26
26
|
"docs:preview": "vitepress preview docs",
|
|
27
|
+
"lint": "eslint src scripts",
|
|
27
28
|
"build:wasm": "docker compose -f dev/docker-compose.yml up --build && node scripts/postprocess-wasm.mjs",
|
|
28
29
|
"test": "vitest run",
|
|
30
|
+
"test:coverage": "vitest run --coverage",
|
|
29
31
|
"diagnose:quality": "node scripts/diagnose-quality.js",
|
|
30
32
|
"baseline:update": "node scripts/baseline.js --update",
|
|
31
33
|
"baseline:check": "node scripts/baseline.js",
|
|
@@ -48,7 +50,7 @@
|
|
|
48
50
|
"type": "git",
|
|
49
51
|
"url": "git+https://github.com/marquaye/scanic.git"
|
|
50
52
|
},
|
|
51
|
-
"homepage": "https://github.
|
|
53
|
+
"homepage": "https://marquaye.github.io/scanic",
|
|
52
54
|
"bugs": {
|
|
53
55
|
"url": "https://github.com/marquaye/scanic/issues"
|
|
54
56
|
},
|
|
@@ -56,15 +58,28 @@
|
|
|
56
58
|
"dist/scanic.js",
|
|
57
59
|
"dist/scanic.umd.cjs",
|
|
58
60
|
"src/scanic.d.ts",
|
|
59
|
-
"wasm_blur/pkg/wasm_blur_bg.wasm",
|
|
60
61
|
"README.md",
|
|
61
62
|
"LICENSE"
|
|
62
63
|
],
|
|
64
|
+
"peerDependencies": {
|
|
65
|
+
"onnxruntime-web": "1.23.x"
|
|
66
|
+
},
|
|
67
|
+
"peerDependenciesMeta": {
|
|
68
|
+
"onnxruntime-web": {
|
|
69
|
+
"optional": true
|
|
70
|
+
}
|
|
71
|
+
},
|
|
63
72
|
"devDependencies": {
|
|
73
|
+
"@eslint/js": "^10.0.1",
|
|
74
|
+
"@vitest/coverage-v8": "^4.1.9",
|
|
64
75
|
"canvas": "^3.2.0",
|
|
65
|
-
"
|
|
76
|
+
"eslint": "^10.5.0",
|
|
77
|
+
"globals": "^17.6.0",
|
|
78
|
+
"jsdom": "^29.1.1",
|
|
79
|
+
"onnxruntime-web": "1.23.2",
|
|
80
|
+
"playwright": "^1.61.1",
|
|
66
81
|
"terser": "^5.44.1",
|
|
67
|
-
"vite": "^
|
|
82
|
+
"vite": "^8.0.16",
|
|
68
83
|
"vitepress": "^1.6.4",
|
|
69
84
|
"vitest": "^4.0.16",
|
|
70
85
|
"vue": "^3.5.38"
|
package/src/scanic.d.ts
CHANGED
|
@@ -122,9 +122,37 @@ export interface CornerEditor {
|
|
|
122
122
|
destroy(): void;
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
+
/**
|
|
126
|
+
* Options for the optional ML detector (`detector: 'ml'`). Assets are lazy-loaded
|
|
127
|
+
* from the companion `scanic-ml` package on a CDN by default; `onnxruntime-web`
|
|
128
|
+
* (v1.23.x, matching the bundled wasm) must be installed as a peer dependency.
|
|
129
|
+
*/
|
|
130
|
+
export interface MlDetectorOptions {
|
|
131
|
+
/** Base URL for the wasm + `.ort` model. Default: scanic-ml on jsDelivr. */
|
|
132
|
+
assetBaseUrl?: string;
|
|
133
|
+
/** Explicit model URL (overrides `assetBaseUrl` for the model). */
|
|
134
|
+
modelUrl?: string;
|
|
135
|
+
/** Explicit wasm directory (overrides `assetBaseUrl` for the runtime wasm). */
|
|
136
|
+
wasmPaths?: string;
|
|
137
|
+
/** Pre-fetched `.ort` model bytes (skips the network fetch). */
|
|
138
|
+
modelBytes?: Uint8Array;
|
|
139
|
+
/** ORT thread count. Default 1; values >1 require COOP/COEP headers on the host. */
|
|
140
|
+
numThreads?: number;
|
|
141
|
+
/** Minimum P(document) to report success. Default 0.5. */
|
|
142
|
+
minScore?: number;
|
|
143
|
+
}
|
|
144
|
+
|
|
125
145
|
export interface DetectionOptions {
|
|
126
146
|
mode?: 'detect' | 'extract';
|
|
127
147
|
output?: 'canvas' | 'imagedata' | 'dataurl';
|
|
148
|
+
/**
|
|
149
|
+
* Detection backend. `'classical'` (default) is the pure-JS/WASM Canny
|
|
150
|
+
* pipeline. `'ml'` uses the optional DocCornerNet SimCC model via
|
|
151
|
+
* onnxruntime-web — more robust on cluttered/low-contrast photos.
|
|
152
|
+
*/
|
|
153
|
+
detector?: 'classical' | 'ml';
|
|
154
|
+
/** Options forwarded to the ML detector when `detector: 'ml'`. */
|
|
155
|
+
ml?: MlDetectorOptions;
|
|
128
156
|
debug?: boolean;
|
|
129
157
|
maxProcessingDimension?: number;
|
|
130
158
|
lowThreshold?: number;
|
|
@@ -159,6 +187,8 @@ export interface ScannerResult {
|
|
|
159
187
|
success: boolean;
|
|
160
188
|
message: string;
|
|
161
189
|
confidence?: number | null;
|
|
190
|
+
/** P(document present) from the ML detector (`detector: 'ml'`); null otherwise. */
|
|
191
|
+
score?: number | null;
|
|
162
192
|
output: HTMLCanvasElement | ImageData | string | null;
|
|
163
193
|
corners: CornerPoints | null;
|
|
164
194
|
contour: Point[] | null;
|