Integrate web workers and the latest cornerstone libraries
- Upgrade cornerstone to v0.10.1 - Upgrade cornerstoneTools to v0.8.1 - Upgrade cornerstoneWADOImageLoader to v0.14.1 - Upgrade dicomParser to v1.7.4 - Upgrade hammerjs to v2.0.8
This commit is contained in:
1 parent
8fa437b2c2
commit
33f9b8672b
12 files changed
+8560
-7780
No files matched your search
@@ -0,0 +1,21 @@
|
|||||||
|
import { Meteor } from 'meteor/meteor';
|
||||||
|
import { cornerstoneWADOImageLoader } from 'meteor/ohif:cornerstone';
|
||||||
|
|
||||||
|
Meteor.startup(function() {
|
||||||
|
const maxWebWorkers = Math.max(navigator.hardwareConcurrency - 1, 1);
|
||||||
|
const config = {
|
||||||
|
maxWebWorkers: maxWebWorkers,
|
||||||
|
startWebWorkersOnDemand: true,
|
||||||
|
webWorkerPath : Meteor.absoluteUrl('packages/ohif_cornerstone/public/js/cornerstoneWADOImageLoaderWebWorker.es5.js'),
|
||||||
|
taskConfiguration: {
|
||||||
|
'decodeTask' : {
|
||||||
|
loadCodecsOnStartup : true,
|
||||||
|
initializeCodecsOnStartup: false,
|
||||||
|
codecsPath: Meteor.absoluteUrl('packages/ohif_cornerstone/public/js/cornerstoneWADOImageLoaderCodecs.es5.js'),
|
||||||
|
usePDFJS: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
cornerstoneWADOImageLoader.webWorkerManager.initialize(config);
|
||||||
|
});
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import { Meteor } from 'meteor/meteor';
|
||||||
|
import { cornerstoneWADOImageLoader } from 'meteor/ohif:cornerstone';
|
||||||
|
|
||||||
|
Meteor.startup(function() {
|
||||||
|
const maxWebWorkers = Math.max(navigator.hardwareConcurrency - 1, 1);
|
||||||
|
const config = {
|
||||||
|
maxWebWorkers: maxWebWorkers,
|
||||||
|
startWebWorkersOnDemand: true,
|
||||||
|
webWorkerPath : Meteor.absoluteUrl('packages/ohif_cornerstone/public/js/cornerstoneWADOImageLoaderWebWorker.es5.js'),
|
||||||
|
taskConfiguration: {
|
||||||
|
'decodeTask' : {
|
||||||
|
loadCodecsOnStartup : true,
|
||||||
|
initializeCodecsOnStartup: false,
|
||||||
|
codecsPath: Meteor.absoluteUrl('packages/ohif_cornerstone/public/js/cornerstoneWADOImageLoaderCodecs.es5.js'),
|
||||||
|
usePDFJS: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
cornerstoneWADOImageLoader.webWorkerManager.initialize(config);
|
||||||
|
});
|
||||||
File diff suppressed because it is too large.
Load diff
@@ -1,4 +1,4 @@
|
|||||||
/*! cornerstoneTools - v0.7.9 - 2016-10-29 | (c) 2014 Chris Hafey | https://github.com/chafey/cornerstoneTools */
|
/*! cornerstoneTools - v0.8.1 - 2017-02-11 | (c) 2014 Chris Hafey | https://github.com/chafey/cornerstoneTools */
|
||||||
// Begin Source: src/header.js
|
// Begin Source: src/header.js
|
||||||
if (typeof cornerstone === 'undefined') {
|
if (typeof cornerstone === 'undefined') {
|
||||||
cornerstone = {};
|
cornerstone = {};
|
||||||
@@ -22,70 +22,81 @@ if (typeof cornerstoneTools === 'undefined') {
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var scrollTimeout;
|
|
||||||
var scrollTimeoutDelay = 1;
|
|
||||||
|
|
||||||
function mouseWheel(e) {
|
function mouseWheel(e) {
|
||||||
clearTimeout(scrollTimeout);
|
// !!!HACK/NOTE/WARNING!!!
|
||||||
|
// for some reason I am getting mousewheel and DOMMouseScroll events on my
|
||||||
|
// mac os x mavericks system when middle mouse button dragging.
|
||||||
|
// I couldn't find any info about this so this might break other systems
|
||||||
|
// webkit hack
|
||||||
|
if (e.originalEvent.type === 'mousewheel' && e.originalEvent.wheelDeltaY === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// firefox hack
|
||||||
|
if (e.originalEvent.type === 'DOMMouseScroll' && e.originalEvent.axis === 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
scrollTimeout = setTimeout(function() {
|
var element = e.currentTarget;
|
||||||
var element = e.target.parentNode;
|
|
||||||
|
|
||||||
if (!e.deltaY) {
|
var x;
|
||||||
return;
|
var y;
|
||||||
}
|
|
||||||
|
|
||||||
var x;
|
if (e.pageX !== undefined && e.pageY !== undefined) {
|
||||||
var y;
|
x = e.pageX;
|
||||||
if (e.pageX !== undefined && e.pageY !== undefined) {
|
y = e.pageY;
|
||||||
x = e.pageX;
|
} else if (e.originalEvent &&
|
||||||
y = e.pageY;
|
e.originalEvent.pageX !== undefined &&
|
||||||
}
|
e.originalEvent.pageY !== undefined) {
|
||||||
|
x = e.originalEvent.pageX;
|
||||||
|
y = e.originalEvent.pageY;
|
||||||
|
} else {
|
||||||
|
// IE9 & IE10
|
||||||
|
x = e.x;
|
||||||
|
y = e.y;
|
||||||
|
}
|
||||||
|
|
||||||
var startingCoords = cornerstone.pageToPixel(element, x, y);
|
var startingCoords = cornerstone.pageToPixel(element, x, y);
|
||||||
|
|
||||||
var wheelDeltaPixels;
|
e = window.event || e; // old IE support
|
||||||
var pixelsPerLine = 40;
|
|
||||||
var pixelsPerPage = 800;
|
|
||||||
|
|
||||||
if (e.deltaMode === 2) {
|
var wheelDelta;
|
||||||
// DeltaY is in Pages
|
if (e.originalEvent && e.originalEvent.wheelDelta) {
|
||||||
wheelDeltaPixels = e.deltaY * pixelsPerPage;
|
wheelDelta = -e.originalEvent.wheelDelta;
|
||||||
} else if (e.deltaMode === 1) {
|
} else if (e.originalEvent && e.originalEvent.deltaY) {
|
||||||
// DeltaY is in Lines
|
wheelDelta = -e.originalEvent.deltaY;
|
||||||
wheelDeltaPixels = e.deltaY * pixelsPerLine;
|
} else if (e.originalEvent && e.originalEvent.detail) {
|
||||||
} else {
|
wheelDelta = -e.originalEvent.detail;
|
||||||
// DeltaY is already in Pixels
|
} else {
|
||||||
wheelDeltaPixels = e.deltaY;
|
wheelDelta = e.wheelDelta;
|
||||||
}
|
}
|
||||||
|
|
||||||
var direction = e.deltaY < 0 ? -1 : 1;
|
var direction = wheelDelta < 0 ? -1 : 1;
|
||||||
|
|
||||||
var mouseWheelData = {
|
var mouseWheelData = {
|
||||||
element: element,
|
element: element,
|
||||||
viewport: cornerstone.getViewport(element),
|
viewport: cornerstone.getViewport(element),
|
||||||
image: cornerstone.getEnabledElement(element).image,
|
image: cornerstone.getEnabledElement(element).image,
|
||||||
direction: direction,
|
direction: direction,
|
||||||
wheelDeltaPixels: wheelDeltaPixels,
|
pageX: x,
|
||||||
pageX: x,
|
pageY: y,
|
||||||
pageY: y,
|
imageX: startingCoords.x,
|
||||||
imageX: startingCoords.x,
|
imageY: startingCoords.y
|
||||||
imageY: startingCoords.y
|
};
|
||||||
};
|
|
||||||
|
|
||||||
$(element).trigger('CornerstoneToolsMouseWheel', mouseWheelData);
|
$(element).trigger('CornerstoneToolsMouseWheel', mouseWheelData);
|
||||||
}, scrollTimeoutDelay);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var mouseWheelEvents = 'mousewheel DOMMouseScroll';
|
||||||
|
|
||||||
function enable(element) {
|
function enable(element) {
|
||||||
// Prevent handlers from being attached multiple times
|
// Prevent handlers from being attached multiple times
|
||||||
disable(element);
|
disable(element);
|
||||||
|
|
||||||
cornerstoneTools.addWheelListener(element, mouseWheel);
|
$(element).on(mouseWheelEvents, mouseWheel);
|
||||||
}
|
}
|
||||||
|
|
||||||
function disable(element) {
|
function disable(element) {
|
||||||
cornerstoneTools.removeWheelListener(element, mouseWheel);
|
$(element).unbind(mouseWheelEvents, mouseWheel);
|
||||||
}
|
}
|
||||||
|
|
||||||
// module exports
|
// module exports
|
||||||
@@ -1440,8 +1451,6 @@ if (typeof cornerstoneTools === 'undefined') {
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
function mouseWheelTool(mouseWheelCallback) {
|
function mouseWheelTool(mouseWheelCallback) {
|
||||||
var configuration = {};
|
|
||||||
|
|
||||||
var toolInterface = {
|
var toolInterface = {
|
||||||
activate: function(element) {
|
activate: function(element) {
|
||||||
$(element).off('CornerstoneToolsMouseWheel', mouseWheelCallback);
|
$(element).off('CornerstoneToolsMouseWheel', mouseWheelCallback);
|
||||||
@@ -1451,9 +1460,7 @@ if (typeof cornerstoneTools === 'undefined') {
|
|||||||
},
|
},
|
||||||
disable: function(element) {$(element).off('CornerstoneToolsMouseWheel', mouseWheelCallback);},
|
disable: function(element) {$(element).off('CornerstoneToolsMouseWheel', mouseWheelCallback);},
|
||||||
enable: function(element) {$(element).off('CornerstoneToolsMouseWheel', mouseWheelCallback);},
|
enable: function(element) {$(element).off('CornerstoneToolsMouseWheel', mouseWheelCallback);},
|
||||||
deactivate: function(element) {$(element).off('CornerstoneToolsMouseWheel', mouseWheelCallback);},
|
deactivate: function(element) {$(element).off('CornerstoneToolsMouseWheel', mouseWheelCallback);}
|
||||||
getConfiguration: function() { return configuration;},
|
|
||||||
setConfiguration: function(config) {configuration = config;}
|
|
||||||
};
|
};
|
||||||
return toolInterface;
|
return toolInterface;
|
||||||
}
|
}
|
||||||
@@ -4747,8 +4754,18 @@ if (typeof cornerstoneTools === 'undefined') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function dragCallback(e, eventData) {
|
function dragCallback(e, eventData) {
|
||||||
eventData.viewport.translation.x += (eventData.deltaPoints.page.x / eventData.viewport.scale);
|
|
||||||
eventData.viewport.translation.y += (eventData.deltaPoints.page.y / eventData.viewport.scale);
|
// FIXME: Copied from Cornerstone src/internal/calculateTransform.js, should be exposed from there.
|
||||||
|
var widthScale = eventData.viewport.scale;
|
||||||
|
var heightScale = eventData.viewport.scale;
|
||||||
|
if (eventData.image.rowPixelSpacing < eventData.image.columnPixelSpacing) {
|
||||||
|
widthScale = widthScale * (eventData.image.columnPixelSpacing / eventData.image.rowPixelSpacing);
|
||||||
|
} else if (eventData.image.columnPixelSpacing < eventData.image.rowPixelSpacing) {
|
||||||
|
heightScale = heightScale * (eventData.image.rowPixelSpacing / eventData.image.columnPixelSpacing);
|
||||||
|
}
|
||||||
|
|
||||||
|
eventData.viewport.translation.x += (eventData.deltaPoints.page.x / widthScale);
|
||||||
|
eventData.viewport.translation.y += (eventData.deltaPoints.page.y / heightScale);
|
||||||
cornerstone.setViewport(eventData.element, eventData.viewport);
|
cornerstone.setViewport(eventData.element, eventData.viewport);
|
||||||
return false; // false = causes jquery to preventDefault() and stopPropagation() this event
|
return false; // false = causes jquery to preventDefault() and stopPropagation() this event
|
||||||
}
|
}
|
||||||
@@ -4926,6 +4943,7 @@ if (typeof cornerstoneTools === 'undefined') {
|
|||||||
var measurementData = {
|
var measurementData = {
|
||||||
visible: true,
|
visible: true,
|
||||||
active: true,
|
active: true,
|
||||||
|
invalidated: true,
|
||||||
handles: {
|
handles: {
|
||||||
start: {
|
start: {
|
||||||
x: mouseEventData.currentPoints.image.x,
|
x: mouseEventData.currentPoints.image.x,
|
||||||
@@ -4938,6 +4956,14 @@ if (typeof cornerstoneTools === 'undefined') {
|
|||||||
y: mouseEventData.currentPoints.image.y,
|
y: mouseEventData.currentPoints.image.y,
|
||||||
highlight: true,
|
highlight: true,
|
||||||
active: true
|
active: true
|
||||||
|
},
|
||||||
|
textBox: {
|
||||||
|
active: false,
|
||||||
|
hasMoved: false,
|
||||||
|
movesIndependently: false,
|
||||||
|
drawnIndependently: true,
|
||||||
|
allowedOutsideImage: true,
|
||||||
|
hasBoundingBox: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -5000,25 +5026,35 @@ if (typeof cornerstoneTools === 'undefined') {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function onImageRendered(e, eventData) {
|
function numberWithCommas(x) {
|
||||||
|
// http://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript
|
||||||
|
var parts = x.toString().split('.');
|
||||||
|
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
||||||
|
return parts.join('.');
|
||||||
|
}
|
||||||
|
|
||||||
|
function onImageRendered(e, eventData) {
|
||||||
// if we have no toolData for this element, return immediately as there is nothing to do
|
// if we have no toolData for this element, return immediately as there is nothing to do
|
||||||
var toolData = cornerstoneTools.getToolState(e.currentTarget, toolType);
|
var toolData = cornerstoneTools.getToolState(e.currentTarget, toolType);
|
||||||
if (toolData === undefined) {
|
if (!toolData) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// we have tool data for this element - iterate over each one and draw it
|
var image = eventData.image;
|
||||||
|
var element = eventData.element;
|
||||||
|
var lineWidth = cornerstoneTools.toolStyle.getToolWidth();
|
||||||
|
var config = cornerstoneTools.rectangleRoi.getConfiguration();
|
||||||
var context = eventData.canvasContext.canvas.getContext('2d');
|
var context = eventData.canvasContext.canvas.getContext('2d');
|
||||||
context.setTransform(1, 0, 0, 1, 0, 0);
|
context.setTransform(1, 0, 0, 1, 0, 0);
|
||||||
|
|
||||||
//activation color
|
// Retrieve the image modality from its metadata, if available
|
||||||
var color;
|
var modalityTag = 'x00080060';
|
||||||
var lineWidth = cornerstoneTools.toolStyle.getToolWidth();
|
var modality;
|
||||||
var font = cornerstoneTools.textStyle.getFont();
|
if (image.data) {
|
||||||
var fontHeight = cornerstoneTools.textStyle.getFontSize();
|
modality = image.data.string(modalityTag);
|
||||||
var config = cornerstoneTools.rectangleRoi.getConfiguration();
|
}
|
||||||
|
|
||||||
|
// If we have tool data for this element - iterate over each set and draw it
|
||||||
for (var i = 0; i < toolData.data.length; i++) {
|
for (var i = 0; i < toolData.data.length; i++) {
|
||||||
context.save();
|
context.save();
|
||||||
|
|
||||||
@@ -5031,65 +5067,261 @@ if (typeof cornerstoneTools === 'undefined') {
|
|||||||
context.shadowOffsetY = config.shadowOffsetY || 1;
|
context.shadowOffsetY = config.shadowOffsetY || 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//differentiate the color of activation tool
|
// Check which color the rendered tool should be
|
||||||
if (data.active) {
|
var color = cornerstoneTools.toolColors.getColorIfActive(data.active);
|
||||||
color = cornerstoneTools.toolColors.getActiveColor();
|
|
||||||
} else {
|
|
||||||
color = cornerstoneTools.toolColors.getToolColor();
|
|
||||||
}
|
|
||||||
|
|
||||||
// draw the rectangle
|
// Convert Image coordinates to Canvas coordinates given the element
|
||||||
var handleStartCanvas = cornerstone.pixelToCanvas(eventData.element, data.handles.start);
|
var handleStartCanvas = cornerstone.pixelToCanvas(element, data.handles.start);
|
||||||
var handleEndCanvas = cornerstone.pixelToCanvas(eventData.element, data.handles.end);
|
var handleEndCanvas = cornerstone.pixelToCanvas(element, data.handles.end);
|
||||||
|
|
||||||
var widthCanvas = Math.abs(handleStartCanvas.x - handleEndCanvas.x);
|
// Retrieve the bounds of the ellipse (left, top, width, and height)
|
||||||
var heightCanvas = Math.abs(handleStartCanvas.y - handleEndCanvas.y);
|
// in Canvas coordinates
|
||||||
var leftCanvas = Math.min(handleStartCanvas.x, handleEndCanvas.x);
|
var leftCanvas = Math.min(handleStartCanvas.x, handleEndCanvas.x);
|
||||||
var topCanvas = Math.min(handleStartCanvas.y, handleEndCanvas.y);
|
var topCanvas = Math.min(handleStartCanvas.y, handleEndCanvas.y);
|
||||||
var centerX = (handleStartCanvas.x + handleEndCanvas.x) / 2;
|
var widthCanvas = Math.abs(handleStartCanvas.x - handleEndCanvas.x);
|
||||||
var centerY = (handleStartCanvas.y + handleEndCanvas.y) / 2;
|
var heightCanvas = Math.abs(handleStartCanvas.y - handleEndCanvas.y);
|
||||||
|
|
||||||
|
// Draw the rectangle on the canvas
|
||||||
context.beginPath();
|
context.beginPath();
|
||||||
context.strokeStyle = color;
|
context.strokeStyle = color;
|
||||||
context.lineWidth = lineWidth;
|
context.lineWidth = lineWidth;
|
||||||
context.rect(leftCanvas, topCanvas, widthCanvas, heightCanvas);
|
context.rect(leftCanvas, topCanvas, widthCanvas, heightCanvas);
|
||||||
context.stroke();
|
context.stroke();
|
||||||
|
|
||||||
// draw the handles
|
// If the tool configuration specifies to only draw the handles on hover / active,
|
||||||
cornerstoneTools.drawHandles(context, eventData, data.handles, color);
|
// follow this logic
|
||||||
|
if (config && config.drawHandlesOnHover) {
|
||||||
|
// Draw the handles if the tool is active
|
||||||
|
if (data.active === true) {
|
||||||
|
cornerstoneTools.drawHandles(context, eventData, data.handles, color);
|
||||||
|
} else {
|
||||||
|
// If the tool is inactive, draw the handles only if each specific handle is being
|
||||||
|
// hovered over
|
||||||
|
var handleOptions = {
|
||||||
|
drawHandlesIfActive: true
|
||||||
|
};
|
||||||
|
cornerstoneTools.drawHandles(context, eventData, data.handles, color, handleOptions);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// If the tool has no configuration settings, always draw the handles
|
||||||
|
cornerstoneTools.drawHandles(context, eventData, data.handles, color);
|
||||||
|
}
|
||||||
|
|
||||||
// Calculate the mean, stddev, and area
|
// Define variables for the area and mean/standard deviation
|
||||||
// TODO: calculate this in web worker for large pixel counts...
|
var area,
|
||||||
|
meanStdDev,
|
||||||
|
meanStdDevSUV;
|
||||||
|
|
||||||
var width = Math.abs(data.handles.start.x - data.handles.end.x);
|
// Perform a check to see if the tool has been invalidated. This is to prevent
|
||||||
var height = Math.abs(data.handles.start.y - data.handles.end.y);
|
// unnecessary re-calculation of the area, mean, and standard deviation if the
|
||||||
var left = Math.min(data.handles.start.x, data.handles.end.x);
|
// image is re-rendered but the tool has not moved (e.g. during a zoom)
|
||||||
var top = Math.min(data.handles.start.y, data.handles.end.y);
|
if (!data.invalidated) {
|
||||||
var pixels = cornerstone.getPixels(eventData.element, left, top, width, height);
|
// If the data is not invalidated, retrieve it from the toolData
|
||||||
|
meanStdDev = data.meanStdDev;
|
||||||
|
meanStdDevSUV = data.meanStdDevSUV;
|
||||||
|
area = data.area;
|
||||||
|
} else {
|
||||||
|
// If the data has been invalidated, we need to calculate it again
|
||||||
|
|
||||||
var ellipse = {
|
// Retrieve the bounds of the ellipse in image coordinates
|
||||||
left: left,
|
var ellipse = {
|
||||||
top: top,
|
left: Math.min(data.handles.start.x, data.handles.end.x),
|
||||||
width: width,
|
top: Math.min(data.handles.start.y, data.handles.end.y),
|
||||||
height: height
|
width: Math.abs(data.handles.start.x - data.handles.end.x),
|
||||||
|
height: Math.abs(data.handles.start.y - data.handles.end.y)
|
||||||
|
};
|
||||||
|
|
||||||
|
// First, make sure this is not a color image, since no mean / standard
|
||||||
|
// deviation will be calculated for color images.
|
||||||
|
if (!image.color) {
|
||||||
|
// Retrieve the array of pixels that the ellipse bounds cover
|
||||||
|
var pixels = cornerstone.getPixels(element, ellipse.left, ellipse.top, ellipse.width, ellipse.height);
|
||||||
|
|
||||||
|
// Calculate the mean & standard deviation from the pixels and the ellipse details
|
||||||
|
meanStdDev = calculateMeanStdDev(pixels, ellipse);
|
||||||
|
|
||||||
|
if (modality === 'PT') {
|
||||||
|
// If the image is from a PET scan, use the DICOM tags to
|
||||||
|
// calculate the SUV from the mean and standard deviation.
|
||||||
|
|
||||||
|
// Note that because we are using modality pixel values from getPixels, and
|
||||||
|
// the calculateSUV routine also rescales to modality pixel values, we are first
|
||||||
|
// returning the values to storedPixel values before calcuating SUV with them.
|
||||||
|
// TODO: Clean this up? Should we add an option to not scale in calculateSUV?
|
||||||
|
meanStdDevSUV = {
|
||||||
|
mean: cornerstoneTools.calculateSUV(image, (meanStdDev.mean - image.intercept) / image.slope),
|
||||||
|
stdDev: cornerstoneTools.calculateSUV(image, (meanStdDev.stdDev - image.intercept) / image.slope)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the mean and standard deviation values are sane, store them for later retrieval
|
||||||
|
if (meanStdDev && !isNaN(meanStdDev.mean)) {
|
||||||
|
data.meanStdDev = meanStdDev;
|
||||||
|
data.meanStdDevSUV = meanStdDevSUV;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieve the pixel spacing values, and if they are not
|
||||||
|
// real non-zero values, set them to 1
|
||||||
|
var columnPixelSpacing = image.columnPixelSpacing || 1;
|
||||||
|
var rowPixelSpacing = image.rowPixelSpacing || 1;
|
||||||
|
|
||||||
|
// Calculate the image area from the ellipse dimensions and pixel spacing
|
||||||
|
area = (ellipse.width * columnPixelSpacing) * (ellipse.height * rowPixelSpacing);
|
||||||
|
|
||||||
|
// If the area value is sane, store it for later retrieval
|
||||||
|
if (!isNaN(area)) {
|
||||||
|
data.area = area;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the invalidated flag to false so that this data won't automatically be recalculated
|
||||||
|
data.invalidated = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Define an array to store the rows of text for the textbox
|
||||||
|
var textLines = [];
|
||||||
|
|
||||||
|
// If the mean and standard deviation values are present, display them
|
||||||
|
if (meanStdDev && meanStdDev.mean) {
|
||||||
|
// If the modality is CT, add HU to denote Hounsfield Units
|
||||||
|
var moSuffix = '';
|
||||||
|
if (modality === 'CT') {
|
||||||
|
moSuffix = ' HU';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a line of text to display the mean and any units that were specified (i.e. HU)
|
||||||
|
var meanText = 'Mean: ' + numberWithCommas(meanStdDev.mean.toFixed(2)) + moSuffix;
|
||||||
|
// Create a line of text to display the standard deviation and any units that were specified (i.e. HU)
|
||||||
|
var stdDevText = 'StdDev: ' + numberWithCommas(meanStdDev.stdDev.toFixed(2)) + moSuffix;
|
||||||
|
|
||||||
|
// If this image has SUV values to display, concatenate them to the text line
|
||||||
|
if (meanStdDevSUV && meanStdDevSUV.mean !== undefined) {
|
||||||
|
var SUVtext = ' SUV: ';
|
||||||
|
meanText += SUVtext + numberWithCommas(meanStdDevSUV.mean.toFixed(2));
|
||||||
|
stdDevText += SUVtext + numberWithCommas(meanStdDevSUV.stdDev.toFixed(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add these text lines to the array to be displayed in the textbox
|
||||||
|
textLines.push(meanText);
|
||||||
|
textLines.push(stdDevText);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the area is a sane value, display it
|
||||||
|
if (area) {
|
||||||
|
// Determine the area suffix based on the pixel spacing in the image.
|
||||||
|
// If pixel spacing is present, use millimeters. Otherwise, use pixels.
|
||||||
|
// This uses Char code 178 for a superscript 2
|
||||||
|
var suffix = ' mm' + String.fromCharCode(178);
|
||||||
|
if (!image.rowPixelSpacing || !image.columnPixelSpacing) {
|
||||||
|
suffix = ' pixels' + String.fromCharCode(178);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a line of text to display the area and its units
|
||||||
|
var areaText = 'Area: ' + numberWithCommas(area.toFixed(2)) + suffix;
|
||||||
|
|
||||||
|
// Add this text line to the array to be displayed in the textbox
|
||||||
|
textLines.push(areaText);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the textbox has not been moved by the user, it should be displayed on the right-most
|
||||||
|
// side of the tool.
|
||||||
|
if (!data.handles.textBox.hasMoved) {
|
||||||
|
// Find the rightmost side of the ellipse at its vertical center, and place the textbox here
|
||||||
|
// Note that this calculates it in image coordinates
|
||||||
|
data.handles.textBox.x = Math.max(data.handles.start.x, data.handles.end.x);
|
||||||
|
data.handles.textBox.y = (data.handles.start.y + data.handles.end.y) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert the textbox Image coordinates into Canvas coordinates
|
||||||
|
var textCoords = cornerstone.pixelToCanvas(element, data.handles.textBox);
|
||||||
|
|
||||||
|
// Set options for the textbox drawing function
|
||||||
|
var options = {
|
||||||
|
centering: {
|
||||||
|
x: false,
|
||||||
|
y: true
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var meanStdDev = calculateMeanStdDev(pixels, ellipse);
|
// Draw the textbox and retrieves it's bounding box for mouse-dragging and highlighting
|
||||||
var area = (width * eventData.image.columnPixelSpacing) * (height * eventData.image.rowPixelSpacing);
|
var boundingBox = cornerstoneTools.drawTextBox(context, textLines, textCoords.x,
|
||||||
var areaText = 'Area: ' + area.toFixed(2) + ' mm^2';
|
textCoords.y, color, options);
|
||||||
|
|
||||||
// Draw text
|
// Store the bounding box data in the handle for mouse-dragging and highlighting
|
||||||
context.font = font;
|
data.handles.textBox.boundingBox = boundingBox;
|
||||||
|
|
||||||
var textSize = context.measureText(area);
|
// If the textbox has moved, we would like to draw a line linking it with the tool
|
||||||
|
// This section decides where to draw this line to on the Ellipse based on the location
|
||||||
|
// of the textbox relative to the ellipse.
|
||||||
|
if (data.handles.textBox.hasMoved) {
|
||||||
|
// Draw dashed link line between tool and text
|
||||||
|
|
||||||
var textX = centerX < (eventData.image.columns / 2) ? centerX + (widthCanvas / 2): centerX - (widthCanvas / 2) - textSize.width;
|
// The initial link position is at the center of the
|
||||||
var textY = centerY < (eventData.image.rows / 2) ? centerY + (heightCanvas / 2): centerY - (heightCanvas / 2);
|
// textbox.
|
||||||
|
var link = {
|
||||||
|
start: {},
|
||||||
|
end: {
|
||||||
|
x: textCoords.x,
|
||||||
|
y: textCoords.y
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// First we calculate the ellipse points (top, left, right, and bottom)
|
||||||
|
var ellipsePoints = [ {
|
||||||
|
// Top middle point of ellipse
|
||||||
|
x: leftCanvas + widthCanvas / 2,
|
||||||
|
y: topCanvas
|
||||||
|
}, {
|
||||||
|
// Left middle point of ellipse
|
||||||
|
x: leftCanvas,
|
||||||
|
y: topCanvas + heightCanvas / 2
|
||||||
|
}, {
|
||||||
|
// Bottom middle point of ellipse
|
||||||
|
x: leftCanvas + widthCanvas / 2,
|
||||||
|
y: topCanvas + heightCanvas
|
||||||
|
}, {
|
||||||
|
// Right middle point of ellipse
|
||||||
|
x: leftCanvas + widthCanvas,
|
||||||
|
y: topCanvas + heightCanvas / 2
|
||||||
|
} ];
|
||||||
|
|
||||||
|
// We obtain the link starting point by finding the closest point on the ellipse to the
|
||||||
|
// center of the textbox
|
||||||
|
link.start = cornerstoneMath.point.findClosestPoint(ellipsePoints, link.end);
|
||||||
|
|
||||||
|
// Next we calculate the corners of the textbox bounding box
|
||||||
|
var boundingBoxPoints = [ {
|
||||||
|
// Top middle point of bounding box
|
||||||
|
x: boundingBox.left + boundingBox.width / 2,
|
||||||
|
y: boundingBox.top
|
||||||
|
}, {
|
||||||
|
// Left middle point of bounding box
|
||||||
|
x: boundingBox.left,
|
||||||
|
y: boundingBox.top + boundingBox.height / 2
|
||||||
|
}, {
|
||||||
|
// Bottom middle point of bounding box
|
||||||
|
x: boundingBox.left + boundingBox.width / 2,
|
||||||
|
y: boundingBox.top + boundingBox.height
|
||||||
|
}, {
|
||||||
|
// Right middle point of bounding box
|
||||||
|
x: boundingBox.left + boundingBox.width,
|
||||||
|
y: boundingBox.top + boundingBox.height / 2
|
||||||
|
}, ];
|
||||||
|
|
||||||
|
// Now we recalculate the link endpoint by identifying which corner of the bounding box
|
||||||
|
// is closest to the start point we just calculated.
|
||||||
|
link.end = cornerstoneMath.point.findClosestPoint(boundingBoxPoints, link.start);
|
||||||
|
|
||||||
|
// Finally we draw the dashed linking line
|
||||||
|
context.beginPath();
|
||||||
|
context.strokeStyle = color;
|
||||||
|
context.lineWidth = lineWidth;
|
||||||
|
context.setLineDash([ 2, 3 ]);
|
||||||
|
context.moveTo(link.start.x, link.start.y);
|
||||||
|
context.lineTo(link.end.x, link.end.y);
|
||||||
|
context.stroke();
|
||||||
|
}
|
||||||
|
|
||||||
context.fillStyle = color;
|
|
||||||
cornerstoneTools.drawTextBox(context, 'Mean: ' + meanStdDev.mean.toFixed(2), textX, textY - fontHeight - 5, color);
|
|
||||||
cornerstoneTools.drawTextBox(context, 'StdDev: ' + meanStdDev.stdDev.toFixed(2), textX, textY, color);
|
|
||||||
cornerstoneTools.drawTextBox(context, areaText, textX, textY + fontHeight + 5, color);
|
|
||||||
context.restore();
|
context.restore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8025,43 +8257,8 @@ if (typeof cornerstoneTools === 'undefined') {
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// this module defines a way for tools to access various metadata about an imageId. This layer of abstraction exists
|
|
||||||
// so metadata can be provided to the tools in different ways (e.g. by parsing DICOM P10 or by a WADO-RS document)
|
|
||||||
// NOTE: We may want to push this function down into the cornerstone core library, not sure yet...
|
|
||||||
|
|
||||||
var providers = [];
|
|
||||||
|
|
||||||
function addProvider( provider) {
|
|
||||||
providers.push(provider);
|
|
||||||
}
|
|
||||||
|
|
||||||
function removeProvider( provider) {
|
|
||||||
var index = providers.indexOf(provider);
|
|
||||||
if (index === -1) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
providers.splice(index, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getMetaData(type, imageId) {
|
|
||||||
var result;
|
|
||||||
$.each(providers, function(index, provider) {
|
|
||||||
result = provider(type, imageId);
|
|
||||||
if (result !== undefined) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// module/private exports
|
// module/private exports
|
||||||
cornerstoneTools.metaData = {
|
cornerstoneTools.metaData = cornerstone.metaData;
|
||||||
addProvider: addProvider,
|
|
||||||
removeProvider: removeProvider,
|
|
||||||
get: getMetaData
|
|
||||||
};
|
|
||||||
|
|
||||||
})($, cornerstone, cornerstoneTools);
|
})($, cornerstone, cornerstoneTools);
|
||||||
|
|
||||||
// End Source; src/metaData.js
|
// End Source; src/metaData.js
|
||||||
@@ -8379,12 +8576,7 @@ if (typeof cornerstoneTools === 'undefined') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
var requestDetails = getNextRequest();
|
startGrabbing();
|
||||||
if (!requestDetails) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
sendRequest(requestDetails);
|
|
||||||
}, grabDelay);
|
}, grabDelay);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8418,11 +8610,29 @@ if (typeof cornerstoneTools === 'undefined') {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function requestTypeToLoadPriority(requestDetails) {
|
||||||
|
if (requestDetails.type === 'prefetch') {
|
||||||
|
return -5;
|
||||||
|
} else if (requestDetails.type === 'interactive') {
|
||||||
|
return 0;
|
||||||
|
} else if (requestDetails.type === 'thumbnail') {
|
||||||
|
return 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var priority = requestTypeToLoadPriority(requestDetails);
|
||||||
|
|
||||||
var loader;
|
var loader;
|
||||||
if (requestDetails.preventCache === true) {
|
if (requestDetails.preventCache === true) {
|
||||||
loader = cornerstone.loadImage(imageId);
|
loader = cornerstone.loadImage(imageId, {
|
||||||
|
priority: priority,
|
||||||
|
type: requestDetails.type
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
loader = cornerstone.loadAndCacheImage(imageId);
|
loader = cornerstone.loadAndCacheImage(imageId, {
|
||||||
|
priority: priority,
|
||||||
|
type: requestDetails.type
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load and cache the image
|
// Load and cache the image
|
||||||
@@ -8441,10 +8651,6 @@ if (typeof cornerstoneTools === 'undefined') {
|
|||||||
|
|
||||||
function startGrabbing() {
|
function startGrabbing() {
|
||||||
// Begin by grabbing X images
|
// Begin by grabbing X images
|
||||||
if (awake) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var maxSimultaneousRequests = cornerstoneTools.getMaxSimultaneousRequests();
|
var maxSimultaneousRequests = cornerstoneTools.getMaxSimultaneousRequests();
|
||||||
|
|
||||||
maxNumRequests = {
|
maxNumRequests = {
|
||||||
@@ -8453,7 +8659,11 @@ if (typeof cornerstoneTools === 'undefined') {
|
|||||||
prefetch: Math.max(maxSimultaneousRequests - 1, 1)
|
prefetch: Math.max(maxSimultaneousRequests - 1, 1)
|
||||||
};
|
};
|
||||||
|
|
||||||
for (var i = 0; i < maxSimultaneousRequests; i++) {
|
var currentRequests = numRequests.interaction +
|
||||||
|
numRequests.thumbnail +
|
||||||
|
numRequests.prefetch;
|
||||||
|
var requestsToSend = maxSimultaneousRequests - currentRequests;
|
||||||
|
for (var i = 0; i < requestsToSend; i++) {
|
||||||
var requestDetails = getNextRequest();
|
var requestDetails = getNextRequest();
|
||||||
if (requestDetails) {
|
if (requestDetails) {
|
||||||
sendRequest(requestDetails);
|
sendRequest(requestDetails);
|
||||||
@@ -8887,14 +9097,8 @@ Display scroll progress bar across bottom of image.
|
|||||||
// Stop prefetching if the ImageCacheFull event is fired from cornerstone
|
// Stop prefetching if the ImageCacheFull event is fired from cornerstone
|
||||||
// console.log('CornerstoneImageCacheFull full, stopping');
|
// console.log('CornerstoneImageCacheFull full, stopping');
|
||||||
var element = e.data.element;
|
var element = e.data.element;
|
||||||
var stackPrefetchData;
|
|
||||||
|
|
||||||
try {
|
|
||||||
stackPrefetchData = cornerstoneTools.getToolState(element, toolType);
|
|
||||||
} catch(error) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
var stackPrefetchData = cornerstoneTools.getToolState(element, toolType);
|
||||||
if (!stackPrefetchData || !stackPrefetchData.data || !stackPrefetchData.data.length) {
|
if (!stackPrefetchData || !stackPrefetchData.data || !stackPrefetchData.data.length) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -8911,15 +9115,7 @@ Display scroll progress bar across bottom of image.
|
|||||||
// it to the indicesToRequest list so that it will be retrieved later if the
|
// it to the indicesToRequest list so that it will be retrieved later if the
|
||||||
// currentImageIdIndex is changed to an image nearby
|
// currentImageIdIndex is changed to an image nearby
|
||||||
var element = e.data.element;
|
var element = e.data.element;
|
||||||
var stackData;
|
var stackData = cornerstoneTools.getToolState(element, 'stack');
|
||||||
|
|
||||||
try {
|
|
||||||
// It will throw an exception in some cases (eg: thumbnails)
|
|
||||||
stackData = cornerstoneTools.getToolState(element, 'stack');
|
|
||||||
} catch(error) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!stackData || !stackData.data || !stackData.data.length) {
|
if (!stackData || !stackData.data || !stackData.data.length) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -9069,9 +9265,7 @@ Display scroll progress bar across bottom of image.
|
|||||||
}
|
}
|
||||||
|
|
||||||
function mouseWheelCallback(e, eventData) {
|
function mouseWheelCallback(e, eventData) {
|
||||||
var config = cornerstoneTools.stackScroll.getConfiguration();
|
var images = -eventData.direction;
|
||||||
var pixelsPerImage = config.wheelDeltaPixelsPerImage || 100;
|
|
||||||
var images = eventData.direction * Math.max(1, Math.round(Math.abs(eventData.wheelDeltaPixels) / pixelsPerImage));
|
|
||||||
cornerstoneTools.scroll(eventData.element, images);
|
cornerstoneTools.scroll(eventData.element, images);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -9110,19 +9304,6 @@ Display scroll progress bar across bottom of image.
|
|||||||
cornerstoneTools.stackScroll = cornerstoneTools.simpleMouseButtonTool(mouseDownCallback);
|
cornerstoneTools.stackScroll = cornerstoneTools.simpleMouseButtonTool(mouseDownCallback);
|
||||||
cornerstoneTools.stackScrollWheel = cornerstoneTools.mouseWheelTool(mouseWheelCallback);
|
cornerstoneTools.stackScrollWheel = cornerstoneTools.mouseWheelTool(mouseWheelCallback);
|
||||||
|
|
||||||
var stackScrollWheelConfig = {
|
|
||||||
// Smaller numbers lead to faster scrolling
|
|
||||||
// 100 is the default here because in my empirical tests,
|
|
||||||
// a single tick of my mouse produces a value of 100 pixels
|
|
||||||
// on Firefox on Windows. This is the largest I noticed in my
|
|
||||||
// tests. In some cases (e.g. >500 image stacks), the user
|
|
||||||
// may want to speed up stack scrolling. Lowering this value
|
|
||||||
// can do this.
|
|
||||||
wheelDeltaPixelsPerImage: 100
|
|
||||||
};
|
|
||||||
|
|
||||||
cornerstoneTools.stackScrollWheel.setConfiguration(stackScrollWheelConfig);
|
|
||||||
|
|
||||||
var options = {
|
var options = {
|
||||||
eventData: {
|
eventData: {
|
||||||
deltaY: 0
|
deltaY: 0
|
||||||
@@ -10837,9 +11018,10 @@ Display scroll progress bar across bottom of image.
|
|||||||
var toolType = 'timeSeriesPlayer';
|
var toolType = 'timeSeriesPlayer';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts playing a clip or adjusts the frame rate of an already playing clip. framesPerSecond is
|
* Starts playing a clip of different time series of the same image or adjusts the frame rate of an
|
||||||
* optional and defaults to 30 if not specified. A negative framesPerSecond will play the clip in reverse.
|
* already playing clip. framesPerSecond is optional and defaults to 30 if not specified. A negative
|
||||||
* The element must be a stack of images
|
* framesPerSecond will play the clip in reverse.
|
||||||
|
* The element must have time series
|
||||||
* @param element
|
* @param element
|
||||||
* @param framesPerSecond
|
* @param framesPerSecond
|
||||||
*/
|
*/
|
||||||
@@ -11403,6 +11585,10 @@ Display scroll progress bar across bottom of image.
|
|||||||
return config.maxSimultaneousRequests;
|
return config.maxSimultaneousRequests;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return getDefaultSimultaneousRequests();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDefaultSimultaneousRequests() {
|
||||||
var infoString = getBrowserInfo();
|
var infoString = getBrowserInfo();
|
||||||
var info = infoString.split(' ');
|
var info = infoString.split(' ');
|
||||||
var browserName = info[0];
|
var browserName = info[0];
|
||||||
@@ -11426,6 +11612,7 @@ Display scroll progress bar across bottom of image.
|
|||||||
}
|
}
|
||||||
|
|
||||||
// module exports
|
// module exports
|
||||||
|
cornerstoneTools.getDefaultSimultaneousRequests = getDefaultSimultaneousRequests;
|
||||||
cornerstoneTools.getMaxSimultaneousRequests = getMaxSimultaneousRequests;
|
cornerstoneTools.getMaxSimultaneousRequests = getMaxSimultaneousRequests;
|
||||||
cornerstoneTools.getBrowserInfo = getBrowserInfo;
|
cornerstoneTools.getBrowserInfo = getBrowserInfo;
|
||||||
cornerstoneTools.isMobileDevice = isMobileDevice;
|
cornerstoneTools.isMobileDevice = isMobileDevice;
|
||||||
@@ -11730,14 +11917,6 @@ Display scroll progress bar across bottom of image.
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
function isNumber(value) {
|
|
||||||
return typeof value === 'number' && !isNaN(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
function isInteger(number) {
|
|
||||||
return number % 1 === 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
function scrollToIndex(element, newImageIdIndex) {
|
function scrollToIndex(element, newImageIdIndex) {
|
||||||
var toolData = cornerstoneTools.getToolState(element, 'stack');
|
var toolData = cornerstoneTools.getToolState(element, 'stack');
|
||||||
if (!toolData || !toolData.data || !toolData.data.length) {
|
if (!toolData || !toolData.data || !toolData.data.length) {
|
||||||
@@ -11746,12 +11925,6 @@ Display scroll progress bar across bottom of image.
|
|||||||
|
|
||||||
var stackData = toolData.data[0];
|
var stackData = toolData.data[0];
|
||||||
|
|
||||||
if (!isNumber(newImageIdIndex)) {
|
|
||||||
throw 'scrollToIndex: index provided is not numeric: ' + newImageIdIndex;
|
|
||||||
} else if (isNumber(newImageIdIndex) && !isInteger(newImageIdIndex)) {
|
|
||||||
throw 'scrollToIndex: index provided is not an integer: ' + newImageIdIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Allow for negative indexing
|
// Allow for negative indexing
|
||||||
if (newImageIdIndex < 0) {
|
if (newImageIdIndex < 0) {
|
||||||
newImageIdIndex += stackData.imageIds.length;
|
newImageIdIndex += stackData.imageIds.length;
|
||||||
@@ -11815,16 +11988,19 @@ Display scroll progress bar across bottom of image.
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var requestPoolManager = cornerstoneTools.requestPoolManager;
|
|
||||||
|
|
||||||
var type = 'interaction';
|
|
||||||
requestPoolManager.clearRequestStack(type);
|
|
||||||
|
|
||||||
// Convert the preventCache value in stack data to a boolean
|
// Convert the preventCache value in stack data to a boolean
|
||||||
var preventCache = !!stackData.preventCache;
|
var preventCache = !!stackData.preventCache;
|
||||||
|
|
||||||
requestPoolManager.addRequest(element, newImageId, type, preventCache, doneCallback, failCallback);
|
var imagePromise;
|
||||||
requestPoolManager.startGrabbing();
|
if (preventCache) {
|
||||||
|
imagePromise = cornerstone.loadImage(newImageId);
|
||||||
|
} else {
|
||||||
|
imagePromise = cornerstone.loadAndCacheImage(newImageId);
|
||||||
|
}
|
||||||
|
|
||||||
|
imagePromise.then(doneCallback, failCallback);
|
||||||
|
// Make sure we kick off any changed download request pools
|
||||||
|
cornerstoneTools.requestPoolManager.startGrabbing();
|
||||||
|
|
||||||
$(element).trigger('CornerstoneStackScroll', eventData);
|
$(element).trigger('CornerstoneStackScroll', eventData);
|
||||||
}
|
}
|
||||||
@@ -11877,127 +12053,3 @@ Display scroll progress bar across bottom of image.
|
|||||||
})(cornerstone, cornerstoneTools);
|
})(cornerstone, cornerstoneTools);
|
||||||
|
|
||||||
// End Source; src/util/setContextToDisplayFontSize.js
|
// End Source; src/util/setContextToDisplayFontSize.js
|
||||||
|
|
||||||
// Begin Source: src/util/wheelListeners.js
|
|
||||||
(function(cornerstoneTools) {
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
// Thanks to Andrei Kashcha (@anvaka)
|
|
||||||
// https://github.com/anvaka/wheel/blob/master/index.js
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This module unifies handling of mouse whee event across different browsers
|
|
||||||
*
|
|
||||||
* See https://developer.mozilla.org/en-US/docs/Web/Reference/Events/wheel?redirectlocale=en-US&redirectslug=DOM%2FMozilla_event_reference%2Fwheel
|
|
||||||
* for more details
|
|
||||||
*
|
|
||||||
* Usage:
|
|
||||||
* var addWheelListener = require('wheel').addWheelListener;
|
|
||||||
* var removeWheelListener = require('wheel').removeWheelListener;
|
|
||||||
* addWheelListener(domElement, function (e) {
|
|
||||||
* // mouse wheel event
|
|
||||||
* });
|
|
||||||
* removeWheelListener(domElement, function);
|
|
||||||
*/
|
|
||||||
// by default we shortcut to 'addEventListener':
|
|
||||||
|
|
||||||
// creates a global "addWheelListener" method
|
|
||||||
// example: addWheelListener( elem, function( e ) { console.log( e.deltaY ); e.preventDefault(); } );
|
|
||||||
|
|
||||||
var prefix = '',
|
|
||||||
_addEventListener,
|
|
||||||
_removeEventListener,
|
|
||||||
support;
|
|
||||||
|
|
||||||
function detectEventModel(window, document) {
|
|
||||||
if (window && window.addEventListener) {
|
|
||||||
_addEventListener = 'addEventListener';
|
|
||||||
_removeEventListener = 'removeEventListener';
|
|
||||||
} else {
|
|
||||||
_addEventListener = 'attachEvent';
|
|
||||||
_removeEventListener = 'detachEvent';
|
|
||||||
prefix = 'on';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (document) {
|
|
||||||
// detect available wheel event
|
|
||||||
support = 'onwheel' in document.createElement('div') ? 'wheel' : // Modern browsers support "wheel"
|
|
||||||
document.onmousewheel !== undefined ? 'mousewheel' : // Webkit and IE support at least "mousewheel"
|
|
||||||
'DOMMouseScroll'; // let's assume that remaining browsers are older Firefox
|
|
||||||
} else {
|
|
||||||
support = 'wheel';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function addWheelListener(elem, callback, useCapture) {
|
|
||||||
detectEventModel(window, document);
|
|
||||||
|
|
||||||
_addWheelListener(elem, support, callback, useCapture);
|
|
||||||
|
|
||||||
// handle MozMousePixelScroll in older Firefox
|
|
||||||
if (support === 'DOMMouseScroll') {
|
|
||||||
_addWheelListener(elem, 'MozMousePixelScroll', callback, useCapture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function removeWheelListener(elem, callback, useCapture) {
|
|
||||||
detectEventModel(window, document);
|
|
||||||
|
|
||||||
_removeWheelListener(elem, support, callback, useCapture);
|
|
||||||
|
|
||||||
// handle MozMousePixelScroll in older Firefox
|
|
||||||
if (support === 'DOMMouseScroll') {
|
|
||||||
_removeWheelListener(elem, 'MozMousePixelScroll', callback, useCapture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function _removeWheelListener(elem, eventName, callback, useCapture) {
|
|
||||||
elem[_removeEventListener](prefix + eventName, callback, useCapture || false);
|
|
||||||
}
|
|
||||||
|
|
||||||
function _addWheelListener(elem, eventName, callback, useCapture) {
|
|
||||||
elem[_addEventListener](prefix + eventName, support === 'wheel' ? callback : function(originalEvent) {
|
|
||||||
if (!originalEvent) {
|
|
||||||
originalEvent = window.event;
|
|
||||||
}
|
|
||||||
|
|
||||||
// create a normalized event object
|
|
||||||
var event = {
|
|
||||||
// keep a ref to the original event object
|
|
||||||
originalEvent: originalEvent,
|
|
||||||
target: originalEvent.target || originalEvent.srcElement,
|
|
||||||
type: 'wheel',
|
|
||||||
deltaMode: originalEvent.type === 'MozMousePixelScroll' ? 0 : 1,
|
|
||||||
deltaX: 0,
|
|
||||||
deltaY: 0,
|
|
||||||
deltaZ: 0,
|
|
||||||
preventDefault: function() {
|
|
||||||
return originalEvent.preventDefault ? originalEvent.preventDefault() : false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// calculate deltaY (and deltaX) according to the event
|
|
||||||
if (support === 'mousewheel') {
|
|
||||||
event.deltaY = -1 / 40 * originalEvent.wheelDelta;
|
|
||||||
// Webkit also support wheelDeltaX
|
|
||||||
if (originalEvent.wheelDeltaX) {
|
|
||||||
event.deltaX = -1 / 40 * originalEvent.wheelDeltaX;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
event.deltaY = originalEvent.detail;
|
|
||||||
}
|
|
||||||
|
|
||||||
// it's time to fire the callback
|
|
||||||
return callback(event);
|
|
||||||
|
|
||||||
}, useCapture || false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Module exports
|
|
||||||
cornerstoneTools.addWheelListener = addWheelListener;
|
|
||||||
cornerstoneTools.removeWheelListener = removeWheelListener;
|
|
||||||
|
|
||||||
})(cornerstoneTools);
|
|
||||||
|
|
||||||
// End Source; src/util/wheelListeners.js
|
|
||||||
File diff suppressed because it is too large.
Load diff
@@ -1,4 +1,4 @@
|
|||||||
/*! dicom-parser - v1.7.1 - 2016-06-09 | (c) 2014 Chris Hafey | https://github.com/chafey/dicomParser */
|
/*! dicom-parser - v1.7.4 - 2016-08-18 | (c) 2014 Chris Hafey | https://github.com/chafey/dicomParser */
|
||||||
(function (root, factory) {
|
(function (root, factory) {
|
||||||
|
|
||||||
// node.js
|
// node.js
|
||||||
@@ -194,20 +194,6 @@ var dicomParser = (function (dicomParser)
|
|||||||
dataSet.byteArray[position + 1] === 0xD9);
|
dataSet.byteArray[position + 1] === 0xD9);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Each JPEG image has a start of image marker
|
|
||||||
function isStartOfImageMarker(dataSet, position) {
|
|
||||||
return (dataSet.byteArray[position] === 0xFF &&
|
|
||||||
dataSet.byteArray[position + 1] === 0xD8);
|
|
||||||
}
|
|
||||||
|
|
||||||
function isFragmentStartOfImage(dataSet, pixelDataElement, fragmentIndex) {
|
|
||||||
var fragment = pixelDataElement.fragments[fragmentIndex];
|
|
||||||
if(isStartOfImageMarker(dataSet, fragment.position)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function isFragmentEndOfImage(dataSet, pixelDataElement, fragmentIndex) {
|
function isFragmentEndOfImage(dataSet, pixelDataElement, fragmentIndex) {
|
||||||
var fragment = pixelDataElement.fragments[fragmentIndex];
|
var fragment = pixelDataElement.fragments[fragmentIndex];
|
||||||
// Need to check the last two bytes and the last three bytes for marker since odd length
|
// Need to check the last two bytes and the last three bytes for marker since odd length
|
||||||
@@ -222,12 +208,7 @@ var dicomParser = (function (dicomParser)
|
|||||||
function findLastImageFrameFragmentIndex(dataSet, pixelDataElement, startFragment) {
|
function findLastImageFrameFragmentIndex(dataSet, pixelDataElement, startFragment) {
|
||||||
for(var fragmentIndex=startFragment; fragmentIndex < pixelDataElement.fragments.length; fragmentIndex++) {
|
for(var fragmentIndex=startFragment; fragmentIndex < pixelDataElement.fragments.length; fragmentIndex++) {
|
||||||
if(isFragmentEndOfImage(dataSet, pixelDataElement, fragmentIndex)) {
|
if(isFragmentEndOfImage(dataSet, pixelDataElement, fragmentIndex)) {
|
||||||
// if not last fragment, peek ahead to make sure the next fragment has a start of image marker just to
|
return fragmentIndex;
|
||||||
// be safe
|
|
||||||
if(fragmentIndex === pixelDataElement.fragments.length - 1 ||
|
|
||||||
isFragmentStartOfImage(dataSet, pixelDataElement, fragmentIndex+1)) {
|
|
||||||
return fragmentIndex;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -275,10 +256,6 @@ var dicomParser = (function (dicomParser)
|
|||||||
var basicOffsetTable = [];
|
var basicOffsetTable = [];
|
||||||
|
|
||||||
var startFragmentIndex = 0;
|
var startFragmentIndex = 0;
|
||||||
// sanity check first fragment has a JPEG start of image marker
|
|
||||||
if(!isFragmentStartOfImage(dataSet, pixelDataElement, startFragmentIndex)) {
|
|
||||||
throw 'first fragment does not have JPEG start of image marker';
|
|
||||||
}
|
|
||||||
|
|
||||||
while(true) {
|
while(true) {
|
||||||
// Add the offset for the start fragment
|
// Add the offset for the start fragment
|
||||||
@@ -1417,6 +1394,65 @@ var dicomParser = (function (dicomParser)
|
|||||||
* Internal helper functions for parsing DICOM elements
|
* Internal helper functions for parsing DICOM elements
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
var dicomParser = (function (dicomParser)
|
||||||
|
{
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
if(dicomParser === undefined)
|
||||||
|
{
|
||||||
|
dicomParser = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* reads from the byte stream until it finds the magic number for the Sequence Delimitation Item item
|
||||||
|
* and then sets the length of the element
|
||||||
|
* @param byteStream
|
||||||
|
* @param element
|
||||||
|
*/
|
||||||
|
dicomParser.findAndSetUNElementLength = function(byteStream, element)
|
||||||
|
{
|
||||||
|
if(byteStream === undefined)
|
||||||
|
{
|
||||||
|
throw "dicomParser.findAndSetUNElementLength: missing required parameter 'byteStream'";
|
||||||
|
}
|
||||||
|
|
||||||
|
var itemDelimitationItemLength = 8; // group, element, length
|
||||||
|
var maxPosition = byteStream.byteArray.length - itemDelimitationItemLength;
|
||||||
|
while(byteStream.position <= maxPosition)
|
||||||
|
{
|
||||||
|
var groupNumber;
|
||||||
|
groupNumber = byteStream.readUint16();
|
||||||
|
if(groupNumber === 0xfffe)
|
||||||
|
{
|
||||||
|
var elementNumber;
|
||||||
|
elementNumber = byteStream.readUint16();
|
||||||
|
if(elementNumber === 0xe0dd)
|
||||||
|
{
|
||||||
|
// NOTE: It would be better to also check for the length to be 0 as part of the check above
|
||||||
|
// but we will just log a warning for now
|
||||||
|
var itemDelimiterLength;
|
||||||
|
itemDelimiterLength = byteStream.readUint32(); // the length
|
||||||
|
if(itemDelimiterLength !== 0) {
|
||||||
|
byteStream.warnings('encountered non zero length following item delimiter at position' + byteStream.position - 4 + " while reading element of undefined length with tag ' + element.tag");
|
||||||
|
}
|
||||||
|
element.length = byteStream.position - element.dataOffset;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// No item delimitation item - silently set the length to the end of the buffer and set the position past the end of the buffer
|
||||||
|
element.length = byteStream.byteArray.length - element.dataOffset;
|
||||||
|
byteStream.seek(byteStream.byteArray.length - byteStream.position);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
return dicomParser;
|
||||||
|
}(dicomParser));
|
||||||
|
/**
|
||||||
|
* Internal helper functions for parsing DICOM elements
|
||||||
|
*/
|
||||||
|
|
||||||
var dicomParser = (function (dicomParser)
|
var dicomParser = (function (dicomParser)
|
||||||
{
|
{
|
||||||
"use strict";
|
"use strict";
|
||||||
@@ -1891,11 +1927,16 @@ var dicomParser = (function (dicomParser)
|
|||||||
dicomParser.readSequenceItemsExplicit(byteStream, element, warnings);
|
dicomParser.readSequenceItemsExplicit(byteStream, element, warnings);
|
||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(element.length === 4294967295)
|
if(element.length === 4294967295)
|
||||||
{
|
{
|
||||||
if(element.tag === 'x7fe00010') {
|
if(element.tag === 'x7fe00010') {
|
||||||
dicomParser.findEndOfEncapsulatedElement(byteStream, element, warnings);
|
dicomParser.findEndOfEncapsulatedElement(byteStream, element, warnings);
|
||||||
return element;
|
return element;
|
||||||
|
} else if(element.vr === 'UN') {
|
||||||
|
dicomParser.findAndSetUNElementLength(byteStream, element);
|
||||||
|
return element;
|
||||||
} else {
|
} else {
|
||||||
dicomParser.findItemDelimitationItemAndSetElementLength(byteStream, element);
|
dicomParser.findItemDelimitationItemAndSetElementLength(byteStream, element);
|
||||||
return element;
|
return element;
|
||||||
@@ -2633,7 +2674,7 @@ var dicomParser = (function (dicomParser)
|
|||||||
dicomParser = {};
|
dicomParser = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
dicomParser.version = "1.7.1";
|
dicomParser.version = "1.7.3";
|
||||||
|
|
||||||
return dicomParser;
|
return dicomParser;
|
||||||
}(dicomParser));
|
}(dicomParser));
|
||||||
|
|||||||
+2812
-2140
File diff suppressed because it is too large.
Load diff
@@ -1,27 +0,0 @@
|
|||||||
var CharLS = function(Module) {
|
|
||||||
Module = Module || {};
|
|
||||||
|
|
||||||
var Module;if(!Module)Module=(typeof CharLS!=="undefined"?CharLS:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);if(!ret&&filename!=nodePath["resolve"](filename)){filename=path.join(__dirname,"..","src",filename);ret=nodeFS["readFileSync"](filename)}if(ret&&!binary)ret=ret.toString();return ret};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available (jsc?)"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.log(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}var Runtime={setTempRet0:(function(value){tempRet0=value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){if(!args.splice)args=Array.prototype.slice.call(args);args.splice(0,0,ptr);return Module["dynCall_"+sig].apply(null,args)}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i<Runtime.functionPointers.lLine truncated
|
|
||||||
var asm=(function(global,env,buffer) {
|
|
||||||
"use asm";var a=global.Int8Array;var b=global.Int16Array;var c=global.Int32Array;var d=global.Uint8Array;var e=global.Uint16Array;var f=global.Uint32Array;var g=global.Float32Array;var h=global.Float64Array;var i=new a(buffer);var j=new b(buffer);var k=new c(buffer);var l=new d(buffer);var m=new e(buffer);var n=new f(buffer);var o=new g(buffer);var p=new h(buffer);var q=global.byteLength;var r=env.STACKTOP|0;var s=env.STACK_MAX|0;var t=env.tempDoublePtr|0;var u=env.ABORT|0;var v=env.cttz_i8|0;var w=env.___dso_handle|0;var x=0;var y=0;var z=0;var A=0;var B=global.NaN,C=global.Infinity;var D=0,E=0,F=0,G=0,H=0.0,I=0,J=0,K=0,L=0.0;var M=0;var N=0;var O=0;var P=0;var Q=0;var R=0;var S=0;var T=0;var U=0;var V=0;var W=global.Math.floor;var X=global.Math.abs;var Y=global.Math.sqrt;var Z=global.Math.pow;var _=global.Math.cos;var $=global.Math.sin;var aa=global.Math.tan;var ba=global.Math.acos;var ca=global.Math.asin;var da=global.Math.atan;var ea=global.Math.atan2;var fa=global.Math.exp;var ga=global.Math.log;var ha=global.Math.ceil;var ia=global.Math.imul;var ja=global.Math.min;var ka=global.Math.clz32;var la=env.abort;var ma=env.assert;var na=env.invoke_iiiiiiii;var oa=env.invoke_viiiii;var pa=env.invoke_iiiiiid;var qa=env.invoke_vi;var ra=env.invoke_vii;var sa=env.invoke_iiiiiii;var ta=env.invoke_ii;var ua=env.invoke_iiiiiiiiiiii;var va=env.invoke_iiii;var wa=env.invoke_viiiiiiiiiiiiiii;var xa=env.invoke_viiiiii;var ya=env.invoke_viiiiiii;var za=env.invoke_viiiiiiiiii;var Aa=env.invoke_iii;var Ba=env.invoke_iiiiii;var Ca=env.invoke_diii;var Da=env.invoke_i;var Ea=env.invoke_iiiii;var Fa=env.invoke_viii;var Ga=env.invoke_v;var Ha=env.invoke_iiiiiiiii;var Ia=env.invoke_iiiiid;var Ja=env.invoke_viiii;var Ka=env._fabs;var La=env._strftime;var Ma=env._pthread_cond_wait;var Na=env.___lock;var Oa=env._pthread_key_create;var Pa=env._abort;var Qa=env.___cxa_guard_acquire;var Ra=env.___setErrNo;var Sa=env.___gxx_personality_v0;var Ta=env.___assert_fail;var Ua=env.___cxa_free_exception;var Va=env.___cxa_allocate_exception;var Wa=env.___cxa_find_matching_catch;var Xa=env.__isLeapYear;var Ya=env.___cxa_guard_release;var Za=env.__addDays;var _a=env._strftime_l;var $a=env._emscripten_set_main_loop_timing;var ab=env._llvm_eh_typeid_for;var bb=env._sbrk;var cb=env.___cxa_begin_catch;var db=env._emscripten_memcpy_big;var eb=env.___cxa_end_catch;var fb=env.___resumeException;var gb=env.__ZSt18uncaught_exceptionv;var hb=env._sysconf;var ib=env._pthread_getspecific;var jb=env.__arraySum;var kb=env._pthread_self;var lb=env._pthread_mutex_unlock;var mb=env._pthread_once;var nb=env.___syscall54;var ob=env.___unlock;var pb=env._pthread_cleanup_pop;var qb=env._pthread_cond_broadcast;var rb=env._emscripten_set_main_loop;var sb=env._pthread_setspecific;var tb=env.___cxa_atexit;var ub=env.___cxa_throw;var vb=env.___cxa_rethrow;var wb=env.___syscall6;var xb=env._pthread_cleanup_push;var yb=env.___cxa_pure_virtual;var zb=env._time;var Ab=env._pthread_mutex_lock;var Bb=env.___cxa_guard_abort;var Cb=env._atexit;var Db=env.___syscall140;var Eb=env.___syscall145;var Fb=env.___syscall146;var Gb=0.0;function Hb(newBuffer){if(q(newBuffer)&16777215||q(newBuffer)<=16777215||q(newBuffer)>2147483648)return false;i=new a(newBuffer);j=new b(newBuffer);k=new c(newBuffer);l=new d(newBuffer);m=new e(newBuffer);n=new f(newBuffer);o=new g(newBuffer);p=new h(newBuffer);buffer=newBuffer;return true}
|
|
||||||
// EMSCRIPTEN_START_FUNCS
|
|
||||||
function dc(a){a=a|0;var b=0;b=r;r=r+a|0;r=r+15&-16;return b|0}function ec(){return r|0}function fc(a){a=a|0;r=a}function gc(a,b){a=a|0;b=b|0;r=a;s=b}function hc(a,b){a=a|0;b=b|0;if(!x){x=a;y=b}}function ic(a){a=a|0;i[t>>0]=i[a>>0];i[t+1>>0]=i[a+1>>0];i[t+2>>0]=i[a+2>>0];i[t+3>>0]=i[a+3>>0]}function jc(a){a=a|0;i[t>>0]=i[a>>0];i[t+1>>0]=i[a+1>>0];i[t+2>>0]=i[a+2>>0];i[t+3>>0]=i[a+3>>0];i[t+4>>0]=i[a+4>>0];i[t+5>>0]=i[a+5>>0];i[t+6>>0]=i[a+6>>0];i[t+7>>0]=i[a+7>>0]}function kc(a){a=a|0;M=a}function lc(){return M|0}function mc(a){a=a|0;cb(a|0)|0;Zg()}function nc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0;m=r;r=r+128|0;f=m+116|0;g=m;x=0;k[f>>2]=k[b>>2];k[f+4>>2]=k[b+4>>2];k[f+8>>2]=k[b+8>>2];ra(47,g|0,f|0);e=x;x=0;if(!(e&1)){if(c){e=g+16|0;b=e+84|0;do{k[e>>2]=k[c>>2];e=e+4|0;c=c+4|0}while((e|0)<(b|0))}x=0;k[f>>2]=k[a>>2];k[f+4>>2]=k[a+4>>2];k[f+8>>2]=k[a+8>>2];ra(48,g|0,f|0);g=x;x=0;if(!(g&1)){if(d)i[d>>0]=0;l=0;r=m;return l|0}}a=Wa(648,0)|0;g=M;g=(g|0)==(ab(648)|0);a=cb(a|0)|0;b=(d|0)==0;if(!g){if(!b)i[d>>0]=0;eb();l=14;r=m;return l|0}e=a+12|0;do if(!b){b=k[e>>2]|0;x=0;c=Da(1)|0;g=x;x=0;if(!(g&1))if((b|0)==(c|0)){aj(d,Ob[k[(k[a>>2]|0)+8>>2]&127](a)|0)|0;l=10;break}else{i[d>>0]=0;l=10;break}}else l=10;while(0);if((l|0)==10?(h=k[e>>2]|0,x=0,j=Da(1)|0,l=x,x=0,!(l&1)):0){l=(h|0)==(j|0)?k[a+8>>2]|0:13;eb();r=m;return l|0}b=Wa()|0;x=0;Ga(3);m=x;x=0;if(m&1){m=Wa(0)|0;mc(m)}else fb(b|0);return 0}function oc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;j=r;r=r+128|0;e=j+116|0;d=j;x=0;k[e>>2]=k[a>>2];k[e+4>>2]=k[a+4>>2];k[e+8>>2]=k[a+8>>2];ra(47,d|0,e|0);e=x;x=0;if((!(e&1)?(x=0,qa(154,d|0),e=x,x=0,!(e&1)):0)?(x=0,ra(49,d|0,1),e=x,x=0,!(e&1)):0){a=d+16|0;d=b+84|0;do{k[b>>2]=k[a>>2];b=b+4|0;a=a+4|0}while((b|0)<(d|0));if(c)i[c>>0]=0;c=0;r=j;return c|0}e=Wa(648,0)|0;b=M;b=(b|0)==(ab(648)|0);e=cb(e|0)|0;a=(c|0)==0;if(!b){if(!a)i[c>>0]=0;eb();c=14;r=j;return c|0}b=e+12|0;do if(!a){a=k[b>>2]|0;x=0;d=Da(1)|0;l=x;x=0;if(!(l&1))if((a|0)==(d|0)){aj(c,Ob[k[(k[e>>2]|0)+8>>2]&127](e)|0)|0;h=13;break}else{i[c>>0]=0;h=13;break}}else h=13;while(0);if((h|0)==13?(f=k[b>>2]|0,x=0,g=Da(1)|0,l=x,x=0,!(l&1)):0){l=(f|0)==(g|0)?k[e+8>>2]|0:13;eb();r=j;return l|0}a=Wa()|0;x=0;Ga(3);l=x;x=0;if(l&1){l=Wa(0)|0;mc(l)}else fb(a|0);return 0}function pc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=r;r=r+32|0;f=e+12|0;g=e;h=g;k[h>>2]=0;k[h+4>>2]=0;k[g+4>>2]=a;k[g+8>>2]=b;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[f+8>>2]=k[g+8>>2];c=oc(f,c,d)|0;r=e;return c|0}function qc(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+48|0;h=g+36|0;i=g+24|0;l=g+12|0;j=g;k[l>>2]=0;k[l+4>>2]=a;k[l+8>>2]=b;k[j>>2]=0;k[j+4>>2]=c;k[j+8>>2]=d;k[i>>2]=k[l>>2];k[i+4>>2]=k[l+4>>2];k[i+8>>2]=k[l+8>>2];k[h>>2]=k[j>>2];k[h+4>>2]=k[j+4>>2];k[h+8>>2]=k[j+8>>2];d=nc(i,h,e,f)|0;r=g;return d|0}function rc(){if(i[8]|0)return 35472;if(!(Qa(8)|0))return 35472;tb(54,35472,w|0)|0;Ya(8);return 35472}function sc(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;m=r;r=r+32|0;j=m;Ag(j,(1<<b)+-1|0,0);f=k[j>>2]|0;l=f+1|0;c=l<<1;k[a>>2]=0;g=a+4|0;k[g>>2]=0;k[a+8>>2]=0;a:do if(l){if(!((f|0)<-1?(x=0,qa(155,a|0),h=x,x=0,h&1):0))d=4;if((d|0)==4?(x=0,e=ta(66,c|0)|0,h=x,x=0,!(h&1)):0){k[g>>2]=e;k[a>>2]=e;k[a+8>>2]=e+c;b=e;while(1){i[b>>0]=0;b=(k[g>>2]|0)+1|0;k[g>>2]=b;c=c+-1|0;if(!c)break a}}c=Wa()|0;b=k[a>>2]|0;if(!b)fb(c|0);if((k[g>>2]|0)!=(b|0))k[g>>2]=b;Sg(b);fb(c|0)}while(0);b=~f;if((f|0)<(b|0)){r=m;return}g=j+12|0;h=j+8|0;f=j+4|0;e=b;do{b=k[g>>2]|0;if((e|0)>(0-b|0)){c=k[h>>2]|0;if((e|0)>(0-c|0)){d=k[f>>2]|0;if((e|0)>(0-d|0))if((e|0)>=0)if((e|0)>0)if((d|0)<=(e|0))if((c|0)>(e|0))b=2;else b=(b|0)>(e|0)?3:4;else b=1;else b=0;else b=-1;else b=-2}else b=-3}else b=-4;i[(k[a>>2]|0)+(e+l)>>0]=b;e=e+1|0}while((e|0)<(l|0));r=m;return}function tc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0;p=k[c+16>>2]|0;switch(p|0){case 64:case 0:{x=0;a=Aa(25,a|0,b|0)|0;b=x;x=0;if(b&1)q=16;else d=a;break}default:{e=(1<<k[b+8>>2])+-1|0;o=k[b+20>>2]|0;n=o<<1;n=((n+e|0)/(n|1|0)|0)+1|0;a=0;while(1)if((1<<a|0)<(n|0))a=a+1|0;else break;d=0;while(1)if((1<<d|0)<(e|0))d=d+1|0;else{g=d;break}e=k[c>>2]|0;x=0;d=ta(66,4624)|0;m=x;x=0;if(m&1)q=16;else{f=((g|0)<8?8:g)+g<<1;h=d+4|0;l=b;m=h+84|0;do{k[h>>2]=k[l>>2];h=h+4|0;l=l+4|0}while((h|0)<(m|0));h=d+88|0;m=h+40|0;do{k[h>>2]=0;h=h+4|0}while((h|0)<(m|0));k[d>>2]=35484;k[d+128>>2]=e;k[d+132>>2]=n;k[d+136>>2]=o;k[d+140>>2]=a;k[d+144>>2]=g;k[d+148>>2]=f;k[d+152>>2]=p;a=d+156|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[d+172>>2]=k[b>>2];k[d+176>>2]=0;k[d+180>>2]=0;k[d+184>>2]=0;a=d+4568|0;e=d+188|0;do{k[e>>2]=0;k[e+4>>2]=0;j[e+8>>1]=0;j[e+10>>1]=1;e=e+12|0}while((e|0)!=(a|0));k[a>>2]=0;k[a+4>>2]=0;j[a+8>>1]=0;i[a+10>>0]=0;b=d+4580|0;k[b>>2]=0;k[b+4>>2]=0;j[b+8>>1]=0;i[b+10>>0]=0;b=d+4592|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=0;k[b+24>>2]=0;i[b+28>>0]=0;if(!(k[d+28>>2]|0))k[d+20>>2]=1}}}if((q|0)==16){q=Wa()|0;fb(q|0)}if(!d)return d|0;x=0;ra(k[(k[dLine truncated
|
|
||||||
function Ne(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;f=b-c|0;g=a+128|0;d=a+136|0;if((((f|0)>-1?f:0-f|0)|0)>(k[d>>2]|0)){b=ia(Oe(a,a+4568|0)|0,c-b>>31|1)|0;e=k[d>>2]|0;f=e<<1|1;b=(ia(b,f)|0)+c|0;if((b|0)>=(0-e|0)){d=k[g>>2]|0;if((d+e|0)<(b|0))b=b-(ia(k[a+132>>2]|0,f)|0)|0}else{b=(ia(k[a+132>>2]|0,f)|0)+b|0;d=k[g>>2]|0}if((b&d|0)==(b|0)){a=b;a=a&65535;return a|0}a=d&~(b>>31);a=a&65535;return a|0}else{c=Oe(a,a+4580|0)|0;f=k[d>>2]|0;e=f<<1|1;b=(ia(e,c)|0)+b|0;if((b|0)>=(0-f|0)){d=k[g>>2]|0;if((d+f|0)<(b|0))b=b-(ia(k[a+132>>2]|0,e)|0)|0}else{b=(ia(k[a+132>>2]|0,e)|0)+b|0;d=k[g>>2]|0}if((b&d|0)==(b|0)){a=b;a=a&65535;return a|0}a=d&~(b>>31);a=a&65535;return a|0}return 0}function Oe(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0;m=b+9|0;c=l[m>>0]|0;f=b+4|0;e=(ia(c>>>1,k[f>>2]|0)|0)+(k[b>>2]|0)|0;if((c|0)<(e|0)){d=0;do{c=c<<1;d=d+1|0}while((c|0)<(e|0))}else d=0;g=k[a+148>>2]|0;h=k[36076+(k[a+4592>>2]<<2)>>2]|0;c=k[a+140>>2]|0;e=Pe(a)|0;do if((e|0)<(g+-2-h-c|0))if(!d){d=k[f>>2]|0;a=d+e|0;c=a&1;a=(c+a|0)/2|0;j=8;break}else{h=(Qe(a,d)|0)+(e<<d)|0;d=k[f>>2]|0;e=h+d|0;g=e&1;c=g;f=1;e=(g+e|0)/2|0;break}else{e=(Qe(a,c)|0)+1|0;g=k[f>>2]|0;a=e+g|0;c=a&1;a=(c+a|0)/2|0;if(!d){d=g;j=8}else{h=e;f=1;e=a;d=g}}while(0);if((j|0)==8){h=e;f=l[b+10>>0]<<1>>>0>=(l[m>>0]|0)>>>0;e=a}e=(c|0)!=0^f?e:0-e|0;if((e|0)<0){j=b+10|0;i[j>>0]=(l[j>>0]|0)+1}c=(h+1-d>>1)+(k[b>>2]|0)|0;k[b>>2]=c;d=i[m>>0]|0;if(d<<24>>24!=(i[b+8>>0]|0)){b=d;b=b&255;b=b+1|0;b=b&255;i[m>>0]=b;return e|0}k[b>>2]=c>>1;j=(d&255)>>>1;i[m>>0]=j;b=b+10|0;i[b>>0]=(l[b>>0]|0)>>>1;b=j;b=b&255;b=b+1|0;b=b&255;i[m>>0]=b;return e|0}function Pe(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;f=a+112|0;if((k[f>>2]|0)<16)Xd(a);g=a+108|0;c=k[g>>2]|0;if((c|0)>=0)if(!(c&1073741824))if(!(c&536870912))if(!(c&268435456))if(!(c&134217728))if(!(c&67108864))if(!(c&33554432))if(!(c&16777216))if(!(c&8388608))if(!(c&4194304))if(!(c&2097152))if(!(c&1048576))if(!(c&524288))if(!(c&262144))if(!(c&131072)){e=c>>>12&16;b=e+-1|0;if(!e){b=(k[f>>2]|0)+-15|0;k[f>>2]=b;d=c<<15;k[g>>2]=d;c=b;b=15;while(1){if((c|0)<1){Xd(a);e=k[g>>2]|0;c=k[f>>2]|0}else e=d;c=c+-1|0;k[f>>2]=c;d=e<<1;k[g>>2]=d;if((e|0)<0)break;else b=b+1|0}return b|0}}else b=14;else b=13;else b=12;else b=11;else b=10;else b=9;else b=8;else b=7;else b=6;else b=5;else b=4;else b=3;else b=2;else b=1;else b=0;a=b+1|0;k[f>>2]=(k[f>>2]|0)-a;k[g>>2]=c<<a;g=b;return g|0}function Qe(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;d=a+112|0;c=k[d>>2]|0;if((c|0)<(b|0)){Xd(a);c=k[d>>2]|0;if((c|0)<(b|0)){c=Va(16)|0;if((i[8]|0)==0?(Qa(8)|0)!=0:0){tb(54,35472,w|0)|0;Ya(8)}x=0;Fa(4,c|0,5,35472);a=x;x=0;if(a&1){a=Wa()|0;Ua(c|0);fb(a|0)}else ub(c|0,648,74)}}e=a+108|0;a=k[e>>2]|0;k[d>>2]=c-b;k[e>>2]=a<<b;return a>>>(32-b|0)|0}function Re(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;o=r;r=r+32|0;d=o;n=a+136|0;a:do if(!(k[n>>2]|0)){c=k[a+128>>2]|0;b=a+144|0;if((((c|0)==((1<<k[b>>2])+-1|0)?(Ag(d,c,0),(k[d+4>>2]|0)==(k[a+176>>2]|0)):0)?(k[d+8>>2]|0)==(k[a+180>>2]|0):0)?(k[d+12>>2]|0)==(k[a+184>>2]|0):0)switch(k[b>>2]|0){case 8:{n=k[8856]|0;k[a+4604>>2]=n+(((k[8857]|0)-n|0)>>>1);r=o;return}case 10:{n=k[8859]|0;k[a+4604>>2]=n+(((k[8860]|0)-n|0)>>>1);r=o;return}case 12:{n=k[8862]|0;k[a+4604>>2]=n+(((k[8863]|0)-n|0)>>>1);r=o;return}case 16:{n=k[8865]|0;k[a+4604>>2]=n+(((k[8866]|0)-n|0)>>>1);r=o;return}default:break a}}else b=a+144|0;while(0);m=1<<k[b>>2];c=a+4608|0;d=m<<1;e=a+4612|0;f=k[e>>2]|0;b=k[c>>2]|0;g=f-b|0;if(d>>>0<=g>>>0){if(d>>>0<g>>>0?(h=b+d|0,(f|0)!=(h|0)):0)k[e>>2]=h}else{Yd(c,d-g|0);b=k[c>>2]|0}l=a+4604|0;k[l>>2]=b+m;b=0-m|0;if((m|0)<=(b|0)){r=o;return}h=a+184|0;j=a+180|0;g=a+176|0;f=b;do{b=k[h>>2]|0;if((f|0)>(0-b|0)){c=k[j>>2]|0;if((f|0)>(0-c|0)){d=k[g>>2]|0;if((f|0)>(0-d|0)){e=k[n>>2]|0;if((f|0)>=(0-e|0))if((e|0)<(f|0))if((d|0)<=(f|0))if((c|0)>(f|0))b=2;else b=(b|0)>(f|0)?3:4;else b=1;else b=0;else b=-1}else b=-2}else b=-3}else b=-4;i[(k[l>>2]|0)+f>>0]=b;f=f+1|0}while((f|0)!=(m|0));r=o;return}function Se(a){a=a|0;var b=0,c=0;k[a>>2]=36308;b=k[a+92>>2]|0;if(b){c=a+96|0;if((k[c>>2]|0)!=(b|0))k[c>>2]=b;Sg(b)}a=a+88|0;b=k[a>>2]|0;k[a>>2]=0;if(!b)return;Lb[k[(k[b>>2]|0)+4>>2]&255](b);return}function Te(a){a=a|0;var b=0,c=0;k[a>>2]=36308;b=k[a+92>>2]|0;if(b){c=a+96|0;if((k[c>>2]|0)!=(b|0))k[c>>2]=b;Sg(b)}c=a+88|0;b=k[c>>2]|0;k[c>>2]=0;if(!b){Sg(a);return}Lb[k[(k[b>>2]|0)+4>>2]&255](b);Sg(a);return}function Ue(a){a=a|0;var b=0,c=0;k[a>>2]=35652;b=k[a+4608>>2]|0;if(b){c=a+4612|0;if((k[c>>2]|0)!=(b|0))k[c>>2]=b;Sg(b)}k[a>>2]=36308;b=k[a+92>>2]|0;if(b){c=a+96|0;if((k[c>>2]|0)!=(b|0))k[c>>2]=b;Sg(b)}a=a+88|0;b=k[a>>2]|0;k[a>>2]=0;if(!b)return;Lb[k[(k[b>>2]|0)+4>>2]&255](b);return}function Ve(a){a=a|0;var b=0,c=0;k[a>>2]=35652;b=k[a+4608>>2]|0;if(b){c=a+4612|0;if((k[c>>2]|0)!=(b|0))k[c>>2]=b;Sg(b)}k[a>>2]=36308;b=k[a+92>>2]|0;if(b){c=a+96|0;if((k[c>>2]|0)!=(b|0))k[c>>2]=b;Sg(b)}c=a+88|0;b=k[c>>2]|0;k[c>>2]=0;if(!b){Sg(a);return}Lb[k[(k[b>>2]|0)+4>>2]&255](b);Sg(a);return}function We(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,vLine truncated
|
|
||||||
function ak(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;s=r;r=r+32|0;q=s+16|0;p=s+8|0;m=s+4|0;n=s;e=a+52|0;a:do if(i[e>>0]|0){d=a+48|0;c=k[d>>2]|0;if(b){k[d>>2]=-1;i[e>>0]=0}}else{c=k[a+44>>2]|0;c=(c|0)>1?c:1;o=a+32|0;if((c|0)>0){e=0;do{d=Ni(k[o>>2]|0)|0;if((d|0)==-1){c=-1;break a}i[q+e>>0]=d;e=e+1|0}while((e|0)<(c|0))}b:do if(!(i[a+53>>0]|0)){g=a+40|0;h=a+36|0;j=p+1|0;c:while(1){t=k[g>>2]|0;e=t;d=k[e>>2]|0;e=k[e+4>>2]|0;u=k[h>>2]|0;f=q+c|0;switch(ac[k[(k[u>>2]|0)+16>>2]&15](u,t,q,f,m,p,j,n)|0){case 2:{c=-1;break a}case 3:break c;case 1:break;default:break b}u=k[g>>2]|0;k[u>>2]=d;k[u+4>>2]=e;if((c|0)==8){c=-1;break a}d=Ni(k[o>>2]|0)|0;if((d|0)==-1){c=-1;break a}i[f>>0]=d;c=c+1|0}i[p>>0]=i[q>>0]|0}else i[p>>0]=i[q>>0]|0;while(0);if(b){c=i[p>>0]|0;k[a+48>>2]=c&255}else{while(1){if((c|0)<=0)break;c=c+-1|0;if((Qi(l[q+c>>0]|0,k[o>>2]|0)|0)==-1){c=-1;break a}}c=i[p>>0]|0}c=c&255}while(0);r=s;return c|0}function bk(a){a=a|0;return}function ck(a){a=a|0;a=a+4|0;k[a>>2]=(k[a>>2]|0)+1;return}function dk(a){a=a|0;var b=0,c=0;c=a+4|0;b=k[c>>2]|0;k[c>>2]=b+-1;if(!b){Lb[k[(k[a>>2]|0)+8>>2]&255](a);a=1}else a=0;return a|0}function ek(a,b){a=a|0;b=b|0;k[a>>2]=36400;x=0;ra(65,a+4|0,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0);a=x;x=0;if(a&1){a=Wa()|0;fb(a|0)}else return}function fk(a,b){a=a|0;b=b|0;k[a>>2]=36400;x=0;ra(65,a+4|0,b|0);a=x;x=0;if(a&1){a=Wa()|0;fb(a|0)}else return}function gk(a,b){a=a|0;b=b|0;var c=0,d=0;d=bj(b)|0;c=Rg(d+13|0)|0;k[c>>2]=d;k[c+4>>2]=d;k[c+8>>2]=0;c=c+12|0;$t(c|0,b|0,d+1|0)|0;k[a>>2]=c;return}function hk(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=c;k[a+4>>2]=b;return}function ik(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=r;r=r+16|0;d=e;_b[k[(k[a>>2]|0)+12>>2]&15](d,a,b);if((k[d+4>>2]|0)==(k[c+4>>2]|0))d=(k[d>>2]|0)==(k[c>>2]|0);else d=0;r=e;return d|0}function jk(a,b,c){a=a|0;b=b|0;c=c|0;return ((k[b>>2]|0)==(c|0)?(k[b+4>>2]|0)==(a|0):0)|0}function kk(a,b,c){a=a|0;b=b|0;c=c|0;b=Th(c)|0;uk(a,b,bj(b)|0);return}function lk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;g=r;r=r+16|0;f=g;d=k[b>>2]|0;do if(d){e=i[c>>0]|0;if(!(e&1))e=(e&255)>>>1;else e=k[c+4>>2]|0;if(e){Dk(c,55446)|0;d=k[b>>2]|0}b=k[b+4>>2]|0;_b[k[(k[b>>2]|0)+24>>2]&15](f,b,d);b=i[f>>0]|0;e=(b&1)==0;x=0;va(30,c|0,(e?f+1|0:k[f+8>>2]|0)|0,(e?(b&255)>>>1:k[f+4>>2]|0)|0)|0;b=x;x=0;if(b&1){g=Wa()|0;wk(f);fb(g|0)}else{wk(f);break}}while(0);k[a>>2]=k[c>>2];k[a+4>>2]=k[c+4>>2];k[a+8>>2]=k[c+8>>2];k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;r=g;return}function mk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;e=r;r=r+32|0;d=e+12|0;f=e;uk(f,c,bj(c)|0);x=0;Fa(8,d|0,b|0,f|0);c=x;x=0;do if(!(c&1)){x=0;ra(66,a|0,d|0);c=x;x=0;if(c&1){e=Wa()|0;wk(d);d=e;break}else{wk(d);wk(f);k[a>>2]=42196;c=k[b+4>>2]|0;f=a+8|0;k[f>>2]=k[b>>2];k[f+4>>2]=c;r=e;return}}else d=Wa()|0;while(0);wk(f);fb(d|0)}function nk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;f=r;r=r+48|0;e=f+24|0;h=f+16|0;g=f;k[h>>2]=b;k[h+4>>2]=c;tk(g,d);x=0;Fa(8,e|0,h|0,g|0);d=x;x=0;do if(!(d&1)){x=0;ra(66,a|0,e|0);h=x;x=0;if(h&1){h=Wa()|0;wk(e);e=h;break}else{wk(e);wk(g);k[a>>2]=42196;k[a+8>>2]=b;k[a+12>>2]=c;r=f;return}}else e=Wa()|0;while(0);wk(g);fb(e|0)}function ok(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;e=r;r=r+48|0;d=e+24|0;g=e+16|0;f=e;k[g>>2]=b;k[g+4>>2]=c;uk(f,57354,0);x=0;Fa(8,d|0,g|0,f|0);g=x;x=0;do if(!(g&1)){x=0;ra(66,a|0,d|0);g=x;x=0;if(g&1){g=Wa()|0;wk(d);d=g;break}else{wk(d);wk(f);k[a>>2]=42196;k[a+8>>2]=b;k[a+12>>2]=c;r=e;return}}else d=Wa()|0;while(0);wk(f);fb(d|0)}function pk(a){a=a|0;ah(a);return}function qk(a){a=a|0;ah(a);Sg(a);return}function rk(a){a=a|0;return}function sk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;Ab(42208)|0;if((k[a>>2]|0)==1)do Ma(42236,42208)|0;while((k[a>>2]|0)==1);do if(!(k[a>>2]|0)){k[a>>2]=1;x=0;ta(71,42208)|0;d=x;x=0;if((((!(d&1)?(x=0,qa(c|0,b|0),d=x,x=0,!(d&1)):0)?(x=0,ta(72,42208)|0,d=x,x=0,!(d&1)):0)?(k[a>>2]=-1,x=0,ta(71,42208)|0,d=x,x=0,!(d&1)):0)?(x=0,ta(73,42236)|0,d=x,x=0,!(d&1)):0)break;d=Wa(0)|0;cb(d|0)|0;x=0;ta(72,42208)|0;d=x;x=0;if((!(d&1)?(k[a>>2]=0,x=0,ta(71,42208)|0,d=x,x=0,!(d&1)):0)?(x=0,ta(73,42236)|0,d=x,x=0,!(d&1)):0){x=0;Ga(5);x=0}b=Wa()|0;x=0;Ga(3);d=x;x=0;if(d&1){d=Wa(0)|0;mc(d)}else fb(b|0)}else lb(42208)|0;while(0);return}function tk(a,b){a=a|0;b=b|0;if(!(i[b>>0]&1)){k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2]}else uk(a,k[b+8>>2]|0,k[b+4>>2]|0);return}function uk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;if(c>>>0>4294967279)Og(a);if(c>>>0<11){i[a>>0]=c<<1;a=a+1|0}else{e=c+16&-16;d=Rg(e)|0;k[a+8>>2]=d;k[a>>2]=e|1;k[a+4>>2]=c;a=d}$t(a|0,b|0,c|0)|0;i[a+c>>0]=0;return}function vk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;if(b>>>0>4294967279)Og(a);if(b>>>0<11){i[a>>0]=b<<1;a=a+1|0}else{e=b+16&-16;d=Rg(e)|0;k[a+8>>2]=d;k[a>>2]=e|1;k[a+4>>2]=b;a=d}Yt(a|0,c|0,b|0)|0;i[a+b>>0]=0;return}function wk(a){a=a|0;if(i[a>>0]&1)Sg(k[a+8>>2]|0);return}function xk(a,b){a=a|0;b=b|0;var c=0,d=0;if((a|0)!=(b|0)){c=i[b>>0]|0;d=(c&1)==0;zk(a,d?b+1|0:k[b+8>>2]|0,d?(c&255)>>>1:k[b+4>>2]|0)|0}return a|0}function yk(a,b){a=a|0;b=b|0;return zk(a,b,bj(bLine truncated
|
|
||||||
function Gp(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0;v=r;r=r+144|0;h=v+24|0;a=v+32|0;w=v+16|0;q=v+8|0;n=v+4|0;o=v+28|0;j=v;k[w>>2]=a;A=w+4|0;k[A>>2]=165;l=a+100|0;x=0;u=ta(67,e|0)|0;m=x;x=0;if(!(m&1)){k[n>>2]=u;x=0;m=Aa(26,n|0,43752)|0;a=x;x=0;a:do if(!(a&1)?(i[o>>0]=0,s=k[c>>2]|0,k[j>>2]=s,p=k[e+4>>2]|0,t=s,x=0,k[h>>2]=k[j>>2],p=ua(1,b|0,h|0,d|0,n|0,p|0,f|0,o|0,m|0,w|0,q|0,l|0)|0,e=x,x=0,!(e&1)):0){if(p){if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[g+8>>2]>>0]=0;k[g+4>>2]=0}if(i[o>>0]|0){x=0;a=Aa(k[(k[m>>2]|0)+28>>2]|0,m|0,45)|0;e=x;x=0;if(e&1)break;x=0;ra(55,g|0,a|0);e=x;x=0;if(e&1)break}x=0;j=Aa(k[(k[m>>2]|0)+28>>2]|0,m|0,48)|0;e=x;x=0;if(e&1)break;a=k[w>>2]|0;l=k[q>>2]|0;h=l+-1|0;b:do if(a>>>0<h>>>0)do{if((i[a>>0]|0)!=j<<24>>24)break b;a=a+1|0}while(a>>>0<h>>>0);while(0);x=0;va(32,g|0,a|0,l|0)|0;g=x;x=0;if(g&1)break}a=k[b>>2]|0;do if(a){if((k[a+12>>2]|0)==(k[a+16>>2]|0)){x=0;a=ta(k[(k[a>>2]|0)+36>>2]|0,a|0)|0;g=x;x=0;if(g&1)break a;if((a|0)==-1){k[b>>2]=0;a=0;break}else{a=k[b>>2]|0;break}}}else a=0;while(0);h=(a|0)==0;do if(s){if((k[t+12>>2]|0)==(k[t+16>>2]|0)){x=0;a=ta(k[(k[s>>2]|0)+36>>2]|0,t|0)|0;t=x;x=0;if(t&1)break a;if((a|0)==-1){k[c>>2]=0;z=29;break}}if(!h)z=30}else z=29;while(0);if((z|0)==29?h:0)z=30;if((z|0)==30)k[f>>2]=k[f>>2]|2;h=k[b>>2]|0;dk(u)|0;a=k[w>>2]|0;k[w>>2]=0;if((a|0)!=0?(x=0,qa(k[A>>2]|0,a|0),A=x,x=0,A&1):0){A=Wa(0)|0;mc(A)}r=v;return h|0}while(0);h=Wa()|0;dk(u)|0;a=k[w>>2]|0;k[w>>2]=0;if(!a)y=h;else z=36}else{h=Wa()|0;k[w>>2]=0;z=36}if((z|0)==36){x=0;qa(k[A>>2]|0,a|0);A=x;x=0;if(A&1){A=Wa(0)|0;mc(A)}else y=h}fb(y|0);return 0}function Hp(a,b,c,d,e,f,g,h,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;z=r;r=r+112|0;m=z+100|0;n=z+88|0;o=z+76|0;p=z+64|0;q=z+52|0;s=z+48|0;t=z+36|0;u=z+24|0;v=z+12|0;w=z;do if(a){a=wq(b,43360)|0;Mb[k[(k[a>>2]|0)+44>>2]&127](m,a);w=k[m>>2]|0;i[c>>0]=w;i[c+1>>0]=w>>8;i[c+2>>0]=w>>16;i[c+3>>0]=w>>24;Mb[k[(k[a>>2]|0)+32>>2]&127](n,a);if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0}else{i[k[j+8>>2]>>0]=0;k[j+4>>2]=0}x=0;ra(70,j|0,0);c=x;x=0;if(c&1){c=Wa(0)|0;mc(c)};k[j>>2]=k[n>>2];k[j+4>>2]=k[n+4>>2];k[j+8>>2]=k[n+8>>2];k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;wk(n);Mb[k[(k[a>>2]|0)+28>>2]&127](o,a);if(!(i[h>>0]&1)){i[h+1>>0]=0;i[h>>0]=0}else{i[k[h+8>>2]>>0]=0;k[h+4>>2]=0}x=0;ra(70,h|0,0);c=x;x=0;if(c&1){c=Wa(0)|0;mc(c)};k[h>>2]=k[o>>2];k[h+4>>2]=k[o+4>>2];k[h+8>>2]=k[o+8>>2];k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;wk(o);h=Ob[k[(k[a>>2]|0)+12>>2]&127](a)|0;i[d>>0]=h;h=Ob[k[(k[a>>2]|0)+16>>2]&127](a)|0;i[e>>0]=h;Mb[k[(k[a>>2]|0)+20>>2]&127](p,a);if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0}else{i[k[f+8>>2]>>0]=0;k[f+4>>2]=0}x=0;ra(70,f|0,0);e=x;x=0;if(e&1){e=Wa(0)|0;mc(e)};k[f>>2]=k[p>>2];k[f+4>>2]=k[p+4>>2];k[f+8>>2]=k[p+8>>2];k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;wk(p);Mb[k[(k[a>>2]|0)+24>>2]&127](q,a);if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[g+8>>2]>>0]=0;k[g+4>>2]=0}x=0;ra(70,g|0,0);e=x;x=0;if(e&1){e=Wa(0)|0;mc(e)}else{k[g>>2]=k[q>>2];k[g+4>>2]=k[q+4>>2];k[g+8>>2]=k[q+8>>2];k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;wk(q);y=Ob[k[(k[a>>2]|0)+36>>2]&127](a)|0;break}}else{a=wq(b,43296)|0;Mb[k[(k[a>>2]|0)+44>>2]&127](s,a);s=k[s>>2]|0;i[c>>0]=s;i[c+1>>0]=s>>8;i[c+2>>0]=s>>16;i[c+3>>0]=s>>24;Mb[k[(k[a>>2]|0)+32>>2]&127](t,a);if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0}else{i[k[j+8>>2]>>0]=0;k[j+4>>2]=0}x=0;ra(70,j|0,0);c=x;x=0;if(c&1){c=Wa(0)|0;mc(c)};k[j>>2]=k[t>>2];k[j+4>>2]=k[t+4>>2];k[j+8>>2]=k[t+8>>2];k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;wk(t);Mb[k[(k[a>>2]|0)+28>>2]&127](u,a);if(!(i[h>>0]&1)){i[h+1>>0]=0;i[h>>0]=0}else{i[k[h+8>>2]>>0]=0;k[h+4>>2]=0}x=0;ra(70,h|0,0);c=x;x=0;if(c&1){c=Wa(0)|0;mc(c)};k[h>>2]=k[u>>2];k[h+4>>2]=k[u+4>>2];k[h+8>>2]=k[u+8>>2];k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;wk(u);h=Ob[k[(k[a>>2]|0)+12>>2]&127](a)|0;i[d>>0]=h;h=Ob[k[(k[a>>2]|0)+16>>2]&127](a)|0;i[e>>0]=h;Mb[k[(k[a>>2]|0)+20>>2]&127](v,a);if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0}else{i[k[f+8>>2]>>0]=0;k[f+4>>2]=0}x=0;ra(70,f|0,0);e=x;x=0;if(e&1){e=Wa(0)|0;mc(e)};k[f>>2]=k[v>>2];k[f+4>>2]=k[v+4>>2];k[f+8>>2]=k[v+8>>2];k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;wk(v);Mb[k[(k[a>>2]|0)+24>>2]&127](w,a);if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[g+8>>2]>>0]=0;k[g+4>>2]=0}x=0;ra(70,g|0,0);e=x;x=0;if(e&1){e=Wa(0)|0;mc(e)}else{k[g>>2]=k[w>>2];k[g+4>>2]=k[w+4>>2];k[g+8>>2]=k[w+8>>2];k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;wk(w);y=Ob[k[(k[a>>2]|0)+36>>2]&127](a)|0;break}}while(0);k[l>>2]=y;r=z;return}function Ip(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=i[a>>0]|0;g=a+4|0;f=k[g>>2]|0;a:do if(((e&1)==0?(e&255)>>>1:f)|0){if((b|0)!=(c|0)){e=c+-4|0;if(e>>>0>b>>>0){f=b;do{h=k[f>>2]|0;k[f>>2]=k[e>>2];k[e>>2]=h;f=f+4|0;e=e+-4|0}while(f>>>0<e>>>0)}e=i[a>>0]|0;f=k[g>>2]|0}h=(e&1)==0;g=h?a+1|0:k[a+8>>2]|0;c=c+-4|0;a=g+(h?(e&255)>>>1:f)|0;f=i[g>>0]|0;e=f<<24>>24<1|f<<24>>24==127;b:do if(c>>>0>b>>>0){while(1){if(!e?(f<<24>>24|0)!=(k[b>>2]|0):0)break;g=(a-g|0)>1?g+1|0:g;b=b+4|0;f=i[g>>0]|0Line truncated
|
|
||||||
function Kg(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;c=r;r=r+16|0;e=c;k[e>>2]=0;f=e+4|0;k[f>>2]=0;k[e+8>>2]=0;x=0;Fa(7,a|0,e|0,4);b=x;x=0;a:do if(b&1)d=3;else{b=k[e>>2]|0;b:do if(!(cj(b,49507,4)|0)){x=0;b=ta(68,a|0)|0;g=x;x=0;if(g&1){d=3;break a}b=b&255;switch(b|0){case 3:case 2:case 1:case 0:{k[a+44>>2]=b;a=5;b=k[e>>2]|0;break b}case 5:case 4:{b=Va(16)|0;x=0;a=Da(1)|0;g=x;x=0;if(!(g&1)?(x=0,Fa(4,b|0,7,a|0),g=x,x=0,!(g&1)):0){x=0;Fa(5,b|0,648,74);x=0;d=3;break a}a=Wa()|0;Ua(b|0);break a}default:{b=Va(16)|0;x=0;a=Da(1)|0;g=x;x=0;if(!(g&1)?(x=0,Fa(4,b|0,5,a|0),g=x,x=0,!(g&1)):0){x=0;Fa(5,b|0,648,74);x=0;d=3;break a}a=Wa()|0;Ua(b|0);break a}}}else a=4;while(0);if(!b){r=c;return a|0}if((k[f>>2]|0)!=(b|0))k[f>>2]=b;Sg(b);r=c;return a|0}while(0);if((d|0)==3)a=Wa()|0;b=k[e>>2]|0;if(!b)fb(a|0);if((k[f>>2]|0)!=(b|0))k[f>>2]=b;Sg(b);fb(a|0);return 0}function Lg(a){a=a|0;var b=0,c=0,d=0;d=k[(k[a>>2]|0)+-12>>2]|0;k[a+d>>2]=35800;b=a+(d+56)|0;k[b>>2]=35820;c=a+(d+4)|0;k[c>>2]=35836;wk(a+(d+36)|0);al(c);Vk(b);return}function Mg(a,b,c,d,e,f,g,h,j,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,s=0,t=0,u=0;p=r;r=r+96|0;o=p;n=pc(a,b,o,0)|0;if(n){e=n;r=p;return e|0}i[o+32>>0]=0;s=k[o+8>>2]|0;u=k[o>>2]|0;t=k[o+4>>2]|0;n=ia(t,u)|0;q=k[o+16>>2]|0;n=ia(ia(n,(s|0)<9?1:2)|0,q)|0;k[d>>2]=n;n=tj(n)|0;k[c>>2]=n;k[e>>2]=u;k[f>>2]=t;k[g>>2]=s;k[h>>2]=k[o+12>>2];k[j>>2]=q;k[l>>2]=k[o+20>>2];k[m>>2]=k[o+24>>2];e=qc(n,k[d>>2]|0,a,b,0,0)|0;r=p;return e|0}function Ng(a,b){a=a|0;b=b|0;var c=0;c=r;r=r+16|0;k[c>>2]=b;b=k[9203]|0;Si(b,a,c)|0;Ki(10,b)|0;Pa()}function Og(a){a=a|0;Ta(49793,49822,1164,49898)}function Pg(a){a=a|0;Ta(49919,49942,303,49898)}function Qg(){var a=0,b=0;a=r;r=r+16|0;if(!(mb(36556,4)|0)){b=ib(k[9138]|0)|0;r=a;return b|0}else Ng(50018,a);return 0}function Rg(a){a=a|0;var b=0;b=(a|0)==0?1:a;a=tj(b)|0;a:do if(!a){while(1){a=_g()|0;if(!a)break;$b[a&7]();a=tj(b)|0;if(a)break a}b=Va(4)|0;k[b>>2]=36376;ub(b|0,416,56)}while(0);return a|0}function Sg(a){a=a|0;uj(a);return}function Tg(a){a=a|0;Sg(a);return}function Ug(a){a=a|0;k[a>>2]=36376;return}function Vg(a){a=a|0;return}function Wg(a){a=a|0;Sg(a);return}function Xg(a){a=a|0;return 50067}function Yg(a){a=a|0;var b=0;b=r;r=r+16|0;x=0;Ga(a|0);a=x;x=0;if(!(a&1)){x=0;ra(64,50082,b|0);x=0}a=Wa(0)|0;cb(a|0)|0;x=0;ra(64,50122,b+8|0);x=0;a=Wa(0)|0;x=0;Ga(3);b=x;x=0;if(b&1){b=Wa(0)|0;mc(b)}else mc(a)}function Zg(){var a=0,b=0,c=0;x=0;a=Da(2)|0;c=x;x=0;if(c&1){c=Wa(0)|0;mc(c)}if(((a|0)!=0?(b=k[a>>2]|0,(b|0)!=0):0)?(c=b+48|0,(k[c>>2]&-256|0)==1126902528?(k[c+4>>2]|0)==1129074247:0):0)Yg(k[b+12>>2]|0);c=k[9091]|0;k[9091]=c+0;Yg(c)}function _g(){var a=0;a=k[9097]|0;k[9097]=a+0;return a|0}function $g(a){a=a|0;return}function ah(a){a=a|0;k[a>>2]=36400;Jh(a+4|0);return}function bh(a){a=a|0;ah(a);Sg(a);return}function ch(a){a=a|0;return k[a+4>>2]|0}function dh(a){a=a|0;return}function eh(a){a=a|0;k[a>>2]=36420;return}function fh(a){a=a|0;return}function gh(a){a=a|0;Sg(a);return}function hh(a){a=a|0;return 50172}function ih(a){a=a|0;return}function jh(a){a=a|0;return}function kh(a){a=a|0;return}function lh(a){a=a|0;Sg(a);return}function mh(a){a=a|0;Sg(a);return}function nh(a){a=a|0;Sg(a);return}function oh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;g=r;r=r+64|0;f=g;if((a|0)!=(b|0))if((b|0)!=0?(e=uh(b,480,496,0)|0,(e|0)!=0):0){b=f;d=b+56|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(d|0));k[f>>2]=e;k[f+8>>2]=a;k[f+12>>2]=-1;k[f+48>>2]=1;cc[k[(k[e>>2]|0)+28>>2]&63](e,f,k[c>>2]|0,1);if((k[f+24>>2]|0)==1){k[c>>2]=k[f+16>>2];b=1}else b=0}else b=0;else b=1;r=g;return b|0}function ph(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;a=b+16|0;e=k[a>>2]|0;do if(e){if((e|0)!=(c|0)){d=b+36|0;k[d>>2]=(k[d>>2]|0)+1;k[b+24>>2]=2;i[b+54>>0]=1;break}a=b+24|0;if((k[a>>2]|0)==2)k[a>>2]=d}else{k[a>>2]=c;k[b+24>>2]=d;k[b+36>>2]=1}while(0);return}function qh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((a|0)==(k[b+8>>2]|0))ph(0,b,c,d);return}function rh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((a|0)==(k[b+8>>2]|0))ph(0,b,c,d);else{a=k[a+8>>2]|0;cc[k[(k[a>>2]|0)+28>>2]&63](a,b,c,d)}return}function sh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;f=k[a+4>>2]|0;e=f>>8;if(f&1)e=k[(k[c>>2]|0)+e>>2]|0;a=k[a>>2]|0;cc[k[(k[a>>2]|0)+28>>2]&63](a,b,c+e|0,(f&2|0)!=0?d:2);return}function th(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if((a|0)!=(k[b+8>>2]|0)){f=k[a+12>>2]|0;e=a+16+(f<<3)|0;sh(a+16|0,b,c,d);if((f|0)>1){f=b+54|0;a=a+24|0;do{sh(a,b,c,d);if(i[f>>0]|0)break a;a=a+8|0}while(a>>>0<e>>>0)}}else ph(0,b,c,d);while(0);return}function uh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0;q=r;r=r+64|0;p=q;o=k[a>>2]|0;n=a+(k[o+-8>>2]|0)|0;o=k[o+-4>>2]|0;k[p>>2]=c;k[p+4>>2]=a;k[p+8>>2]=b;k[p+12>>2]=d;d=p+16|0;a=p+20|0;b=p+24|0;e=p+28|0;f=p+32|0;g=p+40|0;h=(o|0)==(c|0);l=d;m=l+36|0;do{k[l>>2]=0;l=l+4|0}while((l|0)<(m|0));j[d+36>>1]=0;i[d+38>>0]=0;a:do if(h){k[p+48>>2]=1;Sb[k[(k[c>>2]|0)+20>>2]&15](c,p,n,n,1,0);d=(k[b>>2]|0)==1?n:0}else{Jb[k[(k[o>>2]|0)+24>>2]&15](o,p,n,1,0);switch(k[p+36>>Line truncated
|
|
||||||
function As(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;z=r;r=r+320|0;q=z+208|0;g=z+200|0;B=z+24|0;A=z+12|0;t=z+8|0;w=z+40|0;y=z+4|0;u=z;s=Xr(d)|0;$m(B,d,q,g);k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;if(!(i[A>>0]&1))a=10;else a=(k[A>>2]&-2)+-1|0;x=0;Fa(6,A|0,a|0,0);p=x;x=0;a:do if(!(p&1)){n=A+8|0;o=A+1|0;a=(i[A>>0]&1)==0?o:k[n>>2]|0;k[t>>2]=a;k[y>>2]=w;k[u>>2]=0;p=A+4|0;m=k[g>>2]|0;g=k[b>>2]|0;b:while(1){if(g){d=k[g+12>>2]|0;if((d|0)==(k[g+16>>2]|0)){x=0;d=ta(k[(k[g>>2]|0)+36>>2]|0,g|0)|0;l=x;x=0;if(l&1){C=25;break}}else d=k[d>>2]|0;if((d|0)==-1){k[b>>2]=0;d=0;h=1}else{d=g;h=0}}else{d=0;h=1}j=k[c>>2]|0;do if(j){g=k[j+12>>2]|0;if((g|0)==(k[j+16>>2]|0)){x=0;g=ta(k[(k[j>>2]|0)+36>>2]|0,j|0)|0;l=x;x=0;if(l&1){C=25;break b}}else g=k[g>>2]|0;if((g|0)!=-1)if(h)break;else{g=j;break b}else{k[c>>2]=0;C=17;break}}else C=17;while(0);if((C|0)==17){C=0;if(h){g=0;break}else j=0}g=i[A>>0]|0;g=(g&1)==0?(g&255)>>>1:k[p>>2]|0;if((k[t>>2]|0)==(a+g|0)){x=0;Fa(6,A|0,g<<1|0,0);l=x;x=0;if(l&1){C=25;break}if(!(i[A>>0]&1))a=10;else a=(k[A>>2]&-2)+-1|0;x=0;Fa(6,A|0,a|0,0);l=x;x=0;if(l&1){C=25;break}a=(i[A>>0]&1)==0?o:k[n>>2]|0;k[t>>2]=a+g}h=d+12|0;g=k[h>>2]|0;l=d+16|0;if((g|0)==(k[l>>2]|0)){x=0;g=ta(k[(k[d>>2]|0)+36>>2]|0,d|0)|0;D=x;x=0;if(D&1){C=25;break}}else g=k[g>>2]|0;if(Xm(g,s,a,t,u,m,B,w,y,q)|0){g=j;break}g=k[h>>2]|0;if((g|0)==(k[l>>2]|0)){x=0;ta(k[(k[d>>2]|0)+40>>2]|0,d|0)|0;D=x;x=0;if(D&1){C=25;break}else{g=d;continue}}else{k[h>>2]=g+4;g=d;continue}}if((C|0)==25){a=Wa()|0;break}D=i[B>>0]|0;if((((D&1)==0?(D&255)>>>1:k[B+4>>2]|0)|0)!=0?(v=k[y>>2]|0,(v-w|0)<160):0){D=k[u>>2]|0;k[y>>2]=v+4;k[v>>2]=D}x=0;a=Ea(14,a|0,k[t>>2]|0,e|0,s|0)|0;D=x;x=0;if(!(D&1)){k[f>>2]=a;Ip(B,w,k[y>>2]|0,e);if(d){a=k[d+12>>2]|0;if((a|0)==(k[d+16>>2]|0)){x=0;a=ta(k[(k[d>>2]|0)+36>>2]|0,d|0)|0;D=x;x=0;if(D&1){C=26;break}}else a=k[a>>2]|0;if((a|0)==-1){k[b>>2]=0;d=1}else d=0}else d=1;do if(g){a=k[g+12>>2]|0;if((a|0)==(k[g+16>>2]|0)){x=0;a=ta(k[(k[g>>2]|0)+36>>2]|0,g|0)|0;D=x;x=0;if(D&1){C=26;break a}}else a=k[a>>2]|0;if((a|0)!=-1)if(d)break;else{C=53;break}else{k[c>>2]=0;C=51;break}}else C=51;while(0);if((C|0)==51?d:0)C=53;if((C|0)==53)k[e>>2]=k[e>>2]|2;D=k[b>>2]|0;wk(A);wk(B);r=z;return D|0}else C=26}else C=26;while(0);if((C|0)==26)a=Wa()|0;wk(A);wk(B);fb(a|0);return 0}function Bs(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;z=r;r=r+320|0;q=z+208|0;g=z+200|0;B=z+24|0;A=z+12|0;t=z+8|0;w=z+40|0;y=z+4|0;u=z;s=Xr(d)|0;$m(B,d,q,g);k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;if(!(i[A>>0]&1))a=10;else a=(k[A>>2]&-2)+-1|0;x=0;Fa(6,A|0,a|0,0);p=x;x=0;a:do if(!(p&1)){n=A+8|0;o=A+1|0;a=(i[A>>0]&1)==0?o:k[n>>2]|0;k[t>>2]=a;k[y>>2]=w;k[u>>2]=0;p=A+4|0;m=k[g>>2]|0;g=k[b>>2]|0;b:while(1){if(g){d=k[g+12>>2]|0;if((d|0)==(k[g+16>>2]|0)){x=0;d=ta(k[(k[g>>2]|0)+36>>2]|0,g|0)|0;l=x;x=0;if(l&1){C=25;break}}else d=k[d>>2]|0;if((d|0)==-1){k[b>>2]=0;d=0;h=1}else{d=g;h=0}}else{d=0;h=1}j=k[c>>2]|0;do if(j){g=k[j+12>>2]|0;if((g|0)==(k[j+16>>2]|0)){x=0;g=ta(k[(k[j>>2]|0)+36>>2]|0,j|0)|0;l=x;x=0;if(l&1){C=25;break b}}else g=k[g>>2]|0;if((g|0)!=-1)if(h)break;else{g=j;break b}else{k[c>>2]=0;C=17;break}}else C=17;while(0);if((C|0)==17){C=0;if(h){g=0;break}else j=0}g=i[A>>0]|0;g=(g&1)==0?(g&255)>>>1:k[p>>2]|0;if((k[t>>2]|0)==(a+g|0)){x=0;Fa(6,A|0,g<<1|0,0);l=x;x=0;if(l&1){C=25;break}if(!(i[A>>0]&1))a=10;else a=(k[A>>2]&-2)+-1|0;x=0;Fa(6,A|0,a|0,0);l=x;x=0;if(l&1){C=25;break}a=(i[A>>0]&1)==0?o:k[n>>2]|0;k[t>>2]=a+g}h=d+12|0;g=k[h>>2]|0;l=d+16|0;if((g|0)==(k[l>>2]|0)){x=0;g=ta(k[(k[d>>2]|0)+36>>2]|0,d|0)|0;D=x;x=0;if(D&1){C=25;break}}else g=k[g>>2]|0;if(Xm(g,s,a,t,u,m,B,w,y,q)|0){g=j;break}g=k[h>>2]|0;if((g|0)==(k[l>>2]|0)){x=0;ta(k[(k[d>>2]|0)+40>>2]|0,d|0)|0;D=x;x=0;if(D&1){C=25;break}else{g=d;continue}}else{k[h>>2]=g+4;g=d;continue}}if((C|0)==25){a=Wa()|0;break}D=i[B>>0]|0;if((((D&1)==0?(D&255)>>>1:k[B+4>>2]|0)|0)!=0?(v=k[y>>2]|0,(v-w|0)<160):0){D=k[u>>2]|0;k[y>>2]=v+4;k[v>>2]=D}x=0;a=Ea(15,a|0,k[t>>2]|0,e|0,s|0)|0;D=x;x=0;if(!(D&1)){k[f>>2]=a;Ip(B,w,k[y>>2]|0,e);if(d){a=k[d+12>>2]|0;if((a|0)==(k[d+16>>2]|0)){x=0;a=ta(k[(k[d>>2]|0)+36>>2]|0,d|0)|0;D=x;x=0;if(D&1){C=26;break}}else a=k[a>>2]|0;if((a|0)==-1){k[b>>2]=0;d=1}else d=0}else d=1;do if(g){a=k[g+12>>2]|0;if((a|0)==(k[g+16>>2]|0)){x=0;a=ta(k[(k[g>>2]|0)+36>>2]|0,g|0)|0;D=x;x=0;if(D&1){C=26;break a}}else a=k[a>>2]|0;if((a|0)!=-1)if(d)break;else{C=53;break}else{k[c>>2]=0;C=51;break}}else C=51;while(0);if((C|0)==51?d:0)C=53;if((C|0)==53)k[e>>2]=k[e>>2]|2;D=k[b>>2]|0;wk(A);wk(B);r=z;return D|0}else C=26}else C=26;while(0);if((C|0)==26)a=Wa()|0;wk(A);wk(B);fb(a|0);return 0}function Cs(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,A=0,B=0,C=0,D=0;z=r;r=r+320|0;q=z+208|0;g=z+200|0;B=z+24|0;A=z+12|0;t=z+8|0;w=z+40|0;y=z+4|0;u=z;s=Xr(d)|0;$m(B,d,q,g);k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;if(!(i[A>>0]&1))a=10;else a=(Line truncated
|
|
||||||
|
|
||||||
// EMSCRIPTEN_END_FUNCS
|
|
||||||
var Ib=[Iu,Eo,Io,Cp,Gp,Lp,Np,ls,ws,Iu,Iu,Iu,Iu,Iu,Iu,Iu];var Jb=[Ju,pg,dg,Tf,Hf,vf,jf,Ye,He,Ah,zh,wh,Ju,Ju,Ju,Ju];var Kb=[Ku,Rp,Xp,Ku];var Lb=[Lu,lg,mg,$f,ag,Pf,Qf,Df,Ef,rf,sf,ef,ff,Ue,Ve,De,Ee,Od,Sd,Pd,Ql,Sl,Rl,Tl,jd,kd,Lg,ld,cd,dd,Hc,Ic,Pc,Qc,Wc,Xc,md,nd,td,ud,Ad,Bd,Hd,Id,be,ce,ie,je,pe,qe,we,xe,Se,Te,rk,xg,Vg,Wg,ah,bh,fh,gh,ih,lh,jh,kh,mh,nh,pl,Hj,Nj,al,Sj,Yj,pk,qk,bl,ql,El,Gl,Fl,Hl,Kl,Ml,Ll,Nl,Yl,_l,Zl,$l,gm,hm,Uk,im,jm,km,mm,yq,qm,rm,vm,wm,Km,Lm,cn,dn,sn,tn,Fn,Gn,co,eo,Bo,Do,Go,Ho,Ko,Lo,Vo,Wo,ep,fp,pp,qp,Ap,Bp,Jp,Kp,Pp,Qp,Vp,Wp,$p,aq,eq,fq,mq,nq,Qq,Rq,ks,hr,Jr,Kr,Lr,Mr,lm,xq,Aq,_q,pr,xr,Fr,Gr,Dg,Pg,wc,Jl,cl,Ke,Kh,ij,jj,Aj,ai,Dp,Fp,zq,ut,Bt,Ct,Dt,Et,Ft,Gt,wk,Kk,uj,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu,Lu];var Mb=[Mu,og,cg,Sf,Gf,uf,hf,Xe,Ge,dl,Ij,Mj,Tj,Xj,sl,Oo,Po,Qo,Ro,To,Uo,Zo,_o,$o,ap,cp,dp,ip,jp,kp,lp,np,op,tp,up,vp,wp,yp,zp,dq,iq,Rr,Tr,Vr,Sr,Ur,Wr,Bg,Cg,Eg,Ul,Tk,Zk,Bc,Dc,Ek,Je,_e,lf,xf,Jf,Vf,fg,rg,Ng,gk,ek,Xk,am,fk,Ck,Ok,Nk,Qs,Rs,Ss,Ts,Us,Vs,gr,Ws,Xs,Ys,Zs,_s,$s,at,bt,ct,dt,et,ft,gt,ht,it,jt,kt,lt,mt,nt,ot,pt,qt,st,Mt,Mu,Mu,Mu,Mu,Mu,Mu,Mu,Mu,Mu,Mu,Mu,Mu,Mu,Mu,Mu,Mu,Mu,Mu,Mu,Mu,Mu,Mu,Mu];var Nb=[Nu,xm,ym,zm,Am,Bm,Cm,Dm,Em,Fm,Gm,Hm,Mm,Nm,Om,Pm,Qm,Rm,Sm,Tm,Um,Vm,Wm,kn,mn,xn,zn,In,Jn,Kn,Mn,On,go,ho,io,ko,mo,Up,_p,bd,Is,Nu,Nu,Nu,Nu,Nu,Nu,Nu,Nu,Nu,Nu,Nu,Nu,Nu,Nu,Nu,Nu,Nu,Nu,Nu,Nu,Nu,Nu,Nu];var Ob=[Ou,hl,il,gd,ll,yg,Xg,ch,hh,Ai,Jj,xl,zl,Al,wl,Oj,Pj,Uj,kl,Zj,_j,cm,Hn,Yr,_r,as,gs,is,cs,es,fo,Zr,$r,bs,hs,js,ds,fs,Mo,No,So,Xo,Yo,bp,gp,hp,mp,rp,sp,xp,lr,mr,or,Nr,Pr,Or,Qr,cr,dr,fr,tr,ur,wr,Br,Cr,Er,Rg,Yk,Gg,Il,Ol,Pu,Qu,Ru,ei,dj,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou,Ou];var Pb=[Su,Ep,Mp,Su];var Qb=[Tu,el,jl,nl,ik,jk,oh,pj,Di,Ci,Bi,Ei,tl,yl,Kj,Cl,Vj,pm,um,bq,gq,Tq,Vq,Yq,Bq,Iq,Lq,Oq,Cc,mj,Fk,di,Ns,Ps,ti,si,ni,Ri,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu,Tu];var Rb=[Uu,Tp,Zp,Uu];var Sb=[Vu,ed,Dh,Ch,Bh,ul,fl,cq,hq,Vu,Vu,Vu,Vu,Vu,Vu,Vu];var Tb=[Wu,jn,pn,wn,Bn,Wu,Wu,Wu];var Ub=[Xu,Hp,Op,Sp,Yp,Xu,Xu,Xu];var Vb=[Yu,ng,bg,Rf,Ff,tf,gf,We,Fe,hd,id,Bl,Lj,Qj,Dl,ml,Wj,$j,ol,Sq,Uq,Wq,Gq,Jq,Mq,uc,wq,Wl,Xl,ci,bi,yk,Lk,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu,Yu];var Wb=[Zu,nm,sm,en,fn,ln,rn,un,vn,yn,Dn,Zq,kr,nr,Pq,br,er,sr,vr,Ar,Dr,ui,qi,Zu,Zu,Zu,Zu,Zu,Zu,Zu,Zu,Zu];var Xb=[_u,Pt,Ot,Nt];var Yb=[$u,rc,Qg,Jm,pq,qq,rq,Nh,Ph,Oh,$u,$u,$u,$u,$u,$u];var Zb=[av,Xq,Dq,Eq,Fq,Nq,vs,Hs,ri,_h,oi,Vt,Ut,Tt,St,Rt,Qt,av,av,av,av,av,av,av,av,av,av,av,av,av,av,av];var _b=[bv,hk,zg,dm,ok,cv,Ak,Fg,lk,fm,Ls,Ms,Os,uk,Ik,bv];var $b=[dv,ev,Hh,fv,Ih,gv,Gh,dv];var ac=[hv,Qn,oo,ir,jr,$q,ar,qr,rr,yr,zr,hv,hv,hv,hv,hv];var bc=[iv,nn,qn,An,Cn,iv,iv,iv];var cc=[jv,Td,Ud,Qd,Rd,fd,Jc,Kc,Rc,Sc,Yc,Zc,od,pd,vd,wd,Cd,Dd,Jd,Kd,de,ee,ke,le,re,se,ye,ze,qh,rh,th,vl,gl,om,tm,nk,xc,yc,zc,Ac,Ec,Fc,Gc,Zd,_d,$d,ae,jv,jv,jv,jv,jv,jv,jv,jv,jv,jv,jv,jv,jv,jv,jv,jv,jv];return{___cxa_can_catch:Eh,_free:uj,_jpegls_decode:Mg,___cxa_is_pointer_type:Fh,_i64Add:Zt,_memmove:bu,_i64Subtract:Xt,_memset:Yt,_malloc:tj,_memcpy:$t,_bitshift64Lshr:_t,_bitshift64Shl:au,__GLOBAL__I_000101:Bj,__GLOBAL__sub_I_jpegls_cpp:vc,__GLOBAL__sub_I_iostream_cpp:Cj,runPostSets:Wt,_emscripten_replace_memory:Hb,stackAlloc:dc,stackSave:ec,stackRestore:fc,establishStackSpace:gc,setThrew:hc,setTempRet0:kc,getTempRet0:lc,dynCall_iiiiiiii:lu,dynCall_viiiii:mu,dynCall_iiiiiid:nu,dynCall_vi:ou,dynCall_vii:pu,dynCall_iiiiiii:qu,dynCall_ii:ru,dynCall_iiiiiiiiiiii:su,dynCall_iiii:tu,dynCall_viiiiiiiiiiiiiii:uu,dynCall_viiiiii:vu,dynCall_viiiiiii:wu,dynCall_viiiiiiiiii:xu,dynCall_iii:yu,dynCall_iiiiii:zu,dynCall_diii:Au,dynCall_i:Bu,dynCall_iiiii:Cu,dynCall_viii:Du,dynCall_v:Eu,dynCall_iiiiiiiii:Fu,dynCall_iiiiid:Gu,dynCall_viiii:Hu}})
|
|
||||||
|
|
||||||
|
|
||||||
// EMSCRIPTEN_END_ASM
|
|
||||||
(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var runPostSets=Module["runPostSets"]=asm["runPostSets"];var ___cxa_can_catch=Module["___cxa_can_catch"]=asm["___cxa_can_catch"];var _free=Module["_free"]=asm["_free"];var _jpegls_decode=Module["_jpegls_decode"]=asm["_jpegls_decode"];var ___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=asm["___cxa_is_pointer_type"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _memmove=Module["_memmove"]=asm["_memmove"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _memset=Module["_memset"]=asm["_memset"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=asm["_emscripten_replace_memory"];var __GLOBAL__sub_I_iostream_cpp=Module["__GLOBAL__sub_I_iostream_cpp"]=asm["__GLOBAL__sub_I_iostream_cpp"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var __GLOBAL__sub_I_jpegls_cpp=Module["__GLOBAL__sub_I_jpegls_cpp"]=asm["__GLOBAL__sub_I_jpegls_cpp"];var __GLOBAL__I_000101=Module["__GLOBAL__I_000101"]=asm["__GLOBAL__I_000101"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_iiiiiid=Module["dynCall_iiiiiid"]=asm["dynCall_iiiiiid"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iiiiiiiiiiii=Module["dynCall_iiiiiiiiiiii"]=asm["dynCall_iiiiiiiiiiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_viiiiiiiiiiiiiii=Module["dynCall_viiiiiiiiiiiiiii"]=asm["dynCall_viiiiiiiiiiiiiii"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_iiiiid=Module["dynCall_iiiiid"]=asm["dynCall_iiiiid"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];Runtime.stackAlloc=asm["stackAlloc"];Runtime.stackSave=asm["stackSave"];Runtime.stackRestore=asm["stackRestore"];Runtime.establishStackSpace=asm["establishStackSpace"];Runtime.setTempRet0=asm["setTempRet0"];Runtime.getTempRet0=asm["getTempRet0"];function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=Module.callMain=function callMain(args){assert(runDependencies==0,"cannot call main when async dependencies remain! (listen on __ATMAIN__)");assert(__ATPRERUN__.length==0,"cannot call main when preRun functions remain to be called");args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var i=0;i<4-1;i++){argv.push(0)}}var argv=[allocate(intArrayFromString(Module["thisProgram"]),"i8",ALLOC_NORMAL)];pad();for(var i=0;i<argc-1;i=i+1){argv.push(allocate(intArrayFromString(args[i]),"i8",ALLOC_NORMAL));pad()}argv.push(0);argv=allocate(argv,"i32",ALLOC_NORMAL);try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{if(e&&typeof e==="object"&&e.stack)Module.printErr("exception thrown: "+[e,e.stack]);throw e}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(preloadStartTime===null)preloadStartTime=Date.now();if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=Module.run=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]){return}if(Module["noExitRuntime"]){}else{ABOLine truncated
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return Module;
|
|
||||||
};
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
var OpenJPEG = function(Module) {
|
|
||||||
Module = Module || {};
|
|
||||||
|
|
||||||
var Module;if(!Module)Module=(typeof OpenJPEG!=="undefined"?OpenJPEG:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);if(!ret&&filename!=nodePath["resolve"](filename)){filename=path.join(__dirname,"..","src",filename);ret=nodeFS["readFileSync"](filename)}if(ret&&!binary)ret=ret.toString();return ret};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available (jsc?)"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.log(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}var Runtime={setTempRet0:(function(value){tempRet0=value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){if(!args.splice)args=Array.prototype.slice.call(args);args.splice(0,0,ptr);return Module["dynCall_"+sig].apply(null,args)}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i<Runtime.functionPointeLine truncated
|
|
||||||
var asm=(function(global,env,buffer) {
|
|
||||||
"use asm";var a=global.Int8Array;var b=global.Int16Array;var c=global.Int32Array;var d=global.Uint8Array;var e=global.Uint16Array;var f=global.Uint32Array;var g=global.Float32Array;var h=global.Float64Array;var i=new a(buffer);var j=new b(buffer);var k=new c(buffer);var l=new d(buffer);var m=new e(buffer);var n=new f(buffer);var o=new g(buffer);var p=new h(buffer);var q=global.byteLength;var r=env.STACKTOP|0;var s=env.STACK_MAX|0;var t=env.tempDoublePtr|0;var u=env.ABORT|0;var v=env.cttz_i8|0;var w=0;var x=0;var y=0;var z=0;var A=global.NaN,B=global.Infinity;var C=0,D=0,E=0,F=0,G=0.0,H=0,I=0,J=0,K=0.0;var L=0;var M=0;var N=0;var O=0;var P=0;var Q=0;var R=0;var S=0;var T=0;var U=0;var V=global.Math.floor;var W=global.Math.abs;var X=global.Math.sqrt;var Y=global.Math.pow;var Z=global.Math.cos;var _=global.Math.sin;var $=global.Math.tan;var aa=global.Math.acos;var ba=global.Math.asin;var ca=global.Math.atan;var da=global.Math.atan2;var ea=global.Math.exp;var fa=global.Math.log;var ga=global.Math.ceil;var ha=global.Math.imul;var ia=global.Math.min;var ja=global.Math.clz32;var ka=env.abort;var la=env.assert;var ma=env.invoke_iiiiiiii;var na=env.invoke_iiii;var oa=env.invoke_di;var pa=env.invoke_vi;var qa=env.invoke_vii;var ra=env.invoke_iiiiiii;var sa=env.invoke_ii;var ta=env.invoke_viii;var ua=env.invoke_iiiiiiiiiiii;var va=env.invoke_iiiii;var wa=env.invoke_iii;var xa=env.invoke_iiiiii;var ya=env.invoke_viiii;var za=env._pthread_cleanup_pop;var Aa=env.___syscall221;var Ba=env._llvm_pow_f64;var Ca=env._abort;var Da=env._pthread_cleanup_push;var Ea=env._ceilf;var Fa=env._emscripten_set_main_loop_timing;var Ga=env._sbrk;var Ha=env._emscripten_memcpy_big;var Ia=env._sysconf;var Ja=env.___setErrNo;var Ka=env._floor;var La=env._pthread_self;var Ma=env._sqrt;var Na=env._floorf;var Oa=env.___syscall54;var Pa=env.___unlock;var Qa=env._emscripten_set_main_loop;var Ra=env.___lock;var Sa=env.___syscall6;var Ta=env.___syscall5;var Ua=env._time;var Va=env.___syscall140;var Wa=env.___syscall145;var Xa=env.___syscall146;var Ya=0.0;function Za(newBuffer){if(q(newBuffer)&16777215||q(newBuffer)<=16777215||q(newBuffer)>2147483648)return false;i=new a(newBuffer);j=new b(newBuffer);k=new c(newBuffer);l=new d(newBuffer);m=new e(newBuffer);n=new f(newBuffer);o=new g(newBuffer);p=new h(newBuffer);buffer=newBuffer;return true}
|
|
||||||
// EMSCRIPTEN_START_FUNCS
|
|
||||||
function pe(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0;l=r;r=r+48|0;e=l+32|0;j=l+28|0;k[e>>2]=c;if((k[a+8>>2]|0)==16)i=(k[a+164>>2]|0)+((k[a+200>>2]|0)*5640|0)|0;else i=k[a+12>>2]|0;f=(k[a+80>>2]|0)+16|0;g=(k[f>>2]|0)>>>0<257?1:2;h=g+1|0;if(h>>>0>c>>>0){cc(d,1,14604,l)|0;d=0;r=l;return d|0}k[e>>2]=c-h;Ab(b,j,g);c=k[j>>2]|0;if(c>>>0>=(k[f>>2]|0)>>>0){cc(d,1,14630,l+8|0)|0;d=0;r=l;return d|0}Ab(b+g|0,(k[i+5584>>2]|0)+(c*1080|0)|0,1);if(!(Pe(a,k[j>>2]|0,b+h|0,e,d)|0)){cc(d,1,14604,l+16|0)|0;d=0;r=l;return d|0}if(!(k[e>>2]|0)){d=1;r=l;return d|0}cc(d,1,14604,l+24|0)|0;d=0;r=l;return d|0}function qe(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=r;r=r+32|0;h=i+8|0;e=i+20|0;g=k[(k[a+80>>2]|0)+16>>2]|0;f=g>>>0<257?1:2;if((f+2|0)!=(c|0)){cc(d,1,14521,i)|0;h=0;r=i;return h|0}if((k[a+8>>2]|0)==16)a=(k[a+164>>2]|0)+((k[a+200>>2]|0)*5640|0)|0;else a=k[a+12>>2]|0;Ab(b,e,f);Ab(b+f|0,i+16|0,1);c=k[e>>2]|0;if(c>>>0<g>>>0){Ab(b+(f+1)|0,(k[a+5584>>2]|0)+(c*1080|0)+808|0,1);h=1;r=i;return h|0}else{k[h>>2]=c;k[h+4>>2]=g;cc(d,1,14547,h)|0;h=0;r=i;return h|0}return 0}function re(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;g=r;r=r+16|0;e=g+12|0;k[e>>2]=c;if(!(Oe(a,0,b,e,d)|0)){cc(d,1,14495,g)|0;f=0;r=g;return f|0}if(k[e>>2]|0){cc(d,1,14495,g+8|0)|0;f=0;r=g;return f|0}if((k[a+8>>2]|0)==16)e=(k[a+164>>2]|0)+((k[a+200>>2]|0)*5640|0)|0;else e=k[a+12>>2]|0;e=k[e+5584>>2]|0;c=a+80|0;if((k[(k[c>>2]|0)+16>>2]|0)>>>0<=1){f=1;r=g;return f|0}d=e+24|0;a=e+804|0;f=e+28|0;b=1;while(1){k[e+1104>>2]=k[d>>2];k[e+1884>>2]=k[a>>2];cj(e+1108|0,f|0,776)|0;b=b+1|0;if(b>>>0>=(k[(k[c>>2]|0)+16>>2]|0)>>>0){e=1;break}else e=e+1080|0}r=g;return e|0}function se(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;n=r;r=r+48|0;m=n+32|0;l=n+24|0;j=n+16|0;f=n+8|0;e=n;i=n+40|0;g=n+36|0;k[i>>2]=c;h=a+80|0;do if((k[(k[h>>2]|0)+16>>2]|0)>>>0<257){if(c){Ab(b,g,1);f=b+1|0;b=c+-1|0;break}cc(d,1,14148,e)|0;m=0;r=n;return m|0}else{if(c>>>0>=2){Ab(b,g,2);f=b+2|0;b=c+-2|0;break}cc(d,1,14148,f)|0;m=0;r=n;return m|0}while(0);k[i>>2]=b;e=k[g>>2]|0;b=k[(k[h>>2]|0)+16>>2]|0;if(e>>>0>=b>>>0){k[j>>2]=e;k[j+4>>2]=b;cc(d,1,14174,j)|0;m=0;r=n;return m|0}if(!(Oe(a,e,f,i,d)|0)){cc(d,1,14148,l)|0;m=0;r=n;return m|0}if(!(k[i>>2]|0)){m=1;r=n;return m|0}cc(d,1,14148,m)|0;m=0;r=n;return m|0}function te(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;t=r;r=r+16|0;f=t+8|0;s=t+12|0;q=k[(k[a+80>>2]|0)+16>>2]|0;p=q>>>0<257?1:2;o=(p<<1)+5|0;e=(c>>>0)/(o>>>0)|0;if((e|0)==0|((c>>>0)%(o>>>0)|0|0)!=0){cc(d,1,14104,t)|0;s=0;r=t;return s|0}if((k[a+8>>2]|0)==16)o=(k[a+164>>2]|0)+((k[a+200>>2]|0)*5640|0)|0;else o=k[a+12>>2]|0;c=o+5636|0;a=i[c>>0]|0;if(!(a&4))n=0;else n=(k[o+420>>2]|0)+1|0;m=n+e|0;if(m>>>0>31){k[f>>2]=m;cc(d,1,14130,f)|0;s=0;r=t;return s|0}i[c>>0]=a|4;if(n>>>0<m>>>0){d=p+1|0;l=o+8|0;f=p+3|0;g=p|4;h=g+p|0;j=h+1|0;a=b;e=n;c=o+424+(n*148|0)|0;while(1){Ab(a,c,1);Ab(a+1|0,c+4|0,p);b=c+8|0;Ab(a+d|0,b,2);u=k[b>>2]|0;n=k[l>>2]|0;k[b>>2]=u>>>0<n>>>0?u:n;Ab(a+f|0,c+12|0,1);b=c+16|0;Ab(a+g|0,b,p);Ab(a+h|0,s,1);k[c+36>>2]=k[s>>2];n=k[b>>2]|0;k[b>>2]=n>>>0<q>>>0?n:q;e=e+1|0;if(e>>>0>=m>>>0)break;else{a=a+j|0;c=c+148|0}}}k[o+420>>2]=m+-1;u=1;r=t;return u|0}function ue(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;M=r;r=r+144|0;K=M+128|0;G=M+120|0;F=M+112|0;E=M+104|0;D=M+96|0;C=M+88|0;A=M+72|0;t=M+64|0;q=M+56|0;p=M+48|0;o=M+40|0;s=M+32|0;h=M+24|0;f=M+16|0;e=M+136|0;w=M+132|0;I=k[a+80>>2]|0;J=a+88|0;if(c>>>0<36){cc(d,1,13459,M)|0;d=0;r=M;return d|0}H=c+-36|0;n=(H>>>0)/3|0;if((H>>>0)%3|0){cc(d,1,13459,M+8|0)|0;d=0;r=M;return d|0}Ab(b,e,2);j[J>>1]=k[e>>2];x=I+8|0;Ab(b+2|0,x,4);B=I+12|0;Ab(b+6|0,B,4);Ab(b+10|0,I,4);m=I+4|0;Ab(b+14|0,m,4);v=a+100|0;Ab(b+18|0,v,4);z=a+104|0;Ab(b+22|0,z,4);u=a+92|0;Ab(b+26|0,u,4);y=a+96|0;Ab(b+30|0,y,4);Ab(b+34|0,e,2);g=b+36|0;c=k[e>>2]|0;if(c>>>0>=16385){k[f>>2]=c;cc(d,1,13487,f)|0;d=0;r=M;return d|0}c=c&65535;H=I+16|0;k[H>>2]=c;if((c|0)!=(n|0)){k[h>>2]=c;k[h+4>>2]=n;cc(d,1,13548,h)|0;d=0;r=M;return d|0}h=k[I>>2]|0;l=k[x>>2]|0;if(l>>>0>h>>>0){c=k[m>>2]|0;b=k[B>>2]|0;if(c>>>0<b>>>0){e=k[v>>2]|0;f=k[z>>2]|0;if(!(ha(f,e)|0)){k[o>>2]=e;k[o+4>>2]=f;cc(d,1,13724,o)|0;d=0;r=M;return d|0}s=hj(b|0,0,l|0,0)|0;if(!((s|0)==(ha(b,l)|0)&(L|0)==0)){k[p>>2]=l;k[p+4>>2]=b;cc(d,1,13785,p)|0;d=0;r=M;return d|0}l=k[u>>2]|0;o=aj(l|0,0,e|0,0)|0;p=L;m=k[y>>2]|0;s=aj(m|0,0,f|0,0)|0;if(l>>>0<=h>>>0?m>>>0<=c>>>0&(o|0-p)>>>0>h>>>0&(s|0-L)>>>0>c>>>0:0){b=_c(n,52)|0;n=I+24|0;k[n>>2]=b;if(!b){k[H>>2]=0;cc(d,1,13871,t)|0;d=0;r=M;return d|0}a:do if(k[H>>2]|0){h=a+168|0;c=0;f=b;while(1){Ab(g,w,1);k[f+24>>2]=(k[w>>2]&127)+1;k[f+32>>2]=(k[w>>2]|0)>>>7;Ab(g+1|0,w,1);k[f>>2]=k[w>>2];Ab(g+2|0,w,1);e=k[w>>2]|0;k[f+4>>2]=e;b=k[f>>2]|0;if((e+-1|0)>>>0>254|(b+-1|0)>>>0>254)break;k[f+36>>2]=0;k[f+40>>2]=k[h>>2];c=c+1|0;if(c>>>0>=(k[H>>2]|0)>>>0)break a;else{g=g+3|0;f=f+52|0}}k[A>>2]=c;k[A+4>>2]=b;k[A+8>Line truncated
|
|
||||||
function lb(a){a=a|0;var b=0;b=r;r=r+a|0;r=r+15&-16;return b|0}function mb(){return r|0}function nb(a){a=a|0;r=a}function ob(a,b){a=a|0;b=b|0;r=a;s=b}function pb(a,b){a=a|0;b=b|0;if(!w){w=a;x=b}}function qb(a){a=a|0;i[t>>0]=i[a>>0];i[t+1>>0]=i[a+1>>0];i[t+2>>0]=i[a+2>>0];i[t+3>>0]=i[a+3>>0]}function rb(a){a=a|0;i[t>>0]=i[a>>0];i[t+1>>0]=i[a+1>>0];i[t+2>>0]=i[a+2>>0];i[t+3>>0]=i[a+3>>0];i[t+4>>0]=i[a+4>>0];i[t+5>>0]=i[a+5>>0];i[t+6>>0]=i[a+6>>0];i[t+7>>0]=i[a+7>>0]}function sb(a){a=a|0;L=a}function tb(){return L|0}function ub(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;p=r;r=r+8288|0;l=p+8|0;j=p;i=p+28|0;n=p+24|0;h=p+12|0;k[n>>2]=0;if((k[a>>2]|0)==1375686655)o=qc(0)|0;else o=qc(2)|0;lc(o,1,0)|0;mc(o,2,0)|0;nc(o,3,0)|0;rc(i);k[h>>2]=a;k[h+4>>2]=a;k[h+8>>2]=b;m=oc(h,1)|0;if(!(sc(o,i)|0)){wi(4476)|0;Pb(m);Jc(o);f=1;r=p;return f|0}if(!(tc(m,o,n)|0)){wi(4528)|0;Pb(m);Jc(o);hc(k[n>>2]|0);f=1;r=p;return f|0}if(!(yc(o,m,k[n>>2]|0,k[i+8228>>2]|0)|0)){wi(4578)|0;Jc(o);Pb(m);hc(k[n>>2]|0);f=1;r=p;return f|0}k[j>>2]=k[(k[(k[n>>2]|0)+24>>2]|0)+28>>2];vi(4625,j)|0;k[l>>2]=k[(k[(k[n>>2]|0)+24>>2]|0)+32>>2];vi(4634,l)|0;h=k[n>>2]|0;k[e>>2]=k[h+8>>2];k[f>>2]=k[h+12>>2];a=k[h+16>>2]|0;k[g>>2]=a;a=ha(ha(a<<2,k[e>>2]|0)|0,k[f>>2]|0)|0;k[d>>2]=a;j=Pi(a)|0;k[c>>2]=j;switch(k[g>>2]|0){case 1:{cj(j|0,k[(k[h+24>>2]|0)+44>>2]|0,a|0)|0;break}case 3:{if((ha(k[f>>2]|0,k[e>>2]|0)|0)>0){b=k[h+24>>2]|0;h=k[b+44>>2]|0;a=k[b+96>>2]|0;b=k[b+148>>2]|0;i=0;do{g=i*3|0;k[j+(g<<2)>>2]=k[h+(i<<2)>>2];k[j+(g+1<<2)>>2]=k[a+(i<<2)>>2];k[j+(g+2<<2)>>2]=k[b+(i<<2)>>2];i=i+1|0}while((i|0)<(ha(k[f>>2]|0,k[e>>2]|0)|0))}break}default:{}}Pb(m);Jc(o);hc(k[n>>2]|0);f=0;r=p;return f|0}function vb(){return pc()|0}function wb(a,b){a=a|0;b=b|0;return}function xb(a,b){a=a|0;b=b|0;return}function yb(a,b){a=a|0;b=b|0;var c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;vi(4644,c)|0;r=b;return}function zb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;f=r;r=r+16|0;e=f;k[e>>2]=b;if(!c){r=f;return}b=a;d=0;a=e+(c+-1)|0;while(1){i[b>>0]=i[a>>0]|0;d=d+1|0;if((d|0)==(c|0))break;else{b=b+1|0;a=a+-1|0}}r=f;return}function Ab(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;k[b>>2]=0;if(!c)return;d=0;b=b+(c+-1)|0;while(1){i[b>>0]=i[a>>0]|0;d=d+1|0;if((d|0)==(c|0))break;else{a=a+1|0;b=b+-1|0}}return}function Bb(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+16|0;f=c;p[f>>3]=b;f=f+8|0;p[t>>3]=b;d=k[t>>2]|0;e=k[t+4>>2]|0;g=bj(d|0,e|0,56)|0;i[a>>0]=g;g=bj(d|0,e|0,48)|0;i[a+1>>0]=g;g=bj(d|0,e|0,40)|0;i[a+2>>0]=g;i[a+3>>0]=e;i[a+4>>0]=i[f+-5>>0]|0;i[a+5>>0]=i[f+-6>>0]|0;e=bj(d|0,e|0,8)|0;i[a+6>>0]=e;i[a+7>>0]=d;r=c;return}function Cb(a,b){a=a|0;b=b|0;var c=0;c=b+8|0;i[c+-1>>0]=i[a>>0]|0;i[c+-2>>0]=i[a+1>>0]|0;i[c+-3>>0]=i[a+2>>0]|0;i[c+-4>>0]=i[a+3>>0]|0;i[c+-5>>0]=i[a+4>>0]|0;i[c+-6>>0]=i[a+5>>0]|0;i[c+-7>>0]=i[a+6>>0]|0;i[b>>0]=i[a+7>>0]|0;return}function Db(a,b){a=a|0;b=+b;var c=0;c=(o[t>>2]=b,k[t>>2]|0);i[a>>0]=c>>>24;i[a+1>>0]=c>>>16;i[a+2>>0]=c>>>8;i[a+3>>0]=c;return}function Eb(a,b){a=a|0;b=b|0;var c=0;c=b+4|0;i[c+-1>>0]=i[a>>0]|0;i[c+-2>>0]=i[a+1>>0]|0;i[c+-3>>0]=i[a+2>>0]|0;i[b>>0]=i[a+3>>0]|0;return}function Fb(a,b){a=a|0;b=b|0;var c=0,d=0;d=_c(1,72)|0;if(!d){b=0;return b|0}k[d+64>>2]=a;a=Zc(a)|0;k[d+32>>2]=a;if(!a){cd(d);b=0;return b|0}k[d+36>>2]=a;a=d+68|0;c=k[a>>2]|0;if(!b){k[a>>2]=c|1;k[d+40>>2]=31;k[d+44>>2]=32}else{k[a>>2]=c|2;k[d+40>>2]=29;k[d+44>>2]=30}k[d+16>>2]=4;k[d+20>>2]=5;k[d+24>>2]=6;k[d+28>>2]=7;b=d;return b|0}function Gb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;m=r;r=r+16|0;l=m;e=a+48|0;f=k[e>>2]|0;if(f>>>0>=b>>>0){l=a+36|0;k[l>>2]=(k[l>>2]|0)+b;k[e>>2]=f-b;l=a+56|0;a=l;a=aj(k[a>>2]|0,k[a+4>>2]|0,b|0,c|0)|0;k[l>>2]=a;k[l+4>>2]=L;l=c;a=b;L=l;r=m;return a|0}j=a+68|0;if(k[j>>2]&4){l=a+36|0;k[l>>2]=(k[l>>2]|0)+f;k[e>>2]=0;a=a+56|0;l=a;l=aj(k[l>>2]|0,k[l+4>>2]|0,f|0,0)|0;k[a>>2]=l;k[a+4>>2]=L;a=(f|0)!=0;l=a?0:-1;a=a?f:-1;L=l;r=m;return a|0}if(!f){f=0;e=0}else{k[a+36>>2]=k[a+32>>2];b=Yi(b|0,c|0,f|0,0)|0;k[e>>2]=0;e=0;c=L}a:do if((c|0)>0|(c|0)==0&b>>>0>0){i=a+24|0;while(1){g=$a[k[i>>2]&63](b,c,k[a>>2]|0)|0;h=L;if((g|0)==-1&(h|0)==-1)break;b=Yi(b|0,c|0,g|0,h|0)|0;c=L;f=aj(g|0,h|0,f|0,e|0)|0;e=L;if(!((c|0)>0|(c|0)==0&b>>>0>0))break a}cc(d,4,4655,l)|0;k[j>>2]=k[j>>2]|4;a=a+56|0;l=a;l=aj(k[l>>2]|0,k[l+4>>2]|0,f|0,e|0)|0;k[a>>2]=l;k[a+4>>2]=L;a=(f|0)!=0|(e|0)!=0;l=a?e:-1;a=a?f:-1;L=l;r=m;return a|0}while(0);l=a+56|0;a=l;a=aj(k[a>>2]|0,k[a+4>>2]|0,f|0,e|0)|0;k[l>>2]=a;k[l+4>>2]=L;l=e;a=f;L=l;r=m;return a|0}function Hb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;k[a+36>>2]=k[a+32>>2];k[a+48>>2]=0;f=($a[k[a+28>>2]&63](b,c,k[a>>2]|0)|0)==0;d=a+68|0;e=k[d>>2]|0;if(f){k[d>>2]=e|4;f=0;return f|0}else{k[d>>2]=e&-5;f=a+56|0;k[f>>2]=b;k[f+4>>2]=c;f=1;return f|0}return 0}function Ib(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;q=r;r=r+16|0;p=q+8|0;l=q;o=a+68|0;if(k[o>>2]&8){p=-1;a=-1;L=p;r=q;return a|0}i=a+32|0;e=k[i>>2]|0;n=a+36|0;k[n>>2]=e;j=a+48|0;f=k[j>>2]|0;do if(f){h=a+20|0;while(1){g=$a[k[Line truncated
|
|
||||||
function vg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;u=r;r=r+272|0;m=u;s=u+136|0;t=u+8|0;if(!a){t=0;r=u;return t|0}l=a+4|0;if((k[a>>2]|0)==(b|0)?(k[l>>2]|0)==(c|0):0)e=a+8|0;else{k[a>>2]=b;k[l>>2]=c;k[s>>2]=b;k[t>>2]=c;e=a+8|0;k[e>>2]=0;f=0;h=c;i=b;j=0;while(1){q=ha(h,i)|0;i=(i+1|0)/2|0;g=j+1|0;k[s+(g<<2)>>2]=i;h=(h+1|0)/2|0;k[t+(g<<2)>>2]=h;f=f+q|0;if(q>>>0<=1)break;else j=g}k[e>>2]=f;if(!f){e=a+12|0;f=k[e>>2]|0;if(f){cd(f);k[e>>2]=0}cd(a);t=0;r=u;return t|0}g=f<<4;h=a+16|0;i=a+12|0;do if(g>>>0>(k[h>>2]|0)>>>0){f=bd(k[i>>2]|0,g)|0;if(f){k[i>>2]=f;c=k[h>>2]|0;_i(f+c|0,0,g-c|0)|0;k[h>>2]=g;c=k[l>>2]|0;b=k[a>>2]|0;break}cc(d,1,20185,m)|0;e=k[i>>2]|0;if(e){cd(e);k[i>>2]=0}cd(a);t=0;r=u;return t|0}while(0);f=k[i>>2]|0;b=f+((ha(c,b)|0)<<4)|0;if(j){q=0;c=b;do{o=k[t+(q<<2)>>2]|0;a:do if((o|0)>0){p=k[s+(q<<2)>>2]|0;if((p|0)<=0){g=o+-1|0;h=0;while(1){n=(h&1|0)!=0|(h|0)==(g|0);i=n?c:b+(p<<4)|0;c=n?c:b;h=h+1|0;if((h|0)>=(o|0)){b=i;break a}else b=i}}n=((p+2+((p|0)<2?~p:-3)|0)>>>1)+1|0;d=o+-1|0;m=0;while(1){l=p;i=c;while(1){k[f>>2]=i;g=f+16|0;h=l;l=l+-2|0;if((l|0)>-1){k[g>>2]=i;f=f+32|0}else f=g;if((h|0)<=2)break;else i=i+16|0}c=c+(n<<4)|0;l=(m&1|0)!=0|(m|0)==(d|0);g=l?c:b+(p<<4)|0;c=l?c:b;m=m+1|0;if((m|0)>=(o|0)){b=g;break}else b=g}}while(0);q=q+1|0}while((q|0)!=(j|0))}k[f>>2]=0}e=k[e>>2]|0;if(!e){t=a;r=u;return t|0}f=0;b=k[a+12>>2]|0;while(1){k[b+4>>2]=999;k[b+8>>2]=0;k[b+12>>2]=0;f=f+1|0;if((f|0)==(e|0))break;else b=b+16|0}r=u;return a|0}function wg(a){a=a|0;var b=0,c=0;if(!a)return;b=a+12|0;c=k[b>>2]|0;if(c){cd(c);k[b>>2]=0}cd(a);return}function xg(a,b,c){a=a|0;b=b|0;c=c|0;b=(k[a+12>>2]|0)+(b<<4)|0;if(!b)return;while(1){a=b+4|0;if((k[a>>2]|0)<=(c|0)){b=4;break}k[a>>2]=c;b=k[b>>2]|0;if(!b){b=4;break}}if((b|0)==4)return}function yg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=r;r=r+128|0;h=i;c=(k[b+12>>2]|0)+(c<<4)|0;if(!(k[c>>2]|0)){e=0;f=h}else{e=c;b=h;while(1){f=b+4|0;k[b>>2]=c;c=k[e>>2]|0;if(!(k[c>>2]|0)){e=0;break}else{e=c;b=f}}}while(1){g=c+8|0;b=k[g>>2]|0;if((e|0)>(b|0)){k[g>>2]=e;b=e}a:do if((b|0)<(d|0)){e=c+4|0;while(1){if((b|0)>=(k[e>>2]|0))break;Lg(a,0,1);b=b+1|0;if((b|0)>=(d|0)){c=b;break a}}c=c+12|0;if(!(k[c>>2]|0)){Lg(a,1,1);k[c>>2]=1;c=b}else c=b}else c=b;while(0);k[g>>2]=c;if((f|0)==(h|0))break;g=f+-4|0;e=c;c=k[g>>2]|0;f=g}r=i;return}function zg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=r;r=r+128|0;h=i;c=(k[b+12>>2]|0)+(c<<4)|0;if(!(k[c>>2]|0)){b=0;f=h}else{e=c;b=h;while(1){f=b+4|0;k[b>>2]=c;c=k[e>>2]|0;if(!(k[c>>2]|0)){b=0;break}else{e=c;b=f}}}while(1){g=c+8|0;e=k[g>>2]|0;if((b|0)>(e|0))k[g>>2]=b;else b=e;c=c+4|0;a:do if((b|0)<(d|0)){while(1){if((b|0)>=(k[c>>2]|0))break a;if(Mg(a,1)|0)break;b=b+1|0;if((b|0)>=(d|0))break a}k[c>>2]=b}while(0);k[g>>2]=b;if((f|0)==(h|0))break;g=f+-4|0;c=k[g>>2]|0;f=g}r=i;return (k[c>>2]|0)<(d|0)|0}function Ag(){var a=0,b=0;a=_c(1,12)|0;if(!a){a=0;return a|0}k[a+4>>2]=10;b=_c(10,4)|0;k[a+8>>2]=b;if(b){b=a;return b|0}cd(a);b=0;return b|0}function Bg(a){a=a|0;var b=0;if(!a)return;b=k[a+8>>2]|0;if(b)cd(b);cd(a);return}function Cg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;h=r;r=r+16|0;g=h;f=a+4|0;e=k[f>>2]|0;d=k[a>>2]|0;do if((e|0)==(d|0)){e=e+10|0;k[f>>2]=e;d=a+8|0;e=bd(k[d>>2]|0,e<<2)|0;if(e){k[d>>2]=e;d=k[a>>2]|0;break}cd(k[d>>2]|0);k[f>>2]=0;k[a>>2]=0;cc(c,1,20233,g)|0;a=0;r=h;return a|0}else e=k[a+8>>2]|0;while(0);k[e+(d<<2)>>2]=b;k[a>>2]=d+1;a=1;r=h;return a|0}function Dg(a){a=a|0;return k[a>>2]|0}function Eg(a){a=a|0;return k[a+8>>2]|0}function Fg(a){a=a|0;k[a>>2]=0;return}function Gg(){return Zc(20)|0}function Hg(a){a=a|0;if(!a)return;cd(a);return}function Ig(a){a=a|0;return (k[a+8>>2]|0)-(k[a>>2]|0)|0}function Jg(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=b;k[a+4>>2]=b+c;k[a+8>>2]=b;k[a+12>>2]=0;k[a+16>>2]=8;return}function Kg(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=b;k[a+4>>2]=b+c;k[a+8>>2]=b;k[a+12>>2]=0;k[a+16>>2]=0;return}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;if(!c)return;j=a+16|0;l=a+12|0;m=a+8|0;f=a+4|0;a=k[j>>2]|0;h=c+-1|0;do{g=b>>>h&1;if(!a){e=k[l>>2]|0;a=e<<8&65280;k[l>>2]=a;a=(a|0)==65280?7:8;k[j>>2]=a;d=k[m>>2]|0;if(d>>>0<(k[f>>2]|0)>>>0){k[m>>2]=d+1;i[d>>0]=e;a=k[j>>2]|0}}a=a+-1|0;k[j>>2]=a;k[l>>2]=g<<a|k[l>>2];h=h+-1|0}while(h>>>0<c>>>0);return}function Mg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!b){b=0;return b|0}h=a+16|0;i=a+12|0;j=a+8|0;f=a+4|0;c=k[h>>2]|0;d=k[i>>2]|0;g=b+-1|0;a=0;do{if(!c){e=d<<8&65280;k[i>>2]=e;c=(e|0)==65280?7:8;k[h>>2]=c;d=k[j>>2]|0;if(d>>>0<(k[f>>2]|0)>>>0){k[j>>2]=d+1;d=l[d>>0]|0|e;k[i>>2]=d}else d=e}c=c+-1|0;k[h>>2]=c;a=((d>>>c&1)<<g)+a|0;g=g+-1|0}while(g>>>0<b>>>0);return a|0}function Ng(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;d=a+12|0;b=k[d>>2]|0;g=b<<8&65280;k[d>>2]=g;e=a+16|0;k[e>>2]=(g|0)==65280?7:8;g=a+8|0;c=k[g>>2]|0;f=a+4|0;if(c>>>0>=(k[f>>2]|0)>>>0){g=0;return g|0}k[g>>2]=c+1;i[c>>0]=b;if((k[e>>2]|0)!=7){g=1;return g|0}b=k[d>>2]|0;a=b<<8&65280;k[d>>2]=a;k[e>>2]=(a|0)==65280?7:8;a=k[g>>2]|0;if(a>>Line truncated
|
|
||||||
function Ki(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,m=0,n=0.0,o=0,q=0,s=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;ga=r;r=r+624|0;ba=ga+24|0;da=ga+16|0;ca=ga+588|0;Y=ga+576|0;aa=ga;V=ga+536|0;fa=ga+8|0;ea=ga+528|0;M=(a|0)!=0;N=V+40|0;U=N;V=V+39|0;W=fa+4|0;X=Y+12|0;Y=Y+11|0;Z=ca;_=X;$=_-Z|0;O=-2-Z|0;P=_+2|0;Q=ba+288|0;R=ca+9|0;S=R;T=ca+8|0;f=0;w=b;g=0;b=0;a:while(1){do if((f|0)>-1)if((g|0)>(2147483647-f|0)){f=Lh()|0;k[f>>2]=75;f=-1;break}else{f=g+f|0;break}while(0);g=i[w>>0]|0;if(!(g<<24>>24)){K=245;break}else h=w;b:while(1){switch(g<<24>>24){case 37:{g=h;K=9;break b}case 0:{g=h;break b}default:{}}J=h+1|0;g=i[J>>0]|0;h=J}c:do if((K|0)==9)while(1){K=0;if((i[g+1>>0]|0)!=37)break c;h=h+1|0;g=g+2|0;if((i[g>>0]|0)==37)K=9;else break}while(0);y=h-w|0;if(M?(k[a>>2]&32|0)==0:0)ti(w,y,a)|0;if((h|0)!=(w|0)){w=g;g=y;continue}o=g+1|0;h=i[o>>0]|0;m=(h<<24>>24)+-48|0;if(m>>>0<10){J=(i[g+2>>0]|0)==36;o=J?g+3|0:o;h=i[o>>0]|0;u=J?m:-1;b=J?1:b}else u=-1;g=h<<24>>24;d:do if((g&-32|0)==32){m=0;while(1){if(!(1<<g+-32&75913)){q=m;g=o;break d}m=1<<(h<<24>>24)+-32|m;o=o+1|0;h=i[o>>0]|0;g=h<<24>>24;if((g&-32|0)!=32){q=m;g=o;break}}}else{q=0;g=o}while(0);do if(h<<24>>24==42){m=g+1|0;h=(i[m>>0]|0)+-48|0;if(h>>>0<10?(i[g+2>>0]|0)==36:0){k[e+(h<<2)>>2]=10;b=1;g=g+3|0;h=k[d+((i[m>>0]|0)+-48<<3)>>2]|0}else{if(b){f=-1;break a}if(!M){x=q;g=m;b=0;J=0;break}b=(k[c>>2]|0)+(4-1)&~(4-1);h=k[b>>2]|0;k[c>>2]=b+4;b=0;g=m}if((h|0)<0){x=q|8192;J=0-h|0}else{x=q;J=h}}else{m=(h<<24>>24)+-48|0;if(m>>>0<10){h=0;do{h=(h*10|0)+m|0;g=g+1|0;m=(i[g>>0]|0)+-48|0}while(m>>>0<10);if((h|0)<0){f=-1;break a}else{x=q;J=h}}else{x=q;J=0}}while(0);e:do if((i[g>>0]|0)==46){m=g+1|0;h=i[m>>0]|0;if(h<<24>>24!=42){o=(h<<24>>24)+-48|0;if(o>>>0<10){g=m;h=0}else{g=m;o=0;break}while(1){h=(h*10|0)+o|0;g=g+1|0;o=(i[g>>0]|0)+-48|0;if(o>>>0>=10){o=h;break e}}}m=g+2|0;h=(i[m>>0]|0)+-48|0;if(h>>>0<10?(i[g+3>>0]|0)==36:0){k[e+(h<<2)>>2]=10;g=g+4|0;o=k[d+((i[m>>0]|0)+-48<<3)>>2]|0;break}if(b){f=-1;break a}if(M){g=(k[c>>2]|0)+(4-1)&~(4-1);o=k[g>>2]|0;k[c>>2]=g+4;g=m}else{g=m;o=0}}else o=-1;while(0);s=0;while(1){h=(i[g>>0]|0)+-65|0;if(h>>>0>57){f=-1;break a}m=g+1|0;h=i[25145+(s*58|0)+h>>0]|0;q=h&255;if((q+-1|0)>>>0<8){g=m;s=q}else{I=m;break}}if(!(h<<24>>24)){f=-1;break}m=(u|0)>-1;do if(h<<24>>24==19)if(m){f=-1;break a}else K=52;else{if(m){k[e+(u<<2)>>2]=q;G=d+(u<<3)|0;H=k[G+4>>2]|0;K=aa;k[K>>2]=k[G>>2];k[K+4>>2]=H;K=52;break}if(!M){f=0;break a}Mi(aa,q,c)}while(0);if((K|0)==52?(K=0,!M):0){w=I;g=y;continue}u=i[g>>0]|0;u=(s|0)!=0&(u&15|0)==3?u&-33:u;m=x&-65537;H=(x&8192|0)==0?x:m;f:do switch(u|0){case 110:switch(s|0){case 0:{k[k[aa>>2]>>2]=f;w=I;g=y;continue a}case 1:{k[k[aa>>2]>>2]=f;w=I;g=y;continue a}case 2:{w=k[aa>>2]|0;k[w>>2]=f;k[w+4>>2]=((f|0)<0)<<31>>31;w=I;g=y;continue a}case 3:{j[k[aa>>2]>>1]=f;w=I;g=y;continue a}case 4:{i[k[aa>>2]>>0]=f;w=I;g=y;continue a}case 6:{k[k[aa>>2]>>2]=f;w=I;g=y;continue a}case 7:{w=k[aa>>2]|0;k[w>>2]=f;k[w+4>>2]=((f|0)<0)<<31>>31;w=I;g=y;continue a}default:{w=I;g=y;continue a}}case 112:{s=H|8;o=o>>>0>8?o:8;u=120;K=64;break}case 88:case 120:{s=H;K=64;break}case 111:{m=aa;h=k[m>>2]|0;m=k[m+4>>2]|0;if((h|0)==0&(m|0)==0)g=N;else{g=N;do{g=g+-1|0;i[g>>0]=h&7|48;h=bj(h|0,m|0,3)|0;m=L}while(!((h|0)==0&(m|0)==0))}if(!(H&8)){h=H;s=0;q=25625;K=77}else{s=U-g+1|0;h=H;o=(o|0)<(s|0)?s:o;s=0;q=25625;K=77}break}case 105:case 100:{h=aa;g=k[h>>2]|0;h=k[h+4>>2]|0;if((h|0)<0){g=Yi(0,0,g|0,h|0)|0;h=L;m=aa;k[m>>2]=g;k[m+4>>2]=h;m=1;q=25625;K=76;break f}if(!(H&2048)){q=H&1;m=q;q=(q|0)==0?25625:25627;K=76}else{m=1;q=25626;K=76}break}case 117:{h=aa;g=k[h>>2]|0;h=k[h+4>>2]|0;m=0;q=25625;K=76;break}case 99:{i[V>>0]=k[aa>>2];w=V;h=1;s=0;u=25625;g=N;break}case 109:{g=Lh()|0;g=Mh(k[g>>2]|0)|0;K=82;break}case 115:{g=k[aa>>2]|0;g=(g|0)!=0?g:25635;K=82;break}case 67:{k[fa>>2]=k[aa>>2];k[W>>2]=0;k[aa>>2]=fa;o=-1;K=86;break}case 83:{if(!o){Oi(a,32,J,0,H);g=0;K=98}else K=86;break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{n=+p[aa>>3];k[da>>2]=0;p[t>>3]=n;if((k[t+4>>2]|0)>=0)if(!(H&2048)){G=H&1;F=G;G=(G|0)==0?25643:25648}else{F=1;G=25645}else{n=-n;F=1;G=25642}p[t>>3]=n;E=k[t+4>>2]&2146435072;do if(E>>>0<2146435072|(E|0)==2146435072&0<0){v=+Ph(n,da)*2.0;h=v!=0.0;if(h)k[da>>2]=(k[da>>2]|0)+-1;C=u|32;if((C|0)==97){w=u&32;y=(w|0)==0?G:G+9|0;x=F|2;g=12-o|0;do if(!(o>>>0>11|(g|0)==0)){n=8.0;do{g=g+-1|0;n=n*16.0}while((g|0)!=0);if((i[y>>0]|0)==45){n=-(n+(-v-n));break}else{n=v+n-n;break}}else n=v;while(0);h=k[da>>2]|0;g=(h|0)<0?0-h|0:h;g=Ni(g,((g|0)<0)<<31>>31,X)|0;if((g|0)==(X|0)){i[Y>>0]=48;g=Y}i[g+-1>>0]=(h>>31&2)+43;s=g+-2|0;i[s>>0]=u+15;q=(o|0)<1;m=(H&8|0)==0;h=ca;while(1){G=~~n;g=h+1|0;i[h>>0]=l[25609+G>>0]|w;n=(n-+(G|0))*16.0;do if((g-Z|0)==1){if(m&(q&n==0.0))break;i[g>>0]=46;g=h+2|0}while(0);if(!(n!=0.0))break;else h=g}o=(o|0)!=0&(O+g|0)<(o|0)?P+o-s|0:$-s+g|0;m=o+x|0;Oi(a,32,J,m,H);if(!(k[a>>2]&32))ti(y,x,a)|0;Oi(a,48,J,m,HLine truncated
|
|
||||||
|
|
||||||
// EMSCRIPTEN_END_FUNCS
|
|
||||||
var _a=[yj,od,ef,yj];var $a=[zj,Li,di,bi,Kb,Lb,Mb,Nb,Rc,Sc,Uc,jd,xd,Ye,lf,yd,zd,Xe,Ze,Vc,Wc,Xc,Yc,Dd,Ed,Fd,Gd,Id,Jd,Ld,Md,Nd,Od,Pd,Qd,Rd,Sd,Td,Ud,Vd,Wd,Xd,Yd,Zd,_d,$d,ae,be,ce,de,ee,fe,pf,qf,rf,sf,tf,uf,vf,wf,ai,ci,zj,zj];var ab=[Aj,ge,he,Aj];var bb=[Bj,gd,df,qg,rg,Hi,Ii,Bj];var cb=[Cj,wb,xb,yb,ec,ed,Ve,Cj];var db=[Dj,nd,cf,Bd,bf,Dj,Dj,Dj];var eb=[Ej,$h,td,ud,kf,jf,gi,Ug,Rg,Ej,Ej,Ej,Ej,Ej,Ej,Ej];var fb=[Fj,Qe,Re,Se,Te,Ke,Le,Me,Ne,Ge,He,Ie,Je,qd,hf,Fj];var gb=[Gj,md,af,Gj];var hb=[Hj,ne,oe,pe,qe,re,se,te,ue,ve,we,xe,ye,ze,Ae,Be,Ce,De,Ee,Fe,Hf,If,Jf,Bf,Cf,Df,Ef,Ff,Gf,Gb,Hb,Ib,Jb,vd,kd,Ue,$e,Ad,hd,_e,We,Hj,Hj,Hj,Hj,Hj,Hj,Hj,Hj,Hj,Hj,Hj,Hj,Hj,Hj,Hj,Hj,Hj,Hj,Hj,Hj,Hj,Hj,Hj];var ib=[Ij,Tc,xf,yf,zf,Af,Ij,Ij];var jb=[Jj,wd,ff,Jj];var kb=[Kj,Yg,$g,Kj];return{_opj_stream_destroy:Pb,_opj_stream_set_read_function:Qb,_opj_read_tile_header:wc,_opj_set_warning_handler:mc,_opj_destroy_cstr_info:Mc,_opj_image_create:gc,_opj_set_error_handler:nc,_opj_stream_set_user_data:Ub,_opj_end_decompress:Gc,_bitshift64Lshr:bj,_opj_stream_set_seek_function:Rb,_opj_decode:uc,_opj_set_decoded_resolution_factor:zc,_i64Add:aj,_opj_stream_create_default_file_stream:Pc,_opj_encode:Ec,_bitshift64Ashr:Zi,_opj_get_decoded_tile:yc,_memset:_i,_opj_version:pc,_memcpy:cj,_opj_destroy_cstr_index:Oc,_opj_stream_set_user_data_length:Vb,_opj_get_cstr_index:Nc,_opj_image_destroy:hc,_opj_stream_create_file_stream:Qc,_opj_setup_encoder:Cc,_opj_stream_default_create:Ob,_bitshift64Shl:$i,_opj_stream_create:Fb,_jp2_version:vb,_i64Subtract:Yi,_opj_stream_set_skip_function:Tb,_opj_set_default_decoder_parameters:rc,_opj_read_header:tc,_opj_get_cstr_info:Lc,_opj_set_default_encoder_parameters:Bc,_opj_set_decode_area:vc,_opj_stream_set_write_function:Sb,_opj_dump_codec:Kc,_opj_create_decompress:qc,_opj_decode_tile_data:xc,_free:Qi,_opj_image_tile_create:kc,_opj_set_MCT:Hc,_opj_set_info_handler:lc,_opj_start_compress:Dc,_opj_write_tile:Ic,_opj_setup_decoder:sc,_malloc:Pi,_opj_end_compress:Fc,_opj_destroy_codec:Jc,_jp2_decode:ub,_opj_stream_create_buffer_stream:oc,_opj_create_compress:Ac,runPostSets:Xi,_emscripten_replace_memory:Za,stackAlloc:lb,stackSave:mb,stackRestore:nb,establishStackSpace:ob,setThrew:pb,setTempRet0:sb,getTempRet0:tb,dynCall_iiiiiiii:lj,dynCall_iiii:mj,dynCall_di:nj,dynCall_vi:oj,dynCall_vii:pj,dynCall_iiiiiii:qj,dynCall_ii:rj,dynCall_viii:sj,dynCall_iiiiiiiiiiii:tj,dynCall_iiiii:uj,dynCall_iii:vj,dynCall_iiiiii:wj,dynCall_viiii:xj}})
|
|
||||||
|
|
||||||
|
|
||||||
// EMSCRIPTEN_END_ASM
|
|
||||||
(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var _opj_stream_destroy=Module["_opj_stream_destroy"]=asm["_opj_stream_destroy"];var _opj_stream_set_read_function=Module["_opj_stream_set_read_function"]=asm["_opj_stream_set_read_function"];var _opj_read_tile_header=Module["_opj_read_tile_header"]=asm["_opj_read_tile_header"];var _opj_set_warning_handler=Module["_opj_set_warning_handler"]=asm["_opj_set_warning_handler"];var _opj_destroy_cstr_info=Module["_opj_destroy_cstr_info"]=asm["_opj_destroy_cstr_info"];var _opj_image_create=Module["_opj_image_create"]=asm["_opj_image_create"];var _opj_set_error_handler=Module["_opj_set_error_handler"]=asm["_opj_set_error_handler"];var _opj_image_tile_create=Module["_opj_image_tile_create"]=asm["_opj_image_tile_create"];var _opj_end_decompress=Module["_opj_end_decompress"]=asm["_opj_end_decompress"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _opj_stream_set_seek_function=Module["_opj_stream_set_seek_function"]=asm["_opj_stream_set_seek_function"];var _opj_decode=Module["_opj_decode"]=asm["_opj_decode"];var _opj_set_decoded_resolution_factor=Module["_opj_set_decoded_resolution_factor"]=asm["_opj_set_decoded_resolution_factor"];var _opj_stream_create_default_file_stream=Module["_opj_stream_create_default_file_stream"]=asm["_opj_stream_create_default_file_stream"];var _opj_set_default_decoder_parameters=Module["_opj_set_default_decoder_parameters"]=asm["_opj_set_default_decoder_parameters"];var _bitshift64Ashr=Module["_bitshift64Ashr"]=asm["_bitshift64Ashr"];var _opj_get_decoded_tile=Module["_opj_get_decoded_tile"]=asm["_opj_get_decoded_tile"];var _memset=Module["_memset"]=asm["_memset"];var _opj_version=Module["_opj_version"]=asm["_opj_version"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _opj_destroy_cstr_index=Module["_opj_destroy_cstr_index"]=asm["_opj_destroy_cstr_index"];var _opj_stream_set_user_data_length=Module["_opj_stream_set_user_data_length"]=asm["_opj_stream_set_user_data_length"];var _opj_get_cstr_index=Module["_opj_get_cstr_index"]=asm["_opj_get_cstr_index"];var _opj_image_destroy=Module["_opj_image_destroy"]=asm["_opj_image_destroy"];var _opj_stream_create_file_stream=Module["_opj_stream_create_file_stream"]=asm["_opj_stream_create_file_stream"];var _opj_setup_encoder=Module["_opj_setup_encoder"]=asm["_opj_setup_encoder"];var _opj_stream_default_create=Module["_opj_stream_default_create"]=asm["_opj_stream_default_create"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _opj_stream_create=Module["_opj_stream_create"]=asm["_opj_stream_create"];var _jp2_version=Module["_jp2_version"]=asm["_jp2_version"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _opj_stream_set_skip_function=Module["_opj_stream_set_skip_function"]=asm["_opj_stream_set_skip_function"];var _opj_encode=Module["_opj_encode"]=asm["_opj_encode"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _opj_get_cstr_info=Module["_opj_get_cstr_info"]=asm["_opj_get_cstr_info"];var _opj_set_default_encoder_parameters=Module["_opj_set_default_encoder_parameters"]=asm["_opj_set_default_encoder_parameters"];var _opj_set_decode_area=Module["_opj_set_decode_area"]=asm["_opj_set_decode_area"];var _opj_stream_set_write_function=Module["_opj_stream_set_write_function"]=asm["_opj_stream_set_write_function"];var _opj_dump_codec=Module["_opj_dump_codec"]=asm["_opj_dump_codec"];var _opj_read_header=Module["_opj_read_header"]=asm["_opj_read_header"];var _opj_create_decompress=Module["_opj_create_decompress"]=asm["_opj_create_decompress"];var _opj_decode_tile_data=Module["_opj_decode_tile_data"]=asm["_opj_decode_tile_data"];var _opj_set_info_handler=Module["_opj_set_info_handler"]=asm["_opj_set_info_handler"];var _opj_stream_set_user_data=Module["_opj_stream_set_user_data"]=asm["_opj_stream_set_user_data"];var _opj_set_MCT=Module["_opj_set_MCT"]=asm["_opj_set_MCT"];var _free=Module["_free"]=asm["_free"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var _opj_start_compress=Module["_opj_start_compress"]=asm["_opj_start_compress"];var _opj_write_tile=Module["_opj_write_tile"]=asm["_opj_write_tile"];var _opj_setup_decoder=Module["_opj_setup_decoder"]=asm["_opj_setup_decoder"];var _malloc=Module["_malloc"]=asm["_malloc"];var _opj_end_compress=Module["_opj_end_compress"]=asm["_opj_end_compress"];var _opj_destroy_codec=Module["_opj_destroy_codec"]=asm["_opj_destroy_codec"];var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=asm["_emscripten_replace_memory"];var _jp2_decode=Module["_jp2_decode"]=asm["_jp2_decode"];var _opj_stream_create_buffer_stream=Module["_opj_stream_create_buffer_stream"]=asm["_opj_stream_create_buffer_stream"];var _opj_create_compress=Module["_opj_create_compress"]=asm["_opj_create_compress"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_vi=Module["dynCalLine truncated
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return Module;
|
|
||||||
};
|
|
||||||
@@ -25,12 +25,6 @@ Package.onUse(function(api) {
|
|||||||
api.addFiles('client/cornerstoneWADOImageLoader.js', 'client', {
|
api.addFiles('client/cornerstoneWADOImageLoader.js', 'client', {
|
||||||
bare: true
|
bare: true
|
||||||
});
|
});
|
||||||
api.addFiles('client/libopenjpeg.js', 'client', {
|
|
||||||
bare: true
|
|
||||||
});
|
|
||||||
api.addFiles('client/libCharLS.js', 'client', {
|
|
||||||
bare: true
|
|
||||||
});
|
|
||||||
api.addFiles('client/dicomParser.js', 'client', {
|
api.addFiles('client/dicomParser.js', 'client', {
|
||||||
bare: true
|
bare: true
|
||||||
});
|
});
|
||||||
@@ -41,6 +35,9 @@ Package.onUse(function(api) {
|
|||||||
bare: true
|
bare: true
|
||||||
});
|
});
|
||||||
|
|
||||||
|
api.addAssets('public/js/cornerstoneWADOImageLoaderCodecs.es5.js', 'client');
|
||||||
|
api.addAssets('public/js/cornerstoneWADOImageLoaderWebWorker.es5.js', 'client');
|
||||||
|
|
||||||
api.export('cornerstone', 'client');
|
api.export('cornerstone', 'client');
|
||||||
api.export('cornerstoneMath', 'client');
|
api.export('cornerstoneMath', 'client');
|
||||||
api.export('cornerstoneTools', 'client');
|
api.export('cornerstoneTools', 'client');
|
||||||
|
|||||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,861 @@
|
|||||||
|
/*! cornerstone-wado-image-loader - v0.14.1 - 2017-02-11 | (c) 2016 Chris Hafey | https://github.com/chafey/cornerstoneWADOImageLoader */
|
||||||
|
|
||||||
|
cornerstoneWADOImageLoaderWebWorker = {
|
||||||
|
registerTaskHandler : undefined
|
||||||
|
};
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
|
||||||
|
|
||||||
|
// an object of task handlers
|
||||||
|
var taskHandlers = {};
|
||||||
|
|
||||||
|
// Flag to ensure web worker is only initialized once
|
||||||
|
var initialized = false;
|
||||||
|
|
||||||
|
// the configuration object passed in when the web worker manager is initialized
|
||||||
|
var config;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialization function that loads additional web workers and initializes them
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
function initialize(data) {
|
||||||
|
//console.log('web worker initialize ', data.workerIndex);
|
||||||
|
// prevent initialization from happening more than once
|
||||||
|
if(initialized) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// save the config data
|
||||||
|
config = data.config;
|
||||||
|
|
||||||
|
// load any additional web worker tasks
|
||||||
|
if(data.config.webWorkerTaskPaths) {
|
||||||
|
for(var i=0; i < data.config.webWorkerTaskPaths.length; i++) {
|
||||||
|
self.importScripts(data.config.webWorkerTaskPaths[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// initialize each task handler
|
||||||
|
Object.keys(taskHandlers).forEach(function(key) {
|
||||||
|
taskHandlers[key].initialize(config.taskConfiguration);
|
||||||
|
});
|
||||||
|
|
||||||
|
// tell main ui thread that we have completed initialization
|
||||||
|
self.postMessage({
|
||||||
|
taskType: 'initialize',
|
||||||
|
status: 'success',
|
||||||
|
result: {
|
||||||
|
},
|
||||||
|
workerIndex: data.workerIndex
|
||||||
|
});
|
||||||
|
|
||||||
|
initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function exposed to web worker tasks to register themselves
|
||||||
|
* @param taskHandler
|
||||||
|
*/
|
||||||
|
cornerstoneWADOImageLoaderWebWorker.registerTaskHandler = function(taskHandler) {
|
||||||
|
if(taskHandlers[taskHandler.taskType]) {
|
||||||
|
console.log('attempt to register duplicate task handler "', taskHandler.taskType, '"');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
taskHandlers[taskHandler.taskType] = taskHandler;
|
||||||
|
if(initialized) {
|
||||||
|
taskHandler.initialize(config.taskConfiguration);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to load a new web worker task with updated configuration
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
function loadWebWorkerTask(data) {
|
||||||
|
config = data.config;
|
||||||
|
self.importScripts(data.sourcePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Web worker message handler - dispatches messages to the registered task handlers
|
||||||
|
* @param msg
|
||||||
|
*/
|
||||||
|
self.onmessage = function(msg) {
|
||||||
|
//console.log('web worker onmessage', msg.data);
|
||||||
|
|
||||||
|
// handle initialize message
|
||||||
|
if(msg.data.taskType === 'initialize') {
|
||||||
|
initialize(msg.data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle loadWebWorkerTask message
|
||||||
|
if(msg.data.taskType === 'loadWebWorkerTask') {
|
||||||
|
loadWebWorkerTask(msg.data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// dispatch the message if there is a handler registered for it
|
||||||
|
if(taskHandlers[msg.data.taskType]) {
|
||||||
|
taskHandlers[msg.data.taskType].handler(msg.data, function(result, transferList) {
|
||||||
|
self.postMessage({
|
||||||
|
taskType: msg.data.taskType,
|
||||||
|
status: 'success',
|
||||||
|
result: result,
|
||||||
|
workerIndex: msg.data.workerIndex
|
||||||
|
}, transferList);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// not task handler registered - send a failure message back to ui thread
|
||||||
|
console.log('no task handler for ', msg.data.taskType);
|
||||||
|
console.log(taskHandlers);
|
||||||
|
self.postMessage({
|
||||||
|
taskType: msg.data.taskType,
|
||||||
|
status: 'failed - no task handler registered',
|
||||||
|
workerIndex: msg.data.workerIndex
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
}());
|
||||||
|
|
||||||
|
cornerstoneWADOImageLoader = {};
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
|
||||||
|
// flag to ensure codecs are loaded only once
|
||||||
|
var codecsLoaded = false;
|
||||||
|
|
||||||
|
// the configuration object for the decodeTask
|
||||||
|
var decodeConfig;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to control loading and initializing the codecs
|
||||||
|
* @param config
|
||||||
|
*/
|
||||||
|
function loadCodecs(config) {
|
||||||
|
// prevent loading codecs more than once
|
||||||
|
if (codecsLoaded) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load the codecs
|
||||||
|
//console.time('loadCodecs');
|
||||||
|
self.importScripts(config.decodeTask.codecsPath);
|
||||||
|
codecsLoaded = true;
|
||||||
|
//console.timeEnd('loadCodecs');
|
||||||
|
|
||||||
|
// Initialize the codecs
|
||||||
|
if (config.decodeTask.initializeCodecsOnStartup) {
|
||||||
|
//console.time('initializeCodecs');
|
||||||
|
cornerstoneWADOImageLoader.initializeJPEG2000(config.decodeTask);
|
||||||
|
cornerstoneWADOImageLoader.initializeJPEGLS(config.decodeTask);
|
||||||
|
//console.timeEnd('initializeCodecs');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Task initialization function
|
||||||
|
*/
|
||||||
|
function decodeTaskInitialize(config) {
|
||||||
|
decodeConfig = config;
|
||||||
|
if (config.decodeTask.loadCodecsOnStartup) {
|
||||||
|
loadCodecs(config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function calculateMinMax(imageFrame) {
|
||||||
|
if (imageFrame.smallestPixelValue !== undefined && imageFrame.largestPixelValue !== undefined) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var minMax = cornerstoneWADOImageLoader.getMinMax(imageFrame.pixelData);
|
||||||
|
imageFrame.smallestPixelValue = minMax.min;
|
||||||
|
imageFrame.largestPixelValue = minMax.max;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Task handler function
|
||||||
|
*/
|
||||||
|
function decodeTaskHandler(data, doneCallback) {
|
||||||
|
// Load the codecs if they aren't already loaded
|
||||||
|
loadCodecs(decodeConfig);
|
||||||
|
|
||||||
|
var imageFrame = data.data.imageFrame;
|
||||||
|
|
||||||
|
// convert pixel data from ArrayBuffer to Uint8Array since web workers support passing ArrayBuffers but
|
||||||
|
// not typed arrays
|
||||||
|
var pixelData = new Uint8Array(data.data.pixelData);
|
||||||
|
|
||||||
|
cornerstoneWADOImageLoader.decodeImageFrame(
|
||||||
|
imageFrame,
|
||||||
|
data.data.transferSyntax,
|
||||||
|
pixelData,
|
||||||
|
decodeConfig.decodeTask,
|
||||||
|
data.data.options);
|
||||||
|
|
||||||
|
calculateMinMax(imageFrame);
|
||||||
|
|
||||||
|
// convert from TypedArray to ArrayBuffer since web workers support passing ArrayBuffers but not
|
||||||
|
// typed arrays
|
||||||
|
imageFrame.pixelData = imageFrame.pixelData.buffer;
|
||||||
|
|
||||||
|
// invoke the callback with our result and pass the pixelData in the transferList to move it to
|
||||||
|
// UI thread without making a copy
|
||||||
|
doneCallback(imageFrame, [imageFrame.pixelData]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// register our task
|
||||||
|
cornerstoneWADOImageLoaderWebWorker.registerTaskHandler({
|
||||||
|
taskType: 'decodeTask',
|
||||||
|
handler: decodeTaskHandler,
|
||||||
|
initialize: decodeTaskInitialize
|
||||||
|
});
|
||||||
|
}());
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
(function (cornerstoneWADOImageLoader) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function decodeImageFrame(imageFrame, transferSyntax, pixelData, decodeConfig, options) {
|
||||||
|
var start = new Date().getTime();
|
||||||
|
|
||||||
|
// Implicit VR Little Endian
|
||||||
|
if(transferSyntax === "1.2.840.10008.1.2") {
|
||||||
|
imageFrame = cornerstoneWADOImageLoader.decodeLittleEndian(imageFrame, pixelData);
|
||||||
|
}
|
||||||
|
// Explicit VR Little Endian
|
||||||
|
else if(transferSyntax === "1.2.840.10008.1.2.1") {
|
||||||
|
imageFrame = cornerstoneWADOImageLoader.decodeLittleEndian(imageFrame, pixelData);
|
||||||
|
}
|
||||||
|
// Explicit VR Big Endian (retired)
|
||||||
|
else if (transferSyntax === "1.2.840.10008.1.2.2" ) {
|
||||||
|
imageFrame = cornerstoneWADOImageLoader.decodeBigEndian(imageFrame, pixelData);
|
||||||
|
}
|
||||||
|
// Deflate transfer syntax (deflated by dicomParser)
|
||||||
|
else if(transferSyntax === '1.2.840.10008.1.2.1.99') {
|
||||||
|
imageFrame = cornerstoneWADOImageLoader.decodeLittleEndian(imageFrame, pixelData);
|
||||||
|
}
|
||||||
|
// RLE Lossless
|
||||||
|
else if (transferSyntax === "1.2.840.10008.1.2.5" )
|
||||||
|
{
|
||||||
|
imageFrame = cornerstoneWADOImageLoader.decodeRLE(imageFrame, pixelData);
|
||||||
|
}
|
||||||
|
// JPEG Baseline lossy process 1 (8 bit)
|
||||||
|
else if (transferSyntax === "1.2.840.10008.1.2.4.50")
|
||||||
|
{
|
||||||
|
imageFrame = cornerstoneWADOImageLoader.decodeJPEGBaseline(imageFrame, pixelData);
|
||||||
|
}
|
||||||
|
// JPEG Baseline lossy process 2 & 4 (12 bit)
|
||||||
|
else if (transferSyntax === "1.2.840.10008.1.2.4.51")
|
||||||
|
{
|
||||||
|
imageFrame = cornerstoneWADOImageLoader.decodeJPEGBaseline(imageFrame, pixelData);
|
||||||
|
}
|
||||||
|
// JPEG Lossless, Nonhierarchical (Processes 14)
|
||||||
|
else if (transferSyntax === "1.2.840.10008.1.2.4.57")
|
||||||
|
{
|
||||||
|
imageFrame = cornerstoneWADOImageLoader.decodeJPEGLossless(imageFrame, pixelData);
|
||||||
|
}
|
||||||
|
// JPEG Lossless, Nonhierarchical (Processes 14 [Selection 1])
|
||||||
|
else if (transferSyntax === "1.2.840.10008.1.2.4.70" )
|
||||||
|
{
|
||||||
|
imageFrame = cornerstoneWADOImageLoader.decodeJPEGLossless(imageFrame, pixelData);
|
||||||
|
}
|
||||||
|
// JPEG-LS Lossless Image Compression
|
||||||
|
else if (transferSyntax === "1.2.840.10008.1.2.4.80" )
|
||||||
|
{
|
||||||
|
imageFrame = cornerstoneWADOImageLoader.decodeJPEGLS(imageFrame, pixelData);
|
||||||
|
}
|
||||||
|
// JPEG-LS Lossy (Near-Lossless) Image Compression
|
||||||
|
else if (transferSyntax === "1.2.840.10008.1.2.4.81" )
|
||||||
|
{
|
||||||
|
imageFrame = cornerstoneWADOImageLoader.decodeJPEGLS(imageFrame, pixelData);
|
||||||
|
}
|
||||||
|
// JPEG 2000 Lossless
|
||||||
|
else if (transferSyntax === "1.2.840.10008.1.2.4.90")
|
||||||
|
{
|
||||||
|
imageFrame = cornerstoneWADOImageLoader.decodeJPEG2000(imageFrame, pixelData, decodeConfig, options);
|
||||||
|
}
|
||||||
|
// JPEG 2000 Lossy
|
||||||
|
else if (transferSyntax === "1.2.840.10008.1.2.4.91")
|
||||||
|
{
|
||||||
|
imageFrame = cornerstoneWADOImageLoader.decodeJPEG2000(imageFrame, pixelData, decodeConfig, options);
|
||||||
|
}
|
||||||
|
/* Don't know if these work...
|
||||||
|
// JPEG 2000 Part 2 Multicomponent Image Compression (Lossless Only)
|
||||||
|
else if(transferSyntax === "1.2.840.10008.1.2.4.92")
|
||||||
|
{
|
||||||
|
return cornerstoneWADOImageLoader.decodeJPEG2000(dataSet, frame);
|
||||||
|
}
|
||||||
|
// JPEG 2000 Part 2 Multicomponent Image Compression
|
||||||
|
else if(transferSyntax === "1.2.840.10008.1.2.4.93")
|
||||||
|
{
|
||||||
|
return cornerstoneWADOImageLoader.decodeJPEG2000(dataSet, frame);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(console && console.log) {
|
||||||
|
console.log("Image cannot be decoded due to Unsupported transfer syntax " + transferSyntax);
|
||||||
|
}
|
||||||
|
throw "no decoder for transfer syntax " + transferSyntax;
|
||||||
|
}
|
||||||
|
|
||||||
|
var end = new Date().getTime();
|
||||||
|
imageFrame.decodeTimeInMS = end - start;
|
||||||
|
|
||||||
|
return imageFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
cornerstoneWADOImageLoader.decodeImageFrame = decodeImageFrame;
|
||||||
|
}(cornerstoneWADOImageLoader));
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
(function (cornerstoneWADOImageLoader) {
|
||||||
|
|
||||||
|
function swap16(val) {
|
||||||
|
return ((val & 0xFF) << 8)
|
||||||
|
| ((val >> 8) & 0xFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function decodeBigEndian(imageFrame, pixelData) {
|
||||||
|
if(imageFrame.bitsAllocated === 16) {
|
||||||
|
var arrayBuffer = pixelData.buffer;
|
||||||
|
var offset = pixelData.byteOffset;
|
||||||
|
var length = pixelData.length;
|
||||||
|
// if pixel data is not aligned on even boundary, shift it so we can create the 16 bit array
|
||||||
|
// buffers on it
|
||||||
|
if(offset % 2) {
|
||||||
|
arrayBuffer = arrayBuffer.slice(offset);
|
||||||
|
offset = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(imageFrame.pixelRepresentation === 0) {
|
||||||
|
imageFrame.pixelData = new Uint16Array(arrayBuffer, offset, length / 2);
|
||||||
|
} else {
|
||||||
|
imageFrame.pixelData = new Int16Array(arrayBuffer, offset, length / 2);
|
||||||
|
}
|
||||||
|
// Do the byte swap
|
||||||
|
for(var i=0; i < imageFrame.pixelData.length; i++) {
|
||||||
|
imageFrame[i] = swap16(imageFrame.pixelData[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if(imageFrame.bitsAllocated === 8) {
|
||||||
|
imageFrame.pixelData = pixelData;
|
||||||
|
}
|
||||||
|
return imageFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
// module exports
|
||||||
|
cornerstoneWADOImageLoader.decodeBigEndian = decodeBigEndian;
|
||||||
|
|
||||||
|
}(cornerstoneWADOImageLoader));
|
||||||
|
(function (cornerstoneWADOImageLoader) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function decodeJpx(imageFrame, pixelData) {
|
||||||
|
|
||||||
|
var jpxImage = new JpxImage();
|
||||||
|
jpxImage.parse(pixelData);
|
||||||
|
|
||||||
|
var tileCount = jpxImage.tiles.length;
|
||||||
|
if(tileCount !== 1) {
|
||||||
|
throw 'JPEG2000 decoder returned a tileCount of ' + tileCount + ', when 1 is expected';
|
||||||
|
}
|
||||||
|
|
||||||
|
imageFrame.columns = jpxImage.width;
|
||||||
|
imageFrame.rows = jpxImage.height;
|
||||||
|
imageFrame.pixelData = jpxImage.tiles[0].items;
|
||||||
|
return imageFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
var openJPEG;
|
||||||
|
|
||||||
|
function decodeOpenJPEG(data, bytesPerPixel, signed) {
|
||||||
|
var dataPtr = openJPEG._malloc(data.length);
|
||||||
|
openJPEG.writeArrayToMemory(data, dataPtr);
|
||||||
|
|
||||||
|
// create param outpout
|
||||||
|
var imagePtrPtr=openJPEG._malloc(4);
|
||||||
|
var imageSizePtr=openJPEG._malloc(4);
|
||||||
|
var imageSizeXPtr=openJPEG._malloc(4);
|
||||||
|
var imageSizeYPtr=openJPEG._malloc(4);
|
||||||
|
var imageSizeCompPtr=openJPEG._malloc(4);
|
||||||
|
|
||||||
|
var t0 = Date.now();
|
||||||
|
var ret = openJPEG.ccall('jp2_decode','number', ['number', 'number', 'number', 'number', 'number', 'number', 'number'],
|
||||||
|
[dataPtr, data.length, imagePtrPtr, imageSizePtr, imageSizeXPtr, imageSizeYPtr, imageSizeCompPtr]);
|
||||||
|
// add num vomp..etc
|
||||||
|
if(ret !== 0){
|
||||||
|
console.log('[opj_decode] decoding failed!');
|
||||||
|
openJPEG._free(dataPtr);
|
||||||
|
openJPEG._free(openJPEG.getValue(imagePtrPtr, '*'));
|
||||||
|
openJPEG._free(imageSizeXPtr);
|
||||||
|
openJPEG._free(imageSizeYPtr);
|
||||||
|
openJPEG._free(imageSizePtr);
|
||||||
|
openJPEG._free(imageSizeCompPtr);
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
var imagePtr = openJPEG.getValue(imagePtrPtr, '*')
|
||||||
|
|
||||||
|
var image = {
|
||||||
|
length : openJPEG.getValue(imageSizePtr,'i32'),
|
||||||
|
sx : openJPEG.getValue(imageSizeXPtr,'i32'),
|
||||||
|
sy : openJPEG.getValue(imageSizeYPtr,'i32'),
|
||||||
|
nbChannels : openJPEG.getValue(imageSizeCompPtr,'i32'), // hard coded for now
|
||||||
|
perf_timetodecode : undefined,
|
||||||
|
pixelData : undefined
|
||||||
|
};
|
||||||
|
|
||||||
|
// Copy the data from the EMSCRIPTEN heap into the correct type array
|
||||||
|
var length = image.sx*image.sy*image.nbChannels;
|
||||||
|
var src32 = new Int32Array(openJPEG.HEAP32.buffer, imagePtr, length);
|
||||||
|
if(bytesPerPixel === 1) {
|
||||||
|
if(Uint8Array.from) {
|
||||||
|
image.pixelData = Uint8Array.from(src32);
|
||||||
|
} else {
|
||||||
|
image.pixelData = new Uint8Array(length);
|
||||||
|
for(var i=0; i < length; i++) {
|
||||||
|
image.pixelData[i] = src32[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (signed) {
|
||||||
|
if(Int16Array.from) {
|
||||||
|
image.pixelData = Int16Array.from(src32);
|
||||||
|
} else {
|
||||||
|
image.pixelData = new Int16Array(length);
|
||||||
|
for(var i=0; i < length; i++) {
|
||||||
|
image.pixelData[i] = src32[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(Uint16Array.from) {
|
||||||
|
image.pixelData = Uint16Array.from(src32);
|
||||||
|
} else {
|
||||||
|
image.pixelData = new Uint16Array(length);
|
||||||
|
for(var i=0; i < length; i++) {
|
||||||
|
image.pixelData[i] = src32[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var t1 = Date.now();
|
||||||
|
image.perf_timetodecode = t1-t0;
|
||||||
|
|
||||||
|
// free
|
||||||
|
openJPEG._free(dataPtr);
|
||||||
|
openJPEG._free(imagePtrPtr);
|
||||||
|
openJPEG._free(imagePtr);
|
||||||
|
openJPEG._free(imageSizePtr);
|
||||||
|
openJPEG._free(imageSizeXPtr);
|
||||||
|
openJPEG._free(imageSizeYPtr);
|
||||||
|
openJPEG._free(imageSizeCompPtr);
|
||||||
|
|
||||||
|
return image;
|
||||||
|
}
|
||||||
|
|
||||||
|
function decodeOpenJpeg2000(imageFrame, pixelData) {
|
||||||
|
var bytesPerPixel = imageFrame.bitsAllocated <= 8 ? 1 : 2;
|
||||||
|
var signed = imageFrame.pixelRepresentation === 1;
|
||||||
|
|
||||||
|
var image = decodeOpenJPEG(pixelData, bytesPerPixel, signed);
|
||||||
|
|
||||||
|
imageFrame.columns = image.sx;
|
||||||
|
imageFrame.rows = image.sy;
|
||||||
|
imageFrame.pixelData = image.pixelData;
|
||||||
|
if(image.nbChannels > 1) {
|
||||||
|
imageFrame.photometricInterpretation = "RGB";
|
||||||
|
}
|
||||||
|
return imageFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
function initializeJPEG2000(decodeConfig) {
|
||||||
|
// check to make sure codec is loaded
|
||||||
|
if(!decodeConfig.usePDFJS) {
|
||||||
|
if(typeof OpenJPEG === 'undefined') {
|
||||||
|
throw 'OpenJPEG decoder not loaded';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!openJPEG) {
|
||||||
|
openJPEG = OpenJPEG();
|
||||||
|
if (!openJPEG || !openJPEG._jp2_decode) {
|
||||||
|
throw 'OpenJPEG failed to initialize';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function decodeJPEG2000(imageFrame, pixelData, decodeConfig, options)
|
||||||
|
{
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
initializeJPEG2000(decodeConfig);
|
||||||
|
|
||||||
|
if(options.usePDFJS || decodeConfig.usePDFJS) {
|
||||||
|
// OHIF image-JPEG2000 https://github.com/OHIF/image-JPEG2000
|
||||||
|
//console.log('PDFJS')
|
||||||
|
return decodeJpx(imageFrame, pixelData);
|
||||||
|
} else {
|
||||||
|
// OpenJPEG2000 https://github.com/jpambrun/openjpeg
|
||||||
|
//console.log('OpenJPEG')
|
||||||
|
return decodeOpenJpeg2000(imageFrame, pixelData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cornerstoneWADOImageLoader.decodeJPEG2000 = decodeJPEG2000;
|
||||||
|
cornerstoneWADOImageLoader.initializeJPEG2000 = initializeJPEG2000;
|
||||||
|
|
||||||
|
}(cornerstoneWADOImageLoader));
|
||||||
|
(function (cornerstoneWADOImageLoader) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function decodeJPEGBaseline(imageFrame, pixelData)
|
||||||
|
{
|
||||||
|
// check to make sure codec is loaded
|
||||||
|
if(typeof JpegImage === 'undefined') {
|
||||||
|
throw 'No JPEG Baseline decoder loaded';
|
||||||
|
}
|
||||||
|
var jpeg = new JpegImage();
|
||||||
|
jpeg.parse(pixelData);
|
||||||
|
if(imageFrame.bitsAllocated === 8) {
|
||||||
|
imageFrame.pixelData = jpeg.getData(imageFrame.columns, imageFrame.rows);
|
||||||
|
return imageFrame;
|
||||||
|
}
|
||||||
|
else if(imageFrame.bitsAllocated === 16) {
|
||||||
|
imageFrame.pixelData = jpeg.getData16(imageFrame.columns, imageFrame.rows);
|
||||||
|
return imageFrame;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cornerstoneWADOImageLoader.decodeJPEGBaseline = decodeJPEGBaseline;
|
||||||
|
}(cornerstoneWADOImageLoader));
|
||||||
|
"use strict";
|
||||||
|
(function (cornerstoneWADOImageLoader) {
|
||||||
|
|
||||||
|
function decodeJPEGLossless(imageFrame, pixelData) {
|
||||||
|
// check to make sure codec is loaded
|
||||||
|
if(typeof jpeg === 'undefined' ||
|
||||||
|
typeof jpeg.lossless === 'undefined' ||
|
||||||
|
typeof jpeg.lossless.Decoder === 'undefined') {
|
||||||
|
throw 'No JPEG Lossless decoder loaded';
|
||||||
|
}
|
||||||
|
|
||||||
|
var byteOutput = imageFrame.bitsAllocated <= 8 ? 1 : 2;
|
||||||
|
//console.time('jpeglossless');
|
||||||
|
var buffer = pixelData.buffer;
|
||||||
|
var decoder = new jpeg.lossless.Decoder();
|
||||||
|
var decompressedData = decoder.decode(buffer, buffer.byteOffset, buffer.length, byteOutput);
|
||||||
|
//console.timeEnd('jpeglossless');
|
||||||
|
if (imageFrame.pixelRepresentation === 0) {
|
||||||
|
if (imageFrame.bitsAllocated === 16) {
|
||||||
|
imageFrame.pixelData = new Uint16Array(decompressedData.buffer);
|
||||||
|
return imageFrame;
|
||||||
|
} else {
|
||||||
|
// untested!
|
||||||
|
imageFrame.pixelData = new Uint8Array(decompressedData.buffer);
|
||||||
|
return imageFrame;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
imageFrame.pixelData = new Int16Array(decompressedData.buffer);
|
||||||
|
return imageFrame;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// module exports
|
||||||
|
cornerstoneWADOImageLoader.decodeJPEGLossless = decodeJPEGLossless;
|
||||||
|
|
||||||
|
}(cornerstoneWADOImageLoader));
|
||||||
|
"use strict";
|
||||||
|
(function (cornerstoneWADOImageLoader) {
|
||||||
|
|
||||||
|
|
||||||
|
var charLS;
|
||||||
|
|
||||||
|
function jpegLSDecode(data, isSigned) {
|
||||||
|
|
||||||
|
// prepare input parameters
|
||||||
|
var dataPtr = charLS._malloc(data.length);
|
||||||
|
charLS.writeArrayToMemory(data, dataPtr);
|
||||||
|
|
||||||
|
// prepare output parameters
|
||||||
|
var imagePtrPtr=charLS._malloc(4);
|
||||||
|
var imageSizePtr=charLS._malloc(4);
|
||||||
|
var widthPtr=charLS._malloc(4);
|
||||||
|
var heightPtr=charLS._malloc(4);
|
||||||
|
var bitsPerSamplePtr=charLS._malloc(4);
|
||||||
|
var stridePtr=charLS._malloc(4);
|
||||||
|
var allowedLossyErrorPtr =charLS._malloc(4);
|
||||||
|
var componentsPtr=charLS._malloc(4);
|
||||||
|
var interleaveModePtr=charLS._malloc(4);
|
||||||
|
|
||||||
|
// Decode the image
|
||||||
|
var result = charLS.ccall(
|
||||||
|
'jpegls_decode',
|
||||||
|
'number',
|
||||||
|
['number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number'],
|
||||||
|
[dataPtr, data.length, imagePtrPtr, imageSizePtr, widthPtr, heightPtr, bitsPerSamplePtr, stridePtr, componentsPtr, allowedLossyErrorPtr, interleaveModePtr]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Extract result values into object
|
||||||
|
var image = {
|
||||||
|
result : result,
|
||||||
|
width : charLS.getValue(widthPtr,'i32'),
|
||||||
|
height : charLS.getValue(heightPtr,'i32'),
|
||||||
|
bitsPerSample : charLS.getValue(bitsPerSamplePtr,'i32'),
|
||||||
|
stride : charLS.getValue(stridePtr,'i32'),
|
||||||
|
components : charLS.getValue(componentsPtr, 'i32'),
|
||||||
|
allowedLossyError : charLS.getValue(allowedLossyErrorPtr, 'i32'),
|
||||||
|
interleaveMode: charLS.getValue(interleaveModePtr, 'i32'),
|
||||||
|
pixelData: undefined
|
||||||
|
};
|
||||||
|
|
||||||
|
// Copy image from emscripten heap into appropriate array buffer type
|
||||||
|
var imagePtr = charLS.getValue(imagePtrPtr, '*');
|
||||||
|
if(image.bitsPerSample <= 8) {
|
||||||
|
image.pixelData = new Uint8Array(image.width * image.height * image.components);
|
||||||
|
image.pixelData.set(new Uint8Array(charLS.HEAP8.buffer, imagePtr, image.pixelData.length));
|
||||||
|
} else {
|
||||||
|
// I have seen 16 bit signed images, but I don't know if 16 bit unsigned is valid, hoping to get
|
||||||
|
// answer here:
|
||||||
|
// https://github.com/team-charls/charls/issues/14
|
||||||
|
if(isSigned) {
|
||||||
|
image.pixelData = new Int16Array(image.width * image.height * image.components);
|
||||||
|
image.pixelData.set(new Int16Array(charLS.HEAP16.buffer, imagePtr, image.pixelData.length));
|
||||||
|
} else {
|
||||||
|
image.pixelData = new Uint16Array(image.width * image.height * image.components);
|
||||||
|
image.pixelData.set(new Uint16Array(charLS.HEAP16.buffer, imagePtr, image.pixelData.length));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// free memory and return image object
|
||||||
|
charLS._free(dataPtr);
|
||||||
|
charLS._free(imagePtr);
|
||||||
|
charLS._free(imagePtrPtr);
|
||||||
|
charLS._free(imageSizePtr);
|
||||||
|
charLS._free(widthPtr);
|
||||||
|
charLS._free(heightPtr);
|
||||||
|
charLS._free(bitsPerSamplePtr);
|
||||||
|
charLS._free(stridePtr);
|
||||||
|
charLS._free(componentsPtr);
|
||||||
|
charLS._free(interleaveModePtr);
|
||||||
|
|
||||||
|
return image;
|
||||||
|
}
|
||||||
|
|
||||||
|
function initializeJPEGLS() {
|
||||||
|
// check to make sure codec is loaded
|
||||||
|
if(typeof CharLS === 'undefined') {
|
||||||
|
throw 'No JPEG-LS decoder loaded';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try to initialize CharLS
|
||||||
|
// CharLS https://github.com/chafey/charls
|
||||||
|
if(!charLS) {
|
||||||
|
charLS = CharLS();
|
||||||
|
if(!charLS || !charLS._jpegls_decode) {
|
||||||
|
throw 'JPEG-LS failed to initialize';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function decodeJPEGLS(imageFrame, pixelData)
|
||||||
|
{
|
||||||
|
initializeJPEGLS();
|
||||||
|
|
||||||
|
var image = jpegLSDecode(pixelData, imageFrame.pixelRepresentation === 1);
|
||||||
|
//console.log(image);
|
||||||
|
|
||||||
|
// throw error if not success or too much data
|
||||||
|
if(image.result !== 0 && image.result !== 6) {
|
||||||
|
throw 'JPEG-LS decoder failed to decode frame (error code ' + image.result + ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
imageFrame.columns = image.width;
|
||||||
|
imageFrame.rows = image.height;
|
||||||
|
imageFrame.pixelData = image.pixelData;
|
||||||
|
return imageFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
// module exports
|
||||||
|
cornerstoneWADOImageLoader.decodeJPEGLS = decodeJPEGLS;
|
||||||
|
cornerstoneWADOImageLoader.initializeJPEGLS = initializeJPEGLS;
|
||||||
|
|
||||||
|
}(cornerstoneWADOImageLoader));
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
(function (cornerstoneWADOImageLoader) {
|
||||||
|
|
||||||
|
function decodeLittleEndian(imageFrame, pixelData) {
|
||||||
|
if(imageFrame.bitsAllocated === 16) {
|
||||||
|
var arrayBuffer = pixelData.buffer;
|
||||||
|
var offset = pixelData.byteOffset;
|
||||||
|
var length = pixelData.length;
|
||||||
|
// if pixel data is not aligned on even boundary, shift it so we can create the 16 bit array
|
||||||
|
// buffers on it
|
||||||
|
if(offset % 2) {
|
||||||
|
arrayBuffer = arrayBuffer.slice(offset);
|
||||||
|
offset = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(imageFrame.pixelRepresentation === 0) {
|
||||||
|
imageFrame.pixelData = new Uint16Array(arrayBuffer, offset, length / 2);
|
||||||
|
} else {
|
||||||
|
imageFrame.pixelData = new Int16Array(arrayBuffer, offset, length / 2);
|
||||||
|
}
|
||||||
|
} else if(imageFrame.bitsAllocated === 8) {
|
||||||
|
imageFrame.pixelData = pixelData;
|
||||||
|
}
|
||||||
|
return imageFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
// module exports
|
||||||
|
cornerstoneWADOImageLoader.decodeLittleEndian = decodeLittleEndian;
|
||||||
|
|
||||||
|
}(cornerstoneWADOImageLoader));
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
(function (cornerstoneWADOImageLoader) {
|
||||||
|
|
||||||
|
function decodeRLE(imageFrame, pixelData) {
|
||||||
|
|
||||||
|
if(imageFrame.bitsAllocated === 8) {
|
||||||
|
return decode8(imageFrame, pixelData);
|
||||||
|
} else if( imageFrame.bitsAllocated === 16) {
|
||||||
|
return decode16(imageFrame, pixelData);
|
||||||
|
} else {
|
||||||
|
throw 'unsupported pixel format for RLE'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function decode8(imageFrame, pixelData ) {
|
||||||
|
var frameData = pixelData;
|
||||||
|
var frameSize = imageFrame.rows * imageFrame.columns;
|
||||||
|
var outFrame = new ArrayBuffer(frameSize*imageFrame.samplesPerPixel);
|
||||||
|
var header=new DataView(frameData.buffer, frameData.byteOffset);
|
||||||
|
var data=new DataView( frameData.buffer, frameData.byteOffset );
|
||||||
|
var out=new DataView( outFrame );
|
||||||
|
|
||||||
|
var outIndex=0;
|
||||||
|
var numSegments = header.getInt32(0,true);
|
||||||
|
for( var s=0 ; s < numSegments ; ++s ) {
|
||||||
|
outIndex = s;
|
||||||
|
|
||||||
|
var inIndex=header.getInt32( (s+1)*4,true);
|
||||||
|
var maxIndex=header.getInt32( (s+2)*4,true);
|
||||||
|
if( maxIndex===0 )
|
||||||
|
maxIndex = frameData.length;
|
||||||
|
|
||||||
|
var endOfSegment = frameSize * numSegments;
|
||||||
|
|
||||||
|
while( inIndex < maxIndex ) {
|
||||||
|
var n=data.getInt8(inIndex++);
|
||||||
|
if( n >=0 && n <=127 ) {
|
||||||
|
// copy n bytes
|
||||||
|
for( var i=0 ; i < n+1 && outIndex < endOfSegment; ++i ) {
|
||||||
|
out.setInt8(outIndex, data.getInt8(inIndex++));
|
||||||
|
outIndex+=imageFrame.samplesPerPixel;
|
||||||
|
}
|
||||||
|
} else if( n<= -1 && n>=-127 ) {
|
||||||
|
var value=data.getInt8(inIndex++);
|
||||||
|
// run of n bytes
|
||||||
|
for( var j=0 ; j < -n+1 && outIndex < endOfSegment; ++j ) {
|
||||||
|
out.setInt8(outIndex, value );
|
||||||
|
outIndex+=imageFrame.samplesPerPixel;
|
||||||
|
}
|
||||||
|
} else if (n===-128)
|
||||||
|
; // do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
imageFrame.pixelData = new Uint8Array(outFrame);
|
||||||
|
return imageFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
function decode16( imageFrame, pixelData ) {
|
||||||
|
var frameData = pixelData;
|
||||||
|
var frameSize = imageFrame.rows * imageFrame.columns;
|
||||||
|
var outFrame = new ArrayBuffer(frameSize*imageFrame.samplesPerPixel*2);
|
||||||
|
|
||||||
|
var header=new DataView(frameData.buffer, frameData.byteOffset);
|
||||||
|
var data=new DataView( frameData.buffer, frameData.byteOffset );
|
||||||
|
var out=new DataView( outFrame );
|
||||||
|
|
||||||
|
var numSegments = header.getInt32(0,true);
|
||||||
|
for( var s=0 ; s < numSegments ; ++s ) {
|
||||||
|
var outIndex=0;
|
||||||
|
var highByte=( s===0 ? 1 : 0);
|
||||||
|
|
||||||
|
var inIndex=header.getInt32( (s+1)*4,true);
|
||||||
|
var maxIndex=header.getInt32( (s+2)*4,true);
|
||||||
|
if( maxIndex===0 )
|
||||||
|
maxIndex = frameData.length;
|
||||||
|
|
||||||
|
while( inIndex < maxIndex ) {
|
||||||
|
var n=data.getInt8(inIndex++);
|
||||||
|
if( n >=0 && n <=127 ) {
|
||||||
|
for( var i=0 ; i < n+1 && outIndex < frameSize ; ++i ) {
|
||||||
|
out.setInt8( (outIndex*2)+highByte, data.getInt8(inIndex++) );
|
||||||
|
outIndex++;
|
||||||
|
}
|
||||||
|
} else if( n<= -1 && n>=-127 ) {
|
||||||
|
var value=data.getInt8(inIndex++);
|
||||||
|
for( var j=0 ; j < -n+1 && outIndex < frameSize ; ++j ) {
|
||||||
|
out.setInt8( (outIndex*2)+highByte, value );
|
||||||
|
outIndex++;
|
||||||
|
}
|
||||||
|
} else if (n===-128)
|
||||||
|
; // do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(imageFrame.pixelRepresentation === 0) {
|
||||||
|
imageFrame.pixelData = new Uint16Array(outFrame);
|
||||||
|
} else {
|
||||||
|
imageFrame.pixelData = new Int16Array(outFrame);
|
||||||
|
}
|
||||||
|
return imageFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
// module exports
|
||||||
|
cornerstoneWADOImageLoader.decodeRLE = decodeRLE;
|
||||||
|
|
||||||
|
}(cornerstoneWADOImageLoader));
|
||||||
|
(function (cornerstoneWADOImageLoader) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function getMinMax(storedPixelData)
|
||||||
|
{
|
||||||
|
// we always calculate the min max values since they are not always
|
||||||
|
// present in DICOM and we don't want to trust them anyway as cornerstone
|
||||||
|
// depends on us providing reliable values for these
|
||||||
|
var min = storedPixelData[0];
|
||||||
|
var max = storedPixelData[0];
|
||||||
|
var storedPixel;
|
||||||
|
var numPixels = storedPixelData.length;
|
||||||
|
for(var index = 1; index < numPixels; index++) {
|
||||||
|
storedPixel = storedPixelData[index];
|
||||||
|
min = Math.min(min, storedPixel);
|
||||||
|
max = Math.max(max, storedPixel);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
min: min,
|
||||||
|
max: max
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// module exports
|
||||||
|
cornerstoneWADOImageLoader.getMinMax = getMinMax;
|
||||||
|
|
||||||
|
}(cornerstoneWADOImageLoader));
|
||||||
|
|
||||||
Reference in new issue
Block a user