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

lerc

Package Overview
Dependencies
Maintainers
3
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

lerc - npm Package Compare versions

Comparing version 3.0.0 to 4.0.0

lerc-4.0.0.tgz

9

CHANGELOG.md

@@ -10,2 +10,11 @@ # Change Log

Now uses web assembly, as a result:
* The existing Javascript decoder ```js/LercDecode.js``` is deprecated. It will be removed in next major release.
* [Web Assembly](https://caniuse.com/wasm) support is now required. IE11 is therefore no longer supported.
* ```Lerc.load()``` must be invoked and the returned promise must be resolved prior to ```Lerc.decode```. This only needs to be done once per worker (or the main thread). There's no extra cost when invoked multiple times as the internal wasm loading promise is cached.
* Updated build script ```npm run build```. A dev build result (unminified UMD bundle) is included in the ```js/dist``` folder for convenience.
* Both UMD and ES modules are included in dist, along with a typing file.
* Deprecated ```decodeResult.dimCount, decodeOptions.returnPixelInterleavedDims```, prefer to use ```depthCount, returnInterleaved```
which is in line with C API concept.
## [3.0.0] - 2021-07-30

@@ -12,0 +21,0 @@

19

LercDecode.min.js

@@ -1,2 +0,17 @@

/* Copyright 2015-2021 Esri. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 @preserve */
(function(){var LercDecode=function(){var CntZImage={};CntZImage.defaultNoDataValue=-34027999387901484e22;CntZImage.decode=function(input,options){options=options||{};var skipMask=options.encodedMaskData||options.encodedMaskData===null;var parsedData=parse(input,options.inputOffset||0,skipMask);var noDataValue=options.noDataValue!==null?options.noDataValue:CntZImage.defaultNoDataValue;var uncompressedData=uncompressPixelValues(parsedData,options.pixelType||Float32Array,options.encodedMaskData,noDataValue,options.returnMask);var result={width:parsedData.width,height:parsedData.height,pixelData:uncompressedData.resultPixels,minValue:uncompressedData.minValue,maxValue:parsedData.pixels.maxValue,noDataValue:noDataValue};if(uncompressedData.resultMask){result.maskData=uncompressedData.resultMask}if(options.returnEncodedMask&&parsedData.mask){result.encodedMaskData=parsedData.mask.bitset?parsedData.mask.bitset:null}if(options.returnFileInfo){result.fileInfo=formatFileInfo(parsedData);if(options.computeUsedBitDepths){result.fileInfo.bitDepths=computeUsedBitDepths(parsedData)}}return result};var uncompressPixelValues=function(data,TypedArrayClass,maskBitset,noDataValue,storeDecodedMask){var blockIdx=0;var numX=data.pixels.numBlocksX;var numY=data.pixels.numBlocksY;var blockWidth=Math.floor(data.width/numX);var blockHeight=Math.floor(data.height/numY);var scale=2*data.maxZError;var minValue=Number.MAX_VALUE,currentValue;maskBitset=maskBitset||(data.mask?data.mask.bitset:null);var resultPixels,resultMask;resultPixels=new TypedArrayClass(data.width*data.height);if(storeDecodedMask&&maskBitset){resultMask=new Uint8Array(data.width*data.height)}var blockDataBuffer=new Float32Array(blockWidth*blockHeight);var xx,yy;for(var y=0;y<=numY;y++){var thisBlockHeight=y!==numY?blockHeight:data.height%numY;if(thisBlockHeight===0){continue}for(var x=0;x<=numX;x++){var thisBlockWidth=x!==numX?blockWidth:data.width%numX;if(thisBlockWidth===0){continue}var outPtr=y*data.width*blockHeight+x*blockWidth;var outStride=data.width-thisBlockWidth;var block=data.pixels.blocks[blockIdx];var blockData,blockPtr,constValue;if(block.encoding<2){if(block.encoding===0){blockData=block.rawData}else{unstuff(block.stuffedData,block.bitsPerPixel,block.numValidPixels,block.offset,scale,blockDataBuffer,data.pixels.maxValue);blockData=blockDataBuffer}blockPtr=0}else if(block.encoding===2){constValue=0}else{constValue=block.offset}var maskByte;if(maskBitset){for(yy=0;yy<thisBlockHeight;yy++){if(outPtr&7){maskByte=maskBitset[outPtr>>3];maskByte<<=outPtr&7}for(xx=0;xx<thisBlockWidth;xx++){if(!(outPtr&7)){maskByte=maskBitset[outPtr>>3]}if(maskByte&128){if(resultMask){resultMask[outPtr]=1}currentValue=block.encoding<2?blockData[blockPtr++]:constValue;minValue=minValue>currentValue?currentValue:minValue;resultPixels[outPtr++]=currentValue}else{if(resultMask){resultMask[outPtr]=0}resultPixels[outPtr++]=noDataValue}maskByte<<=1}outPtr+=outStride}}else{if(block.encoding<2){for(yy=0;yy<thisBlockHeight;yy++){for(xx=0;xx<thisBlockWidth;xx++){currentValue=blockData[blockPtr++];minValue=minValue>currentValue?currentValue:minValue;resultPixels[outPtr++]=currentValue}outPtr+=outStride}}else{minValue=minValue>constValue?constValue:minValue;for(yy=0;yy<thisBlockHeight;yy++){for(xx=0;xx<thisBlockWidth;xx++){resultPixels[outPtr++]=constValue}outPtr+=outStride}}}if(block.encoding===1&&blockPtr!==block.numValidPixels){throw"Block and Mask do not match"}blockIdx++}}return{resultPixels:resultPixels,resultMask:resultMask,minValue:minValue}};var formatFileInfo=function(data){return{fileIdentifierString:data.fileIdentifierString,fileVersion:data.fileVersion,imageType:data.imageType,height:data.height,width:data.width,maxZError:data.maxZError,eofOffset:data.eofOffset,mask:data.mask?{numBlocksX:data.mask.numBlocksX,numBlocksY:data.mask.numBlocksY,numBytes:data.mask.numBytes,maxValue:data.mask.maxValue}:null,pixels:{numBlocksX:data.pixels.numBlocksX,numBlocksY:data.pixels.numBlocksY,numBytes:data.pixels.numBytes,maxValue:data.pixels.maxValue,noDataValue:data.noDataValue}}};var computeUsedBitDepths=function(data){var numBlocks=data.pixels.numBlocksX*data.pixels.numBlocksY;var bitDepths={};for(var i=0;i<numBlocks;i++){var block=data.pixels.blocks[i];if(block.encoding===0){bitDepths.float32=true}else if(block.encoding===1){bitDepths[block.bitsPerPixel]=true}else{bitDepths[0]=true}}return Object.keys(bitDepths)};var parse=function(input,fp,skipMask){var data={};var fileIdView=new Uint8Array(input,fp,10);data.fileIdentifierString=String.fromCharCode.apply(null,fileIdView);if(data.fileIdentifierString.trim()!=="CntZImage"){throw"Unexpected file identifier string: "+data.fileIdentifierString}fp+=10;var view=new DataView(input,fp,24);data.fileVersion=view.getInt32(0,true);data.imageType=view.getInt32(4,true);data.height=view.getUint32(8,true);data.width=view.getUint32(12,true);data.maxZError=view.getFloat64(16,true);fp+=24;if(!skipMask){view=new DataView(input,fp,16);data.mask={};data.mask.numBlocksY=view.getUint32(0,true);data.mask.numBlocksX=view.getUint32(4,true);data.mask.numBytes=view.getUint32(8,true);data.mask.maxValue=view.getFloat32(12,true);fp+=16;if(data.mask.numBytes>0){var bitset=new Uint8Array(Math.ceil(data.width*data.height/8));view=new DataView(input,fp,data.mask.numBytes);var cnt=view.getInt16(0,true);var ip=2,op=0;do{if(cnt>0){while(cnt--){bitset[op++]=view.getUint8(ip++)}}else{var val=view.getUint8(ip++);cnt=-cnt;while(cnt--){bitset[op++]=val}}cnt=view.getInt16(ip,true);ip+=2}while(ip<data.mask.numBytes);if(cnt!==-32768||op<bitset.length){throw"Unexpected end of mask RLE encoding"}data.mask.bitset=bitset;fp+=data.mask.numBytes}else if((data.mask.numBytes|data.mask.numBlocksY|data.mask.maxValue)===0){data.mask.bitset=new Uint8Array(Math.ceil(data.width*data.height/8))}}view=new DataView(input,fp,16);data.pixels={};data.pixels.numBlocksY=view.getUint32(0,true);data.pixels.numBlocksX=view.getUint32(4,true);data.pixels.numBytes=view.getUint32(8,true);data.pixels.maxValue=view.getFloat32(12,true);fp+=16;var numBlocksX=data.pixels.numBlocksX;var numBlocksY=data.pixels.numBlocksY;var actualNumBlocksX=numBlocksX+(data.width%numBlocksX>0?1:0);var actualNumBlocksY=numBlocksY+(data.height%numBlocksY>0?1:0);data.pixels.blocks=new Array(actualNumBlocksX*actualNumBlocksY);var blockI=0;for(var blockY=0;blockY<actualNumBlocksY;blockY++){for(var blockX=0;blockX<actualNumBlocksX;blockX++){var size=0;var bytesLeft=input.byteLength-fp;view=new DataView(input,fp,Math.min(10,bytesLeft));var block={};data.pixels.blocks[blockI++]=block;var headerByte=view.getUint8(0);size++;block.encoding=headerByte&63;if(block.encoding>3){throw"Invalid block encoding ("+block.encoding+")"}if(block.encoding===2){fp++;continue}if(headerByte!==0&&headerByte!==2){headerByte>>=6;block.offsetType=headerByte;if(headerByte===2){block.offset=view.getInt8(1);size++}else if(headerByte===1){block.offset=view.getInt16(1,true);size+=2}else if(headerByte===0){block.offset=view.getFloat32(1,true);size+=4}else{throw"Invalid block offset type"}if(block.encoding===1){headerByte=view.getUint8(size);size++;block.bitsPerPixel=headerByte&63;headerByte>>=6;block.numValidPixelsType=headerByte;if(headerByte===2){block.numValidPixels=view.getUint8(size);size++}else if(headerByte===1){block.numValidPixels=view.getUint16(size,true);size+=2}else if(headerByte===0){block.numValidPixels=view.getUint32(size,true);size+=4}else{throw"Invalid valid pixel count type"}}}fp+=size;if(block.encoding===3){continue}var arrayBuf,store8;if(block.encoding===0){var numPixels=(data.pixels.numBytes-1)/4;if(numPixels!==Math.floor(numPixels)){throw"uncompressed block has invalid length"}arrayBuf=new ArrayBuffer(numPixels*4);store8=new Uint8Array(arrayBuf);store8.set(new Uint8Array(input,fp,numPixels*4));var rawData=new Float32Array(arrayBuf);block.rawData=rawData;fp+=numPixels*4}else if(block.encoding===1){var dataBytes=Math.ceil(block.numValidPixels*block.bitsPerPixel/8);var dataWords=Math.ceil(dataBytes/4);arrayBuf=new ArrayBuffer(dataWords*4);store8=new Uint8Array(arrayBuf);store8.set(new Uint8Array(input,fp,dataBytes));block.stuffedData=new Uint32Array(arrayBuf);fp+=dataBytes}}}data.eofOffset=fp;return data};var unstuff=function(src,bitsPerPixel,numPixels,offset,scale,dest,maxValue){var bitMask=(1<<bitsPerPixel)-1;var i=0,o;var bitsLeft=0;var n,buffer;var nmax=Math.ceil((maxValue-offset)/scale);var numInvalidTailBytes=src.length*4-Math.ceil(bitsPerPixel*numPixels/8);src[src.length-1]<<=8*numInvalidTailBytes;for(o=0;o<numPixels;o++){if(bitsLeft===0){buffer=src[i++];bitsLeft=32}if(bitsLeft>=bitsPerPixel){n=buffer>>>bitsLeft-bitsPerPixel&bitMask;bitsLeft-=bitsPerPixel}else{var missingBits=bitsPerPixel-bitsLeft;n=(buffer&bitMask)<<missingBits&bitMask;buffer=src[i++];bitsLeft=32-missingBits;n+=buffer>>>bitsLeft}dest[o]=n<nmax?offset+n*scale:maxValue}return dest};return CntZImage}();var Lerc2Decode=function(){"use strict";var BitStuffer={unstuff:function(src,dest,bitsPerPixel,numPixels,lutArr,offset,scale,maxValue){var bitMask=(1<<bitsPerPixel)-1;var i=0,o;var bitsLeft=0;var n,buffer,missingBits,nmax;var numInvalidTailBytes=src.length*4-Math.ceil(bitsPerPixel*numPixels/8);src[src.length-1]<<=8*numInvalidTailBytes;if(lutArr){for(o=0;o<numPixels;o++){if(bitsLeft===0){buffer=src[i++];bitsLeft=32}if(bitsLeft>=bitsPerPixel){n=buffer>>>bitsLeft-bitsPerPixel&bitMask;bitsLeft-=bitsPerPixel}else{missingBits=bitsPerPixel-bitsLeft;n=(buffer&bitMask)<<missingBits&bitMask;buffer=src[i++];bitsLeft=32-missingBits;n+=buffer>>>bitsLeft}dest[o]=lutArr[n]}}else{nmax=Math.ceil((maxValue-offset)/scale);for(o=0;o<numPixels;o++){if(bitsLeft===0){buffer=src[i++];bitsLeft=32}if(bitsLeft>=bitsPerPixel){n=buffer>>>bitsLeft-bitsPerPixel&bitMask;bitsLeft-=bitsPerPixel}else{missingBits=bitsPerPixel-bitsLeft;n=(buffer&bitMask)<<missingBits&bitMask;buffer=src[i++];bitsLeft=32-missingBits;n+=buffer>>>bitsLeft}dest[o]=n<nmax?offset+n*scale:maxValue}}},unstuffLUT:function(src,bitsPerPixel,numPixels,offset,scale,maxValue){var bitMask=(1<<bitsPerPixel)-1;var i=0,o=0,missingBits=0,bitsLeft=0,n=0;var buffer;var dest=[];var numInvalidTailBytes=src.length*4-Math.ceil(bitsPerPixel*numPixels/8);src[src.length-1]<<=8*numInvalidTailBytes;var nmax=Math.ceil((maxValue-offset)/scale);for(o=0;o<numPixels;o++){if(bitsLeft===0){buffer=src[i++];bitsLeft=32}if(bitsLeft>=bitsPerPixel){n=buffer>>>bitsLeft-bitsPerPixel&bitMask;bitsLeft-=bitsPerPixel}else{missingBits=bitsPerPixel-bitsLeft;n=(buffer&bitMask)<<missingBits&bitMask;buffer=src[i++];bitsLeft=32-missingBits;n+=buffer>>>bitsLeft}dest[o]=n<nmax?offset+n*scale:maxValue}dest.unshift(offset);return dest},unstuff2:function(src,dest,bitsPerPixel,numPixels,lutArr,offset,scale,maxValue){var bitMask=(1<<bitsPerPixel)-1;var i=0,o;var bitsLeft=0,bitPos=0;var n,buffer,missingBits;if(lutArr){for(o=0;o<numPixels;o++){if(bitsLeft===0){buffer=src[i++];bitsLeft=32;bitPos=0}if(bitsLeft>=bitsPerPixel){n=buffer>>>bitPos&bitMask;bitsLeft-=bitsPerPixel;bitPos+=bitsPerPixel}else{missingBits=bitsPerPixel-bitsLeft;n=buffer>>>bitPos&bitMask;buffer=src[i++];bitsLeft=32-missingBits;n|=(buffer&(1<<missingBits)-1)<<bitsPerPixel-missingBits;bitPos=missingBits}dest[o]=lutArr[n]}}else{var nmax=Math.ceil((maxValue-offset)/scale);for(o=0;o<numPixels;o++){if(bitsLeft===0){buffer=src[i++];bitsLeft=32;bitPos=0}if(bitsLeft>=bitsPerPixel){n=buffer>>>bitPos&bitMask;bitsLeft-=bitsPerPixel;bitPos+=bitsPerPixel}else{missingBits=bitsPerPixel-bitsLeft;n=buffer>>>bitPos&bitMask;buffer=src[i++];bitsLeft=32-missingBits;n|=(buffer&(1<<missingBits)-1)<<bitsPerPixel-missingBits;bitPos=missingBits}dest[o]=n<nmax?offset+n*scale:maxValue}}return dest},unstuffLUT2:function(src,bitsPerPixel,numPixels,offset,scale,maxValue){var bitMask=(1<<bitsPerPixel)-1;var i=0,o=0,missingBits=0,bitsLeft=0,n=0,bitPos=0;var buffer;var dest=[];var nmax=Math.ceil((maxValue-offset)/scale);for(o=0;o<numPixels;o++){if(bitsLeft===0){buffer=src[i++];bitsLeft=32;bitPos=0}if(bitsLeft>=bitsPerPixel){n=buffer>>>bitPos&bitMask;bitsLeft-=bitsPerPixel;bitPos+=bitsPerPixel}else{missingBits=bitsPerPixel-bitsLeft;n=buffer>>>bitPos&bitMask;buffer=src[i++];bitsLeft=32-missingBits;n|=(buffer&(1<<missingBits)-1)<<bitsPerPixel-missingBits;bitPos=missingBits}dest[o]=n<nmax?offset+n*scale:maxValue}dest.unshift(offset);return dest},originalUnstuff:function(src,dest,bitsPerPixel,numPixels){var bitMask=(1<<bitsPerPixel)-1;var i=0,o;var bitsLeft=0;var n,buffer,missingBits;var numInvalidTailBytes=src.length*4-Math.ceil(bitsPerPixel*numPixels/8);src[src.length-1]<<=8*numInvalidTailBytes;for(o=0;o<numPixels;o++){if(bitsLeft===0){buffer=src[i++];bitsLeft=32}if(bitsLeft>=bitsPerPixel){n=buffer>>>bitsLeft-bitsPerPixel&bitMask;bitsLeft-=bitsPerPixel}else{missingBits=bitsPerPixel-bitsLeft;n=(buffer&bitMask)<<missingBits&bitMask;buffer=src[i++];bitsLeft=32-missingBits;n+=buffer>>>bitsLeft}dest[o]=n}return dest},originalUnstuff2:function(src,dest,bitsPerPixel,numPixels){var bitMask=(1<<bitsPerPixel)-1;var i=0,o;var bitsLeft=0,bitPos=0;var n,buffer,missingBits;for(o=0;o<numPixels;o++){if(bitsLeft===0){buffer=src[i++];bitsLeft=32;bitPos=0}if(bitsLeft>=bitsPerPixel){n=buffer>>>bitPos&bitMask;bitsLeft-=bitsPerPixel;bitPos+=bitsPerPixel}else{missingBits=bitsPerPixel-bitsLeft;n=buffer>>>bitPos&bitMask;buffer=src[i++];bitsLeft=32-missingBits;n|=(buffer&(1<<missingBits)-1)<<bitsPerPixel-missingBits;bitPos=missingBits}dest[o]=n}return dest}};var Lerc2Helpers={HUFFMAN_LUT_BITS_MAX:12,computeChecksumFletcher32:function(input){var sum1=65535,sum2=65535;var len=input.length;var words=Math.floor(len/2);var i=0;while(words){var tlen=words>=359?359:words;words-=tlen;do{sum1+=input[i++]<<8;sum2+=sum1+=input[i++]}while(--tlen);sum1=(sum1&65535)+(sum1>>>16);sum2=(sum2&65535)+(sum2>>>16)}if(len&1){sum2+=sum1+=input[i]<<8}sum1=(sum1&65535)+(sum1>>>16);sum2=(sum2&65535)+(sum2>>>16);return(sum2<<16|sum1)>>>0},readHeaderInfo:function(input,data){var ptr=data.ptr;var fileIdView=new Uint8Array(input,ptr,6);var headerInfo={};headerInfo.fileIdentifierString=String.fromCharCode.apply(null,fileIdView);if(headerInfo.fileIdentifierString.lastIndexOf("Lerc2",0)!==0){throw"Unexpected file identifier string (expect Lerc2 ): "+headerInfo.fileIdentifierString}ptr+=6;var view=new DataView(input,ptr,8);var fileVersion=view.getInt32(0,true);headerInfo.fileVersion=fileVersion;ptr+=4;if(fileVersion>=3){headerInfo.checksum=view.getUint32(4,true);ptr+=4}view=new DataView(input,ptr,12);headerInfo.height=view.getUint32(0,true);headerInfo.width=view.getUint32(4,true);ptr+=8;if(fileVersion>=4){headerInfo.numDims=view.getUint32(8,true);ptr+=4}else{headerInfo.numDims=1}view=new DataView(input,ptr,40);headerInfo.numValidPixel=view.getUint32(0,true);headerInfo.microBlockSize=view.getInt32(4,true);headerInfo.blobSize=view.getInt32(8,true);headerInfo.imageType=view.getInt32(12,true);headerInfo.maxZError=view.getFloat64(16,true);headerInfo.zMin=view.getFloat64(24,true);headerInfo.zMax=view.getFloat64(32,true);ptr+=40;data.headerInfo=headerInfo;data.ptr=ptr;var checksum,keyLength;if(fileVersion>=3){keyLength=fileVersion>=4?52:48;checksum=this.computeChecksumFletcher32(new Uint8Array(input,ptr-keyLength,headerInfo.blobSize-14));if(checksum!==headerInfo.checksum){throw"Checksum failed."}}return true},checkMinMaxRanges:function(input,data){var headerInfo=data.headerInfo;var OutPixelTypeArray=this.getDataTypeArray(headerInfo.imageType);var rangeBytes=headerInfo.numDims*this.getDataTypeSize(headerInfo.imageType);var minValues=this.readSubArray(input,data.ptr,OutPixelTypeArray,rangeBytes);var maxValues=this.readSubArray(input,data.ptr+rangeBytes,OutPixelTypeArray,rangeBytes);data.ptr+=2*rangeBytes;var i,equal=true;for(i=0;i<headerInfo.numDims;i++){if(minValues[i]!==maxValues[i]){equal=false;break}}headerInfo.minValues=minValues;headerInfo.maxValues=maxValues;return equal},readSubArray:function(input,ptr,OutPixelTypeArray,numBytes){var rawData;if(OutPixelTypeArray===Uint8Array){rawData=new Uint8Array(input,ptr,numBytes)}else{var arrayBuf=new ArrayBuffer(numBytes);var store8=new Uint8Array(arrayBuf);store8.set(new Uint8Array(input,ptr,numBytes));rawData=new OutPixelTypeArray(arrayBuf)}return rawData},readMask:function(input,data){var ptr=data.ptr;var headerInfo=data.headerInfo;var numPixels=headerInfo.width*headerInfo.height;var numValidPixel=headerInfo.numValidPixel;var view=new DataView(input,ptr,4);var mask={};mask.numBytes=view.getUint32(0,true);ptr+=4;if((0===numValidPixel||numPixels===numValidPixel)&&0!==mask.numBytes){throw"invalid mask"}var bitset,resultMask;if(numValidPixel===0){bitset=new Uint8Array(Math.ceil(numPixels/8));mask.bitset=bitset;resultMask=new Uint8Array(numPixels);data.pixels.resultMask=resultMask;ptr+=mask.numBytes}else if(mask.numBytes>0){bitset=new Uint8Array(Math.ceil(numPixels/8));view=new DataView(input,ptr,mask.numBytes);var cnt=view.getInt16(0,true);var ip=2,op=0,val=0;do{if(cnt>0){while(cnt--){bitset[op++]=view.getUint8(ip++)}}else{val=view.getUint8(ip++);cnt=-cnt;while(cnt--){bitset[op++]=val}}cnt=view.getInt16(ip,true);ip+=2}while(ip<mask.numBytes);if(cnt!==-32768||op<bitset.length){throw"Unexpected end of mask RLE encoding"}resultMask=new Uint8Array(numPixels);var mb=0,k=0;for(k=0;k<numPixels;k++){if(k&7){mb=bitset[k>>3];mb<<=k&7}else{mb=bitset[k>>3]}if(mb&128){resultMask[k]=1}}data.pixels.resultMask=resultMask;mask.bitset=bitset;ptr+=mask.numBytes}data.ptr=ptr;data.mask=mask;return true},readDataOneSweep:function(input,data,OutPixelTypeArray,useBSQForOutputDim){var ptr=data.ptr;var headerInfo=data.headerInfo;var numDims=headerInfo.numDims;var numPixels=headerInfo.width*headerInfo.height;var imageType=headerInfo.imageType;var numBytes=headerInfo.numValidPixel*Lerc2Helpers.getDataTypeSize(imageType)*numDims;var rawData;var mask=data.pixels.resultMask;if(OutPixelTypeArray===Uint8Array){rawData=new Uint8Array(input,ptr,numBytes)}else{var arrayBuf=new ArrayBuffer(numBytes);var store8=new Uint8Array(arrayBuf);store8.set(new Uint8Array(input,ptr,numBytes));rawData=new OutPixelTypeArray(arrayBuf)}if(rawData.length===numPixels*numDims){if(useBSQForOutputDim){data.pixels.resultPixels=Lerc2Helpers.swapDimensionOrder(rawData,numPixels,numDims,OutPixelTypeArray,true)}else{data.pixels.resultPixels=rawData}}else{data.pixels.resultPixels=new OutPixelTypeArray(numPixels*numDims);var z=0,k=0,i=0,nStart=0;if(numDims>1){if(useBSQForOutputDim){for(k=0;k<numPixels;k++){if(mask[k]){nStart=k;for(i=0;i<numDims;i++,nStart+=numPixels){data.pixels.resultPixels[nStart]=rawData[z++]}}}}else{for(k=0;k<numPixels;k++){if(mask[k]){nStart=k*numDims;for(i=0;i<numDims;i++){data.pixels.resultPixels[nStart+i]=rawData[z++]}}}}}else{for(k=0;k<numPixels;k++){if(mask[k]){data.pixels.resultPixels[k]=rawData[z++]}}}}ptr+=numBytes;data.ptr=ptr;return true},readHuffmanTree:function(input,data){var BITS_MAX=this.HUFFMAN_LUT_BITS_MAX;var view=new DataView(input,data.ptr,16);data.ptr+=16;var version=view.getInt32(0,true);if(version<2){throw"unsupported Huffman version"}var size=view.getInt32(4,true);var i0=view.getInt32(8,true);var i1=view.getInt32(12,true);if(i0>=i1){return false}var blockDataBuffer=new Uint32Array(i1-i0);Lerc2Helpers.decodeBits(input,data,blockDataBuffer);var codeTable=[];var i,j,k,len;for(i=i0;i<i1;i++){j=i-(i<size?0:size);codeTable[j]={first:blockDataBuffer[i-i0],second:null}}var dataBytes=input.byteLength-data.ptr;var dataWords=Math.ceil(dataBytes/4);var arrayBuf=new ArrayBuffer(dataWords*4);var store8=new Uint8Array(arrayBuf);store8.set(new Uint8Array(input,data.ptr,dataBytes));var stuffedData=new Uint32Array(arrayBuf);var bitPos=0,word,srcPtr=0;word=stuffedData[0];for(i=i0;i<i1;i++){j=i-(i<size?0:size);len=codeTable[j].first;if(len>0){codeTable[j].second=word<<bitPos>>>32-len;if(32-bitPos>=len){bitPos+=len;if(bitPos===32){bitPos=0;srcPtr++;word=stuffedData[srcPtr]}}else{bitPos+=len-32;srcPtr++;word=stuffedData[srcPtr];codeTable[j].second|=word>>>32-bitPos}}}var numBitsLUT=0,numBitsLUTQick=0;var tree=new TreeNode;for(i=0;i<codeTable.length;i++){if(codeTable[i]!==undefined){numBitsLUT=Math.max(numBitsLUT,codeTable[i].first)}}if(numBitsLUT>=BITS_MAX){numBitsLUTQick=BITS_MAX}else{numBitsLUTQick=numBitsLUT}var decodeLut=[],entry,code,numEntries,jj,currentBit,node;for(i=i0;i<i1;i++){j=i-(i<size?0:size);len=codeTable[j].first;if(len>0){entry=[len,j];if(len<=numBitsLUTQick){code=codeTable[j].second<<numBitsLUTQick-len;numEntries=1<<numBitsLUTQick-len;for(k=0;k<numEntries;k++){decodeLut[code|k]=entry}}else{code=codeTable[j].second;node=tree;for(jj=len-1;jj>=0;jj--){currentBit=code>>>jj&1;if(currentBit){if(!node.right){node.right=new TreeNode}node=node.right}else{if(!node.left){node.left=new TreeNode}node=node.left}if(jj===0&&!node.val){node.val=entry[1]}}}}}return{decodeLut:decodeLut,numBitsLUTQick:numBitsLUTQick,numBitsLUT:numBitsLUT,tree:tree,stuffedData:stuffedData,srcPtr:srcPtr,bitPos:bitPos}},readHuffman:function(input,data,OutPixelTypeArray,useBSQForOutputDim){var headerInfo=data.headerInfo;var numDims=headerInfo.numDims;var height=data.headerInfo.height;var width=data.headerInfo.width;var numPixels=width*height;var huffmanInfo=this.readHuffmanTree(input,data);var decodeLut=huffmanInfo.decodeLut;var tree=huffmanInfo.tree;var stuffedData=huffmanInfo.stuffedData;var srcPtr=huffmanInfo.srcPtr;var bitPos=huffmanInfo.bitPos;var numBitsLUTQick=huffmanInfo.numBitsLUTQick;var numBitsLUT=huffmanInfo.numBitsLUT;var offset=data.headerInfo.imageType===0?128:0;var node,val,delta,mask=data.pixels.resultMask,valTmp,valTmpQuick,currentBit;var i,j,k,ii;var prevVal=0;if(bitPos>0){srcPtr++;bitPos=0}var word=stuffedData[srcPtr];var deltaEncode=data.encodeMode===1;var resultPixelsAllDim=new OutPixelTypeArray(numPixels*numDims);var resultPixels=resultPixelsAllDim;var iDim;if(numDims<2||deltaEncode){for(iDim=0;iDim<numDims;iDim++){if(numDims>1){resultPixels=new OutPixelTypeArray(resultPixelsAllDim.buffer,numPixels*iDim,numPixels);prevVal=0}if(data.headerInfo.numValidPixel===width*height){for(k=0,i=0;i<height;i++){for(j=0;j<width;j++,k++){val=0;valTmp=word<<bitPos>>>32-numBitsLUTQick;valTmpQuick=valTmp;if(32-bitPos<numBitsLUTQick){valTmp|=stuffedData[srcPtr+1]>>>64-bitPos-numBitsLUTQick;valTmpQuick=valTmp}if(decodeLut[valTmpQuick]){val=decodeLut[valTmpQuick][1];bitPos+=decodeLut[valTmpQuick][0]}else{valTmp=word<<bitPos>>>32-numBitsLUT;valTmpQuick=valTmp;if(32-bitPos<numBitsLUT){valTmp|=stuffedData[srcPtr+1]>>>64-bitPos-numBitsLUT;valTmpQuick=valTmp}node=tree;for(ii=0;ii<numBitsLUT;ii++){currentBit=valTmp>>>numBitsLUT-ii-1&1;node=currentBit?node.right:node.left;if(!(node.left||node.right)){val=node.val;bitPos=bitPos+ii+1;break}}}if(bitPos>=32){bitPos-=32;srcPtr++;word=stuffedData[srcPtr]}delta=val-offset;if(deltaEncode){if(j>0){delta+=prevVal}else if(i>0){delta+=resultPixels[k-width]}else{delta+=prevVal}delta&=255;resultPixels[k]=delta;prevVal=delta}else{resultPixels[k]=delta}}}}else{for(k=0,i=0;i<height;i++){for(j=0;j<width;j++,k++){if(mask[k]){val=0;valTmp=word<<bitPos>>>32-numBitsLUTQick;valTmpQuick=valTmp;if(32-bitPos<numBitsLUTQick){valTmp|=stuffedData[srcPtr+1]>>>64-bitPos-numBitsLUTQick;valTmpQuick=valTmp}if(decodeLut[valTmpQuick]){val=decodeLut[valTmpQuick][1];bitPos+=decodeLut[valTmpQuick][0]}else{valTmp=word<<bitPos>>>32-numBitsLUT;valTmpQuick=valTmp;if(32-bitPos<numBitsLUT){valTmp|=stuffedData[srcPtr+1]>>>64-bitPos-numBitsLUT;valTmpQuick=valTmp}node=tree;for(ii=0;ii<numBitsLUT;ii++){currentBit=valTmp>>>numBitsLUT-ii-1&1;node=currentBit?node.right:node.left;if(!(node.left||node.right)){val=node.val;bitPos=bitPos+ii+1;break}}}if(bitPos>=32){bitPos-=32;srcPtr++;word=stuffedData[srcPtr]}delta=val-offset;if(deltaEncode){if(j>0&&mask[k-1]){delta+=prevVal}else if(i>0&&mask[k-width]){delta+=resultPixels[k-width]}else{delta+=prevVal}delta&=255;resultPixels[k]=delta;prevVal=delta}else{resultPixels[k]=delta}}}}}}}else{for(k=0,i=0;i<height;i++){for(j=0;j<width;j++){k=i*width+j;if(!mask||mask[k]){for(iDim=0;iDim<numDims;iDim++,k+=numPixels){val=0;valTmp=word<<bitPos>>>32-numBitsLUTQick;valTmpQuick=valTmp;if(32-bitPos<numBitsLUTQick){valTmp|=stuffedData[srcPtr+1]>>>64-bitPos-numBitsLUTQick;valTmpQuick=valTmp}if(decodeLut[valTmpQuick]){val=decodeLut[valTmpQuick][1];bitPos+=decodeLut[valTmpQuick][0]}else{valTmp=word<<bitPos>>>32-numBitsLUT;valTmpQuick=valTmp;if(32-bitPos<numBitsLUT){valTmp|=stuffedData[srcPtr+1]>>>64-bitPos-numBitsLUT;valTmpQuick=valTmp}node=tree;for(ii=0;ii<numBitsLUT;ii++){currentBit=valTmp>>>numBitsLUT-ii-1&1;node=currentBit?node.right:node.left;if(!(node.left||node.right)){val=node.val;bitPos=bitPos+ii+1;break}}}if(bitPos>=32){bitPos-=32;srcPtr++;word=stuffedData[srcPtr]}delta=val-offset;resultPixels[k]=delta}}}}}data.ptr=data.ptr+(srcPtr+1)*4+(bitPos>0?4:0);data.pixels.resultPixels=resultPixelsAllDim;if(numDims>1&&!useBSQForOutputDim){data.pixels.resultPixels=Lerc2Helpers.swapDimensionOrder(resultPixelsAllDim,numPixels,numDims,OutPixelTypeArray)}},decodeBits:function(input,data,blockDataBuffer,offset,iDim){{var headerInfo=data.headerInfo;var fileVersion=headerInfo.fileVersion;var blockPtr=0;var viewByteLength=input.byteLength-data.ptr>=5?5:input.byteLength-data.ptr;var view=new DataView(input,data.ptr,viewByteLength);var headerByte=view.getUint8(0);blockPtr++;var bits67=headerByte>>6;var n=bits67===0?4:3-bits67;var doLut=(headerByte&32)>0?true:false;var numBits=headerByte&31;var numElements=0;if(n===1){numElements=view.getUint8(blockPtr);blockPtr++}else if(n===2){numElements=view.getUint16(blockPtr,true);blockPtr+=2}else if(n===4){numElements=view.getUint32(blockPtr,true);blockPtr+=4}else{throw"Invalid valid pixel count type"}var scale=2*headerInfo.maxZError;var stuffedData,arrayBuf,store8,dataBytes,dataWords;var lutArr,lutData,lutBytes,lutBitsPerElement,bitsPerPixel;var zMax=headerInfo.numDims>1?headerInfo.maxValues[iDim]:headerInfo.zMax;if(doLut){data.counter.lut++;lutBytes=view.getUint8(blockPtr);lutBitsPerElement=numBits;blockPtr++;dataBytes=Math.ceil((lutBytes-1)*numBits/8);dataWords=Math.ceil(dataBytes/4);arrayBuf=new ArrayBuffer(dataWords*4);store8=new Uint8Array(arrayBuf);data.ptr+=blockPtr;store8.set(new Uint8Array(input,data.ptr,dataBytes));lutData=new Uint32Array(arrayBuf);data.ptr+=dataBytes;bitsPerPixel=0;while(lutBytes-1>>>bitsPerPixel){bitsPerPixel++}dataBytes=Math.ceil(numElements*bitsPerPixel/8);dataWords=Math.ceil(dataBytes/4);arrayBuf=new ArrayBuffer(dataWords*4);store8=new Uint8Array(arrayBuf);store8.set(new Uint8Array(input,data.ptr,dataBytes));stuffedData=new Uint32Array(arrayBuf);data.ptr+=dataBytes;if(fileVersion>=3){lutArr=BitStuffer.unstuffLUT2(lutData,numBits,lutBytes-1,offset,scale,zMax)}else{lutArr=BitStuffer.unstuffLUT(lutData,numBits,lutBytes-1,offset,scale,zMax)}if(fileVersion>=3){BitStuffer.unstuff2(stuffedData,blockDataBuffer,bitsPerPixel,numElements,lutArr)}else{BitStuffer.unstuff(stuffedData,blockDataBuffer,bitsPerPixel,numElements,lutArr)}}else{data.counter.bitstuffer++;bitsPerPixel=numBits;data.ptr+=blockPtr;if(bitsPerPixel>0){dataBytes=Math.ceil(numElements*bitsPerPixel/8);dataWords=Math.ceil(dataBytes/4);arrayBuf=new ArrayBuffer(dataWords*4);store8=new Uint8Array(arrayBuf);store8.set(new Uint8Array(input,data.ptr,dataBytes));stuffedData=new Uint32Array(arrayBuf);data.ptr+=dataBytes;if(fileVersion>=3){if(offset==null){BitStuffer.originalUnstuff2(stuffedData,blockDataBuffer,bitsPerPixel,numElements)}else{BitStuffer.unstuff2(stuffedData,blockDataBuffer,bitsPerPixel,numElements,false,offset,scale,zMax)}}else{if(offset==null){BitStuffer.originalUnstuff(stuffedData,blockDataBuffer,bitsPerPixel,numElements)}else{BitStuffer.unstuff(stuffedData,blockDataBuffer,bitsPerPixel,numElements,false,offset,scale,zMax)}}}}}},readTiles:function(input,data,OutPixelTypeArray,useBSQForOutputDim){var headerInfo=data.headerInfo;var width=headerInfo.width;var height=headerInfo.height;var numPixels=width*height;var microBlockSize=headerInfo.microBlockSize;var imageType=headerInfo.imageType;var dataTypeSize=Lerc2Helpers.getDataTypeSize(imageType);var numBlocksX=Math.ceil(width/microBlockSize);var numBlocksY=Math.ceil(height/microBlockSize);data.pixels.numBlocksY=numBlocksY;data.pixels.numBlocksX=numBlocksX;data.pixels.ptr=0;var row=0,col=0,blockY=0,blockX=0,thisBlockHeight=0,thisBlockWidth=0,bytesLeft=0,headerByte=0,bits67=0,testCode=0,outPtr=0,outStride=0,numBytes=0,bytesleft=0,z=0,blockPtr=0;var view,block,arrayBuf,store8,rawData;var blockEncoding;var blockDataBuffer=new OutPixelTypeArray(microBlockSize*microBlockSize);var lastBlockHeight=height%microBlockSize||microBlockSize;var lastBlockWidth=width%microBlockSize||microBlockSize;var offsetType,offset;var numDims=headerInfo.numDims,iDim;var mask=data.pixels.resultMask;var resultPixels=data.pixels.resultPixels;var fileVersion=headerInfo.fileVersion;var fileVersionCheckNum=fileVersion>=5?14:15;var isDiffEncoding;var zMax=headerInfo.zMax;var resultPixelsPrevDim;for(blockY=0;blockY<numBlocksY;blockY++){thisBlockHeight=blockY!==numBlocksY-1?microBlockSize:lastBlockHeight;for(blockX=0;blockX<numBlocksX;blockX++){thisBlockWidth=blockX!==numBlocksX-1?microBlockSize:lastBlockWidth;outPtr=blockY*width*microBlockSize+blockX*microBlockSize;outStride=width-thisBlockWidth;for(iDim=0;iDim<numDims;iDim++){if(numDims>1){resultPixelsPrevDim=resultPixels;outPtr=blockY*width*microBlockSize+blockX*microBlockSize;resultPixels=new OutPixelTypeArray(data.pixels.resultPixels.buffer,numPixels*iDim*dataTypeSize,numPixels);zMax=headerInfo.maxValues[iDim]}else{resultPixelsPrevDim=null}bytesLeft=input.byteLength-data.ptr;view=new DataView(input,data.ptr,Math.min(10,bytesLeft));block={};blockPtr=0;headerByte=view.getUint8(0);blockPtr++;isDiffEncoding=headerInfo.fileVersion>=5?headerByte&4:0;bits67=headerByte>>6&255;testCode=headerByte>>2&fileVersionCheckNum;if(testCode!==(blockX*microBlockSize>>3&fileVersionCheckNum)){throw"integrity issue"}if(isDiffEncoding&&iDim===0){throw"integrity issue"}blockEncoding=headerByte&3;if(blockEncoding>3){data.ptr+=blockPtr;throw"Invalid block encoding ("+blockEncoding+")"}else if(blockEncoding===2){if(isDiffEncoding){if(mask){for(row=0;row<thisBlockHeight;row++){for(col=0;col<thisBlockWidth;col++){if(mask[outPtr]){resultPixels[outPtr]=resultPixelsPrevDim[outPtr]}outPtr++}}}else{for(row=0;row<thisBlockHeight;row++){for(col=0;col<thisBlockWidth;col++){resultPixels[outPtr]=resultPixelsPrevDim[outPtr];outPtr++}}}}data.counter.constant++;data.ptr+=blockPtr;continue}else if(blockEncoding===0){if(isDiffEncoding){throw"integrity issue"}data.counter.uncompressed++;data.ptr+=blockPtr;numBytes=thisBlockHeight*thisBlockWidth*dataTypeSize;bytesleft=input.byteLength-data.ptr;numBytes=numBytes<bytesleft?numBytes:bytesleft;arrayBuf=new ArrayBuffer(numBytes%dataTypeSize===0?numBytes:numBytes+dataTypeSize-numBytes%dataTypeSize);store8=new Uint8Array(arrayBuf);store8.set(new Uint8Array(input,data.ptr,numBytes));rawData=new OutPixelTypeArray(arrayBuf);z=0;if(mask){for(row=0;row<thisBlockHeight;row++){for(col=0;col<thisBlockWidth;col++){if(mask[outPtr]){resultPixels[outPtr]=rawData[z++]}outPtr++}outPtr+=outStride}}else{for(row=0;row<thisBlockHeight;row++){for(col=0;col<thisBlockWidth;col++){resultPixels[outPtr++]=rawData[z++]}outPtr+=outStride}}data.ptr+=z*dataTypeSize}else{offsetType=Lerc2Helpers.getDataTypeUsed(isDiffEncoding&&imageType<6?4:imageType,bits67);offset=Lerc2Helpers.getOnePixel(block,blockPtr,offsetType,view);blockPtr+=Lerc2Helpers.getDataTypeSize(offsetType);if(blockEncoding===3){data.ptr+=blockPtr;data.counter.constantoffset++;if(mask){for(row=0;row<thisBlockHeight;row++){for(col=0;col<thisBlockWidth;col++){if(mask[outPtr]){resultPixels[outPtr]=isDiffEncoding?Math.min(zMax,resultPixelsPrevDim[outPtr]+offset):offset}outPtr++}outPtr+=outStride}}else{for(row=0;row<thisBlockHeight;row++){for(col=0;col<thisBlockWidth;col++){resultPixels[outPtr]=isDiffEncoding?Math.min(zMax,resultPixelsPrevDim[outPtr]+offset):offset;outPtr++}outPtr+=outStride}}}else{data.ptr+=blockPtr;Lerc2Helpers.decodeBits(input,data,blockDataBuffer,offset,iDim);blockPtr=0;if(isDiffEncoding){if(mask){for(row=0;row<thisBlockHeight;row++){for(col=0;col<thisBlockWidth;col++){if(mask[outPtr]){resultPixels[outPtr]=blockDataBuffer[blockPtr++]+resultPixelsPrevDim[outPtr]}outPtr++}outPtr+=outStride}}else{for(row=0;row<thisBlockHeight;row++){for(col=0;col<thisBlockWidth;col++){resultPixels[outPtr]=blockDataBuffer[blockPtr++]+resultPixelsPrevDim[outPtr];outPtr++}outPtr+=outStride}}}else if(mask){for(row=0;row<thisBlockHeight;row++){for(col=0;col<thisBlockWidth;col++){if(mask[outPtr]){resultPixels[outPtr]=blockDataBuffer[blockPtr++]}outPtr++}outPtr+=outStride}}else{for(row=0;row<thisBlockHeight;row++){for(col=0;col<thisBlockWidth;col++){resultPixels[outPtr++]=blockDataBuffer[blockPtr++]}outPtr+=outStride}}}}}}}if(numDims>1&&!useBSQForOutputDim){data.pixels.resultPixels=Lerc2Helpers.swapDimensionOrder(data.pixels.resultPixels,numPixels,numDims,OutPixelTypeArray)}},formatFileInfo:function(data){return{fileIdentifierString:data.headerInfo.fileIdentifierString,fileVersion:data.headerInfo.fileVersion,imageType:data.headerInfo.imageType,height:data.headerInfo.height,width:data.headerInfo.width,numValidPixel:data.headerInfo.numValidPixel,microBlockSize:data.headerInfo.microBlockSize,blobSize:data.headerInfo.blobSize,maxZError:data.headerInfo.maxZError,pixelType:Lerc2Helpers.getPixelType(data.headerInfo.imageType),eofOffset:data.eofOffset,mask:data.mask?{numBytes:data.mask.numBytes}:null,pixels:{numBlocksX:data.pixels.numBlocksX,numBlocksY:data.pixels.numBlocksY,maxValue:data.headerInfo.zMax,minValue:data.headerInfo.zMin,noDataValue:data.noDataValue}}},constructConstantSurface:function(data,useBSQForOutputDim){var val=data.headerInfo.zMax;var valMin=data.headerInfo.zMin;var maxValues=data.headerInfo.maxValues;var numDims=data.headerInfo.numDims;var numPixels=data.headerInfo.height*data.headerInfo.width;var i=0,k=0,nStart=0;var mask=data.pixels.resultMask;var resultPixels=data.pixels.resultPixels;if(mask){if(numDims>1){if(useBSQForOutputDim){for(i=0;i<numDims;i++){nStart=i*numPixels;val=maxValues[i];for(k=0;k<numPixels;k++){if(mask[k]){resultPixels[nStart+k]=val}}}}else{for(k=0;k<numPixels;k++){if(mask[k]){nStart=k*numDims;for(i=0;i<numDims;i++){resultPixels[nStart+numDims]=maxValues[i]}}}}}else{for(k=0;k<numPixels;k++){if(mask[k]){resultPixels[k]=val}}}}else{if(numDims>1&&valMin!==val){if(useBSQForOutputDim){for(i=0;i<numDims;i++){nStart=i*numPixels;val=maxValues[i];for(k=0;k<numPixels;k++){resultPixels[nStart+k]=val}}}else{for(k=0;k<numPixels;k++){nStart=k*numDims;for(i=0;i<numDims;i++){resultPixels[nStart+i]=maxValues[i]}}}}else{for(k=0;k<numPixels*numDims;k++){resultPixels[k]=val}}}return},getDataTypeArray:function(t){var tp;switch(t){case 0:tp=Int8Array;break;case 1:tp=Uint8Array;break;case 2:tp=Int16Array;break;case 3:tp=Uint16Array;break;case 4:tp=Int32Array;break;case 5:tp=Uint32Array;break;case 6:tp=Float32Array;break;case 7:tp=Float64Array;break;default:tp=Float32Array}return tp},getPixelType:function(t){var tp;switch(t){case 0:tp="S8";break;case 1:tp="U8";break;case 2:tp="S16";break;case 3:tp="U16";break;case 4:tp="S32";break;case 5:tp="U32";break;case 6:tp="F32";break;case 7:tp="F64";break;default:tp="F32"}return tp},isValidPixelValue:function(t,val){if(val==null){return false}var isValid;switch(t){case 0:isValid=val>=-128&&val<=127;break;case 1:isValid=val>=0&&val<=255;break;case 2:isValid=val>=-32768&&val<=32767;break;case 3:isValid=val>=0&&val<=65536;break;case 4:isValid=val>=-2147483648&&val<=2147483647;break;case 5:isValid=val>=0&&val<=4294967296;break;case 6:isValid=val>=-34027999387901484e22&&val<=34027999387901484e22;break;case 7:isValid=val>=-17976931348623157e292&&val<=17976931348623157e292;break;default:isValid=false}return isValid},getDataTypeSize:function(t){var s=0;switch(t){case 0:case 1:s=1;break;case 2:case 3:s=2;break;case 4:case 5:case 6:s=4;break;case 7:s=8;break;default:s=t}return s},getDataTypeUsed:function(dt,tc){var t=dt;switch(dt){case 2:case 4:t=dt-tc;break;case 3:case 5:t=dt-2*tc;break;case 6:if(0===tc){t=dt}else if(1===tc){t=2}else{t=1}break;case 7:if(0===tc){t=dt}else{t=dt-2*tc+1}break;default:t=dt;break}return t},getOnePixel:function(block,blockPtr,offsetType,view){var temp=0;switch(offsetType){case 0:temp=view.getInt8(blockPtr);break;case 1:temp=view.getUint8(blockPtr);break;case 2:temp=view.getInt16(blockPtr,true);break;case 3:temp=view.getUint16(blockPtr,true);break;case 4:temp=view.getInt32(blockPtr,true);break;case 5:temp=view.getUInt32(blockPtr,true);break;case 6:temp=view.getFloat32(blockPtr,true);break;case 7:temp=view.getFloat64(blockPtr,true);break;default:throw"the decoder does not understand this pixel type"}return temp},swapDimensionOrder:function(pixels,numPixels,numDims,OutPixelTypeArray,inputIsBIP){var i=0,j=0,iDim=0,temp=0,swap=pixels;if(numDims>1){swap=new OutPixelTypeArray(numPixels*numDims);if(inputIsBIP){for(i=0;i<numPixels;i++){temp=i;for(iDim=0;iDim<numDims;iDim++,temp+=numPixels){swap[temp]=pixels[j++]}}}else{for(i=0;i<numPixels;i++){temp=i;for(iDim=0;iDim<numDims;iDim++,temp+=numPixels){swap[j++]=pixels[temp]}}}}return swap}};var TreeNode=function(val,left,right){this.val=val;this.left=left;this.right=right};var Lerc2Decode={decode:function(input,options){options=options||{};var noDataValue=options.noDataValue;var i=0,data={};data.ptr=options.inputOffset||0;data.pixels={};if(!Lerc2Helpers.readHeaderInfo(input,data)){return}var headerInfo=data.headerInfo;var fileVersion=headerInfo.fileVersion;var OutPixelTypeArray=Lerc2Helpers.getDataTypeArray(headerInfo.imageType);if(fileVersion>5){throw"unsupported lerc version 2."+fileVersion}Lerc2Helpers.readMask(input,data);if(headerInfo.numValidPixel!==headerInfo.width*headerInfo.height&&!data.pixels.resultMask){data.pixels.resultMask=options.maskData}var numPixels=headerInfo.width*headerInfo.height;data.pixels.resultPixels=new OutPixelTypeArray(numPixels*headerInfo.numDims);data.counter={onesweep:0,uncompressed:0,lut:0,bitstuffer:0,constant:0,constantoffset:0};var useBSQForOutputDim=!options.returnPixelInterleavedDims;if(headerInfo.numValidPixel!==0){if(headerInfo.zMax===headerInfo.zMin){Lerc2Helpers.constructConstantSurface(data,useBSQForOutputDim)}else if(fileVersion>=4&&Lerc2Helpers.checkMinMaxRanges(input,data)){Lerc2Helpers.constructConstantSurface(data,useBSQForOutputDim)}else{var view=new DataView(input,data.ptr,2);var bReadDataOneSweep=view.getUint8(0);data.ptr++;if(bReadDataOneSweep){Lerc2Helpers.readDataOneSweep(input,data,OutPixelTypeArray,useBSQForOutputDim)}else{if(fileVersion>1&&headerInfo.imageType<=1&&Math.abs(headerInfo.maxZError-.5)<1e-5){var flagHuffman=view.getUint8(1);data.ptr++;data.encodeMode=flagHuffman;if(flagHuffman>2||fileVersion<4&&flagHuffman>1){throw"Invalid Huffman flag "+flagHuffman}if(flagHuffman){Lerc2Helpers.readHuffman(input,data,OutPixelTypeArray,useBSQForOutputDim)}else{Lerc2Helpers.readTiles(input,data,OutPixelTypeArray,useBSQForOutputDim)}}else{Lerc2Helpers.readTiles(input,data,OutPixelTypeArray,useBSQForOutputDim)}}}}data.eofOffset=data.ptr;var diff;if(options.inputOffset){diff=data.headerInfo.blobSize+options.inputOffset-data.ptr;if(Math.abs(diff)>=1){data.eofOffset=options.inputOffset+data.headerInfo.blobSize}}else{diff=data.headerInfo.blobSize-data.ptr;if(Math.abs(diff)>=1){data.eofOffset=data.headerInfo.blobSize}}var result={width:headerInfo.width,height:headerInfo.height,pixelData:data.pixels.resultPixels,minValue:headerInfo.zMin,maxValue:headerInfo.zMax,validPixelCount:headerInfo.numValidPixel,dimCount:headerInfo.numDims,dimStats:{minValues:headerInfo.minValues,maxValues:headerInfo.maxValues},maskData:data.pixels.resultMask};if(data.pixels.resultMask&&Lerc2Helpers.isValidPixelValue(headerInfo.imageType,noDataValue)){var mask=data.pixels.resultMask;for(i=0;i<numPixels;i++){if(!mask[i]){result.pixelData[i]=noDataValue}}result.noDataValue=noDataValue}data.noDataValue=noDataValue;if(options.returnFileInfo){result.fileInfo=Lerc2Helpers.formatFileInfo(data)}return result},getBandCount:function(input){var count=0;var i=0;var temp={};temp.ptr=0;temp.pixels={};while(i<input.byteLength-58){Lerc2Helpers.readHeaderInfo(input,temp);i+=temp.headerInfo.blobSize;count++;temp.ptr=i}return count}};return Lerc2Decode}();var isPlatformLittleEndian=function(){var a=new ArrayBuffer(4);var b=new Uint8Array(a);var c=new Uint32Array(a);c[0]=1;return b[0]===1}();var Lerc={decode:function(encodedData,options){if(!isPlatformLittleEndian){throw"Big endian system is not supported."}options=options||{};var inputOffset=options.inputOffset||0;var fileIdView=new Uint8Array(encodedData,inputOffset,10);var fileIdentifierString=String.fromCharCode.apply(null,fileIdView);var lerc,majorVersion;if(fileIdentifierString.trim()==="CntZImage"){lerc=LercDecode;majorVersion=1}else if(fileIdentifierString.substring(0,5)==="Lerc2"){lerc=Lerc2Decode;majorVersion=2}else{throw"Unexpected file identifier string: "+fileIdentifierString}var iPlane=0,eof=encodedData.byteLength-10,encodedMaskData,bandMasks=[],bandMask,maskData;var decodedPixelBlock={width:0,height:0,pixels:[],pixelType:options.pixelType,mask:null,statistics:[]};var uniqueBandMaskCount=0;while(inputOffset<eof){var result=lerc.decode(encodedData,{inputOffset:inputOffset,encodedMaskData:encodedMaskData,maskData:maskData,returnMask:iPlane===0?true:false,returnEncodedMask:iPlane===0?true:false,returnFileInfo:true,returnPixelInterleavedDims:options.returnPixelInterleavedDims,pixelType:options.pixelType||null,noDataValue:options.noDataValue||null});inputOffset=result.fileInfo.eofOffset;maskData=result.maskData;if(iPlane===0){encodedMaskData=result.encodedMaskData;decodedPixelBlock.width=result.width;decodedPixelBlock.height=result.height;decodedPixelBlock.dimCount=result.dimCount||1;decodedPixelBlock.pixelType=result.pixelType||result.fileInfo.pixelType;decodedPixelBlock.mask=maskData}if(majorVersion>1){if(maskData){bandMasks.push(maskData)}if(result.fileInfo.mask&&result.fileInfo.mask.numBytes>0){uniqueBandMaskCount++}}iPlane++;decodedPixelBlock.pixels.push(result.pixelData);decodedPixelBlock.statistics.push({minValue:result.minValue,maxValue:result.maxValue,noDataValue:result.noDataValue,dimStats:result.dimStats})}var i,j,numPixels;if(majorVersion>1&&uniqueBandMaskCount>1){numPixels=decodedPixelBlock.width*decodedPixelBlock.height;decodedPixelBlock.bandMasks=bandMasks;maskData=new Uint8Array(numPixels);maskData.set(bandMasks[0]);for(i=1;i<bandMasks.length;i++){bandMask=bandMasks[i];for(j=0;j<numPixels;j++){maskData[j]=maskData[j]&bandMask[j]}}decodedPixelBlock.maskData=maskData}return decodedPixelBlock}};if(typeof define==="function"&&define.amd){define([],function(){return Lerc})}else if(typeof module!=="undefined"&&module.exports){module.exports=Lerc}else{this.Lerc=Lerc}})();
/*! Lerc 4.0
Copyright 2015 - 2022 Esri
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
A local copy of the license and additional notices are located with the
source distribution at:
http://github.com/Esri/lerc/
Contributors: Thomas Maurer, Wenxue Ju
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Lerc={})}(this,(function(t){"use strict";var e,n=(e="undefined"==typeof document&&"undefined"==typeof location?new(require("url").URL)("file:"+__filename).href:"undefined"==typeof document?location.href:document.currentScript&&document.currentScript.src||new URL("LercDecode.js",document.baseURI).href,function(t){var n,r;(t=void 0!==(t=t||{})?t:{}).ready=new Promise((function(t,e){n=t,r=e}));var i,o,a,s,u,c,f=Object.assign({},t),l="object"==typeof window,p="function"==typeof importScripts,d="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,h="";d?(h=p?require("path").dirname(h)+"/":__dirname+"/",c=()=>{u||(s=require("fs"),u=require("path"))},i=function(t,e){return c(),t=u.normalize(t),s.readFileSync(t,e?void 0:"utf8")},a=t=>{var e=i(t,!0);return e.buffer||(e=new Uint8Array(e)),e},o=(t,e,n)=>{c(),t=u.normalize(t),s.readFile(t,(function(t,r){t?n(t):e(r.buffer)}))},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),process.argv.slice(2),process.on("uncaughtException",(function(t){if(!(t instanceof X))throw t})),process.on("unhandledRejection",(function(t){throw t})),t.inspect=function(){return"[Emscripten Module object]"}):(l||p)&&(p?h=self.location.href:"undefined"!=typeof document&&document.currentScript&&(h=document.currentScript.src),e&&(h=e),h=0!==h.indexOf("blob:")?h.substr(0,h.replace(/[?#].*/,"").lastIndexOf("/")+1):"",i=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.send(null),e.responseText},p&&(a=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)}),o=(t,e,n)=>{var r=new XMLHttpRequest;r.open("GET",t,!0),r.responseType="arraybuffer",r.onload=()=>{200==r.status||0==r.status&&r.response?e(r.response):n()},r.onerror=n,r.send(null)}),t.print||console.log.bind(console);var y,m,g=t.printErr||console.warn.bind(console);Object.assign(t,f),f=null,t.arguments,t.thisProgram,t.quit,t.wasmBinary&&(y=t.wasmBinary),t.noExitRuntime,"object"!=typeof WebAssembly&&B("no native wasm support detected");var _,w,b,A,v,x,U=!1,R="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function I(t,e){return t?function(t,e,n){for(var r=e+n,i=e;t[i]&&!(i>=r);)++i;if(i-e>16&&t.buffer&&R)return R.decode(t.subarray(e,i));for(var o="";e<i;){var a=t[e++];if(128&a){var s=63&t[e++];if(192!=(224&a)){var u=63&t[e++];if((a=224==(240&a)?(15&a)<<12|s<<6|u:(7&a)<<18|s<<12|u<<6|63&t[e++])<65536)o+=String.fromCharCode(a);else{var c=a-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|s)}else o+=String.fromCharCode(a)}return o}(b,t,e):""}function S(e){_=e,t.HEAP8=w=new Int8Array(e),t.HEAP16=new Int16Array(e),t.HEAP32=A=new Int32Array(e),t.HEAPU8=b=new Uint8Array(e),t.HEAPU16=new Uint16Array(e),t.HEAPU32=v=new Uint32Array(e),t.HEAPF32=new Float32Array(e),t.HEAPF64=new Float64Array(e)}t.INITIAL_MEMORY;var T,C,D=[],E=[],P=[],F=0,j=null;function B(e){t.onAbort&&t.onAbort(e),g(e="Aborted("+e+")"),U=!0,e+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(e);throw r(n),n}function L(t){return t.startsWith("data:application/octet-stream;base64,")}function z(t){return t.startsWith("file://")}function M(t){try{if(t==T&&y)return new Uint8Array(y);if(a)return a(t);throw"both async and sync fetching of the wasm failed"}catch(t){B(t)}}function V(e){for(;e.length>0;){var n=e.shift();if("function"!=typeof n){var r=n.func;"number"==typeof r?void 0===n.arg?W(r)():W(r)(n.arg):r(void 0===n.arg?null:n.arg)}else n(t)}}t.locateFile?L(T="lerc-wasm.wasm")||(C=T,T=t.locateFile?t.locateFile(C,h):h+C):T=new URL("lerc-wasm.wasm","undefined"==typeof document&&"undefined"==typeof location?new(require("url").URL)("file:"+__filename).href:"undefined"==typeof document?location.href:document.currentScript&&document.currentScript.src||new URL("LercDecode.js",document.baseURI).href).toString();var k=[];function W(t){var e=k[t];return e||(t>=k.length&&(k.length=t+1),k[t]=e=x.get(t)),e}function H(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){v[this.ptr+4>>2]=t},this.get_type=function(){return v[this.ptr+4>>2]},this.set_destructor=function(t){v[this.ptr+8>>2]=t},this.get_destructor=function(){return v[this.ptr+8>>2]},this.set_refcount=function(t){A[this.ptr>>2]=t},this.set_caught=function(t){t=t?1:0,w[this.ptr+12>>0]=t},this.get_caught=function(){return 0!=w[this.ptr+12>>0]},this.set_rethrown=function(t){t=t?1:0,w[this.ptr+13>>0]=t},this.get_rethrown=function(){return 0!=w[this.ptr+13>>0]},this.init=function(t,e){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(e),this.set_refcount(0),this.set_caught(!1),this.set_rethrown(!1)},this.add_ref=function(){var t=A[this.ptr>>2];A[this.ptr>>2]=t+1},this.release_ref=function(){var t=A[this.ptr>>2];return A[this.ptr>>2]=t-1,1===t},this.set_adjusted_ptr=function(t){v[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return v[this.ptr+16>>2]},this.get_exception_ptr=function(){if(G(this.get_type()))return v[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function O(t){try{return m.grow(t-_.byteLength+65535>>>16),S(m.buffer),1}catch(t){}}var q={a:function(t,e,n,r){B("Assertion failed: "+I(t)+", at: "+[e?I(e):"unknown filename",n,r?I(r):"unknown function"])},c:function(t){return $(t+24)+24},b:function(t,e,n){throw new H(t).init(e,n),t},d:function(){B("")},f:function(t,e,n){b.copyWithin(t,e,e+n)},e:function(t){var e,n,r=b.length,i=2147483648;if((t>>>=0)>i)return!1;for(var o=1;o<=4;o*=2){var a=r*(1+.2/o);if(a=Math.min(a,t+100663296),O(Math.min(i,(e=Math.max(t,a))+((n=65536)-e%n)%n)))return!0}return!1}};!function(){var e={a:q};function n(e,n){var r,i=e.exports;t.asm=i,S((m=t.asm.g).buffer),x=t.asm.m,r=t.asm.h,E.unshift(r),function(e){if(F--,t.monitorRunDependencies&&t.monitorRunDependencies(F),0==F&&j){var n=j;j=null,n()}}()}function i(t){n(t.instance)}function a(t){return function(){if(!y&&(l||p)){if("function"==typeof fetch&&!z(T))return fetch(T,{credentials:"same-origin"}).then((function(t){if(!t.ok)throw"failed to load wasm binary file at '"+T+"'";return t.arrayBuffer()})).catch((function(){return M(T)}));if(o)return new Promise((function(t,e){o(T,(function(e){t(new Uint8Array(e))}),e)}))}return Promise.resolve().then((function(){return M(T)}))}().then((function(t){return WebAssembly.instantiate(t,e)})).then((function(t){return t})).then(t,(function(t){g("failed to asynchronously prepare wasm: "+t),B(t)}))}if(F++,t.monitorRunDependencies&&t.monitorRunDependencies(F),t.instantiateWasm)try{return t.instantiateWasm(e,n)}catch(t){return g("Module.instantiateWasm callback failed with error: "+t),!1}(y||"function"!=typeof WebAssembly.instantiateStreaming||L(T)||z(T)||d||"function"!=typeof fetch?a(i):fetch(T,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,e).then(i,(function(t){return g("wasm streaming compile failed: "+t),g("falling back to ArrayBuffer instantiation"),a(i)}))}))).catch(r)}(),t.___wasm_call_ctors=function(){return(t.___wasm_call_ctors=t.asm.h).apply(null,arguments)},t._lerc_getBlobInfo=function(){return(t._lerc_getBlobInfo=t.asm.i).apply(null,arguments)},t._lerc_getDataRanges=function(){return(t._lerc_getDataRanges=t.asm.j).apply(null,arguments)},t._lerc_decode=function(){return(t._lerc_decode=t.asm.k).apply(null,arguments)},t._lerc_decode_4D=function(){return(t._lerc_decode_4D=t.asm.l).apply(null,arguments)};var $=t._malloc=function(){return($=t._malloc=t.asm.n).apply(null,arguments)};t._free=function(){return(t._free=t.asm.o).apply(null,arguments)};var N,G=t.___cxa_is_pointer_type=function(){return(G=t.___cxa_is_pointer_type=t.asm.p).apply(null,arguments)};function X(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}function Y(e){function r(){N||(N=!0,t.calledRun=!0,U||(V(E),n(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),function(){if(t.postRun)for("function"==typeof t.postRun&&(t.postRun=[t.postRun]);t.postRun.length;)e=t.postRun.shift(),P.unshift(e);var e;V(P)}()))}F>0||(function(){if(t.preRun)for("function"==typeof t.preRun&&(t.preRun=[t.preRun]);t.preRun.length;)e=t.preRun.shift(),D.unshift(e);var e;V(D)}(),F>0||(t.setStatus?(t.setStatus("Running..."),setTimeout((function(){setTimeout((function(){t.setStatus("")}),1),r()}),1)):r()))}if(j=function t(){N||Y(),N||(j=t)},t.run=Y,t.preInit)for("function"==typeof t.preInit&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();return Y(),t.ready});const r=[{pixelType:"S8",size:1,ctor:Int8Array,range:[-128,128]},{pixelType:"U8",size:1,ctor:Uint8Array,range:[0,255]},{pixelType:"S16",size:2,ctor:Int16Array,range:[-32768,32767]},{pixelType:"U16",size:2,ctor:Uint16Array,range:[0,65536]},{pixelType:"S32",size:4,ctor:Int32Array,range:[-2147483648,2147483647]},{pixelType:"U32",size:4,ctor:Uint32Array,range:[0,4294967296]},{pixelType:"F32",size:4,ctor:Float32Array,range:[-34027999387901484e22,34027999387901484e22]},{pixelType:"F64",size:8,ctor:Float64Array,range:[-17976931348623157e292,17976931348623157e292]}];let i=null,o=!1;const a={getBlobInfo:null,decode:null};function s(t,e,n){n.set(t.slice(e,e+n.length))}function u(t,e,n,r,i){if(n<2)return t;const o=new r(e*n);if(i)for(let r=0,i=0;r<e;r++)for(let a=0,s=r;a<n;a++,s+=e)o[s]=t[i++];else for(let r=0,i=0;r<e;r++)for(let a=0,s=r;a<n;a++,s+=e)o[i++]=t[s];return o}function c(t,e={}){var n;const r=new Uint8Array(t,null!==(n=e.inputOffset)&&void 0!==n?n:0);return a.getBlobInfo(r)}t.decode=function(t,e={}){var n,i;const o=null!==(n=e.inputOffset)&&void 0!==n?n:0,s=t instanceof Uint8Array?t.subarray(o):new Uint8Array(t,o),c=a.getBlobInfo(s),{data:f,maskData:l}=a.decode(s,c),{width:p,height:d,bandCount:h,dimCount:y,depthCount:m,dataType:g,maskCount:_,statistics:w}=c,b=r[g],A=new b.ctor(f.buffer),v=[],x=[],U=p*d,R=U*m,I=null!==(i=e.returnInterleaved)&&void 0!==i?i:e.returnPixelInterleavedDims;for(let t=0;t<h;t++){const e=A.subarray(t*R,(t+1)*R);if(I)v.push(e);else{const t=u(e,U,m,b.ctor,!0);v.push(t)}x.push(l.subarray(t*R,(t+1)*R))}const S=0===_?null:1===_?x[0]:new Uint8Array(U);if(_>1){S.set(x[0]);for(let t=1;t<x.length;t++){const e=x[t];for(let t=0;t<U;t++)S[t]=S[t]&e[t]}}const{noDataValue:T}=e,C=null!=T&&b.range[0]<=T&&b.range[1]>=T;if(_>0&&C)for(let t=0;t<h;t++){const e=v[t],n=x[t]||S;for(let t=0;t<U;t++)0===n[t]&&(e[t]=T)}const D=_===h&&h>1?x:null,{pixelType:E}=b;return{width:p,height:d,pixelType:E,statistics:w,pixels:v,mask:S,dimCount:y,depthCount:m,bandMasks:D}},t.getBandCount=function(t,e={}){return c(t,e).bandCount},t.getBlobInfo=c,t.isLoaded=function(){return o},t.load=function(t={}){if(i)return i;const e=t.locateFile||((t,e)=>`${e}${t}`);return i=n({locateFile:e}).then((t=>t.ready.then((()=>{!function(t){const{_malloc:e,_free:n,_lerc_getBlobInfo:i,_lerc_getDataRanges:o,_lerc_decode_4D:u,asm:c}=t;let f;const l=Object.values(c).find((e=>e&&"buffer"in e&&e.buffer===t.HEAPU8.buffer)),p=t=>{const n=t.map((t=>16+(t>>3<<3))),r=n.reduce(((t,e)=>t+e)),i=e(r);f=new Uint8Array(l.buffer);let o=n[0];n[0]=i;for(let t=1;t<n.length;t++){const e=n[t];n[t]=n[t-1]+o,o=e}return n};a.getBlobInfo=t=>{const e=12,r=3,a=new Uint8Array(4*e),u=new Uint8Array(8*r),[c,d,h]=p([t.length,a.length,u.length]);f.set(t,c),f.set(a,d),f.set(u,h);let y=i(c,t.length,d,h,e,r);if(y)throw n(c),`lerc-getBlobInfo: error code is ${y}`;f=new Uint8Array(l.buffer),s(f,d,a),s(f,h,u);const m=new Uint32Array(a.buffer),g=new Float64Array(u.buffer),[_,w,b,A,v,x,U,R,I,S,T]=m,C={version:_,dimCount:b,width:A,height:v,validPixelCount:U,bandCount:x,blobSize:R,maskCount:I,depthCount:S,dataType:w,minValue:g[0],maxValue:g[1],maxZerror:g[2],statistics:[],bandCountWithNoData:T};if(T)return C;if(1===S&&1===x)return n(c),C.statistics.push({minValue:g[0],maxValue:g[1]}),C;const D=S*x*8,E=new Uint8Array(D),P=new Uint8Array(D);let F=c,j=0,B=0,L=!1;if(f.byteLength<c+2*D?(n(c),L=!0,[F,j,B]=p([t.length,D,D]),f.set(t,F)):[j,B]=p([D,D]),f.set(E,j),f.set(P,B),y=o(F,t.length,S,x,j,B),y)throw n(F),L||n(j),`lerc-getDataRanges: error code is ${y}`;f=new Uint8Array(l.buffer),s(f,j,E),s(f,B,P);const z=new Float64Array(E.buffer),M=new Float64Array(P.buffer),V=C.statistics;for(let t=0;t<x;t++)if(S>1){const e=z.slice(t*S,(t+1)*S),n=M.slice(t*S,(t+1)*S),r=Math.min.apply(null,e),i=Math.max.apply(null,n);V.push({minValue:r,maxValue:i,dimStats:{minValues:e,maxValues:n},depthStats:{minValues:e,maxValues:n}})}else V.push({minValue:z[t],maxValue:M[t]});return n(F),L||n(j),C},a.decode=(t,e)=>{const{maskCount:i,depthCount:o,bandCount:a,width:c,height:d,dataType:h,bandCountWithNoData:y}=e,m=r[h],g=c*d,_=new Uint8Array(g*a),w=g*o*a*m.size,b=new Uint8Array(w),A=new Uint8Array(a),v=new Uint8Array(8*a),[x,U,R,I,S]=p([t.length,_.length,b.length,A.length,v.length]);f.set(t,x),f.set(_,U),f.set(b,R),f.set(A,I),f.set(v,S);const T=u(x,t.length,i,U,o,c,d,a,h,R,I,S);if(T)throw n(x),`lerc-decode: error code is ${T}`;f=new Uint8Array(l.buffer),s(f,R,b),s(f,U,_);let C=null;if(y){s(f,I,A),s(f,S,v),C=[];const t=new Float64Array(v.buffer);for(let e=0;e<A.length;e++)C.push(A[e]?t[e]:null)}return n(x),{data:b,maskData:_,noDataValues:C}}}(t),o=!0})))),i},Object.defineProperty(t,"__esModule",{value:!0})}));

30

package.json
{
"name": "lerc",
"version": "4.0.0",
"browser": "LercDecode.js",

@@ -8,19 +9,12 @@ "bugs": {

"description": "Rapid decoding of Lerc compressed raster data for any standard pixel type.",
"version": "3.0.0",
"keywords": [
"Esri",
"LERC"
],
"author": "Esri <dev_tools@esri.com> (http://developers.arcgis.com)",
"contributors": [
"Johannes Schmid",
"Chayanika Khatua",
"Thomas Maurer",
"Wenxue Ju"
],
"devDependencies": {
"gh-release": "^2.2.1",
"jsdoc-to-markdown": "^2.0.1",
"jshint": "^2.13.0",
"uglify-js": "^3.14.0"
},
"files": [
"LercDecode.js",
"LercDecode.min.js"
],
"devDependencies": {},
"homepage": "https://github.com/Esri/lerc",

@@ -34,8 +28,4 @@ "license": "Apache-2.0",

},
"scripts": {
"lint": "jshint LercDecode.js",
"build": "uglifyjs LercDecode.js -o LercDecode.min.js --comments",
"docs": "jsdoc2md --template README.hbs --files LercDecode.js",
"release": "./release.sh"
}
}
"scripts": {},
"dependencies": {}
}

@@ -8,4 +8,8 @@ [![npm version][npm-img]][npm-url]

> Rapid decoding of Lerc compressed raster data for any standard pixel type, not just rgb or byte
> Rapid decoding of Lerc compressed raster data for any standard pixel type, not just rgb or byte.
# Breaking changes
- [Web Assembly](https://caniuse.com/wasm) support is now required.
- <code>Lerc.load()</code> must be invoked and the returned promise must be resolved prior to <code>Lerc.decode</code>. This only needs to be done once per worker (or the main thread). There's no extra cost when invoked multiple times as the internal wasm loading promise is cached.
## Browser

@@ -17,6 +21,10 @@

```js
Lerc.decode(xhrResponse, {
await Lerc.load();
const pixelBlock = Lerc.decode(arrayBuffer);
// use options
const pixelBlock = Lerc.decode(arrayBuffer, {
inputOffset: 10, // start from the 10th byte (default is 0)
pixelType: "U8", // only needed for lerc1 (default is F32)
returnPixelInterleavedDims: false // only applicable to n-dim lerc2 blobs (default is false)
returnInterleaved: true // only applicable to n-depth lerc2 blobs (default is false)
});

@@ -28,6 +36,6 @@ ```

```js
npm install lerc && npm install node-fetch
npm install lerc && npm install node-fetch-commonjs
```
```js
const fetch = require('node-fetch');
const fetch = require('node-fetch-commonjs');
const Lerc = require('lerc');

@@ -37,5 +45,6 @@

.then(response => response.arrayBuffer())
.then(body => {
const image = Lerc.decode(body);
image.width // 257
.then(async (body) => {
// on demand load here (internally it's only loading once)
const image = await Lerc.load().then(() => Lerc.decode(body));
console.log(image.width); // 257
});

@@ -49,8 +58,21 @@ ```

## Lerc
a module for decoding LERC blobs
A module for decoding LERC blobs.
<a name="exp_module_Lerc--load"></a>
### load([options]) ⇒ <code>Promise<void></code> ⏏
Load the depencies (web assembly). Check whether dependencies has been loaded using <code>Lerc.isLoaded</code>. The loading promise is cached so it can be invoked multiple times if needed.
**Kind**: Exported function
| Param | Type | Description |
| --- | --- | --- |
| [options.locateFile] | <code>(wasmFileName?: string, scriptDir?: string) => string</code> | The function to locate lerc-wasm.wasm. Used when the web assembly file is moved to a different location. |
<a name="exp_module_Lerc--decode"></a>
### decode(input, [options]) ⇒ <code>Object</code> ⏏
A wrapper for decoding both LERC1 and LERC2 byte streams capable of handling multiband pixel blocks for various pixel types.
A function for decoding both LERC1 and LERC2 byte streams capable of handling multiband pixel blocks for various pixel types.

@@ -64,4 +86,5 @@ **Kind**: Exported function

| [options.inputOffset] | <code>number</code> | The number of bytes to skip in the input byte stream. A valid Lerc file is expected at that position. |
| [options.pixelType] | <code>string</code> | (LERC1 only) Default value is F32. Valid pixel types for input are U8/S8/S16/U16/S32/U32/F32. |
| [options.noDataValue] | <code>number</code> | (LERC1 only). It is recommended to use the returned mask instead of setting this value. |
| [options.noDataValue] | <code>number</code> | It is recommended to use the returned mask instead of setting this value. |
| (Deprecated) [options.returnPixelInterleavedDims] | <code>boolean</code> | will be removed in next release, use returnInterleaved instead. |
| [options.returnInterleaved] | <code>boolean</code> | (ndepth LERC2 only) If true, returned depth values are pixel-interleaved. |

@@ -74,6 +97,9 @@ **Result Object Properties**

| height | <code>number</code> | Height of decoded image. |
| pixels | <code>array</code> | [band1, band2, …] Each band is a typed array of width*height. |
| pixels | <code>array</code> | [band1, band2, …] Each band is a typed array of width * height * depthCount. |
| pixelType | <code>string</code> | The type of pixels represented in the output. |
| mask | <code>mask</code> | Typed array with a size of width*height, or null if all pixels are valid. |
| statistics | <code>array</code> | [statistics_band1, statistics_band2, …] Each element is a statistics object representing min and max values |
| (Deprecated) dimCount | <code>number</code> | Will be removed in next release, use <code>depthCount</code> instead.
| depthCount | <code>number</code> | Depth count
| [bandMasks] | <code>array</code> | [band1_mask, band2_mask, …] Each band is a Uint8Array of width * height * depthCount. |

@@ -84,3 +110,3 @@ * * *

Copyright &copy; 2017-2021 Esri
Copyright &copy; 2017-2022 Esri

@@ -87,0 +113,0 @@ Licensed under the Apache License, Version 2.0 (the "License");

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

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc